siesa-ui-kit 1.0.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/README.md +89 -0
- package/bin/install.cjs +502 -0
- package/bin/prepare-publish.cjs +28 -0
- package/bin/restore-folders.cjs +28 -0
- package/claude/agents/siesa-ui-kit-specialist.md +2401 -0
- package/claude/prompts/component-template.md +121 -0
- package/claude/settings.local.json +61 -0
- 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 +83 -0
- 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/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/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 +39 -0
- package/src/main.tsx +10 -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/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,113 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Iconos para TableLayoutView
|
|
5
|
+
* Basados en Heroicons Micro (16x16px)
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// Icono Plus (heroicons-micro/plus)
|
|
9
|
+
export const PlusIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
10
|
+
<svg
|
|
11
|
+
className={className}
|
|
12
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
13
|
+
viewBox="0 0 16 16"
|
|
14
|
+
fill="currentColor"
|
|
15
|
+
aria-hidden="true"
|
|
16
|
+
>
|
|
17
|
+
<path d="M8.75 3.75a.75.75 0 0 0-1.5 0v3.5h-3.5a.75.75 0 0 0 0 1.5h3.5v3.5a.75.75 0 0 0 1.5 0v-3.5h3.5a.75.75 0 0 0 0-1.5h-3.5v-3.5Z" />
|
|
18
|
+
</svg>
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
// Icono Arrows Pointing In (heroicons-micro/arrows-pointing-in)
|
|
22
|
+
export const ArrowsPointingInIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
23
|
+
<svg
|
|
24
|
+
className={className}
|
|
25
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
26
|
+
viewBox="0 0 16 16"
|
|
27
|
+
fill="currentColor"
|
|
28
|
+
aria-hidden="true"
|
|
29
|
+
>
|
|
30
|
+
<path
|
|
31
|
+
fillRule="evenodd"
|
|
32
|
+
d="M2.22 2.22a.75.75 0 0 1 1.06 0l2 2a.75.75 0 1 1-1.06 1.06l-.72-.72v2.69a.75.75 0 0 1-1.5 0V2.5c0-.69.56-1.25 1.25-1.25h4.75a.75.75 0 0 1 0 1.5H4.81l.72.72a.75.75 0 0 1-1.06 1.06l-2-2a.75.75 0 0 1 0-1.06ZM9 2.75a.75.75 0 0 1 .75-.75h4.75C15.19 2 15.75 2.56 15.75 3.25v4.75a.75.75 0 0 1-1.5 0V5.31l-.72.72a.75.75 0 1 1-1.06-1.06l2-2a.75.75 0 0 1 1.06 0l2 2a.75.75 0 1 1-1.06 1.06l-.72-.72V8a.75.75 0 0 1-1.5 0V3.5H9.75A.75.75 0 0 1 9 2.75ZM2.75 9a.75.75 0 0 1 .75.75v2.69l.72-.72a.75.75 0 1 1 1.06 1.06l-2 2a.75.75 0 0 1-1.06 0l-2-2a.75.75 0 1 1 1.06-1.06l.72.72V9.75c0-.41.34-.75.75-.75Zm10.5 0a.75.75 0 0 1 .75.75v3.5h3.5a.75.75 0 0 1 0 1.5h-4.75c-.69 0-1.25-.56-1.25-1.25V9.75a.75.75 0 0 1 .75-.75Z"
|
|
33
|
+
clipRule="evenodd"
|
|
34
|
+
/>
|
|
35
|
+
</svg>
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
// Icono Arrows Pointing Out (heroicons-micro/arrows-pointing-out)
|
|
39
|
+
export const ArrowsPointingOutIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
40
|
+
<svg
|
|
41
|
+
className={className}
|
|
42
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
43
|
+
viewBox="0 0 16 16"
|
|
44
|
+
fill="currentColor"
|
|
45
|
+
aria-hidden="true"
|
|
46
|
+
>
|
|
47
|
+
<path
|
|
48
|
+
fillRule="evenodd"
|
|
49
|
+
d="M2.75 2a.75.75 0 0 0-.75.75v3.5a.75.75 0 0 0 1.5 0V3.81l2.47 2.47a.75.75 0 1 0 1.06-1.06L4.56 2.75h2.69a.75.75 0 0 0 0-1.5h-4.5ZM9 2.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-2.69l2.47 2.47a.75.75 0 1 1-1.06 1.06L10.5 4.56v2.69a.75.75 0 0 1-1.5 0v-4.5ZM2.75 9a.75.75 0 0 1 .75.75v2.69l2.47-2.47a.75.75 0 1 1 1.06 1.06L4.56 13.5h2.69a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75v-4.5a.75.75 0 0 1 .75-.75Zm10.5 0a.75.75 0 0 1 .75.75v4.5a.75.75 0 0 1-.75.75h-4.5a.75.75 0 0 1 0-1.5h2.69l-2.47-2.47a.75.75 0 1 1 1.06-1.06l2.47 2.47V9.75a.75.75 0 0 1 .75-.75Z"
|
|
50
|
+
clipRule="evenodd"
|
|
51
|
+
/>
|
|
52
|
+
</svg>
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
// Icono Arrow Right End On Rectangle (heroicons-micro/arrow-right-end-on-rectangle)
|
|
56
|
+
export const ArrowRightEndOnRectangleIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
57
|
+
<svg
|
|
58
|
+
className={className}
|
|
59
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
60
|
+
viewBox="0 0 16 16"
|
|
61
|
+
fill="currentColor"
|
|
62
|
+
aria-hidden="true"
|
|
63
|
+
>
|
|
64
|
+
<path
|
|
65
|
+
fillRule="evenodd"
|
|
66
|
+
d="M2 4.75A2.75 2.75 0 0 1 4.75 2h3a2.75 2.75 0 0 1 2.75 2.75v.5a.75.75 0 0 1-1.5 0v-.5c0-.69-.56-1.25-1.25-1.25h-3c-.69 0-1.25.56-1.25 1.25v6.5c0 .69.56 1.25 1.25 1.25h3c.69 0 1.25-.56 1.25-1.25v-.5a.75.75 0 0 1 1.5 0v.5A2.75 2.75 0 0 1 7.75 14h-3A2.75 2.75 0 0 1 2 11.25v-6.5Zm10.58 2.96-1.72-1.72a.75.75 0 1 1 1.06-1.06l2.78 2.78c.3.29.3.76 0 1.06l-2.78 2.78a.75.75 0 1 1-1.06-1.06l1.72-1.72H7.25a.75.75 0 0 1 0-1.5h5.33Z"
|
|
67
|
+
clipRule="evenodd"
|
|
68
|
+
/>
|
|
69
|
+
</svg>
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// Icono Arrows Right Left (heroicons-micro/arrows-right-left)
|
|
73
|
+
export const ArrowsRightLeftIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
74
|
+
<svg
|
|
75
|
+
className={className}
|
|
76
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
77
|
+
viewBox="0 0 16 16"
|
|
78
|
+
fill="currentColor"
|
|
79
|
+
aria-hidden="true"
|
|
80
|
+
>
|
|
81
|
+
<path
|
|
82
|
+
fillRule="evenodd"
|
|
83
|
+
d="M13.78 10.47a.75.75 0 0 1 0 1.06l-2.25 2.25a.75.75 0 1 1-1.06-1.06l.97-.97H5.75a.75.75 0 0 1 0-1.5h5.69l-.97-.97a.75.75 0 0 1 1.06-1.06l2.25 2.25ZM2.22 5.53a.75.75 0 0 1 0-1.06l2.25-2.25a.75.75 0 0 1 1.06 1.06l-.97.97h5.69a.75.75 0 0 1 0 1.5H4.56l.97.97a.75.75 0 1 1-1.06 1.06L2.22 5.53Z"
|
|
84
|
+
clipRule="evenodd"
|
|
85
|
+
/>
|
|
86
|
+
</svg>
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
// Icono Rectangle Group (heroicons-micro/rectangle-group)
|
|
90
|
+
export const RectangleGroupIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
91
|
+
<svg
|
|
92
|
+
className={className}
|
|
93
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
94
|
+
viewBox="0 0 16 16"
|
|
95
|
+
fill="currentColor"
|
|
96
|
+
aria-hidden="true"
|
|
97
|
+
>
|
|
98
|
+
<path d="M2.5 3.5h3v3h-3v-3ZM6.5 2a.5.5 0 0 0-.5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 0-.5-.5h-4ZM2.5 10.5h3v3h-3v-3ZM6.5 9a.5.5 0 0 0-.5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 0-.5-.5h-4ZM10.5 3.5h3v3h-3v-3ZM13.5 2h-3a.5.5 0 0 0-.5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 0-.5-.5h-.5ZM10.5 10.5h3v3h-3v-3Z" />
|
|
99
|
+
</svg>
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
// Icono X Mark (heroicons-micro/x-mark)
|
|
103
|
+
export const XMarkIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
104
|
+
<svg
|
|
105
|
+
className={className}
|
|
106
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
107
|
+
viewBox="0 0 16 16"
|
|
108
|
+
fill="currentColor"
|
|
109
|
+
aria-hidden="true"
|
|
110
|
+
>
|
|
111
|
+
<path d="M5.28 4.22a.75.75 0 0 0-1.06 1.06L6.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L8 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L9.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L8 6.94 5.28 4.22Z" />
|
|
112
|
+
</svg>
|
|
113
|
+
);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { StorybookConfig } from '@storybook/react-vite';
|
|
2
|
+
|
|
3
|
+
const config: StorybookConfig = {
|
|
4
|
+
"stories": [
|
|
5
|
+
"../src/**/*.mdx",
|
|
6
|
+
"../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"
|
|
7
|
+
],
|
|
8
|
+
"addons": [
|
|
9
|
+
"@chromatic-com/storybook",
|
|
10
|
+
"@storybook/addon-docs",
|
|
11
|
+
"@storybook/addon-onboarding",
|
|
12
|
+
"@storybook/addon-a11y",
|
|
13
|
+
"@storybook/addon-vitest"
|
|
14
|
+
],
|
|
15
|
+
"framework": {
|
|
16
|
+
"name": "@storybook/react-vite",
|
|
17
|
+
"options": {}
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
export default config;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { Preview } from '@storybook/react-vite';
|
|
2
|
+
import React, { useEffect } from 'react';
|
|
3
|
+
import '../src/index.css';
|
|
4
|
+
|
|
5
|
+
// Decorador global para manejar el tema en Storybook
|
|
6
|
+
const withTheme = (Story: any, context: any) => {
|
|
7
|
+
const { theme } = context.globals;
|
|
8
|
+
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
const htmlElement = document.documentElement;
|
|
11
|
+
|
|
12
|
+
if (theme === 'dark') {
|
|
13
|
+
htmlElement.classList.add('dark');
|
|
14
|
+
} else {
|
|
15
|
+
htmlElement.classList.remove('dark');
|
|
16
|
+
}
|
|
17
|
+
}, [theme]);
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<div className="bg-white dark:bg-dark-bg-primary text-content-primary dark:text-dark-content-primary p-6">
|
|
21
|
+
<Story />
|
|
22
|
+
</div>
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const preview: Preview = {
|
|
27
|
+
parameters: {
|
|
28
|
+
controls: {
|
|
29
|
+
matchers: {
|
|
30
|
+
color: /(background|color)$/i,
|
|
31
|
+
date: /Date$/i,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
a11y: {
|
|
36
|
+
// 'todo' - show a11y violations in the test UI only
|
|
37
|
+
// 'error' - fail CI on a11y violations
|
|
38
|
+
// 'off' - skip a11y checks entirely
|
|
39
|
+
test: 'todo'
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
// Configuración de fondos para las historias
|
|
43
|
+
backgrounds: {
|
|
44
|
+
default: 'light',
|
|
45
|
+
values: [
|
|
46
|
+
{
|
|
47
|
+
name: 'light',
|
|
48
|
+
value: '#ffffff',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'dark',
|
|
52
|
+
value: '#000000',
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
// Deshabilitar la cuadrícula de fondo
|
|
58
|
+
grid: {
|
|
59
|
+
disable: true,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
// Control global de tema
|
|
64
|
+
globalTypes: {
|
|
65
|
+
theme: {
|
|
66
|
+
name: 'Theme',
|
|
67
|
+
description: 'Global theme for components',
|
|
68
|
+
defaultValue: 'light',
|
|
69
|
+
toolbar: {
|
|
70
|
+
title: 'Theme',
|
|
71
|
+
icon: 'circlehollow',
|
|
72
|
+
items: [
|
|
73
|
+
{ value: 'light', icon: 'sun', title: 'Light' },
|
|
74
|
+
{ value: 'dark', icon: 'moon', title: 'Dark' },
|
|
75
|
+
],
|
|
76
|
+
dynamicTitle: true,
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
decorators: [withTheme],
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export default preview;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as a11yAddonAnnotations from "@storybook/addon-a11y/preview";
|
|
2
|
+
import { setProjectAnnotations } from '@storybook/react-vite';
|
|
3
|
+
import * as projectAnnotations from './preview';
|
|
4
|
+
|
|
5
|
+
// This is an important step to apply the right configuration when testing your stories.
|
|
6
|
+
// More info at: https://storybook.js.org/docs/api/portable-stories/portable-stories-vitest#setprojectannotations
|
|
7
|
+
setProjectAnnotations([a11yAddonAnnotations, projectAnnotations]);
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/** @type {import('tailwindcss').Config} */
|
|
2
|
+
module.exports = {
|
|
3
|
+
darkMode: 'class', // Habilita dark mode con clase 'dark' en el elemento raíz
|
|
4
|
+
content: [
|
|
5
|
+
"./index.html",
|
|
6
|
+
"./src/**/*.{js,ts,jsx,tsx}",
|
|
7
|
+
],
|
|
8
|
+
theme: {
|
|
9
|
+
extend: {
|
|
10
|
+
// Fuentes
|
|
11
|
+
fontFamily: {
|
|
12
|
+
sans: ['SiesaBT', 'Inter', 'sans-serif'],
|
|
13
|
+
},
|
|
14
|
+
|
|
15
|
+
// Colores del Sistema de Diseño Siesa
|
|
16
|
+
colors: {
|
|
17
|
+
// Primary Custom Colors (extraído de Figma)
|
|
18
|
+
'primary-custom': {
|
|
19
|
+
100: '#dbeefe', // backgroundCustomPrimary - Hover para outline
|
|
20
|
+
300: '#93d1fd', // borderCustomPrimary - Bordes
|
|
21
|
+
400: '#60b6fa', // PrimaryCustom/400 - Focus ring
|
|
22
|
+
500: '#3c9bf6', // PrimaryCustom/500 - Hover para botón default
|
|
23
|
+
600: '#0e79fd', // contentCustomPrimary - Color principal
|
|
24
|
+
700: '#0c6ade', // variante más oscura - Active/pressed
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
// Primary Inverse (para usar con bg-, text-, border-)
|
|
28
|
+
'primary-inverse-content': '#eff8ff', // contentInverseCustomPrimary
|
|
29
|
+
'primary-inverse-background': '#0e79fd', // backgroundInverseCustomPrimary
|
|
30
|
+
'primary-inverse-border': '#3c9bf6', // borderInverseCustomPrimary
|
|
31
|
+
|
|
32
|
+
// System Colors (Light Mode)
|
|
33
|
+
'content-primary': '#18181b', // contentPrimary
|
|
34
|
+
'content-secondary': '#a1a1aa', // contentSecondary - Description text
|
|
35
|
+
'content-tertiary': '#71717a', // contentTertiary - Texto secundario/placeholder
|
|
36
|
+
'bg-primary': '#ffffff', // backgroundPrimary
|
|
37
|
+
'background-secondary': '#f4f4f5', // backgroundSecondary - Fondos disabled
|
|
38
|
+
'border-primary': '#e4e4e7', // borderPrimary
|
|
39
|
+
'border-secondary': '#f4f4f5', // borderSecondary - Divider soft
|
|
40
|
+
|
|
41
|
+
// Error Colors
|
|
42
|
+
'error-border': '#ef4444', // Error border - Red 500
|
|
43
|
+
'error-content': '#dc2626', // Error text - Red 600
|
|
44
|
+
'error-bg': '#fef2f2', // Error background - Red 50
|
|
45
|
+
|
|
46
|
+
// Extensions Colors (para badges, notificaciones, etc)
|
|
47
|
+
'content-extensions-red': '#b91c1c', // contentRed - Red 700 para notificaciones
|
|
48
|
+
|
|
49
|
+
// Dark Mode Colors (extraído de Figma node 4001-17241)
|
|
50
|
+
'dark-bg-primary': '#18181b', // backgroundPrimary - Fondo principal oscuro (zinc-900)
|
|
51
|
+
'dark-bg-custom': '#112d57', // backgroundCustomPrimary - Fondo activo en dark mode
|
|
52
|
+
'dark-content-primary': '#f4f4f5', // contentPrimary - Texto principal en dark mode (zinc-100)
|
|
53
|
+
'dark-content-custom': '#93d1fd', // contentCustomPrimary - Texto activo en dark mode
|
|
54
|
+
'dark-border-primary': '#71717a', // borderPrimary - Bordes en dark
|
|
55
|
+
'dark-border-custom': '#0f6ae3', // borderCustomPrimary - Bordes de componentes
|
|
56
|
+
'dark-bg-inverse': '#bfe2fe', // backgroundInverseCustomPrimary - Fondos inversos (botón dark)
|
|
57
|
+
'dark-content-inverse': '#0e79fd', // contentInverseCustomPrimary - Texto inverso (botón dark)
|
|
58
|
+
'dark-border-inverse': '#93d1fd', // borderInverseCustomPrimary - Borde botón en dark
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
// Background colors adicionales para hover
|
|
62
|
+
backgroundColor: {
|
|
63
|
+
'hover-overlay': 'rgba(0, 0, 0, 0.1)', // Light mode hover overlay
|
|
64
|
+
'hover-overlay-inverse': 'rgba(255, 255, 255, 0.2)', // Inverse hover
|
|
65
|
+
'hover-overlay-dark': 'rgba(255, 255, 255, 0.2)', // Dark mode hover overlay (20% white)
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
// Text colors adicionales
|
|
69
|
+
textColor: {
|
|
70
|
+
'primary-inverse-content': '#eff8ff',
|
|
71
|
+
'primary-custom-600': '#0e79fd',
|
|
72
|
+
},
|
|
73
|
+
|
|
74
|
+
// Border colors adicionales
|
|
75
|
+
borderColor: {
|
|
76
|
+
'primary-inverse-border': '#3c9bf6',
|
|
77
|
+
'primary-custom-300': '#93d1fd',
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
// Tipografía completa del sistema de diseño (typography.md)
|
|
81
|
+
fontSize: {
|
|
82
|
+
// Display - Para heros y títulos muy grandes
|
|
83
|
+
'9xl': ['8rem', { lineHeight: '8rem', letterSpacing: '-0.025em', fontWeight: '700' }], // 128px
|
|
84
|
+
'8xl': ['6rem', { lineHeight: '6rem', letterSpacing: '-0.025em', fontWeight: '700' }], // 96px
|
|
85
|
+
'7xl': ['4.5rem', { lineHeight: '4.5rem', letterSpacing: '-0.025em', fontWeight: '700' }], // 72px
|
|
86
|
+
'6xl': ['3.75rem', { lineHeight: '3.75rem', letterSpacing: '-0.025em', fontWeight: '700' }], // 60px
|
|
87
|
+
'5xl': ['3rem', { lineHeight: '3rem', letterSpacing: '-0.025em', fontWeight: '700' }], // 48px
|
|
88
|
+
|
|
89
|
+
// Heading - Para títulos de secciones
|
|
90
|
+
'4xl': ['2.25rem', { lineHeight: '2.5rem', letterSpacing: '-0.025em', fontWeight: '700' }], // 36px
|
|
91
|
+
'3xl': ['1.875rem', { lineHeight: '2.25rem', letterSpacing: '-0.025em', fontWeight: '700' }], // 30px
|
|
92
|
+
'2xl': ['1.5rem', { lineHeight: '2rem', letterSpacing: '-0.025em', fontWeight: '700' }], // 24px
|
|
93
|
+
'xl': ['1.25rem', { lineHeight: '1.75rem', letterSpacing: '-0.025em', fontWeight: '700' }], // 20px
|
|
94
|
+
|
|
95
|
+
// Label & Paragraph - Para contenido y labels
|
|
96
|
+
'lg': ['1.125rem', { lineHeight: '1.75rem' }], // 18px
|
|
97
|
+
'base': ['1rem', { lineHeight: '1.5rem' }], // 16px (default)
|
|
98
|
+
'sm': ['0.875rem', { lineHeight: '1.25rem' }], // 14px
|
|
99
|
+
'xs': ['0.75rem', { lineHeight: '1rem' }], // 12px
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
// Border Radius (valores exactos de Figma)
|
|
103
|
+
borderRadius: {
|
|
104
|
+
'md': '6px', // rounded-md de Figma
|
|
105
|
+
'2xl': '16px', // rounded-2xl de Figma
|
|
106
|
+
'3xl': '24px', // rounded-3xl de Figma
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
// Letter Spacing (typography.md)
|
|
110
|
+
letterSpacing: {
|
|
111
|
+
'tighter': '-0.025em', // -2.5% usado en Display y Heading
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
// Espaciado personalizado (alineado con Figma)
|
|
115
|
+
spacing: {
|
|
116
|
+
'1.5': '6px', // spacing/1.5
|
|
117
|
+
'2.5': '10px', // spacing/2.5
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
// Sombras personalizadas
|
|
121
|
+
boxShadow: {
|
|
122
|
+
'button-inset': '0px 2px 0px 0px inset rgba(255,255,255,0.15)',
|
|
123
|
+
'menu': '0px 4px 4px -1px rgba(12, 12, 13, 0.05), 0px 4px 4px -1px rgba(12, 12, 13, 0.1)',
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
plugins: [],
|
|
128
|
+
}
|