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.
- package/LICENSE +21 -0
- package/README.md +361 -0
- package/banhaten.config.example.json +13 -0
- package/package.json +59 -0
- package/registry/assets/activity-feed-avatar.png +0 -0
- package/registry/assets/avatars/avatar-01.jpg +0 -0
- package/registry/assets/avatars/avatar-02.jpg +0 -0
- package/registry/assets/avatars/avatar-03.jpg +0 -0
- package/registry/assets/avatars/avatar-04.jpg +0 -0
- package/registry/assets/avatars/avatar-05.jpg +0 -0
- package/registry/assets/avatars/avatar-06.jpg +0 -0
- package/registry/assets/avatars/avatar-07.jpg +0 -0
- package/registry/assets/avatars/avatar-08.jpg +0 -0
- package/registry/assets/avatars/avatar-09.jpg +0 -0
- package/registry/assets/avatars/avatar-10.jpg +0 -0
- package/registry/assets/avatars/avatar-11.jpg +0 -0
- package/registry/assets/avatars/avatar-12.jpg +0 -0
- package/registry/assets/avatars/avatar-13.jpg +0 -0
- package/registry/assets/avatars/avatar-14.jpg +0 -0
- package/registry/assets/avatars/avatar-15.jpg +0 -0
- package/registry/assets/avatars/avatar-16.jpg +0 -0
- package/registry/assets/avatars/avatar-17.jpg +0 -0
- package/registry/assets/avatars/avatar-18.jpg +0 -0
- package/registry/assets/avatars/avatar-19.jpg +0 -0
- package/registry/assets/avatars/avatar-20.jpg +0 -0
- package/registry/assets/avatars/avatar-21.jpg +0 -0
- package/registry/assets/avatars/avatar-22.jpg +0 -0
- package/registry/assets/avatars/avatar-23.jpg +0 -0
- package/registry/assets/avatars/avatar-24.jpg +0 -0
- package/registry/assets/avatars/avatar-25.jpg +0 -0
- package/registry/assets/avatars/avatar-26.jpg +0 -0
- package/registry/assets/avatars/avatar-27.jpg +0 -0
- package/registry/assets/avatars/avatar-28.jpg +0 -0
- package/registry/assets/avatars/avatar-29.jpg +0 -0
- package/registry/assets/avatars/avatar-30.jpg +0 -0
- package/registry/assets/avatars/avatar-31.jpg +0 -0
- package/registry/assets/avatars/avatar-32.jpg +0 -0
- package/registry/assets/avatars/avatar-33.jpg +0 -0
- package/registry/assets/avatars/avatar-34.jpg +0 -0
- package/registry/assets/avatars/avatar-35.jpg +0 -0
- package/registry/assets/image-assets.json +744 -0
- package/registry/assets/images/art-01.jpg +0 -0
- package/registry/assets/images/art-02.jpg +0 -0
- package/registry/assets/images/art-03.jpg +0 -0
- package/registry/assets/images/art-04.jpg +0 -0
- package/registry/assets/images/art-05.jpg +0 -0
- package/registry/assets/images/art-06.jpg +0 -0
- package/registry/assets/images/art-07.jpg +0 -0
- package/registry/assets/images/art-08.jpg +0 -0
- package/registry/assets/images/art-09.jpg +0 -0
- package/registry/assets/images/art-10.jpg +0 -0
- package/registry/assets/images/art-11.jpg +0 -0
- package/registry/assets/images/art-12.jpg +0 -0
- package/registry/assets/images/art-13.jpg +0 -0
- package/registry/assets/images/art-14.jpg +0 -0
- package/registry/assets/images/art-15.jpg +0 -0
- package/registry/assets/images/art-16.jpg +0 -0
- package/registry/assets/images/art-17.jpg +0 -0
- package/registry/assets/images/art-18.jpg +0 -0
- package/registry/assets/images/art-19.jpg +0 -0
- package/registry/assets/images/art-20.jpg +0 -0
- package/registry/assets/images/art-21.jpg +0 -0
- package/registry/assets/images/art-22.jpg +0 -0
- package/registry/assets/images/art-23.jpg +0 -0
- package/registry/assets/images/art-24.jpg +0 -0
- package/registry/assets/images/art-25.jpg +0 -0
- package/registry/assets/images/art-26.jpg +0 -0
- package/registry/assets/images/art-27.jpg +0 -0
- package/registry/assets/images/nature-01.jpg +0 -0
- package/registry/assets/images/nature-02.jpg +0 -0
- package/registry/assets/images/nature-03.jpg +0 -0
- package/registry/assets/images/nature-04.jpg +0 -0
- package/registry/assets/images/nature-05.jpg +0 -0
- package/registry/assets/images/nature-06.jpg +0 -0
- package/registry/assets/images/nature-07.jpg +0 -0
- package/registry/assets/images/nature-08.jpg +0 -0
- package/registry/assets/images/nature-09.jpg +0 -0
- package/registry/assets/images/nature-10.jpg +0 -0
- package/registry/assets/images/nature-11.jpg +0 -0
- package/registry/assets/images/nature-12.jpg +0 -0
- package/registry/assets/images/nature-13.jpg +0 -0
- package/registry/assets/images/nature-14.jpg +0 -0
- package/registry/assets/images/nature-15.jpg +0 -0
- package/registry/assets/images/nature-16.jpg +0 -0
- package/registry/assets/images/nature-17.jpg +0 -0
- package/registry/assets/images/nature-18.jpg +0 -0
- package/registry/assets/images/nature-19.jpg +0 -0
- package/registry/assets/images/nature-20.jpg +0 -0
- package/registry/components/accordion.tsx +119 -0
- package/registry/components/alert.tsx +282 -0
- package/registry/components/attribute.tsx +452 -0
- package/registry/components/avatar.tsx +142 -0
- package/registry/components/badge.tsx +567 -0
- package/registry/components/button-group.tsx +246 -0
- package/registry/components/button.tsx +102 -0
- package/registry/components/card.tsx +613 -0
- package/registry/components/checkbox.tsx +244 -0
- package/registry/components/date-picker.tsx +1143 -0
- package/registry/components/divider.tsx +82 -0
- package/registry/components/expanded/ActivityFeed.tsx +226 -0
- package/registry/components/expanded/Banner.tsx +145 -0
- package/registry/components/expanded/BannerBoard.tsx +225 -0
- package/registry/components/expanded/Breadcrumbs.tsx +156 -0
- package/registry/components/expanded/CatalogComponentsShowcase.tsx +211 -0
- package/registry/components/expanded/CatalogDivider.tsx +48 -0
- package/registry/components/expanded/CatalogTag.tsx +92 -0
- package/registry/components/expanded/CommandBar.tsx +406 -0
- package/registry/components/expanded/FileUpload.tsx +231 -0
- package/registry/components/expanded/IconExplorer.tsx +612 -0
- package/registry/components/expanded/OnboardingStepListItem.tsx +67 -0
- package/registry/components/expanded/PageHeader.tsx +184 -0
- package/registry/components/expanded/Slideout.tsx +514 -0
- package/registry/components/expanded/Steps.tsx +266 -0
- package/registry/components/expanded/Table.tsx +1014 -0
- package/registry/components/expanded/Tabs.tsx +86 -0
- package/registry/components/expanded/Timeline.tsx +235 -0
- package/registry/components/expanded/TimelineShowcase.tsx +158 -0
- package/registry/components/expanded/activityFeed.css +292 -0
- package/registry/components/expanded/banner.css +312 -0
- package/registry/components/expanded/breadcrumbs.css +140 -0
- package/registry/components/expanded/catalogComponentsShowcase.css +87 -0
- package/registry/components/expanded/commandBar.css +473 -0
- package/registry/components/expanded/divider.css +75 -0
- package/registry/components/expanded/fileUpload.css +228 -0
- package/registry/components/expanded/iconExplorer.css +764 -0
- package/registry/components/expanded/iconPacks.ts +866 -0
- package/registry/components/expanded/onboardingStepListItem.css +126 -0
- package/registry/components/expanded/pageHeader.css +287 -0
- package/registry/components/expanded/slideout.css +955 -0
- package/registry/components/expanded/steps.css +329 -0
- package/registry/components/expanded/table.css +607 -0
- package/registry/components/expanded/tabs.css +197 -0
- package/registry/components/expanded/tag.css +148 -0
- package/registry/components/expanded/timeline.css +282 -0
- package/registry/components/input-content.ts +106 -0
- package/registry/components/input.tsx +866 -0
- package/registry/components/menu.tsx +758 -0
- package/registry/components/modal.tsx +799 -0
- package/registry/components/pagination.tsx +543 -0
- package/registry/components/progress-slider.tsx +216 -0
- package/registry/components/progress.tsx +367 -0
- package/registry/components/radio-card.tsx +654 -0
- package/registry/components/radio-group.tsx +570 -0
- package/registry/components/select-content.tsx +313 -0
- package/registry/components/select.tsx +871 -0
- package/registry/components/slider.tsx +380 -0
- package/registry/components/social-button.tsx +360 -0
- package/registry/components/spinner.tsx +31 -0
- package/registry/components/tag.tsx +423 -0
- package/registry/components/textarea.tsx +625 -0
- package/registry/components/toggle.tsx +272 -0
- package/registry/components/toolbar.tsx +467 -0
- package/registry/components/tooltip.tsx +427 -0
- package/registry/examples/accordion-demo.tsx +34 -0
- package/registry/examples/alert-demo.tsx +14 -0
- package/registry/examples/attribute-demo.tsx +65 -0
- package/registry/examples/avatar-demo.tsx +74 -0
- package/registry/examples/badge-demo.tsx +53 -0
- package/registry/examples/button-demo.tsx +83 -0
- package/registry/examples/button-group-demo.tsx +42 -0
- package/registry/examples/card-demo.tsx +48 -0
- package/registry/examples/checkbox-demo.tsx +67 -0
- package/registry/examples/date-picker-demo.tsx +74 -0
- package/registry/examples/divider-demo.tsx +17 -0
- package/registry/examples/expanded/activity-feed-demo.tsx +22 -0
- package/registry/examples/expanded/banner-demo.tsx +23 -0
- package/registry/examples/expanded/catalog-components-demo.tsx +5 -0
- package/registry/examples/expanded/command-bar-demo.tsx +10 -0
- package/registry/examples/expanded/icons-demo.tsx +5 -0
- package/registry/examples/expanded/onboarding-step-demo.tsx +11 -0
- package/registry/examples/expanded/page-header-demo.tsx +19 -0
- package/registry/examples/expanded/slideout-demo.tsx +15 -0
- package/registry/examples/expanded/steps-demo.tsx +18 -0
- package/registry/examples/expanded/tabs-demo.tsx +13 -0
- package/registry/examples/expanded/timeline-demo.tsx +18 -0
- package/registry/examples/input-demo.tsx +87 -0
- package/registry/examples/menu-demo.tsx +109 -0
- package/registry/examples/modal-demo.tsx +16 -0
- package/registry/examples/pagination-demo.tsx +17 -0
- package/registry/examples/progress-demo.tsx +37 -0
- package/registry/examples/progress-slider-demo.tsx +29 -0
- package/registry/examples/radio-card-demo.tsx +51 -0
- package/registry/examples/radio-group-demo.tsx +62 -0
- package/registry/examples/select-demo.tsx +73 -0
- package/registry/examples/slider-demo.tsx +31 -0
- package/registry/examples/social-button-demo.tsx +51 -0
- package/registry/examples/tag-demo.tsx +29 -0
- package/registry/examples/textarea-demo.tsx +79 -0
- package/registry/examples/toggle-demo.tsx +59 -0
- package/registry/examples/toolbar-demo.tsx +80 -0
- package/registry/examples/tooltip-demo.tsx +115 -0
- package/registry/hooks/use-direction.ts +27 -0
- package/registry/index.json +1213 -0
- package/registry/styles/globals.css +4600 -0
- package/registry/utils/cn.ts +6 -0
- package/src/cli/index.js +826 -0
- package/tokens/Color mode.zip +0 -0
- package/tokens/Numbers.zip +0 -0
- package/tokens/Radius.zip +0 -0
- package/tokens/Theme.zip +0 -0
- 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
|
+
}
|