reshaped 3.2.0-canary.6 → 3.2.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 (143) hide show
  1. package/CHANGELOG.md +1 -35
  2. package/dist/bundle.css +1 -1
  3. package/dist/bundle.d.ts +2 -0
  4. package/dist/bundle.js +11 -12
  5. package/dist/cjs/constants/breakpoints.d.ts +6 -0
  6. package/dist/cjs/constants/breakpoints.js +7 -0
  7. package/dist/cjs/themes/_generator/definitions/reshaped.js +8 -4
  8. package/dist/cjs/themes/_generator/tokens/viewport/viewport.transforms.js +10 -1
  9. package/dist/cjs/themes/figma/theme.css +1 -1
  10. package/dist/cjs/themes/reshaped/theme.css +1 -1
  11. package/dist/cjs/themes/slate/theme.css +1 -1
  12. package/dist/components/Actionable/Actionable.d.ts +1 -1
  13. package/dist/components/Actionable/Actionable.module.css +1 -1
  14. package/dist/components/Autocomplete/Autocomplete.js +2 -2
  15. package/dist/components/Button/Button.js +1 -1
  16. package/dist/components/Button/Button.module.css +1 -1
  17. package/dist/components/Card/Card.d.ts +1 -1
  18. package/dist/components/Card/Card.module.css +1 -1
  19. package/dist/components/Card/tests/Card.stories.d.ts +1 -1
  20. package/dist/components/Checkbox/Checkbox.module.css +1 -1
  21. package/dist/components/Divider/Divider.js +4 -3
  22. package/dist/components/Divider/Divider.module.css +1 -1
  23. package/dist/components/Divider/Divider.types.d.ts +3 -0
  24. package/dist/components/Divider/tests/Divider.stories.d.ts +1 -0
  25. package/dist/components/Divider/tests/Divider.stories.js +21 -0
  26. package/dist/components/DropdownMenu/DropdownMenu.types.d.ts +1 -1
  27. package/dist/components/FormControl/FormControl.context.d.ts +2 -1
  28. package/dist/components/Grid/Grid.d.ts +6 -0
  29. package/dist/components/Grid/Grid.js +46 -0
  30. package/dist/components/Grid/Grid.module.css +1 -0
  31. package/dist/components/Grid/Grid.types.d.ts +31 -0
  32. package/dist/components/Grid/Grid.types.js +1 -0
  33. package/dist/components/Grid/index.d.ts +2 -0
  34. package/dist/components/Grid/index.js +1 -0
  35. package/dist/components/Grid/tests/Grid.stories.d.ts +18 -0
  36. package/dist/components/Grid/tests/Grid.stories.js +170 -0
  37. package/dist/components/Icon/Icon.module.css +1 -1
  38. package/dist/components/Link/Link.d.ts +1 -1
  39. package/dist/components/Link/tests/Link.stories.d.ts +1 -1
  40. package/dist/components/Loader/Loader.module.css +1 -1
  41. package/dist/components/Loader/Loader.types.d.ts +1 -1
  42. package/dist/components/Loader/tests/Loader.stories.js +5 -3
  43. package/dist/components/Modal/Modal.js +7 -4
  44. package/dist/components/Modal/Modal.module.css +1 -1
  45. package/dist/components/Modal/Modal.types.d.ts +1 -1
  46. package/dist/components/Modal/tests/Modal.stories.d.ts +1 -0
  47. package/dist/components/Modal/tests/Modal.stories.js +28 -1
  48. package/dist/components/Overlay/Overlay.js +45 -27
  49. package/dist/components/Overlay/Overlay.module.css +1 -1
  50. package/dist/components/Overlay/Overlay.types.d.ts +1 -0
  51. package/dist/components/Popover/Popover.js +2 -4
  52. package/dist/components/Popover/Popover.types.d.ts +1 -1
  53. package/dist/components/Radio/Radio.module.css +1 -1
  54. package/dist/components/Resizable/Resizable.module.css +1 -1
  55. package/dist/components/ScrollArea/ScrollArea.js +1 -1
  56. package/dist/components/Slider/Slider.module.css +1 -1
  57. package/dist/components/Slider/SliderControlled.js +2 -1
  58. package/dist/components/Switch/Switch.module.css +1 -1
  59. package/dist/components/Tabs/Tabs.d.ts +1 -1
  60. package/dist/components/Tabs/Tabs.module.css +1 -1
  61. package/dist/components/Tabs/TabsContext.d.ts +1 -1
  62. package/dist/components/Tabs/TabsItem.d.ts +1 -1
  63. package/dist/components/Tabs/TabsItem.js +2 -3
  64. package/dist/components/Tabs/TabsList.js +1 -1
  65. package/dist/components/Tabs/tests/Tabs.stories.d.ts +15 -13
  66. package/dist/components/Tabs/tests/Tabs.stories.js +71 -8
  67. package/dist/components/TextField/TextField.js +5 -1
  68. package/dist/components/TextField/TextField.module.css +1 -1
  69. package/dist/components/TextField/tests/TextField.stories.js +4 -0
  70. package/dist/components/Toast/ToastContainer.js +1 -2
  71. package/dist/components/Toast/ToastRegion.js +1 -1
  72. package/dist/components/View/View.js +7 -3
  73. package/dist/components/View/View.module.css +1 -1
  74. package/dist/components/View/View.types.d.ts +2 -2
  75. package/dist/components/_private/Flyout/Flyout.module.css +1 -1
  76. package/dist/components/_private/Flyout/Flyout.types.d.ts +11 -3
  77. package/dist/components/_private/Flyout/FlyoutContent.js +1 -1
  78. package/dist/components/_private/Flyout/FlyoutControlled.js +25 -15
  79. package/dist/components/_private/Flyout/tests/Flyout.stories.d.ts +3 -1
  80. package/dist/components/_private/Flyout/tests/Flyout.stories.js +54 -32
  81. package/dist/components/_private/Flyout/useFlyout.d.ts +2 -1
  82. package/dist/components/_private/Flyout/useFlyout.js +45 -55
  83. package/dist/components/_private/Flyout/utilities/calculatePosition.js +16 -11
  84. package/dist/components/_private/Flyout/utilities/getPositionFallbacks.d.ts +3 -0
  85. package/dist/components/_private/Flyout/utilities/getPositionFallbacks.js +39 -0
  86. package/dist/config/tailwind.d.ts +1 -1
  87. package/dist/constants/breakpoints.d.ts +6 -0
  88. package/dist/constants/breakpoints.js +5 -0
  89. package/dist/hooks/_private/useIsDismissible.js +7 -14
  90. package/dist/hooks/_private/useSingletonKeyboardMode.js +1 -1
  91. package/dist/hooks/tests/useResponsiveClientValue.stories.d.ts +1 -2
  92. package/dist/hooks/tests/useResponsiveClientValue.stories.js +1 -2
  93. package/dist/hooks/useDrag.js +2 -1
  94. package/dist/hooks/useResponsiveClientValue.js +22 -11
  95. package/dist/hooks/useScrollLock.d.ts +4 -1
  96. package/dist/hooks/useScrollLock.js +14 -40
  97. package/dist/index.d.ts +2 -0
  98. package/dist/index.js +1 -0
  99. package/dist/styles/align/align.module.css +1 -0
  100. package/dist/styles/align/index.d.ts +3 -0
  101. package/dist/styles/align/index.js +10 -0
  102. package/dist/styles/justify/index.d.ts +3 -0
  103. package/dist/styles/justify/index.js +10 -0
  104. package/dist/styles/justify/justify.module.css +1 -0
  105. package/dist/styles/types.d.ts +2 -0
  106. package/dist/themes/_generator/definitions/reshaped.js +5 -4
  107. package/dist/themes/_generator/tokens/viewport/viewport.transforms.js +10 -1
  108. package/dist/themes/figma/theme.css +1 -1
  109. package/dist/themes/reshaped/theme.css +1 -1
  110. package/dist/themes/slate/theme.css +1 -1
  111. package/dist/utilities/a11y/TrapFocus.d.ts +1 -1
  112. package/dist/utilities/a11y/TrapFocus.js +1 -1
  113. package/dist/utilities/a11y/focus.js +1 -1
  114. package/dist/utilities/a11y/index.d.ts +4 -0
  115. package/dist/utilities/a11y/index.js +3 -0
  116. package/dist/utilities/css.d.ts +7 -0
  117. package/dist/utilities/css.js +18 -0
  118. package/dist/utilities/dom/flyout.d.ts +1 -0
  119. package/dist/utilities/{dom.js → dom/flyout.js} +1 -19
  120. package/dist/utilities/dom/index.d.ts +3 -0
  121. package/dist/utilities/dom/index.js +3 -0
  122. package/dist/utilities/dom/shadowDom.d.ts +1 -0
  123. package/dist/utilities/dom/shadowDom.js +4 -0
  124. package/dist/utilities/dom/userSelect.d.ts +2 -0
  125. package/dist/utilities/dom/userSelect.js +6 -0
  126. package/dist/utilities/platform.d.ts +1 -0
  127. package/dist/utilities/platform.js +15 -0
  128. package/dist/utilities/scroll/disable.d.ts +7 -0
  129. package/dist/utilities/scroll/disable.js +13 -0
  130. package/dist/utilities/scroll/helpers.d.ts +1 -0
  131. package/dist/utilities/scroll/helpers.js +17 -0
  132. package/dist/utilities/scroll/index.d.ts +2 -0
  133. package/dist/utilities/scroll/index.js +2 -0
  134. package/dist/utilities/scroll/lock.d.ts +5 -0
  135. package/dist/utilities/scroll/lock.js +24 -0
  136. package/dist/utilities/scroll/lockSafari.d.ts +2 -0
  137. package/dist/utilities/scroll/lockSafari.js +21 -0
  138. package/dist/utilities/scroll/lockStandard.d.ts +2 -0
  139. package/dist/utilities/scroll/lockStandard.js +17 -0
  140. package/dist/utilities/storybook/Placeholder.d.ts +1 -0
  141. package/dist/utilities/storybook/Placeholder.js +2 -2
  142. package/package.json +45 -48
  143. package/dist/utilities/dom.d.ts +0 -6
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { classNames, responsiveVariables, responsivePropDependency } from "../../utilities/helpers.js";
3
+ import getAlignStyles from "../../styles/align/index.js";
4
+ import getJustifyStyles from "../../styles/justify/index.js";
5
+ import s from "./Grid.module.css";
6
+ const GridItem = (props) => {
7
+ const { area, colStart, colEnd, colSpan, rowStart, rowEnd, rowSpan, children, className, as: TagName = "div", attributes, } = props;
8
+ const itemClassNames = classNames(s.item, className);
9
+ const resolvedColSpan = responsivePropDependency(colSpan, (value) => value && `span ${value}`);
10
+ const resolvedRowSpan = responsivePropDependency(rowSpan, (value) => value && `span ${value}`);
11
+ const rootVariables = {
12
+ ...responsiveVariables("--rs-grid-area", area),
13
+ ...responsiveVariables("--rs-grid-col-end", resolvedColSpan),
14
+ // both span and end use the same css variable but end has a higher prioerity
15
+ ...responsiveVariables("--rs-grid-col-end", colEnd),
16
+ ...responsiveVariables("--rs-grid-col-start", colStart),
17
+ ...responsiveVariables("--rs-grid-row-end", resolvedRowSpan),
18
+ ...responsiveVariables("--rs-grid-row-end", rowEnd),
19
+ ...responsiveVariables("--rs-grid-row-start", rowStart),
20
+ };
21
+ return (_jsx(TagName, { ...attributes, className: itemClassNames, style: rootVariables, children: children }));
22
+ };
23
+ const Grid = (props) => {
24
+ const { areas, columns, rows, gap, align, justify, autoColumns, autoRows, autoFlow, children, className, as: TagName = "div", attributes, } = props;
25
+ const alignStyles = getAlignStyles(align);
26
+ const justifyStyles = getJustifyStyles(justify);
27
+ const resolvedRows = responsivePropDependency(rows, (value) => typeof value === "number" ? `repeat(${value}, 1fr)` : value);
28
+ const resolvedColumns = responsivePropDependency(columns, (value) => typeof value === "number" ? `repeat(${value}, 1fr)` : value);
29
+ const resolvedAreas = responsivePropDependency(areas, (value) => value
30
+ ? `"${value?.join('" "')}"
31
+ `
32
+ : undefined);
33
+ const rootClassNames = classNames(s.root, alignStyles?.classNames, justifyStyles?.classNames, className);
34
+ const rootVariables = {
35
+ ...responsiveVariables("--rs-grid-gap", gap),
36
+ ...responsiveVariables("--rs-grid-rows", resolvedRows),
37
+ ...responsiveVariables("--rs-grid-columns", resolvedColumns),
38
+ ...responsiveVariables("--rs-grid-areas", resolvedAreas),
39
+ ...responsiveVariables("--rs-grid-auto-flow", autoFlow),
40
+ ...responsiveVariables("--rs-grid-auto-columns", autoColumns),
41
+ ...responsiveVariables("--rs-grid-auto-rows", autoRows),
42
+ };
43
+ return (_jsx(TagName, { ...attributes, className: rootClassNames, style: rootVariables, children: children }));
44
+ };
45
+ Grid.Item = GridItem;
46
+ export default Grid;
@@ -0,0 +1 @@
1
+ .root{display:grid}.root[style*="--rs-grid-gap"]{--rs-grid-gap-value:calc(var(--rs-grid-gap) * var(--rs-unit-x1));gap:var(--rs-grid-gap-value);--rs-grid-gap-s:0;--rs-grid-gap-m:var(--rs-grid-gap-s);--rs-grid-gap-l:var(--rs-grid-gap-m);--rs-grid-gap-xl:var(--rs-grid-gap-l);--rs-grid-gap:var(--rs-grid-gap-s)}.root[style*="--rs-grid-rows"]{grid-template-rows:var(--rs-grid-rows);--rs-grid-rows-s: ;--rs-grid-rows-m:var(--rs-grid-rows-s);--rs-grid-rows-l:var(--rs-grid-rows-m);--rs-grid-rows-xl:var(--rs-grid-rows-l);--rs-grid-rows:var(--rs-grid-rows-s)}.root[style*="--rs-grid-columns"]{grid-template-columns:var(--rs-grid-columns);--rs-grid-columns-s: ;--rs-grid-columns-m:var(--rs-grid-columns-s);--rs-grid-columns-l:var(--rs-grid-columns-m);--rs-grid-columns-xl:var(--rs-grid-columns-l);--rs-grid-columns:var(--rs-grid-columns-s)}.root[style*="--rs-grid-areas"]{grid-template-areas:var(--rs-grid-areas);--rs-grid-areas-s: ;--rs-grid-areas-m:var(--rs-grid-areas-s);--rs-grid-areas-l:var(--rs-grid-areas-m);--rs-grid-areas-xl:var(--rs-grid-areas-l);--rs-grid-areas:var(--rs-grid-areas-s)}.root[style*="--rs-grid-auto-flow"]{grid-auto-flow:var(--rs-grid-auto-flow);--rs-grid-auto-flow-s: ;--rs-grid-auto-flow-m:var(--rs-grid-auto-flow-s);--rs-grid-auto-flow-l:var(--rs-grid-auto-flow-m);--rs-grid-auto-flow-xl:var(--rs-grid-auto-flow-l);--rs-grid-auto-flow:var(--rs-grid-auto-flow-s)}.root[style*="--rs-grid-auto-columns"]{grid-auto-columns:var(--rs-grid-auto-columns);--rs-grid-auto-columns-s: ;--rs-grid-auto-columns-m:var(--rs-grid-auto-columns-s);--rs-grid-auto-columns-l:var(--rs-grid-auto-columns-m);--rs-grid-auto-columns-xl:var(--rs-grid-auto-columns-l);--rs-grid-auto-columns:var(--rs-grid-auto-columns-s)}.root[style*="--rs-grid-auto-rows"]{grid-auto-rows:var(--rs-grid-auto-rows);--rs-grid-auto-rows-s: ;--rs-grid-auto-rows-m:var(--rs-grid-auto-rows-s);--rs-grid-auto-rows-l:var(--rs-grid-auto-rows-m);--rs-grid-auto-rows-xl:var(--rs-grid-auto-rows-l);--rs-grid-auto-rows:var(--rs-grid-auto-rows-s)}.item[style*="--rs-grid-area"]{grid-area:var(--rs-grid-area);--rs-grid-area-s: ;--rs-grid-area-m:var(--rs-grid-area-s);--rs-grid-area-l:var(--rs-grid-area-m);--rs-grid-area-xl:var(--rs-grid-area-l);--rs-grid-area:var(--rs-grid-area-s)}.item[style*="--rs-grid-col-start"]{grid-column-start:var(--rs-grid-col-start);--rs-grid-col-start-s: ;--rs-grid-col-start-m:var(--rs-grid-col-start-s);--rs-grid-col-start-l:var(--rs-grid-col-start-m);--rs-grid-col-start-xl:var(--rs-grid-col-start-l);--rs-grid-col-start:var(--rs-grid-col-start-s)}.item[style*="--rs-grid-col-end"]{grid-column-end:var(--rs-grid-col-end);--rs-grid-col-end-s: ;--rs-grid-col-end-m:var(--rs-grid-col-end-s);--rs-grid-col-end-l:var(--rs-grid-col-end-m);--rs-grid-col-end-xl:var(--rs-grid-col-end-l);--rs-grid-col-end:var(--rs-grid-col-end-s)}.item[style*="--rs-grid-row-start"]{grid-row-start:var(--rs-grid-row-start);--rs-grid-row-start-s: ;--rs-grid-row-start-m:var(--rs-grid-row-start-s);--rs-grid-row-start-l:var(--rs-grid-row-start-m);--rs-grid-row-start-xl:var(--rs-grid-row-start-l);--rs-grid-row-start:var(--rs-grid-row-start-s)}.item[style*="--rs-grid-row-end"]{grid-row-end:var(--rs-grid-row-end);--rs-grid-row-end-s: ;--rs-grid-row-end-m:var(--rs-grid-row-end-s);--rs-grid-row-end-l:var(--rs-grid-row-end-m);--rs-grid-row-end-xl:var(--rs-grid-row-end-l);--rs-grid-row-end:var(--rs-grid-row-end-s)}@media (--rs-viewport-m ){.root[style*="--rs-grid-gap"]{--rs-grid-gap:var(--rs-grid-gap-m)}.root[style*="--rs-grid-rows"]{--rs-grid-rows:var(--rs-grid-rows-m)}.root[style*="--rs-grid-columns"]{--rs-grid-columns:var(--rs-grid-columns-m)}.root[style*="--rs-grid-areas"]{--rs-grid-areas:var(--rs-grid-areas-m)}.root[style*="--rs-grid-auto-flow"]{--rs-grid-auto-flow:var(--rs-grid-auto-flow-m)}.root[style*="--rs-grid-auto-columns"]{--rs-grid-auto-columns:var(--rs-grid-auto-columns-m)}.root[style*="--rs-grid-auto-rows"]{--rs-grid-auto-rows:var(--rs-grid-auto-rows-m)}.item[style*="--rs-grid-area"]{--rs-grid-area:var(--rs-grid-area-m)}.item[style*="--rs-grid-col-start"]{--rs-grid-col-start:var(--rs-grid-col-start-m)}.item[style*="--rs-grid-col-end"]{--rs-grid-col-end:var(--rs-grid-col-end-m)}.item[style*="--rs-grid-row-start"]{--rs-grid-row-start:var(--rs-grid-row-start-m)}.item[style*="--rs-grid-row-end"]{--rs-grid-row-end:var(--rs-grid-row-end-m)}}@media (--rs-viewport-l ){.root[style*="--rs-grid-gap"]{--rs-grid-gap:var(--rs-grid-gap-l)}.root[style*="--rs-grid-rows"]{--rs-grid-rows:var(--rs-grid-rows-l)}.root[style*="--rs-grid-columns"]{--rs-grid-columns:var(--rs-grid-columns-l)}.root[style*="--rs-grid-areas"]{--rs-grid-areas:var(--rs-grid-areas-l)}.root[style*="--rs-grid-auto-flow"]{--rs-grid-auto-flow:var(--rs-grid-auto-flow-l)}.root[style*="--rs-grid-auto-columns"]{--rs-grid-auto-columns:var(--rs-grid-auto-columns-l)}.root[style*="--rs-grid-auto-rows"]{--rs-grid-auto-rows:var(--rs-grid-auto-rows-l)}.item[style*="--rs-grid-area"]{--rs-grid-area:var(--rs-grid-area-l)}.item[style*="--rs-grid-col-start"]{--rs-grid-col-start:var(--rs-grid-col-start-l)}.item[style*="--rs-grid-col-end"]{--rs-grid-col-end:var(--rs-grid-col-end-l)}.item[style*="--rs-grid-row-start"]{--rs-grid-row-start:var(--rs-grid-row-start-l)}.item[style*="--rs-grid-row-end"]{--rs-grid-row-end:var(--rs-grid-row-end-l)}}@media (--rs-viewport-xl ){.root[style*="--rs-grid-gap"]{--rs-grid-gap:var(--rs-grid-gap-xl)}.root[style*="--rs-grid-rows"]{--rs-grid-rows:var(--rs-grid-rows-xl)}.root[style*="--rs-grid-columns"]{--rs-grid-columns:var(--rs-grid-columns-xl)}.root[style*="--rs-grid-areas"]{--rs-grid-areas:var(--rs-grid-areas-xl)}.root[style*="--rs-grid-auto-flow"]{--rs-grid-auto-flow:var(--rs-grid-auto-flow-xl)}.root[style*="--rs-grid-auto-columns"]{--rs-grid-auto-columns:var(--rs-grid-auto-columns-xl)}.root[style*="--rs-grid-auto-rows"]{--rs-grid-auto-rows:var(--rs-grid-auto-rows-xl)}.item[style*="--rs-grid-area"]{--rs-grid-area:var(--rs-grid-area-xl)}.item[style*="--rs-grid-col-start"]{--rs-grid-col-start:var(--rs-grid-col-start-xl)}.item[style*="--rs-grid-col-end"]{--rs-grid-col-end:var(--rs-grid-col-end-xl)}.item[style*="--rs-grid-row-start"]{--rs-grid-row-start:var(--rs-grid-row-start-xl)}.item[style*="--rs-grid-row-end"]{--rs-grid-row-end:var(--rs-grid-row-end-xl)}}
@@ -0,0 +1,31 @@
1
+ import type { Property } from "csstype";
2
+ import type * as G from "../../types/global";
3
+ import type * as TStyles from "../../styles/types";
4
+ export type Props<TagName extends keyof JSX.IntrinsicElements = "div"> = {
5
+ gap?: G.Responsive<number>;
6
+ align?: G.Responsive<TStyles.Align>;
7
+ justify?: G.Responsive<TStyles.Justify>;
8
+ rows?: G.Responsive<number | Property.GridTemplateRows>;
9
+ columns?: G.Responsive<number | Property.GridTemplateColumns>;
10
+ areas?: G.Responsive<string[]>;
11
+ autoFlow?: G.Responsive<Property.GridAutoFlow>;
12
+ autoColumns?: G.Responsive<Property.GridAutoColumns>;
13
+ autoRows?: G.Responsive<Property.GridAutoRows>;
14
+ children?: React.ReactNode;
15
+ as?: TagName;
16
+ className?: G.ClassName;
17
+ attributes?: G.Attributes<TagName>;
18
+ };
19
+ export type ItemProps<TagName extends keyof JSX.IntrinsicElements = "div"> = {
20
+ area?: string;
21
+ colStart?: G.Responsive<number>;
22
+ colEnd?: G.Responsive<number>;
23
+ colSpan?: G.Responsive<number>;
24
+ rowStart?: G.Responsive<number>;
25
+ rowEnd?: G.Responsive<number>;
26
+ rowSpan?: G.Responsive<number>;
27
+ children?: React.ReactNode;
28
+ as?: TagName;
29
+ className?: G.ClassName;
30
+ attributes?: G.Attributes<TagName>;
31
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export { default } from "./Grid";
2
+ export type { Props as GridProps, ItemProps as GridItemProps } from "./Grid.types";
@@ -0,0 +1 @@
1
+ export { default } from "./Grid.js";
@@ -0,0 +1,18 @@
1
+ declare const _default: {
2
+ title: string;
3
+ component: {
4
+ <As extends keyof JSX.IntrinsicElements = "div">(props: import("./..").GridProps<As>): import("react").JSX.Element;
5
+ Item: <As extends keyof JSX.IntrinsicElements = "div">(props: import("./..").GridItemProps<As>) => import("react").JSX.Element;
6
+ };
7
+ parameters: {
8
+ iframe: {
9
+ url: string;
10
+ };
11
+ };
12
+ };
13
+ export default _default;
14
+ export declare const base: () => import("react").JSX.Element;
15
+ export declare const layout: () => import("react").JSX.Element;
16
+ export declare const itemLayout: () => import("react").JSX.Element;
17
+ export declare const areas: () => import("react").JSX.Element;
18
+ export declare const auto: () => import("react").JSX.Element;
@@ -0,0 +1,170 @@
1
+ import { Example } from "../../../utilities/storybook/index.js";
2
+ import Grid from "../index.js";
3
+ import View from "../../View/index.js";
4
+ export default {
5
+ title: "Utilities/Grid",
6
+ component: Grid,
7
+ parameters: {
8
+ iframe: {
9
+ url: "https://reshaped.so/docs/utilities/grid",
10
+ },
11
+ },
12
+ };
13
+ export const base = () => (<Example>
14
+ <Example.Item title="gap: 2">
15
+ <Grid gap={2} columns={2}>
16
+ {[1, 2].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
17
+ {i}
18
+ </View>))}
19
+ </Grid>
20
+ </Example.Item>
21
+ <Example.Item title="align: center">
22
+ <Grid gap={2} columns={2} align="center">
23
+ <View backgroundColor="neutral-faded" borderRadius="medium" padding={4}>
24
+ 1
25
+ </View>
26
+ <View backgroundColor="neutral-faded" borderRadius="medium" padding={8}>
27
+ 2
28
+ </View>
29
+ </Grid>
30
+ </Example.Item>
31
+ <Example.Item title="justify: center">
32
+ <Grid gap={2} columns="200px 200px" justify="center">
33
+ <View backgroundColor="neutral-faded" borderRadius="medium" padding={4}>
34
+ 1
35
+ </View>
36
+ <View backgroundColor="neutral-faded" borderRadius="medium" padding={4}>
37
+ 2
38
+ </View>
39
+ </Grid>
40
+ </Example.Item>
41
+ </Example>);
42
+ export const layout = () => (<Example>
43
+ <Example.Item title="simple: 2 rows, 3 columns">
44
+ <Grid gap={4} columns={3} rows={2}>
45
+ {[1, 2, 3, 4, 5].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
46
+ {i}
47
+ </View>))}
48
+ </Grid>
49
+ </Example.Item>
50
+ <Example.Item title="columns template, 1fr 2fr 1fr">
51
+ <Grid gap={4} columns="1fr 2fr 1fr" rows={2}>
52
+ {[1, 2, 3, 4, 5].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
53
+ {i}
54
+ </View>))}
55
+ </Grid>
56
+ </Example.Item>
57
+ <Example.Item title="rows template, 1fr 2fr">
58
+ <Grid gap={4} columns={3} rows="1fr 2fr">
59
+ {[1, 2, 3, 4, 5].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
60
+ {i}
61
+ </View>))}
62
+ </Grid>
63
+ </Example.Item>
64
+ <Example.Item title="responsive">
65
+ <Grid gap={4} columns={{ s: 3, m: "1fr 2fr 1fr" }} rows={{ s: 2, m: "1fr 2fr" }}>
66
+ {[1, 2, 3, 4, 5].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
67
+ {i}
68
+ </View>))}
69
+ </Grid>
70
+ </Example.Item>
71
+ </Example>);
72
+ export const itemLayout = () => (<Example>
73
+ <Example.Item title="column, start 1, end 3">
74
+ <Grid gap={4} columns={3} rows={2}>
75
+ <Grid.Item colStart={1} colEnd={3}>
76
+ <View backgroundColor="neutral-faded" borderRadius="medium" padding={4} height="100%">
77
+ 1
78
+ </View>
79
+ </Grid.Item>
80
+ {[2, 3, 4, 5].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
81
+ {i}
82
+ </View>))}
83
+ </Grid>
84
+ </Example.Item>
85
+ <Example.Item title="column, start 1, span 2">
86
+ <Grid gap={4} columns={3} rows={2}>
87
+ <Grid.Item colStart={1} colSpan={2}>
88
+ <View backgroundColor="neutral-faded" borderRadius="medium" padding={4} height="100%">
89
+ 1
90
+ </View>
91
+ </Grid.Item>
92
+ {[2, 3, 4, 5].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
93
+ {i}
94
+ </View>))}
95
+ </Grid>
96
+ </Example.Item>
97
+
98
+ <Example.Item title="row, start 1, end 3">
99
+ <Grid gap={4} columns={3} rows={2}>
100
+ <Grid.Item rowStart={1} rowEnd={3}>
101
+ <View backgroundColor="neutral-faded" borderRadius="medium" padding={4} height="100%">
102
+ 1
103
+ </View>
104
+ </Grid.Item>
105
+ {[2, 3, 4, 5].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
106
+ {i}
107
+ </View>))}
108
+ </Grid>
109
+ </Example.Item>
110
+
111
+ <Example.Item title="row, start 1, span 2">
112
+ <Grid gap={4} columns={3} rows={2}>
113
+ <Grid.Item rowStart={1} rowSpan={2}>
114
+ <View backgroundColor="neutral-faded" borderRadius="medium" padding={4} height="100%">
115
+ 1
116
+ </View>
117
+ </Grid.Item>
118
+ {[2, 3, 4, 5].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
119
+ {i}
120
+ </View>))}
121
+ </Grid>
122
+ </Example.Item>
123
+
124
+ <Example.Item title="responsive">
125
+ <Grid gap={4} columns={3} rows={2}>
126
+ <Grid.Item rowStart={1} rowSpan={{ s: 1, m: 2 }} colStart={1} colSpan={{ s: 1, m: 2 }}>
127
+ <View backgroundColor="neutral-faded" borderRadius="medium" padding={4} height="100%">
128
+ 1
129
+ </View>
130
+ </Grid.Item>
131
+ {[2, 3, 4, 5].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
132
+ {i}
133
+ </View>))}
134
+ </Grid>
135
+ </Example.Item>
136
+ </Example>);
137
+ export const areas = () => (<Example>
138
+ <Example.Item title="simple: 2 rows, 3 columns">
139
+ <Grid gap={4} rows={2} areas={["a .", "a b"]}>
140
+ {["a", "b"].map((area) => (<Grid.Item area={area} key={area}>
141
+ <View backgroundColor="neutral-faded" borderRadius="medium" padding={4} height="100%">
142
+ {area}
143
+ </View>
144
+ </Grid.Item>))}
145
+ </Grid>
146
+ </Example.Item>
147
+ </Example>);
148
+ export const auto = () => (<Example>
149
+ <Example.Item title="auto flow: column">
150
+ <Grid gap={4} autoFlow="column" rows={2} columns={2}>
151
+ {[1, 2, 3].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
152
+ {i}
153
+ </View>))}
154
+ </Grid>
155
+ </Example.Item>
156
+ <Example.Item title="auto rows">
157
+ <Grid gap={4} autoRows="100px" columns={2}>
158
+ {[1, 2, 3].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
159
+ {i}
160
+ </View>))}
161
+ </Grid>
162
+ </Example.Item>
163
+ <Example.Item title="auto columns">
164
+ <Grid gap={4} autoColumns="100px" autoFlow="column">
165
+ {[1, 2, 3].map((i) => (<View backgroundColor="neutral-faded" borderRadius="medium" padding={4} key={i}>
166
+ {i}
167
+ </View>))}
168
+ </Grid>
169
+ </Example.Item>
170
+ </Example>);
@@ -1 +1 @@
1
- .root{aspect-ratio:1;display:flex;justify-content:center}.--auto{aspect-ratio:auto;justify-content:flex-start;width:auto}.root svg{display:block;height:100%;min-width:100%}.--color-neutral{color:var(--rs-color-foreground-neutral)}.--color-neutral-faded{color:var(--rs-color-foreground-neutral-faded)}.--color-primary{color:var(--rs-color-foreground-primary)}.--color-positive{color:var(--rs-color-foreground-positive)}.--color-warning{color:var(--rs-color-foreground-warning)}.--color-critical{color:var(--rs-color-foreground-critical)}.--color-disabled{color:var(--rs-color-foreground-disabled)}
1
+ .root{aspect-ratio:1;display:flex;justify-content:center}.--auto{aspect-ratio:auto;justify-content:flex-start;width:auto}.root svg{display:block;height:100%;min-width:100%;width:auto}.--color-neutral{color:var(--rs-color-foreground-neutral)}.--color-neutral-faded{color:var(--rs-color-foreground-neutral-faded)}.--color-primary{color:var(--rs-color-foreground-primary)}.--color-positive{color:var(--rs-color-foreground-positive)}.--color-warning{color:var(--rs-color-foreground-warning)}.--color-critical{color:var(--rs-color-foreground-critical)}.--color-disabled{color:var(--rs-color-foreground-disabled)}
@@ -2,5 +2,5 @@ declare const Link: import("react").ForwardRefExoticComponent<Pick<import("../Ac
2
2
  icon?: import("../Icon").IconProps["svg"];
3
3
  color?: "inherit" | "critical" | "primary" | "positive" | "warning";
4
4
  variant?: "plain" | "underline";
5
- } & import("react").RefAttributes<HTMLAnchorElement | HTMLButtonElement>>;
5
+ } & import("react").RefAttributes<HTMLButtonElement | HTMLAnchorElement>>;
6
6
  export default Link;
@@ -1,6 +1,6 @@
1
1
  declare const _default: {
2
2
  title: string;
3
- component: import("react").ForwardRefExoticComponent<Pick<import("../../Actionable").ActionableProps, "children" | "className" | "attributes" | "disabled" | "type" | "onClick" | "href"> & {
3
+ component: import("react").ForwardRefExoticComponent<Pick<import("../../Actionable").ActionableProps, "children" | "disabled" | "className" | "attributes" | "type" | "onClick" | "href"> & {
4
4
  icon?: import("../../Icon").IconProps["svg"];
5
5
  color?: "inherit" | "critical" | "primary" | "positive" | "warning";
6
6
  variant?: "plain" | "underline";
@@ -1 +1 @@
1
- @keyframes rs-reshaped-loader{0%{transform:rotate(0deg)}50%{transform:rotate(540deg)}to{transform:rotate(3turn)}}.root{animation:rs-reshaped-loader 2.2s cubic-bezier(.445,.05,.55,.95) infinite;display:block;height:var(--rs-loader-size);position:relative;width:var(--rs-loader-size)}.root:after,.root:before{background:var(--rs-loader-color);border-radius:50%;content:"";height:var(--rs-loader-stroke);position:absolute;top:50%;transform:translateY(-50%);width:var(--rs-loader-stroke);z-index:2}.root:before{left:0}.root:after{right:0}.inner:after,.inner:before{border:var(--rs-loader-stroke) solid var(--rs-loader-color);border-radius:50%;content:"";inset:0;position:absolute}.inner:before{opacity:.28}.inner:after{border-bottom-color:transparent;border-left-color:transparent;transform:rotate(-45deg)}.--color-inherit{--rs-loader-color:currentcolor}.--color-primary{--rs-loader-color:var(--rs-color-border-primary)}.--color-positive{--rs-loader-color:var(--rs-color-border-positive)}.--color-critical{--rs-loader-color:var(--rs-color-border-critical)}.--size-small{--rs-loader-size:var(--rs-unit-x4);--rs-loader-stroke:2px}.--size-medium{--rs-loader-size:var(--rs-unit-x6);--rs-loader-stroke:3px}@media (--rs-viewport-m ){.--size-small--m{--rs-loader-size:var(--rs-unit-x4);--rs-loader-stroke:2px}.--size-medium--m{--rs-loader-size:var(--rs-unit-x6);--rs-loader-stroke:3px}}@media (--rs-viewport-l ){.--size-small--l{--rs-loader-size:var(--rs-unit-x4);--rs-loader-stroke:2px}.--size-medium--l{--rs-loader-size:var(--rs-unit-x6);--rs-loader-stroke:3px}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-loader-size:var(--rs-unit-x4);--rs-loader-stroke:2px}.--size-medium--xl{--rs-loader-size:var(--rs-unit-x6);--rs-loader-stroke:3px}}
1
+ @keyframes rs-reshaped-loader{0%{transform:rotate(0deg)}50%{transform:rotate(540deg)}to{transform:rotate(3turn)}}.root{animation:rs-reshaped-loader 2.2s cubic-bezier(.445,.05,.55,.95) infinite;display:block;height:var(--rs-loader-size);position:relative;width:var(--rs-loader-size)}.root:after,.root:before{background:var(--rs-loader-color);border-radius:50%;content:"";height:var(--rs-loader-stroke);position:absolute;top:50%;transform:translateY(-50%);width:var(--rs-loader-stroke);z-index:2}.root:before{left:0}.root:after{right:0}.inner:after,.inner:before{border:var(--rs-loader-stroke) solid var(--rs-loader-color);border-radius:50%;content:"";inset:0;position:absolute}.inner:before{opacity:.28}.inner:after{border-bottom-color:transparent;border-left-color:transparent;transform:rotate(-45deg)}.--color-inherit{--rs-loader-color:currentcolor}.--color-primary{--rs-loader-color:var(--rs-color-border-primary)}.--color-positive{--rs-loader-color:var(--rs-color-border-positive)}.--color-critical{--rs-loader-color:var(--rs-color-border-critical)}.--size-small{--rs-loader-size:var(--rs-unit-x4);--rs-loader-stroke:2px}.--size-medium{--rs-loader-size:var(--rs-unit-x6);--rs-loader-stroke:3px}.--size-large{--rs-loader-size:var(--rs-unit-x10);--rs-loader-stroke:5px}@media (--rs-viewport-m ){.--size-small--m{--rs-loader-size:var(--rs-unit-x4);--rs-loader-stroke:2px}.--size-medium--m{--rs-loader-size:var(--rs-unit-x6);--rs-loader-stroke:3px}.--size-large--m{--rs-loader-size:var(--rs-unit-x10);--rs-loader-stroke:5px}}@media (--rs-viewport-l ){.--size-small--l{--rs-loader-size:var(--rs-unit-x4);--rs-loader-stroke:2px}.--size-medium--l{--rs-loader-size:var(--rs-unit-x6);--rs-loader-stroke:3px}.--size-large--l{--rs-loader-size:var(--rs-unit-x10);--rs-loader-stroke:5px}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-loader-size:var(--rs-unit-x4);--rs-loader-stroke:2px}.--size-medium--xl{--rs-loader-size:var(--rs-unit-x6);--rs-loader-stroke:3px}.--size-large--xl{--rs-loader-size:var(--rs-unit-x10);--rs-loader-stroke:5px}}
@@ -1,6 +1,6 @@
1
1
  import type * as G from "../../types/global";
2
2
  export type Props = {
3
- size?: G.Responsive<"small" | "medium">;
3
+ size?: G.Responsive<"small" | "medium" | "large">;
4
4
  color?: "primary" | "critical" | "positive" | "inherit";
5
5
  className?: G.ClassName;
6
6
  attributes?: G.Attributes<"span">;
@@ -10,13 +10,15 @@ export default {
10
10
  },
11
11
  };
12
12
  export const size = () => {
13
- const attributes = {};
14
13
  return (<Example>
15
14
  <Example.Item title="size: medium">
16
- <Loader size="medium" attributes={attributes}/>
15
+ <Loader size="medium"/>
17
16
  </Example.Item>
18
17
  <Example.Item title="size: small">
19
- <Loader size="small" attributes={{ "data-foo": "23" }}/>
18
+ <Loader size="small"/>
19
+ </Example.Item>
20
+ <Example.Item title="size: large">
21
+ <Loader size="large"/>
20
22
  </Example.Item>
21
23
  <Example.Item title={["responsive size", "[s] small", "[m+] medium"]}>
22
24
  <Loader size={{ s: "small", m: "medium" }}/>
@@ -2,7 +2,8 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import React from "react";
4
4
  import { classNames, responsiveVariables, responsiveClassNames } from "../../utilities/helpers.js";
5
- import { enableUserSelect, disableUserSelect } from "../../utilities/dom.js";
5
+ import { enableUserSelect, disableUserSelect } from "../../utilities/dom/index.js";
6
+ import { enableScroll, disableScroll } from "../../utilities/scroll/index.js";
6
7
  import useResponsiveClientValue from "../../hooks/useResponsiveClientValue.js";
7
8
  import Text from "../Text/index.js";
8
9
  import Overlay from "../Overlay/index.js";
@@ -40,7 +41,7 @@ const ModalSubtitle = (props) => {
40
41
  return (_jsx(Text, { variant: "body-3", color: "neutral-faded", attributes: { id: `${id}-subtitle` }, children: children }));
41
42
  };
42
43
  const Modal = (props) => {
43
- const { children, onClose, onOpen, active, size, padding = 4, position = "center", overflow, transparentOverlay, blurredOverlay, ariaLabel, autoFocus = true, disableSwipeGesture, disableCloseOnOutsideClick, overlayClassName, className, attributes, } = props;
44
+ const { children, onClose, onOpen, active, size, padding = 4, position = "center", overflow, transparentOverlay, blurredOverlay, ariaLabel, autoFocus = true, disableSwipeGesture, disableCloseOnOutsideClick, containerRef, overlayClassName, className, attributes, } = props;
44
45
  const onCloseRef = useHandlerRef(onClose);
45
46
  const id = useElementId();
46
47
  const clientPosition = useResponsiveClientValue(position);
@@ -90,6 +91,7 @@ const Modal = (props) => {
90
91
  if (clientPosition === "start" && e.targetTouches[0].clientX < DRAG_EDGE_BOUNDARY)
91
92
  return;
92
93
  disableUserSelect();
94
+ disableScroll();
93
95
  setDragging(true);
94
96
  };
95
97
  // Once modal is closed - reset its drag data
@@ -107,6 +109,7 @@ const Modal = (props) => {
107
109
  return;
108
110
  const handleDragEnd = () => {
109
111
  enableUserSelect();
112
+ enableScroll();
110
113
  setDragging(false);
111
114
  // Close only when dragging in the closing direction
112
115
  // Changing to a different direction will keep the modal opened
@@ -165,10 +168,10 @@ const Modal = (props) => {
165
168
  setHideProgress(progress / 2);
166
169
  dragDistanceRef.current = dragDistance;
167
170
  }, [dragDistance, clientPosition, rootRef]);
168
- return (_jsx(Overlay, { onClose: onClose, onOpen: onOpen, disableCloseOnClick: disableCloseOnOutsideClick, active: active, transparent: transparentOverlay || hideProgress, blurred: blurredOverlay, className: overlayClassName, attributes: {
171
+ return (_jsx(Overlay, { onClose: onClose, onOpen: onOpen, disableCloseOnClick: disableCloseOnOutsideClick, active: active, transparent: transparentOverlay || hideProgress, blurred: blurredOverlay, className: overlayClassName, containerRef: containerRef, attributes: {
169
172
  onTouchStart: handleDragStart,
170
173
  }, children: ({ active }) => {
171
- const rootClassNames = classNames(s.root, className, paddingStyles?.classNames, active && s["--active"], dragging && s["--dragging"], overflow && s[`--overflow-${overflow}`], responsiveClassNames(s, "--position", position));
174
+ const rootClassNames = classNames(s.root, className, paddingStyles?.classNames, active && s["--active"], dragging && s["--dragging"], overflow && s[`--overflow-${overflow}`], containerRef && s["--contained"], responsiveClassNames(s, "--position", position));
172
175
  return (_jsx(Context.Provider, { value: value, children: _jsx("div", { ...attributes, style: {
173
176
  ...paddingStyles?.variables,
174
177
  ...responsiveVariables("--rs-modal-size", size),
@@ -1 +1 @@
1
- .root{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-medium);transition-property:transform,opacity;will-change:transform}.root:focus-visible{box-shadow:var(--rs-focus-shadow);outline:none}.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(100vw - 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(100vh - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:fixed;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(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;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(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;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:100%;opacity:0;overflow:auto;position:fixed;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(100vw - 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(100vh - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:fixed;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(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;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(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;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:100%;opacity:0;overflow:auto;position:fixed;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(100vw - 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(100vh - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:fixed;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(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;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(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;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:100%;opacity:0;overflow:auto;position:fixed;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(100vw - 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(100vh - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:fixed;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(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;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(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;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:100%;opacity:0;overflow:auto;position:fixed;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{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-medium);transition-property:transform,opacity;will-change:transform}[data-rs-keyboard] .root:focus{box-shadow:var(--rs-focus-shadow);outline:none}.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(100% - 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(100% - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:fixed;transform:translateY(100%);width:100%}.--position-bottom.--contained{position:absolute}.--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(100% - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(-100%);width:var(--rs-modal-size)}.--position-start.--contained{position:absolute}[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(100% - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(100%);width:var(--rs-modal-size)}.--position-end.--contained{position:absolute}[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:100%;opacity:0;overflow:auto;position:fixed;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen.--contained{position:absolute}.--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(100% - 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(100% - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:fixed;transform:translateY(100%);width:100%}.--position-bottom--m.--contained{position:absolute}.--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(100% - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(-100%);width:var(--rs-modal-size)}.--position-start--m.--contained{position:absolute}[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(100% - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(100%);width:var(--rs-modal-size)}.--position-end--m.--contained{position:absolute}[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:100%;opacity:0;overflow:auto;position:fixed;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--m.--contained{position:absolute}.--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(100% - 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(100% - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:fixed;transform:translateY(100%);width:100%}.--position-bottom--l.--contained{position:absolute}.--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(100% - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(-100%);width:var(--rs-modal-size)}.--position-start--l.--contained{position:absolute}[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(100% - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(100%);width:var(--rs-modal-size)}.--position-end--l.--contained{position:absolute}[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:100%;opacity:0;overflow:auto;position:fixed;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--l.--contained{position:absolute}.--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(100% - 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(100% - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:fixed;transform:translateY(100%);width:100%}.--position-bottom--xl.--contained{position:absolute}.--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(100% - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(-100%);width:var(--rs-modal-size)}.--position-start--xl.--contained{position:absolute}[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(100% - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(100%);width:var(--rs-modal-size)}.--position-end--xl.--contained{position:absolute}[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:100%;opacity:0;overflow:auto;position:fixed;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--xl.--contained{position:absolute}.--position-full-screen--xl.--active,[dir=rtl] .--position-full-screen--xl.--active{opacity:1;transform:translate(0)!important}}
@@ -34,4 +34,4 @@ export type Props = {
34
34
  attributes?: G.Attributes<"div"> & {
35
35
  ref?: React.RefObject<HTMLDivElement>;
36
36
  };
37
- } & Pick<OverlayProps, "onOpen" | "active">;
37
+ } & Pick<OverlayProps, "onOpen" | "active" | "containerRef">;
@@ -21,5 +21,6 @@ export declare const overflow: () => React.JSX.Element;
21
21
  export declare const composition: () => React.JSX.Element;
22
22
  export declare const overlay: () => React.JSX.Element;
23
23
  export declare const flags: () => React.JSX.Element;
24
+ export declare const containerRef: () => React.JSX.Element;
24
25
  export declare const edgeCases: () => React.JSX.Element;
25
26
  export declare const trapFocusEdgeCases: () => React.JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { Example } from "../../../utilities/storybook/index.js";
2
+ import { Example, Placeholder } from "../../../utilities/storybook/index.js";
3
3
  import Modal from "../index.js";
4
4
  import View from "../../View/index.js";
5
5
  import Button from "../../Button/index.js";
@@ -137,6 +137,33 @@ export const flags = () => {
137
137
  </Example.Item>
138
138
  </Example>);
139
139
  };
140
+ export const containerRef = () => {
141
+ const containerRef = React.useRef(null);
142
+ const containerRef2 = React.useRef(null);
143
+ const toggle = useToggle();
144
+ const toggle2 = useToggle();
145
+ return (<Example>
146
+ <Example.Item title={["in scrollable container", "scroll and then open"]}>
147
+ <View attributes={{ ref: containerRef2 }} borderRadius="medium" height="400px" overflow="auto" backgroundColor="neutral-faded" padding={4}>
148
+ <View gap={4} align="start">
149
+ <Button onClick={toggle2.activate}>Open modal</Button>
150
+ <View height="500px" backgroundColor="primary" width="500px" borderRadius="medium"/>
151
+ </View>
152
+ <Modal containerRef={containerRef2} active={toggle2.active} onClose={toggle2.deactivate} position="end">
153
+ <Placeholder />
154
+ </Modal>
155
+ </View>
156
+ </Example.Item>
157
+ <Example.Item title="in static container">
158
+ <View attributes={{ ref: containerRef }} borderRadius="medium" height="400px" overflow="hidden" backgroundColor="neutral-faded" padding={4}>
159
+ <Button onClick={toggle.activate}>Open modal</Button>
160
+ <Modal containerRef={containerRef} active={toggle.active} onClose={toggle.deactivate} position="end">
161
+ <Placeholder />
162
+ </Modal>
163
+ </View>
164
+ </Example.Item>
165
+ </Example>);
166
+ };
140
167
  export const edgeCases = () => {
141
168
  const menuModalToggle = useToggle();
142
169
  const scrollModalToggle = useToggle();