reshaped 3.3.11 → 3.3.13

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 (253) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/bundle.css +1 -1
  3. package/dist/bundle.d.ts +1 -1
  4. package/dist/bundle.js +16 -17
  5. package/dist/cjs/themes/_generator/utilities/generateColors.d.ts +1 -1
  6. package/dist/cjs/themes/_generator/utilities/generateColors.js +3 -2
  7. package/dist/cjs/themes/_generator/utilities/tests/color.test.js +32 -31
  8. package/dist/cjs/themes/slate/theme.css +1 -1
  9. package/dist/components/Accordion/tests/Accordion.stories.d.ts +30 -8
  10. package/dist/components/Accordion/tests/Accordion.stories.js +172 -119
  11. package/dist/components/ActionBar/tests/ActionBar.stories.d.ts +12 -3
  12. package/dist/components/ActionBar/tests/ActionBar.stories.js +51 -36
  13. package/dist/components/ActionBar/tests/ActionBar.test.stories.d.ts +15 -0
  14. package/dist/components/ActionBar/tests/ActionBar.test.stories.js +26 -0
  15. package/dist/components/Actionable/Actionable.js +1 -1
  16. package/dist/components/Actionable/tests/Actionable.stories.d.ts +19 -5
  17. package/dist/components/Actionable/tests/Actionable.stories.js +88 -63
  18. package/dist/components/Actionable/tests/Actionable.test.stories.d.ts +32 -0
  19. package/dist/components/Actionable/tests/Actionable.test.stories.js +130 -0
  20. package/dist/components/Alert/Alert.js +1 -1
  21. package/dist/components/Alert/tests/Alert.stories.d.ts +12 -3
  22. package/dist/components/Alert/tests/Alert.stories.js +51 -86
  23. package/dist/components/Alert/tests/Alert.test.stories.d.ts +15 -0
  24. package/dist/components/Alert/tests/Alert.test.stories.js +26 -0
  25. package/dist/components/Autocomplete/Autocomplete.js +9 -2
  26. package/dist/components/Autocomplete/tests/Autocomplete.stories.d.ts +6 -2
  27. package/dist/components/Autocomplete/tests/Autocomplete.stories.js +94 -111
  28. package/dist/components/Autocomplete/tests/Autocomplete.test.stories.d.ts +23 -0
  29. package/dist/components/Autocomplete/tests/Autocomplete.test.stories.js +86 -0
  30. package/dist/components/Avatar/Avatar.js +1 -1
  31. package/dist/components/Avatar/tests/Avatar.stories.d.ts +14 -4
  32. package/dist/components/Avatar/tests/Avatar.stories.js +94 -80
  33. package/dist/components/Avatar/tests/Avatar.test.stories.d.ts +17 -0
  34. package/dist/components/Avatar/tests/Avatar.test.stories.js +39 -0
  35. package/dist/components/Badge/tests/Badge.stories.d.ts +33 -8
  36. package/dist/components/Badge/tests/Badge.stories.js +238 -212
  37. package/dist/components/Badge/tests/Badge.test.stories.d.ts +20 -0
  38. package/dist/components/Badge/tests/Badge.test.stories.js +44 -0
  39. package/dist/components/Breadcrumbs/Breadcrumbs.js +2 -2
  40. package/dist/components/Breadcrumbs/Breadcrumbs.types.d.ts +1 -0
  41. package/dist/components/Breadcrumbs/tests/Breadcrumbs.stories.d.ts +24 -5
  42. package/dist/components/Breadcrumbs/tests/Breadcrumbs.stories.js +114 -95
  43. package/dist/components/Breadcrumbs/tests/Breadcrumbs.test.stories.d.ts +23 -0
  44. package/dist/components/Breadcrumbs/tests/Breadcrumbs.test.stories.js +76 -0
  45. package/dist/components/Button/Button.js +5 -2
  46. package/dist/components/Button/Button.module.css +1 -1
  47. package/dist/components/Button/Button.types.d.ts +1 -0
  48. package/dist/components/Button/tests/Button.stories.d.ts +2 -2
  49. package/dist/components/Button/tests/Button.stories.js +77 -74
  50. package/dist/components/Button/tests/Button.test.stories.d.ts +27 -0
  51. package/dist/components/Button/tests/Button.test.stories.js +112 -0
  52. package/dist/components/Calendar/tests/Calendar.test.stories.d.ts +26 -0
  53. package/dist/components/Calendar/tests/Calendar.test.stories.js +161 -0
  54. package/dist/components/Card/tests/Card.stories.d.ts +0 -1
  55. package/dist/components/Card/tests/Card.stories.js +0 -11
  56. package/dist/components/Card/tests/Card.test.stories.d.ts +35 -0
  57. package/dist/components/Card/tests/Card.test.stories.js +54 -0
  58. package/dist/components/Carousel/Carousel.js +52 -4
  59. package/dist/components/Carousel/Carousel.types.d.ts +4 -0
  60. package/dist/components/Carousel/CarouselControl.js +1 -1
  61. package/dist/components/Carousel/tests/Carousel.stories.d.ts +23 -4
  62. package/dist/components/Carousel/tests/Carousel.stories.js +199 -102
  63. package/dist/components/Checkbox/tests/Checkbox.test.stories.d.ts +25 -0
  64. package/dist/components/Checkbox/tests/Checkbox.test.stories.js +104 -0
  65. package/dist/components/CheckboxGroup/tests/CheckboxGroup.test.stories.d.ts +22 -0
  66. package/dist/components/CheckboxGroup/tests/CheckboxGroup.test.stories.js +78 -0
  67. package/dist/components/Container/tests/Container.stories.d.ts +12 -3
  68. package/dist/components/Container/tests/Container.stories.js +50 -31
  69. package/dist/components/Container/tests/Container.test.stories.d.ts +15 -0
  70. package/dist/components/Container/tests/Container.test.stories.js +26 -0
  71. package/dist/components/ContextMenu/ContextMenu.js +13 -9
  72. package/dist/components/ContextMenu/tests/ContextMenu.stories.js +2 -3
  73. package/dist/components/ContextMenu/tests/ContextMenu.test.stories.d.ts +26 -0
  74. package/dist/components/ContextMenu/tests/ContextMenu.test.stories.js +53 -0
  75. package/dist/components/Dismissible/Dismissible.js +1 -1
  76. package/dist/components/Dismissible/tests/Dismissible.stories.d.ts +10 -3
  77. package/dist/components/Dismissible/tests/Dismissible.stories.js +51 -34
  78. package/dist/components/Dismissible/tests/Dismissible.test.stories.d.ts +19 -0
  79. package/dist/components/Dismissible/tests/Dismissible.test.stories.js +42 -0
  80. package/dist/components/Divider/tests/Divider.test.stories.d.ts +18 -0
  81. package/dist/components/Divider/tests/Divider.test.stories.js +47 -0
  82. package/dist/components/DropdownMenu/tests/DropdownMenu.test.stories.d.ts +37 -0
  83. package/dist/components/DropdownMenu/tests/DropdownMenu.test.stories.js +117 -0
  84. package/dist/components/FileUpload/tests/FileUpload.test.stories.d.ts +22 -0
  85. package/dist/components/FileUpload/tests/FileUpload.test.stories.js +52 -0
  86. package/dist/components/FormControl/FormControlCaption.js +1 -1
  87. package/dist/components/FormControl/FormControlLabel.js +1 -1
  88. package/dist/components/FormControl/tests/FormControl.stories.d.ts +11 -5
  89. package/dist/components/FormControl/tests/FormControl.stories.js +78 -73
  90. package/dist/components/FormControl/tests/FormControl.test.stories.d.ts +20 -0
  91. package/dist/components/FormControl/tests/FormControl.test.stories.js +49 -0
  92. package/dist/components/Grid/tests/Grid.stories.d.ts +20 -5
  93. package/dist/components/Grid/tests/Grid.stories.js +164 -149
  94. package/dist/components/Grid/tests/Grid.test.stories.d.ts +19 -0
  95. package/dist/components/Grid/tests/Grid.test.stories.js +42 -0
  96. package/dist/components/Hidden/tests/Hidden.stories.d.ts +4 -1
  97. package/dist/components/Hidden/tests/Hidden.stories.js +28 -25
  98. package/dist/components/Hidden/tests/Hidden.test.stories.d.ts +15 -0
  99. package/dist/components/Hidden/tests/Hidden.test.stories.js +20 -0
  100. package/dist/components/HiddenVisually/tests/HiddenVisually.stories.d.ts +4 -1
  101. package/dist/components/HiddenVisually/tests/HiddenVisually.stories.js +8 -5
  102. package/dist/components/HiddenVisually/tests/HiddenVisually.test.stories.d.ts +15 -0
  103. package/dist/components/HiddenVisually/tests/HiddenVisually.test.stories.js +20 -0
  104. package/dist/components/Hotkey/tests/Hotkey.test.stories.d.ts +15 -0
  105. package/dist/components/Hotkey/tests/Hotkey.test.stories.js +26 -0
  106. package/dist/components/Icon/tests/Icon.stories.d.ts +12 -3
  107. package/dist/components/Icon/tests/Icon.stories.js +69 -60
  108. package/dist/components/Icon/tests/Icon.test.stories.d.ts +16 -0
  109. package/dist/components/Icon/tests/Icon.test.stories.js +35 -0
  110. package/dist/components/Image/tests/Image.stories.d.ts +24 -5
  111. package/dist/components/Image/tests/Image.stories.js +95 -75
  112. package/dist/components/Image/tests/Image.test.stories.d.ts +25 -0
  113. package/dist/components/Image/tests/Image.test.stories.js +80 -0
  114. package/dist/components/Link/tests/Link.test.stories.d.ts +29 -0
  115. package/dist/components/Link/tests/Link.test.stories.js +87 -0
  116. package/dist/components/Loader/Loader.js +1 -1
  117. package/dist/components/Loader/Loader.types.d.ts +1 -0
  118. package/dist/components/Loader/tests/Loader.stories.js +8 -8
  119. package/dist/components/Loader/tests/Loader.test.stories.d.ts +16 -0
  120. package/dist/components/Loader/tests/Loader.test.stories.js +32 -0
  121. package/dist/components/MenuItem/tests/MenuItem.test.stories.d.ts +26 -0
  122. package/dist/components/MenuItem/tests/MenuItem.test.stories.js +100 -0
  123. package/dist/components/Modal/tests/Modal.test.stories.d.ts +32 -0
  124. package/dist/components/Modal/tests/Modal.test.stories.js +149 -0
  125. package/dist/components/Overlay/tests/Overlay.stories.d.ts +4 -2
  126. package/dist/components/Overlay/tests/Overlay.stories.js +53 -53
  127. package/dist/components/Overlay/tests/Overlay.test.stories.d.ts +28 -0
  128. package/dist/components/Overlay/tests/Overlay.test.stories.js +146 -0
  129. package/dist/components/Pagination/tests/Pagination.test.stories.d.ts +23 -0
  130. package/dist/components/Pagination/tests/Pagination.test.stories.js +86 -0
  131. package/dist/components/PinField/tests/PinField.stories.d.ts +0 -1
  132. package/dist/components/PinField/tests/PinField.stories.js +10 -19
  133. package/dist/components/PinField/tests/PinField.test.stories.d.ts +29 -0
  134. package/dist/components/PinField/tests/PinField.test.stories.js +177 -0
  135. package/dist/components/Popover/tests/Popover.test.stories.d.ts +40 -0
  136. package/dist/components/Popover/tests/Popover.test.stories.js +167 -0
  137. package/dist/components/Progress/Progress.js +2 -2
  138. package/dist/components/Progress/Progress.types.d.ts +1 -0
  139. package/dist/components/Progress/tests/Progress.stories.js +10 -10
  140. package/dist/components/Progress/tests/Progress.test.stories.d.ts +16 -0
  141. package/dist/components/Progress/tests/Progress.test.stories.js +35 -0
  142. package/dist/components/Radio/tests/Radio.test.stories.d.ts +30 -0
  143. package/dist/components/Radio/tests/Radio.test.stories.js +118 -0
  144. package/dist/components/RadioGroup/tests/RadioGroup.test.stories.d.ts +22 -0
  145. package/dist/components/RadioGroup/tests/RadioGroup.test.stories.js +78 -0
  146. package/dist/components/Reshaped/tests/Reshaped.stories.d.ts +33 -0
  147. package/dist/components/Reshaped/tests/Reshaped.stories.js +88 -0
  148. package/dist/components/Resizable/Resizable.js +1 -0
  149. package/dist/components/Resizable/tests/Resizable.stories.d.ts +3 -0
  150. package/dist/components/Resizable/tests/Resizable.stories.js +4 -0
  151. package/dist/components/Resizable/tests/Resizable.test.stories.d.ts +19 -0
  152. package/dist/components/Resizable/tests/Resizable.test.stories.js +25 -0
  153. package/dist/components/Scrim/tests/Scrim.test.stories.d.ts +15 -0
  154. package/dist/components/Scrim/tests/Scrim.test.stories.js +25 -0
  155. package/dist/components/ScrollArea/ScrollArea.js +1 -1
  156. package/dist/components/ScrollArea/ScrollArea.module.css +1 -1
  157. package/dist/components/ScrollArea/tests/ScrollArea.stories.d.ts +17 -4
  158. package/dist/components/ScrollArea/tests/ScrollArea.stories.js +114 -139
  159. package/dist/components/ScrollArea/tests/ScrollArea.test.stories.d.ts +23 -0
  160. package/dist/components/ScrollArea/tests/ScrollArea.test.stories.js +66 -0
  161. package/dist/components/Select/tests/Select.stories.d.ts +1 -1
  162. package/dist/components/Select/tests/Select.stories.js +5 -12
  163. package/dist/components/Select/tests/Select.test.stories.d.ts +27 -0
  164. package/dist/components/Select/tests/Select.test.stories.js +132 -0
  165. package/dist/components/Skeleton/tests/Skeleton.test.stories.d.ts +15 -0
  166. package/dist/components/Skeleton/tests/Skeleton.test.stories.js +23 -0
  167. package/dist/components/Slider/tests/Slider.stories.d.ts +0 -1
  168. package/dist/components/Slider/tests/Slider.stories.js +8 -9
  169. package/dist/components/Slider/tests/Slider.test.stories.d.ts +38 -0
  170. package/dist/components/Slider/tests/Slider.test.stories.js +150 -0
  171. package/dist/components/Stepper/Stepper.js +1 -1
  172. package/dist/components/Stepper/tests/Stepper.stories.js +0 -3
  173. package/dist/components/Stepper/tests/Stepper.test.stories.d.ts +18 -0
  174. package/dist/components/Stepper/tests/Stepper.test.stories.js +28 -0
  175. package/dist/components/Switch/tests/Switch.test.stories.d.ts +23 -0
  176. package/dist/components/Switch/tests/Switch.test.stories.js +79 -0
  177. package/dist/components/Table/index.d.ts +1 -1
  178. package/dist/components/Table/tests/Table.stories.d.ts +5 -5
  179. package/dist/components/Table/tests/Table.test.stories.d.ts +25 -0
  180. package/dist/components/Table/tests/Table.test.stories.js +93 -0
  181. package/dist/components/Tabs/tests/Tabs.stories.js +4 -4
  182. package/dist/components/Tabs/tests/Tabs.test.stories.d.ts +28 -0
  183. package/dist/components/Tabs/tests/Tabs.test.stories.js +128 -0
  184. package/dist/components/Text/tests/Text.stories.d.ts +28 -7
  185. package/dist/components/Text/tests/Text.stories.js +148 -125
  186. package/dist/components/Text/tests/Text.test.stories.d.ts +18 -0
  187. package/dist/components/Text/tests/Text.test.stories.js +49 -0
  188. package/dist/components/TextArea/TextArea.module.css +1 -1
  189. package/dist/components/TextArea/tests/TextArea.stories.js +1 -1
  190. package/dist/components/TextArea/tests/TextArea.test.stories.d.ts +29 -0
  191. package/dist/components/TextArea/tests/TextArea.test.stories.js +99 -0
  192. package/dist/components/TextField/tests/TextField.stories.js +1 -1
  193. package/dist/components/TextField/tests/TextField.test.stories.d.ts +29 -0
  194. package/dist/components/TextField/tests/TextField.test.stories.js +99 -0
  195. package/dist/components/Theme/tests/Theme.test.stories.d.ts +24 -0
  196. package/dist/components/Theme/tests/Theme.test.stories.js +133 -0
  197. package/dist/components/Timeline/tests/Timeline.test.stories.d.ts +18 -0
  198. package/dist/components/Timeline/tests/Timeline.test.stories.js +32 -0
  199. package/dist/components/Toast/tests/Toast.test.stories.d.ts +16 -0
  200. package/dist/components/Toast/tests/Toast.test.stories.js +101 -0
  201. package/dist/components/Tooltip/tests/Tooltip.stories.js +0 -14
  202. package/dist/components/Tooltip/tests/Tooltip.test.stories.d.ts +19 -0
  203. package/dist/components/Tooltip/tests/Tooltip.test.stories.js +40 -0
  204. package/dist/components/View/View.js +1 -2
  205. package/dist/components/View/tests/View.stories.d.ts +112 -28
  206. package/dist/components/View/tests/View.stories.js +1092 -1012
  207. package/dist/components/View/tests/View.test.stories.d.ts +20 -0
  208. package/dist/components/View/tests/View.test.stories.js +50 -0
  209. package/dist/components/_private/Flyout/FlyoutContent.js +1 -1
  210. package/dist/components/_private/Flyout/tests/Flyout.stories.js +4 -4
  211. package/dist/components/_private/Flyout/tests/Flyout.test.stories.d.ts +28 -0
  212. package/dist/components/_private/Flyout/tests/Flyout.test.stories.js +205 -0
  213. package/dist/components/_private/Portal/tests/Portal.stories.js +1 -1
  214. package/dist/hooks/_private/useSingletonHotkeys.d.ts +3 -3
  215. package/dist/hooks/_private/useSingletonHotkeys.js +1 -1
  216. package/dist/hooks/tests/useDrag.stories.js +1 -0
  217. package/dist/hooks/tests/useDrag.test.stories.d.ts +26 -0
  218. package/dist/hooks/tests/useDrag.test.stories.js +120 -0
  219. package/dist/hooks/tests/useElementId.stories.d.ts +6 -0
  220. package/dist/hooks/tests/useElementId.stories.js +19 -0
  221. package/dist/hooks/tests/useHotkeys.test.stories.d.ts +39 -0
  222. package/dist/hooks/tests/useHotkeys.test.stories.js +119 -0
  223. package/dist/hooks/tests/useRTL.stories.d.ts +6 -0
  224. package/dist/hooks/tests/useRTL.stories.js +25 -0
  225. package/dist/hooks/tests/useResponsiveClientValue.stories.d.ts +9 -1
  226. package/dist/hooks/tests/useResponsiveClientValue.stories.js +22 -9
  227. package/dist/hooks/tests/useScrollLock.stories.d.ts +6 -0
  228. package/dist/hooks/tests/useScrollLock.stories.js +22 -0
  229. package/dist/hooks/tests/useToggle.stories.d.ts +8 -0
  230. package/dist/hooks/tests/useToggle.stories.js +54 -0
  231. package/dist/hooks/useHotkeys.js +0 -2
  232. package/dist/hooks/useScrollLock.d.ts +1 -0
  233. package/dist/hooks/useScrollLock.js +7 -3
  234. package/dist/index.d.ts +1 -1
  235. package/dist/tests/ShadowDOM.stories.js +1 -1
  236. package/dist/themes/_generator/tests/themes.stories.d.ts +3 -0
  237. package/dist/themes/_generator/tests/themes.stories.js +7 -11
  238. package/dist/themes/_generator/utilities/generateColors.d.ts +1 -1
  239. package/dist/themes/_generator/utilities/generateColors.js +3 -2
  240. package/dist/themes/slate/theme.css +1 -1
  241. package/dist/utilities/helpers.d.ts +1 -0
  242. package/dist/utilities/helpers.js +3 -0
  243. package/dist/utilities/scroll/lock.d.ts +1 -0
  244. package/dist/utilities/scroll/lock.js +3 -3
  245. package/dist/utilities/scroll/lockSafari.d.ts +1 -1
  246. package/dist/utilities/scroll/lockSafari.js +4 -5
  247. package/dist/utilities/scroll/lockStandard.d.ts +4 -1
  248. package/dist/utilities/scroll/lockStandard.js +7 -2
  249. package/dist/utilities/storybook/Example.js +1 -2
  250. package/package.json +42 -41
  251. package/dist/components/Theme/tests/Theme.stories.d.ts +0 -13
  252. package/dist/components/Theme/tests/Theme.stories.js +0 -80
  253. package/dist/utilities/storybook/Example.module.css +0 -1
@@ -0,0 +1,42 @@
1
+ import { expect, fn, userEvent } from "@storybook/test";
2
+ import Dismissible from "../index.js";
3
+ import { Placeholder } from "../../../utilities/storybook/index.js";
4
+ export default {
5
+ title: "Utilities/Dismissible/tests",
6
+ component: Dismissible,
7
+ parameters: {
8
+ iframe: {
9
+ url: "https://reshaped.so/docs/components/action-bar",
10
+ },
11
+ chromatic: { disableSnapshot: true },
12
+ },
13
+ };
14
+ export const closeAriaLabel = {
15
+ args: {
16
+ handleClose: fn(),
17
+ },
18
+ name: "onClose, closeAriaLabel",
19
+ render: (args) => (<Dismissible closeAriaLabel="Close" onClose={args.handleClose}>
20
+ <Placeholder />
21
+ </Dismissible>),
22
+ play: async ({ canvas, args }) => {
23
+ const button = canvas.getAllByRole("button")[0];
24
+ await userEvent.click(button);
25
+ expect(button).toHaveAttribute("aria-label", "Close");
26
+ expect(args.handleClose).toHaveBeenCalledTimes(1);
27
+ expect(args.handleClose).toHaveBeenCalledWith();
28
+ },
29
+ };
30
+ export const className = {
31
+ name: "className, attributes",
32
+ render: () => (<div data-testid="root">
33
+ <Dismissible closeAriaLabel="Close" onClose={() => { }} className="test-classname" attributes={{ id: "test-id" }}>
34
+ <Placeholder />
35
+ </Dismissible>
36
+ </div>),
37
+ play: async ({ canvas }) => {
38
+ const root = canvas.getByTestId("root").firstChild;
39
+ expect(root).toHaveClass("test-classname");
40
+ expect(root).toHaveAttribute("id", "test-id");
41
+ },
42
+ };
@@ -0,0 +1,18 @@
1
+ import { StoryObj } from "@storybook/react";
2
+ declare const _default: {
3
+ title: string;
4
+ component: (props: import("./..").DividerProps) => import("react").JSX.Element;
5
+ parameters: {
6
+ iframe: {
7
+ url: string;
8
+ };
9
+ chromatic: {
10
+ disableSnapshot: boolean;
11
+ };
12
+ };
13
+ };
14
+ export default _default;
15
+ export declare const horizontal: StoryObj;
16
+ export declare const vertical: StoryObj;
17
+ export declare const responsive: StoryObj;
18
+ export declare const className: StoryObj;
@@ -0,0 +1,47 @@
1
+ import { expect } from "@storybook/test";
2
+ import Divider from "../index.js";
3
+ export default {
4
+ title: "Components/Divider/tests",
5
+ component: Divider,
6
+ parameters: {
7
+ iframe: {
8
+ url: "https://reshaped.so/docs/components/divider",
9
+ },
10
+ chromatic: { disableSnapshot: true },
11
+ },
12
+ };
13
+ export const horizontal = {
14
+ name: "orientation, horizontal",
15
+ render: () => <Divider />,
16
+ play: async ({ canvas }) => {
17
+ const el = canvas.getByRole("separator");
18
+ expect(el).toHaveAttribute("aria-orientation", "horizontal");
19
+ },
20
+ };
21
+ export const vertical = {
22
+ name: "orientation, vertical",
23
+ render: () => <Divider vertical/>,
24
+ play: async ({ canvas }) => {
25
+ const el = canvas.getByRole("separator");
26
+ expect(el).toHaveAttribute("aria-orientation", "vertical");
27
+ },
28
+ };
29
+ export const responsive = {
30
+ name: "orientation, responsive",
31
+ render: () => <Divider vertical={{ s: true, l: false }}/>,
32
+ play: async ({ canvas }) => {
33
+ const el = canvas.getByRole("separator");
34
+ expect(el).not.toHaveAttribute("aria-orientation");
35
+ },
36
+ };
37
+ export const className = {
38
+ name: "className, attributes",
39
+ render: () => (<div data-testid="root">
40
+ <Divider className="test-classname" attributes={{ id: "test-id" }}/>
41
+ </div>),
42
+ play: async ({ canvas }) => {
43
+ const root = canvas.getByTestId("root").firstChild;
44
+ expect(root).toHaveClass("test-classname");
45
+ expect(root).toHaveAttribute("id", "test-id");
46
+ },
47
+ };
@@ -0,0 +1,37 @@
1
+ import { StoryObj } from "@storybook/react";
2
+ import { fn } from "@storybook/test";
3
+ declare const _default: {
4
+ title: string;
5
+ component: {
6
+ (props: import("./..").DropdownMenuProps): import("react").JSX.Element;
7
+ Dismissible: (props: import("../../Dismissible").DismissibleProps) => import("react").JSX.Element;
8
+ Trigger: (props: import("../../_private/Flyout").FlyoutTriggerProps) => import("react").JSX.Element;
9
+ Content: (props: import("../DropdownMenu.types").ContentProps) => import("react").JSX.Element;
10
+ Section: (props: import("../DropdownMenu.types").SectionProps) => import("react").JSX.Element;
11
+ Item: (props: import("../DropdownMenu.types").ItemProps) => import("react").JSX.Element;
12
+ SubMenu: (props: import("../DropdownMenu.types").SubMenuProps) => import("react").JSX.Element;
13
+ SubTrigger: (props: import("../DropdownMenu.types").SubTriggerProps) => import("react").JSX.Element;
14
+ };
15
+ parameters: {
16
+ iframe: {
17
+ url: string;
18
+ };
19
+ chromatic: {
20
+ disableSnapshot: boolean;
21
+ };
22
+ };
23
+ };
24
+ export default _default;
25
+ export declare const defaultActive: StoryObj<{
26
+ handleOpen: ReturnType<typeof fn>;
27
+ handleClose: ReturnType<typeof fn>;
28
+ }>;
29
+ export declare const active: StoryObj<{
30
+ handleOpen: ReturnType<typeof fn>;
31
+ handleClose: ReturnType<typeof fn>;
32
+ }>;
33
+ export declare const activeFalse: StoryObj<{
34
+ handleOpen: ReturnType<typeof fn>;
35
+ handleClose: ReturnType<typeof fn>;
36
+ }>;
37
+ export declare const className: StoryObj;
@@ -0,0 +1,117 @@
1
+ import { expect, fn, userEvent, waitFor, within } from "@storybook/test";
2
+ import Button from "../../Button/index.js";
3
+ import DropdownMenu from "../index.js";
4
+ import { sleep } from "../../../utilities/helpers.js";
5
+ export default {
6
+ title: "Components/DropdownMenu/tests",
7
+ component: DropdownMenu,
8
+ parameters: {
9
+ iframe: {
10
+ url: "https://reshaped.so/docs/components/dropdown-menu",
11
+ },
12
+ chromatic: { disableSnapshot: true },
13
+ },
14
+ };
15
+ export const defaultActive = {
16
+ name: "defaultActive, uncontrolled",
17
+ args: {
18
+ handleOpen: fn(),
19
+ handleClose: fn(),
20
+ },
21
+ render: (args) => (<DropdownMenu onOpen={args.handleOpen} onClose={args.handleClose} defaultActive>
22
+ <DropdownMenu.Trigger>
23
+ {(attributes) => <Button attributes={attributes}>Open</Button>}
24
+ </DropdownMenu.Trigger>
25
+ <DropdownMenu.Content>
26
+ <DropdownMenu.Item>Item</DropdownMenu.Item>
27
+ </DropdownMenu.Content>
28
+ </DropdownMenu>),
29
+ play: async ({ canvasElement, args }) => {
30
+ const canvas = within(canvasElement.ownerDocument.body);
31
+ const trigger = canvas.getAllByRole("button")[0];
32
+ let item = canvas.getByText("Item");
33
+ await sleep(500);
34
+ await userEvent.click(document.body);
35
+ await waitFor(() => {
36
+ expect(args.handleClose).toHaveBeenCalledTimes(1);
37
+ expect(args.handleClose).toHaveBeenCalledWith();
38
+ expect(item).not.toBeInTheDocument();
39
+ });
40
+ await userEvent.click(trigger);
41
+ item = canvas.getByText("Item");
42
+ await waitFor(() => {
43
+ expect(args.handleOpen).toHaveBeenCalledTimes(1);
44
+ expect(args.handleOpen).toHaveBeenCalledWith();
45
+ expect(item).toBeInTheDocument();
46
+ });
47
+ },
48
+ };
49
+ export const active = {
50
+ name: "active, controlled",
51
+ args: {
52
+ handleOpen: fn(),
53
+ handleClose: fn(),
54
+ },
55
+ render: (args) => (<DropdownMenu onOpen={args.handleOpen} onClose={args.handleClose} active>
56
+ <DropdownMenu.Trigger>
57
+ {(attributes) => <Button attributes={attributes}>Open</Button>}
58
+ </DropdownMenu.Trigger>
59
+ <DropdownMenu.Content>
60
+ <DropdownMenu.Item>Item</DropdownMenu.Item>
61
+ </DropdownMenu.Content>
62
+ </DropdownMenu>),
63
+ play: async ({ canvasElement, args }) => {
64
+ const canvas = within(canvasElement.ownerDocument.body);
65
+ const item = canvas.getByText("Item");
66
+ await userEvent.click(document.body);
67
+ await waitFor(() => {
68
+ expect(args.handleClose).toHaveBeenCalledTimes(1);
69
+ expect(args.handleClose).toHaveBeenCalledWith();
70
+ });
71
+ expect(item).toBeInTheDocument();
72
+ },
73
+ };
74
+ export const activeFalse = {
75
+ name: "active false, controlled",
76
+ args: {
77
+ handleOpen: fn(),
78
+ handleClose: fn(),
79
+ },
80
+ render: (args) => (<DropdownMenu onOpen={args.handleOpen} onClose={args.handleClose} active={false}>
81
+ <DropdownMenu.Trigger>
82
+ {(attributes) => <Button attributes={attributes}>Open</Button>}
83
+ </DropdownMenu.Trigger>
84
+ <DropdownMenu.Content>
85
+ <DropdownMenu.Item>Item</DropdownMenu.Item>
86
+ </DropdownMenu.Content>
87
+ </DropdownMenu>),
88
+ play: async ({ canvasElement, args }) => {
89
+ const canvas = within(canvasElement.ownerDocument.body);
90
+ const trigger = canvas.getAllByRole("button")[0];
91
+ await userEvent.click(trigger);
92
+ await waitFor(() => {
93
+ expect(args.handleOpen).toHaveBeenCalledTimes(1);
94
+ expect(args.handleOpen).toHaveBeenCalledWith();
95
+ });
96
+ const item = canvas.queryByText("Item");
97
+ expect(item).not.toBeInTheDocument();
98
+ },
99
+ };
100
+ export const className = {
101
+ name: "className, attributes",
102
+ render: () => (<div data-testid="root">
103
+ <DropdownMenu active>
104
+ <DropdownMenu.Trigger>
105
+ {(attributes) => <Button attributes={attributes}>Open</Button>}
106
+ </DropdownMenu.Trigger>
107
+ <DropdownMenu.Content className="test-classname" attributes={{ "data-testid": "test-id" }}>
108
+ <DropdownMenu.Item>Item</DropdownMenu.Item>
109
+ </DropdownMenu.Content>
110
+ </DropdownMenu>
111
+ </div>),
112
+ play: async ({ canvasElement }) => {
113
+ const canvas = within(canvasElement.ownerDocument.body);
114
+ const menu = await canvas.findByTestId("test-id");
115
+ expect(menu).toHaveClass("test-classname");
116
+ },
117
+ };
@@ -0,0 +1,22 @@
1
+ import { StoryObj } from "@storybook/react";
2
+ import { fn } from "@storybook/test";
3
+ declare const _default: {
4
+ title: string;
5
+ component: {
6
+ (props: import("./..").FileUploadProps): import("react").JSX.Element;
7
+ Trigger: (props: import("../FileUpload.types").TriggerProps) => import("react").JSX.Element;
8
+ };
9
+ parameters: {
10
+ iframe: {
11
+ url: string;
12
+ };
13
+ chromatic: {
14
+ disableSnapshot: boolean;
15
+ };
16
+ };
17
+ };
18
+ export default _default;
19
+ export declare const onChange: StoryObj<{
20
+ handleChange: ReturnType<typeof fn>;
21
+ }>;
22
+ export declare const className: StoryObj;
@@ -0,0 +1,52 @@
1
+ import { expect, userEvent, fn } from "@storybook/test";
2
+ import FileUpload from "../index.js";
3
+ export default {
4
+ title: "Components/FileUpload/tests",
5
+ component: FileUpload,
6
+ parameters: {
7
+ iframe: {
8
+ url: "https://reshaped.so/docs/components/file-upload",
9
+ },
10
+ chromatic: { disableSnapshot: true },
11
+ },
12
+ };
13
+ export const onChange = {
14
+ name: "name, onChange",
15
+ args: {
16
+ handleChange: fn(),
17
+ },
18
+ render: (args) => (<div data-testid="root">
19
+ <FileUpload name="test-name" onChange={args.handleChange}>
20
+ Content
21
+ </FileUpload>
22
+ </div>),
23
+ play: async ({ canvas, args }) => {
24
+ const file = new File(["hello"], "hello.png", { type: "image/png" });
25
+ const input = canvas.getByTestId("root").querySelector("input");
26
+ await userEvent.upload(input, file);
27
+ expect(input).toHaveAttribute("name", "test-name");
28
+ expect(input.files?.[0]).toBe(file);
29
+ expect(input.files).toHaveLength(1);
30
+ expect(args.handleChange).toHaveBeenCalledTimes(1);
31
+ expect(args.handleChange).toHaveBeenCalledWith({
32
+ name: "test-name",
33
+ value: [file],
34
+ event: expect.objectContaining({ target: input }),
35
+ });
36
+ },
37
+ };
38
+ export const className = {
39
+ name: "className, attributes",
40
+ render: () => (<div data-testid="root">
41
+ <FileUpload name="name" className="test-classname" attributes={{ id: "test-id" }} inputAttributes={{ id: "test-input-id" }}>
42
+ Content
43
+ </FileUpload>
44
+ </div>),
45
+ play: async ({ canvas }) => {
46
+ const root = canvas.getByTestId("root").firstChild;
47
+ const input = canvas.getByTestId("root").querySelector("input");
48
+ expect(root).toHaveClass("test-classname");
49
+ expect(root).toHaveAttribute("id", "test-id");
50
+ expect(input).toHaveAttribute("id", "test-input-id");
51
+ },
52
+ };
@@ -10,6 +10,6 @@ const FormControlCaption = (props) => {
10
10
  const id = getCaptionId(attributes.id, variant);
11
11
  const color = variant === "error" ? "critical" : "neutral-faded";
12
12
  const ref = variant === "error" ? errorRef : helperRef;
13
- return (_jsx(Text, { as: "span", variant: size === "large" ? "body-3" : "caption-1", color: disabled && !variant ? "disabled" : color, attributes: { id, role: color ? "alert" : undefined, ref }, className: s.caption, children: children }));
13
+ return (_jsx(Text, { as: "span", variant: size === "large" ? "body-3" : "caption-1", color: disabled && !variant ? "disabled" : color, attributes: { id, role: color ? "alert" : undefined, "aria-disabled": disabled, ref }, className: s.caption, children: children }));
14
14
  };
15
15
  export default FormControlCaption;
@@ -13,6 +13,6 @@ const FormControlLabel = (props) => {
13
13
  as: "label",
14
14
  attributes: { id, htmlFor: attributes.id },
15
15
  };
16
- return (_jsxs(Text, { ...tagProps, variant: size === "large" ? "body-2" : "body-3", weight: "medium", className: s.label, color: disabled ? "disabled" : undefined, children: [children, required && (_jsx(Text, { color: disabled ? "disabled" : "critical", as: "span", children: "*" }))] }));
16
+ return (_jsxs(Text, { ...tagProps, variant: size === "large" ? "body-2" : "body-3", weight: "medium", className: s.label, color: disabled ? "disabled" : undefined, "aria-disabled": disabled, children: [children, required && (_jsx(Text, { color: disabled ? "disabled" : "critical", as: "span", children: "*" }))] }));
17
17
  };
18
18
  export default FormControlLabel;
@@ -1,3 +1,4 @@
1
+ import { StoryObj } from "@storybook/react";
1
2
  declare const _default: {
2
3
  title: string;
3
4
  component: import("react").ComponentType<import("./..").FormControlProps> & {
@@ -12,8 +13,13 @@ declare const _default: {
12
13
  };
13
14
  };
14
15
  export default _default;
15
- export declare const status: () => import("react").JSX.Element;
16
- export declare const size: () => import("react").JSX.Element;
17
- export declare const disabled: () => import("react").JSX.Element;
18
- export declare const required: () => import("react").JSX.Element;
19
- export declare const group: () => import("react").JSX.Element;
16
+ export declare const status: StoryObj;
17
+ export declare const size: {
18
+ name: string;
19
+ render: () => import("react").JSX.Element;
20
+ };
21
+ export declare const disabled: StoryObj;
22
+ export declare const required: {
23
+ name: string;
24
+ render: () => import("react").JSX.Element;
25
+ };
@@ -1,8 +1,7 @@
1
+ import { expect } from "@storybook/test";
1
2
  import { Example } from "../../../utilities/storybook/index.js";
2
- import FormControl, { useFormControl } from "../index.js";
3
- import RadioGroup from "../../RadioGroup/index.js";
4
- import Radio from "../../Radio/index.js";
5
- import View from "../../View/index.js";
3
+ import FormControl from "../index.js";
4
+ import TextField from "../../TextField/index.js";
6
5
  export default {
7
6
  title: "Utilities/FormControl",
8
7
  component: FormControl,
@@ -12,74 +11,80 @@ export default {
12
11
  },
13
12
  },
14
13
  };
15
- const Input = () => {
16
- const { attributes } = useFormControl();
17
- return <input {...attributes}/>;
18
- };
19
- export const status = () => (<Example>
20
- <Example.Item title="status: default">
21
- <FormControl>
22
- <FormControl.Label>Label</FormControl.Label>
23
- <Input />
24
- <FormControl.Helper>Caption</FormControl.Helper>
25
- <FormControl.Error>Error</FormControl.Error>
26
- </FormControl>
27
- </Example.Item>
14
+ export const status = {
15
+ name: "status",
16
+ render: () => (<Example>
17
+ <Example.Item title="status: default">
18
+ <FormControl>
19
+ <FormControl.Label>Label</FormControl.Label>
20
+ <TextField name="name"/>
21
+ <FormControl.Helper>Caption</FormControl.Helper>
22
+ <FormControl.Error>Error</FormControl.Error>
23
+ </FormControl>
24
+ </Example.Item>
28
25
 
29
- <Example.Item title="status: error">
30
- <FormControl hasError>
31
- <FormControl.Label>Label</FormControl.Label>
32
- <Input />
33
- <FormControl.Helper>Caption</FormControl.Helper>
34
- <FormControl.Error>Error</FormControl.Error>
35
- </FormControl>
36
- </Example.Item>
37
- </Example>);
38
- export const size = () => (<Example>
39
- <Example.Item title="size: medium">
40
- <FormControl size="medium">
41
- <FormControl.Label>Label</FormControl.Label>
42
- <Input />
43
- <FormControl.Helper>Caption</FormControl.Helper>
44
- </FormControl>
45
- </Example.Item>
46
- <Example.Item title="size: large">
47
- <FormControl size="large">
48
- <FormControl.Label>Label</FormControl.Label>
49
- <Input />
50
- <FormControl.Helper>Caption</FormControl.Helper>
51
- </FormControl>
52
- </Example.Item>
53
- </Example>);
54
- export const disabled = () => (<Example>
55
- <Example.Item title="disabled">
56
- <FormControl disabled>
57
- <FormControl.Label>Label</FormControl.Label>
58
- <Input />
59
- <FormControl.Helper>Caption</FormControl.Helper>
60
- </FormControl>
61
- </Example.Item>
62
- </Example>);
63
- export const required = () => (<Example>
64
- <Example.Item title="required">
65
- <FormControl required>
66
- <FormControl.Label>Label</FormControl.Label>
67
- <Input />
68
- <FormControl.Helper>Caption</FormControl.Helper>
69
- </FormControl>
70
- </Example.Item>
71
- </Example>);
72
- export const group = () => (<Example>
73
- <Example.Item title="form group">
74
- <FormControl group>
75
- <FormControl.Label>Favorite animals:</FormControl.Label>
26
+ <Example.Item title="status: error">
27
+ <FormControl hasError>
28
+ <FormControl.Label>Label</FormControl.Label>
29
+ <TextField name="name"/>
30
+ <FormControl.Helper>Caption</FormControl.Helper>
31
+ <FormControl.Error>Error</FormControl.Error>
32
+ </FormControl>
33
+ </Example.Item>
34
+ </Example>),
35
+ play: ({ canvas }) => {
36
+ const inputs = canvas.getAllByRole("textbox");
37
+ expect(inputs[0]).toHaveAccessibleName("Label");
38
+ expect(inputs[0]).toHaveAccessibleDescription("Caption");
39
+ expect(inputs[1]).toHaveAccessibleName("Label");
40
+ expect(inputs[1]).toHaveAccessibleDescription("Caption Error");
41
+ },
42
+ };
43
+ export const size = {
44
+ name: "size",
45
+ render: () => (<Example>
46
+ <Example.Item title="size: medium">
47
+ <FormControl size="medium">
48
+ <FormControl.Label>Label</FormControl.Label>
49
+ <TextField name="name"/>
50
+ <FormControl.Helper>Caption</FormControl.Helper>
51
+ </FormControl>
52
+ </Example.Item>
76
53
 
77
- <RadioGroup name="animalGroup">
78
- <View gap={2}>
79
- <Radio value="dog">Dog</Radio>
80
- <Radio value="cat">Cat</Radio>
81
- </View>
82
- </RadioGroup>
83
- </FormControl>
84
- </Example.Item>
85
- </Example>);
54
+ <Example.Item title="size: large">
55
+ <FormControl size="large">
56
+ <FormControl.Label>Label</FormControl.Label>
57
+ <TextField name="name" size="large"/>
58
+ <FormControl.Helper>Caption</FormControl.Helper>
59
+ </FormControl>
60
+ </Example.Item>
61
+ </Example>),
62
+ };
63
+ export const disabled = {
64
+ name: "disabled",
65
+ render: () => (<Example>
66
+ <Example.Item title="disabled">
67
+ <FormControl disabled>
68
+ <FormControl.Label>Label</FormControl.Label>
69
+ <TextField name="name"/>
70
+ <FormControl.Helper>Caption</FormControl.Helper>
71
+ </FormControl>
72
+ </Example.Item>
73
+ </Example>),
74
+ play: ({ canvas }) => {
75
+ const input = canvas.getByRole("textbox");
76
+ expect(input).toBeDisabled();
77
+ },
78
+ };
79
+ export const required = {
80
+ name: "required",
81
+ render: () => (<Example>
82
+ <Example.Item title="required">
83
+ <FormControl required>
84
+ <FormControl.Label>Label</FormControl.Label>
85
+ <TextField name="name"/>
86
+ <FormControl.Helper>Caption</FormControl.Helper>
87
+ </FormControl>
88
+ </Example.Item>
89
+ </Example>),
90
+ };
@@ -0,0 +1,20 @@
1
+ import { StoryObj } from "@storybook/react";
2
+ declare const _default: {
3
+ title: string;
4
+ component: import("react").ComponentType<import("./..").FormControlProps> & {
5
+ Label: React.ComponentType<import("../FormControl.types").LabelProps>;
6
+ Helper: React.ComponentType<import("../FormControl.types").CaptionProps>;
7
+ Error: React.ComponentType<import("../FormControl.types").CaptionProps>;
8
+ };
9
+ parameters: {
10
+ iframe: {
11
+ url: string;
12
+ };
13
+ chromatic: {
14
+ disableSnapshot: boolean;
15
+ };
16
+ };
17
+ };
18
+ export default _default;
19
+ export declare const className: StoryObj;
20
+ export declare const group: StoryObj;
@@ -0,0 +1,49 @@
1
+ import { expect } from "@storybook/test";
2
+ import FormControl from "../index.js";
3
+ import Radio from "../../Radio/index.js";
4
+ import RadioGroup from "../../RadioGroup/index.js";
5
+ import TextField from "../../TextField/index.js";
6
+ import View from "../../View/index.js";
7
+ export default {
8
+ title: "Utilities/FormControl/tests",
9
+ component: FormControl,
10
+ parameters: {
11
+ iframe: {
12
+ url: "https://reshaped.so/docs/utilities/form-control",
13
+ },
14
+ chromatic: { disableSnapshot: true },
15
+ },
16
+ };
17
+ export const className = {
18
+ name: "id",
19
+ render: () => (<FormControl id="test-id" hasError>
20
+ <FormControl.Label>Label</FormControl.Label>
21
+ <TextField name="name"/>
22
+ <FormControl.Helper>Caption</FormControl.Helper>
23
+ <FormControl.Error>Error</FormControl.Error>
24
+ </FormControl>),
25
+ play: async ({ canvas }) => {
26
+ const input = canvas.getByRole("textbox");
27
+ const label = canvas.getByText("Label");
28
+ expect(input).toHaveAttribute("id", "test-id");
29
+ expect(input).toHaveAttribute("aria-describedby", `test-id-caption test-id-error`);
30
+ expect(label).toHaveAttribute("for", "test-id");
31
+ expect(label).toHaveAttribute("id", `test-id-label`);
32
+ },
33
+ };
34
+ export const group = {
35
+ name: "group",
36
+ render: () => (<FormControl group>
37
+ <FormControl.Label>Label</FormControl.Label>
38
+ <RadioGroup name="name">
39
+ <View gap={2}>
40
+ <Radio value="1">One</Radio>
41
+ <Radio value="2">Two</Radio>
42
+ </View>
43
+ </RadioGroup>
44
+ </FormControl>),
45
+ play: async ({ canvas }) => {
46
+ const group = canvas.getByRole("group");
47
+ expect(group).toBeInTheDocument();
48
+ },
49
+ };
@@ -11,8 +11,23 @@ declare const _default: {
11
11
  };
12
12
  };
13
13
  export default _default;
14
- export declare const base: () => import("react").JSX.Element;
15
- export declare const layout: () => import("react").JSX.Element;
16
- export declare const itemLayout: () => import("react").JSX.Element;
17
- export declare const areas: () => import("react").JSX.Element;
18
- export declare const auto: () => import("react").JSX.Element;
14
+ export declare const base: {
15
+ name: string;
16
+ render: () => import("react").JSX.Element;
17
+ };
18
+ export declare const layout: {
19
+ name: string;
20
+ render: () => import("react").JSX.Element;
21
+ };
22
+ export declare const itemLayout: {
23
+ name: string;
24
+ render: () => import("react").JSX.Element;
25
+ };
26
+ export declare const areas: {
27
+ name: string;
28
+ render: () => import("react").JSX.Element;
29
+ };
30
+ export declare const auto: {
31
+ name: string;
32
+ render: () => import("react").JSX.Element;
33
+ };