banhaten 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 (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +361 -0
  3. package/banhaten.config.example.json +13 -0
  4. package/package.json +59 -0
  5. package/registry/assets/activity-feed-avatar.png +0 -0
  6. package/registry/assets/avatars/avatar-01.jpg +0 -0
  7. package/registry/assets/avatars/avatar-02.jpg +0 -0
  8. package/registry/assets/avatars/avatar-03.jpg +0 -0
  9. package/registry/assets/avatars/avatar-04.jpg +0 -0
  10. package/registry/assets/avatars/avatar-05.jpg +0 -0
  11. package/registry/assets/avatars/avatar-06.jpg +0 -0
  12. package/registry/assets/avatars/avatar-07.jpg +0 -0
  13. package/registry/assets/avatars/avatar-08.jpg +0 -0
  14. package/registry/assets/avatars/avatar-09.jpg +0 -0
  15. package/registry/assets/avatars/avatar-10.jpg +0 -0
  16. package/registry/assets/avatars/avatar-11.jpg +0 -0
  17. package/registry/assets/avatars/avatar-12.jpg +0 -0
  18. package/registry/assets/avatars/avatar-13.jpg +0 -0
  19. package/registry/assets/avatars/avatar-14.jpg +0 -0
  20. package/registry/assets/avatars/avatar-15.jpg +0 -0
  21. package/registry/assets/avatars/avatar-16.jpg +0 -0
  22. package/registry/assets/avatars/avatar-17.jpg +0 -0
  23. package/registry/assets/avatars/avatar-18.jpg +0 -0
  24. package/registry/assets/avatars/avatar-19.jpg +0 -0
  25. package/registry/assets/avatars/avatar-20.jpg +0 -0
  26. package/registry/assets/avatars/avatar-21.jpg +0 -0
  27. package/registry/assets/avatars/avatar-22.jpg +0 -0
  28. package/registry/assets/avatars/avatar-23.jpg +0 -0
  29. package/registry/assets/avatars/avatar-24.jpg +0 -0
  30. package/registry/assets/avatars/avatar-25.jpg +0 -0
  31. package/registry/assets/avatars/avatar-26.jpg +0 -0
  32. package/registry/assets/avatars/avatar-27.jpg +0 -0
  33. package/registry/assets/avatars/avatar-28.jpg +0 -0
  34. package/registry/assets/avatars/avatar-29.jpg +0 -0
  35. package/registry/assets/avatars/avatar-30.jpg +0 -0
  36. package/registry/assets/avatars/avatar-31.jpg +0 -0
  37. package/registry/assets/avatars/avatar-32.jpg +0 -0
  38. package/registry/assets/avatars/avatar-33.jpg +0 -0
  39. package/registry/assets/avatars/avatar-34.jpg +0 -0
  40. package/registry/assets/avatars/avatar-35.jpg +0 -0
  41. package/registry/assets/image-assets.json +744 -0
  42. package/registry/assets/images/art-01.jpg +0 -0
  43. package/registry/assets/images/art-02.jpg +0 -0
  44. package/registry/assets/images/art-03.jpg +0 -0
  45. package/registry/assets/images/art-04.jpg +0 -0
  46. package/registry/assets/images/art-05.jpg +0 -0
  47. package/registry/assets/images/art-06.jpg +0 -0
  48. package/registry/assets/images/art-07.jpg +0 -0
  49. package/registry/assets/images/art-08.jpg +0 -0
  50. package/registry/assets/images/art-09.jpg +0 -0
  51. package/registry/assets/images/art-10.jpg +0 -0
  52. package/registry/assets/images/art-11.jpg +0 -0
  53. package/registry/assets/images/art-12.jpg +0 -0
  54. package/registry/assets/images/art-13.jpg +0 -0
  55. package/registry/assets/images/art-14.jpg +0 -0
  56. package/registry/assets/images/art-15.jpg +0 -0
  57. package/registry/assets/images/art-16.jpg +0 -0
  58. package/registry/assets/images/art-17.jpg +0 -0
  59. package/registry/assets/images/art-18.jpg +0 -0
  60. package/registry/assets/images/art-19.jpg +0 -0
  61. package/registry/assets/images/art-20.jpg +0 -0
  62. package/registry/assets/images/art-21.jpg +0 -0
  63. package/registry/assets/images/art-22.jpg +0 -0
  64. package/registry/assets/images/art-23.jpg +0 -0
  65. package/registry/assets/images/art-24.jpg +0 -0
  66. package/registry/assets/images/art-25.jpg +0 -0
  67. package/registry/assets/images/art-26.jpg +0 -0
  68. package/registry/assets/images/art-27.jpg +0 -0
  69. package/registry/assets/images/nature-01.jpg +0 -0
  70. package/registry/assets/images/nature-02.jpg +0 -0
  71. package/registry/assets/images/nature-03.jpg +0 -0
  72. package/registry/assets/images/nature-04.jpg +0 -0
  73. package/registry/assets/images/nature-05.jpg +0 -0
  74. package/registry/assets/images/nature-06.jpg +0 -0
  75. package/registry/assets/images/nature-07.jpg +0 -0
  76. package/registry/assets/images/nature-08.jpg +0 -0
  77. package/registry/assets/images/nature-09.jpg +0 -0
  78. package/registry/assets/images/nature-10.jpg +0 -0
  79. package/registry/assets/images/nature-11.jpg +0 -0
  80. package/registry/assets/images/nature-12.jpg +0 -0
  81. package/registry/assets/images/nature-13.jpg +0 -0
  82. package/registry/assets/images/nature-14.jpg +0 -0
  83. package/registry/assets/images/nature-15.jpg +0 -0
  84. package/registry/assets/images/nature-16.jpg +0 -0
  85. package/registry/assets/images/nature-17.jpg +0 -0
  86. package/registry/assets/images/nature-18.jpg +0 -0
  87. package/registry/assets/images/nature-19.jpg +0 -0
  88. package/registry/assets/images/nature-20.jpg +0 -0
  89. package/registry/components/accordion.tsx +119 -0
  90. package/registry/components/alert.tsx +282 -0
  91. package/registry/components/attribute.tsx +452 -0
  92. package/registry/components/avatar.tsx +142 -0
  93. package/registry/components/badge.tsx +567 -0
  94. package/registry/components/button-group.tsx +246 -0
  95. package/registry/components/button.tsx +102 -0
  96. package/registry/components/card.tsx +613 -0
  97. package/registry/components/checkbox.tsx +244 -0
  98. package/registry/components/date-picker.tsx +1143 -0
  99. package/registry/components/divider.tsx +82 -0
  100. package/registry/components/expanded/ActivityFeed.tsx +226 -0
  101. package/registry/components/expanded/Banner.tsx +145 -0
  102. package/registry/components/expanded/BannerBoard.tsx +225 -0
  103. package/registry/components/expanded/Breadcrumbs.tsx +156 -0
  104. package/registry/components/expanded/CatalogComponentsShowcase.tsx +211 -0
  105. package/registry/components/expanded/CatalogDivider.tsx +48 -0
  106. package/registry/components/expanded/CatalogTag.tsx +92 -0
  107. package/registry/components/expanded/CommandBar.tsx +406 -0
  108. package/registry/components/expanded/FileUpload.tsx +231 -0
  109. package/registry/components/expanded/IconExplorer.tsx +612 -0
  110. package/registry/components/expanded/OnboardingStepListItem.tsx +67 -0
  111. package/registry/components/expanded/PageHeader.tsx +184 -0
  112. package/registry/components/expanded/Slideout.tsx +514 -0
  113. package/registry/components/expanded/Steps.tsx +266 -0
  114. package/registry/components/expanded/Table.tsx +1014 -0
  115. package/registry/components/expanded/Tabs.tsx +86 -0
  116. package/registry/components/expanded/Timeline.tsx +235 -0
  117. package/registry/components/expanded/TimelineShowcase.tsx +158 -0
  118. package/registry/components/expanded/activityFeed.css +292 -0
  119. package/registry/components/expanded/banner.css +312 -0
  120. package/registry/components/expanded/breadcrumbs.css +140 -0
  121. package/registry/components/expanded/catalogComponentsShowcase.css +87 -0
  122. package/registry/components/expanded/commandBar.css +473 -0
  123. package/registry/components/expanded/divider.css +75 -0
  124. package/registry/components/expanded/fileUpload.css +228 -0
  125. package/registry/components/expanded/iconExplorer.css +764 -0
  126. package/registry/components/expanded/iconPacks.ts +866 -0
  127. package/registry/components/expanded/onboardingStepListItem.css +126 -0
  128. package/registry/components/expanded/pageHeader.css +287 -0
  129. package/registry/components/expanded/slideout.css +955 -0
  130. package/registry/components/expanded/steps.css +329 -0
  131. package/registry/components/expanded/table.css +607 -0
  132. package/registry/components/expanded/tabs.css +197 -0
  133. package/registry/components/expanded/tag.css +148 -0
  134. package/registry/components/expanded/timeline.css +282 -0
  135. package/registry/components/input-content.ts +106 -0
  136. package/registry/components/input.tsx +866 -0
  137. package/registry/components/menu.tsx +758 -0
  138. package/registry/components/modal.tsx +799 -0
  139. package/registry/components/pagination.tsx +543 -0
  140. package/registry/components/progress-slider.tsx +216 -0
  141. package/registry/components/progress.tsx +367 -0
  142. package/registry/components/radio-card.tsx +654 -0
  143. package/registry/components/radio-group.tsx +570 -0
  144. package/registry/components/select-content.tsx +313 -0
  145. package/registry/components/select.tsx +871 -0
  146. package/registry/components/slider.tsx +380 -0
  147. package/registry/components/social-button.tsx +360 -0
  148. package/registry/components/spinner.tsx +31 -0
  149. package/registry/components/tag.tsx +423 -0
  150. package/registry/components/textarea.tsx +625 -0
  151. package/registry/components/toggle.tsx +272 -0
  152. package/registry/components/toolbar.tsx +467 -0
  153. package/registry/components/tooltip.tsx +427 -0
  154. package/registry/examples/accordion-demo.tsx +34 -0
  155. package/registry/examples/alert-demo.tsx +14 -0
  156. package/registry/examples/attribute-demo.tsx +65 -0
  157. package/registry/examples/avatar-demo.tsx +74 -0
  158. package/registry/examples/badge-demo.tsx +53 -0
  159. package/registry/examples/button-demo.tsx +83 -0
  160. package/registry/examples/button-group-demo.tsx +42 -0
  161. package/registry/examples/card-demo.tsx +48 -0
  162. package/registry/examples/checkbox-demo.tsx +67 -0
  163. package/registry/examples/date-picker-demo.tsx +74 -0
  164. package/registry/examples/divider-demo.tsx +17 -0
  165. package/registry/examples/expanded/activity-feed-demo.tsx +22 -0
  166. package/registry/examples/expanded/banner-demo.tsx +23 -0
  167. package/registry/examples/expanded/catalog-components-demo.tsx +5 -0
  168. package/registry/examples/expanded/command-bar-demo.tsx +10 -0
  169. package/registry/examples/expanded/icons-demo.tsx +5 -0
  170. package/registry/examples/expanded/onboarding-step-demo.tsx +11 -0
  171. package/registry/examples/expanded/page-header-demo.tsx +19 -0
  172. package/registry/examples/expanded/slideout-demo.tsx +15 -0
  173. package/registry/examples/expanded/steps-demo.tsx +18 -0
  174. package/registry/examples/expanded/tabs-demo.tsx +13 -0
  175. package/registry/examples/expanded/timeline-demo.tsx +18 -0
  176. package/registry/examples/input-demo.tsx +87 -0
  177. package/registry/examples/menu-demo.tsx +109 -0
  178. package/registry/examples/modal-demo.tsx +16 -0
  179. package/registry/examples/pagination-demo.tsx +17 -0
  180. package/registry/examples/progress-demo.tsx +37 -0
  181. package/registry/examples/progress-slider-demo.tsx +29 -0
  182. package/registry/examples/radio-card-demo.tsx +51 -0
  183. package/registry/examples/radio-group-demo.tsx +62 -0
  184. package/registry/examples/select-demo.tsx +73 -0
  185. package/registry/examples/slider-demo.tsx +31 -0
  186. package/registry/examples/social-button-demo.tsx +51 -0
  187. package/registry/examples/tag-demo.tsx +29 -0
  188. package/registry/examples/textarea-demo.tsx +79 -0
  189. package/registry/examples/toggle-demo.tsx +59 -0
  190. package/registry/examples/toolbar-demo.tsx +80 -0
  191. package/registry/examples/tooltip-demo.tsx +115 -0
  192. package/registry/hooks/use-direction.ts +27 -0
  193. package/registry/index.json +1213 -0
  194. package/registry/styles/globals.css +4600 -0
  195. package/registry/utils/cn.ts +6 -0
  196. package/src/cli/index.js +826 -0
  197. package/tokens/Color mode.zip +0 -0
  198. package/tokens/Numbers.zip +0 -0
  199. package/tokens/Radius.zip +0 -0
  200. package/tokens/Theme.zip +0 -0
  201. package/tokens/banhaten.tokens.json +5525 -0
@@ -0,0 +1,109 @@
1
+ import { ChevronRightIcon, PlusIcon } from "lucide-react"
2
+
3
+ import {
4
+ Menu,
5
+ MenuCaption,
6
+ MenuItem,
7
+ MenuItemAction,
8
+ MenuItemAvatar,
9
+ MenuItemBadge,
10
+ MenuItemDescription,
11
+ MenuItemIcon,
12
+ MenuItemMeta,
13
+ MenuItemSwitch,
14
+ MenuItemText,
15
+ MenuItemTitle,
16
+ MenuLabel,
17
+ MenuProgress,
18
+ MenuSeparator,
19
+ } from "@/components/ui/menu"
20
+
21
+ export function MenuDemo() {
22
+ return (
23
+ <div className="flex flex-wrap items-start gap-8">
24
+ <Menu aria-label="Menu">
25
+ {Array.from({ length: 5 }).map((_, index) => (
26
+ <MenuItem key={index}>
27
+ <MenuItemIcon>
28
+ <PlusIcon />
29
+ </MenuItemIcon>
30
+ Text item
31
+ <MenuItemIcon position="trailing">
32
+ <ChevronRightIcon data-rtl-flip="true" />
33
+ </MenuItemIcon>
34
+ </MenuItem>
35
+ ))}
36
+ </Menu>
37
+
38
+ <Menu aria-label="Rich menu" width="default">
39
+ <MenuItem>
40
+ <MenuItemIcon>
41
+ <PlusIcon />
42
+ </MenuItemIcon>
43
+ <MenuItemAvatar>AG</MenuItemAvatar>
44
+ <MenuItemText>
45
+ <MenuItemTitle>Text item</MenuItemTitle>
46
+ </MenuItemText>
47
+ <MenuItemSwitch />
48
+ <MenuItemBadge>Badge</MenuItemBadge>
49
+ <MenuItemMeta>Text Right</MenuItemMeta>
50
+ <MenuItemIcon position="trailing">
51
+ <ChevronRightIcon data-rtl-flip="true" />
52
+ </MenuItemIcon>
53
+ </MenuItem>
54
+
55
+ <MenuItem kind="multiline">
56
+ <MenuItemIcon>
57
+ <PlusIcon />
58
+ </MenuItemIcon>
59
+ <MenuItemAvatar size="lg">AG</MenuItemAvatar>
60
+ <MenuItemText>
61
+ <MenuItemTitle>Text item</MenuItemTitle>
62
+ <MenuItemDescription>Supporting text</MenuItemDescription>
63
+ </MenuItemText>
64
+ <MenuItemSwitch active />
65
+ <MenuItemBadge>Badge</MenuItemBadge>
66
+ <MenuItemMeta>Text Right</MenuItemMeta>
67
+ <MenuItemIcon position="trailing">
68
+ <ChevronRightIcon data-rtl-flip="true" />
69
+ </MenuItemIcon>
70
+ </MenuItem>
71
+
72
+ <MenuItem kind="action">
73
+ <MenuItemIcon>
74
+ <PlusIcon />
75
+ </MenuItemIcon>
76
+ <MenuItemText>
77
+ <MenuItemTitle>Text item</MenuItemTitle>
78
+ <MenuItemDescription>Supporting text</MenuItemDescription>
79
+ </MenuItemText>
80
+ <MenuItemAction>Button</MenuItemAction>
81
+ </MenuItem>
82
+
83
+ <MenuItem kind="progress">
84
+ <MenuProgress indicator="40%" label="Label" optional="(Optional)" />
85
+ </MenuItem>
86
+ <MenuSeparator />
87
+ <MenuItem kind="button">Button</MenuItem>
88
+ <MenuLabel caption="Caption" label="Label" />
89
+ <MenuCaption>Lorem ipsum dolor sit amet</MenuCaption>
90
+ </Menu>
91
+
92
+ <div dir="rtl">
93
+ <Menu aria-label="Arabic menu">
94
+ {Array.from({ length: 5 }).map((_, index) => (
95
+ <MenuItem key={index}>
96
+ <MenuItemIcon>
97
+ <PlusIcon />
98
+ </MenuItemIcon>
99
+ {"\u0639\u0646\u0635\u0631 \u0646\u0635\u064a"}
100
+ <MenuItemIcon position="trailing">
101
+ <ChevronRightIcon data-rtl-flip="true" />
102
+ </MenuItemIcon>
103
+ </MenuItem>
104
+ ))}
105
+ </Menu>
106
+ </div>
107
+ </div>
108
+ )
109
+ }
@@ -0,0 +1,16 @@
1
+ import { Modal } from "@/components/ui/modal"
2
+
3
+ export function ModalDemo() {
4
+ return (
5
+ <div className="grid gap-6">
6
+ <div className="flex flex-wrap items-start gap-6">
7
+ <Modal size="sm" />
8
+ <Modal size="default" />
9
+ </div>
10
+ <div className="flex flex-wrap items-start gap-6">
11
+ <Modal dir="rtl" size="sm" />
12
+ <Modal dir="rtl" size="default" />
13
+ </div>
14
+ </div>
15
+ )
16
+ }
@@ -0,0 +1,17 @@
1
+ import { Pagination } from "@/components/ui/pagination"
2
+
3
+ export function PaginationDemo() {
4
+ return (
5
+ <div className="grid gap-6">
6
+ <Pagination />
7
+ <Pagination variant="ghost" />
8
+
9
+ <Pagination type="simple" />
10
+ <Pagination type="summary" />
11
+
12
+ <div dir="rtl">
13
+ <Pagination dir="rtl" />
14
+ </div>
15
+ </div>
16
+ )
17
+ }
@@ -0,0 +1,37 @@
1
+ import { Progress } from "@/components/ui/progress"
2
+
3
+ export function ProgressDemo() {
4
+ return (
5
+ <div className="grid w-full max-w-md gap-6">
6
+ <Progress
7
+ aria-label="Upload progress"
8
+ helperText="Preparing the final file"
9
+ label="Upload"
10
+ optional="(Optional)"
11
+ showInfo
12
+ showSpinner
13
+ value={40}
14
+ />
15
+
16
+ <Progress
17
+ aria-label="Storage usage"
18
+ label="Storage"
19
+ labelPosition="bottom"
20
+ value={68}
21
+ />
22
+
23
+ <div dir="rtl">
24
+ <Progress
25
+ aria-label="Arabic upload progress"
26
+ indicator="40%"
27
+ label="\u0639\u0646\u0648\u0627\u0646"
28
+ optional="\u0028\u0627\u062e\u062a\u064a\u0627\u0631\u064a\u0029"
29
+ showInfo
30
+ showSpinner
31
+ size="sm"
32
+ value={40}
33
+ />
34
+ </div>
35
+ </div>
36
+ )
37
+ }
@@ -0,0 +1,29 @@
1
+ import { ProgressSlider } from "@/components/ui/progress-slider"
2
+
3
+ export function ProgressSliderDemo() {
4
+ return (
5
+ <div className="grid gap-6">
6
+ <ProgressSlider
7
+ aria-label="Investment amount"
8
+ defaultValue={28}
9
+ showTicks
10
+ size="lg"
11
+ tone="brand"
12
+ />
13
+
14
+ <ProgressSlider
15
+ aria-label="Savings progress"
16
+ defaultValue={62}
17
+ showTicks
18
+ tone="success"
19
+ />
20
+
21
+ <ProgressSlider
22
+ aria-label="Disabled progress"
23
+ defaultValue={44}
24
+ disabled
25
+ tone="neutral"
26
+ />
27
+ </div>
28
+ )
29
+ }
@@ -0,0 +1,51 @@
1
+ import { RadioCard } from "@/components/ui/radio-card"
2
+
3
+ const radioCardDemoProps = {
4
+ description: "checkbox card description",
5
+ label: "Label",
6
+ supportDescription: "Support Description",
7
+ supportLabel: "Support",
8
+ }
9
+
10
+ const radioCardRtlDemoProps = {
11
+ description:
12
+ "\u0648\u0635\u0641 \u0628\u0637\u0627\u0642\u0629 \u0645\u0631\u0628\u0639 \u0627\u0644\u0627\u062e\u062a\u064a\u0627\u0631",
13
+ label: "\u0627\u0644\u062a\u0633\u0645\u064a\u0629",
14
+ supportDescription: "\u0648\u0635\u0641 \u062f\u0627\u0639\u0645",
15
+ supportLabel: "\u062f\u0639\u0645",
16
+ }
17
+
18
+ export function RadioCardDemo() {
19
+ return (
20
+ <div className="grid gap-6">
21
+ <div className="flex flex-wrap items-start gap-4">
22
+ <RadioCard {...radioCardDemoProps} type="with-icon" />
23
+ <RadioCard {...radioCardDemoProps} type="icon-radio-right" />
24
+ <RadioCard {...radioCardDemoProps} type="icon-radio-left" />
25
+ <RadioCard {...radioCardDemoProps} type="radio-label" />
26
+ </div>
27
+
28
+ <div className="flex flex-wrap items-start gap-4">
29
+ <RadioCard {...radioCardDemoProps} checked type="with-avatar" />
30
+ <RadioCard {...radioCardDemoProps} checked type="payment" />
31
+ <RadioCard {...radioCardDemoProps} checked type="company-icon" />
32
+ </div>
33
+
34
+ <div className="flex flex-wrap items-start gap-4" dir="rtl">
35
+ <RadioCard {...radioCardRtlDemoProps} direction="rtl" type="with-icon" />
36
+ <RadioCard
37
+ {...radioCardRtlDemoProps}
38
+ checked
39
+ direction="rtl"
40
+ type="payment"
41
+ />
42
+ <RadioCard
43
+ {...radioCardRtlDemoProps}
44
+ disabled
45
+ direction="rtl"
46
+ type="company-icon"
47
+ />
48
+ </div>
49
+ </div>
50
+ )
51
+ }
@@ -0,0 +1,62 @@
1
+ import {
2
+ RadioField,
3
+ RadioGroup,
4
+ RadioGroupItem,
5
+ } from "@/components/ui/radio-group"
6
+
7
+ export function RadioGroupDemo() {
8
+ return (
9
+ <div className="grid gap-6">
10
+ <RadioGroup
11
+ defaultValue="monthly"
12
+ description="Choose the cadence for generated invoices."
13
+ label="Billing cadence"
14
+ name="billing-cadence"
15
+ >
16
+ <RadioGroupItem
17
+ value="monthly"
18
+ label="Monthly"
19
+ description="Send one invoice every calendar month."
20
+ />
21
+ <RadioGroupItem
22
+ value="quarterly"
23
+ label="Quarterly"
24
+ description="Collect three months into a single invoice."
25
+ />
26
+ <RadioGroupItem
27
+ disabled
28
+ value="annual"
29
+ label="Annual"
30
+ description="Requires an active enterprise agreement."
31
+ />
32
+ </RadioGroup>
33
+
34
+ <RadioGroup
35
+ defaultValue="card"
36
+ label="Payment method"
37
+ name="payment-method"
38
+ orientation="horizontal"
39
+ >
40
+ <RadioGroupItem value="card" label="Card" />
41
+ <RadioGroupItem value="bank" label="Bank transfer" />
42
+ <RadioGroupItem value="wallet" label="Wallet" />
43
+ </RadioGroup>
44
+
45
+ <div className="grid gap-3">
46
+ <RadioField
47
+ defaultChecked
48
+ label="Use as default"
49
+ name="default-method"
50
+ value="default"
51
+ />
52
+ <RadioField
53
+ controlPosition="end"
54
+ description="Use the same account for refunds and future charges."
55
+ label="Keep account on file"
56
+ name="account-storage"
57
+ value="stored"
58
+ />
59
+ </div>
60
+ </div>
61
+ )
62
+ }
@@ -0,0 +1,73 @@
1
+ import {
2
+ Select,
3
+ SelectItemAvatar,
4
+ SelectItemCompanyLogo,
5
+ SelectItemFlag,
6
+ SelectItemPaymentIcon,
7
+ SelectItemStatusDot,
8
+ SelectMenuItem,
9
+ } from "@/components/ui/select"
10
+
11
+ export function SelectDemo() {
12
+ return (
13
+ <div className="grid gap-8">
14
+ <Select
15
+ helperText="This is a hint text"
16
+ label="Label"
17
+ open
18
+ placeholder="Select User"
19
+ state="filled"
20
+ value="Username"
21
+ >
22
+ <SelectMenuItem itemType="default" label="Text option" addonText="Meta" />
23
+ <SelectMenuItem itemType="avatar" label="User" addonText="Active" />
24
+ <SelectMenuItem itemType="flag" label="Egypt" addonText="+20" />
25
+ <SelectMenuItem itemType="company" label="Company" addonText="Workspace" />
26
+ <SelectMenuItem itemType="payment" label="Visa ending 2048" addonText="Default" />
27
+ <SelectMenuItem itemType="dot" label="Active status" addonText="Online" selected />
28
+ </Select>
29
+
30
+ <Select label="Payment method" value="Mastercard" variant="soft">
31
+ <SelectMenuItem
32
+ label="Custom payment"
33
+ addonText="Primary"
34
+ media={<SelectItemPaymentIcon />}
35
+ />
36
+ <SelectMenuItem
37
+ label="Custom company"
38
+ addonText="Team"
39
+ media={<SelectItemCompanyLogo />}
40
+ />
41
+ </Select>
42
+
43
+ <Select dir="rtl" label="ملصق" helperText="هذه نص تلميح.">
44
+ <SelectMenuItem
45
+ dir="rtl"
46
+ label="حدد"
47
+ addonText="إضافة نص"
48
+ selected
49
+ />
50
+ <SelectMenuItem
51
+ dir="rtl"
52
+ label="مستخدم"
53
+ addonText="نشط"
54
+ media={<SelectItemAvatar fallback="م" />}
55
+ selectionType="checkbox"
56
+ selected
57
+ />
58
+ <SelectMenuItem
59
+ dir="rtl"
60
+ label="الحالة"
61
+ addonText="متصل"
62
+ media={<SelectItemStatusDot />}
63
+ />
64
+ <SelectMenuItem
65
+ dir="rtl"
66
+ label="دولة"
67
+ addonText="+20"
68
+ media={<SelectItemFlag />}
69
+ />
70
+ </Select>
71
+ </div>
72
+ )
73
+ }
@@ -0,0 +1,31 @@
1
+ import { Slider } from "@/components/ui/slider"
2
+
3
+ export function SliderDemo() {
4
+ return (
5
+ <div className="grid gap-8">
6
+ <Slider
7
+ aria-label="Budget amount"
8
+ defaultValue={[40]}
9
+ indicator="upper-tooltip"
10
+ />
11
+
12
+ <Slider
13
+ aria-label="Savings range"
14
+ ariaLabels={["Minimum savings", "Maximum savings"]}
15
+ defaultValue={[25, 75]}
16
+ indicator="lower-text"
17
+ minStepsBetweenThumbs={4}
18
+ />
19
+
20
+ <div className="flex h-44 items-center">
21
+ <Slider
22
+ aria-label="Risk tolerance"
23
+ className="h-40"
24
+ defaultValue={[60]}
25
+ orientation="vertical"
26
+ tone="warning"
27
+ />
28
+ </div>
29
+ </div>
30
+ )
31
+ }
@@ -0,0 +1,51 @@
1
+ import { SocialButton } from "@/components/ui/social-button"
2
+
3
+ export function SocialButtonDemo() {
4
+ return (
5
+ <div className="flex flex-col gap-6">
6
+ <div className="flex flex-wrap items-center gap-3">
7
+ <SocialButton platform="apple" />
8
+ <SocialButton platform="facebook" />
9
+ <SocialButton platform="google" />
10
+ <SocialButton platform="linkedin" />
11
+ <SocialButton platform="twitter" />
12
+ <SocialButton platform="whatsapp" />
13
+ </div>
14
+
15
+ <div className="flex flex-wrap items-center gap-3">
16
+ <SocialButton platform="apple" variant="outline" />
17
+ <SocialButton platform="facebook" variant="outline" />
18
+ <SocialButton platform="google" variant="outline" />
19
+ <SocialButton platform="linkedin" variant="outline" />
20
+ <SocialButton platform="twitter" variant="outline" />
21
+ <SocialButton platform="whatsapp" variant="outline" />
22
+ </div>
23
+
24
+ <div className="flex flex-wrap items-center gap-3">
25
+ <SocialButton platform="apple" size="icon" />
26
+ <SocialButton platform="facebook" size="icon" />
27
+ <SocialButton platform="google" size="icon" />
28
+ <SocialButton platform="linkedin" size="icon" />
29
+ <SocialButton platform="twitter" size="icon" />
30
+ <SocialButton platform="whatsapp" size="icon" />
31
+ </div>
32
+
33
+ <div dir="rtl" className="flex flex-wrap items-center gap-3">
34
+ <SocialButton
35
+ label="تسجيل الدخول باستخدام آبل"
36
+ platform="apple"
37
+ variant="outline"
38
+ />
39
+ <SocialButton
40
+ label="تسجيل الدخول باستخدام فيسبوك"
41
+ platform="facebook"
42
+ />
43
+ <SocialButton
44
+ label="تسجيل الدخول باستخدام جوجل"
45
+ platform="google"
46
+ variant="outline"
47
+ />
48
+ </div>
49
+ </div>
50
+ )
51
+ }
@@ -0,0 +1,29 @@
1
+ import { PlusIcon } from "lucide-react"
2
+
3
+ import { Tag } from "@/components/ui/tag"
4
+
5
+ export function TagDemo() {
6
+ return (
7
+ <div className="flex flex-wrap items-center gap-2">
8
+ <Tag>Label</Tag>
9
+ <Tag state="active">Active</Tag>
10
+ <Tag state="disabled">Disabled</Tag>
11
+ <Tag closeLabel="Remove tag" showCloseButton>Label</Tag>
12
+ <Tag closeLabel="Remove tag" type="dot" showCloseButton>
13
+ Live
14
+ </Tag>
15
+ <Tag closeLabel="Remove tag" type="flag" showCloseButton>
16
+ Egypt
17
+ </Tag>
18
+ <Tag closeLabel="Remove tag" type="avatar" avatar="AG" showCloseButton>
19
+ Ahmed
20
+ </Tag>
21
+ <Tag closeLabel="Remove tag" type="icon" icon={<PlusIcon aria-hidden="true" />} showCloseButton>
22
+ Add
23
+ </Tag>
24
+ <Tag closeLabel="\u0625\u0632\u0627\u0644\u0629 \u0648\u0633\u0645" dir="rtl" showCloseButton>
25
+ ملصق
26
+ </Tag>
27
+ </div>
28
+ )
29
+ }
@@ -0,0 +1,79 @@
1
+ import { Textarea } from "@/components/ui/textarea"
2
+
3
+ const demoTags = [{ label: "Label", removeLabel: "Remove tag" }]
4
+ const demoRtlTags = [
5
+ {
6
+ label: "\u0645\u0644\u0635\u0642",
7
+ removeLabel: "\u0625\u0632\u0627\u0644\u0629 \u0648\u0633\u0645",
8
+ },
9
+ ]
10
+
11
+ const demoTextareaProps = {
12
+ bodyText: "Our advanced inference infrastructure provides extremely short response.",
13
+ errorMessage: "Error message",
14
+ label: "Label",
15
+ message: "This is a hint text",
16
+ optionalText: "(Optional)",
17
+ placeholder: "Type text here",
18
+ tagInputText: "Brando...",
19
+ }
20
+
21
+ const demoRtlTextareaProps = {
22
+ ...demoTextareaProps,
23
+ bodyText:
24
+ "\u062a\u0648\u0641\u0631 \u0628\u0646\u064a\u062a\u0646\u0627 \u0627\u0644\u062a\u062d\u062a\u064a\u0629 \u0627\u0644\u0645\u062a\u0642\u062f\u0645\u0629 \u0644\u0644\u0625\u0633\u062a\u062f\u0644\u0627\u0644 \u0623\u0648\u0642\u0627\u062a \u0627\u0633\u062a\u062c\u0627\u0628\u0629 \u0642\u0635\u064a\u0631\u0629 \u0644\u0644\u063a\u0627\u064a\u0629.",
25
+ errorMessage: "\u0631\u0633\u0627\u0644\u0629 \u062e\u0637\u0623",
26
+ label: "\u0645\u0644\u0635\u0642",
27
+ message: "\u0647\u0630\u0647 \u0646\u0635 \u062a\u0644\u0645\u064a\u062d.",
28
+ optionalText: "(\u062e\u064a\u0627\u0631\u064a)",
29
+ tagInputText: "\u0628\u0631\u0627\u0646\u062f\u0648...",
30
+ }
31
+
32
+ export function TextareaDemo() {
33
+ return (
34
+ <div className="grid gap-6">
35
+ <div className="flex flex-wrap items-start gap-6">
36
+ <Textarea {...demoTextareaProps} />
37
+ <Textarea {...demoTextareaProps} state="filled" />
38
+ <Textarea {...demoTextareaProps} hasError state="placeholder" />
39
+ <Textarea {...demoTextareaProps} state="disabled" />
40
+ </div>
41
+
42
+ <div className="flex flex-wrap items-start gap-6">
43
+ <Textarea {...demoTextareaProps} type="tags" state="placeholder" />
44
+ <Textarea
45
+ {...demoTextareaProps}
46
+ type="tags"
47
+ state="filled"
48
+ tags={demoTags}
49
+ />
50
+ <Textarea
51
+ {...demoTextareaProps}
52
+ type="tags"
53
+ hasError
54
+ state="filled"
55
+ tags={demoTags}
56
+ />
57
+ <Textarea
58
+ {...demoTextareaProps}
59
+ type="tags"
60
+ state="disabled"
61
+ tags={demoTags}
62
+ />
63
+ </div>
64
+
65
+ <div dir="rtl" className="flex flex-wrap items-start gap-6">
66
+ <Textarea {...demoRtlTextareaProps} dir="rtl" />
67
+ <Textarea {...demoRtlTextareaProps} dir="rtl" state="filled" />
68
+ <Textarea {...demoRtlTextareaProps} dir="rtl" hasError state="placeholder" />
69
+ <Textarea
70
+ {...demoRtlTextareaProps}
71
+ dir="rtl"
72
+ type="tags"
73
+ state="filled"
74
+ tags={demoRtlTags}
75
+ />
76
+ </div>
77
+ </div>
78
+ )
79
+ }
@@ -0,0 +1,59 @@
1
+ import * as React from "react"
2
+
3
+ import { Toggle, ToggleField } from "@/components/ui/toggle"
4
+
5
+ export function ToggleDemo() {
6
+ const [checked, setChecked] = React.useState(true)
7
+
8
+ return (
9
+ <div className="grid gap-6">
10
+ <div className="flex flex-wrap items-center gap-4">
11
+ <Toggle
12
+ checked={checked}
13
+ onCheckedChange={setChecked}
14
+ aria-label="Toggle notifications"
15
+ />
16
+ <Toggle aria-label="Small toggle" size="sm" />
17
+ <Toggle aria-label="Icon toggle" showIcon defaultChecked />
18
+ <Toggle aria-label="Disabled toggle" disabled />
19
+ </div>
20
+
21
+ <div className="grid gap-4 sm:grid-cols-2">
22
+ <ToggleField
23
+ defaultChecked
24
+ label="Label"
25
+ description="Supporting text"
26
+ />
27
+ <ToggleField
28
+ className="w-56"
29
+ controlPosition="end"
30
+ label="Label"
31
+ />
32
+ <ToggleField
33
+ disabled
34
+ label="Label"
35
+ description="Supporting text"
36
+ />
37
+ <ToggleField
38
+ defaultChecked
39
+ showIcon
40
+ size="sm"
41
+ label="Label"
42
+ />
43
+ </div>
44
+
45
+ <div dir="rtl" className="grid gap-4 sm:grid-cols-2">
46
+ <ToggleField
47
+ defaultChecked
48
+ label={"\u0627\u0644\u062a\u0633\u0645\u064a\u0629"}
49
+ description={"\u0646\u0635 \u0645\u0633\u0627\u0639\u062f"}
50
+ />
51
+ <ToggleField
52
+ className="w-56"
53
+ controlPosition="end"
54
+ label={"\u0627\u0644\u062a\u0633\u0645\u064a\u0629"}
55
+ />
56
+ </div>
57
+ </div>
58
+ )
59
+ }