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,153 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/nextjs-vite';
2
- import { createElement, useState } from 'react';
3
- import { Text } from '../text';
4
- import { Select } from './Select';
5
-
6
- const meta: Meta<typeof Select> = {
7
- title: 'Inputs/Select',
8
- component: Select,
9
- tags: ['autodocs'],
10
- };
11
-
12
- export default meta;
13
- type Story = StoryObj<typeof Select>;
14
-
15
- const render: Story['render'] = function Render(args) {
16
- const [selected, setSelected] = useState<string | null>(null);
17
-
18
- const [selectedMultiple, setSelectedMultiple] = useState<string[] | null>([]);
19
- return createElement(
20
- 'div',
21
- {
22
- style: { minHeight: '400px' },
23
- },
24
- createElement(
25
- Select,
26
- args.multiple
27
- ? {
28
- ...args,
29
- value: selectedMultiple,
30
- onChange: (value: string[] | null) => setSelectedMultiple(value),
31
- }
32
- : {
33
- ...args,
34
- value: selected,
35
- onChange: (value: string | null) => setSelected(value),
36
- },
37
- ),
38
- );
39
- };
40
-
41
- export const Default: Story = {
42
- args: {
43
- label: 'Release type',
44
- description: 'Select the type of release you want to create.',
45
- options: [
46
- { id: '1', node: 'Single' },
47
- { id: '2', node: 'EP' },
48
- { id: '3', node: 'Album (LP)' },
49
- { id: '4', node: 'Compilation' },
50
- { id: '5', node: 'Mixtape' },
51
- { id: '6', node: 'Live album' },
52
- { id: '7', node: 'Remix album' },
53
- { id: '8', node: 'Soundtrack' },
54
- { id: '9', node: 'Demo' },
55
- { id: '10', node: 'Reissue' },
56
- { id: '11', node: 'Promo' },
57
- { id: '12', node: 'Other' },
58
- ],
59
- },
60
- render,
61
- };
62
-
63
- export const WithCustomNodes: Story = {
64
- args: {
65
- hasOptionBorder: true,
66
- options: [
67
- {
68
- id: '1',
69
- node: createElement(Text, {
70
- as: 'span',
71
- kind: 'displaySmall',
72
- children: 'Option 1',
73
- }),
74
- },
75
- {
76
- id: '2',
77
- node: createElement(Text, {
78
- as: 'span',
79
- kind: 'paragraphXXSmall',
80
- children: 'Option 2',
81
- }),
82
- },
83
- {
84
- id: '3',
85
- node: createElement(Text, {
86
- as: 'span',
87
- kind: 'labelXLarge',
88
- children: 'Option 3',
89
- }),
90
- },
91
- ],
92
- },
93
- render,
94
- };
95
-
96
- export const Radio: Story = {
97
- args: {
98
- label: 'Release type',
99
- description: 'Select the type of release you want to create.',
100
- kind: 'radio',
101
- options: [
102
- { id: '1', node: 'Single' },
103
- { id: '2', node: 'EP' },
104
- { id: '3', node: 'Album (LP)' },
105
- { id: '4', node: 'Compilation' },
106
- ],
107
- },
108
- render,
109
- };
110
-
111
- export const Card: Story = {
112
- args: {
113
- label: 'Release type',
114
- description: 'Select the type of release you want to create.',
115
- kind: 'card',
116
- options: [
117
- { id: '1', node: 'Single' },
118
- { id: '2', node: 'EP' },
119
- { id: '3', node: 'Album (LP)' },
120
- { id: '4', node: 'Compilation' },
121
- ],
122
- },
123
- render,
124
- };
125
-
126
- export const Multiple: Story = {
127
- args: {
128
- label: 'Release type',
129
- description: 'Select the type of release you want to create.',
130
- options: [
131
- { id: '1', node: 'Single' },
132
- { id: '2', node: 'EP' },
133
- { id: '3', node: 'Album (LP)' },
134
- ],
135
- multiple: true,
136
- multipleItemsName: 'releases',
137
- },
138
- render,
139
- };
140
-
141
- export const Segmented: Story = {
142
- args: {
143
- label: 'Donation',
144
- description: 'Select the frequency of your donation.',
145
- kind: 'segmented',
146
- options: [
147
- { id: '1', node: 'One Time' },
148
- { id: '2', node: 'Monthly' },
149
- { id: '3', node: 'Quarterly' },
150
- ],
151
- },
152
- render,
153
- };
@@ -1,341 +0,0 @@
1
- import { useState } from 'react';
2
- import { render, screen, waitFor } from '../../test/render';
3
- import type { Option } from './Select';
4
- import { Select } from './Select';
5
-
6
- const options: Option[] = [
7
- { id: '1', node: 'Single' },
8
- { id: '2', node: 'EP' },
9
- { id: '3', node: 'Album (LP)' },
10
- { id: '4', node: 'Compilation' },
11
- ];
12
-
13
- function ControlledSelect(props: Partial<React.ComponentProps<typeof Select>>) {
14
- const [value, setValue] = useState<string | null>((props.value as string | null) ?? null);
15
- return (
16
- <Select
17
- options={options}
18
- value={value}
19
- onChange={(v) => {
20
- setValue(v);
21
- (props.onChange as (v: string | null) => void)?.(v);
22
- }}
23
- {...props}
24
- />
25
- );
26
- }
27
-
28
- function ControlledMultiSelect(props: Partial<React.ComponentProps<typeof Select>> & { initialValue?: string[] }) {
29
- const [value, setValue] = useState<string[]>(props.initialValue ?? []);
30
- return (
31
- <Select
32
- options={options}
33
- value={value}
34
- onChange={(v) => {
35
- setValue(v as string[]);
36
- (props.onChange as (v: string[] | null) => void)?.(v as string[] | null);
37
- }}
38
- multiple
39
- {...props}
40
- />
41
- );
42
- }
43
-
44
- describe('Select', () => {
45
- describe('listbox kind (default)', () => {
46
- it('renders with placeholder text', () => {
47
- render(<Select options={options} placeholder="Pick one" />);
48
- expect(screen.getByText('Pick one')).toBeInTheDocument();
49
- });
50
-
51
- it('renders default placeholder when none provided', () => {
52
- render(<Select options={options} />);
53
- expect(screen.getByText('Select an option')).toBeInTheDocument();
54
- });
55
-
56
- it('renders label and description via Field wrapper', () => {
57
- render(<Select options={options} label="Release type" description="Choose a release type." />);
58
- expect(screen.getByText('Release type')).toBeInTheDocument();
59
- expect(screen.getByText('Choose a release type.')).toBeInTheDocument();
60
- });
61
-
62
- it('shows selected value text in the button', () => {
63
- render(<Select options={options} value="2" />);
64
- expect(screen.getByText('EP')).toBeInTheDocument();
65
- });
66
-
67
- it('opens the dropdown and displays options on click', async () => {
68
- const { user } = render(<ControlledSelect />);
69
- await user.click(screen.getByText('Select an option'));
70
-
71
- await waitFor(() => {
72
- expect(screen.getByText('Single')).toBeInTheDocument();
73
- expect(screen.getByText('EP')).toBeInTheDocument();
74
- expect(screen.getByText('Album (LP)')).toBeInTheDocument();
75
- expect(screen.getByText('Compilation')).toBeInTheDocument();
76
- });
77
- });
78
-
79
- it('selects an option and calls onChange', async () => {
80
- const handleChange = vi.fn();
81
- const { user } = render(<ControlledSelect onChange={handleChange} />);
82
-
83
- await user.click(screen.getByText('Select an option'));
84
- await waitFor(() => {
85
- expect(screen.getByText('EP')).toBeInTheDocument();
86
- });
87
-
88
- await user.click(screen.getByText('EP'));
89
- expect(handleChange).toHaveBeenCalledWith('2');
90
- });
91
-
92
- it('displays selected option text after selection', async () => {
93
- const { user } = render(<ControlledSelect />);
94
-
95
- await user.click(screen.getByText('Select an option'));
96
- await waitFor(() => {
97
- expect(screen.getByText('Album (LP)')).toBeInTheDocument();
98
- });
99
-
100
- await user.click(screen.getByText('Album (LP)'));
101
-
102
- await waitFor(() => {
103
- const button = screen.getByRole('button', { expanded: false });
104
- expect(button).toHaveTextContent('Album (LP)');
105
- });
106
- });
107
-
108
- it('sets aria-disabled and status data attribute when disabled', () => {
109
- render(<Select options={options} disabled placeholder="Pick one" />);
110
- const button = screen.getByText('Pick one').closest('button');
111
- expect(button).toHaveAttribute('aria-disabled', 'true');
112
- expect(button).toHaveAttribute('data-status', 'disabled');
113
- });
114
-
115
- it('applies error status data attribute', () => {
116
- render(<Select options={options} status="error" placeholder="Pick one" />);
117
- const button = screen.getByText('Pick one').closest('button');
118
- expect(button).toHaveAttribute('data-status', 'error');
119
- });
120
-
121
- it('applies success status data attribute', () => {
122
- render(<Select options={options} status="success" placeholder="Pick one" />);
123
- const button = screen.getByText('Pick one').closest('button');
124
- expect(button).toHaveAttribute('data-status', 'success');
125
- });
126
- });
127
-
128
- describe('multi-select', () => {
129
- it('shows placeholder when no items selected', () => {
130
- render(<Select options={options} multiple value={[]} placeholder="Select items" />);
131
- expect(screen.getByText('Select items')).toBeInTheDocument();
132
- });
133
-
134
- it('shows single item text when one item selected', () => {
135
- render(<Select options={options} multiple value={['1']} />);
136
- expect(screen.getByText('Single')).toBeInTheDocument();
137
- });
138
-
139
- it('shows count when multiple items selected', () => {
140
- render(<Select options={options} multiple value={['1', '2']} />);
141
- expect(screen.getByText('2 items')).toBeInTheDocument();
142
- });
143
-
144
- it('shows "All" text when all items selected', () => {
145
- render(<Select options={options} multiple value={['1', '2', '3', '4']} />);
146
- expect(screen.getByText('All items')).toBeInTheDocument();
147
- });
148
-
149
- it('uses custom multipleItemsName', () => {
150
- render(<Select options={options} multiple value={['1', '2']} multipleItemsName="releases" />);
151
- expect(screen.getByText('2 releases')).toBeInTheDocument();
152
- });
153
-
154
- it('shows "All <custom>" when all selected with custom name', () => {
155
- render(<Select options={options} multiple value={['1', '2', '3', '4']} multipleItemsName="releases" />);
156
- expect(screen.getByText('All releases')).toBeInTheDocument();
157
- });
158
-
159
- it('calls onChange with updated array on selection', async () => {
160
- const handleChange = vi.fn();
161
- const { user } = render(<ControlledMultiSelect onChange={handleChange} />);
162
-
163
- await user.click(screen.getByText('Select an option'));
164
- await waitFor(() => {
165
- expect(screen.getByText('Single')).toBeInTheDocument();
166
- });
167
-
168
- await user.click(screen.getByText('Single'));
169
- expect(handleChange).toHaveBeenCalled();
170
- });
171
- });
172
-
173
- describe('radio kind', () => {
174
- it('renders radio options', () => {
175
- render(<Select options={options} kind="radio" />);
176
- expect(screen.getByText('Single')).toBeInTheDocument();
177
- expect(screen.getByText('EP')).toBeInTheDocument();
178
- expect(screen.getByText('Album (LP)')).toBeInTheDocument();
179
- expect(screen.getByText('Compilation')).toBeInTheDocument();
180
- });
181
-
182
- it('renders with a radiogroup role', () => {
183
- render(<Select options={options} kind="radio" />);
184
- expect(screen.getByRole('radiogroup')).toBeInTheDocument();
185
- });
186
-
187
- it('renders radio items with radio role', () => {
188
- render(<Select options={options} kind="radio" />);
189
- const radios = screen.getAllByRole('radio');
190
- expect(radios).toHaveLength(4);
191
- });
192
-
193
- it('calls onChange when a radio option is clicked', async () => {
194
- const handleChange = vi.fn();
195
- const { user } = render(<ControlledSelect kind="radio" onChange={handleChange} />);
196
-
197
- await user.click(screen.getByText('EP'));
198
- expect(handleChange).toHaveBeenCalledWith('2');
199
- });
200
- });
201
-
202
- describe('card kind', () => {
203
- it('renders card options', () => {
204
- render(<Select options={options} kind="card" />);
205
- expect(screen.getByText('Single')).toBeInTheDocument();
206
- expect(screen.getByText('EP')).toBeInTheDocument();
207
- });
208
-
209
- it('calls onChange when a card option is clicked', async () => {
210
- const handleChange = vi.fn();
211
- const { user } = render(<ControlledSelect kind="card" onChange={handleChange} />);
212
-
213
- await user.click(screen.getByText('EP'));
214
- expect(handleChange).toHaveBeenCalledWith('2');
215
- });
216
- });
217
-
218
- describe('segmented kind', () => {
219
- it('renders segmented options', () => {
220
- render(<Select options={options} kind="segmented" />);
221
- expect(screen.getByText('Single')).toBeInTheDocument();
222
- expect(screen.getByText('EP')).toBeInTheDocument();
223
- });
224
-
225
- it('calls onChange when a segmented option is clicked', async () => {
226
- const handleChange = vi.fn();
227
- const { user } = render(<ControlledSelect kind="segmented" onChange={handleChange} />);
228
-
229
- await user.click(screen.getByText('EP'));
230
- expect(handleChange).toHaveBeenCalledWith('2');
231
- });
232
- });
233
-
234
- describe('uncontrolled mode', () => {
235
- it('renders with defaultValue', () => {
236
- render(<Select options={options} defaultValue="2" />);
237
- expect(screen.getByText('EP')).toBeInTheDocument();
238
- });
239
-
240
- it('renders with placeholder when no defaultValue', () => {
241
- render(<Select options={options} placeholder="Pick one" />);
242
- expect(screen.getByText('Pick one')).toBeInTheDocument();
243
- });
244
-
245
- it('updates selection without external state (listbox)', async () => {
246
- const { user } = render(<Select options={options} defaultValue={null} />);
247
-
248
- await user.click(screen.getByText('Select an option'));
249
- await waitFor(() => {
250
- expect(screen.getByText('EP')).toBeInTheDocument();
251
- });
252
- await user.click(screen.getByText('EP'));
253
-
254
- await waitFor(() => {
255
- const button = screen.getByRole('button', { expanded: false });
256
- expect(button).toHaveTextContent('EP');
257
- });
258
- });
259
-
260
- it('calls onChange in uncontrolled mode', async () => {
261
- const handleChange = vi.fn();
262
- const { user } = render(<Select options={options} defaultValue={null} onChange={handleChange} />);
263
-
264
- await user.click(screen.getByText('Select an option'));
265
- await waitFor(() => {
266
- expect(screen.getByText('EP')).toBeInTheDocument();
267
- });
268
- await user.click(screen.getByText('EP'));
269
-
270
- expect(handleChange).toHaveBeenCalledWith('2');
271
- });
272
-
273
- it('updates selection without external state (radio)', async () => {
274
- const { user } = render(<Select options={options} kind="radio" defaultValue={null} />);
275
-
276
- await user.click(screen.getByText('EP'));
277
-
278
- await waitFor(() => {
279
- const radio = screen.getByRole('radio', { name: 'EP' });
280
- expect(radio).toHaveAttribute('aria-checked', 'true');
281
- });
282
- });
283
-
284
- it('updates selection without external state (card)', async () => {
285
- const { user } = render(<Select options={options} kind="card" defaultValue={null} />);
286
-
287
- await user.click(screen.getByText('EP'));
288
-
289
- await waitFor(() => {
290
- const radio = screen.getByRole('radio', { name: 'EP' });
291
- expect(radio).toHaveAttribute('aria-checked', 'true');
292
- });
293
- });
294
-
295
- it('updates selection without external state (segmented)', async () => {
296
- const { user } = render(<Select options={options} kind="segmented" defaultValue={null} />);
297
-
298
- // Segmented defaults to first option when no value
299
- const firstRadio = screen.getByRole('radio', { name: 'Single' });
300
- expect(firstRadio).toHaveAttribute('aria-checked', 'true');
301
-
302
- await user.click(screen.getByText('EP'));
303
-
304
- await waitFor(() => {
305
- const radio = screen.getByRole('radio', { name: 'EP' });
306
- expect(radio).toHaveAttribute('aria-checked', 'true');
307
- });
308
- });
309
- });
310
-
311
- describe('onOpenChange', () => {
312
- it('calls onOpenChange when the listbox opens', async () => {
313
- const handleOpenChange = vi.fn();
314
- const { user } = render(
315
- <Select options={options} onOpenChange={handleOpenChange} placeholder="Pick one" />,
316
- );
317
-
318
- await user.click(screen.getByText('Pick one'));
319
-
320
- await waitFor(() => {
321
- expect(handleOpenChange).toHaveBeenCalledWith(true);
322
- });
323
- });
324
-
325
- it('calls onOpenChange when the listbox closes', async () => {
326
- const handleOpenChange = vi.fn();
327
- const { user } = render(<ControlledSelect onOpenChange={handleOpenChange} />);
328
-
329
- await user.click(screen.getByText('Select an option'));
330
- await waitFor(() => {
331
- expect(screen.getByText('EP')).toBeInTheDocument();
332
- });
333
-
334
- await user.click(screen.getByText('EP'));
335
-
336
- await waitFor(() => {
337
- expect(handleOpenChange).toHaveBeenCalledWith(false);
338
- });
339
- });
340
- });
341
- });