@fabrica_communications/design-system 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +54 -0
  2. package/package.json +91 -0
  3. package/src/app/components/page.tsx +19 -0
  4. package/src/app/favicon.ico +0 -0
  5. package/src/app/foundations/colors/page.tsx +11 -0
  6. package/src/app/foundations/page.tsx +11 -0
  7. package/src/app/foundations/typography/page.tsx +11 -0
  8. package/src/app/getting-started/page.tsx +11 -0
  9. package/src/app/globals.css +3 -0
  10. package/src/app/layout.tsx +61 -0
  11. package/src/app/page.tsx +994 -0
  12. package/src/components/shared/gap.tsx +103 -0
  13. package/src/components/shared/page-header.tsx +11 -0
  14. package/src/components/shared/page-top-button.tsx +27 -0
  15. package/src/components/ui/accordion.tsx +66 -0
  16. package/src/components/ui/alert-dialog.tsx +157 -0
  17. package/src/components/ui/aspect-ratio.tsx +11 -0
  18. package/src/components/ui/badge.tsx +46 -0
  19. package/src/components/ui/breadcrumb.tsx +109 -0
  20. package/src/components/ui/button.mdx +39 -0
  21. package/src/components/ui/button.stories.tsx +88 -0
  22. package/src/components/ui/button.tsx +53 -0
  23. package/src/components/ui/card.tsx +92 -0
  24. package/src/components/ui/carousel.tsx +241 -0
  25. package/src/components/ui/checkbox.tsx +32 -0
  26. package/src/components/ui/dialog.tsx +143 -0
  27. package/src/components/ui/field.tsx +248 -0
  28. package/src/components/ui/heading.tsx +51 -0
  29. package/src/components/ui/icon-definitions.ts +532 -0
  30. package/src/components/ui/icon.tsx +115 -0
  31. package/src/components/ui/input-group.tsx +170 -0
  32. package/src/components/ui/input.tsx +21 -0
  33. package/src/components/ui/label.tsx +24 -0
  34. package/src/components/ui/native-select.tsx +48 -0
  35. package/src/components/ui/pagination.tsx +127 -0
  36. package/src/components/ui/radio-group.tsx +45 -0
  37. package/src/components/ui/scroll-area.tsx +58 -0
  38. package/src/components/ui/section-container.tsx +24 -0
  39. package/src/components/ui/select.tsx +187 -0
  40. package/src/components/ui/separator.tsx +28 -0
  41. package/src/components/ui/skeleton.tsx +13 -0
  42. package/src/components/ui/sonner.tsx +40 -0
  43. package/src/components/ui/switch.mdx +20 -0
  44. package/src/components/ui/switch.stories.tsx +54 -0
  45. package/src/components/ui/switch.tsx +66 -0
  46. package/src/components/ui/table.tsx +119 -0
  47. package/src/components/ui/tabs.tsx +66 -0
  48. package/src/components/ui/text-link.tsx +72 -0
  49. package/src/components/ui/text.tsx +54 -0
  50. package/src/components/ui/textarea.tsx +18 -0
  51. package/src/components/ui/toggle.tsx +47 -0
  52. package/src/components/ui/tooltip.tsx +61 -0
  53. package/src/index.ts +37 -0
  54. package/src/lib/utils.ts +6 -0
  55. package/src/styles/globals.css +162 -0
  56. package/src/styles/variables.css +261 -0
  57. package/tokens/design-tokens.tokens.json +1652 -0
  58. package/tokens/design-tokens.tokens/344/270/213/345/261/244.json +1659 -0
  59. package/tokens//345/205/250/343/203/227/343/203/255/343/202/270/343/202/247/343/202/257/343/203/210/345/205/261/351/200/232_design-tokens.tokens.json +572 -0
@@ -0,0 +1,994 @@
1
+ "use client"
2
+
3
+ import {
4
+ Accordion,
5
+ AccordionContent,
6
+ AccordionItem,
7
+ AccordionTrigger,
8
+ } from "../components/ui/accordion"
9
+ import {
10
+ AlertDialog,
11
+ AlertDialogAction,
12
+ AlertDialogCancel,
13
+ AlertDialogContent,
14
+ AlertDialogDescription,
15
+ AlertDialogFooter,
16
+ AlertDialogHeader,
17
+ AlertDialogTitle,
18
+ AlertDialogTrigger,
19
+ } from "../components/ui/alert-dialog"
20
+ import { AspectRatio } from "../components/ui/aspect-ratio"
21
+ import { Badge } from "../components/ui/badge"
22
+ import {
23
+ Breadcrumb,
24
+ BreadcrumbItem,
25
+ BreadcrumbLink,
26
+ BreadcrumbList,
27
+ BreadcrumbPage,
28
+ BreadcrumbSeparator,
29
+ } from "../components/ui/breadcrumb"
30
+ import { Button } from "../components/ui/button"
31
+ import { Heading } from "../components/ui/heading"
32
+ import { SectionContainer } from "../components/ui/section-container"
33
+ import { Gap } from "@/components/shared/gap"
34
+ import {
35
+ Card,
36
+ CardContent,
37
+ CardDescription,
38
+ CardFooter,
39
+ CardHeader,
40
+ CardTitle,
41
+ } from "../components/ui/card"
42
+ import {
43
+ Carousel,
44
+ CarouselContent,
45
+ CarouselItem,
46
+ CarouselNext,
47
+ CarouselPrevious,
48
+ } from "../components/ui/carousel"
49
+ import { Checkbox } from "../components/ui/checkbox"
50
+ import {
51
+ Dialog,
52
+ DialogContent,
53
+ DialogDescription,
54
+ DialogFooter,
55
+ DialogHeader,
56
+ DialogTitle,
57
+ DialogTrigger,
58
+ } from "../components/ui/dialog"
59
+ import {
60
+ Field,
61
+ FieldContent,
62
+ FieldDescription,
63
+ FieldLabel,
64
+ } from "../components/ui/field"
65
+ import { Icon } from "../components/ui/icon"
66
+ import {
67
+ InputGroup,
68
+ InputGroupAddon,
69
+ InputGroupInput,
70
+ } from "../components/ui/input-group"
71
+ import { Input } from "../components/ui/input"
72
+ import { Label } from "../components/ui/label"
73
+ import {
74
+ NativeSelect,
75
+ NativeSelectOption,
76
+ } from "../components/ui/native-select"
77
+ import {
78
+ Select,
79
+ SelectContent,
80
+ SelectItem,
81
+ SelectTrigger,
82
+ SelectValue,
83
+ } from "../components/ui/select"
84
+ import {
85
+ Pagination,
86
+ PaginationContent,
87
+ PaginationEllipsis,
88
+ PaginationItem,
89
+ PaginationLink,
90
+ PaginationNext,
91
+ PaginationPrevious,
92
+ } from "../components/ui/pagination"
93
+ import { RadioGroup, RadioGroupItem } from "../components/ui/radio-group"
94
+ import { ScrollArea } from "../components/ui/scroll-area"
95
+ import { Separator } from "../components/ui/separator"
96
+ import { Skeleton } from "../components/ui/skeleton"
97
+ import { Switch } from "../components/ui/switch"
98
+ import { toast } from "sonner"
99
+ import {
100
+ Table,
101
+ TableBody,
102
+ TableCell,
103
+ TableHead,
104
+ TableHeader,
105
+ TableRow,
106
+ } from "../components/ui/table"
107
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "../components/ui/tabs"
108
+ import { Text } from "../components/ui/text"
109
+ import { TextLink } from "../components/ui/text-link"
110
+ import { Textarea } from "../components/ui/textarea"
111
+ import { Toggle } from "../components/ui/toggle"
112
+ import {
113
+ Tooltip,
114
+ TooltipContent,
115
+ TooltipTrigger,
116
+ } from "../components/ui/tooltip"
117
+
118
+ const sections = [
119
+ "Accordion",
120
+ "Alert Dialog",
121
+ "Aspect Ratio",
122
+ "Badge",
123
+ "Breadcrumb",
124
+ "Button",
125
+ "Card",
126
+ "Carousel",
127
+ "Checkbox",
128
+ "Dialog",
129
+ "Field",
130
+ "Gap",
131
+ "Heading",
132
+ "Icon",
133
+ "Input Group",
134
+ "Input",
135
+ "Label",
136
+ "Native Select",
137
+ "Pagination",
138
+ "Select",
139
+ "Radio Group",
140
+ "Scroll Area",
141
+ "Separator",
142
+ "Skeleton",
143
+ "Sonner",
144
+ "Switch",
145
+ "Table",
146
+ "Tabs",
147
+ "Text",
148
+ "Text Link",
149
+ "Textarea",
150
+ "Toggle",
151
+ "Tooltip",
152
+ ]
153
+
154
+ function getSectionId(sectionName: string) {
155
+ return sectionName.toLowerCase().replace(/\s+/g, "-")
156
+ }
157
+
158
+ export default function Home() {
159
+ return (
160
+ <main className="min-h-screen space-y-6 bg-(--usage-background) p-6">
161
+ <div id="navigation" className="bg-gray-200 p-5 sticky top-[10rem] z-30">
162
+ <Heading variant="h2">
163
+ コンポーネント一覧
164
+ </Heading>
165
+ <nav>
166
+ <Gap row wrap gap="sm">
167
+ {sections.map((section) => (
168
+ <TextLink key={section} href={`#${getSectionId(section)}`}>
169
+ {section}
170
+ </TextLink>
171
+ ))}
172
+ </Gap>
173
+ </nav>
174
+ </div>
175
+
176
+ <SectionContainer id={getSectionId("Accordion")}>
177
+ <Heading variant="h3">
178
+ Accordion
179
+ </Heading>
180
+ <Accordion type="single" collapsible className="w-full">
181
+ <AccordionItem value="item-1">
182
+ <AccordionTrigger>セクション 1</AccordionTrigger>
183
+ <AccordionContent>
184
+ これはアコーディオンのデモです。開閉動作を確認してください。
185
+ </AccordionContent>
186
+ </AccordionItem>
187
+ <AccordionItem value="item-2">
188
+ <AccordionTrigger>セクション 2</AccordionTrigger>
189
+ <AccordionContent>
190
+ 他のセクションも同様に動作します。
191
+ </AccordionContent>
192
+ </AccordionItem>
193
+ </Accordion>
194
+ </SectionContainer>
195
+
196
+ <SectionContainer id={getSectionId("Alert Dialog")}>
197
+ <Heading variant="h3">
198
+ Alert Dialog
199
+ </Heading>
200
+ <AlertDialog>
201
+ <AlertDialogTrigger asChild>
202
+ <Button variant="destructive">削除ダイアログを開く</Button>
203
+ </AlertDialogTrigger>
204
+ <AlertDialogContent>
205
+ <AlertDialogHeader>
206
+ <AlertDialogTitle>本当に削除しますか?</AlertDialogTitle>
207
+ <AlertDialogDescription>
208
+ この操作は取り消せません。対象のデータが完全に削除されます。
209
+ </AlertDialogDescription>
210
+ </AlertDialogHeader>
211
+ <AlertDialogFooter>
212
+ <AlertDialogCancel>キャンセル</AlertDialogCancel>
213
+ <AlertDialogAction>削除する</AlertDialogAction>
214
+ </AlertDialogFooter>
215
+ </AlertDialogContent>
216
+ </AlertDialog>
217
+ </SectionContainer>
218
+
219
+ <SectionContainer id={getSectionId("Aspect Ratio")}>
220
+ <Heading variant="h3">
221
+ Aspect Ratio
222
+ </Heading>
223
+ <AspectRatio
224
+ ratio={16 / 9}
225
+ className="flex items-center justify-center rounded-md border border-dashed border-(--usage-border) bg-(--usage-preview-bg)"
226
+ >
227
+ <span className="text-sm text-muted-foreground">
228
+ 16:9 の枠に収まるコンテンツ
229
+ </span>
230
+ </AspectRatio>
231
+ </SectionContainer>
232
+
233
+ <SectionContainer id={getSectionId("Badge")}>
234
+ <Heading variant="h3">
235
+ Badge
236
+ </Heading>
237
+ <Gap row wrap gap="sm">
238
+ <Badge variant="default">Default</Badge>
239
+ <Badge variant="secondary">Secondary</Badge>
240
+ <Badge variant="destructive">Destructive</Badge>
241
+ <Badge variant="outline">Outline</Badge>
242
+ </Gap>
243
+ </SectionContainer>
244
+
245
+ <SectionContainer id={getSectionId("Breadcrumb")}>
246
+ <Heading variant="h3">
247
+ Breadcrumb
248
+ </Heading>
249
+ <Breadcrumb>
250
+ <BreadcrumbList>
251
+ <BreadcrumbItem>
252
+ <BreadcrumbLink href="#">ホーム</BreadcrumbLink>
253
+ </BreadcrumbItem>
254
+ <BreadcrumbSeparator />
255
+ <BreadcrumbItem>
256
+ <BreadcrumbLink href="#">ダッシュボード</BreadcrumbLink>
257
+ </BreadcrumbItem>
258
+ <BreadcrumbSeparator />
259
+ <BreadcrumbItem>
260
+ <BreadcrumbPage>設定</BreadcrumbPage>
261
+ </BreadcrumbItem>
262
+ </BreadcrumbList>
263
+ </Breadcrumb>
264
+ </SectionContainer>
265
+
266
+ <SectionContainer id={getSectionId("Button")}>
267
+ <Heading variant="h3">
268
+ Button
269
+ </Heading>
270
+ <div className="space-y-8">
271
+ <div>
272
+ <div className="mb-2 text-sm">Variant</div>
273
+ <Gap row wrap gap="sm">
274
+ <Button variant="default">Default</Button>
275
+ <Button variant="accent">Accent</Button>
276
+ <Button variant="neutral">Neutral</Button>
277
+ <Button variant="destructive">Destructive</Button>
278
+ </Gap>
279
+ </div>
280
+ <div>
281
+ <div className="mb-2 text-sm">Size</div>
282
+ <Gap row wrap gap="sm">
283
+ <Button size="default">Medium (M)</Button>
284
+ <Button size="sm">Small (S)</Button>
285
+ </Gap>
286
+ </div>
287
+ <div>
288
+ <div className="mb-2 text-sm">With Icon</div>
289
+ <Gap row wrap gap="sm">
290
+ <Button>
291
+ <Icon name="folder" />
292
+ フォルダ
293
+ </Button>
294
+ <Button variant="accent">
295
+ <Icon name="search" />
296
+ 検索
297
+ </Button>
298
+ <Button variant="neutral">
299
+ <Icon name="plus" />
300
+ 追加
301
+ </Button>
302
+ <Button variant="destructive">
303
+ 削除
304
+ <Icon name="trashbox" />
305
+ </Button>
306
+ </Gap>
307
+ </div>
308
+ <div>
309
+ <div className="mb-2 text-sm">Icon Only</div>
310
+ <Gap row wrap gap="sm">
311
+ <Button size="icon">
312
+ <Icon name="search" />
313
+ </Button>
314
+ <Button size="icon-sm">
315
+ <Icon name="search" />
316
+ </Button>
317
+ <Button size="icon" variant="accent">
318
+ <Icon name="folder" />
319
+ </Button>
320
+ <Button size="icon-sm" variant="neutral">
321
+ <Icon name="plus" />
322
+ </Button>
323
+ </Gap>
324
+ </div>
325
+ <div>
326
+ <div className="mb-2 text-sm">Disabled</div>
327
+ <Gap row wrap gap="sm">
328
+ <Button disabled>Disabled</Button>
329
+ <Button variant="accent" disabled>
330
+ Disabled
331
+ </Button>
332
+ <Button variant="neutral" disabled>
333
+ Disabled
334
+ </Button>
335
+ <Button variant="destructive" disabled>
336
+ Disabled
337
+ </Button>
338
+ </Gap>
339
+ </div>
340
+ </div>
341
+ </SectionContainer>
342
+
343
+ <SectionContainer id={getSectionId("Card")}>
344
+ <Heading variant="h3">
345
+ Card
346
+ </Heading>
347
+ <Card>
348
+ <CardHeader>
349
+ <CardTitle>カードタイトル</CardTitle>
350
+ <CardDescription>カードの説明文です。</CardDescription>
351
+ </CardHeader>
352
+ <CardContent>カードの内容がここに表示されます。</CardContent>
353
+ <CardFooter>フッター</CardFooter>
354
+ </Card>
355
+ </SectionContainer>
356
+
357
+ <SectionContainer id={getSectionId("Carousel")}>
358
+ <Heading variant="h3">
359
+ Carousel
360
+ </Heading>
361
+ <Carousel className="w-full max-w-xs">
362
+ <CarouselContent>
363
+ <CarouselItem>
364
+ <div className="flex aspect-square items-center justify-center rounded-md border bg-muted p-6">
365
+ <span className="text-4xl font-semibold">1</span>
366
+ </div>
367
+ </CarouselItem>
368
+ <CarouselItem>
369
+ <div className="flex aspect-square items-center justify-center rounded-md border bg-muted p-6">
370
+ <span className="text-4xl font-semibold">2</span>
371
+ </div>
372
+ </CarouselItem>
373
+ <CarouselItem>
374
+ <div className="flex aspect-square items-center justify-center rounded-md border bg-muted p-6">
375
+ <span className="text-4xl font-semibold">3</span>
376
+ </div>
377
+ </CarouselItem>
378
+ </CarouselContent>
379
+ <CarouselPrevious />
380
+ <CarouselNext />
381
+ </Carousel>
382
+ </SectionContainer>
383
+
384
+ <SectionContainer id={getSectionId("Checkbox")}>
385
+ <Heading variant="h3">
386
+ Checkbox
387
+ </Heading>
388
+ <Gap gap="sm">
389
+ <div className="flex items-center gap-2">
390
+ <Checkbox id="checkbox-1" />
391
+ <Label htmlFor="checkbox-1">チェックボックス 1</Label>
392
+ </div>
393
+ <div className="flex items-center gap-2">
394
+ <Checkbox id="checkbox-2" defaultChecked />
395
+ <Label htmlFor="checkbox-2">チェックボックス 2</Label>
396
+ </div>
397
+ <div className="flex items-center gap-2">
398
+ <Checkbox id="checkbox-3" disabled />
399
+ <Label htmlFor="checkbox-3">無効化されたチェックボックス</Label>
400
+ </div>
401
+ </Gap>
402
+ </SectionContainer>
403
+
404
+ <SectionContainer id={getSectionId("Dialog")}>
405
+ <Heading variant="h3">
406
+ Dialog
407
+ </Heading>
408
+ <Dialog>
409
+ <DialogTrigger asChild>
410
+ <Button>ダイアログを開く</Button>
411
+ </DialogTrigger>
412
+ <DialogContent>
413
+ <DialogHeader>
414
+ <DialogTitle>ダイアログのタイトル</DialogTitle>
415
+ <DialogDescription>
416
+ ダイアログの説明文がここに表示されます。
417
+ </DialogDescription>
418
+ </DialogHeader>
419
+ <DialogFooter>
420
+ <Button variant="neutral">キャンセル</Button>
421
+ <Button>確認</Button>
422
+ </DialogFooter>
423
+ </DialogContent>
424
+ </Dialog>
425
+ </SectionContainer>
426
+
427
+ <SectionContainer id={getSectionId("Field")}>
428
+ <Heading variant="h3">
429
+ Field
430
+ </Heading>
431
+ <Field>
432
+ <FieldLabel>フィールドラベル</FieldLabel>
433
+ <FieldContent>
434
+ <Input placeholder="入力してください" />
435
+ <FieldDescription>補足説明がここに表示されます。</FieldDescription>
436
+ </FieldContent>
437
+ </Field>
438
+ </SectionContainer>
439
+
440
+ <SectionContainer id={getSectionId("Gap")}>
441
+ <Heading variant="h3">
442
+ Gap
443
+ </Heading>
444
+ <div className="space-y-8">
445
+ <div>
446
+ <div className="mb-2 text-sm">縦方向(デフォルト)</div>
447
+ <Gap gap="sm">
448
+ <div className="bg-muted rounded-md px-4 py-2 text-sm">アイテム 1</div>
449
+ <div className="bg-muted rounded-md px-4 py-2 text-sm">アイテム 2</div>
450
+ <div className="bg-muted rounded-md px-4 py-2 text-sm">アイテム 3</div>
451
+ </Gap>
452
+ </div>
453
+ <div>
454
+ <div className="mb-2 text-sm">横方向(row)</div>
455
+ <Gap row gap="sm">
456
+ <div className="bg-muted rounded-md px-4 py-2 text-sm">アイテム 1</div>
457
+ <div className="bg-muted rounded-md px-4 py-2 text-sm">アイテム 2</div>
458
+ <div className="bg-muted rounded-md px-4 py-2 text-sm">アイテム 3</div>
459
+ </Gap>
460
+ </div>
461
+ <div>
462
+ <div className="mb-2 text-sm">横方向+折り返し(row wrap)</div>
463
+ <Gap row wrap gap="sm">
464
+ <div className="bg-muted rounded-md px-4 py-2 text-sm">アイテム 1</div>
465
+ <div className="bg-muted rounded-md px-4 py-2 text-sm">アイテム 2</div>
466
+ <div className="bg-muted rounded-md px-4 py-2 text-sm">アイテム 3</div>
467
+ <div className="bg-muted rounded-md px-4 py-2 text-sm">アイテム 4</div>
468
+ <div className="bg-muted rounded-md px-4 py-2 text-sm">アイテム 5</div>
469
+ </Gap>
470
+ </div>
471
+ <div>
472
+ <div className="mb-2 text-sm">異なるgapサイズ</div>
473
+ <span className="text-sm">2xs</span>
474
+ <Gap gap="2xs">
475
+ <div className="bg-muted rounded-md px-3 py-1.5 text-xs">アイテム</div>
476
+ <div className="bg-muted rounded-md px-3 py-1.5 text-xs">アイテム</div>
477
+ </Gap>
478
+ <span className="text-sm">xs</span>
479
+ <Gap gap="xs">
480
+ <div className="bg-muted rounded-md px-3 py-1.5 text-xs">アイテム</div>
481
+ <div className="bg-muted rounded-md px-3 py-1.5 text-xs">アイテム</div>
482
+ </Gap>
483
+ <span className="text-sm">sm</span>
484
+ <Gap gap="sm">
485
+ <div className="bg-muted rounded-md px-3 py-1.5 text-xs">アイテム</div>
486
+ <div className="bg-muted rounded-md px-3 py-1.5 text-xs">アイテム</div>
487
+ </Gap>
488
+ <span className="text-sm">md</span>
489
+ <Gap gap="md">
490
+ <div className="bg-muted rounded-md px-3 py-1.5 text-xs">アイテム</div>
491
+ <div className="bg-muted rounded-md px-3 py-1.5 text-xs">アイテム</div>
492
+ </Gap>
493
+ <span className="text-sm">lg</span>
494
+ <Gap gap="lg">
495
+ <div className="bg-muted rounded-md px-3 py-1.5 text-xs">アイテム</div>
496
+ <div className="bg-muted rounded-md px-3 py-1.5 text-xs">アイテム</div>
497
+ </Gap>
498
+ </div>
499
+ </div>
500
+ </SectionContainer>
501
+
502
+ <SectionContainer id={getSectionId("Heading")}>
503
+ <Heading variant="h3">
504
+ Heading
505
+ </Heading>
506
+ <Gap gap="md">
507
+ <div>
508
+ <div className="mb-2 text-sm">page_title</div>
509
+ <Heading variant="page_title">ページタイトル</Heading>
510
+ </div>
511
+ <div>
512
+ <div className="mb-2 text-sm">h1</div>
513
+ <Heading variant="h1">見出し 1</Heading>
514
+ </div>
515
+ <div>
516
+ <div className="mb-2 text-sm">h2</div>
517
+ <Heading variant="h2">見出し 2</Heading>
518
+ </div>
519
+ <div>
520
+ <div className="mb-2 text-sm">h3</div>
521
+ <Heading variant="h3">見出し 3</Heading>
522
+ </div>
523
+ <div>
524
+ <div className="mb-2 text-sm">h4</div>
525
+ <Heading variant="h4">見出し 4</Heading>
526
+ </div>
527
+ <div>
528
+ <div className="mb-2 text-sm">h5</div>
529
+ <Heading variant="h5">見出し 5</Heading>
530
+ </div>
531
+ <div>
532
+ <div className="mb-2 text-sm">h6</div>
533
+ <Heading variant="h6" asChild>
534
+ <h6>
535
+ 見出し 6
536
+ </h6>
537
+ </Heading>
538
+ </div>
539
+ </Gap>
540
+ </SectionContainer>
541
+
542
+ <SectionContainer id={getSectionId("Icon")}>
543
+ <Heading variant="h3">
544
+ Icon
545
+ </Heading>
546
+ <Gap row wrap gap="sm">
547
+ <Icon name="ai" />
548
+ <Icon name="archivebox" />
549
+ <Icon name="arrow-back-left" />
550
+ <Icon name="arrow-close" />
551
+ <Icon name="arrow-down" />
552
+ <Icon name="arrow-go-left" />
553
+ <Icon name="arrow-go-right" />
554
+ <Icon name="arrow-goup" />
555
+ <Icon name="arrow-left-neutral" />
556
+ <Icon name="arrow-left" />
557
+ <Icon name="arrow-open" />
558
+ <Icon name="arrow-right" />
559
+ <Icon name="arrow-up" />
560
+ <Icon name="back" />
561
+ <Icon name="bell" />
562
+ <Icon name="blanc" />
563
+ <Icon name="calculator" />
564
+ <Icon name="calendar" />
565
+ <Icon name="car" />
566
+ <Icon name="chain" />
567
+ <Icon name="change-search" />
568
+ <Icon name="change" />
569
+ <Icon name="checkmark" />
570
+ <Icon name="circle-cross" />
571
+ <Icon name="circle-minus" />
572
+ <Icon name="circle-plus" />
573
+ <Icon name="circle-settle" />
574
+ <Icon name="clip" />
575
+ <Icon name="clock" />
576
+ <Icon name="copy" />
577
+ <Icon name="cross" />
578
+ <Icon name="customer-management" />
579
+ <Icon name="dots-horizontal" />
580
+ <Icon name="dots-vertical-2line" />
581
+ <Icon name="dots-vertical" />
582
+ <Icon name="download" />
583
+ <Icon name="error" />
584
+ <Icon name="eye-off" />
585
+ <Icon name="eye" />
586
+ <Icon name="filter" />
587
+ <Icon name="folder-plus" />
588
+ <Icon name="folder" />
589
+ <Icon name="gantt" />
590
+ <Icon name="garage" />
591
+ <Icon name="good" />
592
+ <Icon name="graph" />
593
+ <Icon name="history" />
594
+ <Icon name="info" />
595
+ <Icon name="list-plus" />
596
+ <Icon name="list-settle" />
597
+ <Icon name="list" />
598
+ <Icon name="login" />
599
+ <Icon name="logout" />
600
+ <Icon name="mail" />
601
+ <Icon name="maximize" />
602
+ <Icon name="message" />
603
+ <Icon name="minimize" />
604
+ <Icon name="minus" />
605
+ <Icon name="money" />
606
+ <Icon name="multiple-documents" />
607
+ <Icon name="option-plus" />
608
+ <Icon name="padlock" />
609
+ <Icon name="pencil" />
610
+ <Icon name="play" />
611
+ <Icon name="plus" />
612
+ <Icon name="print" />
613
+ <Icon name="question" />
614
+ <Icon name="reload" />
615
+ <Icon name="search" />
616
+ <Icon name="send-outline" />
617
+ <Icon name="settings" />
618
+ <Icon name="share" />
619
+ <Icon name="sorting" />
620
+ <Icon name="spanner" />
621
+ <Icon name="star-outline" />
622
+ <Icon name="stop" />
623
+ <Icon name="tips" />
624
+ <Icon name="trashbox" />
625
+ <Icon name="user-plus" />
626
+ <Icon name="zoom" />
627
+ </Gap>
628
+ </SectionContainer>
629
+
630
+ <SectionContainer id={getSectionId("Input Group")}>
631
+ <Heading variant="h3">
632
+ Input Group
633
+ </Heading>
634
+ <InputGroup>
635
+ <InputGroupAddon>
636
+ <span>@</span>
637
+ </InputGroupAddon>
638
+ <InputGroupInput placeholder="username" />
639
+ </InputGroup>
640
+ </SectionContainer>
641
+
642
+ <SectionContainer id={getSectionId("Input")}>
643
+ <Heading variant="h3">
644
+ Input
645
+ </Heading>
646
+ <Gap gap="sm">
647
+ <Input placeholder="通常の入力欄" />
648
+ <Input type="email" placeholder="メールアドレス" />
649
+ <Input type="password" placeholder="パスワード" />
650
+ <Input disabled placeholder="無効化された入力欄" />
651
+ </Gap>
652
+ </SectionContainer>
653
+
654
+ <SectionContainer id={getSectionId("Label")}>
655
+ <Heading variant="h3">
656
+ Label
657
+ </Heading>
658
+ <Gap gap="sm">
659
+ <div>
660
+ <Label htmlFor="input-1">ラベル 1</Label>
661
+ <Input id="input-1" placeholder="入力してください" />
662
+ </div>
663
+ <div>
664
+ <Label htmlFor="input-2">ラベル 2</Label>
665
+ <Input id="input-2" placeholder="入力してください" />
666
+ </div>
667
+ </Gap>
668
+ </SectionContainer>
669
+
670
+ <SectionContainer id={getSectionId("Native Select")}>
671
+ <Heading variant="h3">
672
+ Native Select
673
+ </Heading>
674
+ <NativeSelect>
675
+ <NativeSelectOption value="">選択してください</NativeSelectOption>
676
+ <NativeSelectOption value="option1">オプション 1</NativeSelectOption>
677
+ <NativeSelectOption value="option2">オプション 2</NativeSelectOption>
678
+ <NativeSelectOption value="option3">オプション 3</NativeSelectOption>
679
+ </NativeSelect>
680
+ </SectionContainer>
681
+
682
+ <SectionContainer id={getSectionId("Select")}>
683
+ <Heading variant="h3">
684
+ Select
685
+ </Heading>
686
+ <Gap gap="sm">
687
+ <Select>
688
+ <SelectTrigger className="w-[180px]">
689
+ <SelectValue placeholder="選択してください" />
690
+ </SelectTrigger>
691
+ <SelectContent>
692
+ <SelectItem value="option1">オプション 1</SelectItem>
693
+ <SelectItem value="option2">オプション 2</SelectItem>
694
+ <SelectItem value="option3">オプション 3</SelectItem>
695
+ </SelectContent>
696
+ </Select>
697
+ <Select defaultValue="option2">
698
+ <SelectTrigger className="w-[180px]">
699
+ <SelectValue />
700
+ </SelectTrigger>
701
+ <SelectContent>
702
+ <SelectItem value="option1">オプション 1</SelectItem>
703
+ <SelectItem value="option2">オプション 2</SelectItem>
704
+ <SelectItem value="option3">オプション 3</SelectItem>
705
+ </SelectContent>
706
+ </Select>
707
+ <Select disabled>
708
+ <SelectTrigger className="w-[180px]">
709
+ <SelectValue placeholder="無効化されたセレクト" />
710
+ </SelectTrigger>
711
+ <SelectContent>
712
+ <SelectItem value="option1">オプション 1</SelectItem>
713
+ <SelectItem value="option2">オプション 2</SelectItem>
714
+ </SelectContent>
715
+ </Select>
716
+ </Gap>
717
+ </SectionContainer>
718
+
719
+ <SectionContainer id={getSectionId("Pagination")}>
720
+ <Heading variant="h3">
721
+ Pagination
722
+ </Heading>
723
+ <Pagination>
724
+ <PaginationContent>
725
+ <PaginationItem>
726
+ <PaginationPrevious href="#" />
727
+ </PaginationItem>
728
+ <PaginationItem>
729
+ <PaginationLink href="#" isActive>
730
+ 1
731
+ </PaginationLink>
732
+ </PaginationItem>
733
+ <PaginationItem>
734
+ <PaginationLink href="#">2</PaginationLink>
735
+ </PaginationItem>
736
+ <PaginationItem>
737
+ <PaginationLink href="#">3</PaginationLink>
738
+ </PaginationItem>
739
+ <PaginationItem>
740
+ <PaginationEllipsis />
741
+ </PaginationItem>
742
+ <PaginationItem>
743
+ <PaginationNext href="#" />
744
+ </PaginationItem>
745
+ </PaginationContent>
746
+ </Pagination>
747
+ </SectionContainer>
748
+
749
+ <SectionContainer id={getSectionId("Radio Group")}>
750
+ <Heading variant="h3">
751
+ Radio Group
752
+ </Heading>
753
+ <RadioGroup defaultValue="option1">
754
+ <div className="flex items-center gap-2">
755
+ <RadioGroupItem value="option1" id="radio-1" />
756
+ <Label htmlFor="radio-1">オプション 1</Label>
757
+ </div>
758
+ <div className="flex items-center gap-2">
759
+ <RadioGroupItem value="option2" id="radio-2" />
760
+ <Label htmlFor="radio-2">オプション 2</Label>
761
+ </div>
762
+ <div className="flex items-center gap-2">
763
+ <RadioGroupItem value="option3" id="radio-3" disabled />
764
+ <Label htmlFor="radio-3" className="opacity-50">
765
+ 無効化されたオプション
766
+ </Label>
767
+ </div>
768
+ </RadioGroup>
769
+ </SectionContainer>
770
+
771
+ <SectionContainer id={getSectionId("Scroll Area")}>
772
+ <Heading variant="h3">
773
+ Scroll Area
774
+ </Heading>
775
+ <ScrollArea className="h-32 w-full rounded-md border border-(--usage-border) p-4">
776
+ <div className="space-y-2">
777
+ {Array.from({ length: 10 }).map((_, i) => (
778
+ <div key={i} className="text-sm">
779
+ スクロール可能なコンテンツ {i + 1}
780
+ </div>
781
+ ))}
782
+ </div>
783
+ </ScrollArea>
784
+ </SectionContainer>
785
+
786
+ <SectionContainer id={getSectionId("Separator")}>
787
+ <Heading variant="h3">
788
+ Separator
789
+ </Heading>
790
+ <div className="space-y-4">
791
+ <div>
792
+ <div className="mb-2 text-sm">水平セパレーター</div>
793
+ <Separator />
794
+ </div>
795
+ <div className="flex h-5 items-center gap-4">
796
+ <span className="text-sm">左</span>
797
+ <Separator orientation="vertical" />
798
+ <span className="text-sm">右</span>
799
+ </div>
800
+ </div>
801
+ </SectionContainer>
802
+
803
+ <SectionContainer id={getSectionId("Skeleton")}>
804
+ <Heading variant="h3">
805
+ Skeleton
806
+ </Heading>
807
+ <div className="space-y-4">
808
+ <div className="space-y-2">
809
+ <Skeleton className="h-4 w-[250px]" />
810
+ <Skeleton className="h-4 w-[200px]" />
811
+ </div>
812
+ <Skeleton className="h-24 w-full" />
813
+ </div>
814
+ </SectionContainer>
815
+
816
+ <SectionContainer id={getSectionId("Sonner")}>
817
+ <Heading variant="h3">
818
+ Sonner
819
+ </Heading>
820
+ <Gap row wrap gap="sm">
821
+ <Button
822
+ onClick={() => toast.success("成功しました!")}
823
+ >
824
+ 成功トースト
825
+ </Button>
826
+ <Button
827
+ onClick={() => toast.error("エラーが発生しました")}
828
+ variant="destructive"
829
+ >
830
+ エラートースト
831
+ </Button>
832
+ <Button
833
+ onClick={() => toast.info("情報をお知らせします")}
834
+ variant="neutral"
835
+ >
836
+ 情報トースト
837
+ </Button>
838
+ <Button
839
+ onClick={() => toast.warning("警告です")}
840
+ variant="neutral"
841
+ >
842
+ 警告トースト
843
+ </Button>
844
+ </Gap>
845
+ </SectionContainer>
846
+
847
+ <SectionContainer id={getSectionId("Switch")}>
848
+ <Heading variant="h3">
849
+ Switch
850
+ </Heading>
851
+ <Gap gap="sm">
852
+ <div className="flex items-center gap-2">
853
+ <Switch id="switch-1" />
854
+ <Label htmlFor="switch-1">スイッチ 1</Label>
855
+ </div>
856
+ <div className="flex items-center gap-2">
857
+ <Switch id="switch-2" defaultChecked />
858
+ <Label htmlFor="switch-2">スイッチ 2(デフォルトON)</Label>
859
+ </div>
860
+ <div className="flex items-center gap-2">
861
+ <Switch id="switch-3" disabled />
862
+ <Label htmlFor="switch-3" className="opacity-50">
863
+ 無効化されたスイッチ
864
+ </Label>
865
+ </div>
866
+ </Gap>
867
+ </SectionContainer>
868
+
869
+ <SectionContainer id={getSectionId("Table")}>
870
+ <Heading variant="h3">
871
+ Table
872
+ </Heading>
873
+ <Table>
874
+ {/* <TableCaption>サンプルテーブル</TableCaption> */}
875
+ <TableHeader>
876
+ <TableRow>
877
+ <TableHead>名前</TableHead>
878
+ <TableHead>ステータス</TableHead>
879
+ <TableHead>メール</TableHead>
880
+ </TableRow>
881
+ </TableHeader>
882
+ <TableBody>
883
+ <TableRow>
884
+ <TableCell>田中太郎</TableCell>
885
+ <TableCell>アクティブ</TableCell>
886
+ <TableCell>tanaka@example.com</TableCell>
887
+ </TableRow>
888
+ <TableRow>
889
+ <TableCell>佐藤花子</TableCell>
890
+ <TableCell>アクティブ</TableCell>
891
+ <TableCell>sato@example.com</TableCell>
892
+ </TableRow>
893
+ <TableRow>
894
+ <TableCell>鈴木一郎</TableCell>
895
+ <TableCell>非アクティブ</TableCell>
896
+ <TableCell>suzuki@example.com</TableCell>
897
+ </TableRow>
898
+ </TableBody>
899
+ </Table>
900
+ </SectionContainer>
901
+
902
+ <SectionContainer id={getSectionId("Tabs")}>
903
+ <Heading variant="h3">
904
+ Tabs
905
+ </Heading>
906
+ <Tabs defaultValue="tab1">
907
+ <TabsList>
908
+ <TabsTrigger value="tab1">タブ 1</TabsTrigger>
909
+ <TabsTrigger value="tab2">タブ 2</TabsTrigger>
910
+ <TabsTrigger value="tab3">タブ 3</TabsTrigger>
911
+ </TabsList>
912
+ <TabsContent value="tab1">
913
+ タブ 1 のコンテンツがここに表示されます。
914
+ </TabsContent>
915
+ <TabsContent value="tab2">
916
+ タブ 2 のコンテンツがここに表示されます。
917
+ </TabsContent>
918
+ <TabsContent value="tab3">
919
+ タブ 3 のコンテンツがここに表示されます。
920
+ </TabsContent>
921
+ </Tabs>
922
+ </SectionContainer>
923
+
924
+ <SectionContainer id={getSectionId("Text")}>
925
+ <Heading variant="h3">
926
+ Text
927
+ </Heading>
928
+ <Gap gap="sm">
929
+ <Text size="xs">Extra Small Text</Text>
930
+ <Text size="sm">Small Text</Text>
931
+ <Text size="base">Base Text</Text>
932
+ <Text size="lg">Large Text</Text>
933
+ <Text size="xl">Extra Large Text</Text>
934
+ <Text size="2xl">2X Large Text</Text>
935
+ </Gap>
936
+ </SectionContainer>
937
+
938
+ <SectionContainer id={getSectionId("Text Link")}>
939
+ <Heading variant="h3">
940
+ Text Link
941
+ </Heading>
942
+ <Gap gap="sm">
943
+ <TextLink href="#">通常のリンク</TextLink>
944
+ <TextLink href="#" border="underline">
945
+ 下線付きリンク
946
+ </TextLink>
947
+ <TextLink href="#" icon="arrow-right" iconPosition="right">
948
+ アイコン付きリンク
949
+ </TextLink>
950
+ </Gap>
951
+ </SectionContainer>
952
+
953
+ <SectionContainer id={getSectionId("Textarea")}>
954
+ <Heading variant="h3">
955
+ Textarea
956
+ </Heading>
957
+ <Gap gap="sm">
958
+ <Textarea placeholder="テキストエリアに入力してください" />
959
+ <Textarea
960
+ placeholder="無効化されたテキストエリア"
961
+ disabled
962
+ />
963
+ </Gap>
964
+ </SectionContainer>
965
+
966
+ <SectionContainer id={getSectionId("Toggle")}>
967
+ <Heading variant="h3">
968
+ Toggle
969
+ </Heading>
970
+ <Gap row wrap gap="sm">
971
+ <Toggle>Toggle</Toggle>
972
+ <Toggle variant="outline">Outline Toggle</Toggle>
973
+ <Toggle size="sm">Small</Toggle>
974
+ <Toggle size="lg">Large</Toggle>
975
+ </Gap>
976
+ </SectionContainer>
977
+
978
+ <SectionContainer id={getSectionId("Tooltip")}>
979
+ <Heading variant="h3">
980
+ Tooltip
981
+ </Heading>
982
+ <Tooltip>
983
+ <TooltipTrigger asChild>
984
+ <Button variant="neutral">ホバーしてください</Button>
985
+ </TooltipTrigger>
986
+ <TooltipContent>
987
+ <p>これはツールチップです</p>
988
+ </TooltipContent>
989
+ </Tooltip>
990
+ </SectionContainer>
991
+
992
+ </main>
993
+ )
994
+ }