@axzydev/axzy_ui_system 1.2.11 → 1.2.12

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 (44) hide show
  1. package/dist/index.cjs +179 -176
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.css +1 -1
  4. package/dist/index.css.map +1 -1
  5. package/dist/index.d.cts +1 -1
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.js +179 -176
  8. package/dist/index.js.map +1 -1
  9. package/package.json +1 -1
  10. package/src/components/avatar/avatar.tsx +1 -1
  11. package/src/components/calendar/calendar.tsx +1 -1
  12. package/src/components/card/card.tsx +11 -8
  13. package/src/components/data-table/dataTable.tsx +3 -3
  14. package/src/components/dialog/dialog.tsx +2 -2
  15. package/src/components/divider/divider.tsx +1 -1
  16. package/src/components/dropfile/dropfile.tsx +14 -14
  17. package/src/components/form-builder/fieldRenderer.tsx +3 -3
  18. package/src/components/input/input.tsx +7 -7
  19. package/src/components/loader/loader.tsx +1 -1
  20. package/src/components/navbar/navbar.tsx +10 -10
  21. package/src/components/pagination/pagination.tsx +11 -11
  22. package/src/components/search-select/search-select.tsx +8 -8
  23. package/src/components/searchTable/components/EditableCell.tsx +1 -1
  24. package/src/components/searchTable/components/PaginationControls.tsx +2 -2
  25. package/src/components/searchTable/components/PaginationInfo.tsx +1 -1
  26. package/src/components/searchTable/components/SearchAndSortBar.tsx +1 -1
  27. package/src/components/searchTable/components/SearchInput.tsx +1 -1
  28. package/src/components/searchTable/components/SortButton.tsx +3 -3
  29. package/src/components/searchTable/components/TableHeader.tsx +1 -1
  30. package/src/components/searchTable/components/TableRow.tsx +4 -4
  31. package/src/components/searchTable/searchTable.tsx +2 -2
  32. package/src/components/select/select.tsx +2 -2
  33. package/src/components/sidebar/sidebar.tsx +15 -15
  34. package/src/components/slider/slider.tsx +3 -3
  35. package/src/components/stepper/stepper.tsx +5 -5
  36. package/src/components/table/table.tsx +3 -3
  37. package/src/components/tabs/tabs.tsx +4 -4
  38. package/src/components/textarea/textarea.tsx +3 -3
  39. package/src/components/theme-provider/themeProvider.tsx +32 -32
  40. package/src/components/time-picker/timePicker.tsx +5 -5
  41. package/src/components/topbar/topbar.tsx +6 -6
  42. package/src/index.css +23 -0
  43. package/src/theme/theme.ts +17 -17
  44. package/src/utils/styles.ts +5 -5
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "packageManager": "pnpm@10.34.0",
5
5
  "private": false,
6
6
  "license": "MIT",
7
- "version": "1.2.11",
7
+ "version": "1.2.12",
8
8
  "type": "module",
9
9
  "sideEffects": [
10
10
  "*.css"
@@ -12,7 +12,7 @@ const sizeMap: Record<AvatarSize, { container: string; text: string }> = {
12
12
 
13
13
  const DEFAULT_COLOR = "bg-primary-600";
14
14
  const DEFAULT_BG = "var(--color-primary-600)";
15
- const DEFAULT_SHADOW = "0 4px 14px 0 rgba(37, 99, 235, 0.35)";
15
+ const DEFAULT_SHADOW = "0 6px 16px -2px rgba(37, 99, 235, 0.25)";
16
16
 
17
17
  // Un valor tipo "#8b5cf6", "rgb(...)", "hsl(...)" o "var(--...)" se aplica
18
18
  // como color inline; cualquier otra cosa se trata como clase de Tailwind
@@ -371,7 +371,7 @@ export const ITCalendar: React.FC<ITCalendarProps> = ({
371
371
  {/* Weekday Headers */}
372
372
  <div className="grid grid-cols-7 mb-2">
373
373
  {['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom'].map(day => (
374
- <ITText key={day} as="div" className="text-center text-xs font-semibold text-gray-400 uppercase py-1">
374
+ <ITText key={day} as="div" className="text-center text-xs font-semibold text-secondary-400 uppercase py-1">
375
375
  {day}
376
376
  </ITText>
377
377
  ))}
@@ -33,15 +33,18 @@ export default function ITCard({
33
33
 
34
34
  const containerStyle: React.CSSProperties = {
35
35
  backgroundColor: "var(--card-bg, #ffffff)",
36
- borderColor: "var(--card-border, #e2e8f0)",
36
+ borderColor: "var(--card-border, rgba(15, 23, 42, 0.06))",
37
37
  borderWidth: "1px",
38
- borderRadius: "var(--card-radius, 0.75rem)",
38
+ borderRadius: "var(--card-radius, var(--radius-2xl))",
39
+ // Soft depth: every card floats a little at rest; interactive cards
40
+ // gain visual weight on hover instead of appearing flat until clicked.
39
41
  boxShadow: onClick
40
42
  ? isHovered
41
- ? "0 8px 25px -5px rgba(0, 0, 0, 0.1)"
42
- : "0 1px 3px 0 rgba(0, 0, 0, 0.05)"
43
- : "none",
44
- transition: onClick ? "all 0.2s ease-in-out" : "none",
43
+ ? "var(--shadow-lg)"
44
+ : "var(--shadow-sm)"
45
+ : "var(--shadow-sm)",
46
+ transition: onClick ? "box-shadow 0.2s ease-in-out, transform 0.2s ease-in-out" : "none",
47
+ transform: onClick && isHovered ? "translateY(-2px)" : "translateY(0)",
45
48
  cursor: onClick ? "pointer" : "default",
46
49
  };
47
50
 
@@ -74,12 +77,12 @@ export default function ITCard({
74
77
  {title}
75
78
  </ITText>
76
79
  )}
77
- <ITText as="div" className="text-gray-600">{children}</ITText>
80
+ <ITText as="div" className="text-secondary-600">{children}</ITText>
78
81
  </div>
79
82
  {actions && (
80
83
  <div
81
84
  className={clsx(
82
- "p-4 border-t border-gray-100 mt-auto",
85
+ "p-4 border-t border-secondary-100 mt-auto",
83
86
  actionClassName,
84
87
  )}
85
88
  >
@@ -147,14 +147,14 @@ export default function ITDataTable<T extends Record<string, unknown>>({
147
147
  title={`${getToggleLabel()} para ${col.label}`}
148
148
  disabled={isLoading}
149
149
  >
150
- <div className="relative w-10 h-5 bg-gray-300 rounded-full">
150
+ <div className="relative w-10 h-5 bg-secondary-300 rounded-full">
151
151
  <div
152
152
  className={clsx(
153
153
  "absolute top-0.5 w-4 h-4 rounded-full transition-all duration-300 shadow-sm",
154
154
  {
155
- "left-0.5 bg-gray-400": currentValue === undefined,
155
+ "left-0.5 bg-secondary-400": currentValue === undefined,
156
156
  "left-5 bg-slate-500": currentValue === true,
157
- "left-0.5 bg-gray-500": currentValue === false,
157
+ "left-0.5 bg-secondary-500": currentValue === false,
158
158
  }
159
159
  )}
160
160
  />
@@ -70,7 +70,7 @@ export default function ITDialog({
70
70
  data-it-dialog="true"
71
71
  className={`fixed inset-0 flex ${
72
72
  fullScreen ? "items-stretch" : "items-center justify-center"
73
- } bg-black/50 z-[60]`}
73
+ } bg-slate-900/50 z-[60]`}
74
74
  >
75
75
  <div
76
76
  ref={modalRef}
@@ -98,7 +98,7 @@ export default function ITDialog({
98
98
  ) : (
99
99
  <>
100
100
  <button
101
- className="absolute top-2 right-2 text-gray-600 hover:text-gray-900"
101
+ className="absolute top-2 right-2 text-secondary-600 hover:text-secondary-900"
102
102
  onClick={onClose}
103
103
  >
104
104
  <FaRegTimesCircle />
@@ -14,7 +14,7 @@ import { ITDividerProps } from "./divider.props";
14
14
  *
15
15
  * @example
16
16
  * ```tsx
17
- * <ITDivider orientation="vertical" color="bg-red-500" thickness="w-1" />
17
+ * <ITDivider orientation="vertical" color="bg-danger-500" thickness="w-1" />
18
18
  * ```
19
19
  */
20
20
  export default function ITDivider({
@@ -283,8 +283,8 @@ const ITDropfile: React.FC<ITDropfileProps> = ({
283
283
  return (
284
284
  <div className={clsx("w-full transition-all duration-300", containerClassName)}>
285
285
  <div className="flex items-center justify-between mb-2">
286
- <label className="block text-sm font-semibold text-gray-700">
287
- <ITText as="span">Subir archivo </ITText><ITText as="span" className="text-gray-400 font-normal text-xs">({getFileExtensions()})</ITText>
286
+ <label className="block text-sm font-semibold text-secondary-700">
287
+ <ITText as="span">Subir archivo </ITText><ITText as="span" className="text-secondary-400 font-normal text-xs">({getFileExtensions()})</ITText>
288
288
  </label>
289
289
 
290
290
  {showStatusBadge && selectedFile && (
@@ -301,15 +301,15 @@ const ITDropfile: React.FC<ITDropfileProps> = ({
301
301
  ${
302
302
  isDragActive
303
303
  ? "border-primary-500 bg-primary-50 scale-[1.01]"
304
- : "border-gray-300 bg-white hover:border-primary-400 hover:bg-gray-50"
304
+ : "border-secondary-300 bg-white hover:border-primary-400 hover:bg-secondary-50"
305
305
  }
306
306
  `}
307
307
  >
308
308
  <input {...getInputProps()} />
309
309
 
310
- <div className={`mb-3 p-3 rounded-full transition-colors duration-300 ${isDragActive ? 'bg-primary-100' : 'bg-gray-100 group-hover:bg-primary-50'}`}>
310
+ <div className={`mb-3 p-3 rounded-full transition-colors duration-300 ${isDragActive ? 'bg-primary-100' : 'bg-secondary-100 group-hover:bg-primary-50'}`}>
311
311
  <svg
312
- className={`w-6 h-6 transition-colors duration-300 ${isDragActive ? 'text-primary-600' : 'text-gray-400 group-hover:text-primary-500'}`}
312
+ className={`w-6 h-6 transition-colors duration-300 ${isDragActive ? 'text-primary-600' : 'text-secondary-400 group-hover:text-primary-500'}`}
313
313
  fill="none" viewBox="0 0 24 24" stroke="currentColor"
314
314
  >
315
315
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12" />
@@ -317,14 +317,14 @@ const ITDropfile: React.FC<ITDropfileProps> = ({
317
317
  </div>
318
318
 
319
319
  <div className="text-center space-y-1">
320
- <ITText as="p" className={`text-sm font-medium transition-colors duration-300 ${isDragActive ? 'text-primary-700' : 'text-gray-700'}`}>
320
+ <ITText as="p" className={`text-sm font-medium transition-colors duration-300 ${isDragActive ? 'text-primary-700' : 'text-secondary-700'}`}>
321
321
  {isDragActive ? "¡Suelta aquí!" : "Haz clic o arrastra"}
322
322
  </ITText>
323
323
  </div>
324
324
  </div>
325
325
  ) : (
326
- <div className="w-full bg-white border border-gray-200 rounded-xl shadow-sm overflow-hidden animate-fade-in">
327
- <div className="flex items-center justify-between p-3 bg-gray-50 border-b border-gray-100">
326
+ <div className="w-full bg-white border border-secondary-200 rounded-xl shadow-sm overflow-hidden animate-fade-in">
327
+ <div className="flex items-center justify-between p-3 bg-secondary-50 border-b border-secondary-100">
328
328
  <div className="flex items-center gap-3 overflow-hidden">
329
329
  <div className="flex-shrink-0 w-8 h-8 rounded-lg bg-primary-100 flex items-center justify-center text-primary-600">
330
330
  {(selectedFile && fileType?.startsWith('image/')) || (!selectedFile && imagePreview) ? (
@@ -338,17 +338,17 @@ const ITDropfile: React.FC<ITDropfileProps> = ({
338
338
  )}
339
339
  </div>
340
340
  <div className="min-w-0">
341
- <ITText as="p" className="text-xs font-medium text-gray-900 truncate" title={selectedFile?.name || "Imagen cargada"}>
341
+ <ITText as="p" className="text-xs font-medium text-secondary-900 truncate" title={selectedFile?.name || "Imagen cargada"}>
342
342
  {selectedFile?.name || "Imagen cargada"}
343
343
  </ITText>
344
- <ITText as="p" className="text-[10px] text-gray-500">
344
+ <ITText as="p" className="text-[10px] text-secondary-500">
345
345
  {selectedFile ? (selectedFile.size / 1024 / 1024).toFixed(2) + " MB" : ""}
346
346
  </ITText>
347
347
  </div>
348
348
  </div>
349
349
  </div>
350
350
 
351
- <div className={clsx("relative bg-gray-100 flex items-center justify-center", !contentClassName ? "max-h-[200px] min-h-[100px] overflow-auto" : contentClassName)}>
351
+ <div className={clsx("relative bg-secondary-100 flex items-center justify-center", !contentClassName ? "max-h-[200px] min-h-[100px] overflow-auto" : contentClassName)}>
352
352
  {((selectedFile && fileType?.startsWith('image/')) || (!selectedFile && imagePreview)) ? (
353
353
  <img
354
354
  src={imagePreview}
@@ -356,7 +356,7 @@ const ITDropfile: React.FC<ITDropfileProps> = ({
356
356
  className="w-full h-full object-contain max-h-[200px]"
357
357
  />
358
358
  ) : (
359
- <div className="py-8 flex flex-col items-center text-gray-400">
359
+ <div className="py-8 flex flex-col items-center text-secondary-400">
360
360
  <svg className="w-10 h-10 mb-2 opacity-50" fill="none" viewBox="0 0 24 24" stroke="currentColor">
361
361
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={1.5} d="M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z" />
362
362
  </svg>
@@ -365,7 +365,7 @@ const ITDropfile: React.FC<ITDropfileProps> = ({
365
365
  )}
366
366
  </div>
367
367
 
368
- <div className="px-3 py-2 bg-white border-t border-gray-100 flex justify-end gap-2">
368
+ <div className="px-3 py-2 bg-white border-t border-secondary-100 flex justify-end gap-2">
369
369
  {!isConfirmed ? (
370
370
  <>
371
371
  <ITButton
@@ -410,7 +410,7 @@ const ITDropfile: React.FC<ITDropfileProps> = ({
410
410
 
411
411
  {uploadStatus === UploadStatus.UPLOADING && (
412
412
  <div className="px-4 pb-2">
413
- <div className="w-full bg-gray-200 rounded-full h-1.5">
413
+ <div className="w-full bg-secondary-200 rounded-full h-1.5">
414
414
  <div
415
415
  className="bg-primary-600 h-1.5 rounded-full transition-all duration-1000 ease-out"
416
416
  style={{
@@ -228,7 +228,7 @@ const ITFieldRenderer = ({
228
228
  return (
229
229
  <div className={clsx("w-full col-span-full", activeConfig.className)}>
230
230
  {label && (
231
- <ITText as="h4" className="text-lg font-semibold text-gray-800 mb-4">
231
+ <ITText as="h4" className="text-lg font-semibold text-secondary-800 mb-4">
232
232
  {label}
233
233
  </ITText>
234
234
  )}
@@ -246,8 +246,8 @@ const ITFieldRenderer = ({
246
246
 
247
247
  case "array":
248
248
  return (
249
- <div className="p-4 border-2 border-dashed border-gray-200 rounded-xl">
250
- <ITText as="p" className="text-sm text-gray-500 text-center">
249
+ <div className="p-4 border-2 border-dashed border-secondary-200 rounded-xl">
250
+ <ITText as="p" className="text-sm text-secondary-500 text-center">
251
251
  Array Field: {label}
252
252
  </ITText>
253
253
  </div>
@@ -472,12 +472,12 @@ const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {
472
472
  type === "checkbox" && "form-checkbox rounded",
473
473
  className,
474
474
  { [disabledOverlay]: disabled },
475
- { "border-red-500": hasError }
475
+ { "border-danger-500": hasError }
476
476
  )}
477
477
  />
478
478
  {label && (
479
- <label htmlFor={name} className="text-sm text-gray-700 dark:text-slate-300 select-none">
480
- {label} {required && <ITText as="span" className="text-red-500">*</ITText>}
479
+ <label htmlFor={name} className="text-sm text-secondary-700 dark:text-slate-300 select-none">
480
+ {label} {required && <ITText as="span" className="text-danger-500">*</ITText>}
481
481
  </label>
482
482
  )}
483
483
  </div>
@@ -493,7 +493,7 @@ const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {
493
493
  )}
494
494
  >
495
495
  {label}
496
- {required && <ITText as="span" className="text-red-500 ml-1">*</ITText>}
496
+ {required && <ITText as="span" className="text-danger-500 ml-1">*</ITText>}
497
497
  </label>
498
498
  )}
499
499
 
@@ -594,7 +594,7 @@ const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {
594
594
  {type === "password" && (
595
595
  <button
596
596
  type="button"
597
- className="absolute inset-y-0 right-0 flex items-center pr-3 z-10 text-gray-400 hover:text-gray-600 focus:outline-none"
597
+ className="absolute inset-y-0 right-0 flex items-center pr-3 z-10 text-secondary-400 hover:text-secondary-600 focus:outline-none"
598
598
  onClick={() => setShowPassword(!showPassword)}
599
599
  tabIndex={-1} // Don't allow tabbing into the eye icon
600
600
  >
@@ -627,7 +627,7 @@ const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {
627
627
  {/* Length hint below if needed */}
628
628
  {showHintLength && (minLength || maxLength) && !isCheckboxOrRadio && (
629
629
  <div className="mt-1 text-xs">
630
- <ITText as="p" className="text-gray-500">
630
+ <ITText as="p" className="text-secondary-500">
631
631
  {currentLength}{maxLength && `/${maxLength}`}
632
632
  </ITText>
633
633
  </div>
@@ -636,7 +636,7 @@ const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {
636
636
  {/* Validation for checkbox/radio - keep below */}
637
637
  {isCheckboxOrRadio && hasError && (
638
638
  <div className="mt-1 text-xs">
639
- <ITText as="p" className="text-red-500">{errorMessage}</ITText>
639
+ <ITText as="p" className="text-danger-500">{errorMessage}</ITText>
640
640
  </div>
641
641
  )}
642
642
  </div>
@@ -94,7 +94,7 @@ export default function ITLoader({
94
94
  : size === "lg"
95
95
  ? "h-2"
96
96
  : "h-2.5"
97
- } bg-gray-200 rounded-full overflow-hidden ${className}`}
97
+ } bg-secondary-200 rounded-full overflow-hidden ${className}`}
98
98
  >
99
99
  <div
100
100
  className={`h-full animate-progress ${colorClass}`}
@@ -80,12 +80,12 @@ export default function ITNavbar({
80
80
  // Legacy behavior - original navbar implementation
81
81
  return (
82
82
  <div className="flex flex-col h-screen">
83
- <nav className="bg-white border-b border-gray-200">
83
+ <nav className="bg-white border-b border-secondary-200">
84
84
  <div className="flex items-center justify-between mx-auto p-4">
85
85
  <div className="flex items-center space-x-3 rtl:space-x-reverse">
86
86
  {logo && <div className="h-8">{logo}</div>}
87
87
  {logoText && (
88
- <ITText as="span" className="self-center text-2xl font-semibold whitespace-nowrap text-gray-900">
88
+ <ITText as="span" className="self-center text-2xl font-semibold whitespace-nowrap text-secondary-900">
89
89
  {logoText}
90
90
  </ITText>
91
91
  )}
@@ -99,7 +99,7 @@ export default function ITNavbar({
99
99
  <div className="relative">
100
100
  <button
101
101
  type="button"
102
- className="flex text-sm bg-gray-200 rounded-full md:me-0 focus:ring-4 focus:ring-gray-300"
102
+ className="flex text-sm bg-secondary-200 rounded-full md:me-0 focus:ring-4 focus:ring-secondary-300"
103
103
  onClick={toggleUserMenu}
104
104
  >
105
105
  {userMenu.userImage ? (
@@ -109,20 +109,20 @@ export default function ITNavbar({
109
109
  alt="user photo"
110
110
  />
111
111
  ) : (
112
- <FaUserCircle className="w-8 h-8 text-gray-500" />
112
+ <FaUserCircle className="w-8 h-8 text-secondary-500" />
113
113
  )}
114
114
  </button>
115
115
 
116
116
  {isUserMenuOpen && (
117
117
  <div
118
118
  ref={userMenuRef}
119
- className="z-[70] absolute right-0 mt-2 text-base list-none bg-white divide-y divide-gray-100 rounded-lg shadow-sm"
119
+ className="z-[70] absolute right-0 mt-2 text-base list-none bg-white divide-y divide-secondary-100 rounded-lg shadow-sm"
120
120
  >
121
121
  <div className="px-4 py-3">
122
- <ITText as="span" className="block text-sm text-gray-900">
122
+ <ITText as="span" className="block text-sm text-secondary-900">
123
123
  {userMenu.userName}
124
124
  </ITText>
125
- <ITText as="span" className="block text-sm text-gray-500 truncate">
125
+ <ITText as="span" className="block text-sm text-secondary-500 truncate">
126
126
  {userMenu.userEmail}
127
127
  </ITText>
128
128
  </div>
@@ -134,7 +134,7 @@ export default function ITNavbar({
134
134
  item.onClick();
135
135
  setIsUserMenuOpen(false);
136
136
  }}
137
- className="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 w-full text-left"
137
+ className="block px-4 py-2 text-sm text-secondary-700 hover:bg-secondary-100 w-full text-left"
138
138
  >
139
139
  <ITText as="span">{item.label}</ITText>
140
140
  </button>
@@ -152,13 +152,13 @@ export default function ITNavbar({
152
152
 
153
153
  <div className="flex-1 flex overflow-hidden relative">
154
154
  {(showSidebar || showSidebarOnMobile) && (
155
- <aside className="fixed inset-y-0 left-0 w-64 bg-gray-50 transform transition-transform duration-300 ease-in-out z-[40] shadow-lg md:static md:transform-none md:shadow-none md:border-r md:border-gray-200">
155
+ <aside className="fixed inset-y-0 left-0 w-64 bg-secondary-50 transform transition-transform duration-300 ease-in-out z-[40] shadow-lg md:static md:transform-none md:shadow-none md:border-r md:border-secondary-200">
156
156
  <div className="h-full overflow-y-auto py-4 px-3">
157
157
  <ul className="space-y-2 font-medium">{sidebarItems}</ul>
158
158
  </div>
159
159
  </aside>
160
160
  )}
161
- <main className="flex-1 bg-gray-100 overflow-y-auto">
161
+ <main className="flex-1 bg-secondary-100 overflow-y-auto">
162
162
  {children}
163
163
  </main>
164
164
  </div>
@@ -146,8 +146,8 @@ export default function ITPagination({
146
146
  className={clsx(
147
147
  baseItemClass,
148
148
  currentPage === 1
149
- ? "text-gray-300 cursor-not-allowed"
150
- : "text-gray-500 hover:bg-gray-100"
149
+ ? "text-secondary-300 cursor-not-allowed"
150
+ : "text-secondary-500 hover:bg-secondary-100"
151
151
  )}
152
152
  onClick={handlePrevious}
153
153
  aria-disabled={currentPage === 1}
@@ -162,7 +162,7 @@ export default function ITPagination({
162
162
  <ITText
163
163
  as="div"
164
164
  key={`dots-${idx}`}
165
- className="flex items-center justify-center w-8 h-8 select-none text-gray-400"
165
+ className="flex items-center justify-center w-8 h-8 select-none text-secondary-400"
166
166
  >
167
167
  &#8230;
168
168
  </ITText>
@@ -177,7 +177,7 @@ export default function ITPagination({
177
177
  key={pageNumber}
178
178
  className={clsx(
179
179
  baseItemClass,
180
- isActive ? "text-white" : "text-gray-600 hover:bg-gray-100"
180
+ isActive ? "text-white" : "text-secondary-600 hover:bg-secondary-100"
181
181
  )}
182
182
  style={{
183
183
  backgroundColor: isActive ? resolvedBgColor : undefined,
@@ -196,8 +196,8 @@ export default function ITPagination({
196
196
  className={clsx(
197
197
  baseItemClass,
198
198
  currentPage === totalPages
199
- ? "text-gray-300 cursor-not-allowed"
200
- : "text-gray-500 hover:bg-gray-100"
199
+ ? "text-secondary-300 cursor-not-allowed"
200
+ : "text-secondary-500 hover:bg-secondary-100"
201
201
  )}
202
202
  onClick={handleNext}
203
203
  aria-disabled={currentPage === totalPages}
@@ -214,8 +214,8 @@ export default function ITPagination({
214
214
 
215
215
  return (
216
216
  <div className={clsx("flex flex-col sm:flex-row justify-between items-center gap-4 w-full", className)}>
217
- <div className="flex items-center gap-4 text-sm text-gray-500">
218
- <div className="flex items-center gap-2 bg-gray-50 px-3 py-1 rounded-lg border border-gray-200">
217
+ <div className="flex items-center gap-4 text-sm text-secondary-500">
218
+ <div className="flex items-center gap-2 bg-secondary-50 px-3 py-1 rounded-lg border border-secondary-200">
219
219
  <ITText as="span" className="text-xs font-medium">Mostrar</ITText>
220
220
  <ITSelect
221
221
  name="itemsPerPage"
@@ -227,16 +227,16 @@ export default function ITPagination({
227
227
  onChange={(e) => onItemsPerPageChange(Number(e.target.value))}
228
228
  onBlur={() => {}}
229
229
  size="small"
230
- className="!w-14 !h-6 !text-xs !py-0 !px-1! !border-none !bg-transparent !ring-0 focus:!ring-0 cursor-pointer font-bold text-gray-700"
230
+ className="!w-14 !h-6 !text-xs !py-0 !px-1! !border-none !bg-transparent !ring-0 focus:!ring-0 cursor-pointer font-bold text-secondary-700"
231
231
  placeholder=""
232
232
  />
233
233
  </div>
234
234
 
235
235
  {totalItems !== undefined && (
236
236
  <>
237
- <ITText as="span" className="text-gray-300">|</ITText>
237
+ <ITText as="span" className="text-secondary-300">|</ITText>
238
238
  <ITText as="span" className="text-xs">
239
- <ITText as="span" className="font-semibold text-gray-700">{startItem}</ITText><ITText as="span"> - </ITText><ITText as="span" className="font-semibold text-gray-700">{endItem}</ITText><ITText as="span"> de </ITText><ITText as="span" className="font-semibold text-gray-900">{totalItems}</ITText>
239
+ <ITText as="span" className="font-semibold text-secondary-700">{startItem}</ITText><ITText as="span"> - </ITText><ITText as="span" className="font-semibold text-secondary-700">{endItem}</ITText><ITText as="span"> de </ITText><ITText as="span" className="font-semibold text-secondary-900">{totalItems}</ITText>
240
240
  </ITText>
241
241
  </>
242
242
  )}
@@ -184,12 +184,12 @@ export default function ITSearchSelect({
184
184
  {label && (
185
185
  <ITText
186
186
  as="label"
187
- className={clsx("text-sm font-medium text-gray-700 dark:text-slate-300", {
188
- "text-red-500": hasError,
187
+ className={clsx("text-sm font-medium text-secondary-700 dark:text-slate-300", {
188
+ "text-danger-500": hasError,
189
189
  })}
190
190
  >
191
191
  <ITText as="span">{label}</ITText>
192
- {required && <ITText as="span" className="text-red-500 ml-1">*</ITText>}
192
+ {required && <ITText as="span" className="text-danger-500 ml-1">*</ITText>}
193
193
  </ITText>
194
194
  )}
195
195
 
@@ -209,7 +209,7 @@ export default function ITSearchSelect({
209
209
  style={getInputStyle()}
210
210
  autoComplete="off"
211
211
  />
212
- <div className="absolute right-3 flex items-center gap-2 text-gray-400 pointer-events-none">
212
+ <div className="absolute right-3 flex items-center gap-2 text-secondary-400 pointer-events-none">
213
213
  {isLoading && <div className="animate-spin h-4 w-4 border-2 border-primary-500 border-t-transparent rounded-full" />}
214
214
  {!isLoading && <FaSearch size={14} className={clsx({ "text-primary-500": isFocused })} />}
215
215
  </div>
@@ -217,7 +217,7 @@ export default function ITSearchSelect({
217
217
 
218
218
  {/* Dropdown Panel */}
219
219
  {isOpen && (
220
- <div className="absolute z-[70] w-full mt-1 bg-white dark:bg-slate-900 border border-gray-200 dark:border-slate-800 rounded-lg shadow-xl overflow-hidden animate-in fade-in zoom-in duration-200 origin-top">
220
+ <div className="absolute z-[70] w-full mt-1 bg-white dark:bg-slate-900 border border-secondary-200 dark:border-slate-800 rounded-lg shadow-xl overflow-hidden animate-in fade-in zoom-in duration-200 origin-top">
221
221
  <div className="max-h-60 overflow-y-auto">
222
222
  {filteredOptions.length > 0 ? (
223
223
  filteredOptions.map((option) => (
@@ -229,14 +229,14 @@ export default function ITSearchSelect({
229
229
  "px-4 py-2 text-sm cursor-pointer transition-colors",
230
230
  value === option[valueField]
231
231
  ? "bg-primary-50 dark:bg-primary-950/40 text-primary-700 dark:text-primary-300 font-medium"
232
- : "hover:bg-gray-50 dark:hover:bg-slate-800 text-gray-700 dark:text-slate-300"
232
+ : "hover:bg-secondary-50 dark:hover:bg-slate-800 text-secondary-700 dark:text-slate-300"
233
233
  )}
234
234
  >
235
235
  <ITText as="span">{option[labelField]}</ITText>
236
236
  </ITText>
237
237
  ))
238
238
  ) : (
239
- <ITText as="div" className="px-4 py-6 text-sm text-center text-gray-500 italic">
239
+ <ITText as="div" className="px-4 py-6 text-sm text-center text-secondary-500 italic">
240
240
  {isLoading ? "Cargando..." : noResultsMessage}
241
241
  </ITText>
242
242
  )}
@@ -247,7 +247,7 @@ export default function ITSearchSelect({
247
247
 
248
248
  {/* Error Message */}
249
249
  {hasError && (
250
- <ITText as="p" className="text-red-500 text-xs mt-1">{errorMessage}</ITText>
250
+ <ITText as="p" className="text-danger-500 text-xs mt-1">{errorMessage}</ITText>
251
251
  )}
252
252
  </div>
253
253
  );
@@ -143,7 +143,7 @@ export default function EditableCell<T>({
143
143
  return (
144
144
  <div className="w-full">
145
145
  {renderInput()}
146
- {error && <div className="text-red-500 text-xs mt-1"><ITText as="span">{error}</ITText></div>}
146
+ {error && <div className="text-danger-500 text-xs mt-1"><ITText as="span">{error}</ITText></div>}
147
147
  </div>
148
148
  );
149
149
  }
@@ -36,7 +36,7 @@ export default function PaginationControls({
36
36
  <PaginationInfo currentCount={currentCount} totalCount={totalCount} />
37
37
 
38
38
  <div className="flex items-center space-x-2">
39
- <ITText as="span" className="text-sm text-gray-700">Mostrar:</ITText>
39
+ <ITText as="span" className="text-sm text-secondary-700">Mostrar:</ITText>
40
40
  <ITSelect
41
41
  name="itemsPerPage"
42
42
  options={itemsPerPageOptions.map((option) => ({
@@ -65,7 +65,7 @@ export default function PaginationControls({
65
65
  <FaArrowLeft aria-hidden="true" />
66
66
  </ITButton>
67
67
 
68
- <ITText as="span" className="px-4 py-2 text-sm text-gray-700" aria-live="polite">
68
+ <ITText as="span" className="px-4 py-2 text-sm text-secondary-700" aria-live="polite">
69
69
  Página {pageIndex} de {totalPages}
70
70
  </ITText>
71
71
 
@@ -13,7 +13,7 @@ export default function PaginationInfo({
13
13
  className = "",
14
14
  }: PaginationInfoProps) {
15
15
  return (
16
- <ITText as="span" className={`text-sm text-gray-700 ${className}`}>
16
+ <ITText as="span" className={`text-sm text-secondary-700 ${className}`}>
17
17
  Mostrando {currentCount} de {totalCount} resultados
18
18
  </ITText>
19
19
  );
@@ -25,7 +25,7 @@ export default function SearchAndSortBar({
25
25
  searchInputPlaceholder = "Buscar en todos los campos...",
26
26
  }: SearchAndSortBarProps) {
27
27
  return (
28
- <div className="bg-gray-50 px-6 py-4 border-b border-gray-200">
28
+ <div className="bg-secondary-50 px-6 py-4 border-b border-secondary-200">
29
29
  <div className="flex items-center gap-4">
30
30
  <SearchInput
31
31
  placeholder={searchInputPlaceholder}
@@ -18,7 +18,7 @@ export default function SearchInput({
18
18
  return (
19
19
  <div className={`relative flex-1 ${className}`}>
20
20
  <div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
21
- <FaSearch className="h-5 w-5 text-gray-400" />
21
+ <FaSearch className="h-5 w-5 text-secondary-400" />
22
22
  </div>
23
23
  <ITInput
24
24
  name="global-search"
@@ -19,7 +19,7 @@ export default function SortButton({
19
19
  return (
20
20
  <button
21
21
  onClick={onClick}
22
- className={`p-3 rounded-lg bg-white border border-gray-300 hover:bg-gray-50 transition-colors duration-200 flex items-center gap-2 min-w-[120px] ${className}`}
22
+ className={`p-3 rounded-lg bg-white border border-secondary-300 hover:bg-secondary-50 transition-colors duration-200 flex items-center gap-2 min-w-[120px] ${className}`}
23
23
  aria-label={`Ordenar tabla ${
24
24
  sortConfig
25
25
  ? sortConfig.direction === "asc"
@@ -36,9 +36,9 @@ export default function SortButton({
36
36
  <FaSortDown className="w-4 h-4 text-slate-500" />
37
37
  )
38
38
  ) : (
39
- <FaSort className="w-4 h-4 text-gray-500" />
39
+ <FaSort className="w-4 h-4 text-secondary-500" />
40
40
  )}
41
- <ITText as="span" className="text-sm font-medium text-gray-700">
41
+ <ITText as="span" className="text-sm font-medium text-secondary-700">
42
42
  {sortConfig
43
43
  ? sortConfig.direction === "asc"
44
44
  ? "Asc ↑"
@@ -18,7 +18,7 @@ export default function TableHeader<T>({
18
18
  }: TableHeaderProps<T>) {
19
19
  return (
20
20
  <thead>
21
- <tr className="bg-white border-b border-gray-200">
21
+ <tr className="bg-white border-b border-secondary-200">
22
22
  {columns.map((col) => (
23
23
  <TableHeaderCell
24
24
  key={col.key}
@@ -66,7 +66,7 @@ export default function TableRow<T>({
66
66
  title="Verdadero"
67
67
  />
68
68
  ) : (
69
- <FaTimes className="text-red-500" aria-label="Falso" title="Falso" />
69
+ <FaTimes className="text-danger-500" aria-label="Falso" title="Falso" />
70
70
  );
71
71
 
72
72
  case "actions":
@@ -99,13 +99,13 @@ export default function TableRow<T>({
99
99
  <tr
100
100
  onMouseEnter={() => setIsHovered(true)}
101
101
  onMouseLeave={() => setIsHovered(false)}
102
- className={`border-b border-gray-200 transition-colors duration-150 ${
102
+ className={`border-b border-secondary-200 transition-colors duration-150 ${
103
103
  isEditing
104
104
  ? "bg-slate-50"
105
105
  : rowIndex % 2 === 0
106
106
  ? "bg-white"
107
- : "bg-gray-50"
108
- } ${isHovered && !isEditing ? "bg-gray-100" : ""}`}
107
+ : "bg-secondary-50"
108
+ } ${isHovered && !isEditing ? "bg-secondary-100" : ""}`}
109
109
  >
110
110
  {columns.map((col) => (
111
111
  <td