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,548 +0,0 @@
1
- 'use client';
2
-
3
- import { Dialog, DialogPanel, DialogTitle, Transition, TransitionChild } from '@headlessui/react';
4
- import type { CSSLength } from '@ssh/csstypes';
5
- import { clsx } from 'clsx';
6
- import { motion } from 'framer-motion';
7
- import {
8
- Children,
9
- type ComponentPropsWithoutRef,
10
- type ReactNode,
11
- useCallback,
12
- useEffect,
13
- useMemo,
14
- useRef,
15
- useState,
16
- } from 'react';
17
- import { Button } from '../button';
18
- import { ChevronLeft, ChevronRight, Close, Icon } from '../icon';
19
- import type { PaginationState } from '../pagination';
20
- import { Text } from '../text';
21
- import { RemoveFromDOM } from '../utility/RemoveFromDOM';
22
- import { TextWhenString } from '../utility/TextWhenString';
23
- import { VisuallyHidden } from '../utility/VisuallyHidden';
24
- import styles from './Drawer.module.scss';
25
- import { DrawerProvider } from './DrawerContext';
26
- import { type DrawerPageProps, isDrawerPageElement } from './DrawerPage';
27
- import { DrawerPageProvider } from './DrawerPageContext';
28
- import { DrawerPaginationProvider } from './DrawerPaginationContext';
29
- import { DrawerProgressBar, type DrawerProgressBarStyleProps } from './DrawerProgressBar';
30
- import { DrawerSlotProvider, useDrawerSlotContext } from './DrawerSlotContext';
31
-
32
- export const DrawerSizePresets = ['content', 'default', 'full', 'fullWithMargin', 'fullOnMobile'] as const;
33
-
34
- export type DrawerPageTransition = 'none' | 'crossfade' | 'slide';
35
-
36
- /** Extract the page ID from a child element (DrawerPage or legacy div-with-key). */
37
- const getChildPageID = (child: ReactNode): string | null => {
38
- if (isDrawerPageElement(child)) return (child as React.ReactElement<DrawerPageProps>).props.id;
39
- if (child != null && typeof child === 'object' && 'key' in child) return child.key as string;
40
- return null;
41
- };
42
-
43
- export type DrawerProps<T extends string[] | readonly string[] = string[]> = {
44
- /**
45
- * The dialog's open state.
46
- */
47
- isOpen?: boolean;
48
- /**
49
- * A callback that will be called when the user closes the drawer by clicking the close button or the backdrop overlay.
50
- *
51
- * @param value {boolean} - The new open state of the dialog.
52
- */
53
- onClose?: (value: boolean) => void | Promise<void>;
54
- /**
55
- * The title of the drawer. Required for accessibility, but can be hidden with the `hideTitle` prop.
56
- *
57
- * If pagination is enabled, the title should instead describe the entire drawer, not any single page. The title will be visually hidden on all pages.
58
- *
59
- * If a string is passed, it will be wrapped in a {@link Text} component with `headingXSmall` styling.
60
- */
61
- title: ReactNode;
62
- /**
63
- * Whether the title should be hidden. If `true`, the title will be visually hidden but still accessible to screen readers.
64
- *
65
- * If you're hiding the title to add a custom header, you may also want to hide the close button and render your own by using the `hideCloseButton` prop.
66
- *
67
- * @default false
68
- */
69
- hideTitle?: boolean;
70
- /**
71
- * Whether the close button should be hidden. This will entirely remove the close button from the DOM, so you should provide your own way to close the dialog.
72
- *
73
- * @default false
74
- */
75
- hideCloseButton?: boolean;
76
- /**
77
- * An optional area that will be rendered at the top of the Drawer next to the title. This is useful for adding actions to the Drawer. Recommended to use {@link Menu} for an action menu.
78
- */
79
- additionalActions?: ReactNode;
80
- /**
81
- * The direction from which the Drawer will appear.
82
- */
83
- from?: 'left' | 'right' | 'top' | 'bottom';
84
- /**
85
- * The size of the Drawer, either a preset or a valid {@link CSSLength} string.
86
- *
87
- * `default` is the default size (360px), with a margin until the screen hits 370px.
88
- * `fullOnMobile` uses the default size (360px) until the mobile breakpoint (480px), where it then fills the viewport.
89
- * `full` is the size of the viewport.
90
- * `fullWithMargin` is the size of the viewport, minus the panel container's padding.
91
- * `content` is the size of the Drawer's content.
92
- *
93
- * @see DrawerSizePresets
94
- * @default 'default'
95
- */
96
- size?: (typeof DrawerSizePresets)[number] | CSSLength;
97
- /**
98
- * An optional pagination state. If provided, each child of the Drawer will be rendered in its own page, and the Drawer will contain back and next buttons that will be used to navigate between pages.
99
- *
100
- * The state should be created using the {@link usePagination} hook and the entire state should be passed to the Drawer. For example:
101
- * ```tsx
102
- * const pagination = usePagination<['step1', 'step2', 'step3']>();
103
- * // ...
104
- * <Drawer pagination={pagination}>
105
- * <DrawerPage id="step1">Step 1</DrawerPage>
106
- * <DrawerPage id="step2">Step 2</DrawerPage>
107
- * <DrawerPage id="step3">Step 3</DrawerPage>
108
- * </Drawer>
109
- *```
110
- *
111
- * @see {@link PaginationState} for more information on the pagination state and available methods
112
- * @see {@link usePagination} for more information on how to create the pagination state
113
- * @default false
114
- */
115
- pagination?: PaginationState<T>;
116
- /**
117
- * The page transition animation style for paginated drawers.
118
- *
119
- * - `'none'` — instant page switch
120
- * - `'crossfade'` — opacity crossfade between pages (default)
121
- * - `'slide'` — direction-aware horizontal slide (Framer Motion)
122
- *
123
- * @default 'crossfade'
124
- */
125
- pageTransition?: DrawerPageTransition;
126
- /**
127
- * Show a progress bar at the top of the bottom panel. Requires `pagination` to be set.
128
- * The bar auto-fills based on the current page position.
129
- *
130
- * Pass `true` for defaults, or an object with `fill`, `track`, and `height` overrides.
131
- *
132
- * For explicit percentage control, use `<DrawerProgressBar value={75} />` directly instead.
133
- *
134
- * @default false
135
- */
136
- progressBar?: boolean | DrawerProgressBarStyleProps;
137
- /**
138
- * Callback fired after the drawer's close animation completes.
139
- * Use this to reset forms, clear state, and clean up without visual glitches.
140
- */
141
- onAfterClose?: () => void;
142
- /**
143
- * The overlay style of the Drawer, either 'grey' or 'blur'.
144
- *
145
- * @default 'grey'
146
- */
147
- overlayStyle?: 'grey' | 'blur';
148
- /** The contents of the Drawer. */
149
- children?: ReactNode | ReactNode[];
150
-
151
- /** Prop overrides for other rendered elements. Overrides for the input itself should be passed directly to the component. */
152
- overrides?: {
153
- dialog?: ComponentPropsWithoutRef<'div'>;
154
- overlay?: ComponentPropsWithoutRef<'div'>;
155
- panelContainer?: ComponentPropsWithoutRef<'div'>;
156
- panel?: ComponentPropsWithoutRef<'div'>;
157
- titleBar?: ComponentPropsWithoutRef<'div'>;
158
- titleArea?: ComponentPropsWithoutRef<'div'>;
159
- titleBarButtons?: ComponentPropsWithoutRef<'div'>;
160
- content?: ComponentPropsWithoutRef<'div'>;
161
- contentChildren?: ComponentPropsWithoutRef<'div'>;
162
- contentChildrenChildren?: ComponentPropsWithoutRef<'div'>;
163
- bottomPanelSpacer?: ComponentPropsWithoutRef<'div'>;
164
- bottomPanel?: ComponentPropsWithoutRef<'div'>;
165
- bottomPanelContent?: ComponentPropsWithoutRef<'div'>;
166
- };
167
- };
168
-
169
- /**
170
- * Drawers are panels that slide in from the edge of the screen to reveal additional content.
171
- *
172
- * <hr />
173
- *
174
- * To use this component, import it as follows:
175
- *
176
- * ```js
177
- * import { Drawer } from 'paris/drawer';
178
- * ```
179
- * @constructor
180
- */
181
- export const Drawer = <T extends string[] | readonly string[] = string[]>(props: DrawerProps<T>) => {
182
- const { isOpen = false, onClose = () => {}, onAfterClose } = props;
183
-
184
- const handleClose = useCallback(() => onClose(false), [onClose]);
185
-
186
- const hasBeenOpen = useRef(false);
187
- useEffect(() => {
188
- if (isOpen) hasBeenOpen.current = true;
189
- }, [isOpen]);
190
-
191
- const handleAfterLeave = useCallback(() => {
192
- if (hasBeenOpen.current) {
193
- onAfterClose?.();
194
- }
195
- }, [onAfterClose]);
196
-
197
- return (
198
- // `appear` runs the enter transition on the very first mount. Without it,
199
- // a Drawer that is conditionally rendered and mounts already-open (i.e. its
200
- // first render has `show={true}`) snaps straight to the open state instead of
201
- // animating in. Always-mounted Drawers mount with `show={false}`, so `appear`
202
- // is a no-op for them — it only adds the (desired) enter animation for the
203
- // mount-open case.
204
- <Transition show={isOpen} appear afterLeave={handleAfterLeave}>
205
- <Dialog
206
- as="div"
207
- className={clsx(styles.root, props.overrides?.dialog?.className)}
208
- onClose={onClose}
209
- {...props.overrides?.dialog}
210
- role="dialog"
211
- >
212
- <DrawerProvider close={handleClose} isOpen={isOpen}>
213
- <DrawerPaginationProvider pagination={props.pagination ?? null}>
214
- <DrawerSlotProvider>
215
- <DrawerInner {...props} />
216
- </DrawerSlotProvider>
217
- </DrawerPaginationProvider>
218
- </DrawerProvider>
219
- </Dialog>
220
- </Transition>
221
- );
222
- };
223
-
224
- /** Internal component that renders inside all providers so it can consume slot context. */
225
- const DrawerInner = <T extends string[] | readonly string[] = string[]>({
226
- onClose = () => {},
227
- title,
228
- hideTitle = false,
229
- hideCloseButton = false,
230
- from = 'right',
231
- size = 'default',
232
- pagination,
233
- pageTransition = 'crossfade',
234
- progressBar,
235
- overlayStyle = 'grey',
236
- additionalActions,
237
- children,
238
- overrides,
239
- }: DrawerProps<T>) => {
240
- const slotContext = useDrawerSlotContext();
241
-
242
- const xAxisDrawer = from === 'left' || from === 'right';
243
- const sizeIsPreset = (DrawerSizePresets as readonly string[]).includes(size);
244
- const isPaginated = Boolean(pagination);
245
- const hasAdditionalActions = Boolean(additionalActions);
246
-
247
- const showBottomPanel = (slotContext?.hasAnyBottomPanelSlot ?? false) || (slotContext?.hasProgressBar ?? false);
248
-
249
- // Sync spacer height with absolute-positioned bottom panel so content doesn't get clipped
250
- const bottomPanelElRef = useRef<HTMLDivElement | null>(null);
251
- const spacerRef = useRef<HTMLDivElement | null>(null);
252
- const appendEntries = slotContext?.bottomPanelAppendEntries;
253
- useEffect(() => {
254
- if (!showBottomPanel) return;
255
- const panel = bottomPanelElRef.current;
256
- const spacer = spacerRef.current;
257
- if (!panel || !spacer) return;
258
-
259
- const update = () => {
260
- spacer.style.height = `${panel.offsetHeight}px`;
261
- };
262
- update();
263
-
264
- const observer = new ResizeObserver(update);
265
- observer.observe(panel);
266
- for (const child of panel.querySelectorAll<HTMLElement>('[data-slot-mode]')) {
267
- observer.observe(child);
268
- }
269
- return () => observer.disconnect();
270
- }, [showBottomPanel, appendEntries]);
271
-
272
- const [loadedPage, setLoadedPage] = useState<string | null>(pagination?.currentPage ?? null);
273
-
274
- const pageEntries = useMemo(() => {
275
- if (!isPaginated || !pagination || !children) return null;
276
- const childArray = Array.isArray(children) ? children : Children.toArray(children);
277
- return childArray
278
- .map((child) => ({ id: getChildPageID(child), child }))
279
- .filter((entry): entry is { id: string; child: ReactNode } => entry.id !== null);
280
- }, [isPaginated, pagination, children]);
281
-
282
- const activePageIndex = pageEntries?.findIndex((p) => p.id === pagination?.currentPage) ?? -1;
283
-
284
- const paginatedContent = useMemo(() => {
285
- if (!pageEntries || !pagination) return null;
286
-
287
- switch (pageTransition) {
288
- case 'none':
289
- return pageEntries.map((page) => {
290
- const isActive = pagination.currentPage === page.id;
291
- return (
292
- <DrawerPageProvider key={page.id} isActive={isActive} pageID={page.id}>
293
- <div
294
- style={{ display: isActive ? undefined : 'none' }}
295
- className={overrides?.contentChildrenChildren?.className}
296
- >
297
- {page.child}
298
- </div>
299
- </DrawerPageProvider>
300
- );
301
- });
302
-
303
- case 'crossfade':
304
- return pageEntries.map((page) => {
305
- const isActive = pagination.currentPage === page.id && loadedPage === page.id;
306
- return (
307
- <DrawerPageProvider key={page.id} isActive={isActive} pageID={page.id}>
308
- <Transition
309
- show={isActive}
310
- as="div"
311
- enter={styles.paginationEnter}
312
- enterFrom={styles.enterFromOpacity}
313
- enterTo={styles.enterToOpacity}
314
- leave={styles.paginationLeave}
315
- leaveFrom={styles.leaveFromOpacity}
316
- leaveTo={styles.leaveToOpacity}
317
- afterLeave={() => setLoadedPage(pagination.currentPage)}
318
- className={overrides?.contentChildrenChildren?.className}
319
- >
320
- {page.child}
321
- </Transition>
322
- </DrawerPageProvider>
323
- );
324
- });
325
-
326
- case 'slide':
327
- return (
328
- <div className={clsx(styles.pageStack, styles.pageStackClip)}>
329
- {pageEntries.map((page, i) => {
330
- const isActive = pagination.currentPage === page.id;
331
- const offset = (i - activePageIndex) * 100;
332
- return (
333
- <DrawerPageProvider key={page.id} isActive={isActive} pageID={page.id}>
334
- <motion.div
335
- initial={false}
336
- animate={{ x: `${offset}%` }}
337
- transition={{
338
- type: 'tween',
339
- duration: 0.3,
340
- ease: [0.32, 0.72, 0, 1],
341
- }}
342
- className={clsx(
343
- styles.pageStackItem,
344
- overrides?.contentChildrenChildren?.className,
345
- )}
346
- data-active={isActive}
347
- >
348
- {page.child}
349
- </motion.div>
350
- </DrawerPageProvider>
351
- );
352
- })}
353
- </div>
354
- );
355
-
356
- default: {
357
- const _exhaustive: never = pageTransition;
358
- return _exhaustive;
359
- }
360
- }
361
- }, [
362
- pageEntries,
363
- pagination,
364
- pageTransition,
365
- loadedPage,
366
- activePageIndex,
367
- overrides?.contentChildrenChildren?.className,
368
- ]);
369
-
370
- /** Non-page children (e.g. Drawer-level DrawerBottomPanel) that should render alongside paginated content. */
371
- const nonPageChildren = useMemo(() => {
372
- if (!isPaginated || !children) return null;
373
- const childArray = Array.isArray(children) ? children : Children.toArray(children);
374
- return childArray.filter((child) => getChildPageID(child) === null);
375
- }, [isPaginated, children]);
376
-
377
- return (
378
- <>
379
- <div
380
- className={clsx(
381
- overlayStyle === 'blur' && styles.overlayBlurContainer,
382
- overlayStyle === 'grey' && styles.overlayGreyContainer,
383
- overrides?.overlay?.className,
384
- )}
385
- >
386
- <TransitionChild
387
- enter={styles.enter}
388
- enterFrom={styles.enterFrom}
389
- enterTo={styles.enterTo}
390
- leave={styles.leave}
391
- leaveFrom={styles.leaveFrom}
392
- leaveTo={styles.leaveTo}
393
- >
394
- <div
395
- className={clsx(
396
- styles.overlay,
397
- overlayStyle === 'blur' && styles.overlayBlur,
398
- overlayStyle === 'grey' && styles.overlayGrey,
399
- )}
400
- />
401
- </TransitionChild>
402
- </div>
403
-
404
- <div
405
- className={clsx(
406
- styles.panelContainer,
407
- styles[`from-${from}`],
408
- { [styles[`size-${size}`]]: sizeIsPreset },
409
- overrides?.panelContainer?.className,
410
- )}
411
- style={
412
- !sizeIsPreset
413
- ? {
414
- [xAxisDrawer ? 'width' : 'height']: size,
415
- ...overrides?.panelContainer?.style,
416
- }
417
- : overrides?.panelContainer?.style
418
- }
419
- {...overrides?.panelContainer}
420
- >
421
- <TransitionChild
422
- enter={styles.enter}
423
- enterFrom={styles.enterFrom}
424
- enterTo={styles.enterTo}
425
- leave={styles.leave}
426
- leaveFrom={styles.leaveFrom}
427
- leaveTo={styles.leaveTo}
428
- >
429
- <DialogPanel className={clsx(styles.panel, styles[`from-${from}`], overrides?.panel?.className)}>
430
- {/* Dialog title bar */}
431
- <div className={clsx(styles.titleBar, overrides?.titleBar?.className)}>
432
- <div className={clsx(styles.titleArea, overrides?.titleArea?.className)}>
433
- <RemoveFromDOM when={!isPaginated}>
434
- <div className={clsx(styles.paginationButtons)}>
435
- <Button
436
- className={clsx(styles.navButton)}
437
- size="medium"
438
- kind="tertiary"
439
- shape="circle"
440
- onClick={() => pagination?.back()}
441
- disabled={!pagination?.canGoBack()}
442
- startEnhancer={<Icon icon={ChevronLeft} size={16} />}
443
- >
444
- Go to previous page in this drawer
445
- </Button>
446
- <Button
447
- className={clsx(styles.navButton)}
448
- size="medium"
449
- kind="tertiary"
450
- shape="circle"
451
- onClick={() => pagination?.forward()}
452
- disabled={!pagination?.canGoForward()}
453
- startEnhancer={<Icon icon={ChevronRight} size={16} />}
454
- >
455
- Go to next page in this drawer
456
- </Button>
457
- </div>
458
- </RemoveFromDOM>
459
- {slotContext && <div ref={slotContext.titleRef} />}
460
- <VisuallyHidden when={hideTitle || (slotContext?.hasTitleSlot ?? false)}>
461
- <DialogTitle as="h2" className={styles.titleTextContainer}>
462
- <TextWhenString kind="paragraphSmall" weight="medium">
463
- {title}
464
- </TextWhenString>
465
- </DialogTitle>
466
- </VisuallyHidden>
467
- </div>
468
- <div className={clsx(styles.titleBarButtons, overrides?.titleBarButtons?.className)}>
469
- {slotContext && <div ref={slotContext.actionsRef} />}
470
- {!slotContext?.hasActionsSlot && (
471
- <RemoveFromDOM when={!hasAdditionalActions}>{additionalActions}</RemoveFromDOM>
472
- )}
473
-
474
- {/* Close button */}
475
- <RemoveFromDOM when={hideCloseButton}>
476
- <Button
477
- kind="tertiary"
478
- shape="circle"
479
- onClick={() => onClose(false)}
480
- startEnhancer={<Icon icon={Close} size={20} />}
481
- data-title-hidden={hideTitle}
482
- className={clsx(styles.closeButton)}
483
- >
484
- Close drawer
485
- </Button>
486
- </RemoveFromDOM>
487
- </div>
488
- </div>
489
-
490
- <div className={clsx(styles.content, overrides?.content?.className)}>
491
- <div className={clsx(styles.contentChildren, overrides?.contentChildren?.className)}>
492
- {isPaginated ? (
493
- <>
494
- {paginatedContent}
495
- {nonPageChildren}
496
- {progressBar && pageEntries && (
497
- <DrawerProgressBar
498
- steps={pageEntries.map((p) => p.id)}
499
- {...(typeof progressBar === 'object' ? progressBar : undefined)}
500
- />
501
- )}
502
- </>
503
- ) : (
504
- children
505
- )}
506
- </div>
507
- {showBottomPanel && (
508
- <>
509
- <div
510
- ref={spacerRef}
511
- tabIndex={-1}
512
- aria-hidden="true"
513
- className={clsx(
514
- styles.bottomPanelSpacer,
515
- overrides?.bottomPanelSpacer?.className,
516
- )}
517
- />
518
- <div
519
- ref={bottomPanelElRef}
520
- className={clsx(styles.bottomPanel, overrides?.bottomPanel?.className)}
521
- >
522
- {slotContext && <div ref={slotContext.progressBarRef} />}
523
- <div className={styles.glassOpacity} />
524
- <div className={styles.glassBlend} />
525
- <div
526
- className={clsx(
527
- styles.bottomPanelContent,
528
- styles.noPadding,
529
- overrides?.bottomPanelContent?.className,
530
- )}
531
- >
532
- {slotContext && (
533
- <div
534
- ref={slotContext.bottomPanelCallbackRef}
535
- className={styles.bottomPanelSlots}
536
- />
537
- )}
538
- </div>
539
- </div>
540
- </>
541
- )}
542
- </div>
543
- </DialogPanel>
544
- </TransitionChild>
545
- </div>
546
- </>
547
- );
548
- };
@@ -1,28 +0,0 @@
1
- 'use client';
2
-
3
- import { type ReactNode, useId, useLayoutEffect } from 'react';
4
- import { createPortal } from 'react-dom';
5
- import { useIsPageActive } from './DrawerPageContext';
6
- import { useDrawerSlotContext } from './DrawerSlotContext';
7
-
8
- export type DrawerActionsProps = {
9
- children: ReactNode;
10
- };
11
-
12
- export const DrawerActions = ({ children }: DrawerActionsProps) => {
13
- const isActive = useIsPageActive();
14
- const slotContext = useDrawerSlotContext();
15
- const id = useId();
16
-
17
- useLayoutEffect(() => {
18
- if (!isActive || !slotContext) return;
19
- const unregister = slotContext.registerActionsSlot();
20
- return unregister;
21
- }, [isActive, slotContext]);
22
-
23
- if (!isActive || !slotContext?.actionsRef.current) {
24
- return null;
25
- }
26
-
27
- return createPortal(children, slotContext.actionsRef.current, id);
28
- };
@@ -1,55 +0,0 @@
1
- 'use client';
2
-
3
- import { clsx } from 'clsx';
4
- import { type ComponentPropsWithoutRef, type ReactNode, useId, useLayoutEffect } from 'react';
5
- import { createPortal } from 'react-dom';
6
- import styles from './Drawer.module.scss';
7
- import { useIsPageActive } from './DrawerPageContext';
8
- import { useDrawerSlotContext } from './DrawerSlotContext';
9
-
10
- export type DrawerBottomPanelProps = ComponentPropsWithoutRef<'div'> & {
11
- children: ReactNode;
12
- /** 'replace' fully replaces the base bottomPanel. 'append' renders after the base. @default 'replace' */
13
- mode?: 'replace' | 'append';
14
- /** Render order for append mode. Lower = higher up. @default 0 */
15
- priority?: number;
16
- };
17
-
18
- export const DrawerBottomPanel = ({
19
- children,
20
- className,
21
- mode = 'replace',
22
- priority = 0,
23
- style,
24
- ...rest
25
- }: DrawerBottomPanelProps) => {
26
- const isActive = useIsPageActive();
27
- const slotContext = useDrawerSlotContext();
28
- const id = useId();
29
-
30
- const registerBottomPanel = slotContext?.registerBottomPanel;
31
-
32
- useLayoutEffect(() => {
33
- if (!isActive || !registerBottomPanel) return;
34
- const unregister = registerBottomPanel({ id, mode, priority });
35
- return unregister;
36
- }, [isActive, registerBottomPanel, id, mode, priority]);
37
-
38
- if (!isActive || !slotContext?.isBottomPanelMounted || !slotContext.bottomPanelRef.current) {
39
- return null;
40
- }
41
-
42
- return createPortal(
43
- <div
44
- data-slot-mode={mode}
45
- data-slot-priority={priority}
46
- className={clsx(styles.bottomPanelSlotItem, className)}
47
- style={{ order: priority, ...style }}
48
- {...rest}
49
- >
50
- {children}
51
- </div>,
52
- slotContext.bottomPanelRef.current,
53
- `${id}-${priority}`,
54
- );
55
- };
@@ -1,31 +0,0 @@
1
- 'use client';
2
-
3
- import { createContext, type ReactNode, useContext, useMemo } from 'react';
4
-
5
- export type DrawerContextValue = {
6
- close: () => void;
7
- isOpen: boolean;
8
- };
9
-
10
- const DrawerContext = createContext<DrawerContextValue | null>(null);
11
-
12
- export function useDrawer(): DrawerContextValue {
13
- const context = useContext(DrawerContext);
14
- if (!context) {
15
- throw new Error('useDrawer must be used within a Drawer component');
16
- }
17
- return context;
18
- }
19
-
20
- export function DrawerProvider({
21
- close,
22
- isOpen,
23
- children,
24
- }: {
25
- close: () => void;
26
- isOpen: boolean;
27
- children: ReactNode;
28
- }) {
29
- const value = useMemo(() => ({ close, isOpen }), [close, isOpen]);
30
- return <DrawerContext.Provider value={value}>{children}</DrawerContext.Provider>;
31
- }