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,286 +1,286 @@
1
- # POSTable - Sistema de Visualización de Mesas de Restaurante
2
-
3
- Componente para mostrar mesas de restaurante con diferentes estados (disponible, ocupada, reservada) y configuraciones de sillas según diseño pixel-perfect de Figma.
4
-
5
- ## Características
6
-
7
- - 3 estados: Available (Disponible), Busy (Ocupada), Reserved (Reservada)
8
- - 4 formas de mesa: Square (Cuadrada), Circle (Circular), Rectangle (Rectangular), Oval (Ovalada)
9
- - Soporte para 2, 4, 6 u 8 sillas
10
- - Estado activo con fondo de color
11
- - Dark mode completo
12
- - Focus rings adaptativos por estado
13
- - Interactividad con onClick
14
- - Dimensiones pixel-perfect según Figma (160x160px)
15
-
16
- ## Importación
17
-
18
- ```tsx
19
- import { POSTable } from '@/components/POSTable';
20
- ```
21
-
22
- ## Uso Básico
23
-
24
- ```tsx
25
- <POSTable
26
- tableNumber="12"
27
- status="available"
28
- shape="square"
29
- chairs={4}
30
- onClick={() => console.log('Mesa seleccionada')}
31
- />
32
- ```
33
-
34
- ## Props
35
-
36
- | Prop | Tipo | Default | Descripción |
37
- |------|------|---------|-------------|
38
- | `tableNumber` | `string` | **Requerido** | Número identificador de la mesa |
39
- | `status` | `'available' \| 'busy' \| 'reserved'` | `'available'` | Estado de la mesa |
40
- | `shape` | `'square' \| 'circle' \| 'rectangle' \| 'oval'` | `'square'` | Forma de la mesa |
41
- | `chairs` | `2 \| 4 \| 6 \| 8` | `4` | Número de sillas |
42
- | `showChairs` | `boolean` | `true` | Si muestra las sillas |
43
- | `isActive` | `boolean` | `false` | Estado activo con fondo de color |
44
- | `onClick` | `() => void` | `undefined` | Callback al hacer clic |
45
- | `disabled` | `boolean` | `false` | Si la mesa está deshabilitada |
46
- | `className` | `string` | `''` | Clases CSS adicionales |
47
- | `children` | `ReactNode` | `undefined` | Contenido adicional |
48
-
49
- ## Estados
50
-
51
- ### Available (Disponible)
52
-
53
- Mesa disponible para asignar a clientes.
54
-
55
- ```tsx
56
- <POSTable tableNumber="01" status="available" chairs={4} />
57
- <POSTable tableNumber="01" status="available" chairs={4} isActive />
58
- ```
59
-
60
- **Colores:**
61
- - Light: `#0e79fd` (azul primario)
62
- - Dark: `#93d1fd` (azul claro)
63
- - Active Bg Light: `#dbeefe` + Border `#bce4ff`
64
- - Active Bg Dark: `#1e3a5f`
65
-
66
- ### Busy (Ocupada)
67
-
68
- Mesa actualmente ocupada por clientes.
69
-
70
- ```tsx
71
- <POSTable tableNumber="02" status="busy" chairs={4} />
72
- <POSTable tableNumber="02" status="busy" chairs={4} isActive />
73
- ```
74
-
75
- **Colores:**
76
- - Light: `#af460e` (naranja)
77
- - Dark: `#f5a927` (naranja/amarillo)
78
- - Active Bg Light: `#fed7aa`
79
- - Active Bg Dark: `#5c3a1e`
80
-
81
- ### Reserved (Reservada)
82
-
83
- Mesa reservada para un cliente específico.
84
-
85
- ```tsx
86
- <POSTable tableNumber="03" status="reserved" chairs={4} />
87
- <POSTable tableNumber="03" status="reserved" chairs={4} isActive />
88
- ```
89
-
90
- **Colores:**
91
- - Light: `#7e22ce` (púrpura)
92
- - Dark: `#c084fc` (púrpura claro)
93
- - Active Bg Light: `#e9d5ff`
94
- - Active Bg Dark: `#3b1f5c`
95
-
96
- ## Formas de Mesa
97
-
98
- ### Square (Cuadrada)
99
-
100
- Mesa cuadrada de 64x64px con border-radius de 4px.
101
-
102
- ```tsx
103
- <POSTable tableNumber="04" shape="square" chairs={4} />
104
- ```
105
-
106
- ### Circle (Circular)
107
-
108
- Mesa circular de 64x64px con border-radius completo.
109
-
110
- ```tsx
111
- <POSTable tableNumber="05" shape="circle" chairs={4} />
112
- ```
113
-
114
- ### Rectangle (Rectangular)
115
-
116
- Mesa rectangular de 80x64px con border-radius de 4px.
117
-
118
- ```tsx
119
- <POSTable tableNumber="06" shape="rectangle" chairs={6} />
120
- ```
121
-
122
- ### Oval (Ovalada)
123
-
124
- Mesa ovalada de 80x64px con border-radius de 24px. Corresponde al diseño "Rectangle Circle" de Figma.
125
-
126
- ```tsx
127
- <POSTable tableNumber="07" shape="oval" chairs={8} />
128
- ```
129
-
130
- ## Configuraciones de Sillas
131
-
132
- ### 2 Sillas
133
-
134
- Distribución: 1 arriba, 1 abajo.
135
-
136
- ```tsx
137
- <POSTable tableNumber="08" chairs={2} />
138
- ```
139
-
140
- ### 4 Sillas
141
-
142
- Distribución: 1 arriba, 1 derecha, 1 abajo, 1 izquierda.
143
-
144
- ```tsx
145
- <POSTable tableNumber="09" chairs={4} />
146
- ```
147
-
148
- ### 6 Sillas
149
-
150
- Distribución: 2 arriba, 1 derecha, 2 abajo, 1 izquierda.
151
-
152
- ```tsx
153
- <POSTable tableNumber="10" chairs={6} />
154
- ```
155
-
156
- ### 8 Sillas
157
-
158
- Distribución: 2 arriba, 2 derecha, 2 abajo, 2 izquierda.
159
-
160
- ```tsx
161
- <POSTable tableNumber="11" chairs={8} />
162
- ```
163
-
164
- ## Sin Sillas
165
-
166
- Para layouts compactos, puedes ocultar las sillas:
167
-
168
- ```tsx
169
- <POSTable tableNumber="A1" showChairs={false} />
170
- ```
171
-
172
- ## Interactividad
173
-
174
- ### Con Click
175
-
176
- ```tsx
177
- <POSTable
178
- tableNumber="12"
179
- status="available"
180
- onClick={() => alert('Mesa seleccionada')}
181
- />
182
- ```
183
-
184
- ### Deshabilitada
185
-
186
- ```tsx
187
- <POSTable
188
- tableNumber="13"
189
- status="busy"
190
- disabled
191
- onClick={() => {}} // No se ejecutará
192
- />
193
- ```
194
-
195
- ## Dark Mode
196
-
197
- El componente se adapta automáticamente a dark mode con colores más brillantes para mejor visibilidad:
198
-
199
- ```tsx
200
- // Los colores cambian automáticamente según el tema
201
- <POSTable tableNumber="14" status="available" chairs={4} />
202
- ```
203
-
204
- ## Layout de Restaurante
205
-
206
- Ejemplo de uso en una grilla de mesas:
207
-
208
- ```tsx
209
- <div className="grid grid-cols-3 md:grid-cols-4 gap-4">
210
- <POSTable tableNumber="01" status="available" chairs={4} onClick={() => {}} />
211
- <POSTable tableNumber="02" status="busy" chairs={4} onClick={() => {}} />
212
- <POSTable tableNumber="03" status="reserved" chairs={6} onClick={() => {}} />
213
- <POSTable tableNumber="04" status="available" shape="circle" chairs={4} onClick={() => {}} />
214
- {/* ... más mesas */}
215
- </div>
216
- ```
217
-
218
- ## Especificaciones Técnicas
219
-
220
- ### Dimensiones Pixel-Perfect
221
-
222
- - **Container**: 160x160px, border: 2px, border-radius: 8px
223
- - **Inner container**: 134x134px, gap: 4px
224
- - **Mesa Square/Circle**: 64x64px
225
- - **Mesa Rectangle/Oval**: 80x64px
226
- - **Silla**: 28x22px (respaldo: 16px, asiento: 14px)
227
- - **Gap**: 4px entre todos los elementos
228
-
229
- ### Tipografía
230
-
231
- - **Label**: 10px / 12px line-height
232
- - **Font weight**: 400 (normal)
233
- - **Font family**: SiesaBT
234
-
235
- ### Total de Variantes
236
-
237
- 60 variantes implementadas según diseño de Figma:
238
- - 3 estados × 2 (enabled/actived) = 6
239
- - 4 formas (square, circle, rectangle, oval)
240
- - 4 configuraciones de sillas (2, 4, 6, 8)
241
-
242
- ## Nota Importante sobre Colores
243
-
244
- ⚠️ **COLORES ESPECÍFICOS DEL CLIENTE**: Este componente usa colores personalizados hardcodeados según el diseño del cliente. Estos NO son tokens del sistema de diseño general, sino colores únicos para POSTable. Esta es una EXCEPCIÓN JUSTIFICADA similar a los iconos personalizados de POSTable.
245
-
246
- ## Accesibilidad
247
-
248
- - Etiquetas ARIA descriptivas: `aria-label="Mesa 12 - Disponible"`
249
- - Soporte para navegación con teclado (Tab)
250
- - Focus rings adaptativos según el estado
251
- - Contraste WCAG AA en todos los estados
252
-
253
- ## Ver en Storybook
254
-
255
- Para ver todas las variantes y ejemplos interactivos:
256
-
257
- ```bash
258
- npm run storybook
259
- ```
260
-
261
- Navega a "Siesa UI Kit / POSTable"
262
-
263
- ## Referencias
264
-
265
- - **Figma**: [POS Tables](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4348-24473&m=dev)
266
- - **Componente**: `src/components/POSTable/POSTable.tsx`
267
- - **Stories**: `src/components/POSTable/POSTable.stories.tsx`
268
- - **Types**: `src/components/POSTable/POSTable.types.ts`
269
-
270
- ## Changelog
271
-
272
- ### Versión 1.1.0 (2025-11-28)
273
-
274
- - Corrección de colores según especificaciones exactas de Figma
275
- - Available Light Mode corregido de `#154ca9` a `#0e79fd` (azul primario)
276
- - Available Active Background corregido de `#bce4ff` a `#dbeefe` + Border `#bce4ff`
277
- - Documentación actualizada con colores exactos
278
- - README completo agregado
279
-
280
- ### Versión 1.0.0 (2025-11-24)
281
-
282
- - Implementación inicial pixel-perfect según Figma
283
- - 60 variantes (3 estados × 2 modos × 4 formas × múltiples sillas)
284
- - Dark mode completo
285
- - Focus rings adaptativos
286
- - Interactividad y accesibilidad
1
+ # POSTable - Sistema de Visualización de Mesas de Restaurante
2
+
3
+ Componente para mostrar mesas de restaurante con diferentes estados (disponible, ocupada, reservada) y configuraciones de sillas según diseño pixel-perfect de Figma.
4
+
5
+ ## Características
6
+
7
+ - 3 estados: Available (Disponible), Busy (Ocupada), Reserved (Reservada)
8
+ - 4 formas de mesa: Square (Cuadrada), Circle (Circular), Rectangle (Rectangular), Oval (Ovalada)
9
+ - Soporte para 2, 4, 6 u 8 sillas
10
+ - Estado activo con fondo de color
11
+ - Dark mode completo
12
+ - Focus rings adaptativos por estado
13
+ - Interactividad con onClick
14
+ - Dimensiones pixel-perfect según Figma (160x160px)
15
+
16
+ ## Importación
17
+
18
+ ```tsx
19
+ import { POSTable } from '@/components/POSTable';
20
+ ```
21
+
22
+ ## Uso Básico
23
+
24
+ ```tsx
25
+ <POSTable
26
+ tableNumber="12"
27
+ status="available"
28
+ shape="square"
29
+ chairs={4}
30
+ onClick={() => console.log('Mesa seleccionada')}
31
+ />
32
+ ```
33
+
34
+ ## Props
35
+
36
+ | Prop | Tipo | Default | Descripción |
37
+ |------|------|---------|-------------|
38
+ | `tableNumber` | `string` | **Requerido** | Número identificador de la mesa |
39
+ | `status` | `'available' \| 'busy' \| 'reserved'` | `'available'` | Estado de la mesa |
40
+ | `shape` | `'square' \| 'circle' \| 'rectangle' \| 'oval'` | `'square'` | Forma de la mesa |
41
+ | `chairs` | `2 \| 4 \| 6 \| 8` | `4` | Número de sillas |
42
+ | `showChairs` | `boolean` | `true` | Si muestra las sillas |
43
+ | `isActive` | `boolean` | `false` | Estado activo con fondo de color |
44
+ | `onClick` | `() => void` | `undefined` | Callback al hacer clic |
45
+ | `disabled` | `boolean` | `false` | Si la mesa está deshabilitada |
46
+ | `className` | `string` | `''` | Clases CSS adicionales |
47
+ | `children` | `ReactNode` | `undefined` | Contenido adicional |
48
+
49
+ ## Estados
50
+
51
+ ### Available (Disponible)
52
+
53
+ Mesa disponible para asignar a clientes.
54
+
55
+ ```tsx
56
+ <POSTable tableNumber="01" status="available" chairs={4} />
57
+ <POSTable tableNumber="01" status="available" chairs={4} isActive />
58
+ ```
59
+
60
+ **Colores:**
61
+ - Light: `#0e79fd` (azul primario)
62
+ - Dark: `#93d1fd` (azul claro)
63
+ - Active Bg Light: `#dbeefe` + Border `#bce4ff`
64
+ - Active Bg Dark: `#1e3a5f`
65
+
66
+ ### Busy (Ocupada)
67
+
68
+ Mesa actualmente ocupada por clientes.
69
+
70
+ ```tsx
71
+ <POSTable tableNumber="02" status="busy" chairs={4} />
72
+ <POSTable tableNumber="02" status="busy" chairs={4} isActive />
73
+ ```
74
+
75
+ **Colores:**
76
+ - Light: `#af460e` (naranja)
77
+ - Dark: `#f5a927` (naranja/amarillo)
78
+ - Active Bg Light: `#fed7aa`
79
+ - Active Bg Dark: `#5c3a1e`
80
+
81
+ ### Reserved (Reservada)
82
+
83
+ Mesa reservada para un cliente específico.
84
+
85
+ ```tsx
86
+ <POSTable tableNumber="03" status="reserved" chairs={4} />
87
+ <POSTable tableNumber="03" status="reserved" chairs={4} isActive />
88
+ ```
89
+
90
+ **Colores:**
91
+ - Light: `#7e22ce` (púrpura)
92
+ - Dark: `#c084fc` (púrpura claro)
93
+ - Active Bg Light: `#e9d5ff`
94
+ - Active Bg Dark: `#3b1f5c`
95
+
96
+ ## Formas de Mesa
97
+
98
+ ### Square (Cuadrada)
99
+
100
+ Mesa cuadrada de 64x64px con border-radius de 4px.
101
+
102
+ ```tsx
103
+ <POSTable tableNumber="04" shape="square" chairs={4} />
104
+ ```
105
+
106
+ ### Circle (Circular)
107
+
108
+ Mesa circular de 64x64px con border-radius completo.
109
+
110
+ ```tsx
111
+ <POSTable tableNumber="05" shape="circle" chairs={4} />
112
+ ```
113
+
114
+ ### Rectangle (Rectangular)
115
+
116
+ Mesa rectangular de 80x64px con border-radius de 4px.
117
+
118
+ ```tsx
119
+ <POSTable tableNumber="06" shape="rectangle" chairs={6} />
120
+ ```
121
+
122
+ ### Oval (Ovalada)
123
+
124
+ Mesa ovalada de 80x64px con border-radius de 24px. Corresponde al diseño "Rectangle Circle" de Figma.
125
+
126
+ ```tsx
127
+ <POSTable tableNumber="07" shape="oval" chairs={8} />
128
+ ```
129
+
130
+ ## Configuraciones de Sillas
131
+
132
+ ### 2 Sillas
133
+
134
+ Distribución: 1 arriba, 1 abajo.
135
+
136
+ ```tsx
137
+ <POSTable tableNumber="08" chairs={2} />
138
+ ```
139
+
140
+ ### 4 Sillas
141
+
142
+ Distribución: 1 arriba, 1 derecha, 1 abajo, 1 izquierda.
143
+
144
+ ```tsx
145
+ <POSTable tableNumber="09" chairs={4} />
146
+ ```
147
+
148
+ ### 6 Sillas
149
+
150
+ Distribución: 2 arriba, 1 derecha, 2 abajo, 1 izquierda.
151
+
152
+ ```tsx
153
+ <POSTable tableNumber="10" chairs={6} />
154
+ ```
155
+
156
+ ### 8 Sillas
157
+
158
+ Distribución: 2 arriba, 2 derecha, 2 abajo, 2 izquierda.
159
+
160
+ ```tsx
161
+ <POSTable tableNumber="11" chairs={8} />
162
+ ```
163
+
164
+ ## Sin Sillas
165
+
166
+ Para layouts compactos, puedes ocultar las sillas:
167
+
168
+ ```tsx
169
+ <POSTable tableNumber="A1" showChairs={false} />
170
+ ```
171
+
172
+ ## Interactividad
173
+
174
+ ### Con Click
175
+
176
+ ```tsx
177
+ <POSTable
178
+ tableNumber="12"
179
+ status="available"
180
+ onClick={() => alert('Mesa seleccionada')}
181
+ />
182
+ ```
183
+
184
+ ### Deshabilitada
185
+
186
+ ```tsx
187
+ <POSTable
188
+ tableNumber="13"
189
+ status="busy"
190
+ disabled
191
+ onClick={() => {}} // No se ejecutará
192
+ />
193
+ ```
194
+
195
+ ## Dark Mode
196
+
197
+ El componente se adapta automáticamente a dark mode con colores más brillantes para mejor visibilidad:
198
+
199
+ ```tsx
200
+ // Los colores cambian automáticamente según el tema
201
+ <POSTable tableNumber="14" status="available" chairs={4} />
202
+ ```
203
+
204
+ ## Layout de Restaurante
205
+
206
+ Ejemplo de uso en una grilla de mesas:
207
+
208
+ ```tsx
209
+ <div className="grid grid-cols-3 md:grid-cols-4 gap-4">
210
+ <POSTable tableNumber="01" status="available" chairs={4} onClick={() => {}} />
211
+ <POSTable tableNumber="02" status="busy" chairs={4} onClick={() => {}} />
212
+ <POSTable tableNumber="03" status="reserved" chairs={6} onClick={() => {}} />
213
+ <POSTable tableNumber="04" status="available" shape="circle" chairs={4} onClick={() => {}} />
214
+ {/* ... más mesas */}
215
+ </div>
216
+ ```
217
+
218
+ ## Especificaciones Técnicas
219
+
220
+ ### Dimensiones Pixel-Perfect
221
+
222
+ - **Container**: 160x160px, border: 2px, border-radius: 8px
223
+ - **Inner container**: 134x134px, gap: 4px
224
+ - **Mesa Square/Circle**: 64x64px
225
+ - **Mesa Rectangle/Oval**: 80x64px
226
+ - **Silla**: 28x22px (respaldo: 16px, asiento: 14px)
227
+ - **Gap**: 4px entre todos los elementos
228
+
229
+ ### Tipografía
230
+
231
+ - **Label**: 10px / 12px line-height
232
+ - **Font weight**: 400 (normal)
233
+ - **Font family**: SiesaBT
234
+
235
+ ### Total de Variantes
236
+
237
+ 60 variantes implementadas según diseño de Figma:
238
+ - 3 estados × 2 (enabled/actived) = 6
239
+ - 4 formas (square, circle, rectangle, oval)
240
+ - 4 configuraciones de sillas (2, 4, 6, 8)
241
+
242
+ ## Nota Importante sobre Colores
243
+
244
+ ⚠️ **COLORES ESPECÍFICOS DEL CLIENTE**: Este componente usa colores personalizados hardcodeados según el diseño del cliente. Estos NO son tokens del sistema de diseño general, sino colores únicos para POSTable. Esta es una EXCEPCIÓN JUSTIFICADA similar a los iconos personalizados de POSTable.
245
+
246
+ ## Accesibilidad
247
+
248
+ - Etiquetas ARIA descriptivas: `aria-label="Mesa 12 - Disponible"`
249
+ - Soporte para navegación con teclado (Tab)
250
+ - Focus rings adaptativos según el estado
251
+ - Contraste WCAG AA en todos los estados
252
+
253
+ ## Ver en Storybook
254
+
255
+ Para ver todas las variantes y ejemplos interactivos:
256
+
257
+ ```bash
258
+ npm run storybook
259
+ ```
260
+
261
+ Navega a "Siesa UI Kit / POSTable"
262
+
263
+ ## Referencias
264
+
265
+ - **Figma**: [POS Tables](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4348-24473&m=dev)
266
+ - **Componente**: `src/components/POSTable/POSTable.tsx`
267
+ - **Stories**: `src/components/POSTable/POSTable.stories.tsx`
268
+ - **Types**: `src/components/POSTable/POSTable.types.ts`
269
+
270
+ ## Changelog
271
+
272
+ ### Versión 1.1.0 (2025-11-28)
273
+
274
+ - Corrección de colores según especificaciones exactas de Figma
275
+ - Available Light Mode corregido de `#154ca9` a `#0e79fd` (azul primario)
276
+ - Available Active Background corregido de `#bce4ff` a `#dbeefe` + Border `#bce4ff`
277
+ - Documentación actualizada con colores exactos
278
+ - README completo agregado
279
+
280
+ ### Versión 1.0.0 (2025-11-24)
281
+
282
+ - Implementación inicial pixel-perfect según Figma
283
+ - 60 variantes (3 estados × 2 modos × 4 formas × múltiples sillas)
284
+ - Dark mode completo
285
+ - Focus rings adaptativos
286
+ - Interactividad y accesibilidad