@zentauri-ui/zentauri-components 1.3.1 → 1.4.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 (307) hide show
  1. package/README.md +78 -0
  2. package/cli/cli.integration.test.ts +51 -0
  3. package/cli/index.mjs +664 -0
  4. package/cli/registry.json +36 -0
  5. package/cli/rewrite-imports.mjs +57 -0
  6. package/cli/rewrite-imports.test.ts +71 -0
  7. package/dist/ui/slider/slider.d.ts +18 -0
  8. package/dist/ui/slider/slider.d.ts.map +1 -1
  9. package/dist/ui/slider.js +21 -25
  10. package/dist/ui/slider.js.map +1 -1
  11. package/dist/ui/slider.mjs +21 -25
  12. package/dist/ui/slider.mjs.map +1 -1
  13. package/package.json +8 -2
  14. package/src/hooks/index.ts +48 -0
  15. package/src/hooks/useBodyScrollLock/index.ts +1 -0
  16. package/src/hooks/useBodyScrollLock/useBodyScrollLock.test.ts +51 -0
  17. package/src/hooks/useBodyScrollLock/useBodyScrollLock.ts +48 -0
  18. package/src/hooks/useClickOutside/index.ts +5 -0
  19. package/src/hooks/useClickOutside/useClickOutside.test.tsx +60 -0
  20. package/src/hooks/useClickOutside/useClickOutside.ts +52 -0
  21. package/src/hooks/useClipboard/index.ts +1 -0
  22. package/src/hooks/useClipboard/useClipboard.test.ts +101 -0
  23. package/src/hooks/useClipboard/useClipboard.ts +69 -0
  24. package/src/hooks/useControllableState/index.ts +4 -0
  25. package/src/hooks/useControllableState/useControllableState.test.ts +59 -0
  26. package/src/hooks/useControllableState/useControllableState.ts +49 -0
  27. package/src/hooks/useDebouncedValue/index.ts +1 -0
  28. package/src/hooks/useDebouncedValue/useDebouncedValue.test.ts +74 -0
  29. package/src/hooks/useDebouncedValue/useDebouncedValue.ts +29 -0
  30. package/src/hooks/useDisclosure/index.ts +5 -0
  31. package/src/hooks/useDisclosure/useDisclosure.test.ts +64 -0
  32. package/src/hooks/useDisclosure/useDisclosure.ts +62 -0
  33. package/src/hooks/useDocumentTitle/index.ts +4 -0
  34. package/src/hooks/useDocumentTitle/useDocumentTitle.test.ts +40 -0
  35. package/src/hooks/useDocumentTitle/useDocumentTitle.ts +58 -0
  36. package/src/hooks/useFocusManagement/index.ts +1 -0
  37. package/src/hooks/useFocusManagement/useFocusManagement.test.tsx +45 -0
  38. package/src/hooks/useFocusManagement/useFocusManagement.ts +77 -0
  39. package/src/hooks/useHover/index.ts +1 -0
  40. package/src/hooks/useHover/useHover.test.ts +45 -0
  41. package/src/hooks/useHover/useHover.ts +45 -0
  42. package/src/hooks/useInView/index.ts +1 -0
  43. package/src/hooks/useInView/useInView.test.ts +43 -0
  44. package/src/hooks/useInView/useInView.ts +28 -0
  45. package/src/hooks/useIntersectionObserver/index.ts +4 -0
  46. package/src/hooks/useIntersectionObserver/useIntersectionObserver.test.ts +75 -0
  47. package/src/hooks/useIntersectionObserver/useIntersectionObserver.ts +54 -0
  48. package/src/hooks/useIsMounted/index.ts +1 -0
  49. package/src/hooks/useIsMounted/useIsMounted.test.ts +25 -0
  50. package/src/hooks/useIsMounted/useIsMounted.ts +22 -0
  51. package/src/hooks/useIsomorphicLayoutEffect/index.ts +1 -0
  52. package/src/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.test.ts +19 -0
  53. package/src/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.ts +12 -0
  54. package/src/hooks/useLocalStorage/index.ts +4 -0
  55. package/src/hooks/useLocalStorage/useLocalStorage.test.ts +99 -0
  56. package/src/hooks/useLocalStorage/useLocalStorage.ts +109 -0
  57. package/src/hooks/useMediaQuery/index.ts +1 -0
  58. package/src/hooks/useMediaQuery/useMediaQuery.test.ts +63 -0
  59. package/src/hooks/useMediaQuery/useMediaQuery.ts +37 -0
  60. package/src/hooks/useNetworkStatus/index.ts +1 -0
  61. package/src/hooks/useNetworkStatus/useNetworkStatus.test.ts +53 -0
  62. package/src/hooks/useNetworkStatus/useNetworkStatus.ts +33 -0
  63. package/src/hooks/usePageVisibility/index.ts +1 -0
  64. package/src/hooks/usePageVisibility/usePageVisibility.test.ts +21 -0
  65. package/src/hooks/usePageVisibility/usePageVisibility.ts +31 -0
  66. package/src/hooks/usePagination/index.ts +6 -0
  67. package/src/hooks/usePagination/usePagination.test.ts +139 -0
  68. package/src/hooks/usePagination/usePagination.ts +153 -0
  69. package/src/hooks/usePrefersColorScheme/index.ts +4 -0
  70. package/src/hooks/usePrefersColorScheme/usePrefersColorScheme.test.ts +53 -0
  71. package/src/hooks/usePrefersColorScheme/usePrefersColorScheme.ts +21 -0
  72. package/src/hooks/usePrefersReducedMotion/index.ts +1 -0
  73. package/src/hooks/usePrefersReducedMotion/usePrefersReducedMotion.test.ts +27 -0
  74. package/src/hooks/usePrefersReducedMotion/usePrefersReducedMotion.ts +14 -0
  75. package/src/hooks/useResizeObserver/index.ts +4 -0
  76. package/src/hooks/useResizeObserver/useResizeObserver.test.ts +68 -0
  77. package/src/hooks/useResizeObserver/useResizeObserver.ts +58 -0
  78. package/src/hooks/useSessionStorage/index.ts +4 -0
  79. package/src/hooks/useSessionStorage/useSessionStorage.test.ts +54 -0
  80. package/src/hooks/useSessionStorage/useSessionStorage.ts +84 -0
  81. package/src/hooks/useThrottledCallback/index.ts +1 -0
  82. package/src/hooks/useThrottledCallback/useThrottledCallback.test.ts +75 -0
  83. package/src/hooks/useThrottledCallback/useThrottledCallback.ts +36 -0
  84. package/src/hooks/useToggle/index.ts +1 -0
  85. package/src/hooks/useToggle/useToggle.test.ts +40 -0
  86. package/src/hooks/useToggle/useToggle.ts +22 -0
  87. package/src/hooks/useWindowSize/index.ts +1 -0
  88. package/src/hooks/useWindowSize/useWindowSize.test.ts +23 -0
  89. package/src/hooks/useWindowSize/useWindowSize.ts +39 -0
  90. package/src/lib/utils.ts +25 -0
  91. package/src/ui/accordion/accordion-base.tsx +223 -0
  92. package/src/ui/accordion/accordion.test.tsx +146 -0
  93. package/src/ui/accordion/accordion.tsx +11 -0
  94. package/src/ui/accordion/animated/accordion-content-animated.tsx +46 -0
  95. package/src/ui/accordion/animated/accordion-root-animated.tsx +10 -0
  96. package/src/ui/accordion/animated/animations.ts +16 -0
  97. package/src/ui/accordion/animated/index.ts +7 -0
  98. package/src/ui/accordion/animated/types.ts +7 -0
  99. package/src/ui/accordion/index.ts +23 -0
  100. package/src/ui/accordion/types.ts +48 -0
  101. package/src/ui/accordion/variants.ts +115 -0
  102. package/src/ui/alert/alert-base.tsx +157 -0
  103. package/src/ui/alert/alert.test.tsx +150 -0
  104. package/src/ui/alert/alert.tsx +9 -0
  105. package/src/ui/alert/animated/alert-animated.tsx +20 -0
  106. package/src/ui/alert/animated/animations.ts +20 -0
  107. package/src/ui/alert/animated/index.ts +3 -0
  108. package/src/ui/alert/animated/types.ts +16 -0
  109. package/src/ui/alert/index.ts +22 -0
  110. package/src/ui/alert/types.ts +28 -0
  111. package/src/ui/alert/variants.ts +74 -0
  112. package/src/ui/avatar/animated/animations.ts +11 -0
  113. package/src/ui/avatar/animated/avatar-animated.tsx +25 -0
  114. package/src/ui/avatar/animated/index.ts +6 -0
  115. package/src/ui/avatar/animated/types.ts +16 -0
  116. package/src/ui/avatar/avatar-base.tsx +184 -0
  117. package/src/ui/avatar/avatar.test.tsx +51 -0
  118. package/src/ui/avatar/avatar.tsx +11 -0
  119. package/src/ui/avatar/index.ts +16 -0
  120. package/src/ui/avatar/types.ts +36 -0
  121. package/src/ui/avatar/variants.ts +52 -0
  122. package/src/ui/badge/animated/animations.ts +20 -0
  123. package/src/ui/badge/animated/badge-animated.tsx +28 -0
  124. package/src/ui/badge/animated/index.ts +5 -0
  125. package/src/ui/badge/animated/types.ts +18 -0
  126. package/src/ui/badge/badge-base.tsx +53 -0
  127. package/src/ui/badge/badge.test.tsx +48 -0
  128. package/src/ui/badge/badge.tsx +9 -0
  129. package/src/ui/badge/index.ts +5 -0
  130. package/src/ui/badge/types.ts +25 -0
  131. package/src/ui/badge/variants.ts +85 -0
  132. package/src/ui/breadcrumb/breadcrumb.test.tsx +62 -0
  133. package/src/ui/breadcrumb/breadcrumb.tsx +135 -0
  134. package/src/ui/breadcrumb/index.ts +28 -0
  135. package/src/ui/breadcrumb/types.ts +29 -0
  136. package/src/ui/breadcrumb/variants.ts +53 -0
  137. package/src/ui/buttons/animated/animations.ts +34 -0
  138. package/src/ui/buttons/animated/button-animated.tsx +70 -0
  139. package/src/ui/buttons/animated/index.ts +5 -0
  140. package/src/ui/buttons/animated/types.ts +29 -0
  141. package/src/ui/buttons/button-base.tsx +59 -0
  142. package/src/ui/buttons/button.test.tsx +480 -0
  143. package/src/ui/buttons/button.tsx +9 -0
  144. package/src/ui/buttons/index.ts +5 -0
  145. package/src/ui/buttons/types.ts +14 -0
  146. package/src/ui/buttons/variants.ts +77 -0
  147. package/src/ui/card/animated/animations.ts +32 -0
  148. package/src/ui/card/animated/card-animated.tsx +28 -0
  149. package/src/ui/card/animated/index.ts +12 -0
  150. package/src/ui/card/animated/types.ts +8 -0
  151. package/src/ui/card/card-base.tsx +146 -0
  152. package/src/ui/card/card.test.tsx +79 -0
  153. package/src/ui/card/card.tsx +11 -0
  154. package/src/ui/card/index.ts +21 -0
  155. package/src/ui/card/types.ts +42 -0
  156. package/src/ui/card/variants.ts +122 -0
  157. package/src/ui/divider/animated/animations.ts +27 -0
  158. package/src/ui/divider/animated/divider-animated.tsx +24 -0
  159. package/src/ui/divider/animated/index.ts +4 -0
  160. package/src/ui/divider/animated/types.ts +18 -0
  161. package/src/ui/divider/divider-base.tsx +80 -0
  162. package/src/ui/divider/divider.tsx +9 -0
  163. package/src/ui/divider/index.ts +14 -0
  164. package/src/ui/divider/types.ts +18 -0
  165. package/src/ui/divider/variants.ts +98 -0
  166. package/src/ui/drawer/animated/animations.ts +39 -0
  167. package/src/ui/drawer/animated/drawer-content-animated.tsx +101 -0
  168. package/src/ui/drawer/animated/index.ts +14 -0
  169. package/src/ui/drawer/animated/types.ts +18 -0
  170. package/src/ui/drawer/drawer-base.tsx +259 -0
  171. package/src/ui/drawer/drawer.test.tsx +132 -0
  172. package/src/ui/drawer/drawer.tsx +11 -0
  173. package/src/ui/drawer/index.ts +21 -0
  174. package/src/ui/drawer/types.ts +39 -0
  175. package/src/ui/drawer/variants.ts +122 -0
  176. package/src/ui/dropdown/dropdown.test.tsx +114 -0
  177. package/src/ui/dropdown/dropdown.tsx +179 -0
  178. package/src/ui/dropdown/index.ts +15 -0
  179. package/src/ui/dropdown/types.ts +68 -0
  180. package/src/ui/dropdown/variants.ts +138 -0
  181. package/src/ui/empty-state/animated/animations.ts +19 -0
  182. package/src/ui/empty-state/animated/empty-state-animated.tsx +23 -0
  183. package/src/ui/empty-state/animated/index.ts +7 -0
  184. package/src/ui/empty-state/animated/types.ts +26 -0
  185. package/src/ui/empty-state/empty-state-base.tsx +114 -0
  186. package/src/ui/empty-state/empty-state.tsx +9 -0
  187. package/src/ui/empty-state/index.ts +10 -0
  188. package/src/ui/empty-state/types.ts +19 -0
  189. package/src/ui/empty-state/variants.ts +51 -0
  190. package/src/ui/file-upload/file-upload.test.tsx +36 -0
  191. package/src/ui/file-upload/file-upload.tsx +119 -0
  192. package/src/ui/file-upload/index.ts +5 -0
  193. package/src/ui/file-upload/types.ts +21 -0
  194. package/src/ui/file-upload/variants.ts +29 -0
  195. package/src/ui/inputs/animated/animations.ts +36 -0
  196. package/src/ui/inputs/animated/index.ts +5 -0
  197. package/src/ui/inputs/animated/input-animated.tsx +124 -0
  198. package/src/ui/inputs/animated/types.ts +40 -0
  199. package/src/ui/inputs/index.ts +5 -0
  200. package/src/ui/inputs/input-base.tsx +114 -0
  201. package/src/ui/inputs/input.test.tsx +414 -0
  202. package/src/ui/inputs/input.tsx +8 -0
  203. package/src/ui/inputs/types.ts +18 -0
  204. package/src/ui/inputs/variants.ts +316 -0
  205. package/src/ui/modal/animated/animations.ts +29 -0
  206. package/src/ui/modal/animated/index.ts +5 -0
  207. package/src/ui/modal/animated/modal-content-animated.tsx +96 -0
  208. package/src/ui/modal/animated/types.ts +23 -0
  209. package/src/ui/modal/index.ts +21 -0
  210. package/src/ui/modal/modal-base.tsx +279 -0
  211. package/src/ui/modal/modal.test.tsx +129 -0
  212. package/src/ui/modal/modal.tsx +8 -0
  213. package/src/ui/modal/types.ts +31 -0
  214. package/src/ui/modal/variants.ts +109 -0
  215. package/src/ui/pagination/index.ts +13 -0
  216. package/src/ui/pagination/pagination.test.tsx +165 -0
  217. package/src/ui/pagination/pagination.tsx +237 -0
  218. package/src/ui/pagination/types.ts +66 -0
  219. package/src/ui/pagination/variants.ts +97 -0
  220. package/src/ui/progress/animated/animations.ts +9 -0
  221. package/src/ui/progress/animated/index.ts +17 -0
  222. package/src/ui/progress/animated/progress-animated.tsx +133 -0
  223. package/src/ui/progress/animated/types.ts +35 -0
  224. package/src/ui/progress/index.ts +10 -0
  225. package/src/ui/progress/progress-base.tsx +151 -0
  226. package/src/ui/progress/progress.test.tsx +84 -0
  227. package/src/ui/progress/progress.tsx +12 -0
  228. package/src/ui/progress/types.ts +33 -0
  229. package/src/ui/progress/variants.ts +105 -0
  230. package/src/ui/select/index.ts +25 -0
  231. package/src/ui/select/select.test.tsx +128 -0
  232. package/src/ui/select/select.tsx +221 -0
  233. package/src/ui/select/types.ts +77 -0
  234. package/src/ui/select/variants.ts +163 -0
  235. package/src/ui/skeleton/animated/animations.ts +15 -0
  236. package/src/ui/skeleton/animated/index.ts +20 -0
  237. package/src/ui/skeleton/animated/skeleton-animated.tsx +119 -0
  238. package/src/ui/skeleton/animated/types.ts +49 -0
  239. package/src/ui/skeleton/index.ts +24 -0
  240. package/src/ui/skeleton/skeleton-base.tsx +288 -0
  241. package/src/ui/skeleton/skeleton.tsx +8 -0
  242. package/src/ui/skeleton/types.ts +31 -0
  243. package/src/ui/skeleton/variants.ts +254 -0
  244. package/src/ui/slider/index.ts +22 -0
  245. package/src/ui/slider/slider.test.tsx +94 -0
  246. package/src/ui/slider/slider.tsx +728 -0
  247. package/src/ui/slider/types.ts +66 -0
  248. package/src/ui/slider/variants.ts +81 -0
  249. package/src/ui/spinner/animated/index.ts +5 -0
  250. package/src/ui/spinner/animated/spinner.test.tsx +41 -0
  251. package/src/ui/spinner/animated/spinner.tsx +143 -0
  252. package/src/ui/spinner/animated/types.ts +11 -0
  253. package/src/ui/spinner/animated/variants.ts +50 -0
  254. package/src/ui/stepper/index.ts +22 -0
  255. package/src/ui/stepper/stepper.test.tsx +183 -0
  256. package/src/ui/stepper/stepper.tsx +172 -0
  257. package/src/ui/stepper/types.ts +32 -0
  258. package/src/ui/stepper/variants.ts +69 -0
  259. package/src/ui/table/animated/animations.ts +9 -0
  260. package/src/ui/table/animated/index.ts +15 -0
  261. package/src/ui/table/animated/table-animated.tsx +15 -0
  262. package/src/ui/table/animated/types.ts +16 -0
  263. package/src/ui/table/index.ts +22 -0
  264. package/src/ui/table/table-base.tsx +197 -0
  265. package/src/ui/table/table.tsx +13 -0
  266. package/src/ui/table/types.ts +47 -0
  267. package/src/ui/table/variants.ts +105 -0
  268. package/src/ui/tabs/animated/animations.ts +48 -0
  269. package/src/ui/tabs/animated/index.ts +8 -0
  270. package/src/ui/tabs/animated/tabs-content-animated.tsx +46 -0
  271. package/src/ui/tabs/animated/types.ts +24 -0
  272. package/src/ui/tabs/index.ts +10 -0
  273. package/src/ui/tabs/tabs-base.tsx +185 -0
  274. package/src/ui/tabs/tabs.test.tsx +53 -0
  275. package/src/ui/tabs/tabs.tsx +2 -0
  276. package/src/ui/tabs/types.ts +88 -0
  277. package/src/ui/tabs/variants.ts +70 -0
  278. package/src/ui/toast/animated/animations.ts +17 -0
  279. package/src/ui/toast/animated/index.ts +9 -0
  280. package/src/ui/toast/animated/toast-animated.tsx +96 -0
  281. package/src/ui/toast/animated/types.ts +13 -0
  282. package/src/ui/toast/index.ts +26 -0
  283. package/src/ui/toast/toast-base.tsx +231 -0
  284. package/src/ui/toast/toast.test.tsx +102 -0
  285. package/src/ui/toast/toast.tsx +13 -0
  286. package/src/ui/toast/types.ts +57 -0
  287. package/src/ui/toast/variants.ts +73 -0
  288. package/src/ui/toggle/animated/animations.ts +9 -0
  289. package/src/ui/toggle/animated/index.ts +7 -0
  290. package/src/ui/toggle/animated/toggle-animated.tsx +76 -0
  291. package/src/ui/toggle/animated/types.ts +13 -0
  292. package/src/ui/toggle/index.ts +5 -0
  293. package/src/ui/toggle/toggle-base.tsx +70 -0
  294. package/src/ui/toggle/toggle.test.tsx +44 -0
  295. package/src/ui/toggle/toggle.tsx +9 -0
  296. package/src/ui/toggle/types.ts +18 -0
  297. package/src/ui/toggle/variants.ts +84 -0
  298. package/src/ui/tooltip/animated/animations.ts +16 -0
  299. package/src/ui/tooltip/animated/index.ts +10 -0
  300. package/src/ui/tooltip/animated/tooltip-content-animated.tsx +47 -0
  301. package/src/ui/tooltip/animated/types.ts +19 -0
  302. package/src/ui/tooltip/index.ts +17 -0
  303. package/src/ui/tooltip/tooltip-base.tsx +152 -0
  304. package/src/ui/tooltip/tooltip.test.tsx +84 -0
  305. package/src/ui/tooltip/tooltip.tsx +8 -0
  306. package/src/ui/tooltip/types.ts +57 -0
  307. package/src/ui/tooltip/variants.ts +61 -0
@@ -0,0 +1,254 @@
1
+ import { cva } from "class-variance-authority";
2
+
3
+ const shimmerLayer =
4
+ "[background-size:220%_100%] [background-repeat:no-repeat] [background-position:100%_0%]";
5
+
6
+ export const skeletonShimmerGradientClasses = {
7
+ default: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(255,255,255,0.04),rgba(255,255,255,0.22),rgba(255,255,255,0.04))]`,
8
+ subtle: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(255,255,255,0.03),rgba(255,255,255,0.14),rgba(255,255,255,0.03))]`,
9
+ muted: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(255,255,255,0.02),rgba(255,255,255,0.1),rgba(255,255,255,0.02))]`,
10
+ sky: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(56,189,248,0.1),rgba(56,189,248,0.42),rgba(56,189,248,0.1))]`,
11
+ rose: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(251,113,133,0.1),rgba(251,113,133,0.42),rgba(251,113,133,0.1))]`,
12
+ purple: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(192,132,252,0.1),rgba(192,132,252,0.42),rgba(192,132,252,0.1))]`,
13
+ pink: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(244,114,182,0.1),rgba(244,114,182,0.42),rgba(244,114,182,0.1))]`,
14
+ orange: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(251,146,60,0.1),rgba(251,146,60,0.42),rgba(251,146,60,0.1))]`,
15
+ yellow: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(250,204,21,0.12),rgba(250,204,21,0.4),rgba(250,204,21,0.12))]`,
16
+ teal: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(45,212,191,0.1),rgba(45,212,191,0.42),rgba(45,212,191,0.1))]`,
17
+ indigo: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(129,140,248,0.1),rgba(129,140,248,0.42),rgba(129,140,248,0.1))]`,
18
+ emerald: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(52,211,153,0.1),rgba(52,211,153,0.42),rgba(52,211,153,0.1))]`,
19
+ gray: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(161,161,170,0.1),rgba(161,161,170,0.38),rgba(161,161,170,0.1))]`,
20
+ amber: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(251,191,36,0.12),rgba(251,191,36,0.42),rgba(251,191,36,0.12))]`,
21
+ violet: `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(167,139,250,0.1),rgba(167,139,250,0.42),rgba(167,139,250,0.1))]`,
22
+ "gradient-blue": `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(100,149,237,0.1),rgba(100,149,237,0.42),rgba(100,149,237,0.1))]`,
23
+ "gradient-green": `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(52,211,153,0.1),rgba(52,211,153,0.42),rgba(52,211,153,0.1))]`,
24
+ "gradient-red": `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(239,68,68,0.1),rgba(239,68,68,0.42),rgba(239,68,68,0.1))]`,
25
+ "gradient-yellow": `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(250,204,21,0.12),rgba(250,204,21,0.42),rgba(250,204,21,0.12))]`,
26
+ "gradient-purple": `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(167,139,250,0.1),rgba(167,139,250,0.42),rgba(167,139,250,0.1))]`,
27
+ "gradient-teal": `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(45,212,191,0.1),rgba(45,212,191,0.42),rgba(45,212,191,0.1))]`,
28
+ "gradient-indigo": `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(129,140,248,0.1),rgba(129,140,248,0.42),rgba(129,140,248,0.1))]`,
29
+ "gradient-pink": `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(244,114,182,0.1),rgba(244,114,182,0.42),rgba(244,114,182,0.1))]`,
30
+ "gradient-orange": `${shimmerLayer} [background-image:linear-gradient(90deg,rgba(251,146,60,0.1),rgba(251,146,60,0.42),rgba(251,146,60,0.1))]`,
31
+ } as const;
32
+
33
+ export type SkeletonShimmerTone = keyof typeof skeletonShimmerGradientClasses;
34
+
35
+ export const skeletonVariants = cva(
36
+ "relative overflow-hidden bg-white/10 text-transparent",
37
+ {
38
+ variants: {
39
+ appearance: {
40
+ default: "bg-white/10",
41
+ subtle: "bg-white/[0.07]",
42
+ muted: "bg-slate-800/80",
43
+ sky: "bg-sky-500/10",
44
+ rose: "bg-rose-500/10",
45
+ purple: "bg-purple-500/10",
46
+ pink: "bg-pink-500/10",
47
+ orange: "bg-orange-500/10",
48
+ yellow: "bg-yellow-500/10",
49
+ teal: "bg-teal-500/10",
50
+ indigo: "bg-indigo-500/10",
51
+ emerald: "bg-emerald-500/10",
52
+ gray: "bg-gray-500/10",
53
+ amber: "bg-amber-500/10",
54
+ violet: "bg-violet-500/10",
55
+ "gradient-blue": "bg-gradient-to-r from-blue-600 to-purple-600",
56
+ "gradient-green": "bg-gradient-to-r from-green-600 to-lime-600",
57
+ "gradient-red": "bg-gradient-to-r from-red-600 to-pink-600",
58
+ "gradient-yellow": "bg-gradient-to-r from-yellow-600 to-orange-600",
59
+ "gradient-purple": "bg-gradient-to-r from-purple-600 to-pink-600",
60
+ "gradient-teal": "bg-gradient-to-r from-teal-600 to-cyan-600",
61
+ "gradient-indigo": "bg-gradient-to-r from-indigo-600 to-purple-600",
62
+ "gradient-pink": "bg-gradient-to-r from-pink-600 to-rose-600",
63
+ "gradient-orange": "bg-gradient-to-r from-orange-600 to-red-600",
64
+ },
65
+ size: {
66
+ sm: "min-h-3",
67
+ md: "min-h-4",
68
+ lg: "min-h-6",
69
+ },
70
+ rounded: {
71
+ none: "rounded-none",
72
+ sm: "rounded-md",
73
+ md: "rounded-lg",
74
+ lg: "rounded-xl",
75
+ full: "rounded-full",
76
+ },
77
+ animation: {
78
+ none: "",
79
+ shimmer: "",
80
+ pulse: "",
81
+ },
82
+ shimmerTone: {
83
+ default: "",
84
+ subtle: "",
85
+ muted: "",
86
+ sky: "",
87
+ rose: "",
88
+ purple: "",
89
+ pink: "",
90
+ orange: "",
91
+ yellow: "",
92
+ teal: "",
93
+ indigo: "",
94
+ emerald: "",
95
+ gray: "",
96
+ amber: "",
97
+ violet: "",
98
+ "gradient-blue": "",
99
+ "gradient-green": "",
100
+ "gradient-red": "",
101
+ "gradient-yellow": "",
102
+ "gradient-purple": "",
103
+ "gradient-teal": "",
104
+ "gradient-indigo": "",
105
+ "gradient-pink": "",
106
+ "gradient-orange": "",
107
+ },
108
+ },
109
+ compoundVariants: [
110
+ {
111
+ animation: "shimmer",
112
+ shimmerTone: "default",
113
+ class: skeletonShimmerGradientClasses.default,
114
+ },
115
+ {
116
+ animation: "shimmer",
117
+ shimmerTone: "muted",
118
+ class: skeletonShimmerGradientClasses.subtle,
119
+ },
120
+ {
121
+ animation: "shimmer",
122
+ shimmerTone: "subtle",
123
+ class: skeletonShimmerGradientClasses.subtle,
124
+ },
125
+ {
126
+ animation: "shimmer",
127
+ shimmerTone: "sky",
128
+ class: skeletonShimmerGradientClasses.sky,
129
+ },
130
+ {
131
+ animation: "shimmer",
132
+ shimmerTone: "rose",
133
+ class: skeletonShimmerGradientClasses.rose,
134
+ },
135
+ {
136
+ animation: "shimmer",
137
+ shimmerTone: "purple",
138
+ class: skeletonShimmerGradientClasses.purple,
139
+ },
140
+ {
141
+ animation: "shimmer",
142
+ shimmerTone: "pink",
143
+ class: skeletonShimmerGradientClasses.pink,
144
+ },
145
+ {
146
+ animation: "shimmer",
147
+ shimmerTone: "orange",
148
+ class: skeletonShimmerGradientClasses.orange,
149
+ },
150
+ {
151
+ animation: "shimmer",
152
+ shimmerTone: "yellow",
153
+ class: skeletonShimmerGradientClasses.yellow,
154
+ },
155
+ {
156
+ animation: "shimmer",
157
+ shimmerTone: "teal",
158
+ class: skeletonShimmerGradientClasses.teal,
159
+ },
160
+ {
161
+ animation: "shimmer",
162
+ shimmerTone: "indigo",
163
+ class: skeletonShimmerGradientClasses.indigo,
164
+ },
165
+ {
166
+ animation: "shimmer",
167
+ shimmerTone: "emerald",
168
+ class: skeletonShimmerGradientClasses.emerald,
169
+ },
170
+ {
171
+ animation: "shimmer",
172
+ shimmerTone: "gray",
173
+ class: skeletonShimmerGradientClasses.gray,
174
+ },
175
+ {
176
+ animation: "shimmer",
177
+ shimmerTone: "amber",
178
+ class: skeletonShimmerGradientClasses.amber,
179
+ },
180
+ {
181
+ animation: "shimmer",
182
+ shimmerTone: "violet",
183
+ class: skeletonShimmerGradientClasses.violet,
184
+ },
185
+ {
186
+ animation: "shimmer",
187
+ shimmerTone: "gradient-blue",
188
+ class: skeletonShimmerGradientClasses["gradient-blue"],
189
+ },
190
+ {
191
+ animation: "shimmer",
192
+ shimmerTone: "gradient-green",
193
+ class: skeletonShimmerGradientClasses["gradient-green"],
194
+ },
195
+ {
196
+ animation: "shimmer",
197
+ shimmerTone: "gradient-red",
198
+ class: skeletonShimmerGradientClasses["gradient-red"],
199
+ },
200
+ {
201
+ animation: "shimmer",
202
+ shimmerTone: "gradient-yellow",
203
+ class: skeletonShimmerGradientClasses["gradient-yellow"],
204
+ },
205
+ {
206
+ animation: "shimmer",
207
+ shimmerTone: "gradient-purple",
208
+ class: skeletonShimmerGradientClasses["gradient-purple"],
209
+ },
210
+ {
211
+ animation: "shimmer",
212
+ shimmerTone: "gradient-teal",
213
+ class: skeletonShimmerGradientClasses["gradient-teal"],
214
+ },
215
+ {
216
+ animation: "shimmer",
217
+ shimmerTone: "gradient-indigo",
218
+ class: skeletonShimmerGradientClasses["gradient-indigo"],
219
+ },
220
+ {
221
+ animation: "shimmer",
222
+ shimmerTone: "gradient-pink",
223
+ class: skeletonShimmerGradientClasses["gradient-pink"],
224
+ },
225
+ {
226
+ animation: "shimmer",
227
+ shimmerTone: "gradient-orange",
228
+ class: skeletonShimmerGradientClasses["gradient-orange"],
229
+ },
230
+ {
231
+ animation: "pulse",
232
+ class: "",
233
+ },
234
+ ],
235
+ defaultVariants: {
236
+ appearance: "default",
237
+ size: "md",
238
+ rounded: "md",
239
+ animation: "shimmer",
240
+ shimmerTone: "default",
241
+ },
242
+ },
243
+ );
244
+
245
+ export const skeletonTextLineVariants = cva("block w-full", {
246
+ variants: {
247
+ size: {
248
+ sm: "h-2.5",
249
+ md: "h-3",
250
+ lg: "h-4",
251
+ },
252
+ },
253
+ defaultVariants: { size: "md" },
254
+ });
@@ -0,0 +1,22 @@
1
+ "use client";
2
+
3
+ export {
4
+ RangeSlider,
5
+ Slider,
6
+ SliderRange,
7
+ SliderThumb,
8
+ SliderTrack,
9
+ } from "./slider";
10
+ export type {
11
+ RangeSliderProps,
12
+ SliderProps,
13
+ SliderRangeProps,
14
+ SliderThumbProps,
15
+ SliderTrackProps,
16
+ } from "./types";
17
+ export {
18
+ sliderRangeVariants,
19
+ sliderRootVariants,
20
+ sliderThumbVariants,
21
+ sliderTrackVariants,
22
+ } from "./variants";
@@ -0,0 +1,94 @@
1
+ import { createRef } from "react";
2
+ import { render, screen } from "@testing-library/react";
3
+ import userEvent from "@testing-library/user-event";
4
+ import { describe, expect, it } from "vitest";
5
+
6
+ import {
7
+ RangeSlider,
8
+ Slider,
9
+ SliderRange,
10
+ SliderThumb,
11
+ SliderTrack,
12
+ } from "./slider";
13
+
14
+ describe("Slider", () => {
15
+ it("should expose displayName", () => {
16
+ expect(Slider.displayName).toBe("Slider");
17
+ expect(SliderTrack.displayName).toBe("SliderTrack");
18
+ expect(SliderRange.displayName).toBe("SliderRange");
19
+ expect(SliderThumb.displayName).toBe("SliderThumb");
20
+ expect(RangeSlider.displayName).toBe("RangeSlider");
21
+ });
22
+
23
+ it("should stamp data-slot on slider root", () => {
24
+ render(
25
+ <Slider aria-label="Volume" defaultValue={40}>
26
+ <SliderTrack>
27
+ <SliderRange />
28
+ <SliderThumb />
29
+ </SliderTrack>
30
+ </Slider>,
31
+ );
32
+ expect(document.querySelector('[data-slot="slider"]')).toBeTruthy();
33
+ });
34
+
35
+ it("should expose slider role on thumb", () => {
36
+ render(
37
+ <Slider defaultValue={25} min={0} max={50} step={1} aria-label="Level">
38
+ <SliderTrack>
39
+ <SliderRange />
40
+ <SliderThumb />
41
+ </SliderTrack>
42
+ </Slider>,
43
+ );
44
+ expect(screen.getByRole("slider")).toHaveAttribute("aria-valuenow", "25");
45
+ });
46
+
47
+ it("should adjust value with keyboard", async () => {
48
+ const user = userEvent.setup();
49
+ render(
50
+ <Slider defaultValue={10} step={5} aria-label="Test">
51
+ <SliderTrack>
52
+ <SliderRange />
53
+ <SliderThumb />
54
+ </SliderTrack>
55
+ </Slider>,
56
+ );
57
+ const thumb = screen.getByRole("slider");
58
+ thumb.focus();
59
+ await user.keyboard("{ArrowRight}");
60
+ expect(thumb).toHaveAttribute("aria-valuenow", "15");
61
+ });
62
+
63
+ it("should forward ref on Slider", () => {
64
+ const ref = createRef<HTMLDivElement>();
65
+ render(
66
+ <Slider ref={ref} aria-label="R" defaultValue={0}>
67
+ <SliderTrack>
68
+ <SliderRange />
69
+ <SliderThumb />
70
+ </SliderTrack>
71
+ </Slider>,
72
+ );
73
+ expect(ref.current?.getAttribute("data-slot")).toBe("slider");
74
+ });
75
+ });
76
+
77
+ describe("RangeSlider", () => {
78
+ it("should stamp data-slot on range slider", () => {
79
+ render(
80
+ <RangeSlider
81
+ aria-label="Budget"
82
+ defaultValue={[20, 80]}
83
+ />,
84
+ );
85
+ expect(document.querySelector('[data-slot="range-slider"]')).toBeTruthy();
86
+ });
87
+
88
+ it("should render two slider thumbs", () => {
89
+ render(
90
+ <RangeSlider defaultValue={[10, 90]} aria-label="Range" />,
91
+ );
92
+ expect(screen.getAllByRole("slider")).toHaveLength(2);
93
+ });
94
+ });