siesa-ui-kit 1.0.2 → 1.0.3

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 (236) hide show
  1. package/package.json +2 -9
  2. package/claude/settings.local.json +0 -7
  3. package/docs/border-radius.md +0 -1261
  4. package/docs/colors.md +0 -832
  5. package/docs/dark-mode-guide.md +0 -1426
  6. package/docs/filters.md +0 -1243
  7. package/docs/icons.md +0 -1283
  8. package/docs/shadows.md +0 -1377
  9. package/docs/spacing.md +0 -1684
  10. package/docs/typography.md +0 -1268
  11. package/postcss.config.cjs +0 -6
  12. package/public/,Business Logo.png +0 -0
  13. package/public/.Siesa Logo.png +0 -0
  14. package/public/bg_siesa.png +0 -0
  15. package/public/siesa_logo_mobile.png +0 -0
  16. package/public/vite.svg +0 -1
  17. package/src/App.css +0 -42
  18. package/src/App.tsx +0 -8
  19. package/src/ButtonTest.tsx +0 -147
  20. package/src/assets/fonts/README.md +0 -261
  21. package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
  22. package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
  23. package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
  24. package/src/assets/react.svg +0 -1
  25. package/src/components/Alert/Alert.stories.tsx +0 -332
  26. package/src/components/Alert/Alert.tsx +0 -106
  27. package/src/components/Alert/Alert.types.ts +0 -54
  28. package/src/components/Avatar/Avatar.stories.tsx +0 -494
  29. package/src/components/Avatar/Avatar.tsx +0 -143
  30. package/src/components/Avatar/Avatar.types.ts +0 -53
  31. package/src/components/Badge/Badge.stories.tsx +0 -339
  32. package/src/components/Badge/Badge.tsx +0 -278
  33. package/src/components/Badge/Badge.types.ts +0 -58
  34. package/src/components/Button/Button.stories.tsx +0 -950
  35. package/src/components/Button/Button.tsx +0 -337
  36. package/src/components/Button/Button.types.ts +0 -180
  37. package/src/components/Button/icons.tsx +0 -87
  38. package/src/components/Button/index.ts +0 -3
  39. package/src/components/Checkbox/Checkbox.stories.tsx +0 -453
  40. package/src/components/Checkbox/Checkbox.tsx +0 -208
  41. package/src/components/Checkbox/Checkbox.types.ts +0 -61
  42. package/src/components/DescriptionList/DescriptionList.stories.tsx +0 -250
  43. package/src/components/DescriptionList/DescriptionList.tsx +0 -96
  44. package/src/components/DescriptionList/DescriptionList.types.ts +0 -29
  45. package/src/components/Divider/Divider.stories.tsx +0 -263
  46. package/src/components/Divider/Divider.tsx +0 -80
  47. package/src/components/Divider/Divider.types.ts +0 -24
  48. package/src/components/Dropdown/Dropdown.stories.tsx +0 -552
  49. package/src/components/Dropdown/Dropdown.tsx +0 -422
  50. package/src/components/Dropdown/Dropdown.types.ts +0 -146
  51. package/src/components/Dropdown/README.md +0 -266
  52. package/src/components/Dropdown/icons.tsx +0 -72
  53. package/src/components/Dropdown/index.ts +0 -8
  54. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +0 -317
  55. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +0 -287
  56. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +0 -111
  57. package/src/components/DropdownItemCollapsible/README.md +0 -264
  58. package/src/components/DropdownItemCollapsible/icons.tsx +0 -57
  59. package/src/components/DropdownItemCollapsible/index.ts +0 -12
  60. package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +0 -386
  61. package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +0 -216
  62. package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +0 -93
  63. package/src/components/DropdownItemHeading/README.md +0 -573
  64. package/src/components/DropdownItemHeading/icons.tsx +0 -125
  65. package/src/components/DropdownItemHeading/index.ts +0 -3
  66. package/src/components/Input/Input.stories.tsx +0 -583
  67. package/src/components/Input/Input.tsx +0 -204
  68. package/src/components/Input/Input.types.ts +0 -80
  69. package/src/components/Input/icons.tsx +0 -145
  70. package/src/components/Input/index.ts +0 -2
  71. package/src/components/LoginView/LoginView.stories.tsx +0 -148
  72. package/src/components/LoginView/LoginView.tsx +0 -426
  73. package/src/components/LoginView/LoginView.types.ts +0 -52
  74. package/src/components/LoginView/README.md +0 -396
  75. package/src/components/LoginView/icons.tsx +0 -85
  76. package/src/components/LoginView/index.ts +0 -3
  77. package/src/components/Navbar/Navbar.stories.tsx +0 -810
  78. package/src/components/Navbar/Navbar.tsx +0 -755
  79. package/src/components/Navbar/Navbar.types.ts +0 -219
  80. package/src/components/Navbar/README.md +0 -279
  81. package/src/components/Navbar/icons.tsx +0 -102
  82. package/src/components/Navbar/index.ts +0 -8
  83. package/src/components/NavigationBar/NavigationBar.stories.tsx +0 -406
  84. package/src/components/NavigationBar/NavigationBar.tsx +0 -246
  85. package/src/components/NavigationBar/NavigationBar.types.ts +0 -74
  86. package/src/components/NavigationBar/README.md +0 -469
  87. package/src/components/NavigationBar/index.ts +0 -2
  88. package/src/components/NavigationRail/NavigationRail.stories.tsx +0 -417
  89. package/src/components/NavigationRail/NavigationRail.tsx +0 -418
  90. package/src/components/NavigationRail/NavigationRail.types.ts +0 -109
  91. package/src/components/NavigationRail/README.md +0 -224
  92. package/src/components/NavigationRail/index.ts +0 -2
  93. package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +0 -667
  94. package/src/components/NavigationRailItem/NavigationRailItem.tsx +0 -313
  95. package/src/components/NavigationRailItem/NavigationRailItem.types.ts +0 -167
  96. package/src/components/NavigationRailItem/README.md +0 -476
  97. package/src/components/NavigationRailItem/index.ts +0 -2
  98. package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +0 -462
  99. package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +0 -332
  100. package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +0 -178
  101. package/src/components/NavigationRailPanel/README.md +0 -461
  102. package/src/components/NavigationRailPanel/index.ts +0 -6
  103. package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +0 -528
  104. package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +0 -378
  105. package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +0 -130
  106. package/src/components/NavigationRailTypes/README.md +0 -573
  107. package/src/components/NavigationRailTypes/icons.tsx +0 -141
  108. package/src/components/NavigationRailTypes/index.ts +0 -7
  109. package/src/components/Notification/Notification.stories.tsx +0 -513
  110. package/src/components/Notification/Notification.tsx +0 -145
  111. package/src/components/Notification/Notification.types.ts +0 -142
  112. package/src/components/Notification/README.md +0 -409
  113. package/src/components/Notification/index.ts +0 -3
  114. package/src/components/POSConvention/POSConvention.stories.tsx +0 -235
  115. package/src/components/POSConvention/POSConvention.tsx +0 -129
  116. package/src/components/POSConvention/POSConvention.types.ts +0 -38
  117. package/src/components/POSConvention/README.md +0 -123
  118. package/src/components/POSConvention/icons.tsx +0 -45
  119. package/src/components/POSConvention/index.ts +0 -3
  120. package/src/components/POSLocationButton/POSLocationButton.stories.tsx +0 -531
  121. package/src/components/POSLocationButton/POSLocationButton.tsx +0 -247
  122. package/src/components/POSLocationButton/POSLocationButton.types.ts +0 -87
  123. package/src/components/POSLocationButton/README.md +0 -253
  124. package/src/components/POSLocationButton/icons.tsx +0 -120
  125. package/src/components/POSLocationButton/index.ts +0 -14
  126. package/src/components/POSNumberButton/POSNumberButton.stories.tsx +0 -415
  127. package/src/components/POSNumberButton/POSNumberButton.tsx +0 -179
  128. package/src/components/POSNumberButton/POSNumberButton.types.ts +0 -51
  129. package/src/components/POSNumberButton/README.md +0 -321
  130. package/src/components/POSNumberButton/index.ts +0 -3
  131. package/src/components/POSProductButton/POSProductButton.stories.tsx +0 -318
  132. package/src/components/POSProductButton/POSProductButton.tsx +0 -152
  133. package/src/components/POSProductButton/POSProductButton.types.ts +0 -46
  134. package/src/components/POSProductButton/README.md +0 -269
  135. package/src/components/POSProductButton/index.ts +0 -2
  136. package/src/components/POSProductCard/POSProductCard.stories.tsx +0 -642
  137. package/src/components/POSProductCard/POSProductCard.tsx +0 -208
  138. package/src/components/POSProductCard/POSProductCard.types.ts +0 -76
  139. package/src/components/POSProductCard/README.md +0 -179
  140. package/src/components/POSProductCard/icons.tsx +0 -26
  141. package/src/components/POSProductCard/index.ts +0 -2
  142. package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +0 -753
  143. package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +0 -332
  144. package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +0 -119
  145. package/src/components/POSProductSidebarItems/README.md +0 -198
  146. package/src/components/POSProductSidebarItems/icons.tsx +0 -21
  147. package/src/components/POSProductSidebarItems/index.ts +0 -3
  148. package/src/components/POSTable/POSTable.stories.tsx +0 -737
  149. package/src/components/POSTable/POSTable.tsx +0 -401
  150. package/src/components/POSTable/POSTable.types.ts +0 -83
  151. package/src/components/POSTable/README.md +0 -286
  152. package/src/components/POSTable/index.ts +0 -7
  153. package/src/components/Pagination/Pagination.stories.tsx +0 -555
  154. package/src/components/Pagination/Pagination.tsx +0 -286
  155. package/src/components/Pagination/Pagination.types.ts +0 -93
  156. package/src/components/Pagination/README.md +0 -298
  157. package/src/components/Pagination/icons.tsx +0 -47
  158. package/src/components/Pagination/index.ts +0 -3
  159. package/src/components/Quantity/Quantity.stories.tsx +0 -457
  160. package/src/components/Quantity/Quantity.tsx +0 -289
  161. package/src/components/Quantity/Quantity.types.ts +0 -70
  162. package/src/components/Radio/Radio.stories.tsx +0 -523
  163. package/src/components/Radio/Radio.tsx +0 -170
  164. package/src/components/Radio/Radio.types.ts +0 -122
  165. package/src/components/Select/README.md +0 -299
  166. package/src/components/Select/Select.stories.tsx +0 -673
  167. package/src/components/Select/Select.tsx +0 -454
  168. package/src/components/Select/Select.types.ts +0 -148
  169. package/src/components/Select/icons.tsx +0 -50
  170. package/src/components/Select/index.ts +0 -3
  171. package/src/components/SignUpView/SignUpView.stories.tsx +0 -129
  172. package/src/components/SignUpView/SignUpView.tsx +0 -503
  173. package/src/components/SignUpView/SignUpView.types.ts +0 -58
  174. package/src/components/SignUpView/icons.tsx +0 -71
  175. package/src/components/SignUpView/index.ts +0 -3
  176. package/src/components/Switch/README.md +0 -112
  177. package/src/components/Switch/Switch.stories.tsx +0 -550
  178. package/src/components/Switch/Switch.tsx +0 -246
  179. package/src/components/Switch/Switch.types.ts +0 -67
  180. package/src/components/Table/README.md +0 -369
  181. package/src/components/Table/Table.stories.tsx +0 -805
  182. package/src/components/Table/Table.tsx +0 -688
  183. package/src/components/Table/Table.types.ts +0 -204
  184. package/src/components/Table/index.ts +0 -9
  185. package/src/components/Tabs/README.md +0 -201
  186. package/src/components/Tabs/Tabs.stories.tsx +0 -580
  187. package/src/components/Tabs/Tabs.tsx +0 -356
  188. package/src/components/Tabs/Tabs.types.ts +0 -127
  189. package/src/components/Tabs/icons.tsx +0 -129
  190. package/src/components/Tabs/index.ts +0 -11
  191. package/src/components/Textarea/Textarea.stories.tsx +0 -535
  192. package/src/components/Textarea/Textarea.tsx +0 -188
  193. package/src/components/Textarea/Textarea.types.ts +0 -54
  194. package/src/context/ThemeContext.tsx +0 -99
  195. package/src/context/index.ts +0 -1
  196. package/src/index.css +0 -29
  197. package/src/index.ts +0 -102
  198. package/src/main.tsx +0 -10
  199. package/src/views/ListView/ListView.stories.tsx +0 -329
  200. package/src/views/ListView/ListView.tsx +0 -570
  201. package/src/views/ListView/ListView.types.ts +0 -211
  202. package/src/views/ListView/icons.tsx +0 -282
  203. package/src/views/ListView/index.ts +0 -11
  204. package/src/views/LoginView/LoginView.stories.tsx +0 -148
  205. package/src/views/LoginView/LoginView.tsx +0 -426
  206. package/src/views/LoginView/LoginView.types.ts +0 -52
  207. package/src/views/LoginView/README.md +0 -396
  208. package/src/views/LoginView/icons.tsx +0 -85
  209. package/src/views/LoginView/index.ts +0 -3
  210. package/src/views/ProductsView/ProductsView.stories.tsx +0 -344
  211. package/src/views/ProductsView/ProductsView.tsx +0 -480
  212. package/src/views/ProductsView/ProductsView.types.ts +0 -238
  213. package/src/views/ProductsView/README.md +0 -312
  214. package/src/views/ProductsView/icons.tsx +0 -38
  215. package/src/views/ProductsView/index.ts +0 -8
  216. package/src/views/RecoverPasswordView/README.md +0 -269
  217. package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +0 -131
  218. package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +0 -376
  219. package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +0 -56
  220. package/src/views/RecoverPasswordView/icons.tsx +0 -17
  221. package/src/views/RecoverPasswordView/index.ts +0 -2
  222. package/src/views/SignUpView/SignUpView.stories.tsx +0 -129
  223. package/src/views/SignUpView/SignUpView.tsx +0 -503
  224. package/src/views/SignUpView/SignUpView.types.ts +0 -58
  225. package/src/views/SignUpView/icons.tsx +0 -71
  226. package/src/views/SignUpView/index.ts +0 -3
  227. package/src/views/TableLayoutView/README.md +0 -268
  228. package/src/views/TableLayoutView/TableLayoutView.stories.tsx +0 -235
  229. package/src/views/TableLayoutView/TableLayoutView.tsx +0 -461
  230. package/src/views/TableLayoutView/TableLayoutView.types.ts +0 -209
  231. package/src/views/TableLayoutView/icons.tsx +0 -113
  232. package/src/views/TableLayoutView/index.ts +0 -6
  233. package/storybook/main.ts +0 -20
  234. package/storybook/preview.tsx +0 -84
  235. package/storybook/vitest.setup.ts +0 -7
  236. package/tailwind.config.js +0 -128
@@ -1,204 +0,0 @@
1
- import React, { forwardRef, cloneElement } from 'react';
2
- import type { InputProps } from './Input.types';
3
-
4
- /**
5
- * Input - Componente de campo de entrada del sistema de diseño Siesa
6
- * Basado en especificaciones de Figma con Tailwind CSS
7
- *
8
- * Mejores prácticas implementadas:
9
- * - Orden de modificadores: {responsive}:{dark}:{state}:{utility}
10
- * - Dark mode con estrategia 'class' (darkMode: 'class')
11
- * - Focus rings adaptativos para light y dark mode
12
- * - Tokens de color consistentes con la documentación
13
- * - Sombra base para inputs con focus
14
- * - Estados hover, focus, disabled y error completos
15
- * - Typography: Paragraph Regular para texto, Label Bold para labels
16
- *
17
- * Campo de entrada de texto con soporte para:
18
- * - Estados: default, hover, focus, filled, disabled
19
- * - Validación con mensajes de error
20
- * - Iconos izquierdo y derecho
21
- * - Label y helper text
22
- * - Dark mode completo
23
- * - Accesibilidad completa
24
- *
25
- * @see docs/colors.md - Sistema de colores
26
- * @see docs/shadows.md - Sistema de sombras
27
- * @see docs/typography.md - Sistema tipográfico (Paragraph, Label)
28
- * @see docs/spacing.md - Sistema de espaciado
29
- *
30
- * @example
31
- * ```tsx
32
- * <Input
33
- * label="Email"
34
- * placeholder="tu@email.com"
35
- * leftIcon={<EnvelopeIcon />}
36
- * helperText="Ingresa tu correo electrónico"
37
- * />
38
- * ```
39
- */
40
- export const Input = forwardRef<HTMLInputElement, InputProps>(
41
- (
42
- {
43
- label,
44
- labelSecondary,
45
- helperText,
46
- error = false,
47
- errorMessage,
48
- leftIcon,
49
- rightIcon,
50
- fullWidth = false,
51
- className = '',
52
- disabled = false,
53
- id,
54
- ...props
55
- },
56
- ref
57
- ) => {
58
- // Generar ID único si no se proporciona
59
- const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;
60
-
61
- // ===== CLASES BASE DEL INPUT =====
62
- // Usando el sistema tipográfico Paragraph Regular (14px = text-sm)
63
- // Border radius rounded-md (6px) consistente con Button
64
- const baseInputClasses = `
65
- w-full
66
- px-3
67
- py-1.5
68
- text-sm
69
- leading-6
70
- font-normal
71
- text-content-primary
72
- bg-bg-primary
73
- border
74
- border-border-primary
75
- rounded-md
76
- outline-none
77
- transition-all
78
- duration-150
79
- placeholder:text-content-tertiary
80
- dark:bg-dark-bg-primary
81
- dark:border-dark-border-primary
82
- dark:text-dark-content-primary
83
- dark:placeholder:text-dark-content-tertiary
84
- `;
85
-
86
- // ===== CLASES PARA ESTADOS INTERACTIVOS =====
87
- // Orden de modificadores: {responsive}:{dark}:{state}:{utility}
88
- // Focus rings adaptativos siguiendo el patrón de Button
89
- const interactiveClasses = !disabled
90
- ? `
91
- hover:border-primary-custom-600
92
- focus:border-primary-custom-600
93
- focus:ring-2
94
- focus:ring-primary-custom-400
95
- focus:ring-offset-2
96
- dark:hover:border-dark-border-custom
97
- dark:focus:border-dark-border-custom
98
- dark:focus:ring-dark-border-custom
99
- dark:focus:ring-offset-dark-bg-primary
100
- `
101
- : `
102
- opacity-50
103
- cursor-not-allowed
104
- bg-bg-secondary
105
- dark:bg-dark-bg-secondary
106
- `;
107
-
108
- // ===== CLASES PARA ESTADO DE ERROR =====
109
- // Los colores de error son los mismos en light y dark mode
110
- const errorClasses = error
111
- ? `
112
- !border-error-border
113
- focus:!ring-error-border/30
114
- focus:!ring-offset-2
115
- dark:!border-error-border
116
- dark:focus:!ring-error-border/30
117
- dark:focus:!ring-offset-dark-bg-primary
118
- `
119
- : '';
120
-
121
- // ===== CLASES DEL CONTENEDOR =====
122
- const containerClasses = fullWidth ? 'w-full' : 'w-[265px]';
123
-
124
- // ===== RENDERIZAR ICONOS =====
125
- // Clonar iconos con estilos apropiados y dark mode completo
126
- const renderIcon = (icon: React.ReactElement | undefined) => {
127
- if (!icon) return null;
128
- const existingClassName = (icon.props as any).className || '';
129
- return cloneElement(icon as React.ReactElement<any>, {
130
- className: `w-4 h-4 text-content-tertiary dark:text-dark-content-tertiary ${existingClassName}`,
131
- });
132
- };
133
-
134
- return (
135
- <div className={`flex flex-col gap-2 ${containerClasses} ${className}`}>
136
- {/* Label */}
137
- {label && (
138
- <label
139
- htmlFor={inputId}
140
- className="flex items-center w-full font-bold text-sm leading-5 text-content-primary dark:text-dark-content-primary"
141
- >
142
- <span className="flex-1">{label}</span>
143
- {labelSecondary && (
144
- <span className="text-xs leading-4 text-primary-custom-600 dark:text-primary-custom-600">
145
- {labelSecondary}
146
- </span>
147
- )}
148
- </label>
149
- )}
150
-
151
- {/* Input Container */}
152
- <div className="relative flex items-center">
153
- {/* Left Icon */}
154
- {leftIcon && (
155
- <div className="absolute left-3 pointer-events-none">
156
- {renderIcon(leftIcon)}
157
- </div>
158
- )}
159
-
160
- {/* Input Field */}
161
- <input
162
- ref={ref}
163
- id={inputId}
164
- disabled={disabled}
165
- className={`
166
- ${baseInputClasses}
167
- ${interactiveClasses}
168
- ${errorClasses}
169
- ${leftIcon ? 'pl-9' : ''}
170
- ${rightIcon ? 'pr-9' : ''}
171
- `.trim().replace(/\s+/g, ' ')}
172
- {...props}
173
- />
174
-
175
- {/* Right Icon */}
176
- {rightIcon && (
177
- <div className="absolute right-3 pointer-events-none">
178
- {renderIcon(rightIcon)}
179
- </div>
180
- )}
181
- </div>
182
-
183
- {/* Helper Text or Error Message */}
184
- {(helperText || errorMessage) && (
185
- <p
186
- className={`
187
- text-xs
188
- leading-5
189
- ${
190
- error
191
- ? 'text-error-content dark:text-error-content'
192
- : 'text-content-tertiary dark:text-dark-content-tertiary'
193
- }
194
- `.trim().replace(/\s+/g, ' ')}
195
- >
196
- {error && errorMessage ? errorMessage : helperText}
197
- </p>
198
- )}
199
- </div>
200
- );
201
- }
202
- );
203
-
204
- Input.displayName = 'Input';
@@ -1,80 +0,0 @@
1
- import type { ReactElement, InputHTMLAttributes } from 'react';
2
-
3
- /**
4
- * Estados visuales del Input
5
- * @description Tipo de referencia para documentar los estados posibles del Input.
6
- * Los estados se manejan automáticamente mediante props (disabled) y pseudo-clases CSS (:hover, :focus)
7
- */
8
- export type InputState = 'default' | 'hover' | 'focus' | 'filled' | 'disabled';
9
-
10
- /**
11
- * Props del componente Input
12
- *
13
- * @see docs/colors.md - Sistema de colores
14
- * @see docs/typography.md - Sistema tipográfico
15
- * @see docs/spacing.md - Sistema de espaciado
16
- * @see docs/shadows.md - Sistema de sombras
17
- */
18
- export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {
19
- /**
20
- * Etiqueta del campo de entrada
21
- * @description Texto descriptivo que se muestra encima del input
22
- * @example "Email", "Nombre completo", "Contraseña"
23
- */
24
- label?: string;
25
-
26
- /**
27
- * Texto secundario junto al label (opcional)
28
- * @description Se muestra alineado a la derecha del label, útil para indicar campos opcionales
29
- * @example "Optional", "Opcional"
30
- */
31
- labelSecondary?: string;
32
-
33
- /**
34
- * Texto de ayuda debajo del input
35
- * @description Proporciona información adicional o instrucciones para el usuario
36
- * @example "Ingresa tu correo electrónico", "Mínimo 8 caracteres"
37
- */
38
- helperText?: string;
39
-
40
- /**
41
- * Indica si hay un error de validación
42
- * @description Cambia el estilo del input para indicar error (borde rojo)
43
- * @default false
44
- */
45
- error?: boolean;
46
-
47
- /**
48
- * Mensaje de error a mostrar (reemplaza helperText cuando error=true)
49
- * @description Se muestra en rojo debajo del input cuando hay un error
50
- * @example "Este campo es requerido", "Formato de email inválido"
51
- */
52
- errorMessage?: string;
53
-
54
- /**
55
- * Icono a mostrar a la izquierda del input
56
- * @description Ayuda a identificar el tipo de campo visualmente
57
- * @example <EnvelopeIcon />, <UserIcon />, <LockClosedIcon />
58
- */
59
- leftIcon?: ReactElement;
60
-
61
- /**
62
- * Icono a mostrar a la derecha del input
63
- * @description Útil para acciones como mostrar/ocultar contraseña o limpiar campo
64
- * @example <EyeIcon />, <XMarkIcon />, <CheckIcon />
65
- */
66
- rightIcon?: ReactElement;
67
-
68
- /**
69
- * Si el input ocupa todo el ancho del contenedor
70
- * @description Por defecto usa w-[265px], con fullWidth usa w-full
71
- * @default false
72
- */
73
- fullWidth?: boolean;
74
-
75
- /**
76
- * Clases CSS adicionales para personalizar el componente
77
- * @description Se aplican al contenedor principal del input
78
- */
79
- className?: string;
80
- }
@@ -1,145 +0,0 @@
1
- /**
2
- * Icons para Input Component
3
- * Basado en Heroicons Micro
4
- */
5
-
6
- export const EnvelopeIcon = () => (
7
- <svg
8
- xmlns="http://www.w3.org/2000/svg"
9
- viewBox="0 0 16 16"
10
- fill="currentColor"
11
- className="w-4 h-4"
12
- >
13
- <path d="M2.5 3A1.5 1.5 0 0 0 1 4.5v.793c.026.009.051.02.076.032L7.674 8.51c.206.1.446.1.652 0l6.598-3.185A.755.755 0 0 1 15 5.293V4.5A1.5 1.5 0 0 0 13.5 3h-11Z" />
14
- <path d="M15 6.954 8.978 9.86a2.25 2.25 0 0 1-1.956 0L1 6.954V11.5A1.5 1.5 0 0 0 2.5 13h11a1.5 1.5 0 0 0 1.5-1.5V6.954Z" />
15
- </svg>
16
- );
17
-
18
- export const QuestionMarkCircleIcon = () => (
19
- <svg
20
- xmlns="http://www.w3.org/2000/svg"
21
- viewBox="0 0 16 16"
22
- fill="currentColor"
23
- className="w-4 h-4"
24
- >
25
- <path
26
- fillRule="evenodd"
27
- d="M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM6.75 6.5a1.25 1.25 0 1 1 2.5 0 .75.75 0 0 0 1.5 0 2.75 2.75 0 0 0-4.25-2.308.75.75 0 0 0 .75 1.298A1.25 1.25 0 0 1 6.75 6.5ZM8 10a.75.75 0 0 0-.75.75v.5a.75.75 0 0 0 1.5 0v-.5A.75.75 0 0 0 8 10Z"
28
- clipRule="evenodd"
29
- />
30
- </svg>
31
- );
32
-
33
- export const UserIcon = () => (
34
- <svg
35
- xmlns="http://www.w3.org/2000/svg"
36
- viewBox="0 0 16 16"
37
- fill="currentColor"
38
- className="w-4 h-4"
39
- >
40
- <path d="M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM12.735 14c.618 0 1.093-.561.872-1.139a6.002 6.002 0 0 0-11.215 0c-.22.578.254 1.139.872 1.139h9.47Z" />
41
- </svg>
42
- );
43
-
44
- export const LockClosedIcon = () => (
45
- <svg
46
- xmlns="http://www.w3.org/2000/svg"
47
- viewBox="0 0 16 16"
48
- fill="currentColor"
49
- className="w-4 h-4"
50
- >
51
- <path
52
- fillRule="evenodd"
53
- d="M8 1a3.5 3.5 0 0 0-3.5 3.5V7A1.5 1.5 0 0 0 3 8.5v5A1.5 1.5 0 0 0 4.5 15h7a1.5 1.5 0 0 0 1.5-1.5v-5A1.5 1.5 0 0 0 11.5 7V4.5A3.5 3.5 0 0 0 8 1Zm2 6V4.5a2 2 0 1 0-4 0V7h4Z"
54
- clipRule="evenodd"
55
- />
56
- </svg>
57
- );
58
-
59
- export const MagnifyingGlassIcon = () => (
60
- <svg
61
- xmlns="http://www.w3.org/2000/svg"
62
- viewBox="0 0 16 16"
63
- fill="currentColor"
64
- className="w-4 h-4"
65
- >
66
- <path
67
- fillRule="evenodd"
68
- d="M9.965 11.026a5 5 0 1 1 1.06-1.06l2.755 2.754a.75.75 0 1 1-1.06 1.06l-2.755-2.754ZM10.5 7a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0Z"
69
- clipRule="evenodd"
70
- />
71
- </svg>
72
- );
73
-
74
- export const EyeIcon = () => (
75
- <svg
76
- xmlns="http://www.w3.org/2000/svg"
77
- viewBox="0 0 16 16"
78
- fill="currentColor"
79
- className="w-4 h-4"
80
- >
81
- <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
82
- <path
83
- fillRule="evenodd"
84
- d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
85
- clipRule="evenodd"
86
- />
87
- </svg>
88
- );
89
-
90
- export const EyeSlashIcon = () => (
91
- <svg
92
- xmlns="http://www.w3.org/2000/svg"
93
- viewBox="0 0 16 16"
94
- fill="currentColor"
95
- className="w-4 h-4"
96
- >
97
- <path
98
- fillRule="evenodd"
99
- d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z"
100
- clipRule="evenodd"
101
- />
102
- <path d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z" />
103
- </svg>
104
- );
105
-
106
- export const XMarkIcon = () => (
107
- <svg
108
- xmlns="http://www.w3.org/2000/svg"
109
- viewBox="0 0 16 16"
110
- fill="currentColor"
111
- className="w-4 h-4"
112
- >
113
- <path d="M5.28 4.22a.75.75 0 0 0-1.06 1.06L6.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L8 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L9.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L8 6.94 5.28 4.22Z" />
114
- </svg>
115
- );
116
-
117
- export const CheckIcon = () => (
118
- <svg
119
- xmlns="http://www.w3.org/2000/svg"
120
- viewBox="0 0 16 16"
121
- fill="currentColor"
122
- className="w-4 h-4"
123
- >
124
- <path
125
- fillRule="evenodd"
126
- d="M12.416 3.376a.75.75 0 0 1 .208 1.04l-5 7.5a.75.75 0 0 1-1.154.114l-3-3a.75.75 0 0 1 1.06-1.06l2.353 2.353 4.493-6.74a.75.75 0 0 1 1.04-.207Z"
127
- clipRule="evenodd"
128
- />
129
- </svg>
130
- );
131
-
132
- export const ExclamationCircleIcon = () => (
133
- <svg
134
- xmlns="http://www.w3.org/2000/svg"
135
- viewBox="0 0 16 16"
136
- fill="currentColor"
137
- className="w-4 h-4"
138
- >
139
- <path
140
- fillRule="evenodd"
141
- d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14ZM8 4a.75.75 0 0 1 .75.75v3a.75.75 0 0 1-1.5 0v-3A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"
142
- clipRule="evenodd"
143
- />
144
- </svg>
145
- );
@@ -1,2 +0,0 @@
1
- export { Input } from './Input';
2
- export type { InputProps, InputState } from './Input.types';
@@ -1,148 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { LoginView } from './LoginView';
3
-
4
- const meta = {
5
- title: 'Siesa UI Kit/LoginView',
6
- component: LoginView,
7
- parameters: {
8
- layout: 'fullscreen',
9
- docs: {
10
- description: {
11
- component: 'Vista completa de inicio de sesión del sistema Siesa.',
12
- },
13
- },
14
- },
15
- tags: ['autodocs'],
16
- argTypes: {
17
- onSubmit: {
18
- action: 'submit',
19
- description: 'Handler cuando se envía el formulario con (email, password)',
20
- },
21
- onForgotPassword: {
22
- action: 'forgot-password',
23
- description: 'Handler cuando se hace click en "Olvidé mi Contraseña"',
24
- },
25
- onSignUp: {
26
- action: 'sign-up',
27
- description: 'Handler cuando se hace click en "¿No tienes una cuenta?"',
28
- },
29
- isLoading: {
30
- control: 'boolean',
31
- description: 'Si el formulario está en estado de carga',
32
- },
33
- errorMessage: {
34
- control: 'text',
35
- description: 'Mensaje de error general a mostrar',
36
- },
37
- showBackground: {
38
- control: 'boolean',
39
- description: 'Si se muestra el fondo decorativo con imagen',
40
- },
41
- variant: {
42
- control: 'select',
43
- options: ['responsive', 'mobile', 'desktop'],
44
- description: 'Variante de visualización: responsive (adapta al viewport), mobile (siempre mobile), desktop (siempre desktop)',
45
- defaultValue: 'responsive',
46
- },
47
- },
48
- } satisfies Meta<typeof LoginView>;
49
-
50
- export default meta;
51
- type Story = StoryObj<typeof meta>;
52
-
53
- // ============================================
54
- // 1. DESKTOP
55
- // ============================================
56
- export const Desktop: Story = {
57
- render: () => (
58
- <div className="min-h-screen w-full">
59
- <LoginView
60
- onSubmit={(email, password) => {
61
- console.log('Login:', { email, password });
62
- alert(`Login con:\nEmail: ${email}\nPassword: ${password}`);
63
- }}
64
- onForgotPassword={() => {
65
- console.log('Forgot password clicked');
66
- alert('Redirigiendo a recuperación de contraseña...');
67
- }}
68
- onSignUp={() => {
69
- console.log('Sign up clicked');
70
- alert('Redirigiendo a registro...');
71
- }}
72
- />
73
- </div>
74
- ),
75
- };
76
-
77
- // ============================================
78
- // 2. CON ESTADO DE CARGA
79
- // ============================================
80
- export const Loading: Story = {
81
- render: () => (
82
- <div className="min-h-screen w-full">
83
- <LoginView
84
- isLoading={true}
85
- onSubmit={(email, password) => {
86
- console.log('Login:', { email, password });
87
- }}
88
- onForgotPassword={() => {
89
- console.log('Forgot password clicked');
90
- }}
91
- onSignUp={() => {
92
- console.log('Sign up clicked');
93
- }}
94
- />
95
- </div>
96
- ),
97
- };
98
-
99
- // ============================================
100
- // 3. CON MENSAJE DE ERROR
101
- // ============================================
102
- export const WithError: Story = {
103
- render: () => (
104
- <div className="min-h-screen w-full">
105
- <LoginView
106
- errorMessage="Credenciales incorrectas. Por favor verifica tu email y contraseña."
107
- onSubmit={(email, password) => {
108
- console.log('Login:', { email, password });
109
- alert(`Login con:\nEmail: ${email}\nPassword: ${password}`);
110
- }}
111
- onForgotPassword={() => {
112
- console.log('Forgot password clicked');
113
- alert('Redirigiendo a recuperación de contraseña...');
114
- }}
115
- onSignUp={() => {
116
- console.log('Sign up clicked');
117
- alert('Redirigiendo a registro...');
118
- }}
119
- />
120
- </div>
121
- ),
122
- };
123
-
124
- // ============================================
125
- // 4. SIN FONDO DECORATIVO
126
- // ============================================
127
- export const WithoutBackground: Story = {
128
- render: () => (
129
- <div className="min-h-screen w-full bg-gray-100 dark:bg-gray-900">
130
- <LoginView
131
- showBackground={false}
132
- onSubmit={(email, password) => {
133
- console.log('Login:', { email, password });
134
- alert(`Login con:\nEmail: ${email}\nPassword: ${password}`);
135
- }}
136
- onForgotPassword={() => {
137
- console.log('Forgot password clicked');
138
- alert('Redirigiendo a recuperación de contraseña...');
139
- }}
140
- onSignUp={() => {
141
- console.log('Sign up clicked');
142
- alert('Redirigiendo a registro...');
143
- }}
144
- />
145
- </div>
146
- ),
147
- };
148
-