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,289 +0,0 @@
|
|
|
1
|
-
import { forwardRef, useState, useEffect } from 'react';
|
|
2
|
-
import type { QuantityProps } from './Quantity.types';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Quantity - Componente de cantidad del sistema de diseño Siesa
|
|
6
|
-
*
|
|
7
|
-
* Componente para seleccionar cantidades con soporte para:
|
|
8
|
-
* - Botones de incremento/decremento
|
|
9
|
-
* - Valores mínimo y máximo
|
|
10
|
-
* - Label opcional con link
|
|
11
|
-
* - Texto de ayuda opcional
|
|
12
|
-
* - Estado de error
|
|
13
|
-
* - Estado deshabilitado
|
|
14
|
-
* - Dark mode completo
|
|
15
|
-
*
|
|
16
|
-
* Mejores prácticas implementadas:
|
|
17
|
-
* - Orden de modificadores: {responsive}:{dark}:{state}:{utility}
|
|
18
|
-
* - Dark mode con estrategia 'class' (darkMode: 'class')
|
|
19
|
-
* - Tokens de color consistentes con la documentación
|
|
20
|
-
* - Focus rings adaptativos para light y dark mode
|
|
21
|
-
* - Type safety con TypeScript estricto
|
|
22
|
-
* - Accesibilidad con ARIA labels
|
|
23
|
-
*
|
|
24
|
-
* @see docs/colors.md - Sistema de colores
|
|
25
|
-
* @see docs/typography.md - Sistema tipográfico
|
|
26
|
-
* @see docs/spacing.md - Sistema de espaciado
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* ```tsx
|
|
30
|
-
* <Quantity
|
|
31
|
-
* label="Cantidad"
|
|
32
|
-
* value={5}
|
|
33
|
-
* min={0}
|
|
34
|
-
* max={10}
|
|
35
|
-
* onChange={(value) => console.log(value)}
|
|
36
|
-
* />
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
export const Quantity = forwardRef<HTMLDivElement, QuantityProps>(
|
|
40
|
-
(
|
|
41
|
-
{
|
|
42
|
-
value: controlledValue,
|
|
43
|
-
defaultValue = 0,
|
|
44
|
-
onChange,
|
|
45
|
-
min = 0,
|
|
46
|
-
max,
|
|
47
|
-
label,
|
|
48
|
-
linkText,
|
|
49
|
-
onLinkClick,
|
|
50
|
-
helperText,
|
|
51
|
-
error = false,
|
|
52
|
-
disabled = false,
|
|
53
|
-
className = '',
|
|
54
|
-
...props
|
|
55
|
-
},
|
|
56
|
-
ref
|
|
57
|
-
) => {
|
|
58
|
-
// Estado interno para valor no controlado
|
|
59
|
-
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
60
|
-
const isControlled = controlledValue !== undefined;
|
|
61
|
-
const currentValue = isControlled ? controlledValue : internalValue;
|
|
62
|
-
|
|
63
|
-
// Sincronizar valor interno con defaultValue cuando cambia
|
|
64
|
-
useEffect(() => {
|
|
65
|
-
if (!isControlled) {
|
|
66
|
-
setInternalValue(defaultValue);
|
|
67
|
-
}
|
|
68
|
-
}, [defaultValue, isControlled]);
|
|
69
|
-
|
|
70
|
-
// Handler para cambio de valor
|
|
71
|
-
const handleValueChange = (newValue: number) => {
|
|
72
|
-
// Aplicar restricciones de min/max
|
|
73
|
-
let clampedValue = newValue;
|
|
74
|
-
if (min !== undefined && clampedValue < min) {
|
|
75
|
-
clampedValue = min;
|
|
76
|
-
}
|
|
77
|
-
if (max !== undefined && clampedValue > max) {
|
|
78
|
-
clampedValue = max;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Actualizar estado interno si no está controlado
|
|
82
|
-
if (!isControlled) {
|
|
83
|
-
setInternalValue(clampedValue);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Llamar onChange si existe
|
|
87
|
-
onChange?.(clampedValue);
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
// Handlers para botones
|
|
91
|
-
const handleDecrement = () => {
|
|
92
|
-
if (disabled) return;
|
|
93
|
-
handleValueChange(currentValue - 1);
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
const handleIncrement = () => {
|
|
97
|
-
if (disabled) return;
|
|
98
|
-
handleValueChange(currentValue + 1);
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
// Verificar si los botones deben estar deshabilitados
|
|
102
|
-
const isDecrementDisabled = disabled || (min !== undefined && currentValue <= min);
|
|
103
|
-
const isIncrementDisabled = disabled || (max !== undefined && currentValue >= max);
|
|
104
|
-
|
|
105
|
-
// Iconos SVG inline
|
|
106
|
-
const MinusIcon = () => (
|
|
107
|
-
<svg
|
|
108
|
-
width="16"
|
|
109
|
-
height="16"
|
|
110
|
-
viewBox="0 0 16 16"
|
|
111
|
-
fill="none"
|
|
112
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
113
|
-
>
|
|
114
|
-
<path
|
|
115
|
-
d="M3 8H13"
|
|
116
|
-
stroke="currentColor"
|
|
117
|
-
strokeWidth="1.5"
|
|
118
|
-
strokeLinecap="round"
|
|
119
|
-
strokeLinejoin="round"
|
|
120
|
-
/>
|
|
121
|
-
</svg>
|
|
122
|
-
);
|
|
123
|
-
|
|
124
|
-
const PlusIcon = () => (
|
|
125
|
-
<svg
|
|
126
|
-
width="16"
|
|
127
|
-
height="16"
|
|
128
|
-
viewBox="0 0 16 16"
|
|
129
|
-
fill="none"
|
|
130
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
131
|
-
>
|
|
132
|
-
<path
|
|
133
|
-
d="M8 3V13M3 8H13"
|
|
134
|
-
stroke="currentColor"
|
|
135
|
-
strokeWidth="1.5"
|
|
136
|
-
strokeLinecap="round"
|
|
137
|
-
strokeLinejoin="round"
|
|
138
|
-
/>
|
|
139
|
-
</svg>
|
|
140
|
-
);
|
|
141
|
-
|
|
142
|
-
// Clases para el estado (usando especificaciones exactas de Figma)
|
|
143
|
-
const borderClass = error
|
|
144
|
-
? 'border-error-border dark:border-error-border'
|
|
145
|
-
: 'border-border-primary dark:border-dark-border-primary';
|
|
146
|
-
|
|
147
|
-
const hoverClass = !disabled && !error
|
|
148
|
-
? 'hover:border-[#f9f9f9] dark:hover:border-[#f9f9f9]'
|
|
149
|
-
: '';
|
|
150
|
-
|
|
151
|
-
const focusClass = !disabled && !error
|
|
152
|
-
? 'focus-within:border-2 focus-within:border-[#329cff] dark:focus-within:border-[#329cff]'
|
|
153
|
-
: '';
|
|
154
|
-
|
|
155
|
-
return (
|
|
156
|
-
<div
|
|
157
|
-
ref={ref}
|
|
158
|
-
className={`flex flex-col gap-2 ${className}`.trim()}
|
|
159
|
-
{...props}
|
|
160
|
-
>
|
|
161
|
-
{/* Label con link opcional */}
|
|
162
|
-
{label && (
|
|
163
|
-
<div className="flex items-center justify-between">
|
|
164
|
-
<label className="text-sm leading-5 font-bold text-content-primary dark:text-dark-content-primary">
|
|
165
|
-
{label}
|
|
166
|
-
</label>
|
|
167
|
-
{linkText && (
|
|
168
|
-
<button
|
|
169
|
-
type="button"
|
|
170
|
-
onClick={onLinkClick}
|
|
171
|
-
disabled={disabled}
|
|
172
|
-
className={`
|
|
173
|
-
text-xs leading-4
|
|
174
|
-
text-primary-custom-600
|
|
175
|
-
hover:underline
|
|
176
|
-
dark:text-primary-custom-600
|
|
177
|
-
${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}
|
|
178
|
-
transition-colors
|
|
179
|
-
duration-200
|
|
180
|
-
`.trim().replace(/\s+/g, ' ')}
|
|
181
|
-
>
|
|
182
|
-
{linkText}
|
|
183
|
-
</button>
|
|
184
|
-
)}
|
|
185
|
-
</div>
|
|
186
|
-
)}
|
|
187
|
-
|
|
188
|
-
{/* Input con botones */}
|
|
189
|
-
<div
|
|
190
|
-
className={`
|
|
191
|
-
flex
|
|
192
|
-
items-center
|
|
193
|
-
gap-2
|
|
194
|
-
px-3
|
|
195
|
-
py-1.5
|
|
196
|
-
bg-white
|
|
197
|
-
dark:bg-dark-bg-primary
|
|
198
|
-
border
|
|
199
|
-
${borderClass}
|
|
200
|
-
${hoverClass}
|
|
201
|
-
${focusClass}
|
|
202
|
-
rounded-lg
|
|
203
|
-
transition-colors
|
|
204
|
-
duration-200
|
|
205
|
-
${disabled ? 'opacity-50 cursor-not-allowed' : ''}
|
|
206
|
-
`.trim().replace(/\s+/g, ' ')}
|
|
207
|
-
>
|
|
208
|
-
{/* Botón decrementar */}
|
|
209
|
-
<button
|
|
210
|
-
type="button"
|
|
211
|
-
onClick={handleDecrement}
|
|
212
|
-
disabled={isDecrementDisabled}
|
|
213
|
-
className={`
|
|
214
|
-
flex
|
|
215
|
-
items-center
|
|
216
|
-
justify-center
|
|
217
|
-
w-4
|
|
218
|
-
h-4
|
|
219
|
-
${isDecrementDisabled
|
|
220
|
-
? 'text-content-tertiary dark:text-content-tertiary cursor-not-allowed'
|
|
221
|
-
: 'text-content-primary dark:text-dark-content-primary hover:text-content-secondary dark:hover:text-content-secondary cursor-pointer'
|
|
222
|
-
}
|
|
223
|
-
transition-colors
|
|
224
|
-
duration-200
|
|
225
|
-
`.trim().replace(/\s+/g, ' ')}
|
|
226
|
-
aria-label="Decrementar"
|
|
227
|
-
>
|
|
228
|
-
<MinusIcon />
|
|
229
|
-
</button>
|
|
230
|
-
|
|
231
|
-
{/* Valor actual */}
|
|
232
|
-
<div className="flex-1 text-center">
|
|
233
|
-
<span
|
|
234
|
-
className={`
|
|
235
|
-
text-base leading-6
|
|
236
|
-
${currentValue === 0
|
|
237
|
-
? 'text-content-tertiary dark:text-content-tertiary'
|
|
238
|
-
: 'text-content-primary dark:text-dark-content-primary'
|
|
239
|
-
}
|
|
240
|
-
`.trim().replace(/\s+/g, ' ')}
|
|
241
|
-
>
|
|
242
|
-
{currentValue}
|
|
243
|
-
</span>
|
|
244
|
-
</div>
|
|
245
|
-
|
|
246
|
-
{/* Botón incrementar */}
|
|
247
|
-
<button
|
|
248
|
-
type="button"
|
|
249
|
-
onClick={handleIncrement}
|
|
250
|
-
disabled={isIncrementDisabled}
|
|
251
|
-
className={`
|
|
252
|
-
flex
|
|
253
|
-
items-center
|
|
254
|
-
justify-center
|
|
255
|
-
w-4
|
|
256
|
-
h-4
|
|
257
|
-
${isIncrementDisabled
|
|
258
|
-
? 'text-content-tertiary dark:text-content-tertiary cursor-not-allowed'
|
|
259
|
-
: 'text-content-primary dark:text-dark-content-primary hover:text-content-secondary dark:hover:text-content-secondary cursor-pointer'
|
|
260
|
-
}
|
|
261
|
-
transition-colors
|
|
262
|
-
duration-200
|
|
263
|
-
`.trim().replace(/\s+/g, ' ')}
|
|
264
|
-
aria-label="Incrementar"
|
|
265
|
-
>
|
|
266
|
-
<PlusIcon />
|
|
267
|
-
</button>
|
|
268
|
-
</div>
|
|
269
|
-
|
|
270
|
-
{/* Helper text */}
|
|
271
|
-
{helperText && (
|
|
272
|
-
<p
|
|
273
|
-
className={`
|
|
274
|
-
text-sm leading-5
|
|
275
|
-
${error
|
|
276
|
-
? 'text-error-content dark:text-error-content'
|
|
277
|
-
: 'text-content-tertiary dark:text-content-tertiary'
|
|
278
|
-
}
|
|
279
|
-
`.trim().replace(/\s+/g, ' ')}
|
|
280
|
-
>
|
|
281
|
-
{helperText}
|
|
282
|
-
</p>
|
|
283
|
-
)}
|
|
284
|
-
</div>
|
|
285
|
-
);
|
|
286
|
-
}
|
|
287
|
-
);
|
|
288
|
-
|
|
289
|
-
Quantity.displayName = 'Quantity';
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import type { HTMLAttributes } from 'react';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Props del componente Quantity
|
|
5
|
-
*/
|
|
6
|
-
export interface QuantityProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
7
|
-
/**
|
|
8
|
-
* Valor actual del quantity
|
|
9
|
-
*/
|
|
10
|
-
value?: number;
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Valor por defecto
|
|
14
|
-
* @default 0
|
|
15
|
-
*/
|
|
16
|
-
defaultValue?: number;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Callback cuando el valor cambia
|
|
20
|
-
*/
|
|
21
|
-
onChange?: (value: number) => void;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Valor mínimo permitido
|
|
25
|
-
* @default 0
|
|
26
|
-
*/
|
|
27
|
-
min?: number;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Valor máximo permitido
|
|
31
|
-
*/
|
|
32
|
-
max?: number;
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Label opcional
|
|
36
|
-
*/
|
|
37
|
-
label?: string;
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Texto del link opcional (aparece a la derecha del label)
|
|
41
|
-
*/
|
|
42
|
-
linkText?: string;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Callback cuando se hace click en el link
|
|
46
|
-
*/
|
|
47
|
-
onLinkClick?: () => void;
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Texto de ayuda opcional
|
|
51
|
-
*/
|
|
52
|
-
helperText?: string;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Si está en estado de error
|
|
56
|
-
* @default false
|
|
57
|
-
*/
|
|
58
|
-
error?: boolean;
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Si está deshabilitado
|
|
62
|
-
* @default false
|
|
63
|
-
*/
|
|
64
|
-
disabled?: boolean;
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Clases CSS adicionales
|
|
68
|
-
*/
|
|
69
|
-
className?: string;
|
|
70
|
-
}
|