reshaped 3.6.0-canary.6 → 3.6.0-canary.8

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.
Files changed (93) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/dist/bundle.css +1 -1
  3. package/dist/bundle.d.ts +4 -0
  4. package/dist/bundle.js +11 -11
  5. package/dist/cjs/cli/theming/reshaped.config.js +0 -1
  6. package/dist/cjs/themes/_generator/definitions/slate.d.ts +2 -2
  7. package/dist/cjs/themes/_generator/tokens/color/color.transforms.js +7 -5
  8. package/dist/cjs/themes/_generator/tokens/color/color.types.d.ts +3 -2
  9. package/dist/cjs/themes/_generator/tokens/color/utilities/convert.d.ts +1 -1
  10. package/dist/cjs/themes/_generator/tokens/color/utilities/generateColors.d.ts +2 -2
  11. package/dist/cjs/themes/_generator/tokens/color/utilities/generateColors.js +1 -1
  12. package/dist/cjs/themes/_generator/tokens/color/utilities/generateMetaColors.d.ts +2 -2
  13. package/dist/cjs/themes/_generator/tokens/shadow/shadow.transforms.js +1 -1
  14. package/dist/cjs/themes/_generator/tokens/types.d.ts +7 -4
  15. package/dist/cjs/themes/_generator/transform.js +5 -2
  16. package/dist/cjs/themes/slate/theme.css +1 -1
  17. package/dist/cjs/types/config.d.ts +1 -0
  18. package/dist/cli/theming/reshaped.config.js +0 -1
  19. package/dist/components/Badge/Badge.module.css +1 -1
  20. package/dist/components/Button/Button.module.css +1 -1
  21. package/dist/components/Button/tests/Button.stories.js +39 -6
  22. package/dist/components/Calendar/Calendar.module.css +1 -1
  23. package/dist/components/Card/Card.module.css +1 -1
  24. package/dist/components/Checkbox/Checkbox.module.css +1 -1
  25. package/dist/components/FileUpload/FileUpload.module.css +1 -1
  26. package/dist/components/Link/Link.module.css +1 -1
  27. package/dist/components/MenuItem/MenuItem.module.css +1 -1
  28. package/dist/components/Modal/tests/Modal.test.stories.js +1 -1
  29. package/dist/components/NumberField/NumberField.module.css +1 -1
  30. package/dist/components/NumberField/NumberFieldControlled.js +3 -1
  31. package/dist/components/NumberField/tests/NumberField.stories.d.ts +1 -0
  32. package/dist/components/NumberField/tests/NumberField.stories.js +24 -6
  33. package/dist/components/Overlay/tests/Overlay.stories.js +3 -3
  34. package/dist/components/Overlay/tests/Overlay.test.stories.js +1 -1
  35. package/dist/components/Radio/Radio.module.css +1 -1
  36. package/dist/components/Resizable/Resizable.js +5 -27
  37. package/dist/components/Resizable/Resizable.module.css +1 -1
  38. package/dist/components/Resizable/Resizable.types.d.ts +5 -2
  39. package/dist/components/Resizable/ResizableHandle.d.ts +5 -0
  40. package/dist/components/Resizable/ResizableHandle.js +32 -0
  41. package/dist/components/Resizable/tests/Resizable.stories.d.ts +22 -1
  42. package/dist/components/Resizable/tests/Resizable.stories.js +154 -65
  43. package/dist/components/Select/Select.js +1 -1
  44. package/dist/components/Select/Select.module.css +1 -1
  45. package/dist/components/Tabs/Tabs.module.css +1 -1
  46. package/dist/components/ToggleButton/ToggleButton.d.ts +3 -0
  47. package/dist/components/ToggleButton/ToggleButton.js +11 -0
  48. package/dist/components/ToggleButton/ToggleButton.types.d.ts +20 -0
  49. package/dist/components/ToggleButton/ToggleButton.types.js +1 -0
  50. package/dist/components/ToggleButton/ToggleButtonControlled.d.ts +3 -0
  51. package/dist/components/ToggleButton/ToggleButtonControlled.js +22 -0
  52. package/dist/components/ToggleButton/ToggleButtonUncontrolled.d.ts +3 -0
  53. package/dist/components/ToggleButton/ToggleButtonUncontrolled.js +15 -0
  54. package/dist/components/ToggleButton/index.d.ts +2 -0
  55. package/dist/components/ToggleButton/index.js +1 -0
  56. package/dist/components/ToggleButton/tests/ToggleButton.stories.d.ts +23 -0
  57. package/dist/components/ToggleButton/tests/ToggleButton.stories.js +87 -0
  58. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.context.d.ts +5 -0
  59. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.context.js +5 -0
  60. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.d.ts +3 -0
  61. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.js +11 -0
  62. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.types.d.ts +24 -0
  63. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.types.js +1 -0
  64. package/dist/components/ToggleButtonGroup/ToggleButtonGroupControlled.d.ts +3 -0
  65. package/dist/components/ToggleButtonGroup/ToggleButtonGroupControlled.js +44 -0
  66. package/dist/components/ToggleButtonGroup/ToggleButtonGroupUncontrolled.d.ts +4 -0
  67. package/dist/components/ToggleButtonGroup/ToggleButtonGroupUncontrolled.js +18 -0
  68. package/dist/components/ToggleButtonGroup/index.d.ts +3 -0
  69. package/dist/components/ToggleButtonGroup/index.js +2 -0
  70. package/dist/components/ToggleButtonGroup/tests/ToggleButtonGroup.stories.d.ts +21 -0
  71. package/dist/components/ToggleButtonGroup/tests/ToggleButtonGroup.stories.js +115 -0
  72. package/dist/hooks/tests/useDrag.stories.js +1 -1
  73. package/dist/hooks/tests/useToggle.stories.js +1 -1
  74. package/dist/hooks/useToggle.d.ts +1 -1
  75. package/dist/hooks/useToggle.js +2 -2
  76. package/dist/index.d.ts +4 -0
  77. package/dist/index.js +2 -0
  78. package/dist/styles/bleed/bleed.module.css +1 -1
  79. package/dist/themes/_generator/definitions/slate.d.ts +2 -2
  80. package/dist/themes/_generator/tokens/color/color.transforms.js +7 -5
  81. package/dist/themes/_generator/tokens/color/color.types.d.ts +3 -2
  82. package/dist/themes/_generator/tokens/color/utilities/convert.d.ts +1 -1
  83. package/dist/themes/_generator/tokens/color/utilities/generateColors.d.ts +2 -2
  84. package/dist/themes/_generator/tokens/color/utilities/generateColors.js +1 -1
  85. package/dist/themes/_generator/tokens/color/utilities/generateMetaColors.d.ts +2 -2
  86. package/dist/themes/_generator/tokens/shadow/shadow.transforms.js +1 -1
  87. package/dist/themes/_generator/tokens/types.d.ts +7 -4
  88. package/dist/themes/_generator/transform.js +5 -2
  89. package/dist/themes/slate/theme.css +1 -1
  90. package/dist/types/config.d.ts +1 -0
  91. package/package.json +27 -27
  92. package/dist/components/Resizable/tests/Resizable.test.stories.d.ts +0 -18
  93. package/dist/components/Resizable/tests/Resizable.test.stories.js +0 -25
@@ -139,21 +139,39 @@ export const value = {
139
139
  },
140
140
  };
141
141
  export const minMax = {
142
- name: "min, max, step",
143
- render: () => (<NumberField name="test-name" defaultValue={6} min={5} max={15} step={5} increaseAriaLabel="Increase" decreaseAriaLabel="Decrease" inputAttributes={{ "aria-label": "Label" }}/>),
142
+ name: "min, max",
143
+ render: () => (<NumberField name="test-name" defaultValue={6} min={5} max={10} increaseAriaLabel="Increase" decreaseAriaLabel="Decrease" inputAttributes={{ "aria-label": "Label" }}/>),
144
144
  play: async ({ canvas }) => {
145
145
  const input = canvas.getByRole("textbox");
146
146
  const [increaseButton, decreaseButton] = canvas.getAllByRole("button");
147
147
  expect(input).toHaveValue("6");
148
148
  await userEvent.click(increaseButton);
149
- expect(input).toHaveValue("11");
149
+ await userEvent.click(increaseButton);
150
+ await userEvent.click(increaseButton);
151
+ await userEvent.click(increaseButton);
152
+ await userEvent.click(increaseButton);
153
+ expect(input).toHaveValue("10");
154
+ await userEvent.click(decreaseButton);
155
+ await userEvent.click(decreaseButton);
156
+ await userEvent.click(decreaseButton);
157
+ await userEvent.click(decreaseButton);
150
158
  await userEvent.click(decreaseButton);
151
159
  await userEvent.click(decreaseButton);
152
160
  expect(input).toHaveValue("5");
161
+ },
162
+ };
163
+ export const step = {
164
+ name: "step",
165
+ render: () => (<NumberField name="test-name" defaultValue={6} step={0.5} increaseAriaLabel="Increase" decreaseAriaLabel="Decrease" inputAttributes={{ "aria-label": "Label" }}/>),
166
+ play: async ({ canvas }) => {
167
+ const input = canvas.getByRole("textbox");
168
+ const [increaseButton, decreaseButton] = canvas.getAllByRole("button");
169
+ expect(input).toHaveValue("6");
153
170
  await userEvent.click(increaseButton);
154
- await userEvent.click(increaseButton);
155
- await userEvent.click(increaseButton);
156
- expect(input).toHaveValue("15");
171
+ expect(input).toHaveValue("6.5");
172
+ await userEvent.click(decreaseButton);
173
+ await userEvent.click(decreaseButton);
174
+ expect(input).toHaveValue("5.5");
157
175
  },
158
176
  };
159
177
  export const className = {
@@ -18,7 +18,7 @@ export const base = {
18
18
  const overlayToggle = useToggle(false);
19
19
  return (<Example>
20
20
  <Example.Item title="base">
21
- <Button onClick={overlayToggle.toggle}>Open overlay</Button>
21
+ <Button onClick={overlayToggle.activate}>Open overlay</Button>
22
22
  <Overlay active={overlayToggle.active} onClose={overlayToggle.deactivate}>
23
23
  Overlay content
24
24
  </Overlay>
@@ -36,7 +36,7 @@ export const transparent = {
36
36
  const overlayToggle = useToggle(false);
37
37
  return (<Example>
38
38
  <Example.Item title="base">
39
- <Button onClick={overlayToggle.toggle}>Open overlay</Button>
39
+ <Button onClick={overlayToggle.activate}>Open overlay</Button>
40
40
  <Overlay active={overlayToggle.active} onClose={overlayToggle.deactivate} transparent>
41
41
  Overlay content
42
42
  </Overlay>
@@ -54,7 +54,7 @@ export const blurred = {
54
54
  const overlayToggle = useToggle(false);
55
55
  return (<Example>
56
56
  <Example.Item title="base">
57
- <Button onClick={overlayToggle.toggle}>Open overlay</Button>
57
+ <Button onClick={overlayToggle.activate}>Open overlay</Button>
58
58
  <Overlay active={overlayToggle.active} onClose={overlayToggle.deactivate} blurred>
59
59
  Overlay content
60
60
  </Overlay>
@@ -36,7 +36,7 @@ export const handlers = {
36
36
  render: (args) => {
37
37
  const overlayToggle = useToggle();
38
38
  return (<>
39
- <Button onClick={overlayToggle.toggle}>Open overlay</Button>
39
+ <Button onClick={() => overlayToggle.toggle()}>Open overlay</Button>
40
40
  <Overlay active={overlayToggle.active} onClose={(closeArgs) => {
41
41
  overlayToggle.deactivate();
42
42
  args.handleClose(closeArgs);
@@ -1 +1 @@
1
- .root{align-items:center;cursor:pointer;display:inline-flex;gap:var(--rs-radio-gap);user-select:none;vertical-align:top;-webkit-tap-highlight-color:transparent}.root:hover .decorator{background:var(--rs-color-background-neutral-faded)}.field{position:relative}.decorator{background:var(--rs-color-background-elevation-base);border:1px solid var(--rs-color-border-neutral);border-radius:50%;height:var(--rs-radio-line-height);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:background-color,border-color;width:var(--rs-radio-line-height)}.decorator:after{background:var(--rs-color-on-background-primary);border-radius:50%;content:"";height:calc(var(--rs-radio-line-height) * .4);left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform;width:calc(var(--rs-radio-line-height) * .4)}.--size-small{--rs-radio-line-height:var(--rs-line-height-caption-1);--rs-radio-gap:var(--rs-unit-x1)}.--size-medium{--rs-radio-line-height:var(--rs-line-height-body-3);--rs-radio-gap:var(--rs-unit-x2)}.--size-large{--rs-radio-line-height:var(--rs-line-height-body-2);--rs-radio-gap:var(--rs-unit-x2)}[data-rs-keyboard] .input:focus+.decorator{box-shadow:var(--rs-focus-shadow)}.root.--error .decorator{border-color:var(--rs-color-border-critical)}.input:checked+.decorator{background:var(--rs-color-background-primary);border-color:var(--rs-color-background-primary)}.input:checked+.decorator:after{opacity:1;transform:translate(-50%,-50%) scale(1)}.root.--disabled{color:var(--rs-color-foreground-disabled);cursor:not-allowed}.root.--disabled .decorator{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled)}.root.--disabled .decorator:after{background-color:var(--rs-color-foreground-disabled)}.root.--disabled .input:checked+.decorator{background:var(--rs-color-background-disabled);border-color:transparent}@media (--rs-viewport-m ){.--size-small--m{--rs-radio-line-height:var(--rs-line-height-caption-1);--rs-radio-gap:var(--rs-unit-x1)}.--size-medium--m{--rs-radio-line-height:var(--rs-line-height-body-3);--rs-radio-gap:var(--rs-unit-x2)}.--size-large--m{--rs-radio-line-height:var(--rs-line-height-body-2);--rs-radio-gap:var(--rs-unit-x2)}}@media (--rs-viewport-l ){.--size-small--l{--rs-radio-line-height:var(--rs-line-height-caption-1);--rs-radio-gap:var(--rs-unit-x1)}.--size-medium--l{--rs-radio-line-height:var(--rs-line-height-body-3);--rs-radio-gap:var(--rs-unit-x2)}.--size-large--l{--rs-radio-line-height:var(--rs-line-height-body-2);--rs-radio-gap:var(--rs-unit-x2)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-radio-line-height:var(--rs-line-height-caption-1);--rs-radio-gap:var(--rs-unit-x1)}.--size-medium--xl{--rs-radio-line-height:var(--rs-line-height-body-3);--rs-radio-gap:var(--rs-unit-x2)}.--size-large--xl{--rs-radio-line-height:var(--rs-line-height-body-2);--rs-radio-gap:var(--rs-unit-x2)}}
1
+ .root{align-items:center;cursor:pointer;display:inline-flex;gap:var(--rs-radio-gap);user-select:none;vertical-align:top;-webkit-tap-highlight-color:transparent}@media (hover:hover) and (pointer:fine){.root:hover .decorator{background:var(--rs-color-background-neutral-faded)}}.field{position:relative}.decorator{background:var(--rs-color-background-elevation-base);border:1px solid var(--rs-color-border-neutral);border-radius:50%;height:var(--rs-radio-line-height);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:background-color,border-color;width:var(--rs-radio-line-height)}.decorator:after{background:var(--rs-color-on-background-primary);border-radius:50%;content:"";height:calc(var(--rs-radio-line-height) * .4);left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform;width:calc(var(--rs-radio-line-height) * .4)}.--size-small{--rs-radio-line-height:var(--rs-line-height-caption-1);--rs-radio-gap:var(--rs-unit-x1)}.--size-medium{--rs-radio-line-height:var(--rs-line-height-body-3);--rs-radio-gap:var(--rs-unit-x2)}.--size-large{--rs-radio-line-height:var(--rs-line-height-body-2);--rs-radio-gap:var(--rs-unit-x2)}[data-rs-keyboard] .input:focus+.decorator{box-shadow:var(--rs-focus-shadow)}.root.--error .decorator{border-color:var(--rs-color-border-critical)}.input:checked+.decorator{background:var(--rs-color-background-primary);border-color:var(--rs-color-background-primary)}.input:checked+.decorator:after{opacity:1;transform:translate(-50%,-50%) scale(1)}.root.--disabled{color:var(--rs-color-foreground-disabled);cursor:not-allowed}.root.--disabled .decorator{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled)}.root.--disabled .decorator:after{background-color:var(--rs-color-foreground-disabled)}.root.--disabled .input:checked+.decorator{background:var(--rs-color-background-disabled);border-color:transparent}@media (--rs-viewport-m ){.--size-small--m{--rs-radio-line-height:var(--rs-line-height-caption-1);--rs-radio-gap:var(--rs-unit-x1)}.--size-medium--m{--rs-radio-line-height:var(--rs-line-height-body-3);--rs-radio-gap:var(--rs-unit-x2)}.--size-large--m{--rs-radio-line-height:var(--rs-line-height-body-2);--rs-radio-gap:var(--rs-unit-x2)}}@media (--rs-viewport-l ){.--size-small--l{--rs-radio-line-height:var(--rs-line-height-caption-1);--rs-radio-gap:var(--rs-unit-x1)}.--size-medium--l{--rs-radio-line-height:var(--rs-line-height-body-3);--rs-radio-gap:var(--rs-unit-x2)}.--size-large--l{--rs-radio-line-height:var(--rs-line-height-body-2);--rs-radio-gap:var(--rs-unit-x2)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-radio-line-height:var(--rs-line-height-caption-1);--rs-radio-gap:var(--rs-unit-x1)}.--size-medium--xl{--rs-radio-line-height:var(--rs-line-height-body-3);--rs-radio-gap:var(--rs-unit-x2)}.--size-large--xl{--rs-radio-line-height:var(--rs-line-height-body-2);--rs-radio-gap:var(--rs-unit-x2)}}
@@ -2,31 +2,9 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import React from "react";
4
4
  import { classNames } from "../../utilities/props.js";
5
- import useDrag from "../../hooks/_private/useDrag.js";
6
5
  import View from "../View/index.js";
6
+ import ResizableHandle, { ResizableHandleContext } from "./ResizableHandle.js";
7
7
  import s from "./Resizable.module.css";
8
- const PrivateResizableHandle = (props) => {
9
- const { containerRef, onDrag, index, direction, children } = props;
10
- const { ref, active } = useDrag((args) => {
11
- onDrag({ ...args, index });
12
- }, {
13
- containerRef,
14
- orientation: direction === "row" ? "horizontal" : "vertical",
15
- });
16
- const handleClassNames = classNames(s.handle, active && s["handle--dragging"]);
17
- if (children)
18
- return _jsx(View.Item, { children: children({ ref }) });
19
- return (_jsx(View.Item, { className: handleClassNames, attributes: {
20
- role: "button",
21
- tabIndex: 0,
22
- "aria-hidden": true,
23
- ref: (el) => {
24
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
25
- // @ts-ignore
26
- ref.current = el;
27
- },
28
- } }));
29
- };
30
8
  const PrivateResizableItem = React.forwardRef((props, ref) => {
31
9
  const { children, defaultSize, minSize, maxSize } = props;
32
10
  const itemRef = React.useRef(null);
@@ -135,10 +113,10 @@ const Resizable = (props) => {
135
113
  }, [horizontal]);
136
114
  const output = React.Children.map(children, (child) => {
137
115
  const isComponent = React.isValidElement(child);
138
- if (isComponent && child.type === Resizable.Handle && child.props) {
139
- return (_jsx(PrivateResizableHandle, { ...child.props, containerRef: containerRef, index: currentHandleIndex++, onDrag: onDrag, direction: direction }));
116
+ if (isComponent && child.props && child.type !== Resizable.Item) {
117
+ return (_jsx(ResizableHandleContext.Provider, { value: { containerRef, index: currentHandleIndex++, onDrag, direction }, children: child }));
140
118
  }
141
- if (isComponent && child.type === Resizable.Item && child.props) {
119
+ if (isComponent && child.props && child.type === Resizable.Item) {
142
120
  const index = currentHandleIndex;
143
121
  return (_jsx(PrivateResizableItem, { ...child.props, index: currentItemIndex++, ref: (el) => {
144
122
  itemsRef.current[index] = { el, props: child.props };
@@ -149,6 +127,6 @@ const Resizable = (props) => {
149
127
  return (_jsx(View, { attributes: { ...attributes, ref: containerRef }, className: rootClassNames, height: height, direction: direction, align: "stretch", gap: gap, children: output }));
150
128
  };
151
129
  Resizable.Item = () => null;
152
- Resizable.Handle = () => null;
130
+ Resizable.Handle = ResizableHandle;
153
131
  Resizable.displayName = "Resizable";
154
132
  export default Resizable;
@@ -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{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
+ .root{isolation:isolate}.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;z-index:var(--rs-z-index-raised)}.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-x6)}.--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-x6)}.--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)}
@@ -3,7 +3,8 @@ import type { ViewProps } from "../View";
3
3
  import type { UseDragCallbackArgs } from "../../hooks/_private/useDrag";
4
4
  export type Props = {
5
5
  variant?: "bordered" | "borderless";
6
- } & Pick<ViewProps, "children" | "className" | "attributes" | "height" | "direction" | "gap">;
6
+ direction?: Extract<ViewProps["direction"], "row" | "column">;
7
+ } & Pick<ViewProps, "children" | "className" | "attributes" | "height" | "gap">;
7
8
  export type ItemProps = {
8
9
  children: React.ReactNode;
9
10
  minSize?: `${number}px`;
@@ -16,9 +17,11 @@ export type PrivateItemProps = ItemProps & {
16
17
  export type HandleProps = {
17
18
  children?: (attributes: {
18
19
  ref: React.RefObject<HTMLButtonElement | null>;
20
+ }, props: Pick<Props, "direction"> & {
21
+ status: "idle" | "dragging";
19
22
  }) => React.ReactNode;
20
23
  };
21
- export type PrivateHandleProps = HandleProps & {
24
+ export type HandleContext = {
22
25
  containerRef: React.RefObject<HTMLDivElement | null>;
23
26
  index: number;
24
27
  onDrag: (args: UseDragCallbackArgs & {
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ import type * as T from "./Resizable.types";
3
+ export declare const ResizableHandleContext: React.Context<T.HandleContext>;
4
+ declare const ResizableHandle: React.FC<T.HandleProps>;
5
+ export default ResizableHandle;
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import React from "react";
4
+ import { classNames } from "../../utilities/props.js";
5
+ import View from "../View/index.js";
6
+ import useDrag from "../../hooks/_private/useDrag.js";
7
+ import s from "./Resizable.module.css";
8
+ export const ResizableHandleContext = React.createContext({});
9
+ const ResizableHandle = (props) => {
10
+ const { children } = props;
11
+ const { containerRef, onDrag, index, direction } = React.useContext(ResizableHandleContext);
12
+ const { ref, active } = useDrag((args) => {
13
+ onDrag({ ...args, index });
14
+ }, {
15
+ containerRef,
16
+ orientation: direction === "row" ? "horizontal" : "vertical",
17
+ });
18
+ const handleClassNames = classNames(s.handle, active && s["handle--dragging"]);
19
+ if (children)
20
+ return (_jsx(View.Item, { children: children({ ref }, { direction, status: active ? "dragging" : "idle" }) }));
21
+ return (_jsx(View.Item, { className: handleClassNames, attributes: {
22
+ role: "button",
23
+ tabIndex: 0,
24
+ "aria-hidden": true,
25
+ ref: (el) => {
26
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
27
+ // @ts-ignore
28
+ ref.current = el;
29
+ },
30
+ } }));
31
+ };
32
+ export default ResizableHandle;
@@ -1,3 +1,4 @@
1
+ import { StoryObj } from "@storybook/react-vite";
1
2
  declare const _default: {
2
3
  title: string;
3
4
  component: import("react").FC<import("./..").ResizableProps> & {
@@ -14,4 +15,24 @@ declare const _default: {
14
15
  };
15
16
  };
16
17
  export default _default;
17
- export declare const base: () => import("react").JSX.Element;
18
+ export declare const direction: {
19
+ name: string;
20
+ render: () => import("react").JSX.Element;
21
+ };
22
+ export declare const children: {
23
+ name: string;
24
+ render: () => import("react").JSX.Element;
25
+ };
26
+ export declare const variant: {
27
+ name: string;
28
+ render: () => import("react").JSX.Element;
29
+ };
30
+ export declare const size: {
31
+ name: string;
32
+ render: () => import("react").JSX.Element;
33
+ };
34
+ export declare const layout: {
35
+ name: string;
36
+ render: () => import("react").JSX.Element;
37
+ };
38
+ export declare const className: StoryObj;
@@ -1,3 +1,4 @@
1
+ import { expect } from "storybook/test";
1
2
  import { Example } from "../../../utilities/storybook/index.js";
2
3
  import Resizable from "../index.js";
3
4
  import View from "../../View/index.js";
@@ -7,7 +8,7 @@ export default {
7
8
  component: Resizable,
8
9
  parameters: {
9
10
  iframe: {
10
- url: "https://reshaped.so/docs/utilities/Resizable",
11
+ url: "https://reshaped.so/docs/utilities/resizable",
11
12
  },
12
13
  // Skip because of the aria-hidden applied to buttons, they're not needed for the screen reader navigation
13
14
  a11y: {
@@ -15,82 +16,170 @@ export default {
15
16
  },
16
17
  },
17
18
  };
18
- export const base = () => (<Example>
19
- <Example.Item>
20
- <Resizable height="300px" gap={4}>
21
- <Resizable.Item minSize="100px" defaultSize="200px">
22
- <View backgroundColor="neutral-faded" borderRadius="medium" align="center" justify="center" height="100%">
23
- Panel
24
- </View>
25
- </Resizable.Item>
26
- <Resizable.Handle />
27
- <Resizable.Item>
28
- <View backgroundColor="neutral-faded" borderRadius="medium" align="center" justify="center" height="100%">
29
- Panel
30
- </View>
31
- </Resizable.Item>
32
- <Resizable.Handle />
33
- <Resizable.Item>
34
- <Resizable height="100%" direction="column">
35
- <Resizable.Item minSize="50px" maxSize="100px">
36
- <View backgroundColor="neutral-faded" borderRadius="medium" align="center" justify="center" height="100%">
37
- Panel
38
- </View>
19
+ const Panel = (props) => (<View backgroundColor="neutral-faded" borderRadius="medium" align="center" justify="center" height={props.height ?? "100%"}>
20
+ Panel
21
+ </View>);
22
+ const Handle = () => {
23
+ return (<Resizable.Handle>
24
+ {(attributes, props) => (<View backgroundColor={props.status === "dragging" ? "primary" : "primary-faded"} padding={props.direction === "column" ? 1 : 8} height="100%" align="center" justify="center" borderRadius="small" animated>
25
+ <Button attributes={attributes} type="button">
26
+ Drag me
27
+ </Button>
28
+ </View>)}
29
+ </Resizable.Handle>);
30
+ };
31
+ export const direction = {
32
+ name: "direction",
33
+ render: () => {
34
+ return (<Example>
35
+ <Example.Item title="row">
36
+ <Resizable height="200px">
37
+ <Resizable.Item>
38
+ <Panel />
39
39
  </Resizable.Item>
40
40
  <Resizable.Handle />
41
41
  <Resizable.Item>
42
- <View backgroundColor="neutral-faded" borderRadius="medium" align="center" justify="center" height="100%">
43
- Panel
44
- </View>
42
+ <Panel />
45
43
  </Resizable.Item>
46
- <Resizable.Handle>
47
- {(attributes) => (<View backgroundColor="primary-faded" padding={1} align="center" borderRadius="small">
48
- <Button attributes={attributes} type="button">
49
- Drag me
50
- </Button>
51
- </View>)}
52
- </Resizable.Handle>
44
+ <Resizable.Handle />
53
45
  <Resizable.Item>
54
- <View backgroundColor="neutral-faded" borderRadius="medium" align="center" justify="center" height="100%">
55
- Panel
56
- </View>
46
+ <Panel />
57
47
  </Resizable.Item>
58
48
  </Resizable>
59
- </Resizable.Item>
60
- </Resizable>
61
- </Example.Item>
49
+ </Example.Item>
50
+ <Example.Item title="column">
51
+ <Resizable height="400px" direction="column">
52
+ <Resizable.Item>
53
+ <Panel />
54
+ </Resizable.Item>
55
+ <Resizable.Handle />
56
+ <Resizable.Item>
57
+ <Panel />
58
+ </Resizable.Item>
59
+ <Resizable.Handle />
60
+ <Resizable.Item>
61
+ <Panel />
62
+ </Resizable.Item>
63
+ </Resizable>
64
+ </Example.Item>
62
65
 
63
- <Example.Item>
64
- <Resizable height="300px" gap={0} variant="bordered">
65
- <Resizable.Item minSize="100px" defaultSize="200px">
66
- <View align="center" justify="center" height="100%">
67
- Panel
68
- </View>
69
- </Resizable.Item>
70
- <Resizable.Handle />
71
- <Resizable.Item>
72
- <View align="center" justify="center" height="100%">
73
- Panel
74
- </View>
75
- </Resizable.Item>
76
- <Resizable.Handle />
77
- <Resizable.Item>
78
- <Resizable height="100%" direction="column" variant="bordered" gap={0}>
79
- <Resizable.Item minSize="50px" maxSize="100px">
80
- <View align="center" justify="center" height="100%">
81
- Panel
82
- </View>
66
+ {/* Test that page doesn't scroll on dragging */}
67
+ <div style={{ height: 2000 }}/>
68
+ </Example>);
69
+ },
70
+ };
71
+ export const children = {
72
+ name: "children",
73
+ render: () => {
74
+ return (<Example>
75
+ <Example.Item title="render props, row">
76
+ <Resizable height="200px">
77
+ <Resizable.Item>
78
+ <Panel />
83
79
  </Resizable.Item>
84
80
  <Resizable.Handle />
85
81
  <Resizable.Item>
86
- <View align="center" justify="center" height="100%">
87
- Panel
88
- </View>
82
+ <Panel />
83
+ </Resizable.Item>
84
+ <Handle />
85
+ <Resizable.Item>
86
+ <Panel />
87
+ </Resizable.Item>
88
+ </Resizable>
89
+ </Example.Item>
90
+ <Example.Item title="render props, column">
91
+ <Resizable height="400px" direction="column">
92
+ <Resizable.Item>
93
+ <Panel />
94
+ </Resizable.Item>
95
+ <Resizable.Handle />
96
+ <Resizable.Item>
97
+ <Panel />
98
+ </Resizable.Item>
99
+ <Handle />
100
+ <Resizable.Item>
101
+ <Panel />
89
102
  </Resizable.Item>
90
103
  </Resizable>
104
+ </Example.Item>
105
+ </Example>);
106
+ },
107
+ };
108
+ export const variant = {
109
+ name: "variant",
110
+ render: () => (<Example>
111
+ <Example.Item title="bordered, row">
112
+ <Resizable height="200px" variant="bordered">
113
+ <Resizable.Item>
114
+ <Panel />
115
+ </Resizable.Item>
116
+ <Resizable.Handle />
117
+ <Resizable.Item>
118
+ <Panel />
119
+ </Resizable.Item>
120
+ <Resizable.Handle />
121
+ <Resizable.Item>
122
+ <Panel />
123
+ </Resizable.Item>
124
+ </Resizable>
125
+ </Example.Item>
126
+ <Example.Item title="bordered, column">
127
+ <Resizable height="400px" direction="column" variant="bordered">
128
+ <Resizable.Item>
129
+ <Panel />
130
+ </Resizable.Item>
131
+ <Resizable.Handle />
132
+ <Resizable.Item>
133
+ <Panel />
134
+ </Resizable.Item>
135
+ <Resizable.Handle />
136
+ <Resizable.Item>
137
+ <Panel />
138
+ </Resizable.Item>
139
+ </Resizable>
140
+ </Example.Item>
141
+ </Example>),
142
+ };
143
+ export const size = {
144
+ name: "minSize, maxSize, defaultSize",
145
+ render: () => (<Resizable className="test-classname" attributes={{ id: "test-id" }} height="200px">
146
+ <Resizable.Item>
147
+ <Panel />
148
+ </Resizable.Item>
149
+ <Resizable.Handle />
150
+ <Resizable.Item minSize="200px" maxSize="500px" defaultSize="300px">
151
+ <Panel />
152
+ </Resizable.Item>
153
+ </Resizable>),
154
+ };
155
+ export const layout = {
156
+ name: "height, gap",
157
+ render: () => (<Resizable height="100px" gap={8}>
158
+ <Resizable.Item>
159
+ <Panel />
160
+ </Resizable.Item>
161
+ <Resizable.Handle />
162
+ <Resizable.Item>
163
+ <Panel />
164
+ </Resizable.Item>
165
+ </Resizable>),
166
+ };
167
+ export const className = {
168
+ name: "className, attributes",
169
+ render: () => (<div data-testid="root">
170
+ <Resizable className="test-classname" attributes={{ id: "test-id" }} height="200px">
171
+ <Resizable.Item>
172
+ <Panel />
173
+ </Resizable.Item>
174
+ <Resizable.Handle />
175
+ <Resizable.Item>
176
+ <Panel />
91
177
  </Resizable.Item>
92
178
  </Resizable>
93
- </Example.Item>
94
-
95
- <div style={{ height: 2000 }}/>
96
- </Example>);
179
+ </div>),
180
+ play: async ({ canvas }) => {
181
+ const root = canvas.getByTestId("root").firstChild;
182
+ expect(root).toHaveClass("test-classname");
183
+ expect(root).toHaveAttribute("id", "test-id");
184
+ },
185
+ };
@@ -45,7 +45,7 @@ const Select = (props) => {
45
45
  ...inputAttributes,
46
46
  onFocus: onFocus || inputAttributes?.onFocus,
47
47
  onBlur: onBlur || inputAttributes?.onBlur,
48
- }, children: [startContent, children || (placeholder ? _jsx(Text, { color: "neutral-faded", children: placeholder }) : null)] }), _jsx("input", { type: "hidden", value: value, name: name })] })), _jsx("div", { className: s.arrow, children: _jsx(Icon, { svg: IconArrow, color: disabled ? "disabled" : "neutral-faded", size: responsivePropDependency(size, (size) => {
48
+ }, children: [startContent, children ? _jsx(Text, { maxLines: 1, children: children }) : null, placeholder && !children ? _jsx(Text, { color: "neutral-faded", children: placeholder }) : null] }), _jsx("input", { type: "hidden", value: value, name: name })] })), _jsx("div", { className: s.arrow, children: _jsx(Icon, { svg: IconArrow, color: disabled ? "disabled" : "neutral-faded", size: responsivePropDependency(size, (size) => {
49
49
  return size === "large" || size === "xlarge" ? 5 : 4;
50
50
  }) }) })] }));
51
51
  };
@@ -1 +1 @@
1
- .root{background:var(--rs-color-background-elevation-base);border:1px solid var(--rs-color-border-neutral);display:flex;overflow:hidden;padding:calc(var(--rs-unit-x1) - 1px) 0;position:relative;z-index:0}.root:focus-within{border-color:var(--rs-color-border-primary);box-shadow:0 0 0 1px var(--rs-color-border-primary)}.input{align-items:center;-webkit-appearance:none;appearance:none;background:none;border:0;box-sizing:border-box;color:var(--rs-color-foreground-neutral);cursor:pointer;display:flex;flex-grow:1;font-family:var(--rs-font-family-body);font-weight:var(--rs-font-weight-regular);outline:none;padding-inline-end:calc(var(--rs-select-chevron-size) + var(--rs-select-gap) * 2 + var(--rs-unit-x1));padding-inline-start:var(--rs-select-gap);position:relative;width:100%;z-index:1}.input::-ms-expand{display:none}.slot{align-items:center;display:flex;flex-shrink:0;padding-inline-start:var(--rs-select-gap);position:relative;z-index:5}.input .slot{padding-inline-end:var(--rs-select-gap);padding-inline-start:0}.arrow{color:var(--rs-color-foreground-neutral-faded);display:flex;inset-block-start:50%;inset-inline-end:var(--rs-select-gap);pointer-events:none;position:absolute;transform:translateY(-50%);z-index:5}.--size-small{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--size-small .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);padding-block:0}.--size-medium{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--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);padding-block:var(--rs-unit-x1)}.--size-large{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x2)}.--size-xlarge{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x3)}.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)}.root.--placeholder .input{color:var(--rs-color-foreground-neutral-faded)}.root.--disabled{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled)}.root.--disabled .arrow,.root.--disabled .input{color:var(--rs-color-foreground-disabled);cursor:not-allowed}@media (--rs-viewport-s ) and (hover:none){.input{font-size:var(--rs-font-size-body-2)!important}}@media (--rs-viewport-m ){.--size-small--m{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--size-small--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);padding-block:0}.--size-medium--m{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--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);padding-block:var(--rs-unit-x1)}.--size-large--m{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x2)}.--size-xlarge--m{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x3)}}@media (--rs-viewport-l ){.--size-small--l{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--size-small--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);padding-block:0}.--size-medium--l{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--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);padding-block:var(--rs-unit-x1)}.--size-large--l{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x2)}.--size-xlarge--l{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x3)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--size-small--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);padding-block:0}.--size-medium--xl{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--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);padding-block:var(--rs-unit-x1)}.--size-large--xl{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x2)}.--size-xlarge--xl{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x3)}}
1
+ .root{background:var(--rs-color-background-elevation-base);border:1px solid var(--rs-color-border-neutral);display:flex;overflow:hidden;padding:calc(var(--rs-unit-x1) - 1px) 0;position:relative;z-index:0}.root:focus-within{border-color:var(--rs-color-border-primary);box-shadow:0 0 0 1px var(--rs-color-border-primary)}.input{align-items:center;-webkit-appearance:none;appearance:none;background:none;border:0;box-sizing:border-box;color:var(--rs-color-foreground-neutral);cursor:pointer;display:flex;flex-grow:1;font-family:var(--rs-font-family-body);font-weight:var(--rs-font-weight-regular);outline:none;padding-inline-end:calc(var(--rs-select-chevron-size) + var(--rs-select-gap) * 2 + var(--rs-unit-x1));padding-inline-start:var(--rs-select-gap);position:relative;text-overflow:ellipsis;width:100%;z-index:1}.input::-ms-expand{display:none}.slot{align-items:center;display:flex;flex-shrink:0;padding-inline-start:var(--rs-select-gap);position:relative;z-index:5}.input .slot{padding-inline-end:var(--rs-select-gap);padding-inline-start:0}.arrow{color:var(--rs-color-foreground-neutral-faded);display:flex;inset-block-start:50%;inset-inline-end:var(--rs-select-gap);pointer-events:none;position:absolute;transform:translateY(-50%);z-index:5}.--size-small{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--size-small .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);padding-block:0}.--size-medium{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--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);padding-block:var(--rs-unit-x1)}.--size-large{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x2)}.--size-xlarge{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x3)}.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)}.root.--placeholder .input{color:var(--rs-color-foreground-neutral-faded)}.root.--disabled{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled)}.root.--disabled .arrow,.root.--disabled .input{color:var(--rs-color-foreground-disabled);cursor:not-allowed}@media (--rs-viewport-s ) and (hover:none){.input{font-size:var(--rs-font-size-body-2)!important}}@media (--rs-viewport-m ){.--size-small--m{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--size-small--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);padding-block:0}.--size-medium--m{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--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);padding-block:var(--rs-unit-x1)}.--size-large--m{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x2)}.--size-xlarge--m{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x3)}}@media (--rs-viewport-l ){.--size-small--l{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--size-small--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);padding-block:0}.--size-medium--l{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--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);padding-block:var(--rs-unit-x1)}.--size-large--l{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x2)}.--size-xlarge--l{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x3)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--size-small--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);padding-block:0}.--size-medium--xl{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);border-radius:var(--rs-radius-small)}.--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);padding-block:var(--rs-unit-x1)}.--size-large--xl{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x2)}.--size-xlarge--xl{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);border-radius:var(--rs-radius-medium)}.--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);padding-block:var(--rs-unit-x3)}}
@@ -1 +1 @@
1
- @property --rs-tabs-mid-l{syntax:"<length>";initial-value:-24px;inherits:false}@property --rs-tabs-stop-l{syntax:"<length>";initial-value:0;inherits:false}@property --rs-tabs-stop-r{syntax:"<length-percentage>";initial-value:100%;inherits:false}@property --rs-tabs-mid-r{syntax:"<length-percentage>";initial-value:calc(100% + 24px);inherits:false}.root{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)}}
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}@media (hover:hover) and (pointer:fine){.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)}@media (hover:hover) and (pointer:fine){.--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)}}
@@ -0,0 +1,3 @@
1
+ import type * as T from "./ToggleButton.types";
2
+ declare const ToggleButton: React.FC<T.Props>;
3
+ export default ToggleButton;
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import ToggleButtonControlled from "./ToggleButtonControlled.js";
3
+ import ToggleButtonUncontrolled from "./ToggleButtonUncontrolled.js";
4
+ const ToggleButton = (props) => {
5
+ const { checked } = props;
6
+ if (checked !== undefined)
7
+ return _jsx(ToggleButtonControlled, { ...props });
8
+ return _jsx(ToggleButtonUncontrolled, { ...props });
9
+ };
10
+ ToggleButton.displayName = "ToggleButton";
11
+ export default ToggleButton;
@@ -0,0 +1,20 @@
1
+ import type { ButtonProps } from "../Button";
2
+ type BaseProps = Omit<ButtonProps, "variant" | "higlighted"> & {
3
+ variant?: Extract<ButtonProps["variant"], "outline" | "ghost">;
4
+ value?: string;
5
+ onChange?: (args: {
6
+ checked: boolean;
7
+ value: string;
8
+ event: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>;
9
+ }) => void;
10
+ };
11
+ export type ControlledProps = BaseProps & {
12
+ defaultChecked?: never;
13
+ checked: boolean;
14
+ };
15
+ export type UncontrolledProps = BaseProps & {
16
+ defaultChecked?: boolean;
17
+ checked?: never;
18
+ };
19
+ export type Props = ControlledProps | UncontrolledProps;
20
+ export {};
@@ -0,0 +1 @@
1
+ export {};