reshaped 3.9.1-canary.3 → 3.10.0-canary.10

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 (229) hide show
  1. package/dist/bundle.css +1 -1
  2. package/dist/bundle.d.ts +5 -12
  3. package/dist/bundle.js +2 -2
  4. package/dist/cli/theming/tailwind.js +1 -0
  5. package/dist/components/Accordion/Accordion.types.d.ts +3 -2
  6. package/dist/components/Accordion/AccordionControlled.js +1 -2
  7. package/dist/components/Accordion/AccordionTrigger.js +1 -1
  8. package/dist/components/ActionBar/ActionBar.js +2 -1
  9. package/dist/components/ActionBar/ActionBar.types.d.ts +3 -2
  10. package/dist/components/Actionable/Actionable.d.ts +2 -2
  11. package/dist/components/Actionable/Actionable.js +1 -1
  12. package/dist/components/Actionable/Actionable.types.d.ts +1 -1
  13. package/dist/components/Actionable/index.d.ts +1 -1
  14. package/dist/components/Alert/Alert.types.d.ts +3 -2
  15. package/dist/components/Autocomplete/Autocomplete.js +3 -5
  16. package/dist/components/Autocomplete/Autocomplete.types.d.ts +1 -1
  17. package/dist/components/Avatar/Avatar.js +2 -1
  18. package/dist/components/Avatar/Avatar.types.d.ts +5 -4
  19. package/dist/components/Badge/Badge.js +1 -1
  20. package/dist/components/Badge/Badge.types.d.ts +4 -4
  21. package/dist/components/Badge/BadgeContainer.js +1 -1
  22. package/dist/components/Breadcrumbs/Breadcrumbs.js +1 -1
  23. package/dist/components/Breadcrumbs/Breadcrumbs.types.d.ts +3 -3
  24. package/dist/components/Button/Button.js +2 -1
  25. package/dist/components/Button/Button.types.d.ts +3 -2
  26. package/dist/components/Button/ButtonGroup.js +1 -1
  27. package/dist/components/Calendar/CalendarDate.js +1 -1
  28. package/dist/components/Calendar/useCalendarKeyboardNavigation.js +1 -1
  29. package/dist/components/Card/Card.d.ts +6 -14
  30. package/dist/components/Card/Card.js +1 -1
  31. package/dist/components/Card/Card.types.d.ts +4 -3
  32. package/dist/components/Carousel/Carousel.js +3 -4
  33. package/dist/components/Carousel/Carousel.types.d.ts +3 -2
  34. package/dist/components/Carousel/CarouselControl.js +1 -2
  35. package/dist/components/Checkbox/Checkbox.js +2 -2
  36. package/dist/components/Checkbox/Checkbox.types.d.ts +4 -3
  37. package/dist/components/Container/Container.js +1 -1
  38. package/dist/components/Container/Container.types.d.ts +3 -2
  39. package/dist/components/ContextMenu/ContextMenu.js +1 -2
  40. package/dist/components/Dismissible/Dismissible.js +1 -1
  41. package/dist/components/Dismissible/Dismissible.types.d.ts +3 -3
  42. package/dist/components/Divider/Divider.js +2 -1
  43. package/dist/components/Divider/Divider.types.d.ts +3 -2
  44. package/dist/components/DropdownMenu/DropdownMenu.js +1 -3
  45. package/dist/components/DropdownMenu/DropdownMenu.types.d.ts +1 -1
  46. package/dist/components/FileUpload/FileUpload.js +1 -2
  47. package/dist/components/FileUpload/FileUpload.types.d.ts +4 -3
  48. package/dist/components/Flyout/Flyout.module.css +1 -1
  49. package/dist/components/Flyout/Flyout.types.d.ts +9 -7
  50. package/dist/components/Flyout/FlyoutContent.js +3 -3
  51. package/dist/components/Flyout/FlyoutControlled.js +4 -6
  52. package/dist/components/Flyout/useFlyout.d.ts +2 -2
  53. package/dist/components/Flyout/useFlyout.js +5 -5
  54. package/dist/components/Flyout/utilities/safeArea.d.ts +2 -2
  55. package/dist/components/Flyout/utilities/safeArea.js +0 -14
  56. package/dist/components/Grid/Grid.js +2 -1
  57. package/dist/components/Grid/Grid.types.d.ts +5 -4
  58. package/dist/components/Hidden/Hidden.js +2 -1
  59. package/dist/components/HiddenInput/HiddenInput.js +1 -1
  60. package/dist/components/HiddenInput/HiddenInput.types.d.ts +3 -2
  61. package/dist/components/Hotkey/Hotkey.js +1 -1
  62. package/dist/components/Hotkey/Hotkey.types.d.ts +3 -3
  63. package/dist/components/Icon/Icon.js +1 -1
  64. package/dist/components/Icon/Icon.types.d.ts +3 -2
  65. package/dist/components/Image/Image.js +1 -1
  66. package/dist/components/Image/Image.types.d.ts +5 -4
  67. package/dist/components/Link/Link.js +1 -1
  68. package/dist/components/Loader/Loader.js +2 -1
  69. package/dist/components/Loader/Loader.types.d.ts +3 -2
  70. package/dist/components/MenuItem/MenuItem.js +2 -1
  71. package/dist/components/MenuItem/MenuItem.types.d.ts +3 -2
  72. package/dist/components/Modal/Modal.js +7 -6
  73. package/dist/components/Modal/Modal.types.d.ts +5 -4
  74. package/dist/components/NumberField/NumberFieldControlled.js +1 -2
  75. package/dist/components/Overlay/Overlay.js +7 -12
  76. package/dist/components/Overlay/Overlay.types.d.ts +5 -3
  77. package/dist/components/Pagination/Pagination.types.d.ts +3 -3
  78. package/dist/components/PinField/PinField.types.d.ts +4 -3
  79. package/dist/components/PinField/PinFieldControlled.js +1 -1
  80. package/dist/components/Popover/Popover.js +1 -1
  81. package/dist/components/Popover/Popover.types.d.ts +1 -1
  82. package/dist/components/Progress/Progress.js +1 -1
  83. package/dist/components/Progress/Progress.types.d.ts +3 -3
  84. package/dist/components/ProgressIndicator/ProgressIndicator.js +1 -1
  85. package/dist/components/ProgressIndicator/ProgressIndicator.types.d.ts +3 -3
  86. package/dist/components/Radio/Radio.js +2 -1
  87. package/dist/components/Radio/Radio.types.d.ts +4 -3
  88. package/dist/components/RadioGroup/RadioGroup.types.d.ts +3 -2
  89. package/dist/components/Reshaped/Reshaped.js +4 -11
  90. package/dist/components/Reshaped/Reshaped.types.d.ts +3 -2
  91. package/dist/components/Resizable/Resizable.js +1 -1
  92. package/dist/components/Resizable/ResizableHandle.js +1 -1
  93. package/dist/components/Scrim/Scrim.js +1 -1
  94. package/dist/components/Scrim/Scrim.types.d.ts +4 -4
  95. package/dist/components/ScrollArea/ScrollArea.js +2 -4
  96. package/dist/components/ScrollArea/ScrollArea.types.d.ts +5 -3
  97. package/dist/components/Select/Select.types.d.ts +5 -4
  98. package/dist/components/Select/SelectNative.js +1 -1
  99. package/dist/components/Select/SelectRoot.js +2 -1
  100. package/dist/components/Skeleton/Skeleton.js +1 -1
  101. package/dist/components/Skeleton/Skeleton.types.d.ts +3 -3
  102. package/dist/components/Slider/Slider.types.d.ts +3 -3
  103. package/dist/components/Slider/Slider.utilities.d.ts +7 -0
  104. package/dist/components/Slider/Slider.utilities.js +11 -0
  105. package/dist/components/Slider/SliderControlled.js +15 -8
  106. package/dist/components/Slider/SliderThumb.js +1 -1
  107. package/dist/components/Stepper/Stepper.types.d.ts +5 -4
  108. package/dist/components/Switch/Switch.js +2 -1
  109. package/dist/components/Switch/Switch.types.d.ts +4 -3
  110. package/dist/components/Table/Table.js +2 -1
  111. package/dist/components/Table/Table.types.d.ts +12 -12
  112. package/dist/components/Tabs/Tabs.types.d.ts +6 -6
  113. package/dist/components/Tabs/TabsItem.js +2 -3
  114. package/dist/components/Tabs/TabsList.js +1 -4
  115. package/dist/components/Tabs/TabsPanel.js +2 -2
  116. package/dist/components/Text/Text.js +2 -1
  117. package/dist/components/Text/Text.types.d.ts +3 -2
  118. package/dist/components/TextArea/TextArea.js +2 -1
  119. package/dist/components/TextArea/TextArea.types.d.ts +5 -4
  120. package/dist/components/TextField/TextField.js +2 -1
  121. package/dist/components/TextField/TextField.types.d.ts +4 -3
  122. package/dist/components/Theme/GlobalColorMode.js +1 -1
  123. package/dist/components/Theme/Theme.js +1 -2
  124. package/dist/components/Theme/Theme.types.d.ts +2 -1
  125. package/dist/components/Timeline/Timeline.js +1 -1
  126. package/dist/components/Timeline/Timeline.types.d.ts +5 -5
  127. package/dist/components/Toast/Toast.types.d.ts +3 -3
  128. package/dist/components/Toast/ToastContainer.js +2 -2
  129. package/dist/components/Toast/ToastRegion.js +2 -2
  130. package/dist/components/ToggleButton/ToggleButtonUncontrolled.js +1 -1
  131. package/dist/components/ToggleButtonGroup/ToggleButtonGroupControlled.js +1 -1
  132. package/dist/components/Tooltip/Tooltip.types.d.ts +1 -1
  133. package/dist/components/View/View.js +2 -1
  134. package/dist/components/View/View.types.d.ts +5 -4
  135. package/dist/components/_private/Aligner/Aligner.js +1 -1
  136. package/dist/components/_private/Aligner/Aligner.types.d.ts +3 -3
  137. package/dist/components/_private/Expandable/Expandable.js +2 -2
  138. package/dist/components/_private/Expandable/Expandable.types.d.ts +2 -2
  139. package/dist/components/_private/Portal/Portal.js +1 -2
  140. package/dist/hooks/_private/useDrag.js +2 -4
  141. package/dist/hooks/_private/useFadeSide.js +2 -3
  142. package/dist/hooks/_private/useSingletonViewport.d.ts +10 -0
  143. package/dist/hooks/_private/useSingletonViewport.js +52 -0
  144. package/dist/hooks/useResponsiveClientValue.js +15 -53
  145. package/dist/hooks/useViewport.d.ts +2 -0
  146. package/dist/hooks/useViewport.js +6 -0
  147. package/dist/index.d.ts +5 -12
  148. package/dist/index.js +3 -11
  149. package/dist/styles/mixin.d.ts +2 -2
  150. package/dist/styles/types.d.ts +2 -1
  151. package/dist/tests/ThemesPlayground.js +1 -1
  152. package/dist/themes/figma/tailwind.css +1 -1
  153. package/dist/themes/fragments/twitter/tailwind.css +1 -1
  154. package/dist/themes/reshaped/tailwind.css +1 -1
  155. package/dist/themes/slate/tailwind.css +1 -1
  156. package/dist/types/global.d.ts +0 -15
  157. package/dist/utilities/helpers.d.ts +0 -1
  158. package/dist/utilities/helpers.js +0 -14
  159. package/dist/utilities/props.d.ts +2 -5
  160. package/dist/utilities/props.js +0 -18
  161. package/package.json +4 -4
  162. package/dist/core/Actionable/Actionable.d.ts +0 -4
  163. package/dist/core/Actionable/Actionable.js +0 -73
  164. package/dist/core/Actionable/Actionable.types.d.ts +0 -34
  165. package/dist/core/Actionable/Actionable.types.js +0 -1
  166. package/dist/core/Actionable/index.d.ts +0 -2
  167. package/dist/core/Actionable/index.js +0 -1
  168. package/dist/hooks/_private/useSingletonEnvironment.d.ts +0 -9
  169. package/dist/hooks/_private/useSingletonEnvironment.js +0 -33
  170. package/dist/hooks/_private/useSingletonHotkeys.d.ts +0 -35
  171. package/dist/hooks/_private/useSingletonHotkeys.js +0 -191
  172. package/dist/hooks/_private/useSingletonKeyboardMode.d.ts +0 -13
  173. package/dist/hooks/_private/useSingletonKeyboardMode.js +0 -58
  174. package/dist/hooks/useHandlerRef.d.ts +0 -8
  175. package/dist/hooks/useHandlerRef.js +0 -16
  176. package/dist/hooks/useHotkeys.d.ts +0 -11
  177. package/dist/hooks/useHotkeys.js +0 -27
  178. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +0 -3
  179. package/dist/hooks/useIsomorphicLayoutEffect.js +0 -4
  180. package/dist/hooks/useKeyboardArrowNavigation.d.ts +0 -9
  181. package/dist/hooks/useKeyboardArrowNavigation.js +0 -62
  182. package/dist/hooks/useKeyboardMode.d.ts +0 -7
  183. package/dist/hooks/useKeyboardMode.js +0 -13
  184. package/dist/hooks/useOnClickOutside.d.ts +0 -5
  185. package/dist/hooks/useOnClickOutside.js +0 -63
  186. package/dist/hooks/useRTL.d.ts +0 -2
  187. package/dist/hooks/useRTL.js +0 -7
  188. package/dist/hooks/useScrollLock.d.ts +0 -10
  189. package/dist/hooks/useScrollLock.js +0 -25
  190. package/dist/hooks/useToggle.d.ts +0 -7
  191. package/dist/hooks/useToggle.js +0 -19
  192. package/dist/utilities/Chain.d.ts +0 -20
  193. package/dist/utilities/Chain.js +0 -60
  194. package/dist/utilities/a11y/TrapFocus.d.ts +0 -28
  195. package/dist/utilities/a11y/TrapFocus.js +0 -162
  196. package/dist/utilities/a11y/TrapScreenReader.d.ts +0 -15
  197. package/dist/utilities/a11y/TrapScreenReader.js +0 -42
  198. package/dist/utilities/a11y/focus.d.ts +0 -38
  199. package/dist/utilities/a11y/focus.js +0 -101
  200. package/dist/utilities/a11y/index.d.ts +0 -4
  201. package/dist/utilities/a11y/index.js +0 -3
  202. package/dist/utilities/a11y/keyboardMode.d.ts +0 -3
  203. package/dist/utilities/a11y/keyboardMode.js +0 -10
  204. package/dist/utilities/a11y/types.d.ts +0 -24
  205. package/dist/utilities/a11y/types.js +0 -1
  206. package/dist/utilities/css.d.ts +0 -7
  207. package/dist/utilities/css.js +0 -18
  208. package/dist/utilities/dom/event.d.ts +0 -7
  209. package/dist/utilities/dom/event.js +0 -11
  210. package/dist/utilities/dom/find.d.ts +0 -10
  211. package/dist/utilities/dom/find.js +0 -37
  212. package/dist/utilities/dom/index.d.ts +0 -3
  213. package/dist/utilities/dom/index.js +0 -3
  214. package/dist/utilities/dom/shadowDom.d.ts +0 -1
  215. package/dist/utilities/dom/shadowDom.js +0 -4
  216. package/dist/utilities/platform.d.ts +0 -1
  217. package/dist/utilities/platform.js +0 -16
  218. package/dist/utilities/scroll/disable.d.ts +0 -7
  219. package/dist/utilities/scroll/disable.js +0 -15
  220. package/dist/utilities/scroll/helpers.d.ts +0 -1
  221. package/dist/utilities/scroll/helpers.js +0 -17
  222. package/dist/utilities/scroll/index.d.ts +0 -2
  223. package/dist/utilities/scroll/index.js +0 -2
  224. package/dist/utilities/scroll/lock.d.ts +0 -5
  225. package/dist/utilities/scroll/lock.js +0 -32
  226. package/dist/utilities/scroll/lockSafari.d.ts +0 -2
  227. package/dist/utilities/scroll/lockSafari.js +0 -20
  228. package/dist/utilities/scroll/lockStandard.d.ts +0 -4
  229. package/dist/utilities/scroll/lockStandard.js +0 -15
@@ -0,0 +1,52 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useIsomorphicLayoutEffect } from "@reshaped/headless";
4
+ import React from "react";
5
+ import defaultBreakpoints from "../../constants/breakpoints.js";
6
+ const SingletonViewportContext = React.createContext({
7
+ viewport: "s",
8
+ });
9
+ export const SingletonViewportProvider = (props) => {
10
+ const { children, defaultViewport = "s" } = props;
11
+ const [viewport, setViewport] = React.useState(defaultViewport);
12
+ useIsomorphicLayoutEffect(() => {
13
+ const rootThemeEl = document.querySelector("[data-rs-theme]");
14
+ const rootStyle = rootThemeEl && window.getComputedStyle(rootThemeEl);
15
+ /**
16
+ * We generate variables for the viewport breakpoints in the themes
17
+ * We use them here in case they're custom and fallback to the default values
18
+ * in case there is no SSR passing the data-rs-theme attribute
19
+ */
20
+ const breakpoints = {
21
+ m: (rootStyle && Number(rootStyle.getPropertyValue("--rs-viewport-m-min"))) ||
22
+ defaultBreakpoints.m,
23
+ l: (rootStyle && Number(rootStyle.getPropertyValue("--rs-viewport-l-min"))) ||
24
+ defaultBreakpoints.l,
25
+ xl: (rootStyle && Number(rootStyle.getPropertyValue("--rs-viewport-xl-min"))) ||
26
+ defaultBreakpoints.xl,
27
+ };
28
+ const mediaQueries = {
29
+ s: `(max-width: ${breakpoints.m - 1}px)`,
30
+ m: `(min-width: ${breakpoints.m}px) and (max-width: ${breakpoints.l - 1}px)`,
31
+ l: `(min-width: ${breakpoints.l}px) and (max-width: ${breakpoints.xl - 1}px)`,
32
+ xl: `(min-width: ${breakpoints.xl}px)`,
33
+ };
34
+ const viewports = Object.keys(mediaQueries);
35
+ const matchers = viewports.map((viewport) => {
36
+ const mq = window.matchMedia(mediaQueries[viewport]);
37
+ return { mq, handler: () => mq.matches && setViewport(viewport) };
38
+ });
39
+ matchers.forEach(({ handler, mq }) => {
40
+ handler();
41
+ mq.addEventListener("change", handler);
42
+ });
43
+ return () => {
44
+ matchers.forEach(({ handler, mq }) => {
45
+ mq.removeEventListener("change", handler);
46
+ });
47
+ };
48
+ }, []);
49
+ return (_jsx(SingletonViewportContext.Provider, { value: { viewport }, children: children }));
50
+ };
51
+ const useSingletonViewport = () => React.useContext(SingletonViewportContext);
52
+ export default useSingletonViewport;
@@ -1,57 +1,19 @@
1
1
  "use client";
2
- import React from "react";
3
- import defaultBreakpoints from "../constants/breakpoints.js";
4
- import { SingletonEnvironmentContext } from "./_private/useSingletonEnvironment.js";
5
- import useIsomorphicLayoutEffect from "./useIsomorphicLayoutEffect.js";
2
+ import { useMemo } from "react";
3
+ import useViewport from "./useViewport.js";
6
4
  const useResponsiveClientValue = (value) => {
7
- const { defaultViewport } = React.useContext(SingletonEnvironmentContext);
8
- const [viewport, setViewport] = React.useState(defaultViewport);
9
- useIsomorphicLayoutEffect(() => {
10
- const rootThemeEl = document.querySelector("[data-rs-theme]");
11
- const rootStyle = rootThemeEl && window.getComputedStyle(rootThemeEl);
12
- /**
13
- * We generate variables for the viewport breakpoints in the themes
14
- * We use them here in case they're custom and fallback to the default values
15
- * in case there is no SSR passing the data-rs-theme attribute
16
- */
17
- const breakpoints = {
18
- m: (rootStyle && Number(rootStyle.getPropertyValue("--rs-viewport-m-min"))) ||
19
- defaultBreakpoints.m,
20
- l: (rootStyle && Number(rootStyle.getPropertyValue("--rs-viewport-l-min"))) ||
21
- defaultBreakpoints.l,
22
- xl: (rootStyle && Number(rootStyle.getPropertyValue("--rs-viewport-xl-min"))) ||
23
- defaultBreakpoints.xl,
24
- };
25
- const mediaQueries = {
26
- s: `(max-width: ${breakpoints.m - 1}px)`,
27
- m: `(min-width: ${breakpoints.m}px) and (max-width: ${breakpoints.l - 1}px)`,
28
- l: `(min-width: ${breakpoints.l}px) and (max-width: ${breakpoints.xl - 1}px)`,
29
- xl: `(min-width: ${breakpoints.xl}px)`,
30
- };
31
- const viewports = Object.keys(mediaQueries);
32
- const matchers = viewports.map((viewport) => {
33
- const mq = window.matchMedia(mediaQueries[viewport]);
34
- return { mq, handler: () => mq.matches && setViewport(viewport) };
35
- });
36
- matchers.forEach(({ handler, mq }) => {
37
- handler();
38
- mq.addEventListener("change", handler);
39
- });
40
- return () => {
41
- matchers.forEach(({ handler, mq }) => {
42
- mq.removeEventListener("change", handler);
43
- });
44
- };
45
- }, []);
46
- if (typeof value !== "object" || value === null || !("s" in value)) {
47
- return value;
48
- }
49
- if (viewport === "xl")
50
- return value.xl ?? value.l ?? value.m ?? value.s;
51
- if (viewport === "l")
52
- return value.l ?? value.m ?? value.s;
53
- if (viewport === "m")
54
- return value.m ?? value.s;
55
- return value.s;
5
+ const viewport = useViewport();
6
+ return useMemo(() => {
7
+ if (typeof value !== "object" || value === null || !("s" in value)) {
8
+ return value;
9
+ }
10
+ if (viewport === "xl")
11
+ return value.xl ?? value.l ?? value.m ?? value.s;
12
+ if (viewport === "l")
13
+ return value.l ?? value.m ?? value.s;
14
+ if (viewport === "m")
15
+ return value.m ?? value.s;
16
+ return value.s;
17
+ }, [viewport, value]);
56
18
  };
57
19
  export default useResponsiveClientValue;
@@ -0,0 +1,2 @@
1
+ declare const useViewport: () => import("../types/global").Viewport;
2
+ export default useViewport;
@@ -0,0 +1,6 @@
1
+ import useSingletonViewport from "./_private/useSingletonViewport.js";
2
+ const useViewport = () => {
3
+ const { viewport } = useSingletonViewport();
4
+ return viewport;
5
+ };
6
+ export default useViewport;
package/dist/index.d.ts CHANGED
@@ -131,28 +131,21 @@ export type { ViewProps, ViewItemProps } from "./components/View";
131
131
  /**
132
132
  * Hooks
133
133
  */
134
+ export { useHotkeys, useIsomorphicLayoutEffect, useRTL, useKeyboardArrowNavigation, useKeyboardMode, useHandlerRef, useOnClickOutside, useScrollLock, useToggle, } from "@reshaped/headless";
134
135
  export { useFormControl } from "./components/FormControl";
135
136
  export { default as Theme, useTheme, type ThemeProps } from "./components/Theme";
136
- export { default as useHandlerRef } from "./hooks/useHandlerRef";
137
- export { default as useHotkeys } from "./hooks/useHotkeys";
138
- export { default as useIsomorphicLayoutEffect } from "./hooks/useIsomorphicLayoutEffect";
139
- export { default as useKeyboardMode } from "./hooks/useKeyboardMode";
140
- export { default as useKeyboardArrowNavigation } from "./hooks/useKeyboardArrowNavigation";
141
- export { default as useOnClickOutside } from "./hooks/useOnClickOutside";
142
137
  export { default as useResponsiveClientValue } from "./hooks/useResponsiveClientValue";
143
- export { default as useRTL } from "./hooks/useRTL";
144
- export { default as useScrollLock } from "./hooks/useScrollLock";
145
- export { default as useToggle } from "./hooks/useToggle";
146
138
  /**
147
139
  * Utility functions
148
140
  */
149
- export { classNames, responsivePropDependency } from "./utilities/props";
150
- export { TrapFocus } from "./utilities/a11y";
141
+ export { responsivePropDependency } from "./utilities/props";
142
+ export { TrapFocus, classNames } from "@reshaped/headless";
151
143
  /**
152
144
  * Types
153
145
  */
146
+ export type { Attributes } from "@reshaped/headless";
154
147
  export type { ReshapedConfig } from "./types/config";
155
- export type { Responsive, Attributes, ColorMode } from "./types/global";
148
+ export type { Responsive, ColorMode } from "./types/global";
156
149
  /**
157
150
  * Dev utilities
158
151
  */
package/dist/index.js CHANGED
@@ -69,23 +69,15 @@ export { default as View } from "./components/View/index.js";
69
69
  /**
70
70
  * Hooks
71
71
  */
72
+ export { useHotkeys, useIsomorphicLayoutEffect, useRTL, useKeyboardArrowNavigation, useKeyboardMode, useHandlerRef, useOnClickOutside, useScrollLock, useToggle, } from "@reshaped/headless";
72
73
  export { useFormControl } from "./components/FormControl/index.js";
73
74
  export { default as Theme, useTheme } from "./components/Theme/index.js";
74
- export { default as useHandlerRef } from "./hooks/useHandlerRef.js";
75
- export { default as useHotkeys } from "./hooks/useHotkeys.js";
76
- export { default as useIsomorphicLayoutEffect } from "./hooks/useIsomorphicLayoutEffect.js";
77
- export { default as useKeyboardMode } from "./hooks/useKeyboardMode.js";
78
- export { default as useKeyboardArrowNavigation } from "./hooks/useKeyboardArrowNavigation.js";
79
- export { default as useOnClickOutside } from "./hooks/useOnClickOutside.js";
80
75
  export { default as useResponsiveClientValue } from "./hooks/useResponsiveClientValue.js";
81
- export { default as useRTL } from "./hooks/useRTL.js";
82
- export { default as useScrollLock } from "./hooks/useScrollLock.js";
83
- export { default as useToggle } from "./hooks/useToggle.js";
84
76
  /**
85
77
  * Utility functions
86
78
  */
87
- export { classNames, responsivePropDependency } from "./utilities/props.js";
88
- export { TrapFocus } from "./utilities/a11y/index.js";
79
+ export { responsivePropDependency } from "./utilities/props.js";
80
+ export { TrapFocus, classNames } from "@reshaped/headless";
89
81
  /**
90
82
  * Dev utilities
91
83
  */
@@ -1,6 +1,6 @@
1
+ import type { ClassName } from "@reshaped/headless";
1
2
  import type { Mixin } from "./types";
2
- import type * as G from "../types/global";
3
3
  export declare const resolveMixin: (mixin: Mixin) => {
4
4
  variables: React.CSSProperties;
5
- classNames: G.ClassName[];
5
+ classNames: ClassName[];
6
6
  };
@@ -1,5 +1,6 @@
1
1
  import React from "react";
2
2
  import * as G from "../types/global";
3
+ import type { ClassName } from "@reshaped/headless";
3
4
  type Unit = number;
4
5
  type Literal = string;
5
6
  type Size = Literal | Unit;
@@ -26,7 +27,7 @@ export type BorderColor = "neutral" | "neutral-faded" | "critical" | "critical-f
26
27
  */
27
28
  export type StyleResolver<Value> = (value?: G.Responsive<Value>) => {
28
29
  variables?: React.CSSProperties;
29
- classNames?: G.ClassName;
30
+ classNames?: ClassName;
30
31
  };
31
32
  export type Mixin = {
32
33
  align?: G.Responsive<Align>;
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useToggle } from "@reshaped/headless";
2
3
  import React from "react";
3
4
  import Alert from "../components/Alert/index.js";
4
5
  import Avatar from "../components/Avatar/index.js";
@@ -18,7 +19,6 @@ import Table from "../components/Table/index.js";
18
19
  import Text from "../components/Text/index.js";
19
20
  import TextField from "../components/TextField/index.js";
20
21
  import View from "../components/View/index.js";
21
- import useToggle from "../hooks/useToggle.js";
22
22
  import IconChevronDown from "../icons/ChevronDown.js";
23
23
  import IconChevronRight from "../icons/ChevronRight.js";
24
24
  import IconZap from "../icons/Zap.js";
@@ -1 +1 @@
1
- @theme inline{--background-color-primary:var(--rs-color-background-primary);--background-color-primary-faded:var(--rs-color-background-primary-faded);--border-color-primary:var(--rs-color-border-primary);--border-color-primary-faded:var(--rs-color-border-primary-faded);--text-color-primary:var(--rs-color-foreground-primary);--background-color-critical:var(--rs-color-background-critical);--background-color-critical-faded:var(--rs-color-background-critical-faded);--border-color-critical:var(--rs-color-border-critical);--border-color-critical-faded:var(--rs-color-border-critical-faded);--text-color-critical:var(--rs-color-foreground-critical);--background-color-warning:var(--rs-color-background-warning);--background-color-warning-faded:var(--rs-color-background-warning-faded);--border-color-warning:var(--rs-color-border-warning);--border-color-warning-faded:var(--rs-color-border-warning-faded);--text-color-warning:var(--rs-color-foreground-warning);--background-color-positive:var(--rs-color-background-positive);--background-color-positive-faded:var(--rs-color-background-positive-faded);--border-color-positive:var(--rs-color-border-positive);--border-color-positive-faded:var(--rs-color-border-positive-faded);--text-color-positive:var(--rs-color-foreground-positive);--background-color-neutral:var(--rs-color-background-neutral);--background-color-neutral-faded:var(--rs-color-background-neutral-faded);--border-color-neutral:var(--rs-color-border-neutral);--border-color-neutral-faded:var(--rs-color-border-neutral-faded);--text-color-neutral:var(--rs-color-foreground-neutral);--text-color-neutral-faded:var(--rs-color-foreground-neutral-faded);--background-color-disabled:var(--rs-color-background-disabled);--background-color-disabled-faded:var(--rs-color-background-disabled-faded);--border-color-disabled:var(--rs-color-border-disabled);--text-color-disabled:var(--rs-color-foreground-disabled);--background-color-elevation-base:var(--rs-color-background-elevation-base);--background-color-elevation-raised:var(--rs-color-background-elevation-raised);--background-color-elevation-overlay:var(--rs-color-background-elevation-overlay);--background-color-page:var(--rs-color-background-page);--background-color-page-faded:var(--rs-color-background-page-faded);--color-brand:var(--rs-color-brand);--color-white:var(--rs-color-white);--color-black:var(--rs-color-black);--text-color-on-primary:var(--rs-color-on-background-primary);--text-color-on-critical:var(--rs-color-on-background-critical);--text-color-on-warning:var(--rs-color-on-background-warning);--text-color-on-positive:var(--rs-color-on-background-positive);--text-color-on-neutral:var(--rs-color-on-background-neutral);--text-color-on-brand:var(--rs-color-on-brand);--radius-small:var(--rs-radius-small);--radius-medium:var(--rs-radius-medium);--radius-large:var(--rs-radius-large);--spacing-0:0px;--spacing-x1:var(--rs-unit-x1);--spacing-x2:var(--rs-unit-x2);--spacing-x3:var(--rs-unit-x3);--spacing-x4:var(--rs-unit-x4);--spacing-x5:var(--rs-unit-x5);--spacing-x6:var(--rs-unit-x6);--spacing-x7:var(--rs-unit-x7);--spacing-x8:var(--rs-unit-x8);--spacing-x9:var(--rs-unit-x9);--spacing-x10:var(--rs-unit-x10);--shadow-raised:var(--rs-shadow-raised);--shadow-overlay:var(--rs-shadow-overlay);--breakpoint-m:660px;--breakpoint-l:900px;--breakpoint-xl:1280px}
1
+ @theme inline{--background-color-primary:var(--rs-color-background-primary);--background-color-primary-faded:var(--rs-color-background-primary-faded);--border-color-primary:var(--rs-color-border-primary);--outline-color-primary:var(--rs-color-border-primary);--border-color-primary-faded:var(--rs-color-border-primary-faded);--outline-color-primary-faded:var(--rs-color-border-primary-faded);--text-color-primary:var(--rs-color-foreground-primary);--background-color-critical:var(--rs-color-background-critical);--background-color-critical-faded:var(--rs-color-background-critical-faded);--border-color-critical:var(--rs-color-border-critical);--outline-color-critical:var(--rs-color-border-critical);--border-color-critical-faded:var(--rs-color-border-critical-faded);--outline-color-critical-faded:var(--rs-color-border-critical-faded);--text-color-critical:var(--rs-color-foreground-critical);--background-color-warning:var(--rs-color-background-warning);--background-color-warning-faded:var(--rs-color-background-warning-faded);--border-color-warning:var(--rs-color-border-warning);--outline-color-warning:var(--rs-color-border-warning);--border-color-warning-faded:var(--rs-color-border-warning-faded);--outline-color-warning-faded:var(--rs-color-border-warning-faded);--text-color-warning:var(--rs-color-foreground-warning);--background-color-positive:var(--rs-color-background-positive);--background-color-positive-faded:var(--rs-color-background-positive-faded);--border-color-positive:var(--rs-color-border-positive);--outline-color-positive:var(--rs-color-border-positive);--border-color-positive-faded:var(--rs-color-border-positive-faded);--outline-color-positive-faded:var(--rs-color-border-positive-faded);--text-color-positive:var(--rs-color-foreground-positive);--background-color-neutral:var(--rs-color-background-neutral);--background-color-neutral-faded:var(--rs-color-background-neutral-faded);--border-color-neutral:var(--rs-color-border-neutral);--outline-color-neutral:var(--rs-color-border-neutral);--border-color-neutral-faded:var(--rs-color-border-neutral-faded);--outline-color-neutral-faded:var(--rs-color-border-neutral-faded);--text-color-neutral:var(--rs-color-foreground-neutral);--text-color-neutral-faded:var(--rs-color-foreground-neutral-faded);--background-color-disabled:var(--rs-color-background-disabled);--background-color-disabled-faded:var(--rs-color-background-disabled-faded);--border-color-disabled:var(--rs-color-border-disabled);--outline-color-disabled:var(--rs-color-border-disabled);--text-color-disabled:var(--rs-color-foreground-disabled);--background-color-elevation-base:var(--rs-color-background-elevation-base);--background-color-elevation-raised:var(--rs-color-background-elevation-raised);--background-color-elevation-overlay:var(--rs-color-background-elevation-overlay);--background-color-page:var(--rs-color-background-page);--background-color-page-faded:var(--rs-color-background-page-faded);--color-brand:var(--rs-color-brand);--color-white:var(--rs-color-white);--color-black:var(--rs-color-black);--text-color-on-primary:var(--rs-color-on-background-primary);--text-color-on-critical:var(--rs-color-on-background-critical);--text-color-on-warning:var(--rs-color-on-background-warning);--text-color-on-positive:var(--rs-color-on-background-positive);--text-color-on-neutral:var(--rs-color-on-background-neutral);--text-color-on-brand:var(--rs-color-on-brand);--radius-small:var(--rs-radius-small);--radius-medium:var(--rs-radius-medium);--radius-large:var(--rs-radius-large);--spacing-0:0px;--spacing-x1:var(--rs-unit-x1);--spacing-x2:var(--rs-unit-x2);--spacing-x3:var(--rs-unit-x3);--spacing-x4:var(--rs-unit-x4);--spacing-x5:var(--rs-unit-x5);--spacing-x6:var(--rs-unit-x6);--spacing-x7:var(--rs-unit-x7);--spacing-x8:var(--rs-unit-x8);--spacing-x9:var(--rs-unit-x9);--spacing-x10:var(--rs-unit-x10);--shadow-raised:var(--rs-shadow-raised);--shadow-overlay:var(--rs-shadow-overlay);--breakpoint-m:660px;--breakpoint-l:900px;--breakpoint-xl:1280px}
@@ -1 +1 @@
1
- @theme inline{--background-color-primary:var(--rs-color-background-primary);--background-color-primary-faded:var(--rs-color-background-primary-faded);--border-color-primary:var(--rs-color-border-primary);--border-color-primary-faded:var(--rs-color-border-primary-faded);--text-color-primary:var(--rs-color-foreground-primary);--background-color-critical:var(--rs-color-background-critical);--background-color-critical-faded:var(--rs-color-background-critical-faded);--border-color-critical:var(--rs-color-border-critical);--border-color-critical-faded:var(--rs-color-border-critical-faded);--text-color-critical:var(--rs-color-foreground-critical);--background-color-warning:var(--rs-color-background-warning);--background-color-warning-faded:var(--rs-color-background-warning-faded);--border-color-warning:var(--rs-color-border-warning);--border-color-warning-faded:var(--rs-color-border-warning-faded);--text-color-warning:var(--rs-color-foreground-warning);--background-color-positive:var(--rs-color-background-positive);--background-color-positive-faded:var(--rs-color-background-positive-faded);--border-color-positive:var(--rs-color-border-positive);--border-color-positive-faded:var(--rs-color-border-positive-faded);--text-color-positive:var(--rs-color-foreground-positive);--background-color-neutral:var(--rs-color-background-neutral);--background-color-neutral-faded:var(--rs-color-background-neutral-faded);--border-color-neutral:var(--rs-color-border-neutral);--border-color-neutral-faded:var(--rs-color-border-neutral-faded);--text-color-neutral:var(--rs-color-foreground-neutral);--text-color-neutral-faded:var(--rs-color-foreground-neutral-faded);--background-color-disabled:var(--rs-color-background-disabled);--background-color-disabled-faded:var(--rs-color-background-disabled-faded);--border-color-disabled:var(--rs-color-border-disabled);--text-color-disabled:var(--rs-color-foreground-disabled);--background-color-elevation-base:var(--rs-color-background-elevation-base);--background-color-elevation-raised:var(--rs-color-background-elevation-raised);--background-color-elevation-overlay:var(--rs-color-background-elevation-overlay);--background-color-page:var(--rs-color-background-page);--background-color-page-faded:var(--rs-color-background-page-faded);--color-brand:var(--rs-color-brand);--color-white:var(--rs-color-white);--color-black:var(--rs-color-black);--background-color-primary-highlighted:var(--rs-color-background-primary-highlighted);--text-color-on-primary:var(--rs-color-on-background-primary);--radius-small:var(--rs-radius-small);--radius-medium:var(--rs-radius-medium);--radius-large:var(--rs-radius-large);--spacing-0:0px;--spacing-x1:var(--rs-unit-x1);--spacing-x2:var(--rs-unit-x2);--spacing-x3:var(--rs-unit-x3);--spacing-x4:var(--rs-unit-x4);--spacing-x5:var(--rs-unit-x5);--spacing-x6:var(--rs-unit-x6);--spacing-x7:var(--rs-unit-x7);--spacing-x8:var(--rs-unit-x8);--spacing-x9:var(--rs-unit-x9);--spacing-x10:var(--rs-unit-x10);--shadow-raised:var(--rs-shadow-raised);--shadow-overlay:var(--rs-shadow-overlay);--breakpoint-m:660px;--breakpoint-l:900px;--breakpoint-xl:1280px}
1
+ @theme inline{--background-color-primary:var(--rs-color-background-primary);--background-color-primary-faded:var(--rs-color-background-primary-faded);--border-color-primary:var(--rs-color-border-primary);--outline-color-primary:var(--rs-color-border-primary);--border-color-primary-faded:var(--rs-color-border-primary-faded);--outline-color-primary-faded:var(--rs-color-border-primary-faded);--text-color-primary:var(--rs-color-foreground-primary);--background-color-critical:var(--rs-color-background-critical);--background-color-critical-faded:var(--rs-color-background-critical-faded);--border-color-critical:var(--rs-color-border-critical);--outline-color-critical:var(--rs-color-border-critical);--border-color-critical-faded:var(--rs-color-border-critical-faded);--outline-color-critical-faded:var(--rs-color-border-critical-faded);--text-color-critical:var(--rs-color-foreground-critical);--background-color-warning:var(--rs-color-background-warning);--background-color-warning-faded:var(--rs-color-background-warning-faded);--border-color-warning:var(--rs-color-border-warning);--outline-color-warning:var(--rs-color-border-warning);--border-color-warning-faded:var(--rs-color-border-warning-faded);--outline-color-warning-faded:var(--rs-color-border-warning-faded);--text-color-warning:var(--rs-color-foreground-warning);--background-color-positive:var(--rs-color-background-positive);--background-color-positive-faded:var(--rs-color-background-positive-faded);--border-color-positive:var(--rs-color-border-positive);--outline-color-positive:var(--rs-color-border-positive);--border-color-positive-faded:var(--rs-color-border-positive-faded);--outline-color-positive-faded:var(--rs-color-border-positive-faded);--text-color-positive:var(--rs-color-foreground-positive);--background-color-neutral:var(--rs-color-background-neutral);--background-color-neutral-faded:var(--rs-color-background-neutral-faded);--border-color-neutral:var(--rs-color-border-neutral);--outline-color-neutral:var(--rs-color-border-neutral);--border-color-neutral-faded:var(--rs-color-border-neutral-faded);--outline-color-neutral-faded:var(--rs-color-border-neutral-faded);--text-color-neutral:var(--rs-color-foreground-neutral);--text-color-neutral-faded:var(--rs-color-foreground-neutral-faded);--background-color-disabled:var(--rs-color-background-disabled);--background-color-disabled-faded:var(--rs-color-background-disabled-faded);--border-color-disabled:var(--rs-color-border-disabled);--outline-color-disabled:var(--rs-color-border-disabled);--text-color-disabled:var(--rs-color-foreground-disabled);--background-color-elevation-base:var(--rs-color-background-elevation-base);--background-color-elevation-raised:var(--rs-color-background-elevation-raised);--background-color-elevation-overlay:var(--rs-color-background-elevation-overlay);--background-color-page:var(--rs-color-background-page);--background-color-page-faded:var(--rs-color-background-page-faded);--color-brand:var(--rs-color-brand);--color-white:var(--rs-color-white);--color-black:var(--rs-color-black);--background-color-primary-highlighted:var(--rs-color-background-primary-highlighted);--text-color-on-primary:var(--rs-color-on-background-primary);--radius-small:var(--rs-radius-small);--radius-medium:var(--rs-radius-medium);--radius-large:var(--rs-radius-large);--spacing-0:0px;--spacing-x1:var(--rs-unit-x1);--spacing-x2:var(--rs-unit-x2);--spacing-x3:var(--rs-unit-x3);--spacing-x4:var(--rs-unit-x4);--spacing-x5:var(--rs-unit-x5);--spacing-x6:var(--rs-unit-x6);--spacing-x7:var(--rs-unit-x7);--spacing-x8:var(--rs-unit-x8);--spacing-x9:var(--rs-unit-x9);--spacing-x10:var(--rs-unit-x10);--shadow-raised:var(--rs-shadow-raised);--shadow-overlay:var(--rs-shadow-overlay);--breakpoint-m:660px;--breakpoint-l:900px;--breakpoint-xl:1280px}
@@ -1 +1 @@
1
- @theme inline{--background-color-primary:var(--rs-color-background-primary);--background-color-primary-faded:var(--rs-color-background-primary-faded);--border-color-primary:var(--rs-color-border-primary);--border-color-primary-faded:var(--rs-color-border-primary-faded);--text-color-primary:var(--rs-color-foreground-primary);--background-color-critical:var(--rs-color-background-critical);--background-color-critical-faded:var(--rs-color-background-critical-faded);--border-color-critical:var(--rs-color-border-critical);--border-color-critical-faded:var(--rs-color-border-critical-faded);--text-color-critical:var(--rs-color-foreground-critical);--background-color-warning:var(--rs-color-background-warning);--background-color-warning-faded:var(--rs-color-background-warning-faded);--border-color-warning:var(--rs-color-border-warning);--border-color-warning-faded:var(--rs-color-border-warning-faded);--text-color-warning:var(--rs-color-foreground-warning);--background-color-positive:var(--rs-color-background-positive);--background-color-positive-faded:var(--rs-color-background-positive-faded);--border-color-positive:var(--rs-color-border-positive);--border-color-positive-faded:var(--rs-color-border-positive-faded);--text-color-positive:var(--rs-color-foreground-positive);--background-color-neutral:var(--rs-color-background-neutral);--background-color-neutral-faded:var(--rs-color-background-neutral-faded);--border-color-neutral:var(--rs-color-border-neutral);--border-color-neutral-faded:var(--rs-color-border-neutral-faded);--text-color-neutral:var(--rs-color-foreground-neutral);--text-color-neutral-faded:var(--rs-color-foreground-neutral-faded);--background-color-disabled:var(--rs-color-background-disabled);--background-color-disabled-faded:var(--rs-color-background-disabled-faded);--border-color-disabled:var(--rs-color-border-disabled);--text-color-disabled:var(--rs-color-foreground-disabled);--background-color-elevation-base:var(--rs-color-background-elevation-base);--background-color-elevation-raised:var(--rs-color-background-elevation-raised);--background-color-elevation-overlay:var(--rs-color-background-elevation-overlay);--background-color-page:var(--rs-color-background-page);--background-color-page-faded:var(--rs-color-background-page-faded);--color-brand:var(--rs-color-brand);--color-white:var(--rs-color-white);--color-black:var(--rs-color-black);--text-color-on-primary:var(--rs-color-on-background-primary);--text-color-on-critical:var(--rs-color-on-background-critical);--text-color-on-warning:var(--rs-color-on-background-warning);--text-color-on-positive:var(--rs-color-on-background-positive);--text-color-on-neutral:var(--rs-color-on-background-neutral);--text-color-on-brand:var(--rs-color-on-brand);--radius-small:var(--rs-radius-small);--radius-medium:var(--rs-radius-medium);--radius-large:var(--rs-radius-large);--spacing-0:0px;--spacing-x1:var(--rs-unit-x1);--spacing-x2:var(--rs-unit-x2);--spacing-x3:var(--rs-unit-x3);--spacing-x4:var(--rs-unit-x4);--spacing-x5:var(--rs-unit-x5);--spacing-x6:var(--rs-unit-x6);--spacing-x7:var(--rs-unit-x7);--spacing-x8:var(--rs-unit-x8);--spacing-x9:var(--rs-unit-x9);--spacing-x10:var(--rs-unit-x10);--shadow-raised:var(--rs-shadow-raised);--shadow-overlay:var(--rs-shadow-overlay);--breakpoint-m:660px;--breakpoint-l:900px;--breakpoint-xl:1280px}
1
+ @theme inline{--background-color-primary:var(--rs-color-background-primary);--background-color-primary-faded:var(--rs-color-background-primary-faded);--border-color-primary:var(--rs-color-border-primary);--outline-color-primary:var(--rs-color-border-primary);--border-color-primary-faded:var(--rs-color-border-primary-faded);--outline-color-primary-faded:var(--rs-color-border-primary-faded);--text-color-primary:var(--rs-color-foreground-primary);--background-color-critical:var(--rs-color-background-critical);--background-color-critical-faded:var(--rs-color-background-critical-faded);--border-color-critical:var(--rs-color-border-critical);--outline-color-critical:var(--rs-color-border-critical);--border-color-critical-faded:var(--rs-color-border-critical-faded);--outline-color-critical-faded:var(--rs-color-border-critical-faded);--text-color-critical:var(--rs-color-foreground-critical);--background-color-warning:var(--rs-color-background-warning);--background-color-warning-faded:var(--rs-color-background-warning-faded);--border-color-warning:var(--rs-color-border-warning);--outline-color-warning:var(--rs-color-border-warning);--border-color-warning-faded:var(--rs-color-border-warning-faded);--outline-color-warning-faded:var(--rs-color-border-warning-faded);--text-color-warning:var(--rs-color-foreground-warning);--background-color-positive:var(--rs-color-background-positive);--background-color-positive-faded:var(--rs-color-background-positive-faded);--border-color-positive:var(--rs-color-border-positive);--outline-color-positive:var(--rs-color-border-positive);--border-color-positive-faded:var(--rs-color-border-positive-faded);--outline-color-positive-faded:var(--rs-color-border-positive-faded);--text-color-positive:var(--rs-color-foreground-positive);--background-color-neutral:var(--rs-color-background-neutral);--background-color-neutral-faded:var(--rs-color-background-neutral-faded);--border-color-neutral:var(--rs-color-border-neutral);--outline-color-neutral:var(--rs-color-border-neutral);--border-color-neutral-faded:var(--rs-color-border-neutral-faded);--outline-color-neutral-faded:var(--rs-color-border-neutral-faded);--text-color-neutral:var(--rs-color-foreground-neutral);--text-color-neutral-faded:var(--rs-color-foreground-neutral-faded);--background-color-disabled:var(--rs-color-background-disabled);--background-color-disabled-faded:var(--rs-color-background-disabled-faded);--border-color-disabled:var(--rs-color-border-disabled);--outline-color-disabled:var(--rs-color-border-disabled);--text-color-disabled:var(--rs-color-foreground-disabled);--background-color-elevation-base:var(--rs-color-background-elevation-base);--background-color-elevation-raised:var(--rs-color-background-elevation-raised);--background-color-elevation-overlay:var(--rs-color-background-elevation-overlay);--background-color-page:var(--rs-color-background-page);--background-color-page-faded:var(--rs-color-background-page-faded);--color-brand:var(--rs-color-brand);--color-white:var(--rs-color-white);--color-black:var(--rs-color-black);--text-color-on-primary:var(--rs-color-on-background-primary);--text-color-on-critical:var(--rs-color-on-background-critical);--text-color-on-warning:var(--rs-color-on-background-warning);--text-color-on-positive:var(--rs-color-on-background-positive);--text-color-on-neutral:var(--rs-color-on-background-neutral);--text-color-on-brand:var(--rs-color-on-brand);--radius-small:var(--rs-radius-small);--radius-medium:var(--rs-radius-medium);--radius-large:var(--rs-radius-large);--spacing-0:0px;--spacing-x1:var(--rs-unit-x1);--spacing-x2:var(--rs-unit-x2);--spacing-x3:var(--rs-unit-x3);--spacing-x4:var(--rs-unit-x4);--spacing-x5:var(--rs-unit-x5);--spacing-x6:var(--rs-unit-x6);--spacing-x7:var(--rs-unit-x7);--spacing-x8:var(--rs-unit-x8);--spacing-x9:var(--rs-unit-x9);--spacing-x10:var(--rs-unit-x10);--shadow-raised:var(--rs-shadow-raised);--shadow-overlay:var(--rs-shadow-overlay);--breakpoint-m:660px;--breakpoint-l:900px;--breakpoint-xl:1280px}
@@ -1 +1 @@
1
- @theme inline{--background-color-primary:var(--rs-color-background-primary);--background-color-primary-faded:var(--rs-color-background-primary-faded);--border-color-primary:var(--rs-color-border-primary);--border-color-primary-faded:var(--rs-color-border-primary-faded);--text-color-primary:var(--rs-color-foreground-primary);--background-color-critical:var(--rs-color-background-critical);--background-color-critical-faded:var(--rs-color-background-critical-faded);--border-color-critical:var(--rs-color-border-critical);--border-color-critical-faded:var(--rs-color-border-critical-faded);--text-color-critical:var(--rs-color-foreground-critical);--background-color-warning:var(--rs-color-background-warning);--background-color-warning-faded:var(--rs-color-background-warning-faded);--border-color-warning:var(--rs-color-border-warning);--border-color-warning-faded:var(--rs-color-border-warning-faded);--text-color-warning:var(--rs-color-foreground-warning);--background-color-positive:var(--rs-color-background-positive);--background-color-positive-faded:var(--rs-color-background-positive-faded);--border-color-positive:var(--rs-color-border-positive);--border-color-positive-faded:var(--rs-color-border-positive-faded);--text-color-positive:var(--rs-color-foreground-positive);--background-color-neutral:var(--rs-color-background-neutral);--background-color-neutral-faded:var(--rs-color-background-neutral-faded);--border-color-neutral:var(--rs-color-border-neutral);--border-color-neutral-faded:var(--rs-color-border-neutral-faded);--text-color-neutral:var(--rs-color-foreground-neutral);--text-color-neutral-faded:var(--rs-color-foreground-neutral-faded);--background-color-disabled:var(--rs-color-background-disabled);--background-color-disabled-faded:var(--rs-color-background-disabled-faded);--border-color-disabled:var(--rs-color-border-disabled);--text-color-disabled:var(--rs-color-foreground-disabled);--background-color-elevation-base:var(--rs-color-background-elevation-base);--background-color-elevation-raised:var(--rs-color-background-elevation-raised);--background-color-elevation-overlay:var(--rs-color-background-elevation-overlay);--background-color-page:var(--rs-color-background-page);--background-color-page-faded:var(--rs-color-background-page-faded);--color-brand:var(--rs-color-brand);--color-white:var(--rs-color-white);--color-black:var(--rs-color-black);--text-color-on-primary:var(--rs-color-on-background-primary);--text-color-on-critical:var(--rs-color-on-background-critical);--text-color-on-warning:var(--rs-color-on-background-warning);--text-color-on-positive:var(--rs-color-on-background-positive);--text-color-on-neutral:var(--rs-color-on-background-neutral);--text-color-on-brand:var(--rs-color-on-brand);--radius-small:var(--rs-radius-small);--radius-medium:var(--rs-radius-medium);--radius-large:var(--rs-radius-large);--spacing-0:0px;--spacing-x1:var(--rs-unit-x1);--spacing-x2:var(--rs-unit-x2);--spacing-x3:var(--rs-unit-x3);--spacing-x4:var(--rs-unit-x4);--spacing-x5:var(--rs-unit-x5);--spacing-x6:var(--rs-unit-x6);--spacing-x7:var(--rs-unit-x7);--spacing-x8:var(--rs-unit-x8);--spacing-x9:var(--rs-unit-x9);--spacing-x10:var(--rs-unit-x10);--shadow-raised:var(--rs-shadow-raised);--shadow-overlay:var(--rs-shadow-overlay);--breakpoint-m:660px;--breakpoint-l:900px;--breakpoint-xl:1280px}
1
+ @theme inline{--background-color-primary:var(--rs-color-background-primary);--background-color-primary-faded:var(--rs-color-background-primary-faded);--border-color-primary:var(--rs-color-border-primary);--outline-color-primary:var(--rs-color-border-primary);--border-color-primary-faded:var(--rs-color-border-primary-faded);--outline-color-primary-faded:var(--rs-color-border-primary-faded);--text-color-primary:var(--rs-color-foreground-primary);--background-color-critical:var(--rs-color-background-critical);--background-color-critical-faded:var(--rs-color-background-critical-faded);--border-color-critical:var(--rs-color-border-critical);--outline-color-critical:var(--rs-color-border-critical);--border-color-critical-faded:var(--rs-color-border-critical-faded);--outline-color-critical-faded:var(--rs-color-border-critical-faded);--text-color-critical:var(--rs-color-foreground-critical);--background-color-warning:var(--rs-color-background-warning);--background-color-warning-faded:var(--rs-color-background-warning-faded);--border-color-warning:var(--rs-color-border-warning);--outline-color-warning:var(--rs-color-border-warning);--border-color-warning-faded:var(--rs-color-border-warning-faded);--outline-color-warning-faded:var(--rs-color-border-warning-faded);--text-color-warning:var(--rs-color-foreground-warning);--background-color-positive:var(--rs-color-background-positive);--background-color-positive-faded:var(--rs-color-background-positive-faded);--border-color-positive:var(--rs-color-border-positive);--outline-color-positive:var(--rs-color-border-positive);--border-color-positive-faded:var(--rs-color-border-positive-faded);--outline-color-positive-faded:var(--rs-color-border-positive-faded);--text-color-positive:var(--rs-color-foreground-positive);--background-color-neutral:var(--rs-color-background-neutral);--background-color-neutral-faded:var(--rs-color-background-neutral-faded);--border-color-neutral:var(--rs-color-border-neutral);--outline-color-neutral:var(--rs-color-border-neutral);--border-color-neutral-faded:var(--rs-color-border-neutral-faded);--outline-color-neutral-faded:var(--rs-color-border-neutral-faded);--text-color-neutral:var(--rs-color-foreground-neutral);--text-color-neutral-faded:var(--rs-color-foreground-neutral-faded);--background-color-disabled:var(--rs-color-background-disabled);--background-color-disabled-faded:var(--rs-color-background-disabled-faded);--border-color-disabled:var(--rs-color-border-disabled);--outline-color-disabled:var(--rs-color-border-disabled);--text-color-disabled:var(--rs-color-foreground-disabled);--background-color-elevation-base:var(--rs-color-background-elevation-base);--background-color-elevation-raised:var(--rs-color-background-elevation-raised);--background-color-elevation-overlay:var(--rs-color-background-elevation-overlay);--background-color-page:var(--rs-color-background-page);--background-color-page-faded:var(--rs-color-background-page-faded);--color-brand:var(--rs-color-brand);--color-white:var(--rs-color-white);--color-black:var(--rs-color-black);--text-color-on-primary:var(--rs-color-on-background-primary);--text-color-on-critical:var(--rs-color-on-background-critical);--text-color-on-warning:var(--rs-color-on-background-warning);--text-color-on-positive:var(--rs-color-on-background-positive);--text-color-on-neutral:var(--rs-color-on-background-neutral);--text-color-on-brand:var(--rs-color-on-brand);--radius-small:var(--rs-radius-small);--radius-medium:var(--rs-radius-medium);--radius-large:var(--rs-radius-large);--spacing-0:0px;--spacing-x1:var(--rs-unit-x1);--spacing-x2:var(--rs-unit-x2);--spacing-x3:var(--rs-unit-x3);--spacing-x4:var(--rs-unit-x4);--spacing-x5:var(--rs-unit-x5);--spacing-x6:var(--rs-unit-x6);--spacing-x7:var(--rs-unit-x7);--spacing-x8:var(--rs-unit-x8);--spacing-x9:var(--rs-unit-x9);--spacing-x10:var(--rs-unit-x10);--shadow-raised:var(--rs-shadow-raised);--shadow-overlay:var(--rs-shadow-overlay);--breakpoint-m:660px;--breakpoint-l:900px;--breakpoint-xl:1280px}
@@ -1,24 +1,9 @@
1
1
  import React from "react";
2
- /**
3
- * DOM
4
- */
5
- type ClassNameValue = string | null | undefined | false;
6
- export type ClassName = ClassNameValue | ClassNameValue[] | ClassName[];
7
- export type CSSVariable = `--${string}`;
8
- export type StyleAttribute = React.CSSProperties | (React.CSSProperties & Record<CSSVariable, string | number | undefined>);
9
- type DataAttributes = object | Record<`data-${string}`, string | boolean>;
10
- export type Attributes<TagName extends keyof React.JSX.IntrinsicElements | void = void> = (TagName extends keyof React.JSX.IntrinsicElements ? React.JSX.IntrinsicElements[TagName] : React.HTMLAttributes<HTMLElement>) & DataAttributes & {
11
- style?: StyleAttribute;
12
- };
13
2
  export type Viewport = "s" | "m" | "l" | "xl";
14
3
  export type ResponsiveOnly<T> = {
15
4
  [key in Viewport]?: T;
16
5
  };
17
6
  export type Responsive<T> = T | ResponsiveOnly<T>;
18
- export type Coordinates = {
19
- x: number;
20
- y: number;
21
- };
22
7
  /**
23
8
  * Form handlers
24
9
  */
@@ -1,3 +1,2 @@
1
1
  export declare const sleep: (milliseconds: number) => Promise<unknown>;
2
2
  export declare const range: (start: number, end: number) => number[];
3
- export declare const rafThrottle: <T extends (...args: any[]) => void>(fn: T) => T;
@@ -6,17 +6,3 @@ export const range = (start, end) => {
6
6
  return [];
7
7
  return Array.from({ length: end - start + 1 }, (_, i) => start + i);
8
8
  };
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
- export const rafThrottle = (fn) => {
11
- let rafId = null;
12
- let args = null;
13
- return function (...newArgs) {
14
- args = newArgs;
15
- if (rafId === null) {
16
- rafId = requestAnimationFrame(() => {
17
- rafId = null;
18
- fn(...args);
19
- });
20
- }
21
- };
22
- };
@@ -1,13 +1,10 @@
1
+ import type { CSSVariable } from "@reshaped/headless";
1
2
  import type * as G from "../types/global";
2
3
  type Value = string | boolean | number | undefined;
3
4
  type ClassNameResolver = string | ((value: Value) => string);
4
- /**
5
- * Resolve an array of values into a classname string
6
- */
7
- export declare const classNames: (...args: G.ClassName[]) => string;
8
5
  export declare const responsiveClassNames: <V extends G.Responsive<Value>>(s: Record<string, string>, className: ClassNameResolver, value: V, options?: {
9
6
  excludeValueFromClassName?: boolean;
10
7
  }) => string[];
11
- export declare const responsiveVariables: <V extends Value = Value>(variableName: G.CSSVariable, value?: G.Responsive<V>) => Record<G.CSSVariable, V>;
8
+ export declare const responsiveVariables: <V extends Value = Value>(variableName: CSSVariable, value?: G.Responsive<V>) => Record<CSSVariable, V>;
12
9
  export declare const responsivePropDependency: <Result, T>(prop: G.Responsive<T>, resolver: (value: T, key: G.Viewport) => Result) => Result;
13
10
  export {};
@@ -1,21 +1,3 @@
1
- /**
2
- * Resolve an array of values into a classname string
3
- */
4
- export const classNames = (...args) => {
5
- return args
6
- .reduce((acc, cur) => {
7
- if (Array.isArray(cur)) {
8
- const className = classNames(...cur);
9
- if (!className)
10
- return acc;
11
- return `${acc} ${className}`;
12
- }
13
- if (cur)
14
- return `${acc} ${cur}`;
15
- return acc;
16
- }, "")
17
- .trim();
18
- };
19
1
  const applyClassName = (passedClassName, value, options) => {
20
2
  const { base, excludeValueFromClassName } = options || {};
21
3
  const className = typeof passedClassName === "string" ? passedClassName : passedClassName(value);
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.9.1-canary.3",
4
+ "version": "3.10.0-canary.10",
5
5
  "license": "MIT",
6
6
  "email": "hello@reshaped.so",
7
7
  "homepage": "https://reshaped.so",
@@ -91,17 +91,17 @@
91
91
  "csstype": "3.1.3",
92
92
  "culori": "4.0.2",
93
93
  "postcss-custom-media": "11.0.6",
94
- "@reshaped/utilities": "3.9.1-canary.3"
94
+ "@reshaped/headless": "3.10.0-canary.10"
95
95
  },
96
96
  "scripts": {
97
- "clean": "sh ./bin/clean.sh",
97
+ "clean": "bash ./bin/clean.sh",
98
98
  "dev": "storybook dev -p 3001 -c ../../.storybook --disable-telemetry",
99
99
  "build": "pnpm clean && pnpm build:esm && pnpm build:css && pnpm build:bundle",
100
100
  "build:themes": "node bin/cli.js theming --config dist/cli/theming/reshaped.config.js --output src/themes",
101
101
  "build:esm": "tsc -p tsconfig.esm.json && resolve-tspaths -p tsconfig.esm.json",
102
102
  "build:css": "postcss \"src/**/*.css\" --dir dist --base src --config tools/build",
103
103
  "build:stories": "tsc -p tsconfig.stories.json && resolve-tspaths -p tsconfig.stories.json",
104
- "build:bundle": "vite build && cp dist/index.d.ts dist/bundle.d.ts",
104
+ "build:bundle": "vite build && shx cp dist/index.d.ts dist/bundle.d.ts",
105
105
  "build:size": "pnpm clean && pnpm build:esm && pnpm build:bundle",
106
106
  "release:local": "pnpm build && pnpm pack --out reshaped-local.tgz",
107
107
  "test:browser": "vitest run --project=storybook",
@@ -1,4 +0,0 @@
1
- import React from "react";
2
- import type * as T from "./Actionable.types";
3
- declare const Actionable: React.ForwardRefExoticComponent<T.Props & React.RefAttributes<T.Ref>>;
4
- export default Actionable;
@@ -1,73 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { forwardRef } from "react";
4
- import * as keys from "../../constants/keys.js";
5
- import { classNames } from "../../utilities/props.js";
6
- const Actionable = forwardRef((props, ref) => {
7
- const { children, render, href, onClick, type, disabled, as, stopPropagation, className, attributes, } = props;
8
- const rootAttributes = { ...attributes };
9
- const hasClickHandler = onClick || attributes?.onClick;
10
- const hasFocusHandler = attributes?.onFocus || attributes?.onBlur;
11
- const isLink = Boolean(href || attributes?.href);
12
- // Including attributes ref for the cases when event listeners are added through it
13
- // To make sure it doesn't render a span
14
- const isButton = Boolean(hasClickHandler || hasFocusHandler || type || attributes?.ref);
15
- const renderedAsButton = !isLink && isButton && (!as || as === "button");
16
- // Using any here to let TS save on type resolving, otherwise TS throws an error due to the type complexity
17
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
- let TagName;
19
- if (isLink) {
20
- TagName = "a";
21
- rootAttributes.href = disabled ? undefined : href || attributes?.href;
22
- }
23
- else if (renderedAsButton) {
24
- TagName = "button";
25
- rootAttributes.type = type || attributes?.type || "button";
26
- rootAttributes.disabled = disabled || attributes?.disabled;
27
- }
28
- else if (isButton) {
29
- const isFocusable = as === "label";
30
- const simulateButton = !isFocusable || hasClickHandler || hasFocusHandler;
31
- TagName = as || "span";
32
- rootAttributes.role = simulateButton ? "button" : undefined;
33
- rootAttributes.tabIndex = simulateButton ? 0 : undefined;
34
- }
35
- else {
36
- TagName = as || "span";
37
- }
38
- const handlePress = (event) => {
39
- if (disabled)
40
- return;
41
- if (stopPropagation)
42
- event.stopPropagation();
43
- onClick?.(event);
44
- attributes?.onClick?.(event);
45
- };
46
- const handleKeyDown = (event) => {
47
- const isSpace = event.key === keys.SPACE;
48
- const isEnter = event.key === keys.ENTER;
49
- if (!isSpace && !isEnter)
50
- return;
51
- if (rootAttributes.role !== "button")
52
- return;
53
- if (stopPropagation)
54
- event.stopPropagation();
55
- event.preventDefault();
56
- handlePress(event);
57
- };
58
- const tagAttributes = {
59
- ref: ref,
60
- // rootAttributes can receive ref from Flyout
61
- ...rootAttributes,
62
- className: classNames(className),
63
- onClick: handlePress,
64
- onKeyDown: handleKeyDown,
65
- "aria-disabled": disabled ? true : undefined,
66
- children: children,
67
- };
68
- if (render)
69
- return render(tagAttributes);
70
- return _jsx(TagName, { ...tagAttributes });
71
- });
72
- Actionable.displayName = "Actionable";
73
- export default Actionable;
@@ -1,34 +0,0 @@
1
- import type React from "react";
2
- import type * as G from "../../types/global";
3
- export type AttributesRef = React.RefObject<HTMLButtonElement | null>;
4
- type Attributes = G.Attributes<"button"> & Omit<React.JSX.IntrinsicElements["a"], keyof G.Attributes<"button">> & {
5
- ref?: AttributesRef;
6
- };
7
- export type RenderAttributes = G.Attributes<"a"> & {
8
- ref: React.RefObject<HTMLAnchorElement | null>;
9
- children: React.ReactNode;
10
- };
11
- export type Props = {
12
- /** Node for inserting the content */
13
- children?: React.ReactNode;
14
- /** Render a custom root element, useful for integrating with routers */
15
- render?: (attributes: RenderAttributes) => React.ReactNode;
16
- /** Callback when clicked, renders it as a button tag if href is not provided */
17
- onClick?: (e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>) => void;
18
- /** URL, renders it as an anchor tag */
19
- href?: string;
20
- /** Type attribute, renders it as a button tag */
21
- type?: React.ButtonHTMLAttributes<HTMLButtonElement>["type"];
22
- /** Disable from user interaction */
23
- disabled?: boolean;
24
- /** Prevent the event from bubbling up to the parent */
25
- stopPropagation?: boolean;
26
- /** Render as a different element */
27
- as?: keyof React.JSX.IntrinsicElements;
28
- /** Additional classname for the root element */
29
- className?: G.ClassName;
30
- /** Additional attributes for the root element */
31
- attributes?: Attributes;
32
- };
33
- export type Ref = HTMLButtonElement | HTMLAnchorElement;
34
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- export { default } from "./Actionable";
2
- export type { Props as ActionableProps, Ref as ActionableRef } from "./Actionable.types";
@@ -1 +0,0 @@
1
- export { default } from "./Actionable.js";
@@ -1,9 +0,0 @@
1
- import React from "react";
2
- import type * as G from "../../types/global";
3
- type Context = {
4
- rtl: [boolean, (state: boolean) => void];
5
- defaultViewport: G.Viewport;
6
- };
7
- export declare const SingletonEnvironmentContext: React.Context<Context>;
8
- export declare const useSingletonEnvironment: (defaultRTL?: boolean) => [boolean, React.Dispatch<React.SetStateAction<boolean>>];
9
- export {};
@@ -1,33 +0,0 @@
1
- import React from "react";
2
- import useIsomorphicLayoutEffect from "../useIsomorphicLayoutEffect.js";
3
- export const SingletonEnvironmentContext = React.createContext({
4
- rtl: [false, () => { }],
5
- defaultViewport: "s",
6
- });
7
- export const useSingletonEnvironment = (defaultRTL) => {
8
- const state = React.useState(defaultRTL || false);
9
- const [isRTL, setRTL] = state;
10
- /**
11
- * Handle changing dir attribute directly
12
- */
13
- useIsomorphicLayoutEffect(() => {
14
- const observer = new MutationObserver((mutations) => {
15
- mutations.forEach((mutation) => {
16
- if (mutation.attributeName !== "dir")
17
- return;
18
- const nextRTL = mutation.target.dir === "rtl";
19
- if (isRTL !== nextRTL)
20
- setRTL(nextRTL);
21
- });
22
- });
23
- observer.observe(document.documentElement, { attributes: true });
24
- return () => observer.disconnect();
25
- }, [isRTL]);
26
- /**
27
- * Handle setRTL usage
28
- */
29
- useIsomorphicLayoutEffect(() => {
30
- document.documentElement.setAttribute("dir", isRTL ? "rtl" : "ltr");
31
- }, [isRTL]);
32
- return state;
33
- };