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
@@ -1,6 +1,7 @@
|
|
1
|
+
import React from "react";
|
1
2
|
declare const _default: {
|
2
3
|
title: string;
|
3
|
-
component:
|
4
|
+
component: React.ForwardRefExoticComponent<import("./..").ScrollAreaProps & React.RefAttributes<HTMLDivElement>>;
|
4
5
|
parameters: {
|
5
6
|
iframe: {
|
6
7
|
url: string;
|
@@ -8,6 +9,7 @@ declare const _default: {
|
|
8
9
|
};
|
9
10
|
};
|
10
11
|
export default _default;
|
11
|
-
export declare const direction: () =>
|
12
|
-
export declare const visibility: () =>
|
13
|
-
export declare const ref: () =>
|
12
|
+
export declare const direction: () => React.JSX.Element;
|
13
|
+
export declare const visibility: () => React.JSX.Element;
|
14
|
+
export declare const ref: () => React.JSX.Element;
|
15
|
+
export declare const edgeCases: () => React.JSX.Element;
|
@@ -1,8 +1,10 @@
|
|
1
|
+
import React from "react";
|
1
2
|
import { useRef } from "react";
|
2
3
|
import { Example } from "../../../utilities/storybook/index.js";
|
3
4
|
import ScrollArea from "../index.js";
|
4
5
|
import View from "../../View/index.js";
|
5
6
|
import Button from "../../Button/index.js";
|
7
|
+
import useToggle from "../../../hooks/useToggle.js";
|
6
8
|
export default {
|
7
9
|
title: "Utilities/ScrollArea",
|
8
10
|
component: ScrollArea,
|
@@ -33,7 +35,7 @@ const Demo = () => {
|
|
33
35
|
};
|
34
36
|
export const direction = () => (<Example>
|
35
37
|
<Example.Item title="vertical">
|
36
|
-
<ScrollArea height="100px" scrollbarDisplay="visible">
|
38
|
+
<ScrollArea height="100px" scrollbarDisplay="visible" onScroll={console.log}>
|
37
39
|
<View backgroundColor="neutral-faded" padding={4}>
|
38
40
|
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has
|
39
41
|
been the industry's standard dummy text ever since the 1500s, when an unknown printer took
|
@@ -46,7 +48,7 @@ export const direction = () => (<Example>
|
|
46
48
|
</ScrollArea>
|
47
49
|
</Example.Item>
|
48
50
|
<Example.Item title="horizontal">
|
49
|
-
<ScrollArea height="120px" scrollbarDisplay="visible">
|
51
|
+
<ScrollArea height="120px" scrollbarDisplay="visible" onScroll={console.log}>
|
50
52
|
<View backgroundColor="neutral-faded" padding={4} width="500px">
|
51
53
|
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has
|
52
54
|
been the industry's standard dummy text ever since the 1500s
|
@@ -113,3 +115,27 @@ export const ref = () => (<Example>
|
|
113
115
|
<Demo />
|
114
116
|
</Example.Item>
|
115
117
|
</Example>);
|
118
|
+
export const edgeCases = () => {
|
119
|
+
const toggle = useToggle(true);
|
120
|
+
return (<Example>
|
121
|
+
<Example.Item title="dynamic content update">
|
122
|
+
<View gap={4}>
|
123
|
+
<Button onClick={toggle.toggle}>Toggle</Button>
|
124
|
+
<ScrollArea height="100px" scrollbarDisplay="visible" ref={ref}>
|
125
|
+
<View backgroundColor="neutral-faded" padding={4} width={toggle.active ? "120%" : "90%"}>
|
126
|
+
{toggle.active ? (<React.Fragment>
|
127
|
+
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem
|
128
|
+
Ipsum has been the industry's standard dummy text ever since the 1500s, when an
|
129
|
+
unknown printer took a galley of type and scrambled it to make a type specimen
|
130
|
+
book. It has survived not only five centuries, but also the leap into electronic
|
131
|
+
typesetting, remaining essentially unchanged. It was popularised in the 1960s with
|
132
|
+
the release of Letraset sheets containing Lorem Ipsum passages, and more recently
|
133
|
+
with desktop publishing software like Aldus PageMaker including versions of Lorem
|
134
|
+
Ipsum.
|
135
|
+
</React.Fragment>) : null}
|
136
|
+
</View>
|
137
|
+
</ScrollArea>
|
138
|
+
</View>
|
139
|
+
</Example.Item>
|
140
|
+
</Example>);
|
141
|
+
};
|
@@ -25,9 +25,10 @@ const TableHeading = (props) => {
|
|
25
25
|
return _jsx(TableCellPrivate, { ...props, tagName: "th" });
|
26
26
|
};
|
27
27
|
const TableRow = (props) => {
|
28
|
-
const { highlighted, children, attributes } = props;
|
29
|
-
const
|
30
|
-
|
28
|
+
const { highlighted, children, className, attributes } = props;
|
29
|
+
const onClick = props.onClick || attributes?.onClick;
|
30
|
+
const rowClassNames = classNames(s.row, highlighted && s["--row-highlighted"], className);
|
31
|
+
return (_jsx("tr", { ...attributes, className: rowClassNames, onClick: onClick, tabIndex: onClick ? 0 : undefined, children: children }));
|
31
32
|
};
|
32
33
|
const TableBody = (props) => {
|
33
34
|
const { children, attributes, className } = props;
|
@@ -1 +1 @@
|
|
1
|
-
.root{margin:0 calc(var(--rs-unit-x4) * -1);mask-image:linear-gradient(to right,transparent 0,#000 var(--rs-unit-x4),#000 calc(100% - var(--rs-unit-x4)),transparent 100%);overflow:auto;padding:0 var(--rs-unit-x4)}.table{border-collapse:separate;min-width:100%;overflow:hidden}.row{transition:background-color var(--rs-duration-fast) var(--rs-easing-standard)}.cell{--rs-table-p-vertical-s:3;--rs-table-p-horizontal-s:4;padding:calc(var(--rs-unit-x1) * var(--rs-table-p-vertical-s)) calc(var(--rs-unit-x1) * var(--rs-table-p-horizontal-s));text-align:start;vertical-align:top}.cell:not(:last-child){padding-inline-end:0}.head+.body .row:first-child .cell,.row:not(:first-child) .cell{border-top:1px solid var(--rs-color-border-neutral-faded)}.cell--align-start{text-align:start}.cell--align-center{text-align:center}.cell--align-end{text-align:end}.cell--valign-start{vertical-align:top}.cell--valign-center{vertical-align:middle}.cell--valign-end{vertical-align:bottom}.cell--width-auto{white-space:nowrap}.--row-highlighted{background-color:rgba(var(--rs-color-rgb-background-neutral),
|
1
|
+
.root{margin:0 calc(var(--rs-unit-x4) * -1);mask-image:linear-gradient(to right,transparent 0,#000 var(--rs-unit-x4),#000 calc(100% - var(--rs-unit-x4)),transparent 100%);overflow:auto;padding:0 var(--rs-unit-x4)}.table{border-collapse:separate;min-width:100%;overflow:hidden}.row{transition:background-color var(--rs-duration-fast) var(--rs-easing-standard)}.row[tabindex]{cursor:pointer}[data-rs-keyboard] .row:focus{box-shadow:var(--rs-focus-inset-shadow);outline:none;z-index:var(--rs-z-index-raised)}.cell{--rs-table-p-vertical-s:3;--rs-table-p-horizontal-s:4;padding:calc(var(--rs-unit-x1) * var(--rs-table-p-vertical-s)) calc(var(--rs-unit-x1) * var(--rs-table-p-horizontal-s));text-align:start;vertical-align:top}.cell:not(:last-child){padding-inline-end:0}.head+.body .row:first-child .cell,.row:not(:first-child) .cell{border-top:1px solid var(--rs-color-border-neutral-faded)}.cell--align-start{text-align:start}.cell--align-center{text-align:center}.cell--align-end{text-align:end}.cell--valign-start{vertical-align:top}.cell--valign-center{vertical-align:middle}.cell--valign-end{vertical-align:bottom}.cell--width-auto{white-space:nowrap}.--row-highlighted{background-color:rgba(var(--rs-color-rgb-background-neutral),24%)}.--border-outer .table{border:1px solid var(--rs-color-border-neutral-faded);border-radius:var(--rs-radius-medium)}.--border-column .cell:not(:first-child){border-inline-start:1px solid var(--rs-color-border-neutral-faded)}.--border-column .cell:not(:last-child){padding-inline-end:calc(var(--rs-unit-x1) * var(--rs-table-p-horizontal-s))}
|
@@ -18,6 +18,6 @@ declare const _default: {
|
|
18
18
|
export default _default;
|
19
19
|
export declare const layout: () => React.JSX.Element;
|
20
20
|
export declare const border: () => React.JSX.Element;
|
21
|
-
export declare const
|
21
|
+
export declare const rows: () => React.JSX.Element;
|
22
22
|
export declare const edgeCases: () => React.JSX.Element;
|
23
23
|
export declare const examples: () => React.JSX.Element;
|
@@ -128,7 +128,7 @@ export const border = () => (<Example>
|
|
128
128
|
</Table>
|
129
129
|
</Example.Item>
|
130
130
|
</Example>);
|
131
|
-
export const
|
131
|
+
export const rows = () => (<Example>
|
132
132
|
<Example.Item title="highlighted for row 2">
|
133
133
|
<Table>
|
134
134
|
<Table.Row>
|
@@ -141,6 +141,18 @@ export const highlighted = () => (<Example>
|
|
141
141
|
</Table.Row>
|
142
142
|
</Table>
|
143
143
|
</Example.Item>
|
144
|
+
<Example.Item title="clickable row 2, focus ring">
|
145
|
+
<Table>
|
146
|
+
<Table.Row>
|
147
|
+
<Table.Heading>Column 1</Table.Heading>
|
148
|
+
<Table.Heading>Column 2</Table.Heading>
|
149
|
+
</Table.Row>
|
150
|
+
<Table.Row onClick={() => { }}>
|
151
|
+
<Table.Cell>Cell 1</Table.Cell>
|
152
|
+
<Table.Cell>Cell 2</Table.Cell>
|
153
|
+
</Table.Row>
|
154
|
+
</Table>
|
155
|
+
</Example.Item>
|
144
156
|
</Example>);
|
145
157
|
export const edgeCases = () => (<Example>
|
146
158
|
<Example.Item title="scroll fade">
|
@@ -1 +1 @@
|
|
1
|
-
@property --rs-tabs-stop-l{syntax:"<
|
1
|
+
@property --rs-tabs-mid-l{syntax:"<length>";initial-value:-24px;inherits:false}@property --rs-tabs-stop-l{syntax:"<length>";initial-value:0;inherits:false}@property --rs-tabs-stop-r{syntax:"<length-percentage>";initial-value:100%;inherits:false}@property --rs-tabs-mid-r{syntax:"<length-percentage>";initial-value:calc(100% + 24px);inherits:false}.root{box-sizing:initial;max-width:100%}.list,.root{position:relative}.list{--rs-tabs-gap:var(--rs-unit-x6);gap:var(--rs-tabs-gap)}.inner{mask-image:linear-gradient(to right,transparent 0,transparent var(--rs-tabs-mid-l),#000 var(--rs-tabs-stop-l),#000 var(--rs-tabs-stop-r),transparent var(--rs-tabs-mid-r),transparent 100%);transition:var(--rs-duration-medium) var(--rs-easing-decelerate);transition-property:--rs-tabs-stop-l,--rs-tabs-stop-r,--rs-tabs-mid-l,--rs-tabs-mid-r}.inner:after{background-color:var(--rs-color-border-neutral-faded);content:"";position:absolute;z-index:2}.listItem{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}.control{align-items:center;display:none;inset-block:0;opacity:0;pointer-events:none;position:absolute;transition:var(--rs-duration-medium) var(--rs-easing-decelerate);transition-property:opacity,transform;z-index:var(--rs-z-index-raised)}.control.control--active{opacity:1;pointer-events:all;transform:translateX(0)}[dir=rtl] .control{transform:scaleX(-1)}.control--next{inset-inline-end:0;transform:translateX(var(--rs-unit-x2))}.control--prev{inset-inline-start:0;transform:translateX(calc(var(--rs-unit-x2) * -1))}.panel{outline:none}[data-rs-keyboard] .panel:focus{box-shadow:var(--rs-focus-shadow)}.--panel-hidden{display:none}.--direction-row .inner{margin:0 calc(var(--rs-unit-x2) * -1);overflow:auto;padding:0 var(--rs-unit-x2);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 .--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{--rs-tabs-gap:var(--rs-unit-x1);display:flex;flex-direction:column}.--direction-column .item{padding-inline-end:var(--rs-unit-x1)}.--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-elevated .buttonContent{padding:calc(var(--rs-tabs-item-p-v) - var(--rs-unit-x1) / 2) var(--rs-tabs-item-p-h)}.--variant-pills .list,.--variant-pills-elevated .list{--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-mid-r:100%;--rs-tabs-stop-r:calc(100% - var(--rs-unit-x1) * 12)}.--fade-start .inner,[dir=rtl] .--fade-end .inner{--rs-tabs-mid-l:0px;--rs-tabs-stop-l:calc(var(--rs-unit-x1) * 12)}@media (pointer:fine){.control{display:flex}.--fade-end .inner,[dir=rtl] .--fade-start .inner{--rs-tabs-mid-r:calc(100% - var(--rs-unit-x1) * 6);--rs-tabs-stop-r:calc(100% - var(--rs-unit-x1) * 12)}.--fade-start .inner,[dir=rtl] .--fade-end .inner{--rs-tabs-mid-l:calc(var(--rs-unit-x1) * 6);--rs-tabs-stop-l:calc(var(--rs-unit-x1) * 12)}}
|
@@ -9,8 +9,8 @@ export declare const useTabs: (value?: string) => {
|
|
9
9
|
value: string;
|
10
10
|
name?: string;
|
11
11
|
}) => void) | undefined;
|
12
|
-
variant?:
|
13
|
-
direction?:
|
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;
|
@@ -7,6 +7,7 @@ import Actionable from "../Actionable/index.js";
|
|
7
7
|
import Icon from "../Icon/index.js";
|
8
8
|
import Text from "../Text/index.js";
|
9
9
|
import useIsomorphicLayoutEffect from "../../hooks/useIsomorphicLayoutEffect.js";
|
10
|
+
import { findParent } from "../../utilities/dom/index.js";
|
10
11
|
import { useTabs } from "./TabsContext.js";
|
11
12
|
import s from "./Tabs.module.css";
|
12
13
|
const TabsItem = (props, ref) => {
|
@@ -23,9 +24,6 @@ const TabsItem = (props, ref) => {
|
|
23
24
|
"aria-selected": active,
|
24
25
|
};
|
25
26
|
const updateRefs = React.useCallback(() => {
|
26
|
-
if (!("current" in itemRef)) {
|
27
|
-
throw new Error("Reshaped, Tabs: TabItem is expecting an object ref format but received a function ref");
|
28
|
-
}
|
29
27
|
elPrevActiveRef.current = elActiveRef.current;
|
30
28
|
elActiveRef.current = itemRef.current;
|
31
29
|
}, [elActiveRef, elPrevActiveRef]);
|
@@ -40,14 +38,22 @@ const TabsItem = (props, ref) => {
|
|
40
38
|
if (!listEl || !currentListItem || !prevListItem || listEl.scrollWidth === listEl.clientWidth) {
|
41
39
|
return;
|
42
40
|
}
|
43
|
-
|
44
|
-
|
45
|
-
//
|
46
|
-
|
47
|
-
const
|
48
|
-
if (!
|
41
|
+
if (!elScrollableRef.current)
|
42
|
+
return;
|
43
|
+
// Big enough value to show there are more items and not overlap arrow controls
|
44
|
+
const visibilityThreshold = 48;
|
45
|
+
const elItem = findParent(itemRef.current, (el) => el.hasAttribute("data-rs-tabs-item"));
|
46
|
+
if (!elItem)
|
49
47
|
return;
|
50
|
-
|
48
|
+
const elScrollable = elScrollableRef.current;
|
49
|
+
const startOverflow = elItem.offsetLeft - elScrollable.scrollLeft;
|
50
|
+
const endOverflow = elScrollable.scrollLeft + elScrollable.clientWidth - (elItem.offsetLeft + elItem.clientWidth);
|
51
|
+
if (startOverflow < visibilityThreshold || endOverflow < visibilityThreshold) {
|
52
|
+
elScrollableRef.current.scrollTo({
|
53
|
+
left: elItem.offsetLeft + elItem.clientWidth / 2 - elScrollable.clientWidth / 2,
|
54
|
+
behavior: "smooth",
|
55
|
+
});
|
56
|
+
}
|
51
57
|
};
|
52
58
|
useIsomorphicLayoutEffect(() => {
|
53
59
|
if (!active)
|
@@ -6,7 +6,8 @@ import useRTL from "../../hooks/useRTL.js";
|
|
6
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
|
-
import
|
9
|
+
import Actionable from "../Actionable/index.js";
|
10
|
+
import Icon from "../Icon/index.js";
|
10
11
|
import IconChevronRight from "../../icons/ChevronRight.js";
|
11
12
|
import IconChevronLeft from "../../icons/ChevronLeft.js";
|
12
13
|
import TabsItem from "./TabsItem.js";
|
@@ -136,12 +137,20 @@ const TabsList = (props) => {
|
|
136
137
|
return (_jsxs("div", { ...attributes, className: rootClassNames, children: [_jsx("div", { className: s.inner, ref: elScrollableRef, children: _jsxs("div", { className: s.list, role: "tablist", ref: hotkeysRef, children: [React.Children.map(children, (child, index) => {
|
137
138
|
if (!child)
|
138
139
|
return null;
|
139
|
-
return (_jsx("div", { className: s.listItem, children: child }, child.props.value || child.key || index));
|
140
|
+
return (_jsx("div", { className: s.listItem, "data-rs-tabs-item": true, children: child }, child.props.value || child.key || index));
|
140
141
|
}), _jsx("div", { onTransitionEnd: handleTransitionEnd, className: selectorClassNames, style: {
|
141
142
|
"--rs-tab-selection-x": selection.left,
|
142
143
|
"--rs-tab-selection-y": selection.top,
|
143
144
|
"--rs-tab-selection-scale-x": selection.scaleX,
|
144
145
|
"--rs-tab-selection-scale-y": selection.scaleY,
|
145
|
-
} })] }) }),
|
146
|
+
} })] }) }), _jsx(Actionable, { onClick: handlePrevClick, attributes: { "aria-hidden": true, tabIndex: -1 }, className: [
|
147
|
+
s.control,
|
148
|
+
s["control--prev"],
|
149
|
+
(fadeSide === "start" || fadeSide === "both") && s["control--active"],
|
150
|
+
], children: _jsx(Icon, { svg: IconChevronLeft, size: 5 }) }), _jsx(Actionable, { onClick: handleNextClick, attributes: { "aria-hidden": true, tabIndex: -1 }, className: [
|
151
|
+
s.control,
|
152
|
+
s["control--next"],
|
153
|
+
(fadeSide === "end" || fadeSide === "both") && s["control--active"],
|
154
|
+
], children: _jsx(Icon, { svg: IconChevronRight, size: 5 }) })] }));
|
146
155
|
};
|
147
156
|
export default TabsList;
|
@@ -4,10 +4,10 @@ import { classNames } from "../../utilities/helpers.js";
|
|
4
4
|
import { useTabs } from "./TabsContext.js";
|
5
5
|
import s from "./Tabs.module.css";
|
6
6
|
const TabsPanel = (props) => {
|
7
|
-
const { value: panelValue, children } = props;
|
7
|
+
const { value: panelValue, children, className, attributes } = props;
|
8
8
|
const { value, panelId, buttonId } = useTabs(panelValue);
|
9
9
|
const active = panelValue === value;
|
10
|
-
const panelClassNames = classNames(s.panel, !active && s["--panel-hidden"]);
|
11
|
-
return (_jsx("div", { className: panelClassNames, tabIndex: 0, role: "tabpanel", id: panelId, "aria-labelledby": buttonId, children: active && children }));
|
10
|
+
const panelClassNames = classNames(s.panel, !active && s["--panel-hidden"], className);
|
11
|
+
return (_jsx("div", { ...attributes, className: panelClassNames, tabIndex: 0, role: "tabpanel", id: panelId, "aria-labelledby": buttonId, children: active && children }));
|
12
12
|
};
|
13
13
|
export default TabsPanel;
|
@@ -19,9 +19,10 @@ const Text = (props) => {
|
|
19
19
|
* It still resolves the attributes correctly based on the tag
|
20
20
|
*/
|
21
21
|
const TagName = props.as || (largestVariant && tagMap[largestVariant]) || "div";
|
22
|
-
const rootClassName = classNames(s.root, color && s[`--color-${color}`], ...responsiveClassNames(s, "--variant", variant), ...responsiveClassNames(s, "--weight", weight), decoration && s[`--decoration-${decoration}`], maxLines !== undefined && s[`--clamp`], maxLines === 1 && s["--break-all"], wrap && s[`--wrap-${wrap}`],
|
22
|
+
const rootClassName = classNames(s.root, color && s[`--color-${color}`], ...responsiveClassNames(s, "--variant", variant), ...responsiveClassNames(s, "--weight", weight), decoration && s[`--decoration-${decoration}`], maxLines !== undefined && s[`--clamp`], maxLines === 1 && s["--break-all"], wrap && s[`--wrap-${wrap}`], className);
|
23
23
|
const style = {
|
24
24
|
...attributes?.style,
|
25
|
+
...alignStyles?.variables,
|
25
26
|
"--rs-text-lines": maxLines,
|
26
27
|
};
|
27
28
|
return (_jsx(TagName, { ...attributes, className: rootClassName, style: style, children: children }));
|
@@ -8,21 +8,21 @@ import Icon from "../Icon/index.js";
|
|
8
8
|
import Aligner from "../_private/Aligner/index.js";
|
9
9
|
import s from "./TextField.module.css";
|
10
10
|
const TextFieldSlot = (props) => {
|
11
|
-
const { slot, icon, size, affix, position } = props;
|
11
|
+
const { slot, icon, size, affix, position, id } = props;
|
12
12
|
if (!icon && !slot && !affix)
|
13
13
|
return null;
|
14
14
|
// In case fragment is used, map over its children instead
|
15
15
|
const renderedSlot = React.isValidElement(slot) && slot.type === React.Fragment ? slot.props.children : slot;
|
16
16
|
const slotNode = slot &&
|
17
17
|
React.Children.map(renderedSlot, (child) => (_jsx("div", { className: classNames(s.slot, s[`slot--position-${position}`]), children: child }, "slot")));
|
18
|
-
const iconNode = icon && (_jsx("
|
18
|
+
const iconNode = icon && (_jsx("label", { className: s.icon, htmlFor: id, children: _jsx(Icon, { size: responsivePropDependency(size, (size) => {
|
19
19
|
if (size === "large")
|
20
20
|
return 5;
|
21
21
|
if (size === "xlarge")
|
22
22
|
return 6;
|
23
23
|
return 4;
|
24
24
|
}), svg: icon }) }, "icon"));
|
25
|
-
const affixNode = affix && (_jsx("
|
25
|
+
const affixNode = affix && (_jsx("label", { className: classNames(s.affix, s[`affix--position-${position}`]), htmlFor: id, children: affix }, "affix"));
|
26
26
|
/**
|
27
27
|
* Start position:
|
28
28
|
* - Icon is first to indicate a role of the input
|
@@ -48,7 +48,7 @@ const TextField = (props) => {
|
|
48
48
|
return;
|
49
49
|
onChange({ name, value: event.target.value, event });
|
50
50
|
};
|
51
|
-
return (_jsxs("div", { ...attributes, "data-rs-aligner-target": true, className: rootClassName, children: [_jsx(TextFieldSlot, { position: "start", icon: icon, slot: startSlot, size: size, affix: prefix }), _jsx("input", { ...inputAttributes, className: s.input, disabled: disabled, name: name, placeholder: placeholder, value: value, defaultValue: defaultValue, onChange: handleChange, onFocus: onFocus || inputAttributes?.onFocus, onBlur: onBlur || inputAttributes?.onBlur, id: inputId }), _jsx(TextFieldSlot, { position: "end", icon: endIcon, slot: endSlot, size: size, affix: suffix })] }));
|
51
|
+
return (_jsxs("div", { ...attributes, "data-rs-aligner-target": true, className: rootClassName, children: [_jsx(TextFieldSlot, { position: "start", icon: icon, slot: startSlot, size: size, affix: prefix, id: id }), _jsx("input", { ...inputAttributes, className: s.input, disabled: disabled, name: name, placeholder: placeholder, value: value, defaultValue: defaultValue, onChange: handleChange, onFocus: onFocus || inputAttributes?.onFocus, onBlur: onBlur || inputAttributes?.onBlur, id: inputId }), _jsx(TextFieldSlot, { position: "end", icon: endIcon, slot: endSlot, size: size, affix: suffix, id: id })] }));
|
52
52
|
};
|
53
53
|
TextField.Aligner = Aligner;
|
54
54
|
export default TextField;
|
@@ -1 +1 @@
|
|
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}.root.--rounded{border-radius:999px}.root.--rounded .affix:first-child,.root.--rounded .icon:first-child{padding-inline-start:var(--rs-unit-x1)}.root.--rounded .input:first-child{padding-inline-start:calc(var(--rs-text-field-gap) + var(--rs-unit-x1))}.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)}.
|
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) calc(var(--rs-text-field-gap) - 1px);position:relative;row-gap:var(--rs-unit-x1);z-index:0}.root:has(label:active),.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}.root.--rounded{border-radius:999px}.root.--rounded .affix:first-child,.root.--rounded .icon:first-child{padding-inline-start:var(--rs-unit-x1)}.root.--rounded .input:first-child{padding-inline-start:calc(var(--rs-text-field-gap) + var(--rs-unit-x1))}.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{cursor:text}.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)}.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,6 +1,7 @@
|
|
1
1
|
"use client";
|
2
2
|
import { createElement as _createElement } from "react";
|
3
|
-
import { jsxs as _jsxs, jsx as _jsx
|
3
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
4
|
+
import React from "react";
|
4
5
|
import View from "../View/index.js";
|
5
6
|
import Button from "../Button/index.js";
|
6
7
|
import Icon from "../Icon/index.js";
|
@@ -19,7 +20,7 @@ const Toast = (props) => {
|
|
19
20
|
if (actionsSlot) {
|
20
21
|
actions = Array.isArray(actionsSlot) ? actionsSlot : [actionsSlot];
|
21
22
|
}
|
22
|
-
const textContent = (title || text) && (_jsxs(
|
23
|
+
const textContent = (title || text) && (_jsxs(React.Fragment, { children: [title && (_jsxs(Text, { variant: "body-3", weight: "bold", as: textTagName, children: [title, " "] })), _jsx(Text, { variant: "body-3", as: textTagName, children: text })] }));
|
23
24
|
const toastNode = (_jsxs(View, { backgroundColor: backgroundColor, borderColor: borderColor, padding: 4, borderRadius: "medium", animated: true, direction: "row", gap: 3, align: isLarge ? "start" : "center", className: [s.toast, className], attributes: attributes, children: [icon && _jsx(Icon, { size: 5, svg: icon, className: s.icon }), startSlot && !icon && _jsx(View.Item, { children: startSlot }), _jsx(View.Item, { grow: true, children: _jsxs(View, { direction: isLarge ? "column" : "row", align: isLarge ? "start" : "center", gap: 3, children: [_jsx(View.Item, { grow: true, children: (textContent && children) || size !== "small" ? (_jsxs(View, { gap: 0.5, children: [textContent, children && _jsx(View, { gap: 3, children: children })] })) : (textContent || children) }), actions.length && (_jsx(View, { direction: "row", align: "center", gap: 2, children: actions.map((slot, index) => {
|
24
25
|
const isPrimary = size === "large" ? index === 0 : index === actions.length - 1;
|
25
26
|
const primaryColor = color === "neutral" || color === "inverted" ? "neutral" : "media";
|
@@ -1,3 +1,3 @@
|
|
1
1
|
import type * as T from "./Tooltip.types";
|
2
|
-
declare const Tooltip: (props: T.Props) => import("react/jsx-runtime").JSX.Element;
|
2
|
+
declare const Tooltip: (props: T.Props) => string | number | boolean | import("react/jsx-runtime").JSX.Element | Iterable<import("react").ReactNode> | null | undefined;
|
3
3
|
export default Tooltip;
|
@@ -1,13 +1,13 @@
|
|
1
1
|
"use client";
|
2
|
-
import {
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
3
3
|
import Theme from "../Theme/index.js";
|
4
4
|
import Text from "../Text/index.js";
|
5
5
|
import Flyout from "../_private/Flyout/index.js";
|
6
6
|
import s from "./Tooltip.module.css";
|
7
7
|
const Tooltip = (props) => {
|
8
|
-
const {
|
8
|
+
const { text, children, position = "bottom", ...flyoutProps } = props;
|
9
9
|
if (!text)
|
10
|
-
return
|
11
|
-
return (_jsxs(Flyout, {
|
10
|
+
return children({});
|
11
|
+
return (_jsxs(Flyout, { ...flyoutProps, position: position, triggerType: "hover", groupTimeouts: true, children: [_jsx(Flyout.Trigger, { children: children }), _jsx(Flyout.Content, { children: _jsx(Theme, { colorMode: "inverted", children: _jsx(Text, { variant: "caption-1", className: s.root, children: text }) }) })] }));
|
12
12
|
};
|
13
13
|
export default Tooltip;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import React from "react";
|
2
2
|
import type { FlyoutProps, FlyoutTriggerProps } from "../_private/Flyout";
|
3
|
-
export type Props = Pick<FlyoutProps, "id" | "position" | "onOpen" | "onClose" | "active" | "disabled" | "disableContentHover" | "containerRef" | "contentGap" | "contentShift"> & {
|
3
|
+
export type Props = Pick<FlyoutProps, "id" | "position" | "onOpen" | "onClose" | "active" | "disabled" | "disableContentHover" | "containerRef" | "contentGap" | "contentShift" | "originCoordinates"> & {
|
4
4
|
children: (attributes: Parameters<FlyoutTriggerProps["children"]>[0] | {}) => React.ReactNode;
|
5
5
|
text?: React.ReactNode;
|
6
6
|
};
|
@@ -1,6 +1,6 @@
|
|
1
1
|
declare const _default: {
|
2
2
|
title: string;
|
3
|
-
component: (props: import("./..").TooltipProps) => import("react").JSX.Element;
|
3
|
+
component: (props: import("./..").TooltipProps) => string | number | boolean | Iterable<import("react").ReactNode> | import("react").JSX.Element | null | undefined;
|
4
4
|
parameters: {
|
5
5
|
iframe: {
|
6
6
|
url: string;
|
@@ -38,7 +38,7 @@ const View = (props) => {
|
|
38
38
|
/**
|
39
39
|
* Style props
|
40
40
|
* */
|
41
|
-
animated, backgroundColor, borderColor, borderRadius, shadow, textAlign, overflow, position
|
41
|
+
animated, backgroundColor, borderColor, borderRadius, shadow, textAlign, overflow, position, inset, insetTop, insetBottom, insetStart, insetEnd, zIndex,
|
42
42
|
/**
|
43
43
|
* Item prop
|
44
44
|
*/
|
@@ -145,8 +145,8 @@ const View = (props) => {
|
|
145
145
|
return renderItem({ child, index: renderedIndex });
|
146
146
|
});
|
147
147
|
// Classnames and attributes are written here so we can assign nowrap to the root element based on the children
|
148
|
-
const rootClassNames = classNames(s.root, className, radiusStyles?.classNames,
|
149
|
-
s["--padding"],
|
148
|
+
const rootClassNames = classNames(s.root, className, radiusStyles?.classNames, bleedStyles?.classNames, widthStyles?.classNames, heightStyles?.classNames, maxWidthStyles?.classNames, maxHeightStyles?.classNames, minWidthStyles?.classNames, minHeightStyles?.classNames, borderStyles?.classNames, backgroundColor && s[`--bg-${backgroundColor}`], shadow && s[`--shadow-${shadow}`], overflow && s[`--overflow-${overflow}`], animated && s["--animated"], divided && s["--divided"], (padding !== undefined || paddingInline !== undefined || paddingBlock !== undefined) &&
|
149
|
+
s["--padding"], (isFlex || nowrap) && s["--flex"], ...responsiveClassNames(s, "--direction", direction),
|
150
150
|
// Wrap and nowrap are separate here because inverting any of them could result into a false value which will be ignored by classNames
|
151
151
|
...responsiveClassNames(s, "--nowrap", nowrap || wrap === false), ...responsiveClassNames(s, "--wrap", wrap),
|
152
152
|
// Item classnames
|
@@ -173,6 +173,11 @@ const View = (props) => {
|
|
173
173
|
...insetBottomStyles?.variables,
|
174
174
|
...insetStartStyles?.variables,
|
175
175
|
...insetEndStyles?.variables,
|
176
|
+
...alignStyles?.variables,
|
177
|
+
...justifyStyles?.variables,
|
178
|
+
...aspectRatioStyles?.variables,
|
179
|
+
...positionStyles?.variables,
|
180
|
+
...textAlignStyles?.variables,
|
176
181
|
...(zIndex ? { "--rs-view-z": zIndex } : {}),
|
177
182
|
};
|
178
183
|
return (_jsx(TagName, { ...attributes, className: rootClassNames, style: rootVariables, children: formattedChildren }));
|