siesa-ui-kit 1.0.1 → 1.0.2
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/bin/install.cjs +502 -0
- package/bin/prepare-publish.cjs +28 -0
- package/bin/restore-folders.cjs +28 -0
- package/claude/settings.local.json +7 -0
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts +101 -0
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts.map +1 -0
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts +95 -0
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts.map +1 -0
- package/dist/components/DropdownItemCollapsible/icons.d.ts +19 -0
- package/dist/components/DropdownItemCollapsible/icons.d.ts.map +1 -0
- package/dist/components/DropdownItemCollapsible/index.d.ts +9 -0
- package/dist/components/DropdownItemCollapsible/index.d.ts.map +1 -0
- package/dist/components/DropdownItemHeading/DropdownItemHeading.d.ts +75 -0
- package/dist/components/DropdownItemHeading/DropdownItemHeading.d.ts.map +1 -0
- package/dist/components/DropdownItemHeading/DropdownItemHeading.types.d.ts +85 -0
- package/dist/components/DropdownItemHeading/DropdownItemHeading.types.d.ts.map +1 -0
- package/dist/components/DropdownItemHeading/icons.d.ts +48 -0
- package/dist/components/DropdownItemHeading/icons.d.ts.map +1 -0
- package/dist/components/DropdownItemHeading/index.d.ts +4 -0
- package/dist/components/DropdownItemHeading/index.d.ts.map +1 -0
- package/dist/components/LoginView/LoginView.d.ts +36 -0
- package/dist/components/LoginView/LoginView.d.ts.map +1 -0
- package/dist/components/LoginView/LoginView.types.d.ts +46 -0
- package/dist/components/LoginView/LoginView.types.d.ts.map +1 -0
- package/dist/components/LoginView/icons.d.ts +18 -0
- package/dist/components/LoginView/icons.d.ts.map +1 -0
- package/dist/components/LoginView/index.d.ts +4 -0
- package/dist/components/LoginView/index.d.ts.map +1 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.d.ts +90 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.d.ts.map +1 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts +155 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts.map +1 -0
- package/dist/components/NavigationRailItem/index.d.ts +3 -0
- package/dist/components/NavigationRailItem/index.d.ts.map +1 -0
- package/dist/components/NavigationRailPanel/NavigationRailPanel.d.ts +124 -0
- package/dist/components/NavigationRailPanel/NavigationRailPanel.d.ts.map +1 -0
- package/dist/components/NavigationRailPanel/NavigationRailPanel.types.d.ts +154 -0
- package/dist/components/NavigationRailPanel/NavigationRailPanel.types.d.ts.map +1 -0
- package/dist/components/NavigationRailPanel/index.d.ts +3 -0
- package/dist/components/NavigationRailPanel/index.d.ts.map +1 -0
- package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts +99 -0
- package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts.map +1 -0
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts +111 -0
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts.map +1 -0
- package/dist/components/NavigationRailTypes/icons.d.ts +58 -0
- package/dist/components/NavigationRailTypes/icons.d.ts.map +1 -0
- package/dist/components/NavigationRailTypes/index.d.ts +4 -0
- package/dist/components/NavigationRailTypes/index.d.ts.map +1 -0
- package/dist/components/SignUpView/SignUpView.d.ts +38 -0
- package/dist/components/SignUpView/SignUpView.d.ts.map +1 -0
- package/dist/components/SignUpView/SignUpView.types.d.ts +51 -0
- package/dist/components/SignUpView/SignUpView.types.d.ts.map +1 -0
- package/dist/components/SignUpView/icons.d.ts +18 -0
- package/dist/components/SignUpView/icons.d.ts.map +1 -0
- package/dist/components/SignUpView/index.d.ts +4 -0
- package/dist/components/SignUpView/index.d.ts.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/siesa-ui-kit.cjs +906 -66
- package/dist/siesa-ui-kit.cjs.map +1 -1
- package/dist/siesa-ui-kit.mjs +3547 -411
- package/dist/siesa-ui-kit.mjs.map +1 -1
- package/docs/border-radius.md +1261 -0
- package/docs/colors.md +832 -0
- package/docs/dark-mode-guide.md +1426 -0
- package/docs/filters.md +1243 -0
- package/docs/icons.md +1283 -0
- package/docs/shadows.md +1377 -0
- package/docs/spacing.md +1684 -0
- package/docs/typography.md +1268 -0
- package/package.json +21 -3
- package/postcss.config.cjs +6 -0
- package/public/,Business Logo.png +0 -0
- package/public/.Siesa Logo.png +0 -0
- package/public/bg_siesa.png +0 -0
- package/public/siesa_logo_mobile.png +0 -0
- package/public/vite.svg +1 -0
- package/src/App.css +42 -0
- package/src/App.tsx +8 -0
- package/src/ButtonTest.tsx +147 -0
- package/src/assets/fonts/README.md +261 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
- package/src/assets/react.svg +1 -0
- package/src/components/Alert/Alert.stories.tsx +332 -0
- package/src/components/Alert/Alert.tsx +106 -0
- package/src/components/Alert/Alert.types.ts +54 -0
- package/src/components/Avatar/Avatar.stories.tsx +494 -0
- package/src/components/Avatar/Avatar.tsx +143 -0
- package/src/components/Avatar/Avatar.types.ts +53 -0
- package/src/components/Badge/Badge.stories.tsx +339 -0
- package/src/components/Badge/Badge.tsx +278 -0
- package/src/components/Badge/Badge.types.ts +58 -0
- package/src/components/Button/Button.stories.tsx +950 -0
- package/src/components/Button/Button.tsx +337 -0
- package/src/components/Button/Button.types.ts +180 -0
- package/src/components/Button/icons.tsx +87 -0
- package/src/components/Button/index.ts +3 -0
- package/src/components/Checkbox/Checkbox.stories.tsx +453 -0
- package/src/components/Checkbox/Checkbox.tsx +208 -0
- package/src/components/Checkbox/Checkbox.types.ts +61 -0
- package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -0
- package/src/components/DescriptionList/DescriptionList.tsx +96 -0
- package/src/components/DescriptionList/DescriptionList.types.ts +29 -0
- package/src/components/Divider/Divider.stories.tsx +263 -0
- package/src/components/Divider/Divider.tsx +80 -0
- package/src/components/Divider/Divider.types.ts +24 -0
- package/src/components/Dropdown/Dropdown.stories.tsx +552 -0
- package/src/components/Dropdown/Dropdown.tsx +422 -0
- package/src/components/Dropdown/Dropdown.types.ts +146 -0
- package/src/components/Dropdown/README.md +266 -0
- package/src/components/Dropdown/icons.tsx +72 -0
- package/src/components/Dropdown/index.ts +8 -0
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +317 -0
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +287 -0
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +111 -0
- package/src/components/DropdownItemCollapsible/README.md +264 -0
- package/src/components/DropdownItemCollapsible/icons.tsx +57 -0
- package/src/components/DropdownItemCollapsible/index.ts +12 -0
- package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +386 -0
- package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +216 -0
- package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +93 -0
- package/src/components/DropdownItemHeading/README.md +573 -0
- package/src/components/DropdownItemHeading/icons.tsx +125 -0
- package/src/components/DropdownItemHeading/index.ts +3 -0
- package/src/components/Input/Input.stories.tsx +583 -0
- package/src/components/Input/Input.tsx +204 -0
- package/src/components/Input/Input.types.ts +80 -0
- package/src/components/Input/icons.tsx +145 -0
- package/src/components/Input/index.ts +2 -0
- package/src/components/LoginView/LoginView.stories.tsx +148 -0
- package/src/components/LoginView/LoginView.tsx +426 -0
- package/src/components/LoginView/LoginView.types.ts +52 -0
- package/src/components/LoginView/README.md +396 -0
- package/src/components/LoginView/icons.tsx +85 -0
- package/src/components/LoginView/index.ts +3 -0
- package/src/components/Navbar/Navbar.stories.tsx +810 -0
- package/src/components/Navbar/Navbar.tsx +755 -0
- package/src/components/Navbar/Navbar.types.ts +219 -0
- package/src/components/Navbar/README.md +279 -0
- package/src/components/Navbar/icons.tsx +102 -0
- package/src/components/Navbar/index.ts +8 -0
- package/src/components/NavigationBar/NavigationBar.stories.tsx +406 -0
- package/src/components/NavigationBar/NavigationBar.tsx +246 -0
- package/src/components/NavigationBar/NavigationBar.types.ts +74 -0
- package/src/components/NavigationBar/README.md +469 -0
- package/src/components/NavigationBar/index.ts +2 -0
- package/src/components/NavigationRail/NavigationRail.stories.tsx +417 -0
- package/src/components/NavigationRail/NavigationRail.tsx +418 -0
- package/src/components/NavigationRail/NavigationRail.types.ts +109 -0
- package/src/components/NavigationRail/README.md +224 -0
- package/src/components/NavigationRail/index.ts +2 -0
- package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +667 -0
- package/src/components/NavigationRailItem/NavigationRailItem.tsx +313 -0
- package/src/components/NavigationRailItem/NavigationRailItem.types.ts +167 -0
- package/src/components/NavigationRailItem/README.md +476 -0
- package/src/components/NavigationRailItem/index.ts +2 -0
- package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +462 -0
- package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +332 -0
- package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +178 -0
- package/src/components/NavigationRailPanel/README.md +461 -0
- package/src/components/NavigationRailPanel/index.ts +6 -0
- package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +528 -0
- package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +378 -0
- package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +130 -0
- package/src/components/NavigationRailTypes/README.md +573 -0
- package/src/components/NavigationRailTypes/icons.tsx +141 -0
- package/src/components/NavigationRailTypes/index.ts +7 -0
- package/src/components/Notification/Notification.stories.tsx +513 -0
- package/src/components/Notification/Notification.tsx +145 -0
- package/src/components/Notification/Notification.types.ts +142 -0
- package/src/components/Notification/README.md +409 -0
- package/src/components/Notification/index.ts +3 -0
- package/src/components/POSConvention/POSConvention.stories.tsx +235 -0
- package/src/components/POSConvention/POSConvention.tsx +129 -0
- package/src/components/POSConvention/POSConvention.types.ts +38 -0
- package/src/components/POSConvention/README.md +123 -0
- package/src/components/POSConvention/icons.tsx +45 -0
- package/src/components/POSConvention/index.ts +3 -0
- package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -0
- package/src/components/POSLocationButton/POSLocationButton.tsx +247 -0
- package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -0
- package/src/components/POSLocationButton/README.md +253 -0
- package/src/components/POSLocationButton/icons.tsx +120 -0
- package/src/components/POSLocationButton/index.ts +14 -0
- package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -0
- package/src/components/POSNumberButton/POSNumberButton.tsx +179 -0
- package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -0
- package/src/components/POSNumberButton/README.md +321 -0
- package/src/components/POSNumberButton/index.ts +3 -0
- package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -0
- package/src/components/POSProductButton/POSProductButton.tsx +152 -0
- package/src/components/POSProductButton/POSProductButton.types.ts +46 -0
- package/src/components/POSProductButton/README.md +269 -0
- package/src/components/POSProductButton/index.ts +2 -0
- package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -0
- package/src/components/POSProductCard/POSProductCard.tsx +208 -0
- package/src/components/POSProductCard/POSProductCard.types.ts +76 -0
- package/src/components/POSProductCard/README.md +179 -0
- package/src/components/POSProductCard/icons.tsx +26 -0
- package/src/components/POSProductCard/index.ts +2 -0
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -0
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -0
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -0
- package/src/components/POSProductSidebarItems/README.md +198 -0
- package/src/components/POSProductSidebarItems/icons.tsx +21 -0
- package/src/components/POSProductSidebarItems/index.ts +3 -0
- package/src/components/POSTable/POSTable.stories.tsx +737 -0
- package/src/components/POSTable/POSTable.tsx +401 -0
- package/src/components/POSTable/POSTable.types.ts +83 -0
- package/src/components/POSTable/README.md +286 -0
- package/src/components/POSTable/index.ts +7 -0
- package/src/components/Pagination/Pagination.stories.tsx +555 -0
- package/src/components/Pagination/Pagination.tsx +286 -0
- package/src/components/Pagination/Pagination.types.ts +93 -0
- package/src/components/Pagination/README.md +298 -0
- package/src/components/Pagination/icons.tsx +47 -0
- package/src/components/Pagination/index.ts +3 -0
- package/src/components/Quantity/Quantity.stories.tsx +457 -0
- package/src/components/Quantity/Quantity.tsx +289 -0
- package/src/components/Quantity/Quantity.types.ts +70 -0
- package/src/components/Radio/Radio.stories.tsx +523 -0
- package/src/components/Radio/Radio.tsx +170 -0
- package/src/components/Radio/Radio.types.ts +122 -0
- package/src/components/Select/README.md +299 -0
- package/src/components/Select/Select.stories.tsx +673 -0
- package/src/components/Select/Select.tsx +454 -0
- package/src/components/Select/Select.types.ts +148 -0
- package/src/components/Select/icons.tsx +50 -0
- package/src/components/Select/index.ts +3 -0
- package/src/components/SignUpView/SignUpView.stories.tsx +129 -0
- package/src/components/SignUpView/SignUpView.tsx +503 -0
- package/src/components/SignUpView/SignUpView.types.ts +58 -0
- package/src/components/SignUpView/icons.tsx +71 -0
- package/src/components/SignUpView/index.ts +3 -0
- package/src/components/Switch/README.md +112 -0
- package/src/components/Switch/Switch.stories.tsx +550 -0
- package/src/components/Switch/Switch.tsx +246 -0
- package/src/components/Switch/Switch.types.ts +67 -0
- package/src/components/Table/README.md +369 -0
- package/src/components/Table/Table.stories.tsx +805 -0
- package/src/components/Table/Table.tsx +688 -0
- package/src/components/Table/Table.types.ts +204 -0
- package/src/components/Table/index.ts +9 -0
- package/src/components/Tabs/README.md +201 -0
- package/src/components/Tabs/Tabs.stories.tsx +580 -0
- package/src/components/Tabs/Tabs.tsx +356 -0
- package/src/components/Tabs/Tabs.types.ts +127 -0
- package/src/components/Tabs/icons.tsx +129 -0
- package/src/components/Tabs/index.ts +11 -0
- package/src/components/Textarea/Textarea.stories.tsx +535 -0
- package/src/components/Textarea/Textarea.tsx +188 -0
- package/src/components/Textarea/Textarea.types.ts +54 -0
- package/src/context/ThemeContext.tsx +99 -0
- package/src/context/index.ts +1 -0
- package/src/index.css +29 -0
- package/src/index.ts +102 -0
- package/src/main.tsx +10 -0
- package/src/views/ListView/ListView.stories.tsx +329 -0
- package/src/views/ListView/ListView.tsx +570 -0
- package/src/views/ListView/ListView.types.ts +211 -0
- package/src/views/ListView/icons.tsx +282 -0
- package/src/views/ListView/index.ts +11 -0
- package/src/views/LoginView/LoginView.stories.tsx +148 -0
- package/src/views/LoginView/LoginView.tsx +426 -0
- package/src/views/LoginView/LoginView.types.ts +52 -0
- package/src/views/LoginView/README.md +396 -0
- package/src/views/LoginView/icons.tsx +85 -0
- package/src/views/LoginView/index.ts +3 -0
- package/src/views/ProductsView/ProductsView.stories.tsx +344 -0
- package/src/views/ProductsView/ProductsView.tsx +480 -0
- package/src/views/ProductsView/ProductsView.types.ts +238 -0
- package/src/views/ProductsView/README.md +312 -0
- package/src/views/ProductsView/icons.tsx +38 -0
- package/src/views/ProductsView/index.ts +8 -0
- package/src/views/RecoverPasswordView/README.md +269 -0
- package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +131 -0
- package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -0
- package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +56 -0
- package/src/views/RecoverPasswordView/icons.tsx +17 -0
- package/src/views/RecoverPasswordView/index.ts +2 -0
- package/src/views/SignUpView/SignUpView.stories.tsx +129 -0
- package/src/views/SignUpView/SignUpView.tsx +503 -0
- package/src/views/SignUpView/SignUpView.types.ts +58 -0
- package/src/views/SignUpView/icons.tsx +71 -0
- package/src/views/SignUpView/index.ts +3 -0
- package/src/views/TableLayoutView/README.md +268 -0
- package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -0
- package/src/views/TableLayoutView/TableLayoutView.tsx +461 -0
- package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -0
- package/src/views/TableLayoutView/icons.tsx +113 -0
- package/src/views/TableLayoutView/index.ts +6 -0
- package/storybook/main.ts +20 -0
- package/storybook/preview.tsx +84 -0
- package/storybook/vitest.setup.ts +7 -0
- package/tailwind.config.js +128 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# Dropdown Component
|
|
2
|
+
|
|
3
|
+
Componente de menú desplegable del sistema de diseño Siesa UI Kit.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
- **Múltiples tipos de items**: Con iconos, descripciones y shortcuts
|
|
8
|
+
- **Headings y dividers**: Para organizar el menú
|
|
9
|
+
- **Estados completos**: Default, Hover, Focus, Disabled
|
|
10
|
+
- **Cierre automático**: Al hacer click fuera del menú
|
|
11
|
+
- **Keyboard navigation**: Escape para cerrar
|
|
12
|
+
- **Dark mode**: Soporte completo con tokens del sistema
|
|
13
|
+
- **Type-safe**: TypeScript estricto con tipos exportados
|
|
14
|
+
- **Accesible**: ARIA labels y atributos de accesibilidad
|
|
15
|
+
|
|
16
|
+
## Uso Básico
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
import { Dropdown } from '@/components/Dropdown';
|
|
20
|
+
|
|
21
|
+
<Dropdown
|
|
22
|
+
placeholder="Options"
|
|
23
|
+
items={[
|
|
24
|
+
{ children: 'Account' },
|
|
25
|
+
{ children: 'Settings' },
|
|
26
|
+
{ children: 'Logout' },
|
|
27
|
+
]}
|
|
28
|
+
/>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Con Iconos
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { Dropdown, UserIcon, CogIcon } from '@/components/Dropdown';
|
|
35
|
+
|
|
36
|
+
<Dropdown
|
|
37
|
+
placeholder="Menu"
|
|
38
|
+
items={[
|
|
39
|
+
{ children: 'Profile', icon: <UserIcon /> },
|
|
40
|
+
{ children: 'Settings', icon: <CogIcon /> },
|
|
41
|
+
]}
|
|
42
|
+
/>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Con Descripciones y Shortcuts
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
<Dropdown
|
|
49
|
+
placeholder="Edit"
|
|
50
|
+
items={[
|
|
51
|
+
{
|
|
52
|
+
children: 'Profile',
|
|
53
|
+
icon: <UserIcon />,
|
|
54
|
+
description: 'View your profile',
|
|
55
|
+
shortcut: '⌘ P',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
children: 'Settings',
|
|
59
|
+
icon: <CogIcon />,
|
|
60
|
+
description: 'Manage preferences',
|
|
61
|
+
shortcut: '⌘ ,',
|
|
62
|
+
},
|
|
63
|
+
]}
|
|
64
|
+
/>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Con Headings y Dividers
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
<Dropdown
|
|
71
|
+
placeholder="Account"
|
|
72
|
+
items={[
|
|
73
|
+
{ isHeading: true, children: 'Account' },
|
|
74
|
+
{ children: 'Profile' },
|
|
75
|
+
{ children: 'Settings' },
|
|
76
|
+
{ isDivider: true },
|
|
77
|
+
{ isHeading: true, children: 'Actions' },
|
|
78
|
+
{ children: 'Logout' },
|
|
79
|
+
]}
|
|
80
|
+
/>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Controlado
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
const [open, setOpen] = useState(false);
|
|
87
|
+
|
|
88
|
+
<Dropdown
|
|
89
|
+
placeholder="Options"
|
|
90
|
+
open={open}
|
|
91
|
+
onOpenChange={setOpen}
|
|
92
|
+
items={[
|
|
93
|
+
{ children: 'Account' },
|
|
94
|
+
{ children: 'Settings' },
|
|
95
|
+
]}
|
|
96
|
+
/>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Con Callbacks
|
|
100
|
+
|
|
101
|
+
```tsx
|
|
102
|
+
<Dropdown
|
|
103
|
+
placeholder="Actions"
|
|
104
|
+
onOpenChange={(open) => console.log('Dropdown', open ? 'opened' : 'closed')}
|
|
105
|
+
items={[
|
|
106
|
+
{
|
|
107
|
+
children: 'Edit',
|
|
108
|
+
onClick: () => console.log('Edit clicked'),
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
children: 'Delete',
|
|
112
|
+
onClick: () => console.log('Delete clicked'),
|
|
113
|
+
},
|
|
114
|
+
]}
|
|
115
|
+
/>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Props
|
|
119
|
+
|
|
120
|
+
### DropdownProps
|
|
121
|
+
|
|
122
|
+
| Prop | Type | Default | Description |
|
|
123
|
+
|------|------|---------|-------------|
|
|
124
|
+
| `children` | `ReactNode` | - | Texto del botón trigger |
|
|
125
|
+
| `items` | `DropdownItemProps[]` | - | Items del menú |
|
|
126
|
+
| `open` | `boolean` | - | Estado controlado (abierto/cerrado) |
|
|
127
|
+
| `onOpenChange` | `(open: boolean) => void` | - | Callback cuando cambia el estado |
|
|
128
|
+
| `disabled` | `boolean` | `false` | Si está deshabilitado |
|
|
129
|
+
| `className` | `string` | `''` | Clases CSS adicionales para el trigger |
|
|
130
|
+
| `menuClassName` | `string` | `''` | Clases CSS adicionales para el menú |
|
|
131
|
+
| `ariaLabel` | `string` | - | Label para accesibilidad |
|
|
132
|
+
| `placeholder` | `string` | `'Options'` | Texto cuando no hay children |
|
|
133
|
+
|
|
134
|
+
### DropdownItemProps
|
|
135
|
+
|
|
136
|
+
| Prop | Type | Default | Description |
|
|
137
|
+
|------|------|---------|-------------|
|
|
138
|
+
| `children` | `ReactNode` | - | Contenido del item |
|
|
139
|
+
| `icon` | `ReactNode` | - | Icono a la izquierda |
|
|
140
|
+
| `description` | `string` | - | Descripción secundaria |
|
|
141
|
+
| `shortcut` | `string` | - | Atajo de teclado |
|
|
142
|
+
| `disabled` | `boolean` | `false` | Si está deshabilitado |
|
|
143
|
+
| `selected` | `boolean` | `false` | Si está seleccionado |
|
|
144
|
+
| `onClick` | `(event: MouseEvent) => void` | - | Handler del click |
|
|
145
|
+
| `className` | `string` | `''` | Clases CSS adicionales |
|
|
146
|
+
| `isDivider` | `boolean` | `false` | Si es un separador |
|
|
147
|
+
| `isHeading` | `boolean` | `false` | Si es un encabezado |
|
|
148
|
+
|
|
149
|
+
## Ejemplos de Uso
|
|
150
|
+
|
|
151
|
+
### User Menu
|
|
152
|
+
|
|
153
|
+
```tsx
|
|
154
|
+
<Dropdown
|
|
155
|
+
placeholder="John Doe"
|
|
156
|
+
items={[
|
|
157
|
+
{ children: 'Profile', icon: <UserIcon />, description: 'View your profile' },
|
|
158
|
+
{ children: 'Settings', icon: <CogIcon />, description: 'Manage your account', shortcut: '⌘ ,' },
|
|
159
|
+
{ isDivider: true },
|
|
160
|
+
{ children: 'Sign out' },
|
|
161
|
+
]}
|
|
162
|
+
/>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Edit Menu
|
|
166
|
+
|
|
167
|
+
```tsx
|
|
168
|
+
<Dropdown
|
|
169
|
+
placeholder="Edit"
|
|
170
|
+
items={[
|
|
171
|
+
{ children: 'Undo', shortcut: '⌘ Z' },
|
|
172
|
+
{ children: 'Redo', shortcut: '⌘ ⇧ Z' },
|
|
173
|
+
{ isDivider: true },
|
|
174
|
+
{ children: 'Cut', shortcut: '⌘ X' },
|
|
175
|
+
{ children: 'Copy', shortcut: '⌘ C' },
|
|
176
|
+
{ children: 'Paste', shortcut: '⌘ V' },
|
|
177
|
+
]}
|
|
178
|
+
/>
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### View Menu
|
|
182
|
+
|
|
183
|
+
```tsx
|
|
184
|
+
<Dropdown
|
|
185
|
+
placeholder="View"
|
|
186
|
+
items={[
|
|
187
|
+
{ isHeading: true, children: 'Layout' },
|
|
188
|
+
{ children: 'Show Sidebar', shortcut: '⌘ B' },
|
|
189
|
+
{ children: 'Show Toolbar', shortcut: '⌘ T' },
|
|
190
|
+
{ isDivider: true },
|
|
191
|
+
{ isHeading: true, children: 'Appearance' },
|
|
192
|
+
{ children: 'Light Mode' },
|
|
193
|
+
{ children: 'Dark Mode' },
|
|
194
|
+
{ children: 'Auto' },
|
|
195
|
+
]}
|
|
196
|
+
/>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Tokens del Sistema
|
|
200
|
+
|
|
201
|
+
El componente usa los siguientes tokens del sistema:
|
|
202
|
+
|
|
203
|
+
### Colores
|
|
204
|
+
|
|
205
|
+
- `bg-bg-primary` / `dark:bg-dark-bg-primary` - Fondo del trigger
|
|
206
|
+
- `bg-background-secondary` / `dark:bg-dark-bg-primary` - Fondo del menú
|
|
207
|
+
- `text-content-primary` / `dark:text-dark-content-primary` - Texto principal
|
|
208
|
+
- `text-content-secondary` / `dark:text-content-secondary` - Texto secundario
|
|
209
|
+
- `text-content-tertiary` / `dark:text-content-tertiary` - Headings
|
|
210
|
+
- `border-border-primary` / `dark:border-dark-border-primary` - Bordes
|
|
211
|
+
|
|
212
|
+
### Spacing
|
|
213
|
+
|
|
214
|
+
- `px-3` (12px) - Padding horizontal del trigger
|
|
215
|
+
- `py-2` (8px) - Padding vertical del trigger
|
|
216
|
+
- `px-4` (16px) - Padding horizontal de items
|
|
217
|
+
- `p-1` (4px) - Padding del menú
|
|
218
|
+
- `gap-3` (12px) - Gap entre elementos
|
|
219
|
+
|
|
220
|
+
### Border Radius
|
|
221
|
+
|
|
222
|
+
- `rounded-lg` (8px) - Trigger y items
|
|
223
|
+
- `rounded-xl` (12px) - Menú
|
|
224
|
+
|
|
225
|
+
### Typography
|
|
226
|
+
|
|
227
|
+
- `text-sm` (14px) - Trigger y items
|
|
228
|
+
- `text-xs` (12px) - Headings y shortcuts
|
|
229
|
+
|
|
230
|
+
### Shadows
|
|
231
|
+
|
|
232
|
+
- `shadow-menu` - Sombra del menú desplegable
|
|
233
|
+
|
|
234
|
+
## Especificaciones de Figma
|
|
235
|
+
|
|
236
|
+
Basado en las especificaciones de Figma del Siesa UI Kit:
|
|
237
|
+
|
|
238
|
+
- **Node ID**: 4194:15134
|
|
239
|
+
- **Componentes**: DropdownButton, DropdownMenu, DropdownItem, DropdownHeading, DropdownDivider
|
|
240
|
+
- **Estados**: Default, Hover, Focus, Disabled
|
|
241
|
+
- **Dark Mode**: Completo
|
|
242
|
+
|
|
243
|
+
## Accesibilidad
|
|
244
|
+
|
|
245
|
+
- Usa `aria-haspopup="true"` en el trigger
|
|
246
|
+
- Usa `aria-expanded` para indicar el estado
|
|
247
|
+
- Soporta `Escape` para cerrar
|
|
248
|
+
- Todos los items son navegables por teclado
|
|
249
|
+
- Usa `ariaLabel` para lectores de pantalla
|
|
250
|
+
|
|
251
|
+
## Mejores Prácticas
|
|
252
|
+
|
|
253
|
+
- Usa `isDivider: true` para separadores visuales
|
|
254
|
+
- Usa `isHeading: true` para encabezados de sección
|
|
255
|
+
- Agrega `description` para contexto adicional
|
|
256
|
+
- Agrega `shortcut` para indicar atajos de teclado
|
|
257
|
+
- Usa iconos para mejorar la claridad visual
|
|
258
|
+
- Limita la cantidad de items para evitar scroll excesivo
|
|
259
|
+
|
|
260
|
+
## Referencias
|
|
261
|
+
|
|
262
|
+
- [Sistema de Colores](../../docs/colors.md)
|
|
263
|
+
- [Sistema de Tipografía](../../docs/typography.md)
|
|
264
|
+
- [Sistema de Spacing](../../docs/spacing.md)
|
|
265
|
+
- [Sistema de Sombras](../../docs/shadows.md)
|
|
266
|
+
- [Dark Mode Guide](../../docs/dark-mode-guide.md)
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iconos para el componente Dropdown
|
|
3
|
+
* Usando heroicons-micro según especificaciones de Figma
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export const ChevronDownIcon = () => (
|
|
7
|
+
<svg
|
|
8
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
9
|
+
viewBox="0 0 16 16"
|
|
10
|
+
fill="currentColor"
|
|
11
|
+
className="w-4 h-4"
|
|
12
|
+
>
|
|
13
|
+
<path
|
|
14
|
+
fillRule="evenodd"
|
|
15
|
+
d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z"
|
|
16
|
+
clipRule="evenodd"
|
|
17
|
+
/>
|
|
18
|
+
</svg>
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
export const CogIcon = () => (
|
|
22
|
+
<svg
|
|
23
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
24
|
+
viewBox="0 0 16 16"
|
|
25
|
+
fill="currentColor"
|
|
26
|
+
className="w-4 h-4"
|
|
27
|
+
>
|
|
28
|
+
<path
|
|
29
|
+
fillRule="evenodd"
|
|
30
|
+
d="M6.455 1.45A.5.5 0 0 1 6.952 1h2.096a.5.5 0 0 1 .497.45l.186 1.858a4.996 4.996 0 0 1 1.466.848l1.703-.769a.5.5 0 0 1 .639.206l1.047 1.814a.5.5 0 0 1-.14.656l-1.517 1.09a5.026 5.026 0 0 1 0 1.694l1.516 1.09a.5.5 0 0 1 .141.656l-1.047 1.814a.5.5 0 0 1-.639.206l-1.703-.768c-.433.36-.928.649-1.466.847l-.186 1.858a.5.5 0 0 1-.497.45H6.952a.5.5 0 0 1-.497-.45l-.186-1.858a4.993 4.993 0 0 1-1.466-.848l-1.703.769a.5.5 0 0 1-.639-.206l-1.047-1.814a.5.5 0 0 1 .14-.656l1.517-1.09a5.033 5.033 0 0 1 0-1.694l-1.516-1.09a.5.5 0 0 1-.141-.656L2.461 3.39a.5.5 0 0 1 .639-.206l1.703.768c.433-.36.928-.649 1.466-.847l.186-1.858ZM8 11a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"
|
|
31
|
+
clipRule="evenodd"
|
|
32
|
+
/>
|
|
33
|
+
</svg>
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
export const UserIcon = () => (
|
|
37
|
+
<svg
|
|
38
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
39
|
+
viewBox="0 0 16 16"
|
|
40
|
+
fill="currentColor"
|
|
41
|
+
className="w-4 h-4"
|
|
42
|
+
>
|
|
43
|
+
<path d="M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM12.735 14c.618 0 1.093-.561.872-1.139a6.002 6.002 0 0 0-11.215 0c-.22.578.254 1.139.872 1.139h9.47Z" />
|
|
44
|
+
</svg>
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
export const BellIcon = () => (
|
|
48
|
+
<svg
|
|
49
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
50
|
+
viewBox="0 0 16 16"
|
|
51
|
+
fill="currentColor"
|
|
52
|
+
className="w-4 h-4"
|
|
53
|
+
>
|
|
54
|
+
<path
|
|
55
|
+
fillRule="evenodd"
|
|
56
|
+
d="M12 5a4 4 0 0 0-8 0v2.379a1.5 1.5 0 0 1-.44 1.06L2.294 9.707a1 1 0 0 0-.293.707V11a1 1 0 0 0 1 1h2a3 3 0 1 0 6 0h2a1 1 0 0 0 1-1v-.586a1 1 0 0 0-.293-.707L12.44 8.44A1.5 1.5 0 0 1 12 7.38V5Zm-5.5 7a1.5 1.5 0 0 0 3 0h-3Z"
|
|
57
|
+
clipRule="evenodd"
|
|
58
|
+
/>
|
|
59
|
+
</svg>
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
export const CreditCardIcon = () => (
|
|
63
|
+
<svg
|
|
64
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
65
|
+
viewBox="0 0 16 16"
|
|
66
|
+
fill="currentColor"
|
|
67
|
+
className="w-4 h-4"
|
|
68
|
+
>
|
|
69
|
+
<path d="M2.5 3A1.5 1.5 0 0 0 1 4.5v.793c.026.009.051.02.076.032L7.674 8.51c.206.1.446.1.652 0l6.598-3.185A.755.755 0 0 1 15 5.293V4.5A1.5 1.5 0 0 0 13.5 3h-11Z" />
|
|
70
|
+
<path d="M15 6.954 8.978 9.86a2.25 2.25 0 0 1-1.956 0L1 6.954V11.5A1.5 1.5 0 0 0 2.5 13h11a1.5 1.5 0 0 0 1.5-1.5V6.954Z" />
|
|
71
|
+
</svg>
|
|
72
|
+
);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { Dropdown, DropdownItem, DropdownHeading, DropdownDivider } from './Dropdown';
|
|
2
|
+
export type {
|
|
3
|
+
DropdownProps,
|
|
4
|
+
DropdownItemProps,
|
|
5
|
+
DropdownHeadingProps,
|
|
6
|
+
DropdownDividerProps,
|
|
7
|
+
} from './Dropdown.types';
|
|
8
|
+
export { ChevronDownIcon, CogIcon, UserIcon, BellIcon, CreditCardIcon } from './icons';
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { DropdownItemCollapsible } from './DropdownItemCollapsible';
|
|
3
|
+
import { UserIcon } from './icons';
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
title: 'Components/DropdownItemCollapsible',
|
|
7
|
+
component: DropdownItemCollapsible,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: 'padded',
|
|
10
|
+
backgrounds: {
|
|
11
|
+
default: 'light',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
tags: ['autodocs'],
|
|
15
|
+
} satisfies Meta<typeof DropdownItemCollapsible>;
|
|
16
|
+
|
|
17
|
+
export default meta;
|
|
18
|
+
type Story = StoryObj<typeof meta>;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Item colapsable básico sin encabezado ni divisor
|
|
22
|
+
* Muestra estructura simple con header colapsable
|
|
23
|
+
*/
|
|
24
|
+
export const Basic: Story = {
|
|
25
|
+
render: () => (
|
|
26
|
+
<DropdownItemCollapsible
|
|
27
|
+
label="Users"
|
|
28
|
+
icon={<UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />}
|
|
29
|
+
children={[
|
|
30
|
+
{
|
|
31
|
+
label: 'Active Users',
|
|
32
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
label: 'Inactive Users',
|
|
36
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
37
|
+
},
|
|
38
|
+
]}
|
|
39
|
+
/>
|
|
40
|
+
),
|
|
41
|
+
args: {
|
|
42
|
+
label: 'Users',
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Item colapsable con encabezado de sección
|
|
48
|
+
* Útil para agrupar items relacionados
|
|
49
|
+
*/
|
|
50
|
+
export const WithHeading: Story = {
|
|
51
|
+
render: () => (
|
|
52
|
+
<DropdownItemCollapsible
|
|
53
|
+
label="Customers"
|
|
54
|
+
icon={<UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />}
|
|
55
|
+
showHeading={true}
|
|
56
|
+
headingLabel="SECTION 1"
|
|
57
|
+
children={[
|
|
58
|
+
{
|
|
59
|
+
label: 'Enterprise',
|
|
60
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
label: 'SMB',
|
|
64
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
label: 'Startup',
|
|
68
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
69
|
+
},
|
|
70
|
+
]}
|
|
71
|
+
showDivider={true}
|
|
72
|
+
/>
|
|
73
|
+
),
|
|
74
|
+
args: {
|
|
75
|
+
label: 'Customers',
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Item colapsable expandido por defecto
|
|
81
|
+
*/
|
|
82
|
+
export const DefaultOpen: Story = {
|
|
83
|
+
render: () => (
|
|
84
|
+
<DropdownItemCollapsible
|
|
85
|
+
label="Departments"
|
|
86
|
+
icon={<UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />}
|
|
87
|
+
defaultOpen={true}
|
|
88
|
+
children={[
|
|
89
|
+
{
|
|
90
|
+
label: 'Sales',
|
|
91
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
label: 'Marketing',
|
|
95
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
label: 'Engineering',
|
|
99
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
label: 'Operations',
|
|
103
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
104
|
+
},
|
|
105
|
+
]}
|
|
106
|
+
/>
|
|
107
|
+
),
|
|
108
|
+
args: {
|
|
109
|
+
label: 'Departments',
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Item deshabilitado
|
|
115
|
+
* No se puede expandir ni interactuar
|
|
116
|
+
*/
|
|
117
|
+
export const Disabled: Story = {
|
|
118
|
+
render: () => (
|
|
119
|
+
<DropdownItemCollapsible
|
|
120
|
+
label="Archived"
|
|
121
|
+
icon={<UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />}
|
|
122
|
+
disabled={true}
|
|
123
|
+
children={[
|
|
124
|
+
{
|
|
125
|
+
label: 'Old Item 1',
|
|
126
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
label: 'Old Item 2',
|
|
130
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
131
|
+
},
|
|
132
|
+
]}
|
|
133
|
+
/>
|
|
134
|
+
),
|
|
135
|
+
args: {
|
|
136
|
+
label: 'Archived',
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Item simple sin items anidados (no colapsable)
|
|
142
|
+
* Actúa como un botón normal
|
|
143
|
+
*/
|
|
144
|
+
export const Simple: Story = {
|
|
145
|
+
args: {
|
|
146
|
+
label: 'Single Item',
|
|
147
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
148
|
+
isCollapsible: false,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Item sin icono
|
|
154
|
+
*/
|
|
155
|
+
export const WithoutIcon: Story = {
|
|
156
|
+
render: () => (
|
|
157
|
+
<DropdownItemCollapsible
|
|
158
|
+
label="No Icon Item"
|
|
159
|
+
children={[
|
|
160
|
+
{
|
|
161
|
+
label: 'Child 1',
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
label: 'Child 2',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
label: 'Child 3',
|
|
168
|
+
},
|
|
169
|
+
]}
|
|
170
|
+
/>
|
|
171
|
+
),
|
|
172
|
+
args: {
|
|
173
|
+
label: 'No Icon Item',
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Items anidados sin iconos
|
|
179
|
+
*/
|
|
180
|
+
export const ChildrenWithoutIcons: Story = {
|
|
181
|
+
render: () => (
|
|
182
|
+
<DropdownItemCollapsible
|
|
183
|
+
label="Groups"
|
|
184
|
+
icon={<UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />}
|
|
185
|
+
children={[
|
|
186
|
+
{
|
|
187
|
+
label: 'Admins',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
label: 'Users',
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
label: 'Guests',
|
|
194
|
+
},
|
|
195
|
+
]}
|
|
196
|
+
/>
|
|
197
|
+
),
|
|
198
|
+
args: {
|
|
199
|
+
label: 'Groups',
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Múltiples items colapsables para simular dropdown completo
|
|
205
|
+
*/
|
|
206
|
+
export const MultipleItems: Story = {
|
|
207
|
+
args: {
|
|
208
|
+
label: 'Multi Demo',
|
|
209
|
+
},
|
|
210
|
+
render: () => (
|
|
211
|
+
<div className="flex flex-col gap-0 w-56 bg-bg-primary dark:bg-dark-bg-primary rounded-lg border border-border-primary dark:border-dark-border-primary p-2">
|
|
212
|
+
<DropdownItemCollapsible
|
|
213
|
+
label="Users"
|
|
214
|
+
icon={<UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />}
|
|
215
|
+
showHeading={true}
|
|
216
|
+
headingLabel="RESOURCES"
|
|
217
|
+
showDivider={true}
|
|
218
|
+
children={[
|
|
219
|
+
{
|
|
220
|
+
label: 'Active Users',
|
|
221
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
label: 'Inactive Users',
|
|
225
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
226
|
+
},
|
|
227
|
+
]}
|
|
228
|
+
/>
|
|
229
|
+
|
|
230
|
+
<DropdownItemCollapsible
|
|
231
|
+
label="Departments"
|
|
232
|
+
icon={<UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />}
|
|
233
|
+
showDivider={true}
|
|
234
|
+
children={[
|
|
235
|
+
{
|
|
236
|
+
label: 'Sales',
|
|
237
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
label: 'Marketing',
|
|
241
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
label: 'Engineering',
|
|
245
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
246
|
+
},
|
|
247
|
+
]}
|
|
248
|
+
/>
|
|
249
|
+
|
|
250
|
+
<DropdownItemCollapsible
|
|
251
|
+
label="Settings"
|
|
252
|
+
icon={<UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />}
|
|
253
|
+
showDivider={false}
|
|
254
|
+
isCollapsible={false}
|
|
255
|
+
/>
|
|
256
|
+
</div>
|
|
257
|
+
),
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Ejemplo con callbacks
|
|
262
|
+
*/
|
|
263
|
+
export const WithCallbacks: Story = {
|
|
264
|
+
render: () => (
|
|
265
|
+
<DropdownItemCollapsible
|
|
266
|
+
label="Actions"
|
|
267
|
+
icon={<UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />}
|
|
268
|
+
defaultOpen={false}
|
|
269
|
+
children={[
|
|
270
|
+
{
|
|
271
|
+
label: 'Edit',
|
|
272
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
273
|
+
onClick: () => console.log('Edit clicked'),
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
label: 'Delete',
|
|
277
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
278
|
+
onClick: () => console.log('Delete clicked'),
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
label: 'Archive',
|
|
282
|
+
disabled: true,
|
|
283
|
+
icon: <UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />,
|
|
284
|
+
},
|
|
285
|
+
]}
|
|
286
|
+
onOpenChange={(open) => console.log('Toggle state:', open)}
|
|
287
|
+
/>
|
|
288
|
+
),
|
|
289
|
+
args: {
|
|
290
|
+
label: 'Actions',
|
|
291
|
+
},
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Item con muchos items anidados
|
|
296
|
+
*/
|
|
297
|
+
export const ManyChildren: Story = {
|
|
298
|
+
render: () => (
|
|
299
|
+
<DropdownItemCollapsible
|
|
300
|
+
label="Countries"
|
|
301
|
+
icon={<UserIcon className="w-4 h-4 stroke-content-secondary dark:stroke-content-secondary" />}
|
|
302
|
+
children={[
|
|
303
|
+
{ label: 'United States' },
|
|
304
|
+
{ label: 'Canada' },
|
|
305
|
+
{ label: 'Mexico' },
|
|
306
|
+
{ label: 'Brazil' },
|
|
307
|
+
{ label: 'Argentina' },
|
|
308
|
+
{ label: 'Chile' },
|
|
309
|
+
{ label: 'Colombia' },
|
|
310
|
+
{ label: 'Peru' },
|
|
311
|
+
]}
|
|
312
|
+
/>
|
|
313
|
+
),
|
|
314
|
+
args: {
|
|
315
|
+
label: 'Countries',
|
|
316
|
+
},
|
|
317
|
+
};
|