paris 0.23.1 → 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 +16 -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 -548
  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,148 +0,0 @@
1
- import { faPlus } from '@fortawesome/free-solid-svg-icons';
2
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
- import { clsx } from 'clsx';
4
- import type { ComponentPropsWithoutRef, FC, ReactNode } from 'react';
5
- import { useState } from 'react';
6
- import { renderEnhancer } from '../../helpers/renderEnhancer';
7
- import type { Enhancer } from '../../types/Enhancer';
8
- import { ChevronRight, Icon } from '../icon';
9
- import { TextWhenString } from '../utility';
10
- import styles from './Accordion.module.scss';
11
-
12
- export type AccordionProps = {
13
- /** The title of the Accordion. */
14
- title?: ReactNode;
15
- /**
16
- * The style of the Accordion.
17
- * @default default
18
- */
19
- kind?: 'default' | 'card';
20
- /**
21
- * The size of the Accordion. Only affects kind="card".
22
- * @default small
23
- */
24
- size?: 'small' | 'large';
25
- /**
26
- * Overrides the toggle icon. Accepts any icon (an `Icon` element or a render
27
- * function `({ size }) => ReactNode`). When set, it replaces the default
28
- * plus/chevron and rotates on open/close like the built-in chevron.
29
- */
30
- icon?: Enhancer;
31
- /** Whether the Accordion is open. If provided, the Accordion will be a controlled component. */
32
- isOpen?: boolean;
33
- /** A handler for when the Accordion state changes. */
34
- onOpenChange?: (open: boolean) => void | Promise<void>;
35
- /** The collapsible contents of the Accordion. */
36
- children?: ReactNode;
37
- overrides?: {
38
- container?: ComponentPropsWithoutRef<'div'>;
39
- titleContainer?: ComponentPropsWithoutRef<'div'>;
40
- dropdownContainer?: ComponentPropsWithoutRef<'div'>;
41
- dropdownContent?: ComponentPropsWithoutRef<'div'>;
42
- };
43
- };
44
-
45
- /**
46
- * A Accordion component.
47
- *
48
- * <hr />
49
- *
50
- * To use this component, import it as follows:
51
- *
52
- * ```js
53
- * import { Accordion } from 'paris/accordion';
54
- * ```
55
- * @constructor
56
- */
57
- export const Accordion: FC<AccordionProps> = ({
58
- title,
59
- kind = 'default',
60
- size = 'small',
61
- icon,
62
- isOpen,
63
- onOpenChange,
64
- children,
65
- overrides,
66
- }) => {
67
- const [openState, setOpenState] = useState(isOpen ?? false);
68
-
69
- // Determine if component is controlled or uncontrolled
70
- const isControlled = isOpen !== undefined;
71
- const open = isControlled ? isOpen : openState;
72
-
73
- // Unified toggle handler that works for both controlled and uncontrolled modes
74
- const handleToggle = () => {
75
- const newOpen = !open;
76
-
77
- // Update internal state only if uncontrolled
78
- if (!isControlled) {
79
- setOpenState(newOpen);
80
- }
81
-
82
- // Always call the callback if provided
83
- onOpenChange?.(newOpen);
84
- };
85
-
86
- return (
87
- <div
88
- {...overrides?.container}
89
- className={clsx(styles[kind], open && styles.open, overrides?.container?.className)}
90
- >
91
- <div
92
- onClick={handleToggle}
93
- onKeyDown={(e) => {
94
- if (e.key === 'Enter' || e.key === ' ') {
95
- e.preventDefault();
96
- handleToggle();
97
- }
98
- }}
99
- role="button"
100
- tabIndex={0}
101
- {...overrides?.titleContainer}
102
- data-state={open ? 'open' : 'closed'}
103
- className={clsx(overrides?.titleContainer?.className, styles.title, styles[size], open && styles.open)}
104
- >
105
- <TextWhenString kind="paragraphSmall" weight="medium">
106
- {title}
107
- </TextWhenString>
108
- {icon ? (
109
- <span className={clsx(styles.toggleIcon, open && styles.open)}>{renderEnhancer(icon, 16)}</span>
110
- ) : kind === 'default' ? (
111
- <div className={styles.plusIcon}>
112
- <FontAwesomeIcon icon={faPlus} className={clsx(open && styles.open)} />
113
- </div>
114
- ) : (
115
- <Icon icon={ChevronRight} size={16} className={clsx(styles.chevron, open && styles.open)} />
116
- )}
117
- </div>
118
- {/*
119
- * Collapse uses the CSS grid-rows trick (`1fr` → `0fr`) instead of
120
- * animating `height: auto` via JS. JS height-auto animations flash an
121
- * intermediate layout state on open/close that causes scrollable
122
- * ancestors to clamp `scrollTop` to 0 in the first paint frame — a
123
- * visible scroll-snap before the animation starts.
124
- */}
125
- <div
126
- aria-hidden={!open}
127
- {...overrides?.dropdownContainer}
128
- className={clsx(styles.dropdown, open && styles.open, overrides?.dropdownContainer?.className)}
129
- >
130
- {/*
131
- * dropdownClip is the grid item. It owns `min-height: 0` and
132
- * `overflow: hidden` so the parent's `grid-template-rows: 0fr`
133
- * can fully collapse to 0 height. Padding/background-color
134
- * stay on .dropdownContent (one level deeper) so they don't
135
- * extend the grid item's box when closed.
136
- */}
137
- <div className={styles.dropdownClip}>
138
- <div
139
- {...overrides?.dropdownContent}
140
- className={clsx(styles.dropdownContent, styles[size], overrides?.dropdownContent?.className)}
141
- >
142
- <TextWhenString kind="paragraphXSmall">{children}</TextWhenString>
143
- </div>
144
- </div>
145
- </div>
146
- </div>
147
- );
148
- };
@@ -1,119 +0,0 @@
1
- .root {
2
- color: var(--pte-new-colors-contentPrimary);
3
- border: 1px solid var(--pte-new-colors-borderStrong);
4
- border-radius: var(--pte-new-borders-radius-roundedMedium);
5
- background: var(--pte-new-colors-surfacePrimary);
6
- overflow: hidden;
7
- transition: var(--pte-animations-interaction);
8
-
9
- &.open {
10
- border-color: var(--pte-new-colors-borderUltrastrong);
11
- }
12
- }
13
-
14
- .header {
15
- padding: 10px 12px;
16
- display: flex;
17
- justify-content: space-between;
18
- align-items: center;
19
- gap: 10px;
20
- background-color: var(--pte-new-colors-overlayWhiteSubtle);
21
- cursor: pointer;
22
- transition: var(--pte-animations-interaction);
23
-
24
- &.open {
25
- background-color: var(--pte-new-colors-overlayMedium);
26
- border-bottom: 1px solid var(--pte-new-colors-borderStrong);
27
- }
28
-
29
- &:hover {
30
- background-color: var(--pte-new-colors-overlayStrong);
31
- }
32
- }
33
-
34
- .headerContent {
35
- flex: 1;
36
- min-width: 0;
37
- }
38
-
39
- .headerEnd {
40
- display: flex;
41
- align-items: center;
42
- gap: 8px;
43
- flex-shrink: 0;
44
- }
45
-
46
- .chevron {
47
- transition: transform var(--pte-animations-duration-gradual) var(--pte-animations-timing-easeInOutExpo);
48
- transform: rotate(90deg);
49
-
50
- &.open {
51
- transform: rotate(-90deg);
52
- }
53
- }
54
-
55
- .dropdown {
56
- display: grid;
57
- grid-template-rows: 0fr;
58
- opacity: 0;
59
- transition:
60
- grid-template-rows 800ms cubic-bezier(0.87, 0, 0.13, 1),
61
- opacity 800ms cubic-bezier(0.87, 0, 0.13, 1);
62
-
63
- &.open {
64
- grid-template-rows: 1fr;
65
- opacity: 1;
66
- }
67
- }
68
-
69
- .dropdownContent {
70
- min-height: 0;
71
- overflow: hidden;
72
- display: flex;
73
- flex-direction: column;
74
- padding: 0;
75
- gap: 0;
76
- }
77
-
78
- .option {
79
- display: flex;
80
- align-items: center;
81
- gap: 10px;
82
- padding: 8px 14px;
83
- border-bottom: 0.5px solid var(--pte-new-colors-borderMedium);
84
- background: transparent;
85
- color: inherit;
86
- cursor: pointer;
87
- transition: background var(--pte-animations-duration-instant) var(--pte-animations-timing-easeInOutExpo);
88
-
89
- &:last-of-type {
90
- border-bottom: none;
91
- }
92
-
93
- &[data-selected='true'] {
94
- background: var(--pte-new-colors-overlaySubtle);
95
- }
96
-
97
- &:hover {
98
- background: var(--pte-new-colors-overlayMedium);
99
- }
100
-
101
- &:disabled {
102
- opacity: 0.4;
103
- cursor: not-allowed;
104
-
105
- &:hover {
106
- background: transparent;
107
- }
108
- }
109
-
110
- .check {
111
- padding: 4px;
112
- }
113
- }
114
-
115
- .optionContent {
116
- flex: 1;
117
- text-align: left;
118
- min-width: 0;
119
- }
@@ -1,38 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/nextjs-vite';
2
- import { AccordionSelect } from './AccordionSelect';
3
-
4
- const meta: Meta<typeof AccordionSelect> = {
5
- title: 'Inputs/AccordionSelect',
6
- component: AccordionSelect,
7
- tags: ['autodocs'],
8
- };
9
-
10
- export default meta;
11
- type Story = StoryObj<typeof AccordionSelect>;
12
-
13
- const options = [
14
- { id: 'champagne', node: 'In an alleyway, drinking champagne' },
15
- { id: 'rooftop', node: 'On a rooftop, watching the sunset' },
16
- { id: 'garden', node: 'In a garden, under the stars' },
17
- ];
18
-
19
- export const Default: Story = {
20
- args: {
21
- options,
22
- value: 'champagne',
23
- },
24
- };
25
-
26
- export const NoSelection: Story = {
27
- args: {
28
- options,
29
- placeholder: 'Where were we?',
30
- },
31
- };
32
-
33
- export const WithDisabledOption: Story = {
34
- args: {
35
- options: [...options, { id: 'nowhere', node: 'Nowhere, it was all a dream', disabled: true }],
36
- value: 'champagne',
37
- },
38
- };
@@ -1,327 +0,0 @@
1
- import { useState } from 'react';
2
- import { render, screen, waitFor, within } from '../../test/render';
3
- import type { AccordionSelectOption } from './AccordionSelect';
4
- import { AccordionSelect } from './AccordionSelect';
5
-
6
- const options: AccordionSelectOption[] = [
7
- { id: 'champagne', node: 'In an alleyway, drinking champagne' },
8
- { id: 'rooftop', node: 'On a rooftop, watching the sunset' },
9
- { id: 'garden', node: 'In a garden, under the stars' },
10
- ];
11
-
12
- function ControlledAccordionSelect(props: Partial<React.ComponentProps<typeof AccordionSelect>>) {
13
- const [value, setValue] = useState<string | null>((props.value as string | null) ?? null);
14
-
15
- return (
16
- <AccordionSelect
17
- options={options}
18
- value={value}
19
- onChange={(opt) => {
20
- setValue(opt.id);
21
- props.onChange?.(opt);
22
- }}
23
- {...props}
24
- />
25
- );
26
- }
27
-
28
- describe('AccordionSelect', () => {
29
- it('renders with placeholder when no value is selected', () => {
30
- render(<AccordionSelect options={options} placeholder="Where were we?" />);
31
- expect(screen.getByText('Where were we?')).toBeInTheDocument();
32
- });
33
-
34
- it('renders default placeholder when none is provided', () => {
35
- render(<AccordionSelect options={options} />);
36
- expect(screen.getByText('Select an option')).toBeInTheDocument();
37
- });
38
-
39
- it('displays the selected option in the header', () => {
40
- render(<AccordionSelect options={options} value="champagne" />);
41
- // Option text also appears in the collapsed-but-mounted dropdown list, so scope to the header
42
- expect(within(screen.getByRole('button')).getByText('In an alleyway, drinking champagne')).toBeInTheDocument();
43
- });
44
-
45
- it('expands to show all options when header is clicked', async () => {
46
- const { user } = render(<AccordionSelect options={options} value="champagne" />);
47
-
48
- await user.click(screen.getByRole('button'));
49
-
50
- await waitFor(() => {
51
- expect(screen.getByText('On a rooftop, watching the sunset')).toBeInTheDocument();
52
- expect(screen.getByText('In a garden, under the stars')).toBeInTheDocument();
53
- });
54
- });
55
-
56
- it('calls onChange when an option is selected', async () => {
57
- const handleChange = vi.fn();
58
- const { user } = render(<ControlledAccordionSelect value="champagne" onChange={handleChange} />);
59
-
60
- await user.click(screen.getByRole('button', { name: /champagne/i }));
61
-
62
- await waitFor(() => {
63
- expect(screen.getByText('On a rooftop, watching the sunset')).toBeInTheDocument();
64
- });
65
-
66
- await user.click(screen.getByText('On a rooftop, watching the sunset'));
67
-
68
- expect(handleChange).toHaveBeenCalledWith(
69
- expect.objectContaining({ id: 'rooftop', node: 'On a rooftop, watching the sunset' }),
70
- );
71
- });
72
-
73
- it('closes the accordion after selection when closeOnSelect is true (default)', async () => {
74
- const { user } = render(<ControlledAccordionSelect value="champagne" />);
75
-
76
- await user.click(screen.getByRole('button', { name: /champagne/i }));
77
- await waitFor(() => {
78
- expect(screen.getByText('On a rooftop, watching the sunset')).toBeInTheDocument();
79
- });
80
-
81
- await user.click(screen.getByText('On a rooftop, watching the sunset'));
82
-
83
- await waitFor(() => {
84
- expect(screen.queryByRole('button', { name: /garden/i })).not.toBeInTheDocument();
85
- });
86
- });
87
-
88
- it('keeps the accordion open after selection when closeOnSelect is false', async () => {
89
- const { user } = render(<ControlledAccordionSelect value="champagne" closeOnSelect={false} />);
90
-
91
- await user.click(screen.getByRole('button', { name: /champagne/i }));
92
- await waitFor(() => {
93
- expect(screen.getByText('On a rooftop, watching the sunset')).toBeInTheDocument();
94
- });
95
-
96
- await user.click(screen.getByText('On a rooftop, watching the sunset'));
97
-
98
- expect(screen.getByText('In a garden, under the stars')).toBeInTheDocument();
99
- });
100
-
101
- it('toggles open and closed on header click', async () => {
102
- const { user } = render(<AccordionSelect options={options} value="champagne" />);
103
-
104
- const header = screen.getByRole('button');
105
-
106
- // Open
107
- await user.click(header);
108
- await waitFor(() => {
109
- expect(screen.getByText('On a rooftop, watching the sunset')).toBeInTheDocument();
110
- });
111
-
112
- // Close
113
- await user.click(header);
114
- await waitFor(() => {
115
- expect(screen.queryByRole('button', { name: /rooftop/i })).not.toBeInTheDocument();
116
- });
117
- });
118
-
119
- it('supports keyboard interaction on the header (Enter)', async () => {
120
- const { user } = render(<AccordionSelect options={options} value="champagne" />);
121
-
122
- const header = screen.getByRole('button');
123
- header.focus();
124
- await user.keyboard('{Enter}');
125
-
126
- await waitFor(() => {
127
- expect(screen.getByText('On a rooftop, watching the sunset')).toBeInTheDocument();
128
- });
129
- });
130
-
131
- it('supports keyboard interaction on the header (Space)', async () => {
132
- const { user } = render(<AccordionSelect options={options} value="champagne" />);
133
-
134
- const header = screen.getByRole('button');
135
- header.focus();
136
- await user.keyboard(' ');
137
-
138
- await waitFor(() => {
139
- expect(screen.getByText('On a rooftop, watching the sunset')).toBeInTheDocument();
140
- });
141
- });
142
-
143
- it('renders disabled options as disabled buttons', async () => {
144
- const disabledOptions = [...options, { id: 'nowhere', node: 'Nowhere, it was all a dream', disabled: true }];
145
- const { user } = render(<AccordionSelect options={disabledOptions} value="champagne" />);
146
-
147
- await user.click(screen.getByRole('button', { name: /champagne/i }));
148
-
149
- await waitFor(() => {
150
- const disabledButton = screen.getByText('Nowhere, it was all a dream').closest('button');
151
- expect(disabledButton).toBeDisabled();
152
- });
153
- });
154
-
155
- it('calls onOpenChange when the accordion opens or closes', async () => {
156
- const handleOpenChange = vi.fn();
157
- const { user, container } = render(
158
- <AccordionSelect options={options} value="champagne" onOpenChange={handleOpenChange} />,
159
- );
160
-
161
- // Click the header (the div[role=button][tabindex=0]) to open
162
- const header = container.querySelector('[role="button"][tabindex="0"]') as HTMLElement;
163
- await user.click(header);
164
- expect(handleOpenChange).toHaveBeenCalledWith(true);
165
-
166
- // Click the header again to close
167
- await user.click(header);
168
- expect(handleOpenChange).toHaveBeenCalledWith(false);
169
- });
170
-
171
- it('renders custom content via renderSelected', () => {
172
- render(
173
- <AccordionSelect
174
- options={options}
175
- value="champagne"
176
- renderSelected={(opt) => <span data-testid="custom-selected">{opt.id}</span>}
177
- />,
178
- );
179
- expect(screen.getByTestId('custom-selected')).toHaveTextContent('champagne');
180
- });
181
-
182
- it('renders custom content via renderOption', async () => {
183
- const { user } = render(
184
- <AccordionSelect
185
- options={options}
186
- value="champagne"
187
- renderOption={(opt, isSelected) => (
188
- <span data-testid={`custom-opt-${opt.id}`}>
189
- {opt.id} {isSelected ? '(selected)' : ''}
190
- </span>
191
- )}
192
- />,
193
- );
194
-
195
- await user.click(screen.getByRole('button'));
196
-
197
- await waitFor(() => {
198
- expect(screen.getByTestId('custom-opt-champagne')).toHaveTextContent('champagne (selected)');
199
- expect(screen.getByTestId('custom-opt-rooftop')).toHaveTextContent('rooftop');
200
- });
201
- });
202
-
203
- it('renders an action at the bottom of the dropdown', async () => {
204
- const { user } = render(
205
- <AccordionSelect options={options} value="champagne" action={<button type="button">Add new</button>} />,
206
- );
207
-
208
- await user.click(screen.getByRole('button', { name: /champagne/i }));
209
-
210
- await waitFor(() => {
211
- expect(screen.getByText('Add new')).toBeInTheDocument();
212
- });
213
- });
214
-
215
- it('renders a label in the header', () => {
216
- render(
217
- <AccordionSelect
218
- options={options}
219
- value="champagne"
220
- label={<span data-testid="header-label">Active</span>}
221
- />,
222
- );
223
- expect(screen.getByTestId('header-label')).toHaveTextContent('Active');
224
- });
225
-
226
- it('closes on outside click when closeOnClickOutside is true (default)', async () => {
227
- const { user } = render(
228
- <div>
229
- <AccordionSelect options={options} value="champagne" />
230
- <button type="button">Outside</button>
231
- </div>,
232
- );
233
-
234
- // Open
235
- await user.click(screen.getByRole('button', { name: /champagne/i }));
236
- await waitFor(() => {
237
- expect(screen.getByText('On a rooftop, watching the sunset')).toBeInTheDocument();
238
- });
239
-
240
- // Click outside
241
- await user.click(screen.getByText('Outside'));
242
- await waitFor(() => {
243
- expect(screen.queryByRole('button', { name: /rooftop/i })).not.toBeInTheDocument();
244
- });
245
- });
246
-
247
- it('respects controlled isOpen prop', () => {
248
- render(<AccordionSelect options={options} value="champagne" isOpen />);
249
- // When isOpen=true, dropdown content should be rendered
250
- expect(screen.getByText('On a rooftop, watching the sunset')).toBeInTheDocument();
251
- expect(screen.getByText('In a garden, under the stars')).toBeInTheDocument();
252
- });
253
-
254
- describe('uncontrolled selection', () => {
255
- it('renders with defaultValue', () => {
256
- render(<AccordionSelect options={options} defaultValue="champagne" />);
257
- expect(
258
- within(screen.getByRole('button')).getByText('In an alleyway, drinking champagne'),
259
- ).toBeInTheDocument();
260
- });
261
-
262
- it('renders with placeholder when no defaultValue', () => {
263
- render(<AccordionSelect options={options} placeholder="Where were we?" />);
264
- expect(screen.getByText('Where were we?')).toBeInTheDocument();
265
- });
266
-
267
- it('updates selection without external state', async () => {
268
- const { user, container } = render(<AccordionSelect options={options} defaultValue="champagne" />);
269
-
270
- const header = container.querySelector('[role="button"][tabindex="0"]') as HTMLElement;
271
- await user.click(header);
272
-
273
- await waitFor(() => {
274
- expect(screen.getByText('On a rooftop, watching the sunset')).toBeInTheDocument();
275
- });
276
-
277
- await user.click(screen.getByText('On a rooftop, watching the sunset'));
278
-
279
- await waitFor(() => {
280
- expect(header).toHaveTextContent('On a rooftop, watching the sunset');
281
- });
282
- });
283
-
284
- it('calls onChange in uncontrolled mode', async () => {
285
- const handleChange = vi.fn();
286
- const { user, container } = render(
287
- <AccordionSelect options={options} defaultValue="champagne" onChange={handleChange} />,
288
- );
289
-
290
- const header = container.querySelector('[role="button"][tabindex="0"]') as HTMLElement;
291
- await user.click(header);
292
-
293
- await waitFor(() => {
294
- expect(screen.getByText('On a rooftop, watching the sunset')).toBeInTheDocument();
295
- });
296
-
297
- await user.click(screen.getByText('On a rooftop, watching the sunset'));
298
-
299
- expect(handleChange).toHaveBeenCalledWith(expect.objectContaining({ id: 'rooftop' }));
300
- });
301
-
302
- it('renders disabled option as selected when defaultValue points to it', async () => {
303
- const disabledOptions = [
304
- ...options,
305
- { id: 'nowhere', node: 'Nowhere, it was all a dream', disabled: true },
306
- ];
307
- const { user, container } = render(<AccordionSelect options={disabledOptions} defaultValue="nowhere" />);
308
-
309
- // Header shows the disabled option's text
310
- const allMatches = screen.getAllByText('Nowhere, it was all a dream');
311
- expect(allMatches.length).toBeGreaterThanOrEqual(1);
312
-
313
- // Open and verify the option button is disabled
314
- const header = container.querySelector('[role="button"][tabindex="0"]') as HTMLElement;
315
- await user.click(header);
316
-
317
- await waitFor(() => {
318
- // Find the option button (not the header text)
319
- const optionButtons = container.querySelectorAll('button[data-selected]');
320
- const disabledButton = Array.from(optionButtons).find((btn) => btn.textContent?.includes('Nowhere'));
321
- expect(disabledButton).toBeTruthy();
322
- expect(disabledButton).toBeDisabled();
323
- expect(disabledButton).toHaveAttribute('data-selected', 'true');
324
- });
325
- });
326
- });
327
- });