reshaped 3.7.0-canary.9 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -1
- package/dist/bundle.css +1 -1
- package/dist/bundle.d.ts +1 -2
- package/dist/bundle.js +11 -11
- package/dist/cjs/themes/_generator/tokens/color/utilities/generateColors.js +1 -1
- package/dist/cjs/themes/_generator/tokens/css.js +2 -2
- package/dist/cjs/themes/figma/theme.css +1 -1
- package/dist/cjs/themes/fragments/twitter/theme.css +1 -1
- package/dist/cjs/themes/reshaped/theme.css +1 -1
- package/dist/cjs/themes/slate/theme.css +1 -1
- package/dist/components/Accordion/Accordion.types.d.ts +2 -0
- package/dist/components/ActionBar/ActionBar.js +12 -4
- package/dist/components/ActionBar/ActionBar.module.css +1 -1
- package/dist/components/ActionBar/ActionBar.types.d.ts +4 -1
- package/dist/components/ActionBar/tests/ActionBar.stories.d.ts +19 -1
- package/dist/components/ActionBar/tests/ActionBar.stories.js +161 -3
- package/dist/components/Actionable/Actionable.js +3 -3
- package/dist/components/Actionable/Actionable.module.css +1 -1
- package/dist/components/Actionable/Actionable.types.d.ts +1 -0
- package/dist/components/Autocomplete/Autocomplete.js +66 -25
- package/dist/components/Autocomplete/Autocomplete.types.d.ts +2 -0
- package/dist/components/Autocomplete/tests/Autocomplete.stories.js +8 -8
- package/dist/components/Avatar/Avatar.js +4 -4
- package/dist/components/Badge/Badge.js +3 -3
- package/dist/components/Badge/Badge.module.css +1 -1
- package/dist/components/Badge/Badge.types.d.ts +4 -4
- package/dist/components/Badge/tests/Badge.stories.js +11 -0
- package/dist/components/Button/Button.module.css +1 -1
- package/dist/components/Calendar/Calendar.types.d.ts +1 -0
- package/dist/components/Calendar/Calendar.utils.d.ts +11 -0
- package/dist/components/Calendar/Calendar.utils.js +25 -0
- package/dist/components/Calendar/CalendarDate.js +6 -2
- package/dist/components/Calendar/CalendarMonth.js +9 -23
- package/dist/components/Calendar/tests/Calendar.stories.js +9 -2
- package/dist/components/Card/Card.d.ts +1 -1
- package/dist/components/Card/Card.js +9 -12
- package/dist/components/Card/Card.module.css +1 -1
- package/dist/components/Card/tests/Card.stories.d.ts +1 -1
- package/dist/components/Card/tests/Card.test.stories.d.ts +1 -1
- package/dist/components/Carousel/Carousel.js +3 -1
- package/dist/components/Carousel/Carousel.types.d.ts +1 -0
- package/dist/components/Carousel/CarouselControl.d.ts +1 -2
- package/dist/components/Carousel/CarouselControl.js +8 -7
- package/dist/components/Checkbox/Checkbox.module.css +1 -1
- package/dist/components/DropdownMenu/DropdownMenu.js +9 -6
- package/dist/components/FileUpload/FileUpload.js +5 -3
- package/dist/components/FileUpload/FileUpload.module.css +1 -1
- package/dist/components/FileUpload/FileUpload.types.d.ts +5 -1
- package/dist/components/FileUpload/tests/FileUpload.stories.d.ts +18 -2
- package/dist/components/FileUpload/tests/FileUpload.stories.js +102 -23
- package/dist/components/Flyout/Flyout.module.css +1 -1
- package/dist/components/Flyout/Flyout.types.d.ts +2 -1
- package/dist/components/Flyout/FlyoutContent.js +3 -3
- package/dist/components/Flyout/FlyoutControlled.js +7 -3
- package/dist/components/Flyout/FlyoutTrigger.js +4 -3
- package/dist/components/FormControl/FormControl.module.css +1 -1
- package/dist/components/FormControl/tests/FormControl.stories.d.ts +4 -0
- package/dist/components/FormControl/tests/FormControl.stories.js +18 -0
- package/dist/components/Grid/Grid.js +5 -11
- package/dist/components/Grid/Grid.types.d.ts +2 -0
- package/dist/components/Grid/tests/Grid.stories.js +12 -1
- package/dist/components/HiddenVisually/HiddenVisually.module.css +1 -1
- package/dist/components/Icon/Icon.js +4 -4
- package/dist/components/Image/Image.js +4 -15
- package/dist/components/MenuItem/MenuItem.js +2 -2
- package/dist/components/MenuItem/MenuItem.module.css +1 -1
- package/dist/components/MenuItem/MenuItem.types.d.ts +1 -0
- package/dist/components/Modal/Modal.js +4 -4
- package/dist/components/Modal/Modal.module.css +1 -1
- package/dist/components/Modal/tests/Modal.test.stories.js +2 -2
- package/dist/components/Overlay/tests/Overlay.test.stories.js +4 -2
- package/dist/components/PinField/PinField.module.css +1 -1
- package/dist/components/Popover/Popover.js +5 -5
- package/dist/components/Popover/Popover.module.css +1 -1
- package/dist/components/Popover/Popover.types.d.ts +1 -1
- package/dist/components/Popover/tests/Popover.stories.d.ts +1 -0
- package/dist/components/Popover/tests/Popover.stories.js +24 -4
- package/dist/components/ProgressIndicator/ProgressIndicator.module.css +1 -1
- package/dist/components/Reshaped/Reshaped.css +1 -1
- package/dist/components/Resizable/Resizable.module.css +1 -1
- package/dist/components/ScrollArea/ScrollArea.js +5 -7
- package/dist/components/ScrollArea/ScrollArea.module.css +1 -1
- package/dist/components/Select/Select.module.css +1 -1
- package/dist/components/Slider/Slider.module.css +1 -1
- package/dist/components/Switch/Switch.js +1 -1
- package/dist/components/Switch/Switch.module.css +1 -1
- package/dist/components/Table/Table.js +4 -7
- package/dist/components/Tabs/TabsItem.js +2 -1
- package/dist/components/Tabs/TabsList.js +2 -2
- package/dist/components/Text/Text.js +4 -4
- package/dist/components/TextField/TextField.module.css +1 -1
- package/dist/components/TextField/tests/TextField.stories.js +3 -1
- package/dist/components/Theme/Theme.js +7 -2
- package/dist/components/Theme/Theme.types.d.ts +12 -13
- package/dist/components/Theme/index.d.ts +1 -1
- package/dist/components/Theme/tests/{Theme.test.stories.d.ts → Theme.stories.d.ts} +1 -0
- package/dist/components/Theme/tests/{Theme.test.stories.js → Theme.stories.js} +39 -1
- package/dist/components/Theme/useTheme.d.ts +6 -6
- package/dist/components/View/View.js +43 -60
- package/dist/components/View/View.module.css +1 -1
- package/dist/components/View/View.types.d.ts +7 -0
- package/dist/components/View/tests/View.stories.d.ts +4 -0
- package/dist/components/View/tests/View.stories.js +65 -1
- package/dist/components/_private/Portal/Portal.js +9 -1
- package/dist/config/tailwind.d.ts +1 -1
- package/dist/hooks/_private/useIsDismissible.js +11 -8
- package/dist/index.d.ts +1 -2
- package/dist/styles/mixin.d.ts +6 -0
- package/dist/styles/mixin.js +71 -0
- package/dist/styles/resolvers/align/align.css +1 -0
- package/dist/styles/resolvers/align/index.d.ts +4 -0
- package/dist/styles/resolvers/align/index.js +10 -0
- package/dist/styles/resolvers/aspectRatio/aspectRatio.css +1 -0
- package/dist/styles/resolvers/aspectRatio/index.d.ts +4 -0
- package/dist/styles/resolvers/aspectRatio/index.js +10 -0
- package/dist/styles/resolvers/bleed/bleed.module.css +1 -0
- package/dist/styles/resolvers/bleed/index.d.ts +3 -0
- package/dist/styles/{bleed → resolvers/bleed}/index.js +4 -4
- package/dist/styles/resolvers/border/border.module.css +1 -0
- package/dist/styles/resolvers/border/borderWidth.css +1 -0
- package/dist/styles/resolvers/border/index.d.ts +11 -0
- package/dist/styles/resolvers/border/index.js +74 -0
- package/dist/styles/resolvers/height/index.d.ts +3 -0
- package/dist/styles/{height → resolvers/height}/index.js +4 -4
- package/dist/styles/resolvers/inset/index.d.ts +10 -0
- package/dist/styles/resolvers/inset/index.js +38 -0
- package/dist/styles/resolvers/inset/inset.css +1 -0
- package/dist/styles/resolvers/justify/index.d.ts +4 -0
- package/dist/styles/resolvers/justify/index.js +10 -0
- package/dist/styles/resolvers/justify/justify.css +1 -0
- package/dist/styles/resolvers/margin/index.d.ts +10 -0
- package/dist/styles/resolvers/margin/index.js +38 -0
- package/dist/styles/resolvers/margin/margin.css +1 -0
- package/dist/styles/resolvers/maxHeight/index.d.ts +3 -0
- package/dist/styles/{maxHeight → resolvers/maxHeight}/index.js +4 -4
- package/dist/styles/resolvers/maxHeight/maxHeight.module.css +1 -0
- package/dist/styles/resolvers/maxWidth/index.d.ts +3 -0
- package/dist/styles/{maxWidth → resolvers/maxWidth}/index.js +4 -4
- package/dist/styles/resolvers/maxWidth/maxWidth.module.css +1 -0
- package/dist/styles/resolvers/minHeight/index.d.ts +3 -0
- package/dist/styles/{minHeight → resolvers/minHeight}/index.js +4 -4
- package/dist/styles/resolvers/minHeight/minHeight.module.css +1 -0
- package/dist/styles/resolvers/minWidth/index.d.ts +3 -0
- package/dist/styles/{minWidth → resolvers/minWidth}/index.js +4 -4
- package/dist/styles/resolvers/minWidth/minWidth.module.css +1 -0
- package/dist/styles/resolvers/padding/index.d.ts +10 -0
- package/dist/styles/resolvers/padding/index.js +38 -0
- package/dist/styles/resolvers/padding/padding.css +1 -0
- package/dist/styles/resolvers/position/index.d.ts +4 -0
- package/dist/styles/resolvers/position/index.js +9 -0
- package/dist/styles/resolvers/position/position.css +1 -0
- package/dist/styles/resolvers/radius/index.d.ts +3 -0
- package/dist/styles/resolvers/radius/index.js +10 -0
- package/dist/styles/resolvers/textAlign/index.d.ts +4 -0
- package/dist/styles/resolvers/textAlign/index.js +10 -0
- package/dist/styles/resolvers/textAlign/textAlign.css +1 -0
- package/dist/styles/resolvers/width/index.d.ts +3 -0
- package/dist/styles/{width → resolvers/width}/index.js +4 -4
- package/dist/styles/resolvers/width/width.module.css +1 -0
- package/dist/styles/types.d.ts +63 -16
- package/dist/themes/_generator/tokens/color/utilities/generateColors.js +1 -1
- package/dist/themes/_generator/tokens/css.js +2 -2
- package/dist/themes/figma/theme.css +1 -1
- package/dist/themes/fragments/twitter/theme.css +1 -1
- package/dist/themes/reshaped/theme.css +1 -1
- package/dist/themes/slate/theme.css +1 -1
- package/dist/types/global.d.ts +5 -0
- package/dist/utilities/a11y/tests/TrapFocus.stories.js +4 -4
- package/package.json +24 -24
- package/dist/components/ActionBar/tests/ActionBar.test.stories.d.ts +0 -15
- package/dist/components/ActionBar/tests/ActionBar.test.stories.js +0 -26
- package/dist/components/FileUpload/tests/FileUpload.test.stories.d.ts +0 -21
- package/dist/components/FileUpload/tests/FileUpload.test.stories.js +0 -52
- package/dist/styles/align/align.css +0 -1
- package/dist/styles/align/index.d.ts +0 -4
- package/dist/styles/align/index.js +0 -10
- package/dist/styles/aspectRatio/aspectRatio.css +0 -1
- package/dist/styles/aspectRatio/index.d.ts +0 -4
- package/dist/styles/aspectRatio/index.js +0 -9
- package/dist/styles/bleed/bleed.module.css +0 -1
- package/dist/styles/bleed/index.d.ts +0 -3
- package/dist/styles/border/border.module.css +0 -1
- package/dist/styles/border/index.d.ts +0 -3
- package/dist/styles/border/index.js +0 -10
- package/dist/styles/height/index.d.ts +0 -3
- package/dist/styles/inset/index.d.ts +0 -5
- package/dist/styles/inset/index.js +0 -11
- package/dist/styles/inset/inset.css +0 -1
- package/dist/styles/justify/index.d.ts +0 -4
- package/dist/styles/justify/index.js +0 -10
- package/dist/styles/justify/justify.css +0 -1
- package/dist/styles/maxHeight/index.d.ts +0 -3
- package/dist/styles/maxHeight/maxHeight.module.css +0 -1
- package/dist/styles/maxWidth/index.d.ts +0 -3
- package/dist/styles/maxWidth/maxWidth.module.css +0 -1
- package/dist/styles/minHeight/index.d.ts +0 -3
- package/dist/styles/minHeight/minHeight.module.css +0 -1
- package/dist/styles/minWidth/index.d.ts +0 -3
- package/dist/styles/minWidth/minWidth.module.css +0 -1
- package/dist/styles/padding/index.d.ts +0 -4
- package/dist/styles/padding/index.js +0 -9
- package/dist/styles/padding/padding.css +0 -1
- package/dist/styles/position/index.d.ts +0 -4
- package/dist/styles/position/index.js +0 -9
- package/dist/styles/position/position.css +0 -1
- package/dist/styles/radius/index.d.ts +0 -3
- package/dist/styles/radius/index.js +0 -10
- package/dist/styles/textAlign/index.d.ts +0 -4
- package/dist/styles/textAlign/index.js +0 -10
- package/dist/styles/textAlign/textAlign.css +0 -1
- package/dist/styles/width/index.d.ts +0 -3
- package/dist/styles/width/width.module.css +0 -1
- /package/dist/styles/{height → resolvers/height}/height.module.css +0 -0
- /package/dist/styles/{radius → resolvers/radius}/radius.module.css +0 -0
@@ -15,7 +15,7 @@ import cooldown from "./utilities/cooldown.js";
|
|
15
15
|
import { Provider, useFlyoutTriggerContext, useFlyoutContext, useFlyoutContentContext, } from "./Flyout.context.js";
|
16
16
|
import useHandlerRef from "../../hooks/useHandlerRef.js";
|
17
17
|
const FlyoutControlled = (props) => {
|
18
|
-
const { triggerType = "click", groupTimeouts, onOpen, onClose, children, disabled, forcePosition, trapFocusMode = "dialog", width, disableHideAnimation, disableContentHover, disableCloseOnOutsideClick, originCoordinates, contentGap = 2, contentShift, contentClassName, contentAttributes, position: passedPosition, active: passedActive, id: passedId, instanceRef, containerRef, initialFocusRef, } = props;
|
18
|
+
const { triggerType = "click", groupTimeouts, onOpen, onClose, children, disabled, forcePosition, trapFocusMode = "dialog", width, disableHideAnimation, disableContentHover, disableCloseOnOutsideClick, autoFocus = true, originCoordinates, contentGap = 2, contentShift, contentClassName, contentAttributes, position: passedPosition, active: passedActive, id: passedId, instanceRef, containerRef, initialFocusRef, } = props;
|
19
19
|
const fallbackPositions = props.fallbackPositions === false || forcePosition ? [] : props.fallbackPositions;
|
20
20
|
const onOpenRef = useHandlerRef(onOpen);
|
21
21
|
const onCloseRef = useHandlerRef(onClose);
|
@@ -233,16 +233,19 @@ const FlyoutControlled = (props) => {
|
|
233
233
|
return;
|
234
234
|
if (trapFocusMode === false)
|
235
235
|
return;
|
236
|
+
const initialFocusEl = (!autoFocus
|
237
|
+
? flyoutElRef.current.querySelector("[role][tabindex='-1']")
|
238
|
+
: initialFocusRef?.current);
|
236
239
|
trapFocusRef.current = new TrapFocus();
|
237
240
|
trapFocusRef.current.trap(flyoutElRef.current, {
|
238
241
|
mode: trapFocusMode,
|
239
|
-
initialFocusEl
|
242
|
+
initialFocusEl,
|
240
243
|
includeTrigger: triggerType === "hover" && trapFocusMode !== "dialog" && !isSubmenu,
|
241
244
|
onRelease: () => {
|
242
245
|
handleClose({});
|
243
246
|
},
|
244
247
|
});
|
245
|
-
}, [status, triggerType, trapFocusMode]);
|
248
|
+
}, [status, triggerType, trapFocusMode, autoFocus]);
|
246
249
|
React.useEffect(() => {
|
247
250
|
if (!disableHideAnimation && status !== "hidden")
|
248
251
|
return;
|
@@ -323,6 +326,7 @@ const FlyoutControlled = (props) => {
|
|
323
326
|
contentAttributes,
|
324
327
|
containerRef,
|
325
328
|
disableContentHover,
|
329
|
+
autoFocus,
|
326
330
|
isSubmenu,
|
327
331
|
}, children: children }));
|
328
332
|
};
|
@@ -4,6 +4,7 @@ import { useFlyoutContext, TriggerProvider } from "./Flyout.context.js";
|
|
4
4
|
const FlyoutTrigger = (props) => {
|
5
5
|
const { children } = props;
|
6
6
|
const { id, triggerElRef, triggerType, flyout, handleFocus, handleBlur, handleMouseEnter, handleMouseLeave, handleMouseDown, handleTouchStart, handleClick, trapFocusMode, isSubmenu, } = useFlyoutContext();
|
7
|
+
const active = flyout.status !== "idle";
|
7
8
|
const childrenAttributes = {
|
8
9
|
ref: triggerElRef,
|
9
10
|
};
|
@@ -20,7 +21,7 @@ const FlyoutTrigger = (props) => {
|
|
20
21
|
if ((triggerType === "hover" && !isSubmenu) || triggerType === "focus") {
|
21
22
|
childrenAttributes.onFocus = handleFocus;
|
22
23
|
childrenAttributes.onBlur = handleBlur;
|
23
|
-
childrenAttributes["aria-describedby"] = id;
|
24
|
+
childrenAttributes["aria-describedby"] = active ? id : undefined;
|
24
25
|
}
|
25
26
|
if (triggerType === "click" || triggerType === "focus" || trapFocusMode === "action-menu") {
|
26
27
|
if (trapFocusMode === "dialog") {
|
@@ -33,8 +34,8 @@ const FlyoutTrigger = (props) => {
|
|
33
34
|
else {
|
34
35
|
childrenAttributes["aria-haspopup"] = "menu";
|
35
36
|
}
|
36
|
-
childrenAttributes["aria-expanded"] =
|
37
|
-
childrenAttributes["aria-controls"] =
|
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}
|
@@ -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
|
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
|
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,
|
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
|
-
...
|
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{
|
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
|
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
|
9
|
-
const rootClassName = classNames(s.root, className,
|
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, ...
|
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
|
15
|
-
const
|
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
|
-
...
|
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
|
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
|
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
|
-
...
|
176
|
+
...mixinStyles.variables,
|
177
177
|
...responsiveVariables("--rs-modal-size", size),
|
178
178
|
"--rs-modal-drag": Math.abs(dragDistance) < DRAG_THRESHOLD
|
179
179
|
? "0px"
|
@@ -1 +1 @@
|
|
1
|
-
.root{--rs-modal-container-width:100vw;background:var(--rs-color-background-elevation-overlay);box-shadow:var(--rs-shadow-overlay);color:var(--rs-color-foreground-neutral);transition:var(--rs-easing-accelerate) var(--rs-duration-fast);transition-property:transform,opacity;will-change:transform}[data-rs-keyboard] .root:focus{box-shadow:var(--rs-focus-shadow);outline:none}.root.--contained{--rs-modal-container-width:100%}.root{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);--rs-modal-size-m:var(--rs-modal-size-s);--rs-modal-size-l:var(--rs-modal-size-m);--rs-modal-size-xl:var(--rs-modal-size-l);--rs-modal-size:var(--rs-modal-size-s)}.--position-center{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center.--active,[dir=rtl] .--position-center.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom.--active,[dir=rtl] .--position-bottom.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start{transform:translate(100%)}.--position-start.--active,[dir=rtl] .--position-start.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end{transform:translate(-100%)}.--position-end.--active,[dir=rtl] .--position-end.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen.--active,[dir=rtl] .--position-full-screen.--active{opacity:1;transform:translate(0)!important}.--active,[dir=rtl] .--active{transition-timing-function:var(--rs-easing-decelerate)}.--dragging{transition:none}.--overflow-visible{overflow:visible}@media (--rs-viewport-m ){.root{--rs-modal-size:var(--rs-modal-size-m)}.--position-center--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--m.--active,[dir=rtl] .--position-center--m.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--m{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--m.--active,[dir=rtl] .--position-bottom--m.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--m{transform:translate(100%)}.--position-start--m.--active,[dir=rtl] .--position-start--m.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--m{transform:translate(-100%)}.--position-end--m.--active,[dir=rtl] .--position-end--m.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--m{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--m.--active,[dir=rtl] .--position-full-screen--m.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-l ){.root{--rs-modal-size:var(--rs-modal-size-l)}.--position-center--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--l.--active,[dir=rtl] .--position-center--l.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--l{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--l.--active,[dir=rtl] .--position-bottom--l.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--l{transform:translate(100%)}.--position-start--l.--active,[dir=rtl] .--position-start--l.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--l{transform:translate(-100%)}.--position-end--l.--active,[dir=rtl] .--position-end--l.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--l{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--l.--active,[dir=rtl] .--position-full-screen--l.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-xl ){.root{--rs-modal-size:var(--rs-modal-size-xl)}.--position-center--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--xl.--active,[dir=rtl] .--position-center--xl.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--xl{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--xl.--active,[dir=rtl] .--position-bottom--xl.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--xl{transform:translate(100%)}.--position-start--xl.--active,[dir=rtl] .--position-start--xl.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--xl{transform:translate(-100%)}.--position-end--xl.--active,[dir=rtl] .--position-end--xl.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--xl{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--xl.--active,[dir=rtl] .--position-full-screen--xl.--active{opacity:1;transform:translate(0)!important}}
|
1
|
+
.root{--rs-modal-container-width:100vw;background:var(--rs-color-background-elevation-overlay);box-shadow:var(--rs-shadow-overlay);color:var(--rs-color-foreground-neutral);outline:none;transition:var(--rs-easing-accelerate) var(--rs-duration-fast);transition-property:transform,opacity;will-change:transform}[data-rs-keyboard] .root:focus{box-shadow:var(--rs-focus-shadow)}.root.--contained{--rs-modal-container-width:100%}.root{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);--rs-modal-size-m:var(--rs-modal-size-s);--rs-modal-size-l:var(--rs-modal-size-m);--rs-modal-size-xl:var(--rs-modal-size-l);--rs-modal-size:var(--rs-modal-size-s)}.--position-center{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center.--active,[dir=rtl] .--position-center.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom.--active,[dir=rtl] .--position-bottom.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start{transform:translate(100%)}.--position-start.--active,[dir=rtl] .--position-start.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end{transform:translate(-100%)}.--position-end.--active,[dir=rtl] .--position-end.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen.--active,[dir=rtl] .--position-full-screen.--active{opacity:1;transform:translate(0)!important}.--active,[dir=rtl] .--active{transition-timing-function:var(--rs-easing-decelerate)}.--dragging{transition:none}.--overflow-visible{overflow:visible}@media (--rs-viewport-m ){.root{--rs-modal-size:var(--rs-modal-size-m)}.--position-center--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--m.--active,[dir=rtl] .--position-center--m.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--m{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--m.--active,[dir=rtl] .--position-bottom--m.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--m{transform:translate(100%)}.--position-start--m.--active,[dir=rtl] .--position-start--m.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--m{transform:translate(-100%)}.--position-end--m.--active,[dir=rtl] .--position-end--m.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--m{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--m.--active,[dir=rtl] .--position-full-screen--m.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-l ){.root{--rs-modal-size:var(--rs-modal-size-l)}.--position-center--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--l.--active,[dir=rtl] .--position-center--l.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--l{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--l.--active,[dir=rtl] .--position-bottom--l.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--l{transform:translate(100%)}.--position-start--l.--active,[dir=rtl] .--position-start--l.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--l{transform:translate(-100%)}.--position-end--l.--active,[dir=rtl] .--position-end--l.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--l{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--l.--active,[dir=rtl] .--position-full-screen--l.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-xl ){.root{--rs-modal-size:var(--rs-modal-size-xl)}.--position-center--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--xl.--active,[dir=rtl] .--position-center--xl.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--xl{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--xl.--active,[dir=rtl] .--position-bottom--xl.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--xl{transform:translate(100%)}.--position-start--xl.--active,[dir=rtl] .--position-start--xl.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--xl{transform:translate(-100%)}.--position-end--xl.--active,[dir=rtl] .--position-end--xl.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--xl{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--xl.--active,[dir=rtl] .--position-full-screen--xl.--active{opacity:1;transform:translate(0)!important}}
|
@@ -87,7 +87,7 @@ export const handlers = {
|
|
87
87
|
await userEvent.click(trigger);
|
88
88
|
await sleep(100);
|
89
89
|
// Close by pressing Escape
|
90
|
-
await userEvent.keyboard("{Escape
|
90
|
+
await userEvent.keyboard("{Escape}");
|
91
91
|
await waitFor(() => {
|
92
92
|
expect(args.handleClose).toHaveBeenCalledTimes(2);
|
93
93
|
expect(args.handleClose).toHaveBeenCalledWith({ reason: "escape-key" });
|
@@ -112,7 +112,7 @@ export const disableCloseOnClick = {
|
|
112
112
|
const overlay = canvas.getByText("Content");
|
113
113
|
await userEvent.click(overlay);
|
114
114
|
expect(args.handleClose).toHaveBeenCalledTimes(0);
|
115
|
-
await userEvent.keyboard("{Escape
|
115
|
+
await userEvent.keyboard("{Escape}");
|
116
116
|
expect(args.handleClose).toHaveBeenCalledTimes(1);
|
117
117
|
},
|
118
118
|
};
|
@@ -87,7 +87,7 @@ export const handlers = {
|
|
87
87
|
// TODO: Fails CLI tests in Storybook without a timeout
|
88
88
|
await sleep(100);
|
89
89
|
// Close by pressing Escape
|
90
|
-
await userEvent.keyboard("{Escape
|
90
|
+
await userEvent.keyboard("{Escape}");
|
91
91
|
expect(args.handleClose).toHaveBeenCalledTimes(2);
|
92
92
|
expect(args.handleClose).toHaveBeenCalledWith({ reason: "escape-key" });
|
93
93
|
await waitFor(() => {
|
@@ -110,8 +110,10 @@ export const disableCloseOnClick = {
|
|
110
110
|
const canvas = within(canvasElement.ownerDocument.body);
|
111
111
|
const overlay = canvas.getByText("Content");
|
112
112
|
await userEvent.click(overlay);
|
113
|
+
// TODO: Fails CLI tests in Storybook without a timeout
|
114
|
+
await sleep(100);
|
113
115
|
expect(args.handleClose).toHaveBeenCalledTimes(0);
|
114
|
-
await userEvent.keyboard("{Escape
|
116
|
+
await userEvent.keyboard("{Escape}");
|
115
117
|
expect(args.handleClose).toHaveBeenCalledTimes(1);
|
116
118
|
},
|
117
119
|
};
|
@@ -1 +1 @@
|
|
1
|
-
.root{display:inline-flex}.input,.root{vertical-align:top}.input{background:transparent;border:transparent;caret-color:transparent;color:transparent;font-size:16px;inset:0;outline:none;padding-left:100%;position:absolute}.item{box-sizing:border-box;cursor:text}.item--focused{border-color:var(--rs-color-border-primary);box-shadow:0 0 0 1px var(--rs-color-border-primary)}.item--focused:empty:before{animation:rs-pin-field-caret 1s ease-out infinite;background:var(--rs-color-foreground-neutral);border-radius:
|
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
|
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
|
11
|
-
const
|
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: { ...
|
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:
|
1
|
+
.content{max-width:360px}.content--variant-elevated{background:var(--rs-color-background-elevation-overlay);border-radius:var(--rs-radius-medium);box-shadow:var(--rs-shadow-border-faded),var(--rs-shadow-overlay);color:var(--rs-color-foreground-neutral);min-width:220px;overflow:hidden}.content--variant-elevated.content--elevation-raised{box-shadow:var(--rs-shadow-border-faded),var(--rs-shadow-raised)}.content.content--has-width{max-width:none;min-width:0}@media (--rs-viewport-s ){.content{max-width:none}}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import type React from "react";
|
2
2
|
import type { FlyoutProps, FlyoutInstance } from "../Flyout";
|
3
3
|
export type Instance = FlyoutInstance;
|
4
|
-
export type Props = Pick<FlyoutProps, "id" | "position" | "forcePosition" | "fallbackPositions" | "onOpen" | "onClose" | "width" | "trapFocusMode" | "active" | "defaultActive" | "contentGap" | "contentShift" | "instanceRef" | "triggerType" | "disableHideAnimation" | "disableContentHover" | "disableCloseOnOutsideClick" | "containerRef" | "initialFocusRef" | "originCoordinates"> & {
|
4
|
+
export type Props = Pick<FlyoutProps, "id" | "position" | "forcePosition" | "fallbackPositions" | "onOpen" | "onClose" | "width" | "trapFocusMode" | "active" | "defaultActive" | "contentGap" | "contentShift" | "instanceRef" | "triggerType" | "disableHideAnimation" | "disableContentHover" | "disableCloseOnOutsideClick" | "autoFocus" | "containerRef" | "initialFocusRef" | "originCoordinates"> & {
|
5
5
|
children?: React.ReactNode;
|
6
6
|
padding?: number;
|
7
7
|
elevation?: "raised" | "overlay";
|
@@ -49,6 +49,7 @@ export declare const activeFalse: StoryObj<{
|
|
49
49
|
export declare const dismissible: StoryObj<{
|
50
50
|
handleClose: ReturnType<typeof fn>;
|
51
51
|
}>;
|
52
|
+
export declare const autoFocus: StoryObj;
|
52
53
|
export declare const className: StoryObj;
|
53
54
|
export declare const testNested: {
|
54
55
|
name: string;
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { useState } from "react";
|
1
|
+
import { useState, useId } from "react";
|
2
2
|
import { expect, fn, userEvent, within, waitFor } from "storybook/test";
|
3
3
|
import { Example } from "../../../utilities/storybook/index.js";
|
4
4
|
import { sleep } from "../../../utilities/helpers.js";
|
@@ -19,14 +19,18 @@ export default {
|
|
19
19
|
};
|
20
20
|
const Demo = (props) => {
|
21
21
|
const { position, ...rest } = props;
|
22
|
+
const id = useId();
|
22
23
|
return (<Popover position={position} {...rest}>
|
23
24
|
<Popover.Trigger>
|
24
25
|
{(attributes) => <Button attributes={attributes}>{position || "Open"}</Button>}
|
25
26
|
</Popover.Trigger>
|
26
|
-
<Popover.Content>
|
27
|
+
<Popover.Content attributes={{ "aria-labelledby": id }}>
|
27
28
|
<View gap={2} align="start">
|
28
|
-
Popover content
|
29
|
-
<
|
29
|
+
<span id={id}>Popover content</span>
|
30
|
+
<View direction="row" gap={2}>
|
31
|
+
<Button onClick={() => { }}>Action 1</Button>
|
32
|
+
<Button onClick={() => { }}>Action 2</Button>
|
33
|
+
</View>
|
30
34
|
</View>
|
31
35
|
</Popover.Content>
|
32
36
|
</Popover>);
|
@@ -203,6 +207,22 @@ export const dismissible = {
|
|
203
207
|
await userEvent.click(trigger);
|
204
208
|
},
|
205
209
|
};
|
210
|
+
export const autoFocus = {
|
211
|
+
name: "autoFocus",
|
212
|
+
render: () => (<Example>
|
213
|
+
<Example.Item title="autoFocus=false">
|
214
|
+
<Demo autoFocus={false}/>
|
215
|
+
</Example.Item>
|
216
|
+
</Example>),
|
217
|
+
play: async ({ canvasElement }) => {
|
218
|
+
const canvas = within(canvasElement.ownerDocument.body);
|
219
|
+
const trigger = canvas.getAllByRole("button")[0];
|
220
|
+
await userEvent.click(trigger);
|
221
|
+
await waitFor(() => {
|
222
|
+
expect(document.activeElement).toHaveRole("dialog");
|
223
|
+
});
|
224
|
+
},
|
225
|
+
};
|
206
226
|
export const className = {
|
207
227
|
name: "className, attributes",
|
208
228
|
render: () => (<div data-testid="root">
|
@@ -1 +1 @@
|
|
1
|
-
.root{line-height:0}.container{display:inline-flex;position:relative;vertical-align:top}.container:after,.container:before{content:"";inset-inline-start:calc(var(--rs-unit-x4) * -1);opacity:0;position:absolute}.container:after,.container:before,.item{background:var(--rs-color-background-neutral);border-radius:
|
1
|
+
.root{line-height:0}.container{display:inline-flex;position:relative;vertical-align:top}.container:after,.container:before{content:"";inset-inline-start:calc(var(--rs-unit-x4) * -1);opacity:0;position:absolute}.container:after,.container:before,.item{background:var(--rs-color-background-neutral);border-radius:var(--rs-radius-circular);height:var(--rs-unit-x2);width:var(--rs-unit-x2)}.item{margin-inline-start:var(--rs-unit-x2)}.item:first-child{margin-inline-start:0}.item.item--active{background:var(--rs-color-background-primary);transform:scale(1.2)}.item.item--variant-secondary{opacity:.6}.item.item--variant-tertiary{opacity:.3}.item.item--variant-hidden{opacity:0}.--color-media .container:after,.--color-media .container:before,.--color-media .item{background:var(--rs-color-white)}.--color-media .item{opacity:.6}.--color-media .item.item--active{opacity:1}.--color-media .item.item--variant-secondary{opacity:.3}.--color-media .item.item--variant-tertiary{opacity:.1}.--color-media .item.item--variant-hidden{opacity:0}.--shift-start .container,[dir=rtl] .--shift-end .container{transform:translateX(var(--rs-unit-x4))}.--shift-end .container,[dir=rtl] .--shift-start .container{transform:translateX(calc(var(--rs-unit-x4) * -1))}.--shift-end .container:after,.--shift-start .container:before{opacity:.3}.--shift-end.--color-media .container:after,.--shift-start.--color-media .container:before{opacity:.1}.--shift-start .container:before{inset-inline-end:auto;inset-inline-start:calc(var(--rs-unit-x4) * -1)}.--shift-end .container:after{inset-inline-end:calc(var(--rs-unit-x4) * -1);inset-inline-start:auto}.--animated .container,.--animated .container:after,.--animated .container:before,.--animated .item{transition:var(--rs-duration-slow) var(--rs-easing-decelerate);transition-property:transform,opacity,background-color}
|
@@ -1 +1 @@
|
|
1
|
-
@layer rs.reset{[data-rs-theme] blockquote,[data-rs-theme] body,[data-rs-theme] dd,[data-rs-theme] dl,[data-rs-theme] figcaption,[data-rs-theme] figure,[data-rs-theme] h1,[data-rs-theme] h2,[data-rs-theme] h3,[data-rs-theme] h4,[data-rs-theme] h5,[data-rs-theme] h6,[data-rs-theme] li,[data-rs-theme] ol,[data-rs-theme] p,[data-rs-theme] ul{margin:0;padding:0}[data-rs-theme] ol[class],[data-rs-theme] ul[class]{list-style:none}[data-rs-theme] textarea{resize:vertical}[data-rs-theme] table{border-collapse:collapse;border-spacing:0}[data-rs-theme] fieldset{border:0;margin:0;padding:0}[data-rs-theme] img{display:block;max-width:100%}[data-rs-theme] button,[data-rs-theme] input,[data-rs-theme] select,[data-rs-theme] textarea{font:inherit}[data-rs-theme] option{background:var(--rs-color-background-elevation-base)}[data-rs-theme] label{cursor:pointer}[data-rs-theme] input::placeholder,[data-rs-theme] textarea::placeholder{color:var(--rs-color-foreground-
|
1
|
+
@layer rs.reset{[data-rs-theme]{--rs-radius-circular:9999px;--rs-shadow-border-faded:0px 0px 0px 1px var(--rs-color-border-neutral-faded)}[data-rs-theme] blockquote,[data-rs-theme] body,[data-rs-theme] dd,[data-rs-theme] dl,[data-rs-theme] figcaption,[data-rs-theme] figure,[data-rs-theme] h1,[data-rs-theme] h2,[data-rs-theme] h3,[data-rs-theme] h4,[data-rs-theme] h5,[data-rs-theme] h6,[data-rs-theme] li,[data-rs-theme] ol,[data-rs-theme] p,[data-rs-theme] ul{margin:0;padding:0}[data-rs-theme] ol[class],[data-rs-theme] ul[class]{list-style:none}[data-rs-theme] textarea{resize:vertical}[data-rs-theme] table{border-collapse:collapse;border-spacing:0}[data-rs-theme] fieldset{border:0;margin:0;padding:0}[data-rs-theme] img{display:block;max-width:100%}[data-rs-theme] button,[data-rs-theme] input,[data-rs-theme] select,[data-rs-theme] textarea{font:inherit}[data-rs-theme] option{background:var(--rs-color-background-elevation-base)}[data-rs-theme] label{cursor:pointer}[data-rs-theme] input::placeholder,[data-rs-theme] textarea::placeholder{color:var(--rs-color-foreground-disabled)}html[data-rs-theme]{-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;font-size:100%;text-rendering:optimizelegibility;touch-action:manipulation}[data-rs-theme] *{box-sizing:border-box}[data-rs-theme] body,html[data-rs-theme]{background:var(--rs-color-background-page);color:var(--rs-color-foreground-neutral);height:100%;scroll-behavior:smooth}}[data-rs-theme] body,[data-rs-theme]:not(html){font-family:var(--rs-font-family-body);font-size:var(--rs-font-size-body-3);font-weight:var(--rs-font-weight-regular);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}[data-rs-color-mode=light]{color-scheme:light}[data-rs-color-mode=dark]{color-scheme:dark}@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}[data-rs-no-transition] *,[data-rs-no-transition] :after,[data-rs-no-transition] :before{transition:none!important}
|
@@ -1 +1 @@
|
|
1
|
-
.root{isolation:isolate}.item{--rs-resizable-default-size:none;--rs-resizable-min-size:0;--rs-resizable-max-size:100%;flex-grow:100;max-width:var(--rs-resizable-default-size);min-width:var(--rs-resizable-default-size);overflow:hidden}.handle{flex-shrink:0;position:relative;z-index:var(--rs-z-index-relative)}.handle:after,.handle:before{border-radius:
|
1
|
+
.root{isolation:isolate}.item{--rs-resizable-default-size:none;--rs-resizable-min-size:0;--rs-resizable-max-size:100%;flex-grow:100;max-width:var(--rs-resizable-default-size);min-width:var(--rs-resizable-default-size);overflow:hidden}.handle{flex-shrink:0;position:relative;z-index:var(--rs-z-index-relative)}.handle:after,.handle:before{border-radius:var(--rs-radius-circular);content:"";position:absolute}.handle:after{transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,background-color}.--variant-bordered .handle:after{background:var(--rs-color-border-neutral-faded)}.--variant-bordered .handle--dragging:after,.--variant-bordered .handle:hover:after,.--variant-borderless .handle:after,[data-rs-keyboard] .--variant-bordered .handle:focus:after{background:var(--rs-color-border-neutral)}.--variant-borderless .handle:after{opacity:0}.--variant-borderless .handle--dragging:after,.--variant-borderless .handle:hover:after,[data-rs-keyboard] .--variant-borderless .handle:focus:after{opacity:.6}body:has(.handle--dragging) .--variant-borderless .handle:not(.handle--dragging){opacity:0}body:has(.handle--dragging) .--variant-bordered .handle:not(.handle--dragging):after{background:var(--rs-color-border-neutral-faded)}body:has(.--direction-row>.handle--dragging){cursor:ew-resize}body:has(.--direction-column>.handle--dragging){cursor:ns-resize}.--direction-row>.handle{cursor:ew-resize}.--direction-row>.handle:after,.--direction-row>.handle:before{inset-block:0;inset-inline-start:50%;transform:translateX(-50%)}.--direction-row>.handle:before{width:var(--rs-unit-x6)}.--variant-borderless.--direction-row>.handle:after{width:var(--rs-unit-x1)}.--variant-bordered.--direction-row>.handle:after{width:1px}.--direction-row>.item[data-rs-resizable-item-mounted]{max-width:var(--rs-resizable-max-size);min-width:var(--rs-resizable-min-size)}.--direction-column>.handle{cursor:ns-resize}.--direction-column>.handle:after,.--direction-column>.handle:before{inset-block-start:50%;inset-inline:0;transform:translateY(-50%)}.--direction-column>.handle:before{height:var(--rs-unit-x6)}.--variant-borderless.--direction-column>.handle:after{height:var(--rs-unit-x1)}.--variant-bordered.--direction-column>.handle:after{height:1px}.--direction-column>.item[data-rs-resizable-item-mounted]{max-height:var(--rs-resizable-max-size);min-height:var(--rs-resizable-min-size)}
|
@@ -3,8 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import React, { forwardRef } from "react";
|
4
4
|
import { classNames } from "../../utilities/props.js";
|
5
5
|
import { disableUserSelect, enableUserSelect } from "../../utilities/dom/index.js";
|
6
|
-
import
|
7
|
-
import getMaxHeightStyles from "../../styles/maxHeight/index.js";
|
6
|
+
import { resolveMixin } from "../../styles/mixin.js";
|
8
7
|
import useIsomorphicLayoutEffect from "../../hooks/useIsomorphicLayoutEffect.js";
|
9
8
|
import s from "./ScrollArea.module.css";
|
10
9
|
import useHandlerRef from "../../hooks/useHandlerRef.js";
|
@@ -71,10 +70,9 @@ const ScrollArea = forwardRef((props, ref) => {
|
|
71
70
|
const [scrollPosition, setScrollPosition] = React.useState({ x: 0, y: 0 });
|
72
71
|
const scrollableRef = React.useRef(null);
|
73
72
|
const rootRef = React.useRef(null);
|
74
|
-
const
|
75
|
-
const
|
76
|
-
const
|
77
|
-
const contentClassNames = classNames(s.content, maxHeightStyles?.classNames);
|
73
|
+
const mixinStyles = resolveMixin({ height, maxHeight });
|
74
|
+
const rootClassNames = classNames(s.root, scrollbarDisplay && s[`--display-${scrollbarDisplay}`], className);
|
75
|
+
const contentClassNames = classNames(s.content, mixinStyles.classNames);
|
78
76
|
const updateScroll = React.useCallback(() => {
|
79
77
|
const scrollableEl = scrollableRef.current;
|
80
78
|
if (!scrollableEl)
|
@@ -131,7 +129,7 @@ const ScrollArea = forwardRef((props, ref) => {
|
|
131
129
|
observer.observe(rootEl);
|
132
130
|
return () => observer.disconnect();
|
133
131
|
}, [updateScroll]);
|
134
|
-
return (_jsxs("div", { ...attributes, ref: rootRef, className: rootClassNames,
|
132
|
+
return (_jsxs("div", { ...attributes, ref: rootRef, className: rootClassNames, children: [_jsx("div", { className: s.scrollable, ref: scrollableRef, onScroll: handleScroll, children: _jsx("div", { className: contentClassNames, style: { ...mixinStyles.variables }, children: children }) }), scrollRatio.y < 1 && scrollbarDisplay !== "hidden" && (_jsx(ScrollAreaBar, { vertical: true, onThumbMove: handleThumbYMove, ratio: scrollRatio.y, position: scrollPosition.y })), scrollRatio.x < 1 && scrollbarDisplay !== "hidden" && (_jsx(ScrollAreaBar, { onThumbMove: handleThumbXMove, ratio: scrollRatio.x, position: scrollPosition.x }))] }));
|
135
133
|
});
|
136
134
|
ScrollArea.displayName = "ScrollArea";
|
137
135
|
export default ScrollArea;
|