reshaped 3.7.0-canary.8 → 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 (217) hide show
  1. package/CHANGELOG.md +38 -0
  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 +68 -23
  21. package/dist/components/Autocomplete/Autocomplete.types.d.ts +3 -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 -4
  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/Overlay.js +1 -2
  72. package/dist/components/Overlay/tests/Overlay.test.stories.js +4 -2
  73. package/dist/components/PinField/PinField.module.css +1 -1
  74. package/dist/components/Popover/Popover.js +5 -5
  75. package/dist/components/Popover/Popover.module.css +1 -1
  76. package/dist/components/Popover/Popover.types.d.ts +1 -1
  77. package/dist/components/Popover/tests/Popover.stories.d.ts +7 -2
  78. package/dist/components/Popover/tests/Popover.stories.js +59 -20
  79. package/dist/components/ProgressIndicator/ProgressIndicator.module.css +1 -1
  80. package/dist/components/Reshaped/Reshaped.css +1 -1
  81. package/dist/components/Resizable/Resizable.module.css +1 -1
  82. package/dist/components/ScrollArea/ScrollArea.js +5 -7
  83. package/dist/components/ScrollArea/ScrollArea.module.css +1 -1
  84. package/dist/components/Select/Select.module.css +1 -1
  85. package/dist/components/Slider/Slider.module.css +1 -1
  86. package/dist/components/Switch/Switch.js +1 -1
  87. package/dist/components/Switch/Switch.module.css +1 -1
  88. package/dist/components/Table/Table.js +4 -7
  89. package/dist/components/Tabs/TabsItem.js +2 -1
  90. package/dist/components/Tabs/TabsList.js +2 -2
  91. package/dist/components/Text/Text.js +4 -4
  92. package/dist/components/TextArea/TextArea.module.css +1 -1
  93. package/dist/components/TextField/TextField.module.css +1 -1
  94. package/dist/components/TextField/tests/TextField.stories.js +3 -1
  95. package/dist/components/Theme/Theme.js +7 -2
  96. package/dist/components/Theme/Theme.types.d.ts +12 -13
  97. package/dist/components/Theme/index.d.ts +1 -1
  98. package/dist/components/Theme/tests/{Theme.test.stories.d.ts → Theme.stories.d.ts} +1 -0
  99. package/dist/components/Theme/tests/{Theme.test.stories.js → Theme.stories.js} +39 -1
  100. package/dist/components/Theme/useTheme.d.ts +6 -6
  101. package/dist/components/View/View.js +43 -60
  102. package/dist/components/View/View.module.css +1 -1
  103. package/dist/components/View/View.types.d.ts +7 -0
  104. package/dist/components/View/tests/View.stories.d.ts +4 -0
  105. package/dist/components/View/tests/View.stories.js +65 -1
  106. package/dist/components/_private/Portal/Portal.js +9 -1
  107. package/dist/config/tailwind.d.ts +1 -1
  108. package/dist/hooks/_private/useIsDismissible.d.ts +0 -1
  109. package/dist/hooks/_private/useIsDismissible.js +15 -8
  110. package/dist/index.d.ts +1 -2
  111. package/dist/styles/mixin.d.ts +6 -0
  112. package/dist/styles/mixin.js +71 -0
  113. package/dist/styles/resolvers/align/align.css +1 -0
  114. package/dist/styles/resolvers/align/index.d.ts +4 -0
  115. package/dist/styles/resolvers/align/index.js +10 -0
  116. package/dist/styles/resolvers/aspectRatio/aspectRatio.css +1 -0
  117. package/dist/styles/resolvers/aspectRatio/index.d.ts +4 -0
  118. package/dist/styles/resolvers/aspectRatio/index.js +10 -0
  119. package/dist/styles/resolvers/bleed/bleed.module.css +1 -0
  120. package/dist/styles/resolvers/bleed/index.d.ts +3 -0
  121. package/dist/styles/{bleed → resolvers/bleed}/index.js +4 -4
  122. package/dist/styles/resolvers/border/border.module.css +1 -0
  123. package/dist/styles/resolvers/border/borderWidth.css +1 -0
  124. package/dist/styles/resolvers/border/index.d.ts +11 -0
  125. package/dist/styles/resolvers/border/index.js +74 -0
  126. package/dist/styles/resolvers/height/index.d.ts +3 -0
  127. package/dist/styles/{height → resolvers/height}/index.js +4 -4
  128. package/dist/styles/resolvers/inset/index.d.ts +10 -0
  129. package/dist/styles/resolvers/inset/index.js +38 -0
  130. package/dist/styles/resolvers/inset/inset.css +1 -0
  131. package/dist/styles/resolvers/justify/index.d.ts +4 -0
  132. package/dist/styles/resolvers/justify/index.js +10 -0
  133. package/dist/styles/resolvers/justify/justify.css +1 -0
  134. package/dist/styles/resolvers/margin/index.d.ts +10 -0
  135. package/dist/styles/resolvers/margin/index.js +38 -0
  136. package/dist/styles/resolvers/margin/margin.css +1 -0
  137. package/dist/styles/resolvers/maxHeight/index.d.ts +3 -0
  138. package/dist/styles/{maxHeight → resolvers/maxHeight}/index.js +4 -4
  139. package/dist/styles/resolvers/maxHeight/maxHeight.module.css +1 -0
  140. package/dist/styles/resolvers/maxWidth/index.d.ts +3 -0
  141. package/dist/styles/{maxWidth → resolvers/maxWidth}/index.js +4 -4
  142. package/dist/styles/resolvers/maxWidth/maxWidth.module.css +1 -0
  143. package/dist/styles/resolvers/minHeight/index.d.ts +3 -0
  144. package/dist/styles/{minHeight → resolvers/minHeight}/index.js +4 -4
  145. package/dist/styles/resolvers/minHeight/minHeight.module.css +1 -0
  146. package/dist/styles/resolvers/minWidth/index.d.ts +3 -0
  147. package/dist/styles/{minWidth → resolvers/minWidth}/index.js +4 -4
  148. package/dist/styles/resolvers/minWidth/minWidth.module.css +1 -0
  149. package/dist/styles/resolvers/padding/index.d.ts +10 -0
  150. package/dist/styles/resolvers/padding/index.js +38 -0
  151. package/dist/styles/resolvers/padding/padding.css +1 -0
  152. package/dist/styles/resolvers/position/index.d.ts +4 -0
  153. package/dist/styles/resolvers/position/index.js +9 -0
  154. package/dist/styles/resolvers/position/position.css +1 -0
  155. package/dist/styles/resolvers/radius/index.d.ts +3 -0
  156. package/dist/styles/resolvers/radius/index.js +10 -0
  157. package/dist/styles/resolvers/textAlign/index.d.ts +4 -0
  158. package/dist/styles/resolvers/textAlign/index.js +10 -0
  159. package/dist/styles/resolvers/textAlign/textAlign.css +1 -0
  160. package/dist/styles/resolvers/width/index.d.ts +3 -0
  161. package/dist/styles/{width → resolvers/width}/index.js +4 -4
  162. package/dist/styles/resolvers/width/width.module.css +1 -0
  163. package/dist/styles/types.d.ts +63 -16
  164. package/dist/themes/_generator/tokens/color/utilities/generateColors.js +1 -1
  165. package/dist/themes/_generator/tokens/css.js +2 -2
  166. package/dist/themes/figma/theme.css +1 -1
  167. package/dist/themes/fragments/twitter/theme.css +1 -1
  168. package/dist/themes/reshaped/theme.css +1 -1
  169. package/dist/themes/slate/theme.css +1 -1
  170. package/dist/types/global.d.ts +5 -0
  171. package/dist/utilities/a11y/tests/TrapFocus.stories.js +4 -4
  172. package/package.json +24 -24
  173. package/dist/components/ActionBar/tests/ActionBar.test.stories.d.ts +0 -15
  174. package/dist/components/ActionBar/tests/ActionBar.test.stories.js +0 -26
  175. package/dist/components/FileUpload/tests/FileUpload.test.stories.d.ts +0 -21
  176. package/dist/components/FileUpload/tests/FileUpload.test.stories.js +0 -52
  177. package/dist/styles/align/align.css +0 -1
  178. package/dist/styles/align/index.d.ts +0 -4
  179. package/dist/styles/align/index.js +0 -10
  180. package/dist/styles/aspectRatio/aspectRatio.css +0 -1
  181. package/dist/styles/aspectRatio/index.d.ts +0 -4
  182. package/dist/styles/aspectRatio/index.js +0 -9
  183. package/dist/styles/bleed/bleed.module.css +0 -1
  184. package/dist/styles/bleed/index.d.ts +0 -3
  185. package/dist/styles/border/border.module.css +0 -1
  186. package/dist/styles/border/index.d.ts +0 -3
  187. package/dist/styles/border/index.js +0 -10
  188. package/dist/styles/height/index.d.ts +0 -3
  189. package/dist/styles/inset/index.d.ts +0 -5
  190. package/dist/styles/inset/index.js +0 -11
  191. package/dist/styles/inset/inset.css +0 -1
  192. package/dist/styles/justify/index.d.ts +0 -4
  193. package/dist/styles/justify/index.js +0 -10
  194. package/dist/styles/justify/justify.css +0 -1
  195. package/dist/styles/maxHeight/index.d.ts +0 -3
  196. package/dist/styles/maxHeight/maxHeight.module.css +0 -1
  197. package/dist/styles/maxWidth/index.d.ts +0 -3
  198. package/dist/styles/maxWidth/maxWidth.module.css +0 -1
  199. package/dist/styles/minHeight/index.d.ts +0 -3
  200. package/dist/styles/minHeight/minHeight.module.css +0 -1
  201. package/dist/styles/minWidth/index.d.ts +0 -3
  202. package/dist/styles/minWidth/minWidth.module.css +0 -1
  203. package/dist/styles/padding/index.d.ts +0 -4
  204. package/dist/styles/padding/index.js +0 -9
  205. package/dist/styles/padding/padding.css +0 -1
  206. package/dist/styles/position/index.d.ts +0 -4
  207. package/dist/styles/position/index.js +0 -9
  208. package/dist/styles/position/position.css +0 -1
  209. package/dist/styles/radius/index.d.ts +0 -3
  210. package/dist/styles/radius/index.js +0 -10
  211. package/dist/styles/textAlign/index.d.ts +0 -4
  212. package/dist/styles/textAlign/index.js +0 -10
  213. package/dist/styles/textAlign/textAlign.css +0 -1
  214. package/dist/styles/width/index.d.ts +0 -3
  215. package/dist/styles/width/width.module.css +0 -1
  216. /package/dist/styles/{height → resolvers/height}/height.module.css +0 -0
  217. /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);
@@ -72,7 +72,6 @@ const FlyoutControlled = (props) => {
72
72
  active: isRendered && triggerType !== "hover",
73
73
  contentRef: flyoutElRef,
74
74
  triggerRef: triggerElRef,
75
- blocking: false,
76
75
  });
77
76
  const clearTimer = React.useCallback(() => {
78
77
  if (timerRef.current)
@@ -234,16 +233,19 @@ const FlyoutControlled = (props) => {
234
233
  return;
235
234
  if (trapFocusMode === false)
236
235
  return;
236
+ const initialFocusEl = (!autoFocus
237
+ ? flyoutElRef.current.querySelector("[role][tabindex='-1']")
238
+ : initialFocusRef?.current);
237
239
  trapFocusRef.current = new TrapFocus();
238
240
  trapFocusRef.current.trap(flyoutElRef.current, {
239
241
  mode: trapFocusMode,
240
- initialFocusEl: initialFocusRef?.current,
242
+ initialFocusEl,
241
243
  includeTrigger: triggerType === "hover" && trapFocusMode !== "dialog" && !isSubmenu,
242
244
  onRelease: () => {
243
245
  handleClose({});
244
246
  },
245
247
  });
246
- }, [status, triggerType, trapFocusMode]);
248
+ }, [status, triggerType, trapFocusMode, autoFocus]);
247
249
  React.useEffect(() => {
248
250
  if (!disableHideAnimation && status !== "hidden")
249
251
  return;
@@ -324,6 +326,7 @@ const FlyoutControlled = (props) => {
324
326
  contentAttributes,
325
327
  containerRef,
326
328
  disableContentHover,
329
+ autoFocus,
327
330
  isSubmenu,
328
331
  }, children: children }));
329
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
  };
@@ -31,8 +31,7 @@ const Overlay = (props) => {
31
31
  // Separating rendered and visible states to make sure animation is triggered only once overlay was added to the dom
32
32
  const { active: rendered, activate: render, deactivate: remove } = useToggle(active || false);
33
33
  const { active: visible, activate: show, deactivate: hide } = useToggle(active || false);
34
- // Check that when close was triggered there were no other overlays / flyouts rendered above it
35
- const isDismissible = useIsDismissible({ active, contentRef, blocking: true });
34
+ const isDismissible = useIsDismissible({ active, contentRef });
36
35
  const rootClassNames = classNames(s.root, visible && s["--visible"], isTransparent && s["--click-through"], blurred && s["--blurred"], animated && s["--animated"], containerRef && s["--contained"], overflow === "auto" && s["--overflow-auto"], className);
37
36
  const isInsideContent = (el) => {
38
37
  if (!contentRef.current)
@@ -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,16 +49,21 @@ 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;
54
+ export declare const testNested: {
55
+ name: string;
56
+ render: () => import("react").JSX.Element;
57
+ };
53
58
  export declare const testWithTooltip: {
54
59
  name: string;
55
60
  render: () => import("react").JSX.Element;
56
61
  };
57
- export declare const variant: {
62
+ export declare const testContentEditable: {
58
63
  name: string;
59
64
  render: () => import("react").JSX.Element;
60
65
  };
61
- export declare const teslContentEditable: {
66
+ export declare const variant: {
62
67
  name: string;
63
68
  render: () => import("react").JSX.Element;
64
69
  };