siesa-ui-kit 1.0.5 → 1.0.6

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 (198) hide show
  1. package/dist/index.cjs +1479 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.js +1479 -0
  4. package/dist/index.js.map +1 -0
  5. package/package.json +23 -14
  6. package/claude/agents/siesa-ui-kit-specialist.md +0 -2401
  7. package/claude/prompts/component-template.md +0 -121
  8. package/claude/settings.local.json +0 -61
  9. package/docs/border-radius.md +0 -1261
  10. package/docs/colors.md +0 -832
  11. package/docs/dark-mode-guide.md +0 -1426
  12. package/docs/filters.md +0 -1243
  13. package/docs/icons.md +0 -1283
  14. package/docs/shadows.md +0 -1377
  15. package/docs/spacing.md +0 -1684
  16. package/docs/typography.md +0 -1268
  17. package/postcss.config.cjs +0 -6
  18. package/src/App.css +0 -42
  19. package/src/App.tsx +0 -8
  20. package/src/ButtonTest.tsx +0 -147
  21. package/src/assets/fonts/README.md +0 -261
  22. package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
  23. package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
  24. package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
  25. package/src/assets/react.svg +0 -1
  26. package/src/components/Alert/Alert.stories.tsx +0 -332
  27. package/src/components/Alert/Alert.tsx +0 -106
  28. package/src/components/Alert/Alert.types.ts +0 -54
  29. package/src/components/Avatar/Avatar.stories.tsx +0 -494
  30. package/src/components/Avatar/Avatar.tsx +0 -143
  31. package/src/components/Avatar/Avatar.types.ts +0 -53
  32. package/src/components/Badge/Badge.stories.tsx +0 -339
  33. package/src/components/Badge/Badge.tsx +0 -278
  34. package/src/components/Badge/Badge.types.ts +0 -58
  35. package/src/components/Button/Button.stories.tsx +0 -950
  36. package/src/components/Button/Button.tsx +0 -337
  37. package/src/components/Button/Button.types.ts +0 -180
  38. package/src/components/Button/icons.tsx +0 -87
  39. package/src/components/Button/index.ts +0 -3
  40. package/src/components/Checkbox/Checkbox.stories.tsx +0 -453
  41. package/src/components/Checkbox/Checkbox.tsx +0 -208
  42. package/src/components/Checkbox/Checkbox.types.ts +0 -61
  43. package/src/components/DescriptionList/DescriptionList.stories.tsx +0 -250
  44. package/src/components/DescriptionList/DescriptionList.tsx +0 -96
  45. package/src/components/DescriptionList/DescriptionList.types.ts +0 -29
  46. package/src/components/Divider/Divider.stories.tsx +0 -263
  47. package/src/components/Divider/Divider.tsx +0 -80
  48. package/src/components/Divider/Divider.types.ts +0 -24
  49. package/src/components/Dropdown/Dropdown.stories.tsx +0 -552
  50. package/src/components/Dropdown/Dropdown.tsx +0 -422
  51. package/src/components/Dropdown/Dropdown.types.ts +0 -146
  52. package/src/components/Dropdown/README.md +0 -266
  53. package/src/components/Dropdown/icons.tsx +0 -72
  54. package/src/components/Dropdown/index.ts +0 -8
  55. package/src/components/Input/Input.stories.tsx +0 -583
  56. package/src/components/Input/Input.tsx +0 -204
  57. package/src/components/Input/Input.types.ts +0 -80
  58. package/src/components/Input/icons.tsx +0 -145
  59. package/src/components/Input/index.ts +0 -2
  60. package/src/components/LoginView/LoginView.stories.tsx +0 -148
  61. package/src/components/LoginView/LoginView.tsx +0 -426
  62. package/src/components/LoginView/LoginView.types.ts +0 -52
  63. package/src/components/LoginView/README.md +0 -396
  64. package/src/components/LoginView/icons.tsx +0 -85
  65. package/src/components/LoginView/index.ts +0 -3
  66. package/src/components/Navbar/Navbar.stories.tsx +0 -810
  67. package/src/components/Navbar/Navbar.tsx +0 -755
  68. package/src/components/Navbar/Navbar.types.ts +0 -219
  69. package/src/components/Navbar/README.md +0 -279
  70. package/src/components/Navbar/icons.tsx +0 -102
  71. package/src/components/Navbar/index.ts +0 -8
  72. package/src/components/NavigationBar/NavigationBar.stories.tsx +0 -406
  73. package/src/components/NavigationBar/NavigationBar.tsx +0 -246
  74. package/src/components/NavigationBar/NavigationBar.types.ts +0 -74
  75. package/src/components/NavigationBar/README.md +0 -469
  76. package/src/components/NavigationBar/index.ts +0 -2
  77. package/src/components/NavigationRail/NavigationRail.stories.tsx +0 -417
  78. package/src/components/NavigationRail/NavigationRail.tsx +0 -418
  79. package/src/components/NavigationRail/NavigationRail.types.ts +0 -109
  80. package/src/components/NavigationRail/README.md +0 -224
  81. package/src/components/NavigationRail/index.ts +0 -2
  82. package/src/components/Notification/Notification.stories.tsx +0 -513
  83. package/src/components/Notification/Notification.tsx +0 -145
  84. package/src/components/Notification/Notification.types.ts +0 -142
  85. package/src/components/Notification/README.md +0 -409
  86. package/src/components/Notification/index.ts +0 -3
  87. package/src/components/POSConvention/POSConvention.stories.tsx +0 -235
  88. package/src/components/POSConvention/POSConvention.tsx +0 -129
  89. package/src/components/POSConvention/POSConvention.types.ts +0 -38
  90. package/src/components/POSConvention/README.md +0 -123
  91. package/src/components/POSConvention/icons.tsx +0 -45
  92. package/src/components/POSConvention/index.ts +0 -3
  93. package/src/components/POSLocationButton/POSLocationButton.stories.tsx +0 -531
  94. package/src/components/POSLocationButton/POSLocationButton.tsx +0 -247
  95. package/src/components/POSLocationButton/POSLocationButton.types.ts +0 -87
  96. package/src/components/POSLocationButton/README.md +0 -253
  97. package/src/components/POSLocationButton/icons.tsx +0 -120
  98. package/src/components/POSLocationButton/index.ts +0 -14
  99. package/src/components/POSNumberButton/POSNumberButton.stories.tsx +0 -415
  100. package/src/components/POSNumberButton/POSNumberButton.tsx +0 -179
  101. package/src/components/POSNumberButton/POSNumberButton.types.ts +0 -51
  102. package/src/components/POSNumberButton/README.md +0 -321
  103. package/src/components/POSNumberButton/index.ts +0 -3
  104. package/src/components/POSProductButton/POSProductButton.stories.tsx +0 -318
  105. package/src/components/POSProductButton/POSProductButton.tsx +0 -152
  106. package/src/components/POSProductButton/POSProductButton.types.ts +0 -46
  107. package/src/components/POSProductButton/README.md +0 -269
  108. package/src/components/POSProductButton/index.ts +0 -2
  109. package/src/components/POSProductCard/POSProductCard.stories.tsx +0 -642
  110. package/src/components/POSProductCard/POSProductCard.tsx +0 -208
  111. package/src/components/POSProductCard/POSProductCard.types.ts +0 -76
  112. package/src/components/POSProductCard/README.md +0 -179
  113. package/src/components/POSProductCard/icons.tsx +0 -26
  114. package/src/components/POSProductCard/index.ts +0 -2
  115. package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +0 -753
  116. package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +0 -332
  117. package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +0 -119
  118. package/src/components/POSProductSidebarItems/README.md +0 -198
  119. package/src/components/POSProductSidebarItems/icons.tsx +0 -21
  120. package/src/components/POSProductSidebarItems/index.ts +0 -3
  121. package/src/components/POSTable/POSTable.stories.tsx +0 -737
  122. package/src/components/POSTable/POSTable.tsx +0 -401
  123. package/src/components/POSTable/POSTable.types.ts +0 -83
  124. package/src/components/POSTable/README.md +0 -286
  125. package/src/components/POSTable/index.ts +0 -7
  126. package/src/components/Pagination/Pagination.stories.tsx +0 -555
  127. package/src/components/Pagination/Pagination.tsx +0 -286
  128. package/src/components/Pagination/Pagination.types.ts +0 -93
  129. package/src/components/Pagination/README.md +0 -298
  130. package/src/components/Pagination/icons.tsx +0 -47
  131. package/src/components/Pagination/index.ts +0 -3
  132. package/src/components/Quantity/Quantity.stories.tsx +0 -457
  133. package/src/components/Quantity/Quantity.tsx +0 -289
  134. package/src/components/Quantity/Quantity.types.ts +0 -70
  135. package/src/components/Radio/Radio.stories.tsx +0 -523
  136. package/src/components/Radio/Radio.tsx +0 -170
  137. package/src/components/Radio/Radio.types.ts +0 -122
  138. package/src/components/Select/README.md +0 -299
  139. package/src/components/Select/Select.stories.tsx +0 -673
  140. package/src/components/Select/Select.tsx +0 -454
  141. package/src/components/Select/Select.types.ts +0 -148
  142. package/src/components/Select/icons.tsx +0 -50
  143. package/src/components/Select/index.ts +0 -3
  144. package/src/components/SignUpView/SignUpView.stories.tsx +0 -129
  145. package/src/components/SignUpView/SignUpView.tsx +0 -503
  146. package/src/components/SignUpView/SignUpView.types.ts +0 -58
  147. package/src/components/SignUpView/icons.tsx +0 -71
  148. package/src/components/SignUpView/index.ts +0 -3
  149. package/src/components/Switch/README.md +0 -112
  150. package/src/components/Switch/Switch.stories.tsx +0 -550
  151. package/src/components/Switch/Switch.tsx +0 -246
  152. package/src/components/Switch/Switch.types.ts +0 -67
  153. package/src/components/Table/README.md +0 -369
  154. package/src/components/Table/Table.stories.tsx +0 -805
  155. package/src/components/Table/Table.tsx +0 -688
  156. package/src/components/Table/Table.types.ts +0 -204
  157. package/src/components/Table/index.ts +0 -9
  158. package/src/components/Tabs/README.md +0 -201
  159. package/src/components/Tabs/Tabs.stories.tsx +0 -580
  160. package/src/components/Tabs/Tabs.tsx +0 -356
  161. package/src/components/Tabs/Tabs.types.ts +0 -127
  162. package/src/components/Tabs/icons.tsx +0 -129
  163. package/src/components/Tabs/index.ts +0 -11
  164. package/src/components/Textarea/Textarea.stories.tsx +0 -535
  165. package/src/components/Textarea/Textarea.tsx +0 -188
  166. package/src/components/Textarea/Textarea.types.ts +0 -54
  167. package/src/context/ThemeContext.tsx +0 -99
  168. package/src/context/index.ts +0 -1
  169. package/src/index.css +0 -29
  170. package/src/index.ts +0 -39
  171. package/src/main.tsx +0 -10
  172. package/src/views/ProductsView/ProductsView.stories.tsx +0 -344
  173. package/src/views/ProductsView/ProductsView.tsx +0 -480
  174. package/src/views/ProductsView/ProductsView.types.ts +0 -238
  175. package/src/views/ProductsView/README.md +0 -312
  176. package/src/views/ProductsView/icons.tsx +0 -38
  177. package/src/views/ProductsView/index.ts +0 -8
  178. package/src/views/RecoverPasswordView/README.md +0 -269
  179. package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +0 -131
  180. package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +0 -376
  181. package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +0 -56
  182. package/src/views/RecoverPasswordView/icons.tsx +0 -17
  183. package/src/views/RecoverPasswordView/index.ts +0 -2
  184. package/src/views/TableLayoutView/README.md +0 -268
  185. package/src/views/TableLayoutView/TableLayoutView.stories.tsx +0 -235
  186. package/src/views/TableLayoutView/TableLayoutView.tsx +0 -461
  187. package/src/views/TableLayoutView/TableLayoutView.types.ts +0 -209
  188. package/src/views/TableLayoutView/icons.tsx +0 -113
  189. package/src/views/TableLayoutView/index.ts +0 -6
  190. package/storybook/main.ts +0 -20
  191. package/storybook/preview.tsx +0 -84
  192. package/storybook/vitest.setup.ts +0 -7
  193. package/tailwind.config.js +0 -128
  194. /package/{public → dist}/,Business Logo.png +0 -0
  195. /package/{public → dist}/.Siesa Logo.png +0 -0
  196. /package/{public → dist}/bg_siesa.png +0 -0
  197. /package/{public → dist}/siesa_logo_mobile.png +0 -0
  198. /package/{public → dist}/vite.svg +0 -0
@@ -1,737 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { POSTable } from './POSTable';
3
-
4
- const meta = {
5
- title: 'Siesa UI Kit/POSTable',
6
- component: POSTable,
7
- parameters: {
8
- layout: 'centered',
9
- docs: {
10
- description: {
11
- component:
12
- 'Sistema de visualización de mesas de restaurante para aplicaciones POS con diferentes estados (disponible, ocupada, reservada) y configuraciones de sillas. Implementación pixel-perfect según especificaciones de Figma.',
13
- },
14
- },
15
- },
16
- tags: ['autodocs'],
17
- argTypes: {
18
- tableNumber: {
19
- control: 'text',
20
- description: 'Número de la mesa',
21
- table: {
22
- type: { summary: 'string' },
23
- category: 'Contenido',
24
- },
25
- },
26
- status: {
27
- control: 'select',
28
- options: ['available', 'busy', 'reserved'],
29
- description: 'Estado de la mesa',
30
- table: {
31
- type: { summary: 'string' },
32
- category: 'Estado',
33
- },
34
- },
35
- shape: {
36
- control: 'select',
37
- options: ['square', 'circle', 'rectangle', 'oval'],
38
- description: 'Forma de la mesa (square: 64x64px, circle: 64x64px, rectangle: 80x64px, oval: 80x64px)',
39
- table: {
40
- type: { summary: 'string' },
41
- category: 'Apariencia',
42
- },
43
- },
44
- chairs: {
45
- control: 'select',
46
- options: [2, 4, 6, 8],
47
- description: 'Número de sillas',
48
- table: {
49
- type: { summary: 'number' },
50
- category: 'Apariencia',
51
- },
52
- },
53
- showChairs: {
54
- control: 'boolean',
55
- description: 'Si muestra las sillas',
56
- table: {
57
- type: { summary: 'boolean' },
58
- category: 'Apariencia',
59
- },
60
- },
61
- isActive: {
62
- control: 'boolean',
63
- description: 'Estado activo (con fondo de color según Figma)',
64
- table: {
65
- type: { summary: 'boolean' },
66
- category: 'Estado',
67
- },
68
- },
69
- disabled: {
70
- control: 'boolean',
71
- description: 'Si la mesa está deshabilitada',
72
- table: {
73
- type: { summary: 'boolean' },
74
- category: 'Estado',
75
- },
76
- },
77
- },
78
- } satisfies Meta<typeof POSTable>;
79
-
80
- export default meta;
81
- type Story = StoryObj<typeof meta>;
82
-
83
- // ============================================
84
- // 1. PLAYGROUND INTERACTIVO
85
- // ============================================
86
- export const Playground: Story = {
87
- args: {
88
- tableNumber: '12',
89
- status: 'available',
90
- shape: 'square',
91
- chairs: 4,
92
- showChairs: true,
93
- isActive: false,
94
- disabled: false,
95
- },
96
- };
97
-
98
- // ============================================
99
- // 2. TODOS LOS ESTADOS
100
- // ============================================
101
- export const TodosLosEstados: Story = {
102
- args: { tableNumber: '01' },
103
- render: () => (
104
- <div className="space-y-8 p-6">
105
- {/* Disponible */}
106
- <div>
107
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
108
- Disponible (Available)
109
- </h3>
110
- <div className="flex flex-wrap gap-6">
111
- <POSTable tableNumber="01" status="available" chairs={4} />
112
- <POSTable tableNumber="01" status="available" chairs={4} isActive />
113
- </div>
114
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
115
- Mesa disponible para asignar a clientes. Izquierda: Enabled, Derecha: Actived
116
- </p>
117
- </div>
118
-
119
- {/* Ocupada */}
120
- <div>
121
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
122
- Ocupada (Busy)
123
- </h3>
124
- <div className="flex flex-wrap gap-6">
125
- <POSTable tableNumber="02" status="busy" chairs={4} />
126
- <POSTable tableNumber="02" status="busy" chairs={4} isActive />
127
- </div>
128
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
129
- Mesa actualmente ocupada por clientes. Izquierda: Enabled, Derecha: Actived
130
- </p>
131
- </div>
132
-
133
- {/* Reservada */}
134
- <div>
135
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
136
- Reservada (Reserved)
137
- </h3>
138
- <div className="flex flex-wrap gap-6">
139
- <POSTable tableNumber="03" status="reserved" chairs={4} />
140
- <POSTable tableNumber="03" status="reserved" chairs={4} isActive />
141
- </div>
142
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
143
- Mesa reservada para un cliente específico. Izquierda: Enabled, Derecha: Actived
144
- </p>
145
- </div>
146
-
147
- {/* Tips */}
148
- <div className="mt-6 p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg">
149
- <p className="text-xs text-gray-600 dark:text-gray-300">
150
- <strong>💡 Consejos:</strong>
151
- <br />• Azul = Disponible (Light: #0e79fd, Dark: #93d1fd)
152
- <br />• Naranja = Ocupada (Light: #af460e, Dark: #f5a927)
153
- <br />• Púrpura = Reservada (Light: #7e22ce, Dark: #c084fc)
154
- <br />• Estado Actived: Bg #dbeefe + Border #bce4ff (Available), Bg #fed7aa (Busy), Bg #e9d5ff (Reserved)
155
- <br />• Texto del label: Debajo del conjunto mesa+sillas (mismo color del estado)
156
- <br />• Focus rings adaptativos según el estado
157
- <br />
158
- <br />⚠️ <strong>Nota de diseño:</strong> Los colores de POSTable son específicos del cliente y NO usan los tokens del sistema general.
159
- </p>
160
- </div>
161
- </div>
162
- ),
163
- };
164
-
165
- // ============================================
166
- // 3. TODAS LAS FORMAS
167
- // ============================================
168
- export const TodasLasFormas: Story = {
169
- args: { tableNumber: '01' },
170
- render: () => (
171
- <div className="space-y-8 p-6">
172
- <div>
173
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
174
- Cuadrada (Square) - 64x64px, border-radius: 4px
175
- </h3>
176
- <div className="flex flex-wrap gap-6">
177
- <POSTable tableNumber="04" status="available" shape="square" chairs={4} />
178
- <POSTable tableNumber="04" status="available" shape="square" chairs={4} isActive />
179
- </div>
180
- </div>
181
-
182
- <div>
183
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
184
- Circular (Circle) - 64x64px, border-radius: full
185
- </h3>
186
- <div className="flex flex-wrap gap-6">
187
- <POSTable tableNumber="05" status="busy" shape="circle" chairs={4} />
188
- <POSTable tableNumber="05" status="busy" shape="circle" chairs={4} isActive />
189
- </div>
190
- </div>
191
-
192
- <div>
193
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
194
- Rectangular (Rectangle) - 80x64px, border-radius: 4px
195
- </h3>
196
- <div className="flex flex-wrap gap-6">
197
- <POSTable tableNumber="06" status="reserved" shape="rectangle" chairs={6} />
198
- <POSTable tableNumber="06" status="reserved" shape="rectangle" chairs={6} isActive />
199
- </div>
200
- </div>
201
-
202
- <div>
203
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
204
- Ovalada (Oval) - 80x64px, border-radius: 24px
205
- </h3>
206
- <div className="flex flex-wrap gap-6">
207
- <POSTable tableNumber="07" status="available" shape="oval" chairs={8} />
208
- <POSTable tableNumber="07" status="available" shape="oval" chairs={8} isActive />
209
- </div>
210
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
211
- Forma ovalada según diseño "Rectangle Circle" de Figma
212
- </p>
213
- </div>
214
- </div>
215
- ),
216
- };
217
-
218
- // ============================================
219
- // 4. DIFERENTES CONFIGURACIONES DE SILLAS
220
- // ============================================
221
- export const ConfiguracionesDeSillas: Story = {
222
- args: { tableNumber: '01' },
223
- render: () => (
224
- <div className="grid grid-cols-2 md:grid-cols-4 gap-12 p-6">
225
- <div className="flex flex-col items-center">
226
- <POSTable tableNumber="2" status="available" chairs={2} />
227
- <p className="text-xs text-gray-600 dark:text-gray-300 mt-2">2 sillas</p>
228
- <p className="text-xs text-gray-500 dark:text-gray-400 mt-1">Top, Bottom</p>
229
- </div>
230
-
231
- <div className="flex flex-col items-center">
232
- <POSTable tableNumber="4" status="available" chairs={4} />
233
- <p className="text-xs text-gray-600 dark:text-gray-300 mt-2">4 sillas</p>
234
- <p className="text-xs text-gray-500 dark:text-gray-400 mt-1">Top, Right, Bottom, Left</p>
235
- </div>
236
-
237
- <div className="flex flex-col items-center">
238
- <POSTable tableNumber="6" status="available" chairs={6} />
239
- <p className="text-xs text-gray-600 dark:text-gray-300 mt-2">6 sillas</p>
240
- <p className="text-xs text-gray-500 dark:text-gray-400 mt-1">Top(2), Right, Bottom(2), Left</p>
241
- </div>
242
-
243
- <div className="flex flex-col items-center">
244
- <POSTable tableNumber="8" status="available" chairs={8} />
245
- <p className="text-xs text-gray-600 dark:text-gray-300 mt-2">8 sillas</p>
246
- <p className="text-xs text-gray-500 dark:text-gray-400 mt-1">Top(2), Right(2), Bottom(2), Left(2)</p>
247
- </div>
248
- </div>
249
- ),
250
- };
251
-
252
- // ============================================
253
- // 5. MATRIZ COMPLETA DE FIGMA
254
- // ============================================
255
- export const MatrizCompletaDeFigma: Story = {
256
- args: { tableNumber: '01' },
257
- render: () => (
258
- <div className="p-6 space-y-8">
259
- <div>
260
- <h3 className="text-lg font-bold mb-6 text-gray-700 dark:text-white">
261
- Matriz Completa - Todas las Variantes de Figma
262
- </h3>
263
- <p className="text-sm text-gray-600 dark:text-gray-300 mb-6">
264
- Replicación pixel-perfect de las 60 variantes identificadas en el diseño de Figma.
265
- Cada fila muestra: Enabled (izquierda) y Actived (derecha).
266
- </p>
267
- </div>
268
-
269
- {/* SQUARE - 8 SILLAS */}
270
- <div>
271
- <h4 className="text-md font-bold mb-4 text-gray-700 dark:text-white">
272
- Square - 8 Sillas
273
- </h4>
274
- <div className="grid grid-cols-2 gap-8">
275
- {/* Available */}
276
- <div className="space-y-2">
277
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Available</p>
278
- <div className="flex gap-4">
279
- <POSTable tableNumber="01" status="available" shape="square" chairs={8} />
280
- <POSTable tableNumber="01" status="available" shape="square" chairs={8} isActive />
281
- </div>
282
- </div>
283
-
284
- {/* Busy */}
285
- <div className="space-y-2">
286
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Busy</p>
287
- <div className="flex gap-4">
288
- <POSTable tableNumber="01" status="busy" shape="square" chairs={8} />
289
- <POSTable tableNumber="01" status="busy" shape="square" chairs={8} isActive />
290
- </div>
291
- </div>
292
-
293
- {/* Reserved */}
294
- <div className="space-y-2">
295
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Reserved</p>
296
- <div className="flex gap-4">
297
- <POSTable tableNumber="01" status="reserved" shape="square" chairs={8} />
298
- <POSTable tableNumber="01" status="reserved" shape="square" chairs={8} isActive />
299
- </div>
300
- </div>
301
- </div>
302
- </div>
303
-
304
- {/* SQUARE - 6 SILLAS */}
305
- <div>
306
- <h4 className="text-md font-bold mb-4 text-gray-700 dark:text-white">
307
- Square - 6 Sillas
308
- </h4>
309
- <div className="grid grid-cols-2 gap-8">
310
- <div className="space-y-2">
311
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Available</p>
312
- <div className="flex gap-4">
313
- <POSTable tableNumber="01" status="available" shape="square" chairs={6} />
314
- <POSTable tableNumber="01" status="available" shape="square" chairs={6} isActive />
315
- </div>
316
- </div>
317
-
318
- <div className="space-y-2">
319
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Busy</p>
320
- <div className="flex gap-4">
321
- <POSTable tableNumber="01" status="busy" shape="square" chairs={6} />
322
- <POSTable tableNumber="01" status="busy" shape="square" chairs={6} isActive />
323
- </div>
324
- </div>
325
-
326
- <div className="space-y-2">
327
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Reserved</p>
328
- <div className="flex gap-4">
329
- <POSTable tableNumber="01" status="reserved" shape="square" chairs={6} />
330
- <POSTable tableNumber="01" status="reserved" shape="square" chairs={6} isActive />
331
- </div>
332
- </div>
333
- </div>
334
- </div>
335
-
336
- {/* SQUARE - 4 SILLAS */}
337
- <div>
338
- <h4 className="text-md font-bold mb-4 text-gray-700 dark:text-white">
339
- Square - 4 Sillas
340
- </h4>
341
- <div className="grid grid-cols-2 gap-8">
342
- <div className="space-y-2">
343
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Available</p>
344
- <div className="flex gap-4">
345
- <POSTable tableNumber="01" status="available" shape="square" chairs={4} />
346
- <POSTable tableNumber="01" status="available" shape="square" chairs={4} isActive />
347
- </div>
348
- </div>
349
-
350
- <div className="space-y-2">
351
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Busy</p>
352
- <div className="flex gap-4">
353
- <POSTable tableNumber="01" status="busy" shape="square" chairs={4} />
354
- <POSTable tableNumber="01" status="busy" shape="square" chairs={4} isActive />
355
- </div>
356
- </div>
357
-
358
- <div className="space-y-2">
359
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Reserved</p>
360
- <div className="flex gap-4">
361
- <POSTable tableNumber="01" status="reserved" shape="square" chairs={4} />
362
- <POSTable tableNumber="01" status="reserved" shape="square" chairs={4} isActive />
363
- </div>
364
- </div>
365
- </div>
366
- </div>
367
-
368
- {/* SQUARE - 2 SILLAS */}
369
- <div>
370
- <h4 className="text-md font-bold mb-4 text-gray-700 dark:text-white">
371
- Square - 2 Sillas
372
- </h4>
373
- <div className="grid grid-cols-2 gap-8">
374
- <div className="space-y-2">
375
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Available</p>
376
- <div className="flex gap-4">
377
- <POSTable tableNumber="01" status="available" shape="square" chairs={2} />
378
- <POSTable tableNumber="01" status="available" shape="square" chairs={2} isActive />
379
- </div>
380
- </div>
381
-
382
- <div className="space-y-2">
383
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Busy</p>
384
- <div className="flex gap-4">
385
- <POSTable tableNumber="01" status="busy" shape="square" chairs={2} />
386
- <POSTable tableNumber="01" status="busy" shape="square" chairs={2} isActive />
387
- </div>
388
- </div>
389
-
390
- <div className="space-y-2">
391
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Reserved</p>
392
- <div className="flex gap-4">
393
- <POSTable tableNumber="01" status="reserved" shape="square" chairs={2} />
394
- <POSTable tableNumber="01" status="reserved" shape="square" chairs={2} isActive />
395
- </div>
396
- </div>
397
- </div>
398
- </div>
399
-
400
- {/* RECTANGLE - 8 SILLAS */}
401
- <div>
402
- <h4 className="text-md font-bold mb-4 text-gray-700 dark:text-white">
403
- Rectangle - 8 Sillas
404
- </h4>
405
- <div className="grid grid-cols-2 gap-8">
406
- <div className="space-y-2">
407
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Available</p>
408
- <div className="flex gap-4">
409
- <POSTable tableNumber="01" status="available" shape="rectangle" chairs={8} />
410
- <POSTable tableNumber="01" status="available" shape="rectangle" chairs={8} isActive />
411
- </div>
412
- </div>
413
-
414
- <div className="space-y-2">
415
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Busy</p>
416
- <div className="flex gap-4">
417
- <POSTable tableNumber="01" status="busy" shape="rectangle" chairs={8} />
418
- <POSTable tableNumber="01" status="busy" shape="rectangle" chairs={8} isActive />
419
- </div>
420
- </div>
421
-
422
- <div className="space-y-2">
423
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Reserved</p>
424
- <div className="flex gap-4">
425
- <POSTable tableNumber="01" status="reserved" shape="rectangle" chairs={8} />
426
- <POSTable tableNumber="01" status="reserved" shape="rectangle" chairs={8} isActive />
427
- </div>
428
- </div>
429
- </div>
430
- </div>
431
-
432
- {/* RECTANGLE - 6 SILLAS */}
433
- <div>
434
- <h4 className="text-md font-bold mb-4 text-gray-700 dark:text-white">
435
- Rectangle - 6 Sillas
436
- </h4>
437
- <div className="grid grid-cols-2 gap-8">
438
- <div className="space-y-2">
439
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Available</p>
440
- <div className="flex gap-4">
441
- <POSTable tableNumber="01" status="available" shape="rectangle" chairs={6} />
442
- <POSTable tableNumber="01" status="available" shape="rectangle" chairs={6} isActive />
443
- </div>
444
- </div>
445
-
446
- <div className="space-y-2">
447
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Busy</p>
448
- <div className="flex gap-4">
449
- <POSTable tableNumber="01" status="busy" shape="rectangle" chairs={6} />
450
- <POSTable tableNumber="01" status="busy" shape="rectangle" chairs={6} isActive />
451
- </div>
452
- </div>
453
-
454
- <div className="space-y-2">
455
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Reserved</p>
456
- <div className="flex gap-4">
457
- <POSTable tableNumber="01" status="reserved" shape="rectangle" chairs={6} />
458
- <POSTable tableNumber="01" status="reserved" shape="rectangle" chairs={6} isActive />
459
- </div>
460
- </div>
461
- </div>
462
- </div>
463
-
464
- {/* OVAL - 8 SILLAS */}
465
- <div>
466
- <h4 className="text-md font-bold mb-4 text-gray-700 dark:text-white">
467
- Oval (Rectangle Circle) - 8 Sillas
468
- </h4>
469
- <div className="grid grid-cols-2 gap-8">
470
- <div className="space-y-2">
471
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Available</p>
472
- <div className="flex gap-4">
473
- <POSTable tableNumber="01" status="available" shape="oval" chairs={8} />
474
- <POSTable tableNumber="01" status="available" shape="oval" chairs={8} isActive />
475
- </div>
476
- </div>
477
-
478
- <div className="space-y-2">
479
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Busy</p>
480
- <div className="flex gap-4">
481
- <POSTable tableNumber="01" status="busy" shape="oval" chairs={8} />
482
- <POSTable tableNumber="01" status="busy" shape="oval" chairs={8} isActive />
483
- </div>
484
- </div>
485
-
486
- <div className="space-y-2">
487
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Reserved</p>
488
- <div className="flex gap-4">
489
- <POSTable tableNumber="01" status="reserved" shape="oval" chairs={8} />
490
- <POSTable tableNumber="01" status="reserved" shape="oval" chairs={8} isActive />
491
- </div>
492
- </div>
493
- </div>
494
- </div>
495
-
496
- {/* OVAL - 6 SILLAS */}
497
- <div>
498
- <h4 className="text-md font-bold mb-4 text-gray-700 dark:text-white">
499
- Oval (Rectangle Circle) - 6 Sillas
500
- </h4>
501
- <div className="grid grid-cols-2 gap-8">
502
- <div className="space-y-2">
503
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Available</p>
504
- <div className="flex gap-4">
505
- <POSTable tableNumber="01" status="available" shape="oval" chairs={6} />
506
- <POSTable tableNumber="01" status="available" shape="oval" chairs={6} isActive />
507
- </div>
508
- </div>
509
-
510
- <div className="space-y-2">
511
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Busy</p>
512
- <div className="flex gap-4">
513
- <POSTable tableNumber="01" status="busy" shape="oval" chairs={6} />
514
- <POSTable tableNumber="01" status="busy" shape="oval" chairs={6} isActive />
515
- </div>
516
- </div>
517
-
518
- <div className="space-y-2">
519
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Reserved</p>
520
- <div className="flex gap-4">
521
- <POSTable tableNumber="01" status="reserved" shape="oval" chairs={6} />
522
- <POSTable tableNumber="01" status="reserved" shape="oval" chairs={6} isActive />
523
- </div>
524
- </div>
525
- </div>
526
- </div>
527
-
528
- {/* CIRCLE - 4 SILLAS */}
529
- <div>
530
- <h4 className="text-md font-bold mb-4 text-gray-700 dark:text-white">
531
- Circle - 4 Sillas
532
- </h4>
533
- <div className="grid grid-cols-2 gap-8">
534
- <div className="space-y-2">
535
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Available</p>
536
- <div className="flex gap-4">
537
- <POSTable tableNumber="01" status="available" shape="circle" chairs={4} />
538
- <POSTable tableNumber="01" status="available" shape="circle" chairs={4} isActive />
539
- </div>
540
- </div>
541
-
542
- <div className="space-y-2">
543
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Busy</p>
544
- <div className="flex gap-4">
545
- <POSTable tableNumber="01" status="busy" shape="circle" chairs={4} />
546
- <POSTable tableNumber="01" status="busy" shape="circle" chairs={4} isActive />
547
- </div>
548
- </div>
549
-
550
- <div className="space-y-2">
551
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Reserved</p>
552
- <div className="flex gap-4">
553
- <POSTable tableNumber="01" status="reserved" shape="circle" chairs={4} />
554
- <POSTable tableNumber="01" status="reserved" shape="circle" chairs={4} isActive />
555
- </div>
556
- </div>
557
- </div>
558
- </div>
559
-
560
- {/* CIRCLE - 2 SILLAS */}
561
- <div>
562
- <h4 className="text-md font-bold mb-4 text-gray-700 dark:text-white">
563
- Circle - 2 Sillas
564
- </h4>
565
- <div className="grid grid-cols-2 gap-8">
566
- <div className="space-y-2">
567
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Available</p>
568
- <div className="flex gap-4">
569
- <POSTable tableNumber="01" status="available" shape="circle" chairs={2} />
570
- <POSTable tableNumber="01" status="available" shape="circle" chairs={2} isActive />
571
- </div>
572
- </div>
573
-
574
- <div className="space-y-2">
575
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Busy</p>
576
- <div className="flex gap-4">
577
- <POSTable tableNumber="01" status="busy" shape="circle" chairs={2} />
578
- <POSTable tableNumber="01" status="busy" shape="circle" chairs={2} isActive />
579
- </div>
580
- </div>
581
-
582
- <div className="space-y-2">
583
- <p className="text-xs font-semibold text-gray-600 dark:text-gray-300">Reserved</p>
584
- <div className="flex gap-4">
585
- <POSTable tableNumber="01" status="reserved" shape="circle" chairs={2} />
586
- <POSTable tableNumber="01" status="reserved" shape="circle" chairs={2} isActive />
587
- </div>
588
- </div>
589
- </div>
590
- </div>
591
-
592
- {/* NOTA FINAL */}
593
- <div className="mt-8 p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg">
594
- <p className="text-xs text-gray-600 dark:text-gray-300">
595
- <strong>📐 Especificaciones Pixel-Perfect:</strong>
596
- <br />• Container: 160x160px, border: 2px, border-radius: 8px
597
- <br />• Inner container: 134x134px, gap: 4px
598
- <br />• Mesa Square/Circle: 64x64px | Rectangle/Oval: 80x64px
599
- <br />• Silla: 28x22px, gap: 4px
600
- <br />• Label: 10px / 12px line-height, font: SiesaBT
601
- <br />• Total variantes implementadas: 60 (según diseño de Figma)
602
- </p>
603
- </div>
604
- </div>
605
- ),
606
- };
607
-
608
- // ============================================
609
- // 6. CON INTERACCIÓN Y FOCUS
610
- // ============================================
611
- export const ConInteraccionYFocus: Story = {
612
- args: { tableNumber: '01' },
613
- render: () => (
614
- <div className="space-y-8 p-6">
615
- <div>
616
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
617
- Click en la Mesa
618
- </h3>
619
- <div className="flex flex-wrap gap-6">
620
- <POSTable
621
- tableNumber="10"
622
- status="available"
623
- chairs={4}
624
- onClick={() => alert('Mesa 10 seleccionada')}
625
- />
626
- <POSTable
627
- tableNumber="11"
628
- status="busy"
629
- chairs={4}
630
- onClick={() => alert('Mesa 11 seleccionada')}
631
- />
632
- </div>
633
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
634
- Haz clic en las mesas para ver la interacción
635
- </p>
636
- </div>
637
-
638
- <div>
639
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
640
- Focus Rings Adaptativos
641
- </h3>
642
- <div className="flex flex-wrap gap-6">
643
- <POSTable
644
- tableNumber="20"
645
- status="available"
646
- chairs={4}
647
- onClick={() => {}}
648
- />
649
- <POSTable
650
- tableNumber="21"
651
- status="busy"
652
- chairs={4}
653
- onClick={() => {}}
654
- />
655
- <POSTable
656
- tableNumber="22"
657
- status="reserved"
658
- chairs={4}
659
- onClick={() => {}}
660
- />
661
- </div>
662
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
663
- Usa Tab para navegar y ver los focus rings adaptativos según el estado
664
- </p>
665
- </div>
666
-
667
- <div>
668
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
669
- Mesa Deshabilitada
670
- </h3>
671
- <POSTable
672
- tableNumber="12"
673
- status="available"
674
- chairs={4}
675
- disabled
676
- onClick={() => alert('No debería ejecutarse')}
677
- />
678
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
679
- Mesa deshabilitada (no clickeable, no focusable)
680
- </p>
681
- </div>
682
- </div>
683
- ),
684
- };
685
-
686
- // ============================================
687
- // 7. LAYOUT DE RESTAURANTE
688
- // ============================================
689
- export const LayoutDeRestaurante: Story = {
690
- args: { tableNumber: '01' },
691
- render: () => (
692
- <div className="p-8 bg-background-secondary dark:bg-dark-bg-primary rounded-xl">
693
- <h3 className="text-lg font-bold mb-6 text-gray-700 dark:text-white">
694
- Vista de Restaurante
695
- </h3>
696
- <div className="grid grid-cols-3 md:grid-cols-4 gap-4">
697
- <POSTable tableNumber="01" status="available" chairs={4} onClick={() => {}} />
698
- <POSTable tableNumber="02" status="busy" chairs={4} onClick={() => {}} />
699
- <POSTable tableNumber="03" status="available" chairs={2} onClick={() => {}} />
700
- <POSTable tableNumber="04" status="reserved" chairs={6} onClick={() => {}} />
701
- <POSTable tableNumber="05" status="available" shape="circle" chairs={4} onClick={() => {}} />
702
- <POSTable tableNumber="06" status="busy" shape="circle" chairs={4} onClick={() => {}} />
703
- <POSTable tableNumber="07" status="available" shape="rectangle" chairs={6} onClick={() => {}} />
704
- <POSTable tableNumber="08" status="reserved" shape="rectangle" chairs={8} onClick={() => {}} />
705
- <POSTable tableNumber="09" status="available" chairs={4} onClick={() => {}} />
706
- <POSTable tableNumber="10" status="busy" chairs={4} onClick={() => {}} />
707
- <POSTable tableNumber="11" status="available" chairs={2} onClick={() => {}} />
708
- <POSTable tableNumber="12" status="reserved" shape="oval" chairs={8} onClick={() => {}} />
709
- </div>
710
- </div>
711
- ),
712
- };
713
-
714
- // ============================================
715
- // 8. SIN SILLAS
716
- // ============================================
717
- export const SinSillas: Story = {
718
- args: { tableNumber: '01' },
719
- render: () => (
720
- <div className="space-y-8 p-6">
721
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
722
- Mesas Sin Sillas (Solo Indicadores)
723
- </h3>
724
- <div className="flex flex-wrap gap-6">
725
- <POSTable tableNumber="A1" status="available" showChairs={false} />
726
- <POSTable tableNumber="A2" status="busy" showChairs={false} />
727
- <POSTable tableNumber="A3" status="reserved" showChairs={false} />
728
- <POSTable tableNumber="A4" status="available" shape="circle" showChairs={false} />
729
- <POSTable tableNumber="A5" status="busy" shape="rectangle" showChairs={false} />
730
- <POSTable tableNumber="A6" status="reserved" shape="oval" showChairs={false} />
731
- </div>
732
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
733
- Vista simplificada sin sillas para layouts compactos
734
- </p>
735
- </div>
736
- ),
737
- };