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 type { ReactNode } from 'react';
2
-
3
- /**
4
- * Dirección de ordenamiento para columnas sortables
5
- */
6
- export type SortDirection = 'asc' | 'desc' | null;
7
-
8
- /**
9
- * Definición de una columna de la tabla
10
- */
11
- export interface TableColumn<T = any> {
12
- /**
13
- * Título que se muestra en el header de la columna
14
- */
15
- header: string;
16
-
17
- /**
18
- * Key del objeto de datos para acceder al valor
19
- * Puede ser una string o una función que retorna el valor
20
- */
21
- accessor: keyof T | ((row: T) => any);
22
-
23
- /**
24
- * Si la columna es sortable (ordenable)
25
- * @default false
26
- */
27
- sortable?: boolean;
28
-
29
- /**
30
- * Función custom para renderizar el contenido de la celda
31
- * Si no se provee, se usa el valor del accessor directamente
32
- */
33
- render?: (value: any, row: T, index: number) => ReactNode;
34
-
35
- /**
36
- * Alineación del contenido de la celda
37
- * @default 'left'
38
- */
39
- align?: 'left' | 'center' | 'right';
40
-
41
- /**
42
- * Ancho de la columna (CSS width)
43
- */
44
- width?: string;
45
- }
46
-
47
- /**
48
- * Props de paginación para la tabla
49
- */
50
- export interface PaginationProps {
51
- /**
52
- * Página actual (1-indexed)
53
- */
54
- currentPage: number;
55
-
56
- /**
57
- * Total de páginas
58
- */
59
- totalPages: number;
60
-
61
- /**
62
- * Callback cuando cambia la página
63
- */
64
- onPageChange: (page: number) => void;
65
-
66
- /**
67
- * Texto del botón "Anterior"
68
- * @default 'Anterior'
69
- */
70
- previousLabel?: string;
71
-
72
- /**
73
- * Texto del botón "Siguiente"
74
- * @default 'Siguiente'
75
- */
76
- nextLabel?: string;
77
- }
78
-
79
- /**
80
- * Props del componente Table
81
- */
82
- export interface TableProps<T = any> {
83
- /**
84
- * Título opcional de la tabla
85
- */
86
- title?: string;
87
-
88
- /**
89
- * Definición de las columnas
90
- */
91
- columns: TableColumn<T>[];
92
-
93
- /**
94
- * Datos de las filas
95
- */
96
- data: T[];
97
-
98
- /**
99
- * Variante visual de la tabla
100
- * @default 'basic'
101
- */
102
- variant?: 'basic' | 'fullWidth' | 'striped' | 'grid';
103
-
104
- /**
105
- * Si se muestra el borde del container
106
- * @default true
107
- */
108
- showBorder?: boolean;
109
-
110
- /**
111
- * Si se muestra la sombra del container
112
- * @default true
113
- */
114
- showShadow?: boolean;
115
-
116
- /**
117
- * Callback cuando se hace click en una fila
118
- */
119
- onRowClick?: (row: T, index: number) => void;
120
-
121
- /**
122
- * Callback cuando cambia el sort
123
- */
124
- onSort?: (column: keyof T | string, direction: SortDirection) => void;
125
-
126
- /**
127
- * Estado de sort controlado desde fuera
128
- */
129
- sortColumn?: keyof T | string;
130
-
131
- /**
132
- * Dirección de sort controlada desde fuera
133
- */
134
- sortDirection?: SortDirection;
135
-
136
- /**
137
- * Si la tabla debe ocupar todo el ancho disponible
138
- * @default false
139
- */
140
- fullWidth?: boolean;
141
-
142
- /**
143
- * Texto a mostrar cuando no hay datos
144
- * @default 'No hay datos disponibles'
145
- */
146
- emptyMessage?: string;
147
-
148
- /**
149
- * Si se está cargando la información
150
- * @default false
151
- */
152
- loading?: boolean;
153
-
154
- /**
155
- * Número de filas skeleton a mostrar cuando loading=true
156
- * @default 5
157
- */
158
- loadingRows?: number;
159
-
160
- /**
161
- * Props de paginación (si se provee, se muestra paginación)
162
- */
163
- pagination?: PaginationProps;
164
-
165
- /**
166
- * Clases CSS adicionales para el container
167
- */
168
- className?: string;
169
-
170
- /**
171
- * ID único para accesibilidad
172
- */
173
- id?: string;
174
- }
175
-
176
- /**
177
- * Props del TableHeader (uso interno)
178
- */
179
- export interface TableHeaderProps<T = any> {
180
- column: TableColumn<T>;
181
- sortable: boolean;
182
- sorted: boolean;
183
- sortDirection: SortDirection;
184
- onSort: () => void;
185
- }
186
-
187
- /**
188
- * Props del TableCell (uso interno)
189
- */
190
- export interface TableCellProps {
191
- children: ReactNode;
192
- align?: 'left' | 'center' | 'right';
193
- width?: string;
194
- }
195
-
196
- /**
197
- * Props del TableRow (uso interno)
198
- */
199
- export interface TableRowProps {
200
- children: ReactNode;
201
- onClick?: () => void;
202
- striped?: boolean;
203
- index: number;
204
- }
@@ -1,9 +0,0 @@
1
- export { Table } from './Table';
2
- export type {
3
- TableProps,
4
- TableColumn,
5
- SortDirection,
6
- TableHeaderProps,
7
- TableCellProps,
8
- TableRowProps,
9
- } from './Table.types';
@@ -1,201 +0,0 @@
1
- # Tabs
2
-
3
- Componente de navegación por pestañas del sistema de diseño Siesa UI Kit.
4
-
5
- ## Descripción
6
-
7
- El componente `Tabs` proporciona una interfaz de navegación horizontal que permite a los usuarios cambiar entre diferentes vistas o secciones de contenido. Está diseñado siguiendo las especificaciones de Figma con soporte completo para dark mode.
8
-
9
- ## Características
10
-
11
- - ✅ Estados: Default, Hover, Focus, Active, Disabled
12
- - ✅ Soporte para iconos (Heroicons Micro 16x16)
13
- - ✅ Badge de notificación con contador
14
- - ✅ Dark mode completo
15
- - ✅ Modo controlado y no controlado
16
- - ✅ Accesibilidad con ARIA roles
17
- - ✅ TypeScript estricto
18
-
19
- ## Instalación
20
-
21
- El componente está incluido en el Siesa UI Kit. Importa desde la carpeta de componentes:
22
-
23
- ```tsx
24
- import { Tabs, Tab } from '@/components/Tabs';
25
- import type { TabItem } from '@/components/Tabs';
26
- ```
27
-
28
- ## Uso Básico
29
-
30
- ### Modo No Controlado
31
-
32
- ```tsx
33
- <Tabs
34
- items={[
35
- { id: 'inicio', label: 'Inicio' },
36
- { id: 'perfil', label: 'Perfil' },
37
- { id: 'configuracion', label: 'Configuración' },
38
- ]}
39
- defaultActiveId="inicio"
40
- />
41
- ```
42
-
43
- ### Modo Controlado
44
-
45
- ```tsx
46
- const [activeTab, setActiveTab] = useState('inicio');
47
-
48
- <Tabs
49
- items={[
50
- { id: 'inicio', label: 'Inicio' },
51
- { id: 'perfil', label: 'Perfil' },
52
- { id: 'configuracion', label: 'Configuración' },
53
- ]}
54
- activeId={activeTab}
55
- onChange={setActiveTab}
56
- />
57
- ```
58
-
59
- ### Con Iconos
60
-
61
- ```tsx
62
- import { HomeIcon, UserIcon, CogIcon } from '@/components/Tabs';
63
-
64
- <Tabs
65
- items={[
66
- { id: 'inicio', label: 'Inicio', icon: <HomeIcon className="w-3 h-3" /> },
67
- { id: 'perfil', label: 'Perfil', icon: <UserIcon className="w-3 h-3" /> },
68
- { id: 'configuracion', label: 'Configuración', icon: <CogIcon className="w-3 h-3" /> },
69
- ]}
70
- activeId={activeTab}
71
- onChange={setActiveTab}
72
- />
73
- ```
74
-
75
- ### Con Badges de Notificación
76
-
77
- ```tsx
78
- <Tabs
79
- items={[
80
- { id: 'mensajes', label: 'Mensajes', badge: 5 },
81
- { id: 'notificaciones', label: 'Notificaciones', badge: 12 },
82
- { id: 'tareas', label: 'Tareas' },
83
- ]}
84
- activeId={activeTab}
85
- onChange={setActiveTab}
86
- />
87
- ```
88
-
89
- ### Full Width
90
-
91
- ```tsx
92
- <Tabs
93
- items={[...]}
94
- activeId={activeTab}
95
- onChange={setActiveTab}
96
- fullWidth
97
- />
98
- ```
99
-
100
- ## Props
101
-
102
- ### TabsProps (Contenedor)
103
-
104
- | Prop | Tipo | Default | Descripción |
105
- |------|------|---------|-------------|
106
- | `items` | `TabItem[]` | **requerido** | Lista de tabs a mostrar |
107
- | `activeId` | `string` | - | ID del tab seleccionado (modo controlado) |
108
- | `defaultActiveId` | `string` | - | ID del tab inicial (modo no controlado) |
109
- | `onChange` | `(id: string) => void` | - | Callback al cambiar de tab |
110
- | `fullWidth` | `boolean` | `false` | Si los tabs ocupan todo el ancho |
111
- | `size` | `'sm' \| 'base' \| 'lg'` | `'base'` | Tamaño (espaciado entre tabs) |
112
- | `showBorder` | `boolean` | `true` | Mostrar línea inferior |
113
- | `className` | `string` | - | Clases CSS adicionales |
114
-
115
- ### TabItem
116
-
117
- | Prop | Tipo | Default | Descripción |
118
- |------|------|---------|-------------|
119
- | `id` | `string` | **requerido** | Identificador único |
120
- | `label` | `string` | **requerido** | Texto del tab |
121
- | `icon` | `ReactNode` | - | Icono a la izquierda |
122
- | `badge` | `number` | - | Número de notificaciones |
123
- | `disabled` | `boolean` | `false` | Si está deshabilitado |
124
-
125
- ### TabProps (Tab Individual)
126
-
127
- | Prop | Tipo | Default | Descripción |
128
- |------|------|---------|-------------|
129
- | `label` | `string` | **requerido** | Texto del tab |
130
- | `active` | `boolean` | `false` | Si está activo |
131
- | `icon` | `ReactNode` | - | Icono a la izquierda |
132
- | `badge` | `number` | - | Número de notificaciones |
133
- | `disabled` | `boolean` | `false` | Si está deshabilitado |
134
- | `onClick` | `() => void` | - | Callback al hacer click |
135
- | `className` | `string` | - | Clases CSS adicionales |
136
- | `ariaLabel` | `string` | - | Etiqueta accesible |
137
-
138
- ## Iconos Incluidos
139
-
140
- El componente incluye los siguientes iconos Heroicons Micro (16x16):
141
-
142
- - `CheckIcon` - Icono de verificación
143
- - `HomeIcon` - Icono de inicio
144
- - `UserIcon` - Icono de usuario
145
- - `CogIcon` - Icono de configuración
146
- - `BellIcon` - Icono de notificaciones
147
- - `DocumentIcon` - Icono de documento
148
- - `ChartIcon` - Icono de estadísticas
149
-
150
- ## Especificaciones de Diseño
151
-
152
- ### Dimensiones (según Figma)
153
-
154
- - **Padding interno**: 8px
155
- - **Gap entre icono y texto**: 4px
156
- - **Altura del indicador activo**: 2px
157
- - **Border radius**: 8px (rounded-lg)
158
-
159
- ### Tipografía
160
-
161
- - **Texto**: Label Small (14px Bold, line-height 20px)
162
- - **Badge**: 12px Regular
163
-
164
- ### Colores
165
-
166
- **Light Mode:**
167
- - Texto inactivo: `#18181b` (content-primary)
168
- - Texto activo: `#0e79fd` (primary-custom-600)
169
- - Hover overlay: `rgba(0,0,0,0.03)`
170
- - Indicador activo: `#0e79fd`
171
-
172
- **Dark Mode:**
173
- - Texto inactivo: `#ffffff` (dark-content-primary)
174
- - Texto activo: `#0e79fd` (primary-custom-600)
175
- - Hover overlay: `rgba(255,255,255,0.05)`
176
- - Indicador activo: `#0e79fd`
177
-
178
- ## Accesibilidad
179
-
180
- El componente implementa las siguientes características de accesibilidad:
181
-
182
- - `role="tablist"` en el contenedor
183
- - `role="tab"` en cada tab individual
184
- - `aria-selected` para indicar el tab activo
185
- - `aria-disabled` para tabs deshabilitados
186
- - Navegación con teclado (Tab para focus)
187
- - Focus visible con anillo de foco
188
-
189
- ## Mejores Prácticas
190
-
191
- 1. **Usa iconos consistentemente** - Si un tab tiene icono, considera agregar iconos a todos
192
- 2. **Badges para notificaciones** - Usa badges solo cuando hay información relevante para el usuario
193
- 3. **Deshabilita en lugar de ocultar** - Si un tab no está disponible, deshabilítalo en lugar de ocultarlo
194
- 4. **Textos cortos** - Mantén los labels de los tabs concisos
195
- 5. **Orden lógico** - Organiza los tabs en orden de importancia o flujo de trabajo
196
-
197
- ## Referencias
198
-
199
- - **Figma**: [Tabs Component](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4514-29083)
200
- - **Documentación de colores**: `docs/colors.md`
201
- - **Documentación de tipografía**: `docs/typography.md`