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,179 +1,179 @@
1
- import React from 'react';
2
- import type { POSNumberButtonProps } from './POSNumberButton.types';
3
-
4
- /**
5
- * Componente POSNumberButton del sistema de diseño Siesa
6
- * Botón numérico especializado para sistemas POS (Point of Sale)
7
- *
8
- * Basado en especificaciones de Figma con Tailwind CSS
9
- *
10
- * **Características principales:**
11
- * - Diseñado para pantallas táctiles y POS
12
- * - Tipografía Display Tiny (48px Bold) para números grandes
13
- * - Tres tamaños: Small (40x40), Medium (65x65), Large (80x80)
14
- * - Opción de borde visible o sin borde
15
- * - Estados: Default, Hover, Active, Disabled
16
- * - Touch-friendly: active:scale-95 para feedback táctil
17
- *
18
- * **Variantes:**
19
- * - `border=false`: Botón sin borde, hover cambia a primary
20
- * - `border=true`: Botón con borde, hover resalta el borde
21
- *
22
- * **Tamaños:**
23
- * - `s` (40x40px): Compacto, para teclados numéricos pequeños
24
- * - `m` (65x65px): Mediano, tamaño intermedio
25
- * - `l` (80x80px): Grande, tamaño por defecto para POS
26
- *
27
- * **Mejores prácticas implementadas:**
28
- * - Orden de modificadores: {responsive}:{dark}:{state}:{utility}
29
- * - Dark mode con estrategia 'class' (darkMode: 'class')
30
- * - Tokens de color consistentes con la documentación
31
- * - Type safety con TypeScript estricto
32
- * - Accesibilidad con ARIA labels
33
- * - Feedback visual inmediato con active:scale-95
34
- *
35
- * @see docs/colors.md - Sistema de colores
36
- * @see docs/typography.md - Sistema tipográfico (Display Tiny)
37
- * @see docs/spacing.md - Sistema de espaciado
38
- * @see src/components/Button/Button.tsx - Componente Button de referencia
39
- *
40
- * @example
41
- * ```tsx
42
- * // Botón numérico grande (POS)
43
- * <POSNumberButton size="l">1</POSNumberButton>
44
- *
45
- * // Botón con borde
46
- * <POSNumberButton size="l" border>2</POSNumberButton>
47
- *
48
- * // Botón compacto
49
- * <POSNumberButton size="s">3</POSNumberButton>
50
- *
51
- * // Teclado numérico completo
52
- * <div className="grid grid-cols-3 gap-2">
53
- * {[1, 2, 3, 4, 5, 6, 7, 8, 9].map((num) => (
54
- * <POSNumberButton key={num} size="m" onClick={() => handleInput(num)}>
55
- * {num}
56
- * </POSNumberButton>
57
- * ))}
58
- * </div>
59
- * ```
60
- */
61
- export const POSNumberButton: React.FC<POSNumberButtonProps> = ({
62
- size = 'l',
63
- border = false,
64
- children,
65
- disabled = false,
66
- className = '',
67
- onClick,
68
- ariaLabel,
69
- htmlType = 'button',
70
- ...rest
71
- }) => {
72
- // ===== CLASES DE TAMAÑO =====
73
- // Basado en especificaciones de Figma: L=80x80, M=65x65, S=40x40
74
- const sizeClasses = {
75
- s: 'w-10 h-10', // 40x40px
76
- m: 'w-[65px] h-[65px]', // 65x65px
77
- l: 'w-20 h-20', // 80x80px
78
- };
79
-
80
- // ===== CLASES DE TEXTO =====
81
- // Display Tiny (48px Bold) según typography.md → text-5xl
82
- // Para tamaño small, reducimos a text-2xl (24px)
83
- const textSizeClasses = {
84
- s: 'text-2xl', // 24px para botones pequeños
85
- m: 'text-5xl', // 48px Display Tiny
86
- l: 'text-5xl', // 48px Display Tiny
87
- };
88
-
89
- // ===== CLASES DE ESTADO (Sin Borde) =====
90
- const noBorderStateClasses = `
91
- bg-white
92
- text-content-primary
93
- hover:bg-primary-custom-600
94
- hover:text-primary-inverse-content
95
- active:bg-primary-custom-600
96
- active:text-primary-inverse-content
97
- active:scale-95
98
- dark:bg-dark-bg-primary
99
- dark:text-dark-content-primary
100
- dark:hover:bg-dark-bg-inverse
101
- dark:hover:text-dark-content-inverse
102
- dark:active:bg-dark-bg-inverse
103
- dark:active:text-dark-content-inverse
104
- dark:active:scale-95
105
- `;
106
-
107
- // ===== CLASES DE ESTADO (Con Borde) =====
108
- const withBorderStateClasses = `
109
- bg-white
110
- text-content-primary
111
- border
112
- border-border-primary
113
- hover:bg-primary-custom-600
114
- hover:text-primary-inverse-content
115
- hover:border-primary-inverse-border
116
- active:bg-primary-custom-600
117
- active:text-primary-inverse-content
118
- active:border-primary-inverse-border
119
- active:scale-95
120
- dark:bg-dark-bg-primary
121
- dark:text-dark-content-primary
122
- dark:border-dark-border-primary
123
- dark:hover:bg-dark-bg-inverse
124
- dark:hover:text-dark-content-inverse
125
- dark:hover:border-primary-inverse-border
126
- dark:active:bg-dark-bg-inverse
127
- dark:active:text-dark-content-inverse
128
- dark:active:border-primary-inverse-border
129
- dark:active:scale-95
130
- `;
131
-
132
- // ===== CLASES BASE =====
133
- const baseClasses = `
134
- inline-flex
135
- items-center
136
- justify-center
137
- rounded-lg
138
- font-bold
139
- tracking-tighter
140
- whitespace-nowrap
141
- cursor-pointer
142
- focus:outline-none
143
- focus:ring-2
144
- focus:ring-primary-custom-400
145
- focus:ring-offset-2
146
- dark:focus:ring-dark-border-custom
147
- dark:focus:ring-offset-dark-bg-primary
148
- disabled:opacity-50
149
- disabled:cursor-not-allowed
150
- disabled:pointer-events-none
151
- transition-all
152
- duration-150
153
- `;
154
-
155
- // ===== COMBINAR TODAS LAS CLASES =====
156
- const buttonClasses = [
157
- baseClasses,
158
- sizeClasses[size],
159
- textSizeClasses[size],
160
- border ? withBorderStateClasses : noBorderStateClasses,
161
- className,
162
- ]
163
- .join(' ')
164
- .replace(/\s+/g, ' ')
165
- .trim();
166
-
167
- return (
168
- <button
169
- type={htmlType}
170
- className={buttonClasses}
171
- disabled={disabled}
172
- onClick={onClick}
173
- aria-label={ariaLabel || `Número ${children}`}
174
- {...rest}
175
- >
176
- {children}
177
- </button>
178
- );
179
- };
1
+ import React from 'react';
2
+ import type { POSNumberButtonProps } from './POSNumberButton.types';
3
+
4
+ /**
5
+ * Componente POSNumberButton del sistema de diseño Siesa
6
+ * Botón numérico especializado para sistemas POS (Point of Sale)
7
+ *
8
+ * Basado en especificaciones de Figma con Tailwind CSS
9
+ *
10
+ * **Características principales:**
11
+ * - Diseñado para pantallas táctiles y POS
12
+ * - Tipografía Display Tiny (48px Bold) para números grandes
13
+ * - Tres tamaños: Small (40x40), Medium (65x65), Large (80x80)
14
+ * - Opción de borde visible o sin borde
15
+ * - Estados: Default, Hover, Active, Disabled
16
+ * - Touch-friendly: active:scale-95 para feedback táctil
17
+ *
18
+ * **Variantes:**
19
+ * - `border=false`: Botón sin borde, hover cambia a primary
20
+ * - `border=true`: Botón con borde, hover resalta el borde
21
+ *
22
+ * **Tamaños:**
23
+ * - `s` (40x40px): Compacto, para teclados numéricos pequeños
24
+ * - `m` (65x65px): Mediano, tamaño intermedio
25
+ * - `l` (80x80px): Grande, tamaño por defecto para POS
26
+ *
27
+ * **Mejores prácticas implementadas:**
28
+ * - Orden de modificadores: {responsive}:{dark}:{state}:{utility}
29
+ * - Dark mode con estrategia 'class' (darkMode: 'class')
30
+ * - Tokens de color consistentes con la documentación
31
+ * - Type safety con TypeScript estricto
32
+ * - Accesibilidad con ARIA labels
33
+ * - Feedback visual inmediato con active:scale-95
34
+ *
35
+ * @see docs/colors.md - Sistema de colores
36
+ * @see docs/typography.md - Sistema tipográfico (Display Tiny)
37
+ * @see docs/spacing.md - Sistema de espaciado
38
+ * @see src/components/Button/Button.tsx - Componente Button de referencia
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * // Botón numérico grande (POS)
43
+ * <POSNumberButton size="l">1</POSNumberButton>
44
+ *
45
+ * // Botón con borde
46
+ * <POSNumberButton size="l" border>2</POSNumberButton>
47
+ *
48
+ * // Botón compacto
49
+ * <POSNumberButton size="s">3</POSNumberButton>
50
+ *
51
+ * // Teclado numérico completo
52
+ * <div className="grid grid-cols-3 gap-2">
53
+ * {[1, 2, 3, 4, 5, 6, 7, 8, 9].map((num) => (
54
+ * <POSNumberButton key={num} size="m" onClick={() => handleInput(num)}>
55
+ * {num}
56
+ * </POSNumberButton>
57
+ * ))}
58
+ * </div>
59
+ * ```
60
+ */
61
+ export const POSNumberButton: React.FC<POSNumberButtonProps> = ({
62
+ size = 'l',
63
+ border = false,
64
+ children,
65
+ disabled = false,
66
+ className = '',
67
+ onClick,
68
+ ariaLabel,
69
+ htmlType = 'button',
70
+ ...rest
71
+ }) => {
72
+ // ===== CLASES DE TAMAÑO =====
73
+ // Basado en especificaciones de Figma: L=80x80, M=65x65, S=40x40
74
+ const sizeClasses = {
75
+ s: 'w-10 h-10', // 40x40px
76
+ m: 'w-[65px] h-[65px]', // 65x65px
77
+ l: 'w-20 h-20', // 80x80px
78
+ };
79
+
80
+ // ===== CLASES DE TEXTO =====
81
+ // Display Tiny (48px Bold) según typography.md → text-5xl
82
+ // Para tamaño small, reducimos a text-2xl (24px)
83
+ const textSizeClasses = {
84
+ s: 'text-2xl', // 24px para botones pequeños
85
+ m: 'text-5xl', // 48px Display Tiny
86
+ l: 'text-5xl', // 48px Display Tiny
87
+ };
88
+
89
+ // ===== CLASES DE ESTADO (Sin Borde) =====
90
+ const noBorderStateClasses = `
91
+ bg-white
92
+ text-content-primary
93
+ hover:bg-primary-custom-600
94
+ hover:text-primary-inverse-content
95
+ active:bg-primary-custom-600
96
+ active:text-primary-inverse-content
97
+ active:scale-95
98
+ dark:bg-dark-bg-primary
99
+ dark:text-dark-content-primary
100
+ dark:hover:bg-dark-bg-inverse
101
+ dark:hover:text-dark-content-inverse
102
+ dark:active:bg-dark-bg-inverse
103
+ dark:active:text-dark-content-inverse
104
+ dark:active:scale-95
105
+ `;
106
+
107
+ // ===== CLASES DE ESTADO (Con Borde) =====
108
+ const withBorderStateClasses = `
109
+ bg-white
110
+ text-content-primary
111
+ border
112
+ border-border-primary
113
+ hover:bg-primary-custom-600
114
+ hover:text-primary-inverse-content
115
+ hover:border-primary-inverse-border
116
+ active:bg-primary-custom-600
117
+ active:text-primary-inverse-content
118
+ active:border-primary-inverse-border
119
+ active:scale-95
120
+ dark:bg-dark-bg-primary
121
+ dark:text-dark-content-primary
122
+ dark:border-dark-border-primary
123
+ dark:hover:bg-dark-bg-inverse
124
+ dark:hover:text-dark-content-inverse
125
+ dark:hover:border-primary-inverse-border
126
+ dark:active:bg-dark-bg-inverse
127
+ dark:active:text-dark-content-inverse
128
+ dark:active:border-primary-inverse-border
129
+ dark:active:scale-95
130
+ `;
131
+
132
+ // ===== CLASES BASE =====
133
+ const baseClasses = `
134
+ inline-flex
135
+ items-center
136
+ justify-center
137
+ rounded-lg
138
+ font-bold
139
+ tracking-tighter
140
+ whitespace-nowrap
141
+ cursor-pointer
142
+ focus:outline-none
143
+ focus:ring-2
144
+ focus:ring-primary-custom-400
145
+ focus:ring-offset-2
146
+ dark:focus:ring-dark-border-custom
147
+ dark:focus:ring-offset-dark-bg-primary
148
+ disabled:opacity-50
149
+ disabled:cursor-not-allowed
150
+ disabled:pointer-events-none
151
+ transition-all
152
+ duration-150
153
+ `;
154
+
155
+ // ===== COMBINAR TODAS LAS CLASES =====
156
+ const buttonClasses = [
157
+ baseClasses,
158
+ sizeClasses[size],
159
+ textSizeClasses[size],
160
+ border ? withBorderStateClasses : noBorderStateClasses,
161
+ className,
162
+ ]
163
+ .join(' ')
164
+ .replace(/\s+/g, ' ')
165
+ .trim();
166
+
167
+ return (
168
+ <button
169
+ type={htmlType}
170
+ className={buttonClasses}
171
+ disabled={disabled}
172
+ onClick={onClick}
173
+ aria-label={ariaLabel || `Número ${children}`}
174
+ {...rest}
175
+ >
176
+ {children}
177
+ </button>
178
+ );
179
+ };
@@ -1,51 +1,51 @@
1
- // POSNumberButton.types.ts
2
- import type { ReactNode, MouseEvent } from 'react';
3
-
4
- /**
5
- * Props del componente POSNumberButton
6
- */
7
- export interface POSNumberButtonProps {
8
- /**
9
- * Tamaño del botón
10
- * @default 'l'
11
- */
12
- size?: 's' | 'm' | 'l';
13
-
14
- /**
15
- * Si el botón tiene borde visible
16
- * @default false
17
- */
18
- border?: boolean;
19
-
20
- /**
21
- * Contenido del botón (número o texto)
22
- */
23
- children: ReactNode;
24
-
25
- /**
26
- * Si el botón está deshabilitado
27
- * @default false
28
- */
29
- disabled?: boolean;
30
-
31
- /**
32
- * Clases CSS adicionales
33
- */
34
- className?: string;
35
-
36
- /**
37
- * Handler para evento click
38
- */
39
- onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
40
-
41
- /**
42
- * Label para accesibilidad (ARIA)
43
- */
44
- ariaLabel?: string;
45
-
46
- /**
47
- * Tipo del botón HTML
48
- * @default 'button'
49
- */
50
- htmlType?: 'button' | 'submit' | 'reset';
51
- }
1
+ // POSNumberButton.types.ts
2
+ import type { ReactNode, MouseEvent } from 'react';
3
+
4
+ /**
5
+ * Props del componente POSNumberButton
6
+ */
7
+ export interface POSNumberButtonProps {
8
+ /**
9
+ * Tamaño del botón
10
+ * @default 'l'
11
+ */
12
+ size?: 's' | 'm' | 'l';
13
+
14
+ /**
15
+ * Si el botón tiene borde visible
16
+ * @default false
17
+ */
18
+ border?: boolean;
19
+
20
+ /**
21
+ * Contenido del botón (número o texto)
22
+ */
23
+ children: ReactNode;
24
+
25
+ /**
26
+ * Si el botón está deshabilitado
27
+ * @default false
28
+ */
29
+ disabled?: boolean;
30
+
31
+ /**
32
+ * Clases CSS adicionales
33
+ */
34
+ className?: string;
35
+
36
+ /**
37
+ * Handler para evento click
38
+ */
39
+ onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
40
+
41
+ /**
42
+ * Label para accesibilidad (ARIA)
43
+ */
44
+ ariaLabel?: string;
45
+
46
+ /**
47
+ * Tipo del botón HTML
48
+ * @default 'button'
49
+ */
50
+ htmlType?: 'button' | 'submit' | 'reset';
51
+ }