@octanejs/shadcn 0.0.51 → 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
@@ -34,22 +34,21 @@ import { cn } from 'cn';
34
34
  type Props = { className?: string; children?: OctaneNode } & Record<string, unknown>;
35
35
 
36
36
  /** Props routed to the Positioner rather than the popup. */
37
- export type BaseUiPositioningProps =
38
- Pick<
39
- MenuPrimitive.Positioner.Props,
40
- | 'side'
41
- | 'sideOffset'
42
- | 'align'
43
- | 'alignOffset'
44
- | 'anchor'
45
- | 'positionMethod'
46
- | 'collisionBoundary'
47
- | 'collisionPadding'
48
- | 'collisionAvoidance'
49
- | 'arrowPadding'
50
- | 'sticky'
51
- | 'disableAnchorTracking'
52
- >;
37
+ export type BaseUiPositioningProps = Pick<
38
+ MenuPrimitive.Positioner.Props,
39
+ | 'side'
40
+ | 'sideOffset'
41
+ | 'align'
42
+ | 'alignOffset'
43
+ | 'anchor'
44
+ | 'positionMethod'
45
+ | 'collisionBoundary'
46
+ | 'collisionPadding'
47
+ | 'collisionAvoidance'
48
+ | 'arrowPadding'
49
+ | 'sticky'
50
+ | 'disableAnchorTracking'
51
+ >;
53
52
 
54
53
  export function Menubar({ className, ...props }: Props) @{
55
54
  <MenubarPrimitive
@@ -129,7 +128,12 @@ export function MenubarContent({
129
128
  </MenuPrimitive.Portal>
130
129
  }
131
130
 
132
- export function MenubarItem({ className, inset, variant = 'default', ...props }: Props & {
131
+ export function MenubarItem({
132
+ className,
133
+ inset,
134
+ variant = 'default',
135
+ ...props
136
+ }: Props & {
133
137
  inset?: boolean;
134
138
  variant?: 'default' | 'destructive';
135
139
  }) @{
@@ -138,17 +142,19 @@ export function MenubarItem({ className, inset, variant = 'default', ...props }:
138
142
  data-inset={inset}
139
143
  data-variant={variant}
140
144
  className={cn(
141
- 'group/menubar-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\'size-\'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive!',
145
+ "group/menubar-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive!",
142
146
  className,
143
147
  )}
144
148
  {...props}
145
149
  />
146
150
  }
147
151
 
148
- export function MenubarCheckboxItem(props: Props & {
149
- checked?: boolean;
150
- inset?: boolean;
151
- }) @{
152
+ export function MenubarCheckboxItem(
153
+ props: Props & {
154
+ checked?: boolean;
155
+ inset?: boolean;
156
+ },
157
+ ) @{
152
158
  const { className, children: _children, checked, inset, ...rest } = props;
153
159
 
154
160
  <MenuPrimitive.CheckboxItem
@@ -161,9 +167,7 @@ export function MenubarCheckboxItem(props: Props & {
161
167
  checked={checked}
162
168
  {...rest}
163
169
  >
164
- <span
165
- className="pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4"
166
- >
170
+ <span className="pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4">
167
171
  <MenuPrimitive.CheckboxItemIndicator>
168
172
  <CheckIcon />
169
173
  </MenuPrimitive.CheckboxItemIndicator>
@@ -172,24 +176,24 @@ export function MenubarCheckboxItem(props: Props & {
172
176
  </MenuPrimitive.CheckboxItem>
173
177
  }
174
178
 
175
- export function MenubarRadioItem(props: Omit<MenuPrimitive.RadioItem.Props, 'className'> & {
176
- className?: string;
177
- inset?: boolean;
178
- }) @{
179
+ export function MenubarRadioItem(
180
+ props: Omit<MenuPrimitive.RadioItem.Props, 'className'> & {
181
+ className?: string;
182
+ inset?: boolean;
183
+ },
184
+ ) @{
179
185
  const { className, children: _children, inset, ...rest } = props;
180
186
 
181
187
  <MenuPrimitive.RadioItem
182
188
  data-slot="menubar-radio-item"
183
189
  data-inset={inset}
184
190
  className={cn(
185
- 'relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\'size-\'])]:size-4',
191
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
186
192
  className,
187
193
  )}
188
194
  {...rest}
189
195
  >
190
- <span
191
- className="pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4"
192
- >
196
+ <span className="pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4">
193
197
  <MenuPrimitive.RadioItemIndicator>
194
198
  <CheckIcon />
195
199
  </MenuPrimitive.RadioItemIndicator>
@@ -239,7 +243,7 @@ export function MenubarSubTrigger(props: Props & { inset?: boolean }) @{
239
243
  data-slot="menubar-sub-trigger"
240
244
  data-inset={inset}
241
245
  className={cn(
242
- 'flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-none select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground [&_svg:not([class*=\'size-\'])]:size-4',
246
+ "flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-none select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4",
243
247
  className,
244
248
  )}
245
249
  {...rest}
@@ -12,10 +12,9 @@ import { ChevronDownIcon } from '@octanejs/lucide';
12
12
  import { cn } from 'cn';
13
13
  import type { HostProps } from '../../../lib/types';
14
14
 
15
- export type NativeSelectProps =
16
- Omit<HostProps<'select'>, 'size'> & {
17
- size?: 'sm' | 'default';
18
- };
15
+ export type NativeSelectProps = Omit<HostProps<'select'>, 'size'> & {
16
+ size?: 'sm' | 'default';
17
+ };
19
18
 
20
19
  export function NativeSelect({ className, size = 'default', ...props }: NativeSelectProps) @{
21
20
  <div
@@ -12,37 +12,45 @@ function NavigationMenu({
12
12
  children,
13
13
  ...props
14
14
  }: NavigationMenuPrimitive.Root.Props & Pick<NavigationMenuPrimitive.Positioner.Props, 'align'>) {
15
- return <NavigationMenuPrimitive.Root
16
- data-slot="navigation-menu"
17
- className={cn(
18
- 'group/navigation-menu relative flex max-w-max flex-1 items-center justify-center',
19
- className,
20
- )}
21
- {...props}
22
- >
23
- {children}
24
- <NavigationMenuPositioner align={align} />
25
- </NavigationMenuPrimitive.Root>;
15
+ return (
16
+ <NavigationMenuPrimitive.Root
17
+ data-slot="navigation-menu"
18
+ className={cn(
19
+ 'group/navigation-menu relative flex max-w-max flex-1 items-center justify-center',
20
+ className,
21
+ )}
22
+ {...props}
23
+ >
24
+ {children}
25
+ <NavigationMenuPositioner align={align} />
26
+ </NavigationMenuPrimitive.Root>
27
+ );
26
28
  }
27
29
 
28
- function NavigationMenuList({ className, ...props }: React.ComponentPropsWithRef<
29
- typeof NavigationMenuPrimitive.List
30
- >) {
31
- return <NavigationMenuPrimitive.List
32
- data-slot="navigation-menu-list"
33
- className={cn('gap-0 group flex flex-1 list-none items-center justify-center', className)}
34
- {...props}
35
- />;
30
+ function NavigationMenuList({
31
+ className,
32
+ ...props
33
+ }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.List>) {
34
+ return (
35
+ <NavigationMenuPrimitive.List
36
+ data-slot="navigation-menu-list"
37
+ className={cn('gap-0 group flex flex-1 list-none items-center justify-center', className)}
38
+ {...props}
39
+ />
40
+ );
36
41
  }
37
42
 
38
- function NavigationMenuItem({ className, ...props }: React.ComponentPropsWithRef<
39
- typeof NavigationMenuPrimitive.Item
40
- >) {
41
- return <NavigationMenuPrimitive.Item
42
- data-slot="navigation-menu-item"
43
- className={cn('relative', className)}
44
- {...props}
45
- />;
43
+ function NavigationMenuItem({
44
+ className,
45
+ ...props
46
+ }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.Item>) {
47
+ return (
48
+ <NavigationMenuPrimitive.Item
49
+ data-slot="navigation-menu-item"
50
+ className={cn('relative', className)}
51
+ {...props}
52
+ />
53
+ );
46
54
  }
47
55
 
48
56
  const navigationMenuTriggerStyle = cva(
@@ -54,29 +62,32 @@ function NavigationMenuTrigger({
54
62
  children,
55
63
  ...props
56
64
  }: NavigationMenuPrimitive.Trigger.Props) {
57
- return <NavigationMenuPrimitive.Trigger
58
- data-slot="navigation-menu-trigger"
59
- className={cn(navigationMenuTriggerStyle(), 'group', className)}
60
- {...props}
61
- >
62
- {children}
63
- {' '}
64
- <ChevronDownIcon
65
- className="relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180"
66
- aria-hidden="true"
67
- />
68
- </NavigationMenuPrimitive.Trigger>;
65
+ return (
66
+ <NavigationMenuPrimitive.Trigger
67
+ data-slot="navigation-menu-trigger"
68
+ className={cn(navigationMenuTriggerStyle(), 'group', className)}
69
+ {...props}
70
+ >
71
+ {children}{' '}
72
+ <ChevronDownIcon
73
+ className="relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180"
74
+ aria-hidden="true"
75
+ />
76
+ </NavigationMenuPrimitive.Trigger>
77
+ );
69
78
  }
70
79
 
71
80
  function NavigationMenuContent({ className, ...props }: NavigationMenuPrimitive.Content.Props) {
72
- return <NavigationMenuPrimitive.Content
73
- data-slot="navigation-menu-content"
74
- className={cn(
75
- 'data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out 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 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/10 p-1 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300 data-ending-style:data-activation-direction=left:translate-x-[50%] data-ending-style:data-activation-direction=right:translate-x-[-50%] data-starting-style:data-activation-direction=left:translate-x-[-50%] data-starting-style:data-activation-direction=right:translate-x-[50%] h-full w-auto transition-[opacity,transform,translate] duration-[0.35s] data-ending-style:opacity-0 data-starting-style:opacity-0 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none',
76
- className,
77
- )}
78
- {...props}
79
- />;
81
+ return (
82
+ <NavigationMenuPrimitive.Content
83
+ data-slot="navigation-menu-content"
84
+ className={cn(
85
+ 'data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out 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 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/10 p-1 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300 data-ending-style:data-activation-direction=left:translate-x-[50%] data-ending-style:data-activation-direction=right:translate-x-[-50%] data-starting-style:data-activation-direction=left:translate-x-[-50%] data-starting-style:data-activation-direction=right:translate-x-[50%] h-full w-auto transition-[opacity,transform,translate] duration-[0.35s] data-ending-style:opacity-0 data-starting-style:opacity-0 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none',
86
+ className,
87
+ )}
88
+ {...props}
89
+ />
90
+ );
80
91
  }
81
92
 
82
93
  function NavigationMenuPositioner({
@@ -87,51 +98,66 @@ function NavigationMenuPositioner({
87
98
  alignOffset = 0,
88
99
  ...props
89
100
  }: NavigationMenuPrimitive.Positioner.Props) {
90
- return <NavigationMenuPrimitive.Portal>
91
- <NavigationMenuPrimitive.Positioner
92
- side={side}
93
- sideOffset={sideOffset}
94
- align={align}
95
- alignOffset={alignOffset}
96
- className={cn(
97
- 'ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0 isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] data-instant:transition-none',
98
- className,
99
- )}
100
- {...props}
101
- >
102
- <NavigationMenuPrimitive.Popup
103
- className="bg-popover text-popover-foreground ring-foreground/10 rounded-lg shadow ring-1 outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0 data-[ending-style]:easing-[ease] xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) transition-[opacity,transform,width,height,scale,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)]"
101
+ return (
102
+ <NavigationMenuPrimitive.Portal>
103
+ <NavigationMenuPrimitive.Positioner
104
+ side={side}
105
+ sideOffset={sideOffset}
106
+ align={align}
107
+ alignOffset={alignOffset}
108
+ className={cn(
109
+ 'ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0 isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] data-instant:transition-none',
110
+ className,
111
+ )}
112
+ {...props}
104
113
  >
105
- <NavigationMenuPrimitive.Viewport className="relative size-full overflow-hidden" />
106
- </NavigationMenuPrimitive.Popup>
107
- </NavigationMenuPrimitive.Positioner>
108
- </NavigationMenuPrimitive.Portal>;
114
+ <NavigationMenuPrimitive.Popup className="bg-popover text-popover-foreground ring-foreground/10 rounded-lg shadow ring-1 outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0 data-[ending-style]:easing-[ease] xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) transition-[opacity,transform,width,height,scale,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)]">
115
+ <NavigationMenuPrimitive.Viewport className="relative size-full overflow-hidden" />
116
+ </NavigationMenuPrimitive.Popup>
117
+ </NavigationMenuPrimitive.Positioner>
118
+ </NavigationMenuPrimitive.Portal>
119
+ );
109
120
  }
110
121
 
111
122
  function NavigationMenuLink({ className, ...props }: NavigationMenuPrimitive.Link.Props) {
112
- return <NavigationMenuPrimitive.Link
113
- data-slot="navigation-menu-link"
114
- className={cn(
115
- 'data-active:focus:bg-muted data-active:hover:bg-muted data-active:bg-muted/50 focus-visible:ring-ring/50 hover:bg-muted focus:bg-muted flex items-center gap-2 rounded-lg p-2 text-sm transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md [&_svg:not([class*=\'size-\'])]:size-4',
116
- className,
117
- )}
118
- {...props}
119
- />;
123
+ return (
124
+ <NavigationMenuPrimitive.Link
125
+ data-slot="navigation-menu-link"
126
+ className={cn(
127
+ "data-active:focus:bg-muted data-active:hover:bg-muted data-active:bg-muted/50 focus-visible:ring-ring/50 hover:bg-muted focus:bg-muted flex items-center gap-2 rounded-lg p-2 text-sm transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md [&_svg:not([class*='size-'])]:size-4",
128
+ className,
129
+ )}
130
+ {...props}
131
+ />
132
+ );
120
133
  }
121
134
 
122
- function NavigationMenuIndicator({ className, ...props }: React.ComponentPropsWithRef<
123
- typeof NavigationMenuPrimitive.Icon
124
- >) {
125
- return <NavigationMenuPrimitive.Icon
126
- data-slot="navigation-menu-indicator"
127
- className={cn(
128
- 'data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-1 flex h-1.5 items-end justify-center overflow-hidden',
129
- className,
130
- )}
131
- {...props}
132
- >
133
- <div className="bg-border rounded-tl-sm shadow-md relative top-[60%] h-2 w-2 rotate-45" />
134
- </NavigationMenuPrimitive.Icon>;
135
+ function NavigationMenuIndicator({
136
+ className,
137
+ ...props
138
+ }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.Icon>) {
139
+ return (
140
+ <NavigationMenuPrimitive.Icon
141
+ data-slot="navigation-menu-indicator"
142
+ className={cn(
143
+ 'data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-1 flex h-1.5 items-end justify-center overflow-hidden',
144
+ className,
145
+ )}
146
+ {...props}
147
+ >
148
+ <div className="bg-border rounded-tl-sm shadow-md relative top-[60%] h-2 w-2 rotate-45" />
149
+ </NavigationMenuPrimitive.Icon>
150
+ );
135
151
  }
136
152
 
137
- export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, navigationMenuTriggerStyle, NavigationMenuPositioner };
153
+ export {
154
+ NavigationMenu,
155
+ NavigationMenuContent,
156
+ NavigationMenuIndicator,
157
+ NavigationMenuItem,
158
+ NavigationMenuLink,
159
+ NavigationMenuList,
160
+ NavigationMenuTrigger,
161
+ navigationMenuTriggerStyle,
162
+ NavigationMenuPositioner,
163
+ };
@@ -95,7 +95,11 @@ export function PaginationPrevious({
95
95
  </PaginationLink>
96
96
  }
97
97
 
98
- export function PaginationNext({ className, text = 'Next', ...props }: PaginationLinkProps & {
98
+ export function PaginationNext({
99
+ className,
100
+ text = 'Next',
101
+ ...props
102
+ }: PaginationLinkProps & {
99
103
  text?: string;
100
104
  }) @{
101
105
  <PaginationLink
@@ -114,7 +118,7 @@ export function PaginationEllipsis({ className, ...props }: Props) @{
114
118
  aria-hidden="true"
115
119
  data-slot="pagination-ellipsis"
116
120
  className={cn(
117
- 'flex size-8 items-center justify-center [&_svg:not([class*=\'size-\'])]:size-4',
121
+ "flex size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4",
118
122
  className,
119
123
  )}
120
124
  {...props}
@@ -42,22 +42,21 @@ export function PopoverTrigger(props: Record<string, unknown>) @{
42
42
  }
43
43
 
44
44
  /** Props routed to the Positioner rather than the popup. */
45
- export type BaseUiPositioningProps =
46
- Pick<
47
- PopoverPrimitive.Positioner.Props,
48
- | 'side'
49
- | 'sideOffset'
50
- | 'align'
51
- | 'alignOffset'
52
- | 'anchor'
53
- | 'positionMethod'
54
- | 'collisionBoundary'
55
- | 'collisionPadding'
56
- | 'collisionAvoidance'
57
- | 'arrowPadding'
58
- | 'sticky'
59
- | 'disableAnchorTracking'
60
- >;
45
+ export type BaseUiPositioningProps = Pick<
46
+ PopoverPrimitive.Positioner.Props,
47
+ | 'side'
48
+ | 'sideOffset'
49
+ | 'align'
50
+ | 'alignOffset'
51
+ | 'anchor'
52
+ | 'positionMethod'
53
+ | 'collisionBoundary'
54
+ | 'collisionPadding'
55
+ | 'collisionAvoidance'
56
+ | 'arrowPadding'
57
+ | 'sticky'
58
+ | 'disableAnchorTracking'
59
+ >;
61
60
 
62
61
  export interface PopoverContentProps extends Record<string, unknown>, BaseUiPositioningProps {
63
62
  className?: string;
@@ -54,9 +54,7 @@ export function RadioGroupItem({ className, ...props }: ItemProps) @{
54
54
  data-slot="radio-group-indicator"
55
55
  className="flex size-full items-center justify-center"
56
56
  >
57
- <CircleIcon
58
- className="absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-primary"
59
- />
57
+ <CircleIcon className="absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-primary" />
60
58
  </RadioPrimitive.Indicator>
61
59
  </RadioPrimitive.Root>
62
60
  }
@@ -4,18 +4,22 @@ import { ScrollArea as ScrollAreaPrimitive } from '@octanejs/base-ui/scroll-area
4
4
  import { cn } from 'cn';
5
5
 
6
6
  function ScrollArea({ className, children, ...props }: ScrollAreaPrimitive.Root.Props) {
7
- return <ScrollAreaPrimitive.Root
8
- data-slot="scroll-area"
9
- className={cn('relative', className)}
10
- {...props}
11
- >
12
- <ScrollAreaPrimitive.Viewport
13
- data-slot="scroll-area-viewport"
14
- className="size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1"
15
- >{children}</ScrollAreaPrimitive.Viewport>
16
- <ScrollBar />
17
- <ScrollAreaPrimitive.Corner />
18
- </ScrollAreaPrimitive.Root>;
7
+ return (
8
+ <ScrollAreaPrimitive.Root
9
+ data-slot="scroll-area"
10
+ className={cn('relative', className)}
11
+ {...props}
12
+ >
13
+ <ScrollAreaPrimitive.Viewport
14
+ data-slot="scroll-area-viewport"
15
+ className="size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1"
16
+ >
17
+ {children}
18
+ </ScrollAreaPrimitive.Viewport>
19
+ <ScrollBar />
20
+ <ScrollAreaPrimitive.Corner />
21
+ </ScrollAreaPrimitive.Root>
22
+ );
19
23
  }
20
24
 
21
25
  function ScrollBar({
@@ -23,21 +27,23 @@ function ScrollBar({
23
27
  orientation = 'vertical',
24
28
  ...props
25
29
  }: ScrollAreaPrimitive.Scrollbar.Props) {
26
- return <ScrollAreaPrimitive.Scrollbar
27
- data-slot="scroll-area-scrollbar"
28
- data-orientation={orientation}
29
- orientation={orientation}
30
- className={cn(
31
- 'data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent flex touch-none p-px transition-colors select-none',
32
- className,
33
- )}
34
- {...props}
35
- >
36
- <ScrollAreaPrimitive.Thumb
37
- data-slot="scroll-area-thumb"
38
- className="rounded-full relative flex-1 bg-border"
39
- />
40
- </ScrollAreaPrimitive.Scrollbar>;
30
+ return (
31
+ <ScrollAreaPrimitive.Scrollbar
32
+ data-slot="scroll-area-scrollbar"
33
+ data-orientation={orientation}
34
+ orientation={orientation}
35
+ className={cn(
36
+ 'data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent flex touch-none p-px transition-colors select-none',
37
+ className,
38
+ )}
39
+ {...props}
40
+ >
41
+ <ScrollAreaPrimitive.Thumb
42
+ data-slot="scroll-area-thumb"
43
+ className="rounded-full relative flex-1 bg-border"
44
+ />
45
+ </ScrollAreaPrimitive.Scrollbar>
46
+ );
41
47
  }
42
48
 
43
49
  export { ScrollArea, ScrollBar };