reshaped 3.9.0-canary.8 → 3.9.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/dist/bundle.css +1 -1
- package/dist/bundle.d.ts +2 -0
- package/dist/bundle.js +2 -2
- package/dist/components/Actionable/Actionable.module.css +1 -1
- package/dist/components/Avatar/Avatar.js +7 -24
- package/dist/components/Avatar/Avatar.module.css +1 -1
- package/dist/components/Badge/Badge.js +2 -2
- package/dist/components/Badge/Badge.module.css +1 -1
- package/dist/components/Badge/Badge.types.d.ts +1 -1
- package/dist/components/Button/Button.module.css +1 -1
- package/dist/components/Calendar/Calendar.module.css +1 -1
- package/dist/components/Card/Card.d.ts +1 -1
- package/dist/components/Card/Card.types.d.ts +5 -5
- package/dist/components/Checkbox/Checkbox.js +2 -12
- package/dist/components/FileUpload/FileUpload.js +4 -4
- package/dist/components/FileUpload/FileUpload.module.css +1 -1
- package/dist/components/FileUpload/FileUpload.types.d.ts +2 -0
- package/dist/components/Flyout/Flyout.constants.d.ts +1 -0
- package/dist/components/Flyout/Flyout.constants.js +1 -0
- package/dist/components/Flyout/Flyout.module.css +1 -1
- package/dist/components/Flyout/Flyout.types.d.ts +3 -1
- package/dist/components/Flyout/FlyoutContent.js +2 -1
- package/dist/components/Flyout/FlyoutControlled.js +28 -11
- package/dist/components/Flyout/useFlyout.d.ts +1 -1
- package/dist/components/Flyout/useFlyout.js +3 -3
- package/dist/components/Flyout/utilities/calculatePosition.js +18 -11
- package/dist/components/Flyout/utilities/constants.d.ts +1 -0
- package/dist/components/Flyout/utilities/constants.js +1 -0
- package/dist/components/Flyout/utilities/flyout.js +33 -5
- package/dist/components/Flyout/utilities/isFullyVisible.d.ts +4 -3
- package/dist/components/Flyout/utilities/isFullyVisible.js +5 -4
- package/dist/components/Grid/Grid.types.d.ts +4 -4
- package/dist/components/HiddenInput/HiddenInput.js +33 -0
- package/dist/components/HiddenInput/HiddenInput.types.d.ts +26 -0
- package/dist/components/Image/Image.js +13 -8
- package/dist/components/Image/Image.module.css +1 -1
- package/dist/components/Image/Image.types.d.ts +3 -1
- package/dist/components/Modal/Modal.js +2 -5
- package/dist/components/Modal/Modal.module.css +1 -1
- package/dist/components/Popover/Popover.module.css +1 -1
- package/dist/components/Radio/Radio.js +2 -12
- package/dist/components/Reshaped/Reshaped.css +1 -1
- package/dist/components/Scrim/Scrim.js +4 -3
- package/dist/components/Scrim/Scrim.module.css +1 -1
- package/dist/components/Scrim/Scrim.types.d.ts +2 -1
- package/dist/components/ScrollArea/ScrollArea.js +6 -6
- package/dist/components/Slider/SliderControlled.js +5 -4
- package/dist/components/Tabs/Tabs.module.css +1 -1
- package/dist/components/Tabs/Tabs.types.d.ts +3 -1
- package/dist/components/Tabs/TabsContext.d.ts +1 -0
- package/dist/components/Tabs/TabsControlled.js +2 -1
- package/dist/components/Tabs/TabsItem.js +3 -3
- package/dist/components/Tabs/TabsList.js +9 -5
- package/dist/components/Tabs/TabsPanel.js +1 -1
- package/dist/components/Text/Text.d.ts +1 -1
- package/dist/components/Text/Text.js +2 -2
- package/dist/components/Text/Text.module.css +1 -1
- package/dist/components/Text/Text.types.d.ts +5 -3
- package/dist/components/Tooltip/Tooltip.js +2 -2
- package/dist/components/Tooltip/Tooltip.module.css +1 -1
- package/dist/components/Tooltip/Tooltip.types.d.ts +1 -1
- package/dist/components/View/View.types.d.ts +4 -4
- package/dist/hooks/_private/useDrag.js +0 -3
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/types/global.d.ts +1 -1
- package/dist/utilities/dom/index.d.ts +0 -1
- package/dist/utilities/dom/index.js +0 -1
- package/dist/utilities/scroll/disable.js +4 -2
- package/package.json +4 -98
- package/README.md +0 -24
- package/dist/components/_private/HiddenInput/HiddenInput.js +0 -10
- package/dist/components/_private/HiddenInput/HiddenInput.types.d.ts +0 -15
- package/dist/utilities/dom/userSelect.d.ts +0 -2
- package/dist/utilities/dom/userSelect.js +0 -6
- /package/dist/components/{_private/HiddenInput → HiddenInput}/HiddenInput.d.ts +0 -0
- /package/dist/components/{_private/HiddenInput → HiddenInput}/HiddenInput.module.css +0 -0
- /package/dist/components/{_private/HiddenInput → HiddenInput}/HiddenInput.types.js +0 -0
- /package/dist/components/{_private/HiddenInput → HiddenInput}/index.d.ts +0 -0
- /package/dist/components/{_private/HiddenInput → HiddenInput}/index.js +0 -0
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { SCREEN_OFFSET } from "./constants.js";
|
|
1
2
|
import { getRTLPosition, centerBySize } from "./helpers.js";
|
|
2
|
-
const SCREEN_OFFSET = 8;
|
|
3
3
|
/**
|
|
4
4
|
* Calculate styles for the current position
|
|
5
5
|
*/
|
|
6
6
|
const calculatePosition = (args) => {
|
|
7
|
-
const { triggerBounds, flyoutBounds, containerBounds, position: passedPosition, rtl, width: passedWidth, contentGap = 0, contentShift = 0, passedContainer, fallbackAdjustLayout,
|
|
7
|
+
const { triggerBounds, flyoutBounds, containerBounds, position: passedPosition, rtl, width: passedWidth, contentGap = 0, contentShift = 0, passedContainer, fallbackAdjustLayout,
|
|
8
|
+
// fallbackMinWidth,
|
|
9
|
+
fallbackMinHeight, } = args;
|
|
8
10
|
const isFullWidth = passedWidth === "full" || passedWidth === "100%";
|
|
9
11
|
let left = 0;
|
|
10
12
|
let top = 0;
|
|
@@ -137,15 +139,20 @@ const calculatePosition = (args) => {
|
|
|
137
139
|
if (bottom !== null)
|
|
138
140
|
bottom = bottom + (flyoutHeight - height);
|
|
139
141
|
}
|
|
140
|
-
if
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
142
|
+
// TODO: Decide if we need horizontal scrolling for the fallbacks, might be a bad practice anyways
|
|
143
|
+
// if (updatedOverflow.left > 0) {
|
|
144
|
+
// width = Math.max(
|
|
145
|
+
// fallbackMinWidth ? parseInt(fallbackMinWidth) : 0,
|
|
146
|
+
// flyoutWidth - updatedOverflow.left
|
|
147
|
+
// );
|
|
148
|
+
// left = left + (flyoutWidth - width);
|
|
149
|
+
// } else if (updatedOverflow.right > 0) {
|
|
150
|
+
// width = Math.max(
|
|
151
|
+
// fallbackMinWidth ? parseInt(fallbackMinWidth) : 0,
|
|
152
|
+
// flyoutWidth - updatedOverflow.right
|
|
153
|
+
// );
|
|
154
|
+
// if (right !== null) right = right + (flyoutWidth - width);
|
|
155
|
+
// }
|
|
149
156
|
}
|
|
150
157
|
if (isFullWidth) {
|
|
151
158
|
left = SCREEN_OFFSET;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SCREEN_OFFSET = 8;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const SCREEN_OFFSET = 8;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getRectFromCoordinates, getShadowRoot, findClosestPositionContainer } from "../../../utilities/dom/index.js";
|
|
2
2
|
import { resetStyles } from "../Flyout.constants.js";
|
|
3
3
|
import calculatePosition from "./calculatePosition.js";
|
|
4
|
+
import { SCREEN_OFFSET } from "./constants.js";
|
|
4
5
|
import getPositionFallbacks from "./getPositionFallbacks.js";
|
|
5
6
|
import isFullyVisible from "./isFullyVisible.js";
|
|
6
7
|
/**
|
|
@@ -33,16 +34,26 @@ const flyout = (args) => {
|
|
|
33
34
|
const shadowRoot = triggerEl && getShadowRoot(triggerEl);
|
|
34
35
|
// Insert inside shadow root if possible to make sure styles are applied correctly
|
|
35
36
|
(shadowRoot || document.body).appendChild(targetClone);
|
|
36
|
-
const cloneRect = targetClone.getBoundingClientRect();
|
|
37
|
-
const flyoutBounds = { width: cloneRect.width, height: cloneRect.height };
|
|
38
37
|
const closestFixedContainer = !passedContainer && triggerEl ? findClosestPositionContainer({ el: triggerEl }) : undefined;
|
|
39
38
|
const container = passedContainer ||
|
|
40
39
|
// Render inside fixed position container automatically to keep their position synced on scroll
|
|
41
40
|
closestFixedContainer ||
|
|
42
41
|
document.body;
|
|
43
42
|
const renderContainerBounds = container.getBoundingClientRect();
|
|
44
|
-
const
|
|
45
|
-
|
|
43
|
+
const applyPosition = (position, options) => {
|
|
44
|
+
const widthOption = options?.width || width;
|
|
45
|
+
// If there is a width override, apply it to calculate the position and the height correctly
|
|
46
|
+
if (widthOption === "full") {
|
|
47
|
+
targetClone.style.width = `calc(100% - ${SCREEN_OFFSET * 2}px)`;
|
|
48
|
+
}
|
|
49
|
+
else if (widthOption === "trigger") {
|
|
50
|
+
targetClone.style.width = `${resolvedTriggerBounds.width}px`;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
targetClone.style.width = widthOption || "";
|
|
54
|
+
}
|
|
55
|
+
const cloneRect = targetClone.getBoundingClientRect();
|
|
56
|
+
const flyoutBounds = { width: cloneRect.width, height: cloneRect.height };
|
|
46
57
|
return calculatePosition({
|
|
47
58
|
triggerBounds: resolvedTriggerBounds,
|
|
48
59
|
flyoutBounds,
|
|
@@ -51,7 +62,7 @@ const flyout = (args) => {
|
|
|
51
62
|
contentGap: contentGap * unitModifier,
|
|
52
63
|
contentShift: contentShift * unitModifier,
|
|
53
64
|
rtl,
|
|
54
|
-
width,
|
|
65
|
+
width: widthOption,
|
|
55
66
|
passedContainer: passedContainer ||
|
|
56
67
|
(closestFixedContainer !== document.body ? closestFixedContainer : undefined),
|
|
57
68
|
fallbackAdjustLayout,
|
|
@@ -60,6 +71,12 @@ const flyout = (args) => {
|
|
|
60
71
|
});
|
|
61
72
|
};
|
|
62
73
|
const testVisibility = (calculated) => {
|
|
74
|
+
const visualContainerBounds = passedContainer?.getBoundingClientRect() ?? {
|
|
75
|
+
width: window.innerWidth,
|
|
76
|
+
height: window.innerHeight,
|
|
77
|
+
left: window.scrollX,
|
|
78
|
+
top: window.scrollY,
|
|
79
|
+
};
|
|
63
80
|
return isFullyVisible({
|
|
64
81
|
flyoutBounds: calculated.boundaries,
|
|
65
82
|
visualContainerBounds,
|
|
@@ -75,6 +92,17 @@ const flyout = (args) => {
|
|
|
75
92
|
calculated = tested;
|
|
76
93
|
return visible;
|
|
77
94
|
});
|
|
95
|
+
// Try full width positions in case it doesn't fit on any side
|
|
96
|
+
if (!calculated) {
|
|
97
|
+
const smallScreenFallbackPositions = ["top", "bottom"].filter((position) => testOrder.includes(position));
|
|
98
|
+
smallScreenFallbackPositions.some((position) => {
|
|
99
|
+
const tested = applyPosition(position, { width: "full" });
|
|
100
|
+
const visible = testVisibility(tested);
|
|
101
|
+
if (visible)
|
|
102
|
+
calculated = tested;
|
|
103
|
+
return visible;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
78
106
|
if (!calculated)
|
|
79
107
|
calculated = applyPosition(lastUsedPosition);
|
|
80
108
|
onPositionChoose(calculated.position);
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
type Bounds = Pick<DOMRect, "left" | "top" | "width" | "height">;
|
|
1
2
|
/**
|
|
2
3
|
* Check if element visually fits within its render container
|
|
3
4
|
*/
|
|
4
5
|
declare const isFullyVisible: (args: {
|
|
5
6
|
/** Bounds of the flyout content */
|
|
6
|
-
flyoutBounds:
|
|
7
|
+
flyoutBounds: Bounds;
|
|
7
8
|
/** Bounds of the container where the flyout content should fit */
|
|
8
|
-
visualContainerBounds:
|
|
9
|
+
visualContainerBounds: Bounds;
|
|
9
10
|
/** Bounds of the container where flyout content is rendered */
|
|
10
|
-
renderContainerBounds:
|
|
11
|
+
renderContainerBounds: Bounds;
|
|
11
12
|
}) => boolean;
|
|
12
13
|
export default isFullyVisible;
|
|
@@ -1,20 +1,21 @@
|
|
|
1
|
+
import { SCREEN_OFFSET } from "./constants.js";
|
|
1
2
|
/**
|
|
2
3
|
* Check if element visually fits within its render container
|
|
3
4
|
*/
|
|
4
5
|
const isFullyVisible = (args) => {
|
|
5
6
|
const { flyoutBounds, visualContainerBounds, renderContainerBounds } = args;
|
|
6
|
-
if (renderContainerBounds.left + flyoutBounds.left < visualContainerBounds.left) {
|
|
7
|
+
if (renderContainerBounds.left + flyoutBounds.left < visualContainerBounds.left + SCREEN_OFFSET) {
|
|
7
8
|
return false;
|
|
8
9
|
}
|
|
9
|
-
if (renderContainerBounds.top + flyoutBounds.top < visualContainerBounds.top) {
|
|
10
|
+
if (renderContainerBounds.top + flyoutBounds.top < visualContainerBounds.top + SCREEN_OFFSET) {
|
|
10
11
|
return false;
|
|
11
12
|
}
|
|
12
13
|
if (renderContainerBounds.left + flyoutBounds.left + flyoutBounds.width >
|
|
13
|
-
visualContainerBounds.
|
|
14
|
+
visualContainerBounds.left + visualContainerBounds.width - SCREEN_OFFSET) {
|
|
14
15
|
return false;
|
|
15
16
|
}
|
|
16
17
|
if (renderContainerBounds.top + flyoutBounds.top + flyoutBounds.height >
|
|
17
|
-
visualContainerBounds.
|
|
18
|
+
visualContainerBounds.top + visualContainerBounds.height - SCREEN_OFFSET) {
|
|
18
19
|
return false;
|
|
19
20
|
}
|
|
20
21
|
return true;
|
|
@@ -2,7 +2,7 @@ import type { Property } from "csstype";
|
|
|
2
2
|
import type React from "react";
|
|
3
3
|
import type * as TStyles from "../../styles/types";
|
|
4
4
|
import type * as G from "../../types/global";
|
|
5
|
-
export type Props<TagName extends keyof React.JSX.IntrinsicElements =
|
|
5
|
+
export type Props<TagName extends keyof React.JSX.IntrinsicElements | void = void> = {
|
|
6
6
|
/** Gap between grid items */
|
|
7
7
|
gap?: G.Responsive<number>;
|
|
8
8
|
/** Horizontal gap between grid items */
|
|
@@ -34,13 +34,13 @@ export type Props<TagName extends keyof React.JSX.IntrinsicElements = "div"> = {
|
|
|
34
34
|
/** Node for inserting children */
|
|
35
35
|
children?: React.ReactNode;
|
|
36
36
|
/** Custom root element html tag */
|
|
37
|
-
as?: TagName;
|
|
37
|
+
as?: TagName extends keyof React.JSX.IntrinsicElements ? TagName : keyof React.JSX.IntrinsicElements;
|
|
38
38
|
/** Additional classname for the root element */
|
|
39
39
|
className?: G.ClassName;
|
|
40
40
|
/** Additional attributes for the root element */
|
|
41
41
|
attributes?: G.Attributes<TagName>;
|
|
42
42
|
};
|
|
43
|
-
export type ItemProps<TagName extends keyof React.JSX.IntrinsicElements =
|
|
43
|
+
export type ItemProps<TagName extends keyof React.JSX.IntrinsicElements | void = void> = {
|
|
44
44
|
/** Grid area for template syntax */
|
|
45
45
|
area?: string;
|
|
46
46
|
/** Starting column position */
|
|
@@ -58,7 +58,7 @@ export type ItemProps<TagName extends keyof React.JSX.IntrinsicElements = "div">
|
|
|
58
58
|
/** Node for inserting children */
|
|
59
59
|
children?: React.ReactNode;
|
|
60
60
|
/** Custom item element html tag */
|
|
61
|
-
as?: TagName;
|
|
61
|
+
as?: TagName extends keyof React.JSX.IntrinsicElements ? TagName : keyof React.JSX.IntrinsicElements;
|
|
62
62
|
/** Additional classname for the item element */
|
|
63
63
|
className?: G.ClassName;
|
|
64
64
|
/** Additional attributes for the item element */
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCheckboxGroup } from "../CheckboxGroup/index.js";
|
|
3
|
+
import { useFormControl } from "../FormControl/index.js";
|
|
4
|
+
import { useRadioGroup } from "../RadioGroup/index.js";
|
|
5
|
+
import { classNames } from "../../utilities/props.js";
|
|
6
|
+
import s from "./HiddenInput.module.css";
|
|
7
|
+
const HiddenInput = (props) => {
|
|
8
|
+
const { type, value, className, onBlur, onFocus, onChange, attributes } = props;
|
|
9
|
+
const rootClassNames = classNames(s.root, className);
|
|
10
|
+
const checkboxGroup = useCheckboxGroup();
|
|
11
|
+
const radioGroup = useRadioGroup();
|
|
12
|
+
const formControl = useFormControl();
|
|
13
|
+
const name = checkboxGroup?.name ?? radioGroup?.name ?? props.name;
|
|
14
|
+
const disabled = formControl?.disabled ?? props.disabled ?? checkboxGroup?.disabled ?? radioGroup?.disabled;
|
|
15
|
+
const checked = (value && (checkboxGroup?.value?.includes(value) ?? radioGroup?.value === value)) ||
|
|
16
|
+
props.checked;
|
|
17
|
+
const defaultChecked = checkboxGroup ? undefined : props.defaultChecked;
|
|
18
|
+
const handleChange = (event) => {
|
|
19
|
+
if (!name)
|
|
20
|
+
return;
|
|
21
|
+
const { checked } = event.target;
|
|
22
|
+
const changeArgs = { name, value, checked, event };
|
|
23
|
+
if (onChange)
|
|
24
|
+
onChange(changeArgs);
|
|
25
|
+
if (checkboxGroup?.onChange)
|
|
26
|
+
checkboxGroup.onChange(changeArgs);
|
|
27
|
+
if (radioGroup?.onChange)
|
|
28
|
+
radioGroup.onChange(changeArgs);
|
|
29
|
+
};
|
|
30
|
+
return (_jsx("input", { ...attributes, className: rootClassNames, type: type, name: name, value: value, checked: checked, defaultChecked: defaultChecked, disabled: disabled, onChange: handleChange, onFocus: onFocus || attributes?.onFocus, onBlur: onBlur || attributes?.onBlur, "data-rs-hidden-input": true }));
|
|
31
|
+
};
|
|
32
|
+
HiddenInput.displayName = "HiddenInput";
|
|
33
|
+
export default HiddenInput;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type * as G from "../../types/global";
|
|
3
|
+
export type Props = {
|
|
4
|
+
/** Name of the input element */
|
|
5
|
+
name?: string;
|
|
6
|
+
/** Value of the input element that is used for form submission */
|
|
7
|
+
value?: string;
|
|
8
|
+
/** Checked state of the input element, enables controlled mode */
|
|
9
|
+
checked?: boolean;
|
|
10
|
+
/** Default checked state of the input element, enables uncontrolled mode */
|
|
11
|
+
defaultChecked?: boolean;
|
|
12
|
+
/** Disable the input element */
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
/** Callback when the input value changes */
|
|
15
|
+
onChange?: G.ChangeHandler<boolean>;
|
|
16
|
+
/** Callback when the input or label is focused */
|
|
17
|
+
onFocus?: (e: React.FocusEvent) => void;
|
|
18
|
+
/** Callback when the input or label is blurred */
|
|
19
|
+
onBlur?: (e: React.FocusEvent) => void;
|
|
20
|
+
/** Type of the input element */
|
|
21
|
+
type: "checkbox" | "radio";
|
|
22
|
+
/** Additional classname for the root element */
|
|
23
|
+
className?: G.ClassName;
|
|
24
|
+
/** Additional attributes for the input element */
|
|
25
|
+
attributes?: G.Attributes<"input">;
|
|
26
|
+
};
|
|
@@ -5,12 +5,14 @@ import { resolveMixin } from "../../styles/mixin.js";
|
|
|
5
5
|
import { classNames } from "../../utilities/props.js";
|
|
6
6
|
import s from "./Image.module.css";
|
|
7
7
|
const Image = (props) => {
|
|
8
|
-
const { src, alt, width, maxWidth, height, aspectRatio, onLoad, onError, fallback, displayMode = "cover", borderRadius, className, attributes, imageAttributes: passedImageAttributes, renderImage, } = props;
|
|
8
|
+
const { src, alt, width, maxWidth, height, aspectRatio, onLoad, onError, fallback, outline, displayMode = "cover", borderRadius, className, attributes, imageAttributes: passedImageAttributes, renderImage, } = props;
|
|
9
9
|
const [status, setStatus] = React.useState("loading");
|
|
10
10
|
const mixinStyles = resolveMixin({ radius: borderRadius, width, height, maxWidth, aspectRatio });
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
11
|
+
const rootClassNames = classNames(s.root, mixinStyles.classNames, outline && s["--outline"], className);
|
|
12
|
+
const imageClassNames = classNames([
|
|
13
|
+
s.image,
|
|
14
|
+
displayMode && s[`image--display-mode-${displayMode}`],
|
|
15
|
+
]);
|
|
14
16
|
const isFallback = (status === "error" || !src) && !!fallback;
|
|
15
17
|
const style = {
|
|
16
18
|
...attributes?.style,
|
|
@@ -19,10 +21,12 @@ const Image = (props) => {
|
|
|
19
21
|
const handleLoad = (e) => {
|
|
20
22
|
setStatus("success");
|
|
21
23
|
onLoad?.(e);
|
|
24
|
+
passedImageAttributes?.onLoad?.(e);
|
|
22
25
|
};
|
|
23
26
|
const handleError = (e) => {
|
|
24
27
|
setStatus("error");
|
|
25
28
|
onError?.(e);
|
|
29
|
+
passedImageAttributes?.onError?.(e);
|
|
26
30
|
};
|
|
27
31
|
React.useEffect(() => {
|
|
28
32
|
setStatus("loading");
|
|
@@ -34,13 +38,13 @@ const Image = (props) => {
|
|
|
34
38
|
src: fallback ?? "",
|
|
35
39
|
alt: alt ?? "",
|
|
36
40
|
role: alt ? undefined : "presentation",
|
|
37
|
-
className:
|
|
41
|
+
className: rootClassNames,
|
|
38
42
|
style,
|
|
39
43
|
};
|
|
40
44
|
// eslint-disable-next-line jsx-a11y/alt-text
|
|
41
45
|
return renderImage ? renderImage(imageAttributes) : _jsx("img", { ...imageAttributes });
|
|
42
46
|
}
|
|
43
|
-
return (_jsx("div", { ...attributes, className:
|
|
47
|
+
return (_jsx("div", { ...attributes, className: classNames([s.fallback, rootClassNames]), style: style, children: fallback }));
|
|
44
48
|
}
|
|
45
49
|
const imageAttributes = {
|
|
46
50
|
...attributes,
|
|
@@ -50,11 +54,12 @@ const Image = (props) => {
|
|
|
50
54
|
role: alt ? undefined : "presentation",
|
|
51
55
|
onLoad: handleLoad,
|
|
52
56
|
onError: handleError,
|
|
53
|
-
className:
|
|
57
|
+
className: outline ? imageClassNames : classNames([imageClassNames, rootClassNames]),
|
|
54
58
|
style,
|
|
55
59
|
};
|
|
56
60
|
// eslint-disable-next-line jsx-a11y/alt-text
|
|
57
|
-
|
|
61
|
+
const imageNode = renderImage ? renderImage(imageAttributes) : _jsx("img", { ...imageAttributes });
|
|
62
|
+
return outline ? (_jsx("div", { ...attributes, className: rootClassNames, style: style, children: imageNode })) : (imageNode);
|
|
58
63
|
};
|
|
59
64
|
Image.displayName = "Image";
|
|
60
65
|
export default Image;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.root{display:block;max-width:100%}.fallback{align-items:center;background:var(--rs-color-background-neutral-faded);color:var(--rs-color-foreground-disabled);display:flex;justify-content:center}.--display-mode-cover{object-fit:cover!important}
|
|
1
|
+
.root{position:relative}.root .image{border-radius:inherit;height:100%;width:100%}.image{display:block;max-width:100%}.fallback{align-items:center;background:var(--rs-color-background-neutral-faded);color:var(--rs-color-foreground-disabled);display:flex;justify-content:center}.--outline:after{border:1px solid var(--rs-color-border-neutral-faded);border-radius:inherit;content:"";inset:0;pointer-events:none;position:absolute}.image--display-mode-cover{object-fit:cover!important}.image--display-mode-contain{object-fit:scale-down!important}
|
|
@@ -15,9 +15,11 @@ export type Props = {
|
|
|
15
15
|
/** Image aspect ratio, width / height */
|
|
16
16
|
aspectRatio?: G.Responsive<number>;
|
|
17
17
|
/** Image border radius, based on the radius tokens */
|
|
18
|
-
borderRadius?: Extract<TStyles.Radius, "small" | "medium" | "large">;
|
|
18
|
+
borderRadius?: Extract<TStyles.Radius, "small" | "medium" | "large" | "circular">;
|
|
19
19
|
/** Image display mode for controlling how it fits into the provided boundaries */
|
|
20
20
|
displayMode?: "cover" | "contain";
|
|
21
|
+
/** Add a semi-transparent border on top of the image for better background contrast */
|
|
22
|
+
outline?: boolean;
|
|
21
23
|
/** Image on load event */
|
|
22
24
|
onLoad?: (e: React.SyntheticEvent) => void;
|
|
23
25
|
/** Image on error event */
|
|
@@ -7,8 +7,7 @@ import useElementId from "../../hooks/useElementId.js";
|
|
|
7
7
|
import useHandlerRef from "../../hooks/useHandlerRef.js";
|
|
8
8
|
import useResponsiveClientValue from "../../hooks/useResponsiveClientValue.js";
|
|
9
9
|
import { resolveMixin } from "../../styles/mixin.js";
|
|
10
|
-
import {
|
|
11
|
-
import { classNames, responsiveVariables, responsiveClassNames, responsivePropDependency, } from "../../utilities/props.js";
|
|
10
|
+
import { classNames, responsiveVariables, responsiveClassNames } from "../../utilities/props.js";
|
|
12
11
|
import { enableScroll, disableScroll } from "../../utilities/scroll/index.js";
|
|
13
12
|
import s from "./Modal.module.css";
|
|
14
13
|
const DRAG_THRESHOLD = 32;
|
|
@@ -90,7 +89,6 @@ const Modal = (props) => {
|
|
|
90
89
|
// Prevent the drag handling when browser is trying to navigate to a previous page
|
|
91
90
|
if (clientPosition === "start" && e.targetTouches[0].clientX < DRAG_EDGE_BOUNDARY)
|
|
92
91
|
return;
|
|
93
|
-
disableUserSelect();
|
|
94
92
|
disableScroll();
|
|
95
93
|
setDragging(true);
|
|
96
94
|
};
|
|
@@ -108,7 +106,6 @@ const Modal = (props) => {
|
|
|
108
106
|
if (!dragging)
|
|
109
107
|
return;
|
|
110
108
|
const handleDragEnd = () => {
|
|
111
|
-
enableUserSelect();
|
|
112
109
|
enableScroll();
|
|
113
110
|
setDragging(false);
|
|
114
111
|
// Close only when dragging in the closing direction
|
|
@@ -168,7 +165,7 @@ const Modal = (props) => {
|
|
|
168
165
|
setHideProgress(progress / 2);
|
|
169
166
|
dragDistanceRef.current = dragDistance;
|
|
170
167
|
}, [dragDistance, clientPosition, rootRef]);
|
|
171
|
-
return (_jsx(Overlay, { onClose: onClose, onOpen: onOpen, onAfterClose: onAfterClose, onAfterOpen: onAfterOpen, disableCloseOnClick: disableCloseOnOutsideClick, active: active, transparent: transparentOverlay || hideProgress, blurred: blurredOverlay, overflow:
|
|
168
|
+
return (_jsx(Overlay, { onClose: onClose, onOpen: onOpen, onAfterClose: onAfterClose, onAfterOpen: onAfterOpen, disableCloseOnClick: disableCloseOnOutsideClick, active: active, transparent: transparentOverlay || hideProgress, blurred: blurredOverlay, overflow: clientPosition === "center" ? "auto" : "hidden", className: overlayClassName, containerRef: containerRef, attributes: {
|
|
172
169
|
onTouchStart: handleDragStart,
|
|
173
170
|
}, children: ({ active }) => {
|
|
174
171
|
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);
|
|
@@ -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);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-shadow-focus)}.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-raised);color:var(--rs-color-foreground-neutral);outline:none;transition:var(--rs-duration-fast) var(--rs-easing-accelerate);transition-property:transform,opacity;will-change:transform,opacity}[data-rs-keyboard] .root:focus{box-shadow:var(--rs-shadow-focus)}.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:translateY(var(--rs-unit-x4));width:var(--rs-modal-size)}.--position-center.--active,[dir=rtl] .--position-center.--active{opacity:1;transform:translate(0)!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))!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))!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))!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:translateY(var(--rs-unit-x4));width:var(--rs-modal-size)}.--position-center--m.--active,[dir=rtl] .--position-center--m.--active{opacity:1;transform:translate(0)!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))!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))!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))!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:translateY(var(--rs-unit-x4));width:var(--rs-modal-size)}.--position-center--l.--active,[dir=rtl] .--position-center--l.--active{opacity:1;transform:translate(0)!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))!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))!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))!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:translateY(var(--rs-unit-x4));width:var(--rs-modal-size)}.--position-center--xl.--active,[dir=rtl] .--position-center--xl.--active{opacity:1;transform:translate(0)!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))!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))!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))!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 +1 @@
|
|
|
1
|
-
.content{--rs-border-w:1px;border:var(--rs-border-w) solid var(--rs-color-border-neutral-faded);max-width:360px}.content--variant-elevated{background:var(--rs-color-background-elevation-overlay);
|
|
1
|
+
.content{--rs-border-w:1px;border:var(--rs-border-w) solid var(--rs-color-border-neutral-faded);border-radius:var(--rs-radius-medium);max-width:360px}.content--variant-elevated{background:var(--rs-color-background-elevation-overlay);box-shadow:var(--rs-shadow-overlay);color:var(--rs-color-foreground-neutral);min-width:220px}.content--variant-elevated.content--elevation-raised{box-shadow:var(--rs-shadow-raised)}.content--variant-headless{border:none}.content--radius-small{border-radius:var(--rs-radius-small)}.content.content--has-width{max-width:none;min-width:0}@media (--rs-viewport-s ){.content{max-width:none}}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import HiddenInput from "../_private/HiddenInput/index.js";
|
|
4
3
|
import { useFormControl } from "../FormControl/index.js";
|
|
4
|
+
import HiddenInput from "../HiddenInput/index.js";
|
|
5
5
|
import { useRadioGroup } from "../RadioGroup/index.js";
|
|
6
6
|
import Text from "../Text/index.js";
|
|
7
7
|
import { classNames, responsiveClassNames, responsivePropDependency } from "../../utilities/props.js";
|
|
@@ -16,17 +16,7 @@ const Radio = (props) => {
|
|
|
16
16
|
const defaultChecked = radioGroup ? undefined : props.defaultChecked;
|
|
17
17
|
const name = radioGroup ? radioGroup.name : props.name;
|
|
18
18
|
const rootClassName = classNames(s.root, className, hasError && s["--error"], disabled && s["--disabled"], size && responsiveClassNames(s, "--size", size));
|
|
19
|
-
|
|
20
|
-
if (!name)
|
|
21
|
-
return;
|
|
22
|
-
const { checked } = event.target;
|
|
23
|
-
const changeArgs = { name, value, checked, event };
|
|
24
|
-
if (onChange)
|
|
25
|
-
onChange(changeArgs);
|
|
26
|
-
if (radioGroup?.onChange)
|
|
27
|
-
radioGroup.onChange(changeArgs);
|
|
28
|
-
};
|
|
29
|
-
return (_jsxs("label", { ...attributes, className: rootClassName, children: [_jsxs("span", { className: s.field, children: [_jsx(HiddenInput, { className: s.input, type: "radio", checked: checked, defaultChecked: defaultChecked, name: name, disabled: disabled, value: value, onChange: handleChange, onFocus: onFocus, onBlur: onBlur, attributes: inputAttributes }), _jsx("div", { className: s.decorator })] }), children && (_jsx(Text, { as: "span", variant: responsivePropDependency(size, (size) => {
|
|
19
|
+
return (_jsxs("label", { ...attributes, className: rootClassName, children: [_jsxs("span", { className: s.field, children: [_jsx(HiddenInput, { className: s.input, type: "radio", checked: checked, defaultChecked: defaultChecked, name: name, disabled: disabled, value: value, onChange: onChange, onFocus: onFocus, onBlur: onBlur, attributes: inputAttributes }), _jsx("div", { className: s.decorator })] }), children && (_jsx(Text, { as: "span", variant: responsivePropDependency(size, (size) => {
|
|
30
20
|
if (size === "large")
|
|
31
21
|
return "body-2";
|
|
32
22
|
if (size === "small")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer rs.reset{[data-rs-theme]{--rs-radius-circular:9999px;--rs-shadow-focus:0 0 0 2px var(--rs-color-background-elevation-base),0 0 0 4px var(--rs-color-border-primary);--rs-shadow-focus-inset:inset 0 0 0 2px var(--rs-color-border-primary),inset 0 0 0 4px var(--rs-color-background-elevation-base)}[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);min-height:
|
|
1
|
+
@layer rs.reset{[data-rs-theme]{--rs-radius-circular:9999px;--rs-shadow-focus:0 0 0 2px var(--rs-color-background-elevation-base),0 0 0 4px var(--rs-color-border-primary);--rs-shadow-focus-inset:inset 0 0 0 2px var(--rs-color-border-primary),inset 0 0 0 4px var(--rs-color-background-elevation-base)}[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);min-height:100dvh;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:0s!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:0s!important}}[data-rs-no-transition] *,[data-rs-no-transition] :after,[data-rs-no-transition] :before{transition:none!important}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import View from "../View/index.js";
|
|
2
3
|
import { classNames } from "../../utilities/props.js";
|
|
3
4
|
import s from "./Scrim.module.css";
|
|
4
5
|
const Scrim = (props) => {
|
|
5
|
-
const { children, backgroundSlot, position = "cover", attributes, className, scrimClassName, } = props;
|
|
6
|
-
const rootClassNames = classNames(s.root,
|
|
6
|
+
const { children, backgroundSlot, position = "cover", paddingInline, paddingBlock, padding, borderRadius, attributes, className, scrimClassName, } = props;
|
|
7
|
+
const rootClassNames = classNames(s.root, position && s[`--position-${position}`], className);
|
|
7
8
|
const scrimClassNames = classNames(s.scrim, scrimClassName);
|
|
8
|
-
return (_jsxs(
|
|
9
|
+
return (_jsxs(View, { borderRadius: borderRadius, attributes: attributes, className: rootClassNames, position: backgroundSlot ? "relative" : "absolute", inset: backgroundSlot ? undefined : 0, overflow: "hidden", children: [backgroundSlot, _jsx("div", { className: scrimClassNames, children: _jsx(View, { paddingInline: paddingInline ?? padding ?? 4, paddingBlock: paddingBlock ?? padding ?? 3, zIndex: 5, height: ["start", "end"].includes(position) ? "100%" : undefined, width: ["top", "bottom", "cover"].includes(position) ? "100%" : undefined, textAlign: position === "cover" ? "center" : undefined, children: children }) })] }));
|
|
9
10
|
};
|
|
10
11
|
Scrim.displayName = "Scrim";
|
|
11
12
|
export default Scrim;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.root
|
|
1
|
+
.root{--rs-scrim-gradient-padding:calc(var(--rs-unit-x1) * 16);--rs-scrim-gradient:rgba(var(--rs-color-rgb-black),0%),rgba(var(--rs-color-rgb-black),0.52%),rgba(var(--rs-color-rgb-black),2.13%),rgba(var(--rs-color-rgb-black),4.9%),rgba(var(--rs-color-rgb-black),8.84%),rgba(var(--rs-color-rgb-black),13.91%),rgba(var(--rs-color-rgb-black),19.91%),rgba(var(--rs-color-rgb-black),26.56%),rgba(var(--rs-color-rgb-black),33.44%),rgba(var(--rs-color-rgb-black),40.09%),rgba(var(--rs-color-rgb-black),46.09%),rgba(var(--rs-color-rgb-black),51.16%),rgba(var(--rs-color-rgb-black),55.1%),rgba(var(--rs-color-rgb-black),57.87%),rgba(var(--rs-color-rgb-black),59.48%),rgba(var(--rs-color-rgb-black),60%);pointer-events:none}.scrim{color:var(--rs-color-white);inset:0;position:absolute;transform:translateZ(0)}.--position-cover .scrim{align-items:center;display:flex;justify-content:center}.--position-cover .scrim:after{background-color:var(--rs-color-black);content:"";inset:0;opacity:.5;position:absolute}.--position-top .scrim{background:linear-gradient(to top,var(--rs-scrim-gradient));inset-block-end:auto;padding-block-end:var(--rs-scrim-gradient-padding)}.--position-bottom .scrim{background:linear-gradient(to bottom,var(--rs-scrim-gradient));inset-block-start:auto;padding-block-start:var(--rs-scrim-gradient-padding)}.--position-start .scrim{background:linear-gradient(to left,var(--rs-scrim-gradient));inset-inline-end:auto;padding-inline-end:var(--rs-scrim-gradient-padding);width:auto}.--position-end .scrim,[dir=rtl] .--position-start .scrim{background:linear-gradient(to right,var(--rs-scrim-gradient))}.--position-end .scrim{inset-inline-start:auto;padding-inline-start:var(--rs-scrim-gradient-padding);width:auto}[dir=rtl] .--position-end .scrim{background:linear-gradient(to left,var(--rs-scrim-gradient))}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import type { ViewProps } from "../View";
|
|
2
3
|
import type * as G from "../../types/global";
|
|
3
4
|
export type Props = {
|
|
4
5
|
/** Node for inserting content */
|
|
@@ -13,4 +14,4 @@ export type Props = {
|
|
|
13
14
|
className?: G.ClassName;
|
|
14
15
|
/** Additional attributes for the root element */
|
|
15
16
|
attributes?: G.Attributes<"div">;
|
|
16
|
-
}
|
|
17
|
+
} & Pick<ViewProps, "paddingInline" | "paddingBlock" | "padding" | "borderRadius">;
|
|
@@ -4,8 +4,8 @@ import React, { forwardRef } from "react";
|
|
|
4
4
|
import useHandlerRef from "../../hooks/useHandlerRef.js";
|
|
5
5
|
import useIsomorphicLayoutEffect from "../../hooks/useIsomorphicLayoutEffect.js";
|
|
6
6
|
import { resolveMixin } from "../../styles/mixin.js";
|
|
7
|
-
import { disableUserSelect, enableUserSelect } from "../../utilities/dom/index.js";
|
|
8
7
|
import { classNames } from "../../utilities/props.js";
|
|
8
|
+
import { disableScroll, enableScroll } from "../../utilities/scroll/index.js";
|
|
9
9
|
import s from "./ScrollArea.module.css";
|
|
10
10
|
const ScrollAreaBar = (props) => {
|
|
11
11
|
const { ratio, position, vertical, onThumbMove } = props;
|
|
@@ -41,14 +41,14 @@ const ScrollAreaBar = (props) => {
|
|
|
41
41
|
const total = vertical ? elBar.scrollHeight : elBar.scrollWidth;
|
|
42
42
|
onThumbMoveRef.current?.({ value: diff / total, type: "relative" });
|
|
43
43
|
}, [vertical, dragging, onThumbMoveRef]);
|
|
44
|
-
const handleDragEnd = React.useCallback(() => {
|
|
45
|
-
setDragging(false);
|
|
46
|
-
enableUserSelect();
|
|
47
|
-
}, []);
|
|
48
44
|
const handleDragStart = () => {
|
|
49
45
|
setDragging(true);
|
|
50
|
-
|
|
46
|
+
disableScroll();
|
|
51
47
|
};
|
|
48
|
+
const handleDragEnd = React.useCallback(() => {
|
|
49
|
+
setDragging(false);
|
|
50
|
+
enableScroll();
|
|
51
|
+
}, []);
|
|
52
52
|
React.useEffect(() => {
|
|
53
53
|
if (!dragging)
|
|
54
54
|
return;
|
|
@@ -5,7 +5,7 @@ import { useFormControl } from "../FormControl/index.js";
|
|
|
5
5
|
import useElementId from "../../hooks/useElementId.js";
|
|
6
6
|
import useHandlerRef from "../../hooks/useHandlerRef.js";
|
|
7
7
|
import useRTL from "../../hooks/useRTL.js";
|
|
8
|
-
import {
|
|
8
|
+
import { triggerChangeEvent } from "../../utilities/dom/index.js";
|
|
9
9
|
import { classNames } from "../../utilities/props.js";
|
|
10
10
|
import { disableScroll, enableScroll } from "../../utilities/scroll/index.js";
|
|
11
11
|
import s from "./Slider.module.css";
|
|
@@ -144,30 +144,31 @@ const SliderControlled = (props) => {
|
|
|
144
144
|
handleMinChange(nextValue);
|
|
145
145
|
if (closestId === maxId)
|
|
146
146
|
handleMaxChange(nextValue);
|
|
147
|
-
disableUserSelect();
|
|
148
|
-
disableScroll();
|
|
149
147
|
setDraggingId(closestId);
|
|
150
148
|
};
|
|
151
149
|
const handleMinDragStart = (e) => {
|
|
152
150
|
if (disabled)
|
|
153
151
|
return;
|
|
154
152
|
e.stopPropagation();
|
|
153
|
+
disableScroll();
|
|
155
154
|
setDraggingId(minId);
|
|
156
155
|
};
|
|
157
156
|
const handleMaxDragStart = (e) => {
|
|
158
157
|
if (disabled)
|
|
159
158
|
return;
|
|
160
159
|
e.stopPropagation();
|
|
160
|
+
disableScroll();
|
|
161
161
|
setDraggingId(maxId);
|
|
162
162
|
};
|
|
163
163
|
const handleDragStop = React.useCallback(() => {
|
|
164
164
|
if (draggingId === minId && minValue !== undefined) {
|
|
165
165
|
handleMinChange(minValue, { commit: true });
|
|
166
|
+
minInputRef.current?.focus();
|
|
166
167
|
}
|
|
167
168
|
if (draggingId === maxId) {
|
|
168
169
|
handleMaxChange(maxValue, { commit: true });
|
|
170
|
+
maxInputRef.current?.focus();
|
|
169
171
|
}
|
|
170
|
-
enableUserSelect();
|
|
171
172
|
enableScroll();
|
|
172
173
|
setDraggingId(null);
|
|
173
174
|
}, [minValue, maxValue, handleMinChange, handleMaxChange, draggingId, minId, maxId]);
|