reshaped 3.2.0-canary.5 → 3.2.0-canary.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -1
- package/dist/bundle.css +1 -1
- package/dist/bundle.d.ts +2 -0
- package/dist/bundle.js +16 -16
- package/dist/cjs/constants/breakpoints.d.ts +6 -0
- package/dist/cjs/constants/breakpoints.js +7 -0
- package/dist/cjs/themes/_generator/definitions/reshaped.js +8 -4
- package/dist/cjs/themes/_generator/tokens/viewport/viewport.transforms.js +10 -1
- package/dist/cjs/themes/figma/theme.css +1 -1
- package/dist/cjs/themes/reshaped/theme.css +1 -1
- package/dist/cjs/themes/slate/theme.css +1 -1
- package/dist/components/Actionable/Actionable.d.ts +1 -1
- package/dist/components/Actionable/Actionable.module.css +1 -1
- package/dist/components/Autocomplete/Autocomplete.js +2 -2
- package/dist/components/Button/Button.js +1 -1
- package/dist/components/Button/Button.module.css +1 -1
- package/dist/components/Card/Card.d.ts +1 -1
- package/dist/components/Card/Card.module.css +1 -1
- package/dist/components/Card/tests/Card.stories.d.ts +1 -1
- package/dist/components/Checkbox/Checkbox.module.css +1 -1
- package/dist/components/Divider/Divider.js +4 -3
- package/dist/components/Divider/Divider.module.css +1 -1
- package/dist/components/Divider/Divider.types.d.ts +3 -0
- package/dist/components/Divider/tests/Divider.stories.d.ts +1 -0
- package/dist/components/Divider/tests/Divider.stories.js +21 -0
- package/dist/components/DropdownMenu/DropdownMenu.types.d.ts +1 -1
- package/dist/components/FormControl/FormControl.context.d.ts +2 -1
- package/dist/components/Grid/Grid.d.ts +6 -0
- package/dist/components/Grid/Grid.js +46 -0
- package/dist/components/Grid/Grid.module.css +1 -0
- package/dist/components/Grid/Grid.types.d.ts +31 -0
- package/dist/components/Grid/Grid.types.js +1 -0
- package/dist/components/Grid/index.d.ts +2 -0
- package/dist/components/Grid/index.js +1 -0
- package/dist/components/Grid/tests/Grid.stories.d.ts +18 -0
- package/dist/components/Grid/tests/Grid.stories.js +170 -0
- package/dist/components/Icon/Icon.module.css +1 -1
- package/dist/components/Link/Link.d.ts +1 -1
- package/dist/components/Link/tests/Link.stories.d.ts +1 -1
- package/dist/components/Loader/Loader.module.css +1 -1
- package/dist/components/Loader/Loader.types.d.ts +1 -1
- package/dist/components/Loader/tests/Loader.stories.js +5 -3
- package/dist/components/Modal/Modal.js +7 -4
- package/dist/components/Modal/Modal.module.css +1 -1
- package/dist/components/Modal/Modal.types.d.ts +1 -1
- package/dist/components/Modal/tests/Modal.stories.d.ts +1 -0
- package/dist/components/Modal/tests/Modal.stories.js +28 -1
- package/dist/components/Overlay/Overlay.js +45 -27
- package/dist/components/Overlay/Overlay.module.css +1 -1
- package/dist/components/Overlay/Overlay.types.d.ts +1 -0
- package/dist/components/Overlay/tests/Overlay.stories.js +1 -1
- package/dist/components/Popover/Popover.js +2 -4
- package/dist/components/Popover/Popover.types.d.ts +1 -1
- package/dist/components/Radio/Radio.module.css +1 -1
- package/dist/components/Resizable/Resizable.module.css +1 -1
- package/dist/components/ScrollArea/ScrollArea.js +1 -1
- package/dist/components/Slider/Slider.module.css +1 -1
- package/dist/components/Slider/SliderControlled.js +2 -1
- package/dist/components/Switch/Switch.module.css +1 -1
- package/dist/components/Tabs/Tabs.d.ts +1 -1
- package/dist/components/Tabs/Tabs.module.css +1 -1
- package/dist/components/Tabs/TabsContext.d.ts +1 -1
- package/dist/components/Tabs/TabsItem.d.ts +1 -1
- package/dist/components/Tabs/TabsItem.js +2 -3
- package/dist/components/Tabs/TabsList.js +1 -1
- package/dist/components/Tabs/tests/Tabs.stories.d.ts +15 -13
- package/dist/components/Tabs/tests/Tabs.stories.js +71 -8
- package/dist/components/TextField/TextField.js +5 -1
- package/dist/components/TextField/TextField.module.css +1 -1
- package/dist/components/TextField/tests/TextField.stories.js +4 -0
- package/dist/components/Toast/ToastContainer.js +1 -2
- package/dist/components/Toast/ToastRegion.js +1 -1
- package/dist/components/Tooltip/Tooltip.js +1 -1
- package/dist/components/View/View.js +7 -3
- package/dist/components/View/View.module.css +1 -1
- package/dist/components/View/View.types.d.ts +2 -2
- package/dist/components/_private/Expandable/Expandable.js +9 -5
- package/dist/components/_private/Flyout/Flyout.module.css +1 -1
- package/dist/components/_private/Flyout/Flyout.types.d.ts +12 -3
- package/dist/components/_private/Flyout/FlyoutContent.js +1 -1
- package/dist/components/_private/Flyout/FlyoutControlled.js +34 -21
- package/dist/components/_private/Flyout/tests/Flyout.stories.d.ts +3 -1
- package/dist/components/_private/Flyout/tests/Flyout.stories.js +54 -32
- package/dist/components/_private/Flyout/useFlyout.d.ts +2 -1
- package/dist/components/_private/Flyout/useFlyout.js +45 -55
- package/dist/components/_private/Flyout/utilities/calculatePosition.js +16 -11
- package/dist/components/_private/Flyout/utilities/cooldown.d.ts +1 -1
- package/dist/components/_private/Flyout/utilities/cooldown.js +17 -5
- package/dist/components/_private/Flyout/utilities/getPositionFallbacks.d.ts +3 -0
- package/dist/components/_private/Flyout/utilities/getPositionFallbacks.js +39 -0
- package/dist/components/_private/Portal/Portal.js +3 -3
- package/dist/config/tailwind.d.ts +1 -1
- package/dist/constants/breakpoints.d.ts +6 -0
- package/dist/constants/breakpoints.js +5 -0
- package/dist/hooks/_private/useIsDismissible.js +7 -14
- package/dist/hooks/_private/useSingletonHotkeys.js +5 -3
- package/dist/hooks/_private/useSingletonKeyboardMode.js +1 -1
- package/dist/hooks/tests/useHotkeys.stories.js +3 -0
- package/dist/hooks/tests/useResponsiveClientValue.stories.d.ts +1 -2
- package/dist/hooks/tests/useResponsiveClientValue.stories.js +1 -2
- package/dist/hooks/useDrag.js +2 -1
- package/dist/hooks/useResponsiveClientValue.js +22 -11
- package/dist/hooks/useScrollLock.d.ts +4 -1
- package/dist/hooks/useScrollLock.js +14 -40
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/styles/align/align.module.css +1 -0
- package/dist/styles/align/index.d.ts +3 -0
- package/dist/styles/align/index.js +10 -0
- package/dist/styles/justify/index.d.ts +3 -0
- package/dist/styles/justify/index.js +10 -0
- package/dist/styles/justify/justify.module.css +1 -0
- package/dist/styles/types.d.ts +2 -0
- package/dist/themes/_generator/definitions/reshaped.js +5 -4
- package/dist/themes/_generator/tokens/viewport/viewport.transforms.js +10 -1
- package/dist/themes/figma/theme.css +1 -1
- package/dist/themes/reshaped/theme.css +1 -1
- package/dist/themes/slate/theme.css +1 -1
- package/dist/utilities/a11y/TrapFocus.d.ts +1 -1
- package/dist/utilities/a11y/TrapFocus.js +1 -1
- package/dist/utilities/a11y/focus.js +1 -1
- package/dist/utilities/a11y/index.d.ts +4 -0
- package/dist/utilities/a11y/index.js +3 -0
- package/dist/utilities/css.d.ts +7 -0
- package/dist/utilities/css.js +18 -0
- package/dist/utilities/dom/flyout.d.ts +1 -0
- package/dist/utilities/{dom.js → dom/flyout.js} +1 -19
- package/dist/utilities/dom/index.d.ts +3 -0
- package/dist/utilities/dom/index.js +3 -0
- package/dist/utilities/dom/shadowDom.d.ts +1 -0
- package/dist/utilities/dom/shadowDom.js +4 -0
- package/dist/utilities/dom/userSelect.d.ts +2 -0
- package/dist/utilities/dom/userSelect.js +6 -0
- package/dist/utilities/platform.d.ts +1 -0
- package/dist/utilities/platform.js +15 -0
- package/dist/utilities/scroll/disable.d.ts +7 -0
- package/dist/utilities/scroll/disable.js +13 -0
- package/dist/utilities/scroll/helpers.d.ts +1 -0
- package/dist/utilities/scroll/helpers.js +17 -0
- package/dist/utilities/scroll/index.d.ts +2 -0
- package/dist/utilities/scroll/index.js +2 -0
- package/dist/utilities/scroll/lock.d.ts +5 -0
- package/dist/utilities/scroll/lock.js +24 -0
- package/dist/utilities/scroll/lockSafari.d.ts +2 -0
- package/dist/utilities/scroll/lockSafari.js +21 -0
- package/dist/utilities/scroll/lockStandard.d.ts +2 -0
- package/dist/utilities/scroll/lockStandard.js +17 -0
- package/dist/utilities/storybook/Placeholder.d.ts +1 -0
- package/dist/utilities/storybook/Placeholder.js +2 -2
- package/package.json +47 -50
- package/dist/utilities/dom.d.ts +0 -6
@@ -3,7 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import React from "react";
|
4
4
|
import { onNextFrame } from "../../utilities/animation.js";
|
5
5
|
import { classNames } from "../../utilities/helpers.js";
|
6
|
-
import TrapFocus from "../../utilities/a11y/
|
6
|
+
import { TrapFocus } from "../../utilities/a11y/index.js";
|
7
7
|
import useToggle from "../../hooks/useToggle.js";
|
8
8
|
import useIsomorphicLayoutEffect from "../../hooks/useIsomorphicLayoutEffect.js";
|
9
9
|
import useHotkeys from "../../hooks/useHotkeys.js";
|
@@ -13,21 +13,28 @@ import Portal from "../_private/Portal/index.js";
|
|
13
13
|
import s from "./Overlay.module.css";
|
14
14
|
import useHandlerRef from "../../hooks/useHandlerRef.js";
|
15
15
|
const Overlay = (props) => {
|
16
|
-
const { active, children, transparent, blurred, onClose, onOpen, disableCloseOnClick, className, attributes, } = props;
|
16
|
+
const { active, children, transparent, blurred, onClose, onOpen, disableCloseOnClick, containerRef, className, attributes, } = props;
|
17
|
+
// Selectors wrapped with refs to simplify working with useEffect dependency array
|
17
18
|
const onCloseRef = useHandlerRef(onClose);
|
18
19
|
const onOpenRef = useHandlerRef(onOpen);
|
19
|
-
const
|
20
|
-
const opacity =
|
20
|
+
const isTransparent = transparent === true;
|
21
|
+
const opacity = isTransparent ? 0 : (1 - (transparent || 0)) * 0.7;
|
21
22
|
const [mounted, setMounted] = React.useState(false);
|
22
23
|
const [animated, setAnimated] = React.useState(false);
|
24
|
+
const [offset, setOffset] = React.useState([0, 0]);
|
23
25
|
const contentRef = React.useRef(null);
|
26
|
+
const { lockScroll, unlockScroll } = useScrollLock({ containerRef });
|
27
|
+
// Store overflow value in case we override it when rendering inside containerRef
|
28
|
+
const originalOverflowRef = React.useRef(null);
|
29
|
+
// Store mouseDown clicks that should close the overlay to then use it in mouseUp
|
24
30
|
const isMouseDownValidRef = React.useRef(false);
|
25
|
-
|
31
|
+
// Separating rendered and visible states to make sure animation is triggered only once overlay was added to the dom
|
26
32
|
const { active: rendered, activate: render, deactivate: remove } = useToggle(active || false);
|
27
33
|
const { active: visible, activate: show, deactivate: hide } = useToggle(active || false);
|
34
|
+
// Check that when close was triggered there were no other overlays / flyouts rendered above it
|
28
35
|
const isDismissible = useIsDismissible(active, contentRef);
|
29
|
-
const rootClassNames = classNames(s.root, visible && s["--visible"],
|
30
|
-
const
|
36
|
+
const rootClassNames = classNames(s.root, visible && s["--visible"], isTransparent && s["--click-through"], blurred && s["--blurred"], animated && s["--animated"], containerRef && s["--contained"], className);
|
37
|
+
const isInsideContent = (el) => {
|
31
38
|
if (!contentRef.current)
|
32
39
|
return;
|
33
40
|
const firstChild = contentRef.current.firstChild;
|
@@ -35,20 +42,24 @@ const Overlay = (props) => {
|
|
35
42
|
return;
|
36
43
|
return firstChild.contains(el);
|
37
44
|
};
|
38
|
-
const close = React.useCallback((
|
45
|
+
const close = React.useCallback((args) => {
|
39
46
|
if (!visible || !isDismissible())
|
40
47
|
return;
|
41
|
-
|
42
|
-
|
48
|
+
if (originalOverflowRef.current && containerRef?.current) {
|
49
|
+
containerRef.current.style.overflow = originalOverflowRef.current;
|
50
|
+
originalOverflowRef.current = null;
|
51
|
+
}
|
52
|
+
onCloseRef.current?.({ reason: args.reason });
|
53
|
+
}, [visible, isDismissible, onCloseRef, containerRef]);
|
43
54
|
const handleMouseDown = (event) => {
|
44
|
-
isMouseDownValidRef.current = !
|
55
|
+
isMouseDownValidRef.current = !isInsideContent(event.target);
|
45
56
|
};
|
46
57
|
const handleMouseUp = (event) => {
|
47
|
-
const isMouseUpValid = !
|
48
|
-
const shouldClose = isMouseDownValidRef.current && isMouseUpValid && !
|
58
|
+
const isMouseUpValid = !isInsideContent(event.target);
|
59
|
+
const shouldClose = isMouseDownValidRef.current && isMouseUpValid && !isTransparent;
|
49
60
|
if (!shouldClose || disableCloseOnClick)
|
50
61
|
return;
|
51
|
-
close("overlay-click");
|
62
|
+
close({ reason: "overlay-click" });
|
52
63
|
};
|
53
64
|
const handleTransitionEnd = (e) => {
|
54
65
|
if (e.propertyName !== "opacity" || e.target !== e.currentTarget)
|
@@ -56,11 +67,12 @@ const Overlay = (props) => {
|
|
56
67
|
setAnimated(false);
|
57
68
|
if (visible)
|
58
69
|
return;
|
59
|
-
|
60
|
-
unlockScroll();
|
70
|
+
unlockScroll();
|
61
71
|
remove();
|
62
72
|
};
|
63
|
-
useHotkeys({
|
73
|
+
useHotkeys({
|
74
|
+
Escape: () => close({ reason: "escape-key" }),
|
75
|
+
}, [close]);
|
64
76
|
React.useEffect(() => {
|
65
77
|
setAnimated(true);
|
66
78
|
if (active && !rendered)
|
@@ -72,35 +84,41 @@ const Overlay = (props) => {
|
|
72
84
|
React.useEffect(() => {
|
73
85
|
if (!rendered)
|
74
86
|
return;
|
75
|
-
if (!
|
87
|
+
if (!isTransparent)
|
76
88
|
lockScroll();
|
77
89
|
onNextFrame(() => {
|
78
90
|
show();
|
79
91
|
});
|
80
|
-
}, [rendered, show, lockScroll,
|
92
|
+
}, [rendered, show, lockScroll, isTransparent]);
|
81
93
|
React.useEffect(() => {
|
82
94
|
if (!rendered || !contentRef.current)
|
83
95
|
return;
|
84
96
|
const trapFocus = new TrapFocus(contentRef.current);
|
97
|
+
const containerEl = containerRef?.current;
|
98
|
+
if (containerEl) {
|
99
|
+
originalOverflowRef.current = containerEl.style.overflow;
|
100
|
+
containerEl.style.overflow = "hidden";
|
101
|
+
setOffset([containerEl.scrollLeft, containerEl.scrollTop]);
|
102
|
+
}
|
85
103
|
trapFocus.trap({
|
86
104
|
initialFocusEl: contentRef.current.querySelector("[role=dialog][tabindex='-1']"),
|
87
105
|
});
|
88
106
|
onOpenRef.current?.();
|
89
107
|
return () => trapFocus.release();
|
90
|
-
|
91
|
-
}, [rendered, onOpenRef]);
|
108
|
+
}, [rendered, onOpenRef, containerRef]);
|
92
109
|
// Unlock scroll on unmount
|
93
110
|
React.useEffect(() => {
|
94
|
-
return () =>
|
95
|
-
|
96
|
-
unlockScroll();
|
97
|
-
};
|
98
|
-
}, [unlockScroll, clickThrough]);
|
111
|
+
return () => unlockScroll();
|
112
|
+
}, [unlockScroll]);
|
99
113
|
useIsomorphicLayoutEffect(() => {
|
100
114
|
setMounted(true);
|
101
115
|
}, []);
|
102
116
|
if (!rendered || !mounted)
|
103
117
|
return null;
|
104
|
-
return (_jsx(Portal, { children: _jsx(Portal.Scope, { children: (ref) => (_jsx("div", { ...attributes, ref: ref, style: {
|
118
|
+
return (_jsx(Portal, { targetRef: containerRef, children: _jsx(Portal.Scope, { children: (ref) => (_jsx("div", { ...attributes, ref: ref, style: {
|
119
|
+
"--rs-overlay-opacity": opacity,
|
120
|
+
"--rs-overlay-offset-x": containerRef ? `${offset[0]}px` : undefined,
|
121
|
+
"--rs-overlay-offset-y": containerRef ? `${offset[1]}px` : undefined,
|
122
|
+
}, role: "button", tabIndex: -1, className: rootClassNames, onMouseDown: handleMouseDown, onMouseUp: handleMouseUp, onTransitionEnd: handleTransitionEnd, children: _jsx("div", { className: s.wrapper, children: _jsx("div", { className: s.inner, children: _jsx("div", { className: s.content, ref: contentRef, children: typeof children === "function" ? children({ active: visible }) : children }) }) }) })) }) }));
|
105
123
|
};
|
106
124
|
export default Overlay;
|
@@ -1 +1 @@
|
|
1
|
-
.root{overflow:auto;-webkit-overflow-scrolling:touch;background-color:rgba(var(--rs-color-rgb-black),0);color:var(--rs-color-white);cursor:default!important;
|
1
|
+
.root{--rs-overlay-offset-y:0px;--rs-overlay-offset-x:0px;overflow:auto;overflow-x:clip;position:fixed;-webkit-overflow-scrolling:touch;background-color:rgba(var(--rs-color-rgb-black),0);color:var(--rs-color-white);cursor:default!important;left:var(--rs-overlay-offset-x);opacity:0;outline:none;top:var(--rs-overlay-offset-y);z-index:var(--rs-z-index-overlay)}.root,.wrapper{height:100%;width:100%}.wrapper{display:table}.inner{display:table-cell;text-align:center}.content,.inner{vertical-align:middle}.content{display:inline-block;text-align:initial}.root.--visible{background-color:rgba(var(--rs-color-rgb-black),var(--rs-overlay-opacity));opacity:1}.root.--click-through{color:inherit;pointer-events:none}.root.--blurred{backdrop-filter:blur(3px);height:calc(100% + 2px);left:calc(var(--rs-overlay-offset-x) - 1px);top:calc(var(--rs-overlay-offset-y) - 1px);width:calc(100% + 2px)}.root.--click-through .content,.root.--click-through>:not(.wrapper){pointer-events:all}.root.--contained{position:absolute}.root.--animated{transition:var(--rs-duration-medium) var(--rs-easing-accelerate);transition-property:background-color,opacity}.root.--animated.--visible{transition-timing-function:var(--rs-easing-decelerate)}
|
@@ -5,14 +5,12 @@ import Dismissible from "../Dismissible/index.js";
|
|
5
5
|
import s from "./Popover.module.css";
|
6
6
|
import getPaddingStyles from "../../styles/padding/index.js";
|
7
7
|
const Popover = (props) => {
|
8
|
-
const {
|
8
|
+
const { width, variant = "elevated", triggerType = "click", position = "bottom", ...flyoutProps } = props;
|
9
9
|
const padding = props.padding ?? (variant === "headless" ? 0 : 4);
|
10
10
|
const trapFocusMode = props.trapFocusMode || (triggerType === "hover" ? "content-menu" : undefined);
|
11
11
|
const paddingStyles = getPaddingStyles(padding);
|
12
12
|
const contentClassName = classNames(s.content, !!width && s["content--has-width"], variant && s[`content--variant-${variant}`], paddingStyles?.classNames);
|
13
|
-
return (
|
14
|
-
// @ts-ignore
|
15
|
-
_jsx(Flyout, { id: id, instanceRef: instanceRef, position: position, forcePosition: forcePosition, onOpen: onOpen, onClose: onClose, trapFocusMode: trapFocusMode, triggerType: triggerType, active: active, defaultActive: defaultActive, width: width, disableHideAnimation: disableHideAnimation, disableContentHover: disableContentHover, disableCloseOnOutsideClick: disableCloseOnOutsideClick, contentGap: contentGap, containerRef: containerRef, contentClassName: contentClassName, contentAttributes: { style: { ...paddingStyles?.variables } }, children: children }));
|
13
|
+
return (_jsx(Flyout, { ...flyoutProps, position: position, trapFocusMode: trapFocusMode, triggerType: triggerType, width: width, contentClassName: contentClassName, contentAttributes: { style: { ...paddingStyles?.variables } } }));
|
16
14
|
};
|
17
15
|
const PopoverDismissible = (props) => {
|
18
16
|
const { handleClose } = useFlyoutContext();
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import type React from "react";
|
2
2
|
import type { FlyoutProps, FlyoutInstance } from "../_private/Flyout";
|
3
3
|
export type Instance = FlyoutInstance;
|
4
|
-
export type Props = Pick<FlyoutProps, "id" | "position" | "forcePosition" | "onOpen" | "onClose" | "width" | "trapFocusMode" | "active" | "defaultActive" | "contentGap" | "instanceRef" | "triggerType" | "disableHideAnimation" | "disableContentHover" | "disableCloseOnOutsideClick" | "containerRef"> & {
|
4
|
+
export type Props = Pick<FlyoutProps, "id" | "position" | "forcePosition" | "fallbackPositions" | "onOpen" | "onClose" | "width" | "trapFocusMode" | "active" | "defaultActive" | "contentGap" | "instanceRef" | "triggerType" | "disableHideAnimation" | "disableContentHover" | "disableCloseOnOutsideClick" | "containerRef" | "initialFocusRef"> & {
|
5
5
|
children?: React.ReactNode;
|
6
6
|
padding?: number;
|
7
7
|
variant?: "elevated" | "headless";
|
@@ -1 +1 @@
|
|
1
|
-
.root{align-items:center;cursor:pointer;display:inline-flex;user-select:none;vertical-align:top;-webkit-tap-highlight-color:transparent}.root:hover .input:not(:checked)+.decorator{background:var(--rs-color-background-neutral-faded)}.field{position:relative}.decorator{--rs-radio-decorator-size:var(--rs-line-height-body-3);background:var(--rs-color-background-elevation-base);border:1px solid var(--rs-color-border-neutral);border-radius:50%;height:var(--rs-radio-decorator-size);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:background-color,border-color;width:var(--rs-radio-decorator-size)}.decorator:after{background:var(--rs-color-on-background-primary);border-radius:50%;content:"";height:calc(var(--rs-radio-decorator-size) * .4);left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform;width:calc(var(--rs-radio-decorator-size) * .4)}.input:focus
|
1
|
+
.root{align-items:center;cursor:pointer;display:inline-flex;user-select:none;vertical-align:top;-webkit-tap-highlight-color:transparent}.root:hover .input:not(:checked)+.decorator{background:var(--rs-color-background-neutral-faded)}.field{position:relative}.decorator{--rs-radio-decorator-size:var(--rs-line-height-body-3);background:var(--rs-color-background-elevation-base);border:1px solid var(--rs-color-border-neutral);border-radius:50%;height:var(--rs-radio-decorator-size);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:background-color,border-color;width:var(--rs-radio-decorator-size)}.decorator:after{background:var(--rs-color-on-background-primary);border-radius:50%;content:"";height:calc(var(--rs-radio-decorator-size) * .4);left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform;width:calc(var(--rs-radio-decorator-size) * .4)}[data-rs-keyboard] .input:focus+.decorator{box-shadow:var(--rs-focus-shadow)}.input:checked+.decorator,.root.--error .input:checked+.decorator,.root.--error:hover .input:checked+.decorator{background:var(--rs-color-background-primary);border-color:var(--rs-color-background-primary);border-width:2px}.input:checked+.decorator:after,.root.--error .input:checked+.decorator:after,.root.--error:hover .input:checked+.decorator:after{opacity:1;transform:translate(-50%,-50%) scale(1)}.text{margin-inline-start:var(--rs-unit-x2)}.root.--error .decorator,.root.--error:hover .input+.decorator{border-color:var(--rs-color-border-critical)}.root.--disabled{color:var(--rs-color-foreground-disabled);cursor:not-allowed}.root.--disabled .decorator,.root.--disabled .input:checked+.decorator,.root.--disabled:hover .input+.decorator{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled)}.root.--disabled .input:checked+.decorator{border-color:transparent}.root.--disabled .input:checked+.decorator:after{background:var(--rs-color-border-disabled)}
|
@@ -1 +1 @@
|
|
1
|
-
.item{--rs-resizable-default-size:none;--rs-resizable-min-size:0;--rs-resizable-max-size:100%;flex-grow:100;max-width:var(--rs-resizable-default-size);min-width:var(--rs-resizable-default-size);overflow:hidden}.handle{flex-shrink:0;position:relative}.handle:after,.handle:before{border-radius:999px;content:"";position:absolute}.handle:after{background:var(--rs-color-border-neutral);opacity:0;transition:opacity var(--rs-duration-fast) var(--rs-easing-standard)}.handle--dragging:after,.handle:
|
1
|
+
.item{--rs-resizable-default-size:none;--rs-resizable-min-size:0;--rs-resizable-max-size:100%;flex-grow:100;max-width:var(--rs-resizable-default-size);min-width:var(--rs-resizable-default-size);overflow:hidden}.handle{flex-shrink:0;position:relative}.handle:after,.handle:before{border-radius:999px;content:"";position:absolute}.handle:after{background:var(--rs-color-border-neutral);opacity:0;transition:opacity var(--rs-duration-fast) var(--rs-easing-standard)}.handle--dragging:after,.handle:hover:after,[data-rs-keyboard] .handle:focus:after{opacity:.6}body:has(.handle--dragging) .handle:not(.handle--dragging){opacity:0}body:has(.--direction-row>.handle--dragging){cursor:ew-resize}body:has(.--direction-column>.handle--dragging){cursor:ns-resize}.--direction-row>.handle{cursor:ew-resize}.--direction-row>.handle:after,.--direction-row>.handle:before{inset-block:0;inset-inline-start:50%;transform:translateX(-50%)}.--direction-row>.handle:before{width:var(--rs-unit-x4)}.--direction-row>.handle:after{width:var(--rs-unit-x1)}.--direction-row>.item[data-rs-resizable-item-mounted]{max-width:var(--rs-resizable-max-size);min-width:var(--rs-resizable-min-size)}.--direction-column>.handle{cursor:ns-resize}.--direction-column>.handle:after,.--direction-column>.handle:before{inset-block-start:50%;inset-inline:0;transform:translateY(-50%)}.--direction-column>.handle:before{height:var(--rs-unit-x4)}.--direction-column>.handle:after{height:var(--rs-unit-x1)}.--direction-column>.item[data-rs-resizable-item-mounted]{max-height:var(--rs-resizable-max-size);min-height:var(--rs-resizable-min-size)}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
3
3
|
import React, { forwardRef } from "react";
|
4
4
|
import { classNames } from "../../utilities/helpers.js";
|
5
|
-
import { disableUserSelect, enableUserSelect } from "../../utilities/dom.js";
|
5
|
+
import { disableUserSelect, enableUserSelect } from "../../utilities/dom/index.js";
|
6
6
|
import getHeightStyles from "../../styles/height/index.js";
|
7
7
|
import getMaxHeightStyles from "../../styles/maxHeight/index.js";
|
8
8
|
import useIsomorphicLayoutEffect from "../../hooks/useIsomorphicLayoutEffect.js";
|
@@ -1 +1 @@
|
|
1
|
-
.root{--rs-slider-overflow-gap:var(--rs-unit-x1);--rs-slider-thumb-size:var(--rs-unit-x4);align-items:center;cursor:pointer;display:flex;position:relative;user-select:none;-webkit-tap-highlight-color:transparent}.root:has(.thumb:hover,.thumb--active,.input:focus-visible){overflow:visible}.bar{background:var(--rs-color-background-neutral);border-radius:var(--rs-radius-small);position:relative}.bar,.input{overflow:hidden}.input{height:1px;opacity:0;pointer-events:none;position:absolute;width:1px}.selection{background:var(--rs-color-background-primary);position:absolute}.tooltip{--rs-slider-tooltip-translate:calc(-50% + var(--rs-slider-tooltip-offset, 0px));background:var(--rs-color-background-elevation-overlay);border-radius:var(--rs-radius-small);box-shadow:var(--rs-shadow-overlay);box-sizing:initial;color:var(--rs-color-foreground-neutral);font-variant-numeric:tabular-nums;min-width:var(--rs-line-height-caption-1);opacity:0;padding:calc(var(--rs-unit-x1) / 2) var(--rs-unit-x1);pointer-events:none;text-align:center;transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform;user-select:none;white-space:nowrap;will-change:transform}.thumb,.thumbs,.tooltip{position:absolute}.thumb:before{background:var(--rs-color-background-primary);border-radius:999px;box-shadow:0 0 0 2px var(--rs-color-background-elevation-base);box-sizing:border-box;height:var(--rs-slider-thumb-size);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:box-shadow;width:var(--rs-slider-thumb-size)}.thumb:after,.thumb:before{content:"";position:absolute}.thumb:after{cursor:grab;height:var(--rs-unit-x7);width:var(--rs-unit-x7)}.thumb:hover .tooltip{opacity:1}.input:focus
|
1
|
+
.root{--rs-slider-overflow-gap:var(--rs-unit-x1);--rs-slider-thumb-size:var(--rs-unit-x4);align-items:center;cursor:pointer;display:flex;position:relative;user-select:none;-webkit-tap-highlight-color:transparent}.root:has(.thumb:hover,.thumb--active,.input:focus-visible){overflow:visible}.bar{background:var(--rs-color-background-neutral);border-radius:var(--rs-radius-small);position:relative}.bar,.input{overflow:hidden}.input{height:1px;opacity:0;pointer-events:none;position:absolute;width:1px}.selection{background:var(--rs-color-background-primary);position:absolute}.tooltip{--rs-slider-tooltip-translate:calc(-50% + var(--rs-slider-tooltip-offset, 0px));background:var(--rs-color-background-elevation-overlay);border-radius:var(--rs-radius-small);box-shadow:var(--rs-shadow-overlay);box-sizing:initial;color:var(--rs-color-foreground-neutral);font-variant-numeric:tabular-nums;min-width:var(--rs-line-height-caption-1);opacity:0;padding:calc(var(--rs-unit-x1) / 2) var(--rs-unit-x1);pointer-events:none;text-align:center;transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform;user-select:none;white-space:nowrap;will-change:transform}.thumb,.thumbs,.tooltip{position:absolute}.thumb:before{background:var(--rs-color-background-primary);border-radius:999px;box-shadow:0 0 0 2px var(--rs-color-background-elevation-base);box-sizing:border-box;height:var(--rs-slider-thumb-size);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:box-shadow;width:var(--rs-slider-thumb-size)}.thumb:after,.thumb:before{content:"";position:absolute}.thumb:after{cursor:grab;height:var(--rs-unit-x7);width:var(--rs-unit-x7)}.thumb:hover .tooltip{opacity:1}.thumb--active:after,[data-rs-keyboard] .input:focus+.thumb:after{cursor:grabbing}.thumb--active:before,[data-rs-keyboard] .input:focus+.thumb:before{box-shadow:0 0 0 1px var(--rs-color-background-elevation-base)}.thumb--active .tooltip,[data-rs-keyboard] .input:focus+.thumb .tooltip{opacity:1}[data-rs-keyboard] .input:focus+.thumb:before{box-shadow:var(--rs-focus-shadow)}.--orientation-horizontal{height:var(--rs-slider-thumb-size);margin-inline:calc(var(--rs-slider-overflow-gap) * -1);overflow-x:clip;padding-inline:var(--rs-slider-overflow-gap)}.--orientation-horizontal .bar{height:var(--rs-unit-x1);width:100%}.--orientation-horizontal .selection{height:100%;inset-inline-start:var(--rs-slider-selection-start);width:var(--rs-slider-selection-size)}.--orientation-horizontal .tooltip{bottom:100%;left:50%;transform:translate(var(--rs-slider-tooltip-translate))}.--orientation-horizontal .thumbs{height:100%;inset-inline:calc(var(--rs-slider-thumb-size) / 2 + var(--rs-slider-overflow-gap))}.--orientation-horizontal .thumb{height:100%;inset-inline-start:var(--ts-slider-thumb-position);width:0}.--orientation-horizontal .thumb:after,.--orientation-horizontal .thumb:before{left:0;top:50%;transform:translate(-50%,-50%)}.--orientation-horizontal .input:focus+.thumb .tooltip,.--orientation-horizontal .thumb--active .tooltip,.--orientation-horizontal .thumb:hover .tooltip{transform:translate(var(--rs-slider-tooltip-translate),calc(var(--rs-unit-x1) * -1.5))}.--orientation-vertical{flex-direction:column;height:100%;margin-block:calc(var(--rs-slider-overflow-gap) * -1);overflow-y:clip;padding-block:var(--rs-slider-overflow-gap);width:var(--rs-slider-thumb-size)}.--orientation-vertical .bar{height:100%;width:var(--rs-unit-x1)}.--orientation-vertical .selection{height:var(--rs-slider-selection-size);inset-block-end:var(--rs-slider-selection-start);inset-inline-start:auto;width:100%}.--orientation-vertical .tooltip{inset-inline-start:100%;top:50%;transform:translateY(var(--rs-slider-tooltip-translate))}.--orientation-vertical .thumbs{inset-block:calc(var(--rs-slider-thumb-size) / 2 + var(--rs-slider-overflow-gap));width:100%}.--orientation-vertical .thumb{height:0;inset-block-end:var(--ts-slider-thumb-position);width:100%}.--orientation-vertical .thumb:after,.--orientation-vertical .thumb:before{left:50%;top:0;transform:translate(-50%,-50%)}.--orientation-vertical .input:focus+.thumb .tooltip,.--orientation-vertical .thumb--active .tooltip,.--orientation-vertical .thumb:hover .tooltip{transform:translate(calc(var(--rs-unit-x1) * 1.5),-50%)}.--disabled{cursor:not-allowed}.--disabled .bar{background-color:var(--rs-color-background-disabled)}.--disabled .selection,.--disabled .thumb:before{background-color:var(--rs-color-foreground-disabled)}.--disabled .thumb:after{cursor:not-allowed}.--disabled .thumb:hover .tooltip{opacity:0}
|
@@ -2,7 +2,8 @@
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
3
3
|
import React from "react";
|
4
4
|
import { classNames } from "../../utilities/helpers.js";
|
5
|
-
import { enableUserSelect, disableUserSelect
|
5
|
+
import { enableUserSelect, disableUserSelect } from "../../utilities/dom/index.js";
|
6
|
+
import { disableScroll, enableScroll } from "../../utilities/scroll/index.js";
|
6
7
|
import useRTL from "../../hooks/useRTL.js";
|
7
8
|
import useElementId from "../../hooks/useElementId.js";
|
8
9
|
import { useFormControl } from "../FormControl/index.js";
|
@@ -1 +1 @@
|
|
1
|
-
.root{align-items:center;display:inline-flex;gap:var(--rs-unit-x2);position:relative;vertical-align:top;-webkit-tap-highlight-color:transparent}.input{border:0;height:1px;left:0;opacity:0;outline:none;position:absolute;top:0;width:1px}.input:checked+.area{background:var(--rs-color-background-primary);border-color:transparent}.input:checked+.area .thumb{transform:translateX(var(--rs-unit-x3))}[dir=rtl] .input:checked+.area .thumb{transform:translateX(calc(var(--rs-unit-x3) * -1))}.input:focus
|
1
|
+
.root{align-items:center;display:inline-flex;gap:var(--rs-unit-x2);position:relative;vertical-align:top;-webkit-tap-highlight-color:transparent}.input{border:0;height:1px;left:0;opacity:0;outline:none;position:absolute;top:0;width:1px}.input:checked+.area{background:var(--rs-color-background-primary);border-color:transparent}.input:checked+.area .thumb{transform:translateX(var(--rs-unit-x3))}[dir=rtl] .input:checked+.area .thumb{transform:translateX(calc(var(--rs-unit-x3) * -1))}[data-rs-keyboard] .input:focus+.area{box-shadow:var(--rs-focus-shadow)}.input[disabled]+.area{background:var(--rs-color-background-disabled);cursor:not-allowed}.input[disabled]+.area .thumb{opacity:.8}.input[disabled]:checked+.area{background:var(--rs-color-background-primary);opacity:.4}.input[disabled]:checked+.area .thumb{opacity:1}.area{align-items:center;background:var(--rs-color-background-neutral);border:2px solid transparent;box-sizing:border-box;cursor:pointer;display:flex;height:calc(var(--rs-unit-x1) * 5);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:background,border;width:calc(var(--rs-unit-x1) * 8)}.area,.thumb{border-radius:999px}.thumb{background:var(--rs-color-white);box-shadow:var(--rs-shadow-raised);height:var(--rs-unit-x4);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:transform;width:var(--rs-unit-x4)}.root--size-small .area{height:calc(var(--rs-unit-x1) * 4);width:calc(var(--rs-unit-x1) * 6)}.root--size-small .thumb{height:var(--rs-unit-x3);width:var(--rs-unit-x3)}.root--size-small .input:checked+.area .thumb{transform:translateX(var(--rs-unit-x2))}[dir=rtl] .root--size-small .input:checked+.area .thumb{transform:translateX(calc(var(--rs-unit-x2) * -1))}.root--size-large .area{height:calc(var(--rs-unit-x1) * 6);width:calc(var(--rs-unit-x1) * 10)}.root--size-large .thumb{height:var(--rs-unit-x5);width:var(--rs-unit-x5)}.root--size-large .input:checked+.area .thumb{transform:translateX(var(--rs-unit-x4))}[dir=rtl] .root--size-large .input:checked+.area .thumb{transform:translateX(calc(var(--rs-unit-x4) * -1))}.root--reversed{flex-direction:row-reverse}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import type * as T from "./Tabs.types";
|
2
2
|
declare const Tabs: {
|
3
3
|
(props: T.Props): import("react/jsx-runtime").JSX.Element;
|
4
|
-
Item: import("react").ForwardRefExoticComponent<T.ItemProps & import("react").RefAttributes<
|
4
|
+
Item: import("react").ForwardRefExoticComponent<T.ItemProps & import("react").RefAttributes<HTMLButtonElement | HTMLAnchorElement>>;
|
5
5
|
List: (props: T.ListProps) => import("react/jsx-runtime").JSX.Element;
|
6
6
|
Panel: (props: T.PanelProps) => import("react/jsx-runtime").JSX.Element;
|
7
7
|
};
|
@@ -1 +1 @@
|
|
1
|
-
@property --rs-tabs-stop-l{syntax:"<percentage>";initial-value:.01%;inherits:false}@property --rs-tabs-stop-r{syntax:"<percentage>";initial-value:100%;inherits:false}.root{box-sizing:initial;max-width:100%}.list,.root{position:relative}.inner{mask-image:linear-gradient(to right,transparent 0,#000 var(--rs-tabs-stop-l),#000 var(--rs-tabs-stop-r),transparent 100%);transition:var(--rs-duration-fast) var(--rs-easing-decelerate);transition-property:--rs-tabs-stop-l,--rs-tabs-stop-r}.inner:after{background-color:var(--rs-color-border-neutral-faded);content:"";position:absolute;z-index:2}.listItem{--rs-tabs-gap:var(--rs-unit-
|
1
|
+
@property --rs-tabs-stop-l{syntax:"<percentage>";initial-value:.01%;inherits:false}@property --rs-tabs-stop-r{syntax:"<percentage>";initial-value:100%;inherits:false}.root{box-sizing:initial;max-width:100%}.list,.root{position:relative}.inner{mask-image:linear-gradient(to right,transparent 0,#000 var(--rs-tabs-stop-l),#000 var(--rs-tabs-stop-r),transparent 100%);transition:var(--rs-duration-fast) var(--rs-easing-decelerate);transition-property:--rs-tabs-stop-l,--rs-tabs-stop-r}.inner:after{background-color:var(--rs-color-border-neutral-faded);content:"";position:absolute;z-index:2}.listItem{--rs-tabs-gap:var(--rs-unit-x6);flex-shrink:0;position:relative}.button{overflow:hidden;position:relative;z-index:1;-webkit-tap-highlight-color:transparent}.button,.buttonContent{border-radius:var(--rs-radius-medium);width:100%}.buttonContent{align-items:center;box-sizing:border-box;display:flex}.buttonContent:hover{color:var(--rs-color-foreground-neutral-faded)}.icon{color:inherit;transition:color var(--rs-duration-fast) var(--rs-easing-standard)}[data-rs-keyboard] .radio:focus+.buttonContent{box-shadow:var(--rs-focus-inset-shadow)}.icon:not(:last-child){margin-inline-end:var(--rs-unit-x2)}.--item-active:after{content:""}.--item-active:after,.selector{background:var(--rs-color-border-primary);border-radius:calc(var(--rs-radius-medium) - 1px);position:absolute;z-index:var(--rs-z-index-raised)}.selector{--rs-tab-selection-x:0;--rs-tab-selection-y:0;--rs-tab-selection-scale-x:0;--rs-tab-selection-scale-y:0;transform:translate(calc(var(--rs-tab-selection-x) * 1px),calc(var(--rs-tab-selection-y) * 1px)) translateZ(0);transform-origin:0 0}.--selector-hidden{visibility:hidden}.--selector-animated{transition:var(--rs-duration-medium) var(--rs-easing-decelerate);transition-property:transform,height,width;will-change:transform,height,width}.next,.prev{align-items:center;display:flex;inset-block:0;position:absolute;z-index:var(--rs-z-index-raised)}[dir=rtl] .next,[dir=rtl] .prev{transform:scaleX(-1)}.next{inset-inline-end:var(--rs-unit-x1)}.prev{inset-inline-start:var(--rs-unit-x1)}.panel{outline:none}[data-rs-keyboard] .panel:focus{box-shadow:var(--rs-focus-shadow)}.--panel-hidden{display:none}.--direction-row{margin:0 calc(var(--rs-unit-x2) * -1);overflow:hidden;padding:0 var(--rs-unit-x2)}.--direction-row .inner{margin:0 calc(var(--rs-unit-x2) * -1) -40px;overflow:auto;padding:0 var(--rs-unit-x2) 40px;white-space:nowrap;-ms-overflow-style:none;overflow:-moz-scrollbars-none;scrollbar-width:none}.--direction-row .inner::-webkit-scrollbar{display:none}.--direction-row .inner:after{height:1px;inset-inline:var(--rs-unit-x2);bottom:0}.--direction-row .list{align-items:center;display:inline-flex;flex-wrap:nowrap;vertical-align:top}.--direction-row .listItem+.listItem{margin-inline-start:var(--rs-tabs-gap)}.--direction-row .--item-active:after{height:2px;inset-inline:0;bottom:0}.--direction-row .selector{bottom:0;height:2px;left:0;width:calc(var(--rs-tab-selection-scale-x) * 1px)}.--direction-row .button{box-sizing:initial;margin:var(--rs-unit-x1) calc(var(--rs-unit-x2) * -1);padding:0 var(--rs-unit-x2)}.--direction-row .buttonContent{justify-content:center;padding:var(--rs-tabs-item-p-v) 0}.--direction-column .inner:after{bottom:0;height:100%;inset-inline-end:0;top:0;width:1px}.--direction-column .list{display:flex;flex-direction:column}.--direction-column .listItem{--rs-tabs-gap:var(--rs-unit-x1)}.--direction-column .item{padding-inline-end:var(--rs-unit-x1)}.--direction-column .listItem+.listItem{margin-top:var(--rs-tabs-gap)}.--direction-column .--item-active:after{bottom:0}.--direction-column .--item-active:after,.--direction-column .selector{height:100%;inset-inline-end:0;width:2px}.--direction-column .selector{height:calc(var(--rs-tab-selection-scale-y) * 1px);top:0}.--direction-column .button{margin-inline-start:calc(var(--rs-unit-x2) * -1);padding:var(--rs-unit-x2);width:calc(100% + var(--rs-unit-x1))}.--direction-column .buttonContent{justify-content:flex-start}.--variant-borderless .inner:after,.--variant-pills .inner:after,.--variant-pills-elevated .inner:after{content:none}.--variant-pills .button,.--variant-pills-elevated .button{margin:0;padding:0}.--variant-pills .buttonContent,.--variant-pills-elevated .buttonContent{margin:0;padding:var(--rs-tabs-item-p-v) var(--rs-tabs-item-p-h)}.--variant-pills .buttonContent:hover,.--variant-pills-elevated .buttonContent:hover{background:none}.--variant-pills .listItem,.--variant-pills-elevated .listItem{--rs-tabs-gap:var(--rs-unit-x1)}.--variant-pills .selector,.--variant-pills-elevated .selector{background-color:var(--rs-color-background-neutral);height:calc(var(--rs-tab-selection-scale-y) * 1px);opacity:.6;width:calc(var(--rs-tab-selection-scale-x) * 1px);z-index:0}.--direction-column.--variant-pills .selector,.--direction-column.--variant-pills-elevated .selector{left:0}.--direction-row.--variant-pills .selector,.--direction-row.--variant-pills-elevated .selector{top:0}.--variant-pills .--item-active:after,.--variant-pills-elevated .--item-active:after{background-color:var(--rs-color-background-neutral);opacity:.6;z-index:0}.--direction-column.--variant-pills .--item-active:after,.--direction-column.--variant-pills-elevated .--item-active:after{width:100%}.--direction-row.--variant-pills .--item-active:after,.--direction-row.--variant-pills-elevated .--item-active:after{height:100%}.--variant-pills-elevated .list{background:var(--rs-color-background-neutral-faded);border:2px solid transparent;border-radius:var(--rs-radius-medium)}.--variant-pills-elevated .--item-active:after,.--variant-pills-elevated .selector{background:var(--rs-color-background-elevation-raised);box-shadow:var(--rs-shadow-raised);box-sizing:border-box;opacity:1}.--size-medium{--rs-tabs-item-p-v:var(--rs-unit-x2);--rs-tabs-item-p-h:var(--rs-unit-x3)}.--size-large{--rs-tabs-item-p-v:var(--rs-unit-x3);--rs-tabs-item-p-h:var(--rs-unit-x4)}.--item-width-equal{max-width:none}.--item-width-equal .inner{flex-wrap:wrap;overflow:hidden}.--item-width-equal .list{display:flex}.--item-width-equal .listItem{flex-basis:0;flex-grow:1;margin:0}.--fade-end .inner,[dir=rtl] .--fade-start .inner{--rs-tabs-stop-r:85%}.--fade-start .inner,[dir=rtl] .--fade-end .inner{--rs-tabs-stop-l:15%}@media (--rs-viewport-s ){.next,.prev{display:none}}
|
@@ -9,8 +9,8 @@ export declare const useTabs: (value?: string) => {
|
|
9
9
|
value: string;
|
10
10
|
name?: string;
|
11
11
|
}) => void) | undefined;
|
12
|
-
direction?: ("column" | "row") | undefined;
|
13
12
|
variant?: ("bordered" | "borderless" | "pills" | "pills-elevated") | undefined;
|
13
|
+
direction?: ("column" | "row") | undefined;
|
14
14
|
itemWidth?: "equal" | undefined;
|
15
15
|
size: NonNullable<T.BaseProps["size"]>;
|
16
16
|
value?: string;
|
@@ -1,4 +1,4 @@
|
|
1
1
|
import React from "react";
|
2
2
|
import type * as T from "./Tabs.types";
|
3
|
-
declare const _default: React.ForwardRefExoticComponent<T.ItemProps & React.RefAttributes<
|
3
|
+
declare const _default: React.ForwardRefExoticComponent<T.ItemProps & React.RefAttributes<HTMLButtonElement | HTMLAnchorElement>>;
|
4
4
|
export default _default;
|
@@ -6,6 +6,7 @@ import HiddenInput from "../_private/HiddenInput/index.js";
|
|
6
6
|
import Actionable from "../Actionable/index.js";
|
7
7
|
import Icon from "../Icon/index.js";
|
8
8
|
import Text from "../Text/index.js";
|
9
|
+
import useIsomorphicLayoutEffect from "../../hooks/useIsomorphicLayoutEffect.js";
|
9
10
|
import { useTabs } from "./TabsContext.js";
|
10
11
|
import s from "./Tabs.module.css";
|
11
12
|
const TabsItem = (props, ref) => {
|
@@ -34,8 +35,6 @@ const TabsItem = (props, ref) => {
|
|
34
35
|
const listEl = elScrollableRef.current;
|
35
36
|
const currentListItem = itemRef.current?.parentElement;
|
36
37
|
const prevListItem = elActiveRef.current?.parentElement;
|
37
|
-
// Updating refs after saving the elements
|
38
|
-
updateRefs();
|
39
38
|
if (onChange)
|
40
39
|
onChange({ value, name });
|
41
40
|
if (!listEl || !currentListItem || !prevListItem || listEl.scrollWidth === listEl.clientWidth) {
|
@@ -50,7 +49,7 @@ const TabsItem = (props, ref) => {
|
|
50
49
|
return;
|
51
50
|
itemRef.current?.scrollIntoView({ behavior: "smooth", block: "center", inline: "center" });
|
52
51
|
};
|
53
|
-
|
52
|
+
useIsomorphicLayoutEffect(() => {
|
54
53
|
if (!active)
|
55
54
|
return;
|
56
55
|
updateRefs();
|
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import React from "react";
|
4
4
|
import { classNames, throttle } from "../../utilities/helpers.js";
|
5
5
|
import useRTL from "../../hooks/useRTL.js";
|
6
|
-
import { focusNextElement, focusPreviousElement, focusFirstElement, focusLastElement, } from "../../utilities/a11y/
|
6
|
+
import { focusNextElement, focusPreviousElement, focusFirstElement, focusLastElement, } from "../../utilities/a11y/index.js";
|
7
7
|
import useIsomorphicLayoutEffect from "../../hooks/useIsomorphicLayoutEffect.js";
|
8
8
|
import useHotkeys from "../../hooks/useHotkeys.js";
|
9
9
|
import Button from "../Button/index.js";
|
@@ -1,10 +1,11 @@
|
|
1
|
+
import React from "react";
|
1
2
|
declare const _default: {
|
2
3
|
title: string;
|
3
4
|
component: {
|
4
|
-
(props: import("./..").TabsProps):
|
5
|
-
Item:
|
6
|
-
List: (props: import("../Tabs.types").ListProps) =>
|
7
|
-
Panel: (props: import("../Tabs.types").PanelProps) =>
|
5
|
+
(props: import("./..").TabsProps): React.JSX.Element;
|
6
|
+
Item: React.ForwardRefExoticComponent<import("./..").TabsItemProps & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>>;
|
7
|
+
List: (props: import("../Tabs.types").ListProps) => React.JSX.Element;
|
8
|
+
Panel: (props: import("../Tabs.types").PanelProps) => React.JSX.Element;
|
8
9
|
};
|
9
10
|
parameters: {
|
10
11
|
iframe: {
|
@@ -13,12 +14,13 @@ declare const _default: {
|
|
13
14
|
};
|
14
15
|
};
|
15
16
|
export default _default;
|
16
|
-
export declare const variant: () =>
|
17
|
-
export declare const size: () =>
|
18
|
-
export declare const direction: () =>
|
19
|
-
export declare const composition: () =>
|
20
|
-
export declare const icon: () =>
|
21
|
-
export declare const equalWidth: () =>
|
22
|
-
export declare const selection: () =>
|
23
|
-
export declare const navigation: () =>
|
24
|
-
export declare const edgeCases: () =>
|
17
|
+
export declare const variant: () => React.JSX.Element;
|
18
|
+
export declare const size: () => React.JSX.Element;
|
19
|
+
export declare const direction: () => React.JSX.Element;
|
20
|
+
export declare const composition: () => React.JSX.Element;
|
21
|
+
export declare const icon: () => React.JSX.Element;
|
22
|
+
export declare const equalWidth: () => React.JSX.Element;
|
23
|
+
export declare const selection: () => React.JSX.Element;
|
24
|
+
export declare const navigation: () => React.JSX.Element;
|
25
|
+
export declare const edgeCases: () => React.JSX.Element;
|
26
|
+
export declare const edgeCaseDom: () => React.JSX.Element;
|
@@ -1,6 +1,9 @@
|
|
1
|
+
import React from "react";
|
1
2
|
import { Example } from "../../../utilities/storybook/index.js";
|
2
3
|
import Tabs from "../index.js";
|
3
4
|
import View from "../../View/index.js";
|
5
|
+
import Text from "../../Text/index.js";
|
6
|
+
import ScrollArea from "../../ScrollArea/index.js";
|
4
7
|
import IconZap from "../../../icons/Zap.js";
|
5
8
|
export default {
|
6
9
|
title: "Components/Tabs",
|
@@ -126,15 +129,17 @@ export const direction = () => (<Example>
|
|
126
129
|
export const composition = () => (<Example>
|
127
130
|
<Example.Item title="switching panels">
|
128
131
|
<Tabs>
|
129
|
-
<
|
130
|
-
<Tabs.
|
131
|
-
|
132
|
-
|
133
|
-
|
132
|
+
<View gap={4}>
|
133
|
+
<Tabs.List>
|
134
|
+
<Tabs.Item value="0">Item 1</Tabs.Item>
|
135
|
+
<Tabs.Item value="1">Long item 2</Tabs.Item>
|
136
|
+
<Tabs.Item value="2">Very long item 3</Tabs.Item>
|
137
|
+
</Tabs.List>
|
134
138
|
|
135
|
-
|
136
|
-
|
137
|
-
|
139
|
+
<Tabs.Panel value="0">Tab 1</Tabs.Panel>
|
140
|
+
<Tabs.Panel value="1">Tab 2</Tabs.Panel>
|
141
|
+
<Tabs.Panel value="2">Tab 3</Tabs.Panel>
|
142
|
+
</View>
|
138
143
|
</Tabs>
|
139
144
|
</Example.Item>
|
140
145
|
</Example>);
|
@@ -273,3 +278,61 @@ export const edgeCases = () => (<Example>
|
|
273
278
|
</Tabs>
|
274
279
|
</Example.Item>
|
275
280
|
</Example>);
|
281
|
+
export const edgeCaseDom = () => {
|
282
|
+
const [activeItem, setActiveItem] = React.useState("1");
|
283
|
+
const sectionsRef = React.useRef(null);
|
284
|
+
return (<Example>
|
285
|
+
<Example.Item title="active item changes on scroll">
|
286
|
+
<View justify="center" align="center" padding={10}>
|
287
|
+
<View width={60} gap={2}>
|
288
|
+
<Tabs value={activeItem} onChange={(args) => setActiveItem(args.value)}>
|
289
|
+
<Tabs.List>
|
290
|
+
<Tabs.Item value="1">Item 1</Tabs.Item>
|
291
|
+
<Tabs.Item value="2">Item 2</Tabs.Item>
|
292
|
+
<Tabs.Item value="3">Item 3</Tabs.Item>
|
293
|
+
<Tabs.Item value="4">Item 4</Tabs.Item>
|
294
|
+
</Tabs.List>
|
295
|
+
</Tabs>
|
296
|
+
|
297
|
+
<ScrollArea attributes={{ ref: sectionsRef }} height={70} onScroll={(args) => {
|
298
|
+
setActiveItem(Math.min(4, Math.floor(args.y * 10) + 1).toString());
|
299
|
+
}}>
|
300
|
+
<View gap={4}>
|
301
|
+
<View gap={2}>
|
302
|
+
<Text>Section 1</Text>
|
303
|
+
|
304
|
+
<View gap={1} direction="row">
|
305
|
+
{[...Array(4)].map((i) => (<View grow height="100px" backgroundColor="neutral-faded" key={i}/>))}
|
306
|
+
</View>
|
307
|
+
</View>
|
308
|
+
|
309
|
+
<View gap={2}>
|
310
|
+
<Text>Section 2</Text>
|
311
|
+
|
312
|
+
<View gap={1} direction="row">
|
313
|
+
{[...Array(4)].map((i) => (<View grow height="100px" backgroundColor="neutral-faded"/>))}
|
314
|
+
</View>
|
315
|
+
</View>
|
316
|
+
|
317
|
+
<View gap={2}>
|
318
|
+
<Text>Section 3</Text>
|
319
|
+
|
320
|
+
<View gap={1} direction="row">
|
321
|
+
{[...Array(4)].map((i) => (<View grow height="100px" backgroundColor="neutral-faded"/>))}
|
322
|
+
</View>
|
323
|
+
</View>
|
324
|
+
|
325
|
+
<View gap={2}>
|
326
|
+
<Text>Section 4</Text>
|
327
|
+
|
328
|
+
<View gap={1} direction="row">
|
329
|
+
{[...Array(4)].map((i) => (<View grow height="100px" backgroundColor="neutral-faded"/>))}
|
330
|
+
</View>
|
331
|
+
</View>
|
332
|
+
</View>
|
333
|
+
</ScrollArea>
|
334
|
+
</View>
|
335
|
+
</View>
|
336
|
+
</Example.Item>
|
337
|
+
</Example>);
|
338
|
+
};
|
@@ -1,5 +1,6 @@
|
|
1
1
|
"use client";
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
3
|
+
import React from "react";
|
3
4
|
import { classNames, responsiveClassNames, responsivePropDependency } from "../../utilities/helpers.js";
|
4
5
|
import useElementId from "../../hooks/useElementId.js";
|
5
6
|
import { useFormControl } from "../FormControl/index.js";
|
@@ -10,8 +11,11 @@ const TextFieldSlot = (props) => {
|
|
10
11
|
const { slot, icon, size, affix, position } = props;
|
11
12
|
if (!icon && !slot && !affix)
|
12
13
|
return null;
|
14
|
+
// In case fragment is used, map over its children instead
|
15
|
+
const renderedSlot = React.isValidElement(slot) && slot.type === React.Fragment ? slot.props.children : slot;
|
13
16
|
const content = [
|
14
|
-
slot &&
|
17
|
+
slot &&
|
18
|
+
React.Children.map(renderedSlot, (child) => (_jsx("div", { className: classNames(s.slot, s[`slot--position-${position}`]), children: child }, "slot"))),
|
15
19
|
icon && (_jsx("div", { className: s.icon, children: _jsx(Icon, { size: responsivePropDependency(size, (size) => {
|
16
20
|
if (size === "large")
|
17
21
|
return 5;
|
@@ -1 +1 @@
|
|
1
|
-
.root{--rs-p-h:var(--rs-text-field-gap);background:var(--rs-color-background-elevation-base);border:1px solid var(--rs-color-border-neutral);display:flex;gap:var(--rs-text-field-gap);padding:calc(var(--rs-unit-x1) - 1px) var(--rs-text-field-gap);position:relative;row-gap:var(--rs-unit-x1);z-index:0}.root:not(:has(button:focus,a:focus,[tabindex="0"]:focus)):focus-within{border-color:var(--rs-color-border-primary);box-shadow:0 0 0 1px var(--rs-color-border-primary)}.root.--multiline{flex-wrap:wrap}.root.--multiline .input{width:auto}.input{background:none;border:none;box-sizing:border-box;color:var(--rs-color-foreground-neutral);flex-grow:1;font-family:var(--rs-font-family-body);font-weight:var(--rs-font-weight-regular);margin:calc(var(--rs-unit-x1) * -1) calc(var(--rs-text-field-gap) * -1);outline:none;padding-inline:var(--rs-text-field-gap);position:relative;width:100%;z-index:1}.input:-webkit-autofill{-webkit-background-clip:text;-webkit-text-fill-color:var(--rs-color-foreground-neutral)}.affix,.icon,.slot{align-items:center;display:flex;flex-shrink:0;min-height:calc(var(--rs-text-field-line-height) + var(--rs-unit-x1) * 2);position:relative;z-index:5}.slot--position-end{margin-inline-end:calc(var(--rs-unit-x1) * -1)}.icon{pointer-events:none}.affix{color:var(--rs-color-foreground-neutral-faded)}.affix.affix--position-start{padding-inline-end:var(--rs-text-field-gap)}.affix.affix--position-start:after{border-inline-end:1px solid var(--rs-color-border-neutral-faded);content:"";inset-block:var(--rs-unit-x1);inset-inline-end:0;position:absolute}.affix.affix--position-end{padding-inline-start:var(--rs-text-field-gap)}.affix.affix--position-end:after{border-inline-start:1px solid var(--rs-color-border-neutral-faded);content:"";inset-block:var(--rs-unit-x1);inset-inline-start:0;position:absolute}.root.--disabled{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled)}.root.--disabled,.root.--disabled .input{color:var(--rs-color-foreground-disabled);cursor:not-allowed}.--size-medium{--rs-text-field-gap:var(--rs-unit-x2);--rs-text-field-line-height:var(--rs-line-height-body-3);border-radius:var(--rs-radius-small)}.--size-medium .input{padding-block:var(--rs-unit-x2)}.--size-medium .affix,.--size-medium .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-large{--rs-text-field-gap:var(--rs-unit-x3);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-large .input{padding-block:var(--rs-unit-x3)}.--size-large .affix,.--size-large .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}.--size-xlarge{--rs-text-field-gap:var(--rs-unit-x4);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-xlarge .input{padding-block:var(--rs-unit-x4)}.--size-xlarge .affix,.--size-xlarge .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}.root.--variant-faded{background:var(--rs-color-background-neutral-faded);border-color:transparent}.root.--variant-faded:focus-within{border-color:var(--rs-color-border-primary)}.root.--variant-headless{background:transparent;border-color:transparent}.root.--variant-headless.--status-error,.root.--variant-headless.--status-error:focus-within,.root.--variant-headless:focus-within{border-color:transparent;box-shadow:none}.root.--status-error{border-color:var(--rs-color-border-critical)}.root.--status-error:focus-within{border-color:var(--rs-color-border-primary)}@media (--rs-viewport-s ) and (hover:none){.input{font-size:var(--rs-font-size-body-2)!important}}@media (--rs-viewport-m ){.--size-medium--m{--rs-text-field-gap:var(--rs-unit-x2);--rs-text-field-line-height:var(--rs-line-height-body-3);border-radius:var(--rs-radius-small)}.--size-medium--m .input{padding-block:var(--rs-unit-x2)}.--size-medium--m .affix,.--size-medium--m .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-large--m{--rs-text-field-gap:var(--rs-unit-x3);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-large--m .input{padding-block:var(--rs-unit-x3)}.--size-large--m .affix,.--size-large--m .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}.--size-xlarge--m{--rs-text-field-gap:var(--rs-unit-x4);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-xlarge--m .input{padding-block:var(--rs-unit-x4)}.--size-xlarge--m .affix,.--size-xlarge--m .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}}@media (--rs-viewport-l ){.--size-medium--l{--rs-text-field-gap:var(--rs-unit-x2);--rs-text-field-line-height:var(--rs-line-height-body-3);border-radius:var(--rs-radius-small)}.--size-medium--l .input{padding-block:var(--rs-unit-x2)}.--size-medium--l .affix,.--size-medium--l .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-large--l{--rs-text-field-gap:var(--rs-unit-x3);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-large--l .input{padding-block:var(--rs-unit-x3)}.--size-large--l .affix,.--size-large--l .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}.--size-xlarge--l{--rs-text-field-gap:var(--rs-unit-x4);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-xlarge--l .input{padding-block:var(--rs-unit-x4)}.--size-xlarge--l .affix,.--size-xlarge--l .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}}@media (--rs-viewport-xl ){.--size-medium--xl{--rs-text-field-gap:var(--rs-unit-x2);--rs-text-field-line-height:var(--rs-line-height-body-3);border-radius:var(--rs-radius-small)}.--size-medium--xl .input{padding-block:var(--rs-unit-x2)}.--size-medium--xl .affix,.--size-medium--xl .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-large--xl{--rs-text-field-gap:var(--rs-unit-x3);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-large--xl .input{padding-block:var(--rs-unit-x3)}.--size-large--xl .affix,.--size-large--xl .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}.--size-xlarge--xl{--rs-text-field-gap:var(--rs-unit-x4);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-xlarge--xl .input{padding-block:var(--rs-unit-x4)}.--size-xlarge--xl .affix,.--size-xlarge--xl .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}}
|
1
|
+
.root{--rs-p-h:var(--rs-text-field-gap);align-items:center;background:var(--rs-color-background-elevation-base);border:1px solid var(--rs-color-border-neutral);display:flex;gap:var(--rs-text-field-gap);padding:calc(var(--rs-unit-x1) - 1px) var(--rs-text-field-gap);position:relative;row-gap:var(--rs-unit-x1);z-index:0}.root:not(:has(button:focus,a:focus,[tabindex="0"]:focus)):focus-within{border-color:var(--rs-color-border-primary);box-shadow:0 0 0 1px var(--rs-color-border-primary)}.root.--multiline{flex-wrap:wrap}.root.--multiline .input{width:auto}.input{background:none;border:none;box-sizing:border-box;color:var(--rs-color-foreground-neutral);flex-grow:1;font-family:var(--rs-font-family-body);font-weight:var(--rs-font-weight-regular);margin:calc(var(--rs-unit-x1) * -1) calc(var(--rs-text-field-gap) * -1);outline:none;padding-inline:var(--rs-text-field-gap);position:relative;width:100%;z-index:1}.input:-webkit-autofill{-webkit-background-clip:text;-webkit-text-fill-color:var(--rs-color-foreground-neutral)}.affix,.icon,.slot{align-items:center;display:flex;flex-shrink:0;min-height:calc(var(--rs-text-field-line-height) + var(--rs-unit-x1) * 2);position:relative;z-index:5}.slot--position-end:last-child{margin-inline-end:calc(var(--rs-unit-x1) * -1)}.icon{pointer-events:none}.affix{color:var(--rs-color-foreground-neutral-faded)}.affix.affix--position-start{padding-inline-end:var(--rs-text-field-gap)}.affix.affix--position-start:after{border-inline-end:1px solid var(--rs-color-border-neutral-faded);content:"";inset-block:var(--rs-unit-x1);inset-inline-end:0;position:absolute}.affix.affix--position-end{padding-inline-start:var(--rs-text-field-gap)}.affix.affix--position-end:after{border-inline-start:1px solid var(--rs-color-border-neutral-faded);content:"";inset-block:var(--rs-unit-x1);inset-inline-start:0;position:absolute}.root.--disabled{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled)}.root.--disabled,.root.--disabled .input{color:var(--rs-color-foreground-disabled);cursor:not-allowed}.--size-medium{--rs-text-field-gap:var(--rs-unit-x2);--rs-text-field-line-height:var(--rs-line-height-body-3);border-radius:var(--rs-radius-small)}.--size-medium .input{padding-block:var(--rs-unit-x2)}.--size-medium .affix,.--size-medium .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-large{--rs-text-field-gap:var(--rs-unit-x3);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-large .input{padding-block:var(--rs-unit-x3)}.--size-large .affix,.--size-large .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}.--size-xlarge{--rs-text-field-gap:var(--rs-unit-x4);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-xlarge .input{padding-block:var(--rs-unit-x4)}.--size-xlarge .affix,.--size-xlarge .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}.root.--variant-faded{background:var(--rs-color-background-neutral-faded);border-color:transparent}.root.--variant-faded:focus-within{border-color:var(--rs-color-border-primary)}.root.--variant-headless{background:transparent;border-color:transparent}.root.--variant-headless.--status-error,.root.--variant-headless.--status-error:focus-within,.root.--variant-headless:focus-within{border-color:transparent;box-shadow:none}.root.--status-error{border-color:var(--rs-color-border-critical)}.root.--status-error:focus-within{border-color:var(--rs-color-border-primary)}@media (--rs-viewport-s ) and (hover:none){.input{font-size:var(--rs-font-size-body-2)!important}}@media (--rs-viewport-m ){.--size-medium--m{--rs-text-field-gap:var(--rs-unit-x2);--rs-text-field-line-height:var(--rs-line-height-body-3);border-radius:var(--rs-radius-small)}.--size-medium--m .input{padding-block:var(--rs-unit-x2)}.--size-medium--m .affix,.--size-medium--m .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-large--m{--rs-text-field-gap:var(--rs-unit-x3);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-large--m .input{padding-block:var(--rs-unit-x3)}.--size-large--m .affix,.--size-large--m .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}.--size-xlarge--m{--rs-text-field-gap:var(--rs-unit-x4);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-xlarge--m .input{padding-block:var(--rs-unit-x4)}.--size-xlarge--m .affix,.--size-xlarge--m .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}}@media (--rs-viewport-l ){.--size-medium--l{--rs-text-field-gap:var(--rs-unit-x2);--rs-text-field-line-height:var(--rs-line-height-body-3);border-radius:var(--rs-radius-small)}.--size-medium--l .input{padding-block:var(--rs-unit-x2)}.--size-medium--l .affix,.--size-medium--l .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-large--l{--rs-text-field-gap:var(--rs-unit-x3);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-large--l .input{padding-block:var(--rs-unit-x3)}.--size-large--l .affix,.--size-large--l .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}.--size-xlarge--l{--rs-text-field-gap:var(--rs-unit-x4);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-xlarge--l .input{padding-block:var(--rs-unit-x4)}.--size-xlarge--l .affix,.--size-xlarge--l .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}}@media (--rs-viewport-xl ){.--size-medium--xl{--rs-text-field-gap:var(--rs-unit-x2);--rs-text-field-line-height:var(--rs-line-height-body-3);border-radius:var(--rs-radius-small)}.--size-medium--xl .input{padding-block:var(--rs-unit-x2)}.--size-medium--xl .affix,.--size-medium--xl .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3)}.--size-large--xl{--rs-text-field-gap:var(--rs-unit-x3);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-large--xl .input{padding-block:var(--rs-unit-x3)}.--size-large--xl .affix,.--size-large--xl .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}.--size-xlarge--xl{--rs-text-field-gap:var(--rs-unit-x4);--rs-text-field-line-height:var(--rs-line-height-body-2);border-radius:var(--rs-radius-medium)}.--size-xlarge--xl .input{padding-block:var(--rs-unit-x4)}.--size-xlarge--xl .affix,.--size-xlarge--xl .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2)}}
|
@@ -5,6 +5,7 @@ import FormControl from "../../FormControl/index.js";
|
|
5
5
|
import View from "../../View/index.js";
|
6
6
|
import Text from "../../Text/index.js";
|
7
7
|
import Button from "../../Button/index.js";
|
8
|
+
import Badge from "../../Badge/index.js";
|
8
9
|
export default {
|
9
10
|
title: "Components/TextField",
|
10
11
|
component: TextField,
|
@@ -98,6 +99,9 @@ export const slots = () => (<Example>
|
|
98
99
|
<Example.Item title={["endSlot", "vertical and horizontal padding aligned"]}>
|
99
100
|
<TextField name="Name" placeholder="Enter your name" value="Reshaped" endSlot={<Button icon={IconZap} size="small" onClick={() => { }}/>}/>
|
100
101
|
</Example.Item>
|
102
|
+
<Example.Item title="multiline wrap">
|
103
|
+
<TextField name="Name" placeholder="Enter your name" value="Reshaped" startSlot={[...Array(10).keys()].map((i) => (<Badge key={i}>Item {i + 1}</Badge>))} multiline/>
|
104
|
+
</Example.Item>
|
101
105
|
</Example>);
|
102
106
|
export const formControl = () => (<Example>
|
103
107
|
<Example.Item title="with helper">
|
@@ -3,8 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import React from "react";
|
4
4
|
import { classNames } from "../../utilities/helpers.js";
|
5
5
|
import { onNextFrame } from "../../utilities/animation.js";
|
6
|
-
import { checkKeyboardMode } from "../../utilities/a11y/
|
7
|
-
import TrapFocus from "../../utilities/a11y/TrapFocus.js";
|
6
|
+
import { checkKeyboardMode, TrapFocus } from "../../utilities/a11y/index.js";
|
8
7
|
import Toast from "./Toast.js";
|
9
8
|
import ToastContext from "./Toast.context.js";
|
10
9
|
import { timeouts } from "./Toast.constants.js";
|