reshaped 3.2.6-rc.0 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/dist/bundle.css +1 -1
- package/dist/bundle.d.ts +2 -0
- package/dist/bundle.js +11 -11
- package/dist/cjs/themes/_generator/definitions/figma.js +1 -0
- package/dist/cjs/themes/_generator/definitions/reshaped.js +5 -4
- package/dist/cjs/themes/_generator/tokens/duration/duration.types.d.ts +1 -1
- package/dist/cjs/themes/_generator/transform.js +17 -7
- package/dist/cjs/themes/_generator/utilities/generateColors.js +6 -6
- package/dist/cjs/themes/_generator/utilities/resolveTokenReference.js +1 -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/Alert/tests/Alert.stories.d.ts +5 -4
- package/dist/components/Alert/tests/Alert.stories.js +3 -2
- package/dist/components/Autocomplete/Autocomplete.js +3 -3
- package/dist/components/Autocomplete/Autocomplete.types.d.ts +8 -9
- package/dist/components/Badge/Badge.module.css +1 -1
- package/dist/components/Button/Button.module.css +1 -1
- package/dist/components/Card/Card.js +1 -1
- package/dist/components/ContextMenu/ContextMenu.d.ts +10 -0
- package/dist/components/ContextMenu/ContextMenu.js +37 -0
- package/dist/components/ContextMenu/ContextMenu.module.css +1 -0
- package/dist/components/ContextMenu/ContextMenu.types.d.ts +2 -0
- package/dist/components/ContextMenu/ContextMenu.types.js +1 -0
- package/dist/components/ContextMenu/index.d.ts +2 -0
- package/dist/components/ContextMenu/index.js +1 -0
- package/dist/components/ContextMenu/tests/ContextMenu.stories.d.ts +18 -0
- package/dist/components/ContextMenu/tests/ContextMenu.stories.js +27 -0
- package/dist/components/DropdownMenu/DropdownMenu.d.ts +1 -2
- package/dist/components/DropdownMenu/DropdownMenu.js +2 -2
- package/dist/components/DropdownMenu/DropdownMenu.types.d.ts +4 -4
- package/dist/components/DropdownMenu/tests/DropdownMenu.stories.d.ts +1 -1
- package/dist/components/DropdownMenu/tests/DropdownMenu.stories.js +8 -0
- package/dist/components/FormControl/FormControl.context.d.ts +86 -86
- package/dist/components/Grid/Grid.js +5 -1
- package/dist/components/Hotkey/Hotkey.module.css +1 -1
- package/dist/components/Modal/Modal.js +3 -3
- package/dist/components/Modal/Modal.module.css +1 -1
- package/dist/components/Modal/Modal.types.d.ts +1 -1
- package/dist/components/Overlay/Overlay.js +5 -2
- package/dist/components/Overlay/Overlay.types.d.ts +2 -0
- package/dist/components/Popover/Popover.js +1 -1
- package/dist/components/Popover/Popover.types.d.ts +1 -1
- package/dist/components/Resizable/Resizable.js +2 -2
- package/dist/components/Resizable/Resizable.module.css +1 -1
- package/dist/components/Resizable/Resizable.types.d.ts +3 -1
- package/dist/components/Resizable/tests/Resizable.stories.js +34 -1
- package/dist/components/ScrollArea/ScrollArea.js +9 -9
- package/dist/components/ScrollArea/ScrollArea.module.css +1 -1
- package/dist/components/ScrollArea/ScrollArea.types.d.ts +1 -4
- package/dist/components/ScrollArea/tests/ScrollArea.stories.d.ts +6 -4
- package/dist/components/ScrollArea/tests/ScrollArea.stories.js +28 -2
- package/dist/components/Table/Table.js +4 -3
- package/dist/components/Table/Table.module.css +1 -1
- package/dist/components/Table/Table.types.d.ts +2 -0
- package/dist/components/Table/tests/Table.stories.d.ts +1 -1
- package/dist/components/Table/tests/Table.stories.js +13 -1
- package/dist/components/Tabs/Tabs.module.css +1 -1
- package/dist/components/Tabs/Tabs.types.d.ts +2 -0
- package/dist/components/Tabs/TabsContext.d.ts +2 -2
- package/dist/components/Tabs/TabsItem.js +16 -10
- package/dist/components/Tabs/TabsList.js +12 -3
- package/dist/components/Tabs/TabsPanel.js +3 -3
- package/dist/components/Text/Text.js +2 -1
- package/dist/components/TextField/TextField.js +4 -4
- package/dist/components/TextField/TextField.module.css +1 -1
- package/dist/components/TextField/TextField.types.d.ts +1 -0
- package/dist/components/Toast/Toast.js +3 -2
- package/dist/components/Tooltip/Tooltip.d.ts +1 -1
- package/dist/components/Tooltip/Tooltip.js +4 -4
- package/dist/components/Tooltip/Tooltip.types.d.ts +1 -1
- package/dist/components/Tooltip/tests/Tooltip.stories.d.ts +1 -1
- package/dist/components/View/View.js +8 -3
- package/dist/components/View/View.module.css +1 -1
- package/dist/components/View/View.types.d.ts +5 -5
- package/dist/components/View/tests/View.stories.js +6 -0
- package/dist/components/_private/Flyout/Flyout.module.css +1 -1
- package/dist/components/_private/Flyout/Flyout.types.d.ts +2 -1
- package/dist/components/_private/Flyout/FlyoutContent.js +6 -4
- package/dist/components/_private/Flyout/FlyoutControlled.js +12 -9
- package/dist/components/_private/Flyout/tests/Flyout.stories.d.ts +1 -0
- package/dist/components/_private/Flyout/tests/Flyout.stories.js +16 -1
- package/dist/components/_private/Flyout/useFlyout.d.ts +6 -11
- package/dist/components/_private/Flyout/useFlyout.js +19 -30
- package/dist/components/_private/Flyout/utilities/isFullyVisible.d.ts +6 -0
- package/dist/components/_private/Flyout/utilities/isFullyVisible.js +16 -0
- package/dist/components/_private/Portal/Portal.js +5 -2
- package/dist/hooks/_private/useOnClickOutside.d.ts +1 -1
- package/dist/hooks/_private/useOnClickOutside.js +8 -5
- package/dist/hooks/_private/useSingletonKeyboardMode.js +4 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/styles/align/align.css +1 -0
- package/dist/styles/align/index.d.ts +2 -1
- package/dist/styles/align/index.js +3 -3
- package/dist/styles/aspectRatio/aspectRatio.css +1 -0
- package/dist/styles/aspectRatio/index.d.ts +2 -1
- package/dist/styles/aspectRatio/index.js +2 -2
- package/dist/styles/bleed/bleed.module.css +1 -1
- package/dist/styles/bleed/index.js +2 -5
- package/dist/styles/height/height.module.css +1 -1
- package/dist/styles/height/index.js +2 -2
- package/dist/styles/inset/index.d.ts +2 -1
- package/dist/styles/inset/index.js +4 -7
- package/dist/styles/inset/inset.css +1 -0
- package/dist/styles/justify/index.d.ts +2 -1
- package/dist/styles/justify/index.js +3 -3
- package/dist/styles/justify/justify.css +1 -0
- package/dist/styles/maxHeight/index.js +2 -2
- package/dist/styles/maxHeight/maxHeight.module.css +1 -1
- package/dist/styles/maxWidth/index.js +2 -2
- package/dist/styles/maxWidth/maxWidth.module.css +1 -1
- package/dist/styles/minHeight/index.js +2 -2
- package/dist/styles/minHeight/minHeight.module.css +1 -1
- package/dist/styles/minWidth/index.js +2 -2
- package/dist/styles/minWidth/minWidth.module.css +1 -1
- package/dist/styles/padding/index.d.ts +2 -1
- package/dist/styles/padding/index.js +2 -2
- package/dist/styles/padding/padding.css +1 -0
- package/dist/styles/position/index.d.ts +2 -1
- package/dist/styles/position/index.js +4 -4
- package/dist/styles/position/position.css +1 -0
- package/dist/styles/textAlign/index.d.ts +2 -1
- package/dist/styles/textAlign/index.js +3 -3
- package/dist/styles/textAlign/textAlign.css +1 -0
- package/dist/styles/types.d.ts +5 -0
- package/dist/styles/width/index.js +2 -2
- package/dist/styles/width/width.module.css +1 -1
- package/dist/themes/_generator/definitions/figma.js +1 -0
- package/dist/themes/_generator/definitions/reshaped.js +5 -4
- package/dist/themes/_generator/tests/themes.stories.d.ts +4 -3
- package/dist/themes/_generator/tests/themes.stories.js +3 -2
- package/dist/themes/_generator/tokens/duration/duration.types.d.ts +1 -1
- package/dist/themes/_generator/utilities/generateColors.js +6 -6
- package/dist/themes/_generator/utilities/resolveTokenReference.js +1 -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/types/global.d.ts +4 -0
- package/dist/utilities/a11y/TrapFocus.js +1 -0
- package/dist/utilities/a11y/focus.d.ts +1 -1
- package/dist/utilities/a11y/focus.js +4 -1
- package/dist/utilities/a11y/tests/TrapFocus.stories.d.ts +6 -0
- package/dist/utilities/a11y/tests/TrapFocus.stories.js +59 -0
- package/dist/utilities/dom/find.d.ts +10 -0
- package/dist/utilities/dom/find.js +35 -0
- package/dist/utilities/dom/flyout.d.ts +2 -1
- package/dist/utilities/dom/flyout.js +13 -18
- package/dist/utilities/dom/index.d.ts +2 -1
- package/dist/utilities/dom/index.js +2 -1
- package/dist/utilities/scroll/lock.js +6 -2
- package/package.json +32 -32
- package/dist/styles/align/align.module.css +0 -1
- package/dist/styles/aspectRatio/aspectRatio.module.css +0 -1
- package/dist/styles/inset/inset.module.css +0 -1
- package/dist/styles/justify/justify.module.css +0 -1
- package/dist/styles/padding/padding.module.css +0 -1
- package/dist/styles/position/position.module.css +0 -1
- package/dist/styles/textAlign/textAlign.module.css +0 -1
@@ -0,0 +1,27 @@
|
|
1
|
+
import { Example } from "../../../utilities/storybook/index.js";
|
2
|
+
import ContextMenu from "../index.js";
|
3
|
+
import View from "../../View/index.js";
|
4
|
+
import ScrollArea from "../../ScrollArea/index.js";
|
5
|
+
export default {
|
6
|
+
title: "Components/ContextMenu",
|
7
|
+
component: ContextMenu,
|
8
|
+
parameters: {
|
9
|
+
iframe: {
|
10
|
+
url: "https://reshaped.so/docs/components/context-menu",
|
11
|
+
},
|
12
|
+
},
|
13
|
+
};
|
14
|
+
export const base = () => (<Example>
|
15
|
+
<Example.Item title="base">
|
16
|
+
<ScrollArea height="200px">
|
17
|
+
<ContextMenu>
|
18
|
+
<View height="400px" backgroundColor="neutral-faded" borderRadius="medium"/>
|
19
|
+
|
20
|
+
<ContextMenu.Content>
|
21
|
+
<ContextMenu.Item>Item 1</ContextMenu.Item>
|
22
|
+
<ContextMenu.Item>Item 2</ContextMenu.Item>
|
23
|
+
</ContextMenu.Content>
|
24
|
+
</ContextMenu>
|
25
|
+
</ScrollArea>
|
26
|
+
</Example.Item>
|
27
|
+
</Example>);
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import { type MenuItemProps } from "../MenuItem";
|
2
1
|
import type * as T from "./DropdownMenu.types";
|
3
2
|
declare const DropdownMenu: {
|
4
3
|
(props: T.Props): import("react/jsx-runtime").JSX.Element;
|
@@ -6,7 +5,7 @@ declare const DropdownMenu: {
|
|
6
5
|
Trigger: (props: import("../_private/Flyout").FlyoutTriggerProps) => import("react/jsx-runtime").JSX.Element;
|
7
6
|
Content: (props: T.ContentProps) => import("react/jsx-runtime").JSX.Element;
|
8
7
|
Section: (props: T.SectionProps) => import("react/jsx-runtime").JSX.Element;
|
9
|
-
Item: (props:
|
8
|
+
Item: (props: T.ItemProps) => import("react/jsx-runtime").JSX.Element;
|
10
9
|
SubMenu: (props: T.SubMenuProps) => import("react/jsx-runtime").JSX.Element;
|
11
10
|
SubTrigger: (props: T.SubTriggerProps) => import("react/jsx-runtime").JSX.Element;
|
12
11
|
};
|
@@ -64,8 +64,8 @@ const DropdownMenuSubTriggerItem = (props) => {
|
|
64
64
|
return (_jsx(DropdownMenuItem, { ...menuItemProps, attributes: { ...attributes, ref: ref }, endSlot: _jsx(Icon, { autoWidth: true, svg: IconChevronRight, className: s.arrow }), children: children }));
|
65
65
|
};
|
66
66
|
const DropdownMenuSubTrigger = (props) => {
|
67
|
-
const {
|
68
|
-
return (_jsx(DropdownMenu.Trigger, { children: (
|
67
|
+
const { attributes, ...menuItemProps } = props;
|
68
|
+
return (_jsx(DropdownMenu.Trigger, { children: (triggerAttributes) => (_jsx(DropdownMenuSubTriggerItem, { ...menuItemProps, attributes: { ...attributes, ...triggerAttributes } })) }));
|
69
69
|
};
|
70
70
|
DropdownMenu.Dismissible = Popover.Dismissible;
|
71
71
|
DropdownMenu.Trigger = Popover.Trigger;
|
@@ -1,17 +1,17 @@
|
|
1
1
|
import type React from "react";
|
2
2
|
import type { PopoverProps, PopoverInstance } from "../Popover";
|
3
|
+
import type { MenuItemProps } from "../MenuItem";
|
3
4
|
import type { FlyoutContentProps } from "../_private/Flyout";
|
4
5
|
export type Instance = PopoverInstance;
|
5
|
-
export type Props = Pick<PopoverProps, "children" | "position" | "forcePosition" | "fallbackPositions" | "triggerType" | "contentGap" | "contentShift" | "onOpen" | "onClose" | "active" | "defaultActive" | "width" | "disableHideAnimation" | "disableCloseOnOutsideClick" | "instanceRef" | "containerRef"> & {
|
6
|
+
export type Props = Pick<PopoverProps, "children" | "position" | "forcePosition" | "fallbackPositions" | "triggerType" | "contentGap" | "contentShift" | "onOpen" | "onClose" | "active" | "defaultActive" | "width" | "disableHideAnimation" | "disableCloseOnOutsideClick" | "instanceRef" | "containerRef" | "originCoordinates"> & {
|
6
7
|
trapFocusMode?: Extract<PopoverProps["trapFocusMode"], "action-menu" | "selection-menu">;
|
7
8
|
};
|
8
9
|
export type ContentProps = Pick<FlyoutContentProps, "attributes" | "children" | "className">;
|
10
|
+
export type ItemProps = Omit<MenuItemProps, "roundedCorners">;
|
9
11
|
export type SectionProps = {
|
10
12
|
children: React.ReactNode;
|
11
13
|
};
|
12
14
|
export type SubMenuProps = {
|
13
15
|
children: React.ReactNode;
|
14
16
|
};
|
15
|
-
export type SubTriggerProps =
|
16
|
-
children: React.ReactNode;
|
17
|
-
};
|
17
|
+
export type SubTriggerProps = Omit<MenuItemProps, "endSlot" | "roundedCorners">;
|
@@ -6,7 +6,7 @@ declare const _default: {
|
|
6
6
|
Trigger: (props: import("../../_private/Flyout").FlyoutTriggerProps) => import("react").JSX.Element;
|
7
7
|
Content: (props: import("../DropdownMenu.types").ContentProps) => import("react").JSX.Element;
|
8
8
|
Section: (props: import("../DropdownMenu.types").SectionProps) => import("react").JSX.Element;
|
9
|
-
Item: (props:
|
9
|
+
Item: (props: import("../DropdownMenu.types").ItemProps) => import("react").JSX.Element;
|
10
10
|
SubMenu: (props: import("../DropdownMenu.types").SubMenuProps) => import("react").JSX.Element;
|
11
11
|
SubTrigger: (props: import("../DropdownMenu.types").SubTriggerProps) => import("react").JSX.Element;
|
12
12
|
};
|
@@ -93,6 +93,14 @@ export const submenu = () => (<Example>
|
|
93
93
|
<DropdownMenu.Item onClick={() => { }}>SubItem 2-2</DropdownMenu.Item>
|
94
94
|
</DropdownMenu.Content>
|
95
95
|
</DropdownMenu.SubMenu>
|
96
|
+
|
97
|
+
<DropdownMenu.SubMenu>
|
98
|
+
<DropdownMenu.SubTrigger disabled>Item 4, disabled</DropdownMenu.SubTrigger>
|
99
|
+
<DropdownMenu.Content>
|
100
|
+
<DropdownMenu.Item onClick={() => { }}>SubItem 3-1</DropdownMenu.Item>
|
101
|
+
<DropdownMenu.Item onClick={() => { }}>SubItem 3-2</DropdownMenu.Item>
|
102
|
+
</DropdownMenu.Content>
|
103
|
+
</DropdownMenu.SubMenu>
|
96
104
|
</DropdownMenu.Content>
|
97
105
|
</DropdownMenu>
|
98
106
|
</Example.Item>
|
@@ -4,112 +4,112 @@ export declare const Provider: React.Provider<T.Context>;
|
|
4
4
|
export declare const useFormControlPrivate: () => T.Context;
|
5
5
|
export declare const useFormControl: () => {
|
6
6
|
attributes: {
|
7
|
-
defaultChecked?: boolean | undefined;
|
7
|
+
defaultChecked?: boolean | undefined | undefined;
|
8
8
|
defaultValue?: string | number | readonly string[] | undefined;
|
9
|
-
suppressContentEditableWarning?: boolean | undefined;
|
10
|
-
suppressHydrationWarning?: boolean | undefined;
|
11
|
-
accessKey?: string | undefined;
|
12
|
-
autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {});
|
13
|
-
autoFocus?: boolean | undefined;
|
14
|
-
className?: string | undefined;
|
15
|
-
contentEditable?: (boolean | "false" | "true") | "
|
16
|
-
contextMenu?: string | undefined;
|
17
|
-
dir?: string | undefined;
|
9
|
+
suppressContentEditableWarning?: boolean | undefined | undefined;
|
10
|
+
suppressHydrationWarning?: boolean | undefined | undefined;
|
11
|
+
accessKey?: string | undefined | undefined;
|
12
|
+
autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {}) | undefined;
|
13
|
+
autoFocus?: boolean | undefined | undefined;
|
14
|
+
className?: string | undefined | undefined;
|
15
|
+
contentEditable?: "inherit" | (boolean | "false" | "true") | "plaintext-only" | undefined;
|
16
|
+
contextMenu?: string | undefined | undefined;
|
17
|
+
dir?: string | undefined | undefined;
|
18
18
|
draggable?: (boolean | "false" | "true") | undefined;
|
19
|
-
enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
|
20
|
-
hidden?: boolean | undefined;
|
21
|
-
id?: string | undefined;
|
22
|
-
lang?: string | undefined;
|
23
|
-
nonce?: string | undefined;
|
24
|
-
slot?: string | undefined;
|
19
|
+
enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
|
20
|
+
hidden?: boolean | undefined | undefined;
|
21
|
+
id?: string | undefined | undefined;
|
22
|
+
lang?: string | undefined | undefined;
|
23
|
+
nonce?: string | undefined | undefined;
|
24
|
+
slot?: string | undefined | undefined;
|
25
25
|
spellCheck?: (boolean | "false" | "true") | undefined;
|
26
26
|
style?: React.CSSProperties | undefined;
|
27
|
-
tabIndex?: number | undefined;
|
28
|
-
title?: string | undefined;
|
29
|
-
translate?: "yes" | "no" | undefined;
|
30
|
-
radioGroup?: string | undefined;
|
27
|
+
tabIndex?: number | undefined | undefined;
|
28
|
+
title?: string | undefined | undefined;
|
29
|
+
translate?: "yes" | "no" | undefined | undefined;
|
30
|
+
radioGroup?: string | undefined | undefined;
|
31
31
|
role?: React.AriaRole | undefined;
|
32
|
-
about?: string | undefined;
|
33
|
-
content?: string | undefined;
|
34
|
-
datatype?: string | undefined;
|
32
|
+
about?: string | undefined | undefined;
|
33
|
+
content?: string | undefined | undefined;
|
34
|
+
datatype?: string | undefined | undefined;
|
35
35
|
inlist?: any;
|
36
|
-
prefix?: string | undefined;
|
37
|
-
property?: string | undefined;
|
38
|
-
rel?: string | undefined;
|
39
|
-
resource?: string | undefined;
|
40
|
-
rev?: string | undefined;
|
41
|
-
typeof?: string | undefined;
|
42
|
-
vocab?: string | undefined;
|
43
|
-
autoCorrect?: string | undefined;
|
44
|
-
autoSave?: string | undefined;
|
45
|
-
color?: string | undefined;
|
46
|
-
itemProp?: string | undefined;
|
47
|
-
itemScope?: boolean | undefined;
|
48
|
-
itemType?: string | undefined;
|
49
|
-
itemID?: string | undefined;
|
50
|
-
itemRef?: string | undefined;
|
51
|
-
results?: number | undefined;
|
52
|
-
security?: string | undefined;
|
53
|
-
unselectable?: "on" | "off" | undefined;
|
54
|
-
inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined;
|
55
|
-
is?: string | undefined;
|
56
|
-
"aria-activedescendant"?: string | undefined;
|
36
|
+
prefix?: string | undefined | undefined;
|
37
|
+
property?: string | undefined | undefined;
|
38
|
+
rel?: string | undefined | undefined;
|
39
|
+
resource?: string | undefined | undefined;
|
40
|
+
rev?: string | undefined | undefined;
|
41
|
+
typeof?: string | undefined | undefined;
|
42
|
+
vocab?: string | undefined | undefined;
|
43
|
+
autoCorrect?: string | undefined | undefined;
|
44
|
+
autoSave?: string | undefined | undefined;
|
45
|
+
color?: string | undefined | undefined;
|
46
|
+
itemProp?: string | undefined | undefined;
|
47
|
+
itemScope?: boolean | undefined | undefined;
|
48
|
+
itemType?: string | undefined | undefined;
|
49
|
+
itemID?: string | undefined | undefined;
|
50
|
+
itemRef?: string | undefined | undefined;
|
51
|
+
results?: number | undefined | undefined;
|
52
|
+
security?: string | undefined | undefined;
|
53
|
+
unselectable?: "on" | "off" | undefined | undefined;
|
54
|
+
inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
|
55
|
+
is?: string | undefined | undefined;
|
56
|
+
"aria-activedescendant"?: string | undefined | undefined;
|
57
57
|
"aria-atomic"?: (boolean | "false" | "true") | undefined;
|
58
|
-
"aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
|
59
|
-
"aria-braillelabel"?: string | undefined;
|
60
|
-
"aria-brailleroledescription"?: string | undefined;
|
58
|
+
"aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined | undefined;
|
59
|
+
"aria-braillelabel"?: string | undefined | undefined;
|
60
|
+
"aria-brailleroledescription"?: string | undefined | undefined;
|
61
61
|
"aria-busy"?: (boolean | "false" | "true") | undefined;
|
62
|
-
"aria-checked"?: boolean | "false" | "mixed" | "true" | undefined;
|
63
|
-
"aria-colcount"?: number | undefined;
|
64
|
-
"aria-colindex"?: number | undefined;
|
65
|
-
"aria-colindextext"?: string | undefined;
|
66
|
-
"aria-colspan"?: number | undefined;
|
67
|
-
"aria-controls"?: string | undefined;
|
68
|
-
"aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined;
|
69
|
-
"aria-describedby"?: string | undefined;
|
70
|
-
"aria-description"?: string | undefined;
|
71
|
-
"aria-details"?: string | undefined;
|
62
|
+
"aria-checked"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
|
63
|
+
"aria-colcount"?: number | undefined | undefined;
|
64
|
+
"aria-colindex"?: number | undefined | undefined;
|
65
|
+
"aria-colindextext"?: string | undefined | undefined;
|
66
|
+
"aria-colspan"?: number | undefined | undefined;
|
67
|
+
"aria-controls"?: string | undefined | undefined;
|
68
|
+
"aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined | undefined;
|
69
|
+
"aria-describedby"?: string | undefined | undefined;
|
70
|
+
"aria-description"?: string | undefined | undefined;
|
71
|
+
"aria-details"?: string | undefined | undefined;
|
72
72
|
"aria-disabled"?: (boolean | "false" | "true") | undefined;
|
73
|
-
"aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined;
|
74
|
-
"aria-errormessage"?: string | undefined;
|
73
|
+
"aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | undefined;
|
74
|
+
"aria-errormessage"?: string | undefined | undefined;
|
75
75
|
"aria-expanded"?: (boolean | "false" | "true") | undefined;
|
76
|
-
"aria-flowto"?: string | undefined;
|
76
|
+
"aria-flowto"?: string | undefined | undefined;
|
77
77
|
"aria-grabbed"?: (boolean | "false" | "true") | undefined;
|
78
|
-
"aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined;
|
78
|
+
"aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | undefined;
|
79
79
|
"aria-hidden"?: (boolean | "false" | "true") | undefined;
|
80
|
-
"aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
|
81
|
-
"aria-keyshortcuts"?: string | undefined;
|
82
|
-
"aria-label"?: string | undefined;
|
83
|
-
"aria-labelledby"?: string | undefined;
|
84
|
-
"aria-level"?: number | undefined;
|
85
|
-
"aria-live"?: "off" | "assertive" | "polite" | undefined;
|
80
|
+
"aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
|
81
|
+
"aria-keyshortcuts"?: string | undefined | undefined;
|
82
|
+
"aria-label"?: string | undefined | undefined;
|
83
|
+
"aria-labelledby"?: string | undefined | undefined;
|
84
|
+
"aria-level"?: number | undefined | undefined;
|
85
|
+
"aria-live"?: "off" | "assertive" | "polite" | undefined | undefined;
|
86
86
|
"aria-modal"?: (boolean | "false" | "true") | undefined;
|
87
87
|
"aria-multiline"?: (boolean | "false" | "true") | undefined;
|
88
88
|
"aria-multiselectable"?: (boolean | "false" | "true") | undefined;
|
89
|
-
"aria-orientation"?: "horizontal" | "vertical" | undefined;
|
90
|
-
"aria-owns"?: string | undefined;
|
91
|
-
"aria-placeholder"?: string | undefined;
|
92
|
-
"aria-posinset"?: number | undefined;
|
93
|
-
"aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined;
|
89
|
+
"aria-orientation"?: "horizontal" | "vertical" | undefined | undefined;
|
90
|
+
"aria-owns"?: string | undefined | undefined;
|
91
|
+
"aria-placeholder"?: string | undefined | undefined;
|
92
|
+
"aria-posinset"?: number | undefined | undefined;
|
93
|
+
"aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
|
94
94
|
"aria-readonly"?: (boolean | "false" | "true") | undefined;
|
95
|
-
"aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined;
|
95
|
+
"aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | undefined;
|
96
96
|
"aria-required"?: (boolean | "false" | "true") | undefined;
|
97
|
-
"aria-roledescription"?: string | undefined;
|
98
|
-
"aria-rowcount"?: number | undefined;
|
99
|
-
"aria-rowindex"?: number | undefined;
|
100
|
-
"aria-rowindextext"?: string | undefined;
|
101
|
-
"aria-rowspan"?: number | undefined;
|
97
|
+
"aria-roledescription"?: string | undefined | undefined;
|
98
|
+
"aria-rowcount"?: number | undefined | undefined;
|
99
|
+
"aria-rowindex"?: number | undefined | undefined;
|
100
|
+
"aria-rowindextext"?: string | undefined | undefined;
|
101
|
+
"aria-rowspan"?: number | undefined | undefined;
|
102
102
|
"aria-selected"?: (boolean | "false" | "true") | undefined;
|
103
|
-
"aria-setsize"?: number | undefined;
|
104
|
-
"aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined;
|
105
|
-
"aria-valuemax"?: number | undefined;
|
106
|
-
"aria-valuemin"?: number | undefined;
|
107
|
-
"aria-valuenow"?: number | undefined;
|
108
|
-
"aria-valuetext"?: string | undefined;
|
109
|
-
children?: React.ReactNode
|
103
|
+
"aria-setsize"?: number | undefined | undefined;
|
104
|
+
"aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined | undefined;
|
105
|
+
"aria-valuemax"?: number | undefined | undefined;
|
106
|
+
"aria-valuemin"?: number | undefined | undefined;
|
107
|
+
"aria-valuenow"?: number | undefined | undefined;
|
108
|
+
"aria-valuetext"?: string | undefined | undefined;
|
109
|
+
children?: React.ReactNode;
|
110
110
|
dangerouslySetInnerHTML?: {
|
111
111
|
__html: string | TrustedHTML;
|
112
|
-
} | undefined;
|
112
|
+
} | undefined | undefined;
|
113
113
|
onCopy?: React.ClipboardEventHandler<HTMLElement> | undefined;
|
114
114
|
onCopyCapture?: React.ClipboardEventHandler<HTMLElement> | undefined;
|
115
115
|
onCut?: React.ClipboardEventHandler<HTMLElement> | undefined;
|
@@ -9,6 +9,7 @@ const GridItem = (props) => {
|
|
9
9
|
const resolvedColSpan = responsivePropDependency(colSpan, (value) => value && `span ${value}`);
|
10
10
|
const resolvedRowSpan = responsivePropDependency(rowSpan, (value) => value && `span ${value}`);
|
11
11
|
const rootVariables = {
|
12
|
+
...attributes?.style,
|
12
13
|
...responsiveVariables("--rs-grid-area", area),
|
13
14
|
...responsiveVariables("--rs-grid-col-end", resolvedColSpan),
|
14
15
|
// both span and end use the same css variable but end has a higher prioerity
|
@@ -30,8 +31,9 @@ const Grid = (props) => {
|
|
30
31
|
? `"${value?.join('" "')}"
|
31
32
|
`
|
32
33
|
: undefined);
|
33
|
-
const rootClassNames = classNames(s.root,
|
34
|
+
const rootClassNames = classNames(s.root, className);
|
34
35
|
const rootVariables = {
|
36
|
+
...attributes?.style,
|
35
37
|
...responsiveVariables("--rs-grid-gap", gap),
|
36
38
|
...responsiveVariables("--rs-grid-rows", resolvedRows),
|
37
39
|
...responsiveVariables("--rs-grid-columns", resolvedColumns),
|
@@ -39,6 +41,8 @@ const Grid = (props) => {
|
|
39
41
|
...responsiveVariables("--rs-grid-auto-flow", autoFlow),
|
40
42
|
...responsiveVariables("--rs-grid-auto-columns", autoColumns),
|
41
43
|
...responsiveVariables("--rs-grid-auto-rows", autoRows),
|
44
|
+
...alignStyles?.variables,
|
45
|
+
...justifyStyles?.variables,
|
42
46
|
};
|
43
47
|
return (_jsx(TagName, { ...attributes, className: rootClassNames, style: rootVariables, children: children }));
|
44
48
|
};
|
@@ -1 +1 @@
|
|
1
|
-
.root{background:var(--rs-color-background-neutral-faded);border
|
1
|
+
.root{background:var(--rs-color-background-neutral-faded);border-radius:var(--rs-radius-small);color:var(--rs-color-foreground-neutral);display:inline-flex;justify-content:center;min-width:calc(var(--rs-line-height-caption-1) + var(--rs-unit-x1) * 2);padding:var(--rs-unit-x1) var(--rs-unit-x2);transition:var(--rs-easing-standard) var(--rs-duration-fast);transition-property:color,background-color,border-color;vertical-align:top}.--active{background:var(--rs-color-background-neutral);color:var(--rs-color-on-background-neutral)}
|
@@ -41,7 +41,7 @@ const ModalSubtitle = (props) => {
|
|
41
41
|
return (_jsx(Text, { variant: "body-3", color: "neutral-faded", attributes: { id: `${id}-subtitle` }, children: children }));
|
42
42
|
};
|
43
43
|
const Modal = (props) => {
|
44
|
-
const { children, onClose, onOpen, active, size, padding = 4, position = "center", overflow, transparentOverlay, blurredOverlay, ariaLabel, autoFocus = true, disableSwipeGesture, disableCloseOnOutsideClick, containerRef, overlayClassName, className, attributes, } = props;
|
44
|
+
const { children, onClose, onOpen, onAfterClose, onAfterOpen, active, size, padding = 4, position = "center", overflow, transparentOverlay, blurredOverlay, ariaLabel, autoFocus = true, disableSwipeGesture, disableCloseOnOutsideClick, containerRef, overlayClassName, className, attributes, } = props;
|
45
45
|
const onCloseRef = useHandlerRef(onClose);
|
46
46
|
const id = useElementId();
|
47
47
|
const clientPosition = useResponsiveClientValue(position);
|
@@ -168,10 +168,10 @@ const Modal = (props) => {
|
|
168
168
|
setHideProgress(progress / 2);
|
169
169
|
dragDistanceRef.current = dragDistance;
|
170
170
|
}, [dragDistance, clientPosition, rootRef]);
|
171
|
-
return (_jsx(Overlay, { onClose: onClose, onOpen: onOpen, disableCloseOnClick: disableCloseOnOutsideClick, active: active, transparent: transparentOverlay || hideProgress, blurred: blurredOverlay, className: overlayClassName, containerRef: containerRef, attributes: {
|
171
|
+
return (_jsx(Overlay, { onClose: onClose, onOpen: onOpen, onAfterClose: onAfterClose, onAfterOpen: onAfterOpen, disableCloseOnClick: disableCloseOnOutsideClick, active: active, transparent: transparentOverlay || hideProgress, blurred: blurredOverlay, className: overlayClassName, containerRef: containerRef, attributes: {
|
172
172
|
onTouchStart: handleDragStart,
|
173
173
|
}, children: ({ active }) => {
|
174
|
-
const rootClassNames = classNames(s.root, className,
|
174
|
+
const rootClassNames = classNames(s.root, className, active && s["--active"], dragging && s["--dragging"], overflow && s[`--overflow-${overflow}`], containerRef && s["--contained"], responsiveClassNames(s, "--position", position));
|
175
175
|
return (_jsx(Context.Provider, { value: value, children: _jsx("div", { ...attributes, style: {
|
176
176
|
...paddingStyles?.variables,
|
177
177
|
...responsiveVariables("--rs-modal-size", size),
|
@@ -1 +1 @@
|
|
1
|
-
.root{--rs-modal-container-width:100vw;--rs-modal-position:fixed;background:var(--rs-color-background-elevation-overlay);box-shadow:var(--rs-shadow-overlay);color:var(--rs-color-foreground-neutral);transition:var(--rs-easing-accelerate) var(--rs-duration-medium);transition-property:transform,opacity;will-change:transform}[data-rs-keyboard] .root:focus{box-shadow:var(--rs-focus-shadow);outline:none}.root.--contained{--rs-modal-position:absolute;--rs-modal-container-width:100%}.root{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);--rs-modal-size-m:var(--rs-modal-size-s);--rs-modal-size-l:var(--rs-modal-size-m);--rs-modal-size-xl:var(--rs-modal-size-l);--rs-modal-size:var(--rs-modal-size-s)}.--position-center{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center.--active,[dir=rtl] .--position-center.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translateY(100%);width:100%}.--position-bottom.--active,[dir=rtl] .--position-bottom.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start{transform:translate(100%)}.--position-start.--active,[dir=rtl] .--position-start.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end{transform:translate(-100%)}.--position-end.--active,[dir=rtl] .--position-end.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:var(--rs-modal-position);transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen.--active,[dir=rtl] .--position-full-screen.--active{opacity:1;transform:translate(0)!important}.--active,[dir=rtl] .--active{transition-timing-function:var(--rs-easing-decelerate)}.--dragging{transition:none}.--overflow-visible{overflow:visible}@media (--rs-viewport-m ){.root{--rs-modal-size:var(--rs-modal-size-m)}.--position-center--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--m.--active,[dir=rtl] .--position-center--m.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--m{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translateY(100%);width:100%}.--position-bottom--m.--active,[dir=rtl] .--position-bottom--m.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--m{transform:translate(100%)}.--position-start--m.--active,[dir=rtl] .--position-start--m.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--m{transform:translate(-100%)}.--position-end--m.--active,[dir=rtl] .--position-end--m.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--m{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:var(--rs-modal-position);transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--m.--active,[dir=rtl] .--position-full-screen--m.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-l ){.root{--rs-modal-size:var(--rs-modal-size-l)}.--position-center--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--l.--active,[dir=rtl] .--position-center--l.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--l{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translateY(100%);width:100%}.--position-bottom--l.--active,[dir=rtl] .--position-bottom--l.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--l{transform:translate(100%)}.--position-start--l.--active,[dir=rtl] .--position-start--l.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--l{transform:translate(-100%)}.--position-end--l.--active,[dir=rtl] .--position-end--l.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--l{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:var(--rs-modal-position);transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--l.--active,[dir=rtl] .--position-full-screen--l.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-xl ){.root{--rs-modal-size:var(--rs-modal-size-xl)}.--position-center--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--xl.--active,[dir=rtl] .--position-center--xl.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--xl{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translateY(100%);width:100%}.--position-bottom--xl.--active,[dir=rtl] .--position-bottom--xl.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--xl{transform:translate(100%)}.--position-start--xl.--active,[dir=rtl] .--position-start--xl.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--xl{transform:translate(-100%)}.--position-end--xl.--active,[dir=rtl] .--position-end--xl.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--xl{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:var(--rs-modal-position);transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--xl.--active,[dir=rtl] .--position-full-screen--xl.--active{opacity:1;transform:translate(0)!important}}
|
1
|
+
.root{--rs-modal-container-width:100vw;--rs-modal-position:fixed;background:var(--rs-color-background-elevation-overlay);box-shadow:var(--rs-shadow-overlay);color:var(--rs-color-foreground-neutral);transition:var(--rs-easing-accelerate) var(--rs-duration-fast);transition-property:transform,opacity;will-change:transform}[data-rs-keyboard] .root:focus{box-shadow:var(--rs-focus-shadow);outline:none}.root.--contained{--rs-modal-position:absolute;--rs-modal-container-width:100%}.root{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);--rs-modal-size-m:var(--rs-modal-size-s);--rs-modal-size-l:var(--rs-modal-size-m);--rs-modal-size-xl:var(--rs-modal-size-l);--rs-modal-size:var(--rs-modal-size-s)}.--position-center{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center.--active,[dir=rtl] .--position-center.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translateY(100%);width:100%}.--position-bottom.--active,[dir=rtl] .--position-bottom.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start{transform:translate(100%)}.--position-start.--active,[dir=rtl] .--position-start.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end{transform:translate(-100%)}.--position-end.--active,[dir=rtl] .--position-end.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:var(--rs-modal-position);transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen.--active,[dir=rtl] .--position-full-screen.--active{opacity:1;transform:translate(0)!important}.--active,[dir=rtl] .--active{transition-timing-function:var(--rs-easing-decelerate)}.--dragging{transition:none}.--overflow-visible{overflow:visible}@media (--rs-viewport-m ){.root{--rs-modal-size:var(--rs-modal-size-m)}.--position-center--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--m.--active,[dir=rtl] .--position-center--m.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--m{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translateY(100%);width:100%}.--position-bottom--m.--active,[dir=rtl] .--position-bottom--m.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--m{transform:translate(100%)}.--position-start--m.--active,[dir=rtl] .--position-start--m.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--m{transform:translate(-100%)}.--position-end--m.--active,[dir=rtl] .--position-end--m.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--m{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:var(--rs-modal-position);transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--m.--active,[dir=rtl] .--position-full-screen--m.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-l ){.root{--rs-modal-size:var(--rs-modal-size-l)}.--position-center--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--l.--active,[dir=rtl] .--position-center--l.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--l{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translateY(100%);width:100%}.--position-bottom--l.--active,[dir=rtl] .--position-bottom--l.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--l{transform:translate(100%)}.--position-start--l.--active,[dir=rtl] .--position-start--l.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--l{transform:translate(-100%)}.--position-end--l.--active,[dir=rtl] .--position-end--l.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--l{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:var(--rs-modal-position);transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--l.--active,[dir=rtl] .--position-full-screen--l.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-xl ){.root{--rs-modal-size:var(--rs-modal-size-xl)}.--position-center--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--xl.--active,[dir=rtl] .--position-center--xl.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--xl{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translateY(100%);width:100%}.--position-bottom--xl.--active,[dir=rtl] .--position-bottom--xl.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--xl{transform:translate(100%)}.--position-start--xl.--active,[dir=rtl] .--position-start--xl.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(var(--rs-modal-container-width) - var(--rs-unit-x4));opacity:1;overflow:auto;position:var(--rs-modal-position);transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--xl{transform:translate(-100%)}.--position-end--xl.--active,[dir=rtl] .--position-end--xl.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--xl{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:var(--rs-modal-container-width);opacity:0;overflow:auto;position:var(--rs-modal-position);transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--xl.--active,[dir=rtl] .--position-full-screen--xl.--active{opacity:1;transform:translate(0)!important}}
|
@@ -34,4 +34,4 @@ export type Props = {
|
|
34
34
|
attributes?: G.Attributes<"div"> & {
|
35
35
|
ref?: React.RefObject<HTMLDivElement>;
|
36
36
|
};
|
37
|
-
} & Pick<OverlayProps, "onOpen" | "active" | "containerRef">;
|
37
|
+
} & Pick<OverlayProps, "onOpen" | "onAfterOpen" | "onAfterClose" | "active" | "containerRef">;
|
@@ -13,7 +13,7 @@ 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, containerRef, className, attributes, } = props;
|
16
|
+
const { active, children, transparent, blurred, onClose, onOpen, onAfterClose, onAfterOpen, disableCloseOnClick, containerRef, className, attributes, } = props;
|
17
17
|
// Selectors wrapped with refs to simplify working with useEffect dependency array
|
18
18
|
const onCloseRef = useHandlerRef(onClose);
|
19
19
|
const onOpenRef = useHandlerRef(onOpen);
|
@@ -66,10 +66,13 @@ const Overlay = (props) => {
|
|
66
66
|
if (e.propertyName !== "opacity" || e.target !== e.currentTarget)
|
67
67
|
return;
|
68
68
|
setAnimated(false);
|
69
|
-
if (visible)
|
69
|
+
if (visible) {
|
70
|
+
onAfterOpen?.();
|
70
71
|
return;
|
72
|
+
}
|
71
73
|
unlockScroll();
|
72
74
|
remove();
|
75
|
+
onAfterClose?.();
|
73
76
|
};
|
74
77
|
useHotkeys({
|
75
78
|
Escape: () => close({ reason: "escape-key" }),
|
@@ -11,7 +11,9 @@ export type Props = {
|
|
11
11
|
onClose?: (args: {
|
12
12
|
reason: CloseReason;
|
13
13
|
}) => void;
|
14
|
+
onAfterClose?: () => void;
|
14
15
|
onOpen?: () => void;
|
16
|
+
onAfterOpen?: () => void;
|
15
17
|
disableCloseOnClick?: boolean;
|
16
18
|
containerRef?: React.RefObject<HTMLElement>;
|
17
19
|
className?: G.ClassName;
|
@@ -9,7 +9,7 @@ const Popover = (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
|
-
const contentClassName = classNames(s.content, !!width && s["content--has-width"], variant && s[`content--variant-${variant}`]
|
12
|
+
const contentClassName = classNames(s.content, !!width && s["content--has-width"], variant && s[`content--variant-${variant}`]);
|
13
13
|
return (_jsx(Flyout, { ...flyoutProps, position: position, trapFocusMode: trapFocusMode, triggerType: triggerType, width: width, contentClassName: contentClassName, contentAttributes: { style: { ...paddingStyles?.variables } } }));
|
14
14
|
};
|
15
15
|
const PopoverDismissible = (props) => {
|
@@ -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" | "fallbackPositions" | "onOpen" | "onClose" | "width" | "trapFocusMode" | "active" | "defaultActive" | "contentGap" | "contentShift" | "instanceRef" | "triggerType" | "disableHideAnimation" | "disableContentHover" | "disableCloseOnOutsideClick" | "containerRef" | "initialFocusRef"> & {
|
4
|
+
export type Props = Pick<FlyoutProps, "id" | "position" | "forcePosition" | "fallbackPositions" | "onOpen" | "onClose" | "width" | "trapFocusMode" | "active" | "defaultActive" | "contentGap" | "contentShift" | "instanceRef" | "triggerType" | "disableHideAnimation" | "disableContentHover" | "disableCloseOnOutsideClick" | "containerRef" | "initialFocusRef" | "originCoordinates"> & {
|
5
5
|
children?: React.ReactNode;
|
6
6
|
padding?: number;
|
7
7
|
variant?: "elevated" | "headless";
|
@@ -42,8 +42,8 @@ const PrivateResizableItem = React.forwardRef((props, ref) => {
|
|
42
42
|
}, children: children }));
|
43
43
|
});
|
44
44
|
const Resizable = (props) => {
|
45
|
-
const { children, height, direction = "row", gap = 2, className, attributes } = props;
|
46
|
-
const rootClassNames = classNames(s.root, s[`--direction-${direction}`], className);
|
45
|
+
const { children, variant = "borderless", height, direction = "row", gap = 2, className, attributes, } = props;
|
46
|
+
const rootClassNames = classNames(s.root, s[`--direction-${direction}`], variant && s[`--variant-${variant}`], className);
|
47
47
|
const containerRef = React.useRef(null);
|
48
48
|
const itemsRef = React.useRef([]);
|
49
49
|
const horizontal = direction === "row";
|
@@ -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{
|
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{transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,background-color}.--variant-bordered .handle:after{background:var(--rs-color-border-neutral-faded)}.--variant-bordered .handle--dragging:after,.--variant-bordered .handle:hover:after,.--variant-borderless .handle:after,[data-rs-keyboard] .--variant-bordered .handle:focus:after{background:var(--rs-color-border-neutral)}.--variant-borderless .handle:after{opacity:0}.--variant-borderless .handle--dragging:after,.--variant-borderless .handle:hover:after,[data-rs-keyboard] .--variant-borderless .handle:focus:after{opacity:.6}body:has(.handle--dragging) .--variant-borderless .handle:not(.handle--dragging){opacity:0}body:has(.handle--dragging) .--variant-bordered .handle:not(.handle--dragging):after{background:var(--rs-color-border-neutral-faded)}body:has(.--direction-row>.handle--dragging){cursor:ew-resize}body:has(.--direction-column>.handle--dragging){cursor:ns-resize}.--direction-row>.handle{cursor:ew-resize}.--direction-row>.handle:after,.--direction-row>.handle:before{inset-block:0;inset-inline-start:50%;transform:translateX(-50%)}.--direction-row>.handle:before{width:var(--rs-unit-x8)}.--variant-borderless.--direction-row>.handle:after{width:var(--rs-unit-x1)}.--variant-bordered.--direction-row>.handle:after{width:1px}.--direction-row>.item[data-rs-resizable-item-mounted]{max-width:var(--rs-resizable-max-size);min-width:var(--rs-resizable-min-size)}.--direction-column>.handle{cursor:ns-resize}.--direction-column>.handle:after,.--direction-column>.handle:before{inset-block-start:50%;inset-inline:0;transform:translateY(-50%)}.--direction-column>.handle:before{height:var(--rs-unit-x8)}.--variant-borderless.--direction-column>.handle:after{height:var(--rs-unit-x1)}.--variant-bordered.--direction-column>.handle:after{height:1px}.--direction-column>.item[data-rs-resizable-item-mounted]{max-height:var(--rs-resizable-max-size);min-height:var(--rs-resizable-min-size)}
|
@@ -1,7 +1,9 @@
|
|
1
1
|
import type React from "react";
|
2
2
|
import type { ViewProps } from "../View";
|
3
3
|
import type { UseDragCallbackArgs } from "../../hooks/useDrag";
|
4
|
-
export type Props =
|
4
|
+
export type Props = {
|
5
|
+
variant?: "bordered" | "borderless";
|
6
|
+
} & Pick<ViewProps, "children" | "className" | "attributes" | "height" | "direction" | "gap">;
|
5
7
|
export type ItemProps = {
|
6
8
|
children: React.ReactNode;
|
7
9
|
minSize?: `${number}px`;
|
@@ -54,6 +54,39 @@ export const base = () => (<Example>
|
|
54
54
|
</Resizable>
|
55
55
|
</Resizable.Item>
|
56
56
|
</Resizable>
|
57
|
-
<div style={{ height: 2000 }}/>
|
58
57
|
</Example.Item>
|
58
|
+
|
59
|
+
<Example.Item>
|
60
|
+
<Resizable height="300px" gap={0} variant="bordered">
|
61
|
+
<Resizable.Item minSize="100px" defaultSize="200px">
|
62
|
+
<View align="center" justify="center" height="100%">
|
63
|
+
Panel
|
64
|
+
</View>
|
65
|
+
</Resizable.Item>
|
66
|
+
<Resizable.Handle />
|
67
|
+
<Resizable.Item>
|
68
|
+
<View align="center" justify="center" height="100%">
|
69
|
+
Panel
|
70
|
+
</View>
|
71
|
+
</Resizable.Item>
|
72
|
+
<Resizable.Handle />
|
73
|
+
<Resizable.Item>
|
74
|
+
<Resizable height="100%" direction="column" variant="bordered" gap={0}>
|
75
|
+
<Resizable.Item minSize="50px" maxSize="100px">
|
76
|
+
<View align="center" justify="center" height="100%">
|
77
|
+
Panel
|
78
|
+
</View>
|
79
|
+
</Resizable.Item>
|
80
|
+
<Resizable.Handle />
|
81
|
+
<Resizable.Item>
|
82
|
+
<View align="center" justify="center" height="100%">
|
83
|
+
Panel
|
84
|
+
</View>
|
85
|
+
</Resizable.Item>
|
86
|
+
</Resizable>
|
87
|
+
</Resizable.Item>
|
88
|
+
</Resizable>
|
89
|
+
</Example.Item>
|
90
|
+
|
91
|
+
<div style={{ height: 2000 }}/>
|
59
92
|
</Example>);
|
@@ -88,15 +88,15 @@ const ScrollArea = forwardRef((props, ref) => {
|
|
88
88
|
});
|
89
89
|
}, []);
|
90
90
|
const handleScroll = (e) => {
|
91
|
-
const
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
91
|
+
const { scrollLeft, scrollTop, clientWidth, clientHeight, scrollWidth, scrollHeight } = e.currentTarget;
|
92
|
+
setScrollPosition({
|
93
|
+
x: scrollLeft / scrollWidth,
|
94
|
+
y: scrollTop / scrollHeight,
|
95
|
+
});
|
96
|
+
onScroll?.({
|
97
|
+
x: scrollWidth === clientWidth ? 0 : scrollLeft / (scrollWidth - clientWidth),
|
98
|
+
y: scrollHeight === clientHeight ? 0 : scrollTop / (scrollHeight - clientHeight),
|
99
|
+
});
|
100
100
|
};
|
101
101
|
const handleThumbYMove = (args) => {
|
102
102
|
const scrollableEl = scrollableRef.current;
|
@@ -1 +1 @@
|
|
1
|
-
.root{--rs-scroll-area-thumb-size:calc(var(--rs-unit-x1) * 1.5);--rs-scroll-area-thumb-offset:calc(var(--rs-unit-x1) / 2);
|
1
|
+
.root{--rs-scroll-area-thumb-size:calc(var(--rs-unit-x1) * 1.5);--rs-scroll-area-thumb-offset:calc(var(--rs-unit-x1) / 2);height:100%}.root,.scrollable{overflow:auto;position:relative}.scrollable{display:inline-block;max-height:100%;scrollbar-width:none;vertical-align:top;width:100%;-webkit-overflow-scrolling:touch}.scrollable::-webkit-scrollbar{display:none;height:0;width:0}.scrollbar{box-sizing:initial;padding:var(--rs-scroll-area-thumb-offset);position:absolute}.thumb{height:100%;position:relative;width:100%}.thumb:before{background:var(--rs-color-foreground-neutral);border-radius:999px;content:"";display:block;opacity:0;position:absolute;transition:opacity var(--rs-duration-fast) var(--rs-easing-standard)}.--scrollbar-y{inset-block:0;inset-inline-end:0;width:var(--rs-scroll-area-thumb-size)}.--scrollbar-y .thumb:before{height:calc(var(--rs-scroll-area-ratio) * 100%);inset-block-start:calc(var(--rs-scroll-area-position) * 100%);width:100%}.--scrollbar-x{height:var(--rs-scroll-area-thumb-size);inset-block-end:0;inset-inline:0}.--scrollbar-x .thumb:before{height:100%;inset-inline-start:calc(var(--rs-scroll-area-position) * 100%);width:calc(var(--rs-scroll-area-ratio) * 100%)}.--scrollbar-y:not(:last-child){inset-block-end:calc(var(--rs-scroll-area-thumb-size) + var(--rs-scroll-area-thumb-offset) * 2)}.--scrollbar-y~.--scrollbar-x{inset-inline-end:calc(var(--rs-scroll-area-thumb-size) + var(--rs-scroll-area-thumb-offset) * 2)}.--display-hover:hover .thumb:before,.--display-visible .thumb:before{opacity:.2}.--display-hover:hover .--scrollbar-dragging .thumb:before,.--scrollbar-dragging .thumb:before,.scrollbar:hover .thumb:before{opacity:.32}
|
@@ -3,10 +3,7 @@ import type * as G from "../../types/global";
|
|
3
3
|
export type Props = {
|
4
4
|
children: React.ReactNode;
|
5
5
|
scrollbarDisplay?: "visible" | "hover" | "hidden";
|
6
|
-
onScroll?: (args:
|
7
|
-
x: number;
|
8
|
-
y: number;
|
9
|
-
}) => void;
|
6
|
+
onScroll?: (args: G.Coordinates) => void;
|
10
7
|
height?: G.Responsive<string | number>;
|
11
8
|
maxHeight?: G.Responsive<string | number>;
|
12
9
|
className?: G.ClassName;
|