paris 0.23.0 → 0.24.0

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 (555) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +17 -17
  3. package/dist/helpers/OpenChangeEffect.d.ts +11 -0
  4. package/dist/helpers/OpenChangeEffect.js +16 -0
  5. package/dist/helpers/OpenChangeEffect.js.map +1 -0
  6. package/dist/helpers/renderEnhancer.d.ts +7 -0
  7. package/dist/helpers/renderEnhancer.js +20 -0
  8. package/dist/helpers/renderEnhancer.js.map +1 -0
  9. package/dist/helpers/useControllableState.d.ts +7 -0
  10. package/dist/helpers/useControllableState.js +49 -0
  11. package/dist/helpers/useControllableState.js.map +1 -0
  12. package/dist/helpers/useIsMounted.d.ts +1 -0
  13. package/dist/helpers/useResizeObserver.d.ts +12 -0
  14. package/dist/stories/accordion/Accordion.d.ts +47 -0
  15. package/dist/stories/accordion/Accordion.js +82 -0
  16. package/dist/stories/accordion/Accordion.js.map +1 -0
  17. package/dist/stories/accordion/Accordion.module.css +130 -0
  18. package/dist/stories/accordion/Accordion.module.scss.js +26 -0
  19. package/dist/stories/accordion/Accordion.module.scss.js.map +1 -0
  20. package/dist/stories/accordion/index.js +2 -0
  21. package/dist/stories/accordion/index.js.map +1 -0
  22. package/dist/stories/accordionselect/AccordionSelect.d.ts +102 -0
  23. package/dist/stories/accordionselect/AccordionSelect.js +137 -0
  24. package/dist/stories/accordionselect/AccordionSelect.js.map +1 -0
  25. package/dist/stories/accordionselect/AccordionSelect.module.css +106 -0
  26. package/dist/stories/accordionselect/AccordionSelect.module.scss.js +27 -0
  27. package/dist/stories/accordionselect/AccordionSelect.module.scss.js.map +1 -0
  28. package/dist/stories/accordionselect/index.js +2 -0
  29. package/dist/stories/accordionselect/index.js.map +1 -0
  30. package/dist/stories/avatar/Avatar.d.ts +22 -0
  31. package/dist/stories/avatar/Avatar.js +37 -0
  32. package/dist/stories/avatar/Avatar.js.map +1 -0
  33. package/dist/stories/avatar/Avatar.module.css +7 -0
  34. package/dist/stories/avatar/Avatar.module.scss.js +7 -0
  35. package/dist/stories/avatar/Avatar.module.scss.js.map +1 -0
  36. package/dist/stories/avatar/index.js +2 -0
  37. package/dist/stories/avatar/index.js.map +1 -0
  38. package/dist/stories/button/Button.d.ts +120 -0
  39. package/dist/stories/button/Button.js +123 -0
  40. package/dist/stories/button/Button.js.map +1 -0
  41. package/dist/stories/button/Button.module.css +137 -0
  42. package/dist/stories/button/Button.module.scss.js +35 -0
  43. package/dist/stories/button/Button.module.scss.js.map +1 -0
  44. package/dist/stories/button/index.js +2 -0
  45. package/dist/stories/button/index.js.map +1 -0
  46. package/dist/stories/callout/Callout.d.ts +22 -0
  47. package/dist/stories/callout/Callout.js +21 -0
  48. package/dist/stories/callout/Callout.js.map +1 -0
  49. package/dist/stories/callout/Callout.module.css +35 -0
  50. package/dist/stories/callout/Callout.module.scss.js +15 -0
  51. package/dist/stories/callout/Callout.module.scss.js.map +1 -0
  52. package/dist/stories/callout/index.js +2 -0
  53. package/dist/stories/callout/index.js.map +1 -0
  54. package/dist/stories/card/Card.d.ts +30 -0
  55. package/dist/stories/card/Card.js +22 -0
  56. package/dist/stories/card/Card.js.map +1 -0
  57. package/dist/stories/card/Card.module.css +39 -0
  58. package/dist/stories/card/Card.module.scss.js +17 -0
  59. package/dist/stories/card/Card.module.scss.js.map +1 -0
  60. package/dist/stories/card/index.js +2 -0
  61. package/dist/stories/card/index.js.map +1 -0
  62. package/dist/stories/cardbutton/CardButton.d.ts +50 -0
  63. package/dist/stories/cardbutton/CardButton.js +53 -0
  64. package/dist/stories/cardbutton/CardButton.js.map +1 -0
  65. package/dist/stories/cardbutton/CardButton.module.css +77 -0
  66. package/dist/stories/cardbutton/CardButton.module.scss.js +19 -0
  67. package/dist/stories/cardbutton/CardButton.module.scss.js.map +1 -0
  68. package/dist/stories/cardbutton/index.js +2 -0
  69. package/dist/stories/cardbutton/index.js.map +1 -0
  70. package/dist/stories/checkbox/Checkbox.d.ts +31 -0
  71. package/dist/stories/checkbox/Checkbox.js +99 -0
  72. package/dist/stories/checkbox/Checkbox.js.map +1 -0
  73. package/dist/stories/checkbox/Checkbox.module.css +155 -0
  74. package/dist/stories/checkbox/Checkbox.module.scss.js +32 -0
  75. package/dist/stories/checkbox/Checkbox.module.scss.js.map +1 -0
  76. package/dist/stories/checkbox/index.js +2 -0
  77. package/dist/stories/checkbox/index.js.map +1 -0
  78. package/dist/stories/codeinput/CodeInput.d.ts +47 -0
  79. package/dist/stories/codeinput/CodeInput.js +105 -0
  80. package/dist/stories/codeinput/CodeInput.js.map +1 -0
  81. package/dist/stories/codeinput/CodeInput.module.css +63 -0
  82. package/dist/stories/codeinput/CodeInput.module.scss.js +13 -0
  83. package/dist/stories/codeinput/CodeInput.module.scss.js.map +1 -0
  84. package/dist/stories/codeinput/index.js +2 -0
  85. package/dist/stories/codeinput/index.js.map +1 -0
  86. package/dist/stories/combobox/Combobox.d.ts +125 -0
  87. package/dist/stories/combobox/Combobox.js +257 -0
  88. package/dist/stories/combobox/Combobox.js.map +1 -0
  89. package/dist/stories/combobox/index.js +2 -0
  90. package/dist/stories/combobox/index.js.map +1 -0
  91. package/dist/stories/dialog/Dialog.d.ts +103 -0
  92. package/dist/stories/dialog/Dialog.js +187 -0
  93. package/dist/stories/dialog/Dialog.js.map +1 -0
  94. package/dist/stories/dialog/Dialog.module.css +185 -0
  95. package/dist/stories/dialog/Dialog.module.scss.js +48 -0
  96. package/dist/stories/dialog/Dialog.module.scss.js.map +1 -0
  97. package/dist/stories/dialog/index.js +2 -0
  98. package/dist/stories/dialog/index.js.map +1 -0
  99. package/dist/stories/drawer/Drawer.d.ts +143 -0
  100. package/dist/stories/drawer/Drawer.js +357 -0
  101. package/dist/stories/drawer/Drawer.js.map +1 -0
  102. package/dist/stories/drawer/Drawer.module.css +406 -0
  103. package/dist/stories/drawer/Drawer.module.scss.js +96 -0
  104. package/dist/stories/drawer/Drawer.module.scss.js.map +1 -0
  105. package/dist/stories/drawer/DrawerActions.d.ts +5 -0
  106. package/dist/stories/drawer/DrawerActions.js +23 -0
  107. package/dist/stories/drawer/DrawerActions.js.map +1 -0
  108. package/dist/stories/drawer/DrawerBottomPanel.d.ts +9 -0
  109. package/dist/stories/drawer/DrawerBottomPanel.js +48 -0
  110. package/dist/stories/drawer/DrawerBottomPanel.js.map +1 -0
  111. package/dist/stories/drawer/DrawerContext.d.ts +11 -0
  112. package/dist/stories/drawer/DrawerContext.js +23 -0
  113. package/dist/stories/drawer/DrawerContext.js.map +1 -0
  114. package/dist/stories/drawer/DrawerPage.d.ts +12 -0
  115. package/dist/stories/drawer/DrawerPage.js +22 -0
  116. package/dist/stories/drawer/DrawerPage.js.map +1 -0
  117. package/dist/stories/drawer/DrawerPageContext.d.ts +12 -0
  118. package/dist/stories/drawer/DrawerPageContext.js +23 -0
  119. package/dist/stories/drawer/DrawerPageContext.js.map +1 -0
  120. package/dist/stories/drawer/DrawerPaginationContext.d.ts +9 -0
  121. package/dist/stories/drawer/DrawerPaginationContext.js +17 -0
  122. package/dist/stories/drawer/DrawerPaginationContext.js.map +1 -0
  123. package/dist/stories/drawer/DrawerProgressBar.d.ts +15 -0
  124. package/dist/stories/drawer/DrawerProgressBar.js +60 -0
  125. package/dist/stories/drawer/DrawerProgressBar.js.map +1 -0
  126. package/dist/stories/drawer/DrawerSlotContext.d.ts +34 -0
  127. package/dist/stories/drawer/DrawerSlotContext.js +120 -0
  128. package/dist/stories/drawer/DrawerSlotContext.js.map +1 -0
  129. package/dist/stories/drawer/DrawerTitle.d.ts +5 -0
  130. package/dist/stories/drawer/DrawerTitle.js +29 -0
  131. package/dist/stories/drawer/DrawerTitle.js.map +1 -0
  132. package/dist/stories/drawer/index.js +10 -0
  133. package/dist/stories/drawer/index.js.map +1 -0
  134. package/dist/stories/field/Field.d.ts +54 -0
  135. package/dist/stories/field/Field.js +91 -0
  136. package/dist/stories/field/Field.js.map +1 -0
  137. package/dist/stories/field/index.js +2 -0
  138. package/dist/stories/field/index.js.map +1 -0
  139. package/dist/stories/icon/ArrowRight.d.ts +2 -0
  140. package/dist/stories/icon/ArrowRight.js +13 -0
  141. package/dist/stories/icon/ArrowRight.js.map +1 -0
  142. package/dist/stories/icon/Check.d.ts +2 -0
  143. package/dist/stories/icon/Check.js +13 -0
  144. package/dist/stories/icon/Check.js.map +1 -0
  145. package/dist/stories/icon/ChevronLeft.d.ts +2 -0
  146. package/dist/stories/icon/ChevronLeft.js +13 -0
  147. package/dist/stories/icon/ChevronLeft.js.map +1 -0
  148. package/dist/stories/icon/ChevronRight.d.ts +2 -0
  149. package/dist/stories/icon/ChevronRight.js +13 -0
  150. package/dist/stories/icon/ChevronRight.js.map +1 -0
  151. package/dist/stories/icon/Close.d.ts +2 -0
  152. package/dist/stories/icon/Close.js +13 -0
  153. package/dist/stories/icon/Close.js.map +1 -0
  154. package/dist/stories/icon/Ellipsis.d.ts +2 -0
  155. package/dist/stories/icon/Ellipsis.js +13 -0
  156. package/dist/stories/icon/Ellipsis.js.map +1 -0
  157. package/{src/stories/icon/Icon.tsx → dist/stories/icon/Icon.d.ts} +2 -8
  158. package/dist/stories/icon/Icon.js +8 -0
  159. package/dist/stories/icon/Icon.js.map +1 -0
  160. package/dist/stories/icon/Info.d.ts +2 -0
  161. package/dist/stories/icon/Info.js +13 -0
  162. package/dist/stories/icon/Info.js.map +1 -0
  163. package/dist/stories/icon/NotificationDot.d.ts +2 -0
  164. package/dist/stories/icon/NotificationDot.js +7 -0
  165. package/dist/stories/icon/NotificationDot.js.map +1 -0
  166. package/dist/stories/icon/Spinner.d.ts +2 -0
  167. package/dist/stories/icon/Spinner.js +24 -0
  168. package/dist/stories/icon/Spinner.js.map +1 -0
  169. package/dist/stories/icon/index.js +11 -0
  170. package/dist/stories/icon/index.js.map +1 -0
  171. package/dist/stories/informationaltooltip/InformationalTooltip.d.ts +68 -0
  172. package/dist/stories/informationaltooltip/InformationalTooltip.js +85 -0
  173. package/dist/stories/informationaltooltip/InformationalTooltip.js.map +1 -0
  174. package/dist/stories/informationaltooltip/InformationalTooltip.module.css +22 -0
  175. package/dist/stories/informationaltooltip/InformationalTooltip.module.scss.js +11 -0
  176. package/dist/stories/informationaltooltip/InformationalTooltip.module.scss.js.map +1 -0
  177. package/dist/stories/informationaltooltip/index.js +2 -0
  178. package/dist/stories/informationaltooltip/index.js.map +1 -0
  179. package/dist/stories/input/Input.d.ts +57 -0
  180. package/dist/stories/input/Input.js +108 -0
  181. package/dist/stories/input/Input.js.map +1 -0
  182. package/dist/stories/input/Input.module.css +165 -0
  183. package/dist/stories/input/Input.module.scss.js +23 -0
  184. package/dist/stories/input/Input.module.scss.js.map +1 -0
  185. package/dist/stories/input/index.js +2 -0
  186. package/dist/stories/input/index.js.map +1 -0
  187. package/dist/stories/markdown/Markdown.d.ts +36 -0
  188. package/dist/stories/markdown/Markdown.js +141 -0
  189. package/dist/stories/markdown/Markdown.js.map +1 -0
  190. package/dist/stories/markdown/Markdown.module.css +301 -0
  191. package/dist/stories/markdown/Markdown.module.scss.js +73 -0
  192. package/dist/stories/markdown/Markdown.module.scss.js.map +1 -0
  193. package/dist/stories/markdown/index.js +2 -0
  194. package/dist/stories/markdown/index.js.map +1 -0
  195. package/dist/stories/markdowneditor/FixedToolbar.d.ts +19 -0
  196. package/dist/stories/markdowneditor/FixedToolbar.js +212 -0
  197. package/dist/stories/markdowneditor/FixedToolbar.js.map +1 -0
  198. package/dist/stories/markdowneditor/FixedToolbar.module.css +24 -0
  199. package/dist/stories/markdowneditor/FixedToolbar.module.scss.js +11 -0
  200. package/dist/stories/markdowneditor/FixedToolbar.module.scss.js.map +1 -0
  201. package/dist/stories/markdowneditor/FloatingToolbar.d.ts +15 -0
  202. package/dist/stories/markdowneditor/FloatingToolbar.js +66 -0
  203. package/dist/stories/markdowneditor/FloatingToolbar.js.map +1 -0
  204. package/dist/stories/markdowneditor/FloatingToolbar.module.css +18 -0
  205. package/dist/stories/markdowneditor/FloatingToolbar.module.scss.js +9 -0
  206. package/dist/stories/markdowneditor/FloatingToolbar.module.scss.js.map +1 -0
  207. package/dist/stories/markdowneditor/LinkPopover.d.ts +11 -0
  208. package/dist/stories/markdowneditor/LinkPopover.js +106 -0
  209. package/dist/stories/markdowneditor/LinkPopover.js.map +1 -0
  210. package/dist/stories/markdowneditor/LinkPopover.module.css +113 -0
  211. package/dist/stories/markdowneditor/LinkPopover.module.scss.js +21 -0
  212. package/dist/stories/markdowneditor/LinkPopover.module.scss.js.map +1 -0
  213. package/{src/stories/markdowneditor/MarkdownEditor.tsx → dist/stories/markdowneditor/MarkdownEditor.d.ts} +5 -68
  214. package/dist/stories/markdowneditor/MarkdownEditor.js +62 -0
  215. package/dist/stories/markdowneditor/MarkdownEditor.js.map +1 -0
  216. package/dist/stories/markdowneditor/MarkdownEditor.module.css +325 -0
  217. package/dist/stories/markdowneditor/MarkdownEditor.module.scss.js +11 -0
  218. package/dist/stories/markdowneditor/MarkdownEditor.module.scss.js.map +1 -0
  219. package/dist/stories/markdowneditor/MarkdownEditorContext.d.ts +10 -0
  220. package/dist/stories/markdowneditor/MarkdownEditorContext.js +11 -0
  221. package/dist/stories/markdowneditor/MarkdownEditorContext.js.map +1 -0
  222. package/dist/stories/markdowneditor/ToolbarButton.d.ts +22 -0
  223. package/dist/stories/markdowneditor/ToolbarButton.js +33 -0
  224. package/dist/stories/markdowneditor/ToolbarButton.js.map +1 -0
  225. package/dist/stories/markdowneditor/ToolbarButton.module.css +30 -0
  226. package/dist/stories/markdowneditor/ToolbarButton.module.scss.js +7 -0
  227. package/dist/stories/markdowneditor/ToolbarButton.module.scss.js.map +1 -0
  228. package/dist/stories/markdowneditor/features.d.ts +10 -0
  229. package/dist/stories/markdowneditor/features.js +79 -0
  230. package/dist/stories/markdowneditor/features.js.map +1 -0
  231. package/dist/stories/markdowneditor/index.js +7 -0
  232. package/dist/stories/markdowneditor/index.js.map +1 -0
  233. package/dist/stories/markdowneditor/useMarkdownEditor.d.ts +19 -0
  234. package/dist/stories/markdowneditor/useMarkdownEditor.js +50 -0
  235. package/dist/stories/markdowneditor/useMarkdownEditor.js.map +1 -0
  236. package/dist/stories/menu/Menu.d.ts +48 -0
  237. package/dist/stories/menu/Menu.js +31 -0
  238. package/dist/stories/menu/Menu.js.map +1 -0
  239. package/dist/stories/menu/Menu.module.css +59 -0
  240. package/dist/stories/menu/Menu.module.scss.js +12 -0
  241. package/dist/stories/menu/Menu.module.scss.js.map +1 -0
  242. package/dist/stories/menu/index.js +2 -0
  243. package/dist/stories/menu/index.js.map +1 -0
  244. package/dist/stories/pagination/index.js +2 -0
  245. package/dist/stories/pagination/index.js.map +1 -0
  246. package/dist/stories/pagination/usePagination.d.ts +47 -0
  247. package/dist/stories/pagination/usePagination.js +52 -0
  248. package/dist/stories/pagination/usePagination.js.map +1 -0
  249. package/dist/stories/popover/Popover.d.ts +29 -0
  250. package/dist/stories/popover/Popover.js +56 -0
  251. package/dist/stories/popover/Popover.js.map +1 -0
  252. package/dist/stories/popover/Popover.module.css +20 -0
  253. package/dist/stories/popover/Popover.module.scss.js +8 -0
  254. package/dist/stories/popover/Popover.module.scss.js.map +1 -0
  255. package/dist/stories/popover/index.js +2 -0
  256. package/dist/stories/popover/index.js.map +1 -0
  257. package/dist/stories/select/Select.d.ts +112 -0
  258. package/dist/stories/select/Select.js +283 -0
  259. package/dist/stories/select/Select.js.map +1 -0
  260. package/dist/stories/select/Select.module.css +236 -0
  261. package/dist/stories/select/Select.module.scss.js +47 -0
  262. package/dist/stories/select/Select.module.scss.js.map +1 -0
  263. package/dist/stories/select/index.js +2 -0
  264. package/dist/stories/select/index.js.map +1 -0
  265. package/dist/stories/styledlink/StyledLink.d.ts +20 -0
  266. package/dist/stories/styledlink/StyledLink.js +15 -0
  267. package/dist/stories/styledlink/StyledLink.js.map +1 -0
  268. package/dist/stories/styledlink/StyledLink.module.css +10 -0
  269. package/dist/stories/styledlink/StyledLink.module.scss.js +7 -0
  270. package/dist/stories/styledlink/StyledLink.module.scss.js.map +1 -0
  271. package/dist/stories/styledlink/index.js +2 -0
  272. package/dist/stories/styledlink/index.js.map +1 -0
  273. package/dist/stories/table/Table.d.ts +76 -0
  274. package/dist/stories/table/Table.js +91 -0
  275. package/dist/stories/table/Table.js.map +1 -0
  276. package/dist/stories/table/Table.module.css +60 -0
  277. package/dist/stories/table/Table.module.scss.js +21 -0
  278. package/dist/stories/table/Table.module.scss.js.map +1 -0
  279. package/dist/stories/table/index.js +2 -0
  280. package/dist/stories/table/index.js.map +1 -0
  281. package/dist/stories/tabs/Tabs.d.ts +74 -0
  282. package/dist/stories/tabs/Tabs.js +128 -0
  283. package/dist/stories/tabs/Tabs.js.map +1 -0
  284. package/dist/stories/tabs/Tabs.module.css +144 -0
  285. package/dist/stories/tabs/Tabs.module.scss.js +37 -0
  286. package/dist/stories/tabs/Tabs.module.scss.js.map +1 -0
  287. package/dist/stories/tabs/index.js +2 -0
  288. package/dist/stories/tabs/index.js.map +1 -0
  289. package/dist/stories/tag/Tag.d.ts +36 -0
  290. package/dist/stories/tag/Tag.js +52 -0
  291. package/dist/stories/tag/Tag.js.map +1 -0
  292. package/dist/stories/tag/Tag.module.css +164 -0
  293. package/dist/stories/tag/Tag.module.scss.js +38 -0
  294. package/dist/stories/tag/Tag.module.scss.js.map +1 -0
  295. package/dist/stories/tag/index.js +2 -0
  296. package/dist/stories/tag/index.js.map +1 -0
  297. package/dist/stories/text/Text.d.ts +52 -0
  298. package/dist/stories/text/Text.js +37 -0
  299. package/dist/stories/text/Text.js.map +1 -0
  300. package/dist/stories/text/Text.module.css +54 -0
  301. package/dist/stories/text/Text.module.scss.js +19 -0
  302. package/dist/stories/text/Text.module.scss.js.map +1 -0
  303. package/{src → dist}/stories/text/Typography.module.css +20 -20
  304. package/dist/stories/text/Typography.module.css.js +45 -0
  305. package/dist/stories/text/Typography.module.css.js.map +1 -0
  306. package/dist/stories/text/index.js +2 -0
  307. package/dist/stories/text/index.js.map +1 -0
  308. package/dist/stories/textarea/TextArea.d.ts +28 -0
  309. package/dist/stories/textarea/TextArea.js +102 -0
  310. package/dist/stories/textarea/TextArea.js.map +1 -0
  311. package/dist/stories/textarea/index.js +2 -0
  312. package/dist/stories/textarea/index.js.map +1 -0
  313. package/{src/stories/theme/tw-preflight.css → dist/stories/theme/global.css} +86 -110
  314. package/dist/stories/theme/index.js +4 -0
  315. package/dist/stories/theme/index.js.map +1 -0
  316. package/dist/stories/theme/themes.d.ts +513 -0
  317. package/dist/stories/theme/themes.js +854 -0
  318. package/dist/stories/theme/themes.js.map +1 -0
  319. package/dist/stories/theme/tokens.d.ts +128 -0
  320. package/dist/stories/theme/tokens.js +130 -0
  321. package/dist/stories/theme/tokens.js.map +1 -0
  322. package/dist/stories/tilt/Tilt.d.ts +70 -0
  323. package/dist/stories/tilt/Tilt.js +256 -0
  324. package/dist/stories/tilt/Tilt.js.map +1 -0
  325. package/dist/stories/tilt/Tilt.module.css +22 -0
  326. package/dist/stories/tilt/Tilt.module.scss.js +11 -0
  327. package/dist/stories/tilt/Tilt.module.scss.js.map +1 -0
  328. package/dist/stories/tilt/index.js +2 -0
  329. package/dist/stories/tilt/index.js.map +1 -0
  330. package/{src/stories/toast/Toast.tsx → dist/stories/toast/Toast.d.ts} +3 -17
  331. package/dist/stories/toast/Toast.js +19 -0
  332. package/dist/stories/toast/Toast.js.map +1 -0
  333. package/dist/stories/toast/Toast.module.css +17 -0
  334. package/dist/stories/toast/Toast.module.scss.js +7 -0
  335. package/dist/stories/toast/Toast.module.scss.js.map +1 -0
  336. package/dist/stories/toast/index.js +3 -0
  337. package/dist/stories/toast/index.js.map +1 -0
  338. package/dist/stories/utility/EasingFunctions.d.ts +1 -0
  339. package/dist/stories/utility/EasingFunctions.js +6 -0
  340. package/dist/stories/utility/EasingFunctions.js.map +1 -0
  341. package/dist/stories/utility/RemoveFromDOM.d.ts +11 -0
  342. package/dist/stories/utility/RemoveFromDOM.js +7 -0
  343. package/dist/stories/utility/RemoveFromDOM.js.map +1 -0
  344. package/dist/stories/utility/TextWhenString.d.ts +6 -0
  345. package/dist/stories/utility/TextWhenString.js +13 -0
  346. package/dist/stories/utility/TextWhenString.js.map +1 -0
  347. package/dist/stories/utility/VisuallyHidden.d.ts +13 -0
  348. package/dist/stories/utility/VisuallyHidden.js +8 -0
  349. package/dist/stories/utility/VisuallyHidden.js.map +1 -0
  350. package/dist/stories/utility/index.js +5 -0
  351. package/dist/stories/utility/index.js.map +1 -0
  352. package/dist/styles.css +3307 -0
  353. package/dist/types/Enhancer.d.ts +4 -0
  354. package/package.json +148 -44
  355. package/src/helpers/OpenChangeEffect.tsx +0 -21
  356. package/src/helpers/renderEnhancer.tsx +0 -20
  357. package/src/helpers/useControllableState.test.ts +0 -88
  358. package/src/helpers/useControllableState.ts +0 -59
  359. package/src/helpers/useIsMounted.ts +0 -17
  360. package/src/helpers/useResizeObserver.ts +0 -94
  361. package/src/pages/_app.tsx +0 -6
  362. package/src/pages/_document.tsx +0 -13
  363. package/src/pages/index.tsx +0 -116
  364. package/src/stories/Pagination.mdx +0 -73
  365. package/src/stories/Tokens.mdx +0 -46
  366. package/src/stories/Welcome.mdx +0 -8
  367. package/src/stories/accordion/Accordion.module.scss +0 -163
  368. package/src/stories/accordion/Accordion.stories.ts +0 -48
  369. package/src/stories/accordion/Accordion.test.tsx +0 -142
  370. package/src/stories/accordion/Accordion.tsx +0 -148
  371. package/src/stories/accordionselect/AccordionSelect.module.scss +0 -119
  372. package/src/stories/accordionselect/AccordionSelect.stories.ts +0 -38
  373. package/src/stories/accordionselect/AccordionSelect.test.tsx +0 -327
  374. package/src/stories/accordionselect/AccordionSelect.tsx +0 -249
  375. package/src/stories/avatar/Avatar.module.scss +0 -7
  376. package/src/stories/avatar/Avatar.stories.ts +0 -22
  377. package/src/stories/avatar/Avatar.test.tsx +0 -77
  378. package/src/stories/avatar/Avatar.tsx +0 -55
  379. package/src/stories/button/Button.module.scss +0 -167
  380. package/src/stories/button/Button.stories.ts +0 -93
  381. package/src/stories/button/Button.test.tsx +0 -266
  382. package/src/stories/button/Button.tsx +0 -226
  383. package/src/stories/callout/Callout.module.scss +0 -43
  384. package/src/stories/callout/Callout.stories.ts +0 -52
  385. package/src/stories/callout/Callout.test.tsx +0 -79
  386. package/src/stories/callout/Callout.tsx +0 -43
  387. package/src/stories/card/Card.module.scss +0 -42
  388. package/src/stories/card/Card.stories.ts +0 -38
  389. package/src/stories/card/Card.test.tsx +0 -81
  390. package/src/stories/card/Card.tsx +0 -54
  391. package/src/stories/cardbutton/CardButton.module.scss +0 -88
  392. package/src/stories/cardbutton/CardButton.stories.tsx +0 -24
  393. package/src/stories/cardbutton/CardButton.test.tsx +0 -174
  394. package/src/stories/cardbutton/CardButton.tsx +0 -100
  395. package/src/stories/checkbox/Checkbox.module.scss +0 -198
  396. package/src/stories/checkbox/Checkbox.stories.ts +0 -87
  397. package/src/stories/checkbox/Checkbox.test.tsx +0 -584
  398. package/src/stories/checkbox/Checkbox.tsx +0 -123
  399. package/src/stories/codeinput/CodeInput.module.scss +0 -77
  400. package/src/stories/codeinput/CodeInput.stories.ts +0 -51
  401. package/src/stories/codeinput/CodeInput.test.tsx +0 -56
  402. package/src/stories/codeinput/CodeInput.tsx +0 -160
  403. package/src/stories/combobox/Combobox.module.scss +0 -5
  404. package/src/stories/combobox/Combobox.stories.ts +0 -270
  405. package/src/stories/combobox/Combobox.test.tsx +0 -275
  406. package/src/stories/combobox/Combobox.tsx +0 -396
  407. package/src/stories/dialog/Dialog.module.scss +0 -211
  408. package/src/stories/dialog/Dialog.stories.tsx +0 -93
  409. package/src/stories/dialog/Dialog.test.tsx +0 -244
  410. package/src/stories/dialog/Dialog.tsx +0 -283
  411. package/src/stories/drawer/Drawer.module.scss +0 -479
  412. package/src/stories/drawer/Drawer.stories.tsx +0 -494
  413. package/src/stories/drawer/Drawer.test.tsx +0 -734
  414. package/src/stories/drawer/Drawer.tsx +0 -542
  415. package/src/stories/drawer/DrawerActions.tsx +0 -28
  416. package/src/stories/drawer/DrawerBottomPanel.tsx +0 -55
  417. package/src/stories/drawer/DrawerContext.tsx +0 -31
  418. package/src/stories/drawer/DrawerPage.tsx +0 -37
  419. package/src/stories/drawer/DrawerPageContext.tsx +0 -35
  420. package/src/stories/drawer/DrawerPaginationContext.tsx +0 -22
  421. package/src/stories/drawer/DrawerProgressBar.tsx +0 -72
  422. package/src/stories/drawer/DrawerSlotContext.tsx +0 -172
  423. package/src/stories/drawer/DrawerTitle.tsx +0 -35
  424. package/src/stories/field/Field.stories.ts +0 -36
  425. package/src/stories/field/Field.test.tsx +0 -146
  426. package/src/stories/field/Field.tsx +0 -145
  427. package/src/stories/icon/ArrowRight.tsx +0 -11
  428. package/src/stories/icon/Check.tsx +0 -11
  429. package/src/stories/icon/ChevronLeft.tsx +0 -11
  430. package/src/stories/icon/ChevronRight.tsx +0 -11
  431. package/src/stories/icon/Close.tsx +0 -11
  432. package/src/stories/icon/Ellipsis.tsx +0 -11
  433. package/src/stories/icon/Icon.module.scss +0 -5
  434. package/src/stories/icon/Icon.stories.ts +0 -33
  435. package/src/stories/icon/Icon.test.tsx +0 -59
  436. package/src/stories/icon/Info.tsx +0 -11
  437. package/src/stories/icon/NotificationDot.tsx +0 -8
  438. package/src/stories/icon/Spinner.tsx +0 -17
  439. package/src/stories/informationaltooltip/InformationalTooltip.module.scss +0 -23
  440. package/src/stories/informationaltooltip/InformationalTooltip.stories.tsx +0 -61
  441. package/src/stories/informationaltooltip/InformationalTooltip.test.tsx +0 -178
  442. package/src/stories/informationaltooltip/InformationalTooltip.tsx +0 -170
  443. package/src/stories/input/Input.module.scss +0 -217
  444. package/src/stories/input/Input.stories.ts +0 -110
  445. package/src/stories/input/Input.test.tsx +0 -174
  446. package/src/stories/input/Input.tsx +0 -181
  447. package/src/stories/markdown/Markdown.module.scss +0 -384
  448. package/src/stories/markdown/Markdown.stories.ts +0 -203
  449. package/src/stories/markdown/Markdown.test.tsx +0 -228
  450. package/src/stories/markdown/Markdown.tsx +0 -293
  451. package/src/stories/markdowneditor/FixedToolbar.module.scss +0 -24
  452. package/src/stories/markdowneditor/FixedToolbar.tsx +0 -274
  453. package/src/stories/markdowneditor/FloatingToolbar.module.scss +0 -21
  454. package/src/stories/markdowneditor/FloatingToolbar.tsx +0 -94
  455. package/src/stories/markdowneditor/LinkPopover.module.scss +0 -124
  456. package/src/stories/markdowneditor/LinkPopover.tsx +0 -135
  457. package/src/stories/markdowneditor/MarkdownEditor.module.scss +0 -405
  458. package/src/stories/markdowneditor/MarkdownEditor.stories.tsx +0 -226
  459. package/src/stories/markdowneditor/MarkdownEditor.test.tsx +0 -115
  460. package/src/stories/markdowneditor/MarkdownEditorContext.tsx +0 -20
  461. package/src/stories/markdowneditor/ToolbarButton.module.scss +0 -35
  462. package/src/stories/markdowneditor/ToolbarButton.tsx +0 -52
  463. package/src/stories/markdowneditor/features.ts +0 -92
  464. package/src/stories/markdowneditor/useMarkdownEditor.ts +0 -75
  465. package/src/stories/menu/Menu.module.scss +0 -71
  466. package/src/stories/menu/Menu.stories.tsx +0 -37
  467. package/src/stories/menu/Menu.test.tsx +0 -254
  468. package/src/stories/menu/Menu.tsx +0 -95
  469. package/src/stories/pagination/usePagination.test.ts +0 -259
  470. package/src/stories/pagination/usePagination.ts +0 -117
  471. package/src/stories/popover/Popover.module.scss +0 -22
  472. package/src/stories/popover/Popover.stories.ts +0 -20
  473. package/src/stories/popover/Popover.test.tsx +0 -152
  474. package/src/stories/popover/Popover.tsx +0 -89
  475. package/src/stories/select/Select.module.scss +0 -311
  476. package/src/stories/select/Select.stories.ts +0 -153
  477. package/src/stories/select/Select.test.tsx +0 -341
  478. package/src/stories/select/Select.tsx +0 -398
  479. package/src/stories/styledlink/StyledLink.module.scss +0 -11
  480. package/src/stories/styledlink/StyledLink.stories.ts +0 -28
  481. package/src/stories/styledlink/StyledLink.test.tsx +0 -59
  482. package/src/stories/styledlink/StyledLink.tsx +0 -33
  483. package/src/stories/table/Table.module.scss +0 -74
  484. package/src/stories/table/Table.stories.ts +0 -62
  485. package/src/stories/table/Table.test.tsx +0 -156
  486. package/src/stories/table/Table.tsx +0 -182
  487. package/src/stories/tabs/Tabs.module.scss +0 -185
  488. package/src/stories/tabs/Tabs.stories.tsx +0 -209
  489. package/src/stories/tabs/Tabs.test.tsx +0 -167
  490. package/src/stories/tabs/Tabs.tsx +0 -191
  491. package/src/stories/tag/Tag.module.scss +0 -189
  492. package/src/stories/tag/Tag.stories.ts +0 -58
  493. package/src/stories/tag/Tag.test.tsx +0 -90
  494. package/src/stories/tag/Tag.tsx +0 -84
  495. package/src/stories/text/Text.module.scss +0 -39
  496. package/src/stories/text/Text.stories.ts +0 -195
  497. package/src/stories/text/Text.test.tsx +0 -81
  498. package/src/stories/text/Text.tsx +0 -108
  499. package/src/stories/textarea/TextArea.stories.ts +0 -39
  500. package/src/stories/textarea/TextArea.test.tsx +0 -147
  501. package/src/stories/textarea/TextArea.tsx +0 -112
  502. package/src/stories/theme/global.scss +0 -6
  503. package/src/stories/theme/themes.ts +0 -1509
  504. package/src/stories/theme/tokens.ts +0 -149
  505. package/src/stories/theme/util.scss +0 -8
  506. package/src/stories/tilt/Tilt.module.scss +0 -22
  507. package/src/stories/tilt/Tilt.stories.tsx +0 -42
  508. package/src/stories/tilt/Tilt.test.tsx +0 -203
  509. package/src/stories/tilt/Tilt.tsx +0 -375
  510. package/src/stories/toast/Toast.module.scss +0 -20
  511. package/src/stories/toast/Toast.stories.tsx +0 -31
  512. package/src/stories/toast/Toast.test.tsx +0 -86
  513. package/src/stories/utility/Dropdown.module.scss +0 -28
  514. package/src/stories/utility/EasingFunctions.ts +0 -3
  515. package/src/stories/utility/RemoveFromDOM.tsx +0 -15
  516. package/src/stories/utility/TextWhenString.tsx +0 -15
  517. package/src/stories/utility/Utility.test.tsx +0 -96
  518. package/src/stories/utility/VisuallyHidden.tsx +0 -18
  519. package/src/styles/Home.module.css +0 -268
  520. package/src/styles/globals.css +0 -3
  521. package/src/test/render.tsx +0 -20
  522. package/src/test/setup.ts +0 -32
  523. package/src/types/Enhancer.ts +0 -3
  524. /package/{src/stories/accordion/index.ts → dist/stories/accordion/index.d.ts} +0 -0
  525. /package/{src/stories/accordionselect/index.ts → dist/stories/accordionselect/index.d.ts} +0 -0
  526. /package/{src/stories/avatar/index.ts → dist/stories/avatar/index.d.ts} +0 -0
  527. /package/{src/stories/button/index.ts → dist/stories/button/index.d.ts} +0 -0
  528. /package/{src/stories/callout/index.ts → dist/stories/callout/index.d.ts} +0 -0
  529. /package/{src/stories/card/index.ts → dist/stories/card/index.d.ts} +0 -0
  530. /package/{src/stories/cardbutton/index.ts → dist/stories/cardbutton/index.d.ts} +0 -0
  531. /package/{src/stories/checkbox/index.ts → dist/stories/checkbox/index.d.ts} +0 -0
  532. /package/{src/stories/codeinput/index.ts → dist/stories/codeinput/index.d.ts} +0 -0
  533. /package/{src/stories/combobox/index.ts → dist/stories/combobox/index.d.ts} +0 -0
  534. /package/{src/stories/dialog/index.ts → dist/stories/dialog/index.d.ts} +0 -0
  535. /package/{src/stories/drawer/index.ts → dist/stories/drawer/index.d.ts} +0 -0
  536. /package/{src/stories/field/index.ts → dist/stories/field/index.d.ts} +0 -0
  537. /package/{src/stories/icon/index.ts → dist/stories/icon/index.d.ts} +0 -0
  538. /package/{src/stories/informationaltooltip/index.ts → dist/stories/informationaltooltip/index.d.ts} +0 -0
  539. /package/{src/stories/input/index.ts → dist/stories/input/index.d.ts} +0 -0
  540. /package/{src/stories/markdown/index.ts → dist/stories/markdown/index.d.ts} +0 -0
  541. /package/{src/stories/markdowneditor/index.ts → dist/stories/markdowneditor/index.d.ts} +0 -0
  542. /package/{src/stories/menu/index.ts → dist/stories/menu/index.d.ts} +0 -0
  543. /package/{src/stories/pagination/index.ts → dist/stories/pagination/index.d.ts} +0 -0
  544. /package/{src/stories/popover/index.ts → dist/stories/popover/index.d.ts} +0 -0
  545. /package/{src/stories/select/index.ts → dist/stories/select/index.d.ts} +0 -0
  546. /package/{src/stories/styledlink/index.ts → dist/stories/styledlink/index.d.ts} +0 -0
  547. /package/{src/stories/table/index.ts → dist/stories/table/index.d.ts} +0 -0
  548. /package/{src/stories/tabs/index.ts → dist/stories/tabs/index.d.ts} +0 -0
  549. /package/{src/stories/tag/index.ts → dist/stories/tag/index.d.ts} +0 -0
  550. /package/{src/stories/text/index.ts → dist/stories/text/index.d.ts} +0 -0
  551. /package/{src/stories/textarea/index.ts → dist/stories/textarea/index.d.ts} +0 -0
  552. /package/{src/stories/theme/index.ts → dist/stories/theme/index.d.ts} +0 -0
  553. /package/{src/stories/tilt/index.ts → dist/stories/tilt/index.d.ts} +0 -0
  554. /package/{src/stories/toast/index.ts → dist/stories/toast/index.d.ts} +0 -0
  555. /package/{src/stories/utility/index.ts → dist/stories/utility/index.d.ts} +0 -0
@@ -1,584 +0,0 @@
1
- import { useState } from 'react';
2
- import { render, screen } from '../../test/render';
3
- import { Checkbox } from './Checkbox';
4
-
5
- // Helper wrapper for controlled checkbox behavior
6
- function ControlledCheckbox({
7
- defaultChecked = false,
8
- ...props
9
- }: Omit<React.ComponentProps<typeof Checkbox>, 'checked'> & { defaultChecked?: boolean }) {
10
- const [checked, setChecked] = useState(defaultChecked);
11
- return <Checkbox {...props} checked={checked} onChange={(val) => setChecked(!!val)} />;
12
- }
13
-
14
- describe('Checkbox', () => {
15
- // ─── Rendering ───────────────────────────────────────────────────
16
-
17
- describe('rendering', () => {
18
- it('renders with default kind', () => {
19
- render(<Checkbox checked={false}>Accept terms</Checkbox>);
20
- expect(screen.getByRole('checkbox')).toBeInTheDocument();
21
- expect(screen.getByText('Accept terms')).toBeInTheDocument();
22
- });
23
-
24
- it('renders unchecked by default', () => {
25
- render(<Checkbox checked={false}>Label</Checkbox>);
26
- const checkbox = screen.getByRole('checkbox');
27
- expect(checkbox).not.toBeChecked();
28
- });
29
-
30
- it('renders checked when checked prop is true', () => {
31
- render(<Checkbox checked={true}>Label</Checkbox>);
32
- const checkbox = screen.getByRole('checkbox');
33
- expect(checkbox).toBeChecked();
34
- });
35
-
36
- it('renders label text as children', () => {
37
- render(<Checkbox checked={false}>My label text</Checkbox>);
38
- expect(screen.getByText('My label text')).toBeInTheDocument();
39
- });
40
-
41
- it('renders ReactNode children', () => {
42
- render(
43
- <Checkbox checked={false}>
44
- <span data-testid="custom-label">Custom element</span>
45
- </Checkbox>,
46
- );
47
- expect(screen.getByTestId('custom-label')).toBeInTheDocument();
48
- expect(screen.getByText('Custom element')).toBeInTheDocument();
49
- });
50
-
51
- it('renders without children', () => {
52
- render(<Checkbox checked={false} />);
53
- expect(screen.getByRole('checkbox')).toBeInTheDocument();
54
- });
55
- });
56
-
57
- // ─── Interaction ─────────────────────────────────────────────────
58
-
59
- describe('interaction', () => {
60
- it('calls onChange when clicked', async () => {
61
- const handleChange = vi.fn();
62
- const { user } = render(
63
- <Checkbox checked={false} onChange={handleChange}>
64
- Toggle me
65
- </Checkbox>,
66
- );
67
-
68
- await user.click(screen.getByRole('checkbox'));
69
- expect(handleChange).toHaveBeenCalledTimes(1);
70
- expect(handleChange).toHaveBeenCalledWith(true);
71
- });
72
-
73
- it('calls onChange with false when unchecking', async () => {
74
- const handleChange = vi.fn();
75
- const { user } = render(
76
- <Checkbox checked={true} onChange={handleChange}>
77
- Toggle me
78
- </Checkbox>,
79
- );
80
-
81
- await user.click(screen.getByRole('checkbox'));
82
- expect(handleChange).toHaveBeenCalledWith(false);
83
- });
84
-
85
- it('toggles checked state in a controlled component', async () => {
86
- const { user } = render(<ControlledCheckbox>Toggle me</ControlledCheckbox>);
87
-
88
- const checkbox = screen.getByRole('checkbox');
89
- expect(checkbox).not.toBeChecked();
90
-
91
- await user.click(checkbox);
92
- expect(checkbox).toBeChecked();
93
-
94
- await user.click(checkbox);
95
- expect(checkbox).not.toBeChecked();
96
- });
97
-
98
- it('clicking the label toggles the checkbox', async () => {
99
- const handleChange = vi.fn();
100
- const { user } = render(
101
- <Checkbox checked={false} onChange={handleChange}>
102
- Click this label
103
- </Checkbox>,
104
- );
105
-
106
- // The label wraps the checkbox, so clicking text should also trigger
107
- await user.click(screen.getByText('Click this label'));
108
- expect(handleChange).toHaveBeenCalled();
109
- });
110
- });
111
-
112
- // ─── Disabled ────────────────────────────────────────────────────
113
-
114
- describe('disabled', () => {
115
- it('applies disabled styling class', () => {
116
- const { container } = render(
117
- <Checkbox checked={false} disabled>
118
- Disabled
119
- </Checkbox>,
120
- );
121
- const label = container.querySelector('label');
122
- expect(label).toHaveClass('disabled');
123
- });
124
-
125
- it('sets data-disabled on the checkbox root', () => {
126
- render(
127
- <Checkbox checked={false} disabled>
128
- Disabled
129
- </Checkbox>,
130
- );
131
- const checkbox = screen.getByRole('checkbox');
132
- expect(checkbox).toHaveAttribute('data-disabled', 'true');
133
- });
134
-
135
- it('sets data-disabled on the switch when kind is switch', () => {
136
- render(
137
- <Checkbox kind="switch" checked={false} disabled>
138
- Disabled switch
139
- </Checkbox>,
140
- );
141
- const switchEl = screen.getByRole('switch');
142
- expect(switchEl).toHaveAttribute('data-disabled', 'true');
143
- });
144
- });
145
-
146
- // ─── Kinds ───────────────────────────────────────────────────────
147
-
148
- describe('kind variants', () => {
149
- describe('default kind', () => {
150
- it('renders a Radix checkbox with default class', () => {
151
- const { container } = render(
152
- <Checkbox kind="default" checked={false}>
153
- Default
154
- </Checkbox>,
155
- );
156
- const root = container.querySelector('[class*="root"]');
157
- expect(root).toHaveClass('default');
158
- });
159
-
160
- it('shows label text next to checkbox', () => {
161
- render(
162
- <Checkbox kind="default" checked={false}>
163
- Default label
164
- </Checkbox>,
165
- );
166
- expect(screen.getByText('Default label')).toBeInTheDocument();
167
- expect(screen.getByRole('checkbox')).toBeInTheDocument();
168
- });
169
-
170
- it('renders an SVG check icon when checked', () => {
171
- const { container } = render(
172
- <Checkbox kind="default" checked={true}>
173
- Checked
174
- </Checkbox>,
175
- );
176
- const svg = container.querySelector('svg');
177
- expect(svg).toBeInTheDocument();
178
- });
179
- });
180
-
181
- describe('surface kind', () => {
182
- it('renders a Radix checkbox with surface class', () => {
183
- const { container } = render(
184
- <Checkbox kind="surface" checked={false}>
185
- Surface
186
- </Checkbox>,
187
- );
188
- const root = container.querySelector('[class*="root"]');
189
- expect(root).toHaveClass('surface');
190
- });
191
-
192
- it('shows children inside the Radix root (not outside)', () => {
193
- render(
194
- <Checkbox kind="surface" checked={false}>
195
- Surface label
196
- </Checkbox>,
197
- );
198
- expect(screen.getByText('Surface label')).toBeInTheDocument();
199
- });
200
-
201
- it('does not show label outside root when kind is surface', () => {
202
- const { container } = render(
203
- <Checkbox kind="surface" checked={false}>
204
- Surface label
205
- </Checkbox>,
206
- );
207
- // In surface mode, the label text is inside the Radix root, not adjacent
208
- const root = container.querySelector('[class*="root"]');
209
- expect(root).toContainElement(screen.getByText('Surface label'));
210
- });
211
- });
212
-
213
- describe('panel kind', () => {
214
- it('renders a Radix checkbox with panel class', () => {
215
- const { container } = render(
216
- <Checkbox kind="panel" checked={false}>
217
- Panel
218
- </Checkbox>,
219
- );
220
- const root = container.querySelector('[class*="root"]');
221
- expect(root).toHaveClass('panel');
222
- });
223
-
224
- it('shows children inside the Radix root', () => {
225
- const { container } = render(
226
- <Checkbox kind="panel" checked={false}>
227
- Panel label
228
- </Checkbox>,
229
- );
230
- const root = container.querySelector('[class*="root"]');
231
- expect(root).toContainElement(screen.getByText('Panel label'));
232
- });
233
-
234
- it('renders a box element when unchecked', () => {
235
- const { container } = render(
236
- <Checkbox kind="panel" checked={false}>
237
- Panel
238
- </Checkbox>,
239
- );
240
- const box = container.querySelector('.box');
241
- expect(box).toBeInTheDocument();
242
- });
243
- });
244
-
245
- describe('switch kind', () => {
246
- it('renders a switch element instead of a Radix checkbox', () => {
247
- render(
248
- <Checkbox kind="switch" checked={false}>
249
- Switch
250
- </Checkbox>,
251
- );
252
- // HeadlessUI Switch renders a button with role="switch"
253
- expect(screen.getByRole('switch')).toBeInTheDocument();
254
- });
255
-
256
- it('does not render a Radix checkbox role', () => {
257
- render(
258
- <Checkbox kind="switch" checked={false}>
259
- Switch
260
- </Checkbox>,
261
- );
262
- expect(screen.queryByRole('checkbox')).not.toBeInTheDocument();
263
- });
264
-
265
- it('shows label text', () => {
266
- render(
267
- <Checkbox kind="switch" checked={false}>
268
- Switch label
269
- </Checkbox>,
270
- );
271
- expect(screen.getByText('Switch label')).toBeInTheDocument();
272
- });
273
-
274
- it('toggles switch state on click', async () => {
275
- const handleChange = vi.fn();
276
- const { user } = render(
277
- <Checkbox kind="switch" checked={false} onChange={handleChange}>
278
- Switch
279
- </Checkbox>,
280
- );
281
-
282
- await user.click(screen.getByRole('switch'));
283
- expect(handleChange).toHaveBeenCalledWith(true);
284
- });
285
-
286
- it('renders knob element', () => {
287
- const { container } = render(
288
- <Checkbox kind="switch" checked={false}>
289
- Switch
290
- </Checkbox>,
291
- );
292
- const knob = container.querySelector('[class*="knob"]');
293
- expect(knob).toBeInTheDocument();
294
- });
295
-
296
- it('applies knobChecked class when checked', () => {
297
- const { container } = render(
298
- <Checkbox kind="switch" checked={true}>
299
- Switch
300
- </Checkbox>,
301
- );
302
- const knob = container.querySelector('[class*="knob"]');
303
- expect(knob).toHaveClass('knobChecked');
304
- });
305
-
306
- it('does not apply knobChecked class when unchecked', () => {
307
- const { container } = render(
308
- <Checkbox kind="switch" checked={false}>
309
- Switch
310
- </Checkbox>,
311
- );
312
- const knob = container.querySelector('[class*="knob"]');
313
- expect(knob).not.toHaveClass('knobChecked');
314
- });
315
- });
316
- });
317
-
318
- // ─── Hide Label ──────────────────────────────────────────────────
319
-
320
- describe('hideLabel', () => {
321
- it('visually hides the label when hideLabel is true', () => {
322
- const { container } = render(
323
- <Checkbox kind="default" checked={false} hideLabel>
324
- Hidden label
325
- </Checkbox>,
326
- );
327
- // VisuallyHidden uses Ariakit's VisuallyHidden which renders content off-screen
328
- // The text should still be in the DOM for accessibility
329
- expect(screen.getByText('Hidden label')).toBeInTheDocument();
330
- });
331
-
332
- it('shows label when hideLabel is false', () => {
333
- render(
334
- <Checkbox kind="default" checked={false} hideLabel={false}>
335
- Visible label
336
- </Checkbox>,
337
- );
338
- expect(screen.getByText('Visible label')).toBeInTheDocument();
339
- });
340
-
341
- it('hides the label for switch kind', () => {
342
- render(
343
- <Checkbox kind="switch" checked={false} hideLabel>
344
- Hidden switch label
345
- </Checkbox>,
346
- );
347
- // Still accessible in DOM
348
- expect(screen.getByText('Hidden switch label')).toBeInTheDocument();
349
- });
350
- });
351
-
352
- // ─── className forwarding ────────────────────────────────────────
353
-
354
- describe('className forwarding', () => {
355
- it('forwards className to the label container', () => {
356
- const { container } = render(
357
- <Checkbox checked={false} className="custom-class">
358
- Label
359
- </Checkbox>,
360
- );
361
- const label = container.querySelector('label');
362
- expect(label).toHaveClass('custom-class');
363
- expect(label).toHaveClass('container');
364
- });
365
-
366
- it('preserves container class when custom className is added', () => {
367
- const { container } = render(
368
- <Checkbox checked={false} className="my-class">
369
- Label
370
- </Checkbox>,
371
- );
372
- const label = container.querySelector('label');
373
- expect(label).toHaveClass('container');
374
- expect(label).toHaveClass('my-class');
375
- });
376
- });
377
-
378
- // ─── Checked state styling ───────────────────────────────────────
379
-
380
- describe('checked state styling', () => {
381
- it('applies checked class to container when checked', () => {
382
- const { container } = render(<Checkbox checked={true}>Checked</Checkbox>);
383
- const label = container.querySelector('label');
384
- expect(label).toHaveClass('checked');
385
- });
386
-
387
- it('does not apply checked class to container when unchecked', () => {
388
- const { container } = render(<Checkbox checked={false}>Unchecked</Checkbox>);
389
- const label = container.querySelector('label');
390
- expect(label).not.toHaveClass('checked');
391
- });
392
- });
393
-
394
- // ─── Accessibility ───────────────────────────────────────────────
395
-
396
- describe('accessibility', () => {
397
- it('has proper role="checkbox" for default kind', () => {
398
- render(<Checkbox checked={false}>Accessible</Checkbox>);
399
- expect(screen.getByRole('checkbox')).toBeInTheDocument();
400
- });
401
-
402
- it('has proper role="switch" for switch kind', () => {
403
- render(
404
- <Checkbox kind="switch" checked={false}>
405
- Switch
406
- </Checkbox>,
407
- );
408
- expect(screen.getByRole('switch')).toBeInTheDocument();
409
- });
410
-
411
- it('has aria-checked false when unchecked', () => {
412
- render(<Checkbox checked={false}>Label</Checkbox>);
413
- expect(screen.getByRole('checkbox')).toHaveAttribute('aria-checked', 'false');
414
- });
415
-
416
- it('has aria-checked true when checked', () => {
417
- render(<Checkbox checked={true}>Label</Checkbox>);
418
- expect(screen.getByRole('checkbox')).toHaveAttribute('aria-checked', 'true');
419
- });
420
-
421
- it('sets aria-details when children is a string', () => {
422
- render(<Checkbox checked={false}>String label</Checkbox>);
423
- const checkbox = screen.getByRole('checkbox');
424
- expect(checkbox).toHaveAttribute('aria-details', 'String label');
425
- });
426
-
427
- it('does not set aria-details when children is not a string', () => {
428
- render(
429
- <Checkbox checked={false}>
430
- <span>Non-string label</span>
431
- </Checkbox>,
432
- );
433
- const checkbox = screen.getByRole('checkbox');
434
- expect(checkbox).not.toHaveAttribute('aria-details');
435
- });
436
-
437
- it('associates label with checkbox via htmlFor and id', () => {
438
- const { container } = render(<Checkbox checked={false}>Label</Checkbox>);
439
- const label = container.querySelector('label');
440
- const checkbox = screen.getByRole('checkbox');
441
- expect(label).toHaveAttribute('for');
442
- expect(checkbox).toHaveAttribute('id', label?.getAttribute('for'));
443
- });
444
-
445
- it('associates label with switch via htmlFor and id', () => {
446
- const { container } = render(
447
- <Checkbox kind="switch" checked={false}>
448
- Switch label
449
- </Checkbox>,
450
- );
451
- const label = container.querySelector('label');
452
- const switchEl = screen.getByRole('switch');
453
- expect(label).toHaveAttribute('for');
454
- expect(switchEl).toHaveAttribute('id', label?.getAttribute('for'));
455
- });
456
- });
457
-
458
- // ─── Spread props ────────────────────────────────────────────────
459
-
460
- describe('spread props', () => {
461
- it('forwards additional HTML attributes to the label', () => {
462
- const { container } = render(
463
- <Checkbox checked={false} data-testid="checkbox-label" title="My checkbox">
464
- Label
465
- </Checkbox>,
466
- );
467
- const label = container.querySelector('label');
468
- expect(label).toHaveAttribute('data-testid', 'checkbox-label');
469
- expect(label).toHaveAttribute('title', 'My checkbox');
470
- });
471
-
472
- it('forwards style prop to the label', () => {
473
- const { container } = render(
474
- <Checkbox checked={false} style={{ marginTop: '10px' }}>
475
- Label
476
- </Checkbox>,
477
- );
478
- const label = container.querySelector('label');
479
- expect(label).toHaveStyle({ marginTop: '10px' });
480
- });
481
- });
482
-
483
- // ─── Uncontrolled mode ───────────────────────────────────────────
484
-
485
- describe('uncontrolled mode', () => {
486
- it('renders unchecked when defaultChecked is false', () => {
487
- render(<Checkbox defaultChecked={false}>Label</Checkbox>);
488
- expect(screen.getByRole('checkbox')).not.toBeChecked();
489
- });
490
-
491
- it('renders checked when defaultChecked is true', () => {
492
- render(<Checkbox defaultChecked={true}>Label</Checkbox>);
493
- expect(screen.getByRole('checkbox')).toBeChecked();
494
- });
495
-
496
- it('toggles without external state', async () => {
497
- const { user } = render(<Checkbox defaultChecked={false}>Toggle</Checkbox>);
498
-
499
- const checkbox = screen.getByRole('checkbox');
500
- expect(checkbox).not.toBeChecked();
501
-
502
- await user.click(checkbox);
503
- expect(checkbox).toBeChecked();
504
-
505
- await user.click(checkbox);
506
- expect(checkbox).not.toBeChecked();
507
- });
508
-
509
- it('calls onChange in uncontrolled mode', async () => {
510
- const handleChange = vi.fn();
511
- const { user } = render(
512
- <Checkbox defaultChecked={false} onChange={handleChange}>
513
- Toggle
514
- </Checkbox>,
515
- );
516
-
517
- await user.click(screen.getByRole('checkbox'));
518
- expect(handleChange).toHaveBeenCalledWith(true);
519
- });
520
-
521
- it('toggles switch kind without external state', async () => {
522
- const { user } = render(
523
- <Checkbox kind="switch" defaultChecked={false}>
524
- Switch
525
- </Checkbox>,
526
- );
527
-
528
- const switchEl = screen.getByRole('switch');
529
- expect(switchEl).not.toBeChecked();
530
-
531
- await user.click(switchEl);
532
- expect(switchEl).toBeChecked();
533
- });
534
- });
535
-
536
- // ─── Edge cases ──────────────────────────────────────────────────
537
-
538
- describe('edge cases', () => {
539
- it('handles multiple rapid toggles', async () => {
540
- const handleChange = vi.fn();
541
- const { user } = render(<ControlledCheckbox onChange={handleChange}>Rapid</ControlledCheckbox>);
542
-
543
- const checkbox = screen.getByRole('checkbox');
544
- await user.click(checkbox);
545
- await user.click(checkbox);
546
- await user.click(checkbox);
547
-
548
- expect(checkbox).toBeChecked();
549
- });
550
-
551
- it('renders with no onChange handler without crashing', () => {
552
- expect(() => {
553
- render(<Checkbox checked={false}>No handler</Checkbox>);
554
- }).not.toThrow();
555
- });
556
-
557
- it('renders with checked=true and no onChange without crashing', () => {
558
- expect(() => {
559
- render(<Checkbox checked={true}>Static checked</Checkbox>);
560
- }).not.toThrow();
561
- });
562
-
563
- it('handles empty string children', () => {
564
- render(<Checkbox checked={false}>{''}</Checkbox>);
565
- expect(screen.getByRole('checkbox')).toBeInTheDocument();
566
- });
567
-
568
- it('handles number children', () => {
569
- render(<Checkbox checked={false}>{42}</Checkbox>);
570
- expect(screen.getByText('42')).toBeInTheDocument();
571
- });
572
-
573
- it('applies both disabled and checked classes simultaneously', () => {
574
- const { container } = render(
575
- <Checkbox checked={true} disabled>
576
- Both
577
- </Checkbox>,
578
- );
579
- const label = container.querySelector('label');
580
- expect(label).toHaveClass('disabled');
581
- expect(label).toHaveClass('checked');
582
- });
583
- });
584
- });