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.
- package/dist/index.cjs +1479 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +1479 -0
- package/dist/index.js.map +1 -0
- package/package.json +23 -14
- package/claude/agents/siesa-ui-kit-specialist.md +0 -2401
- package/claude/prompts/component-template.md +0 -121
- package/claude/settings.local.json +0 -61
- package/docs/border-radius.md +0 -1261
- package/docs/colors.md +0 -832
- package/docs/dark-mode-guide.md +0 -1426
- package/docs/filters.md +0 -1243
- package/docs/icons.md +0 -1283
- package/docs/shadows.md +0 -1377
- package/docs/spacing.md +0 -1684
- package/docs/typography.md +0 -1268
- package/postcss.config.cjs +0 -6
- package/src/App.css +0 -42
- package/src/App.tsx +0 -8
- package/src/ButtonTest.tsx +0 -147
- package/src/assets/fonts/README.md +0 -261
- package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
- package/src/assets/react.svg +0 -1
- package/src/components/Alert/Alert.stories.tsx +0 -332
- package/src/components/Alert/Alert.tsx +0 -106
- package/src/components/Alert/Alert.types.ts +0 -54
- package/src/components/Avatar/Avatar.stories.tsx +0 -494
- package/src/components/Avatar/Avatar.tsx +0 -143
- package/src/components/Avatar/Avatar.types.ts +0 -53
- package/src/components/Badge/Badge.stories.tsx +0 -339
- package/src/components/Badge/Badge.tsx +0 -278
- package/src/components/Badge/Badge.types.ts +0 -58
- package/src/components/Button/Button.stories.tsx +0 -950
- package/src/components/Button/Button.tsx +0 -337
- package/src/components/Button/Button.types.ts +0 -180
- package/src/components/Button/icons.tsx +0 -87
- package/src/components/Button/index.ts +0 -3
- package/src/components/Checkbox/Checkbox.stories.tsx +0 -453
- package/src/components/Checkbox/Checkbox.tsx +0 -208
- package/src/components/Checkbox/Checkbox.types.ts +0 -61
- package/src/components/DescriptionList/DescriptionList.stories.tsx +0 -250
- package/src/components/DescriptionList/DescriptionList.tsx +0 -96
- package/src/components/DescriptionList/DescriptionList.types.ts +0 -29
- package/src/components/Divider/Divider.stories.tsx +0 -263
- package/src/components/Divider/Divider.tsx +0 -80
- package/src/components/Divider/Divider.types.ts +0 -24
- package/src/components/Dropdown/Dropdown.stories.tsx +0 -552
- package/src/components/Dropdown/Dropdown.tsx +0 -422
- package/src/components/Dropdown/Dropdown.types.ts +0 -146
- package/src/components/Dropdown/README.md +0 -266
- package/src/components/Dropdown/icons.tsx +0 -72
- package/src/components/Dropdown/index.ts +0 -8
- package/src/components/Input/Input.stories.tsx +0 -583
- package/src/components/Input/Input.tsx +0 -204
- package/src/components/Input/Input.types.ts +0 -80
- package/src/components/Input/icons.tsx +0 -145
- package/src/components/Input/index.ts +0 -2
- package/src/components/LoginView/LoginView.stories.tsx +0 -148
- package/src/components/LoginView/LoginView.tsx +0 -426
- package/src/components/LoginView/LoginView.types.ts +0 -52
- package/src/components/LoginView/README.md +0 -396
- package/src/components/LoginView/icons.tsx +0 -85
- package/src/components/LoginView/index.ts +0 -3
- package/src/components/Navbar/Navbar.stories.tsx +0 -810
- package/src/components/Navbar/Navbar.tsx +0 -755
- package/src/components/Navbar/Navbar.types.ts +0 -219
- package/src/components/Navbar/README.md +0 -279
- package/src/components/Navbar/icons.tsx +0 -102
- package/src/components/Navbar/index.ts +0 -8
- package/src/components/NavigationBar/NavigationBar.stories.tsx +0 -406
- package/src/components/NavigationBar/NavigationBar.tsx +0 -246
- package/src/components/NavigationBar/NavigationBar.types.ts +0 -74
- package/src/components/NavigationBar/README.md +0 -469
- package/src/components/NavigationBar/index.ts +0 -2
- package/src/components/NavigationRail/NavigationRail.stories.tsx +0 -417
- package/src/components/NavigationRail/NavigationRail.tsx +0 -418
- package/src/components/NavigationRail/NavigationRail.types.ts +0 -109
- package/src/components/NavigationRail/README.md +0 -224
- package/src/components/NavigationRail/index.ts +0 -2
- package/src/components/Notification/Notification.stories.tsx +0 -513
- package/src/components/Notification/Notification.tsx +0 -145
- package/src/components/Notification/Notification.types.ts +0 -142
- package/src/components/Notification/README.md +0 -409
- package/src/components/Notification/index.ts +0 -3
- package/src/components/POSConvention/POSConvention.stories.tsx +0 -235
- package/src/components/POSConvention/POSConvention.tsx +0 -129
- package/src/components/POSConvention/POSConvention.types.ts +0 -38
- package/src/components/POSConvention/README.md +0 -123
- package/src/components/POSConvention/icons.tsx +0 -45
- package/src/components/POSConvention/index.ts +0 -3
- package/src/components/POSLocationButton/POSLocationButton.stories.tsx +0 -531
- package/src/components/POSLocationButton/POSLocationButton.tsx +0 -247
- package/src/components/POSLocationButton/POSLocationButton.types.ts +0 -87
- package/src/components/POSLocationButton/README.md +0 -253
- package/src/components/POSLocationButton/icons.tsx +0 -120
- package/src/components/POSLocationButton/index.ts +0 -14
- package/src/components/POSNumberButton/POSNumberButton.stories.tsx +0 -415
- package/src/components/POSNumberButton/POSNumberButton.tsx +0 -179
- package/src/components/POSNumberButton/POSNumberButton.types.ts +0 -51
- package/src/components/POSNumberButton/README.md +0 -321
- package/src/components/POSNumberButton/index.ts +0 -3
- package/src/components/POSProductButton/POSProductButton.stories.tsx +0 -318
- package/src/components/POSProductButton/POSProductButton.tsx +0 -152
- package/src/components/POSProductButton/POSProductButton.types.ts +0 -46
- package/src/components/POSProductButton/README.md +0 -269
- package/src/components/POSProductButton/index.ts +0 -2
- package/src/components/POSProductCard/POSProductCard.stories.tsx +0 -642
- package/src/components/POSProductCard/POSProductCard.tsx +0 -208
- package/src/components/POSProductCard/POSProductCard.types.ts +0 -76
- package/src/components/POSProductCard/README.md +0 -179
- package/src/components/POSProductCard/icons.tsx +0 -26
- package/src/components/POSProductCard/index.ts +0 -2
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +0 -753
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +0 -332
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +0 -119
- package/src/components/POSProductSidebarItems/README.md +0 -198
- package/src/components/POSProductSidebarItems/icons.tsx +0 -21
- package/src/components/POSProductSidebarItems/index.ts +0 -3
- package/src/components/POSTable/POSTable.stories.tsx +0 -737
- package/src/components/POSTable/POSTable.tsx +0 -401
- package/src/components/POSTable/POSTable.types.ts +0 -83
- package/src/components/POSTable/README.md +0 -286
- package/src/components/POSTable/index.ts +0 -7
- package/src/components/Pagination/Pagination.stories.tsx +0 -555
- package/src/components/Pagination/Pagination.tsx +0 -286
- package/src/components/Pagination/Pagination.types.ts +0 -93
- package/src/components/Pagination/README.md +0 -298
- package/src/components/Pagination/icons.tsx +0 -47
- package/src/components/Pagination/index.ts +0 -3
- package/src/components/Quantity/Quantity.stories.tsx +0 -457
- package/src/components/Quantity/Quantity.tsx +0 -289
- package/src/components/Quantity/Quantity.types.ts +0 -70
- package/src/components/Radio/Radio.stories.tsx +0 -523
- package/src/components/Radio/Radio.tsx +0 -170
- package/src/components/Radio/Radio.types.ts +0 -122
- package/src/components/Select/README.md +0 -299
- package/src/components/Select/Select.stories.tsx +0 -673
- package/src/components/Select/Select.tsx +0 -454
- package/src/components/Select/Select.types.ts +0 -148
- package/src/components/Select/icons.tsx +0 -50
- package/src/components/Select/index.ts +0 -3
- package/src/components/SignUpView/SignUpView.stories.tsx +0 -129
- package/src/components/SignUpView/SignUpView.tsx +0 -503
- package/src/components/SignUpView/SignUpView.types.ts +0 -58
- package/src/components/SignUpView/icons.tsx +0 -71
- package/src/components/SignUpView/index.ts +0 -3
- package/src/components/Switch/README.md +0 -112
- package/src/components/Switch/Switch.stories.tsx +0 -550
- package/src/components/Switch/Switch.tsx +0 -246
- package/src/components/Switch/Switch.types.ts +0 -67
- package/src/components/Table/README.md +0 -369
- package/src/components/Table/Table.stories.tsx +0 -805
- package/src/components/Table/Table.tsx +0 -688
- package/src/components/Table/Table.types.ts +0 -204
- package/src/components/Table/index.ts +0 -9
- package/src/components/Tabs/README.md +0 -201
- package/src/components/Tabs/Tabs.stories.tsx +0 -580
- package/src/components/Tabs/Tabs.tsx +0 -356
- package/src/components/Tabs/Tabs.types.ts +0 -127
- package/src/components/Tabs/icons.tsx +0 -129
- package/src/components/Tabs/index.ts +0 -11
- package/src/components/Textarea/Textarea.stories.tsx +0 -535
- package/src/components/Textarea/Textarea.tsx +0 -188
- package/src/components/Textarea/Textarea.types.ts +0 -54
- package/src/context/ThemeContext.tsx +0 -99
- package/src/context/index.ts +0 -1
- package/src/index.css +0 -29
- package/src/index.ts +0 -39
- package/src/main.tsx +0 -10
- package/src/views/ProductsView/ProductsView.stories.tsx +0 -344
- package/src/views/ProductsView/ProductsView.tsx +0 -480
- package/src/views/ProductsView/ProductsView.types.ts +0 -238
- package/src/views/ProductsView/README.md +0 -312
- package/src/views/ProductsView/icons.tsx +0 -38
- package/src/views/ProductsView/index.ts +0 -8
- package/src/views/RecoverPasswordView/README.md +0 -269
- package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +0 -131
- package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +0 -376
- package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +0 -56
- package/src/views/RecoverPasswordView/icons.tsx +0 -17
- package/src/views/RecoverPasswordView/index.ts +0 -2
- package/src/views/TableLayoutView/README.md +0 -268
- package/src/views/TableLayoutView/TableLayoutView.stories.tsx +0 -235
- package/src/views/TableLayoutView/TableLayoutView.tsx +0 -461
- package/src/views/TableLayoutView/TableLayoutView.types.ts +0 -209
- package/src/views/TableLayoutView/icons.tsx +0 -113
- package/src/views/TableLayoutView/index.ts +0 -6
- package/storybook/main.ts +0 -20
- package/storybook/preview.tsx +0 -84
- package/storybook/vitest.setup.ts +0 -7
- package/tailwind.config.js +0 -128
- /package/{public → dist}/,Business Logo.png +0 -0
- /package/{public → dist}/.Siesa Logo.png +0 -0
- /package/{public → dist}/bg_siesa.png +0 -0
- /package/{public → dist}/siesa_logo_mobile.png +0 -0
- /package/{public → dist}/vite.svg +0 -0
|
@@ -1,642 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { POSProductCard } from './POSProductCard';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* POSProductCard es un componente de card especializado para sistemas de punto de venta (POS).
|
|
6
|
-
* Muestra información de producto con imagen, nombre, precio y botón de agregar.
|
|
7
|
-
*
|
|
8
|
-
* Diseñado para catálogos de productos y selección rápida en terminales POS.
|
|
9
|
-
*
|
|
10
|
-
* **Características principales:**
|
|
11
|
-
* - Soporte completo de dark mode pixel-perfect según Figma
|
|
12
|
-
* - Reutiliza el componente Button del sistema (con dark mode invertido)
|
|
13
|
-
* - Focus rings adaptativos para accesibilidad
|
|
14
|
-
* - 3 estados: enabled, active, disabled
|
|
15
|
-
*
|
|
16
|
-
* **Colores Dark Mode del Card (según Figma):**
|
|
17
|
-
* - Card enabled: fondo #18181b, texto #f4f4f5
|
|
18
|
-
* - Card active: fondo #112d57, texto #93d1fd
|
|
19
|
-
*
|
|
20
|
-
* **Colores Dark Mode del Botón (según Figma):**
|
|
21
|
-
* - Fondo: #bfe2fe (celeste claro, invertido)
|
|
22
|
-
* - Texto: #0e79fd (azul, invertido)
|
|
23
|
-
* - Borde: #93d1fd
|
|
24
|
-
*
|
|
25
|
-
* @see [Figma: POS Product Card](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4368-31336)
|
|
26
|
-
* @see src/components/Button - Componente Button reutilizado (con dark mode)
|
|
27
|
-
*/
|
|
28
|
-
const meta = {
|
|
29
|
-
title: 'Siesa UI Kit/POSProductCard',
|
|
30
|
-
component: POSProductCard,
|
|
31
|
-
parameters: {
|
|
32
|
-
layout: 'centered',
|
|
33
|
-
docs: {
|
|
34
|
-
description: {
|
|
35
|
-
component:
|
|
36
|
-
'Card de producto para sistemas POS. Muestra imagen, nombre, precio y botón de agregar con soporte completo de dark mode pixel-perfect. El botón reutiliza el componente Button del sistema.',
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
tags: ['autodocs'],
|
|
41
|
-
argTypes: {
|
|
42
|
-
image: {
|
|
43
|
-
control: 'text',
|
|
44
|
-
description: 'URL de la imagen del producto',
|
|
45
|
-
table: {
|
|
46
|
-
type: { summary: 'string' },
|
|
47
|
-
category: 'Contenido',
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
productName: {
|
|
51
|
-
control: 'text',
|
|
52
|
-
description: 'Nombre del producto',
|
|
53
|
-
table: {
|
|
54
|
-
type: { summary: 'string' },
|
|
55
|
-
category: 'Contenido',
|
|
56
|
-
},
|
|
57
|
-
},
|
|
58
|
-
price: {
|
|
59
|
-
control: 'text',
|
|
60
|
-
description: 'Precio del producto formateado',
|
|
61
|
-
table: {
|
|
62
|
-
type: { summary: 'string' },
|
|
63
|
-
category: 'Contenido',
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
buttonText: {
|
|
67
|
-
control: 'text',
|
|
68
|
-
description: 'Texto del botón de acción',
|
|
69
|
-
table: {
|
|
70
|
-
type: { summary: 'string' },
|
|
71
|
-
defaultValue: { summary: 'Agregar' },
|
|
72
|
-
category: 'Contenido',
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
active: {
|
|
76
|
-
control: 'boolean',
|
|
77
|
-
description: 'Estado activo/seleccionado del card',
|
|
78
|
-
table: {
|
|
79
|
-
type: { summary: 'boolean' },
|
|
80
|
-
defaultValue: { summary: 'false' },
|
|
81
|
-
category: 'Estado',
|
|
82
|
-
},
|
|
83
|
-
},
|
|
84
|
-
disabled: {
|
|
85
|
-
control: 'boolean',
|
|
86
|
-
description: 'Si el card está deshabilitado',
|
|
87
|
-
table: {
|
|
88
|
-
type: { summary: 'boolean' },
|
|
89
|
-
defaultValue: { summary: 'false' },
|
|
90
|
-
category: 'Estado',
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
onAddClick: {
|
|
94
|
-
action: 'onAddClick',
|
|
95
|
-
description: 'Handler cuando se hace clic en el botón Agregar',
|
|
96
|
-
table: {
|
|
97
|
-
type: { summary: '(event: MouseEvent) => void' },
|
|
98
|
-
category: 'Eventos',
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
onCardClick: {
|
|
102
|
-
action: 'onCardClick',
|
|
103
|
-
description: 'Handler cuando se hace clic en el card',
|
|
104
|
-
table: {
|
|
105
|
-
type: { summary: '(event: MouseEvent) => void' },
|
|
106
|
-
category: 'Eventos',
|
|
107
|
-
},
|
|
108
|
-
},
|
|
109
|
-
className: {
|
|
110
|
-
control: 'text',
|
|
111
|
-
description: 'Clases CSS adicionales',
|
|
112
|
-
table: {
|
|
113
|
-
type: { summary: 'string' },
|
|
114
|
-
category: 'Apariencia',
|
|
115
|
-
},
|
|
116
|
-
},
|
|
117
|
-
ariaLabel: {
|
|
118
|
-
control: 'text',
|
|
119
|
-
description: 'Label de accesibilidad',
|
|
120
|
-
table: {
|
|
121
|
-
type: { summary: 'string' },
|
|
122
|
-
category: 'Accesibilidad',
|
|
123
|
-
},
|
|
124
|
-
},
|
|
125
|
-
},
|
|
126
|
-
} satisfies Meta<typeof POSProductCard>;
|
|
127
|
-
|
|
128
|
-
export default meta;
|
|
129
|
-
type Story = StoryObj<typeof meta>;
|
|
130
|
-
|
|
131
|
-
// Imagen de ejemplo (placeholder)
|
|
132
|
-
const sampleImage = 'https://images.unsplash.com/photo-1592417817098-8fd3d9eb14a5?w=300&h=200&fit=crop';
|
|
133
|
-
|
|
134
|
-
// ============================================
|
|
135
|
-
// 1. PLAYGROUND INTERACTIVO
|
|
136
|
-
// ============================================
|
|
137
|
-
export const Playground: Story = {
|
|
138
|
-
args: {
|
|
139
|
-
image: sampleImage,
|
|
140
|
-
productName: 'Ensalada Caprese',
|
|
141
|
-
price: '$ 40.000',
|
|
142
|
-
buttonText: 'Agregar',
|
|
143
|
-
active: false,
|
|
144
|
-
disabled: false,
|
|
145
|
-
},
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
// ============================================
|
|
149
|
-
// 2. TODOS LOS ESTADOS
|
|
150
|
-
// ============================================
|
|
151
|
-
export const TodosLosEstados: Story = {
|
|
152
|
-
args: {
|
|
153
|
-
image: sampleImage,
|
|
154
|
-
productName: 'Ensalada Caprese',
|
|
155
|
-
price: '$ 40.000',
|
|
156
|
-
},
|
|
157
|
-
render: () => (
|
|
158
|
-
<div className="space-y-8 p-6">
|
|
159
|
-
{/* Estado Enabled (Normal) */}
|
|
160
|
-
<div>
|
|
161
|
-
<h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
|
|
162
|
-
Estado Normal (Enabled)
|
|
163
|
-
</h3>
|
|
164
|
-
<div className="flex gap-4">
|
|
165
|
-
<POSProductCard
|
|
166
|
-
image={sampleImage}
|
|
167
|
-
productName="Ensalada Caprese"
|
|
168
|
-
price="$ 40.000"
|
|
169
|
-
onAddClick={() => console.log('Producto agregado')}
|
|
170
|
-
/>
|
|
171
|
-
</div>
|
|
172
|
-
<p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
|
|
173
|
-
Estado por defecto con fondo blanco y texto negro
|
|
174
|
-
</p>
|
|
175
|
-
</div>
|
|
176
|
-
|
|
177
|
-
{/* Estado Activo */}
|
|
178
|
-
<div>
|
|
179
|
-
<h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
|
|
180
|
-
Estado Activo (Seleccionado)
|
|
181
|
-
</h3>
|
|
182
|
-
<div className="flex gap-4">
|
|
183
|
-
<POSProductCard
|
|
184
|
-
image={sampleImage}
|
|
185
|
-
productName="Ensalada Caprese"
|
|
186
|
-
price="$ 40.000"
|
|
187
|
-
active={true}
|
|
188
|
-
onAddClick={() => console.log('Producto agregado')}
|
|
189
|
-
/>
|
|
190
|
-
</div>
|
|
191
|
-
<p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
|
|
192
|
-
Estado seleccionado con fondo azul claro y texto azul
|
|
193
|
-
</p>
|
|
194
|
-
</div>
|
|
195
|
-
|
|
196
|
-
{/* Estado Deshabilitado */}
|
|
197
|
-
<div>
|
|
198
|
-
<h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
|
|
199
|
-
Estado Deshabilitado
|
|
200
|
-
</h3>
|
|
201
|
-
<div className="flex gap-4">
|
|
202
|
-
<POSProductCard
|
|
203
|
-
image={sampleImage}
|
|
204
|
-
productName="Ensalada Caprese"
|
|
205
|
-
price="$ 40.000"
|
|
206
|
-
disabled={true}
|
|
207
|
-
/>
|
|
208
|
-
</div>
|
|
209
|
-
<p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
|
|
210
|
-
Estado deshabilitado con opacidad reducida
|
|
211
|
-
</p>
|
|
212
|
-
</div>
|
|
213
|
-
|
|
214
|
-
{/* Consejos */}
|
|
215
|
-
<div className="mt-6 p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg">
|
|
216
|
-
<p className="text-xs text-gray-600 dark:text-gray-300">
|
|
217
|
-
<strong>Uso recomendado:</strong>
|
|
218
|
-
<br />• <code className="px-1 bg-white dark:bg-gray-700 rounded">enabled</code> - Estado normal del producto
|
|
219
|
-
<br />• <code className="px-1 bg-white dark:bg-gray-700 rounded">active</code> - Producto seleccionado o agregado al carrito
|
|
220
|
-
<br />• <code className="px-1 bg-white dark:bg-gray-700 rounded">disabled</code> - Producto no disponible
|
|
221
|
-
</p>
|
|
222
|
-
</div>
|
|
223
|
-
</div>
|
|
224
|
-
),
|
|
225
|
-
};
|
|
226
|
-
|
|
227
|
-
// ============================================
|
|
228
|
-
// 3. COMPARACIÓN LADO A LADO
|
|
229
|
-
// ============================================
|
|
230
|
-
export const ComparacionEstados: Story = {
|
|
231
|
-
args: {
|
|
232
|
-
image: sampleImage,
|
|
233
|
-
productName: 'Ensalada Caprese',
|
|
234
|
-
price: '$ 40.000',
|
|
235
|
-
},
|
|
236
|
-
render: () => (
|
|
237
|
-
<div className="p-6">
|
|
238
|
-
<h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
|
|
239
|
-
Comparación de Estados
|
|
240
|
-
</h3>
|
|
241
|
-
<div className="flex gap-4 flex-wrap">
|
|
242
|
-
<div className="text-center">
|
|
243
|
-
<POSProductCard
|
|
244
|
-
image={sampleImage}
|
|
245
|
-
productName="Ensalada Caprese"
|
|
246
|
-
price="$ 40.000"
|
|
247
|
-
/>
|
|
248
|
-
<span className="text-xs text-gray-500 dark:text-gray-300 mt-2 block">Normal</span>
|
|
249
|
-
</div>
|
|
250
|
-
<div className="text-center">
|
|
251
|
-
<POSProductCard
|
|
252
|
-
image={sampleImage}
|
|
253
|
-
productName="Ensalada Caprese"
|
|
254
|
-
price="$ 40.000"
|
|
255
|
-
active={true}
|
|
256
|
-
/>
|
|
257
|
-
<span className="text-xs text-gray-500 dark:text-gray-300 mt-2 block">Activo</span>
|
|
258
|
-
</div>
|
|
259
|
-
<div className="text-center">
|
|
260
|
-
<POSProductCard
|
|
261
|
-
image={sampleImage}
|
|
262
|
-
productName="Ensalada Caprese"
|
|
263
|
-
price="$ 40.000"
|
|
264
|
-
disabled={true}
|
|
265
|
-
/>
|
|
266
|
-
<span className="text-xs text-gray-500 dark:text-gray-300 mt-2 block">Deshabilitado</span>
|
|
267
|
-
</div>
|
|
268
|
-
</div>
|
|
269
|
-
</div>
|
|
270
|
-
),
|
|
271
|
-
};
|
|
272
|
-
|
|
273
|
-
// ============================================
|
|
274
|
-
// 4. GRID DE PRODUCTOS (EJEMPLO DE USO)
|
|
275
|
-
// ============================================
|
|
276
|
-
export const GridDeProductos: Story = {
|
|
277
|
-
args: {
|
|
278
|
-
image: sampleImage,
|
|
279
|
-
productName: 'Ensalada Caprese',
|
|
280
|
-
price: '$ 40.000',
|
|
281
|
-
},
|
|
282
|
-
render: () => {
|
|
283
|
-
const productos = [
|
|
284
|
-
{ id: 1, name: 'Ensalada Caprese', price: '$ 40.000', active: false },
|
|
285
|
-
{ id: 2, name: 'Pizza Margherita', price: '$ 35.000', active: true },
|
|
286
|
-
{ id: 3, name: 'Pasta Alfredo', price: '$ 28.000', active: false },
|
|
287
|
-
{ id: 4, name: 'Tiramisú', price: '$ 15.000', active: false },
|
|
288
|
-
{ id: 5, name: 'Producto Agotado', price: '$ 22.000', disabled: true },
|
|
289
|
-
{ id: 6, name: 'Risotto', price: '$ 32.000', active: false },
|
|
290
|
-
];
|
|
291
|
-
|
|
292
|
-
return (
|
|
293
|
-
<div className="p-6">
|
|
294
|
-
<h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
|
|
295
|
-
Catálogo de Productos (Ejemplo de Grid)
|
|
296
|
-
</h3>
|
|
297
|
-
<div className="grid grid-cols-2 md:grid-cols-3 gap-4">
|
|
298
|
-
{productos.map((producto) => (
|
|
299
|
-
<POSProductCard
|
|
300
|
-
key={producto.id}
|
|
301
|
-
image={sampleImage}
|
|
302
|
-
productName={producto.name}
|
|
303
|
-
price={producto.price}
|
|
304
|
-
active={producto.active}
|
|
305
|
-
disabled={producto.disabled}
|
|
306
|
-
onAddClick={() => console.log(`Agregado: ${producto.name}`)}
|
|
307
|
-
/>
|
|
308
|
-
))}
|
|
309
|
-
</div>
|
|
310
|
-
<p className="text-xs text-gray-500 dark:text-gray-300 mt-4">
|
|
311
|
-
Ejemplo de uso en un grid de catálogo de productos POS
|
|
312
|
-
</p>
|
|
313
|
-
</div>
|
|
314
|
-
);
|
|
315
|
-
},
|
|
316
|
-
};
|
|
317
|
-
|
|
318
|
-
// ============================================
|
|
319
|
-
// 5. DIFERENTES PRECIOS
|
|
320
|
-
// ============================================
|
|
321
|
-
export const DiferentesPrecios: Story = {
|
|
322
|
-
args: {
|
|
323
|
-
image: sampleImage,
|
|
324
|
-
productName: 'Ensalada Caprese',
|
|
325
|
-
price: '$ 40.000',
|
|
326
|
-
},
|
|
327
|
-
render: () => (
|
|
328
|
-
<div className="p-6">
|
|
329
|
-
<h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
|
|
330
|
-
Diferentes Formatos de Precio
|
|
331
|
-
</h3>
|
|
332
|
-
<div className="flex gap-4 flex-wrap">
|
|
333
|
-
<POSProductCard
|
|
334
|
-
image={sampleImage}
|
|
335
|
-
productName="Producto Económico"
|
|
336
|
-
price="$ 5.000"
|
|
337
|
-
/>
|
|
338
|
-
<POSProductCard
|
|
339
|
-
image={sampleImage}
|
|
340
|
-
productName="Producto Medio"
|
|
341
|
-
price="$ 40.000"
|
|
342
|
-
/>
|
|
343
|
-
<POSProductCard
|
|
344
|
-
image={sampleImage}
|
|
345
|
-
productName="Producto Premium"
|
|
346
|
-
price="$ 150.000"
|
|
347
|
-
/>
|
|
348
|
-
</div>
|
|
349
|
-
<p className="text-xs text-gray-500 dark:text-gray-300 mt-4">
|
|
350
|
-
El componente se adapta a diferentes longitudes de precio
|
|
351
|
-
</p>
|
|
352
|
-
</div>
|
|
353
|
-
),
|
|
354
|
-
};
|
|
355
|
-
|
|
356
|
-
// ============================================
|
|
357
|
-
// 6. TEXTO PERSONALIZADO DEL BOTÓN
|
|
358
|
-
// ============================================
|
|
359
|
-
export const TextoPersonalizado: Story = {
|
|
360
|
-
args: {
|
|
361
|
-
image: sampleImage,
|
|
362
|
-
productName: 'Ensalada Caprese',
|
|
363
|
-
price: '$ 40.000',
|
|
364
|
-
},
|
|
365
|
-
render: () => (
|
|
366
|
-
<div className="p-6">
|
|
367
|
-
<h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
|
|
368
|
-
Texto Personalizado del Botón
|
|
369
|
-
</h3>
|
|
370
|
-
<div className="flex gap-4 flex-wrap">
|
|
371
|
-
<POSProductCard
|
|
372
|
-
image={sampleImage}
|
|
373
|
-
productName="Ensalada Caprese"
|
|
374
|
-
price="$ 40.000"
|
|
375
|
-
buttonText="Agregar"
|
|
376
|
-
/>
|
|
377
|
-
<POSProductCard
|
|
378
|
-
image={sampleImage}
|
|
379
|
-
productName="Pizza Especial"
|
|
380
|
-
price="$ 45.000"
|
|
381
|
-
buttonText="Pedir"
|
|
382
|
-
/>
|
|
383
|
-
<POSProductCard
|
|
384
|
-
image={sampleImage}
|
|
385
|
-
productName="Combo Familiar"
|
|
386
|
-
price="$ 80.000"
|
|
387
|
-
buttonText="Seleccionar"
|
|
388
|
-
/>
|
|
389
|
-
</div>
|
|
390
|
-
<p className="text-xs text-gray-500 dark:text-gray-300 mt-4">
|
|
391
|
-
El texto del botón se puede personalizar según el contexto
|
|
392
|
-
</p>
|
|
393
|
-
</div>
|
|
394
|
-
),
|
|
395
|
-
};
|
|
396
|
-
|
|
397
|
-
// ============================================
|
|
398
|
-
// 7. NOMBRES LARGOS
|
|
399
|
-
// ============================================
|
|
400
|
-
export const NombresLargos: Story = {
|
|
401
|
-
args: {
|
|
402
|
-
image: sampleImage,
|
|
403
|
-
productName: 'Ensalada Caprese',
|
|
404
|
-
price: '$ 40.000',
|
|
405
|
-
},
|
|
406
|
-
render: () => (
|
|
407
|
-
<div className="p-6">
|
|
408
|
-
<h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
|
|
409
|
-
Nombres de Producto Largos
|
|
410
|
-
</h3>
|
|
411
|
-
<div className="flex gap-4 flex-wrap">
|
|
412
|
-
<POSProductCard
|
|
413
|
-
image={sampleImage}
|
|
414
|
-
productName="Ensalada"
|
|
415
|
-
price="$ 25.000"
|
|
416
|
-
/>
|
|
417
|
-
<POSProductCard
|
|
418
|
-
image={sampleImage}
|
|
419
|
-
productName="Ensalada Caprese Especial"
|
|
420
|
-
price="$ 40.000"
|
|
421
|
-
/>
|
|
422
|
-
<POSProductCard
|
|
423
|
-
image={sampleImage}
|
|
424
|
-
productName="Ensalada Mediterránea con Aceitunas y Queso Feta"
|
|
425
|
-
price="$ 45.000"
|
|
426
|
-
/>
|
|
427
|
-
</div>
|
|
428
|
-
<p className="text-xs text-gray-500 dark:text-gray-300 mt-4">
|
|
429
|
-
El nombre del producto se adapta al espacio disponible
|
|
430
|
-
</p>
|
|
431
|
-
</div>
|
|
432
|
-
),
|
|
433
|
-
};
|
|
434
|
-
|
|
435
|
-
// ============================================
|
|
436
|
-
// 8. INTERACTIVIDAD
|
|
437
|
-
// ============================================
|
|
438
|
-
export const Interactividad: Story = {
|
|
439
|
-
args: {
|
|
440
|
-
image: sampleImage,
|
|
441
|
-
productName: 'Ensalada Caprese',
|
|
442
|
-
price: '$ 40.000',
|
|
443
|
-
},
|
|
444
|
-
render: () => (
|
|
445
|
-
<div className="p-6">
|
|
446
|
-
<h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
|
|
447
|
-
Eventos de Interacción
|
|
448
|
-
</h3>
|
|
449
|
-
<div className="flex gap-4">
|
|
450
|
-
<POSProductCard
|
|
451
|
-
image={sampleImage}
|
|
452
|
-
productName="Producto Interactivo"
|
|
453
|
-
price="$ 40.000"
|
|
454
|
-
onCardClick={() => alert('Clic en el card')}
|
|
455
|
-
onAddClick={() => alert('Clic en el botón Agregar')}
|
|
456
|
-
/>
|
|
457
|
-
</div>
|
|
458
|
-
<p className="text-xs text-gray-500 dark:text-gray-300 mt-4">
|
|
459
|
-
Haz clic en el card o en el botón para ver los eventos
|
|
460
|
-
</p>
|
|
461
|
-
|
|
462
|
-
{/* Consejos */}
|
|
463
|
-
<div className="mt-6 p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg">
|
|
464
|
-
<p className="text-xs text-gray-600 dark:text-gray-300">
|
|
465
|
-
<strong>Eventos disponibles:</strong>
|
|
466
|
-
<br />• <code className="px-1 bg-white dark:bg-gray-700 rounded">onCardClick</code> - Se dispara al hacer clic en el card (no en el botón)
|
|
467
|
-
<br />• <code className="px-1 bg-white dark:bg-gray-700 rounded">onAddClick</code> - Se dispara al hacer clic en el botón "Agregar"
|
|
468
|
-
</p>
|
|
469
|
-
</div>
|
|
470
|
-
</div>
|
|
471
|
-
),
|
|
472
|
-
};
|
|
473
|
-
|
|
474
|
-
// ============================================
|
|
475
|
-
// 9. LIGHT VS DARK MODE
|
|
476
|
-
// ============================================
|
|
477
|
-
export const LightVsDarkMode: Story = {
|
|
478
|
-
args: {
|
|
479
|
-
image: sampleImage,
|
|
480
|
-
productName: 'Ensalada Caprese',
|
|
481
|
-
price: '$ 40.000',
|
|
482
|
-
},
|
|
483
|
-
render: () => (
|
|
484
|
-
<div className="flex gap-8 p-6">
|
|
485
|
-
{/* Light Mode */}
|
|
486
|
-
<div className="p-6 bg-white rounded-2xl border border-gray-200">
|
|
487
|
-
<h3 className="text-sm font-bold mb-4 text-gray-700">
|
|
488
|
-
Light Mode
|
|
489
|
-
</h3>
|
|
490
|
-
<div className="space-y-4">
|
|
491
|
-
<div className="text-center">
|
|
492
|
-
<POSProductCard
|
|
493
|
-
image={sampleImage}
|
|
494
|
-
productName="Nombre producto"
|
|
495
|
-
price="$ 40.000"
|
|
496
|
-
/>
|
|
497
|
-
<span className="text-xs text-gray-500 mt-2 block">Enabled</span>
|
|
498
|
-
<span className="text-xs text-gray-400 block">Card: #fff, Texto: #18181b</span>
|
|
499
|
-
</div>
|
|
500
|
-
<div className="text-center">
|
|
501
|
-
<POSProductCard
|
|
502
|
-
image={sampleImage}
|
|
503
|
-
productName="Nombre producto"
|
|
504
|
-
price="$ 40.000"
|
|
505
|
-
active={true}
|
|
506
|
-
/>
|
|
507
|
-
<span className="text-xs text-gray-500 mt-2 block">Active</span>
|
|
508
|
-
<span className="text-xs text-gray-400 block">Card: #dbeefe, Texto: #0e79fd</span>
|
|
509
|
-
</div>
|
|
510
|
-
</div>
|
|
511
|
-
<div className="mt-4 p-3 bg-gray-50 rounded text-xs text-gray-600">
|
|
512
|
-
<strong>Botón Light:</strong><br />
|
|
513
|
-
Fondo: #0e79fd (azul)<br />
|
|
514
|
-
Texto: #eff8ff (blanco)
|
|
515
|
-
</div>
|
|
516
|
-
</div>
|
|
517
|
-
|
|
518
|
-
{/* Dark Mode */}
|
|
519
|
-
<div className="dark p-6 bg-zinc-900 rounded-2xl">
|
|
520
|
-
<h3 className="text-sm font-bold mb-4 text-white">
|
|
521
|
-
Dark Mode
|
|
522
|
-
</h3>
|
|
523
|
-
<div className="space-y-4">
|
|
524
|
-
<div className="text-center">
|
|
525
|
-
<POSProductCard
|
|
526
|
-
image={sampleImage}
|
|
527
|
-
productName="Nombre producto"
|
|
528
|
-
price="$ 40.000"
|
|
529
|
-
/>
|
|
530
|
-
<span className="text-xs text-gray-300 mt-2 block">Enabled</span>
|
|
531
|
-
<span className="text-xs text-gray-500 block">Card: #18181b, Texto: #f4f4f5</span>
|
|
532
|
-
</div>
|
|
533
|
-
<div className="text-center">
|
|
534
|
-
<POSProductCard
|
|
535
|
-
image={sampleImage}
|
|
536
|
-
productName="Nombre producto"
|
|
537
|
-
price="$ 40.000"
|
|
538
|
-
active={true}
|
|
539
|
-
/>
|
|
540
|
-
<span className="text-xs text-gray-300 mt-2 block">Active</span>
|
|
541
|
-
<span className="text-xs text-gray-500 block">Card: #112d57, Texto: #93d1fd</span>
|
|
542
|
-
</div>
|
|
543
|
-
</div>
|
|
544
|
-
<div className="mt-4 p-3 bg-zinc-800 rounded text-xs text-gray-300">
|
|
545
|
-
<strong>Botón Dark (invertido):</strong><br />
|
|
546
|
-
Fondo: #bfe2fe (celeste claro)<br />
|
|
547
|
-
Texto: #0e79fd (azul)
|
|
548
|
-
</div>
|
|
549
|
-
</div>
|
|
550
|
-
</div>
|
|
551
|
-
),
|
|
552
|
-
};
|
|
553
|
-
|
|
554
|
-
// ============================================
|
|
555
|
-
// 10. ESPECIFICACIONES DE FIGMA
|
|
556
|
-
// ============================================
|
|
557
|
-
export const EspecificacionesFigma: Story = {
|
|
558
|
-
args: {
|
|
559
|
-
image: sampleImage,
|
|
560
|
-
productName: 'Nombre producto',
|
|
561
|
-
price: '$ 40.000',
|
|
562
|
-
},
|
|
563
|
-
render: () => (
|
|
564
|
-
<div className="p-6">
|
|
565
|
-
<h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
|
|
566
|
-
Especificaciones de Diseño (Figma)
|
|
567
|
-
</h3>
|
|
568
|
-
|
|
569
|
-
{/* Card con anotaciones */}
|
|
570
|
-
<div className="flex gap-8 items-start">
|
|
571
|
-
<div className="relative">
|
|
572
|
-
<POSProductCard
|
|
573
|
-
image={sampleImage}
|
|
574
|
-
productName="Nombre producto"
|
|
575
|
-
price="$ 40.000"
|
|
576
|
-
/>
|
|
577
|
-
{/* Anotación de tamaño */}
|
|
578
|
-
<div className="absolute -right-20 top-0 text-xs text-gray-500">
|
|
579
|
-
<div className="border-l border-dashed border-gray-400 h-full absolute left-0" />
|
|
580
|
-
<span className="ml-2">170px</span>
|
|
581
|
-
</div>
|
|
582
|
-
</div>
|
|
583
|
-
|
|
584
|
-
{/* Tabla de especificaciones */}
|
|
585
|
-
<div className="text-xs text-gray-600 dark:text-gray-300 space-y-2">
|
|
586
|
-
<h4 className="font-bold text-sm mb-3">Especificaciones:</h4>
|
|
587
|
-
<table className="border-collapse">
|
|
588
|
-
<tbody>
|
|
589
|
-
<tr>
|
|
590
|
-
<td className="pr-4 py-1 font-medium">Tamaño:</td>
|
|
591
|
-
<td className="py-1">170 x 212px</td>
|
|
592
|
-
</tr>
|
|
593
|
-
<tr>
|
|
594
|
-
<td className="pr-4 py-1 font-medium">Padding:</td>
|
|
595
|
-
<td className="py-1">12px (p-3)</td>
|
|
596
|
-
</tr>
|
|
597
|
-
<tr>
|
|
598
|
-
<td className="pr-4 py-1 font-medium">Gap:</td>
|
|
599
|
-
<td className="py-1">8px (gap-2)</td>
|
|
600
|
-
</tr>
|
|
601
|
-
<tr>
|
|
602
|
-
<td className="pr-4 py-1 font-medium">Border Radius:</td>
|
|
603
|
-
<td className="py-1">8px (rounded-lg)</td>
|
|
604
|
-
</tr>
|
|
605
|
-
<tr>
|
|
606
|
-
<td className="pr-4 py-1 font-medium">Imagen:</td>
|
|
607
|
-
<td className="py-1">146 x 88px</td>
|
|
608
|
-
</tr>
|
|
609
|
-
<tr>
|
|
610
|
-
<td className="pr-4 py-1 font-medium">Nombre:</td>
|
|
611
|
-
<td className="py-1">Label Small (14px Bold)</td>
|
|
612
|
-
</tr>
|
|
613
|
-
<tr>
|
|
614
|
-
<td className="pr-4 py-1 font-medium">Precio:</td>
|
|
615
|
-
<td className="py-1">Heading Small (24px Bold, tracking-tighter)</td>
|
|
616
|
-
</tr>
|
|
617
|
-
<tr>
|
|
618
|
-
<td className="pr-4 py-1 font-medium">Botón:</td>
|
|
619
|
-
<td className="py-1">Button default size xs (reutilizado)</td>
|
|
620
|
-
</tr>
|
|
621
|
-
</tbody>
|
|
622
|
-
</table>
|
|
623
|
-
</div>
|
|
624
|
-
</div>
|
|
625
|
-
|
|
626
|
-
{/* Link a Figma */}
|
|
627
|
-
<div className="mt-6 p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg">
|
|
628
|
-
<p className="text-xs text-gray-600 dark:text-gray-300">
|
|
629
|
-
<strong>Referencia de diseño:</strong>{' '}
|
|
630
|
-
<a
|
|
631
|
-
href="https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4368-31336"
|
|
632
|
-
target="_blank"
|
|
633
|
-
rel="noopener noreferrer"
|
|
634
|
-
className="text-blue-600 dark:text-blue-400 underline"
|
|
635
|
-
>
|
|
636
|
-
Figma: POS Product Card
|
|
637
|
-
</a>
|
|
638
|
-
</p>
|
|
639
|
-
</div>
|
|
640
|
-
</div>
|
|
641
|
-
),
|
|
642
|
-
};
|