premium-react-loaders 1.1.0 → 1.2.0

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 (99) hide show
  1. package/README.md +55 -6
  2. package/dist/components/progress/ProgressBar.d.ts.map +1 -1
  3. package/dist/components/progress/ProgressCircle.d.ts.map +1 -1
  4. package/dist/components/progress/ProgressRing.d.ts.map +1 -1
  5. package/dist/components/pulse/PulseBars.d.ts +2 -2
  6. package/dist/components/pulse/PulseBars.d.ts.map +1 -1
  7. package/dist/components/pulse/PulseDots.d.ts +2 -2
  8. package/dist/components/pulse/PulseDots.d.ts.map +1 -1
  9. package/dist/components/pulse/PulseWave.d.ts +2 -2
  10. package/dist/components/pulse/PulseWave.d.ts.map +1 -1
  11. package/dist/components/pulse/TypingIndicator.d.ts.map +1 -1
  12. package/dist/components/spinner/SpinnerBars.d.ts +2 -2
  13. package/dist/components/spinner/SpinnerBars.d.ts.map +1 -1
  14. package/dist/components/spinner/SpinnerCircle.d.ts +2 -1
  15. package/dist/components/spinner/SpinnerCircle.d.ts.map +1 -1
  16. package/dist/components/spinner/SpinnerDots.d.ts +2 -2
  17. package/dist/components/spinner/SpinnerDots.d.ts.map +1 -1
  18. package/dist/components/spinner/SpinnerGrid.d.ts +2 -2
  19. package/dist/components/spinner/SpinnerGrid.d.ts.map +1 -1
  20. package/dist/components/spinner/SpinnerPulse.d.ts +3 -3
  21. package/dist/components/spinner/SpinnerPulse.d.ts.map +1 -1
  22. package/dist/components/spinner/SpinnerRing.d.ts +3 -3
  23. package/dist/components/spinner/SpinnerRing.d.ts.map +1 -1
  24. package/dist/components/spinner/SpinnerWave.d.ts +3 -3
  25. package/dist/components/spinner/SpinnerWave.d.ts.map +1 -1
  26. package/dist/index14.cjs +9 -3
  27. package/dist/index14.cjs.map +1 -1
  28. package/dist/index14.js +9 -3
  29. package/dist/index14.js.map +1 -1
  30. package/dist/index15.cjs +8 -2
  31. package/dist/index15.cjs.map +1 -1
  32. package/dist/index15.js +9 -3
  33. package/dist/index15.js.map +1 -1
  34. package/dist/index16.cjs +8 -2
  35. package/dist/index16.cjs.map +1 -1
  36. package/dist/index16.js +9 -3
  37. package/dist/index16.js.map +1 -1
  38. package/dist/index17.cjs +8 -4
  39. package/dist/index17.cjs.map +1 -1
  40. package/dist/index17.js +9 -5
  41. package/dist/index17.js.map +1 -1
  42. package/dist/index18.cjs +9 -4
  43. package/dist/index18.cjs.map +1 -1
  44. package/dist/index18.js +10 -5
  45. package/dist/index18.js.map +1 -1
  46. package/dist/index19.cjs +9 -4
  47. package/dist/index19.cjs.map +1 -1
  48. package/dist/index19.js +10 -5
  49. package/dist/index19.js.map +1 -1
  50. package/dist/index20.cjs +9 -4
  51. package/dist/index20.cjs.map +1 -1
  52. package/dist/index20.js +10 -5
  53. package/dist/index20.js.map +1 -1
  54. package/dist/index21.cjs +7 -2
  55. package/dist/index21.cjs.map +1 -1
  56. package/dist/index21.js +8 -3
  57. package/dist/index21.js.map +1 -1
  58. package/dist/index22.cjs +11 -4
  59. package/dist/index22.cjs.map +1 -1
  60. package/dist/index22.js +12 -5
  61. package/dist/index22.js.map +1 -1
  62. package/dist/index23.cjs +11 -4
  63. package/dist/index23.cjs.map +1 -1
  64. package/dist/index23.js +12 -5
  65. package/dist/index23.js.map +1 -1
  66. package/dist/index25.cjs +8 -4
  67. package/dist/index25.cjs.map +1 -1
  68. package/dist/index25.js +9 -5
  69. package/dist/index25.js.map +1 -1
  70. package/dist/index26.cjs +8 -4
  71. package/dist/index26.cjs.map +1 -1
  72. package/dist/index26.js +9 -5
  73. package/dist/index26.js.map +1 -1
  74. package/dist/index27.cjs +9 -4
  75. package/dist/index27.cjs.map +1 -1
  76. package/dist/index27.js +10 -5
  77. package/dist/index27.js.map +1 -1
  78. package/dist/index28.cjs +7 -3
  79. package/dist/index28.cjs.map +1 -1
  80. package/dist/index28.js +8 -4
  81. package/dist/index28.js.map +1 -1
  82. package/dist/index31.cjs +42 -0
  83. package/dist/index31.cjs.map +1 -0
  84. package/dist/index31.js +42 -0
  85. package/dist/index31.js.map +1 -0
  86. package/dist/index4.cjs +10 -0
  87. package/dist/index4.cjs.map +1 -1
  88. package/dist/index4.js +10 -0
  89. package/dist/index4.js.map +1 -1
  90. package/dist/premium-react-loaders.css +270 -3
  91. package/dist/types/common.d.ts +14 -2
  92. package/dist/types/common.d.ts.map +1 -1
  93. package/dist/utils/colors.d.ts +2 -1
  94. package/dist/utils/colors.d.ts.map +1 -1
  95. package/dist/utils/hooks.d.ts +10 -0
  96. package/dist/utils/hooks.d.ts.map +1 -0
  97. package/dist/utils/index.d.ts +1 -0
  98. package/dist/utils/index.d.ts.map +1 -1
  99. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index4.js","sources":["../src/utils/colors.ts"],"sourcesContent":["/**\n * Check if a color is a valid hex color\n */\nexport function isHexColor(color: string): boolean {\n return /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(color);\n}\n\n/**\n * Check if a color is a valid RGB/RGBA color\n */\nexport function isRgbColor(color: string): boolean {\n return /^rgba?\\([\\d\\s,./]+\\)$/.test(color);\n}\n\n/**\n * Convert hex color to RGB\n */\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null;\n}\n\n/**\n * Get animation duration in CSS format\n */\nexport function getAnimationDuration(speed: 'slow' | 'normal' | 'fast' | number = 'normal'): string {\n if (typeof speed === 'number') {\n // Validate number is valid and positive, clamp to reasonable range (50ms - 10000ms)\n const validSpeed = !isNaN(speed) && speed > 0 ? Math.max(50, Math.min(10000, speed)) : 1000;\n return `${validSpeed}ms`;\n }\n\n const speedMap = {\n slow: '2s',\n normal: '1s',\n fast: '0.5s',\n };\n\n return speedMap[speed] || speedMap.normal;\n}\n\n/**\n * Normalize size value to CSS string\n */\nexport function normalizeSize(size?: number | string): string {\n if (typeof size === 'number') {\n return `${size}px`;\n }\n return size || 'auto';\n}\n\n/**\n * Safely parse size to number with fallback\n */\nexport function parseSizeToNumber(size: number | string | undefined, fallback: number): number {\n if (typeof size === 'number') {\n return !isNaN(size) && size > 0 ? size : fallback;\n }\n\n if (typeof size === 'string') {\n const parsed = parseInt(size, 10);\n return !isNaN(parsed) && parsed > 0 ? parsed : fallback;\n }\n\n return fallback;\n}\n\n/**\n * Calculate relative luminance of a color (0-1 scale)\n * Used for determining if text should be light or dark for contrast\n */\nexport function getColorLuminance(color: string): number {\n // Try to parse hex color\n if (isHexColor(color)) {\n const rgb = hexToRgb(color);\n if (rgb) {\n // Convert RGB to relative luminance using WCAG formula\n const { r, g, b } = rgb;\n const [rs, gs, bs] = [r, g, b].map((c) => {\n const val = c / 255;\n return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n });\n return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;\n }\n }\n\n // Try to parse RGB/RGBA color\n if (isRgbColor(color)) {\n const match = color.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/);\n if (match) {\n const [, r, g, b] = match.map(Number);\n const [rs, gs, bs] = [r, g, b].map((c) => {\n const val = c / 255;\n return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n });\n return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;\n }\n }\n\n // Default to 0.5 (medium luminance) if unable to parse\n return 0.5;\n}\n\n/**\n * Get contrast color (black or white) based on background luminance\n */\nexport function getContrastColor(backgroundColor: string): string {\n const luminance = getColorLuminance(backgroundColor);\n // WCAG standard: use white text on dark backgrounds (luminance < 0.5)\n return luminance < 0.5 ? '#ffffff' : '#000000';\n}\n"],"names":[],"mappings":"AAGO,SAAS,WAAW,OAAwB;AACjD,SAAO,qCAAqC,KAAK,KAAK;AACxD;AAKO,SAAS,WAAW,OAAwB;AACjD,SAAO,wBAAwB,KAAK,KAAK;AAC3C;AAKO,SAAS,SAAS,KAAyD;AAChF,QAAM,SAAS,4CAA4C,KAAK,GAAG;AACnE,SAAO,SACH;AAAA,IACE,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE;AAAA,IACzB,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE;AAAA,IACzB,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE;AAAA,EAAA,IAE3B;AACN;AAKO,SAAS,qBAAqB,QAA6C,UAAkB;AAClG,MAAI,OAAO,UAAU,UAAU;AAE7B,UAAM,aAAa,CAAC,MAAM,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,KAAO,KAAK,CAAC,IAAI;AACvF,WAAO,GAAG,UAAU;AAAA,EACtB;AAEA,QAAM,WAAW;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAGR,SAAO,SAAS,KAAK,KAAK,SAAS;AACrC;AAKO,SAAS,cAAc,MAAgC;AAC5D,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,GAAG,IAAI;AAAA,EAChB;AACA,SAAO,QAAQ;AACjB;AAKO,SAAS,kBAAkB,MAAmC,UAA0B;AAC7F,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,CAAC,MAAM,IAAI,KAAK,OAAO,IAAI,OAAO;AAAA,EAC3C;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,SAAS,SAAS,MAAM,EAAE;AAChC,WAAO,CAAC,MAAM,MAAM,KAAK,SAAS,IAAI,SAAS;AAAA,EACjD;AAEA,SAAO;AACT;AAMO,SAAS,kBAAkB,OAAuB;AAEvD,MAAI,WAAW,KAAK,GAAG;AACrB,UAAM,MAAM,SAAS,KAAK;AAC1B,QAAI,KAAK;AAEP,YAAM,EAAE,GAAG,GAAG,EAAA,IAAM;AACpB,YAAM,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM;AACxC,cAAM,MAAM,IAAI;AAChB,eAAO,OAAO,UAAU,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,OAAO,GAAG;AAAA,MAC3E,CAAC;AACD,aAAO,SAAS,KAAK,SAAS,KAAK,SAAS;AAAA,IAC9C;AAAA,EACF;AAGA,MAAI,WAAW,KAAK,GAAG;AACrB,UAAM,QAAQ,MAAM,MAAM,gCAAgC;AAC1D,QAAI,OAAO;AACT,YAAM,CAAA,EAAG,GAAG,GAAG,CAAC,IAAI,MAAM,IAAI,MAAM;AACpC,YAAM,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM;AACxC,cAAM,MAAM,IAAI;AAChB,eAAO,OAAO,UAAU,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,OAAO,GAAG;AAAA,MAC3E,CAAC;AACD,aAAO,SAAS,KAAK,SAAS,KAAK,SAAS;AAAA,IAC9C;AAAA,EACF;AAGA,SAAO;AACT;AAKO,SAAS,iBAAiB,iBAAiC;AAChE,QAAM,YAAY,kBAAkB,eAAe;AAEnD,SAAO,YAAY,MAAM,YAAY;AACvC;"}
1
+ {"version":3,"file":"index4.js","sources":["../src/utils/colors.ts"],"sourcesContent":["/**\n * Check if a color is a valid hex color\n */\nexport function isHexColor(color: string): boolean {\n return /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(color);\n}\n\n/**\n * Check if a color is a valid RGB/RGBA color\n */\nexport function isRgbColor(color: string): boolean {\n return /^rgba?\\([\\d\\s,./]+\\)$/.test(color);\n}\n\n/**\n * Convert hex color to RGB\n */\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null;\n}\n\n/**\n * Get animation duration in CSS format\n */\nexport function getAnimationDuration(speed: 'slow' | 'normal' | 'fast' | number = 'normal'): string {\n if (typeof speed === 'number') {\n // Validate number is valid and positive, clamp to reasonable range (50ms - 10000ms)\n const validSpeed = !isNaN(speed) && speed > 0 ? Math.max(50, Math.min(10000, speed)) : 1000;\n return `${validSpeed}ms`;\n }\n\n const speedMap = {\n slow: '2s',\n normal: '1s',\n fast: '0.5s',\n };\n\n return speedMap[speed] || speedMap.normal;\n}\n\n/**\n * Normalize size value to CSS string\n * Supports size presets ('xs', 'sm', 'md', 'lg', 'xl'), numeric values, or CSS strings\n */\nexport function normalizeSize(size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number | string): string {\n // Handle size presets\n const sizePresetMap = {\n xs: 16,\n sm: 24,\n md: 40,\n lg: 56,\n xl: 72,\n };\n\n if (typeof size === 'string' && size in sizePresetMap) {\n return `${sizePresetMap[size as keyof typeof sizePresetMap]}px`;\n }\n\n if (typeof size === 'number') {\n return `${size}px`;\n }\n return size || 'auto';\n}\n\n/**\n * Safely parse size to number with fallback\n */\nexport function parseSizeToNumber(size: number | string | undefined, fallback: number): number {\n if (typeof size === 'number') {\n return !isNaN(size) && size > 0 ? size : fallback;\n }\n\n if (typeof size === 'string') {\n const parsed = parseInt(size, 10);\n return !isNaN(parsed) && parsed > 0 ? parsed : fallback;\n }\n\n return fallback;\n}\n\n/**\n * Calculate relative luminance of a color (0-1 scale)\n * Used for determining if text should be light or dark for contrast\n */\nexport function getColorLuminance(color: string): number {\n // Try to parse hex color\n if (isHexColor(color)) {\n const rgb = hexToRgb(color);\n if (rgb) {\n // Convert RGB to relative luminance using WCAG formula\n const { r, g, b } = rgb;\n const [rs, gs, bs] = [r, g, b].map((c) => {\n const val = c / 255;\n return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n });\n return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;\n }\n }\n\n // Try to parse RGB/RGBA color\n if (isRgbColor(color)) {\n const match = color.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/);\n if (match) {\n const [, r, g, b] = match.map(Number);\n const [rs, gs, bs] = [r, g, b].map((c) => {\n const val = c / 255;\n return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n });\n return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;\n }\n }\n\n // Default to 0.5 (medium luminance) if unable to parse\n return 0.5;\n}\n\n/**\n * Get contrast color (black or white) based on background luminance\n */\nexport function getContrastColor(backgroundColor: string): string {\n const luminance = getColorLuminance(backgroundColor);\n // WCAG standard: use white text on dark backgrounds (luminance < 0.5)\n return luminance < 0.5 ? '#ffffff' : '#000000';\n}\n"],"names":[],"mappings":"AAGO,SAAS,WAAW,OAAwB;AACjD,SAAO,qCAAqC,KAAK,KAAK;AACxD;AAKO,SAAS,WAAW,OAAwB;AACjD,SAAO,wBAAwB,KAAK,KAAK;AAC3C;AAKO,SAAS,SAAS,KAAyD;AAChF,QAAM,SAAS,4CAA4C,KAAK,GAAG;AACnE,SAAO,SACH;AAAA,IACE,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE;AAAA,IACzB,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE;AAAA,IACzB,GAAG,SAAS,OAAO,CAAC,GAAG,EAAE;AAAA,EAAA,IAE3B;AACN;AAKO,SAAS,qBAAqB,QAA6C,UAAkB;AAClG,MAAI,OAAO,UAAU,UAAU;AAE7B,UAAM,aAAa,CAAC,MAAM,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,KAAO,KAAK,CAAC,IAAI;AACvF,WAAO,GAAG,UAAU;AAAA,EACtB;AAEA,QAAM,WAAW;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAGR,SAAO,SAAS,KAAK,KAAK,SAAS;AACrC;AAMO,SAAS,cAAc,MAAmE;AAE/F,QAAM,gBAAgB;AAAA,IACpB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAGN,MAAI,OAAO,SAAS,YAAY,QAAQ,eAAe;AACrD,WAAO,GAAG,cAAc,IAAkC,CAAC;AAAA,EAC7D;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,GAAG,IAAI;AAAA,EAChB;AACA,SAAO,QAAQ;AACjB;AAKO,SAAS,kBAAkB,MAAmC,UAA0B;AAC7F,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,CAAC,MAAM,IAAI,KAAK,OAAO,IAAI,OAAO;AAAA,EAC3C;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,SAAS,SAAS,MAAM,EAAE;AAChC,WAAO,CAAC,MAAM,MAAM,KAAK,SAAS,IAAI,SAAS;AAAA,EACjD;AAEA,SAAO;AACT;AAMO,SAAS,kBAAkB,OAAuB;AAEvD,MAAI,WAAW,KAAK,GAAG;AACrB,UAAM,MAAM,SAAS,KAAK;AAC1B,QAAI,KAAK;AAEP,YAAM,EAAE,GAAG,GAAG,EAAA,IAAM;AACpB,YAAM,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM;AACxC,cAAM,MAAM,IAAI;AAChB,eAAO,OAAO,UAAU,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,OAAO,GAAG;AAAA,MAC3E,CAAC;AACD,aAAO,SAAS,KAAK,SAAS,KAAK,SAAS;AAAA,IAC9C;AAAA,EACF;AAGA,MAAI,WAAW,KAAK,GAAG;AACrB,UAAM,QAAQ,MAAM,MAAM,gCAAgC;AAC1D,QAAI,OAAO;AACT,YAAM,CAAA,EAAG,GAAG,GAAG,CAAC,IAAI,MAAM,IAAI,MAAM;AACpC,YAAM,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM;AACxC,cAAM,MAAM,IAAI;AAChB,eAAO,OAAO,UAAU,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,OAAO,GAAG;AAAA,MAC3E,CAAC;AACD,aAAO,SAAS,KAAK,SAAS,KAAK,SAAS;AAAA,IAC9C;AAAA,EACF;AAGA,SAAO;AACT;AAKO,SAAS,iBAAiB,iBAAiC;AAChE,QAAM,YAAY,kBAAkB,eAAe;AAEnD,SAAO,YAAY,MAAM,YAAY;AACvC;"}
@@ -1,3 +1,169 @@
1
+ /* Animation keyframes */
2
+
3
+ @keyframes skeleton-shimmer {
4
+ 0% {
5
+ transform: translateX(-100%);
6
+ }
7
+ 100% {
8
+ transform: translateX(100%);
9
+ }
10
+ }
11
+
12
+ @keyframes spinner-rotate {
13
+ 0% {
14
+ transform: rotate(0deg);
15
+ }
16
+ 100% {
17
+ transform: rotate(360deg);
18
+ }
19
+ }
20
+
21
+ @keyframes pulse-scale {
22
+ 0%,
23
+ 100% {
24
+ transform: scale(1);
25
+ opacity: 1;
26
+ }
27
+ 50% {
28
+ transform: scale(0.5);
29
+ opacity: 0.5;
30
+ }
31
+ }
32
+
33
+ @keyframes pulse-bounce {
34
+ 0%,
35
+ 80%,
36
+ 100% {
37
+ transform: scale(0);
38
+ opacity: 0.5;
39
+ }
40
+ 40% {
41
+ transform: scale(1);
42
+ opacity: 1;
43
+ }
44
+ }
45
+
46
+ @keyframes pulse-wave {
47
+ 0%,
48
+ 40%,
49
+ 100% {
50
+ transform: scaleY(0.4);
51
+ }
52
+ 20% {
53
+ transform: scaleY(1);
54
+ }
55
+ }
56
+
57
+ @keyframes progress-indeterminate {
58
+ 0% {
59
+ left: -40%;
60
+ right: 100%;
61
+ }
62
+ 60% {
63
+ left: 100%;
64
+ right: -90%;
65
+ }
66
+ 100% {
67
+ left: 100%;
68
+ right: -90%;
69
+ }
70
+ }
71
+
72
+ @keyframes fade-pulse {
73
+ 0%,
74
+ 100% {
75
+ opacity: 1;
76
+ }
77
+ 50% {
78
+ opacity: 0.3;
79
+ }
80
+ }
81
+
82
+ @keyframes dots-rotate {
83
+ 0% {
84
+ transform: rotate(0deg);
85
+ }
86
+ 100% {
87
+ transform: rotate(360deg);
88
+ }
89
+ }
90
+
91
+ @keyframes ripple-expand {
92
+ 0% {
93
+ transform: scale(0);
94
+ opacity: 1;
95
+ }
96
+ 100% {
97
+ transform: scale(var(--max-scale, 2));
98
+ opacity: 0;
99
+ }
100
+ }
101
+
102
+ @keyframes heartbeat-pulse {
103
+ 0% {
104
+ transform: scale(0.8);
105
+ opacity: 1;
106
+ }
107
+ 100% {
108
+ transform: scale(var(--max-scale, 1.8));
109
+ opacity: 0;
110
+ }
111
+ }
112
+
113
+ @keyframes typing-bounce {
114
+ 0%,
115
+ 60%,
116
+ 100% {
117
+ transform: translateY(0);
118
+ }
119
+ 30% {
120
+ transform: translateY(-8px);
121
+ }
122
+ }
123
+
124
+ @keyframes typing-fade {
125
+ 0%,
126
+ 60%,
127
+ 100% {
128
+ opacity: 0.2;
129
+ }
130
+ 30% {
131
+ opacity: 1;
132
+ }
133
+ }
134
+
135
+ /* Animation utility classes */
136
+
137
+ .animate-skeleton {
138
+ animation: skeleton-shimmer var(--animation-duration-normal, 1.5s) infinite;
139
+ }
140
+
141
+ .animate-spinner {
142
+ animation: spinner-rotate var(--animation-duration-normal, 1s) linear infinite;
143
+ }
144
+
145
+ .animate-pulse-scale {
146
+ animation: pulse-scale var(--animation-duration-normal, 1.5s) ease-in-out infinite;
147
+ }
148
+
149
+ .animate-pulse-bounce {
150
+ animation: pulse-bounce var(--animation-duration-normal, 1.4s) ease-in-out infinite;
151
+ }
152
+
153
+ .animate-progress {
154
+ animation: progress-indeterminate var(--animation-duration-normal, 1.5s) ease-in-out infinite;
155
+ }
156
+
157
+ /* Speed variants */
158
+
159
+ .animate-slow {
160
+ animation-duration: var(--animation-duration-slow, 2s);
161
+ }
162
+
163
+ .animate-fast {
164
+ animation-duration: var(--animation-duration-fast, 0.5s);
165
+ }
166
+
1
167
  *, ::before, ::after {
2
168
  --tw-border-spacing-x: 0;
3
169
  --tw-border-spacing-y: 0;
@@ -104,9 +270,11 @@
104
270
  --tw-contain-layout: ;
105
271
  --tw-contain-paint: ;
106
272
  --tw-contain-style: ;
107
- }/*
108
- ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
109
- *//*
273
+ }
274
+
275
+ /* ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com */
276
+
277
+ /*
110
278
  1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
111
279
  2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
112
280
  */
@@ -423,6 +591,7 @@ menu {
423
591
  /*
424
592
  Reset default styling for dialogs.
425
593
  */
594
+
426
595
  dialog {
427
596
  padding: 0;
428
597
  }
@@ -463,6 +632,7 @@ button,
463
632
  /*
464
633
  Make sure disabled buttons don't get the pointer cursor.
465
634
  */
635
+
466
636
  :disabled {
467
637
  cursor: default;
468
638
  }
@@ -496,20 +666,25 @@ video {
496
666
  }
497
667
 
498
668
  /* Make elements with the HTML hidden attribute stay hidden by default */
669
+
499
670
  [hidden]:where(:not([hidden="until-found"])) {
500
671
  display: none;
501
672
  }
673
+
502
674
  /* Skeleton base */
675
+
503
676
  .skeleton {
504
677
  position: relative;
505
678
  overflow: hidden;
506
679
  --tw-bg-opacity: 1;
507
680
  background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));
508
681
  }
682
+
509
683
  .skeleton-animate {
510
684
  position: relative;
511
685
  overflow: hidden;
512
686
  }
687
+
513
688
  .skeleton-animate::after {
514
689
  position: absolute;
515
690
  inset: 0px;
@@ -523,302 +698,393 @@ video {
523
698
  );
524
699
  animation: skeleton-shimmer 1.5s infinite;
525
700
  }
701
+
526
702
  /* Spinner base */
703
+
527
704
  /* Progress base */
705
+
528
706
  .progress-indeterminate {
529
707
  position: absolute;
530
708
  inset: 0px;
531
709
  }
710
+
532
711
  .\!visible {
533
712
  visibility: visible !important;
534
713
  }
714
+
535
715
  .visible {
536
716
  visibility: visible;
537
717
  }
718
+
538
719
  .fixed {
539
720
  position: fixed;
540
721
  }
722
+
541
723
  .absolute {
542
724
  position: absolute;
543
725
  }
726
+
544
727
  .relative {
545
728
  position: relative;
546
729
  }
730
+
547
731
  .inset-0 {
548
732
  inset: 0px;
549
733
  }
734
+
550
735
  .z-10 {
551
736
  z-index: 10;
552
737
  }
738
+
553
739
  .col-span-2 {
554
740
  grid-column: span 2 / span 2;
555
741
  }
742
+
556
743
  .mx-auto {
557
744
  margin-left: auto;
558
745
  margin-right: auto;
559
746
  }
747
+
560
748
  .mb-4 {
561
749
  margin-bottom: 1rem;
562
750
  }
751
+
563
752
  .mt-1 {
564
753
  margin-top: 0.25rem;
565
754
  }
755
+
566
756
  .block {
567
757
  display: block;
568
758
  }
759
+
569
760
  .flex {
570
761
  display: flex;
571
762
  }
763
+
572
764
  .inline-flex {
573
765
  display: inline-flex;
574
766
  }
767
+
575
768
  .table {
576
769
  display: table;
577
770
  }
771
+
578
772
  .grid {
579
773
  display: grid;
580
774
  }
775
+
581
776
  .h-4 {
582
777
  height: 1rem;
583
778
  }
779
+
584
780
  .h-96 {
585
781
  height: 24rem;
586
782
  }
783
+
587
784
  .h-full {
588
785
  height: 100%;
589
786
  }
787
+
590
788
  .w-1\/2 {
591
789
  width: 50%;
592
790
  }
791
+
593
792
  .w-3\/4 {
594
793
  width: 75%;
595
794
  }
795
+
596
796
  .w-96 {
597
797
  width: 24rem;
598
798
  }
799
+
599
800
  .w-full {
600
801
  width: 100%;
601
802
  }
803
+
602
804
  .max-w-3xl {
603
805
  max-width: 48rem;
604
806
  }
807
+
605
808
  .flex-1 {
606
809
  flex: 1 1 0%;
607
810
  }
811
+
608
812
  .transform {
609
813
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
610
814
  }
815
+
611
816
  @keyframes spinner-rotate {
612
817
 
613
818
  100% {
614
819
  transform: rotate(360deg);
615
820
  }
616
821
  }
822
+
617
823
  .animate-spinner-rotate {
618
824
  animation: spinner-rotate 1s linear infinite;
619
825
  }
826
+
620
827
  .grid-cols-3 {
621
828
  grid-template-columns: repeat(3, minmax(0, 1fr));
622
829
  }
830
+
623
831
  .grid-cols-4 {
624
832
  grid-template-columns: repeat(4, minmax(0, 1fr));
625
833
  }
834
+
626
835
  .flex-row {
627
836
  flex-direction: row;
628
837
  }
838
+
629
839
  .flex-col {
630
840
  flex-direction: column;
631
841
  }
842
+
632
843
  .items-start {
633
844
  align-items: flex-start;
634
845
  }
846
+
635
847
  .items-end {
636
848
  align-items: flex-end;
637
849
  }
850
+
638
851
  .items-center {
639
852
  align-items: center;
640
853
  }
854
+
641
855
  .justify-start {
642
856
  justify-content: flex-start;
643
857
  }
858
+
644
859
  .justify-end {
645
860
  justify-content: flex-end;
646
861
  }
862
+
647
863
  .justify-center {
648
864
  justify-content: center;
649
865
  }
866
+
650
867
  .justify-between {
651
868
  justify-content: space-between;
652
869
  }
870
+
653
871
  .gap-0\.5 {
654
872
  gap: 0.125rem;
655
873
  }
874
+
656
875
  .gap-1 {
657
876
  gap: 0.25rem;
658
877
  }
878
+
659
879
  .gap-2 {
660
880
  gap: 0.5rem;
661
881
  }
882
+
662
883
  .gap-3 {
663
884
  gap: 0.75rem;
664
885
  }
886
+
665
887
  .gap-4 {
666
888
  gap: 1rem;
667
889
  }
890
+
668
891
  .gap-6 {
669
892
  gap: 1.5rem;
670
893
  }
894
+
671
895
  .space-y-2 > :not([hidden]) ~ :not([hidden]) {
672
896
  --tw-space-y-reverse: 0;
673
897
  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
674
898
  margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
675
899
  }
900
+
676
901
  .space-y-3 > :not([hidden]) ~ :not([hidden]) {
677
902
  --tw-space-y-reverse: 0;
678
903
  margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
679
904
  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
680
905
  }
906
+
681
907
  .space-y-4 > :not([hidden]) ~ :not([hidden]) {
682
908
  --tw-space-y-reverse: 0;
683
909
  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
684
910
  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
685
911
  }
912
+
686
913
  .space-y-6 > :not([hidden]) ~ :not([hidden]) {
687
914
  --tw-space-y-reverse: 0;
688
915
  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
689
916
  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
690
917
  }
918
+
691
919
  .overflow-hidden {
692
920
  overflow: hidden;
693
921
  }
922
+
694
923
  .rounded {
695
924
  border-radius: 0.25rem;
696
925
  }
926
+
697
927
  .rounded-full {
698
928
  border-radius: 9999px;
699
929
  }
930
+
700
931
  .rounded-lg {
701
932
  border-radius: 0.5rem;
702
933
  }
934
+
703
935
  .rounded-sm {
704
936
  border-radius: 0.125rem;
705
937
  }
938
+
706
939
  .border {
707
940
  border-width: 1px;
708
941
  }
942
+
709
943
  .border-2 {
710
944
  border-width: 2px;
711
945
  }
946
+
712
947
  .border-b {
713
948
  border-bottom-width: 1px;
714
949
  }
950
+
715
951
  .border-gray-200 {
716
952
  --tw-border-opacity: 1;
717
953
  border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));
718
954
  }
955
+
719
956
  .bg-gray-100 {
720
957
  --tw-bg-opacity: 1;
721
958
  background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
722
959
  }
960
+
723
961
  .bg-gray-200 {
724
962
  --tw-bg-opacity: 1;
725
963
  background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));
726
964
  }
965
+
727
966
  .bg-white {
728
967
  --tw-bg-opacity: 1;
729
968
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
730
969
  }
970
+
731
971
  .p-4 {
732
972
  padding: 1rem;
733
973
  }
974
+
734
975
  .p-6 {
735
976
  padding: 1.5rem;
736
977
  }
978
+
737
979
  .p-8 {
738
980
  padding: 2rem;
739
981
  }
982
+
740
983
  .pb-2 {
741
984
  padding-bottom: 0.5rem;
742
985
  }
986
+
743
987
  .pb-4 {
744
988
  padding-bottom: 1rem;
745
989
  }
990
+
746
991
  .pb-6 {
747
992
  padding-bottom: 1.5rem;
748
993
  }
994
+
749
995
  .text-left {
750
996
  text-align: left;
751
997
  }
998
+
752
999
  .text-center {
753
1000
  text-align: center;
754
1001
  }
1002
+
755
1003
  .text-2xl {
756
1004
  font-size: 1.5rem;
757
1005
  line-height: 2rem;
758
1006
  }
1007
+
759
1008
  .text-sm {
760
1009
  font-size: 0.875rem;
761
1010
  line-height: 1.25rem;
762
1011
  }
1012
+
763
1013
  .text-xs {
764
1014
  font-size: 0.75rem;
765
1015
  line-height: 1rem;
766
1016
  }
1017
+
767
1018
  .font-bold {
768
1019
  font-weight: 700;
769
1020
  }
1021
+
770
1022
  .font-medium {
771
1023
  font-weight: 500;
772
1024
  }
1025
+
773
1026
  .font-semibold {
774
1027
  font-weight: 600;
775
1028
  }
1029
+
776
1030
  .text-gray-600 {
777
1031
  --tw-text-opacity: 1;
778
1032
  color: rgb(75 85 99 / var(--tw-text-opacity, 1));
779
1033
  }
1034
+
780
1035
  .opacity-30 {
781
1036
  opacity: 0.3;
782
1037
  }
1038
+
783
1039
  .shadow-lg {
784
1040
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
785
1041
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
786
1042
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
787
1043
  }
1044
+
788
1045
  .ring {
789
1046
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
790
1047
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
791
1048
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
792
1049
  }
1050
+
793
1051
  .blur {
794
1052
  --tw-blur: blur(8px);
795
1053
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
796
1054
  }
1055
+
797
1056
  .transition {
798
1057
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
799
1058
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
800
1059
  transition-duration: 150ms;
801
1060
  }
1061
+
802
1062
  .transition-all {
803
1063
  transition-property: all;
804
1064
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
805
1065
  transition-duration: 150ms;
806
1066
  }
1067
+
807
1068
  .transition-colors {
808
1069
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
809
1070
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
810
1071
  transition-duration: 150ms;
811
1072
  }
1073
+
812
1074
  .duration-300 {
813
1075
  transition-duration: 300ms;
814
1076
  }
1077
+
815
1078
  .ease-in-out {
816
1079
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
817
1080
  }
1081
+
818
1082
  .ease-out {
819
1083
  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
820
1084
  }
1085
+
821
1086
  /* CSS Variables for theming */
1087
+
822
1088
  :root {
823
1089
  --loader-primary: #3b82f6;
824
1090
  --loader-secondary: #8b5cf6;
@@ -828,4 +1094,5 @@ video {
828
1094
  --animation-duration-normal: 1s;
829
1095
  --animation-duration-fast: 0.5s;
830
1096
  }
1097
+
831
1098
  /* Base loader styles */
@@ -1,10 +1,18 @@
1
1
  import { CSSProperties, HTMLAttributes } from 'react';
2
+ /**
3
+ * Size preset options
4
+ */
5
+ export type SizePreset = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
6
+ /**
7
+ * Size preset to pixel mapping
8
+ */
9
+ export declare const SIZE_PRESET_MAP: Record<SizePreset, number>;
2
10
  /**
3
11
  * Base props for all loader components
4
12
  */
5
13
  export interface BaseLoaderProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color'> {
6
- /** Size of the loader (numeric for px, or CSS string like '2rem') */
7
- size?: number | string;
14
+ /** Size of the loader (preset, numeric for px, or CSS string like '2rem') */
15
+ size?: SizePreset | number | string;
8
16
  /** Primary color of the loader */
9
17
  color?: string;
10
18
  /** Secondary color (for multi-color loaders) */
@@ -19,6 +27,10 @@ export interface BaseLoaderProps extends Omit<HTMLAttributes<HTMLDivElement>, 'c
19
27
  visible?: boolean;
20
28
  /** Animation speed: 'slow' | 'normal' | 'fast' or milliseconds */
21
29
  speed?: 'slow' | 'normal' | 'fast' | number;
30
+ /** Reverse animation direction */
31
+ reverse?: boolean;
32
+ /** Respect user's reduced motion preference (default: true) */
33
+ respectMotionPreference?: boolean;
22
34
  /** Test ID for testing */
23
35
  testId?: string;
24
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACpF,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAE5C,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE/B,uBAAuB;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gCAAgC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,wCAAwC;IACxC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAIpD,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAMtD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACpF,6EAA6E;IAC7E,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;IAEpC,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAE5C,kCAAkC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,+DAA+D;IAC/D,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE/B,uBAAuB;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gCAAgC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,wCAAwC;IACxC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAIpD,CAAC"}
@@ -20,8 +20,9 @@ export declare function hexToRgb(hex: string): {
20
20
  export declare function getAnimationDuration(speed?: 'slow' | 'normal' | 'fast' | number): string;
21
21
  /**
22
22
  * Normalize size value to CSS string
23
+ * Supports size presets ('xs', 'sm', 'md', 'lg', 'xl'), numeric values, or CSS strings
23
24
  */
24
- export declare function normalizeSize(size?: number | string): string;
25
+ export declare function normalizeSize(size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number | string): string;
25
26
  /**
26
27
  * Safely parse size to number with fallback
27
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAShF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAiB,GAAG,MAAM,CAclG;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAK5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW7F;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA8BvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAIhE"}
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/utils/colors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAShF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAiB,GAAG,MAAM,CAclG;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAkB/F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW7F;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA8BvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAIhE"}