reshaped 3.6.0-canary.7 → 3.6.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.
Files changed (102) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/dist/bundle.css +1 -1
  3. package/dist/bundle.d.ts +5 -1
  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 +4 -1
  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/index.d.ts +1 -1
  22. package/dist/components/Button/tests/Button.stories.js +39 -6
  23. package/dist/components/Calendar/Calendar.module.css +1 -1
  24. package/dist/components/Card/Card.module.css +1 -1
  25. package/dist/components/Checkbox/Checkbox.module.css +1 -1
  26. package/dist/components/FileUpload/FileUpload.module.css +1 -1
  27. package/dist/components/Flyout/FlyoutControlled.js +1 -1
  28. package/dist/components/Link/Link.module.css +1 -1
  29. package/dist/components/MenuItem/MenuItem.module.css +1 -1
  30. package/dist/components/Modal/tests/Modal.test.stories.js +1 -1
  31. package/dist/components/NumberField/NumberField.module.css +1 -1
  32. package/dist/components/NumberField/NumberFieldControlled.js +3 -1
  33. package/dist/components/NumberField/tests/NumberField.stories.d.ts +1 -0
  34. package/dist/components/NumberField/tests/NumberField.stories.js +24 -6
  35. package/dist/components/Overlay/tests/Overlay.stories.js +3 -3
  36. package/dist/components/Overlay/tests/Overlay.test.stories.js +1 -1
  37. package/dist/components/Radio/Radio.module.css +1 -1
  38. package/dist/components/Resizable/Resizable.js +5 -27
  39. package/dist/components/Resizable/Resizable.module.css +1 -1
  40. package/dist/components/Resizable/Resizable.types.d.ts +5 -2
  41. package/dist/components/Resizable/ResizableHandle.d.ts +5 -0
  42. package/dist/components/Resizable/ResizableHandle.js +32 -0
  43. package/dist/components/Resizable/tests/Resizable.stories.d.ts +22 -1
  44. package/dist/components/Resizable/tests/Resizable.stories.js +154 -65
  45. package/dist/components/Select/Select.js +1 -1
  46. package/dist/components/Select/Select.module.css +1 -1
  47. package/dist/components/Slider/tests/Slider.stories.js +0 -6
  48. package/dist/components/Tabs/Tabs.module.css +1 -1
  49. package/dist/components/Tabs/TabsPanel.d.ts +1 -0
  50. package/dist/components/Tabs/TabsPanel.js +22 -1
  51. package/dist/components/Tabs/tests/Tabs.stories.js +24 -1
  52. package/dist/components/TextField/TextField.module.css +1 -1
  53. package/dist/components/ToggleButton/ToggleButton.d.ts +3 -0
  54. package/dist/components/ToggleButton/ToggleButton.js +11 -0
  55. package/dist/components/ToggleButton/ToggleButton.types.d.ts +20 -0
  56. package/dist/components/ToggleButton/ToggleButton.types.js +1 -0
  57. package/dist/components/ToggleButton/ToggleButtonControlled.d.ts +3 -0
  58. package/dist/components/ToggleButton/ToggleButtonControlled.js +22 -0
  59. package/dist/components/ToggleButton/ToggleButtonUncontrolled.d.ts +3 -0
  60. package/dist/components/ToggleButton/ToggleButtonUncontrolled.js +15 -0
  61. package/dist/components/ToggleButton/index.d.ts +2 -0
  62. package/dist/components/ToggleButton/index.js +1 -0
  63. package/dist/components/ToggleButton/tests/ToggleButton.stories.d.ts +23 -0
  64. package/dist/components/ToggleButton/tests/ToggleButton.stories.js +87 -0
  65. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.context.d.ts +5 -0
  66. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.context.js +5 -0
  67. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.d.ts +3 -0
  68. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.js +11 -0
  69. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.types.d.ts +24 -0
  70. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.types.js +1 -0
  71. package/dist/components/ToggleButtonGroup/ToggleButtonGroupControlled.d.ts +4 -0
  72. package/dist/components/ToggleButtonGroup/ToggleButtonGroupControlled.js +67 -0
  73. package/dist/components/ToggleButtonGroup/ToggleButtonGroupUncontrolled.d.ts +4 -0
  74. package/dist/components/ToggleButtonGroup/ToggleButtonGroupUncontrolled.js +18 -0
  75. package/dist/components/ToggleButtonGroup/index.d.ts +3 -0
  76. package/dist/components/ToggleButtonGroup/index.js +2 -0
  77. package/dist/components/ToggleButtonGroup/tests/ToggleButtonGroup.stories.d.ts +22 -0
  78. package/dist/components/ToggleButtonGroup/tests/ToggleButtonGroup.stories.js +129 -0
  79. package/dist/hooks/tests/useDrag.stories.js +1 -1
  80. package/dist/hooks/tests/useToggle.stories.js +1 -1
  81. package/dist/hooks/useToggle.d.ts +1 -1
  82. package/dist/hooks/useToggle.js +2 -2
  83. package/dist/index.d.ts +5 -1
  84. package/dist/index.js +2 -0
  85. package/dist/styles/bleed/bleed.module.css +1 -1
  86. package/dist/themes/_generator/definitions/slate.d.ts +2 -2
  87. package/dist/themes/_generator/tokens/color/color.transforms.js +7 -5
  88. package/dist/themes/_generator/tokens/color/color.types.d.ts +3 -2
  89. package/dist/themes/_generator/tokens/color/utilities/convert.d.ts +1 -1
  90. package/dist/themes/_generator/tokens/color/utilities/generateColors.d.ts +2 -2
  91. package/dist/themes/_generator/tokens/color/utilities/generateColors.js +1 -1
  92. package/dist/themes/_generator/tokens/color/utilities/generateMetaColors.d.ts +2 -2
  93. package/dist/themes/_generator/tokens/shadow/shadow.transforms.js +1 -1
  94. package/dist/themes/_generator/tokens/types.d.ts +7 -4
  95. package/dist/themes/_generator/transform.js +4 -1
  96. package/dist/themes/slate/theme.css +1 -1
  97. package/dist/types/config.d.ts +1 -0
  98. package/dist/utilities/a11y/index.d.ts +1 -1
  99. package/dist/utilities/a11y/index.js +1 -1
  100. package/package.json +27 -27
  101. package/dist/components/Resizable/tests/Resizable.test.stories.d.ts +0 -18
  102. package/dist/components/Resizable/tests/Resizable.test.stories.js +0 -25
@@ -0,0 +1,129 @@
1
+ import { expect, fn, userEvent } from "storybook/test";
2
+ import { Example } from "../../../utilities/storybook/index.js";
3
+ import ToggleButtonGroup from "../index.js";
4
+ import ToggleButton from "../../ToggleButton/index.js";
5
+ export default {
6
+ title: "Components/ToggleButtonGroup",
7
+ component: ToggleButtonGroup,
8
+ parameters: {
9
+ iframe: {
10
+ url: "https://reshaped.so/docs/components/toggle-button-group",
11
+ },
12
+ },
13
+ };
14
+ export const single = {
15
+ name: "checked, defaultChecked, onChange",
16
+ args: {
17
+ handleUncontrolledChange: fn(),
18
+ handleControlledChange: fn(),
19
+ handleItemChange: fn(),
20
+ },
21
+ render: (args) => (<Example>
22
+ <Example.Item title="single, uncontrolled, onChange">
23
+ <ToggleButtonGroup onChange={args.handleUncontrolledChange}>
24
+ <ToggleButton value="1" onChange={args.handleItemChange}>
25
+ Button
26
+ </ToggleButton>
27
+ <ToggleButton value="2">Button</ToggleButton>
28
+ </ToggleButtonGroup>
29
+ </Example.Item>
30
+ <Example.Item title="single, controlled, onChange">
31
+ <ToggleButtonGroup onChange={args.handleControlledChange} value={[]}>
32
+ <ToggleButton value="3" onChange={args.handleItemChange}>
33
+ Button
34
+ </ToggleButton>
35
+ <ToggleButton value="4">Button</ToggleButton>
36
+ </ToggleButtonGroup>
37
+ </Example.Item>
38
+ </Example>),
39
+ play: async ({ canvas, args }) => {
40
+ const [uncontrolledButton1, uncontrolledButton2, controlledButton1, controlledButton2] = canvas.getAllByRole("button");
41
+ await userEvent.click(uncontrolledButton1);
42
+ expect(args.handleUncontrolledChange).toHaveBeenCalledTimes(1);
43
+ expect(args.handleUncontrolledChange).toHaveBeenLastCalledWith({
44
+ value: ["1"],
45
+ event: expect.objectContaining({ target: uncontrolledButton1 }),
46
+ });
47
+ await userEvent.click(uncontrolledButton2);
48
+ expect(args.handleUncontrolledChange).toHaveBeenCalledTimes(2);
49
+ expect(args.handleUncontrolledChange).toHaveBeenLastCalledWith({
50
+ value: ["2"],
51
+ event: expect.objectContaining({ target: uncontrolledButton2 }),
52
+ });
53
+ await userEvent.click(controlledButton1);
54
+ expect(args.handleControlledChange).toHaveBeenCalledTimes(1);
55
+ expect(args.handleControlledChange).toHaveBeenLastCalledWith({
56
+ value: ["3"],
57
+ event: expect.objectContaining({ target: controlledButton1 }),
58
+ });
59
+ await userEvent.click(controlledButton2);
60
+ expect(args.handleControlledChange).toHaveBeenCalledTimes(2);
61
+ expect(args.handleControlledChange).toHaveBeenLastCalledWith({
62
+ value: ["4"],
63
+ event: expect.objectContaining({ target: controlledButton2 }),
64
+ });
65
+ expect(args.handleItemChange).not.toHaveBeenCalled();
66
+ },
67
+ };
68
+ export const multiple = {
69
+ name: "selectionMode, checked, defaultChecked, onChange",
70
+ args: {
71
+ handleUncontrolledChange: fn(),
72
+ handleControlledChange: fn(),
73
+ },
74
+ render: (args) => (<Example>
75
+ <Example.Item title="multiple, uncontrolled, onChange">
76
+ <ToggleButtonGroup onChange={args.handleUncontrolledChange} selectionMode="multiple">
77
+ <ToggleButton value="1">Button</ToggleButton>
78
+ <ToggleButton value="2">Button</ToggleButton>
79
+ </ToggleButtonGroup>
80
+ </Example.Item>
81
+ <Example.Item title="multiple, controlled, onChange">
82
+ <ToggleButtonGroup onChange={args.handleControlledChange} value={[]} selectionMode="multiple">
83
+ <ToggleButton value="3">Button</ToggleButton>
84
+ <ToggleButton value="4">Button</ToggleButton>
85
+ </ToggleButtonGroup>
86
+ </Example.Item>
87
+ </Example>),
88
+ play: async ({ canvas, args }) => {
89
+ const [uncontrolledButton1, uncontrolledButton2, controlledButton1, controlledButton2] = canvas.getAllByRole("button");
90
+ await userEvent.click(uncontrolledButton1);
91
+ expect(args.handleUncontrolledChange).toHaveBeenCalledTimes(1);
92
+ expect(args.handleUncontrolledChange).toHaveBeenLastCalledWith({
93
+ value: ["1"],
94
+ event: expect.objectContaining({ target: uncontrolledButton1 }),
95
+ });
96
+ await userEvent.click(uncontrolledButton2);
97
+ expect(args.handleUncontrolledChange).toHaveBeenCalledTimes(2);
98
+ expect(args.handleUncontrolledChange).toHaveBeenLastCalledWith({
99
+ value: ["1", "2"],
100
+ event: expect.objectContaining({ target: uncontrolledButton2 }),
101
+ });
102
+ await userEvent.click(controlledButton1);
103
+ expect(args.handleControlledChange).toHaveBeenCalledTimes(1);
104
+ expect(args.handleControlledChange).toHaveBeenLastCalledWith({
105
+ value: ["3"],
106
+ event: expect.objectContaining({ target: controlledButton1 }),
107
+ });
108
+ await userEvent.click(controlledButton2);
109
+ expect(args.handleControlledChange).toHaveBeenCalledTimes(2);
110
+ expect(args.handleControlledChange).toHaveBeenLastCalledWith({
111
+ value: ["4"],
112
+ event: expect.objectContaining({ target: controlledButton2 }),
113
+ });
114
+ },
115
+ };
116
+ export const className = {
117
+ name: "className, attributes",
118
+ render: () => (<div data-testid="root">
119
+ <ToggleButtonGroup className="test-classname" attributes={{ id: "test-id" }}>
120
+ <ToggleButton>Button 1</ToggleButton>
121
+ <ToggleButton>Button 1</ToggleButton>
122
+ </ToggleButtonGroup>
123
+ </div>),
124
+ play: async ({ canvas }) => {
125
+ const root = canvas.getByTestId("root").firstChild;
126
+ expect(root).toHaveClass("test-classname");
127
+ expect(root).toHaveAttribute("id", "test-id");
128
+ },
129
+ };
@@ -28,7 +28,7 @@ function Example() {
28
28
  style: { translate: `${state.x}px ${state.y}px`, cursor: active ? "grabbing" : "grab" },
29
29
  }}/>
30
30
  </View>
31
- <Button onClick={disabledToggle.toggle}>
31
+ <Button onClick={() => disabledToggle.toggle()}>
32
32
  {disabledToggle.active ? "Enable" : "Disable"}
33
33
  </Button>
34
34
  </View>);
@@ -12,7 +12,7 @@ export const toggle = {
12
12
  name: "toggle",
13
13
  render: () => {
14
14
  const { toggle, active } = useToggle();
15
- return (<Button onClick={toggle} attributes={{ "data-active": active }}>
15
+ return (<Button onClick={() => toggle()} attributes={{ "data-active": active }}>
16
16
  {active ? "Deactivate" : "Activate"}
17
17
  </Button>);
18
18
  },
@@ -2,6 +2,6 @@ declare const useToggle: (defaultValue?: boolean) => {
2
2
  active: boolean;
3
3
  activate: () => void;
4
4
  deactivate: () => void;
5
- toggle: () => void;
5
+ toggle: (targetValue?: boolean) => void;
6
6
  };
7
7
  export default useToggle;
@@ -8,8 +8,8 @@ const useToggle = (defaultValue) => {
8
8
  const deactivate = React.useCallback(() => {
9
9
  setActive(false);
10
10
  }, []);
11
- const toggle = React.useCallback(() => {
12
- setActive((active) => !active);
11
+ const toggle = React.useCallback((targetValue) => {
12
+ setActive(targetValue ?? ((active) => !active));
13
13
  }, []);
14
14
  return React.useMemo(() => ({ active, activate, deactivate, toggle }), [activate, deactivate, toggle, active]);
15
15
  };
package/dist/index.d.ts CHANGED
@@ -12,7 +12,7 @@ export type { AvatarProps } from "./components/Avatar";
12
12
  export { default as Badge } from "./components/Badge";
13
13
  export type { BadgeProps } from "./components/Badge";
14
14
  export { default as Button } from "./components/Button";
15
- export type { ButtonProps, ButtonAlignerProps } from "./components/Button";
15
+ export type { ButtonProps, ButtonAlignerProps, ButtonGroupProps } from "./components/Button";
16
16
  export { default as Breadcrumbs } from "./components/Breadcrumbs";
17
17
  export type { BreadcrumbsProps } from "./components/Breadcrumbs";
18
18
  export { default as Calendar } from "./components/Calendar";
@@ -83,6 +83,10 @@ export { default as Timeline } from "./components/Timeline";
83
83
  export type { TimelineProps, TimelineItemProps } from "./components/Timeline";
84
84
  export { useToast, ToastProvider } from "./components/Toast";
85
85
  export type { ToastProps, ToastProviderProps, ToastShowProps } from "./components/Toast";
86
+ export { default as ToggleButton } from "./components/ToggleButton";
87
+ export type { ToggleButtonProps } from "./components/ToggleButton";
88
+ export { default as ToggleButtonGroup } from "./components/ToggleButtonGroup";
89
+ export type { ToggleButtonGroupProps } from "./components/ToggleButtonGroup";
86
90
  export { default as Tooltip } from "./components/Tooltip";
87
91
  export type { TooltipProps } from "./components/Tooltip";
88
92
  /**
package/dist/index.js CHANGED
@@ -42,6 +42,8 @@ export { default as TextArea } from "./components/TextArea/index.js";
42
42
  export { default as TextField } from "./components/TextField/index.js";
43
43
  export { default as Timeline } from "./components/Timeline/index.js";
44
44
  export { useToast, ToastProvider } from "./components/Toast/index.js";
45
+ export { default as ToggleButton } from "./components/ToggleButton/index.js";
46
+ export { default as ToggleButtonGroup } from "./components/ToggleButtonGroup/index.js";
45
47
  export { default as Tooltip } from "./components/Tooltip/index.js";
46
48
  /**
47
49
  * Utility components
@@ -1 +1 @@
1
- .root[style*="--rs-bleed-"]{margin-left:calc(var(--rs-unit-x1) * var(--rs-bleed) * -1);margin-right:calc(var(--rs-unit-x1) * var(--rs-bleed) * -1);--rs-bleed-s:0;--rs-bleed-m:var(--rs-bleed-s);--rs-bleed-l:var(--rs-bleed-m);--rs-bleed-xl:var(--rs-bleed-l);--rs-bleed:var(--rs-bleed-s)}.--bleed{border-left-style:none!important;border-radius:0;border-right-style:none!important}@media (--rs-viewport-m ){.root[style*="--rs-bleed-"]{--rs-bleed:var(--rs-bleed-m)}.--bleed-true--m{border-left-style:none!important;border-radius:0;border-right-style:none!important}.--bleed-false--m{border-left-style:solid!important;border-radius:var(--rs-radius);border-right-style:solid!important}}@media (--rs-viewport-l ){.root[style*="--rs-bleed-"]{--rs-bleed:var(--rs-bleed-l)}.--bleed-true--l{border-left-style:none!important;border-radius:0;border-right-style:none!important}.--bleed-false--l{border-left-style:solid!important;border-radius:var(--rs-radius);border-right-style:solid!important}}@media (--rs-viewport-xl ){.root[style*="--rs-bleed-"]{--rs-bleed:var(--rs-bleed-xl)}.--bleed-true--xl{border-left-style:none!important;border-radius:0;border-right-style:none!important}.--bleed-false--xl{border-left-style:solid!important;border-radius:var(--rs-radius);border-right-style:solid!important}}
1
+ .root[style*="--rs-bleed-"]{margin-left:calc(var(--rs-unit-x1) * var(--rs-bleed) * -1);margin-right:calc(var(--rs-unit-x1) * var(--rs-bleed) * -1);--rs-bleed-s:0;--rs-bleed-m:var(--rs-bleed-s);--rs-bleed-l:var(--rs-bleed-m);--rs-bleed-xl:var(--rs-bleed-l);--rs-bleed:var(--rs-bleed-s)}.--bleed{border-left-style:none!important;border-radius:0!important;border-right-style:none!important}@media (--rs-viewport-m ){.root[style*="--rs-bleed-"]{--rs-bleed:var(--rs-bleed-m)}.--bleed-true--m{border-left-style:none!important;border-radius:0!important;border-right-style:none!important}.--bleed-false--m{border-left-style:solid!important;border-radius:var(--rs-radius)!important;border-right-style:solid!important}}@media (--rs-viewport-l ){.root[style*="--rs-bleed-"]{--rs-bleed:var(--rs-bleed-l)}.--bleed-true--l{border-left-style:none!important;border-radius:0!important;border-right-style:none!important}.--bleed-false--l{border-left-style:solid!important;border-radius:var(--rs-radius)!important;border-right-style:solid!important}}@media (--rs-viewport-xl ){.root[style*="--rs-bleed-"]{--rs-bleed:var(--rs-bleed-xl)}.--bleed-true--xl{border-left-style:none!important;border-radius:0!important;border-right-style:none!important}.--bleed-false--xl{border-left-style:solid!important;border-radius:var(--rs-radius)!important;border-right-style:solid!important}}
@@ -1,3 +1,3 @@
1
- import type { ThemeDefinition } from "../tokens/types";
2
- declare const theme: ThemeDefinition;
1
+ import type { PassedThemeDefinition } from "../tokens/types";
2
+ declare const theme: PassedThemeDefinition;
3
3
  export default theme;
@@ -1,6 +1,6 @@
1
- const transformTokenForMode = (args) => {
1
+ const transformTokenForMode = (args, themeOptions) => {
2
2
  const { hex, oklch } = args;
3
- if (oklch) {
3
+ if (oklch && themeOptions?.colorOutputFormat !== "hex") {
4
4
  const components = `${Number(oklch.l.toFixed(4))} ${Number(oklch.c.toFixed(4))} ${Number(oklch.h?.toFixed(4) || 0)}`;
5
5
  const alphaSuffix = oklch?.alpha === undefined ? "" : ` / ${Number(oklch.alpha.toFixed(4))}`;
6
6
  return `oklch(${components}${alphaSuffix})`;
@@ -9,12 +9,14 @@ const transformTokenForMode = (args) => {
9
9
  return hex;
10
10
  throw new Error(`[Reshaped] ${JSON.stringify(args)} is missing a color value`);
11
11
  };
12
- const transformToken = (name, token) => {
12
+ const transformToken = (name, token, { themeOptions }) => {
13
13
  const { hex, hexDark, oklch, oklchDark } = token;
14
14
  // Apply color to both modes if dark mode is not available
15
15
  const hasDark = !!hexDark || !!oklchDark;
16
- const value = transformTokenForMode({ oklch, hex });
17
- const darkValue = hasDark ? transformTokenForMode({ oklch: oklchDark, hex: hexDark }) : undefined;
16
+ const value = transformTokenForMode({ oklch, hex }, themeOptions);
17
+ const darkValue = hasDark
18
+ ? transformTokenForMode({ oklch: oklchDark, hex: hexDark }, themeOptions)
19
+ : undefined;
18
20
  const separateModes = hasDark && value !== darkValue;
19
21
  const defaultMode = separateModes ? "light" : undefined;
20
22
  const result = [
@@ -10,7 +10,7 @@ export type RgbColor = {
10
10
  };
11
11
  export type OklchColor = Omit<Oklch, "mode">;
12
12
  export type HexColor = string;
13
- export type ColorValue = HexColor | Token;
13
+ export type ColorValue = HexColor | PassedToken;
14
14
  export type OklchOnlyToken = {
15
15
  oklch: OklchColor;
16
16
  oklchDark?: OklchColor;
@@ -25,8 +25,9 @@ export type HexToken = {
25
25
  oklch?: never;
26
26
  oklchDark?: never;
27
27
  };
28
- export type Token = OklchToken | HexToken;
28
+ export type PassedToken = HexToken | OklchToken;
29
29
  export type InternalToken = {
30
30
  oklch: Oklch;
31
31
  oklchDark?: Oklch;
32
32
  };
33
+ export type Token = Pick<HexToken, "hex" | "hexDark"> & Partial<OklchOnlyToken>;
@@ -8,4 +8,4 @@ export declare const oklchToRgb: (oklch: Oklch) => {
8
8
  mode: "rgb";
9
9
  alpha?: number;
10
10
  };
11
- export declare const tokenToOklchToken: (token: TColor.Token) => TColor.InternalToken;
11
+ export declare const tokenToOklchToken: (token: TColor.PassedToken) => TColor.InternalToken;
@@ -1,4 +1,4 @@
1
- import type { ThemeDefinition } from "../../types";
1
+ import type { PassedThemeDefinition } from "../../types";
2
2
  import { type ColorValue, Hue } from "../color.types";
3
- declare const generateColors: (args?: Partial<Record<Hue, ColorValue>>) => ThemeDefinition["color"];
3
+ declare const generateColors: (args?: Partial<Record<Hue, ColorValue>>) => NonNullable<PassedThemeDefinition["color"]>;
4
4
  export default generateColors;
@@ -135,7 +135,7 @@ const getOklchToken = (color) => {
135
135
  return tokenToOklchToken(token);
136
136
  };
137
137
  const generateColors = (args = {}) => {
138
- const { primary = { oklch: { l: 0.55, c: 0.24, h: 262.67 } }, critical = { oklch: { l: 0.59, c: 0.22, h: 26.97 } }, warning = { oklch: { l: 0.86, c: 0.18, h: 89.84 } }, positive = { oklch: { l: 0.53, c: 0.13, h: 153.78 } }, neutral = { oklch: { l: 0.92, c: 0.01, h: 262.67 } }, brand, } = args;
138
+ const { primary = { oklch: { l: 0.55, c: 0.24, h: 262.67 } }, critical = { oklch: { l: 0.59, c: 0.22, h: 26.97 } }, warning = { oklch: { l: 0.83, c: 0.2, h: 80 } }, positive = { oklch: { l: 0.53, c: 0.13, h: 153.78 } }, neutral = { oklch: { l: 0.92, c: 0.01, h: 262.67 } }, brand, } = args;
139
139
  return {
140
140
  ...generateColorValues("primary", getOklchToken(primary)),
141
141
  ...generateColorValues("critical", getOklchToken(critical)),
@@ -1,4 +1,4 @@
1
1
  import type * as T from "../../../types";
2
- import { GeneratedThemeDefinition, PassedThemeDefinition } from "../../types";
3
- declare const generateMetaColors: (definition: PassedThemeDefinition, themeOptions?: T.PublicOptions["themeOptions"]) => GeneratedThemeDefinition["color"] | undefined;
2
+ import { PassedThemeDefinition } from "../../types";
3
+ declare const generateMetaColors: (definition: PassedThemeDefinition, themeOptions?: T.PublicOptions["themeOptions"]) => PassedThemeDefinition["color"] | undefined;
4
4
  export default generateMetaColors;
@@ -1,5 +1,5 @@
1
1
  import { hexToOklch, oklchToRgb } from "../color/utilities/convert.js";
2
- const transformToken = (name, token, theme) => [
2
+ const transformToken = (name, token, { theme }) => [
3
3
  {
4
4
  name,
5
5
  tokenType: "shadow",
@@ -8,7 +8,7 @@ import type * as TShadow from "./shadow/shadow.types";
8
8
  import type * as TUnit from "./unit/unit.types";
9
9
  import type * as TRadius from "./radius/radius.types";
10
10
  import type * as TViewport from "./viewport/viewport.types";
11
- import { PartialDeep } from "../types";
11
+ import { PartialDeep, PrivateOptions } from "../types";
12
12
  export type TokenType = "fontFamily" | "fontWeight" | "unit" | "radius" | "viewport" | "font" | "color" | "duration" | "easing" | "shadow";
13
13
  type TokenSet<Name extends string, Token> = Record<Name, Token> & {
14
14
  [tokenName: string]: Token;
@@ -22,7 +22,7 @@ export type ThemeDefinition = {
22
22
  fontFamily: TokenSet<TFontFamily.Name, TFontFamily.Token>;
23
23
  fontWeight: TokenSet<TFontWeight.Name, TFontWeight.Token>;
24
24
  font: TokenSet<TFont.Name, TFont.Token>;
25
- color: TokenSet<TColor.Name, TColor.Token>;
25
+ color: TokenSet<TColor.Name, TColor.PassedToken>;
26
26
  duration: TokenSet<TDuration.Name, TDuration.Token>;
27
27
  easing: TokenSet<TEasing.Name, TEasing.Token>;
28
28
  shadow: TokenSet<TShadow.Name, TShadow.Token>;
@@ -33,7 +33,7 @@ export type ThemeDefinition = {
33
33
  * but also might include custom "on" colors
34
34
  */
35
35
  export type PassedThemeDefinition = Omit<PartialDeep<ThemeDefinition>, "color"> & {
36
- color?: Partial<TokenSet<TColor.Name | TColor.GeneratedOnName, TColor.Token>>;
36
+ color?: Partial<TokenSet<TColor.Name | TColor.GeneratedOnName, TColor.PassedToken>>;
37
37
  };
38
38
  /**
39
39
  * Theme generation output which includes all generated tokens
@@ -53,5 +53,8 @@ export type TransformedToken = {
53
53
  private?: boolean;
54
54
  viewport?: string;
55
55
  };
56
- export type Transformer<Token> = (name: string, token: Token, theme: GeneratedThemeDefinition) => TransformedToken[];
56
+ export type Transformer<Token> = (name: string, token: Token, options: {
57
+ theme: GeneratedThemeDefinition;
58
+ themeOptions: PrivateOptions["themeOptions"];
59
+ }) => TransformedToken[];
57
60
  export {};
@@ -52,7 +52,10 @@ const transform = (name, definition, options) => {
52
52
  return;
53
53
  const transform = transforms.css[tokenType];
54
54
  Object.entries(tokenValues).forEach(([tokenName, token]) => {
55
- const transformedTokens = transform(tokenName, token, theme);
55
+ const transformedTokens = transform(tokenName, token, {
56
+ theme,
57
+ themeOptions: options.themeOptions,
58
+ });
56
59
  transformedTokens.forEach((transformedToken) => {
57
60
  transformedStorage[transformedToken.type].push(transformedToken);
58
61
  });
@@ -1 +1 @@
1
- [data-rs-theme=slate]{--rs-font-family-title:Inter,BlinkMacSystemFont,-apple-system,Roboto,Helvetica,Arial,sans-serif;--rs-font-family-body:Inter,BlinkMacSystemFont,-apple-system,Roboto,Helvetica,Arial,sans-serif;--rs-font-weight-regular:400;--rs-font-weight-medium:500;--rs-font-weight-semibold:600;--rs-font-weight-bold:700;--rs-font-weight-extrabold:800;--rs-font-weight-black:900;--rs-font-size-title-1:6rem;--rs-line-height-title-1:6.25rem;--rs-font-family-title-1:var(--rs-font-family-title);--rs-font-weight-title-1:var(--rs-font-weight-extrabold);--rs-letter-spacing-title-1:normal;--rs-font-size-title-2:5rem;--rs-line-height-title-2:5.25rem;--rs-font-family-title-2:var(--rs-font-family-title);--rs-font-weight-title-2:var(--rs-font-weight-extrabold);--rs-letter-spacing-title-2:normal;--rs-font-size-title-3:4rem;--rs-line-height-title-3:4.25rem;--rs-font-family-title-3:var(--rs-font-family-title);--rs-font-weight-title-3:var(--rs-font-weight-extrabold);--rs-letter-spacing-title-3:normal;--rs-font-size-title-4:3.5rem;--rs-line-height-title-4:3.75rem;--rs-font-family-title-4:var(--rs-font-family-title);--rs-font-weight-title-4:var(--rs-font-weight-bold);--rs-letter-spacing-title-4:normal;--rs-font-size-title-5:3rem;--rs-line-height-title-5:3.25rem;--rs-font-family-title-5:var(--rs-font-family-title);--rs-font-weight-title-5:var(--rs-font-weight-bold);--rs-letter-spacing-title-5:normal;--rs-font-size-title-6:2.25rem;--rs-line-height-title-6:2.5rem;--rs-font-family-title-6:var(--rs-font-family-title);--rs-font-weight-title-6:var(--rs-font-weight-bold);--rs-letter-spacing-title-6:normal;--rs-font-size-featured-1:2rem;--rs-line-height-featured-1:2.5rem;--rs-font-family-featured-1:var(--rs-font-family-body);--rs-letter-spacing-featured-1:normal;--rs-font-size-featured-2:1.5rem;--rs-line-height-featured-2:2rem;--rs-font-family-featured-2:var(--rs-font-family-body);--rs-letter-spacing-featured-2:normal;--rs-font-size-featured-3:1.25rem;--rs-line-height-featured-3:1.75rem;--rs-font-family-featured-3:var(--rs-font-family-body);--rs-letter-spacing-featured-3:normal;--rs-font-size-body-1:1.125rem;--rs-line-height-body-1:1.75rem;--rs-font-family-body-1:var(--rs-font-family-body);--rs-letter-spacing-body-1:normal;--rs-font-size-body-2:1rem;--rs-line-height-body-2:1.5rem;--rs-font-family-body-2:var(--rs-font-family-body);--rs-letter-spacing-body-2:normal;--rs-font-size-body-3:0.875rem;--rs-line-height-body-3:1.25rem;--rs-font-family-body-3:var(--rs-font-family-body);--rs-letter-spacing-body-3:normal;--rs-font-size-caption-1:0.75rem;--rs-line-height-caption-1:1rem;--rs-font-family-caption-1:var(--rs-font-family-body);--rs-letter-spacing-caption-1:normal;--rs-font-size-caption-2:0.625rem;--rs-line-height-caption-2:0.75rem;--rs-font-family-caption-2:var(--rs-font-family-body);--rs-letter-spacing-caption-2:normal;--rs-unit-base:4px;--rs-unit-x1:4px;--rs-unit-x2:8px;--rs-unit-x3:12px;--rs-unit-x4:16px;--rs-unit-x5:20px;--rs-unit-x6:24px;--rs-unit-x7:28px;--rs-unit-x8:32px;--rs-unit-x9:36px;--rs-unit-x10:40px;--rs-radius-small:4px;--rs-radius-medium:8px;--rs-radius-large:12px;--rs-color-brand:oklch(0.55 0.24 262.67);--rs-color-white:oklch(1 0 0);--rs-color-black:oklch(0 0 0);--rs-color-on-background-primary:oklch(1 0 0);--rs-color-on-background-critical:oklch(1 0 0);--rs-color-on-background-warning:oklch(0 0 0);--rs-color-on-background-positive:oklch(1 0 0);--rs-color-on-brand:oklch(1 0 0);--rs-color-rgb-white:255,255,255;--rs-color-rgb-black:0,0,0;--rs-duration-rapid:100ms;--rs-duration-fast:200ms;--rs-duration-medium:300ms;--rs-duration-slow:400ms;--rs-easing-standard:cubic-bezier(0.4,0,0.2,1);--rs-easing-accelerate:cubic-bezier(0.4,0,1,1);--rs-easing-decelerate:cubic-bezier(0,0,0.2,1);--rs-shadow-raised:0px 1px 5px -4px rgba(0,0,0,.5),0px 4px 8px 0px rgba(0,0,0,.05);--rs-shadow-overlay:0px 5px 10px 0px rgba(0,0,0,.05),0px 15px 25px 0px rgba(0,0,0,.07);--rs-viewport-m-min:660;--rs-viewport-l-min:900;--rs-viewport-xl-min:1280}[data-rs-theme=slate][data-rs-color-mode=light]{--rs-color-background-primary:oklch(0.55 0.24 262.67);--rs-color-background-primary-faded:oklch(0.97 0.02 262.67);--rs-color-border-primary:oklch(0.47 0.24 262.67);--rs-color-border-primary-faded:oklch(0.92 0.03 262.67);--rs-color-foreground-primary:oklch(0.5 0.24 262.67);--rs-color-background-critical:oklch(0.59 0.22 26.97);--rs-color-background-critical-faded:oklch(0.97 0.02 26.97);--rs-color-border-critical:oklch(0.51 0.22 26.97);--rs-color-border-critical-faded:oklch(0.92 0.03 26.97);--rs-color-foreground-critical:oklch(0.5 0.22 26.97);--rs-color-background-warning:oklch(0.86 0.18 89.84);--rs-color-background-warning-faded:oklch(0.97 0.04 89.84);--rs-color-border-warning:oklch(0.78 0.18 89.84);--rs-color-border-warning-faded:oklch(0.92 0.05 89.84);--rs-color-foreground-warning:oklch(0.5 0.18 89.84);--rs-color-background-positive:oklch(0.53 0.13 153.78);--rs-color-background-positive-faded:oklch(0.97 0.02 153.78);--rs-color-border-positive:oklch(0.45 0.13 153.78);--rs-color-border-positive-faded:oklch(0.92 0.03 153.78);--rs-color-foreground-positive:oklch(0.5 0.13 153.78);--rs-color-background-neutral:oklch(0.92 0.01 262.67);--rs-color-background-neutral-faded:oklch(0.97 0.005 262.67);--rs-color-border-neutral:oklch(0 0.01 262.67/0.12);--rs-color-border-neutral-faded:oklch(0 0.005 262.67/0.08);--rs-color-foreground-neutral:oklch(0.2 0.01 262.67);--rs-color-foreground-neutral-faded:oklch(0.45 0.01 262.67);--rs-color-background-disabled:oklch(0.95 0 262.67);--rs-color-background-disabled-faded:oklch(0.98 0 262.67);--rs-color-border-disabled:oklch(0 0.01 262.67/0.06);--rs-color-foreground-disabled:oklch(0.84 0 262.67);--rs-color-background-elevation-base:oklch(1 0 262.67);--rs-color-background-elevation-raised:oklch(1 0 262.67);--rs-color-background-elevation-overlay:oklch(1 0 262.67);--rs-color-background-page:oklch(1 0 262.67);--rs-color-background-page-faded:oklch(0.97 0 262.67);--rs-color-rgb-background-primary:23.536499999999997,95.6505,250.1295;--rs-color-rgb-background-primary-faded:238.017,245.4885,259.182;--rs-color-rgb-background-critical:226.593,39.168,41.0295;--rs-color-rgb-background-critical-faded:258.5445,240.3885,237.8895;--rs-color-rgb-background-warning:254.92350000000002,201.5775,-26.724;--rs-color-rgb-background-warning-faded:255.612,244.596,215.2965;--rs-color-rgb-background-positive:14.177999999999999,128.673,70.788;--rs-color-rgb-background-positive-faded:235.4415,249.3645,239.0115;--rs-color-on-background-neutral:oklch(0 0 0);--rs-color-rgb-background-neutral:224.96099999999998,228.6585,235.416;--rs-color-rgb-background-neutral-faded:243.219,245.10600000000002,248.523;--rs-color-rgb-background-disabled:238.29749999999999,238.29749999999999,238.29749999999999;--rs-color-rgb-background-disabled-faded:248.2935,248.2935,248.2935;--rs-color-rgb-background-elevation-base:255,255,255;--rs-color-rgb-background-elevation-raised:255,255,255;--rs-color-rgb-background-elevation-overlay:255,255,255;--rs-color-rgb-background-page:255,255,255;--rs-color-rgb-background-page-faded:244.953,244.953,244.953}[data-rs-theme=slate][data-rs-color-mode=dark]{--rs-color-background-primary:oklch(0.5498 0.192 262.67);--rs-color-background-primary-faded:oklch(0.25 0.0384 262.67);--rs-color-border-primary:oklch(0.6298 0.192 262.67);--rs-color-border-primary-faded:oklch(0.35 0.0384 262.67);--rs-color-foreground-primary:oklch(0.75 0.204 262.67);--rs-color-background-critical:oklch(0.5874 0.176 26.97);--rs-color-background-critical-faded:oklch(0.25 0.0352 26.97);--rs-color-border-critical:oklch(0.6674 0.176 26.97);--rs-color-border-critical-faded:oklch(0.35 0.0352 26.97);--rs-color-foreground-critical:oklch(0.75 0.187 26.97);--rs-color-background-warning:oklch(0.8036 0.144 89.84);--rs-color-background-warning-faded:oklch(0.25 0.0288 89.84);--rs-color-border-warning:oklch(0.8836 0.144 89.84);--rs-color-border-warning-faded:oklch(0.35 0.0288 89.84);--rs-color-foreground-warning:oklch(0.75 0.153 89.84);--rs-color-background-positive:oklch(0.5162 0.104 153.78);--rs-color-background-positive-faded:oklch(0.25 0.0208 153.78);--rs-color-border-positive:oklch(0.5962 0.104 153.78);--rs-color-border-positive-faded:oklch(0.35 0.0208 153.78);--rs-color-foreground-positive:oklch(0.75 0.1105 153.78);--rs-color-background-neutral:oklch(0.36 0.008 262.67);--rs-color-background-neutral-faded:oklch(0.25 0.01 262.67);--rs-color-border-neutral:oklch(1 0.008 262.67/0.16);--rs-color-border-neutral-faded:oklch(1 0.01 262.67/0.08);--rs-color-foreground-neutral:oklch(0.96 0.008 262.67);--rs-color-foreground-neutral-faded:oklch(0.81 0.008 262.67);--rs-color-background-disabled:oklch(0.28 0 262.67);--rs-color-background-disabled-faded:oklch(0.23 0 262.67);--rs-color-border-disabled:oklch(0.28 0 262.67);--rs-color-foreground-disabled:oklch(0.4 0 262.67);--rs-color-background-elevation-base:oklch(0.2 0 262.67);--rs-color-background-elevation-raised:oklch(0.21 0 262.67);--rs-color-background-elevation-overlay:oklch(0.22 0 262.67);--rs-color-background-page:oklch(0.16 0 262.67);--rs-color-background-page-faded:oklch(0.18 0 262.67);--rs-color-rgb-background-primary:47.277,104.0655,223.3545;--rs-color-rgb-background-primary-faded:23.6385,33.456,52.122;--rs-color-rgb-background-critical:208.437,69.87,62.526;--rs-color-rgb-background-critical-faded:48.6285,26.877,24.378;--rs-color-rgb-background-warning:227.0265,185.7675,61.353;--rs-color-rgb-background-warning-faded:38.9895,33.047999999999995,17.0595;--rs-color-rgb-background-positive:45.5685,120.86999999999999,75.1995;--rs-color-rgb-background-positive-faded:25.9335,36.643499999999996,29.0445;--rs-color-on-background-neutral:oklch(1 0 0);--rs-color-rgb-background-neutral:58.8285,61.149,65.43299999999999;--rs-color-rgb-background-neutral-faded:31.0335,33.6855,38.556;--rs-color-rgb-background-disabled:40.774499999999996,40.774499999999996,40.774499999999996;--rs-color-rgb-background-disabled-faded:28.815,28.815,28.815;--rs-color-rgb-background-elevation-base:21.9555,21.9555,21.9555;--rs-color-rgb-background-elevation-raised:24.225,24.225,24.225;--rs-color-rgb-background-elevation-overlay:26.52,26.52,26.52;--rs-color-rgb-background-page:13.209,13.209,13.209;--rs-color-rgb-background-page-faded:17.5185,17.5185,17.5185}
1
+ [data-rs-theme=slate]{--rs-font-family-title:Inter,BlinkMacSystemFont,-apple-system,Roboto,Helvetica,Arial,sans-serif;--rs-font-family-body:Inter,BlinkMacSystemFont,-apple-system,Roboto,Helvetica,Arial,sans-serif;--rs-font-weight-regular:400;--rs-font-weight-medium:500;--rs-font-weight-semibold:600;--rs-font-weight-bold:700;--rs-font-weight-extrabold:800;--rs-font-weight-black:900;--rs-font-size-title-1:6rem;--rs-line-height-title-1:6.25rem;--rs-font-family-title-1:var(--rs-font-family-title);--rs-font-weight-title-1:var(--rs-font-weight-extrabold);--rs-letter-spacing-title-1:normal;--rs-font-size-title-2:5rem;--rs-line-height-title-2:5.25rem;--rs-font-family-title-2:var(--rs-font-family-title);--rs-font-weight-title-2:var(--rs-font-weight-extrabold);--rs-letter-spacing-title-2:normal;--rs-font-size-title-3:4rem;--rs-line-height-title-3:4.25rem;--rs-font-family-title-3:var(--rs-font-family-title);--rs-font-weight-title-3:var(--rs-font-weight-extrabold);--rs-letter-spacing-title-3:normal;--rs-font-size-title-4:3.5rem;--rs-line-height-title-4:3.75rem;--rs-font-family-title-4:var(--rs-font-family-title);--rs-font-weight-title-4:var(--rs-font-weight-bold);--rs-letter-spacing-title-4:normal;--rs-font-size-title-5:3rem;--rs-line-height-title-5:3.25rem;--rs-font-family-title-5:var(--rs-font-family-title);--rs-font-weight-title-5:var(--rs-font-weight-bold);--rs-letter-spacing-title-5:normal;--rs-font-size-title-6:2.25rem;--rs-line-height-title-6:2.5rem;--rs-font-family-title-6:var(--rs-font-family-title);--rs-font-weight-title-6:var(--rs-font-weight-bold);--rs-letter-spacing-title-6:normal;--rs-font-size-featured-1:2rem;--rs-line-height-featured-1:2.5rem;--rs-font-family-featured-1:var(--rs-font-family-body);--rs-letter-spacing-featured-1:normal;--rs-font-size-featured-2:1.5rem;--rs-line-height-featured-2:2rem;--rs-font-family-featured-2:var(--rs-font-family-body);--rs-letter-spacing-featured-2:normal;--rs-font-size-featured-3:1.25rem;--rs-line-height-featured-3:1.75rem;--rs-font-family-featured-3:var(--rs-font-family-body);--rs-letter-spacing-featured-3:normal;--rs-font-size-body-1:1.125rem;--rs-line-height-body-1:1.75rem;--rs-font-family-body-1:var(--rs-font-family-body);--rs-letter-spacing-body-1:normal;--rs-font-size-body-2:1rem;--rs-line-height-body-2:1.5rem;--rs-font-family-body-2:var(--rs-font-family-body);--rs-letter-spacing-body-2:normal;--rs-font-size-body-3:0.875rem;--rs-line-height-body-3:1.25rem;--rs-font-family-body-3:var(--rs-font-family-body);--rs-letter-spacing-body-3:normal;--rs-font-size-caption-1:0.75rem;--rs-line-height-caption-1:1rem;--rs-font-family-caption-1:var(--rs-font-family-body);--rs-letter-spacing-caption-1:normal;--rs-font-size-caption-2:0.625rem;--rs-line-height-caption-2:0.75rem;--rs-font-family-caption-2:var(--rs-font-family-body);--rs-letter-spacing-caption-2:normal;--rs-unit-base:4px;--rs-unit-x1:4px;--rs-unit-x2:8px;--rs-unit-x3:12px;--rs-unit-x4:16px;--rs-unit-x5:20px;--rs-unit-x6:24px;--rs-unit-x7:28px;--rs-unit-x8:32px;--rs-unit-x9:36px;--rs-unit-x10:40px;--rs-radius-small:4px;--rs-radius-medium:8px;--rs-radius-large:12px;--rs-color-brand:oklch(0.55 0.24 262.67);--rs-color-white:oklch(1 0 0);--rs-color-black:oklch(0 0 0);--rs-color-on-background-primary:oklch(1 0 0);--rs-color-on-background-critical:oklch(1 0 0);--rs-color-on-background-warning:oklch(0 0 0);--rs-color-on-background-positive:oklch(1 0 0);--rs-color-on-brand:oklch(1 0 0);--rs-color-rgb-white:255,255,255;--rs-color-rgb-black:0,0,0;--rs-duration-rapid:100ms;--rs-duration-fast:200ms;--rs-duration-medium:300ms;--rs-duration-slow:400ms;--rs-easing-standard:cubic-bezier(0.4,0,0.2,1);--rs-easing-accelerate:cubic-bezier(0.4,0,1,1);--rs-easing-decelerate:cubic-bezier(0,0,0.2,1);--rs-shadow-raised:0px 1px 5px -4px rgba(0,0,0,.5),0px 4px 8px 0px rgba(0,0,0,.05);--rs-shadow-overlay:0px 5px 10px 0px rgba(0,0,0,.05),0px 15px 25px 0px rgba(0,0,0,.07);--rs-viewport-m-min:660;--rs-viewport-l-min:900;--rs-viewport-xl-min:1280}[data-rs-theme=slate][data-rs-color-mode=light]{--rs-color-background-primary:oklch(0.55 0.24 262.67);--rs-color-background-primary-faded:oklch(0.97 0.02 262.67);--rs-color-border-primary:oklch(0.47 0.24 262.67);--rs-color-border-primary-faded:oklch(0.92 0.03 262.67);--rs-color-foreground-primary:oklch(0.5 0.24 262.67);--rs-color-background-critical:oklch(0.59 0.22 26.97);--rs-color-background-critical-faded:oklch(0.97 0.02 26.97);--rs-color-border-critical:oklch(0.51 0.22 26.97);--rs-color-border-critical-faded:oklch(0.92 0.03 26.97);--rs-color-foreground-critical:oklch(0.5 0.22 26.97);--rs-color-background-warning:oklch(0.83 0.2 80);--rs-color-background-warning-faded:oklch(0.97 0.04 80);--rs-color-border-warning:oklch(0.75 0.2 80);--rs-color-border-warning-faded:oklch(0.92 0.05 80);--rs-color-foreground-warning:oklch(0.5 0.2 80);--rs-color-background-positive:oklch(0.53 0.13 153.78);--rs-color-background-positive-faded:oklch(0.97 0.02 153.78);--rs-color-border-positive:oklch(0.45 0.13 153.78);--rs-color-border-positive-faded:oklch(0.92 0.03 153.78);--rs-color-foreground-positive:oklch(0.5 0.13 153.78);--rs-color-background-neutral:oklch(0.92 0.01 262.67);--rs-color-background-neutral-faded:oklch(0.97 0.005 262.67);--rs-color-border-neutral:oklch(0 0.01 262.67/0.12);--rs-color-border-neutral-faded:oklch(0 0.005 262.67/0.08);--rs-color-foreground-neutral:oklch(0.2 0.01 262.67);--rs-color-foreground-neutral-faded:oklch(0.45 0.01 262.67);--rs-color-background-disabled:oklch(0.95 0 262.67);--rs-color-background-disabled-faded:oklch(0.98 0 262.67);--rs-color-border-disabled:oklch(0 0.01 262.67/0.06);--rs-color-foreground-disabled:oklch(0.84 0 262.67);--rs-color-background-elevation-base:oklch(1 0 262.67);--rs-color-background-elevation-raised:oklch(1 0 262.67);--rs-color-background-elevation-overlay:oklch(1 0 262.67);--rs-color-background-page:oklch(1 0 262.67);--rs-color-background-page-faded:oklch(0.97 0 262.67);--rs-color-rgb-background-primary:23.536499999999997,95.6505,250.1295;--rs-color-rgb-background-primary-faded:238.017,245.4885,259.182;--rs-color-rgb-background-critical:226.593,39.168,41.0295;--rs-color-rgb-background-critical-faded:258.5445,240.3885,237.8895;--rs-color-rgb-background-warning:265.7865,180.5145,-70.15050000000001;--rs-color-rgb-background-warning-faded:259.6665,242.862,215.577;--rs-color-rgb-background-positive:14.177999999999999,128.673,70.788;--rs-color-rgb-background-positive-faded:235.4415,249.3645,239.0115;--rs-color-on-background-neutral:oklch(0 0 0);--rs-color-rgb-background-neutral:224.96099999999998,228.6585,235.416;--rs-color-rgb-background-neutral-faded:243.219,245.10600000000002,248.523;--rs-color-rgb-background-disabled:238.29749999999999,238.29749999999999,238.29749999999999;--rs-color-rgb-background-disabled-faded:248.2935,248.2935,248.2935;--rs-color-rgb-background-elevation-base:255,255,255;--rs-color-rgb-background-elevation-raised:255,255,255;--rs-color-rgb-background-elevation-overlay:255,255,255;--rs-color-rgb-background-page:255,255,255;--rs-color-rgb-background-page-faded:244.953,244.953,244.953}[data-rs-theme=slate][data-rs-color-mode=dark]{--rs-color-background-primary:oklch(0.5498 0.192 262.67);--rs-color-background-primary-faded:oklch(0.25 0.0384 262.67);--rs-color-border-primary:oklch(0.6298 0.192 262.67);--rs-color-border-primary-faded:oklch(0.35 0.0384 262.67);--rs-color-foreground-primary:oklch(0.75 0.204 262.67);--rs-color-background-critical:oklch(0.5874 0.176 26.97);--rs-color-background-critical-faded:oklch(0.25 0.0352 26.97);--rs-color-border-critical:oklch(0.6674 0.176 26.97);--rs-color-border-critical-faded:oklch(0.35 0.0352 26.97);--rs-color-foreground-critical:oklch(0.75 0.187 26.97);--rs-color-background-warning:oklch(0.8036 0.16 80);--rs-color-background-warning-faded:oklch(0.25 0.032 80);--rs-color-border-warning:oklch(0.8836 0.16 80);--rs-color-border-warning-faded:oklch(0.35 0.032 80);--rs-color-foreground-warning:oklch(0.75 0.17 80);--rs-color-background-positive:oklch(0.5162 0.104 153.78);--rs-color-background-positive-faded:oklch(0.25 0.0208 153.78);--rs-color-border-positive:oklch(0.5962 0.104 153.78);--rs-color-border-positive-faded:oklch(0.35 0.0208 153.78);--rs-color-foreground-positive:oklch(0.75 0.1105 153.78);--rs-color-background-neutral:oklch(0.36 0.008 262.67);--rs-color-background-neutral-faded:oklch(0.25 0.01 262.67);--rs-color-border-neutral:oklch(1 0.008 262.67/0.16);--rs-color-border-neutral-faded:oklch(1 0.01 262.67/0.08);--rs-color-foreground-neutral:oklch(0.96 0.008 262.67);--rs-color-foreground-neutral-faded:oklch(0.81 0.008 262.67);--rs-color-background-disabled:oklch(0.28 0 262.67);--rs-color-background-disabled-faded:oklch(0.23 0 262.67);--rs-color-border-disabled:oklch(0.28 0 262.67);--rs-color-foreground-disabled:oklch(0.4 0 262.67);--rs-color-background-elevation-base:oklch(0.2 0 262.67);--rs-color-background-elevation-raised:oklch(0.21 0 262.67);--rs-color-background-elevation-overlay:oklch(0.22 0 262.67);--rs-color-background-page:oklch(0.16 0 262.67);--rs-color-background-page-faded:oklch(0.18 0 262.67);--rs-color-rgb-background-primary:47.277,104.0655,223.3545;--rs-color-rgb-background-primary-faded:23.6385,33.456,52.122;--rs-color-rgb-background-critical:208.437,69.87,62.526;--rs-color-rgb-background-critical-faded:48.6285,26.877,24.378;--rs-color-rgb-background-warning:244.1625,177.3525,31.7985;--rs-color-rgb-background-warning-faded:41.6925,31.900499999999997,15.1215;--rs-color-rgb-background-positive:45.5685,120.86999999999999,75.1995;--rs-color-rgb-background-positive-faded:25.9335,36.643499999999996,29.0445;--rs-color-on-background-neutral:oklch(1 0 0);--rs-color-rgb-background-neutral:58.8285,61.149,65.43299999999999;--rs-color-rgb-background-neutral-faded:31.0335,33.6855,38.556;--rs-color-rgb-background-disabled:40.774499999999996,40.774499999999996,40.774499999999996;--rs-color-rgb-background-disabled-faded:28.815,28.815,28.815;--rs-color-rgb-background-elevation-base:21.9555,21.9555,21.9555;--rs-color-rgb-background-elevation-raised:24.225,24.225,24.225;--rs-color-rgb-background-elevation-overlay:26.52,26.52,26.52;--rs-color-rgb-background-page:13.209,13.209,13.209;--rs-color-rgb-background-page-faded:17.5185,17.5185,17.5185}
@@ -4,6 +4,7 @@ export type ReshapedConfig = {
4
4
  themes?: Record<string, PassedThemeDefinition>;
5
5
  themeFragments?: Record<string, PassedThemeDefinition>;
6
6
  themeOptions?: {
7
+ colorOutputFormat?: "oklch" | "hex";
7
8
  colorContrastAlgorithm?: "wcag" | "apca";
8
9
  generateOnColorsFor?: string[];
9
10
  onColorValues?: {
@@ -1,4 +1,4 @@
1
- export { focusableSelector, getActiveElement, focusNextElement, focusPreviousElement, focusFirstElement, focusLastElement, } from "./focus";
1
+ export { focusableSelector, getActiveElement, getFocusableElements, focusNextElement, focusPreviousElement, focusFirstElement, focusLastElement, } from "./focus";
2
2
  export { activateKeyboardMode, deactivateKeyboardMode, checkKeyboardMode } from "./keyboardMode";
3
3
  export { default as TrapFocus } from "./TrapFocus";
4
4
  export type { TrapMode, FocusableElement } from "./types";
@@ -1,3 +1,3 @@
1
- export { focusableSelector, getActiveElement, focusNextElement, focusPreviousElement, focusFirstElement, focusLastElement, } from "./focus.js";
1
+ export { focusableSelector, getActiveElement, getFocusableElements, focusNextElement, focusPreviousElement, focusFirstElement, focusLastElement, } from "./focus.js";
2
2
  export { activateKeyboardMode, deactivateKeyboardMode, checkKeyboardMode } from "./keyboardMode.js";
3
3
  export { default as TrapFocus } from "./TrapFocus.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "reshaped",
3
3
  "description": "Professionally crafted design system in React & Figma for building products of any scale and complexity",
4
- "version": "3.6.0-canary.7",
4
+ "version": "3.6.0",
5
5
  "license": "MIT",
6
6
  "email": "hello@reshaped.so",
7
7
  "homepage": "https://reshaped.so",
@@ -96,53 +96,53 @@
96
96
  "@commitlint/cli": "19.8.1",
97
97
  "@commitlint/config-conventional": "19.8.1",
98
98
  "@commitlint/types": "19.8.1",
99
- "@eslint/js": "9.28.0",
99
+ "@eslint/js": "9.29.0",
100
100
  "@size-limit/preset-big-lib": "11.2.0",
101
- "@storybook/addon-a11y": "9.0.4",
102
- "@storybook/addon-docs": "9.0.4",
103
- "@storybook/addon-vitest": "9.0.4",
104
- "@storybook/react-vite": "9.0.4",
101
+ "@storybook/addon-a11y": "9.0.13",
102
+ "@storybook/addon-docs": "9.0.13",
103
+ "@storybook/addon-vitest": "9.0.13",
104
+ "@storybook/react-vite": "9.0.13",
105
105
  "@types/culori": "4.0.0",
106
106
  "@types/events": "3.0.3",
107
- "@types/node": "22.15.29",
108
- "@types/react": "19.1.6",
109
- "@types/react-dom": "19.1.5",
110
- "@vitejs/plugin-react": "4.5.0",
111
- "@vitest/browser": "3.2.0",
112
- "@vitest/coverage-istanbul": "3.2.0",
113
- "@vitest/coverage-v8": "3.2.0",
114
- "chromatic": "12.0.0",
107
+ "@types/node": "24.0.4",
108
+ "@types/react": "19.1.8",
109
+ "@types/react-dom": "19.1.6",
110
+ "@vitejs/plugin-react": "4.6.0",
111
+ "@vitest/browser": "3.2.4",
112
+ "@vitest/coverage-istanbul": "3.2.4",
113
+ "@vitest/coverage-v8": "3.2.4",
114
+ "chromatic": "13.0.1",
115
115
  "conventional-changelog-cli": "5.0.0",
116
116
  "cz-conventional-changelog": "3.3.0",
117
- "eslint": "9.28.0",
117
+ "eslint": "9.29.0",
118
118
  "eslint-config-prettier": "10.1.5",
119
119
  "eslint-plugin-jsx-a11y": "6.10.2",
120
- "eslint-plugin-prettier": "5.4.1",
120
+ "eslint-plugin-prettier": "5.5.1",
121
121
  "eslint-plugin-react": "7.37.5",
122
122
  "eslint-plugin-react-hooks": "5.2.0",
123
- "lefthook": "1.11.13",
124
- "playwright": "1.52.0",
125
- "postcss": "8.5.4",
123
+ "lefthook": "1.11.14",
124
+ "playwright": "1.53.1",
125
+ "postcss": "8.5.6",
126
126
  "postcss-cli": "11.0.1",
127
127
  "postcss-each": "1.1.0",
128
128
  "postcss-nested": "7.0.2",
129
- "prettier": "3.5.3",
129
+ "prettier": "3.6.2",
130
130
  "react": "18",
131
131
  "react-dom": "18",
132
132
  "react-shadow": "20.6.0",
133
133
  "resolve-tspaths": "0.8.23",
134
134
  "size-limit": "11.2.0",
135
- "storybook": "9.0.4",
136
- "stylelint": "16.20.0",
135
+ "storybook": "9.0.13",
136
+ "stylelint": "16.21.0",
137
137
  "stylelint-config-prettier": "9.0.5",
138
138
  "stylelint-config-standard": "38.0.0",
139
139
  "ts-node": "10.9.2",
140
140
  "typescript": "5.8.3",
141
- "typescript-eslint": "8.33.1",
142
- "vite": "6.3.5",
141
+ "typescript-eslint": "8.35.0",
142
+ "vite": "7.0.0",
143
143
  "vite-tsconfig-paths": "5.1.4",
144
- "vitest": "3.2.0",
145
- "vitest-browser-react": "0.2.0"
144
+ "vitest": "3.2.4",
145
+ "vitest-browser-react": "1.0.0"
146
146
  },
147
147
  "peerDependencies": {
148
148
  "postcss": "^8",
@@ -182,6 +182,6 @@
182
182
  ],
183
183
  "engines": {
184
184
  "yarn": ">=1.0.0",
185
- "node": ">=20"
185
+ "node": ">=22"
186
186
  }
187
187
  }
@@ -1,18 +0,0 @@
1
- import { StoryObj } from "@storybook/react-vite";
2
- declare const _default: {
3
- title: string;
4
- component: import("react").FC<import("./..").ResizableProps> & {
5
- Item: React.FC<import("./..").ResizableItemProps>;
6
- Handle: React.FC<import("./..").ResizableHandleProps>;
7
- };
8
- parameters: {
9
- iframe: {
10
- url: string;
11
- };
12
- chromatic: {
13
- disableSnapshot: boolean;
14
- };
15
- };
16
- };
17
- export default _default;
18
- export declare const className: StoryObj;
@@ -1,25 +0,0 @@
1
- import { expect } from "storybook/test";
2
- import Resizable from "../index.js";
3
- export default {
4
- title: "Components/Resizable/tests",
5
- component: Resizable,
6
- parameters: {
7
- iframe: {
8
- url: "https://reshaped.so/docs/utilities/Resizable",
9
- },
10
- chromatic: { disableSnapshot: true },
11
- },
12
- };
13
- export const className = {
14
- name: "className, attributes",
15
- render: () => (<div data-testid="root">
16
- <Resizable className="test-classname" attributes={{ id: "test-id" }}>
17
- <Resizable.Item>Content</Resizable.Item>
18
- </Resizable>
19
- </div>),
20
- play: async ({ canvas }) => {
21
- const root = canvas.getByTestId("root").firstChild;
22
- expect(root).toHaveClass("test-classname");
23
- expect(root).toHaveAttribute("id", "test-id");
24
- },
25
- };