reshaped 3.3.11 → 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 (250) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/bundle.css +1 -1
  3. package/dist/bundle.js +16 -17
  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/tests/Actionable.stories.d.ts +19 -5
  16. package/dist/components/Actionable/tests/Actionable.stories.js +88 -63
  17. package/dist/components/Actionable/tests/Actionable.test.stories.d.ts +32 -0
  18. package/dist/components/Actionable/tests/Actionable.test.stories.js +130 -0
  19. package/dist/components/Alert/Alert.js +1 -1
  20. package/dist/components/Alert/tests/Alert.stories.d.ts +12 -3
  21. package/dist/components/Alert/tests/Alert.stories.js +51 -86
  22. package/dist/components/Alert/tests/Alert.test.stories.d.ts +15 -0
  23. package/dist/components/Alert/tests/Alert.test.stories.js +26 -0
  24. package/dist/components/Autocomplete/Autocomplete.js +9 -2
  25. package/dist/components/Autocomplete/tests/Autocomplete.stories.d.ts +6 -2
  26. package/dist/components/Autocomplete/tests/Autocomplete.stories.js +94 -111
  27. package/dist/components/Autocomplete/tests/Autocomplete.test.stories.d.ts +23 -0
  28. package/dist/components/Autocomplete/tests/Autocomplete.test.stories.js +86 -0
  29. package/dist/components/Avatar/Avatar.js +1 -1
  30. package/dist/components/Avatar/tests/Avatar.stories.d.ts +14 -4
  31. package/dist/components/Avatar/tests/Avatar.stories.js +94 -80
  32. package/dist/components/Avatar/tests/Avatar.test.stories.d.ts +17 -0
  33. package/dist/components/Avatar/tests/Avatar.test.stories.js +39 -0
  34. package/dist/components/Badge/tests/Badge.stories.d.ts +33 -8
  35. package/dist/components/Badge/tests/Badge.stories.js +238 -212
  36. package/dist/components/Badge/tests/Badge.test.stories.d.ts +20 -0
  37. package/dist/components/Badge/tests/Badge.test.stories.js +44 -0
  38. package/dist/components/Breadcrumbs/Breadcrumbs.js +2 -2
  39. package/dist/components/Breadcrumbs/Breadcrumbs.types.d.ts +1 -0
  40. package/dist/components/Breadcrumbs/tests/Breadcrumbs.stories.d.ts +24 -5
  41. package/dist/components/Breadcrumbs/tests/Breadcrumbs.stories.js +114 -95
  42. package/dist/components/Breadcrumbs/tests/Breadcrumbs.test.stories.d.ts +23 -0
  43. package/dist/components/Breadcrumbs/tests/Breadcrumbs.test.stories.js +76 -0
  44. package/dist/components/Button/Button.js +5 -2
  45. package/dist/components/Button/Button.module.css +1 -1
  46. package/dist/components/Button/Button.types.d.ts +1 -0
  47. package/dist/components/Button/tests/Button.stories.d.ts +2 -2
  48. package/dist/components/Button/tests/Button.stories.js +77 -74
  49. package/dist/components/Button/tests/Button.test.stories.d.ts +27 -0
  50. package/dist/components/Button/tests/Button.test.stories.js +112 -0
  51. package/dist/components/Calendar/tests/Calendar.test.stories.d.ts +26 -0
  52. package/dist/components/Calendar/tests/Calendar.test.stories.js +161 -0
  53. package/dist/components/Card/tests/Card.stories.d.ts +0 -1
  54. package/dist/components/Card/tests/Card.stories.js +0 -11
  55. package/dist/components/Card/tests/Card.test.stories.d.ts +35 -0
  56. package/dist/components/Card/tests/Card.test.stories.js +54 -0
  57. package/dist/components/Carousel/CarouselControl.js +1 -1
  58. package/dist/components/Carousel/tests/Carousel.stories.d.ts +3 -0
  59. package/dist/components/Carousel/tests/Carousel.stories.js +4 -0
  60. package/dist/components/Carousel/tests/Carousel.test.stories.d.ts +17 -0
  61. package/dist/components/Carousel/tests/Carousel.test.stories.js +52 -0
  62. package/dist/components/Checkbox/tests/Checkbox.test.stories.d.ts +25 -0
  63. package/dist/components/Checkbox/tests/Checkbox.test.stories.js +104 -0
  64. package/dist/components/CheckboxGroup/tests/CheckboxGroup.test.stories.d.ts +22 -0
  65. package/dist/components/CheckboxGroup/tests/CheckboxGroup.test.stories.js +78 -0
  66. package/dist/components/Container/Container.module.css +1 -1
  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/tests/Table.test.stories.d.ts +25 -0
  178. package/dist/components/Table/tests/Table.test.stories.js +93 -0
  179. package/dist/components/Tabs/tests/Tabs.stories.js +4 -4
  180. package/dist/components/Tabs/tests/Tabs.test.stories.d.ts +28 -0
  181. package/dist/components/Tabs/tests/Tabs.test.stories.js +128 -0
  182. package/dist/components/Text/tests/Text.stories.d.ts +28 -7
  183. package/dist/components/Text/tests/Text.stories.js +148 -125
  184. package/dist/components/Text/tests/Text.test.stories.d.ts +18 -0
  185. package/dist/components/Text/tests/Text.test.stories.js +49 -0
  186. package/dist/components/TextArea/TextArea.module.css +1 -1
  187. package/dist/components/TextArea/tests/TextArea.stories.js +1 -1
  188. package/dist/components/TextArea/tests/TextArea.test.stories.d.ts +29 -0
  189. package/dist/components/TextArea/tests/TextArea.test.stories.js +99 -0
  190. package/dist/components/TextField/tests/TextField.stories.js +1 -1
  191. package/dist/components/TextField/tests/TextField.test.stories.d.ts +29 -0
  192. package/dist/components/TextField/tests/TextField.test.stories.js +99 -0
  193. package/dist/components/Theme/tests/Theme.test.stories.d.ts +24 -0
  194. package/dist/components/Theme/tests/Theme.test.stories.js +133 -0
  195. package/dist/components/Timeline/tests/Timeline.test.stories.d.ts +18 -0
  196. package/dist/components/Timeline/tests/Timeline.test.stories.js +32 -0
  197. package/dist/components/Toast/tests/Toast.test.stories.d.ts +16 -0
  198. package/dist/components/Toast/tests/Toast.test.stories.js +101 -0
  199. package/dist/components/Tooltip/tests/Tooltip.stories.js +0 -14
  200. package/dist/components/Tooltip/tests/Tooltip.test.stories.d.ts +19 -0
  201. package/dist/components/Tooltip/tests/Tooltip.test.stories.js +40 -0
  202. package/dist/components/View/View.js +1 -2
  203. package/dist/components/View/tests/View.stories.d.ts +112 -28
  204. package/dist/components/View/tests/View.stories.js +1092 -1012
  205. package/dist/components/View/tests/View.test.stories.d.ts +20 -0
  206. package/dist/components/View/tests/View.test.stories.js +50 -0
  207. package/dist/components/_private/Flyout/FlyoutContent.js +1 -1
  208. package/dist/components/_private/Flyout/tests/Flyout.stories.js +4 -4
  209. package/dist/components/_private/Flyout/tests/Flyout.test.stories.d.ts +28 -0
  210. package/dist/components/_private/Flyout/tests/Flyout.test.stories.js +205 -0
  211. package/dist/components/_private/Portal/tests/Portal.stories.js +1 -1
  212. package/dist/hooks/_private/useSingletonHotkeys.d.ts +3 -3
  213. package/dist/hooks/_private/useSingletonHotkeys.js +1 -1
  214. package/dist/hooks/tests/useDrag.stories.js +1 -0
  215. package/dist/hooks/tests/useDrag.test.stories.d.ts +26 -0
  216. package/dist/hooks/tests/useDrag.test.stories.js +120 -0
  217. package/dist/hooks/tests/useElementId.stories.d.ts +6 -0
  218. package/dist/hooks/tests/useElementId.stories.js +19 -0
  219. package/dist/hooks/tests/useHotkeys.test.stories.d.ts +39 -0
  220. package/dist/hooks/tests/useHotkeys.test.stories.js +119 -0
  221. package/dist/hooks/tests/useRTL.stories.d.ts +6 -0
  222. package/dist/hooks/tests/useRTL.stories.js +25 -0
  223. package/dist/hooks/tests/useResponsiveClientValue.stories.d.ts +9 -1
  224. package/dist/hooks/tests/useResponsiveClientValue.stories.js +22 -9
  225. package/dist/hooks/tests/useScrollLock.stories.d.ts +6 -0
  226. package/dist/hooks/tests/useScrollLock.stories.js +22 -0
  227. package/dist/hooks/tests/useToggle.stories.d.ts +8 -0
  228. package/dist/hooks/tests/useToggle.stories.js +54 -0
  229. package/dist/hooks/useHotkeys.js +0 -2
  230. package/dist/hooks/useScrollLock.d.ts +1 -0
  231. package/dist/hooks/useScrollLock.js +7 -3
  232. package/dist/tests/ShadowDOM.stories.js +1 -1
  233. package/dist/themes/_generator/tests/themes.stories.d.ts +3 -0
  234. package/dist/themes/_generator/tests/themes.stories.js +7 -11
  235. package/dist/themes/_generator/utilities/generateColors.d.ts +1 -1
  236. package/dist/themes/_generator/utilities/generateColors.js +3 -2
  237. package/dist/themes/slate/theme.css +1 -1
  238. package/dist/utilities/helpers.d.ts +1 -0
  239. package/dist/utilities/helpers.js +3 -0
  240. package/dist/utilities/scroll/lock.d.ts +1 -0
  241. package/dist/utilities/scroll/lock.js +3 -3
  242. package/dist/utilities/scroll/lockSafari.d.ts +1 -1
  243. package/dist/utilities/scroll/lockSafari.js +4 -5
  244. package/dist/utilities/scroll/lockStandard.d.ts +4 -1
  245. package/dist/utilities/scroll/lockStandard.js +7 -2
  246. package/dist/utilities/storybook/Example.js +1 -2
  247. package/package.json +20 -19
  248. package/dist/components/Theme/tests/Theme.stories.d.ts +0 -13
  249. package/dist/components/Theme/tests/Theme.stories.js +0 -80
  250. package/dist/utilities/storybook/Example.module.css +0 -1
@@ -12,89 +12,54 @@ export default {
12
12
  },
13
13
  },
14
14
  };
15
- export const color = () => (<Example>
16
- <Example.Item title="color: neutral">
17
- <Alert title="Alert title goes here" icon={IconZap} actionsSlot={<React.Fragment>
18
- <Link variant="plain">View now</Link>
19
- <Link variant="plain">Dismiss</Link>
20
- </React.Fragment>}>
21
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has
22
- been the industry's standard
23
- </Alert>
24
- </Example.Item>
25
-
26
- <Example.Item title="color: primary">
27
- <Alert color="primary" title="Alert title goes here" icon={IconZap} actionsSlot={<>
28
- <Link variant="plain">View now</Link>
29
- <Link variant="plain">Dismiss</Link>
30
- </>}>
31
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has
32
- been the industry's standard
33
- </Alert>
34
- </Example.Item>
35
-
36
- <Example.Item title="color: critical">
37
- <Alert color="critical" title="Alert title goes here" icon={IconZap} actionsSlot={<>
38
- <Link variant="plain" color="critical">
39
- View now
40
- </Link>
41
- <Link variant="plain" color="critical">
42
- Dismiss
43
- </Link>
44
- </>}>
45
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has
46
- been the industry's standard
47
- </Alert>
48
- </Example.Item>
49
-
50
- <Example.Item title="color: positive">
51
- <Alert color="positive" title="Alert title goes here" icon={IconZap} actionsSlot={<>
52
- <Link variant="plain" color="positive">
53
- View now
54
- </Link>
55
- <Link variant="plain" color="positive">
56
- Dismiss
57
- </Link>
58
- </>}>
59
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has
60
- been the industry's standard
61
- </Alert>
62
- </Example.Item>
63
-
64
- <Example.Item title="color: warning">
65
- <Alert color="warning" title="Alert title goes here" icon={IconZap} actionsSlot={<>
66
- <Link variant="plain" color="warning">
67
- View now
68
- </Link>
69
- <Link variant="plain" color="warning">
70
- Dismiss
71
- </Link>
72
- </>}>
73
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has
74
- been the industry's standard
75
- </Alert>
76
- </Example.Item>
77
- </Example>);
78
- export const inline = () => (<Example>
79
- <Example.Item title="inline: true">
80
- <Alert inline title="Alert title goes here" icon={IconZap} actionsSlot={<>
81
- <Link variant="plain">View now</Link>
82
- <Link variant="plain">Dismiss</Link>
83
- </>}>
84
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has
85
- been the industry's standard
86
- </Alert>
87
- </Example.Item>
88
- </Example>);
89
- export const bleed = () => (<Example>
90
- <Example.Item title="bleed: 4">
91
- <Alert bleed={4} icon={IconZap}>
92
- Content
93
- </Alert>
94
- </Example.Item>
95
- <Example.Item title={["responsive bleed", "[s] 4", "[m+] 0"]}>
96
- <Alert bleed={{ s: 4, m: 0 }} icon={IconZap}>
97
- Content
98
- </Alert>
99
- </Example.Item>
100
- </Example>);
15
+ export const color = {
16
+ name: "color",
17
+ render: () => (<Example>
18
+ {["neutral", "primary", "critical", "positive", "warning"].map((color) => (<Example.Item title={`color: ${color}`} key={color}>
19
+ <Alert color={color} title="Alert title goes here" icon={IconZap} actionsSlot={<>
20
+ <Link variant="plain" color={color === "neutral" ? "primary" : color} onClick={() => { }}>
21
+ View now
22
+ </Link>
23
+ <Link variant="plain" color={color === "neutral" ? "primary" : color} onClick={() => { }}>
24
+ Dismiss
25
+ </Link>
26
+ </>}>
27
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum
28
+ has been the industry's standard
29
+ </Alert>
30
+ </Example.Item>))}
31
+ </Example>),
32
+ };
33
+ export const inline = {
34
+ name: "inline",
35
+ render: () => (<Example>
36
+ <Example.Item title="inline: true">
37
+ <Alert inline title="Alert title goes here" icon={IconZap} actionsSlot={<>
38
+ <Link variant="plain" onClick={() => { }}>
39
+ View now
40
+ </Link>
41
+ <Link variant="plain" onClick={() => { }}>
42
+ Dismiss
43
+ </Link>
44
+ </>}>
45
+ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has
46
+ been the industry's standard
47
+ </Alert>
48
+ </Example.Item>
49
+ </Example>),
50
+ };
51
+ export const bleed = {
52
+ name: "bleed",
53
+ render: () => (<Example>
54
+ <Example.Item title="bleed: 4">
55
+ <Alert bleed={4} icon={IconZap}>
56
+ Content
57
+ </Alert>
58
+ </Example.Item>
59
+ <Example.Item title="bleed: [s] 4, [m+] 0">
60
+ <Alert bleed={{ s: 4, m: 0 }} icon={IconZap}>
61
+ Content
62
+ </Alert>
63
+ </Example.Item>
64
+ </Example>),
65
+ };
@@ -0,0 +1,15 @@
1
+ import { StoryObj } from "@storybook/react";
2
+ declare const _default: {
3
+ title: string;
4
+ component: (props: import("./..").AlertProps) => 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 className: StoryObj;
@@ -0,0 +1,26 @@
1
+ import { expect } from "@storybook/test";
2
+ import Alert from "../index.js";
3
+ import { Placeholder } from "../../../utilities/storybook/index.js";
4
+ export default {
5
+ title: "Components/Alert/tests",
6
+ component: Alert,
7
+ parameters: {
8
+ iframe: {
9
+ url: "https://reshaped.so/docs/components/alert",
10
+ },
11
+ chromatic: { disableSnapshot: true },
12
+ },
13
+ };
14
+ export const className = {
15
+ name: "className, attributes",
16
+ render: () => (<div data-testid="root">
17
+ <Alert className="test-classname" attributes={{ id: "test-id" }}>
18
+ <Placeholder />
19
+ </Alert>
20
+ </div>),
21
+ play: async ({ canvas }) => {
22
+ const root = canvas.getByTestId("root").firstChild;
23
+ expect(root).toHaveClass("test-classname");
24
+ expect(root).toHaveAttribute("id", "test-id");
25
+ },
26
+ };
@@ -26,7 +26,9 @@ const Autocomplete = (props) => {
26
26
  }, []);
27
27
  const handleClose = () => setActive(false);
28
28
  useHotkeys({
29
- [keys.BACKSPACE]: () => onBackspaceRef.current?.(),
29
+ [keys.BACKSPACE]: () => {
30
+ onBackspaceRef.current?.();
31
+ },
30
32
  }, [onBackspaceRef], {
31
33
  ref: inputRef,
32
34
  disabled: !onBackspaceRef.current,
@@ -58,8 +60,13 @@ const Autocomplete = (props) => {
58
60
  };
59
61
  return (_jsx(AutocompleteContext.Provider, { value: { onItemClick: handleItemClick }, children: _jsxs(DropdownMenu, { position: "bottom", width: "trigger", triggerType: "focus", trapFocusMode: "selection-menu", active: hasChildren && active, onClose: handleClose, onOpen: handleOpen, containerRef: containerRef, disableHideAnimation: true, instanceRef: instanceRef, children: [_jsx(DropdownMenu.Trigger, { children: ({ ref, ...attributes }) => (_jsx(TextField, { ...textFieldProps, name: name, onChange: handleChange, focused: hasChildren && active,
60
62
  // Ignoring the type check since TS can't infer the correct html element type
61
- attributes: { ...textFieldProps.attributes, ref }, inputAttributes: {
63
+ attributes: {
64
+ ...textFieldProps.attributes,
65
+ ref: ref,
66
+ onClick: attributes.onFocus,
67
+ }, inputAttributes: {
62
68
  ...textFieldProps.inputAttributes,
69
+ ...attributes,
63
70
  onFocus: (e) => {
64
71
  attributes.onFocus?.();
65
72
  textFieldProps.onFocus?.(e);
@@ -1,4 +1,5 @@
1
1
  import React from "react";
2
+ import { StoryObj } from "@storybook/react";
2
3
  declare const _default: {
3
4
  title: string;
4
5
  component: {
@@ -12,5 +13,8 @@ declare const _default: {
12
13
  };
13
14
  };
14
15
  export default _default;
15
- export declare const base: () => React.JSX.Element;
16
- export declare const multiselect: () => React.JSX.Element;
16
+ export declare const base: StoryObj;
17
+ export declare const multiselect: {
18
+ name: string;
19
+ render: () => React.JSX.Element;
20
+ };
@@ -1,7 +1,6 @@
1
1
  import React from "react";
2
2
  import { Example } from "../../../utilities/storybook/index.js";
3
3
  import Autocomplete from "../index.js";
4
- import Loader from "../../Loader/index.js";
5
4
  import View from "../../View/index.js";
6
5
  import Badge from "../../Badge/index.js";
7
6
  import useToggle from "../../../hooks/useToggle.js";
@@ -11,6 +10,7 @@ import Text from "../../Text/index.js";
11
10
  import Button from "../../Button/index.js";
12
11
  import PlusIcon from "../../../icons/Plus.js";
13
12
  import Dismissible from "../../Dismissible/index.js";
13
+ import FormControl from "../../FormControl/index.js";
14
14
  export default {
15
15
  title: "Components/Autocomplete",
16
16
  component: Autocomplete,
@@ -20,117 +20,100 @@ export default {
20
20
  },
21
21
  },
22
22
  };
23
- const Demo = () => {
24
- const [value, setValue] = React.useState("");
25
- return (<Autocomplete name="fruit" value={value} placeholder="Pick your food" onChange={(args) => setValue(args.value)}>
26
- {["Pizza", "Pie", "Ice-cream"].map((v) => {
27
- if (!v.toLowerCase().includes(value.toLowerCase()))
28
- return;
29
- return (<Autocomplete.Item key={v} value={v}>
30
- {v}
31
- </Autocomplete.Item>);
32
- })}
33
- </Autocomplete>);
34
- };
35
- const DemoAsync = () => {
36
- const [value, setValue] = React.useState("");
37
- const [loading, setLoading] = React.useState(false);
38
- return (<Autocomplete name="fruit" value={value} placeholder="Pick your food" onChange={({ value }) => {
39
- setLoading(true);
40
- setTimeout(() => {
41
- setLoading(false);
42
- }, 500);
43
- setValue(value);
44
- }}>
45
- {loading ? (<View align="center" justify="center" padding={4}>
46
- <Loader />
47
- </View>) : (["Pizza", "Pie", "Ice-cream"].map((v) => {
48
- if (!v.toLowerCase().includes(value.toLowerCase()))
49
- return;
50
- return (<Autocomplete.Item key={v} value={v}>
51
- {v}
52
- </Autocomplete.Item>);
53
- }))}
54
- </Autocomplete>);
23
+ export const base = {
24
+ name: "base",
25
+ render: () => {
26
+ const [value, setValue] = React.useState("");
27
+ return (<Example>
28
+ <Example.Item title="Base">
29
+ <FormControl>
30
+ <FormControl.Label>Food</FormControl.Label>
31
+ <Autocomplete name="fruit" placeholder="Pick your food" value={value} onChange={(args) => setValue(args.value)}>
32
+ {["Pizza", "Pie", "Ice-cream"].map((v) => {
33
+ return (<Autocomplete.Item key={v} value={v}>
34
+ {v}
35
+ </Autocomplete.Item>);
36
+ })}
37
+ </Autocomplete>
38
+ </FormControl>
39
+ </Example.Item>
40
+ </Example>);
41
+ },
55
42
  };
56
- export const base = () => (<Example>
57
- <Example.Item title="Default">
58
- <Demo />
59
- </Example.Item>
60
- <Example.Item title="Async, should keep focus on the first item after reload">
61
- <DemoAsync />
62
- </Example.Item>
63
- </Example>);
64
- export const multiselect = () => {
65
- const inputRef = React.useRef(null);
66
- const [values, setValues] = React.useState([]);
67
- const [query, setQuery] = React.useState("");
68
- const [customValueQuery, setCustomValueQuery] = React.useState("");
69
- const customValueToggle = useToggle();
70
- const handleDismiss = (dismissedValue) => {
71
- const nextValues = values.filter((value) => value !== dismissedValue);
72
- setValues(nextValues);
73
- inputRef.current?.focus();
74
- };
75
- const handleAddCustomValue = () => {
76
- if (customValueQuery.length) {
77
- setValues((prev) => [...prev, customValueQuery]);
78
- }
79
- customValueToggle.deactivate();
80
- setCustomValueQuery("");
81
- };
82
- const valuesNode = !!values.length && (<View direction="row" gap={1}>
83
- {values.map((value) => (<Badge dismissAriaLabel="Dismiss value" onDismiss={() => handleDismiss(value)} key={value} size="small">
84
- {value}
85
- </Badge>))}
86
- </View>);
87
- return (<>
88
- <Autocomplete name="fruit" value={query} placeholder="Pick your food" startSlot={valuesNode} inputAttributes={{ ref: inputRef }} onBackspace={() => {
89
- if (!query.length)
90
- handleDismiss(values[values.length - 1]);
91
- }} multiline onChange={(args) => setQuery(args.value)} onItemSelect={(args) => {
92
- setCustomValueQuery(query);
93
- setQuery("");
94
- if (args.value === "_custom") {
95
- customValueToggle.activate();
96
- return;
43
+ export const multiselect = {
44
+ name: "multiselect",
45
+ render: () => {
46
+ const inputRef = React.useRef(null);
47
+ const [values, setValues] = React.useState(["foo", "bar"]);
48
+ const [query, setQuery] = React.useState("");
49
+ const [customValueQuery, setCustomValueQuery] = React.useState("");
50
+ const customValueToggle = useToggle();
51
+ const handleDismiss = (dismissedValue) => {
52
+ const nextValues = values.filter((value) => value !== dismissedValue);
53
+ setValues(nextValues);
54
+ inputRef.current?.focus();
55
+ };
56
+ const handleAddCustomValue = () => {
57
+ if (customValueQuery.length) {
58
+ setValues((prev) => [...prev, customValueQuery]);
97
59
  }
98
- setValues((prev) => [...prev, args.value]);
99
- }}>
100
- {["Pizza", "Pie", "Ice-cream"].map((v) => {
101
- if (!v.toLowerCase().includes(query.toLowerCase()))
102
- return;
103
- if (values.includes(v))
104
- return;
105
- return (<Autocomplete.Item key={v} value={v}>
106
- {v}
107
- </Autocomplete.Item>);
108
- })}
109
- {!!query.length && (<Autocomplete.Item value="_custom" icon={PlusIcon}>
110
- Add a custom value
111
- </Autocomplete.Item>)}
112
- </Autocomplete>
113
- <Modal onClose={customValueToggle.deactivate} active={customValueToggle.active}>
114
- <View gap={4}>
115
- <Dismissible onClose={customValueToggle.deactivate} closeAriaLabel="Close modal">
116
- <Modal.Title>
117
- <Text variant="body-3" weight="medium">
118
- Add a custom value
119
- </Text>
120
- </Modal.Title>
121
- </Dismissible>
122
- <View direction="row" gap={3} as="form" attributes={{
123
- onSubmit: (e) => {
124
- e.preventDefault();
125
- handleAddCustomValue();
126
- },
127
- }}>
128
- <View.Item grow>
129
- <TextField name="custom" onChange={(args) => setCustomValueQuery(args.value)} value={customValueQuery}/>
130
- </View.Item>
131
- <Button type="submit">Add</Button>
60
+ customValueToggle.deactivate();
61
+ setCustomValueQuery("");
62
+ };
63
+ const valuesNode = !!values.length && (<View direction="row" gap={1}>
64
+ {values.map((value) => (<Badge dismissAriaLabel="Dismiss value" onDismiss={() => handleDismiss(value)} key={value} size="small">
65
+ {value}
66
+ </Badge>))}
67
+ </View>);
68
+ return (<FormControl>
69
+ <FormControl.Label>Food</FormControl.Label>
70
+ <Autocomplete name="fruit" value={query} placeholder="Pick your food" startSlot={valuesNode} inputAttributes={{ ref: inputRef }} onBackspace={() => {
71
+ if (!query.length)
72
+ handleDismiss(values[values.length - 1]);
73
+ }} multiline onChange={(args) => setQuery(args.value)} onItemSelect={(args) => {
74
+ setCustomValueQuery(query);
75
+ setQuery("");
76
+ if (args.value === "_custom") {
77
+ customValueToggle.activate();
78
+ return;
79
+ }
80
+ setValues((prev) => [...prev, args.value]);
81
+ }}>
82
+ {["Pizza", "Pie", "Ice-cream"].map((v) => {
83
+ if (!v.toLowerCase().includes(query.toLowerCase()))
84
+ return;
85
+ if (values.includes(v))
86
+ return;
87
+ return (<Autocomplete.Item key={v} value={v}>
88
+ {v}
89
+ </Autocomplete.Item>);
90
+ })}
91
+ {!!query.length && (<Autocomplete.Item value="_custom" icon={PlusIcon}>
92
+ Add a custom value
93
+ </Autocomplete.Item>)}
94
+ </Autocomplete>
95
+ <Modal onClose={customValueToggle.deactivate} active={customValueToggle.active}>
96
+ <View gap={4}>
97
+ <Dismissible onClose={customValueToggle.deactivate} closeAriaLabel="Close modal">
98
+ <Modal.Title>
99
+ <Text variant="body-3" weight="medium">
100
+ Add a custom value
101
+ </Text>
102
+ </Modal.Title>
103
+ </Dismissible>
104
+ <View direction="row" gap={3} as="form" attributes={{
105
+ onSubmit: (e) => {
106
+ e.preventDefault();
107
+ handleAddCustomValue();
108
+ },
109
+ }}>
110
+ <View.Item grow>
111
+ <TextField name="custom" onChange={(args) => setCustomValueQuery(args.value)} value={customValueQuery}/>
112
+ </View.Item>
113
+ <Button type="submit">Add</Button>
114
+ </View>
132
115
  </View>
133
- </View>
134
- </Modal>
135
- </>);
116
+ </Modal>
117
+ </FormControl>);
118
+ },
136
119
  };
@@ -0,0 +1,23 @@
1
+ import React from "react";
2
+ import { StoryObj } from "@storybook/react";
3
+ import { fn } from "@storybook/test";
4
+ declare const _default: {
5
+ title: string;
6
+ component: {
7
+ (props: import("./..").AutocompleteProps): React.JSX.Element;
8
+ Item: (props: import("../Autocomplete.types").ItemProps) => React.JSX.Element;
9
+ };
10
+ parameters: {
11
+ iframe: {
12
+ url: string;
13
+ };
14
+ chromatic: {
15
+ disableSnapshot: boolean;
16
+ };
17
+ };
18
+ };
19
+ export default _default;
20
+ export declare const base: StoryObj<{
21
+ handleItemSelect: ReturnType<typeof fn>;
22
+ handleBackspace: ReturnType<typeof fn>;
23
+ }>;
@@ -0,0 +1,86 @@
1
+ import React from "react";
2
+ import { expect, waitFor, within, fn } from "@storybook/test";
3
+ import { Example } from "../../../utilities/storybook/index.js";
4
+ import Autocomplete from "../index.js";
5
+ import FormControl from "../../FormControl/index.js";
6
+ import { sleep } from "../../../utilities/helpers.js";
7
+ import userEvent from "@testing-library/user-event";
8
+ export default {
9
+ title: "Components/Autocomplete/tests",
10
+ component: Autocomplete,
11
+ parameters: {
12
+ iframe: {
13
+ url: "https://reshaped.so/docs/components/autocomplete",
14
+ },
15
+ chromatic: { disableSnapshot: true },
16
+ },
17
+ };
18
+ export const base = {
19
+ name: "base",
20
+ args: {
21
+ handleBackspace: fn(),
22
+ handleItemSelect: fn(),
23
+ },
24
+ render: (args) => {
25
+ const [value, setValue] = React.useState("");
26
+ return (<Example>
27
+ <Example.Item title="Base">
28
+ <FormControl>
29
+ <FormControl.Label>Food</FormControl.Label>
30
+ <Autocomplete name="fruit" placeholder="Pick your food" value={value} onChange={(args) => setValue(args.value)} onBackspace={args.handleBackspace} onItemSelect={args.handleItemSelect}>
31
+ {["Pizza", "Pie", "Ice-cream"].map((v, i) => {
32
+ return (<Autocomplete.Item key={v} value={v} data={i === 0 ? { foo: "bar" } : undefined}>
33
+ {v}
34
+ </Autocomplete.Item>);
35
+ })}
36
+ </Autocomplete>
37
+ </FormControl>
38
+ </Example.Item>
39
+ </Example>);
40
+ },
41
+ play: async ({ canvasElement, args }) => {
42
+ const canvas = within(canvasElement.ownerDocument.body);
43
+ const input = canvas.getByRole("combobox");
44
+ // Reset the focus
45
+ document.body.focus();
46
+ // Test keyboard selection after focusing the input
47
+ input.focus();
48
+ let options = [];
49
+ await waitFor(() => {
50
+ options = canvas.getAllByRole("option");
51
+ });
52
+ expect(options).toHaveLength(3);
53
+ await waitFor(() => {
54
+ expect(options[0]).toHaveAttribute("data-rs-focus");
55
+ });
56
+ expect(options[1]).not.toHaveAttribute("data-rs-focus");
57
+ await userEvent.keyboard("{ArrowDown/}");
58
+ await userEvent.keyboard("{Enter/}");
59
+ expect(input).toHaveValue("Pie");
60
+ expect(args.handleItemSelect).toHaveBeenCalledTimes(1);
61
+ expect(args.handleItemSelect).toHaveBeenCalledWith({
62
+ value: "Pie",
63
+ data: undefined,
64
+ });
65
+ // Give browser time to focus on the input
66
+ await sleep(100);
67
+ // Test click selection after opening with down arrow
68
+ await userEvent.keyboard("{ArrowDown/}");
69
+ await waitFor(() => {
70
+ options = canvas.getAllByRole("option");
71
+ });
72
+ await userEvent.click(options[0]);
73
+ expect(input).toHaveValue("Pizza");
74
+ expect(args.handleItemSelect).toHaveBeenCalledTimes(2);
75
+ expect(args.handleItemSelect).toHaveBeenCalledWith({
76
+ value: "Pizza",
77
+ data: { foo: "bar" },
78
+ });
79
+ input.focus();
80
+ await userEvent.keyboard("{Backspace/}");
81
+ await waitFor(() => {
82
+ expect(args.handleBackspace).toHaveBeenCalledTimes(1);
83
+ expect(args.handleBackspace).toHaveBeenCalledWith();
84
+ });
85
+ },
86
+ };
@@ -19,7 +19,7 @@ const Avatar = (props) => {
19
19
  const rootClassNames = classNames(s.root, className, heightStyles?.classNames, color && s[`--color-${color}`], variant && s[`--variant-${variant}`]);
20
20
  const renderContent = () => {
21
21
  if (src)
22
- return (_jsx("img", { role: !initials ? "presentation" : undefined, src: src, alt: alt, className: s.img }));
22
+ return _jsx("img", { role: !alt ? "presentation" : undefined, src: src, alt: alt, className: s.img });
23
23
  if (icon)
24
24
  return (_jsx(Icon, { svg: icon, size: responsivePropDependency(size, (size) => Math.ceil(size * 0.4)) }));
25
25
  return initials;
@@ -1,3 +1,4 @@
1
+ import { StoryObj } from "@storybook/react";
1
2
  declare const _default: {
2
3
  title: string;
3
4
  component: (props: import("./..").AvatarProps) => import("react").JSX.Element;
@@ -8,7 +9,16 @@ declare const _default: {
8
9
  };
9
10
  };
10
11
  export default _default;
11
- export declare const content: () => import("react").JSX.Element;
12
- export declare const size: () => import("react").JSX.Element;
13
- export declare const squared: () => import("react").JSX.Element;
14
- export declare const colors: () => import("react").JSX.Element;
12
+ export declare const src: StoryObj;
13
+ export declare const size: {
14
+ name: string;
15
+ render: () => import("react").JSX.Element;
16
+ };
17
+ export declare const squared: {
18
+ name: string;
19
+ render: () => import("react").JSX.Element;
20
+ };
21
+ export declare const colors: {
22
+ name: string;
23
+ render: () => import("react").JSX.Element;
24
+ };