@codefast/ui 0.4.0-canary.6 → 0.5.0-canary.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 (69) hide show
  1. package/CHANGELOG.md +132 -0
  2. package/dist/components/alert-dialog.mjs +1 -1
  3. package/dist/components/alert.mjs +1 -1
  4. package/dist/components/avatar.mjs +1 -1
  5. package/dist/components/calendar.mjs +2 -2
  6. package/dist/components/carousel.mjs +2 -2
  7. package/dist/components/context-menu.mjs +2 -2
  8. package/dist/components/dialog.mjs +2 -2
  9. package/dist/components/drawer.mjs +1 -1
  10. package/dist/components/dropdown-menu.mjs +2 -2
  11. package/dist/components/menubar.mjs +2 -2
  12. package/dist/components/native-select.mjs +1 -1
  13. package/dist/components/navigation-menu.mjs +2 -2
  14. package/dist/components/radio-cards.mjs +1 -1
  15. package/dist/components/radio-group.mjs +1 -1
  16. package/dist/components/resizable.mjs +1 -1
  17. package/dist/components/select.mjs +1 -1
  18. package/dist/components/sheet.mjs +1 -1
  19. package/dist/components/sidebar.mjs +5 -5
  20. package/dist/components/switch.mjs +1 -1
  21. package/dist/components/table.mjs +2 -2
  22. package/dist/components/tabs.mjs +1 -1
  23. package/dist/variants/sheet.mjs +2 -2
  24. package/package.json +23 -12
  25. package/src/components/alert-dialog.tsx +1 -1
  26. package/src/components/alert.tsx +1 -1
  27. package/src/components/avatar.tsx +1 -1
  28. package/src/components/calendar.tsx +2 -2
  29. package/src/components/carousel.tsx +4 -4
  30. package/src/components/context-menu.tsx +2 -2
  31. package/src/components/dialog.tsx +2 -2
  32. package/src/components/drawer.tsx +1 -1
  33. package/src/components/dropdown-menu.tsx +2 -2
  34. package/src/components/menubar.tsx +2 -2
  35. package/src/components/native-select.tsx +1 -1
  36. package/src/components/navigation-menu.tsx +2 -2
  37. package/src/components/radio-cards.tsx +1 -1
  38. package/src/components/radio-group.tsx +1 -1
  39. package/src/components/resizable.tsx +1 -1
  40. package/src/components/select.tsx +1 -1
  41. package/src/components/sheet.tsx +1 -1
  42. package/src/components/sidebar.tsx +5 -5
  43. package/src/components/switch.tsx +1 -1
  44. package/src/components/table.tsx +2 -2
  45. package/src/components/tabs.tsx +1 -1
  46. package/src/css/foundation/variants.css +4 -11
  47. package/src/css/themes/amber.css +2 -50
  48. package/src/css/themes/blue.css +2 -50
  49. package/src/css/themes/cyan.css +2 -50
  50. package/src/css/themes/emerald.css +2 -50
  51. package/src/css/themes/fuchsia.css +2 -50
  52. package/src/css/themes/gray.css +2 -50
  53. package/src/css/themes/green.css +2 -50
  54. package/src/css/themes/indigo.css +2 -50
  55. package/src/css/themes/lime.css +2 -50
  56. package/src/css/themes/neutral.css +2 -50
  57. package/src/css/themes/orange.css +2 -50
  58. package/src/css/themes/pink.css +2 -50
  59. package/src/css/themes/purple.css +2 -50
  60. package/src/css/themes/red.css +2 -50
  61. package/src/css/themes/rose.css +2 -50
  62. package/src/css/themes/sky.css +2 -50
  63. package/src/css/themes/slate.css +2 -50
  64. package/src/css/themes/stone.css +2 -50
  65. package/src/css/themes/teal.css +2 -50
  66. package/src/css/themes/violet.css +2 -50
  67. package/src/css/themes/yellow.css +2 -50
  68. package/src/css/themes/zinc.css +2 -50
  69. package/src/variants/sheet.ts +2 -2
@@ -62,7 +62,7 @@ function AlertDialogContent({ className, size = "default", ...props }: AlertDial
62
62
  />
63
63
  <AlertDialogPrimitive.Content
64
64
  className={cn(
65
- "group/alert-dialog-content fixed start-1/2 top-1/2 z-50 flex max-h-[calc(100dvh-2rem)] w-full -translate-x-1/2 -translate-y-1/2 flex-col gap-6 overflow-y-auto rounded-xl bg-popover p-6 text-popover-foreground ring-1 ring-foreground/10 ease-ui outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg rtl:translate-x-1/2 data-open:animate-in data-open:animation-duration-overlay-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-overlay-out data-closed:fade-out-0 data-closed:zoom-out-95",
65
+ "group/alert-dialog-content fixed inset-s-1/2 top-1/2 z-50 flex max-h-[calc(100dvh-2rem)] w-full -translate-x-1/2 -translate-y-1/2 flex-col gap-6 overflow-y-auto rounded-xl bg-popover p-6 text-popover-foreground ring-1 ring-foreground/10 ease-ui outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg rtl:translate-x-1/2 data-open:animate-in data-open:animation-duration-overlay-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-overlay-out data-closed:fade-out-0 data-closed:zoom-out-95",
66
66
  className,
67
67
  )}
68
68
  data-size={size}
@@ -83,7 +83,7 @@ type AlertActionProps = ComponentProps<"div">;
83
83
  * @since 0.3.16-canary.0
84
84
  */
85
85
  function AlertAction({ className, ...props }: AlertActionProps): JSX.Element {
86
- return <div className={cn("absolute end-3 top-2.5", className)} data-slot="alert-action" {...props} />;
86
+ return <div className={cn("absolute inset-e-3 top-2.5", className)} data-slot="alert-action" {...props} />;
87
87
  }
88
88
 
89
89
  /* -----------------------------------------------------------------------------
@@ -94,7 +94,7 @@ function AvatarBadge({ className, ...props }: AvatarBadgeProps): JSX.Element {
94
94
  return (
95
95
  <span
96
96
  className={cn(
97
- "absolute end-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none",
97
+ "absolute inset-e-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none",
98
98
  "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden",
99
99
  "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2",
100
100
  "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2",
@@ -96,12 +96,12 @@ function Calendar({
96
96
  defaultClassNames.day,
97
97
  ),
98
98
  range_start: cn(
99
- "relative isolate z-0 rounded-s-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:end-0 after:w-4 after:bg-muted",
99
+ "relative isolate z-0 rounded-s-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:inset-e-0 after:w-4 after:bg-muted",
100
100
  defaultClassNames.range_start,
101
101
  ),
102
102
  range_middle: cn("rounded-none", defaultClassNames.range_middle),
103
103
  range_end: cn(
104
- "relative isolate z-0 rounded-e-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:start-0 after:w-4 after:bg-muted",
104
+ "relative isolate z-0 rounded-e-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:inset-s-0 after:w-4 after:bg-muted",
105
105
  defaultClassNames.range_end,
106
106
  ),
107
107
  today: cn(
@@ -271,8 +271,8 @@ function CarouselPrevious({
271
271
  className={cn(
272
272
  "absolute touch-manipulation rounded-full",
273
273
  orientation === "horizontal"
274
- ? "-start-12 top-1/2 -translate-y-1/2 active:not-aria-[haspopup]:translate-y-[calc(-50%+1px)]"
275
- : "start-1/2 -top-12 -translate-x-1/2 rotate-90 rtl:translate-x-1/2",
274
+ ? "-inset-s-12 top-1/2 -translate-y-1/2 active:not-aria-[haspopup]:translate-y-[calc(-50%+1px)]"
275
+ : "inset-s-1/2 -top-12 -translate-x-1/2 rotate-90 rtl:translate-x-1/2",
276
276
  className,
277
277
  )}
278
278
  data-slot="carousel-previous"
@@ -317,8 +317,8 @@ function CarouselNext({
317
317
  className={cn(
318
318
  "absolute touch-manipulation rounded-full",
319
319
  orientation === "horizontal"
320
- ? "-end-12 top-1/2 -translate-y-1/2 active:not-aria-[haspopup]:translate-y-[calc(-50%+1px)]"
321
- : "start-1/2 -bottom-12 -translate-x-1/2 rotate-90 rtl:translate-x-1/2",
320
+ ? "-inset-e-12 top-1/2 -translate-y-1/2 active:not-aria-[haspopup]:translate-y-[calc(-50%+1px)]"
321
+ : "inset-s-1/2 -bottom-12 -translate-x-1/2 rotate-90 rtl:translate-x-1/2",
322
322
  className,
323
323
  )}
324
324
  data-slot="carousel-next"
@@ -235,7 +235,7 @@ function ContextMenuCheckboxItem({
235
235
  data-slot="context-menu-checkbox-item"
236
236
  {...props}
237
237
  >
238
- <span className="pointer-events-none absolute end-2">
238
+ <span className="pointer-events-none absolute inset-e-2">
239
239
  <ContextMenuPrimitive.ItemIndicator>
240
240
  <CheckIcon />
241
241
  </ContextMenuPrimitive.ItemIndicator>
@@ -270,7 +270,7 @@ function ContextMenuRadioItem({ children, className, inset, ...props }: ContextM
270
270
  data-slot="context-menu-radio-item"
271
271
  {...props}
272
272
  >
273
- <span className="pointer-events-none absolute end-2">
273
+ <span className="pointer-events-none absolute inset-e-2">
274
274
  <ContextMenuPrimitive.ItemIndicator>
275
275
  <CheckIcon />
276
276
  </ContextMenuPrimitive.ItemIndicator>
@@ -62,7 +62,7 @@ function DialogContent({ children, className, showCloseButton = true, ...props }
62
62
  />
63
63
  <DialogPrimitive.Content
64
64
  className={cn(
65
- "fixed start-1/2 top-1/2 z-50 flex max-h-[calc(100dvh-2rem)] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col gap-6 overflow-y-auto rounded-xl bg-popover p-6 text-sm text-popover-foreground ring-1 ring-foreground/10 ease-ui outline-none sm:max-w-md rtl:translate-x-1/2 data-open:animate-in data-open:animation-duration-overlay-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-overlay-out data-closed:fade-out-0 data-closed:zoom-out-95",
65
+ "fixed inset-s-1/2 top-1/2 z-50 flex max-h-[calc(100dvh-2rem)] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 flex-col gap-6 overflow-y-auto rounded-xl bg-popover p-6 text-sm text-popover-foreground ring-1 ring-foreground/10 ease-ui outline-none sm:max-w-md rtl:translate-x-1/2 data-open:animate-in data-open:animation-duration-overlay-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-overlay-out data-closed:fade-out-0 data-closed:zoom-out-95",
66
66
  className,
67
67
  )}
68
68
  data-slot="dialog-content"
@@ -71,7 +71,7 @@ function DialogContent({ children, className, showCloseButton = true, ...props }
71
71
  {children}
72
72
  {showCloseButton ? (
73
73
  <DialogPrimitive.Close asChild data-slot="dialog-close">
74
- <Button className="absolute end-4 top-4" size="icon-sm" variant="ghost">
74
+ <Button className="absolute inset-e-4 top-4" size="icon-sm" variant="ghost">
75
75
  <XIcon />
76
76
  <span className="sr-only">Close</span>
77
77
  </Button>
@@ -60,7 +60,7 @@ function DrawerContent({ children, className, ...props }: DrawerContentProps): J
60
60
  />
61
61
  <DrawerPrimitive.Content
62
62
  className={cn(
63
- "group/drawer-content fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:start-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-e-xl data-[vaul-drawer-direction=left]:border-e data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:end-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-s-xl data-[vaul-drawer-direction=right]:border-s data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm",
63
+ "group/drawer-content fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:inset-s-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-e-xl data-[vaul-drawer-direction=left]:border-e data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:inset-e-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-s-xl data-[vaul-drawer-direction=right]:border-s data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm",
64
64
  className,
65
65
  )}
66
66
  data-slot="drawer-content"
@@ -239,7 +239,7 @@ function DropdownMenuCheckboxItem({
239
239
  {...props}
240
240
  >
241
241
  <span
242
- className="pointer-events-none absolute end-2 flex items-center justify-center"
242
+ className="pointer-events-none absolute inset-e-2 flex items-center justify-center"
243
243
  data-slot="dropdown-menu-checkbox-item-indicator"
244
244
  >
245
245
  <DropdownMenuPrimitive.ItemIndicator>
@@ -277,7 +277,7 @@ function DropdownMenuRadioItem({ children, className, inset, ...props }: Dropdow
277
277
  {...props}
278
278
  >
279
279
  <span
280
- className="pointer-events-none absolute end-2 flex items-center justify-center"
280
+ className="pointer-events-none absolute inset-e-2 flex items-center justify-center"
281
281
  data-slot="dropdown-menu-radio-item-indicator"
282
282
  >
283
283
  <DropdownMenuPrimitive.ItemIndicator>
@@ -265,7 +265,7 @@ function MenubarCheckboxItem({ checked, children, className, inset, ...props }:
265
265
  data-slot="menubar-checkbox-item"
266
266
  {...props}
267
267
  >
268
- <span className="pointer-events-none absolute start-2 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4">
268
+ <span className="pointer-events-none absolute inset-s-2 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4">
269
269
  <MenubarPrimitive.ItemIndicator>
270
270
  <CheckIcon />
271
271
  </MenubarPrimitive.ItemIndicator>
@@ -300,7 +300,7 @@ function MenubarRadioItem({ children, className, inset, ...props }: MenubarRadio
300
300
  data-slot="menubar-radio-item"
301
301
  {...props}
302
302
  >
303
- <span className="pointer-events-none absolute start-2 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4">
303
+ <span className="pointer-events-none absolute inset-s-2 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4">
304
304
  <MenubarPrimitive.ItemIndicator>
305
305
  <CheckIcon />
306
306
  </MenubarPrimitive.ItemIndicator>
@@ -32,7 +32,7 @@ function NativeSelect({ className, size = "default", ...props }: NativeSelectPro
32
32
  />
33
33
  <ChevronDownIcon
34
34
  aria-hidden="true"
35
- className="pointer-events-none absolute end-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground select-none"
35
+ className="pointer-events-none absolute inset-e-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground select-none"
36
36
  data-slot="native-select-icon"
37
37
  />
38
38
  </div>
@@ -120,7 +120,7 @@ function NavigationMenuContent({ className, ...props }: NavigationMenuContentPro
120
120
  return (
121
121
  <NavigationMenuPrimitive.Content
122
122
  className={cn(
123
- "start-0 top-0 w-full p-2 pe-2.5 ease-snappy group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:ring-foreground/10 group-data-[viewport=false]/navigation-menu:animation-duration-300 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:ease-exit data-[motion^=to-]:fade-out **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none md:absolute md:w-auto group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 data-closed:ease-exit group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95",
123
+ "inset-s-0 top-0 w-full p-2 pe-2.5 ease-snappy group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:ring-foreground/10 group-data-[viewport=false]/navigation-menu:animation-duration-300 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:ease-exit data-[motion^=to-]:fade-out **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none md:absolute md:w-auto group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 data-closed:ease-exit group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95",
124
124
  className,
125
125
  )}
126
126
  data-slot="navigation-menu-content"
@@ -168,7 +168,7 @@ type NavigationMenuViewportProps = ComponentProps<typeof NavigationMenuPrimitive
168
168
  */
169
169
  function NavigationMenuViewport({ className, ...props }: NavigationMenuViewportProps): JSX.Element {
170
170
  return (
171
- <div className="absolute start-0 top-full isolate z-50 flex justify-center">
171
+ <div className="absolute inset-s-0 top-full isolate z-50 flex justify-center">
172
172
  <NavigationMenuPrimitive.Viewport
173
173
  className={cn(
174
174
  "relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-full origin-[top_center] overflow-hidden rounded-lg bg-popover text-popover-foreground shadow ring-1 ring-foreground/10 transition-[width,height] duration-100 ease-snappy md:w-(--radix-navigation-menu-viewport-width) data-open:animate-in data-open:animation-duration-100 data-open:zoom-in-90 data-closed:animate-out data-closed:ease-exit data-closed:animation-duration-100 data-closed:zoom-out-90",
@@ -50,7 +50,7 @@ function RadioCardsItem({ children, className, ...props }: RadioCardsItemProps):
50
50
  className="flex size-4 items-center justify-center"
51
51
  data-slot="radio-card-indicator"
52
52
  >
53
- <span className="absolute start-1/2 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 animate-in rounded-full bg-primary-foreground duration-control-indicator ease-spring zoom-in-50 rtl:translate-x-1/2" />
53
+ <span className="absolute inset-s-1/2 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 animate-in rounded-full bg-primary-foreground duration-control-indicator ease-spring zoom-in-50 rtl:translate-x-1/2" />
54
54
  </RadioGroupPrimitive.Indicator>
55
55
  </RadioGroupPrimitive.Item>
56
56
  {children}
@@ -47,7 +47,7 @@ function RadioGroupItem({ className, ...props }: RadioGroupItemProps): JSX.Eleme
47
47
  className="flex size-4 items-center justify-center"
48
48
  data-slot="radio-group-indicator"
49
49
  >
50
- <span className="absolute start-1/2 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 animate-in rounded-full bg-primary-foreground duration-control-indicator ease-spring zoom-in-50 rtl:translate-x-1/2" />
50
+ <span className="absolute inset-s-1/2 top-1/2 size-2 -translate-x-1/2 -translate-y-1/2 animate-in rounded-full bg-primary-foreground duration-control-indicator ease-spring zoom-in-50 rtl:translate-x-1/2" />
51
51
  </RadioGroupPrimitive.Indicator>
52
52
  </RadioGroupPrimitive.Item>
53
53
  );
@@ -59,7 +59,7 @@ function ResizableSeparator({ className, withHandle, ...props }: ResizableSepara
59
59
  return (
60
60
  <ResizablePrimitive.Separator
61
61
  className={cn(
62
- "relative flex w-px items-center justify-center bg-border ring-offset-background after:absolute after:inset-y-0 after:start-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:start-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 rtl:after:translate-x-1/2 rtl:aria-[orientation=horizontal]:after:-translate-x-0 [&[aria-orientation=horizontal]>div]:rotate-90",
62
+ "relative flex w-px items-center justify-center bg-border ring-offset-background after:absolute after:inset-y-0 after:inset-s-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:inset-s-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 rtl:after:translate-x-1/2 rtl:aria-[orientation=horizontal]:after:translate-x-0 [&[aria-orientation=horizontal]>div]:rotate-90",
63
63
  className,
64
64
  )}
65
65
  data-slot="resizable-separator"
@@ -233,7 +233,7 @@ function SelectItem({ children, className, ...props }: SelectItemProps): JSX.Ele
233
233
  data-slot="select-item"
234
234
  {...props}
235
235
  >
236
- <span className="pointer-events-none absolute end-2 flex size-4 items-center justify-center">
236
+ <span className="pointer-events-none absolute inset-e-2 flex size-4 items-center justify-center">
237
237
  <SelectPrimitive.ItemIndicator>
238
238
  <CheckIcon className="pointer-events-none" />
239
239
  </SelectPrimitive.ItemIndicator>
@@ -79,7 +79,7 @@ function SheetContent({
79
79
  {showCloseButton ? (
80
80
  <SheetPrimitive.Close
81
81
  className={buttonVariants({
82
- className: "absolute top-4 end-4",
82
+ className: "absolute top-4 inset-e-4",
83
83
  size: "icon-sm",
84
84
  variant: "ghost",
85
85
  })}
@@ -233,7 +233,7 @@ function Sidebar({
233
233
  />
234
234
  <div
235
235
  className={cn(
236
- "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-gentle md:flex data-side-right:right-0 data-side-right:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] data-side-left:left-0 data-side-left:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]",
236
+ "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-gentle md:flex data-side-right:right-0 data-side-right:group-data-[collapsible=offcanvas]:-right-(--sidebar-width) data-side-left:left-0 data-side-left:group-data-[collapsible=offcanvas]:-left-(--sidebar-width)",
237
237
  variant === "floating" || variant === "inset"
238
238
  ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]"
239
239
  : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-side-right:border-l group-data-side-left:border-r",
@@ -310,7 +310,7 @@ function SidebarRail({ className, ...props }: SidebarRailProps): JSX.Element {
310
310
  return (
311
311
  <button
312
312
  className={cn(
313
- "absolute inset-y-0 z-20 hidden w-4 transition-all ease-gentle group-data-[collapsible=offcanvas]:translate-x-0 group-data-side-right:left-0 group-data-side-left:-right-4 after:absolute after:inset-y-0 after:inset-s-1/2 after:w-0.5 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar hover:after:bg-sidebar-border in-data-side-right:cursor-e-resize in-data-side-left:cursor-w-resize sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2 rtl:group-data-[collapsible=offcanvas]:-translate-x-0 rtl:in-data-side-right:cursor-w-resize rtl:in-data-side-left:cursor-e-resize [[data-side=left][data-collapsible=offcanvas]_&]:-right-2 [[data-side=left][data-state=collapsed]_&]:cursor-e-resize rtl:[[data-side=left][data-state=collapsed]_&]:cursor-w-resize [[data-side=right][data-collapsible=offcanvas]_&]:-left-2 [[data-side=right][data-state=collapsed]_&]:cursor-w-resize rtl:[[data-side=right][data-state=collapsed]_&]:cursor-e-resize",
313
+ "absolute inset-y-0 z-20 hidden w-4 transition-all ease-gentle group-data-[collapsible=offcanvas]:translate-x-0 group-data-side-right:left-0 group-data-side-left:-right-4 after:absolute after:inset-y-0 after:inset-s-1/2 after:w-0.5 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar hover:after:bg-sidebar-border in-data-side-right:cursor-e-resize in-data-side-left:cursor-w-resize sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2 rtl:group-data-[collapsible=offcanvas]:translate-x-0 rtl:in-data-side-right:cursor-w-resize rtl:in-data-side-left:cursor-e-resize [[data-side=left][data-collapsible=offcanvas]_&]:-right-2 [[data-side=left][data-state=collapsed]_&]:cursor-e-resize rtl:[[data-side=left][data-state=collapsed]_&]:cursor-w-resize [[data-side=right][data-collapsible=offcanvas]_&]:-left-2 [[data-side=right][data-state=collapsed]_&]:cursor-w-resize rtl:[[data-side=right][data-state=collapsed]_&]:cursor-e-resize",
314
314
  className,
315
315
  )}
316
316
  data-sidebar="rail"
@@ -539,7 +539,7 @@ function SidebarGroupAction({ asChild = false, className, ...props }: SidebarGro
539
539
  return (
540
540
  <Component
541
541
  className={cn(
542
- "absolute end-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0",
542
+ "absolute inset-e-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0",
543
543
  className,
544
544
  )}
545
545
  data-sidebar="group-action"
@@ -703,7 +703,7 @@ function SidebarMenuAction({
703
703
  return (
704
704
  <Component
705
705
  className={cn(
706
- "absolute end-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0",
706
+ "absolute inset-e-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0",
707
707
  showOnHover &&
708
708
  "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-active/menu-button:text-sidebar-accent-foreground aria-expanded:opacity-100 md:opacity-0",
709
709
  className,
@@ -731,7 +731,7 @@ function SidebarMenuBadge({ className, ...props }: SidebarMenuBadgeProps): JSX.E
731
731
  return (
732
732
  <div
733
733
  className={cn(
734
- "pointer-events-none absolute end-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-accent-foreground",
734
+ "pointer-events-none absolute inset-e-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none group-data-[collapsible=icon]:hidden peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 peer-data-active/menu-button:text-sidebar-accent-foreground",
735
735
  className,
736
736
  )}
737
737
  data-sidebar="menu-badge"
@@ -29,7 +29,7 @@ function Switch({ className, size = "default", ...props }: SwitchProps): JSX.Ele
29
29
  {...props}
30
30
  >
31
31
  <SwitchPrimitives.Thumb
32
- className="pointer-events-none block rounded-full bg-background ring-0 transition-transform duration-control-indicator ease-spring group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-3.5 group-data-[size=sm]/switch:data-checked:translate-x-2.5 rtl:group-data-[size=default]/switch:data-checked:-translate-x-3.5 rtl:group-data-[size=sm]/switch:data-checked:-translate-x-2.5 dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 rtl:group-data-[size=default]/switch:data-unchecked:-translate-x-0 rtl:group-data-[size=sm]/switch:data-unchecked:-translate-x-0 dark:data-unchecked:bg-foreground"
32
+ className="pointer-events-none block rounded-full bg-background ring-0 transition-transform duration-control-indicator ease-spring group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-3.5 group-data-[size=sm]/switch:data-checked:translate-x-2.5 rtl:group-data-[size=default]/switch:data-checked:-translate-x-3.5 rtl:group-data-[size=sm]/switch:data-checked:-translate-x-2.5 dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 rtl:group-data-[size=default]/switch:data-unchecked:translate-x-0 rtl:group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"
33
33
  data-slot="switch-thumb"
34
34
  />
35
35
  </SwitchPrimitives.Root>
@@ -117,7 +117,7 @@ function TableHead({ className, ...props }: TableHeadProps): JSX.Element {
117
117
  return (
118
118
  <th
119
119
  className={cn(
120
- "h-10 px-2 text-start align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pe-0",
120
+ "h-10 px-2 text-start align-middle font-medium whitespace-nowrap text-foreground has-[[role=checkbox]]:pe-0",
121
121
  className,
122
122
  )}
123
123
  data-slot="table-head"
@@ -141,7 +141,7 @@ type TableCellProps = ComponentProps<"td">;
141
141
  function TableCell({ className, ...props }: TableCellProps): JSX.Element {
142
142
  return (
143
143
  <td
144
- className={cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pe-0", className)}
144
+ className={cn("p-2 align-middle whitespace-nowrap has-[[role=checkbox]]:pe-0", className)}
145
145
  data-slot="table-cell"
146
146
  {...props}
147
147
  />
@@ -71,7 +71,7 @@ function TabsTrigger({ className, ...props }: TabsTriggerProps): JSX.Element {
71
71
  "relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pe-1.5 has-data-[icon=inline-start]:ps-1.5 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
72
72
  "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent",
73
73
  "data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground",
74
- "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:-bottom-1.25 group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-end-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100",
74
+ "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:-bottom-1.25 group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-inset-e-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100",
75
75
  className,
76
76
  )}
77
77
  data-slot="tabs-trigger"
@@ -14,17 +14,10 @@
14
14
  * Theme
15
15
  * ------------------------------------------------------------------------- */
16
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
- }
17
+ /* Class-only — matches the token themes, which switch on `.dark` (no prefers-color-scheme arm).
18
+ `@codefast/theme` always resolves the scheme to an explicit `.dark`/`.light` class (SSR included),
19
+ so the OS media query is never the deciding factor and would only desync utilities from tokens. */
20
+ @custom-variant dark (&:where(.dark, .dark *));
28
21
 
29
22
  /* -------------------------------------------------------------------------
30
23
  * Layout — orientation & placement (Radix Popper)
@@ -1,8 +1,8 @@
1
1
  /* -------------------------------------------------------------------------
2
2
  * Amber theme
3
3
  *
4
- * Color tokens for the amber palette across the light (`:root`),
5
- * `.dark`, and system-preference variants. Trailing comments note the source
4
+ * Color tokens for the amber palette across the light (`:root`) and
5
+ * `.dark` variants. Trailing comments note the source
6
6
  * palette swatch for each value.
7
7
  * ------------------------------------------------------------------------- */
8
8
 
@@ -111,51 +111,3 @@
111
111
  --chart-4: oklch(0.56 0.15 49); /* --color-amber-700 */
112
112
  --chart-5: oklch(0.47 0.12 46); /* --color-amber-800 */
113
113
  }
114
-
115
- @media (prefers-color-scheme: dark) {
116
- :root:not(.light) {
117
- /* System-preference dark — applied when no explicit .light is set. */
118
-
119
- --background: oklch(0.141 0.005 285.823); /* --color-zinc-950 */
120
- --foreground: oklch(0.985 0 0); /* --color-zinc-50 */
121
-
122
- --primary: oklch(0.77 0.16 70); /* --color-amber-500 */
123
- --primary-foreground: oklch(0.99 0.02 95); /* --color-amber-50 */
124
-
125
- --secondary: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
126
- --secondary-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
127
-
128
- --destructive: oklch(0.704 0.191 22.216); /* --color-red-400 */
129
-
130
- --muted: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
131
- --muted-foreground: oklch(0.705 0.015 286.067); /* --color-zinc-400 */
132
-
133
- --accent: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
134
- --accent-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
135
-
136
- --popover: oklch(0.21 0.006 285.885); /* --color-zinc-900 */
137
- --popover-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
138
-
139
- --card: oklch(0.21 0.006 285.885); /* --color-zinc-900 */
140
- --card-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
141
-
142
- --border: oklch(1 0 0 / 10%); /* --color-white */
143
- --input: oklch(1 0 0 / 15%); /* --color-white */
144
- --ring: oklch(0.41 0.11 46); /* --color-amber-900 */
145
-
146
- --sidebar: oklch(0.21 0.006 285.885); /* --color-zinc-900 */
147
- --sidebar-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
148
- --sidebar-primary: oklch(0.77 0.16 70); /* --color-amber-500 */
149
- --sidebar-primary-foreground: oklch(0.99 0.02 95); /* --color-amber-50 */
150
- --sidebar-accent: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
151
- --sidebar-accent-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
152
- --sidebar-border: oklch(1 0 0 / 10%); /* --color-white */
153
- --sidebar-ring: oklch(0.41 0.11 46); /* --color-amber-900 */
154
-
155
- --chart-1: oklch(0.88 0.15 92); /* --color-amber-300 */
156
- --chart-2: oklch(0.77 0.16 70); /* --color-amber-500 */
157
- --chart-3: oklch(0.67 0.16 58); /* --color-amber-600 */
158
- --chart-4: oklch(0.56 0.15 49); /* --color-amber-700 */
159
- --chart-5: oklch(0.47 0.12 46); /* --color-amber-800 */
160
- }
161
- }
@@ -1,8 +1,8 @@
1
1
  /* -------------------------------------------------------------------------
2
2
  * Blue theme
3
3
  *
4
- * Color tokens for the blue palette across the light (`:root`),
5
- * `.dark`, and system-preference variants. Trailing comments note the source
4
+ * Color tokens for the blue palette across the light (`:root`) and
5
+ * `.dark` variants. Trailing comments note the source
6
6
  * palette swatch for each value.
7
7
  * ------------------------------------------------------------------------- */
8
8
 
@@ -111,51 +111,3 @@
111
111
  --chart-4: oklch(0.488 0.243 264.376); /* --color-blue-700 */
112
112
  --chart-5: oklch(0.424 0.199 265.638); /* --color-blue-800 */
113
113
  }
114
-
115
- @media (prefers-color-scheme: dark) {
116
- :root:not(.light) {
117
- /* System-preference dark — applied when no explicit .light is set. */
118
-
119
- --background: oklch(0.141 0.005 285.823); /* --color-zinc-950 */
120
- --foreground: oklch(0.985 0 0); /* --color-zinc-50 */
121
-
122
- --primary: oklch(0.488 0.243 264.376); /* --color-blue-700 */
123
- --primary-foreground: oklch(0.97 0.014 254.604); /* --color-blue-50 */
124
-
125
- --secondary: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
126
- --secondary-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
127
-
128
- --destructive: oklch(0.704 0.191 22.216); /* --color-red-400 */
129
-
130
- --muted: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
131
- --muted-foreground: oklch(0.705 0.015 286.067); /* --color-zinc-400 */
132
-
133
- --accent: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
134
- --accent-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
135
-
136
- --popover: oklch(0.21 0.006 285.885); /* --color-zinc-900 */
137
- --popover-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
138
-
139
- --card: oklch(0.21 0.006 285.885); /* --color-zinc-900 */
140
- --card-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
141
-
142
- --border: oklch(1 0 0 / 10%); /* --color-white */
143
- --input: oklch(1 0 0 / 15%); /* --color-white */
144
- --ring: oklch(0.556 0 0); /* default ring (dark) */
145
-
146
- --sidebar: oklch(0.21 0.006 285.885); /* --color-zinc-900 */
147
- --sidebar-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
148
- --sidebar-primary: oklch(0.623 0.214 259.815); /* --color-blue-500 */
149
- --sidebar-primary-foreground: oklch(0.97 0.014 254.604); /* --color-blue-50 */
150
- --sidebar-accent: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
151
- --sidebar-accent-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
152
- --sidebar-border: oklch(1 0 0 / 10%); /* --color-white */
153
- --sidebar-ring: oklch(0.439 0 0); /* default sidebar ring (dark) */
154
-
155
- --chart-1: oklch(0.809 0.105 251.813); /* --color-blue-300 */
156
- --chart-2: oklch(0.623 0.214 259.815); /* --color-blue-500 */
157
- --chart-3: oklch(0.546 0.245 262.881); /* --color-blue-600 */
158
- --chart-4: oklch(0.488 0.243 264.376); /* --color-blue-700 */
159
- --chart-5: oklch(0.424 0.199 265.638); /* --color-blue-800 */
160
- }
161
- }
@@ -1,8 +1,8 @@
1
1
  /* -------------------------------------------------------------------------
2
2
  * Cyan theme
3
3
  *
4
- * Color tokens for the cyan palette across the light (`:root`),
5
- * `.dark`, and system-preference variants. Trailing comments note the source
4
+ * Color tokens for the cyan palette across the light (`:root`) and
5
+ * `.dark` variants. Trailing comments note the source
6
6
  * palette swatch for each value.
7
7
  * ------------------------------------------------------------------------- */
8
8
 
@@ -111,51 +111,3 @@
111
111
  --chart-4: oklch(0.61 0.11 222); /* --color-cyan-600 */
112
112
  --chart-5: oklch(0.52 0.09 223); /* --color-cyan-700 */
113
113
  }
114
-
115
- @media (prefers-color-scheme: dark) {
116
- :root:not(.light) {
117
- /* System-preference dark — applied when no explicit .light is set. */
118
-
119
- --background: oklch(0.141 0.005 285.823); /* --color-zinc-950 */
120
- --foreground: oklch(0.985 0 0); /* --color-zinc-50 */
121
-
122
- --primary: oklch(0.71 0.13 215); /* --color-cyan-500 */
123
- --primary-foreground: oklch(0.98 0.02 201); /* --color-cyan-50 */
124
-
125
- --secondary: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
126
- --secondary-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
127
-
128
- --destructive: oklch(0.704 0.191 22.216); /* --color-red-400 */
129
-
130
- --muted: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
131
- --muted-foreground: oklch(0.705 0.015 286.067); /* --color-zinc-400 */
132
-
133
- --accent: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
134
- --accent-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
135
-
136
- --popover: oklch(0.21 0.006 285.885); /* --color-zinc-900 */
137
- --popover-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
138
-
139
- --card: oklch(0.21 0.006 285.885); /* --color-zinc-900 */
140
- --card-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
141
-
142
- --border: oklch(1 0 0 / 10%); /* --color-white */
143
- --input: oklch(1 0 0 / 15%); /* --color-white */
144
- --ring: oklch(0.4 0.07 227); /* --color-cyan-900 */
145
-
146
- --sidebar: oklch(0.21 0.006 285.885); /* --color-zinc-900 */
147
- --sidebar-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
148
- --sidebar-primary: oklch(0.71 0.13 215); /* --color-cyan-500 */
149
- --sidebar-primary-foreground: oklch(0.98 0.02 201); /* --color-cyan-50 */
150
- --sidebar-accent: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
151
- --sidebar-accent-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
152
- --sidebar-border: oklch(1 0 0 / 10%); /* --color-white */
153
- --sidebar-ring: oklch(0.4 0.07 227); /* --color-cyan-900 */
154
-
155
- --chart-1: oklch(0.87 0.12 207); /* --color-cyan-300 */
156
- --chart-2: oklch(0.8 0.13 212); /* --color-cyan-400 */
157
- --chart-3: oklch(0.71 0.13 215); /* --color-cyan-500 */
158
- --chart-4: oklch(0.61 0.11 222); /* --color-cyan-600 */
159
- --chart-5: oklch(0.52 0.09 223); /* --color-cyan-700 */
160
- }
161
- }
@@ -1,8 +1,8 @@
1
1
  /* -------------------------------------------------------------------------
2
2
  * Emerald theme
3
3
  *
4
- * Color tokens for the emerald palette across the light (`:root`),
5
- * `.dark`, and system-preference variants. Trailing comments note the source
4
+ * Color tokens for the emerald palette across the light (`:root`) and
5
+ * `.dark` variants. Trailing comments note the source
6
6
  * palette swatch for each value.
7
7
  * ------------------------------------------------------------------------- */
8
8
 
@@ -111,51 +111,3 @@
111
111
  --chart-4: oklch(0.6 0.13 163); /* --color-emerald-600 */
112
112
  --chart-5: oklch(0.51 0.1 166); /* --color-emerald-700 */
113
113
  }
114
-
115
- @media (prefers-color-scheme: dark) {
116
- :root:not(.light) {
117
- /* System-preference dark — applied when no explicit .light is set. */
118
-
119
- --background: oklch(0.141 0.005 285.823); /* --color-zinc-950 */
120
- --foreground: oklch(0.985 0 0); /* --color-zinc-50 */
121
-
122
- --primary: oklch(0.7 0.15 162); /* --color-emerald-500 */
123
- --primary-foreground: oklch(0.98 0.02 166); /* --color-emerald-50 */
124
-
125
- --secondary: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
126
- --secondary-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
127
-
128
- --destructive: oklch(0.704 0.191 22.216); /* --color-red-400 */
129
-
130
- --muted: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
131
- --muted-foreground: oklch(0.705 0.015 286.067); /* --color-zinc-400 */
132
-
133
- --accent: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
134
- --accent-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
135
-
136
- --popover: oklch(0.21 0.006 285.885); /* --color-zinc-900 */
137
- --popover-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
138
-
139
- --card: oklch(0.21 0.006 285.885); /* --color-zinc-900 */
140
- --card-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
141
-
142
- --border: oklch(1 0 0 / 10%); /* --color-white */
143
- --input: oklch(1 0 0 / 15%); /* --color-white */
144
- --ring: oklch(0.38 0.07 169); /* --color-emerald-900 */
145
-
146
- --sidebar: oklch(0.21 0.006 285.885); /* --color-zinc-900 */
147
- --sidebar-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
148
- --sidebar-primary: oklch(0.7 0.15 162); /* --color-emerald-500 */
149
- --sidebar-primary-foreground: oklch(0.98 0.02 166); /* --color-emerald-50 */
150
- --sidebar-accent: oklch(0.274 0.006 286.033); /* --color-zinc-800 */
151
- --sidebar-accent-foreground: oklch(0.985 0 0); /* --color-zinc-50 */
152
- --sidebar-border: oklch(1 0 0 / 10%); /* --color-white */
153
- --sidebar-ring: oklch(0.38 0.07 169); /* --color-emerald-900 */
154
-
155
- --chart-1: oklch(0.85 0.13 165); /* --color-emerald-300 */
156
- --chart-2: oklch(0.77 0.15 163); /* --color-emerald-400 */
157
- --chart-3: oklch(0.7 0.15 162); /* --color-emerald-500 */
158
- --chart-4: oklch(0.6 0.13 163); /* --color-emerald-600 */
159
- --chart-5: oklch(0.51 0.1 166); /* --color-emerald-700 */
160
- }
161
- }