reshaped 3.7.0-canary.9 → 3.7.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 (214) hide show
  1. package/CHANGELOG.md +36 -1
  2. package/dist/bundle.css +1 -1
  3. package/dist/bundle.d.ts +1 -2
  4. package/dist/bundle.js +11 -11
  5. package/dist/cjs/themes/_generator/tokens/color/utilities/generateColors.js +1 -1
  6. package/dist/cjs/themes/_generator/tokens/css.js +2 -2
  7. package/dist/cjs/themes/figma/theme.css +1 -1
  8. package/dist/cjs/themes/fragments/twitter/theme.css +1 -1
  9. package/dist/cjs/themes/reshaped/theme.css +1 -1
  10. package/dist/cjs/themes/slate/theme.css +1 -1
  11. package/dist/components/Accordion/Accordion.types.d.ts +2 -0
  12. package/dist/components/ActionBar/ActionBar.js +12 -4
  13. package/dist/components/ActionBar/ActionBar.module.css +1 -1
  14. package/dist/components/ActionBar/ActionBar.types.d.ts +4 -1
  15. package/dist/components/ActionBar/tests/ActionBar.stories.d.ts +19 -1
  16. package/dist/components/ActionBar/tests/ActionBar.stories.js +161 -3
  17. package/dist/components/Actionable/Actionable.js +3 -3
  18. package/dist/components/Actionable/Actionable.module.css +1 -1
  19. package/dist/components/Actionable/Actionable.types.d.ts +1 -0
  20. package/dist/components/Autocomplete/Autocomplete.js +66 -25
  21. package/dist/components/Autocomplete/Autocomplete.types.d.ts +2 -0
  22. package/dist/components/Autocomplete/tests/Autocomplete.stories.js +8 -8
  23. package/dist/components/Avatar/Avatar.js +4 -4
  24. package/dist/components/Badge/Badge.js +3 -3
  25. package/dist/components/Badge/Badge.module.css +1 -1
  26. package/dist/components/Badge/Badge.types.d.ts +4 -4
  27. package/dist/components/Badge/tests/Badge.stories.js +11 -0
  28. package/dist/components/Button/Button.module.css +1 -1
  29. package/dist/components/Calendar/Calendar.types.d.ts +1 -0
  30. package/dist/components/Calendar/Calendar.utils.d.ts +11 -0
  31. package/dist/components/Calendar/Calendar.utils.js +25 -0
  32. package/dist/components/Calendar/CalendarDate.js +6 -2
  33. package/dist/components/Calendar/CalendarMonth.js +9 -23
  34. package/dist/components/Calendar/tests/Calendar.stories.js +9 -2
  35. package/dist/components/Card/Card.d.ts +1 -1
  36. package/dist/components/Card/Card.js +9 -12
  37. package/dist/components/Card/Card.module.css +1 -1
  38. package/dist/components/Card/tests/Card.stories.d.ts +1 -1
  39. package/dist/components/Card/tests/Card.test.stories.d.ts +1 -1
  40. package/dist/components/Carousel/Carousel.js +3 -1
  41. package/dist/components/Carousel/Carousel.types.d.ts +1 -0
  42. package/dist/components/Carousel/CarouselControl.d.ts +1 -2
  43. package/dist/components/Carousel/CarouselControl.js +8 -7
  44. package/dist/components/Checkbox/Checkbox.module.css +1 -1
  45. package/dist/components/DropdownMenu/DropdownMenu.js +9 -6
  46. package/dist/components/FileUpload/FileUpload.js +5 -3
  47. package/dist/components/FileUpload/FileUpload.module.css +1 -1
  48. package/dist/components/FileUpload/FileUpload.types.d.ts +5 -1
  49. package/dist/components/FileUpload/tests/FileUpload.stories.d.ts +18 -2
  50. package/dist/components/FileUpload/tests/FileUpload.stories.js +102 -23
  51. package/dist/components/Flyout/Flyout.module.css +1 -1
  52. package/dist/components/Flyout/Flyout.types.d.ts +2 -1
  53. package/dist/components/Flyout/FlyoutContent.js +3 -3
  54. package/dist/components/Flyout/FlyoutControlled.js +7 -3
  55. package/dist/components/Flyout/FlyoutTrigger.js +4 -3
  56. package/dist/components/FormControl/FormControl.module.css +1 -1
  57. package/dist/components/FormControl/tests/FormControl.stories.d.ts +4 -0
  58. package/dist/components/FormControl/tests/FormControl.stories.js +18 -0
  59. package/dist/components/Grid/Grid.js +5 -11
  60. package/dist/components/Grid/Grid.types.d.ts +2 -0
  61. package/dist/components/Grid/tests/Grid.stories.js +12 -1
  62. package/dist/components/HiddenVisually/HiddenVisually.module.css +1 -1
  63. package/dist/components/Icon/Icon.js +4 -4
  64. package/dist/components/Image/Image.js +4 -15
  65. package/dist/components/MenuItem/MenuItem.js +2 -2
  66. package/dist/components/MenuItem/MenuItem.module.css +1 -1
  67. package/dist/components/MenuItem/MenuItem.types.d.ts +1 -0
  68. package/dist/components/Modal/Modal.js +4 -4
  69. package/dist/components/Modal/Modal.module.css +1 -1
  70. package/dist/components/Modal/tests/Modal.test.stories.js +2 -2
  71. package/dist/components/Overlay/tests/Overlay.test.stories.js +4 -2
  72. package/dist/components/PinField/PinField.module.css +1 -1
  73. package/dist/components/Popover/Popover.js +5 -5
  74. package/dist/components/Popover/Popover.module.css +1 -1
  75. package/dist/components/Popover/Popover.types.d.ts +1 -1
  76. package/dist/components/Popover/tests/Popover.stories.d.ts +1 -0
  77. package/dist/components/Popover/tests/Popover.stories.js +24 -4
  78. package/dist/components/ProgressIndicator/ProgressIndicator.module.css +1 -1
  79. package/dist/components/Reshaped/Reshaped.css +1 -1
  80. package/dist/components/Resizable/Resizable.module.css +1 -1
  81. package/dist/components/ScrollArea/ScrollArea.js +5 -7
  82. package/dist/components/ScrollArea/ScrollArea.module.css +1 -1
  83. package/dist/components/Select/Select.module.css +1 -1
  84. package/dist/components/Slider/Slider.module.css +1 -1
  85. package/dist/components/Switch/Switch.js +1 -1
  86. package/dist/components/Switch/Switch.module.css +1 -1
  87. package/dist/components/Table/Table.js +4 -7
  88. package/dist/components/Tabs/TabsItem.js +2 -1
  89. package/dist/components/Tabs/TabsList.js +2 -2
  90. package/dist/components/Text/Text.js +4 -4
  91. package/dist/components/TextField/TextField.module.css +1 -1
  92. package/dist/components/TextField/tests/TextField.stories.js +3 -1
  93. package/dist/components/Theme/Theme.js +7 -2
  94. package/dist/components/Theme/Theme.types.d.ts +12 -13
  95. package/dist/components/Theme/index.d.ts +1 -1
  96. package/dist/components/Theme/tests/{Theme.test.stories.d.ts → Theme.stories.d.ts} +1 -0
  97. package/dist/components/Theme/tests/{Theme.test.stories.js → Theme.stories.js} +39 -1
  98. package/dist/components/Theme/useTheme.d.ts +6 -6
  99. package/dist/components/View/View.js +43 -60
  100. package/dist/components/View/View.module.css +1 -1
  101. package/dist/components/View/View.types.d.ts +7 -0
  102. package/dist/components/View/tests/View.stories.d.ts +4 -0
  103. package/dist/components/View/tests/View.stories.js +65 -1
  104. package/dist/components/_private/Portal/Portal.js +9 -1
  105. package/dist/config/tailwind.d.ts +1 -1
  106. package/dist/hooks/_private/useIsDismissible.js +11 -8
  107. package/dist/index.d.ts +1 -2
  108. package/dist/styles/mixin.d.ts +6 -0
  109. package/dist/styles/mixin.js +71 -0
  110. package/dist/styles/resolvers/align/align.css +1 -0
  111. package/dist/styles/resolvers/align/index.d.ts +4 -0
  112. package/dist/styles/resolvers/align/index.js +10 -0
  113. package/dist/styles/resolvers/aspectRatio/aspectRatio.css +1 -0
  114. package/dist/styles/resolvers/aspectRatio/index.d.ts +4 -0
  115. package/dist/styles/resolvers/aspectRatio/index.js +10 -0
  116. package/dist/styles/resolvers/bleed/bleed.module.css +1 -0
  117. package/dist/styles/resolvers/bleed/index.d.ts +3 -0
  118. package/dist/styles/{bleed → resolvers/bleed}/index.js +4 -4
  119. package/dist/styles/resolvers/border/border.module.css +1 -0
  120. package/dist/styles/resolvers/border/borderWidth.css +1 -0
  121. package/dist/styles/resolvers/border/index.d.ts +11 -0
  122. package/dist/styles/resolvers/border/index.js +74 -0
  123. package/dist/styles/resolvers/height/index.d.ts +3 -0
  124. package/dist/styles/{height → resolvers/height}/index.js +4 -4
  125. package/dist/styles/resolvers/inset/index.d.ts +10 -0
  126. package/dist/styles/resolvers/inset/index.js +38 -0
  127. package/dist/styles/resolvers/inset/inset.css +1 -0
  128. package/dist/styles/resolvers/justify/index.d.ts +4 -0
  129. package/dist/styles/resolvers/justify/index.js +10 -0
  130. package/dist/styles/resolvers/justify/justify.css +1 -0
  131. package/dist/styles/resolvers/margin/index.d.ts +10 -0
  132. package/dist/styles/resolvers/margin/index.js +38 -0
  133. package/dist/styles/resolvers/margin/margin.css +1 -0
  134. package/dist/styles/resolvers/maxHeight/index.d.ts +3 -0
  135. package/dist/styles/{maxHeight → resolvers/maxHeight}/index.js +4 -4
  136. package/dist/styles/resolvers/maxHeight/maxHeight.module.css +1 -0
  137. package/dist/styles/resolvers/maxWidth/index.d.ts +3 -0
  138. package/dist/styles/{maxWidth → resolvers/maxWidth}/index.js +4 -4
  139. package/dist/styles/resolvers/maxWidth/maxWidth.module.css +1 -0
  140. package/dist/styles/resolvers/minHeight/index.d.ts +3 -0
  141. package/dist/styles/{minHeight → resolvers/minHeight}/index.js +4 -4
  142. package/dist/styles/resolvers/minHeight/minHeight.module.css +1 -0
  143. package/dist/styles/resolvers/minWidth/index.d.ts +3 -0
  144. package/dist/styles/{minWidth → resolvers/minWidth}/index.js +4 -4
  145. package/dist/styles/resolvers/minWidth/minWidth.module.css +1 -0
  146. package/dist/styles/resolvers/padding/index.d.ts +10 -0
  147. package/dist/styles/resolvers/padding/index.js +38 -0
  148. package/dist/styles/resolvers/padding/padding.css +1 -0
  149. package/dist/styles/resolvers/position/index.d.ts +4 -0
  150. package/dist/styles/resolvers/position/index.js +9 -0
  151. package/dist/styles/resolvers/position/position.css +1 -0
  152. package/dist/styles/resolvers/radius/index.d.ts +3 -0
  153. package/dist/styles/resolvers/radius/index.js +10 -0
  154. package/dist/styles/resolvers/textAlign/index.d.ts +4 -0
  155. package/dist/styles/resolvers/textAlign/index.js +10 -0
  156. package/dist/styles/resolvers/textAlign/textAlign.css +1 -0
  157. package/dist/styles/resolvers/width/index.d.ts +3 -0
  158. package/dist/styles/{width → resolvers/width}/index.js +4 -4
  159. package/dist/styles/resolvers/width/width.module.css +1 -0
  160. package/dist/styles/types.d.ts +63 -16
  161. package/dist/themes/_generator/tokens/color/utilities/generateColors.js +1 -1
  162. package/dist/themes/_generator/tokens/css.js +2 -2
  163. package/dist/themes/figma/theme.css +1 -1
  164. package/dist/themes/fragments/twitter/theme.css +1 -1
  165. package/dist/themes/reshaped/theme.css +1 -1
  166. package/dist/themes/slate/theme.css +1 -1
  167. package/dist/types/global.d.ts +5 -0
  168. package/dist/utilities/a11y/tests/TrapFocus.stories.js +4 -4
  169. package/package.json +24 -24
  170. package/dist/components/ActionBar/tests/ActionBar.test.stories.d.ts +0 -15
  171. package/dist/components/ActionBar/tests/ActionBar.test.stories.js +0 -26
  172. package/dist/components/FileUpload/tests/FileUpload.test.stories.d.ts +0 -21
  173. package/dist/components/FileUpload/tests/FileUpload.test.stories.js +0 -52
  174. package/dist/styles/align/align.css +0 -1
  175. package/dist/styles/align/index.d.ts +0 -4
  176. package/dist/styles/align/index.js +0 -10
  177. package/dist/styles/aspectRatio/aspectRatio.css +0 -1
  178. package/dist/styles/aspectRatio/index.d.ts +0 -4
  179. package/dist/styles/aspectRatio/index.js +0 -9
  180. package/dist/styles/bleed/bleed.module.css +0 -1
  181. package/dist/styles/bleed/index.d.ts +0 -3
  182. package/dist/styles/border/border.module.css +0 -1
  183. package/dist/styles/border/index.d.ts +0 -3
  184. package/dist/styles/border/index.js +0 -10
  185. package/dist/styles/height/index.d.ts +0 -3
  186. package/dist/styles/inset/index.d.ts +0 -5
  187. package/dist/styles/inset/index.js +0 -11
  188. package/dist/styles/inset/inset.css +0 -1
  189. package/dist/styles/justify/index.d.ts +0 -4
  190. package/dist/styles/justify/index.js +0 -10
  191. package/dist/styles/justify/justify.css +0 -1
  192. package/dist/styles/maxHeight/index.d.ts +0 -3
  193. package/dist/styles/maxHeight/maxHeight.module.css +0 -1
  194. package/dist/styles/maxWidth/index.d.ts +0 -3
  195. package/dist/styles/maxWidth/maxWidth.module.css +0 -1
  196. package/dist/styles/minHeight/index.d.ts +0 -3
  197. package/dist/styles/minHeight/minHeight.module.css +0 -1
  198. package/dist/styles/minWidth/index.d.ts +0 -3
  199. package/dist/styles/minWidth/minWidth.module.css +0 -1
  200. package/dist/styles/padding/index.d.ts +0 -4
  201. package/dist/styles/padding/index.js +0 -9
  202. package/dist/styles/padding/padding.css +0 -1
  203. package/dist/styles/position/index.d.ts +0 -4
  204. package/dist/styles/position/index.js +0 -9
  205. package/dist/styles/position/position.css +0 -1
  206. package/dist/styles/radius/index.d.ts +0 -3
  207. package/dist/styles/radius/index.js +0 -10
  208. package/dist/styles/textAlign/index.d.ts +0 -4
  209. package/dist/styles/textAlign/index.js +0 -10
  210. package/dist/styles/textAlign/textAlign.css +0 -1
  211. package/dist/styles/width/index.d.ts +0 -3
  212. package/dist/styles/width/width.module.css +0 -1
  213. /package/dist/styles/{height → resolvers/height}/height.module.css +0 -0
  214. /package/dist/styles/{radius → resolvers/radius}/radius.module.css +0 -0
@@ -15,7 +15,7 @@ import cooldown from "./utilities/cooldown.js";
15
15
  import { Provider, useFlyoutTriggerContext, useFlyoutContext, useFlyoutContentContext, } from "./Flyout.context.js";
16
16
  import useHandlerRef from "../../hooks/useHandlerRef.js";
17
17
  const FlyoutControlled = (props) => {
18
- const { triggerType = "click", groupTimeouts, onOpen, onClose, children, disabled, forcePosition, trapFocusMode = "dialog", width, disableHideAnimation, disableContentHover, disableCloseOnOutsideClick, originCoordinates, contentGap = 2, contentShift, contentClassName, contentAttributes, position: passedPosition, active: passedActive, id: passedId, instanceRef, containerRef, initialFocusRef, } = props;
18
+ const { triggerType = "click", groupTimeouts, onOpen, onClose, children, disabled, forcePosition, trapFocusMode = "dialog", width, disableHideAnimation, disableContentHover, disableCloseOnOutsideClick, autoFocus = true, originCoordinates, contentGap = 2, contentShift, contentClassName, contentAttributes, position: passedPosition, active: passedActive, id: passedId, instanceRef, containerRef, initialFocusRef, } = props;
19
19
  const fallbackPositions = props.fallbackPositions === false || forcePosition ? [] : props.fallbackPositions;
20
20
  const onOpenRef = useHandlerRef(onOpen);
21
21
  const onCloseRef = useHandlerRef(onClose);
@@ -233,16 +233,19 @@ const FlyoutControlled = (props) => {
233
233
  return;
234
234
  if (trapFocusMode === false)
235
235
  return;
236
+ const initialFocusEl = (!autoFocus
237
+ ? flyoutElRef.current.querySelector("[role][tabindex='-1']")
238
+ : initialFocusRef?.current);
236
239
  trapFocusRef.current = new TrapFocus();
237
240
  trapFocusRef.current.trap(flyoutElRef.current, {
238
241
  mode: trapFocusMode,
239
- initialFocusEl: initialFocusRef?.current,
242
+ initialFocusEl,
240
243
  includeTrigger: triggerType === "hover" && trapFocusMode !== "dialog" && !isSubmenu,
241
244
  onRelease: () => {
242
245
  handleClose({});
243
246
  },
244
247
  });
245
- }, [status, triggerType, trapFocusMode]);
248
+ }, [status, triggerType, trapFocusMode, autoFocus]);
246
249
  React.useEffect(() => {
247
250
  if (!disableHideAnimation && status !== "hidden")
248
251
  return;
@@ -323,6 +326,7 @@ const FlyoutControlled = (props) => {
323
326
  contentAttributes,
324
327
  containerRef,
325
328
  disableContentHover,
329
+ autoFocus,
326
330
  isSubmenu,
327
331
  }, children: children }));
328
332
  };
@@ -4,6 +4,7 @@ import { useFlyoutContext, TriggerProvider } from "./Flyout.context.js";
4
4
  const FlyoutTrigger = (props) => {
5
5
  const { children } = props;
6
6
  const { id, triggerElRef, triggerType, flyout, handleFocus, handleBlur, handleMouseEnter, handleMouseLeave, handleMouseDown, handleTouchStart, handleClick, trapFocusMode, isSubmenu, } = useFlyoutContext();
7
+ const active = flyout.status !== "idle";
7
8
  const childrenAttributes = {
8
9
  ref: triggerElRef,
9
10
  };
@@ -20,7 +21,7 @@ const FlyoutTrigger = (props) => {
20
21
  if ((triggerType === "hover" && !isSubmenu) || triggerType === "focus") {
21
22
  childrenAttributes.onFocus = handleFocus;
22
23
  childrenAttributes.onBlur = handleBlur;
23
- childrenAttributes["aria-describedby"] = id;
24
+ childrenAttributes["aria-describedby"] = active ? id : undefined;
24
25
  }
25
26
  if (triggerType === "click" || triggerType === "focus" || trapFocusMode === "action-menu") {
26
27
  if (trapFocusMode === "dialog") {
@@ -33,8 +34,8 @@ const FlyoutTrigger = (props) => {
33
34
  else {
34
35
  childrenAttributes["aria-haspopup"] = "menu";
35
36
  }
36
- childrenAttributes["aria-expanded"] = flyout.status !== "idle";
37
- childrenAttributes["aria-controls"] = flyout.status !== "idle" ? id : undefined;
37
+ childrenAttributes["aria-expanded"] = active;
38
+ childrenAttributes["aria-controls"] = active ? id : undefined;
38
39
  }
39
40
  return (_jsx(TriggerProvider, { value: { elRef: triggerElRef }, children: children(childrenAttributes) }));
40
41
  };
@@ -1 +1 @@
1
- .root{border:none}.label{display:block;margin-bottom:var(--rs-unit-x1)}.caption{display:block;margin-top:var(--rs-unit-x1)}.caption+.caption{margin-top:0}
1
+ .root{border:none}.label{display:block;margin-bottom:var(--rs-unit-x1)}.label:last-child{margin-bottom:0}.caption{display:block;margin-top:var(--rs-unit-x1)}.caption+.caption{margin-top:0}
@@ -23,3 +23,7 @@ export declare const required: {
23
23
  name: string;
24
24
  render: () => import("react").JSX.Element;
25
25
  };
26
+ export declare const composition: {
27
+ name: string;
28
+ render: () => import("react").JSX.Element;
29
+ };
@@ -2,6 +2,7 @@ import { expect } from "storybook/test";
2
2
  import { Example } from "../../../utilities/storybook/index.js";
3
3
  import FormControl from "../index.js";
4
4
  import TextField from "../../TextField/index.js";
5
+ import View from "../../View/index.js";
5
6
  export default {
6
7
  title: "Utility components/FormControl",
7
8
  component: FormControl,
@@ -88,3 +89,20 @@ export const required = {
88
89
  </Example.Item>
89
90
  </Example>),
90
91
  };
92
+ export const composition = {
93
+ name: "test: composition",
94
+ render: () => (<Example>
95
+ <Example.Item title="horizontal">
96
+ <FormControl>
97
+ <View direction="row" gap={10} align="center">
98
+ <View width="100px">
99
+ <FormControl.Label>Label</FormControl.Label>
100
+ </View>
101
+ <View.Item grow>
102
+ <TextField name="name" placeholder="Enter value"/>
103
+ </View.Item>
104
+ </View>
105
+ </FormControl>
106
+ </Example.Item>
107
+ </Example>),
108
+ };
@@ -1,8 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { classNames, responsiveVariables, responsivePropDependency } from "../../utilities/props.js";
3
- import getAlignStyles from "../../styles/align/index.js";
4
- import getJustifyStyles from "../../styles/justify/index.js";
5
- import getMaxWidthStyles from "../../styles/maxWidth/index.js";
3
+ import { resolveMixin } from "../../styles/mixin.js";
6
4
  import s from "./Grid.module.css";
7
5
  const GridItem = (props) => {
8
6
  const { area, colStart, colEnd, colSpan, rowStart, rowEnd, rowSpan, children, className,
@@ -26,20 +24,18 @@ const GridItem = (props) => {
26
24
  return (_jsx(TagName, { ...attributes, className: itemClassNames, style: rootVariables, children: children }));
27
25
  };
28
26
  const Grid = (props) => {
29
- const { areas, columns, rows, gap, align, justify, autoColumns, autoRows, autoFlow, children, className, maxWidth,
27
+ const { areas, columns, rows, gap, align, justify, autoColumns, autoRows, autoFlow, children, className, width, height, maxWidth,
30
28
  // Using any here to let TS save on type resolving, otherwise TS throws an error due to the type complexity
31
29
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
30
  as: TagName = "div", attributes, } = props;
33
- const alignStyles = getAlignStyles(align);
34
- const justifyStyles = getJustifyStyles(justify);
35
- const maxWidthStyles = getMaxWidthStyles(maxWidth);
31
+ const mixinStyles = resolveMixin({ align, justify, width, height, maxWidth });
36
32
  const resolvedRows = responsivePropDependency(rows, (value) => typeof value === "number" ? `repeat(${value}, 1fr)` : value);
37
33
  const resolvedColumns = responsivePropDependency(columns, (value) => typeof value === "number" ? `repeat(${value}, 1fr)` : value);
38
34
  const resolvedAreas = responsivePropDependency(areas, (value) => value
39
35
  ? `"${value?.join('" "')}"
40
36
  `
41
37
  : undefined);
42
- const rootClassNames = classNames(s.root, maxWidthStyles?.classNames, className);
38
+ const rootClassNames = classNames(s.root, mixinStyles.classNames, className);
43
39
  const rootVariables = {
44
40
  ...attributes?.style,
45
41
  ...responsiveVariables("--rs-grid-gap", gap),
@@ -49,9 +45,7 @@ const Grid = (props) => {
49
45
  ...responsiveVariables("--rs-grid-auto-flow", autoFlow),
50
46
  ...responsiveVariables("--rs-grid-auto-columns", autoColumns),
51
47
  ...responsiveVariables("--rs-grid-auto-rows", autoRows),
52
- ...alignStyles?.variables,
53
- ...justifyStyles?.variables,
54
- ...maxWidthStyles?.variables,
48
+ ...mixinStyles.variables,
55
49
  };
56
50
  return (_jsx(TagName, { ...attributes, className: rootClassNames, style: rootVariables, children: children }));
57
51
  };
@@ -13,6 +13,8 @@ export type Props<TagName extends keyof React.JSX.IntrinsicElements = "div"> = {
13
13
  autoColumns?: G.Responsive<Property.GridAutoColumns>;
14
14
  autoRows?: G.Responsive<Property.GridAutoRows>;
15
15
  maxWidth?: G.Responsive<string | number>;
16
+ width?: G.Responsive<string | number>;
17
+ height?: G.Responsive<string | number>;
16
18
  children?: React.ReactNode;
17
19
  as?: TagName;
18
20
  className?: G.ClassName;
@@ -11,7 +11,7 @@ export default {
11
11
  },
12
12
  };
13
13
  export const base = {
14
- name: "gap, align, justify, maxWidth",
14
+ name: "gap, align, justify, maxWidth, width, height",
15
15
  render: () => (<Example>
16
16
  <Example.Item title="gap: 2">
17
17
  <Grid gap={2} columns={2}>
@@ -51,6 +51,17 @@ export const base = {
51
51
  </View>
52
52
  </Grid>
53
53
  </Example.Item>
54
+
55
+ <Example.Item title="width: 400px, height: 200px">
56
+ <Grid gap={2} columns={2} width="400px" height="200px">
57
+ <View backgroundColor="neutral-faded" borderRadius="medium" padding={4}>
58
+ 1
59
+ </View>
60
+ <View backgroundColor="neutral-faded" borderRadius="medium" padding={4}>
61
+ 2
62
+ </View>
63
+ </Grid>
64
+ </Example.Item>
54
65
  </Example>),
55
66
  };
56
67
  export const layout = {
@@ -1 +1 @@
1
- .root{height:1px;width:1px;clip:rect(1px,1px,1px,1px);overflow:hidden;position:absolute;white-space:nowrap}
1
+ .root{clip-path:inset(1px);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}
@@ -1,14 +1,14 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import React from "react";
3
3
  import { classNames } from "../../utilities/props.js";
4
- import getHeightStyles from "../../styles/height/index.js";
4
+ import { resolveMixin } from "../../styles/mixin.js";
5
5
  import s from "./Icon.module.css";
6
6
  const Icon = (props) => {
7
7
  const { svg: Component, className, color, size = "1em", autoWidth, attributes } = props;
8
- const heightStyles = getHeightStyles(size);
9
- const rootClassName = classNames(s.root, className, heightStyles?.classNames, color && s[`--color-${color}`], autoWidth && s["--auto"]);
8
+ const mixinStyles = resolveMixin({ height: size });
9
+ const rootClassName = classNames(s.root, className, mixinStyles.classNames, color && s[`--color-${color}`], autoWidth && s["--auto"]);
10
10
  const icon = React.isValidElement(Component) ? Component : _jsx(Component, {});
11
- const style = { ...attributes?.style, ...heightStyles?.variables };
11
+ const style = { ...attributes?.style, ...mixinStyles.variables };
12
12
  return (
13
13
  // All icons are decorative, a11y attributes should be set for buttons wrapping them
14
14
  _jsx("span", { ...attributes, "aria-hidden": "true", className: rootClassName, style: style, children: React.cloneElement(icon, { focusable: false }) }));
@@ -2,30 +2,19 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import React from "react";
4
4
  import { classNames } from "../../utilities/props.js";
5
+ import { resolveMixin } from "../../styles/mixin.js";
5
6
  import s from "./Image.module.css";
6
- import getRadiusStyles from "../../styles/radius/index.js";
7
- import getWidthStyles from "../../styles/width/index.js";
8
- import getHeightStyles from "../../styles/height/index.js";
9
- import getAspectRatioStyles from "../../styles/aspectRatio/index.js";
10
- import getMaxWidthStyles from "../../styles/maxWidth/index.js";
11
7
  const Image = (props) => {
12
8
  const { src, alt, width, maxWidth, height, aspectRatio, onLoad, onError, fallback, displayMode = "cover", borderRadius, className, attributes, imageAttributes: passedImageAttributes, renderImage, } = props;
13
9
  const [status, setStatus] = React.useState("loading");
14
- const radiusStyles = getRadiusStyles(borderRadius);
15
- const widthStyles = getWidthStyles(width);
16
- const heightStyles = getHeightStyles(height);
17
- const maxWidthStyles = getMaxWidthStyles(maxWidth);
18
- const aspectRatioStyles = getAspectRatioStyles(aspectRatio);
19
- const baseClassNames = classNames(s.root, radiusStyles?.classNames, widthStyles?.classNames, heightStyles?.classNames, maxWidthStyles?.classNames, displayMode && s[`--display-mode-${displayMode}`], className);
10
+ const mixinStyles = resolveMixin({ radius: borderRadius, width, height, maxWidth, aspectRatio });
11
+ const baseClassNames = classNames(s.root, mixinStyles.classNames, displayMode && s[`--display-mode-${displayMode}`], className);
20
12
  const imgClassNames = classNames(s.image, baseClassNames);
21
13
  const fallbackClassNames = classNames(s.fallback, baseClassNames);
22
14
  const isFallback = (status === "error" || !src) && !!fallback;
23
15
  const style = {
24
16
  ...attributes?.style,
25
- ...widthStyles?.variables,
26
- ...heightStyles?.variables,
27
- ...maxWidthStyles?.variables,
28
- ...aspectRatioStyles?.variables,
17
+ ...mixinStyles.variables,
29
18
  };
30
19
  const handleLoad = (e) => {
31
20
  setStatus("success");
@@ -7,8 +7,8 @@ import View from "../View/index.js";
7
7
  import MenuItemAligner from "./MenuItemAligner.js";
8
8
  import s from "./MenuItem.module.css";
9
9
  const MenuItem = forwardRef((props, ref) => {
10
- const { icon, startSlot, endSlot, children, color = "primary", selected, disabled, onClick, href, size = "medium", roundedCorners, stopPropagation, as, className, attributes, } = props;
11
- const rootClassNames = classNames(s.root, className, responsiveClassNames(s, "--size", size), responsiveClassNames(s, "--rounded-corners", roundedCorners), color && s[`--color-${color}`], selected && s["--selected"], disabled && s["--disabled"]);
10
+ const { icon, startSlot, endSlot, children, color = "primary", selected, highlighted, disabled, onClick, href, size = "medium", roundedCorners, stopPropagation, as, className, attributes, } = props;
11
+ const rootClassNames = classNames(s.root, className, responsiveClassNames(s, "--size", size), responsiveClassNames(s, "--rounded-corners", roundedCorners), color && s[`--color-${color}`], selected && s["--selected"], disabled && s["--disabled"], highlighted && s["--highlighted"]);
12
12
  const gapSize = responsivePropDependency(size, (size) => (size === "large" ? 3 : 2));
13
13
  const iconSize = responsivePropDependency(size, (size) => (size === "large" ? 5 : 4));
14
14
  return (_jsx(Actionable, { disabled: disabled, className: rootClassNames, attributes: { ...attributes, "data-rs-aligner-target": true }, onClick: onClick, href: href, ref: ref, as: as, stopPropagation: stopPropagation, children: _jsxs(View, { direction: "row", gap: gapSize, align: "center", children: [icon && _jsx(Icon, { svg: icon, className: s.icon, size: iconSize }), !icon && startSlot, children && (_jsx(View.Item, { grow: true, className: s.content, children: children })), endSlot] }) }));
@@ -1 +1 @@
1
- .root,button.root{background-color:var(--rs-menu-item-bg-color);color:var(--rs-menu-item-color);display:block;font-family:var(--rs-font-family-body);font-weight:var(--rs-font-weight-medium);padding:var(--rs-p-v) var(--rs-p-h);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:background-color,transform,box-shadow}.icon{color:var(--rs-menu-item-icon-color,inherit)}.content,.icon{transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:color}.--rounded-corners{border-radius:var(--rs-menu-item-radius)}.--size-small{--rs-p-v:var(--rs-unit-x1);--rs-p-h:var(--rs-unit-x2);--rs-menu-item-radius:var(--rs-radius-small)}.--size-medium,.--size-small{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-medium{--rs-p-v:var(--rs-unit-x2);--rs-p-h:var(--rs-unit-x3);--rs-menu-item-radius:var(--rs-radius-small)}.--size-large{--rs-p-v:var(--rs-unit-x3);--rs-p-h:var(--rs-unit-x4);--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}.--color-neutral{--rs-menu-item-icon-color:var(--rs-color-foreground-neutral-faded)}.--color-neutral.--selected,.--color-neutral[data-rs-focus]{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-neutral),32%)}@media (hover:hover) and (pointer:fine){.--color-neutral:hover{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-neutral),32%)}}.--color-critical{--rs-menu-item-color:var(--rs-color-foreground-critical)}.--color-critical.--selected,.--color-critical[data-rs-focus]{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-critical),12%)}@media (hover:hover) and (pointer:fine){.--color-critical:hover{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-critical),12%)}}.--color-primary{--rs-menu-item-icon-color:var(--rs-color-foreground-neutral-faded)}.--color-primary[data-rs-focus]{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-neutral),32%)}@media (hover:hover) and (pointer:fine){.--color-primary:hover{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-neutral),32%)}}.--color-primary.--selected,.--color-primary.--selected:hover{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-primary),12%);--rs-menu-item-color:var(--rs-color-foreground-primary);--rs-menu-item-icon-color:var(--rs-color-foreground-primary)}.--selected,.--selected:hover{cursor:default}.--disabled,.--disabled:hover{--rs-menu-item-color:var(--rs-color-foreground-disabled);--rs-menu-item-bg-color:none;--rs-menu-item-icon-color:var(--rs-color-foreground-disabled)}button.root{width:100%}.aligner button.root{box-sizing:initial}@media (--rs-viewport-m ){.--rounded-corners-true--m{border-radius:var(--rs-menu-item-radius)}.--rounded-corners-false--m{border-radius:0}.--size-small--m{--rs-p-v:var(--rs-unit-x1);--rs-p-h:var(--rs-unit-x2);--rs-menu-item-radius:var(--rs-radius-small)}.--size-medium--m,.--size-small--m{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-medium--m{--rs-p-v:var(--rs-unit-x2);--rs-p-h:var(--rs-unit-x3);--rs-menu-item-radius:var(--rs-radius-small)}.--size-large--m{--rs-p-v:var(--rs-unit-x3);--rs-p-h:var(--rs-unit-x4);--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}}@media (--rs-viewport-l ){.--rounded-corners-true--l{border-radius:var(--rs-menu-item-radius)}.--rounded-corners-false--l{border-radius:0}.--size-small--l{--rs-p-v:var(--rs-unit-x1);--rs-p-h:var(--rs-unit-x2);--rs-menu-item-radius:var(--rs-radius-small)}.--size-medium--l,.--size-small--l{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-medium--l{--rs-p-v:var(--rs-unit-x2);--rs-p-h:var(--rs-unit-x3);--rs-menu-item-radius:var(--rs-radius-small)}.--size-large--l{--rs-p-v:var(--rs-unit-x3);--rs-p-h:var(--rs-unit-x4);--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}}@media (--rs-viewport-xl ){.--rounded-corners-true--xl{border-radius:var(--rs-menu-item-radius)}.--rounded-corners-false--xl{border-radius:0}.--size-small--xl{--rs-p-v:var(--rs-unit-x1);--rs-p-h:var(--rs-unit-x2);--rs-menu-item-radius:var(--rs-radius-small)}.--size-medium--xl,.--size-small--xl{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-medium--xl{--rs-p-v:var(--rs-unit-x2);--rs-p-h:var(--rs-unit-x3);--rs-menu-item-radius:var(--rs-radius-small)}.--size-large--xl{--rs-p-v:var(--rs-unit-x3);--rs-p-h:var(--rs-unit-x4);--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}}
1
+ .root,button.root{background-color:var(--rs-menu-item-bg-color);color:var(--rs-menu-item-color);display:block;font-family:var(--rs-font-family-body);font-weight:var(--rs-font-weight-medium);padding:var(--rs-p-v) var(--rs-p-h);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:background-color,transform,box-shadow}.icon{color:var(--rs-menu-item-icon-color,inherit)}.content,.icon{transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:color}.--rounded-corners{border-radius:var(--rs-menu-item-radius)}.--size-small{--rs-p-v:var(--rs-unit-x1);--rs-p-h:var(--rs-unit-x2);--rs-menu-item-radius:var(--rs-radius-small)}.--size-medium,.--size-small{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-medium{--rs-p-v:var(--rs-unit-x2);--rs-p-h:var(--rs-unit-x3);--rs-menu-item-radius:var(--rs-radius-small)}.--size-large{--rs-p-v:var(--rs-unit-x3);--rs-p-h:var(--rs-unit-x4);--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}.--color-neutral{--rs-menu-item-icon-color:var(--rs-color-foreground-neutral-faded)}.--color-neutral.--highlighted,.--color-neutral.--selected,.--color-neutral[data-rs-focus]{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-neutral),32%)}@media (hover:hover) and (pointer:fine){.--color-neutral:hover{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-neutral),32%)}}.--color-critical{--rs-menu-item-color:var(--rs-color-foreground-critical)}.--color-critical.--highlighted,.--color-critical.--selected,.--color-critical[data-rs-focus]{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-critical),12%)}@media (hover:hover) and (pointer:fine){.--color-critical:hover{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-critical),12%)}}.--color-primary{--rs-menu-item-icon-color:var(--rs-color-foreground-neutral-faded)}.--color-primary.--highlighted,.--color-primary[data-rs-focus]{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-neutral),32%)}@media (hover:hover) and (pointer:fine){.--color-primary:hover{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-neutral),32%)}}.--color-primary.--selected,.--color-primary.--selected:hover{--rs-menu-item-bg-color:rgba(var(--rs-color-rgb-background-primary),12%);--rs-menu-item-color:var(--rs-color-foreground-primary);--rs-menu-item-icon-color:var(--rs-color-foreground-primary)}.--selected,.--selected:hover{cursor:default}.--disabled,.--disabled:hover{--rs-menu-item-color:var(--rs-color-foreground-disabled);--rs-menu-item-bg-color:none;--rs-menu-item-icon-color:var(--rs-color-foreground-disabled)}button.root{width:100%}.aligner button.root{box-sizing:initial}@media (--rs-viewport-m ){.--rounded-corners-true--m{border-radius:var(--rs-menu-item-radius)}.--rounded-corners-false--m{border-radius:0}.--size-small--m{--rs-p-v:var(--rs-unit-x1);--rs-p-h:var(--rs-unit-x2);--rs-menu-item-radius:var(--rs-radius-small)}.--size-medium--m,.--size-small--m{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-medium--m{--rs-p-v:var(--rs-unit-x2);--rs-p-h:var(--rs-unit-x3);--rs-menu-item-radius:var(--rs-radius-small)}.--size-large--m{--rs-p-v:var(--rs-unit-x3);--rs-p-h:var(--rs-unit-x4);--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}}@media (--rs-viewport-l ){.--rounded-corners-true--l{border-radius:var(--rs-menu-item-radius)}.--rounded-corners-false--l{border-radius:0}.--size-small--l{--rs-p-v:var(--rs-unit-x1);--rs-p-h:var(--rs-unit-x2);--rs-menu-item-radius:var(--rs-radius-small)}.--size-medium--l,.--size-small--l{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-medium--l{--rs-p-v:var(--rs-unit-x2);--rs-p-h:var(--rs-unit-x3);--rs-menu-item-radius:var(--rs-radius-small)}.--size-large--l{--rs-p-v:var(--rs-unit-x3);--rs-p-h:var(--rs-unit-x4);--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}}@media (--rs-viewport-xl ){.--rounded-corners-true--xl{border-radius:var(--rs-menu-item-radius)}.--rounded-corners-false--xl{border-radius:0}.--size-small--xl{--rs-p-v:var(--rs-unit-x1);--rs-p-h:var(--rs-unit-x2);--rs-menu-item-radius:var(--rs-radius-small)}.--size-medium--xl,.--size-small--xl{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-medium--xl{--rs-p-v:var(--rs-unit-x2);--rs-p-h:var(--rs-unit-x3);--rs-menu-item-radius:var(--rs-radius-small)}.--size-large--xl{--rs-p-v:var(--rs-unit-x3);--rs-p-h:var(--rs-unit-x4);--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}}
@@ -9,6 +9,7 @@ export type Props = Pick<ActionableProps, "attributes" | "className" | "disabled
9
9
  startSlot?: React.ReactNode;
10
10
  children: React.ReactNode;
11
11
  endSlot?: React.ReactNode;
12
+ highlighted?: boolean;
12
13
  selected?: boolean;
13
14
  size?: G.Responsive<Size>;
14
15
  roundedCorners?: G.Responsive<boolean>;
@@ -9,7 +9,7 @@ import Text from "../Text/index.js";
9
9
  import Overlay from "../Overlay/index.js";
10
10
  import useElementId from "../../hooks/useElementId.js";
11
11
  import s from "./Modal.module.css";
12
- import getPaddingStyles from "../../styles/padding/index.js";
12
+ import { resolveMixin } from "../../styles/mixin.js";
13
13
  import useHandlerRef from "../../hooks/useHandlerRef.js";
14
14
  const DRAG_THRESHOLD = 32;
15
15
  const DRAG_OPPOSITE_THRESHOLD = 100;
@@ -56,7 +56,7 @@ const Modal = (props) => {
56
56
  const dragDirectionRef = React.useRef(0);
57
57
  const [dragDistance, setDragDistance] = React.useState(0);
58
58
  const [hideProgress, setHideProgress] = React.useState(0);
59
- const paddingStyles = getPaddingStyles(padding);
59
+ const mixinStyles = resolveMixin({ padding });
60
60
  const value = React.useMemo(() => ({
61
61
  titleMounted,
62
62
  setTitleMounted,
@@ -171,9 +171,9 @@ const Modal = (props) => {
171
171
  return (_jsx(Overlay, { onClose: onClose, onOpen: onOpen, onAfterClose: onAfterClose, onAfterOpen: onAfterOpen, disableCloseOnClick: disableCloseOnOutsideClick, active: active, transparent: transparentOverlay || hideProgress, blurred: blurredOverlay, overflow: responsivePropDependency(position, (p) => (p === "center" ? "auto" : "hidden")), className: overlayClassName, containerRef: containerRef, attributes: {
172
172
  onTouchStart: handleDragStart,
173
173
  }, children: ({ active }) => {
174
- const rootClassNames = classNames(s.root, className, active && s["--active"], dragging && s["--dragging"], overflow && s[`--overflow-${overflow}`], containerRef && s["--contained"], responsiveClassNames(s, "--position", position));
174
+ const rootClassNames = classNames(s.root, className, active && s["--active"], dragging && s["--dragging"], overflow && s[`--overflow-${overflow}`], containerRef && s["--contained"], responsiveClassNames(s, "--position", position), mixinStyles.classNames);
175
175
  return (_jsx(Context.Provider, { value: value, children: _jsx("div", { ...attributes, style: {
176
- ...paddingStyles?.variables,
176
+ ...mixinStyles.variables,
177
177
  ...responsiveVariables("--rs-modal-size", size),
178
178
  "--rs-modal-drag": Math.abs(dragDistance) < DRAG_THRESHOLD
179
179
  ? "0px"
@@ -1 +1 @@
1
- .root{--rs-modal-container-width:100vw;background:var(--rs-color-background-elevation-overlay);box-shadow:var(--rs-shadow-overlay);color:var(--rs-color-foreground-neutral);transition:var(--rs-easing-accelerate) var(--rs-duration-fast);transition-property:transform,opacity;will-change:transform}[data-rs-keyboard] .root:focus{box-shadow:var(--rs-focus-shadow);outline:none}.root.--contained{--rs-modal-container-width:100%}.root{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);--rs-modal-size-m:var(--rs-modal-size-s);--rs-modal-size-l:var(--rs-modal-size-m);--rs-modal-size-xl:var(--rs-modal-size-l);--rs-modal-size:var(--rs-modal-size-s)}.--position-center{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center.--active,[dir=rtl] .--position-center.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom.--active,[dir=rtl] .--position-bottom.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start{transform:translate(100%)}.--position-start.--active,[dir=rtl] .--position-start.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end{transform:translate(-100%)}.--position-end.--active,[dir=rtl] .--position-end.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen.--active,[dir=rtl] .--position-full-screen.--active{opacity:1;transform:translate(0)!important}.--active,[dir=rtl] .--active{transition-timing-function:var(--rs-easing-decelerate)}.--dragging{transition:none}.--overflow-visible{overflow:visible}@media (--rs-viewport-m ){.root{--rs-modal-size:var(--rs-modal-size-m)}.--position-center--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--m.--active,[dir=rtl] .--position-center--m.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--m{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--m.--active,[dir=rtl] .--position-bottom--m.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--m{transform:translate(100%)}.--position-start--m.--active,[dir=rtl] .--position-start--m.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--m{transform:translate(-100%)}.--position-end--m.--active,[dir=rtl] .--position-end--m.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--m{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--m.--active,[dir=rtl] .--position-full-screen--m.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-l ){.root{--rs-modal-size:var(--rs-modal-size-l)}.--position-center--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--l.--active,[dir=rtl] .--position-center--l.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--l{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--l.--active,[dir=rtl] .--position-bottom--l.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--l{transform:translate(100%)}.--position-start--l.--active,[dir=rtl] .--position-start--l.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--l{transform:translate(-100%)}.--position-end--l.--active,[dir=rtl] .--position-end--l.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--l{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--l.--active,[dir=rtl] .--position-full-screen--l.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-xl ){.root{--rs-modal-size:var(--rs-modal-size-xl)}.--position-center--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--xl.--active,[dir=rtl] .--position-center--xl.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--xl{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--xl.--active,[dir=rtl] .--position-bottom--xl.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--xl{transform:translate(100%)}.--position-start--xl.--active,[dir=rtl] .--position-start--xl.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--xl{transform:translate(-100%)}.--position-end--xl.--active,[dir=rtl] .--position-end--xl.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--xl{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--xl.--active,[dir=rtl] .--position-full-screen--xl.--active{opacity:1;transform:translate(0)!important}}
1
+ .root{--rs-modal-container-width:100vw;background:var(--rs-color-background-elevation-overlay);box-shadow:var(--rs-shadow-overlay);color:var(--rs-color-foreground-neutral);outline:none;transition:var(--rs-easing-accelerate) var(--rs-duration-fast);transition-property:transform,opacity;will-change:transform}[data-rs-keyboard] .root:focus{box-shadow:var(--rs-focus-shadow)}.root.--contained{--rs-modal-container-width:100%}.root{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);--rs-modal-size-m:var(--rs-modal-size-s);--rs-modal-size-l:var(--rs-modal-size-m);--rs-modal-size-xl:var(--rs-modal-size-l);--rs-modal-size:var(--rs-modal-size-s)}.--position-center{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center.--active,[dir=rtl] .--position-center.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom.--active,[dir=rtl] .--position-bottom.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start{transform:translate(100%)}.--position-start.--active,[dir=rtl] .--position-start.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end{transform:translate(-100%)}.--position-end.--active,[dir=rtl] .--position-end.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen.--active,[dir=rtl] .--position-full-screen.--active{opacity:1;transform:translate(0)!important}.--active,[dir=rtl] .--active{transition-timing-function:var(--rs-easing-decelerate)}.--dragging{transition:none}.--overflow-visible{overflow:visible}@media (--rs-viewport-m ){.root{--rs-modal-size:var(--rs-modal-size-m)}.--position-center--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--m.--active,[dir=rtl] .--position-center--m.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--m{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--m.--active,[dir=rtl] .--position-bottom--m.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--m{transform:translate(100%)}.--position-start--m.--active,[dir=rtl] .--position-start--m.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--m{transform:translate(-100%)}.--position-end--m.--active,[dir=rtl] .--position-end--m.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--m{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--m.--active,[dir=rtl] .--position-full-screen--m.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-l ){.root{--rs-modal-size:var(--rs-modal-size-l)}.--position-center--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--l.--active,[dir=rtl] .--position-center--l.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--l{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--l.--active,[dir=rtl] .--position-bottom--l.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--l{transform:translate(100%)}.--position-start--l.--active,[dir=rtl] .--position-start--l.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--l{transform:translate(-100%)}.--position-end--l.--active,[dir=rtl] .--position-end--l.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--l{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--l.--active,[dir=rtl] .--position-full-screen--l.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-xl ){.root{--rs-modal-size:var(--rs-modal-size-xl)}.--position-center--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--xl.--active,[dir=rtl] .--position-center--xl.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--xl{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--xl.--active,[dir=rtl] .--position-bottom--xl.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--xl{transform:translate(100%)}.--position-start--xl.--active,[dir=rtl] .--position-start--xl.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--xl{transform:translate(-100%)}.--position-end--xl.--active,[dir=rtl] .--position-end--xl.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--xl{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--xl.--active,[dir=rtl] .--position-full-screen--xl.--active{opacity:1;transform:translate(0)!important}}
@@ -87,7 +87,7 @@ export const handlers = {
87
87
  await userEvent.click(trigger);
88
88
  await sleep(100);
89
89
  // Close by pressing Escape
90
- await userEvent.keyboard("{Escape/}");
90
+ await userEvent.keyboard("{Escape}");
91
91
  await waitFor(() => {
92
92
  expect(args.handleClose).toHaveBeenCalledTimes(2);
93
93
  expect(args.handleClose).toHaveBeenCalledWith({ reason: "escape-key" });
@@ -112,7 +112,7 @@ export const disableCloseOnClick = {
112
112
  const overlay = canvas.getByText("Content");
113
113
  await userEvent.click(overlay);
114
114
  expect(args.handleClose).toHaveBeenCalledTimes(0);
115
- await userEvent.keyboard("{Escape/}");
115
+ await userEvent.keyboard("{Escape}");
116
116
  expect(args.handleClose).toHaveBeenCalledTimes(1);
117
117
  },
118
118
  };
@@ -87,7 +87,7 @@ export const handlers = {
87
87
  // TODO: Fails CLI tests in Storybook without a timeout
88
88
  await sleep(100);
89
89
  // Close by pressing Escape
90
- await userEvent.keyboard("{Escape/}");
90
+ await userEvent.keyboard("{Escape}");
91
91
  expect(args.handleClose).toHaveBeenCalledTimes(2);
92
92
  expect(args.handleClose).toHaveBeenCalledWith({ reason: "escape-key" });
93
93
  await waitFor(() => {
@@ -110,8 +110,10 @@ export const disableCloseOnClick = {
110
110
  const canvas = within(canvasElement.ownerDocument.body);
111
111
  const overlay = canvas.getByText("Content");
112
112
  await userEvent.click(overlay);
113
+ // TODO: Fails CLI tests in Storybook without a timeout
114
+ await sleep(100);
113
115
  expect(args.handleClose).toHaveBeenCalledTimes(0);
114
- await userEvent.keyboard("{Escape/}");
116
+ await userEvent.keyboard("{Escape}");
115
117
  expect(args.handleClose).toHaveBeenCalledTimes(1);
116
118
  },
117
119
  };
@@ -1 +1 @@
1
- .root{display:inline-flex}.input,.root{vertical-align:top}.input{background:transparent;border:transparent;caret-color:transparent;color:transparent;font-size:16px;inset:0;outline:none;padding-left:100%;position:absolute}.item{box-sizing:border-box;cursor:text}.item--focused{border-color:var(--rs-color-border-primary);box-shadow:0 0 0 1px var(--rs-color-border-primary)}.item--focused:empty:before{animation:rs-pin-field-caret 1s ease-out infinite;background:var(--rs-color-foreground-neutral);border-radius:999px;content:"";height:var(--rs-font-size-body-2);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:1px}@media (hover:hover){.root:hover .input{pointer-events:none}}@keyframes rs-pin-field-caret{0%,49.9%,to{opacity:1}50%,99.9%{opacity:0}}
1
+ .root{display:inline-flex}.input,.root{vertical-align:top}.input{background:transparent;border:transparent;caret-color:transparent;color:transparent;font-size:16px;inset:0;outline:none;padding-left:100%;position:absolute}.item{box-sizing:border-box;cursor:text}.item--focused{border-color:var(--rs-color-border-primary);box-shadow:0 0 0 1px var(--rs-color-border-primary)}.item--focused:empty:before{animation:rs-pin-field-caret 1s ease-out infinite;background:var(--rs-color-foreground-neutral);border-radius:var(--rs-radius-circular);content:"";height:var(--rs-font-size-body-2);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:1px}@media (hover:hover){.root:hover .input{pointer-events:none}}@keyframes rs-pin-field-caret{0%,49.9%,to{opacity:1}50%,99.9%{opacity:0}}
@@ -3,14 +3,14 @@ import { classNames } from "../../utilities/props.js";
3
3
  import Flyout, { useFlyoutContext } from "../Flyout/index.js";
4
4
  import Dismissible from "../Dismissible/index.js";
5
5
  import s from "./Popover.module.css";
6
- import getPaddingStyles from "../../styles/padding/index.js";
6
+ import { resolveMixin } from "../../styles/mixin.js";
7
7
  const Popover = (props) => {
8
8
  const { width, variant = "elevated", triggerType = "click", position = "bottom", elevation, ...flyoutProps } = props;
9
9
  const padding = props.padding ?? (variant === "headless" ? 0 : 4);
10
- const trapFocusMode = props.trapFocusMode || (triggerType === "hover" ? "content-menu" : undefined);
11
- const paddingStyles = getPaddingStyles(padding);
12
- const contentClassName = classNames(s.content, !!width && s["content--has-width"], variant && s[`content--variant-${variant}`], elevation && s[`content--elevation-${elevation}`]);
13
- return (_jsx(Flyout, { ...flyoutProps, position: position, trapFocusMode: trapFocusMode, triggerType: triggerType, width: width, contentClassName: contentClassName, contentAttributes: { style: { ...paddingStyles?.variables } } }));
10
+ const trapFocusMode = props.trapFocusMode ?? (triggerType === "hover" ? "content-menu" : undefined);
11
+ const mixinStyles = resolveMixin({ padding });
12
+ const contentClassName = classNames(s.content, !!width && s["content--has-width"], variant && s[`content--variant-${variant}`], elevation && s[`content--elevation-${elevation}`], mixinStyles.classNames);
13
+ return (_jsx(Flyout, { ...flyoutProps, position: position, trapFocusMode: trapFocusMode, triggerType: triggerType, width: width, contentClassName: contentClassName, contentAttributes: { style: { ...mixinStyles.variables } } }));
14
14
  };
15
15
  const PopoverDismissible = (props) => {
16
16
  const { handleClose } = useFlyoutContext();
@@ -1 +1 @@
1
- .content{max-width:360px}.content--variant-elevated{background:var(--rs-color-background-elevation-overlay);border:1px solid var(--rs-color-border-neutral-faded);border-radius:var(--rs-radius-medium);box-shadow:var(--rs-shadow-overlay);color:var(--rs-color-foreground-neutral);min-width:220px;overflow:hidden}.content--variant-elevated.content--elevation-raised{box-shadow:var(--rs-shadow-raised)}.content.content--has-width{max-width:none;min-width:0}@media (--rs-viewport-s ){.content{max-width:none}}
1
+ .content{max-width:360px}.content--variant-elevated{background:var(--rs-color-background-elevation-overlay);border-radius:var(--rs-radius-medium);box-shadow:var(--rs-shadow-border-faded),var(--rs-shadow-overlay);color:var(--rs-color-foreground-neutral);min-width:220px;overflow:hidden}.content--variant-elevated.content--elevation-raised{box-shadow:var(--rs-shadow-border-faded),var(--rs-shadow-raised)}.content.content--has-width{max-width:none;min-width:0}@media (--rs-viewport-s ){.content{max-width:none}}
@@ -1,7 +1,7 @@
1
1
  import type React from "react";
2
2
  import type { FlyoutProps, FlyoutInstance } from "../Flyout";
3
3
  export type Instance = FlyoutInstance;
4
- export type Props = Pick<FlyoutProps, "id" | "position" | "forcePosition" | "fallbackPositions" | "onOpen" | "onClose" | "width" | "trapFocusMode" | "active" | "defaultActive" | "contentGap" | "contentShift" | "instanceRef" | "triggerType" | "disableHideAnimation" | "disableContentHover" | "disableCloseOnOutsideClick" | "containerRef" | "initialFocusRef" | "originCoordinates"> & {
4
+ export type Props = Pick<FlyoutProps, "id" | "position" | "forcePosition" | "fallbackPositions" | "onOpen" | "onClose" | "width" | "trapFocusMode" | "active" | "defaultActive" | "contentGap" | "contentShift" | "instanceRef" | "triggerType" | "disableHideAnimation" | "disableContentHover" | "disableCloseOnOutsideClick" | "autoFocus" | "containerRef" | "initialFocusRef" | "originCoordinates"> & {
5
5
  children?: React.ReactNode;
6
6
  padding?: number;
7
7
  elevation?: "raised" | "overlay";
@@ -49,6 +49,7 @@ export declare const activeFalse: StoryObj<{
49
49
  export declare const dismissible: StoryObj<{
50
50
  handleClose: ReturnType<typeof fn>;
51
51
  }>;
52
+ export declare const autoFocus: StoryObj;
52
53
  export declare const className: StoryObj;
53
54
  export declare const testNested: {
54
55
  name: string;
@@ -1,4 +1,4 @@
1
- import { useState } from "react";
1
+ import { useState, useId } from "react";
2
2
  import { expect, fn, userEvent, within, waitFor } from "storybook/test";
3
3
  import { Example } from "../../../utilities/storybook/index.js";
4
4
  import { sleep } from "../../../utilities/helpers.js";
@@ -19,14 +19,18 @@ export default {
19
19
  };
20
20
  const Demo = (props) => {
21
21
  const { position, ...rest } = props;
22
+ const id = useId();
22
23
  return (<Popover position={position} {...rest}>
23
24
  <Popover.Trigger>
24
25
  {(attributes) => <Button attributes={attributes}>{position || "Open"}</Button>}
25
26
  </Popover.Trigger>
26
- <Popover.Content>
27
+ <Popover.Content attributes={{ "aria-labelledby": id }}>
27
28
  <View gap={2} align="start">
28
- Popover content
29
- <Button onClick={() => { }}>Button</Button>
29
+ <span id={id}>Popover content</span>
30
+ <View direction="row" gap={2}>
31
+ <Button onClick={() => { }}>Action 1</Button>
32
+ <Button onClick={() => { }}>Action 2</Button>
33
+ </View>
30
34
  </View>
31
35
  </Popover.Content>
32
36
  </Popover>);
@@ -203,6 +207,22 @@ export const dismissible = {
203
207
  await userEvent.click(trigger);
204
208
  },
205
209
  };
210
+ export const autoFocus = {
211
+ name: "autoFocus",
212
+ render: () => (<Example>
213
+ <Example.Item title="autoFocus=false">
214
+ <Demo autoFocus={false}/>
215
+ </Example.Item>
216
+ </Example>),
217
+ play: async ({ canvasElement }) => {
218
+ const canvas = within(canvasElement.ownerDocument.body);
219
+ const trigger = canvas.getAllByRole("button")[0];
220
+ await userEvent.click(trigger);
221
+ await waitFor(() => {
222
+ expect(document.activeElement).toHaveRole("dialog");
223
+ });
224
+ },
225
+ };
206
226
  export const className = {
207
227
  name: "className, attributes",
208
228
  render: () => (<div data-testid="root">
@@ -1 +1 @@
1
- .root{line-height:0}.container{display:inline-flex;position:relative;vertical-align:top}.container:after,.container:before{content:"";inset-inline-start:calc(var(--rs-unit-x4) * -1);opacity:0;position:absolute}.container:after,.container:before,.item{background:var(--rs-color-background-neutral);border-radius:999px;height:var(--rs-unit-x2);width:var(--rs-unit-x2)}.item{margin-inline-start:var(--rs-unit-x2)}.item:first-child{margin-inline-start:0}.item.item--active{background:var(--rs-color-background-primary);transform:scale(1.2)}.item.item--variant-secondary{opacity:.6}.item.item--variant-tertiary{opacity:.3}.item.item--variant-hidden{opacity:0}.--color-media .container:after,.--color-media .container:before,.--color-media .item{background:var(--rs-color-white)}.--color-media .item{opacity:.6}.--color-media .item.item--active{opacity:1}.--color-media .item.item--variant-secondary{opacity:.3}.--color-media .item.item--variant-tertiary{opacity:.1}.--color-media .item.item--variant-hidden{opacity:0}.--shift-start .container,[dir=rtl] .--shift-end .container{transform:translateX(var(--rs-unit-x4))}.--shift-end .container,[dir=rtl] .--shift-start .container{transform:translateX(calc(var(--rs-unit-x4) * -1))}.--shift-end .container:after,.--shift-start .container:before{opacity:.3}.--shift-end.--color-media .container:after,.--shift-start.--color-media .container:before{opacity:.1}.--shift-start .container:before{inset-inline-end:auto;inset-inline-start:calc(var(--rs-unit-x4) * -1)}.--shift-end .container:after{inset-inline-end:calc(var(--rs-unit-x4) * -1);inset-inline-start:auto}.--animated .container,.--animated .container:after,.--animated .container:before,.--animated .item{transition:var(--rs-duration-slow) var(--rs-easing-decelerate);transition-property:transform,opacity,background-color}
1
+ .root{line-height:0}.container{display:inline-flex;position:relative;vertical-align:top}.container:after,.container:before{content:"";inset-inline-start:calc(var(--rs-unit-x4) * -1);opacity:0;position:absolute}.container:after,.container:before,.item{background:var(--rs-color-background-neutral);border-radius:var(--rs-radius-circular);height:var(--rs-unit-x2);width:var(--rs-unit-x2)}.item{margin-inline-start:var(--rs-unit-x2)}.item:first-child{margin-inline-start:0}.item.item--active{background:var(--rs-color-background-primary);transform:scale(1.2)}.item.item--variant-secondary{opacity:.6}.item.item--variant-tertiary{opacity:.3}.item.item--variant-hidden{opacity:0}.--color-media .container:after,.--color-media .container:before,.--color-media .item{background:var(--rs-color-white)}.--color-media .item{opacity:.6}.--color-media .item.item--active{opacity:1}.--color-media .item.item--variant-secondary{opacity:.3}.--color-media .item.item--variant-tertiary{opacity:.1}.--color-media .item.item--variant-hidden{opacity:0}.--shift-start .container,[dir=rtl] .--shift-end .container{transform:translateX(var(--rs-unit-x4))}.--shift-end .container,[dir=rtl] .--shift-start .container{transform:translateX(calc(var(--rs-unit-x4) * -1))}.--shift-end .container:after,.--shift-start .container:before{opacity:.3}.--shift-end.--color-media .container:after,.--shift-start.--color-media .container:before{opacity:.1}.--shift-start .container:before{inset-inline-end:auto;inset-inline-start:calc(var(--rs-unit-x4) * -1)}.--shift-end .container:after{inset-inline-end:calc(var(--rs-unit-x4) * -1);inset-inline-start:auto}.--animated .container,.--animated .container:after,.--animated .container:before,.--animated .item{transition:var(--rs-duration-slow) var(--rs-easing-decelerate);transition-property:transform,opacity,background-color}
@@ -1 +1 @@
1
- @layer rs.reset{[data-rs-theme] blockquote,[data-rs-theme] body,[data-rs-theme] dd,[data-rs-theme] dl,[data-rs-theme] figcaption,[data-rs-theme] figure,[data-rs-theme] h1,[data-rs-theme] h2,[data-rs-theme] h3,[data-rs-theme] h4,[data-rs-theme] h5,[data-rs-theme] h6,[data-rs-theme] li,[data-rs-theme] ol,[data-rs-theme] p,[data-rs-theme] ul{margin:0;padding:0}[data-rs-theme] ol[class],[data-rs-theme] ul[class]{list-style:none}[data-rs-theme] textarea{resize:vertical}[data-rs-theme] table{border-collapse:collapse;border-spacing:0}[data-rs-theme] fieldset{border:0;margin:0;padding:0}[data-rs-theme] img{display:block;max-width:100%}[data-rs-theme] button,[data-rs-theme] input,[data-rs-theme] select,[data-rs-theme] textarea{font:inherit}[data-rs-theme] option{background:var(--rs-color-background-elevation-base)}[data-rs-theme] label{cursor:pointer}[data-rs-theme] input::placeholder,[data-rs-theme] textarea::placeholder{color:var(--rs-color-foreground-neutral-faded);opacity:.5}html[data-rs-theme]{-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;font-size:100%;text-rendering:optimizelegibility;touch-action:manipulation}[data-rs-theme] *{box-sizing:border-box}[data-rs-theme] body,html[data-rs-theme]{background:var(--rs-color-background-page);color:var(--rs-color-foreground-neutral);height:100%;scroll-behavior:smooth}}[data-rs-theme] body,[data-rs-theme]:not(html){font-family:var(--rs-font-family-body);font-size:var(--rs-font-size-body-3);font-weight:var(--rs-font-weight-regular);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}[data-rs-color-mode=light]{color-scheme:light}[data-rs-color-mode=dark]{color-scheme:dark}@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}[data-rs-no-transition] *,[data-rs-no-transition] :after,[data-rs-no-transition] :before{transition:none!important}
1
+ @layer rs.reset{[data-rs-theme]{--rs-radius-circular:9999px;--rs-shadow-border-faded:0px 0px 0px 1px var(--rs-color-border-neutral-faded)}[data-rs-theme] blockquote,[data-rs-theme] body,[data-rs-theme] dd,[data-rs-theme] dl,[data-rs-theme] figcaption,[data-rs-theme] figure,[data-rs-theme] h1,[data-rs-theme] h2,[data-rs-theme] h3,[data-rs-theme] h4,[data-rs-theme] h5,[data-rs-theme] h6,[data-rs-theme] li,[data-rs-theme] ol,[data-rs-theme] p,[data-rs-theme] ul{margin:0;padding:0}[data-rs-theme] ol[class],[data-rs-theme] ul[class]{list-style:none}[data-rs-theme] textarea{resize:vertical}[data-rs-theme] table{border-collapse:collapse;border-spacing:0}[data-rs-theme] fieldset{border:0;margin:0;padding:0}[data-rs-theme] img{display:block;max-width:100%}[data-rs-theme] button,[data-rs-theme] input,[data-rs-theme] select,[data-rs-theme] textarea{font:inherit}[data-rs-theme] option{background:var(--rs-color-background-elevation-base)}[data-rs-theme] label{cursor:pointer}[data-rs-theme] input::placeholder,[data-rs-theme] textarea::placeholder{color:var(--rs-color-foreground-disabled)}html[data-rs-theme]{-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;font-size:100%;text-rendering:optimizelegibility;touch-action:manipulation}[data-rs-theme] *{box-sizing:border-box}[data-rs-theme] body,html[data-rs-theme]{background:var(--rs-color-background-page);color:var(--rs-color-foreground-neutral);height:100%;scroll-behavior:smooth}}[data-rs-theme] body,[data-rs-theme]:not(html){font-family:var(--rs-font-family-body);font-size:var(--rs-font-size-body-3);font-weight:var(--rs-font-weight-regular);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}[data-rs-color-mode=light]{color-scheme:light}[data-rs-color-mode=dark]{color-scheme:dark}@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}[data-rs-no-transition] *,[data-rs-no-transition] :after,[data-rs-no-transition] :before{transition:none!important}
@@ -1 +1 @@
1
- .root{isolation:isolate}.item{--rs-resizable-default-size:none;--rs-resizable-min-size:0;--rs-resizable-max-size:100%;flex-grow:100;max-width:var(--rs-resizable-default-size);min-width:var(--rs-resizable-default-size);overflow:hidden}.handle{flex-shrink:0;position:relative;z-index:var(--rs-z-index-relative)}.handle:after,.handle:before{border-radius:999px;content:"";position:absolute}.handle:after{transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,background-color}.--variant-bordered .handle:after{background:var(--rs-color-border-neutral-faded)}.--variant-bordered .handle--dragging:after,.--variant-bordered .handle:hover:after,.--variant-borderless .handle:after,[data-rs-keyboard] .--variant-bordered .handle:focus:after{background:var(--rs-color-border-neutral)}.--variant-borderless .handle:after{opacity:0}.--variant-borderless .handle--dragging:after,.--variant-borderless .handle:hover:after,[data-rs-keyboard] .--variant-borderless .handle:focus:after{opacity:.6}body:has(.handle--dragging) .--variant-borderless .handle:not(.handle--dragging){opacity:0}body:has(.handle--dragging) .--variant-bordered .handle:not(.handle--dragging):after{background:var(--rs-color-border-neutral-faded)}body:has(.--direction-row>.handle--dragging){cursor:ew-resize}body:has(.--direction-column>.handle--dragging){cursor:ns-resize}.--direction-row>.handle{cursor:ew-resize}.--direction-row>.handle:after,.--direction-row>.handle:before{inset-block:0;inset-inline-start:50%;transform:translateX(-50%)}.--direction-row>.handle:before{width:var(--rs-unit-x6)}.--variant-borderless.--direction-row>.handle:after{width:var(--rs-unit-x1)}.--variant-bordered.--direction-row>.handle:after{width:1px}.--direction-row>.item[data-rs-resizable-item-mounted]{max-width:var(--rs-resizable-max-size);min-width:var(--rs-resizable-min-size)}.--direction-column>.handle{cursor:ns-resize}.--direction-column>.handle:after,.--direction-column>.handle:before{inset-block-start:50%;inset-inline:0;transform:translateY(-50%)}.--direction-column>.handle:before{height:var(--rs-unit-x6)}.--variant-borderless.--direction-column>.handle:after{height:var(--rs-unit-x1)}.--variant-bordered.--direction-column>.handle:after{height:1px}.--direction-column>.item[data-rs-resizable-item-mounted]{max-height:var(--rs-resizable-max-size);min-height:var(--rs-resizable-min-size)}
1
+ .root{isolation:isolate}.item{--rs-resizable-default-size:none;--rs-resizable-min-size:0;--rs-resizable-max-size:100%;flex-grow:100;max-width:var(--rs-resizable-default-size);min-width:var(--rs-resizable-default-size);overflow:hidden}.handle{flex-shrink:0;position:relative;z-index:var(--rs-z-index-relative)}.handle:after,.handle:before{border-radius:var(--rs-radius-circular);content:"";position:absolute}.handle:after{transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,background-color}.--variant-bordered .handle:after{background:var(--rs-color-border-neutral-faded)}.--variant-bordered .handle--dragging:after,.--variant-bordered .handle:hover:after,.--variant-borderless .handle:after,[data-rs-keyboard] .--variant-bordered .handle:focus:after{background:var(--rs-color-border-neutral)}.--variant-borderless .handle:after{opacity:0}.--variant-borderless .handle--dragging:after,.--variant-borderless .handle:hover:after,[data-rs-keyboard] .--variant-borderless .handle:focus:after{opacity:.6}body:has(.handle--dragging) .--variant-borderless .handle:not(.handle--dragging){opacity:0}body:has(.handle--dragging) .--variant-bordered .handle:not(.handle--dragging):after{background:var(--rs-color-border-neutral-faded)}body:has(.--direction-row>.handle--dragging){cursor:ew-resize}body:has(.--direction-column>.handle--dragging){cursor:ns-resize}.--direction-row>.handle{cursor:ew-resize}.--direction-row>.handle:after,.--direction-row>.handle:before{inset-block:0;inset-inline-start:50%;transform:translateX(-50%)}.--direction-row>.handle:before{width:var(--rs-unit-x6)}.--variant-borderless.--direction-row>.handle:after{width:var(--rs-unit-x1)}.--variant-bordered.--direction-row>.handle:after{width:1px}.--direction-row>.item[data-rs-resizable-item-mounted]{max-width:var(--rs-resizable-max-size);min-width:var(--rs-resizable-min-size)}.--direction-column>.handle{cursor:ns-resize}.--direction-column>.handle:after,.--direction-column>.handle:before{inset-block-start:50%;inset-inline:0;transform:translateY(-50%)}.--direction-column>.handle:before{height:var(--rs-unit-x6)}.--variant-borderless.--direction-column>.handle:after{height:var(--rs-unit-x1)}.--variant-bordered.--direction-column>.handle:after{height:1px}.--direction-column>.item[data-rs-resizable-item-mounted]{max-height:var(--rs-resizable-max-size);min-height:var(--rs-resizable-min-size)}
@@ -3,8 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import React, { forwardRef } from "react";
4
4
  import { classNames } from "../../utilities/props.js";
5
5
  import { disableUserSelect, enableUserSelect } from "../../utilities/dom/index.js";
6
- import getHeightStyles from "../../styles/height/index.js";
7
- import getMaxHeightStyles from "../../styles/maxHeight/index.js";
6
+ import { resolveMixin } from "../../styles/mixin.js";
8
7
  import useIsomorphicLayoutEffect from "../../hooks/useIsomorphicLayoutEffect.js";
9
8
  import s from "./ScrollArea.module.css";
10
9
  import useHandlerRef from "../../hooks/useHandlerRef.js";
@@ -71,10 +70,9 @@ const ScrollArea = forwardRef((props, ref) => {
71
70
  const [scrollPosition, setScrollPosition] = React.useState({ x: 0, y: 0 });
72
71
  const scrollableRef = React.useRef(null);
73
72
  const rootRef = React.useRef(null);
74
- const heightStyles = getHeightStyles(height);
75
- const maxHeightStyles = getMaxHeightStyles(maxHeight);
76
- const rootClassNames = classNames(s.root, scrollbarDisplay && s[`--display-${scrollbarDisplay}`], heightStyles?.classNames, className);
77
- const contentClassNames = classNames(s.content, maxHeightStyles?.classNames);
73
+ const mixinStyles = resolveMixin({ height, maxHeight });
74
+ const rootClassNames = classNames(s.root, scrollbarDisplay && s[`--display-${scrollbarDisplay}`], className);
75
+ const contentClassNames = classNames(s.content, mixinStyles.classNames);
78
76
  const updateScroll = React.useCallback(() => {
79
77
  const scrollableEl = scrollableRef.current;
80
78
  if (!scrollableEl)
@@ -131,7 +129,7 @@ const ScrollArea = forwardRef((props, ref) => {
131
129
  observer.observe(rootEl);
132
130
  return () => observer.disconnect();
133
131
  }, [updateScroll]);
134
- return (_jsxs("div", { ...attributes, ref: rootRef, className: rootClassNames, style: { ...heightStyles?.variables }, children: [_jsx("div", { className: s.scrollable, ref: scrollableRef, onScroll: handleScroll, children: _jsx("div", { className: contentClassNames, style: { ...maxHeightStyles?.variables }, children: children }) }), scrollRatio.y < 1 && scrollbarDisplay !== "hidden" && (_jsx(ScrollAreaBar, { vertical: true, onThumbMove: handleThumbYMove, ratio: scrollRatio.y, position: scrollPosition.y })), scrollRatio.x < 1 && scrollbarDisplay !== "hidden" && (_jsx(ScrollAreaBar, { onThumbMove: handleThumbXMove, ratio: scrollRatio.x, position: scrollPosition.x }))] }));
132
+ return (_jsxs("div", { ...attributes, ref: rootRef, className: rootClassNames, children: [_jsx("div", { className: s.scrollable, ref: scrollableRef, onScroll: handleScroll, children: _jsx("div", { className: contentClassNames, style: { ...mixinStyles.variables }, children: children }) }), scrollRatio.y < 1 && scrollbarDisplay !== "hidden" && (_jsx(ScrollAreaBar, { vertical: true, onThumbMove: handleThumbYMove, ratio: scrollRatio.y, position: scrollPosition.y })), scrollRatio.x < 1 && scrollbarDisplay !== "hidden" && (_jsx(ScrollAreaBar, { onThumbMove: handleThumbXMove, ratio: scrollRatio.x, position: scrollPosition.x }))] }));
135
133
  });
136
134
  ScrollArea.displayName = "ScrollArea";
137
135
  export default ScrollArea;