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.
Files changed (189) hide show
  1. package/README.md +115 -115
  2. package/bin/install.cjs +502 -502
  3. package/bin/prepare-publish.cjs +28 -28
  4. package/bin/restore-folders.cjs +28 -28
  5. package/claude/agents/siesa-ui-kit-specialist.md +2445 -0
  6. package/claude/prompts/component-template.md +121 -0
  7. package/claude/prompts/siesa-ui-kit.md +28 -0
  8. package/claude/settings.local.json +67 -2
  9. package/dist/components/Button/icons.d.ts +6 -5
  10. package/dist/components/Button/icons.d.ts.map +1 -1
  11. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts.map +1 -1
  12. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts +21 -0
  13. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts.map +1 -1
  14. package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts +122 -0
  15. package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts.map +1 -0
  16. package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts +139 -0
  17. package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts.map +1 -0
  18. package/dist/components/NavigationRailCommercial/icons.d.ts +33 -0
  19. package/dist/components/NavigationRailCommercial/icons.d.ts.map +1 -0
  20. package/dist/components/NavigationRailCommercial/index.d.ts +4 -0
  21. package/dist/components/NavigationRailCommercial/index.d.ts.map +1 -0
  22. package/dist/components/NavigationRailItem/NavigationRailItem.d.ts.map +1 -1
  23. package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts +7 -0
  24. package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts.map +1 -1
  25. package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts.map +1 -1
  26. package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts +41 -0
  27. package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts.map +1 -1
  28. package/dist/components/NavigationRailTypes/icons.d.ts +15 -29
  29. package/dist/components/NavigationRailTypes/icons.d.ts.map +1 -1
  30. package/dist/components/Select/Select.d.ts.map +1 -1
  31. package/dist/components/Select/icons.d.ts +6 -2
  32. package/dist/components/Select/icons.d.ts.map +1 -1
  33. package/dist/index.d.ts +32 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/siesa-ui-kit.cjs +404 -190
  36. package/dist/siesa-ui-kit.cjs.map +1 -1
  37. package/dist/siesa-ui-kit.mjs +6590 -1506
  38. package/dist/siesa-ui-kit.mjs.map +1 -1
  39. package/dist/views/LayoutCommercial/LayoutCommercial.d.ts +48 -0
  40. package/dist/views/LayoutCommercial/LayoutCommercial.d.ts.map +1 -0
  41. package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts +49 -0
  42. package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts.map +1 -0
  43. package/dist/views/LayoutCommercial/index.d.ts +3 -0
  44. package/dist/views/LayoutCommercial/index.d.ts.map +1 -0
  45. package/docs/icons.md +12 -31
  46. package/package.json +111 -110
  47. package/src/components/Avatar/Avatar.stories.tsx +494 -494
  48. package/src/components/Button/Button.stories.tsx +950 -950
  49. package/src/components/Button/Button.tsx +337 -337
  50. package/src/components/Button/Button.types.ts +180 -180
  51. package/src/components/Button/icons.tsx +23 -62
  52. package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -250
  53. package/src/components/Divider/Divider.stories.tsx +263 -263
  54. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +317 -317
  55. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +307 -287
  56. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +136 -111
  57. package/src/components/DropdownItemCollapsible/README.md +264 -264
  58. package/src/components/DropdownItemCollapsible/icons.tsx +57 -57
  59. package/src/components/DropdownItemCollapsible/index.ts +12 -12
  60. package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +386 -386
  61. package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +216 -216
  62. package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +93 -93
  63. package/src/components/DropdownItemHeading/README.md +573 -573
  64. package/src/components/DropdownItemHeading/icons.tsx +125 -125
  65. package/src/components/DropdownItemHeading/index.ts +3 -3
  66. package/src/components/Input/Input.stories.tsx +583 -583
  67. package/src/components/LoginView/LoginView.stories.tsx +148 -148
  68. package/src/components/LoginView/LoginView.tsx +426 -426
  69. package/src/components/LoginView/LoginView.types.ts +52 -52
  70. package/src/components/LoginView/README.md +396 -396
  71. package/src/components/LoginView/icons.tsx +85 -85
  72. package/src/components/LoginView/index.ts +3 -3
  73. package/src/components/Navbar/Navbar.stories.tsx +810 -810
  74. package/src/components/Navbar/Navbar.tsx +755 -755
  75. package/src/components/Navbar/Navbar.types.ts +219 -219
  76. package/src/components/Navbar/README.md +279 -279
  77. package/src/components/Navbar/index.ts +8 -8
  78. package/src/components/NavigationRailCommercial/NavigationRailCommercial.stories.tsx +464 -0
  79. package/src/components/NavigationRailCommercial/NavigationRailCommercial.tsx +301 -0
  80. package/src/components/NavigationRailCommercial/NavigationRailCommercial.types.ts +162 -0
  81. package/src/components/NavigationRailCommercial/README.md +251 -0
  82. package/src/components/NavigationRailCommercial/icons.tsx +54 -0
  83. package/src/components/NavigationRailCommercial/index.ts +6 -0
  84. package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +667 -667
  85. package/src/components/NavigationRailItem/NavigationRailItem.tsx +314 -313
  86. package/src/components/NavigationRailItem/NavigationRailItem.types.ts +175 -167
  87. package/src/components/NavigationRailItem/README.md +476 -476
  88. package/src/components/NavigationRailItem/index.ts +2 -2
  89. package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +462 -462
  90. package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +332 -332
  91. package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +178 -178
  92. package/src/components/NavigationRailPanel/README.md +461 -461
  93. package/src/components/NavigationRailPanel/index.ts +6 -6
  94. package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +682 -528
  95. package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +363 -378
  96. package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +178 -130
  97. package/src/components/NavigationRailTypes/README.md +573 -573
  98. package/src/components/NavigationRailTypes/icons.tsx +76 -141
  99. package/src/components/NavigationRailTypes/index.ts +7 -7
  100. package/src/components/Notification/Notification.stories.tsx +513 -513
  101. package/src/components/Notification/Notification.tsx +145 -145
  102. package/src/components/Notification/Notification.types.ts +142 -142
  103. package/src/components/Notification/README.md +409 -409
  104. package/src/components/POSConvention/POSConvention.stories.tsx +235 -235
  105. package/src/components/POSConvention/POSConvention.tsx +129 -129
  106. package/src/components/POSConvention/POSConvention.types.ts +38 -38
  107. package/src/components/POSConvention/README.md +123 -123
  108. package/src/components/POSConvention/icons.tsx +45 -45
  109. package/src/components/POSConvention/index.ts +3 -3
  110. package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -531
  111. package/src/components/POSLocationButton/POSLocationButton.tsx +247 -247
  112. package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -87
  113. package/src/components/POSLocationButton/README.md +253 -253
  114. package/src/components/POSLocationButton/icons.tsx +120 -120
  115. package/src/components/POSLocationButton/index.ts +14 -14
  116. package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -415
  117. package/src/components/POSNumberButton/POSNumberButton.tsx +179 -179
  118. package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -51
  119. package/src/components/POSNumberButton/README.md +321 -321
  120. package/src/components/POSNumberButton/index.ts +3 -3
  121. package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -318
  122. package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -642
  123. package/src/components/POSProductCard/POSProductCard.tsx +208 -208
  124. package/src/components/POSProductCard/POSProductCard.types.ts +76 -76
  125. package/src/components/POSProductCard/README.md +179 -179
  126. package/src/components/POSProductCard/icons.tsx +26 -26
  127. package/src/components/POSProductCard/index.ts +2 -2
  128. package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -753
  129. package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -332
  130. package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -119
  131. package/src/components/POSProductSidebarItems/README.md +198 -198
  132. package/src/components/POSProductSidebarItems/icons.tsx +21 -21
  133. package/src/components/POSProductSidebarItems/index.ts +3 -3
  134. package/src/components/POSTable/POSTable.stories.tsx +737 -737
  135. package/src/components/POSTable/POSTable.tsx +401 -401
  136. package/src/components/POSTable/README.md +286 -286
  137. package/src/components/Quantity/Quantity.stories.tsx +457 -457
  138. package/src/components/Radio/Radio.stories.tsx +523 -523
  139. package/src/components/Radio/Radio.tsx +1 -1
  140. package/src/components/Select/Select.stories.tsx +32 -0
  141. package/src/components/Select/Select.tsx +457 -454
  142. package/src/components/Select/icons.tsx +16 -41
  143. package/src/components/SignUpView/SignUpView.stories.tsx +129 -129
  144. package/src/components/SignUpView/SignUpView.tsx +503 -503
  145. package/src/components/SignUpView/SignUpView.types.ts +58 -58
  146. package/src/components/SignUpView/icons.tsx +71 -71
  147. package/src/components/SignUpView/index.ts +3 -3
  148. package/src/components/Switch/README.md +112 -112
  149. package/src/components/Switch/Switch.stories.tsx +550 -550
  150. package/src/components/Switch/Switch.tsx +246 -246
  151. package/src/components/Switch/Switch.types.ts +67 -67
  152. package/src/components/Table/Table.stories.tsx +805 -805
  153. package/src/components/Tabs/README.md +201 -201
  154. package/src/components/Tabs/Tabs.stories.tsx +580 -580
  155. package/src/components/Tabs/Tabs.tsx +356 -356
  156. package/src/components/Tabs/Tabs.types.ts +127 -127
  157. package/src/components/Tabs/icons.tsx +129 -129
  158. package/src/components/Tabs/index.ts +11 -11
  159. package/src/components/Textarea/Textarea.stories.tsx +535 -535
  160. package/src/index.ts +133 -102
  161. package/src/views/LayoutCommercial/LayoutCommercial.stories.tsx +374 -0
  162. package/src/views/LayoutCommercial/LayoutCommercial.tsx +125 -0
  163. package/src/views/LayoutCommercial/LayoutCommercial.types.ts +54 -0
  164. package/src/views/LayoutCommercial/README.md +286 -0
  165. package/src/views/LayoutCommercial/index.ts +2 -0
  166. package/src/views/ListView/ListView.stories.tsx +329 -329
  167. package/src/views/ListView/ListView.tsx +570 -570
  168. package/src/views/ListView/ListView.types.ts +211 -211
  169. package/src/views/ListView/icons.tsx +282 -282
  170. package/src/views/ListView/index.ts +11 -11
  171. package/src/views/LoginView/LoginView.tsx +426 -426
  172. package/src/views/ProductsView/ProductsView.stories.tsx +344 -344
  173. package/src/views/ProductsView/ProductsView.tsx +480 -480
  174. package/src/views/ProductsView/ProductsView.types.ts +238 -238
  175. package/src/views/ProductsView/README.md +312 -312
  176. package/src/views/ProductsView/icons.tsx +38 -38
  177. package/src/views/ProductsView/index.ts +8 -8
  178. package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -376
  179. package/src/views/SignUpView/SignUpView.tsx +503 -503
  180. package/src/views/TableLayoutView/README.md +268 -268
  181. package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -235
  182. package/src/views/TableLayoutView/TableLayoutView.tsx +461 -461
  183. package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -209
  184. package/src/views/TableLayoutView/icons.tsx +113 -113
  185. package/src/views/TableLayoutView/index.ts +6 -6
  186. package/storybook/main.ts +19 -19
  187. package/storybook/preview.tsx +84 -84
  188. package/storybook/vitest.setup.ts +6 -6
  189. 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
+ }