@codefast/ui 0.3.16-canary.3 → 0.4.0-canary.5

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 (281) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/README.md +27 -16
  3. package/dist/components/accordion.d.mts +7 -22
  4. package/dist/components/accordion.mjs +26 -29
  5. package/dist/components/alert-dialog.d.mts +27 -26
  6. package/dist/components/alert-dialog.mjs +53 -45
  7. package/dist/components/alert.d.mts +12 -2
  8. package/dist/components/alert.mjs +15 -6
  9. package/dist/components/aspect-ratio.d.mts +2 -2
  10. package/dist/components/aspect-ratio.mjs +2 -3
  11. package/dist/components/avatar.d.mts +41 -5
  12. package/dist/components/avatar.mjs +40 -10
  13. package/dist/components/badge.mjs +4 -4
  14. package/dist/components/breadcrumb.d.mts +1 -0
  15. package/dist/components/breadcrumb.mjs +11 -10
  16. package/dist/components/button-group.d.mts +1 -1
  17. package/dist/components/button-group.mjs +6 -7
  18. package/dist/components/button.d.mts +0 -1
  19. package/dist/components/button.mjs +7 -7
  20. package/dist/components/calendar.d.mts +6 -2
  21. package/dist/components/calendar.mjs +39 -43
  22. package/dist/components/card.d.mts +4 -2
  23. package/dist/components/card.mjs +9 -9
  24. package/dist/components/carousel.d.mts +16 -4
  25. package/dist/components/carousel.mjs +25 -12
  26. package/dist/components/chart.d.mts +8 -3
  27. package/dist/components/chart.mjs +21 -15
  28. package/dist/components/checkbox-cards.mjs +6 -6
  29. package/dist/components/checkbox-group.mjs +6 -7
  30. package/dist/components/checkbox.d.mts +2 -2
  31. package/dist/components/checkbox.mjs +8 -9
  32. package/dist/components/collapsible.d.mts +4 -4
  33. package/dist/components/collapsible.mjs +4 -5
  34. package/dist/components/command.d.mts +11 -1
  35. package/dist/components/command.mjs +35 -32
  36. package/dist/components/context-menu.d.mts +22 -15
  37. package/dist/components/context-menu.mjs +44 -39
  38. package/dist/components/dialog.d.mts +19 -23
  39. package/dist/components/dialog.mjs +48 -47
  40. package/dist/components/direction.d.mts +24 -0
  41. package/dist/components/direction.mjs +18 -0
  42. package/dist/components/drawer.d.mts +2 -20
  43. package/dist/components/drawer.mjs +17 -25
  44. package/dist/components/dropdown-menu.d.mts +22 -15
  45. package/dist/components/dropdown-menu.mjs +41 -37
  46. package/dist/components/empty.mjs +5 -5
  47. package/dist/components/field.d.mts +1 -1
  48. package/dist/components/field.mjs +11 -12
  49. package/dist/components/form.d.mts +6 -7
  50. package/dist/components/form.mjs +6 -7
  51. package/dist/components/hover-card.d.mts +5 -5
  52. package/dist/components/hover-card.mjs +14 -12
  53. package/dist/components/input-group.d.mts +1 -1
  54. package/dist/components/input-group.mjs +12 -7
  55. package/dist/components/input-number.d.mts +3 -1
  56. package/dist/components/input-number.mjs +49 -27
  57. package/dist/components/input-otp.mjs +9 -7
  58. package/dist/components/input-password.mjs +1 -4
  59. package/dist/components/input-search.mjs +3 -5
  60. package/dist/components/input.mjs +1 -2
  61. package/dist/components/item.mjs +9 -9
  62. package/dist/components/kbd.mjs +1 -1
  63. package/dist/components/label.d.mts +2 -2
  64. package/dist/components/label.mjs +3 -4
  65. package/dist/components/menubar.d.mts +22 -16
  66. package/dist/components/menubar.mjs +54 -47
  67. package/dist/components/native-select.d.mts +5 -1
  68. package/dist/components/native-select.mjs +9 -6
  69. package/dist/components/navigation-menu.d.mts +30 -8
  70. package/dist/components/navigation-menu.mjs +33 -23
  71. package/dist/components/pagination.d.mts +6 -0
  72. package/dist/components/pagination.mjs +26 -11
  73. package/dist/components/popover.d.mts +40 -7
  74. package/dist/components/popover.mjs +46 -14
  75. package/dist/components/progress-circle.d.mts +1 -1
  76. package/dist/components/progress-circle.mjs +1 -2
  77. package/dist/components/progress.d.mts +2 -2
  78. package/dist/components/progress.mjs +5 -6
  79. package/dist/components/radio-cards.d.mts +3 -3
  80. package/dist/components/radio-cards.mjs +11 -11
  81. package/dist/components/radio-group.d.mts +3 -3
  82. package/dist/components/radio-group.mjs +9 -9
  83. package/dist/components/radio.mjs +2 -3
  84. package/dist/components/resizable.mjs +3 -8
  85. package/dist/components/scroll-area.d.mts +5 -5
  86. package/dist/components/scroll-area.mjs +13 -10
  87. package/dist/components/select.d.mts +14 -14
  88. package/dist/components/select.mjs +47 -47
  89. package/dist/components/separator.d.mts +2 -2
  90. package/dist/components/separator.mjs +3 -4
  91. package/dist/components/sheet.d.mts +13 -14
  92. package/dist/components/sheet.mjs +41 -39
  93. package/dist/components/sidebar.d.mts +2 -3
  94. package/dist/components/sidebar.mjs +46 -46
  95. package/dist/components/skeleton.mjs +1 -1
  96. package/dist/components/slider.d.mts +2 -2
  97. package/dist/components/slider.mjs +9 -11
  98. package/dist/components/sonner.mjs +11 -3
  99. package/dist/components/spinner.mjs +6 -7
  100. package/dist/components/switch.d.mts +5 -2
  101. package/dist/components/switch.mjs +7 -7
  102. package/dist/components/table.mjs +10 -10
  103. package/dist/components/tabs.d.mts +8 -5
  104. package/dist/components/tabs.mjs +18 -12
  105. package/dist/components/textarea.mjs +1 -1
  106. package/dist/components/toggle-group.d.mts +9 -6
  107. package/dist/components/toggle-group.mjs +19 -20
  108. package/dist/components/toggle.d.mts +2 -3
  109. package/dist/components/toggle.mjs +4 -6
  110. package/dist/components/tooltip.d.mts +7 -6
  111. package/dist/components/tooltip.mjs +19 -17
  112. package/dist/hooks/use-animated-value.mjs +0 -1
  113. package/dist/hooks/use-copy-to-clipboard.mjs +0 -1
  114. package/dist/hooks/use-is-mobile.mjs +0 -1
  115. package/dist/hooks/use-media-query.mjs +0 -1
  116. package/dist/hooks/use-mutation-observer.mjs +0 -1
  117. package/dist/hooks/use-pagination.mjs +0 -1
  118. package/dist/index.d.mts +15 -13
  119. package/dist/index.mjs +18 -16
  120. package/dist/primitives/checkbox-group.d.mts +9 -10
  121. package/dist/primitives/checkbox-group.mjs +14 -19
  122. package/dist/primitives/input-number.d.mts +3 -3
  123. package/dist/primitives/input-number.mjs +3 -5
  124. package/dist/primitives/input.d.mts +4 -4
  125. package/dist/primitives/input.mjs +2 -3
  126. package/dist/primitives/progress-circle.d.mts +3 -3
  127. package/dist/primitives/progress-circle.mjs +2 -3
  128. package/dist/variants/alert.d.mts +1 -1
  129. package/dist/variants/alert.mjs +3 -13
  130. package/dist/variants/badge.d.mts +6 -4
  131. package/dist/variants/badge.mjs +7 -34
  132. package/dist/variants/button-group.d.mts +2 -2
  133. package/dist/variants/button-group.mjs +3 -14
  134. package/dist/variants/button.d.mts +12 -10
  135. package/dist/variants/button.mjs +15 -57
  136. package/dist/variants/empty.d.mts +1 -1
  137. package/dist/variants/empty.mjs +2 -7
  138. package/dist/variants/field.d.mts +3 -3
  139. package/dist/variants/field.mjs +4 -22
  140. package/dist/variants/input-group.d.mts +9 -9
  141. package/dist/variants/input-group.mjs +11 -70
  142. package/dist/variants/input-number.d.mts +45 -0
  143. package/dist/variants/input-number.mjs +40 -0
  144. package/dist/variants/item.d.mts +5 -4
  145. package/dist/variants/item.mjs +9 -31
  146. package/dist/variants/navigation-menu.d.mts +1 -1
  147. package/dist/variants/navigation-menu.mjs +1 -5
  148. package/dist/variants/progress-circle.d.mts +1 -1
  149. package/dist/variants/progress-circle.mjs +1 -5
  150. package/dist/variants/scroll-area.d.mts +2 -2
  151. package/dist/variants/scroll-area.mjs +3 -8
  152. package/dist/variants/separator.mjs +6 -6
  153. package/dist/variants/sheet.d.mts +4 -4
  154. package/dist/variants/sheet.mjs +5 -38
  155. package/dist/variants/sidebar.d.mts +4 -4
  156. package/dist/variants/sidebar.mjs +6 -23
  157. package/dist/variants/tabs.d.mts +18 -0
  158. package/dist/variants/tabs.mjs +15 -0
  159. package/dist/variants/toggle.d.mts +4 -4
  160. package/dist/variants/toggle.mjs +9 -27
  161. package/package.json +27 -44
  162. package/src/components/accordion.tsx +26 -68
  163. package/src/components/alert-dialog.tsx +70 -86
  164. package/src/components/alert.tsx +27 -19
  165. package/src/components/aspect-ratio.tsx +1 -4
  166. package/src/components/avatar.tsx +99 -12
  167. package/src/components/badge.tsx +5 -8
  168. package/src/components/breadcrumb.tsx +18 -24
  169. package/src/components/button-group.tsx +10 -20
  170. package/src/components/button.tsx +8 -19
  171. package/src/components/calendar.tsx +77 -132
  172. package/src/components/card.tsx +16 -22
  173. package/src/components/carousel.tsx +40 -58
  174. package/src/components/chart.tsx +41 -92
  175. package/src/components/checkbox-cards.tsx +11 -30
  176. package/src/components/checkbox-group.tsx +6 -28
  177. package/src/components/checkbox.tsx +6 -26
  178. package/src/components/collapsible.tsx +1 -4
  179. package/src/components/command.tsx +52 -65
  180. package/src/components/context-menu.tsx +46 -125
  181. package/src/components/dialog.tsx +49 -101
  182. package/src/components/direction.tsx +32 -0
  183. package/src/components/drawer.tsx +17 -79
  184. package/src/components/dropdown-menu.tsx +39 -118
  185. package/src/components/empty.tsx +6 -20
  186. package/src/components/field.tsx +19 -52
  187. package/src/components/form.tsx +19 -61
  188. package/src/components/hover-card.tsx +4 -27
  189. package/src/components/input-group.tsx +13 -52
  190. package/src/components/input-number.tsx +55 -75
  191. package/src/components/input-otp.tsx +19 -38
  192. package/src/components/input-password.tsx +5 -29
  193. package/src/components/input-search.tsx +6 -23
  194. package/src/components/input.tsx +1 -17
  195. package/src/components/item.tsx +17 -31
  196. package/src/components/kbd.tsx +2 -14
  197. package/src/components/label.tsx +2 -10
  198. package/src/components/menubar.tsx +34 -125
  199. package/src/components/native-select.tsx +21 -30
  200. package/src/components/navigation-menu.tsx +34 -94
  201. package/src/components/pagination.tsx +28 -34
  202. package/src/components/popover.tsx +66 -35
  203. package/src/components/progress-circle.tsx +7 -25
  204. package/src/components/progress.tsx +3 -16
  205. package/src/components/radio-cards.tsx +8 -27
  206. package/src/components/radio-group.tsx +7 -27
  207. package/src/components/radio.tsx +3 -24
  208. package/src/components/resizable.tsx +5 -26
  209. package/src/components/scroll-area.tsx +12 -32
  210. package/src/components/select.tsx +37 -60
  211. package/src/components/separator.tsx +4 -18
  212. package/src/components/sheet.tsx +37 -74
  213. package/src/components/sidebar.tsx +47 -177
  214. package/src/components/skeleton.tsx +1 -3
  215. package/src/components/slider.tsx +7 -36
  216. package/src/components/sonner.tsx +16 -6
  217. package/src/components/spinner.tsx +6 -15
  218. package/src/components/switch.tsx +8 -30
  219. package/src/components/table.tsx +18 -35
  220. package/src/components/tabs.tsx +16 -34
  221. package/src/components/textarea.tsx +1 -15
  222. package/src/components/toggle-group.tsx +34 -38
  223. package/src/components/toggle.tsx +4 -13
  224. package/src/components/tooltip.tsx +11 -37
  225. package/src/css/foundation/base.css +74 -0
  226. package/src/css/foundation/motion.css +69 -0
  227. package/src/css/foundation/source.css +10 -0
  228. package/src/css/foundation/tokens.css +107 -0
  229. package/src/css/foundation/variants.css +121 -0
  230. package/src/css/preset.css +13 -214
  231. package/src/css/style.css +9 -1
  232. package/src/css/{amber.css → themes/amber.css} +29 -0
  233. package/src/css/{blue.css → themes/blue.css} +29 -0
  234. package/src/css/{cyan.css → themes/cyan.css} +29 -0
  235. package/src/css/{emerald.css → themes/emerald.css} +29 -0
  236. package/src/css/{fuchsia.css → themes/fuchsia.css} +29 -0
  237. package/src/css/{gray.css → themes/gray.css} +29 -0
  238. package/src/css/{green.css → themes/green.css} +29 -0
  239. package/src/css/{indigo.css → themes/indigo.css} +29 -0
  240. package/src/css/{lime.css → themes/lime.css} +29 -0
  241. package/src/css/{neutral.css → themes/neutral.css} +29 -0
  242. package/src/css/{orange.css → themes/orange.css} +29 -0
  243. package/src/css/{pink.css → themes/pink.css} +29 -0
  244. package/src/css/{purple.css → themes/purple.css} +29 -0
  245. package/src/css/{red.css → themes/red.css} +29 -0
  246. package/src/css/{rose.css → themes/rose.css} +29 -0
  247. package/src/css/{sky.css → themes/sky.css} +29 -0
  248. package/src/css/{slate.css → themes/slate.css} +29 -0
  249. package/src/css/{stone.css → themes/stone.css} +29 -0
  250. package/src/css/{teal.css → themes/teal.css} +29 -0
  251. package/src/css/{violet.css → themes/violet.css} +29 -0
  252. package/src/css/{yellow.css → themes/yellow.css} +29 -0
  253. package/src/css/{zinc.css → themes/zinc.css} +29 -0
  254. package/src/hooks/use-animated-value.ts +1 -7
  255. package/src/hooks/use-copy-to-clipboard.ts +1 -6
  256. package/src/hooks/use-is-mobile.ts +0 -2
  257. package/src/hooks/use-media-query.ts +0 -2
  258. package/src/hooks/use-mutation-observer.ts +0 -3
  259. package/src/hooks/use-pagination.ts +0 -2
  260. package/src/index.ts +39 -80
  261. package/src/primitives/checkbox-group.tsx +25 -39
  262. package/src/primitives/input-number.tsx +17 -63
  263. package/src/primitives/input.tsx +8 -24
  264. package/src/primitives/progress-circle.tsx +13 -43
  265. package/src/variants/alert.ts +3 -14
  266. package/src/variants/badge.ts +8 -35
  267. package/src/variants/button-group.ts +5 -18
  268. package/src/variants/button.ts +21 -58
  269. package/src/variants/empty.ts +2 -11
  270. package/src/variants/field.ts +6 -19
  271. package/src/variants/input-group.ts +12 -64
  272. package/src/variants/input-number.ts +65 -0
  273. package/src/variants/item.ts +10 -32
  274. package/src/variants/navigation-menu.ts +1 -8
  275. package/src/variants/progress-circle.ts +1 -2
  276. package/src/variants/scroll-area.ts +3 -9
  277. package/src/variants/separator.ts +6 -7
  278. package/src/variants/sheet.ts +6 -39
  279. package/src/variants/sidebar.ts +7 -27
  280. package/src/variants/tabs.ts +34 -0
  281. package/src/variants/toggle.ts +9 -28
@@ -1,9 +1,7 @@
1
- "use client";
2
-
1
+ import { Tooltip as TooltipPrimitive } from "radix-ui";
3
2
  import type { ComponentProps, JSX } from "react";
4
3
 
5
4
  import { cn } from "#/lib/utils";
6
- import * as TooltipPrimitive from "@radix-ui/react-tooltip";
7
5
 
8
6
  /* -----------------------------------------------------------------------------
9
7
  * Component: TooltipProvider
@@ -17,8 +15,8 @@ type TooltipProviderProps = ComponentProps<typeof TooltipPrimitive.Provider>;
17
15
  /**
18
16
  * @since 0.3.16-canary.0
19
17
  */
20
- function TooltipProvider({ ...props }: TooltipProviderProps): JSX.Element {
21
- return <TooltipPrimitive.Provider data-slot="tooltip-provider" {...props} />;
18
+ function TooltipProvider({ delayDuration = 0, ...props }: TooltipProviderProps): JSX.Element {
19
+ return <TooltipPrimitive.Provider data-slot="tooltip-provider" delayDuration={delayDuration} {...props} />;
22
20
  }
23
21
 
24
22
  /* -----------------------------------------------------------------------------
@@ -65,35 +63,14 @@ type TooltipContentProps = ComponentProps<typeof TooltipPrimitive.Content>;
65
63
  /**
66
64
  * @since 0.3.16-canary.0
67
65
  */
68
- function TooltipContent({
69
- children,
70
- className,
71
- sideOffset = 4,
72
- ...props
73
- }: TooltipContentProps): JSX.Element {
66
+ function TooltipContent({ children, className, sideOffset = 0, ...props }: TooltipContentProps): JSX.Element {
74
67
  return (
75
- <TooltipPrimitive.Portal>
68
+ <TooltipPrimitive.Portal data-slot="tooltip-portal">
76
69
  <TooltipPrimitive.Content
77
70
  className={cn(
78
- "z-50",
79
- "w-fit max-w-(--radix-tooltip-content-available-width) px-3 py-1.5",
80
- "rounded-md",
81
- "bg-primary text-xs text-balance text-primary-foreground",
82
- "ease-snappy data-[state=delayed-open]:animate-in data-[state=delayed-open]:duration-150 data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95",
83
- "data-[state=delayed-open]:data-side-top:slide-in-from-bottom-2",
84
- "data-[state=delayed-open]:data-side-right:slide-in-from-left-2",
85
- "data-[state=delayed-open]:data-side-bottom:slide-in-from-top-2",
86
- "data-[state=delayed-open]:data-side-left:slide-in-from-right-2",
87
- "data-closed:animate-out data-closed:duration-100 data-closed:fade-out-0 data-closed:zoom-out-95",
88
- "data-closed:data-side-top:slide-out-to-bottom-2",
89
- "data-closed:data-side-right:slide-out-to-left-2",
90
- "data-closed:data-side-bottom:slide-out-to-top-2",
91
- "data-closed:data-side-left:slide-out-to-right-2",
92
- "motion-reduce:animate-none motion-reduce:transition-none motion-reduce:duration-0",
93
- "origin-(--radix-tooltip-content-transform-origin)",
71
+ "z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background ease-snappy has-data-[slot=kbd]:pe-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-open:animate-in data-open:animation-duration-menu-in data-open:fade-in-0 data-open:zoom-in-95 data-open:data-side-top:slide-in-from-bottom-2 data-open:data-side-right:slide-in-from-left-2 data-open:data-side-bottom:slide-in-from-top-2 data-open:data-side-left:slide-in-from-right-2 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-menu-out data-closed:fade-out-0 data-closed:zoom-out-95 data-closed:data-side-top:slide-out-to-bottom-2 data-closed:data-side-right:slide-out-to-left-2 data-closed:data-side-bottom:slide-out-to-top-2 data-closed:data-side-left:slide-out-to-right-2 data-delayed-open:animate-in data-delayed-open:animation-duration-menu-in data-delayed-open:fade-in-0 data-delayed-open:zoom-in-95 data-delayed-open:data-side-top:slide-in-from-bottom-2 data-delayed-open:data-side-right:slide-in-from-left-2 data-delayed-open:data-side-bottom:slide-in-from-top-2 data-delayed-open:data-side-left:slide-in-from-right-2",
94
72
  className,
95
73
  )}
96
- collisionPadding={8}
97
74
  data-slot="tooltip-content"
98
75
  sideOffset={sideOffset}
99
76
  {...props}
@@ -120,7 +97,10 @@ type TooltipArrowProps = ComponentProps<typeof TooltipPrimitive.Arrow>;
120
97
  function TooltipArrow({ className, ...props }: TooltipArrowProps): JSX.Element {
121
98
  return (
122
99
  <TooltipPrimitive.Arrow
123
- className={cn("fill-primary", className)}
100
+ className={cn(
101
+ "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-foreground fill-foreground",
102
+ className,
103
+ )}
124
104
  data-slot="tooltip-arrow"
125
105
  {...props}
126
106
  />
@@ -132,10 +112,4 @@ function TooltipArrow({ className, ...props }: TooltipArrowProps): JSX.Element {
132
112
  * -------------------------------------------------------------------------- */
133
113
 
134
114
  export { Tooltip, TooltipArrow, TooltipContent, TooltipProvider, TooltipTrigger };
135
- export type {
136
- TooltipArrowProps,
137
- TooltipContentProps,
138
- TooltipProps,
139
- TooltipProviderProps,
140
- TooltipTriggerProps,
141
- };
115
+ export type { TooltipArrowProps, TooltipContentProps, TooltipProps, TooltipProviderProps, TooltipTriggerProps };
@@ -0,0 +1,74 @@
1
+ /* -------------------------------------------------------------------------
2
+ * Base
3
+ *
4
+ * Global element defaults layered into Tailwind's `base` cascade: default
5
+ * border/outline colors, scrollbar styling, document background, and
6
+ * native input appearance resets.
7
+ * ------------------------------------------------------------------------- */
8
+
9
+ @layer base {
10
+ /* ----------------------------------------------------------------------
11
+ * Default border & focus-ring colors for every element
12
+ * ---------------------------------------------------------------------- */
13
+
14
+ *,
15
+ ::after,
16
+ ::before,
17
+ ::backdrop,
18
+ ::file-selector-button {
19
+ border-color: var(--color-border);
20
+ outline-color: --alpha(var(--color-ring) / 20%);
21
+ }
22
+
23
+ /* ----------------------------------------------------------------------
24
+ * Scrollbars — WebKit (size + colors) and Firefox (thin + colors)
25
+ * ---------------------------------------------------------------------- */
26
+
27
+ ::-webkit-scrollbar {
28
+ @apply size-2;
29
+ }
30
+
31
+ ::-webkit-scrollbar-track {
32
+ @apply bg-transparent;
33
+ }
34
+
35
+ ::-webkit-scrollbar-thumb {
36
+ @apply rounded-full bg-border;
37
+ }
38
+
39
+ * {
40
+ scrollbar-width: thin;
41
+ scrollbar-color: var(--color-border) transparent;
42
+ }
43
+
44
+ /* ----------------------------------------------------------------------
45
+ * Document
46
+ * ---------------------------------------------------------------------- */
47
+
48
+ html,
49
+ body {
50
+ background-color: var(--color-background);
51
+ color: var(--color-foreground);
52
+ }
53
+
54
+ /* ----------------------------------------------------------------------
55
+ * Inputs — strip native search & number-spinner affordances
56
+ * ---------------------------------------------------------------------- */
57
+
58
+ input {
59
+ &::-webkit-search-cancel-button,
60
+ &::-webkit-search-decoration {
61
+ appearance: none;
62
+ }
63
+
64
+ &::-webkit-outer-spin-button,
65
+ &::-webkit-inner-spin-button {
66
+ -webkit-appearance: none;
67
+ margin: 0;
68
+ }
69
+
70
+ &[type="number"] {
71
+ -moz-appearance: textfield;
72
+ }
73
+ }
74
+ }
@@ -0,0 +1,69 @@
1
+ /* -------------------------------------------------------------------------
2
+ * Motion
3
+ *
4
+ * Easing curves, semantic durations, and keyframes for @codefast/ui. Tokens
5
+ * are exposed through Tailwind's @theme so they mint matching `ease-*`,
6
+ * `duration-*`, and `animate-*` utilities.
7
+ * ------------------------------------------------------------------------- */
8
+
9
+ @theme {
10
+ /* ----------------------------------------------------------------------
11
+ * Easing — enter curves (decelerate into place)
12
+ * ---------------------------------------------------------------------- */
13
+
14
+ --ease-ui: cubic-bezier(0.32, 0.72, 0, 1); /* Large surfaces: dialog, sheet */
15
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* Playful overshoot (opt-in) */
16
+ --ease-snappy: cubic-bezier(0.23, 1, 0.32, 1); /* Small popups: menu, tooltip */
17
+ --ease-gentle: cubic-bezier(0.4, 0, 0.2, 1); /* Continuous layout shifts, fades */
18
+
19
+ /* ----------------------------------------------------------------------
20
+ * Easing — exit curve (accelerate away; pair with `data-closed:`)
21
+ * ---------------------------------------------------------------------- */
22
+
23
+ --ease-exit: cubic-bezier(0.4, 0, 1, 1);
24
+
25
+ /* ----------------------------------------------------------------------
26
+ * Durations — enter/exit pairs per surface role
27
+ *
28
+ * Exit ≈ 60% of enter to offset the slow start of the accelerating exit
29
+ * curve.
30
+ * ---------------------------------------------------------------------- */
31
+
32
+ --animation-duration-menu-in: 150ms; /* Menus, tooltip — instant tools */
33
+ --animation-duration-menu-out: 100ms;
34
+ --animation-duration-popup-in: 200ms; /* Popover, hover card — content surfaces */
35
+ --animation-duration-popup-out: 120ms;
36
+ --animation-duration-overlay-in: 220ms; /* Dialog content + backdrop */
37
+ --animation-duration-overlay-out: 150ms;
38
+ --animation-duration-panel-in: 320ms; /* Sheet, drawer — large sliding panels */
39
+ --animation-duration-panel-out: 220ms;
40
+ --animation-duration-expand-in: 200ms; /* Accordion, inline disclosure */
41
+ --animation-duration-expand-out: 150ms;
42
+
43
+ /* ----------------------------------------------------------------------
44
+ * Durations — form controls (switch, checkbox, radio)
45
+ *
46
+ * Defined in the transition-duration namespace so they mint clean
47
+ * `duration-control*` utilities; `animate-in` also picks them up via its
48
+ * --tw-duration fallback, so a single utility drives both the state
49
+ * transition and the indicator keyframe.
50
+ * ---------------------------------------------------------------------- */
51
+
52
+ --transition-duration-control: 200ms; /* Container / ring: switch track, checkbox & radio box */
53
+ --transition-duration-control-indicator: 300ms; /* Moving part: switch thumb, check, radio dot */
54
+
55
+ /* ----------------------------------------------------------------------
56
+ * Keyframes
57
+ * ---------------------------------------------------------------------- */
58
+
59
+ --animate-shimmer: shimmer 2.2s linear infinite;
60
+
61
+ @keyframes shimmer {
62
+ from {
63
+ background-position: 200% center;
64
+ }
65
+ to {
66
+ background-position: -200% center;
67
+ }
68
+ }
69
+ }
@@ -0,0 +1,10 @@
1
+ /* -------------------------------------------------------------------------
2
+ * Source
3
+ *
4
+ * Third-party imports and the Tailwind content source scanned for class
5
+ * usage across the package.
6
+ * ------------------------------------------------------------------------- */
7
+
8
+ @import "tw-animate-css";
9
+
10
+ @source "../../**/*.{ts,tsx}";
@@ -0,0 +1,107 @@
1
+ /* -------------------------------------------------------------------------
2
+ * Design tokens
3
+ *
4
+ * Bridges the raw theme variables (`--background`, `--primary`, …) defined by
5
+ * each theme into Tailwind's `@theme inline` namespace, minting the
6
+ * `bg-*`, `text-*`, `border-*`, and `rounded-*` utilities the components use.
7
+ * ------------------------------------------------------------------------- */
8
+
9
+ :root {
10
+ --radius: 0.375rem;
11
+ }
12
+
13
+ @theme inline {
14
+ /* ----------------------------------------------------------------------
15
+ * Typography
16
+ * ---------------------------------------------------------------------- */
17
+
18
+ --font-sans: var(--font-sans);
19
+ --font-heading: var(--font-heading);
20
+ --font-mono: var(--font-mono);
21
+
22
+ /* ----------------------------------------------------------------------
23
+ * Surfaces & semantic colors
24
+ * ---------------------------------------------------------------------- */
25
+
26
+ --color-background: var(--background);
27
+ --color-foreground: var(--foreground);
28
+
29
+ --color-primary: var(--primary);
30
+ --color-primary-foreground: var(--primary-foreground);
31
+
32
+ --color-secondary: var(--secondary);
33
+ --color-secondary-foreground: var(--secondary-foreground);
34
+
35
+ --color-destructive: var(--destructive);
36
+
37
+ --color-muted: var(--muted);
38
+ --color-muted-foreground: var(--muted-foreground);
39
+
40
+ --color-accent: var(--accent);
41
+ --color-accent-foreground: var(--accent-foreground);
42
+
43
+ --color-popover: var(--popover);
44
+ --color-popover-foreground: var(--popover-foreground);
45
+
46
+ --color-card: var(--card);
47
+ --color-card-foreground: var(--card-foreground);
48
+
49
+ /* ----------------------------------------------------------------------
50
+ * Form & focus
51
+ * ---------------------------------------------------------------------- */
52
+
53
+ --color-border: var(--border);
54
+ --color-input: var(--input);
55
+ --color-ring: var(--ring);
56
+
57
+ /* ----------------------------------------------------------------------
58
+ * Sidebar
59
+ * ---------------------------------------------------------------------- */
60
+
61
+ --color-sidebar: var(--sidebar);
62
+ --color-sidebar-foreground: var(--sidebar-foreground);
63
+ --color-sidebar-primary: var(--sidebar-primary);
64
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
65
+ --color-sidebar-accent: var(--sidebar-accent);
66
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
67
+ --color-sidebar-border: var(--sidebar-border);
68
+ --color-sidebar-ring: var(--sidebar-ring);
69
+
70
+ /* ----------------------------------------------------------------------
71
+ * Charts
72
+ * ---------------------------------------------------------------------- */
73
+
74
+ --color-chart-1: var(--chart-1);
75
+ --color-chart-2: var(--chart-2);
76
+ --color-chart-3: var(--chart-3);
77
+ --color-chart-4: var(--chart-4);
78
+ --color-chart-5: var(--chart-5);
79
+
80
+ /* ----------------------------------------------------------------------
81
+ * Code & selection
82
+ * ---------------------------------------------------------------------- */
83
+
84
+ --color-surface: var(--surface);
85
+ --color-surface-foreground: var(--surface-foreground);
86
+
87
+ --color-code: var(--code);
88
+ --color-code-foreground: var(--code-foreground);
89
+ --color-code-highlight: var(--code-highlight);
90
+ --color-code-number: var(--code-number);
91
+
92
+ --color-selection: var(--selection);
93
+ --color-selection-foreground: var(--selection-foreground);
94
+
95
+ /* ----------------------------------------------------------------------
96
+ * Radius scale — derived from --radius (6 = base unit)
97
+ * ---------------------------------------------------------------------- */
98
+
99
+ --radius-xs: calc(var(--radius) * 2 / 6);
100
+ --radius-sm: calc(var(--radius) * 4 / 6);
101
+ --radius-md: var(--radius);
102
+ --radius-lg: calc(var(--radius) * 8 / 6);
103
+ --radius-xl: calc(var(--radius) * 12 / 6);
104
+ --radius-2xl: calc(var(--radius) * 16 / 6);
105
+ --radius-3xl: calc(var(--radius) * 24 / 6);
106
+ --radius-4xl: calc(var(--radius) * 32 / 6);
107
+ }
@@ -0,0 +1,121 @@
1
+ /* -------------------------------------------------------------------------
2
+ * Variants
3
+ *
4
+ * Custom Tailwind variants for @codefast/ui. Prefer these over verbose
5
+ * arbitrary variants (`data-[state=open]:`, `data-[side=left]:`).
6
+ *
7
+ * Shorthand usage (composes with group-, peer-, in-, has- modifiers):
8
+ * data-open: → [data-state="open"] or [data-open]:not([data-open="false"])
9
+ * group-data-disabled: → ancestor .group with matching data-disabled
10
+ * in-data-side-left: → ancestor with [data-side="left"]
11
+ * ------------------------------------------------------------------------- */
12
+
13
+ /* -------------------------------------------------------------------------
14
+ * Theme
15
+ * ------------------------------------------------------------------------- */
16
+
17
+ @custom-variant dark {
18
+ &:where(.dark, .dark *) {
19
+ @slot;
20
+ }
21
+
22
+ @media (prefers-color-scheme: dark) {
23
+ &:where(:not(.light, .light *)) {
24
+ @slot;
25
+ }
26
+ }
27
+ }
28
+
29
+ /* -------------------------------------------------------------------------
30
+ * Layout — orientation & placement (Radix Popper)
31
+ * ------------------------------------------------------------------------- */
32
+
33
+ @custom-variant data-horizontal (&:where([data-orientation="horizontal"]));
34
+ @custom-variant data-vertical (&:where([data-orientation="vertical"]));
35
+
36
+ @custom-variant data-side-top (&:where([data-side="top"]));
37
+ @custom-variant data-side-right (&:where([data-side="right"]));
38
+ @custom-variant data-side-bottom (&:where([data-side="bottom"]));
39
+ @custom-variant data-side-left (&:where([data-side="left"]));
40
+
41
+ /* -------------------------------------------------------------------------
42
+ * State — boolean & Radix data-state
43
+ *
44
+ * Block variants match both Radix data-state="…" and boolean data-* attrs
45
+ * so components can use one shorthand regardless of attribute source.
46
+ * ------------------------------------------------------------------------- */
47
+
48
+ /* Matches Radix data-state="open" and boolean data-open (not "false"). */
49
+ @custom-variant data-open {
50
+ &:where([data-state="open"]),
51
+ &:where([data-open]:not([data-open="false"])) {
52
+ @slot;
53
+ }
54
+ }
55
+
56
+ @custom-variant data-closed {
57
+ &:where([data-state="closed"]),
58
+ &:where([data-closed]:not([data-closed="false"])) {
59
+ @slot;
60
+ }
61
+ }
62
+
63
+ @custom-variant data-checked {
64
+ &:where([data-state="checked"]),
65
+ &:where([data-checked]:not([data-checked="false"])) {
66
+ @slot;
67
+ }
68
+ }
69
+
70
+ @custom-variant data-unchecked {
71
+ &:where([data-state="unchecked"]),
72
+ &:where([data-unchecked]:not([data-unchecked="false"])) {
73
+ @slot;
74
+ }
75
+ }
76
+
77
+ @custom-variant data-indeterminate {
78
+ &:where([data-state="indeterminate"]),
79
+ &:where([data-indeterminate]:not([data-indeterminate="false"])) {
80
+ @slot;
81
+ }
82
+ }
83
+
84
+ /* data-selected only matches explicit true, not bare data-selected. */
85
+ @custom-variant data-selected {
86
+ &:where([data-state="selected"]),
87
+ &:where([data-selected="true"]) {
88
+ @slot;
89
+ }
90
+ }
91
+
92
+ @custom-variant data-active {
93
+ &:where([data-state="active"]),
94
+ &:where([data-active]:not([data-active="false"])) {
95
+ @slot;
96
+ }
97
+ }
98
+
99
+ @custom-variant data-disabled {
100
+ &:where([data-disabled="true"]),
101
+ &:where([data-disabled]:not([data-disabled="false"])) {
102
+ @slot;
103
+ }
104
+ }
105
+
106
+ @custom-variant data-focused {
107
+ &:where([data-focused="true"]),
108
+ &:where([data-focused]:not([data-focused="false"])) {
109
+ @slot;
110
+ }
111
+ }
112
+
113
+ /* -------------------------------------------------------------------------
114
+ * State — Radix-only (no boolean data-* equivalent)
115
+ * ------------------------------------------------------------------------- */
116
+
117
+ @custom-variant data-on (&:where([data-state="on"]));
118
+ @custom-variant data-collapsed (&:where([data-state="collapsed"]));
119
+ @custom-variant data-hidden (&:where([data-state="hidden"]));
120
+ @custom-variant data-visible (&:where([data-state="visible"]));
121
+ @custom-variant data-delayed-open (&:where([data-state="delayed-open"]));
@@ -1,214 +1,13 @@
1
- @import "tw-animate-css";
2
-
3
- @source "../../dist/**/*.{js,mjs}";
4
-
5
- @custom-variant dark {
6
- &:where(.dark, .dark *) {
7
- @slot;
8
- }
9
-
10
- @media (prefers-color-scheme: dark) {
11
- &:where(:not(.light, .light *)) {
12
- @slot;
13
- }
14
- }
15
- }
16
-
17
- @custom-variant data-horizontal (&:where([data-orientation="horizontal"]));
18
- @custom-variant data-vertical (&:where([data-orientation="vertical"]));
19
-
20
- @custom-variant data-side-top (&:where([data-side="top"]));
21
- @custom-variant data-side-right (&:where([data-side="right"]));
22
- @custom-variant data-side-bottom (&:where([data-side="bottom"]));
23
- @custom-variant data-side-left (&:where([data-side="left"]));
24
-
25
- @custom-variant data-open {
26
- &:where([data-state="open"]),
27
- &:where([data-open]:not([data-open="false"])) {
28
- @slot;
29
- }
30
- }
31
-
32
- @custom-variant data-closed {
33
- &:where([data-state="closed"]),
34
- &:where([data-closed]:not([data-closed="false"])) {
35
- @slot;
36
- }
37
- }
38
-
39
- @custom-variant data-checked {
40
- &:where([data-state="checked"]),
41
- &:where([data-checked]:not([data-checked="false"])) {
42
- @slot;
43
- }
44
- }
45
-
46
- @custom-variant data-unchecked {
47
- &:where([data-state="unchecked"]),
48
- &:where([data-unchecked]:not([data-unchecked="false"])) {
49
- @slot;
50
- }
51
- }
52
-
53
- @custom-variant data-selected {
54
- &:where([data-state="selected"]),
55
- &:where([data-selected="true"]) {
56
- @slot;
57
- }
58
- }
59
-
60
- @custom-variant data-active {
61
- &:where([data-state="active"]),
62
- &:where([data-active]:not([data-active="false"])) {
63
- @slot;
64
- }
65
- }
66
-
67
- @custom-variant data-disabled {
68
- &:where([data-disabled="true"]),
69
- &:where([data-disabled]:not([data-disabled="false"])) {
70
- @slot;
71
- }
72
- }
73
-
74
- @custom-variant data-focused {
75
- &:where([data-focused="true"]),
76
- &:where([data-focused]:not([data-focused="false"])) {
77
- @slot;
78
- }
79
- }
80
-
81
- @utility no-scrollbar {
82
- -ms-overflow-style: none;
83
- scrollbar-width: none;
84
-
85
- &::-webkit-scrollbar {
86
- display: none;
87
- }
88
- }
89
-
90
- :root {
91
- --radius: 0.375rem;
92
- }
93
-
94
- @theme inline {
95
- --color-background: var(--background);
96
- --color-foreground: var(--foreground);
97
-
98
- --color-primary: var(--primary);
99
- --color-primary-foreground: var(--primary-foreground);
100
-
101
- --color-secondary: var(--secondary);
102
- --color-secondary-foreground: var(--secondary-foreground);
103
-
104
- --color-destructive: var(--destructive);
105
-
106
- --color-muted: var(--muted);
107
- --color-muted-foreground: var(--muted-foreground);
108
-
109
- --color-accent: var(--accent);
110
- --color-accent-foreground: var(--accent-foreground);
111
-
112
- --color-popover: var(--popover);
113
- --color-popover-foreground: var(--popover-foreground);
114
-
115
- --color-card: var(--card);
116
- --color-card-foreground: var(--card-foreground);
117
-
118
- --color-border: var(--border);
119
- --color-input: var(--input);
120
- --color-ring: var(--ring);
121
-
122
- --color-sidebar: var(--sidebar);
123
- --color-sidebar-foreground: var(--sidebar-foreground);
124
- --color-sidebar-primary: var(--sidebar-primary);
125
- --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
126
- --color-sidebar-accent: var(--sidebar-accent);
127
- --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
128
- --color-sidebar-border: var(--sidebar-border);
129
- --color-sidebar-ring: var(--sidebar-ring);
130
-
131
- --color-chart-1: var(--chart-1);
132
- --color-chart-2: var(--chart-2);
133
- --color-chart-3: var(--chart-3);
134
- --color-chart-4: var(--chart-4);
135
- --color-chart-5: var(--chart-5);
136
-
137
- --radius-xs: calc(var(--radius) * 2 / 6);
138
- --radius-sm: calc(var(--radius) * 4 / 6);
139
- --radius-md: var(--radius);
140
- --radius-lg: calc(var(--radius) * 8 / 6);
141
- --radius-xl: calc(var(--radius) * 12 / 6);
142
- --radius-2xl: calc(var(--radius) * 16 / 6);
143
- --radius-3xl: calc(var(--radius) * 24 / 6);
144
- --radius-4xl: calc(var(--radius) * 32 / 6);
145
- }
146
-
147
- @theme {
148
- --ease-ui: cubic-bezier(0.32, 0.72, 0, 1);
149
- --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
150
- --ease-snappy: cubic-bezier(0.23, 1, 0.32, 1);
151
- --ease-gentle: cubic-bezier(0.4, 0, 0.2, 1);
152
-
153
- --animate-shimmer: shimmer 2.2s linear infinite;
154
-
155
- @keyframes shimmer {
156
- from {
157
- background-position: 200% center;
158
- }
159
- to {
160
- background-position: -200% center;
161
- }
162
- }
163
- }
164
-
165
- @layer base {
166
- *,
167
- ::after,
168
- ::before,
169
- ::backdrop,
170
- ::file-selector-button {
171
- border-color: var(--color-border);
172
- outline-color: --alpha(var(--color-ring) / 20%);
173
- }
174
-
175
- ::-webkit-scrollbar {
176
- @apply size-2;
177
- }
178
-
179
- ::-webkit-scrollbar-track {
180
- @apply bg-transparent;
181
- }
182
-
183
- ::-webkit-scrollbar-thumb {
184
- @apply rounded-full bg-border;
185
- }
186
-
187
- * {
188
- scrollbar-width: thin;
189
- scrollbar-color: var(--color-border) transparent;
190
- }
191
-
192
- html,
193
- body {
194
- background-color: var(--color-background);
195
- color: var(--color-foreground);
196
- }
197
-
198
- input {
199
- &::-webkit-search-cancel-button,
200
- &::-webkit-search-decoration {
201
- appearance: none;
202
- }
203
-
204
- &::-webkit-outer-spin-button,
205
- &::-webkit-inner-spin-button {
206
- -webkit-appearance: none;
207
- margin: 0;
208
- }
209
-
210
- &[type="number"] {
211
- -moz-appearance: textfield;
212
- }
213
- }
214
- }
1
+ /* -------------------------------------------------------------------------
2
+ * Foundation preset
3
+ *
4
+ * Aggregates the foundation layers in cascade order. Import this from an app
5
+ * after `tailwindcss` and a theme to pull in @codefast/ui's variants, tokens,
6
+ * motion, and base styles.
7
+ * ------------------------------------------------------------------------- */
8
+
9
+ @import "./foundation/source.css";
10
+ @import "./foundation/variants.css";
11
+ @import "./foundation/tokens.css";
12
+ @import "./foundation/motion.css";
13
+ @import "./foundation/base.css";