siesa-ui-kit 1.0.2 → 1.0.3
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/package.json +2 -9
- package/claude/settings.local.json +0 -7
- package/docs/border-radius.md +0 -1261
- package/docs/colors.md +0 -832
- package/docs/dark-mode-guide.md +0 -1426
- package/docs/filters.md +0 -1243
- package/docs/icons.md +0 -1283
- package/docs/shadows.md +0 -1377
- package/docs/spacing.md +0 -1684
- package/docs/typography.md +0 -1268
- package/postcss.config.cjs +0 -6
- 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 +0 -1
- package/src/App.css +0 -42
- package/src/App.tsx +0 -8
- package/src/ButtonTest.tsx +0 -147
- package/src/assets/fonts/README.md +0 -261
- 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 +0 -1
- package/src/components/Alert/Alert.stories.tsx +0 -332
- package/src/components/Alert/Alert.tsx +0 -106
- package/src/components/Alert/Alert.types.ts +0 -54
- package/src/components/Avatar/Avatar.stories.tsx +0 -494
- package/src/components/Avatar/Avatar.tsx +0 -143
- package/src/components/Avatar/Avatar.types.ts +0 -53
- package/src/components/Badge/Badge.stories.tsx +0 -339
- package/src/components/Badge/Badge.tsx +0 -278
- package/src/components/Badge/Badge.types.ts +0 -58
- package/src/components/Button/Button.stories.tsx +0 -950
- package/src/components/Button/Button.tsx +0 -337
- package/src/components/Button/Button.types.ts +0 -180
- package/src/components/Button/icons.tsx +0 -87
- package/src/components/Button/index.ts +0 -3
- package/src/components/Checkbox/Checkbox.stories.tsx +0 -453
- package/src/components/Checkbox/Checkbox.tsx +0 -208
- package/src/components/Checkbox/Checkbox.types.ts +0 -61
- package/src/components/DescriptionList/DescriptionList.stories.tsx +0 -250
- package/src/components/DescriptionList/DescriptionList.tsx +0 -96
- package/src/components/DescriptionList/DescriptionList.types.ts +0 -29
- package/src/components/Divider/Divider.stories.tsx +0 -263
- package/src/components/Divider/Divider.tsx +0 -80
- package/src/components/Divider/Divider.types.ts +0 -24
- package/src/components/Dropdown/Dropdown.stories.tsx +0 -552
- package/src/components/Dropdown/Dropdown.tsx +0 -422
- package/src/components/Dropdown/Dropdown.types.ts +0 -146
- package/src/components/Dropdown/README.md +0 -266
- package/src/components/Dropdown/icons.tsx +0 -72
- package/src/components/Dropdown/index.ts +0 -8
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +0 -317
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +0 -287
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +0 -111
- package/src/components/DropdownItemCollapsible/README.md +0 -264
- package/src/components/DropdownItemCollapsible/icons.tsx +0 -57
- package/src/components/DropdownItemCollapsible/index.ts +0 -12
- package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +0 -386
- package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +0 -216
- package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +0 -93
- package/src/components/DropdownItemHeading/README.md +0 -573
- package/src/components/DropdownItemHeading/icons.tsx +0 -125
- package/src/components/DropdownItemHeading/index.ts +0 -3
- package/src/components/Input/Input.stories.tsx +0 -583
- package/src/components/Input/Input.tsx +0 -204
- package/src/components/Input/Input.types.ts +0 -80
- package/src/components/Input/icons.tsx +0 -145
- package/src/components/Input/index.ts +0 -2
- package/src/components/LoginView/LoginView.stories.tsx +0 -148
- package/src/components/LoginView/LoginView.tsx +0 -426
- package/src/components/LoginView/LoginView.types.ts +0 -52
- package/src/components/LoginView/README.md +0 -396
- package/src/components/LoginView/icons.tsx +0 -85
- package/src/components/LoginView/index.ts +0 -3
- package/src/components/Navbar/Navbar.stories.tsx +0 -810
- package/src/components/Navbar/Navbar.tsx +0 -755
- package/src/components/Navbar/Navbar.types.ts +0 -219
- package/src/components/Navbar/README.md +0 -279
- package/src/components/Navbar/icons.tsx +0 -102
- package/src/components/Navbar/index.ts +0 -8
- package/src/components/NavigationBar/NavigationBar.stories.tsx +0 -406
- package/src/components/NavigationBar/NavigationBar.tsx +0 -246
- package/src/components/NavigationBar/NavigationBar.types.ts +0 -74
- package/src/components/NavigationBar/README.md +0 -469
- package/src/components/NavigationBar/index.ts +0 -2
- package/src/components/NavigationRail/NavigationRail.stories.tsx +0 -417
- package/src/components/NavigationRail/NavigationRail.tsx +0 -418
- package/src/components/NavigationRail/NavigationRail.types.ts +0 -109
- package/src/components/NavigationRail/README.md +0 -224
- package/src/components/NavigationRail/index.ts +0 -2
- package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +0 -667
- package/src/components/NavigationRailItem/NavigationRailItem.tsx +0 -313
- package/src/components/NavigationRailItem/NavigationRailItem.types.ts +0 -167
- package/src/components/NavigationRailItem/README.md +0 -476
- package/src/components/NavigationRailItem/index.ts +0 -2
- package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +0 -462
- package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +0 -332
- package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +0 -178
- package/src/components/NavigationRailPanel/README.md +0 -461
- package/src/components/NavigationRailPanel/index.ts +0 -6
- package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +0 -528
- package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +0 -378
- package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +0 -130
- package/src/components/NavigationRailTypes/README.md +0 -573
- package/src/components/NavigationRailTypes/icons.tsx +0 -141
- package/src/components/NavigationRailTypes/index.ts +0 -7
- package/src/components/Notification/Notification.stories.tsx +0 -513
- package/src/components/Notification/Notification.tsx +0 -145
- package/src/components/Notification/Notification.types.ts +0 -142
- package/src/components/Notification/README.md +0 -409
- package/src/components/Notification/index.ts +0 -3
- package/src/components/POSConvention/POSConvention.stories.tsx +0 -235
- package/src/components/POSConvention/POSConvention.tsx +0 -129
- package/src/components/POSConvention/POSConvention.types.ts +0 -38
- package/src/components/POSConvention/README.md +0 -123
- package/src/components/POSConvention/icons.tsx +0 -45
- package/src/components/POSConvention/index.ts +0 -3
- package/src/components/POSLocationButton/POSLocationButton.stories.tsx +0 -531
- package/src/components/POSLocationButton/POSLocationButton.tsx +0 -247
- package/src/components/POSLocationButton/POSLocationButton.types.ts +0 -87
- package/src/components/POSLocationButton/README.md +0 -253
- package/src/components/POSLocationButton/icons.tsx +0 -120
- package/src/components/POSLocationButton/index.ts +0 -14
- package/src/components/POSNumberButton/POSNumberButton.stories.tsx +0 -415
- package/src/components/POSNumberButton/POSNumberButton.tsx +0 -179
- package/src/components/POSNumberButton/POSNumberButton.types.ts +0 -51
- package/src/components/POSNumberButton/README.md +0 -321
- package/src/components/POSNumberButton/index.ts +0 -3
- package/src/components/POSProductButton/POSProductButton.stories.tsx +0 -318
- package/src/components/POSProductButton/POSProductButton.tsx +0 -152
- package/src/components/POSProductButton/POSProductButton.types.ts +0 -46
- package/src/components/POSProductButton/README.md +0 -269
- package/src/components/POSProductButton/index.ts +0 -2
- package/src/components/POSProductCard/POSProductCard.stories.tsx +0 -642
- package/src/components/POSProductCard/POSProductCard.tsx +0 -208
- package/src/components/POSProductCard/POSProductCard.types.ts +0 -76
- package/src/components/POSProductCard/README.md +0 -179
- package/src/components/POSProductCard/icons.tsx +0 -26
- package/src/components/POSProductCard/index.ts +0 -2
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +0 -753
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +0 -332
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +0 -119
- package/src/components/POSProductSidebarItems/README.md +0 -198
- package/src/components/POSProductSidebarItems/icons.tsx +0 -21
- package/src/components/POSProductSidebarItems/index.ts +0 -3
- package/src/components/POSTable/POSTable.stories.tsx +0 -737
- package/src/components/POSTable/POSTable.tsx +0 -401
- package/src/components/POSTable/POSTable.types.ts +0 -83
- package/src/components/POSTable/README.md +0 -286
- package/src/components/POSTable/index.ts +0 -7
- package/src/components/Pagination/Pagination.stories.tsx +0 -555
- package/src/components/Pagination/Pagination.tsx +0 -286
- package/src/components/Pagination/Pagination.types.ts +0 -93
- package/src/components/Pagination/README.md +0 -298
- package/src/components/Pagination/icons.tsx +0 -47
- package/src/components/Pagination/index.ts +0 -3
- package/src/components/Quantity/Quantity.stories.tsx +0 -457
- package/src/components/Quantity/Quantity.tsx +0 -289
- package/src/components/Quantity/Quantity.types.ts +0 -70
- package/src/components/Radio/Radio.stories.tsx +0 -523
- package/src/components/Radio/Radio.tsx +0 -170
- package/src/components/Radio/Radio.types.ts +0 -122
- package/src/components/Select/README.md +0 -299
- package/src/components/Select/Select.stories.tsx +0 -673
- package/src/components/Select/Select.tsx +0 -454
- package/src/components/Select/Select.types.ts +0 -148
- package/src/components/Select/icons.tsx +0 -50
- package/src/components/Select/index.ts +0 -3
- package/src/components/SignUpView/SignUpView.stories.tsx +0 -129
- package/src/components/SignUpView/SignUpView.tsx +0 -503
- package/src/components/SignUpView/SignUpView.types.ts +0 -58
- package/src/components/SignUpView/icons.tsx +0 -71
- package/src/components/SignUpView/index.ts +0 -3
- package/src/components/Switch/README.md +0 -112
- package/src/components/Switch/Switch.stories.tsx +0 -550
- package/src/components/Switch/Switch.tsx +0 -246
- package/src/components/Switch/Switch.types.ts +0 -67
- package/src/components/Table/README.md +0 -369
- package/src/components/Table/Table.stories.tsx +0 -805
- package/src/components/Table/Table.tsx +0 -688
- package/src/components/Table/Table.types.ts +0 -204
- package/src/components/Table/index.ts +0 -9
- package/src/components/Tabs/README.md +0 -201
- package/src/components/Tabs/Tabs.stories.tsx +0 -580
- package/src/components/Tabs/Tabs.tsx +0 -356
- package/src/components/Tabs/Tabs.types.ts +0 -127
- package/src/components/Tabs/icons.tsx +0 -129
- package/src/components/Tabs/index.ts +0 -11
- package/src/components/Textarea/Textarea.stories.tsx +0 -535
- package/src/components/Textarea/Textarea.tsx +0 -188
- package/src/components/Textarea/Textarea.types.ts +0 -54
- package/src/context/ThemeContext.tsx +0 -99
- package/src/context/index.ts +0 -1
- package/src/index.css +0 -29
- package/src/index.ts +0 -102
- package/src/main.tsx +0 -10
- package/src/views/ListView/ListView.stories.tsx +0 -329
- package/src/views/ListView/ListView.tsx +0 -570
- package/src/views/ListView/ListView.types.ts +0 -211
- package/src/views/ListView/icons.tsx +0 -282
- package/src/views/ListView/index.ts +0 -11
- package/src/views/LoginView/LoginView.stories.tsx +0 -148
- package/src/views/LoginView/LoginView.tsx +0 -426
- package/src/views/LoginView/LoginView.types.ts +0 -52
- package/src/views/LoginView/README.md +0 -396
- package/src/views/LoginView/icons.tsx +0 -85
- package/src/views/LoginView/index.ts +0 -3
- package/src/views/ProductsView/ProductsView.stories.tsx +0 -344
- package/src/views/ProductsView/ProductsView.tsx +0 -480
- package/src/views/ProductsView/ProductsView.types.ts +0 -238
- package/src/views/ProductsView/README.md +0 -312
- package/src/views/ProductsView/icons.tsx +0 -38
- package/src/views/ProductsView/index.ts +0 -8
- package/src/views/RecoverPasswordView/README.md +0 -269
- package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +0 -131
- package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +0 -376
- package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +0 -56
- package/src/views/RecoverPasswordView/icons.tsx +0 -17
- package/src/views/RecoverPasswordView/index.ts +0 -2
- package/src/views/SignUpView/SignUpView.stories.tsx +0 -129
- package/src/views/SignUpView/SignUpView.tsx +0 -503
- package/src/views/SignUpView/SignUpView.types.ts +0 -58
- package/src/views/SignUpView/icons.tsx +0 -71
- package/src/views/SignUpView/index.ts +0 -3
- package/src/views/TableLayoutView/README.md +0 -268
- package/src/views/TableLayoutView/TableLayoutView.stories.tsx +0 -235
- package/src/views/TableLayoutView/TableLayoutView.tsx +0 -461
- package/src/views/TableLayoutView/TableLayoutView.types.ts +0 -209
- package/src/views/TableLayoutView/icons.tsx +0 -113
- package/src/views/TableLayoutView/index.ts +0 -6
- package/storybook/main.ts +0 -20
- package/storybook/preview.tsx +0 -84
- package/storybook/vitest.setup.ts +0 -7
- package/tailwind.config.js +0 -128
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Icono ChevronDown para el toggle del colapsable
|
|
5
|
-
* Diseño basado en heroicons-micro/chevron-down
|
|
6
|
-
* Tamaño: 16x16px
|
|
7
|
-
*
|
|
8
|
-
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6135-34374
|
|
9
|
-
*/
|
|
10
|
-
export const ChevronDownIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
11
|
-
<svg
|
|
12
|
-
width="16"
|
|
13
|
-
height="16"
|
|
14
|
-
viewBox="0 0 16 16"
|
|
15
|
-
fill="none"
|
|
16
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
17
|
-
className={className}
|
|
18
|
-
>
|
|
19
|
-
<path
|
|
20
|
-
d="M4 6L8 10L12 6"
|
|
21
|
-
stroke="currentColor"
|
|
22
|
-
strokeWidth="1.5"
|
|
23
|
-
strokeLinecap="round"
|
|
24
|
-
strokeLinejoin="round"
|
|
25
|
-
/>
|
|
26
|
-
</svg>
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Icono de usuario placeholder para ejemplos en stories
|
|
31
|
-
* Tamaño: 16x16px
|
|
32
|
-
*/
|
|
33
|
-
export const UserIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
34
|
-
<svg
|
|
35
|
-
width="16"
|
|
36
|
-
height="16"
|
|
37
|
-
viewBox="0 0 16 16"
|
|
38
|
-
fill="none"
|
|
39
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
40
|
-
className={className}
|
|
41
|
-
>
|
|
42
|
-
<path
|
|
43
|
-
d="M8 8C9.10457 8 10 7.10457 10 6C10 4.89543 9.10457 4 8 4C6.89543 4 6 4.89543 6 6C6 7.10457 6.89543 8 8 8Z"
|
|
44
|
-
stroke="currentColor"
|
|
45
|
-
strokeWidth="1.5"
|
|
46
|
-
strokeLinecap="round"
|
|
47
|
-
strokeLinejoin="round"
|
|
48
|
-
/>
|
|
49
|
-
<path
|
|
50
|
-
d="M4.5 13C4.5 11.3431 6.13401 10 8 10C9.86599 10 11.5 11.3431 11.5 13"
|
|
51
|
-
stroke="currentColor"
|
|
52
|
-
strokeWidth="1.5"
|
|
53
|
-
strokeLinecap="round"
|
|
54
|
-
strokeLinejoin="round"
|
|
55
|
-
/>
|
|
56
|
-
</svg>
|
|
57
|
-
);
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Exportaciones del componente DropdownItemCollapsible
|
|
3
|
-
*
|
|
4
|
-
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6135-34374
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
export { DropdownItemCollapsible } from './DropdownItemCollapsible';
|
|
8
|
-
export type {
|
|
9
|
-
DropdownItemCollapsibleProps,
|
|
10
|
-
DropdownItemCollapsibleChildProps,
|
|
11
|
-
} from './DropdownItemCollapsible.types';
|
|
12
|
-
export { ChevronDownIcon, UserIcon } from './icons';
|
|
@@ -1,386 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { DropdownItemHeading } from './DropdownItemHeading';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* El componente DropdownItemHeading es un encabezado especializado para menús dropdown.
|
|
6
|
-
* Muestra un icono, un label principal, descripción opcional y una acción opcional.
|
|
7
|
-
*
|
|
8
|
-
* Casos de uso:
|
|
9
|
-
* - Encabezados de secciones en dropdowns
|
|
10
|
-
* - Información de usuario con opciones de acción
|
|
11
|
-
* - Configuraciones rápidas en menús
|
|
12
|
-
*
|
|
13
|
-
* **Características:**
|
|
14
|
-
* - Icono opcional (16x16px) - especifica el nombre del icono como string
|
|
15
|
-
* - Label principal (14px Bold)
|
|
16
|
-
* - Descripción opcional (12px Regular)
|
|
17
|
-
* - Acción opcional en la derecha (10px Regular)
|
|
18
|
-
* - Soporte completo para dark mode
|
|
19
|
-
* - Focus rings adaptativos
|
|
20
|
-
*/
|
|
21
|
-
const meta: Meta<typeof DropdownItemHeading> = {
|
|
22
|
-
title: 'Components/DropdownItemHeading',
|
|
23
|
-
component: DropdownItemHeading,
|
|
24
|
-
parameters: {
|
|
25
|
-
layout: 'centered',
|
|
26
|
-
docs: {
|
|
27
|
-
description: {
|
|
28
|
-
component:
|
|
29
|
-
'Encabezado para menús dropdown con icono, label, descripción y acción. Implementa pixel-perfect según Figma node 6135:32539 con soporte completo para dark mode.',
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
tags: ['autodocs'],
|
|
34
|
-
argTypes: {
|
|
35
|
-
label: {
|
|
36
|
-
control: 'text',
|
|
37
|
-
description: 'Texto del label principal (Label/Small - 14px Bold)',
|
|
38
|
-
},
|
|
39
|
-
description: {
|
|
40
|
-
control: 'text',
|
|
41
|
-
description: 'Texto de descripción secundaria (Paragraph/Tiny - 12px Regular)',
|
|
42
|
-
},
|
|
43
|
-
showDescription: {
|
|
44
|
-
control: 'boolean',
|
|
45
|
-
description: 'Si se debe mostrar la descripción',
|
|
46
|
-
},
|
|
47
|
-
iconName: {
|
|
48
|
-
control: 'select',
|
|
49
|
-
options: ['cog-6-tooth', 'check', 'x', 'chevron-down', null],
|
|
50
|
-
description: 'Nombre del icono a mostrar (nombre de heroicons como string)',
|
|
51
|
-
},
|
|
52
|
-
showIcon: {
|
|
53
|
-
control: 'boolean',
|
|
54
|
-
description: 'Si se debe mostrar el icono',
|
|
55
|
-
},
|
|
56
|
-
showAction: {
|
|
57
|
-
control: 'boolean',
|
|
58
|
-
description: 'Si se debe mostrar la acción',
|
|
59
|
-
},
|
|
60
|
-
actionLabel: {
|
|
61
|
-
control: 'text',
|
|
62
|
-
description: 'Texto de la acción (Paragraph/XXSmall - 10px Regular)',
|
|
63
|
-
},
|
|
64
|
-
onActionClick: {
|
|
65
|
-
action: 'onActionClick',
|
|
66
|
-
description: 'Callback ejecutado al hacer click en la acción',
|
|
67
|
-
},
|
|
68
|
-
className: {
|
|
69
|
-
control: 'text',
|
|
70
|
-
description: 'Clases CSS adicionales',
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export default meta;
|
|
76
|
-
|
|
77
|
-
type Story = StoryObj<typeof meta>;
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Ejemplo por defecto con todos los elementos (icono cog-6-tooth)
|
|
81
|
-
*/
|
|
82
|
-
export const Default: Story = {
|
|
83
|
-
args: {
|
|
84
|
-
label: 'Label',
|
|
85
|
-
description: 'Description',
|
|
86
|
-
showDescription: true,
|
|
87
|
-
iconName: 'cog-6-tooth',
|
|
88
|
-
showIcon: true,
|
|
89
|
-
actionLabel: 'Clear',
|
|
90
|
-
showAction: true,
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Con icono y label, sin descripción ni acción
|
|
96
|
-
*/
|
|
97
|
-
export const LabelOnly: Story = {
|
|
98
|
-
args: {
|
|
99
|
-
label: 'Quick Actions',
|
|
100
|
-
showDescription: false,
|
|
101
|
-
iconName: 'cog-6-tooth',
|
|
102
|
-
showIcon: true,
|
|
103
|
-
showAction: false,
|
|
104
|
-
},
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Con label y descripción, sin icono ni acción
|
|
109
|
-
*/
|
|
110
|
-
export const WithDescription: Story = {
|
|
111
|
-
args: {
|
|
112
|
-
label: 'Settings',
|
|
113
|
-
description: 'Configure your preferences',
|
|
114
|
-
showDescription: true,
|
|
115
|
-
iconName: null,
|
|
116
|
-
showIcon: false,
|
|
117
|
-
showAction: false,
|
|
118
|
-
},
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Solo label y descripción con icono (sin acción)
|
|
123
|
-
*/
|
|
124
|
-
export const WithIconAndDescription: Story = {
|
|
125
|
-
args: {
|
|
126
|
-
label: 'My Account',
|
|
127
|
-
description: 'user@example.com',
|
|
128
|
-
showDescription: true,
|
|
129
|
-
iconName: 'cog-6-tooth',
|
|
130
|
-
showIcon: true,
|
|
131
|
-
showAction: false,
|
|
132
|
-
},
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Con todos los elementos (completo)
|
|
137
|
-
*/
|
|
138
|
-
export const Complete: Story = {
|
|
139
|
-
args: {
|
|
140
|
-
label: 'My Account',
|
|
141
|
-
description: 'user@example.com',
|
|
142
|
-
showDescription: true,
|
|
143
|
-
iconName: 'cog-6-tooth',
|
|
144
|
-
showIcon: true,
|
|
145
|
-
actionLabel: 'Clear',
|
|
146
|
-
showAction: true,
|
|
147
|
-
onActionClick: (e) => {
|
|
148
|
-
console.log('Action clicked!', e);
|
|
149
|
-
alert('Clear action triggered!');
|
|
150
|
-
},
|
|
151
|
-
},
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Variante con label largo
|
|
156
|
-
*/
|
|
157
|
-
export const LongLabel: Story = {
|
|
158
|
-
args: {
|
|
159
|
-
label: 'Very Long Label That Might Overflow',
|
|
160
|
-
description: 'This is a description for the long label',
|
|
161
|
-
showDescription: true,
|
|
162
|
-
iconName: 'cog-6-tooth',
|
|
163
|
-
showIcon: true,
|
|
164
|
-
actionLabel: 'Clear',
|
|
165
|
-
showAction: true,
|
|
166
|
-
},
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Variante con descripción largo
|
|
171
|
-
*/
|
|
172
|
-
export const LongDescription: Story = {
|
|
173
|
-
args: {
|
|
174
|
-
label: 'Settings',
|
|
175
|
-
description:
|
|
176
|
-
'Configure your preferences and settings for the application. This is a very long description that demonstrates text wrapping behavior.',
|
|
177
|
-
showDescription: true,
|
|
178
|
-
iconName: 'cog-6-tooth',
|
|
179
|
-
showIcon: true,
|
|
180
|
-
actionLabel: 'Reset',
|
|
181
|
-
showAction: true,
|
|
182
|
-
},
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Sin mostrar icono (showIcon = false)
|
|
187
|
-
*/
|
|
188
|
-
export const NoIcon: Story = {
|
|
189
|
-
args: {
|
|
190
|
-
label: 'Menu Item',
|
|
191
|
-
description: 'Detailed description here',
|
|
192
|
-
showDescription: true,
|
|
193
|
-
iconName: 'cog-6-tooth',
|
|
194
|
-
showIcon: false,
|
|
195
|
-
actionLabel: 'Action',
|
|
196
|
-
showAction: true,
|
|
197
|
-
},
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Sin acción (solo visualización)
|
|
202
|
-
*/
|
|
203
|
-
export const NoAction: Story = {
|
|
204
|
-
args: {
|
|
205
|
-
label: 'Profile',
|
|
206
|
-
description: 'user.profile@example.com',
|
|
207
|
-
showDescription: true,
|
|
208
|
-
iconName: 'cog-6-tooth',
|
|
209
|
-
showIcon: true,
|
|
210
|
-
showAction: false,
|
|
211
|
-
},
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Minimal (solo label)
|
|
216
|
-
*/
|
|
217
|
-
export const Minimal: Story = {
|
|
218
|
-
args: {
|
|
219
|
-
label: 'Menu',
|
|
220
|
-
showDescription: false,
|
|
221
|
-
iconName: 'cog-6-tooth',
|
|
222
|
-
showIcon: false,
|
|
223
|
-
showAction: false,
|
|
224
|
-
},
|
|
225
|
-
};
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* Con icono check
|
|
229
|
-
*/
|
|
230
|
-
export const WithCheckIcon: Story = {
|
|
231
|
-
args: {
|
|
232
|
-
label: 'Completed',
|
|
233
|
-
description: 'Task finished successfully',
|
|
234
|
-
showDescription: true,
|
|
235
|
-
iconName: 'check',
|
|
236
|
-
showIcon: true,
|
|
237
|
-
actionLabel: 'Dismiss',
|
|
238
|
-
showAction: true,
|
|
239
|
-
},
|
|
240
|
-
};
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* Con icono x
|
|
244
|
-
*/
|
|
245
|
-
export const WithXIcon: Story = {
|
|
246
|
-
args: {
|
|
247
|
-
label: 'Close',
|
|
248
|
-
description: 'Click to close',
|
|
249
|
-
showDescription: true,
|
|
250
|
-
iconName: 'x',
|
|
251
|
-
showIcon: true,
|
|
252
|
-
actionLabel: 'Undo',
|
|
253
|
-
showAction: true,
|
|
254
|
-
},
|
|
255
|
-
};
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
* Con icono chevron-down
|
|
259
|
-
*/
|
|
260
|
-
export const WithChevronIcon: Story = {
|
|
261
|
-
args: {
|
|
262
|
-
label: 'Expand',
|
|
263
|
-
description: 'Show more options',
|
|
264
|
-
showDescription: true,
|
|
265
|
-
iconName: 'chevron-down',
|
|
266
|
-
showIcon: true,
|
|
267
|
-
actionLabel: 'Collapse',
|
|
268
|
-
showAction: true,
|
|
269
|
-
},
|
|
270
|
-
};
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* Sin icono (iconName = null)
|
|
274
|
-
*/
|
|
275
|
-
export const NoIconType: Story = {
|
|
276
|
-
args: {
|
|
277
|
-
label: 'Menu Item',
|
|
278
|
-
description: 'Without icon',
|
|
279
|
-
showDescription: true,
|
|
280
|
-
iconName: null,
|
|
281
|
-
showIcon: true,
|
|
282
|
-
actionLabel: 'Action',
|
|
283
|
-
showAction: true,
|
|
284
|
-
},
|
|
285
|
-
};
|
|
286
|
-
|
|
287
|
-
/**
|
|
288
|
-
* Estado disabled (visual - el componente no controla esto)
|
|
289
|
-
* En un dropdown, la deshabilitación se maneja a nivel del parent
|
|
290
|
-
*/
|
|
291
|
-
export const DisabledState: Story = {
|
|
292
|
-
args: {
|
|
293
|
-
label: 'Disabled Item',
|
|
294
|
-
description: 'This item is not available',
|
|
295
|
-
showDescription: true,
|
|
296
|
-
iconName: 'cog-6-tooth',
|
|
297
|
-
showIcon: true,
|
|
298
|
-
actionLabel: 'N/A',
|
|
299
|
-
showAction: true,
|
|
300
|
-
className: 'opacity-50 pointer-events-none',
|
|
301
|
-
},
|
|
302
|
-
};
|
|
303
|
-
|
|
304
|
-
/**
|
|
305
|
-
* En contexto de dropdown (múltiples items)
|
|
306
|
-
*/
|
|
307
|
-
export const InDropdownContext: Story = {
|
|
308
|
-
render: () => (
|
|
309
|
-
<div className="w-full max-w-sm border border-border-primary rounded-lg shadow-lg p-2 bg-bg-primary dark:bg-dark-bg-primary">
|
|
310
|
-
<DropdownItemHeading
|
|
311
|
-
label="My Account"
|
|
312
|
-
description="user@example.com"
|
|
313
|
-
showDescription={true}
|
|
314
|
-
iconName="cog-6-tooth"
|
|
315
|
-
showIcon={true}
|
|
316
|
-
actionLabel="Clear"
|
|
317
|
-
showAction={true}
|
|
318
|
-
/>
|
|
319
|
-
<div className="h-px bg-border-primary dark:bg-dark-border-primary my-2" />
|
|
320
|
-
<div className="px-4 py-2 text-content-secondary dark:text-dark-content-secondary text-sm">
|
|
321
|
-
Other items would go here...
|
|
322
|
-
</div>
|
|
323
|
-
</div>
|
|
324
|
-
),
|
|
325
|
-
};
|
|
326
|
-
|
|
327
|
-
/**
|
|
328
|
-
* Demostración de dark mode
|
|
329
|
-
*/
|
|
330
|
-
export const DarkModeShowcase: Story = {
|
|
331
|
-
decorators: [
|
|
332
|
-
(Story) => (
|
|
333
|
-
<div className="dark">
|
|
334
|
-
<div className="bg-dark-bg-primary p-8 rounded-lg">
|
|
335
|
-
<Story />
|
|
336
|
-
</div>
|
|
337
|
-
</div>
|
|
338
|
-
),
|
|
339
|
-
],
|
|
340
|
-
args: {
|
|
341
|
-
label: 'Dark Mode Label',
|
|
342
|
-
description: 'Dark mode description text',
|
|
343
|
-
showDescription: true,
|
|
344
|
-
iconName: 'cog-6-tooth',
|
|
345
|
-
showIcon: true,
|
|
346
|
-
actionLabel: 'Clear',
|
|
347
|
-
showAction: true,
|
|
348
|
-
},
|
|
349
|
-
};
|
|
350
|
-
|
|
351
|
-
/**
|
|
352
|
-
* Comparación lado a lado (Light vs Dark)
|
|
353
|
-
*/
|
|
354
|
-
export const LightVsDark: Story = {
|
|
355
|
-
render: () => (
|
|
356
|
-
<div className="flex gap-8 p-8">
|
|
357
|
-
{/* Light Mode */}
|
|
358
|
-
<div className="bg-bg-primary p-4 rounded-lg border border-border-primary">
|
|
359
|
-
<p className="text-content-secondary text-sm mb-4 font-semibold">Light Mode</p>
|
|
360
|
-
<DropdownItemHeading
|
|
361
|
-
label="My Account"
|
|
362
|
-
description="user@example.com"
|
|
363
|
-
showDescription={true}
|
|
364
|
-
iconName="cog-6-tooth"
|
|
365
|
-
showIcon={true}
|
|
366
|
-
actionLabel="Clear"
|
|
367
|
-
showAction={true}
|
|
368
|
-
/>
|
|
369
|
-
</div>
|
|
370
|
-
|
|
371
|
-
{/* Dark Mode */}
|
|
372
|
-
<div className="dark bg-dark-bg-primary p-4 rounded-lg border border-dark-border-primary">
|
|
373
|
-
<p className="text-dark-content-secondary text-sm mb-4 font-semibold">Dark Mode</p>
|
|
374
|
-
<DropdownItemHeading
|
|
375
|
-
label="My Account"
|
|
376
|
-
description="user@example.com"
|
|
377
|
-
showDescription={true}
|
|
378
|
-
iconName="cog-6-tooth"
|
|
379
|
-
showIcon={true}
|
|
380
|
-
actionLabel="Clear"
|
|
381
|
-
showAction={true}
|
|
382
|
-
/>
|
|
383
|
-
</div>
|
|
384
|
-
</div>
|
|
385
|
-
),
|
|
386
|
-
};
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { DropdownItemHeadingProps } from './DropdownItemHeading.types';
|
|
3
|
-
import { getIcon } from './icons';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Componente DropdownItemHeading del sistema de diseño Siesa
|
|
7
|
-
*
|
|
8
|
-
* Implementación pixel-perfect basada en Figma (node 6135:32539)
|
|
9
|
-
* para encabezados en menús dropdown con icono, label, descripción y acción.
|
|
10
|
-
*
|
|
11
|
-
* **Estructura:**
|
|
12
|
-
* - Icon Wrapper: Opcional, icono de 16x16px
|
|
13
|
-
* - Content Wrapper: Label + Description (flexible)
|
|
14
|
-
* - Action Wrapper: Opcional, texto de acción en la derecha
|
|
15
|
-
*
|
|
16
|
-
* **Dimensiones:**
|
|
17
|
-
* - Altura flexible (contenido vertical)
|
|
18
|
-
* - Width mínimo: 224px
|
|
19
|
-
* - Padding: 8px vertical, 16px horizontal
|
|
20
|
-
* - Border radius: 8px (rounded-lg)
|
|
21
|
-
*
|
|
22
|
-
* **Tipografía:**
|
|
23
|
-
* - Label: Label/Small (14px Bold) - content-primary
|
|
24
|
-
* - Description: Paragraph/Tiny (12px Regular) - content-secondary
|
|
25
|
-
* - Action: Paragraph/XXSmall (10px Regular) - content-secondary
|
|
26
|
-
*
|
|
27
|
-
* **Dark Mode:**
|
|
28
|
-
* - Label: #18181b (light) → #bfe2fe (dark)
|
|
29
|
-
* - Description: #a1a1aa (light) → #93d1fd (dark)
|
|
30
|
-
* - Icon: #0e79fd (light) → #bfe2fe (dark)
|
|
31
|
-
* - Action: #a1a1aa (light) → #93d1fd (dark)
|
|
32
|
-
*
|
|
33
|
-
* **Estados:**
|
|
34
|
-
* - Default: Sin hover/focus
|
|
35
|
-
* - Hover: Overlay sutil (managed by parent Dropdown)
|
|
36
|
-
* - Disabled: Opacity 50% (managed by parent Dropdown)
|
|
37
|
-
*
|
|
38
|
-
* **Especificaciones de Figma:**
|
|
39
|
-
* - Gap entre elementos: 12px
|
|
40
|
-
* - Gap entre label y description: 2px
|
|
41
|
-
* - Rounded: 8px (rounded-lg)
|
|
42
|
-
*
|
|
43
|
-
* @see docs/colors.md - Sistema de colores
|
|
44
|
-
* @see docs/typography.md - Sistema tipográfico (Label/Small, Paragraph/Tiny)
|
|
45
|
-
* @see docs/spacing.md - Sistema de espaciado
|
|
46
|
-
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6135-32539 - Diseño Figma
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* ```tsx
|
|
50
|
-
* // Con icono, label, descripción y acción
|
|
51
|
-
* <DropdownItemHeading
|
|
52
|
-
* label="Settings"
|
|
53
|
-
* description="Configure your preferences"
|
|
54
|
-
* showDescription={true}
|
|
55
|
-
* icon={<SettingsIcon />}
|
|
56
|
-
* showIcon={true}
|
|
57
|
-
* actionLabel="Clear"
|
|
58
|
-
* showAction={true}
|
|
59
|
-
* onActionClick={handleClear}
|
|
60
|
-
* />
|
|
61
|
-
*
|
|
62
|
-
* // Solo label y descripción (sin icono ni acción)
|
|
63
|
-
* <DropdownItemHeading
|
|
64
|
-
* label="My Account"
|
|
65
|
-
* description="user@example.com"
|
|
66
|
-
* showDescription={true}
|
|
67
|
-
* />
|
|
68
|
-
*
|
|
69
|
-
* // Solo label
|
|
70
|
-
* <DropdownItemHeading
|
|
71
|
-
* label="Quick Actions"
|
|
72
|
-
* showDescription={false}
|
|
73
|
-
* />
|
|
74
|
-
* ```
|
|
75
|
-
*/
|
|
76
|
-
export const DropdownItemHeading: React.FC<DropdownItemHeadingProps> = ({
|
|
77
|
-
label = 'Label',
|
|
78
|
-
description,
|
|
79
|
-
showDescription = true,
|
|
80
|
-
iconName = 'cog-6-tooth',
|
|
81
|
-
showIcon = true,
|
|
82
|
-
actionLabel,
|
|
83
|
-
showAction = false,
|
|
84
|
-
onActionClick,
|
|
85
|
-
className = '',
|
|
86
|
-
...rest
|
|
87
|
-
}) => {
|
|
88
|
-
|
|
89
|
-
return (
|
|
90
|
-
<div
|
|
91
|
-
className={`
|
|
92
|
-
flex
|
|
93
|
-
gap-3
|
|
94
|
-
items-center
|
|
95
|
-
px-4
|
|
96
|
-
py-2
|
|
97
|
-
rounded-lg
|
|
98
|
-
w-56
|
|
99
|
-
${className}
|
|
100
|
-
`}
|
|
101
|
-
data-testid="dropdown-item-heading"
|
|
102
|
-
{...rest}
|
|
103
|
-
>
|
|
104
|
-
{/* ===== ICON WRAPPER ===== */}
|
|
105
|
-
{showIcon && iconName && (
|
|
106
|
-
<div
|
|
107
|
-
className="
|
|
108
|
-
flex
|
|
109
|
-
items-center
|
|
110
|
-
justify-center
|
|
111
|
-
shrink-0
|
|
112
|
-
w-4
|
|
113
|
-
h-4
|
|
114
|
-
"
|
|
115
|
-
data-testid="icon-wrapper"
|
|
116
|
-
>
|
|
117
|
-
<div className="text-primary-custom-600 dark:text-dark-content-inverse">
|
|
118
|
-
{getIcon(iconName, 'w-4 h-4')}
|
|
119
|
-
</div>
|
|
120
|
-
</div>
|
|
121
|
-
)}
|
|
122
|
-
|
|
123
|
-
{/* ===== CONTENT WRAPPER ===== */}
|
|
124
|
-
<div
|
|
125
|
-
className="
|
|
126
|
-
flex
|
|
127
|
-
flex-1
|
|
128
|
-
flex-col
|
|
129
|
-
gap-0.5
|
|
130
|
-
items-start
|
|
131
|
-
justify-center
|
|
132
|
-
min-w-0
|
|
133
|
-
"
|
|
134
|
-
data-testid="content-wrapper"
|
|
135
|
-
>
|
|
136
|
-
{/* Label */}
|
|
137
|
-
<p
|
|
138
|
-
className="
|
|
139
|
-
font-bold
|
|
140
|
-
text-sm
|
|
141
|
-
leading-5
|
|
142
|
-
text-content-primary
|
|
143
|
-
dark:text-dark-content-inverse
|
|
144
|
-
whitespace-nowrap
|
|
145
|
-
overflow-hidden
|
|
146
|
-
text-ellipsis
|
|
147
|
-
"
|
|
148
|
-
data-testid="label"
|
|
149
|
-
>
|
|
150
|
-
{label}
|
|
151
|
-
</p>
|
|
152
|
-
|
|
153
|
-
{/* Description */}
|
|
154
|
-
{showDescription && description && (
|
|
155
|
-
<p
|
|
156
|
-
className="
|
|
157
|
-
font-normal
|
|
158
|
-
text-xs
|
|
159
|
-
leading-4
|
|
160
|
-
text-content-secondary
|
|
161
|
-
dark:text-dark-border-inverse
|
|
162
|
-
w-full
|
|
163
|
-
whitespace-pre-wrap
|
|
164
|
-
overflow-hidden
|
|
165
|
-
text-ellipsis
|
|
166
|
-
"
|
|
167
|
-
data-testid="description"
|
|
168
|
-
>
|
|
169
|
-
{description}
|
|
170
|
-
</p>
|
|
171
|
-
)}
|
|
172
|
-
</div>
|
|
173
|
-
|
|
174
|
-
{/* ===== ACTION WRAPPER ===== */}
|
|
175
|
-
{showAction && actionLabel && (
|
|
176
|
-
<div
|
|
177
|
-
className="
|
|
178
|
-
flex
|
|
179
|
-
items-center
|
|
180
|
-
justify-center
|
|
181
|
-
shrink-0
|
|
182
|
-
cursor-pointer
|
|
183
|
-
hover:opacity-80
|
|
184
|
-
transition-opacity
|
|
185
|
-
duration-150
|
|
186
|
-
"
|
|
187
|
-
data-testid="action-wrapper"
|
|
188
|
-
onClick={onActionClick}
|
|
189
|
-
role="button"
|
|
190
|
-
tabIndex={0}
|
|
191
|
-
onKeyDown={(e) => {
|
|
192
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
|
193
|
-
onActionClick?.(e as any);
|
|
194
|
-
}
|
|
195
|
-
}}
|
|
196
|
-
>
|
|
197
|
-
<p
|
|
198
|
-
className="
|
|
199
|
-
font-normal
|
|
200
|
-
text-xs
|
|
201
|
-
leading-3
|
|
202
|
-
text-content-secondary
|
|
203
|
-
dark:text-dark-border-inverse
|
|
204
|
-
whitespace-nowrap
|
|
205
|
-
"
|
|
206
|
-
data-testid="action-label"
|
|
207
|
-
>
|
|
208
|
-
{actionLabel}
|
|
209
|
-
</p>
|
|
210
|
-
</div>
|
|
211
|
-
)}
|
|
212
|
-
</div>
|
|
213
|
-
);
|
|
214
|
-
};
|
|
215
|
-
|
|
216
|
-
DropdownItemHeading.displayName = 'DropdownItemHeading';
|