แพทเทิร์น
หน้าจอที่ประกอบจากคอมโพเนนต์ในไลบรารี คัดลอกโครงไปปรับใช้ได้ทันที ทุกตัวอย่างเปลี่ยนตามแบรนด์และธีมที่เลือก
เข้าสู่ระบบ
การ์ดเดียวกลางจอบนพื้นของแบรนด์ ปุ่มหลักเต็มความกว้าง ทางเลือกรองอยู่ใต้เส้นคั่น
aswinology
ASWINOLOGY / Lurnelle
เข้าสู่ระบบ
เรียนต่อจากที่ค้างไว้
<div className="ds-canvas" style={{ minHeight: "100dvh", display: "grid", placeItems: "center" }}>
<Card style={{ width: "min(400px, 100%)" }}>
<CardHeader>
<Wordmark />
<CardTitle as="h1">เข้าสู่ระบบ</CardTitle>
<CardDescription>เรียนต่อจากที่ค้างไว้</CardDescription>
</CardHeader>
<CardBody>
<form className="ds-stack" data-gap="md">
<Field label="อีเมล"><Input type="email" autoComplete="email" /></Field>
<Field label="รหัสผ่าน" aside={<ArrowLink href="/reset" subtle plain>ลืมรหัสผ่าน</ArrowLink>}>
<Input type="password" autoComplete="current-password" />
</Field>
<Button type="submit" variant="primary" full>เข้าสู่ระบบ</Button>
<Separator />
<Button variant="outline" full><GoogleLogo />ดำเนินการต่อด้วย Google</Button>
</form>
</CardBody>
</Card>
</div>ตั้งค่าบัญชี
เมนูซ้าย ฟอร์มขวา แบ่งส่วนด้วยหัวข้อและเส้นคั่น ส่วนอันตรายอยู่ล่างสุด
โปรไฟล์
แสดงบนใบประกาศและในชุมชน
สั้นๆ สองสามประโยค
การแจ้งเตือน
ลบบัญชี
ลบข้อมูลการเรียนและใบประกาศทั้งหมด ย้อนกลับไม่ได้
<div className="pattern-settings">
<nav aria-label="ตั้งค่า"><Stack gap="xs">{/* links with aria-current */}</Stack></nav>
<Stack gap="lg">
<section><h2 className="ds-h3">โปรไฟล์</h2>{/* Fields */}</section>
<Separator />
<section><h2 className="ds-h3">การแจ้งเตือน</h2>{/* Switches: apply at once */}</section>
<Separator />
<section><h2 className="ds-h3">ลบบัญชี</h2><Button variant="danger">ลบบัญชี</Button></section>
</Stack>
</div>แคตตาล็อกคอร์ส
ตัวกรองเป็นแท็ก มุมมองเป็น Segmented การ์ดในกริดอัตโนมัติ และเลขหน้าด้านล่าง
<Stack gap="lg">
<Cluster justify="between">
<Cluster role="group" aria-label="กรองตามหัวข้อ">
{topics.map(t => <Tag key={t} pressed={active === t} onClick={() => setActive(t)}>{t}</Tag>)}
</Cluster>
<Segmented name="view" legend="มุมมอง" size="sm" defaultValue="grid" options={…} />
</Cluster>
<Grid min="220px">{courses.map(c => <CourseCard key={c.slug} {...c} />)}</Grid>
<Pagination page={1} total={4} href={p => `?page=${p}`} />
</Stack>พอร์ตโฟลิโอโปรเจกต์
แพทเทิร์นของ ASWINOLOGY° โปสเตอร์หนึ่งใบต่อหนึ่งโปรเจกต์ สลับสีกระดาษให้มีจังหวะ
<Grid min="200px" gap="md">
{projects.map(p => (
<Poster key={p.slug} href={`/projects/${p.slug}`} glyph={p.symbol}
title={p.title} description={p.excerpt} meta={[p.category, p.year]} tint={p.tint} />
))}
</Grid>แพ็กเกจ
แพ็กเกจที่แนะนำใช้การ์ด inverse หนึ่งใบ ราคาแสดงเฉพาะที่ยืนยันแล้ว ราคาด้านล่างเป็นตัวอย่าง
เริ่มต้น
ฟรี
- คอร์สฟรีทั้งหมด
- Quiz และชีตสรุป
- ชุมชนผู้เรียน
รายปีแนะนำ
฿2,990 /ปี
- ทุกคอร์สในคลัง
- Mock test พร้อมรายงานผล
- ใบประกาศนียบัตร
- ถามผู้สอนได้ไม่จำกัด
ปรึกษา
฿900 /45 นาที
- คุยตัวต่อตัวกับอัศวิน
- วางแผนการเรียนหรือพอร์ต
- สรุปหลังคุยทางอีเมล
<div className="pattern-plans">
<Card className="pattern-plan">…</Card>
<Card className="pattern-plan" tone="inverse">…</Card>
<Card className="pattern-plan">…</Card>
</div>แดชบอร์ดผู้เรียน
ตัวเลขสำคัญสามตัว คอร์สที่กำลังเรียน และสถานะว่างที่บอกทางไปต่อ ตัวเลขในตัวอย่างเป็นข้อมูลสมมติ
สวัสดีอีกครั้ง Khun
เหลืออีก 2 บทก็จบสัปดาห์นี้แล้ว
เวลาเรียนสัปดาห์นี้4.2 ชม.+38 นาที เพิ่มขึ้น
บทเรียนที่จบ27+5 เพิ่มขึ้น
คะแนน Mock ล่าสุด72-4 ลดลงTGAT ชุด 2
เรียนต่อ
Agentic Workflows58%
Lingua Rush83%
ยังไม่มีงานที่ต้องส่ง
เมื่อผู้สอนสั่งงาน งานจะมาอยู่ที่นี่
<Grid min="180px">
<Card><CardBody><Stat label="เวลาเรียนสัปดาห์นี้" value="4 ชม. 10 นาที" delta="+38 นาที" trend="up" /></CardBody></Card>
…
</Grid>
<Card>
<CardHeader><CardTitle>เรียนต่อ</CardTitle></CardHeader>
<CardBody><Progress label="Agentic Workflows" value={7} max={12} showValue /></CardBody>
</Card>
<EmptyState title="ยังไม่มีงานที่ต้องส่ง" />จองเวลาปรึกษา
Stepper บอกตำแหน่ง ตัวเลือกเวลาเป็น Radio สรุปและปุ่มไปต่ออยู่ด้านล่าง
- 1เลือกเวลา
- 2รายละเอียด
- 3ชำระเงิน
- 4ยืนยัน
สรุป
ปรึกษา 45 นาที ทาง Google Meet
เวลา19:00
ราคา฿900
ยังไม่ตัดเงินจนกว่าจะยืนยัน
<Stepper current={0} steps={[{ label: "เลือกเวลา" }, { label: "รายละเอียด" }, { label: "ชำระเงิน" }, { label: "ยืนยัน" }]} />
<ChoiceGroup legend="เวลาที่ว่าง พฤหัสบดี 30 ต.ค.">
{slots.map(s => <Radio key={s} name="slot" value={s} label={s} />)}
</ChoiceGroup>
