reshaped 4.2.0-canary.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.css +1 -1
- package/dist/bundle.d.ts +6 -0
- package/dist/bundle.js +2 -2
- package/dist/components/Accordion/AccordionContent.js +1 -1
- package/dist/components/Badge/Badge.js +4 -1
- package/dist/components/Badge/Badge.module.css +1 -1
- package/dist/components/Badge/tests/Badge.stories.d.ts +4 -0
- package/dist/components/Badge/tests/Badge.stories.js +48 -1
- package/dist/components/Button/Button.js +2 -0
- package/dist/components/Button/Button.module.css +1 -1
- package/dist/components/Button/tests/Button.stories.js +1 -0
- package/dist/components/ContentToggle/ContentToggle.d.ts +4 -0
- package/dist/components/ContentToggle/ContentToggle.js +12 -0
- package/dist/components/ContentToggle/ContentToggle.module.css +1 -0
- package/dist/components/ContentToggle/ContentToggle.types.d.ts +16 -0
- package/dist/components/ContentToggle/index.d.ts +2 -0
- package/dist/components/ContentToggle/index.js +1 -0
- package/dist/components/ContentToggle/tests/ContentToggle.stories.d.ts +10 -0
- package/dist/components/ContentToggle/tests/ContentToggle.stories.js +75 -0
- package/dist/components/ContextMenu/ContextMenu.js +5 -4
- package/dist/components/ContextMenu/ContextMenu.types.d.ts +5 -1
- package/dist/components/ContextMenu/tests/ContextMenu.stories.d.ts +11 -7
- package/dist/components/ContextMenu/tests/ContextMenu.stories.js +18 -1
- package/dist/components/DropdownMenu/DropdownMenu.context.d.ts +11 -0
- package/dist/components/DropdownMenu/DropdownMenu.context.js +19 -0
- package/dist/components/DropdownMenu/DropdownMenu.js +6 -4
- package/dist/components/DropdownMenu/DropdownMenu.types.d.ts +9 -0
- package/dist/components/DropdownMenu/tests/DropdownMenu.stories.d.ts +1 -0
- package/dist/components/DropdownMenu/tests/DropdownMenu.stories.js +22 -1
- package/dist/components/Expandable/Expandable.d.ts +4 -0
- package/dist/components/Expandable/Expandable.js +85 -0
- package/dist/components/Expandable/Expandable.module.css +1 -0
- package/dist/components/Expandable/Expandable.types.d.ts +18 -0
- package/dist/components/Expandable/Expandable.types.js +1 -0
- package/dist/components/Expandable/index.d.ts +2 -0
- package/dist/components/Expandable/tests/Expandable.stories.d.ts +12 -0
- package/dist/components/Expandable/tests/Expandable.stories.js +82 -0
- package/dist/components/IconToggle/IconToggle.d.ts +4 -0
- package/dist/components/IconToggle/IconToggle.js +13 -0
- package/dist/components/IconToggle/IconToggle.module.css +1 -0
- package/dist/components/IconToggle/IconToggle.types.d.ts +5 -0
- package/dist/components/IconToggle/IconToggle.types.js +1 -0
- package/dist/components/IconToggle/index.d.ts +2 -0
- package/dist/components/IconToggle/index.js +1 -0
- package/dist/components/IconToggle/tests/IconToggle.stories.d.ts +10 -0
- package/dist/components/IconToggle/tests/IconToggle.stories.js +24 -0
- package/dist/components/Image/Image.js +14 -0
- package/dist/components/Link/Link.d.ts +1 -1
- package/dist/components/Link/Link.js +2 -2
- package/dist/components/Link/Link.types.d.ts +1 -1
- package/dist/components/Link/tests/Link.stories.d.ts +2 -1
- package/dist/components/Link/tests/Link.stories.js +7 -1
- package/dist/components/MenuItem/MenuItem.js +14 -2
- package/dist/components/MenuItem/MenuItem.module.css +1 -1
- package/dist/components/Select/Select.module.css +1 -1
- package/dist/components/Select/SelectStartContent.js +2 -0
- package/dist/components/Tabs/Tabs.module.css +1 -1
- package/dist/components/Tabs/TabsItem.js +6 -1
- package/dist/components/TextField/TextField.js +2 -0
- package/dist/components/TextField/TextField.module.css +1 -1
- package/dist/components/_private/Presence/Presence.d.ts +7 -0
- package/dist/components/_private/Presence/Presence.js +71 -0
- package/dist/components/_private/Presence/Presence.module.css +1 -0
- package/dist/components/_private/Presence/Presence.types.d.ts +45 -0
- package/dist/components/_private/Presence/Presence.types.js +1 -0
- package/dist/components/_private/Presence/index.d.ts +1 -0
- package/dist/components/_private/Presence/index.js +1 -0
- package/dist/hooks/_internal/useSingletonHotkeys.d.ts +2 -2
- package/dist/hooks/_internal/useSingletonHotkeys.js +102 -76
- package/dist/hooks/_internal/useSingletonKeyboardMode.js +12 -0
- package/dist/hooks/useOnClickOutside.js +19 -11
- package/dist/index.d.ts +6 -0
- package/dist/index.js +3 -0
- package/package.json +3 -3
- package/dist/components/_private/Expandable/Expandable.d.ts +0 -4
- package/dist/components/_private/Expandable/Expandable.js +0 -58
- package/dist/components/_private/Expandable/Expandable.module.css +0 -1
- package/dist/components/_private/Expandable/Expandable.types.d.ts +0 -7
- package/dist/components/_private/Expandable/index.d.ts +0 -1
- /package/dist/components/{_private/Expandable/Expandable.types.js → ContentToggle/ContentToggle.types.js} +0 -0
- /package/dist/components/{_private/Expandable → Expandable}/index.js +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { classNames } from "@reshaped/utilities";
|
|
5
|
+
import useHandlerRef from "../../hooks/useHandlerRef";
|
|
6
|
+
import useIsomorphicLayoutEffect from "../../hooks/useIsomorphicLayoutEffect";
|
|
7
|
+
import { onNextFrame, checkTransitions } from "../../utilities/animation";
|
|
8
|
+
import s from "./Expandable.module.css";
|
|
9
|
+
const Expandable = (props) => {
|
|
10
|
+
const { children, active, orientation = "vertical", onAfterClose, className, attributes } = props;
|
|
11
|
+
const horizontal = orientation === "horizontal";
|
|
12
|
+
const sizeProperty = horizontal ? "width" : "height";
|
|
13
|
+
// Horizontal expanding is based on the content width, since auto would resolve to the available one
|
|
14
|
+
const autoSize = horizontal ? "max-content" : "auto";
|
|
15
|
+
const rootRef = React.useRef(null);
|
|
16
|
+
const mountedRef = React.useRef(false);
|
|
17
|
+
const animatedActiveRef = React.useRef(active);
|
|
18
|
+
const frameRef = React.useRef(null);
|
|
19
|
+
const onAfterCloseRef = useHandlerRef(onAfterClose);
|
|
20
|
+
const [animatedSize, setAnimatedSize] = React.useState(active ? autoSize : null);
|
|
21
|
+
// Landmark roles have to be labelled, otherwise they pollute the page landmark navigation
|
|
22
|
+
const labelled = Boolean(attributes?.["aria-label"] || attributes?.["aria-labelledby"]);
|
|
23
|
+
const rootClassNames = classNames(s.root, s[`--orientation-${orientation}`], animatedSize !== null && animatedSize !== 0 && s["--visible"], mountedRef.current && animatedSize !== autoSize && s["--animated"], className);
|
|
24
|
+
const handleTransitionEnd = (e) => {
|
|
25
|
+
if (e.propertyName !== sizeProperty || e.target !== rootRef.current)
|
|
26
|
+
return;
|
|
27
|
+
setAnimatedSize(active ? autoSize : null);
|
|
28
|
+
if (!active)
|
|
29
|
+
onAfterCloseRef.current?.();
|
|
30
|
+
};
|
|
31
|
+
// Avoid animations happening if component is active by default
|
|
32
|
+
// onNextFrame lets us wait for the component to render first
|
|
33
|
+
React.useEffect(() => {
|
|
34
|
+
onNextFrame(() => {
|
|
35
|
+
mountedRef.current = true;
|
|
36
|
+
});
|
|
37
|
+
}, []);
|
|
38
|
+
// Animating only on the active prop change keeps React from replaying the animation
|
|
39
|
+
// when it tears down and sets up the effects of the mounted component again
|
|
40
|
+
useIsomorphicLayoutEffect(() => {
|
|
41
|
+
const rootEl = rootRef.current;
|
|
42
|
+
const activeChanged = animatedActiveRef.current !== active;
|
|
43
|
+
animatedActiveRef.current = active;
|
|
44
|
+
if (!rootEl || !activeChanged)
|
|
45
|
+
return;
|
|
46
|
+
if (frameRef.current !== null)
|
|
47
|
+
cancelAnimationFrame(frameRef.current);
|
|
48
|
+
frameRef.current = null;
|
|
49
|
+
const settle = () => {
|
|
50
|
+
rootEl.style[sizeProperty] = "";
|
|
51
|
+
setAnimatedSize(active ? autoSize : null);
|
|
52
|
+
if (!active)
|
|
53
|
+
onAfterCloseRef.current?.();
|
|
54
|
+
};
|
|
55
|
+
if (!mountedRef.current || !checkTransitions()) {
|
|
56
|
+
settle();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const measure = () => (horizontal ? rootEl.clientWidth : rootEl.clientHeight);
|
|
60
|
+
const currentSize = measure();
|
|
61
|
+
if (active)
|
|
62
|
+
rootEl.style[sizeProperty] = autoSize;
|
|
63
|
+
const targetSize = active ? measure() : 0;
|
|
64
|
+
if (targetSize === currentSize) {
|
|
65
|
+
settle();
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
rootEl.style[sizeProperty] = `${currentSize}px`;
|
|
69
|
+
frameRef.current = requestAnimationFrame(() => {
|
|
70
|
+
frameRef.current = null;
|
|
71
|
+
setAnimatedSize(targetSize);
|
|
72
|
+
});
|
|
73
|
+
}, [active, horizontal, sizeProperty, autoSize, onAfterCloseRef]);
|
|
74
|
+
return (_jsx("div", { ...attributes, className: rootClassNames, ref: rootRef, style: animatedSize !== null
|
|
75
|
+
? {
|
|
76
|
+
width: horizontal ? animatedSize : undefined,
|
|
77
|
+
height: horizontal ? undefined : animatedSize,
|
|
78
|
+
overflow: animatedSize === autoSize ? "visible" : undefined,
|
|
79
|
+
}
|
|
80
|
+
: undefined, onTransitionEnd: handleTransitionEnd,
|
|
81
|
+
// oxlint-disable-next-line jsx-a11y/prefer-tag-over-role
|
|
82
|
+
role: labelled ? "region" : undefined, hidden: !active && animatedSize === null, children: horizontal ? _jsx("div", { className: s.content, children: children }) : children }));
|
|
83
|
+
};
|
|
84
|
+
Expandable.displayName = "Expandable";
|
|
85
|
+
export default Expandable;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.root{overflow:hidden;position:relative;opacity:0}.root.--orientation-vertical{height:0}.root.--orientation-horizontal{width:0;min-width:0}.--orientation-horizontal>.content{width:max-content}.root.--visible{opacity:1}.root.--animated{transition:opacity var(--rs-duration-medium) var(--rs-easing-standard)}.root.--animated.--orientation-vertical{transition:height var(--rs-duration-medium) var(--rs-easing-standard),opacity var(--rs-duration-medium) var(--rs-easing-standard)}.root.--animated.--orientation-horizontal{transition:width var(--rs-duration-medium) var(--rs-easing-standard),opacity var(--rs-duration-medium) var(--rs-easing-standard)}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { ClassName } from "@reshaped/utilities";
|
|
3
|
+
import type { Attributes } from "../../types/global";
|
|
4
|
+
export type Orientation = "vertical" | "horizontal";
|
|
5
|
+
export type Props = {
|
|
6
|
+
/** Node for inserting the content */
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
/** Control the visibility of the content */
|
|
9
|
+
active?: boolean;
|
|
10
|
+
/** Axis the content expands along */
|
|
11
|
+
orientation?: Orientation;
|
|
12
|
+
/** Callback after the content close transition is complete */
|
|
13
|
+
onAfterClose?: () => void;
|
|
14
|
+
/** Additional classname for the root element */
|
|
15
|
+
className?: ClassName;
|
|
16
|
+
/** Additional attributes for the root element */
|
|
17
|
+
attributes?: Attributes<"div">;
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Mock } from "storybook/test";
|
|
4
|
+
declare const _default: {
|
|
5
|
+
title: string;
|
|
6
|
+
component: React.FC<import("../../../components/Expandable").ExpandableProps>;
|
|
7
|
+
};
|
|
8
|
+
export default _default;
|
|
9
|
+
export declare const base: StoryObj;
|
|
10
|
+
export declare const onAfterClose: StoryObj<{
|
|
11
|
+
handleAfterClose: Mock;
|
|
12
|
+
}>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.onAfterClose = exports.base = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const test_1 = require("storybook/test");
|
|
9
|
+
const Button_1 = __importDefault(require("../../../components/Button"));
|
|
10
|
+
const Expandable_1 = __importDefault(require("../../../components/Expandable"));
|
|
11
|
+
const View_1 = __importDefault(require("../../../components/View"));
|
|
12
|
+
const animation_1 = require("../../../utilities/animation");
|
|
13
|
+
const storybook_1 = require("../../../utilities/storybook");
|
|
14
|
+
exports.default = {
|
|
15
|
+
title: "Utility components/Expandable",
|
|
16
|
+
component: Expandable_1.default,
|
|
17
|
+
};
|
|
18
|
+
exports.base = {
|
|
19
|
+
name: "orientation",
|
|
20
|
+
render: () => {
|
|
21
|
+
const [active, setActive] = react_1.default.useState(false);
|
|
22
|
+
const [activeHorizontal, setActiveHorizontal] = react_1.default.useState(false);
|
|
23
|
+
return (<storybook_1.Example>
|
|
24
|
+
<storybook_1.Example.Item title="orientation: vertical">
|
|
25
|
+
<View_1.default align="start">
|
|
26
|
+
<Button_1.default onClick={() => setActive((prev) => !prev)}>Toggle</Button_1.default>
|
|
27
|
+
</View_1.default>
|
|
28
|
+
<Expandable_1.default active={active} attributes={{ "aria-label": "Content" }}>
|
|
29
|
+
<View_1.default paddingTop={2}>
|
|
30
|
+
<storybook_1.Placeholder />
|
|
31
|
+
</View_1.default>
|
|
32
|
+
</Expandable_1.default>
|
|
33
|
+
</storybook_1.Example.Item>
|
|
34
|
+
|
|
35
|
+
<storybook_1.Example.Item title="orientation: horizontal">
|
|
36
|
+
<View_1.default gap={2} align="start">
|
|
37
|
+
<Button_1.default onClick={() => setActiveHorizontal((prev) => !prev)}>Toggle</Button_1.default>
|
|
38
|
+
<View_1.default direction="row" gap={0} align="center">
|
|
39
|
+
<Expandable_1.default active={activeHorizontal} orientation="horizontal" attributes={{ "aria-label": "Content" }}>
|
|
40
|
+
<View_1.default width="200px" paddingEnd={2}>
|
|
41
|
+
<storybook_1.Placeholder>Horizontal</storybook_1.Placeholder>
|
|
42
|
+
</View_1.default>
|
|
43
|
+
</Expandable_1.default>
|
|
44
|
+
<storybook_1.Placeholder>Sibling</storybook_1.Placeholder>
|
|
45
|
+
</View_1.default>
|
|
46
|
+
</View_1.default>
|
|
47
|
+
</storybook_1.Example.Item>
|
|
48
|
+
</storybook_1.Example>);
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
exports.onAfterClose = {
|
|
52
|
+
name: "onAfterClose",
|
|
53
|
+
args: {
|
|
54
|
+
handleAfterClose: (0, test_1.fn)(),
|
|
55
|
+
},
|
|
56
|
+
render: (args) => {
|
|
57
|
+
const [active, setActive] = react_1.default.useState(true);
|
|
58
|
+
return (<View_1.default gap={2} align="start">
|
|
59
|
+
<Button_1.default onClick={() => setActive((prev) => !prev)}>Toggle</Button_1.default>
|
|
60
|
+
<Expandable_1.default active={active} onAfterClose={args.handleAfterClose} attributes={{ "aria-label": "Content" }}>
|
|
61
|
+
<storybook_1.Placeholder />
|
|
62
|
+
</Expandable_1.default>
|
|
63
|
+
</View_1.default>);
|
|
64
|
+
},
|
|
65
|
+
play: async ({ canvas, args }) => {
|
|
66
|
+
const { handleAfterClose } = args;
|
|
67
|
+
const trigger = canvas.getByRole("button", { name: "Toggle" });
|
|
68
|
+
const content = canvas.getByRole("region", { hidden: true });
|
|
69
|
+
// Transitions are locked for a frame while the color mode is applied
|
|
70
|
+
await (0, test_1.waitFor)(() => (0, test_1.expect)((0, animation_1.checkTransitions)()).toBe(true));
|
|
71
|
+
(0, test_1.expect)(handleAfterClose).not.toBeCalled();
|
|
72
|
+
await test_1.userEvent.click(trigger);
|
|
73
|
+
// Resolves only once the closing transition is over, not when active changes
|
|
74
|
+
(0, test_1.expect)(handleAfterClose).not.toBeCalled();
|
|
75
|
+
(0, test_1.expect)(content).toBeVisible();
|
|
76
|
+
await (0, test_1.waitFor)(() => (0, test_1.expect)(handleAfterClose).toBeCalledTimes(1));
|
|
77
|
+
(0, test_1.expect)(content).not.toBeVisible();
|
|
78
|
+
await test_1.userEvent.click(trigger);
|
|
79
|
+
await (0, test_1.waitFor)(() => (0, test_1.expect)(content).toBeVisible());
|
|
80
|
+
(0, test_1.expect)(handleAfterClose).toBeCalledTimes(1);
|
|
81
|
+
},
|
|
82
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { classNames } from "@reshaped/utilities";
|
|
4
|
+
import Presence from "../../components/_private/Presence";
|
|
5
|
+
import Icon from "../../components/Icon";
|
|
6
|
+
import s from "./IconToggle.module.css";
|
|
7
|
+
const IconToggle = (props) => {
|
|
8
|
+
const { id, className, attributes, ...iconProps } = props;
|
|
9
|
+
const rootClassName = classNames(s.root, className);
|
|
10
|
+
return (_jsx(Presence, { itemKey: id, className: rootClassName, attributes: attributes, itemClassName: s.item, enterClassName: s["--enter"], exitClassName: s["--exit"], children: _jsx(Icon, { ...iconProps }) }));
|
|
11
|
+
};
|
|
12
|
+
IconToggle.displayName = "IconToggle";
|
|
13
|
+
export default IconToggle;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.root{justify-items:center;align-items:center}.item{display:flex}.--enter{animation:rs-icon-toggle-enter var(--rs-duration-medium) var(--rs-easing-standard)}.--exit{animation:rs-icon-toggle-exit var(--rs-duration-medium) var(--rs-easing-standard) forwards}@keyframes rs-icon-toggle-enter{0%{opacity:0;filter:blur(2px);transform:scale(.25)}}@keyframes rs-icon-toggle-exit{to{opacity:0;filter:blur(2px);transform:scale(.25)}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./IconToggle";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
declare const _default: {
|
|
3
|
+
title: string;
|
|
4
|
+
component: React.FC<import("../../../components/IconToggle").IconToggleProps>;
|
|
5
|
+
};
|
|
6
|
+
export default _default;
|
|
7
|
+
export declare const svg: {
|
|
8
|
+
name: string;
|
|
9
|
+
render: () => React.JSX.Element;
|
|
10
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.svg = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const Actionable_1 = __importDefault(require("../../../components/Actionable"));
|
|
9
|
+
const IconToggle_1 = __importDefault(require("../../../components/IconToggle"));
|
|
10
|
+
const Checkmark_1 = __importDefault(require("../../../icons/Checkmark"));
|
|
11
|
+
const Close_1 = __importDefault(require("../../../icons/Close"));
|
|
12
|
+
exports.default = {
|
|
13
|
+
title: "Utility components/IconToggle",
|
|
14
|
+
component: IconToggle_1.default,
|
|
15
|
+
};
|
|
16
|
+
exports.svg = {
|
|
17
|
+
name: "svg",
|
|
18
|
+
render: () => {
|
|
19
|
+
const [active, setActive] = react_1.default.useState(false);
|
|
20
|
+
return (<Actionable_1.default onClick={() => setActive((prev) => !prev)} attributes={{ style: { padding: 16 } }}>
|
|
21
|
+
<IconToggle_1.default svg={active ? <Checkmark_1.default /> : <Close_1.default />} id={active} size={5} color={active ? "positive" : "neutral"}/>
|
|
22
|
+
</Actionable_1.default>);
|
|
23
|
+
},
|
|
24
|
+
};
|
|
@@ -7,6 +7,8 @@ import s from "./Image.module.css";
|
|
|
7
7
|
const Image = (props) => {
|
|
8
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
|
+
// Image attributes are merged on top of the root attributes when rendering the image element
|
|
11
|
+
const passedImageRef = passedImageAttributes?.ref ?? attributes?.ref;
|
|
10
12
|
const mixinStyles = resolveMixin({ radius: borderRadius, width, height, maxWidth, aspectRatio });
|
|
11
13
|
const rootClassNames = classNames(s.root, mixinStyles.classNames, outline && s["--outline"], className);
|
|
12
14
|
const imageClassNames = classNames([
|
|
@@ -28,6 +30,17 @@ const Image = (props) => {
|
|
|
28
30
|
onError?.(e);
|
|
29
31
|
passedImageAttributes?.onError?.(e);
|
|
30
32
|
};
|
|
33
|
+
const handleImageRef = React.useCallback((el) => {
|
|
34
|
+
if (typeof passedImageRef === "function")
|
|
35
|
+
passedImageRef(el);
|
|
36
|
+
else if (passedImageRef)
|
|
37
|
+
passedImageRef.current = el;
|
|
38
|
+
// Server rendered images start loading before React hydrates,
|
|
39
|
+
// so their error event can fire before the error handler gets attached
|
|
40
|
+
if (!el || !src || !el.complete || el.naturalWidth > 0)
|
|
41
|
+
return;
|
|
42
|
+
el.decode().catch(() => setStatus("error"));
|
|
43
|
+
}, [passedImageRef, src]);
|
|
31
44
|
React.useEffect(() => {
|
|
32
45
|
setStatus("loading");
|
|
33
46
|
}, [src]);
|
|
@@ -54,6 +67,7 @@ const Image = (props) => {
|
|
|
54
67
|
role: alt ? undefined : "presentation",
|
|
55
68
|
onLoad: handleLoad,
|
|
56
69
|
onError: handleError,
|
|
70
|
+
ref: handleImageRef,
|
|
57
71
|
className: outline ? imageClassNames : classNames([imageClassNames, rootClassNames]),
|
|
58
72
|
style,
|
|
59
73
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ActionableRef } from "../../components/Actionable";
|
|
2
|
-
declare const Link: import("react").ForwardRefExoticComponent<Pick<import("../../components/Actionable").ActionableProps, "attributes" | "children" | "className" | "disabled" | "href" | "onClick" | "render" | "stopPropagation" | "type"> & {
|
|
2
|
+
declare const Link: import("react").ForwardRefExoticComponent<Pick<import("../../components/Actionable").ActionableProps, "attributes" | "children" | "className" | "disabled" | "fullWidth" | "href" | "onClick" | "render" | "stopPropagation" | "type"> & {
|
|
3
3
|
icon?: import("../../components/Icon").IconProps["svg"];
|
|
4
4
|
color?: "inherit" | "critical" | "primary" | "positive" | "warning";
|
|
5
5
|
variant?: "plain" | "underline";
|
|
@@ -5,9 +5,9 @@ import Actionable from "../../components/Actionable";
|
|
|
5
5
|
import Icon from "../../components/Icon";
|
|
6
6
|
import s from "./Link.module.css";
|
|
7
7
|
const Link = forwardRef((props, ref) => {
|
|
8
|
-
const { icon, disabled, href, color = "primary", variant = "underline", className, children, attributes, type, onClick, stopPropagation, render, } = props;
|
|
8
|
+
const { icon, disabled, href, color = "primary", variant = "underline", className, children, attributes, type, onClick, stopPropagation, render, fullWidth, } = props;
|
|
9
9
|
const rootClassNames = classNames(s.root, className, disabled && s["--disabled"], variant && s[`--variant-${variant}`], color && s[`--color-${color}`], icon && s["--with-icon"]);
|
|
10
|
-
return (_jsxs(Actionable, { href: href, disabled: disabled, className: rootClassNames, attributes: attributes, type: type, onClick: onClick, ref: ref, stopPropagation: stopPropagation, render: render, children: [icon && _jsx(Icon, { svg: icon }), children] }));
|
|
10
|
+
return (_jsxs(Actionable, { href: href, disabled: disabled, fullWidth: fullWidth, className: rootClassNames, attributes: attributes, type: type, onClick: onClick, ref: ref, stopPropagation: stopPropagation, render: render, children: [icon && _jsx(Icon, { svg: icon }), children] }));
|
|
11
11
|
});
|
|
12
12
|
Link.displayName = "Link";
|
|
13
13
|
export default Link;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ActionableProps } from "../../components/Actionable";
|
|
2
2
|
import type { IconProps } from "../../components/Icon";
|
|
3
|
-
export type Props = Pick<ActionableProps, "attributes" | "className" | "disabled" | "children" | "href" | "onClick" | "type" | "stopPropagation" | "render"> & {
|
|
3
|
+
export type Props = Pick<ActionableProps, "attributes" | "className" | "disabled" | "children" | "href" | "onClick" | "type" | "stopPropagation" | "render" | "fullWidth"> & {
|
|
4
4
|
/** Icon at the start position */
|
|
5
5
|
icon?: IconProps["svg"];
|
|
6
6
|
/** Link color, based on the color tokens
|
|
@@ -2,7 +2,7 @@ import { StoryObj } from "@storybook/react-vite";
|
|
|
2
2
|
import { fn } from "storybook/test";
|
|
3
3
|
declare const _default: {
|
|
4
4
|
title: string;
|
|
5
|
-
component: import("react").ForwardRefExoticComponent<Pick<import("../../Actionable").ActionableProps, "attributes" | "children" | "className" | "disabled" | "href" | "onClick" | "render" | "stopPropagation" | "type"> & {
|
|
5
|
+
component: import("react").ForwardRefExoticComponent<Pick<import("../../Actionable").ActionableProps, "attributes" | "children" | "className" | "disabled" | "fullWidth" | "href" | "onClick" | "render" | "stopPropagation" | "type"> & {
|
|
6
6
|
icon?: import("../../Icon").IconProps["svg"];
|
|
7
7
|
color?: "inherit" | "critical" | "primary" | "positive" | "warning";
|
|
8
8
|
variant?: "plain" | "underline";
|
|
@@ -35,6 +35,7 @@ export declare const hrefOnClick: StoryObj<{
|
|
|
35
35
|
}>;
|
|
36
36
|
export declare const disabled: StoryObj;
|
|
37
37
|
export declare const render: StoryObj;
|
|
38
|
+
export declare const fullWidth: StoryObj;
|
|
38
39
|
export declare const className: StoryObj;
|
|
39
40
|
export declare const testMultilineInText: {
|
|
40
41
|
name: string;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.testMultilineInText = exports.className = exports.render = exports.disabled = exports.hrefOnClick = exports.onClick = exports.href = exports.icon = exports.color = exports.variant = void 0;
|
|
6
|
+
exports.testMultilineInText = exports.className = exports.fullWidth = exports.render = exports.disabled = exports.hrefOnClick = exports.onClick = exports.href = exports.icon = exports.color = exports.variant = void 0;
|
|
7
7
|
const test_1 = require("storybook/test");
|
|
8
8
|
const Link_1 = __importDefault(require("../../../components/Link"));
|
|
9
9
|
const Text_1 = __importDefault(require("../../../components/Text"));
|
|
@@ -147,6 +147,12 @@ exports.render = {
|
|
|
147
147
|
(0, test_1.expect)(el.tagName).toBe("SECTION");
|
|
148
148
|
},
|
|
149
149
|
};
|
|
150
|
+
exports.fullWidth = {
|
|
151
|
+
name: "fullWidth",
|
|
152
|
+
render: () => (<Link_1.default fullWidth onClick={() => { }}>
|
|
153
|
+
Trigger
|
|
154
|
+
</Link_1.default>),
|
|
155
|
+
};
|
|
150
156
|
exports.className = {
|
|
151
157
|
name: "className, attributes",
|
|
152
158
|
render: () => (<div data-testid="root">
|
|
@@ -9,8 +9,20 @@ import s from "./MenuItem.module.css";
|
|
|
9
9
|
const MenuItem = forwardRef((props, ref) => {
|
|
10
10
|
const { icon, startSlot, endSlot, children, color = "primary", selected, highlighted, disabled, onClick, href, size = "medium", stopPropagation, as, render, className, attributes, } = props;
|
|
11
11
|
const rootClassNames = classNames(s.root, className, responsiveClassNames(s, "--size", size), color && s[`--color-${color}`], selected && s["--selected"], disabled && s["--disabled"], highlighted && s["--highlighted"]);
|
|
12
|
-
const gapSize = responsivePropDependency(size, (size) =>
|
|
13
|
-
|
|
12
|
+
const gapSize = responsivePropDependency(size, (size) => {
|
|
13
|
+
if (size === "large")
|
|
14
|
+
return 3;
|
|
15
|
+
if (size === "small")
|
|
16
|
+
return 1.5;
|
|
17
|
+
return 2;
|
|
18
|
+
});
|
|
19
|
+
const iconSize = responsivePropDependency(size, (size) => {
|
|
20
|
+
if (size === "large")
|
|
21
|
+
return 5;
|
|
22
|
+
if (size === "small")
|
|
23
|
+
return 3.5;
|
|
24
|
+
return 4;
|
|
25
|
+
});
|
|
14
26
|
return (_jsx(Actionable, { disabled: disabled, className: rootClassNames, attributes: { ...attributes, "data-rs-aligner-target": true }, onClick: onClick, href: href, ref: ref, as: as, stopPropagation: stopPropagation, render: render, 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] }) }));
|
|
15
27
|
});
|
|
16
28
|
MenuItem.displayName = "MenuItem";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.root,button.root{display:block;transition:background-color var(--rs-duration-fast) var(--rs-easing-standard);padding:var(--rs-p-v) var(--rs-p-h);font-family:var(--rs-font-family-body);font-weight:var(--rs-font-weight-medium);color:var(--rs-menu-item-color);background-color:var(--rs-menu-item-bg-color);border-radius:var(--rs-radius-medium)}.root[role=option],button.root[role=option]{transition:none}[data-rs-keyboard] .root[role=option]:focus,[data-rs-keyboard] button.root[role=option]:focus{outline:none;background-color:var(--rs-color-background-neutral-highlighted-faded)}.root.--highlighted,.root.--highlighted .content,.root.--highlighted .icon,button.root.--highlighted,button.root.--highlighted .content,button.root.--highlighted .icon{transition-duration:var(--rs-duration-rapid)}@media (hover:hover) and (pointer:fine){.root:hover,.root:hover .content,.root:hover .icon,button.root:hover,button.root:hover .content,button.root:hover .icon{transition-duration:var(--rs-duration-rapid)}}.icon{color:var(--rs-menu-item-icon-color,inherit)}.content,.icon{transition:var(--rs-duration-rapid) var(--rs-easing-standard);transition-property:color}.--size-small{--rs-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-p-h:var(--rs-unit-
|
|
1
|
+
.root,button.root{display:block;transition:background-color var(--rs-duration-fast) var(--rs-easing-standard);padding:var(--rs-p-v) var(--rs-p-h);font-family:var(--rs-font-family-body);font-weight:var(--rs-font-weight-medium);color:var(--rs-menu-item-color);background-color:var(--rs-menu-item-bg-color);border-radius:var(--rs-radius-medium)}.root[role=option],button.root[role=option]{transition:none}[data-rs-keyboard] .root[role=option]:focus,[data-rs-keyboard] button.root[role=option]:focus{outline:none;background-color:var(--rs-color-background-neutral-highlighted-faded)}.root.--highlighted,.root.--highlighted .content,.root.--highlighted .icon,button.root.--highlighted,button.root.--highlighted .content,button.root.--highlighted .icon{transition-duration:var(--rs-duration-rapid)}@media (hover:hover) and (pointer:fine){.root:hover,.root:hover .content,.root:hover .icon,button.root:hover,button.root:hover .content,button.root:hover .icon{transition-duration:var(--rs-duration-rapid)}}.icon{color:var(--rs-menu-item-icon-color,inherit)}.content,.icon{transition:var(--rs-duration-rapid) var(--rs-easing-standard);transition-property:color}.--size-small{--rs-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-p-h:var(--rs-unit-x2);--rs-menu-item-radius:var(--rs-radius-small);font-size:var(--rs-font-size-caption-1);line-height:var(--rs-line-height-caption-1);letter-spacing:var(--rs-letter-spacing-caption-1)}.--size-medium{--rs-p-v:var(--rs-unit-x2);--rs-p-h:calc(var(--rs-unit-x2) + var(--rs-unit-x0-5));--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-2);line-height:var(--rs-line-height-body-2);letter-spacing:var(--rs-letter-spacing-body-2)}.--size-large{--rs-p-v:var(--rs-unit-x3);--rs-p-h:var(--rs-unit-x3);--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-1);line-height:var(--rs-line-height-body-1);letter-spacing:var(--rs-letter-spacing-body-1)}.--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:var(--rs-color-background-neutral-highlighted-faded)}@media (hover:hover) and (pointer:fine){.--color-neutral:hover{--rs-menu-item-bg-color:var(--rs-color-background-neutral-highlighted-faded)}}.--color-critical{--rs-menu-item-icon-color:var(--rs-color-foreground-neutral-faded)}.--color-critical.--highlighted,.--color-critical.--selected,.--color-critical[data-rs-focus]{--rs-menu-item-bg-color:var(--rs-color-background-neutral-highlighted-faded);--rs-menu-item-color:var(--rs-color-foreground-critical);--rs-menu-item-icon-color:var(--rs-color-foreground-critical)}@media (hover:hover) and (pointer:fine){.--color-critical:hover{--rs-menu-item-bg-color:var(--rs-color-background-neutral-highlighted-faded);--rs-menu-item-color:var(--rs-color-foreground-critical);--rs-menu-item-icon-color:var(--rs-color-foreground-critical)}}.--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:var(--rs-color-background-neutral-highlighted-faded)}@media (hover:hover) and (pointer:fine){.--color-primary:hover{--rs-menu-item-bg-color:var(--rs-color-background-neutral-highlighted-faded)}}.--color-primary.--selected,.--color-primary.--selected:hover{--rs-menu-item-bg-color:var(--rs-color-background-primary-highlighted-faded);--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 ){.--size-small--m{--rs-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-p-h:var(--rs-unit-x2);--rs-menu-item-radius:var(--rs-radius-small);font-size:var(--rs-font-size-caption-1);line-height:var(--rs-line-height-caption-1);letter-spacing:var(--rs-letter-spacing-caption-1)}.--size-medium--m{--rs-p-v:var(--rs-unit-x2);--rs-p-h:calc(var(--rs-unit-x2) + var(--rs-unit-x0-5));--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-2);line-height:var(--rs-line-height-body-2);letter-spacing:var(--rs-letter-spacing-body-2)}.--size-large--m{--rs-p-v:var(--rs-unit-x3);--rs-p-h:var(--rs-unit-x3);--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-1);line-height:var(--rs-line-height-body-1);letter-spacing:var(--rs-letter-spacing-body-1)}}@media (--rs-viewport-l ){.--size-small--l{--rs-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-p-h:var(--rs-unit-x2);--rs-menu-item-radius:var(--rs-radius-small);font-size:var(--rs-font-size-caption-1);line-height:var(--rs-line-height-caption-1);letter-spacing:var(--rs-letter-spacing-caption-1)}.--size-medium--l{--rs-p-v:var(--rs-unit-x2);--rs-p-h:calc(var(--rs-unit-x2) + var(--rs-unit-x0-5));--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-2);line-height:var(--rs-line-height-body-2);letter-spacing:var(--rs-letter-spacing-body-2)}.--size-large--l{--rs-p-v:var(--rs-unit-x3);--rs-p-h:var(--rs-unit-x3);--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-1);line-height:var(--rs-line-height-body-1);letter-spacing:var(--rs-letter-spacing-body-1)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-p-h:var(--rs-unit-x2);--rs-menu-item-radius:var(--rs-radius-small);font-size:var(--rs-font-size-caption-1);line-height:var(--rs-line-height-caption-1);letter-spacing:var(--rs-letter-spacing-caption-1)}.--size-medium--xl{--rs-p-v:var(--rs-unit-x2);--rs-p-h:calc(var(--rs-unit-x2) + var(--rs-unit-x0-5));--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-2);line-height:var(--rs-line-height-body-2);letter-spacing:var(--rs-letter-spacing-body-2)}.--size-large--xl{--rs-p-v:var(--rs-unit-x3);--rs-p-h:var(--rs-unit-x3);--rs-menu-item-radius:var(--rs-radius-medium);font-size:var(--rs-font-size-body-1);line-height:var(--rs-line-height-body-1);letter-spacing:var(--rs-letter-spacing-body-1)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.root{--rs-p-h:var(--rs-select-p-h);--rs-p-v:0px;--rs-select-focus-border-color:var(--rs-color-border-primary);display:flex;align-items:center;position:relative;z-index:0;background:var(--rs-color-background-elevation-base);border-radius:var(--rs-select-radius);min-height:var(--rs-select-min-height)}[data-rs-keyboard] .root:focus-within{box-shadow:var(--rs-outline-shadow)}.input{display:flex;align-items:center;border:0;outline:none;position:relative;background:none;z-index:1;flex-grow:1;width:100%;box-sizing:border-box;-webkit-appearance:none;appearance:none;cursor:pointer;color:var(--rs-color-foreground-neutral);font-weight:var(--rs-font-weight-regular);font-family:var(--rs-font-family-body);font-size:var(--rs-select-font-size);line-height:var(--rs-select-line-height);letter-spacing:var(--rs-select-letter-spacing);min-height:calc(var(--rs-select-min-height) - var(--rs-unit-x2));padding-block:var(--rs-select-p-v);padding-inline-end:calc(var(--rs-select-chevron-size) + var(--rs-select-p-h) + var(--rs-select-gap));padding-inline-start:var(--rs-select-p-h);text-overflow:ellipsis}.input::-ms-expand{display:none}.input.input--placeholder{color:var(--rs-color-foreground-disabled)}.slot{position:relative;z-index:5;display:flex;align-items:center;flex-shrink:0;padding-inline-start:var(--rs-select-p-h);margin-inline-start:calc(var(--rs-select-icon-align) * -1)}.input .slot{padding-inline-start:0;padding-inline-end:var(--rs-select-gap)}.arrow{color:var(--rs-color-foreground-neutral-faded);display:flex;inset-block-start:50%;inset-inline-end:calc(var(--rs-select-p-h) - var(--rs-select-icon-align));pointer-events:none;position:absolute;transform:translateY(-50%);z-index:5}.group{--rs-select-group-padding:calc(var(--rs-unit-x1) - 1px);margin-inline:calc((var(--rs-select-group-padding) * -1));padding-inline:var(--rs-select-group-padding)}.group:not(:first-child){border-top:1px solid var(--rs-color-border-neutral-faded);margin-top:var(--rs-select-group-padding);padding-top:var(--rs-select-group-padding)}.group:not(:first-child) .group-label{padding-top:var(--rs-unit-x3)}.group-label{padding:var(--rs-unit-x2) var(--rs-unit-x3) var(--rs-unit-x1)}.--size-small{--rs-select-gap:var(--rs-unit-x1-5);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small);--rs-select-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-select-p-h:var(--rs-unit-x2);--rs-select-font-size:var(--rs-font-size-caption-1);--rs-select-line-height:var(--rs-line-height-caption-1);--rs-select-letter-spacing:var(--rs-letter-spacing-caption-1);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-select-p-v) * 2)}.--size-medium{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x2);--rs-select-p-h:var(--rs-unit-x3);--rs-select-font-size:var(--rs-font-size-body-2);--rs-select-line-height:var(--rs-line-height-body-2);--rs-select-letter-spacing:var(--rs-letter-spacing-body-2);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x2) * 2)}.--size-large{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x3);--rs-select-p-h:var(--rs-unit-x4);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x3) * 2)}.--size-xlarge{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x4);--rs-select-p-h:var(--rs-unit-x5);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x4) * 2)}.root.--variant-faded{background:var(--rs-color-background-neutral-faded)}.root.--variant-ghost{background:transparent}.root.--variant-headless{--rs-select-focus-border-color:transparent;background:transparent;box-shadow:none!important}.root.--status-error:not(.--variant-headless){box-shadow:0 0 0 var(--rs-outline-width) var(--rs-color-border-critical) inset}.root.--disabled{background:var(--rs-color-background-disabled-faded)}.root.--disabled .arrow,.root.--disabled .input{cursor:not-allowed;color:var(--rs-color-foreground-disabled)}@media (--rs-viewport-s ) and (hover:none){.input{font-size:var(--rs-font-size-body-1)!important}}@media (--rs-viewport-m ){.--size-small--m{--rs-select-gap:var(--rs-unit-x1-5);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small);--rs-select-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-select-p-h:var(--rs-unit-x2);--rs-select-font-size:var(--rs-font-size-caption-1);--rs-select-line-height:var(--rs-line-height-caption-1);--rs-select-letter-spacing:var(--rs-letter-spacing-caption-1);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-select-p-v) * 2)}.--size-medium--m{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x2);--rs-select-p-h:var(--rs-unit-x3);--rs-select-font-size:var(--rs-font-size-body-2);--rs-select-line-height:var(--rs-line-height-body-2);--rs-select-letter-spacing:var(--rs-letter-spacing-body-2);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x2) * 2)}.--size-large--m{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x3);--rs-select-p-h:var(--rs-unit-x4);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x3) * 2)}.--size-xlarge--m{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x4);--rs-select-p-h:var(--rs-unit-x5);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x4) * 2)}}@media (--rs-viewport-l ){.--size-small--l{--rs-select-gap:var(--rs-unit-x1-5);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small);--rs-select-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-select-p-h:var(--rs-unit-x2);--rs-select-font-size:var(--rs-font-size-caption-1);--rs-select-line-height:var(--rs-line-height-caption-1);--rs-select-letter-spacing:var(--rs-letter-spacing-caption-1);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-select-p-v) * 2)}.--size-medium--l{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x2);--rs-select-p-h:var(--rs-unit-x3);--rs-select-font-size:var(--rs-font-size-body-2);--rs-select-line-height:var(--rs-line-height-body-2);--rs-select-letter-spacing:var(--rs-letter-spacing-body-2);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x2) * 2)}.--size-large--l{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x3);--rs-select-p-h:var(--rs-unit-x4);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x3) * 2)}.--size-xlarge--l{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x4);--rs-select-p-h:var(--rs-unit-x5);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x4) * 2)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-select-gap:var(--rs-unit-x1-5);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small);--rs-select-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-select-p-h:var(--rs-unit-x2);--rs-select-font-size:var(--rs-font-size-caption-1);--rs-select-line-height:var(--rs-line-height-caption-1);--rs-select-letter-spacing:var(--rs-letter-spacing-caption-1);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-select-p-v) * 2)}.--size-medium--xl{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x2);--rs-select-p-h:var(--rs-unit-x3);--rs-select-font-size:var(--rs-font-size-body-2);--rs-select-line-height:var(--rs-line-height-body-2);--rs-select-letter-spacing:var(--rs-letter-spacing-body-2);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x2) * 2)}.--size-large--xl{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x3);--rs-select-p-h:var(--rs-unit-x4);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x3) * 2)}.--size-xlarge--xl{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x4);--rs-select-p-h:var(--rs-unit-x5);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x4) * 2)}}
|
|
1
|
+
.root{--rs-p-h:var(--rs-select-p-h);--rs-p-v:0px;--rs-select-focus-border-color:var(--rs-color-border-primary);display:flex;align-items:center;position:relative;z-index:0;background:var(--rs-color-background-elevation-base);border-radius:var(--rs-select-radius);min-height:var(--rs-select-min-height)}[data-rs-keyboard] .root:focus-within{box-shadow:var(--rs-outline-shadow)}.input{display:flex;align-items:center;border:0;outline:none;position:relative;background:none;z-index:1;flex-grow:1;width:100%;box-sizing:border-box;-webkit-appearance:none;appearance:none;cursor:pointer;color:var(--rs-color-foreground-neutral);font-weight:var(--rs-font-weight-regular);font-family:var(--rs-font-family-body);font-size:var(--rs-select-font-size);line-height:var(--rs-select-line-height);letter-spacing:var(--rs-select-letter-spacing);min-height:calc(var(--rs-select-min-height) - var(--rs-unit-x2));padding-block:var(--rs-select-p-v);padding-inline-end:calc(var(--rs-select-chevron-size) + var(--rs-select-p-h) + var(--rs-select-gap));padding-inline-start:var(--rs-select-p-h);text-overflow:ellipsis}.input::-ms-expand{display:none}.input.input--placeholder{color:var(--rs-color-foreground-disabled)}.slot{position:relative;z-index:5;display:flex;align-items:center;flex-shrink:0;padding-inline-start:var(--rs-select-p-h);margin-inline-start:calc(var(--rs-select-icon-align) * -1)}.input .slot{padding-inline-start:0;padding-inline-end:var(--rs-select-gap)}.arrow{color:var(--rs-color-foreground-neutral-faded);display:flex;inset-block-start:50%;inset-inline-end:calc(var(--rs-select-p-h) - var(--rs-select-icon-align));pointer-events:none;position:absolute;transform:translateY(-50%);z-index:5}.group{--rs-select-group-padding:calc(var(--rs-unit-x1) - 1px);margin-inline:calc((var(--rs-select-group-padding) * -1));padding-inline:var(--rs-select-group-padding)}.group:not(:first-child){border-top:1px solid var(--rs-color-border-neutral-faded);margin-top:var(--rs-select-group-padding);padding-top:var(--rs-select-group-padding)}.group:not(:first-child) .group-label{padding-top:var(--rs-unit-x3)}.group-label{padding:var(--rs-unit-x2) var(--rs-unit-x3) var(--rs-unit-x1)}.--size-small{--rs-select-gap:var(--rs-unit-x1);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small);--rs-select-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-select-p-h:var(--rs-unit-x2);--rs-select-font-size:var(--rs-font-size-caption-1);--rs-select-line-height:var(--rs-line-height-caption-1);--rs-select-letter-spacing:var(--rs-letter-spacing-caption-1);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-select-p-v) * 2)}.--size-medium{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x2);--rs-select-p-h:var(--rs-unit-x3);--rs-select-font-size:var(--rs-font-size-body-2);--rs-select-line-height:var(--rs-line-height-body-2);--rs-select-letter-spacing:var(--rs-letter-spacing-body-2);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x2) * 2)}.--size-large{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x3);--rs-select-p-h:var(--rs-unit-x4);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x3) * 2)}.--size-xlarge{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x4);--rs-select-p-h:var(--rs-unit-x5);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x4) * 2)}.root.--variant-faded{background:var(--rs-color-background-neutral-faded)}.root.--variant-ghost{background:transparent}.root.--variant-headless{--rs-select-focus-border-color:transparent;background:transparent;box-shadow:none!important}.root.--status-error:not(.--variant-headless){box-shadow:0 0 0 var(--rs-outline-width) var(--rs-color-border-critical) inset}.root.--disabled{background:var(--rs-color-background-disabled-faded)}.root.--disabled .arrow,.root.--disabled .input{cursor:not-allowed;color:var(--rs-color-foreground-disabled)}@media (--rs-viewport-s ) and (hover:none){.input{font-size:var(--rs-font-size-body-1)!important}}@media (--rs-viewport-m ){.--size-small--m{--rs-select-gap:var(--rs-unit-x1);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small);--rs-select-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-select-p-h:var(--rs-unit-x2);--rs-select-font-size:var(--rs-font-size-caption-1);--rs-select-line-height:var(--rs-line-height-caption-1);--rs-select-letter-spacing:var(--rs-letter-spacing-caption-1);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-select-p-v) * 2)}.--size-medium--m{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x2);--rs-select-p-h:var(--rs-unit-x3);--rs-select-font-size:var(--rs-font-size-body-2);--rs-select-line-height:var(--rs-line-height-body-2);--rs-select-letter-spacing:var(--rs-letter-spacing-body-2);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x2) * 2)}.--size-large--m{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x3);--rs-select-p-h:var(--rs-unit-x4);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x3) * 2)}.--size-xlarge--m{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x4);--rs-select-p-h:var(--rs-unit-x5);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x4) * 2)}}@media (--rs-viewport-l ){.--size-small--l{--rs-select-gap:var(--rs-unit-x1);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small);--rs-select-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-select-p-h:var(--rs-unit-x2);--rs-select-font-size:var(--rs-font-size-caption-1);--rs-select-line-height:var(--rs-line-height-caption-1);--rs-select-letter-spacing:var(--rs-letter-spacing-caption-1);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-select-p-v) * 2)}.--size-medium--l{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x2);--rs-select-p-h:var(--rs-unit-x3);--rs-select-font-size:var(--rs-font-size-body-2);--rs-select-line-height:var(--rs-line-height-body-2);--rs-select-letter-spacing:var(--rs-letter-spacing-body-2);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x2) * 2)}.--size-large--l{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x3);--rs-select-p-h:var(--rs-unit-x4);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x3) * 2)}.--size-xlarge--l{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x4);--rs-select-p-h:var(--rs-unit-x5);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x4) * 2)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-select-gap:var(--rs-unit-x1);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small);--rs-select-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-select-p-h:var(--rs-unit-x2);--rs-select-font-size:var(--rs-font-size-caption-1);--rs-select-line-height:var(--rs-line-height-caption-1);--rs-select-letter-spacing:var(--rs-letter-spacing-caption-1);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-select-p-v) * 2)}.--size-medium--xl{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x2);--rs-select-p-h:var(--rs-unit-x3);--rs-select-font-size:var(--rs-font-size-body-2);--rs-select-line-height:var(--rs-line-height-body-2);--rs-select-letter-spacing:var(--rs-letter-spacing-body-2);--rs-select-icon-align:var(--rs-unit-x0-5);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x2) * 2)}.--size-large--xl{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x3);--rs-select-p-h:var(--rs-unit-x4);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x3) * 2)}.--size-xlarge--xl{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium);--rs-select-p-v:var(--rs-unit-x4);--rs-select-p-h:var(--rs-unit-x5);--rs-select-font-size:var(--rs-font-size-body-1);--rs-select-line-height:var(--rs-line-height-body-1);--rs-select-letter-spacing:var(--rs-letter-spacing-body-1);--rs-select-icon-align:var(--rs-unit-x1);--rs-select-min-height:calc(var(--rs-select-line-height) + var(--rs-unit-x4) * 2)}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@property --rs-tabs-mid-l{syntax:"<length>";initial-value:-24px;inherits:false}@property --rs-tabs-stop-l{syntax:"<length>";initial-value:0;inherits:false}@property --rs-tabs-stop-r{syntax:"<length-percentage>";initial-value:100%;inherits:false}@property --rs-tabs-mid-r{syntax:"<length-percentage>";initial-value:calc(100% + 24px);inherits:false}.root{--rs-tabs-gap:var(--rs-unit-x5);--rs-tabs-radius:var(--rs-radius-medium);isolation:isolate;box-sizing:initial;max-width:100%}.inner,.list,.root{position:relative}.list{gap:var(--rs-tabs-gap)}.button{display:block;color:var(--rs-color-foreground-neutral);flex-shrink:0;position:relative;border-radius:var(--rs-tabs-radius);padding:var(--rs-tabs-item-p-v) var(--rs-tabs-item-p-h);z-index:var(--rs-z-index-relative);-webkit-tap-highlight-color:transparent}[data-rs-keyboard] .button:focus:before{content:"";pointer-events:none;position:absolute;border-radius:var(--rs-tabs-radius);outline:var(--rs-outline);inset:0}.button:after{content:"";opacity:0;pointer-events:none}.button--active.button:after{opacity:1}.button.button--disabled{color:var(--rs-color-foreground-disabled)}.buttonContent{display:flex;align-items:center;justify-content:center;gap:var(--rs-tabs-icon-gap);position:relative;z-index:var(--rs-z-index-relative)}.icon{color:inherit;transition:color var(--rs-duration-fast) var(--rs-easing-standard)}.root:not(:has(.selector)) .button:after{transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity}.button:after,.selector{position:absolute;border-radius:var(--rs-tabs-radius);z-index:0}.selector{--rs-tab-selection-x:0;--rs-tab-selection-y:0;--rs-tab-selection-scale-x:0;--rs-tab-selection-scale-y:0;position:absolute;left:0;top:0;z-index:0;height:calc(var(--rs-tab-selection-scale-y) * 1px);width:calc(var(--rs-tab-selection-scale-x) * 1px);transform-origin:0 0;transform:translate(calc(var(--rs-tab-selection-x) * 1px),calc(var(--rs-tab-selection-y) * 1px)) translateZ(0)}.selector.selector--hidden{visibility:hidden}.selector.selector--animated{transition:var(--rs-duration-medium) var(--rs-easing-standard);transition-property:transform,height,width;will-change:transform,height,width}.control{position:absolute;inset-block:0;display:none;align-items:center;z-index:var(--rs-z-index-relative);transition:var(--rs-duration-medium) var(--rs-easing-decelerate);transition-property:opacity,transform;opacity:0;pointer-events:none}.control.control--active{opacity:1;pointer-events:all}[dir=rtl] .control{transform:scaleX(-1)}.control.control--next{inset-inline-end:0}.control.control--prev{inset-inline-start:0}.panel{outline:none}[data-rs-keyboard] .panel:focus{outline:var(--rs-outline)}.panel.panel--hidden{display:none}.--direction-row .inner{white-space:nowrap}.--direction-row .list{display:inline-flex;vertical-align:top;flex-wrap:nowrap;align-items:center}.--direction-column{--rs-tabs-gap:var(--rs-unit-x1)}.--direction-column .list{display:flex;flex-direction:column}.--direction-column .buttonContent{justify-content:flex-start}.--variant-bordered .inner:after{content:"";position:absolute;background-color:var(--rs-color-border-neutral-faded);z-index:var(--rs-z-index-relative)}.--variant-bordered.--direction-row .inner:after{inset-block-end:0;inset-inline:0;height:1px}.--variant-bordered.--direction-column .inner:after{inset-inline-end:0;inset-block:0;width:1px}.--variant-bordered .button,.--variant-borderless .button{
|
|
1
|
+
@property --rs-tabs-mid-l{syntax:"<length>";initial-value:-24px;inherits:false}@property --rs-tabs-stop-l{syntax:"<length>";initial-value:0;inherits:false}@property --rs-tabs-stop-r{syntax:"<length-percentage>";initial-value:100%;inherits:false}@property --rs-tabs-mid-r{syntax:"<length-percentage>";initial-value:calc(100% + 24px);inherits:false}.root{--rs-tabs-gap:var(--rs-unit-x5);--rs-tabs-radius:var(--rs-radius-medium);isolation:isolate;box-sizing:initial;max-width:100%}.inner,.list,.root{position:relative}.list{gap:var(--rs-tabs-gap)}.button{display:block;color:var(--rs-color-foreground-neutral);flex-shrink:0;position:relative;border-radius:var(--rs-tabs-radius);padding:var(--rs-tabs-item-p-v) var(--rs-tabs-item-p-h);z-index:var(--rs-z-index-relative);-webkit-tap-highlight-color:transparent}[data-rs-keyboard] .button:focus:before{content:"";pointer-events:none;position:absolute;border-radius:var(--rs-tabs-radius);outline:var(--rs-outline);inset:0}.button:after{content:"";opacity:0;pointer-events:none}.button--active.button:after{opacity:1}.button.button--disabled{color:var(--rs-color-foreground-disabled)}.buttonContent{display:flex;align-items:center;justify-content:center;gap:var(--rs-tabs-icon-gap);position:relative;z-index:var(--rs-z-index-relative)}.buttonContent>.icon:not(:only-child){margin-inline-start:calc(var(--rs-tabs-icon-align) * -1)}.icon{color:inherit;transition:color var(--rs-duration-fast) var(--rs-easing-standard)}.root:not(:has(.selector)) .button:after{transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity}.button:after,.selector{position:absolute;border-radius:var(--rs-tabs-radius);z-index:0}.selector{--rs-tab-selection-x:0;--rs-tab-selection-y:0;--rs-tab-selection-scale-x:0;--rs-tab-selection-scale-y:0;position:absolute;left:0;top:0;z-index:0;height:calc(var(--rs-tab-selection-scale-y) * 1px);width:calc(var(--rs-tab-selection-scale-x) * 1px);transform-origin:0 0;transform:translate(calc(var(--rs-tab-selection-x) * 1px),calc(var(--rs-tab-selection-y) * 1px)) translateZ(0)}.selector.selector--hidden{visibility:hidden}.selector.selector--animated{transition:var(--rs-duration-medium) var(--rs-easing-standard);transition-property:transform,height,width;will-change:transform,height,width}.control{position:absolute;inset-block:0;display:none;align-items:center;z-index:var(--rs-z-index-relative);transition:var(--rs-duration-medium) var(--rs-easing-decelerate);transition-property:opacity,transform;opacity:0;pointer-events:none}.control.control--active{opacity:1;pointer-events:all}[dir=rtl] .control{transform:scaleX(-1)}.control.control--next{inset-inline-end:0}.control.control--prev{inset-inline-start:0}.panel{outline:none}[data-rs-keyboard] .panel:focus{outline:var(--rs-outline)}.panel.panel--hidden{display:none}.--direction-row .inner{white-space:nowrap}.--direction-row .list{display:inline-flex;vertical-align:top;flex-wrap:nowrap;align-items:center}.--direction-column{--rs-tabs-gap:var(--rs-unit-x1)}.--direction-column .list{display:flex;flex-direction:column}.--direction-column .buttonContent{justify-content:flex-start}.--variant-bordered .inner:after{content:"";position:absolute;background-color:var(--rs-color-border-neutral-faded);z-index:var(--rs-z-index-relative)}.--variant-bordered.--direction-row .inner:after{inset-block-end:0;inset-inline:0;height:1px}.--variant-bordered.--direction-column .inner:after{inset-inline-end:0;inset-block:0;width:1px}.--variant-bordered .button,.--variant-borderless .button{--rs-tabs-item-p-h:0px;--rs-tabs-icon-align:0px}[data-rs-keyboard] .--variant-bordered .button:focus:before,[data-rs-keyboard] .--variant-borderless .button:focus:before{inset-block:var(--rs-unit-x0-5);inset-inline:calc(var(--rs-unit-x1-5) * -1)}.--variant-bordered .button:after,.--variant-bordered .selector,.--variant-borderless .button:after,.--variant-borderless .selector{background:var(--rs-color-border-primary)}.--variant-bordered.--direction-row .button,.--variant-borderless.--direction-row .button{margin-block-end:var(--rs-unit-x1)}.--variant-bordered.--direction-row .button:after,.--variant-borderless.--direction-row .button:after{inset-inline:0;inset-block-end:calc(var(--rs-unit-x1) * -1)}.--variant-bordered.--direction-row .selector,.--variant-borderless.--direction-row .selector{inset-block-start:auto;inset-block-end:0}.--variant-bordered.--direction-row .button:after,.--variant-bordered.--direction-row .selector,.--variant-borderless.--direction-row .button:after,.--variant-borderless.--direction-row .selector{height:2px}.--variant-bordered.--direction-column .button:after,.--variant-borderless.--direction-column .button:after{inset-block:0;inset-inline-end:0}[data-rs-keyboard] .--variant-bordered.--direction-column .button:focus:before,[data-rs-keyboard] .--variant-borderless.--direction-column .button:focus:before{inset-inline-end:var(--rs-unit-x2)}.--variant-bordered.--direction-column .selector,.--variant-borderless.--direction-column .selector{inset-inline-start:auto;inset-inline-end:0}.--variant-bordered.--direction-column .button:after,.--variant-bordered.--direction-column .selector,.--variant-borderless.--direction-column .button:after,.--variant-borderless.--direction-column .selector{width:2px}.--variant-pills .button--active:after,.--variant-pills .selector{opacity:.6}.--variant-pills .button:after,.--variant-pills .selector{background-color:var(--rs-color-background-neutral)}.--variant-pills .button:after{inset:0}.--variant-pills-raised .list{border-radius:var(--rs-radius-medium);background:var(--rs-color-background-neutral-faded)}.--variant-pills-raised .button--active:before,.--variant-pills-raised .selector:before{content:"";position:absolute;inset:0;border-radius:var(--rs-radius-medium);background:var(--rs-color-background-elevation-raised);border:1px solid var(--rs-color-border-neutral-faded);box-sizing:border-box}.--variant-pills-raised .button--active:after,.--variant-pills-raised .selector:after{content:"";position:absolute;inset:1px;height:auto;width:auto;border-radius:calc(var(--rs-radius-medium) - 1px);box-shadow:var(--rs-shadow-raised);background:transparent;transform:translateZ(0)}.--variant-pills-raised.--direction-column .button{width:100%}.--variant-pills,.--variant-pills-raised{--rs-tabs-gap:var(--rs-unit-x1)}.--size-small{--rs-tabs-item-p-v:calc(var(--rs-unit-x1) + (var(--rs-line-height-body-2) - var(--rs-line-height-caption-1)) / 2);--rs-tabs-item-p-h:var(--rs-unit-x2);--rs-tabs-icon-gap:var(--rs-unit-x1);--rs-tabs-icon-align:var(--rs-unit-x0-5);--rs-tabs-radius:var(--rs-radius-small)}.--size-medium{--rs-tabs-item-p-v:var(--rs-unit-x2);--rs-tabs-item-p-h:var(--rs-unit-x3);--rs-tabs-icon-gap:var(--rs-unit-x2);--rs-tabs-icon-align:var(--rs-unit-x0-5);--rs-tabs-radius:var(--rs-radius-medium)}.--size-large{--rs-tabs-item-p-v:var(--rs-unit-x3);--rs-tabs-item-p-h:var(--rs-unit-x4);--rs-tabs-icon-gap:var(--rs-unit-x2);--rs-tabs-icon-align:var(--rs-unit-x1);--rs-tabs-radius:var(--rs-radius-medium)}.--item-width-equal{max-width:none}.--item-width-equal .inner{flex-wrap:wrap}.--item-width-equal .list{display:flex}.--item-width-equal .button{flex-grow:1;flex-basis:0;min-width:0;margin:0}.--item-width-equal .buttonText{overflow:hidden;text-overflow:ellipsis}.--scrollable .inner{overflow:auto;overflow:-moz-scrollbars-none;scrollbar-width:none;-ms-overflow-style:none;mask-image:linear-gradient(to right,transparent 0,transparent var(--rs-tabs-mid-l),#000 var(--rs-tabs-stop-l),#000 var(--rs-tabs-stop-r),transparent var(--rs-tabs-mid-r),transparent 100%);transition:var(--rs-duration-slow) var(--rs-easing-decelerate);transition-property:--rs-tabs-stop-l,--rs-tabs-stop-r,--rs-tabs-mid-l,--rs-tabs-mid-r}.--scrollable .inner::-webkit-scrollbar{display:none}.--fade-end .inner,[dir=rtl] .--fade-start .inner{--rs-tabs-mid-r:100%;--rs-tabs-stop-r:calc(100% - var(--rs-unit-x1) * 10)}.--fade-start .inner,[dir=rtl] .--fade-end .inner{--rs-tabs-mid-l:0px;--rs-tabs-stop-l:calc(var(--rs-unit-x1) * 10)}@media (pointer:fine){.control{display:flex}.--fade-end .inner,[dir=rtl] .--fade-start .inner{--rs-tabs-mid-r:calc(100% - var(--rs-unit-x1) * 4);--rs-tabs-stop-r:calc(100% - var(--rs-unit-x1) * 10)}.--fade-start .inner,[dir=rtl] .--fade-end .inner{--rs-tabs-mid-l:calc(var(--rs-unit-x1) * 4);--rs-tabs-stop-l:calc(var(--rs-unit-x1) * 10)}}
|
|
@@ -22,6 +22,11 @@ const TabsItem = React.forwardRef((props, ref) => {
|
|
|
22
22
|
tabIndex: active ? 0 : -1,
|
|
23
23
|
"aria-selected": active,
|
|
24
24
|
};
|
|
25
|
+
const iconSize = {
|
|
26
|
+
small: 3.5,
|
|
27
|
+
medium: 4,
|
|
28
|
+
large: 5,
|
|
29
|
+
}[size];
|
|
25
30
|
const updateRefs = React.useCallback(() => {
|
|
26
31
|
elPrevActiveRef.current = elActiveRef.current;
|
|
27
32
|
elActiveRef.current = itemRef.current;
|
|
@@ -42,7 +47,7 @@ const TabsItem = React.forwardRef((props, ref) => {
|
|
|
42
47
|
...(!isFormControl && tabAttributes),
|
|
43
48
|
"aria-controls": panelId,
|
|
44
49
|
id: buttonId,
|
|
45
|
-
}, children: [name && (_jsx(HiddenInput, { type: "radio", name: name, value: value, checked: visuallySelected, onChange: handleChange, className: s.radio })), _jsxs("span", { className: s.buttonContent, ref: itemRef, children: [icon && _jsx(Icon, { svg: icon, className: s.icon, size:
|
|
50
|
+
}, children: [name && (_jsx(HiddenInput, { type: "radio", name: name, value: value, checked: visuallySelected, onChange: handleChange, className: s.radio })), _jsxs("span", { className: s.buttonContent, ref: itemRef, children: [icon && _jsx(Icon, { svg: icon, className: s.icon, size: iconSize }), children && (_jsx(Text, { variant: size === "large" ? "body-1" : size === "small" ? "caption-1" : "body-2", weight: "medium", className: s.buttonText, children: children }))] })] }));
|
|
46
51
|
});
|
|
47
52
|
TabsItem.displayName = "Tabs.Item";
|
|
48
53
|
export default TabsItem;
|
|
@@ -23,6 +23,8 @@ const TextFieldSlot = (props) => {
|
|
|
23
23
|
return 5;
|
|
24
24
|
if (size === "xlarge")
|
|
25
25
|
return 6;
|
|
26
|
+
if (size === "small")
|
|
27
|
+
return 3.5;
|
|
26
28
|
return 4;
|
|
27
29
|
}), svg: icon, autoWidth: true }) }, "icon"));
|
|
28
30
|
const affixNode = affix && (_jsx("span", { className: classNames(s.affix, s[`affix--position-${position}`]), children: affix }, "affix"));
|