@octanejs/shadcn 0.0.52 → 0.0.53

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 (83) hide show
  1. package/package.json +9 -9
  2. package/src/bases/base-ui/ui/accordion.tsrx +3 -1
  3. package/src/bases/base-ui/ui/alert-dialog.tsrx +6 -5
  4. package/src/bases/base-ui/ui/alert.tsrx +3 -2
  5. package/src/bases/base-ui/ui/aspect-ratio.tsrx +5 -3
  6. package/src/bases/base-ui/ui/badge.tsrx +2 -1
  7. package/src/bases/base-ui/ui/breadcrumb.tsrx +4 -4
  8. package/src/bases/base-ui/ui/button.tsrx +17 -10
  9. package/src/bases/base-ui/ui/context-menu.tsrx +37 -29
  10. package/src/bases/base-ui/ui/dialog.tsrx +6 -4
  11. package/src/bases/base-ui/ui/dropdown-menu.tsrx +37 -29
  12. package/src/bases/base-ui/ui/empty.tsrx +1 -1
  13. package/src/bases/base-ui/ui/field.tsrx +17 -11
  14. package/src/bases/base-ui/ui/hover-card.tsrx +15 -16
  15. package/src/bases/base-ui/ui/item.tsrx +3 -2
  16. package/src/bases/base-ui/ui/kbd.tsrx +1 -1
  17. package/src/bases/base-ui/ui/menubar.tsrx +38 -34
  18. package/src/bases/base-ui/ui/native-select.tsrx +3 -4
  19. package/src/bases/base-ui/ui/navigation-menu.tsrx +113 -87
  20. package/src/bases/base-ui/ui/pagination.tsrx +6 -2
  21. package/src/bases/base-ui/ui/popover.tsrx +15 -16
  22. package/src/bases/base-ui/ui/radio-group.tsrx +1 -3
  23. package/src/bases/base-ui/ui/scroll-area.tsrx +33 -27
  24. package/src/bases/base-ui/ui/select.tsrx +138 -106
  25. package/src/bases/base-ui/ui/sheet.tsrx +6 -4
  26. package/src/bases/base-ui/ui/sidebar.tsrx +65 -44
  27. package/src/bases/base-ui/ui/slider.tsrx +1 -3
  28. package/src/bases/base-ui/ui/tabs.tsrx +1 -1
  29. package/src/bases/base-ui/ui/toggle-group.tsrx +3 -3
  30. package/src/bases/base-ui/ui/toggle.tsrx +3 -2
  31. package/src/bases/base-ui/ui/tooltip.tsrx +17 -17
  32. package/src/bases/radix/ui/accordion.tsrx +3 -1
  33. package/src/bases/radix/ui/alert-dialog.tsrx +1 -1
  34. package/src/bases/radix/ui/alert.tsrx +15 -14
  35. package/src/bases/radix/ui/badge.tsrx +2 -1
  36. package/src/bases/radix/ui/button.tsrx +17 -10
  37. package/src/bases/radix/ui/context-menu.tsrx +20 -10
  38. package/src/bases/radix/ui/dropdown-menu.tsrx +16 -9
  39. package/src/bases/radix/ui/empty.tsrx +1 -1
  40. package/src/bases/radix/ui/field.tsrx +17 -11
  41. package/src/bases/radix/ui/item.tsrx +3 -2
  42. package/src/bases/radix/ui/menubar.tsrx +17 -14
  43. package/src/bases/radix/ui/native-select.tsrx +8 -8
  44. package/src/bases/radix/ui/navigation-menu.tsrx +2 -3
  45. package/src/bases/radix/ui/pagination.tsrx +6 -2
  46. package/src/bases/radix/ui/radio-group.tsrx +1 -3
  47. package/src/bases/radix/ui/scroll-area.tsrx +8 -2
  48. package/src/bases/radix/ui/select.tsrx +10 -5
  49. package/src/bases/radix/ui/sidebar.tsrx +61 -42
  50. package/src/bases/radix/ui/slider.tsrx +9 -7
  51. package/src/bases/radix/ui/tabs.tsrx +11 -5
  52. package/src/bases/radix/ui/toggle.tsrx +3 -2
  53. package/src/bases/radix/ui/tooltip.tsrx +2 -1
  54. package/src/bases/react-aria/ui/accordion.tsrx +58 -47
  55. package/src/bases/react-aria/ui/alert-dialog.tsrx +118 -92
  56. package/src/bases/react-aria/ui/alert.tsrx +39 -32
  57. package/src/bases/react-aria/ui/aspect-ratio.tsrx +12 -8
  58. package/src/bases/react-aria/ui/avatar.tsrx +73 -57
  59. package/src/bases/react-aria/ui/badge.tsrx +19 -12
  60. package/src/bases/react-aria/ui/breadcrumb.tsrx +66 -57
  61. package/src/bases/react-aria/ui/button.tsrx +17 -10
  62. package/src/bases/react-aria/ui/card.tsrx +63 -49
  63. package/src/bases/react-aria/ui/checkbox.tsrx +25 -19
  64. package/src/bases/react-aria/ui/dialog.tsrx +103 -83
  65. package/src/bases/react-aria/ui/empty.tsrx +58 -44
  66. package/src/bases/react-aria/ui/field.tsrx +142 -100
  67. package/src/bases/react-aria/ui/input.tsrx +2 -3
  68. package/src/bases/react-aria/ui/item.tsrx +98 -78
  69. package/src/bases/react-aria/ui/kbd.tsrx +1 -1
  70. package/src/bases/react-aria/ui/label.tsrx +12 -10
  71. package/src/bases/react-aria/ui/native-select.tsrx +38 -30
  72. package/src/bases/react-aria/ui/pagination.tsrx +76 -60
  73. package/src/bases/react-aria/ui/popover.tsrx +32 -22
  74. package/src/bases/react-aria/ui/radio-group.tsrx +30 -23
  75. package/src/bases/react-aria/ui/scroll-area.tsrx +12 -8
  76. package/src/bases/react-aria/ui/sheet.tsrx +92 -73
  77. package/src/bases/react-aria/ui/skeleton.tsrx +7 -5
  78. package/src/bases/react-aria/ui/slider.tsrx +44 -38
  79. package/src/bases/react-aria/ui/switch.tsrx +28 -20
  80. package/src/bases/react-aria/ui/table.tsrx +67 -51
  81. package/src/bases/react-aria/ui/tabs.tsrx +40 -31
  82. package/src/bases/react-aria/ui/textarea.tsrx +2 -3
  83. package/src/bases/react-aria/ui/toggle.tsrx +11 -8
@@ -8,19 +8,23 @@ import { cn } from 'cn';
8
8
  const Select = SelectPrimitive.Root;
9
9
 
10
10
  function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {
11
- return <SelectPrimitive.Group
12
- data-slot="select-group"
13
- className={cn('scroll-my-1 p-1', className)}
14
- {...props}
15
- />;
11
+ return (
12
+ <SelectPrimitive.Group
13
+ data-slot="select-group"
14
+ className={cn('scroll-my-1 p-1', className)}
15
+ {...props}
16
+ />
17
+ );
16
18
  }
17
19
 
18
20
  function SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {
19
- return <SelectPrimitive.Value
20
- data-slot="select-value"
21
- className={cn('flex flex-1 text-left', className)}
22
- {...props}
23
- />;
21
+ return (
22
+ <SelectPrimitive.Value
23
+ data-slot="select-value"
24
+ className={cn('flex flex-1 text-left', className)}
25
+ {...props}
26
+ />
27
+ );
24
28
  }
25
29
 
26
30
  function SelectTrigger({
@@ -31,20 +35,22 @@ function SelectTrigger({
31
35
  }: SelectPrimitive.Trigger.Props & {
32
36
  size?: 'sm' | 'default';
33
37
  }) {
34
- return <SelectPrimitive.Trigger
35
- data-slot="select-trigger"
36
- data-size={size}
37
- className={cn(
38
- 'border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm transition-colors select-none focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*=\'size-\'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0',
39
- className,
40
- )}
41
- {...props}
42
- >
43
- {children}
44
- <SelectPrimitive.Icon
45
- render={<ChevronDownIcon className="text-muted-foreground size-4 pointer-events-none" />}
46
- />
47
- </SelectPrimitive.Trigger>;
38
+ return (
39
+ <SelectPrimitive.Trigger
40
+ data-slot="select-trigger"
41
+ data-size={size}
42
+ className={cn(
43
+ "border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm transition-colors select-none focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
44
+ className,
45
+ )}
46
+ {...props}
47
+ >
48
+ {children}
49
+ <SelectPrimitive.Icon
50
+ render={<ChevronDownIcon className="text-muted-foreground size-4 pointer-events-none" />}
51
+ />
52
+ </SelectPrimitive.Trigger>
53
+ );
48
54
  }
49
55
 
50
56
  function SelectContent({
@@ -56,102 +62,128 @@ function SelectContent({
56
62
  alignOffset = 0,
57
63
  alignItemWithTrigger = true,
58
64
  ...props
59
- }: SelectPrimitive.Popup.Props & Pick<
60
- SelectPrimitive.Positioner.Props,
61
- 'align' | 'alignOffset' | 'side' | 'sideOffset' | 'alignItemWithTrigger'
62
- >) {
63
- return <SelectPrimitive.Portal>
64
- <SelectPrimitive.Positioner
65
- side={side}
66
- sideOffset={sideOffset}
67
- align={align}
68
- alignOffset={alignOffset}
69
- alignItemWithTrigger={alignItemWithTrigger}
70
- className="isolate z-50"
71
- >
72
- <SelectPrimitive.Popup
73
- data-slot="select-content"
74
- data-align-trigger={alignItemWithTrigger}
75
- className={cn(
76
- 'bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg shadow-md ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto data-[align-trigger=true]:animate-none',
77
- className,
78
- )}
79
- {...props}
65
+ }: SelectPrimitive.Popup.Props &
66
+ Pick<
67
+ SelectPrimitive.Positioner.Props,
68
+ 'align' | 'alignOffset' | 'side' | 'sideOffset' | 'alignItemWithTrigger'
69
+ >) {
70
+ return (
71
+ <SelectPrimitive.Portal>
72
+ <SelectPrimitive.Positioner
73
+ side={side}
74
+ sideOffset={sideOffset}
75
+ align={align}
76
+ alignOffset={alignOffset}
77
+ alignItemWithTrigger={alignItemWithTrigger}
78
+ className="isolate z-50"
80
79
  >
81
- <SelectScrollUpButton />
82
- <SelectPrimitive.List>{children}</SelectPrimitive.List>
83
- <SelectScrollDownButton />
84
- </SelectPrimitive.Popup>
85
- </SelectPrimitive.Positioner>
86
- </SelectPrimitive.Portal>;
80
+ <SelectPrimitive.Popup
81
+ data-slot="select-content"
82
+ data-align-trigger={alignItemWithTrigger}
83
+ className={cn(
84
+ 'bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg shadow-md ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto data-[align-trigger=true]:animate-none',
85
+ className,
86
+ )}
87
+ {...props}
88
+ >
89
+ <SelectScrollUpButton />
90
+ <SelectPrimitive.List>{children}</SelectPrimitive.List>
91
+ <SelectScrollDownButton />
92
+ </SelectPrimitive.Popup>
93
+ </SelectPrimitive.Positioner>
94
+ </SelectPrimitive.Portal>
95
+ );
87
96
  }
88
97
 
89
98
  function SelectLabel({ className, ...props }: SelectPrimitive.GroupLabel.Props) {
90
- return <SelectPrimitive.GroupLabel
91
- data-slot="select-label"
92
- className={cn('text-muted-foreground px-1.5 py-1 text-xs', className)}
93
- {...props}
94
- />;
99
+ return (
100
+ <SelectPrimitive.GroupLabel
101
+ data-slot="select-label"
102
+ className={cn('text-muted-foreground px-1.5 py-1 text-xs', className)}
103
+ {...props}
104
+ />
105
+ );
95
106
  }
96
107
 
97
108
  function SelectItem({ className, children, ...props }: SelectPrimitive.Item.Props) {
98
- return <SelectPrimitive.Item
99
- data-slot="select-item"
100
- className={cn(
101
- 'focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm [&_svg:not([class*=\'size-\'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0',
102
- className,
103
- )}
104
- {...props}
105
- >
106
- <SelectPrimitive.ItemText
107
- className="flex flex-1 gap-2 shrink-0 whitespace-nowrap"
108
- >{children}</SelectPrimitive.ItemText>
109
- <SelectPrimitive.ItemIndicator
110
- render={<span
111
- className="pointer-events-none absolute right-2 flex size-4 items-center justify-center"
112
- />}
109
+ return (
110
+ <SelectPrimitive.Item
111
+ data-slot="select-item"
112
+ className={cn(
113
+ "focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
114
+ className,
115
+ )}
116
+ {...props}
113
117
  >
114
- <CheckIcon className="pointer-events-none" />
115
- </SelectPrimitive.ItemIndicator>
116
- </SelectPrimitive.Item>;
118
+ <SelectPrimitive.ItemText className="flex flex-1 gap-2 shrink-0 whitespace-nowrap">
119
+ {children}
120
+ </SelectPrimitive.ItemText>
121
+ <SelectPrimitive.ItemIndicator
122
+ render={
123
+ <span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" />
124
+ }
125
+ >
126
+ <CheckIcon className="pointer-events-none" />
127
+ </SelectPrimitive.ItemIndicator>
128
+ </SelectPrimitive.Item>
129
+ );
117
130
  }
118
131
 
119
132
  function SelectSeparator({ className, ...props }: SelectPrimitive.Separator.Props) {
120
- return <SelectPrimitive.Separator
121
- data-slot="select-separator"
122
- className={cn('bg-border -mx-1 my-1 h-px pointer-events-none', className)}
123
- {...props}
124
- />;
133
+ return (
134
+ <SelectPrimitive.Separator
135
+ data-slot="select-separator"
136
+ className={cn('bg-border -mx-1 my-1 h-px pointer-events-none', className)}
137
+ {...props}
138
+ />
139
+ );
125
140
  }
126
141
 
127
- function SelectScrollUpButton({ className, ...props }: React.ComponentProps<
128
- typeof SelectPrimitive.ScrollUpArrow
129
- >) {
130
- return <SelectPrimitive.ScrollUpArrow
131
- data-slot="select-scroll-up-button"
132
- className={cn(
133
- 'bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*=\'size-\'])]:size-4 top-0 w-full',
134
- className,
135
- )}
136
- {...props}
137
- >
138
- <ChevronUpIcon />
139
- </SelectPrimitive.ScrollUpArrow>;
142
+ function SelectScrollUpButton({
143
+ className,
144
+ ...props
145
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {
146
+ return (
147
+ <SelectPrimitive.ScrollUpArrow
148
+ data-slot="select-scroll-up-button"
149
+ className={cn(
150
+ "bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 top-0 w-full",
151
+ className,
152
+ )}
153
+ {...props}
154
+ >
155
+ <ChevronUpIcon />
156
+ </SelectPrimitive.ScrollUpArrow>
157
+ );
140
158
  }
141
159
 
142
- function SelectScrollDownButton({ className, ...props }: React.ComponentProps<
143
- typeof SelectPrimitive.ScrollDownArrow
144
- >) {
145
- return <SelectPrimitive.ScrollDownArrow
146
- data-slot="select-scroll-down-button"
147
- className={cn(
148
- 'bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*=\'size-\'])]:size-4 bottom-0 w-full',
149
- className,
150
- )}
151
- {...props}
152
- >
153
- <ChevronDownIcon />
154
- </SelectPrimitive.ScrollDownArrow>;
160
+ function SelectScrollDownButton({
161
+ className,
162
+ ...props
163
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {
164
+ return (
165
+ <SelectPrimitive.ScrollDownArrow
166
+ data-slot="select-scroll-down-button"
167
+ className={cn(
168
+ "bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 bottom-0 w-full",
169
+ className,
170
+ )}
171
+ {...props}
172
+ >
173
+ <ChevronDownIcon />
174
+ </SelectPrimitive.ScrollDownArrow>
175
+ );
155
176
  }
156
177
 
157
- export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue };
178
+ export {
179
+ Select,
180
+ SelectContent,
181
+ SelectGroup,
182
+ SelectItem,
183
+ SelectLabel,
184
+ SelectScrollDownButton,
185
+ SelectScrollUpButton,
186
+ SelectSeparator,
187
+ SelectTrigger,
188
+ SelectValue,
189
+ };
@@ -82,10 +82,12 @@ export function SheetContent(props: SheetContentProps) @{
82
82
  @if (showCloseButton) {
83
83
  <SheetPrimitive.Close
84
84
  data-slot="sheet-close"
85
- render={<Button variant="ghost" className="absolute top-3 right-3" size="icon-sm">
86
- <XIcon />
87
- <span className="sr-only">Close</span>
88
- </Button>}
85
+ render={
86
+ <Button variant="ghost" className="absolute top-3 right-3" size="icon-sm">
87
+ <XIcon />
88
+ <span className="sr-only">Close</span>
89
+ </Button>
90
+ }
89
91
  />
90
92
  }
91
93
  </SheetPrimitive.Popup>
@@ -74,12 +74,14 @@ export function useSidebar(): SidebarContextProps {
74
74
  return context;
75
75
  }
76
76
 
77
- export function SidebarProvider(props: Props & {
78
- defaultOpen?: boolean;
79
- open?: boolean;
80
- onOpenChange?: (open: boolean) => void;
81
- style?: Record<string, string>;
82
- }) {
77
+ export function SidebarProvider(
78
+ props: Props & {
79
+ defaultOpen?: boolean;
80
+ open?: boolean;
81
+ onOpenChange?: (open: boolean) => void;
82
+ style?: Record<string, string>;
83
+ },
84
+ ) {
83
85
  const {
84
86
  defaultOpen = true,
85
87
  open: openProp,
@@ -97,8 +99,7 @@ export function SidebarProvider(props: Props & {
97
99
  const [_open, _setOpen] = useState(defaultOpen);
98
100
  const open = openProp ?? _open;
99
101
  const setOpen = useCallback((value: boolean | ((value: boolean) => boolean)) => {
100
- const openState =
101
- typeof value === 'function' ? value(open) : value;
102
+ const openState = typeof value === 'function' ? value(open) : value;
102
103
  if (setOpenProp) {
103
104
  setOpenProp(openState);
104
105
  } else {
@@ -106,8 +107,7 @@ export function SidebarProvider(props: Props & {
106
107
  }
107
108
 
108
109
  // This sets the cookie to keep the sidebar state.
109
- document.cookie =
110
- `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
110
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
111
111
  });
112
112
 
113
113
  // Helper to toggle the sidebar.
@@ -132,17 +132,15 @@ export function SidebarProvider(props: Props & {
132
132
  // This makes it easier to style the sidebar with Tailwind classes.
133
133
  const state = open ? 'expanded' : 'collapsed';
134
134
 
135
- const contextValue = useMemo<SidebarContextProps>(
136
- () => ({
137
- state,
138
- open,
139
- setOpen,
140
- isMobile,
141
- openMobile,
142
- setOpenMobile,
143
- toggleSidebar,
144
- }),
145
- );
135
+ const contextValue = useMemo<SidebarContextProps>(() => ({
136
+ state,
137
+ open,
138
+ setOpen,
139
+ isMobile,
140
+ openMobile,
141
+ setOpenMobile,
142
+ toggleSidebar,
143
+ }));
146
144
 
147
145
  return createElement(
148
146
  SidebarContext,
@@ -167,12 +165,14 @@ export function SidebarProvider(props: Props & {
167
165
  );
168
166
  }
169
167
 
170
- export function Sidebar(props: Props & {
171
- side?: 'left' | 'right';
172
- variant?: 'sidebar' | 'floating' | 'inset';
173
- collapsible?: 'offcanvas' | 'icon' | 'none';
174
- dir?: string;
175
- }) {
168
+ export function Sidebar(
169
+ props: Props & {
170
+ side?: 'left' | 'right';
171
+ variant?: 'sidebar' | 'floating' | 'inset';
172
+ collapsible?: 'offcanvas' | 'icon' | 'none';
173
+ dir?: string;
174
+ },
175
+ ) {
176
176
  const {
177
177
  side = 'left',
178
178
  variant = 'sidebar',
@@ -273,7 +273,8 @@ export function Sidebar(props: Props & {
273
273
  {
274
274
  'data-sidebar': 'sidebar',
275
275
  'data-slot': 'sidebar-inner',
276
- className: 'flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border',
276
+ className:
277
+ 'flex size-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border',
277
278
  },
278
279
  props.children,
279
280
  ),
@@ -281,7 +282,11 @@ export function Sidebar(props: Props & {
281
282
  );
282
283
  }
283
284
 
284
- export function SidebarTrigger({ className, onClick, ...props }: Props & {
285
+ export function SidebarTrigger({
286
+ className,
287
+ onClick,
288
+ ...props
289
+ }: Props & {
285
290
  onClick?: (event: MouseEvent) => void;
286
291
  }) @{
287
292
  const { toggleSidebar } = useSidebar();
@@ -394,7 +399,10 @@ export function SidebarGroup({ className, ...props }: Props) @{
394
399
  />
395
400
  }
396
401
 
397
- export function SidebarGroupLabel({ className, ...props }: Props & {
402
+ export function SidebarGroupLabel({
403
+ className,
404
+ ...props
405
+ }: Props & {
398
406
  /** Not supported in this base — see the header. Declared so it fails to compile, not silently. */
399
407
  asChild?: never;
400
408
  }) @{
@@ -409,7 +417,10 @@ export function SidebarGroupLabel({ className, ...props }: Props & {
409
417
  />
410
418
  }
411
419
 
412
- export function SidebarGroupAction({ className, ...props }: Props & {
420
+ export function SidebarGroupAction({
421
+ className,
422
+ ...props
423
+ }: Props & {
413
424
  /** Not supported in this base — see the header. Declared so it fails to compile, not silently. */
414
425
  asChild?: never;
415
426
  }) @{
@@ -461,7 +472,8 @@ export const sidebarMenuButtonVariants = cva(
461
472
  variants: {
462
473
  variant: {
463
474
  default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',
464
- outline: 'bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]',
475
+ outline:
476
+ 'bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]',
465
477
  },
466
478
  size: {
467
479
  default: 'h-8 text-sm',
@@ -476,14 +488,16 @@ export const sidebarMenuButtonVariants = cva(
476
488
  },
477
489
  );
478
490
 
479
- export function SidebarMenuButton(props: Props & {
480
- /** Not supported in this base — see the header. Declared so it fails to compile, not silently. */
481
- asChild?: never;
482
- isActive?: boolean;
483
- tooltip?: string | Record<string, unknown>;
484
- variant?: VariantProps<typeof sidebarMenuButtonVariants>['variant'];
485
- size?: VariantProps<typeof sidebarMenuButtonVariants>['size'];
486
- }) {
491
+ export function SidebarMenuButton(
492
+ props: Props & {
493
+ /** Not supported in this base — see the header. Declared so it fails to compile, not silently. */
494
+ asChild?: never;
495
+ isActive?: boolean;
496
+ tooltip?: string | Record<string, unknown>;
497
+ variant?: VariantProps<typeof sidebarMenuButtonVariants>['variant'];
498
+ size?: VariantProps<typeof sidebarMenuButtonVariants>['size'];
499
+ },
500
+ ) {
487
501
  const {
488
502
  isActive = false,
489
503
  variant = 'default',
@@ -512,8 +526,7 @@ export function SidebarMenuButton(props: Props & {
512
526
  return button;
513
527
  }
514
528
 
515
- const tooltipProps =
516
- typeof tooltip === 'string' ? { children: tooltip } : tooltip;
529
+ const tooltipProps = typeof tooltip === 'string' ? { children: tooltip } : tooltip;
517
530
 
518
531
  return createElement(
519
532
  Tooltip,
@@ -529,7 +542,11 @@ export function SidebarMenuButton(props: Props & {
529
542
  );
530
543
  }
531
544
 
532
- export function SidebarMenuAction({ className, showOnHover = false, ...props }: Props & {
545
+ export function SidebarMenuAction({
546
+ className,
547
+ showOnHover = false,
548
+ ...props
549
+ }: Props & {
533
550
  /** Not supported in this base — see the header. Declared so it fails to compile, not silently. */
534
551
  asChild?: never;
535
552
  showOnHover?: boolean;
@@ -559,7 +576,11 @@ export function SidebarMenuBadge({ className, ...props }: Props) @{
559
576
  />
560
577
  }
561
578
 
562
- export function SidebarMenuSkeleton({ className, showIcon = false, ...props }: Props & {
579
+ export function SidebarMenuSkeleton({
580
+ className,
581
+ showIcon = false,
582
+ ...props
583
+ }: Props & {
563
584
  showIcon?: boolean;
564
585
  }) @{
565
586
  // Random width between 50 to 90%.
@@ -77,9 +77,7 @@ export function Slider<Value extends number | readonly number[]>({
77
77
  thumbAlignment="edge"
78
78
  {...props}
79
79
  >
80
- <SliderPrimitive.Control
81
- className="relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col"
82
- >
80
+ <SliderPrimitive.Control className="relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col">
83
81
  <SliderPrimitive.Track
84
82
  data-slot="slider-track"
85
83
  className="relative grow overflow-hidden rounded-full bg-muted select-none data-[orientation=horizontal]:h-1 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1"
@@ -62,7 +62,7 @@ export function TabsTrigger({ className, ...props }: StyledProps<TabsPrimitive.T
62
62
  <TabsPrimitive.Tab
63
63
  data-slot="tabs-trigger"
64
64
  className={cn(
65
- 'relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] 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]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 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',
65
+ "relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] 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]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 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",
66
66
  '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',
67
67
  'data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground',
68
68
  'after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100',
@@ -77,9 +77,9 @@ export function ToggleGroup({
77
77
  )}
78
78
  {...props}
79
79
  >
80
- <ToggleGroupContext
81
- value={{ variant, size, spacing, orientation }}
82
- >{children}</ToggleGroupContext>
80
+ <ToggleGroupContext value={{ variant, size, spacing, orientation }}>
81
+ {children}
82
+ </ToggleGroupContext>
83
83
  </ToggleGroupPrimitive>
84
84
  }
85
85
 
@@ -17,12 +17,13 @@ import { Toggle as TogglePrimitive } from '@octanejs/base-ui/toggle';
17
17
  import { cn } from 'cn';
18
18
 
19
19
  export const toggleVariants = cva(
20
- 'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-pressed:bg-accent data-pressed:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\'size-\'])]:size-4',
20
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-pressed:bg-accent data-pressed:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
21
21
  {
22
22
  variants: {
23
23
  variant: {
24
24
  default: 'bg-transparent',
25
- outline: 'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',
25
+ outline:
26
+ 'border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground',
26
27
  },
27
28
  size: {
28
29
  default: 'h-9 min-w-9 px-2',
@@ -40,22 +40,21 @@ export interface TooltipContentProps extends Record<string, unknown> {
40
40
  }
41
41
 
42
42
  /** Props routed to the Positioner rather than the popup. */
43
- export type BaseUiPositioningProps =
44
- Pick<
45
- TooltipPrimitive.Positioner.Props,
46
- | 'side'
47
- | 'sideOffset'
48
- | 'align'
49
- | 'alignOffset'
50
- | 'anchor'
51
- | 'positionMethod'
52
- | 'collisionBoundary'
53
- | 'collisionPadding'
54
- | 'collisionAvoidance'
55
- | 'arrowPadding'
56
- | 'sticky'
57
- | 'disableAnchorTracking'
58
- >;
43
+ export type BaseUiPositioningProps = Pick<
44
+ TooltipPrimitive.Positioner.Props,
45
+ | 'side'
46
+ | 'sideOffset'
47
+ | 'align'
48
+ | 'alignOffset'
49
+ | 'anchor'
50
+ | 'positionMethod'
51
+ | 'collisionBoundary'
52
+ | 'collisionPadding'
53
+ | 'collisionAvoidance'
54
+ | 'arrowPadding'
55
+ | 'sticky'
56
+ | 'disableAnchorTracking'
57
+ >;
59
58
 
60
59
  export function TooltipContent({
61
60
  className,
@@ -104,7 +103,8 @@ export function TooltipContent({
104
103
  createElement(Fragment, { key: 'content', children }),
105
104
  createElement(TooltipPrimitive.Arrow, {
106
105
  key: 'arrow',
107
- className: 'z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground',
106
+ className:
107
+ 'z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground',
108
108
  }),
109
109
  ],
110
110
  }),
@@ -67,6 +67,8 @@ export function AccordionContent(props: Props) @{
67
67
  'h-(--radix-accordion-content-height) pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4',
68
68
  className,
69
69
  )}
70
- >{props.children}</div>
70
+ >
71
+ {props.children}
72
+ </div>
71
73
  </AccordionPrimitive.Content>
72
74
  }
@@ -88,7 +88,7 @@ export function AlertDialogMedia({ className, ...props }: Props) @{
88
88
  <div
89
89
  data-slot="alert-dialog-media"
90
90
  className={cn(
91
- 'mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*=\'size-\'])]:size-6',
91
+ "mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6",
92
92
  className,
93
93
  )}
94
94
  {...props}