reshaped 3.3.10 → 3.3.12

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 (284) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/bundle.css +1 -1
  3. package/dist/bundle.js +10 -10
  4. package/dist/cjs/themes/_generator/utilities/generateColors.d.ts +1 -1
  5. package/dist/cjs/themes/_generator/utilities/generateColors.js +3 -2
  6. package/dist/cjs/themes/_generator/utilities/tests/color.test.js +32 -31
  7. package/dist/cjs/themes/slate/theme.css +1 -1
  8. package/dist/components/Accordion/tests/Accordion.stories.d.ts +30 -8
  9. package/dist/components/Accordion/tests/Accordion.stories.js +172 -119
  10. package/dist/components/ActionBar/tests/ActionBar.stories.d.ts +12 -3
  11. package/dist/components/ActionBar/tests/ActionBar.stories.js +51 -36
  12. package/dist/components/ActionBar/tests/ActionBar.test.stories.d.ts +15 -0
  13. package/dist/components/ActionBar/tests/ActionBar.test.stories.js +26 -0
  14. package/dist/components/Actionable/Actionable.js +1 -1
  15. package/dist/components/Actionable/Actionable.types.d.ts +3 -3
  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/Card.d.ts +3 -3
  55. package/dist/components/Card/Card.types.d.ts +1 -1
  56. package/dist/components/Card/tests/Card.stories.d.ts +3 -4
  57. package/dist/components/Card/tests/Card.stories.js +0 -11
  58. package/dist/components/Card/tests/Card.test.stories.d.ts +35 -0
  59. package/dist/components/Card/tests/Card.test.stories.js +54 -0
  60. package/dist/components/Carousel/Carousel.types.d.ts +1 -1
  61. package/dist/components/Carousel/CarouselControl.js +1 -1
  62. package/dist/components/Carousel/tests/Carousel.stories.d.ts +3 -0
  63. package/dist/components/Carousel/tests/Carousel.stories.js +5 -1
  64. package/dist/components/Carousel/tests/Carousel.test.stories.d.ts +17 -0
  65. package/dist/components/Carousel/tests/Carousel.test.stories.js +52 -0
  66. package/dist/components/Checkbox/tests/Checkbox.test.stories.d.ts +25 -0
  67. package/dist/components/Checkbox/tests/Checkbox.test.stories.js +104 -0
  68. package/dist/components/CheckboxGroup/tests/CheckboxGroup.test.stories.d.ts +22 -0
  69. package/dist/components/CheckboxGroup/tests/CheckboxGroup.test.stories.js +78 -0
  70. package/dist/components/Container/Container.module.css +1 -1
  71. package/dist/components/Container/tests/Container.stories.d.ts +12 -3
  72. package/dist/components/Container/tests/Container.stories.js +50 -31
  73. package/dist/components/Container/tests/Container.test.stories.d.ts +15 -0
  74. package/dist/components/Container/tests/Container.test.stories.js +26 -0
  75. package/dist/components/ContextMenu/ContextMenu.js +13 -9
  76. package/dist/components/ContextMenu/tests/ContextMenu.stories.js +2 -3
  77. package/dist/components/ContextMenu/tests/ContextMenu.test.stories.d.ts +26 -0
  78. package/dist/components/ContextMenu/tests/ContextMenu.test.stories.js +53 -0
  79. package/dist/components/Dismissible/Dismissible.js +1 -1
  80. package/dist/components/Dismissible/tests/Dismissible.stories.d.ts +10 -3
  81. package/dist/components/Dismissible/tests/Dismissible.stories.js +51 -34
  82. package/dist/components/Dismissible/tests/Dismissible.test.stories.d.ts +19 -0
  83. package/dist/components/Dismissible/tests/Dismissible.test.stories.js +42 -0
  84. package/dist/components/Divider/tests/Divider.test.stories.d.ts +18 -0
  85. package/dist/components/Divider/tests/Divider.test.stories.js +47 -0
  86. package/dist/components/DropdownMenu/DropdownMenu.js +1 -1
  87. package/dist/components/DropdownMenu/tests/DropdownMenu.test.stories.d.ts +37 -0
  88. package/dist/components/DropdownMenu/tests/DropdownMenu.test.stories.js +117 -0
  89. package/dist/components/FileUpload/tests/FileUpload.test.stories.d.ts +22 -0
  90. package/dist/components/FileUpload/tests/FileUpload.test.stories.js +52 -0
  91. package/dist/components/FormControl/FormControl.context.d.ts +12 -0
  92. package/dist/components/FormControl/FormControlCaption.js +1 -1
  93. package/dist/components/FormControl/FormControlLabel.js +1 -1
  94. package/dist/components/FormControl/tests/FormControl.stories.d.ts +11 -5
  95. package/dist/components/FormControl/tests/FormControl.stories.js +78 -73
  96. package/dist/components/FormControl/tests/FormControl.test.stories.d.ts +20 -0
  97. package/dist/components/FormControl/tests/FormControl.test.stories.js +49 -0
  98. package/dist/components/Grid/Grid.d.ts +2 -2
  99. package/dist/components/Grid/Grid.types.d.ts +3 -2
  100. package/dist/components/Grid/tests/Grid.stories.d.ts +22 -7
  101. package/dist/components/Grid/tests/Grid.stories.js +164 -149
  102. package/dist/components/Grid/tests/Grid.test.stories.d.ts +19 -0
  103. package/dist/components/Grid/tests/Grid.test.stories.js +42 -0
  104. package/dist/components/Hidden/Hidden.types.d.ts +1 -1
  105. package/dist/components/Hidden/tests/Hidden.stories.d.ts +4 -1
  106. package/dist/components/Hidden/tests/Hidden.stories.js +28 -25
  107. package/dist/components/Hidden/tests/Hidden.test.stories.d.ts +15 -0
  108. package/dist/components/Hidden/tests/Hidden.test.stories.js +20 -0
  109. package/dist/components/HiddenVisually/tests/HiddenVisually.stories.d.ts +4 -1
  110. package/dist/components/HiddenVisually/tests/HiddenVisually.stories.js +8 -5
  111. package/dist/components/HiddenVisually/tests/HiddenVisually.test.stories.d.ts +15 -0
  112. package/dist/components/HiddenVisually/tests/HiddenVisually.test.stories.js +20 -0
  113. package/dist/components/Hotkey/tests/Hotkey.test.stories.d.ts +15 -0
  114. package/dist/components/Hotkey/tests/Hotkey.test.stories.js +26 -0
  115. package/dist/components/Icon/tests/Icon.stories.d.ts +12 -3
  116. package/dist/components/Icon/tests/Icon.stories.js +69 -60
  117. package/dist/components/Icon/tests/Icon.test.stories.d.ts +16 -0
  118. package/dist/components/Icon/tests/Icon.test.stories.js +35 -0
  119. package/dist/components/Image/tests/Image.stories.d.ts +24 -5
  120. package/dist/components/Image/tests/Image.stories.js +95 -75
  121. package/dist/components/Image/tests/Image.test.stories.d.ts +25 -0
  122. package/dist/components/Image/tests/Image.test.stories.js +80 -0
  123. package/dist/components/Link/tests/Link.test.stories.d.ts +29 -0
  124. package/dist/components/Link/tests/Link.test.stories.js +87 -0
  125. package/dist/components/Loader/Loader.js +1 -1
  126. package/dist/components/Loader/Loader.types.d.ts +1 -0
  127. package/dist/components/Loader/tests/Loader.stories.js +8 -8
  128. package/dist/components/Loader/tests/Loader.test.stories.d.ts +16 -0
  129. package/dist/components/Loader/tests/Loader.test.stories.js +32 -0
  130. package/dist/components/MenuItem/tests/MenuItem.test.stories.d.ts +26 -0
  131. package/dist/components/MenuItem/tests/MenuItem.test.stories.js +100 -0
  132. package/dist/components/Modal/Modal.types.d.ts +1 -1
  133. package/dist/components/Modal/tests/Modal.test.stories.d.ts +32 -0
  134. package/dist/components/Modal/tests/Modal.test.stories.js +149 -0
  135. package/dist/components/Overlay/Overlay.types.d.ts +1 -1
  136. package/dist/components/Overlay/tests/Overlay.stories.d.ts +4 -2
  137. package/dist/components/Overlay/tests/Overlay.stories.js +53 -53
  138. package/dist/components/Overlay/tests/Overlay.test.stories.d.ts +28 -0
  139. package/dist/components/Overlay/tests/Overlay.test.stories.js +146 -0
  140. package/dist/components/Pagination/tests/Pagination.test.stories.d.ts +23 -0
  141. package/dist/components/Pagination/tests/Pagination.test.stories.js +86 -0
  142. package/dist/components/PinField/tests/PinField.stories.d.ts +0 -1
  143. package/dist/components/PinField/tests/PinField.stories.js +10 -19
  144. package/dist/components/PinField/tests/PinField.test.stories.d.ts +29 -0
  145. package/dist/components/PinField/tests/PinField.test.stories.js +177 -0
  146. package/dist/components/Popover/tests/Popover.test.stories.d.ts +40 -0
  147. package/dist/components/Popover/tests/Popover.test.stories.js +167 -0
  148. package/dist/components/Progress/Progress.js +2 -2
  149. package/dist/components/Progress/Progress.types.d.ts +1 -0
  150. package/dist/components/Progress/tests/Progress.stories.js +10 -10
  151. package/dist/components/Progress/tests/Progress.test.stories.d.ts +16 -0
  152. package/dist/components/Progress/tests/Progress.test.stories.js +35 -0
  153. package/dist/components/Radio/tests/Radio.test.stories.d.ts +30 -0
  154. package/dist/components/Radio/tests/Radio.test.stories.js +118 -0
  155. package/dist/components/RadioGroup/tests/RadioGroup.test.stories.d.ts +22 -0
  156. package/dist/components/RadioGroup/tests/RadioGroup.test.stories.js +78 -0
  157. package/dist/components/Reshaped/tests/Reshaped.stories.d.ts +33 -0
  158. package/dist/components/Reshaped/tests/Reshaped.stories.js +88 -0
  159. package/dist/components/Resizable/Resizable.js +4 -1
  160. package/dist/components/Resizable/Resizable.types.d.ts +2 -2
  161. package/dist/components/Resizable/tests/Resizable.stories.d.ts +3 -0
  162. package/dist/components/Resizable/tests/Resizable.stories.js +4 -0
  163. package/dist/components/Resizable/tests/Resizable.test.stories.d.ts +19 -0
  164. package/dist/components/Resizable/tests/Resizable.test.stories.js +25 -0
  165. package/dist/components/Scrim/tests/Scrim.test.stories.d.ts +15 -0
  166. package/dist/components/Scrim/tests/Scrim.test.stories.js +25 -0
  167. package/dist/components/ScrollArea/ScrollArea.js +1 -1
  168. package/dist/components/ScrollArea/ScrollArea.module.css +1 -1
  169. package/dist/components/ScrollArea/tests/ScrollArea.stories.d.ts +17 -4
  170. package/dist/components/ScrollArea/tests/ScrollArea.stories.js +114 -139
  171. package/dist/components/ScrollArea/tests/ScrollArea.test.stories.d.ts +23 -0
  172. package/dist/components/ScrollArea/tests/ScrollArea.test.stories.js +66 -0
  173. package/dist/components/Select/tests/Select.stories.d.ts +1 -1
  174. package/dist/components/Select/tests/Select.stories.js +5 -12
  175. package/dist/components/Select/tests/Select.test.stories.d.ts +27 -0
  176. package/dist/components/Select/tests/Select.test.stories.js +132 -0
  177. package/dist/components/Skeleton/tests/Skeleton.test.stories.d.ts +15 -0
  178. package/dist/components/Skeleton/tests/Skeleton.test.stories.js +23 -0
  179. package/dist/components/Slider/Slider.types.d.ts +1 -1
  180. package/dist/components/Slider/tests/Slider.stories.d.ts +0 -1
  181. package/dist/components/Slider/tests/Slider.stories.js +8 -9
  182. package/dist/components/Slider/tests/Slider.test.stories.d.ts +38 -0
  183. package/dist/components/Slider/tests/Slider.test.stories.js +150 -0
  184. package/dist/components/Stepper/Stepper.js +1 -1
  185. package/dist/components/Stepper/tests/Stepper.stories.js +0 -3
  186. package/dist/components/Stepper/tests/Stepper.test.stories.d.ts +18 -0
  187. package/dist/components/Stepper/tests/Stepper.test.stories.js +28 -0
  188. package/dist/components/Switch/tests/Switch.test.stories.d.ts +23 -0
  189. package/dist/components/Switch/tests/Switch.test.stories.js +79 -0
  190. package/dist/components/Table/tests/Table.test.stories.d.ts +25 -0
  191. package/dist/components/Table/tests/Table.test.stories.js +93 -0
  192. package/dist/components/Tabs/Tabs.types.d.ts +3 -3
  193. package/dist/components/Tabs/TabsContext.d.ts +3 -3
  194. package/dist/components/Tabs/TabsItem.js +1 -1
  195. package/dist/components/Tabs/tests/Tabs.stories.js +4 -4
  196. package/dist/components/Tabs/tests/Tabs.test.stories.d.ts +28 -0
  197. package/dist/components/Tabs/tests/Tabs.test.stories.js +128 -0
  198. package/dist/components/Text/Text.d.ts +1 -1
  199. package/dist/components/Text/Text.types.d.ts +1 -1
  200. package/dist/components/Text/tests/Text.stories.d.ts +29 -8
  201. package/dist/components/Text/tests/Text.stories.js +148 -125
  202. package/dist/components/Text/tests/Text.test.stories.d.ts +18 -0
  203. package/dist/components/Text/tests/Text.test.stories.js +49 -0
  204. package/dist/components/TextArea/TextArea.module.css +1 -1
  205. package/dist/components/TextArea/tests/TextArea.stories.js +1 -1
  206. package/dist/components/TextArea/tests/TextArea.test.stories.d.ts +29 -0
  207. package/dist/components/TextArea/tests/TextArea.test.stories.js +99 -0
  208. package/dist/components/TextField/TextField.js +3 -1
  209. package/dist/components/TextField/tests/TextField.stories.js +1 -1
  210. package/dist/components/TextField/tests/TextField.test.stories.d.ts +29 -0
  211. package/dist/components/TextField/tests/TextField.test.stories.js +99 -0
  212. package/dist/components/Theme/Theme.types.d.ts +2 -2
  213. package/dist/components/Theme/tests/Theme.test.stories.d.ts +24 -0
  214. package/dist/components/Theme/tests/Theme.test.stories.js +133 -0
  215. package/dist/components/Timeline/tests/Timeline.test.stories.d.ts +18 -0
  216. package/dist/components/Timeline/tests/Timeline.test.stories.js +32 -0
  217. package/dist/components/Toast/ToastContainer.js +1 -1
  218. package/dist/components/Toast/tests/Toast.test.stories.d.ts +16 -0
  219. package/dist/components/Toast/tests/Toast.test.stories.js +101 -0
  220. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  221. package/dist/components/Tooltip/tests/Tooltip.stories.d.ts +1 -1
  222. package/dist/components/Tooltip/tests/Tooltip.stories.js +0 -14
  223. package/dist/components/Tooltip/tests/Tooltip.test.stories.d.ts +19 -0
  224. package/dist/components/Tooltip/tests/Tooltip.test.stories.js +40 -0
  225. package/dist/components/View/View.d.ts +2 -2
  226. package/dist/components/View/View.js +4 -4
  227. package/dist/components/View/View.types.d.ts +2 -2
  228. package/dist/components/View/tests/View.stories.d.ts +114 -30
  229. package/dist/components/View/tests/View.stories.js +1092 -1012
  230. package/dist/components/View/tests/View.test.stories.d.ts +20 -0
  231. package/dist/components/View/tests/View.test.stories.js +50 -0
  232. package/dist/components/_private/Flyout/Flyout.types.d.ts +6 -6
  233. package/dist/components/_private/Flyout/FlyoutContent.js +1 -1
  234. package/dist/components/_private/Flyout/FlyoutControlled.js +5 -3
  235. package/dist/components/_private/Flyout/tests/Flyout.stories.js +5 -5
  236. package/dist/components/_private/Flyout/tests/Flyout.test.stories.d.ts +28 -0
  237. package/dist/components/_private/Flyout/tests/Flyout.test.stories.js +205 -0
  238. package/dist/components/_private/Flyout/useFlyout.d.ts +3 -3
  239. package/dist/components/_private/Portal/Portal.types.d.ts +3 -3
  240. package/dist/components/_private/Portal/tests/Portal.stories.js +1 -1
  241. package/dist/hooks/_private/useIsDismissible.d.ts +1 -1
  242. package/dist/hooks/_private/useOnClickOutside.d.ts +1 -1
  243. package/dist/hooks/_private/useSingletonHotkeys.d.ts +3 -3
  244. package/dist/hooks/_private/useSingletonHotkeys.js +1 -1
  245. package/dist/hooks/tests/useDrag.stories.js +1 -0
  246. package/dist/hooks/tests/useDrag.test.stories.d.ts +26 -0
  247. package/dist/hooks/tests/useDrag.test.stories.js +120 -0
  248. package/dist/hooks/tests/useElementId.stories.d.ts +6 -0
  249. package/dist/hooks/tests/useElementId.stories.js +19 -0
  250. package/dist/hooks/tests/useHotkeys.test.stories.d.ts +39 -0
  251. package/dist/hooks/tests/useHotkeys.test.stories.js +119 -0
  252. package/dist/hooks/tests/useRTL.stories.d.ts +6 -0
  253. package/dist/hooks/tests/useRTL.stories.js +25 -0
  254. package/dist/hooks/tests/useResponsiveClientValue.stories.d.ts +9 -1
  255. package/dist/hooks/tests/useResponsiveClientValue.stories.js +22 -9
  256. package/dist/hooks/tests/useScrollLock.stories.d.ts +6 -0
  257. package/dist/hooks/tests/useScrollLock.stories.js +22 -0
  258. package/dist/hooks/tests/useToggle.stories.d.ts +8 -0
  259. package/dist/hooks/tests/useToggle.stories.js +54 -0
  260. package/dist/hooks/useDrag.d.ts +3 -3
  261. package/dist/hooks/useHotkeys.d.ts +2 -2
  262. package/dist/hooks/useHotkeys.js +3 -1
  263. package/dist/hooks/useScrollLock.d.ts +2 -1
  264. package/dist/hooks/useScrollLock.js +7 -3
  265. package/dist/tests/ShadowDOM.stories.js +1 -1
  266. package/dist/themes/_generator/tests/themes.stories.d.ts +3 -0
  267. package/dist/themes/_generator/tests/themes.stories.js +7 -11
  268. package/dist/themes/_generator/utilities/generateColors.d.ts +1 -1
  269. package/dist/themes/_generator/utilities/generateColors.js +3 -2
  270. package/dist/themes/slate/theme.css +1 -1
  271. package/dist/types/global.d.ts +1 -1
  272. package/dist/utilities/helpers.d.ts +1 -0
  273. package/dist/utilities/helpers.js +3 -0
  274. package/dist/utilities/scroll/lock.d.ts +1 -0
  275. package/dist/utilities/scroll/lock.js +3 -3
  276. package/dist/utilities/scroll/lockSafari.d.ts +1 -1
  277. package/dist/utilities/scroll/lockSafari.js +4 -5
  278. package/dist/utilities/scroll/lockStandard.d.ts +4 -1
  279. package/dist/utilities/scroll/lockStandard.js +7 -2
  280. package/dist/utilities/storybook/Example.js +1 -2
  281. package/package.json +22 -21
  282. package/dist/components/Theme/tests/Theme.stories.d.ts +0 -13
  283. package/dist/components/Theme/tests/Theme.stories.js +0 -80
  284. package/dist/utilities/storybook/Example.module.css +0 -1
@@ -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
+ };
@@ -51,6 +51,10 @@ export declare const useFormControl: () => {
51
51
  results?: number | undefined | undefined;
52
52
  security?: string | undefined | undefined;
53
53
  unselectable?: "on" | "off" | undefined | undefined;
54
+ popover?: "" | "auto" | "manual" | undefined | undefined;
55
+ popoverTargetAction?: "toggle" | "show" | "hide" | undefined | undefined;
56
+ popoverTarget?: string | undefined | undefined;
57
+ inert?: boolean | undefined | undefined;
54
58
  inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
55
59
  is?: string | undefined | undefined;
56
60
  "aria-activedescendant"?: string | undefined | undefined;
@@ -268,8 +272,16 @@ export declare const useFormControl: () => {
268
272
  onAnimationEndCapture?: React.AnimationEventHandler<HTMLElement> | undefined;
269
273
  onAnimationIteration?: React.AnimationEventHandler<HTMLElement> | undefined;
270
274
  onAnimationIterationCapture?: React.AnimationEventHandler<HTMLElement> | undefined;
275
+ onToggle?: React.ToggleEventHandler<HTMLElement> | undefined;
276
+ onBeforeToggle?: React.ToggleEventHandler<HTMLElement> | undefined;
277
+ onTransitionCancel?: React.TransitionEventHandler<HTMLElement> | undefined;
278
+ onTransitionCancelCapture?: React.TransitionEventHandler<HTMLElement> | undefined;
271
279
  onTransitionEnd?: React.TransitionEventHandler<HTMLElement> | undefined;
272
280
  onTransitionEndCapture?: React.TransitionEventHandler<HTMLElement> | undefined;
281
+ onTransitionRun?: React.TransitionEventHandler<HTMLElement> | undefined;
282
+ onTransitionRunCapture?: React.TransitionEventHandler<HTMLElement> | undefined;
283
+ onTransitionStart?: React.TransitionEventHandler<HTMLElement> | undefined;
284
+ onTransitionStartCapture?: React.TransitionEventHandler<HTMLElement> | undefined;
273
285
  } & {
274
286
  id: string;
275
287
  };
@@ -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
+ };
@@ -1,6 +1,6 @@
1
1
  import type * as T from "./Grid.types";
2
2
  declare const Grid: {
3
- <As extends keyof JSX.IntrinsicElements = "div">(props: T.Props<As>): import("react/jsx-runtime").JSX.Element;
4
- Item: <As extends keyof JSX.IntrinsicElements = "div">(props: T.ItemProps<As>) => import("react/jsx-runtime").JSX.Element;
3
+ <As extends keyof React.JSX.IntrinsicElements = "div">(props: T.Props<As>): import("react/jsx-runtime").JSX.Element;
4
+ Item: <As extends keyof React.JSX.IntrinsicElements = "div">(props: T.ItemProps<As>) => import("react/jsx-runtime").JSX.Element;
5
5
  };
6
6
  export default Grid;
@@ -1,7 +1,8 @@
1
+ import type React from "react";
1
2
  import type { Property } from "csstype";
2
3
  import type * as G from "../../types/global";
3
4
  import type * as TStyles from "../../styles/types";
4
- export type Props<TagName extends keyof JSX.IntrinsicElements = "div"> = {
5
+ export type Props<TagName extends keyof React.JSX.IntrinsicElements = "div"> = {
5
6
  gap?: G.Responsive<number>;
6
7
  align?: G.Responsive<TStyles.Align>;
7
8
  justify?: G.Responsive<TStyles.Justify>;
@@ -16,7 +17,7 @@ export type Props<TagName extends keyof JSX.IntrinsicElements = "div"> = {
16
17
  className?: G.ClassName;
17
18
  attributes?: G.Attributes<TagName>;
18
19
  };
19
- export type ItemProps<TagName extends keyof JSX.IntrinsicElements = "div"> = {
20
+ export type ItemProps<TagName extends keyof React.JSX.IntrinsicElements = "div"> = {
20
21
  area?: string;
21
22
  colStart?: G.Responsive<number>;
22
23
  colEnd?: G.Responsive<number>;
@@ -1,8 +1,8 @@
1
1
  declare const _default: {
2
2
  title: string;
3
3
  component: {
4
- <As extends keyof JSX.IntrinsicElements = "div">(props: import("./..").GridProps<As>): import("react").JSX.Element;
5
- Item: <As extends keyof JSX.IntrinsicElements = "div">(props: import("./..").GridItemProps<As>) => import("react").JSX.Element;
4
+ <As extends keyof React.JSX.IntrinsicElements = "div">(props: import("./..").GridProps<As>): import("react").JSX.Element;
5
+ Item: <As extends keyof React.JSX.IntrinsicElements = "div">(props: import("./..").GridItemProps<As>) => import("react").JSX.Element;
6
6
  };
7
7
  parameters: {
8
8
  iframe: {
@@ -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
+ };