siesa-ui-kit 1.0.2 → 1.0.4
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 +115 -115
- package/bin/install.cjs +502 -502
- package/bin/prepare-publish.cjs +28 -28
- package/bin/restore-folders.cjs +28 -28
- package/claude/agents/siesa-ui-kit-specialist.md +2445 -0
- package/claude/prompts/component-template.md +121 -0
- package/claude/prompts/siesa-ui-kit.md +28 -0
- package/claude/settings.local.json +67 -2
- package/dist/components/Button/icons.d.ts +6 -5
- package/dist/components/Button/icons.d.ts.map +1 -1
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts.map +1 -1
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts +21 -0
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts.map +1 -1
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts +122 -0
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts.map +1 -0
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts +139 -0
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts.map +1 -0
- package/dist/components/NavigationRailCommercial/icons.d.ts +33 -0
- package/dist/components/NavigationRailCommercial/icons.d.ts.map +1 -0
- package/dist/components/NavigationRailCommercial/index.d.ts +4 -0
- package/dist/components/NavigationRailCommercial/index.d.ts.map +1 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.d.ts.map +1 -1
- package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts +7 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts.map +1 -1
- package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts.map +1 -1
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts +41 -0
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts.map +1 -1
- package/dist/components/NavigationRailTypes/icons.d.ts +15 -29
- package/dist/components/NavigationRailTypes/icons.d.ts.map +1 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/icons.d.ts +6 -2
- package/dist/components/Select/icons.d.ts.map +1 -1
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/siesa-ui-kit.cjs +404 -190
- package/dist/siesa-ui-kit.cjs.map +1 -1
- package/dist/siesa-ui-kit.mjs +6590 -1506
- package/dist/siesa-ui-kit.mjs.map +1 -1
- package/dist/views/LayoutCommercial/LayoutCommercial.d.ts +48 -0
- package/dist/views/LayoutCommercial/LayoutCommercial.d.ts.map +1 -0
- package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts +49 -0
- package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts.map +1 -0
- package/dist/views/LayoutCommercial/index.d.ts +3 -0
- package/dist/views/LayoutCommercial/index.d.ts.map +1 -0
- package/docs/icons.md +12 -31
- package/package.json +111 -110
- package/src/components/Avatar/Avatar.stories.tsx +494 -494
- package/src/components/Button/Button.stories.tsx +950 -950
- package/src/components/Button/Button.tsx +337 -337
- package/src/components/Button/Button.types.ts +180 -180
- package/src/components/Button/icons.tsx +23 -62
- package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -250
- package/src/components/Divider/Divider.stories.tsx +263 -263
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +317 -317
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +307 -287
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +136 -111
- package/src/components/DropdownItemCollapsible/README.md +264 -264
- package/src/components/DropdownItemCollapsible/icons.tsx +57 -57
- package/src/components/DropdownItemCollapsible/index.ts +12 -12
- package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +386 -386
- package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +216 -216
- package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +93 -93
- package/src/components/DropdownItemHeading/README.md +573 -573
- package/src/components/DropdownItemHeading/icons.tsx +125 -125
- package/src/components/DropdownItemHeading/index.ts +3 -3
- package/src/components/Input/Input.stories.tsx +583 -583
- package/src/components/LoginView/LoginView.stories.tsx +148 -148
- package/src/components/LoginView/LoginView.tsx +426 -426
- package/src/components/LoginView/LoginView.types.ts +52 -52
- package/src/components/LoginView/README.md +396 -396
- package/src/components/LoginView/icons.tsx +85 -85
- package/src/components/LoginView/index.ts +3 -3
- package/src/components/Navbar/Navbar.stories.tsx +810 -810
- package/src/components/Navbar/Navbar.tsx +755 -755
- package/src/components/Navbar/Navbar.types.ts +219 -219
- package/src/components/Navbar/README.md +279 -279
- package/src/components/Navbar/index.ts +8 -8
- package/src/components/NavigationRailCommercial/NavigationRailCommercial.stories.tsx +464 -0
- package/src/components/NavigationRailCommercial/NavigationRailCommercial.tsx +301 -0
- package/src/components/NavigationRailCommercial/NavigationRailCommercial.types.ts +162 -0
- package/src/components/NavigationRailCommercial/README.md +251 -0
- package/src/components/NavigationRailCommercial/icons.tsx +54 -0
- package/src/components/NavigationRailCommercial/index.ts +6 -0
- package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +667 -667
- package/src/components/NavigationRailItem/NavigationRailItem.tsx +314 -313
- package/src/components/NavigationRailItem/NavigationRailItem.types.ts +175 -167
- package/src/components/NavigationRailItem/README.md +476 -476
- package/src/components/NavigationRailItem/index.ts +2 -2
- package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +462 -462
- package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +332 -332
- package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +178 -178
- package/src/components/NavigationRailPanel/README.md +461 -461
- package/src/components/NavigationRailPanel/index.ts +6 -6
- package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +682 -528
- package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +363 -378
- package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +178 -130
- package/src/components/NavigationRailTypes/README.md +573 -573
- package/src/components/NavigationRailTypes/icons.tsx +76 -141
- package/src/components/NavigationRailTypes/index.ts +7 -7
- package/src/components/Notification/Notification.stories.tsx +513 -513
- package/src/components/Notification/Notification.tsx +145 -145
- package/src/components/Notification/Notification.types.ts +142 -142
- package/src/components/Notification/README.md +409 -409
- package/src/components/POSConvention/POSConvention.stories.tsx +235 -235
- package/src/components/POSConvention/POSConvention.tsx +129 -129
- package/src/components/POSConvention/POSConvention.types.ts +38 -38
- package/src/components/POSConvention/README.md +123 -123
- package/src/components/POSConvention/icons.tsx +45 -45
- package/src/components/POSConvention/index.ts +3 -3
- package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -531
- package/src/components/POSLocationButton/POSLocationButton.tsx +247 -247
- package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -87
- package/src/components/POSLocationButton/README.md +253 -253
- package/src/components/POSLocationButton/icons.tsx +120 -120
- package/src/components/POSLocationButton/index.ts +14 -14
- package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -415
- package/src/components/POSNumberButton/POSNumberButton.tsx +179 -179
- package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -51
- package/src/components/POSNumberButton/README.md +321 -321
- package/src/components/POSNumberButton/index.ts +3 -3
- package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -318
- package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -642
- package/src/components/POSProductCard/POSProductCard.tsx +208 -208
- package/src/components/POSProductCard/POSProductCard.types.ts +76 -76
- package/src/components/POSProductCard/README.md +179 -179
- package/src/components/POSProductCard/icons.tsx +26 -26
- package/src/components/POSProductCard/index.ts +2 -2
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -753
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -332
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -119
- package/src/components/POSProductSidebarItems/README.md +198 -198
- package/src/components/POSProductSidebarItems/icons.tsx +21 -21
- package/src/components/POSProductSidebarItems/index.ts +3 -3
- package/src/components/POSTable/POSTable.stories.tsx +737 -737
- package/src/components/POSTable/POSTable.tsx +401 -401
- package/src/components/POSTable/README.md +286 -286
- package/src/components/Quantity/Quantity.stories.tsx +457 -457
- package/src/components/Radio/Radio.stories.tsx +523 -523
- package/src/components/Radio/Radio.tsx +1 -1
- package/src/components/Select/Select.stories.tsx +32 -0
- package/src/components/Select/Select.tsx +457 -454
- package/src/components/Select/icons.tsx +16 -41
- package/src/components/SignUpView/SignUpView.stories.tsx +129 -129
- package/src/components/SignUpView/SignUpView.tsx +503 -503
- package/src/components/SignUpView/SignUpView.types.ts +58 -58
- package/src/components/SignUpView/icons.tsx +71 -71
- package/src/components/SignUpView/index.ts +3 -3
- package/src/components/Switch/README.md +112 -112
- package/src/components/Switch/Switch.stories.tsx +550 -550
- package/src/components/Switch/Switch.tsx +246 -246
- package/src/components/Switch/Switch.types.ts +67 -67
- package/src/components/Table/Table.stories.tsx +805 -805
- package/src/components/Tabs/README.md +201 -201
- package/src/components/Tabs/Tabs.stories.tsx +580 -580
- package/src/components/Tabs/Tabs.tsx +356 -356
- package/src/components/Tabs/Tabs.types.ts +127 -127
- package/src/components/Tabs/icons.tsx +129 -129
- package/src/components/Tabs/index.ts +11 -11
- package/src/components/Textarea/Textarea.stories.tsx +535 -535
- package/src/index.ts +133 -102
- package/src/views/LayoutCommercial/LayoutCommercial.stories.tsx +374 -0
- package/src/views/LayoutCommercial/LayoutCommercial.tsx +125 -0
- package/src/views/LayoutCommercial/LayoutCommercial.types.ts +54 -0
- package/src/views/LayoutCommercial/README.md +286 -0
- package/src/views/LayoutCommercial/index.ts +2 -0
- package/src/views/ListView/ListView.stories.tsx +329 -329
- package/src/views/ListView/ListView.tsx +570 -570
- package/src/views/ListView/ListView.types.ts +211 -211
- package/src/views/ListView/icons.tsx +282 -282
- package/src/views/ListView/index.ts +11 -11
- package/src/views/LoginView/LoginView.tsx +426 -426
- package/src/views/ProductsView/ProductsView.stories.tsx +344 -344
- package/src/views/ProductsView/ProductsView.tsx +480 -480
- package/src/views/ProductsView/ProductsView.types.ts +238 -238
- package/src/views/ProductsView/README.md +312 -312
- package/src/views/ProductsView/icons.tsx +38 -38
- package/src/views/ProductsView/index.ts +8 -8
- package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -376
- package/src/views/SignUpView/SignUpView.tsx +503 -503
- package/src/views/TableLayoutView/README.md +268 -268
- package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -235
- package/src/views/TableLayoutView/TableLayoutView.tsx +461 -461
- package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -209
- package/src/views/TableLayoutView/icons.tsx +113 -113
- package/src/views/TableLayoutView/index.ts +6 -6
- package/storybook/main.ts +19 -19
- package/storybook/preview.tsx +84 -84
- package/storybook/vitest.setup.ts +6 -6
- package/tailwind.config.js +128 -128
|
@@ -1,216 +1,216 @@
|
|
|
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';
|
|
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';
|
|
@@ -1,93 +1,93 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Props del componente DropdownItemHeading
|
|
3
|
-
*
|
|
4
|
-
* Especificaciones de Figma: node 6135:32539
|
|
5
|
-
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6135-32539&m=dev
|
|
6
|
-
*/
|
|
7
|
-
export interface DropdownItemHeadingProps {
|
|
8
|
-
/**
|
|
9
|
-
* Texto del label principal del heading
|
|
10
|
-
* Tipografía: Label/Small (14px, Bold)
|
|
11
|
-
* Color: content-primary (#18181b light, #bfe2fe dark)
|
|
12
|
-
*
|
|
13
|
-
* @default 'Label'
|
|
14
|
-
*/
|
|
15
|
-
label?: string;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Texto de descripción secundaria bajo el label
|
|
19
|
-
* Tipografía: Paragraph/Tiny (12px, Regular)
|
|
20
|
-
* Color: content-secondary (#a1a1aa light, #93d1fd dark)
|
|
21
|
-
*
|
|
22
|
-
* @default undefined
|
|
23
|
-
*/
|
|
24
|
-
description?: string;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Si se debe mostrar la descripción
|
|
28
|
-
* Cuando es false, solo muestra el label
|
|
29
|
-
*
|
|
30
|
-
* @default true
|
|
31
|
-
*/
|
|
32
|
-
showDescription?: boolean;
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Nombre del icono a mostrar (string)
|
|
36
|
-
* Iconos disponibles:
|
|
37
|
-
* - `'cog-6-tooth'`: Icono de engranaje (por defecto)
|
|
38
|
-
* - `'check'`: Icono de check
|
|
39
|
-
* - `'x'`: Icono de cerrar
|
|
40
|
-
* - `'chevron-down'`: Icono de chevron hacia abajo
|
|
41
|
-
*
|
|
42
|
-
* Tamaño: 16x16px
|
|
43
|
-
* Color: primary-custom-600 (#0e79fd light, #bfe2fe dark)
|
|
44
|
-
*
|
|
45
|
-
* Si no se proporciona, se usa 'cog-6-tooth' por defecto
|
|
46
|
-
*
|
|
47
|
-
* @default 'cog-6-tooth'
|
|
48
|
-
* @see icons.tsx para ver los iconos disponibles
|
|
49
|
-
*/
|
|
50
|
-
iconName?: string | null;
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Si se debe mostrar el icono en la izquierda
|
|
54
|
-
*
|
|
55
|
-
* @default true
|
|
56
|
-
*/
|
|
57
|
-
showIcon?: boolean;
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Texto de acción a mostrar en la derecha
|
|
61
|
-
* Tipografía: Paragraph/XXSmall (10px, Regular)
|
|
62
|
-
* Color: content-secondary (#a1a1aa light, #93d1fd dark)
|
|
63
|
-
*
|
|
64
|
-
* Comúnmente usado para "Clear", "Reset", etc.
|
|
65
|
-
*
|
|
66
|
-
* @default undefined
|
|
67
|
-
*/
|
|
68
|
-
actionLabel?: string;
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Si se debe mostrar el action label en la derecha
|
|
72
|
-
*
|
|
73
|
-
* @default false
|
|
74
|
-
*/
|
|
75
|
-
showAction?: boolean;
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Callback ejecutado al hacer click en el action label
|
|
79
|
-
*/
|
|
80
|
-
onActionClick?: (event: React.MouseEvent<HTMLDivElement>) => void;
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Clases CSS adicionales para personalización
|
|
84
|
-
*
|
|
85
|
-
* @default ''
|
|
86
|
-
*/
|
|
87
|
-
className?: string;
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Atributos HTML adicionales
|
|
91
|
-
*/
|
|
92
|
-
[key: string]: unknown;
|
|
93
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Props del componente DropdownItemHeading
|
|
3
|
+
*
|
|
4
|
+
* Especificaciones de Figma: node 6135:32539
|
|
5
|
+
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6135-32539&m=dev
|
|
6
|
+
*/
|
|
7
|
+
export interface DropdownItemHeadingProps {
|
|
8
|
+
/**
|
|
9
|
+
* Texto del label principal del heading
|
|
10
|
+
* Tipografía: Label/Small (14px, Bold)
|
|
11
|
+
* Color: content-primary (#18181b light, #bfe2fe dark)
|
|
12
|
+
*
|
|
13
|
+
* @default 'Label'
|
|
14
|
+
*/
|
|
15
|
+
label?: string;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Texto de descripción secundaria bajo el label
|
|
19
|
+
* Tipografía: Paragraph/Tiny (12px, Regular)
|
|
20
|
+
* Color: content-secondary (#a1a1aa light, #93d1fd dark)
|
|
21
|
+
*
|
|
22
|
+
* @default undefined
|
|
23
|
+
*/
|
|
24
|
+
description?: string;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Si se debe mostrar la descripción
|
|
28
|
+
* Cuando es false, solo muestra el label
|
|
29
|
+
*
|
|
30
|
+
* @default true
|
|
31
|
+
*/
|
|
32
|
+
showDescription?: boolean;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Nombre del icono a mostrar (string)
|
|
36
|
+
* Iconos disponibles:
|
|
37
|
+
* - `'cog-6-tooth'`: Icono de engranaje (por defecto)
|
|
38
|
+
* - `'check'`: Icono de check
|
|
39
|
+
* - `'x'`: Icono de cerrar
|
|
40
|
+
* - `'chevron-down'`: Icono de chevron hacia abajo
|
|
41
|
+
*
|
|
42
|
+
* Tamaño: 16x16px
|
|
43
|
+
* Color: primary-custom-600 (#0e79fd light, #bfe2fe dark)
|
|
44
|
+
*
|
|
45
|
+
* Si no se proporciona, se usa 'cog-6-tooth' por defecto
|
|
46
|
+
*
|
|
47
|
+
* @default 'cog-6-tooth'
|
|
48
|
+
* @see icons.tsx para ver los iconos disponibles
|
|
49
|
+
*/
|
|
50
|
+
iconName?: string | null;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Si se debe mostrar el icono en la izquierda
|
|
54
|
+
*
|
|
55
|
+
* @default true
|
|
56
|
+
*/
|
|
57
|
+
showIcon?: boolean;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Texto de acción a mostrar en la derecha
|
|
61
|
+
* Tipografía: Paragraph/XXSmall (10px, Regular)
|
|
62
|
+
* Color: content-secondary (#a1a1aa light, #93d1fd dark)
|
|
63
|
+
*
|
|
64
|
+
* Comúnmente usado para "Clear", "Reset", etc.
|
|
65
|
+
*
|
|
66
|
+
* @default undefined
|
|
67
|
+
*/
|
|
68
|
+
actionLabel?: string;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Si se debe mostrar el action label en la derecha
|
|
72
|
+
*
|
|
73
|
+
* @default false
|
|
74
|
+
*/
|
|
75
|
+
showAction?: boolean;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Callback ejecutado al hacer click en el action label
|
|
79
|
+
*/
|
|
80
|
+
onActionClick?: (event: React.MouseEvent<HTMLDivElement>) => void;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Clases CSS adicionales para personalización
|
|
84
|
+
*
|
|
85
|
+
* @default ''
|
|
86
|
+
*/
|
|
87
|
+
className?: string;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Atributos HTML adicionales
|
|
91
|
+
*/
|
|
92
|
+
[key: string]: unknown;
|
|
93
|
+
}
|