reshaped 3.8.0-canary.0 → 3.8.0-canary.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/CHANGELOG.md +101 -8
  2. package/README.md +2 -2
  3. package/dist/bundle.css +1 -1
  4. package/dist/bundle.d.ts +1 -1
  5. package/dist/bundle.js +11 -11
  6. package/dist/components/Accordion/AccordionControlled.js +1 -0
  7. package/dist/components/Actionable/Actionable.js +17 -3
  8. package/dist/components/Actionable/Actionable.module.css +1 -1
  9. package/dist/components/Actionable/Actionable.types.d.ts +15 -3
  10. package/dist/components/Actionable/tests/Actionable.stories.d.ts +13 -1
  11. package/dist/components/Actionable/tests/Actionable.stories.js +127 -7
  12. package/dist/components/Alert/tests/Alert.stories.d.ts +6 -5
  13. package/dist/components/Alert/tests/Alert.stories.js +15 -2
  14. package/dist/components/Autocomplete/Autocomplete.js +2 -2
  15. package/dist/components/Autocomplete/Autocomplete.types.d.ts +1 -1
  16. package/dist/components/Badge/Badge.module.css +1 -1
  17. package/dist/components/Badge/tests/Badge.stories.d.ts +5 -0
  18. package/dist/components/Badge/tests/Badge.stories.js +34 -0
  19. package/dist/components/Breadcrumbs/Breadcrumbs.js +1 -0
  20. package/dist/components/Breadcrumbs/tests/Breadcrumbs.stories.d.ts +8 -4
  21. package/dist/components/Breadcrumbs/tests/Breadcrumbs.stories.js +57 -1
  22. package/dist/components/Button/Button.js +2 -2
  23. package/dist/components/Button/Button.types.d.ts +1 -1
  24. package/dist/components/Button/tests/Button.stories.d.ts +54 -12
  25. package/dist/components/Button/tests/Button.stories.js +725 -588
  26. package/dist/components/Calendar/CalendarMonth.js +1 -0
  27. package/dist/components/Card/Card.d.ts +1 -1
  28. package/dist/components/Card/Card.module.css +1 -1
  29. package/dist/components/Card/tests/Card.stories.d.ts +29 -7
  30. package/dist/components/Card/tests/Card.stories.js +110 -65
  31. package/dist/components/Carousel/Carousel.js +1 -0
  32. package/dist/components/Carousel/Carousel.module.css +1 -1
  33. package/dist/components/Checkbox/Checkbox.module.css +1 -1
  34. package/dist/components/Checkbox/tests/Checkbox.stories.d.ts +20 -4
  35. package/dist/components/Checkbox/tests/Checkbox.stories.js +150 -79
  36. package/dist/components/CheckboxGroup/tests/CheckboxGroup.stories.d.ts +9 -2
  37. package/dist/components/CheckboxGroup/tests/CheckboxGroup.stories.js +67 -35
  38. package/dist/components/Container/tests/Container.stories.d.ts +2 -0
  39. package/dist/components/Container/tests/Container.stories.js +14 -0
  40. package/dist/components/ContextMenu/tests/ContextMenu.stories.d.ts +10 -1
  41. package/dist/components/ContextMenu/tests/ContextMenu.stories.js +57 -13
  42. package/dist/components/Dismissible/tests/Dismissible.stories.d.ts +5 -0
  43. package/dist/components/Dismissible/tests/Dismissible.stories.js +30 -1
  44. package/dist/components/Divider/tests/Divider.stories.d.ts +8 -3
  45. package/dist/components/Divider/tests/Divider.stories.js +71 -41
  46. package/dist/components/DropdownMenu/DropdownMenu.js +4 -4
  47. package/dist/components/DropdownMenu/DropdownMenu.types.d.ts +2 -2
  48. package/dist/components/DropdownMenu/tests/DropdownMenu.stories.d.ts +35 -6
  49. package/dist/components/DropdownMenu/tests/DropdownMenu.stories.js +222 -115
  50. package/dist/components/DropdownMenu/tests/DropdownMenu.test.stories.d.ts +0 -15
  51. package/dist/components/DropdownMenu/tests/DropdownMenu.test.stories.js +0 -106
  52. package/dist/components/FileUpload/FileUpload.module.css +1 -1
  53. package/dist/components/Flyout/Flyout.module.css +1 -1
  54. package/dist/components/Flyout/Flyout.types.d.ts +9 -6
  55. package/dist/components/Flyout/FlyoutContent.js +4 -1
  56. package/dist/components/Flyout/FlyoutControlled.js +11 -3
  57. package/dist/components/Flyout/index.d.ts +1 -1
  58. package/dist/components/Flyout/tests/Flyout.stories.d.ts +12 -0
  59. package/dist/components/Flyout/tests/Flyout.stories.js +112 -6
  60. package/dist/components/Flyout/useFlyout.d.ts +1 -6
  61. package/dist/components/Flyout/useFlyout.js +7 -1
  62. package/dist/components/Flyout/utilities/calculatePosition.d.ts +3 -2
  63. package/dist/components/Flyout/utilities/calculatePosition.js +85 -36
  64. package/dist/components/Flyout/utilities/flyout.js +24 -19
  65. package/dist/components/Flyout/utilities/getPositionFallbacks.js +3 -3
  66. package/dist/components/Flyout/utilities/helpers.d.ts +7 -0
  67. package/dist/components/Flyout/utilities/helpers.js +14 -0
  68. package/dist/components/Flyout/utilities/isFullyVisible.d.ts +4 -2
  69. package/dist/components/Flyout/utilities/isFullyVisible.js +6 -8
  70. package/dist/components/FormControl/FormControl.context.d.ts +1 -1
  71. package/dist/components/FormControl/tests/FormControl.stories.d.ts +2 -0
  72. package/dist/components/FormControl/tests/FormControl.stories.js +35 -0
  73. package/dist/components/Hidden/tests/Hidden.stories.d.ts +2 -0
  74. package/dist/components/Hidden/tests/Hidden.stories.js +9 -0
  75. package/dist/components/HiddenVisually/tests/HiddenVisually.stories.d.ts +2 -0
  76. package/dist/components/HiddenVisually/tests/HiddenVisually.stories.js +9 -0
  77. package/dist/components/Hotkey/tests/Hotkey.stories.d.ts +2 -0
  78. package/dist/components/Hotkey/tests/Hotkey.stories.js +15 -0
  79. package/dist/components/Icon/Icon.js +2 -2
  80. package/dist/components/Icon/Icon.types.d.ts +1 -1
  81. package/dist/components/Icon/tests/Icon.stories.d.ts +3 -0
  82. package/dist/components/Icon/tests/Icon.stories.js +29 -1
  83. package/dist/components/Link/Link.d.ts +1 -1
  84. package/dist/components/Link/Link.js +2 -2
  85. package/dist/components/Link/Link.types.d.ts +1 -1
  86. package/dist/components/Link/tests/Link.stories.d.ts +29 -6
  87. package/dist/components/Link/tests/Link.stories.js +141 -58
  88. package/dist/components/Link/tests/Link.test.stories.d.ts +1 -13
  89. package/dist/components/Link/tests/Link.test.stories.js +0 -76
  90. package/dist/components/Loader/tests/Loader.stories.d.ts +11 -2
  91. package/dist/components/Loader/tests/Loader.stories.js +52 -25
  92. package/dist/components/Loader/tests/Loader.test.stories.d.ts +0 -3
  93. package/dist/components/Loader/tests/Loader.test.stories.js +0 -21
  94. package/dist/components/MenuItem/MenuItem.js +2 -2
  95. package/dist/components/MenuItem/MenuItem.module.css +1 -1
  96. package/dist/components/MenuItem/MenuItem.types.d.ts +1 -1
  97. package/dist/components/MenuItem/tests/MenuItem.stories.d.ts +37 -7
  98. package/dist/components/MenuItem/tests/MenuItem.stories.js +218 -112
  99. package/dist/components/Modal/Modal.js +1 -1
  100. package/dist/components/Modal/Modal.module.css +1 -1
  101. package/dist/components/Modal/tests/Modal.stories.d.ts +53 -10
  102. package/dist/components/Modal/tests/Modal.stories.js +367 -210
  103. package/dist/components/Overlay/Overlay.js +2 -1
  104. package/dist/components/Overlay/tests/Overlay.stories.d.ts +15 -1
  105. package/dist/components/Overlay/tests/Overlay.stories.js +135 -1
  106. package/dist/components/Pagination/tests/Pagination.stories.d.ts +14 -1
  107. package/dist/components/Pagination/tests/Pagination.stories.js +93 -15
  108. package/dist/components/PinField/PinField.module.css +1 -1
  109. package/dist/components/PinField/tests/PinField.stories.d.ts +24 -3
  110. package/dist/components/PinField/tests/PinField.stories.js +194 -47
  111. package/dist/components/Popover/Popover.js +2 -2
  112. package/dist/components/Popover/Popover.module.css +1 -1
  113. package/dist/components/Popover/Popover.types.d.ts +3 -1
  114. package/dist/components/Progress/tests/Progress.stories.d.ts +19 -4
  115. package/dist/components/Progress/tests/Progress.stories.js +85 -49
  116. package/dist/components/Radio/Radio.module.css +1 -1
  117. package/dist/components/Radio/tests/Radio.stories.d.ts +25 -4
  118. package/dist/components/Radio/tests/Radio.stories.js +147 -65
  119. package/dist/components/RadioGroup/tests/RadioGroup.stories.d.ts +9 -2
  120. package/dist/components/RadioGroup/tests/RadioGroup.stories.js +64 -38
  121. package/dist/components/Reshaped/Reshaped.css +1 -1
  122. package/dist/components/Scrim/tests/Scrim.stories.d.ts +10 -2
  123. package/dist/components/Scrim/tests/Scrim.stories.js +51 -31
  124. package/dist/components/ScrollArea/ScrollArea.module.css +1 -1
  125. package/dist/components/Select/Select.d.ts +8 -1
  126. package/dist/components/Select/Select.js +22 -48
  127. package/dist/components/Select/Select.module.css +1 -1
  128. package/dist/components/Select/Select.types.d.ts +83 -38
  129. package/dist/components/Select/SelectCustom.d.ts +3 -0
  130. package/dist/components/Select/SelectCustom.js +12 -0
  131. package/dist/components/Select/SelectCustomControlled.d.ts +4 -0
  132. package/dist/components/Select/SelectCustomControlled.js +105 -0
  133. package/dist/components/Select/SelectCustomUncontrolled.d.ts +4 -0
  134. package/dist/components/Select/SelectCustomUncontrolled.js +18 -0
  135. package/dist/components/Select/SelectEndContent.d.ts +3 -0
  136. package/dist/components/Select/SelectEndContent.js +12 -0
  137. package/dist/components/Select/SelectNative.d.ts +4 -0
  138. package/dist/components/Select/SelectNative.js +29 -0
  139. package/dist/components/Select/SelectOption.d.ts +4 -0
  140. package/dist/components/Select/SelectOption.js +13 -0
  141. package/dist/components/Select/SelectOptionGroup.d.ts +4 -0
  142. package/dist/components/Select/SelectOptionGroup.js +9 -0
  143. package/dist/components/Select/SelectRoot.d.ts +4 -0
  144. package/dist/components/Select/SelectRoot.js +21 -0
  145. package/dist/components/Select/SelectStartContent.d.ts +3 -0
  146. package/dist/components/Select/SelectStartContent.js +20 -0
  147. package/dist/components/Select/SelectTrigger.d.ts +4 -0
  148. package/dist/components/Select/SelectTrigger.js +16 -0
  149. package/dist/components/Select/tests/Select.stories.d.ts +38 -10
  150. package/dist/components/Select/tests/Select.stories.js +504 -175
  151. package/dist/components/Skeleton/tests/Skeleton.stories.d.ts +10 -2
  152. package/dist/components/Skeleton/tests/Skeleton.stories.js +46 -28
  153. package/dist/components/Slider/Slider.module.css +1 -1
  154. package/dist/components/Stepper/Stepper.js +2 -2
  155. package/dist/components/Stepper/Stepper.types.d.ts +2 -0
  156. package/dist/components/Stepper/tests/Stepper.stories.d.ts +18 -3
  157. package/dist/components/Stepper/tests/Stepper.stories.js +99 -47
  158. package/dist/components/Switch/Switch.module.css +1 -1
  159. package/dist/components/Switch/tests/Switch.stories.d.ts +10 -2
  160. package/dist/components/Switch/tests/Switch.stories.js +77 -23
  161. package/dist/components/Switch/tests/Switch.test.stories.d.ts +0 -10
  162. package/dist/components/Switch/tests/Switch.test.stories.js +0 -68
  163. package/dist/components/Table/Table.js +5 -3
  164. package/dist/components/Table/Table.module.css +1 -1
  165. package/dist/components/Table/tests/Table.stories.d.ts +25 -5
  166. package/dist/components/Table/tests/Table.stories.js +274 -177
  167. package/dist/components/Table/tests/Table.test.stories.d.ts +0 -5
  168. package/dist/components/Table/tests/Table.test.stories.js +0 -82
  169. package/dist/components/Tabs/Tabs.module.css +1 -1
  170. package/dist/components/Tabs/TabsControlled.js +1 -0
  171. package/dist/components/TextArea/TextArea.module.css +1 -1
  172. package/dist/components/TextArea/tests/TextArea.stories.d.ts +41 -9
  173. package/dist/components/TextArea/tests/TextArea.stories.js +179 -93
  174. package/dist/components/TextField/TextField.js +1 -1
  175. package/dist/components/TextField/TextField.module.css +1 -1
  176. package/dist/components/TextField/tests/TextField.stories.d.ts +41 -11
  177. package/dist/components/TextField/tests/TextField.stories.js +206 -132
  178. package/dist/components/TextField/tests/TextField.test.stories.d.ts +0 -13
  179. package/dist/components/TextField/tests/TextField.test.stories.js +0 -88
  180. package/dist/components/Theme/Theme.module.css +1 -1
  181. package/dist/components/Timeline/Timeline.js +2 -2
  182. package/dist/components/Timeline/tests/Timeline.stories.d.ts +10 -2
  183. package/dist/components/Timeline/tests/Timeline.stories.js +69 -45
  184. package/dist/components/Timeline/tests/Timeline.test.stories.d.ts +0 -2
  185. package/dist/components/Timeline/tests/Timeline.test.stories.js +0 -21
  186. package/dist/components/Toast/ToastContainer.js +1 -0
  187. package/dist/components/Toast/ToastRegion.js +1 -0
  188. package/dist/components/Toast/tests/Toast.stories.d.ts +32 -8
  189. package/dist/components/Toast/tests/Toast.stories.js +111 -37
  190. package/dist/components/ToggleButton/ToggleButton.types.d.ts +1 -1
  191. package/dist/components/ToggleButtonGroup/ToggleButtonGroupControlled.js +1 -0
  192. package/dist/components/Tooltip/Tooltip.js +1 -1
  193. package/dist/components/Tooltip/Tooltip.types.d.ts +2 -2
  194. package/dist/components/Tooltip/tests/Tooltip.stories.d.ts +18 -4
  195. package/dist/components/Tooltip/tests/Tooltip.stories.js +139 -107
  196. package/dist/components/Tooltip/tests/Tooltip.test.stories.d.ts +0 -6
  197. package/dist/components/Tooltip/tests/Tooltip.test.stories.js +0 -29
  198. package/dist/components/View/View.js +11 -4
  199. package/dist/components/View/tests/View.stories.d.ts +4 -0
  200. package/dist/components/View/tests/View.stories.js +39 -0
  201. package/dist/components/_private/Expandable/Expandable.js +3 -1
  202. package/dist/components/_private/Portal/Portal.js +4 -1
  203. package/dist/hooks/_private/useIsDismissible.d.ts +1 -0
  204. package/dist/hooks/_private/useIsDismissible.js +6 -6
  205. package/dist/hooks/_private/usePrevious.js +1 -0
  206. package/dist/hooks/tests/useDrag.stories.js +1 -1
  207. package/dist/hooks/useScrollLock.js +5 -3
  208. package/dist/index.d.ts +1 -1
  209. package/dist/styles/resolvers/align/align.css +1 -1
  210. package/dist/styles/resolvers/aspectRatio/aspectRatio.css +1 -1
  211. package/dist/styles/resolvers/bleed/bleed.module.css +1 -1
  212. package/dist/styles/resolvers/justify/justify.css +1 -1
  213. package/dist/styles/resolvers/maxHeight/maxHeight.module.css +1 -1
  214. package/dist/styles/resolvers/maxWidth/maxWidth.module.css +1 -1
  215. package/dist/styles/resolvers/minHeight/minHeight.module.css +1 -1
  216. package/dist/styles/resolvers/minWidth/minWidth.module.css +1 -1
  217. package/dist/styles/resolvers/position/position.css +1 -1
  218. package/dist/styles/resolvers/textAlign/textAlign.css +1 -1
  219. package/dist/styles/resolvers/width/width.module.css +1 -1
  220. package/dist/utilities/scroll/disable.js +2 -2
  221. package/dist/utilities/scroll/index.d.ts +1 -1
  222. package/dist/utilities/scroll/index.js +1 -1
  223. package/dist/utilities/scroll/lock.d.ts +1 -2
  224. package/dist/utilities/scroll/lock.js +16 -15
  225. package/dist/utilities/scroll/lockSafari.js +1 -0
  226. package/package.json +44 -33
  227. package/dist/components/Actionable/tests/Actionable.test.stories.d.ts +0 -32
  228. package/dist/components/Actionable/tests/Actionable.test.stories.js +0 -130
  229. package/dist/components/Alert/tests/Alert.test.stories.d.ts +0 -15
  230. package/dist/components/Alert/tests/Alert.test.stories.js +0 -26
  231. package/dist/components/Badge/tests/Badge.test.stories.d.ts +0 -20
  232. package/dist/components/Badge/tests/Badge.test.stories.js +0 -46
  233. package/dist/components/Breadcrumbs/tests/Breadcrumbs.test.stories.d.ts +0 -23
  234. package/dist/components/Breadcrumbs/tests/Breadcrumbs.test.stories.js +0 -76
  235. package/dist/components/Button/tests/Button.test.stories.d.ts +0 -27
  236. package/dist/components/Button/tests/Button.test.stories.js +0 -112
  237. package/dist/components/Card/tests/Card.test.stories.d.ts +0 -35
  238. package/dist/components/Card/tests/Card.test.stories.js +0 -54
  239. package/dist/components/Checkbox/tests/Checkbox.test.stories.d.ts +0 -25
  240. package/dist/components/Checkbox/tests/Checkbox.test.stories.js +0 -104
  241. package/dist/components/CheckboxGroup/tests/CheckboxGroup.test.stories.d.ts +0 -22
  242. package/dist/components/CheckboxGroup/tests/CheckboxGroup.test.stories.js +0 -78
  243. package/dist/components/Container/tests/Container.test.stories.d.ts +0 -15
  244. package/dist/components/Container/tests/Container.test.stories.js +0 -26
  245. package/dist/components/ContextMenu/tests/ContextMenu.test.stories.d.ts +0 -25
  246. package/dist/components/ContextMenu/tests/ContextMenu.test.stories.js +0 -53
  247. package/dist/components/Dismissible/tests/Dismissible.test.stories.d.ts +0 -19
  248. package/dist/components/Dismissible/tests/Dismissible.test.stories.js +0 -42
  249. package/dist/components/Divider/tests/Divider.test.stories.d.ts +0 -18
  250. package/dist/components/Divider/tests/Divider.test.stories.js +0 -47
  251. package/dist/components/FormControl/tests/FormControl.test.stories.d.ts +0 -20
  252. package/dist/components/FormControl/tests/FormControl.test.stories.js +0 -49
  253. package/dist/components/Hidden/tests/Hidden.test.stories.d.ts +0 -15
  254. package/dist/components/Hidden/tests/Hidden.test.stories.js +0 -20
  255. package/dist/components/HiddenVisually/tests/HiddenVisually.test.stories.d.ts +0 -15
  256. package/dist/components/HiddenVisually/tests/HiddenVisually.test.stories.js +0 -20
  257. package/dist/components/Hotkey/tests/Hotkey.test.stories.d.ts +0 -15
  258. package/dist/components/Hotkey/tests/Hotkey.test.stories.js +0 -26
  259. package/dist/components/Icon/tests/Icon.test.stories.d.ts +0 -16
  260. package/dist/components/Icon/tests/Icon.test.stories.js +0 -35
  261. package/dist/components/MenuItem/tests/MenuItem.test.stories.d.ts +0 -26
  262. package/dist/components/MenuItem/tests/MenuItem.test.stories.js +0 -100
  263. package/dist/components/Modal/tests/Modal.test.stories.d.ts +0 -31
  264. package/dist/components/Modal/tests/Modal.test.stories.js +0 -149
  265. package/dist/components/Overlay/tests/Overlay.test.stories.d.ts +0 -28
  266. package/dist/components/Overlay/tests/Overlay.test.stories.js +0 -148
  267. package/dist/components/Pagination/tests/Pagination.test.stories.d.ts +0 -23
  268. package/dist/components/Pagination/tests/Pagination.test.stories.js +0 -86
  269. package/dist/components/PinField/tests/PinField.test.stories.d.ts +0 -29
  270. package/dist/components/PinField/tests/PinField.test.stories.js +0 -177
  271. package/dist/components/Progress/tests/Progress.test.stories.d.ts +0 -16
  272. package/dist/components/Progress/tests/Progress.test.stories.js +0 -35
  273. package/dist/components/Radio/tests/Radio.test.stories.d.ts +0 -30
  274. package/dist/components/Radio/tests/Radio.test.stories.js +0 -118
  275. package/dist/components/RadioGroup/tests/RadioGroup.test.stories.d.ts +0 -22
  276. package/dist/components/RadioGroup/tests/RadioGroup.test.stories.js +0 -78
  277. package/dist/components/Scrim/tests/Scrim.test.stories.d.ts +0 -15
  278. package/dist/components/Scrim/tests/Scrim.test.stories.js +0 -25
  279. package/dist/components/Select/tests/Select.test.stories.d.ts +0 -27
  280. package/dist/components/Select/tests/Select.test.stories.js +0 -132
  281. package/dist/components/Skeleton/tests/Skeleton.test.stories.d.ts +0 -15
  282. package/dist/components/Skeleton/tests/Skeleton.test.stories.js +0 -23
  283. package/dist/components/Stepper/tests/Stepper.test.stories.d.ts +0 -20
  284. package/dist/components/Stepper/tests/Stepper.test.stories.js +0 -28
  285. package/dist/components/TextArea/tests/TextArea.test.stories.d.ts +0 -28
  286. package/dist/components/TextArea/tests/TextArea.test.stories.js +0 -99
  287. package/dist/components/Toast/tests/Toast.test.stories.d.ts +0 -16
  288. package/dist/components/Toast/tests/Toast.test.stories.js +0 -101
  289. package/dist/components/View/tests/View.test.stories.d.ts +0 -24
  290. package/dist/components/View/tests/View.test.stories.js +0 -50
@@ -23,6 +23,7 @@ const CalendarMonth = (props) => {
23
23
  : !foundFocusableDate &&
24
24
  !!date &&
25
25
  isDateFocusable({ date, lastFocusedDate, startValue });
26
+ // eslint-disable-next-line react-hooks/immutability
26
27
  if (focusable)
27
28
  foundFocusableDate = true;
28
29
  return (_jsx(CalendarDate, { date: date, isoDate: isoDate, disabled: disabled, range: range, focusable: focusable, startValue: startValue, endValue: endValue, onChange: onChange, hoveredDate: hoveredDate, onDateHover: onDateHover, onDateHoverEnd: onDateHoverEnd, onDateFocus: setLastFocusedDate, renderAriaLabel: renderDateAriaLabel, selectedDates: selectedDates }, index));
@@ -10,7 +10,7 @@ declare const Card: React.ForwardRefExoticComponent<{
10
10
  as?: keyof React.JSX.IntrinsicElements | undefined;
11
11
  className?: import("../../types/global").ClassName;
12
12
  attributes?: (import("../..").Attributes<keyof React.JSX.IntrinsicElements> & ((import("../..").Attributes<"button"> & Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "form" | "slot" | "style" | "title" | "disabled" | "key" | "value" | "hidden" | "color" | "content" | "children" | "className" | "ref" | "aria-orientation" | "role" | "suppressHydrationWarning" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "dir" | "name" | "type" | "translate" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "draggable" | "enterKeyHint" | "id" | "lang" | "nonce" | "spellCheck" | "tabIndex" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture"> & {
13
- ref?: React.RefObject<HTMLButtonElement | HTMLAnchorElement | null>;
13
+ ref?: import("../Actionable/Actionable.types").AttributesRef;
14
14
  }) | undefined)) | undefined;
15
15
  } & Pick<import("../View").ViewProps, "height"> & React.RefAttributes<HTMLElement>>;
16
16
  export default Card;
@@ -1 +1 @@
1
- .root{--rs-border-w:1px;background:var(--rs-color-background-elevation-base);border:var(--rs-border-w) solid var(--rs-color-border-neutral-faded);color:var(--rs-color-foreground-neutral);display:block;overflow:hidden;position:relative;text-align:initial;transition:var(--rs-duration-fast) var(--rs-easing-accelerate);transition-property:box-shadow,border-color}.--selected{border-color:transparent;box-shadow:0 0 0 2px var(--rs-color-border-primary);transition-timing-function:var(--rs-easing-decelerate)}.--elevated{background:var(--rs-color-background-elevation-raised);box-shadow:var(--rs-shadow-raised)}.--actionable:not(.--selected){color:inherit;cursor:pointer;outline:none;text-decoration:none}[data-rs-keyboard] .--actionable:not(.--selected):focus{box-shadow:var(--rs-focus-shadow)}.--actionable:not(.--selected):before{background:rgba(var(--rs-color-rgb-background-neutral-faded),32%);content:"";inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity var(--rs-duration-fast) var(--rs-easing-standard)}@media (hover:hover) and (pointer:fine){.--actionable:not(.--selected):hover:before{opacity:1}}
1
+ .root{--rs-card-shadow-border:0 0 0 1px var(--rs-color-border-neutral-faded);--rs-card-shadow-elevation:0 0 transparent;background:var(--rs-color-background-elevation-base);box-shadow:var(--rs-card-shadow-border),var(--rs-card-shadow-elevation);color:var(--rs-color-foreground-neutral);display:block;overflow:hidden;position:relative;text-align:initial;transition:var(--rs-duration-fast) var(--rs-easing-accelerate);transition-property:box-shadow,border-color}.--selected{border-color:transparent;box-shadow:0 0 0 2px var(--rs-color-border-primary);transition-timing-function:var(--rs-easing-decelerate)}.--elevated{--rs-card-shadow-elevation:var(--rs-shadow-raised);background:var(--rs-color-background-elevation-raised)}.--actionable:not(.--selected){color:inherit;cursor:pointer;outline:none;text-decoration:none}[data-rs-keyboard] .--actionable:not(.--selected):focus{--rs-card-shadow-border:var(--rs-shadow-focus)}.--actionable:not(.--selected):before{background:rgba(var(--rs-color-rgb-background-neutral-faded),32%);content:"";inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity var(--rs-duration-fast) var(--rs-easing-standard)}@media (hover:hover) and (pointer:fine){.--actionable:not(.--selected):hover:before{opacity:1}}
@@ -1,4 +1,6 @@
1
1
  import React from "react";
2
+ import { StoryObj } from "@storybook/react-vite";
3
+ import { fn } from "storybook/test";
2
4
  declare const _default: {
3
5
  title: string;
4
6
  component: React.ForwardRefExoticComponent<{
@@ -12,7 +14,7 @@ declare const _default: {
12
14
  as?: keyof React.JSX.IntrinsicElements | undefined;
13
15
  className?: import("../../../types/global").ClassName;
14
16
  attributes?: (import("../../../types/global").Attributes<keyof React.JSX.IntrinsicElements> & ((import("../../../types/global").Attributes<"button"> & Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "children" | "ref" | "style" | "form" | "slot" | "title" | "disabled" | "key" | "value" | "hidden" | "color" | "content" | "className" | "aria-orientation" | "role" | "suppressHydrationWarning" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "dir" | "name" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "draggable" | "enterKeyHint" | "nonce" | "spellCheck" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "onToggle" | "type" | "id" | "lang" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture"> & {
15
- ref?: React.RefObject<HTMLButtonElement | HTMLAnchorElement | null>;
17
+ ref?: import("../../Actionable/Actionable.types").AttributesRef;
16
18
  }) | undefined)) | undefined;
17
19
  } & Pick<import("../../View").ViewProps, "height"> & React.RefAttributes<HTMLElement>>;
18
20
  parameters: {
@@ -22,9 +24,29 @@ declare const _default: {
22
24
  };
23
25
  };
24
26
  export default _default;
25
- export declare const padding: () => React.JSX.Element;
26
- export declare const actionable: () => React.JSX.Element;
27
- export declare const selected: () => React.JSX.Element;
28
- export declare const elevated: () => React.JSX.Element;
29
- export declare const bleed: () => React.JSX.Element;
30
- export declare const height: () => React.JSX.Element;
27
+ export declare const padding: {
28
+ name: string;
29
+ render: () => React.JSX.Element;
30
+ };
31
+ export declare const selected: {
32
+ name: string;
33
+ render: () => React.JSX.Element;
34
+ };
35
+ export declare const elevated: {
36
+ name: string;
37
+ render: () => React.JSX.Element;
38
+ };
39
+ export declare const bleed: {
40
+ name: string;
41
+ render: () => React.JSX.Element;
42
+ };
43
+ export declare const height: {
44
+ name: string;
45
+ render: () => React.JSX.Element;
46
+ };
47
+ export declare const onClick: StoryObj<{
48
+ handleClick: ReturnType<typeof fn>;
49
+ }>;
50
+ export declare const href: StoryObj;
51
+ export declare const as: StoryObj;
52
+ export declare const className: StoryObj;
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  import { Example, Placeholder } from "../../../utilities/storybook/index.js";
3
3
  import Card from "../index.js";
4
+ import { expect, fn, userEvent } from "storybook/test";
4
5
  export default {
5
6
  title: "Components/Card",
6
7
  component: Card,
@@ -10,71 +11,115 @@ export default {
10
11
  },
11
12
  },
12
13
  };
13
- export const padding = () => (<Example>
14
- <Example.Item title="padding: default">
15
- <Card>
16
- <Placeholder />
17
- </Card>
18
- </Example.Item>
14
+ export const padding = {
15
+ name: "padding",
16
+ render: () => (<Example>
17
+ <Example.Item title="padding: default">
18
+ <Card>
19
+ <Placeholder />
20
+ </Card>
21
+ </Example.Item>
19
22
 
20
- <Example.Item title="padding: 2">
21
- <Card padding={2}>
22
- <Placeholder />
23
- </Card>
24
- </Example.Item>
23
+ <Example.Item title="padding: 2">
24
+ <Card padding={2}>
25
+ <Placeholder />
26
+ </Card>
27
+ </Example.Item>
25
28
 
26
- <Example.Item title="padding: 0">
27
- <Card padding={0}>
28
- <Placeholder />
29
- </Card>
30
- </Example.Item>
29
+ <Example.Item title="padding: 0">
30
+ <Card padding={0}>
31
+ <Placeholder />
32
+ </Card>
33
+ </Example.Item>
31
34
 
32
- <Example.Item title={["responsive padding", "[s] 4", "[m+] 8"]}>
33
- <Card padding={{ s: 4, m: 8 }}>
34
- <Placeholder />
35
- </Card>
36
- </Example.Item>
37
- </Example>);
38
- export const actionable = () => (<Example>
39
- <Example.Item title="button role">
40
- <Card onClick={() => { }} attributes={{ "aria-label": "action" }}>
41
- <Placeholder />
42
- </Card>
43
- </Example.Item>
44
- <Example.Item title="link role">
45
- <Card href="#" attributes={{ "aria-label": "action" }}>
46
- <Placeholder />
47
- </Card>
48
- </Example.Item>
49
- </Example>);
50
- export const selected = () => (<Example>
51
- <Example.Item title="selected">
52
- <Card selected>
53
- <Placeholder />
54
- </Card>
55
- </Example.Item>
56
- </Example>);
57
- export const elevated = () => (<Example>
58
- <Example.Item title="elevated">
59
- <Card elevated>
60
- <Placeholder />
61
- </Card>
62
- </Example.Item>
63
- </Example>);
64
- export const bleed = () => (<Example>
65
- <Example.Item title="bleed: 4">
66
- <Card bleed={4}>
67
- <Placeholder />
68
- </Card>
69
- </Example.Item>
70
- <Example.Item title={["responsive bleed", "[s] 4", "[m+] 0"]}>
71
- <Card bleed={{ s: 4, m: 0 }}>
72
- <Placeholder />
73
- </Card>
74
- </Example.Item>
75
- </Example>);
76
- export const height = () => (<Example>
77
- <Example.Item title="height: 200px">
78
- <Card height="200px"/>
79
- </Example.Item>
80
- </Example>);
35
+ <Example.Item title={["responsive padding", "[s] 4", "[m+] 8"]}>
36
+ <Card padding={{ s: 4, m: 8 }}>
37
+ <Placeholder />
38
+ </Card>
39
+ </Example.Item>
40
+ </Example>),
41
+ };
42
+ export const selected = {
43
+ name: "selected",
44
+ render: () => (<Example>
45
+ <Example.Item title="selected">
46
+ <Card selected>
47
+ <Placeholder />
48
+ </Card>
49
+ </Example.Item>
50
+ </Example>),
51
+ };
52
+ export const elevated = {
53
+ name: "elevated",
54
+ render: () => (<Example>
55
+ <Example.Item title="elevated">
56
+ <Card elevated>
57
+ <Placeholder />
58
+ </Card>
59
+ </Example.Item>
60
+ </Example>),
61
+ };
62
+ export const bleed = {
63
+ name: "bleed",
64
+ render: () => (<Example>
65
+ <Example.Item title="bleed: 4">
66
+ <Card bleed={4}>
67
+ <Placeholder />
68
+ </Card>
69
+ </Example.Item>
70
+ <Example.Item title={["responsive bleed", "[s] 4", "[m+] 0"]}>
71
+ <Card bleed={{ s: 4, m: 0 }}>
72
+ <Placeholder />
73
+ </Card>
74
+ </Example.Item>
75
+ </Example>),
76
+ };
77
+ export const height = {
78
+ name: "height",
79
+ render: () => (<Example>
80
+ <Example.Item title="height: 200px">
81
+ <Card height="200px"/>
82
+ </Example.Item>
83
+ </Example>),
84
+ };
85
+ export const onClick = {
86
+ name: "onClick",
87
+ args: {
88
+ handleClick: fn(),
89
+ },
90
+ render: (args) => <Card onClick={args.handleClick}>Trigger</Card>,
91
+ play: async ({ canvas, args }) => {
92
+ const { handleClick } = args;
93
+ const el = canvas.getAllByRole("button")[0];
94
+ await userEvent.click(el);
95
+ expect(handleClick).toHaveBeenCalledTimes(1);
96
+ expect(handleClick).toHaveBeenCalledWith(expect.objectContaining({ target: el }));
97
+ },
98
+ };
99
+ export const href = {
100
+ name: "href",
101
+ render: () => <Card href="https://reshaped.so">Trigger</Card>,
102
+ play: async ({ canvas }) => {
103
+ const el = canvas.getByRole("link");
104
+ expect(el).toHaveAttribute("href", "https://reshaped.so");
105
+ },
106
+ };
107
+ export const as = {
108
+ name: "as",
109
+ render: () => <Card as="span" attributes={{ "data-testid": "root" }}/>,
110
+ play: ({ canvas }) => {
111
+ const root = canvas.getByTestId("root");
112
+ expect(root.tagName).toBe("SPAN");
113
+ },
114
+ };
115
+ export const className = {
116
+ name: "className, attributes",
117
+ render: () => (<div data-testid="root">
118
+ <Card className="test-classname" attributes={{ id: "test-id" }}/>
119
+ </div>),
120
+ play: async ({ canvas }) => {
121
+ const root = canvas.getByTestId("root").firstChild;
122
+ expect(root).toHaveClass("test-classname");
123
+ expect(root).toHaveAttribute("id", "test-id");
124
+ },
125
+ };
@@ -32,6 +32,7 @@ const Carousel = (props) => {
32
32
  // itemRefs.current[index] = null;
33
33
  // };
34
34
  };
35
+ // eslint-disable-next-line react-hooks/refs
35
36
  const handleScroll = rafThrottle((event) => {
36
37
  const el = event.target;
37
38
  const firstVisibleIndex = getFirstVisibleIndex();
@@ -1 +1 @@
1
- .root{isolation:isolate;position:relative;width:100%}.control{display:none;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(.75);transform-origin:50%;transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform;z-index:var(--rs-z-index-relative)}.--control-prev{left:0}.--control-next{left:100%}.--control-visible{opacity:1;transform:translate(-50%,-50%) scale(1)}.scroll{overflow:auto;-ms-overflow-style:none;overflow:-moz-scrollbars-none;-webkit-overflow-scrolling:touch;backface-visibility:hidden;margin:0 calc(var(--rs-unit-x1) * var(--rs-carousel-bleed) * -1);outline:none;padding:0 calc(var(--rs-unit-x1) * var(--rs-carousel-bleed));scroll-behavior:smooth;scroll-padding-inline-start:calc(var(--rs-unit-x1) * var(--rs-carousel-bleed));scroll-snap-type:x mandatory;scrollbar-width:none}[data-rs-keyboard] .scroll:focus{box-shadow:var(--rs-focus-shadow)}.scroll::-webkit-scrollbar{display:none;height:0;width:0}.item{--rs-carousel-item-width:calc(100% / var(--rs-carousel-items) - var(--rs-view-gap-value) * (var(--rs-carousel-items) - 1) / var(--rs-carousel-items));position:relative;scroll-snap-align:start;width:var(--rs-carousel-item-width)}@media (--rs-viewport-l ),(hover:hover){.--control-rendered{display:block}}@media (hover:none){.--bleed .item{width:calc(var(--rs-carousel-item-width) - 10% / var(--rs-carousel-items))}}@media (--rs-viewport-m ) and (hover:none){.--bleed-true--m .item{width:calc(var(--rs-carousel-item-width) - 10% / var(--rs-carousel-items))}.--bleed-false--m .item{width:var(--rs-carousel-item-width)}}@media (--rs-viewport-l ) and (hover:none){.--bleed-true--l .item{width:calc(var(--rs-carousel-item-width) - 10% / var(--rs-carousel-items))}.--bleed-false--l .item{width:var(--rs-carousel-item-width)}}@media (--rs-viewport-xl ) and (hover:none){.--bleed-true--xl .item{width:calc(var(--rs-carousel-item-width) - 10% / var(--rs-carousel-items))}.--bleed-false--xl .item{width:var(--rs-carousel-item-width)}}.root{--rs-carousel-items-s:unset;--rs-carousel-items-m:var(--rs-carousel-items-s);--rs-carousel-items-l:var(--rs-carousel-items-m);--rs-carousel-items-xl:var(--rs-carousel-items-l);--rs-carousel-items:var(--rs-carousel-items-s);--rs-carousel-bleed-s:0;--rs-carousel-bleed-m:var(--rs-carousel-bleed-s);--rs-carousel-bleed-l:var(--rs-carousel-bleed-m);--rs-carousel-bleed-xl:var(--rs-carousel-bleed-l);--rs-carousel-bleed:var(--rs-carousel-bleed-s)}@media (--rs-viewport-m ){.root{--rs-carousel-items:var(--rs-carousel-items-m);--rs-carousel-bleed:var(--rs-carousel-bleed-m)}}@media (--rs-viewport-l ){.root{--rs-carousel-items:var(--rs-carousel-items-l);--rs-carousel-bleed:var(--rs-carousel-bleed-l)}}@media (--rs-viewport-xl ){.root{--rs-carousel-items:var(--rs-carousel-items-xl);--rs-carousel-bleed:var(--rs-carousel-bleed-xl)}}
1
+ .root{isolation:isolate;position:relative;width:100%}.control{display:none;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(.75);transform-origin:50%;transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform;z-index:var(--rs-z-index-relative)}.--control-prev{left:0}.--control-next{left:100%}.--control-visible{opacity:1;transform:translate(-50%,-50%) scale(1)}.scroll{overflow:auto;-ms-overflow-style:none;overflow:-moz-scrollbars-none;-webkit-overflow-scrolling:touch;backface-visibility:hidden;margin:0 calc(var(--rs-unit-x1) * var(--rs-carousel-bleed) * -1);outline:none;padding:0 calc(var(--rs-unit-x1) * var(--rs-carousel-bleed));scroll-behavior:smooth;scroll-padding-inline-start:calc(var(--rs-unit-x1) * var(--rs-carousel-bleed));scroll-snap-type:x mandatory;scrollbar-width:none}[data-rs-keyboard] .scroll:focus{box-shadow:var(--rs-shadow-focus)}.scroll::-webkit-scrollbar{display:none;height:0;width:0}.item{--rs-carousel-item-width:calc(100% / var(--rs-carousel-items) - var(--rs-view-gap-value) * (var(--rs-carousel-items) - 1) / var(--rs-carousel-items));position:relative;scroll-snap-align:start;width:var(--rs-carousel-item-width)}@media (--rs-viewport-l ),(hover:hover){.--control-rendered{display:block}}@media (hover:none){.--bleed .item{width:calc(var(--rs-carousel-item-width) - 10% / var(--rs-carousel-items))}}@media (--rs-viewport-m ) and (hover:none){.--bleed-true--m .item{width:calc(var(--rs-carousel-item-width) - 10% / var(--rs-carousel-items))}.--bleed-false--m .item{width:var(--rs-carousel-item-width)}}@media (--rs-viewport-l ) and (hover:none){.--bleed-true--l .item{width:calc(var(--rs-carousel-item-width) - 10% / var(--rs-carousel-items))}.--bleed-false--l .item{width:var(--rs-carousel-item-width)}}@media (--rs-viewport-xl ) and (hover:none){.--bleed-true--xl .item{width:calc(var(--rs-carousel-item-width) - 10% / var(--rs-carousel-items))}.--bleed-false--xl .item{width:var(--rs-carousel-item-width)}}.root{--rs-carousel-items-s:unset;--rs-carousel-items-m:var(--rs-carousel-items-s);--rs-carousel-items-l:var(--rs-carousel-items-m);--rs-carousel-items-xl:var(--rs-carousel-items-l);--rs-carousel-items:var(--rs-carousel-items-s);--rs-carousel-bleed-s:0;--rs-carousel-bleed-m:var(--rs-carousel-bleed-s);--rs-carousel-bleed-l:var(--rs-carousel-bleed-m);--rs-carousel-bleed-xl:var(--rs-carousel-bleed-l);--rs-carousel-bleed:var(--rs-carousel-bleed-s)}@media (--rs-viewport-m ){.root{--rs-carousel-items:var(--rs-carousel-items-m);--rs-carousel-bleed:var(--rs-carousel-bleed-m)}}@media (--rs-viewport-l ){.root{--rs-carousel-items:var(--rs-carousel-items-l);--rs-carousel-bleed:var(--rs-carousel-bleed-l)}}@media (--rs-viewport-xl ){.root{--rs-carousel-items:var(--rs-carousel-items-xl);--rs-carousel-bleed:var(--rs-carousel-bleed-xl)}}
@@ -1 +1 @@
1
- .root{align-items:center;cursor:pointer;display:inline-flex;gap:var(--rs-checkbox-gap);user-select:none;vertical-align:top;-webkit-tap-highlight-color:transparent}@media (hover:hover) and (pointer:fine){.root:hover .decorator{background:var(--rs-color-background-neutral-faded)}}.field{position:relative}.decorator{background:var(--rs-color-background-elevation-base);border:1px solid var(--rs-color-border-neutral);border-radius:var(--rs-radius-small);color:var(--rs-color-on-background-primary);height:var(--rs-checkbox-line-height);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:background-color,border-color;width:var(--rs-checkbox-line-height)}.decorator:before{background:var(--rs-color-on-background-primary);border-radius:var(--rs-radius-circular);content:"";height:1.5px;left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform;width:calc(var(--rs-checkbox-line-height) * .5)}.--size-small{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}.icon{left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform}[data-rs-keyboard] .input:focus-visible+.decorator{box-shadow:var(--rs-focus-shadow)}.root.--error .decorator{border-color:var(--rs-color-border-critical)}.input:checked+.decorator,.input:indeterminate+.decorator{background:var(--rs-color-background-primary);border-color:var(--rs-color-background-primary)}.input:checked+.decorator .icon,.input:indeterminate+.decorator:before{opacity:1;transform:translate(-50%,-50%) scale(1)}.root.--disabled{color:var(--rs-color-foreground-disabled);cursor:not-allowed}.root.--disabled .decorator{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled);color:var(--rs-color-foreground-disabled)}.root.--disabled .input:checked+.decorator,.root.--disabled .input:indeterminate+.decorator{background:var(--rs-color-background-disabled);border-color:transparent}.root.--disabled .input:checked+.decorator:before,.root.--disabled .input:indeterminate+.decorator:before{background-color:var(--rs-color-foreground-disabled)}@media (--rs-viewport-m ){.--size-small--m{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium--m{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large--m{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}}@media (--rs-viewport-l ){.--size-small--l{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium--l{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large--l{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium--xl{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large--xl{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}}
1
+ .root{align-items:center;cursor:pointer;display:inline-flex;gap:var(--rs-checkbox-gap);user-select:none;vertical-align:top;-webkit-tap-highlight-color:transparent}@media (hover:hover) and (pointer:fine){.root:hover .decorator{background:var(--rs-color-background-neutral-faded)}}.field{position:relative}.decorator{background:var(--rs-color-background-elevation-base);border:1px solid var(--rs-color-border-neutral);border-radius:var(--rs-radius-small);color:var(--rs-color-on-background-primary);height:var(--rs-checkbox-line-height);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:background-color,border-color;width:var(--rs-checkbox-line-height)}.decorator:before{background:var(--rs-color-on-background-primary);border-radius:var(--rs-radius-circular);content:"";height:1.5px;left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform;width:calc(var(--rs-checkbox-line-height) * .5)}.--size-small{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}.icon{left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:var(--rs-duration-fast) var(--rs-easing-standard);transition-property:opacity,transform}[data-rs-keyboard] .input:focus-visible+.decorator{box-shadow:var(--rs-shadow-focus)}.root.--error .decorator{border-color:var(--rs-color-border-critical)}.input:checked+.decorator,.input:indeterminate+.decorator{background:var(--rs-color-background-primary);border-color:var(--rs-color-background-primary)}.input:checked+.decorator .icon,.input:indeterminate+.decorator:before{opacity:1;transform:translate(-50%,-50%) scale(1)}.root.--disabled{color:var(--rs-color-foreground-disabled);cursor:not-allowed}.root.--disabled .decorator{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled);color:var(--rs-color-foreground-disabled)}.root.--disabled .input:checked+.decorator,.root.--disabled .input:indeterminate+.decorator{background:var(--rs-color-background-disabled);border-color:transparent}.root.--disabled .input:checked+.decorator:before,.root.--disabled .input:indeterminate+.decorator:before{background-color:var(--rs-color-foreground-disabled)}@media (--rs-viewport-m ){.--size-small--m{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium--m{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large--m{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}}@media (--rs-viewport-l ){.--size-small--l{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium--l{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large--l{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-checkbox-line-height:var(--rs-line-height-caption-1);--rs-checkbox-gap:var(--rs-unit-x1)}.--size-medium--xl{--rs-checkbox-line-height:var(--rs-line-height-body-3);--rs-checkbox-gap:var(--rs-unit-x2)}.--size-large--xl{--rs-checkbox-line-height:var(--rs-line-height-body-2);--rs-checkbox-gap:var(--rs-unit-x2)}}
@@ -1,3 +1,5 @@
1
+ import { StoryObj } from "@storybook/react-vite";
2
+ import { fn } from "storybook/test";
1
3
  declare const _default: {
2
4
  title: string;
3
5
  component: import("react").FC<import("./..").CheckboxProps>;
@@ -8,7 +10,21 @@ declare const _default: {
8
10
  };
9
11
  };
10
12
  export default _default;
11
- export declare const selection: () => import("react").JSX.Element;
12
- export declare const size: () => import("react").JSX.Element;
13
- export declare const error: () => import("react").JSX.Element;
14
- export declare const disabled: () => import("react").JSX.Element;
13
+ export declare const render: StoryObj;
14
+ export declare const size: {
15
+ name: string;
16
+ render: () => import("react").JSX.Element;
17
+ };
18
+ export declare const error: {
19
+ name: string;
20
+ render: () => import("react").JSX.Element;
21
+ };
22
+ export declare const disabled: StoryObj;
23
+ export declare const checked: StoryObj<{
24
+ handleChange: ReturnType<typeof fn>;
25
+ }>;
26
+ export declare const defaultChecked: StoryObj<{
27
+ handleChange: ReturnType<typeof fn>;
28
+ }>;
29
+ export declare const indeterminate: StoryObj;
30
+ export declare const className: StoryObj;
@@ -1,6 +1,7 @@
1
1
  import { Example } from "../../../utilities/storybook/index.js";
2
2
  import Checkbox from "../index.js";
3
3
  import View from "../../View/index.js";
4
+ import { expect, fn, userEvent } from "storybook/test";
4
5
  export default {
5
6
  title: "Components/Checkbox",
6
7
  component: Checkbox,
@@ -10,91 +11,161 @@ export default {
10
11
  },
11
12
  },
12
13
  };
13
- export const selection = () => (<Example>
14
- <Example.Item title="unselected">
15
- <Checkbox name="animal" value="dog">
16
- Checkbox
17
- </Checkbox>
18
- </Example.Item>
19
-
20
- <Example.Item title="checked, uncontrolled">
21
- <Checkbox name="animal" value="dog">
22
- Checkbox
23
- </Checkbox>
24
- </Example.Item>
25
-
26
- <Example.Item title="checked, controlled">
27
- <Checkbox name="animal" value="dog" checked>
28
- Checkbox
29
- </Checkbox>
30
- </Example.Item>
31
-
32
- <Example.Item title="indeterminate">
33
- <Checkbox name="animal" value="dog" indeterminate>
34
- Checkbox
35
- </Checkbox>
36
- </Example.Item>
37
- </Example>);
38
- export const size = () => (<Example>
39
- <Example.Item title="size: small">
40
- <View gap={4} direction="row">
41
- <Checkbox name="animal" value="dog" size="small" defaultChecked>
42
- Checkbox
43
- </Checkbox>
44
- <Checkbox name="animal" value="dog" size="small" indeterminate>
45
- Checkbox
46
- </Checkbox>
47
- </View>
48
- </Example.Item>
49
- <Example.Item title="size: medium">
50
- <View gap={4} direction="row">
51
- <Checkbox name="animal" value="dog" size="medium" defaultChecked>
52
- Checkbox
53
- </Checkbox>
54
- <Checkbox name="animal" value="dog" size="medium" indeterminate>
14
+ export const render = {
15
+ name: "name, value",
16
+ render: () => (<Checkbox name="test-name" value="test-value">
17
+ Content
18
+ </Checkbox>),
19
+ play: async ({ canvas }) => {
20
+ const input = canvas.getByRole("checkbox");
21
+ expect(input).toHaveAttribute("value", "test-value");
22
+ expect(input).toHaveAttribute("name", "test-name");
23
+ expect(input).not.toBeChecked();
24
+ },
25
+ };
26
+ export const size = {
27
+ name: "size",
28
+ render: () => (<Example>
29
+ <Example.Item title="size: small">
30
+ <View gap={4} direction="row">
31
+ <Checkbox name="animal" value="dog" size="small" defaultChecked>
32
+ Checkbox
33
+ </Checkbox>
34
+ <Checkbox name="animal" value="dog" size="small" indeterminate>
35
+ Checkbox
36
+ </Checkbox>
37
+ </View>
38
+ </Example.Item>
39
+ <Example.Item title="size: medium">
40
+ <View gap={4} direction="row">
41
+ <Checkbox name="animal" value="dog" size="medium" defaultChecked>
42
+ Checkbox
43
+ </Checkbox>
44
+ <Checkbox name="animal" value="dog" size="medium" indeterminate>
45
+ Checkbox
46
+ </Checkbox>
47
+ </View>
48
+ </Example.Item>
49
+ <Example.Item title="size: large">
50
+ <View gap={4} direction="row">
51
+ <Checkbox name="animal" value="dog" size="large" defaultChecked>
52
+ Checkbox
53
+ </Checkbox>
54
+ <Checkbox name="animal" value="dog" size="large" indeterminate>
55
+ Checkbox
56
+ </Checkbox>
57
+ </View>
58
+ </Example.Item>
59
+ <Example.Item title="size: responsive, s: small, m: large">
60
+ <View gap={4} direction="row">
61
+ <Checkbox name="animal" value="dog" size={{ s: "small", m: "large" }} defaultChecked>
62
+ Checkbox
63
+ </Checkbox>
64
+ </View>
65
+ </Example.Item>
66
+ </Example>),
67
+ };
68
+ export const error = {
69
+ name: "hasError",
70
+ render: () => (<Example>
71
+ <Example.Item title="error">
72
+ <Checkbox name="animal" value="dog" hasError>
55
73
  Checkbox
56
74
  </Checkbox>
57
- </View>
58
- </Example.Item>
59
- <Example.Item title="size: large">
60
- <View gap={4} direction="row">
61
- <Checkbox name="animal" value="dog" size="large" defaultChecked>
75
+ </Example.Item>
76
+ </Example>),
77
+ };
78
+ export const disabled = {
79
+ name: "disabled",
80
+ render: () => (<Example>
81
+ <Example.Item title="disabled">
82
+ <Checkbox name="animal" value="dog" disabled>
62
83
  Checkbox
63
84
  </Checkbox>
64
- <Checkbox name="animal" value="dog" size="large" indeterminate>
85
+ </Example.Item>
86
+ <Example.Item title="disabled, checked">
87
+ <Checkbox name="animal" value="dog" disabled checked>
65
88
  Checkbox
66
89
  </Checkbox>
67
- </View>
68
- </Example.Item>
69
- <Example.Item title="size: responsive, s: small, m: large">
70
- <View gap={4} direction="row">
71
- <Checkbox name="animal" value="dog" size={{ s: "small", m: "large" }} defaultChecked>
90
+ </Example.Item>
91
+ <Example.Item title="disabled, indeterminate">
92
+ <Checkbox name="animal" value="dog" disabled indeterminate>
72
93
  Checkbox
73
94
  </Checkbox>
74
- </View>
75
- </Example.Item>
76
- </Example>);
77
- export const error = () => (<Example>
78
- <Example.Item title="error">
79
- <Checkbox name="animal" value="dog" hasError>
80
- Checkbox
81
- </Checkbox>
82
- </Example.Item>
83
- </Example>);
84
- export const disabled = () => (<Example>
85
- <Example.Item title="disabled">
86
- <Checkbox name="animal" value="dog" disabled>
87
- Checkbox
88
- </Checkbox>
89
- </Example.Item>
90
- <Example.Item title="disabled, checked">
91
- <Checkbox name="animal" value="dog" disabled checked>
92
- Checkbox
93
- </Checkbox>
94
- </Example.Item>
95
- <Example.Item title="disabled, indeterminate">
96
- <Checkbox name="animal" value="dog" disabled indeterminate>
97
- Checkbox
95
+ </Example.Item>
96
+ </Example>),
97
+ play: async ({ canvas }) => {
98
+ const [input] = canvas.getAllByRole("checkbox");
99
+ expect(input).toBeDisabled();
100
+ },
101
+ };
102
+ export const checked = {
103
+ name: "checked, controlled",
104
+ args: {
105
+ handleChange: fn(),
106
+ },
107
+ render: (args) => (<Checkbox name="test-name" value="test-value" checked onChange={args.handleChange}>
108
+ Content
109
+ </Checkbox>),
110
+ play: async ({ canvas, args }) => {
111
+ const input = canvas.getByRole("checkbox");
112
+ expect(input).toBeChecked();
113
+ await userEvent.click(input);
114
+ expect(args.handleChange).toHaveBeenCalledTimes(1);
115
+ expect(args.handleChange).toHaveBeenCalledWith({
116
+ name: "test-name",
117
+ value: "test-value",
118
+ checked: false,
119
+ event: expect.objectContaining({ target: input }),
120
+ });
121
+ // Still checked because it's controlled
122
+ expect(input).toBeChecked();
123
+ },
124
+ };
125
+ export const defaultChecked = {
126
+ name: "defaultChecked, uncontrolled",
127
+ args: {
128
+ handleChange: fn(),
129
+ },
130
+ render: (args) => (<Checkbox name="test-name" value="test-value" defaultChecked onChange={args.handleChange}>
131
+ Content
132
+ </Checkbox>),
133
+ play: async ({ canvas, args }) => {
134
+ const input = canvas.getByRole("checkbox");
135
+ expect(input).toBeChecked();
136
+ await userEvent.click(input);
137
+ expect(args.handleChange).toHaveBeenCalledTimes(1);
138
+ expect(args.handleChange).toHaveBeenCalledWith({
139
+ name: "test-name",
140
+ value: "test-value",
141
+ checked: false,
142
+ event: expect.objectContaining({ target: input }),
143
+ });
144
+ expect(input).not.toBeChecked();
145
+ },
146
+ };
147
+ export const indeterminate = {
148
+ name: "indeterminate",
149
+ render: () => (<Checkbox name="test-name" value="test-value" indeterminate>
150
+ Content
151
+ </Checkbox>),
152
+ play: async ({ canvas }) => {
153
+ const input = canvas.getByRole("checkbox");
154
+ expect(input.indeterminate).toBeTruthy();
155
+ await userEvent.click(input);
156
+ expect(input.indeterminate).toBeFalsy();
157
+ },
158
+ };
159
+ export const className = {
160
+ name: "className, attributes",
161
+ render: () => (<div data-testid="root">
162
+ <Checkbox className="test-classname" attributes={{ id: "test-id" }}>
163
+ Content
98
164
  </Checkbox>
99
- </Example.Item>
100
- </Example>);
165
+ </div>),
166
+ play: async ({ canvas }) => {
167
+ const root = canvas.getByTestId("root").firstChild;
168
+ expect(root).toHaveClass("test-classname");
169
+ expect(root).toHaveAttribute("id", "test-id");
170
+ },
171
+ };