@kushagradhawan/kookie-ui 0.1.32 → 0.1.34

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 (120) hide show
  1. package/components.css +937 -458
  2. package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
  3. package/dist/cjs/components/_internal/base-button.js +1 -1
  4. package/dist/cjs/components/_internal/base-button.js.map +3 -3
  5. package/dist/cjs/components/chatbar.d.ts +202 -0
  6. package/dist/cjs/components/chatbar.d.ts.map +1 -0
  7. package/dist/cjs/components/chatbar.js +2 -0
  8. package/dist/cjs/components/chatbar.js.map +7 -0
  9. package/dist/cjs/components/icon-button.d.ts.map +1 -1
  10. package/dist/cjs/components/icon-button.js +2 -2
  11. package/dist/cjs/components/icon-button.js.map +3 -3
  12. package/dist/cjs/components/icons.d.ts +6 -1
  13. package/dist/cjs/components/icons.d.ts.map +1 -1
  14. package/dist/cjs/components/icons.js +1 -1
  15. package/dist/cjs/components/icons.js.map +3 -3
  16. package/dist/cjs/components/index.d.ts +3 -0
  17. package/dist/cjs/components/index.d.ts.map +1 -1
  18. package/dist/cjs/components/index.js +1 -1
  19. package/dist/cjs/components/index.js.map +3 -3
  20. package/dist/cjs/components/popover.d.ts +13 -1
  21. package/dist/cjs/components/popover.d.ts.map +1 -1
  22. package/dist/cjs/components/popover.js +1 -1
  23. package/dist/cjs/components/popover.js.map +3 -3
  24. package/dist/cjs/components/sheet.d.ts +82 -0
  25. package/dist/cjs/components/sheet.d.ts.map +1 -0
  26. package/dist/cjs/components/sheet.js +2 -0
  27. package/dist/cjs/components/sheet.js.map +7 -0
  28. package/dist/cjs/components/shell.d.ts +180 -0
  29. package/dist/cjs/components/shell.d.ts.map +1 -0
  30. package/dist/cjs/components/shell.js +2 -0
  31. package/dist/cjs/components/shell.js.map +7 -0
  32. package/dist/cjs/components/sidebar.d.ts +4 -33
  33. package/dist/cjs/components/sidebar.d.ts.map +1 -1
  34. package/dist/cjs/components/sidebar.js +1 -1
  35. package/dist/cjs/components/sidebar.js.map +3 -3
  36. package/dist/cjs/components/skeleton.d.ts.map +1 -1
  37. package/dist/cjs/components/skeleton.js +1 -1
  38. package/dist/cjs/components/skeleton.js.map +2 -2
  39. package/dist/cjs/helpers/inert.d.ts +1 -1
  40. package/dist/cjs/helpers/inert.d.ts.map +1 -1
  41. package/dist/cjs/helpers/inert.js +1 -1
  42. package/dist/cjs/helpers/inert.js.map +2 -2
  43. package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
  44. package/dist/esm/components/_internal/base-button.js +1 -1
  45. package/dist/esm/components/_internal/base-button.js.map +3 -3
  46. package/dist/esm/components/chatbar.d.ts +202 -0
  47. package/dist/esm/components/chatbar.d.ts.map +1 -0
  48. package/dist/esm/components/chatbar.js +2 -0
  49. package/dist/esm/components/chatbar.js.map +7 -0
  50. package/dist/esm/components/icon-button.d.ts.map +1 -1
  51. package/dist/esm/components/icon-button.js +2 -2
  52. package/dist/esm/components/icon-button.js.map +3 -3
  53. package/dist/esm/components/icons.d.ts +6 -1
  54. package/dist/esm/components/icons.d.ts.map +1 -1
  55. package/dist/esm/components/icons.js +1 -1
  56. package/dist/esm/components/icons.js.map +3 -3
  57. package/dist/esm/components/index.d.ts +3 -0
  58. package/dist/esm/components/index.d.ts.map +1 -1
  59. package/dist/esm/components/index.js +1 -1
  60. package/dist/esm/components/index.js.map +3 -3
  61. package/dist/esm/components/popover.d.ts +13 -1
  62. package/dist/esm/components/popover.d.ts.map +1 -1
  63. package/dist/esm/components/popover.js +1 -1
  64. package/dist/esm/components/popover.js.map +3 -3
  65. package/dist/esm/components/sheet.d.ts +82 -0
  66. package/dist/esm/components/sheet.d.ts.map +1 -0
  67. package/dist/esm/components/sheet.js +2 -0
  68. package/dist/esm/components/sheet.js.map +7 -0
  69. package/dist/esm/components/shell.d.ts +180 -0
  70. package/dist/esm/components/shell.d.ts.map +1 -0
  71. package/dist/esm/components/shell.js +2 -0
  72. package/dist/esm/components/shell.js.map +7 -0
  73. package/dist/esm/components/sidebar.d.ts +4 -33
  74. package/dist/esm/components/sidebar.d.ts.map +1 -1
  75. package/dist/esm/components/sidebar.js +1 -1
  76. package/dist/esm/components/sidebar.js.map +3 -3
  77. package/dist/esm/components/skeleton.d.ts.map +1 -1
  78. package/dist/esm/components/skeleton.js.map +2 -2
  79. package/dist/esm/helpers/inert.d.ts +1 -1
  80. package/dist/esm/helpers/inert.d.ts.map +1 -1
  81. package/dist/esm/helpers/inert.js +1 -1
  82. package/dist/esm/helpers/inert.js.map +2 -2
  83. package/package.json +2 -1
  84. package/src/components/_internal/base-button.tsx +8 -0
  85. package/src/components/_internal/base-card.css +18 -18
  86. package/src/components/_internal/base-dialog.css +11 -49
  87. package/src/components/_internal/base-menu.css +2 -2
  88. package/src/components/_internal/base-sidebar-menu.css +3 -3
  89. package/src/components/accordion.css +6 -6
  90. package/src/components/animations.css +65 -81
  91. package/src/components/callout.css +3 -3
  92. package/src/components/chatbar.css +214 -0
  93. package/src/components/chatbar.tsx +1181 -0
  94. package/src/components/icon-button.tsx +11 -0
  95. package/src/components/icons.tsx +97 -2
  96. package/src/components/image.css +3 -3
  97. package/src/components/index.css +3 -0
  98. package/src/components/index.tsx +3 -0
  99. package/src/components/popover.css +53 -8
  100. package/src/components/popover.tsx +180 -2
  101. package/src/components/scroll-area.css +3 -3
  102. package/src/components/segmented-control.css +3 -3
  103. package/src/components/sheet.css +90 -0
  104. package/src/components/sheet.tsx +247 -0
  105. package/src/components/shell.css +137 -0
  106. package/src/components/shell.tsx +1032 -0
  107. package/src/components/sidebar.css +55 -268
  108. package/src/components/sidebar.tsx +40 -262
  109. package/src/components/skeleton.tsx +1 -2
  110. package/src/components/text-area.css +6 -5
  111. package/src/components/tooltip.css +2 -2
  112. package/src/helpers/inert.ts +3 -3
  113. package/src/styles/tokens/constants.css +6 -3
  114. package/src/styles/tokens/index.css +1 -0
  115. package/src/styles/tokens/radius.css +7 -2
  116. package/src/styles/tokens/space.css +6 -0
  117. package/src/styles/tokens/transition.css +91 -46
  118. package/styles.css +998 -496
  119. package/tokens/base.css +57 -35
  120. package/tokens.css +61 -38
@@ -6,11 +6,11 @@ import { Slot } from './slot.js';
6
6
  import { Accordion } from 'radix-ui';
7
7
 
8
8
  import { sidebarPropDefs } from './sidebar.props.js';
9
- import { Theme, useThemeContext } from './theme.js';
10
- import { IconButton } from './icon-button.js';
9
+ import { useThemeContext } from './theme.js';
10
+ // import { IconButton } from './icon-button.js';
11
11
  import { ScrollArea } from './scroll-area.js';
12
12
  import { Separator } from './separator.js';
13
- import { ChevronDownIcon, ThickChevronRightIcon } from './icons.js';
13
+ import { ThickChevronRightIcon } from './icons.js';
14
14
  import { extractProps } from '../helpers/extract-props.js';
15
15
  import { Kbd } from './kbd.js';
16
16
  import { Badge } from './badge.js';
@@ -29,150 +29,33 @@ type BadgeConfig = {
29
29
  radius?: BadgeProps['radius'];
30
30
  };
31
31
 
32
- // Sidebar context for state management
33
- type SidebarContextProps = {
34
- state: 'expanded' | 'collapsed';
35
- open: boolean;
36
- setOpen: (open: boolean) => void;
37
- openMobile: boolean;
38
- setOpenMobile: (open: boolean) => void;
39
- isMobile: boolean;
40
- toggleSidebar: () => void;
41
- side: 'left' | 'right';
42
- type: 'sidebar' | 'floating';
43
- variant: 'soft' | 'outline' | 'surface' | 'ghost';
44
- menuVariant: 'solid' | 'soft';
45
- collapsible: 'offcanvas' | 'icon' | 'none';
32
+ // Internal presentational context (not exported) for size/menu variant
33
+ type SidebarVisualContextValue = {
46
34
  size: '1' | '2';
35
+ menuVariant: 'solid' | 'soft';
47
36
  };
48
-
49
- const SidebarContext = React.createContext<SidebarContextProps | null>(null);
50
-
51
- function useSidebar() {
52
- const context = React.useContext(SidebarContext);
53
- if (!context) {
54
- throw new Error('useSidebar must be used within a SidebarProvider.');
55
- }
56
- return context;
57
- }
58
-
59
- // Hook to detect mobile (simplified version)
60
- function useIsMobile() {
61
- const [isMobile, setIsMobile] = React.useState(false);
62
-
63
- React.useEffect(() => {
64
- const checkIsMobile = () => {
65
- setIsMobile(window.innerWidth < 768);
66
- };
67
-
68
- checkIsMobile();
69
- window.addEventListener('resize', checkIsMobile);
70
- return () => window.removeEventListener('resize', checkIsMobile);
71
- }, []);
72
-
73
- return isMobile;
74
- }
75
-
76
- // Provider component
77
- interface SidebarProviderProps extends React.ComponentPropsWithoutRef<'div'> {
78
- defaultOpen?: boolean;
79
- open?: boolean;
80
- onOpenChange?: (open: boolean) => void;
81
- side?: 'left' | 'right';
37
+ const SidebarVisualContext = React.createContext<SidebarVisualContextValue | null>(null);
38
+ function useSidebarVisual() {
39
+ return React.useContext(SidebarVisualContext);
82
40
  }
83
41
 
84
- const SidebarProvider = React.forwardRef<HTMLDivElement, SidebarProviderProps>(
85
- (
86
- {
87
- defaultOpen = true,
88
- open: openProp,
89
- onOpenChange: setOpenProp,
90
- side = 'left',
91
- className,
92
- children,
93
- ...props
94
- },
95
- forwardedRef,
96
- ) => {
97
- const isMobile = useIsMobile();
98
- const [openMobile, setOpenMobile] = React.useState(false);
99
-
100
- // Internal state for uncontrolled mode
101
- const [internalOpen, setInternalOpen] = React.useState(defaultOpen);
102
-
103
- // Use controlled state if provided, otherwise internal state
104
- const open = openProp ?? internalOpen;
105
-
106
- const setOpen = React.useCallback(
107
- (value: boolean | ((value: boolean) => boolean)) => {
108
- const openState = typeof value === 'function' ? value(open) : value;
109
- if (setOpenProp) {
110
- setOpenProp(openState);
111
- } else {
112
- setInternalOpen(openState);
113
- }
114
- },
115
- [setOpenProp, open],
116
- );
117
-
118
- // Helper to toggle the sidebar
119
- const toggleSidebar = React.useCallback(() => {
120
- return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);
121
- }, [isMobile, setOpen, setOpenMobile]);
122
-
123
- // State for data attributes
124
- const state = open ? 'expanded' : 'collapsed';
125
-
126
- const contextValue = React.useMemo<Partial<SidebarContextProps>>(
127
- () => ({
128
- state,
129
- open,
130
- setOpen,
131
- isMobile,
132
- openMobile,
133
- setOpenMobile,
134
- toggleSidebar,
135
- side,
136
- }),
137
- [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar, side],
138
- );
139
-
140
- return (
141
- <div
142
- {...props}
143
- ref={forwardedRef}
144
- className={classNames('rt-SidebarProvider', className)}
145
- data-state={state}
146
- data-side={side}
147
- >
148
- <SidebarContext.Provider value={contextValue as SidebarContextProps}>
149
- {children}
150
- </SidebarContext.Provider>
151
- </div>
152
- );
153
- },
154
- );
155
- SidebarProvider.displayName = 'Sidebar.Provider';
156
-
157
42
  // Main Sidebar component
158
43
  type SidebarOwnProps = GetPropDefTypes<typeof sidebarPropDefs>;
159
44
  interface SidebarProps extends ComponentPropsWithout<'div', RemovedProps>, SidebarOwnProps {}
160
45
 
161
46
  const Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>((props, forwardedRef) => {
162
47
  const themeContext = useThemeContext();
163
- const { isMobile, state, openMobile } = useSidebar();
164
48
 
165
49
  const {
166
50
  size = sidebarPropDefs.size.default,
167
51
  variant = sidebarPropDefs.variant.default,
168
52
  menuVariant = sidebarPropDefs.menuVariant.default,
169
- type = sidebarPropDefs.type.default,
170
- side = sidebarPropDefs.side.default,
171
- collapsible = sidebarPropDefs.collapsible.default,
53
+ // type = sidebarPropDefs.type.default,
54
+ // side = sidebarPropDefs.side.default,
55
+ // collapsible = sidebarPropDefs.collapsible.default,
172
56
  panelBackground,
173
57
  color,
174
58
  highContrast = sidebarPropDefs.highContrast.default,
175
-
176
59
  } = props;
177
60
 
178
61
  const { className, children, ...rootProps } = extractProps(props, sidebarPropDefs);
@@ -181,104 +64,28 @@ const Sidebar = React.forwardRef<HTMLDivElement, SidebarProps>((props, forwarded
181
64
 
182
65
  // Update context with current props - we'll pass the resolved values
183
66
  const resolvedSize = typeof size === 'object' ? size.initial || '2' : size;
184
- const context = React.useContext(SidebarContext);
185
- if (context) {
186
- context.side = side;
187
- context.type = type;
188
- context.variant = variant;
189
- context.menuVariant = menuVariant;
190
- context.collapsible = collapsible;
191
- context.size = resolvedSize;
192
- }
193
-
194
- if (collapsible === 'none') {
195
- return (
196
- <div
197
- {...safeRootProps}
198
- ref={forwardedRef}
199
- data-accent-color={resolvedColor}
200
- data-state={state}
201
- data-side={side}
202
- data-type={type}
203
- data-collapsible={collapsible}
204
- className={classNames('rt-SidebarRoot', `rt-r-size-${size}`, className)}
205
- >
206
- <Theme>
207
- <div
208
- className={classNames('rt-SidebarContainer', `rt-variant-${variant}`)}
209
- data-accent-color={resolvedColor}
210
- data-high-contrast={highContrast || undefined}
211
- data-side={side}
212
- data-panel-background={panelBackground}
213
- >
214
- {children}
215
- </div>
216
- </Theme>
217
- </div>
218
- );
219
- }
220
-
221
- if (isMobile) {
222
- return (
223
- <div
224
- {...safeRootProps}
225
- ref={forwardedRef}
226
- data-accent-color={resolvedColor}
227
- data-state={openMobile ? 'open' : 'closed'}
228
- data-side={side}
229
- data-type={type}
230
- data-collapsible={collapsible}
231
- className={classNames('rt-SidebarRoot', 'rt-SidebarRoot--mobile', className)}
232
- >
233
- <Theme>
234
- <div
235
- className={classNames(
236
- 'rt-SidebarContainer',
237
- `rt-variant-${variant}`,
238
- `rt-r-size-${size}`,
239
- )}
240
- data-accent-color={resolvedColor}
241
- data-high-contrast={highContrast || undefined}
242
- data-side={side}
243
- data-type={type}
244
- data-collapsible={collapsible}
245
- data-panel-background={panelBackground}
246
- >
247
- {children}
248
- </div>
249
- </Theme>
250
- </div>
251
- );
252
- }
253
-
254
67
  return (
255
68
  <div
256
69
  {...safeRootProps}
257
70
  ref={forwardedRef}
258
71
  data-accent-color={resolvedColor}
259
- data-state={state}
260
- data-side={side}
261
- data-type={type}
262
- data-collapsible={collapsible}
263
72
  className={classNames('rt-SidebarRoot', className)}
264
73
  >
265
- <Theme>
74
+ <SidebarVisualContext.Provider value={{ size: resolvedSize, menuVariant }}>
266
75
  <div
267
76
  className={classNames(
268
77
  'rt-SidebarContainer',
269
78
  `rt-variant-${variant}`,
270
- `rt-r-size-${size}`,
79
+ `rt-r-size-${resolvedSize}`,
80
+ `rt-menu-variant-${menuVariant}`,
271
81
  )}
272
82
  data-accent-color={resolvedColor}
273
83
  data-high-contrast={highContrast || undefined}
274
- data-side={side}
275
- data-type={type}
276
- data-collapsible={collapsible}
277
84
  data-panel-background={panelBackground}
278
85
  >
279
86
  {children}
280
87
  </div>
281
- </Theme>
88
+ </SidebarVisualContext.Provider>
282
89
  </div>
283
90
  );
284
91
  });
@@ -286,33 +93,34 @@ Sidebar.displayName = 'Sidebar.Root';
286
93
 
287
94
  // Sidebar content area
288
95
  interface SidebarContentProps extends React.ComponentPropsWithoutRef<'div'> {
289
- /**
290
- * Accessible label for the navigation region.
291
- * @default "Main navigation"
292
- */
96
+ id?: string;
97
+ role?: 'navigation' | 'none';
293
98
  'aria-label'?: string;
294
99
  }
295
100
 
296
101
  const SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(
297
102
  (
298
- { className, children, 'aria-label': ariaLabel = 'Main navigation', ...props },
103
+ {
104
+ className,
105
+ children,
106
+ role = 'navigation',
107
+ 'aria-label': ariaLabel = 'Main navigation',
108
+ id,
109
+ ...props
110
+ },
299
111
  forwardedRef,
300
112
  ) => {
301
- const context = React.useContext(SidebarContext);
302
- const {
303
- size = '2',
304
- menuVariant = 'soft',
305
- type = 'sidebar',
306
- collapsible = 'none',
307
- } = context || {};
113
+ const visual = useSidebarVisual();
114
+ const size = visual?.size ?? '2';
115
+ const menuVariant = visual?.menuVariant ?? 'soft';
308
116
 
309
117
  return (
310
118
  <ScrollArea type="hover">
311
119
  <div
312
120
  {...props}
313
121
  ref={forwardedRef}
314
- id="sidebar-navigation"
315
- role="navigation"
122
+ id={id}
123
+ role={role}
316
124
  aria-label={ariaLabel}
317
125
  className={classNames(
318
126
  'rt-BaseMenuContent',
@@ -321,8 +129,6 @@ const SidebarContent = React.forwardRef<HTMLDivElement, SidebarContentProps>(
321
129
  `rt-menu-variant-${menuVariant}`,
322
130
  className,
323
131
  )}
324
- data-type={type}
325
- data-collapsible={collapsible}
326
132
  >
327
133
  {children}
328
134
  </div>
@@ -343,8 +149,9 @@ interface SidebarHeaderProps extends React.ComponentPropsWithoutRef<'div'> {
343
149
 
344
150
  const SidebarHeader = React.forwardRef<HTMLDivElement, SidebarHeaderProps>(
345
151
  ({ className, asContainer = true, ...props }, forwardedRef) => {
346
- const context = React.useContext(SidebarContext);
347
- const { size = '2', menuVariant = 'soft' } = context || {};
152
+ const visual = useSidebarVisual();
153
+ const size = visual?.size ?? '2';
154
+ const menuVariant = visual?.menuVariant ?? 'soft';
348
155
 
349
156
  return (
350
157
  <div
@@ -376,8 +183,9 @@ interface SidebarFooterProps extends React.ComponentPropsWithoutRef<'div'> {
376
183
 
377
184
  const SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(
378
185
  ({ className, asContainer = true, ...props }, forwardedRef) => {
379
- const context = React.useContext(SidebarContext);
380
- const { size = '2', menuVariant = 'soft' } = context || {};
186
+ const visual = useSidebarVisual();
187
+ const size = visual?.size ?? '2';
188
+ const menuVariant = visual?.menuVariant ?? 'soft';
381
189
 
382
190
  return (
383
191
  <div
@@ -399,31 +207,7 @@ const SidebarFooter = React.forwardRef<HTMLDivElement, SidebarFooterProps>(
399
207
  SidebarFooter.displayName = 'Sidebar.Footer';
400
208
 
401
209
  // Sidebar trigger button
402
- interface SidebarTriggerProps extends ComponentPropsWithout<typeof IconButton, RemovedProps> {}
403
-
404
- const SidebarTrigger = React.forwardRef<React.ElementRef<typeof IconButton>, SidebarTriggerProps>(
405
- ({ onClick, children, ...props }, forwardedRef) => {
406
- const { toggleSidebar, state } = useSidebar();
407
-
408
- return (
409
- <IconButton
410
- {...props}
411
- ref={forwardedRef}
412
- variant="ghost"
413
- aria-label={state === 'expanded' ? 'Collapse sidebar' : 'Expand sidebar'}
414
- aria-expanded={state === 'expanded'}
415
- aria-controls="sidebar-navigation"
416
- onClick={(event) => {
417
- onClick?.(event);
418
- toggleSidebar();
419
- }}
420
- >
421
- {children || <ChevronDownIcon />}
422
- </IconButton>
423
- );
424
- },
425
- );
426
- SidebarTrigger.displayName = 'Sidebar.Trigger';
210
+ // removed Trigger in presentational-only Sidebar
427
211
 
428
212
  // Removed SidebarInset - not needed
429
213
 
@@ -490,8 +274,8 @@ const SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonP
490
274
  forwardedRef,
491
275
  ) => {
492
276
  const [isHighlighted, setIsHighlighted] = React.useState(false);
493
- const context = React.useContext(SidebarContext);
494
- const { size: sidebarSize = '2' } = context || {};
277
+ const visual = useSidebarVisual();
278
+ const sidebarSize = visual?.size ?? '2';
495
279
 
496
280
  const Comp = asChild ? Slot : 'button';
497
281
 
@@ -733,12 +517,10 @@ SidebarGroupContent.displayName = 'Sidebar.GroupContent';
733
517
 
734
518
  // Export all components following shadcn's pattern
735
519
  export {
736
- SidebarProvider as Provider,
737
520
  Sidebar as Root,
738
521
  SidebarContent as Content,
739
522
  SidebarHeader as Header,
740
523
  SidebarFooter as Footer,
741
- SidebarTrigger as Trigger,
742
524
  SidebarSeparator as Separator,
743
525
  SidebarMenu as Menu,
744
526
  SidebarMenuItem as MenuItem,
@@ -749,8 +531,6 @@ export {
749
531
  SidebarGroup as Group,
750
532
  SidebarGroupLabel as GroupLabel,
751
533
  SidebarGroupContent as GroupContent,
752
- // Export hook
753
- useSidebar,
754
534
  };
755
535
 
756
536
  /**
@@ -807,11 +587,9 @@ export {
807
587
  */
808
588
 
809
589
  export type {
810
- SidebarProviderProps as ProviderProps,
811
590
  SidebarProps as RootProps,
812
591
  SidebarContentProps as ContentProps,
813
592
  SidebarHeaderProps as HeaderProps,
814
593
  SidebarFooterProps as FooterProps,
815
- SidebarTriggerProps as TriggerProps,
816
594
  BadgeConfig,
817
595
  };
@@ -21,7 +21,7 @@ const Skeleton = React.forwardRef<SkeletonElement, SkeletonProps>((props, forwar
21
21
  const { children, className, loading, ...skeletonProps } = extractProps(
22
22
  props,
23
23
  skeletonPropDefs,
24
- marginPropDefs
24
+ marginPropDefs,
25
25
  );
26
26
 
27
27
  if (!loading) return children;
@@ -35,7 +35,6 @@ const Skeleton = React.forwardRef<SkeletonElement, SkeletonProps>((props, forwar
35
35
  className={classNames('rt-Skeleton', className)}
36
36
  data-inline-skeleton={React.isValidElement(children) ? undefined : true}
37
37
  tabIndex={-1}
38
- // @ts-expect-error
39
38
  inert={inert}
40
39
  {...skeletonProps}
41
40
  >
@@ -49,6 +49,7 @@
49
49
  .rt-TextAreaInput {
50
50
  border-radius: inherit;
51
51
  resize: none;
52
+ min-width: 0; /* allow shrinking in flex/relative containers */
52
53
 
53
54
  display: block;
54
55
  width: 100%;
@@ -115,7 +116,7 @@
115
116
  .rt-TextAreaRoot {
116
117
  &:where(.rt-r-size-1) {
117
118
  min-height: var(--space-8);
118
- border-radius: var(--radius-3);
119
+ border-radius: var(--radius-1);
119
120
 
120
121
  & :where(.rt-TextAreaInput) {
121
122
  /* Clip text to border */
@@ -128,12 +129,12 @@
128
129
  }
129
130
  &:where(.rt-r-size-2) {
130
131
  min-height: var(--space-9);
131
- border-radius: var(--radius-4);
132
+ border-radius: var(--radius-2);
132
133
 
133
134
  & :where(.rt-TextAreaInput) {
134
135
  /* Clip text to border */
135
136
  --text-area-padding-y: calc(var(--space-2) - var(--text-area-border-width));
136
- --text-area-padding-x: calc(var(--space-3) - var(--text-area-border-width));
137
+ --text-area-padding-x: calc(var(--space-2) - var(--text-area-border-width));
137
138
  font-size: var(--font-size-2);
138
139
  line-height: var(--line-height-2);
139
140
  letter-spacing: var(--letter-spacing-2);
@@ -141,12 +142,12 @@
141
142
  }
142
143
  &:where(.rt-r-size-3) {
143
144
  min-height: 80px;
144
- border-radius: var(--radius-5);
145
+ border-radius: var(--radius-3);
145
146
 
146
147
  & :where(.rt-TextAreaInput) {
147
148
  /* Clip text to border */
148
149
  --text-area-padding-y: calc(var(--space-3) - var(--text-area-border-width));
149
- --text-area-padding-x: calc(var(--space-4) - var(--text-area-border-width));
150
+ --text-area-padding-x: calc(var(--space-3) - var(--text-area-border-width));
150
151
  font-size: var(--font-size-3);
151
152
  line-height: var(--line-height-3);
152
153
  letter-spacing: var(--letter-spacing-3);
@@ -6,8 +6,8 @@
6
6
 
7
7
  transform-origin: var(--radix-tooltip-content-transform-origin);
8
8
 
9
- animation-duration: var(--duration-2);
10
- animation-timing-function: var(--ease-3);
9
+ animation-duration: var(--motion-duration-small);
10
+ animation-timing-function: var(--motion-spring-snappy);
11
11
 
12
12
  @media (prefers-reduced-motion: no-preference) {
13
13
  &:where([data-state='delayed-open']) {
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
2
 
3
- // "inert" works differently between React versions
4
- // https://github.com/facebook/react/pull/24730
5
- export const inert = parseFloat(React.version) >= 19 || '';
3
+ // In React 19+, boolean attributes like inert are preserved; in earlier versions we omit it.
4
+ // Use: {...(hidden ? { inert } : {})}
5
+ export const inert: boolean | undefined = parseFloat(React.version) >= 19 ? true : undefined;
@@ -16,15 +16,15 @@
16
16
  --surface-opacity-dark: var(--opacity-7);
17
17
 
18
18
  /* Dialog background opacity constants (stronger than panel) */
19
- --dialog-opacity: var(--opacity-7);
19
+ --dialog-opacity: var(--opacity-9);
20
20
  --dialog-opacity-percentage: calc(var(--dialog-opacity) * 100%);
21
21
 
22
22
  /* Panel background opacity constants */
23
- --panel-opacity: var(--opacity-6);
23
+ --panel-opacity: var(--opacity-8);
24
24
  --panel-opacity-percentage: calc(var(--panel-opacity) * 100%);
25
25
 
26
26
  /* Surface background opacity constants */
27
- --surface-opacity: var(--opacity-5);
27
+ --surface-opacity: var(--opacity-7);
28
28
  --surface-opacity-percentage: calc(var(--surface-opacity) * 100%);
29
29
 
30
30
  /* Standard border width constants */
@@ -159,6 +159,9 @@
159
159
 
160
160
  /* Transition constants */
161
161
  --transition-background-blur: background-color var(--duration-2) var(--ease-1);
162
+
163
+ /* Sheet animation constants */
164
+ --sheet-slide-distance: 50%;
162
165
 
163
166
  /* Spacing multipliers for component sizing */
164
167
  --spacing-multiplier-small: 0.5;
@@ -35,3 +35,4 @@
35
35
  @import './base.css';
36
36
  @import './blur.css';
37
37
  @import './opacity.css';
38
+ @import './transition.css';
@@ -1,13 +1,18 @@
1
1
  [data-radius] {
2
+ /* */
2
3
  --radius-1: calc(6px * var(--scaling) * var(--radius-factor));
3
4
  --radius-2: calc(8px * var(--scaling) * var(--radius-factor));
4
5
  --radius-3: calc(10px * var(--scaling) * var(--radius-factor));
5
6
  --radius-4: calc(12px * var(--scaling) * var(--radius-factor));
7
+
8
+ /* */
6
9
  --radius-5: calc(16px * var(--scaling) * var(--radius-factor));
7
10
  --radius-6: calc(20px * var(--scaling) * var(--radius-factor));
8
11
  --radius-7: calc(24px * var(--scaling) * var(--radius-factor));
9
- --radius-8: calc(32px * var(--scaling) * var(--radius-factor));
10
- --radius-9: calc(40px * var(--scaling) * var(--radius-factor));
12
+ --radius-8: calc(28px * var(--scaling) * var(--radius-factor));
13
+
14
+ /* */
15
+ --radius-9: calc(32px * var(--scaling) * var(--radius-factor));
11
16
  }
12
17
 
13
18
 
@@ -1,11 +1,17 @@
1
1
  .radix-themes {
2
+
3
+ /* */
2
4
  --space-1: calc(4px * var(--scaling));
3
5
  --space-2: calc(8px * var(--scaling));
4
6
  --space-3: calc(12px * var(--scaling));
5
7
  --space-4: calc(16px * var(--scaling));
8
+
9
+ /* */
6
10
  --space-5: calc(24px * var(--scaling));
7
11
  --space-6: calc(32px * var(--scaling));
8
12
  --space-7: calc(40px * var(--scaling));
9
13
  --space-8: calc(48px * var(--scaling));
14
+
15
+ /* */
10
16
  --space-9: calc(64px * var(--scaling));
11
17
  }