@simplybusiness/mobius 4.2.8 → 4.3.1

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 (496) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/components/Accordion/Accordion.d.ts +34 -0
  3. package/dist/cjs/components/Accordion/Accordion.stories.d.ts +10 -0
  4. package/dist/cjs/components/Accordion/Accordion.stories.js +62 -0
  5. package/dist/cjs/components/Accordion/Accordion.stories.js.map +1 -0
  6. package/dist/cjs/components/Accordion/Accordion.test.d.ts +1 -0
  7. package/dist/cjs/components/Accordion/Accordion.test.js +191 -0
  8. package/dist/cjs/components/Accordion/Accordion.test.js.map +1 -0
  9. package/dist/cjs/components/Accordion/index.d.ts +1 -0
  10. package/dist/cjs/components/Alert/Alert.d.ts +16 -0
  11. package/dist/cjs/components/Alert/Alert.stories.d.ts +7 -0
  12. package/dist/cjs/components/Alert/Alert.stories.js +37 -0
  13. package/dist/cjs/components/Alert/Alert.stories.js.map +1 -0
  14. package/dist/cjs/components/Alert/Alert.test.d.ts +1 -0
  15. package/dist/cjs/components/Alert/Alert.test.js +50 -0
  16. package/dist/cjs/components/Alert/Alert.test.js.map +1 -0
  17. package/dist/cjs/components/Alert/index.d.ts +1 -0
  18. package/dist/cjs/components/Box/Box.d.ts +15 -0
  19. package/dist/cjs/components/Box/Box.stories.d.ts +7 -0
  20. package/dist/cjs/components/Box/Box.stories.js +24 -0
  21. package/dist/cjs/components/Box/Box.stories.js.map +1 -0
  22. package/dist/cjs/components/Box/Box.test.d.ts +1 -0
  23. package/dist/cjs/components/Box/Box.test.js +33 -0
  24. package/dist/cjs/components/Box/Box.test.js.map +1 -0
  25. package/dist/cjs/components/Box/index.d.ts +1 -0
  26. package/dist/cjs/components/Breadcrumbs/BreadcrumbItem.d.ts +15 -0
  27. package/dist/cjs/components/Breadcrumbs/Breadcrumbs.d.ts +12 -0
  28. package/dist/cjs/components/Breadcrumbs/Breadcrumbs.stories.d.ts +7 -0
  29. package/dist/cjs/components/Breadcrumbs/Breadcrumbs.stories.js +19 -0
  30. package/dist/cjs/components/Breadcrumbs/Breadcrumbs.stories.js.map +1 -0
  31. package/dist/cjs/components/Breadcrumbs/Breadcrumbs.test.d.ts +1 -0
  32. package/dist/cjs/components/Breadcrumbs/Breadcrumbs.test.js +36 -0
  33. package/dist/cjs/components/Breadcrumbs/Breadcrumbs.test.js.map +1 -0
  34. package/dist/cjs/components/Breadcrumbs/index.d.ts +2 -0
  35. package/dist/cjs/components/Button/Button.d.ts +31 -0
  36. package/dist/cjs/components/Button/Button.stories.d.ts +19 -0
  37. package/dist/cjs/components/Button/Button.stories.js +224 -0
  38. package/dist/cjs/components/Button/Button.stories.js.map +1 -0
  39. package/dist/cjs/components/Button/Button.test.d.ts +1 -0
  40. package/dist/cjs/components/Button/Button.test.js +87 -0
  41. package/dist/cjs/components/Button/Button.test.js.map +1 -0
  42. package/dist/cjs/components/Button/Loading.d.ts +2 -0
  43. package/dist/cjs/components/Button/index.d.ts +1 -0
  44. package/dist/cjs/components/Checkbox/Checkbox.d.ts +3 -0
  45. package/dist/cjs/components/Checkbox/Checkbox.stories.d.ts +10 -0
  46. package/dist/cjs/components/Checkbox/Checkbox.stories.js +83 -0
  47. package/dist/cjs/components/Checkbox/Checkbox.stories.js.map +1 -0
  48. package/dist/cjs/components/Checkbox/Checkbox.test.d.ts +1 -0
  49. package/dist/cjs/components/Checkbox/Checkbox.test.js +174 -0
  50. package/dist/cjs/components/Checkbox/Checkbox.test.js.map +1 -0
  51. package/dist/cjs/components/Checkbox/CheckboxGroup.d.ts +3 -0
  52. package/dist/cjs/components/Checkbox/CheckboxGroup.stories.d.ts +9 -0
  53. package/dist/cjs/components/Checkbox/CheckboxGroup.stories.js +67 -0
  54. package/dist/cjs/components/Checkbox/CheckboxGroup.stories.js.map +1 -0
  55. package/dist/cjs/components/Checkbox/CheckboxGroup.test.d.ts +1 -0
  56. package/dist/cjs/components/Checkbox/CheckboxGroup.test.js +242 -0
  57. package/dist/cjs/components/Checkbox/CheckboxGroup.test.js.map +1 -0
  58. package/dist/cjs/components/Checkbox/index.d.ts +3 -0
  59. package/dist/cjs/components/Checkbox/types.d.ts +56 -0
  60. package/dist/cjs/components/Container/Container.d.ts +15 -0
  61. package/dist/cjs/components/Container/Container.stories.d.ts +6 -0
  62. package/dist/cjs/components/Container/Container.stories.js +14 -0
  63. package/dist/cjs/components/Container/Container.stories.js.map +1 -0
  64. package/dist/cjs/components/Container/Container.test.d.ts +1 -0
  65. package/dist/cjs/components/Container/Container.test.js +39 -0
  66. package/dist/cjs/components/Container/Container.test.js.map +1 -0
  67. package/dist/cjs/components/Container/index.d.ts +1 -0
  68. package/dist/cjs/components/Divider/Divider.d.ts +11 -0
  69. package/dist/cjs/components/Divider/Divider.stories.d.ts +6 -0
  70. package/dist/cjs/components/Divider/Divider.stories.js +18 -0
  71. package/dist/cjs/components/Divider/Divider.stories.js.map +1 -0
  72. package/dist/cjs/components/Divider/Divider.test.d.ts +1 -0
  73. package/dist/cjs/components/Divider/Divider.test.js +31 -0
  74. package/dist/cjs/components/Divider/Divider.test.js.map +1 -0
  75. package/dist/cjs/components/Divider/index.d.ts +1 -0
  76. package/dist/cjs/components/Drawer/Content.d.ts +11 -0
  77. package/dist/cjs/components/Drawer/Drawer.d.ts +22 -0
  78. package/dist/cjs/components/Drawer/Drawer.js +29 -19
  79. package/dist/cjs/components/Drawer/Drawer.js.map +1 -1
  80. package/dist/cjs/components/Drawer/Drawer.stories.d.ts +8 -0
  81. package/dist/cjs/components/Drawer/Drawer.stories.js +54 -0
  82. package/dist/cjs/components/Drawer/Drawer.stories.js.map +1 -0
  83. package/dist/cjs/components/Drawer/Drawer.test.d.ts +1 -0
  84. package/dist/cjs/components/Drawer/Drawer.test.js +123 -0
  85. package/dist/cjs/components/Drawer/Drawer.test.js.map +1 -0
  86. package/dist/cjs/components/Drawer/DrawerContext.js +17 -0
  87. package/dist/cjs/components/Drawer/DrawerContext.js.map +1 -0
  88. package/dist/cjs/components/Drawer/Header.d.ts +11 -0
  89. package/dist/cjs/components/Drawer/index.d.ts +12 -0
  90. package/dist/cjs/components/Drawer/useDrawer.js +21 -0
  91. package/dist/cjs/components/Drawer/useDrawer.js.map +1 -0
  92. package/dist/cjs/components/DropdownMenu/DropdownMenu.d.ts +15 -0
  93. package/dist/cjs/components/DropdownMenu/DropdownMenu.stories.d.ts +7 -0
  94. package/dist/cjs/components/DropdownMenu/DropdownMenu.stories.js +66 -0
  95. package/dist/cjs/components/DropdownMenu/DropdownMenu.stories.js.map +1 -0
  96. package/dist/cjs/components/DropdownMenu/DropdownMenu.test.d.ts +1 -0
  97. package/dist/cjs/components/DropdownMenu/DropdownMenu.test.js +97 -0
  98. package/dist/cjs/components/DropdownMenu/DropdownMenu.test.js.map +1 -0
  99. package/dist/cjs/components/DropdownMenu/Item.d.ts +15 -0
  100. package/dist/cjs/components/DropdownMenu/index.d.ts +10 -0
  101. package/dist/cjs/components/ErrorMessage/ErrorMessage.d.ts +9 -0
  102. package/dist/cjs/components/ErrorMessage/ErrorMessage.stories.d.ts +7 -0
  103. package/dist/cjs/components/ErrorMessage/ErrorMessage.stories.js +23 -0
  104. package/dist/cjs/components/ErrorMessage/ErrorMessage.stories.js.map +1 -0
  105. package/dist/cjs/components/ErrorMessage/ErrorMessage.test.d.ts +1 -0
  106. package/dist/cjs/components/ErrorMessage/ErrorMessage.test.js +32 -0
  107. package/dist/cjs/components/ErrorMessage/ErrorMessage.test.js.map +1 -0
  108. package/dist/cjs/components/ErrorMessage/index.d.ts +1 -0
  109. package/dist/cjs/components/Fieldset/Fieldset.d.ts +17 -0
  110. package/dist/cjs/components/Fieldset/Fieldset.stories.d.ts +7 -0
  111. package/dist/cjs/components/Fieldset/Fieldset.stories.js +29 -0
  112. package/dist/cjs/components/Fieldset/Fieldset.stories.js.map +1 -0
  113. package/dist/cjs/components/Fieldset/Fieldset.test.d.ts +1 -0
  114. package/dist/cjs/components/Fieldset/Fieldset.test.js +12 -0
  115. package/dist/cjs/components/Fieldset/Fieldset.test.js.map +1 -0
  116. package/dist/cjs/components/Fieldset/index.d.ts +1 -0
  117. package/dist/cjs/components/Flex/Flex.d.ts +4 -0
  118. package/dist/cjs/components/Flex/Flex.stories.d.ts +7 -0
  119. package/dist/cjs/components/Flex/Flex.stories.js +147 -0
  120. package/dist/cjs/components/Flex/Flex.stories.js.map +1 -0
  121. package/dist/cjs/components/Flex/Flex.test.d.ts +1 -0
  122. package/dist/cjs/components/Flex/Flex.test.js +33 -0
  123. package/dist/cjs/components/Flex/Flex.test.js.map +1 -0
  124. package/dist/cjs/components/Flex/index.d.ts +2 -0
  125. package/dist/cjs/components/Flex/propUtils.d.ts +8 -0
  126. package/dist/cjs/components/Flex/propUtils.test.d.ts +1 -0
  127. package/dist/cjs/components/Flex/propUtils.test.js +99 -0
  128. package/dist/cjs/components/Flex/propUtils.test.js.map +1 -0
  129. package/dist/cjs/components/Flex/types.d.ts +33 -0
  130. package/dist/cjs/components/Grid/Grid.d.ts +28 -0
  131. package/dist/cjs/components/Grid/Grid.stories.d.ts +11 -0
  132. package/dist/cjs/components/Grid/Grid.stories.js +218 -0
  133. package/dist/cjs/components/Grid/Grid.stories.js.map +1 -0
  134. package/dist/cjs/components/Grid/Grid.test.d.ts +1 -0
  135. package/dist/cjs/components/Grid/Grid.test.js +97 -0
  136. package/dist/cjs/components/Grid/Grid.test.js.map +1 -0
  137. package/dist/cjs/components/Grid/Item.d.ts +30 -0
  138. package/dist/cjs/components/Grid/index.d.ts +9 -0
  139. package/dist/cjs/components/Icon/Icon.d.ts +2 -0
  140. package/dist/cjs/components/Icon/Icon.stories.d.ts +7 -0
  141. package/dist/cjs/components/Icon/Icon.stories.js +35 -0
  142. package/dist/cjs/components/Icon/Icon.stories.js.map +1 -0
  143. package/dist/cjs/components/Icon/Icon.test.d.ts +1 -0
  144. package/dist/cjs/components/Icon/Icon.test.js +34 -0
  145. package/dist/cjs/components/Icon/Icon.test.js.map +1 -0
  146. package/dist/cjs/components/Icon/IconStyle.d.ts +1 -0
  147. package/dist/cjs/components/Icon/index.d.ts +2 -0
  148. package/dist/cjs/components/Icon/types.d.ts +13 -0
  149. package/dist/cjs/components/Image/Image.d.ts +17 -0
  150. package/dist/cjs/components/Image/Image.stories.d.ts +6 -0
  151. package/dist/cjs/components/Image/Image.stories.js +19 -0
  152. package/dist/cjs/components/Image/Image.stories.js.map +1 -0
  153. package/dist/cjs/components/Image/Image.test.d.ts +1 -0
  154. package/dist/cjs/components/Image/Image.test.js +39 -0
  155. package/dist/cjs/components/Image/Image.test.js.map +1 -0
  156. package/dist/cjs/components/Image/index.d.ts +1 -0
  157. package/dist/cjs/components/Label/Label.d.ts +13 -0
  158. package/dist/cjs/components/Label/Label.stories.d.ts +6 -0
  159. package/dist/cjs/components/Label/Label.stories.js +17 -0
  160. package/dist/cjs/components/Label/Label.stories.js.map +1 -0
  161. package/dist/cjs/components/Label/Label.test.d.ts +1 -0
  162. package/dist/cjs/components/Label/Label.test.js +37 -0
  163. package/dist/cjs/components/Label/Label.test.js.map +1 -0
  164. package/dist/cjs/components/Label/index.d.ts +1 -0
  165. package/dist/cjs/components/Link/Link.d.ts +24 -0
  166. package/dist/cjs/components/Link/Link.stories.d.ts +7 -0
  167. package/dist/cjs/components/Link/Link.stories.js +45 -0
  168. package/dist/cjs/components/Link/Link.stories.js.map +1 -0
  169. package/dist/cjs/components/Link/Link.test.d.ts +1 -0
  170. package/dist/cjs/components/Link/Link.test.js +65 -0
  171. package/dist/cjs/components/Link/Link.test.js.map +1 -0
  172. package/dist/cjs/components/Link/index.d.ts +1 -0
  173. package/dist/cjs/components/LinkButton/LinkButton.d.ts +15 -0
  174. package/dist/cjs/components/LinkButton/LinkButton.stories.d.ts +6 -0
  175. package/dist/cjs/components/LinkButton/LinkButton.stories.js +46 -0
  176. package/dist/cjs/components/LinkButton/LinkButton.stories.js.map +1 -0
  177. package/dist/cjs/components/LinkButton/LinkButton.test.d.ts +1 -0
  178. package/dist/cjs/components/LinkButton/LinkButton.test.js +67 -0
  179. package/dist/cjs/components/LinkButton/LinkButton.test.js.map +1 -0
  180. package/dist/cjs/components/LinkButton/index.d.ts +1 -0
  181. package/dist/cjs/components/List/List.d.ts +17 -0
  182. package/dist/cjs/components/List/List.stories.d.ts +10 -0
  183. package/dist/cjs/components/List/List.stories.js +82 -0
  184. package/dist/cjs/components/List/List.stories.js.map +1 -0
  185. package/dist/cjs/components/List/List.test.d.ts +1 -0
  186. package/dist/cjs/components/List/List.test.js +95 -0
  187. package/dist/cjs/components/List/List.test.js.map +1 -0
  188. package/dist/cjs/components/List/ListItem.d.ts +14 -0
  189. package/dist/cjs/components/List/index.d.ts +2 -0
  190. package/dist/cjs/components/LoadingIndicator/LoadingIndicator.d.ts +8 -0
  191. package/dist/cjs/components/LoadingIndicator/LoadingIndicator.stories.d.ts +9 -0
  192. package/dist/cjs/components/LoadingIndicator/LoadingIndicator.stories.js +53 -0
  193. package/dist/cjs/components/LoadingIndicator/LoadingIndicator.stories.js.map +1 -0
  194. package/dist/cjs/components/LoadingIndicator/LoadingIndicator.test.d.ts +1 -0
  195. package/dist/cjs/components/LoadingIndicator/LoadingIndicator.test.js +29 -0
  196. package/dist/cjs/components/LoadingIndicator/LoadingIndicator.test.js.map +1 -0
  197. package/dist/cjs/components/LoadingIndicator/index.d.ts +1 -0
  198. package/dist/cjs/components/Logo/Logo.d.ts +14 -0
  199. package/dist/cjs/components/Logo/Logo.stories.d.ts +6 -0
  200. package/dist/cjs/components/Logo/Logo.stories.js +22 -0
  201. package/dist/cjs/components/Logo/Logo.stories.js.map +1 -0
  202. package/dist/cjs/components/Logo/Logo.test.d.ts +1 -0
  203. package/dist/cjs/components/Logo/Logo.test.js +25 -0
  204. package/dist/cjs/components/Logo/Logo.test.js.map +1 -0
  205. package/dist/cjs/components/Logo/index.d.ts +1 -0
  206. package/dist/cjs/components/Modal/Content.d.ts +11 -0
  207. package/dist/cjs/components/Modal/Content.js +3 -13
  208. package/dist/cjs/components/Modal/Content.js.map +1 -1
  209. package/dist/cjs/components/Modal/Header.d.ts +11 -0
  210. package/dist/cjs/components/Modal/Header.js +4 -14
  211. package/dist/cjs/components/Modal/Header.js.map +1 -1
  212. package/dist/cjs/components/Modal/Modal.d.ts +35 -0
  213. package/dist/cjs/components/Modal/Modal.js +52 -36
  214. package/dist/cjs/components/Modal/Modal.js.map +1 -1
  215. package/dist/cjs/components/Modal/Modal.stories.d.ts +10 -0
  216. package/dist/cjs/components/Modal/Modal.stories.js +90 -0
  217. package/dist/cjs/components/Modal/Modal.stories.js.map +1 -0
  218. package/dist/cjs/components/Modal/Modal.test.d.ts +1 -0
  219. package/dist/cjs/components/Modal/Modal.test.js +137 -0
  220. package/dist/cjs/components/Modal/Modal.test.js.map +1 -0
  221. package/dist/cjs/components/Modal/index.d.ts +12 -0
  222. package/dist/cjs/components/Modal/index.js.map +1 -1
  223. package/dist/cjs/components/Modal/types.js +6 -0
  224. package/dist/cjs/components/Modal/types.js.map +1 -0
  225. package/dist/cjs/components/NumberField/NumberField.d.ts +35 -0
  226. package/dist/cjs/components/NumberField/NumberField.stories.d.ts +10 -0
  227. package/dist/cjs/components/NumberField/NumberField.stories.js +100 -0
  228. package/dist/cjs/components/NumberField/NumberField.stories.js.map +1 -0
  229. package/dist/cjs/components/NumberField/NumberField.test.d.ts +1 -0
  230. package/dist/cjs/components/NumberField/NumberField.test.js +117 -0
  231. package/dist/cjs/components/NumberField/NumberField.test.js.map +1 -0
  232. package/dist/cjs/components/NumberField/index.d.ts +1 -0
  233. package/dist/cjs/components/Option/Option.d.ts +10 -0
  234. package/dist/cjs/components/Option/index.d.ts +1 -0
  235. package/dist/cjs/components/PasswordField/PasswordField.d.ts +5 -0
  236. package/dist/cjs/components/PasswordField/PasswordField.stories.d.ts +6 -0
  237. package/dist/cjs/components/PasswordField/PasswordField.stories.js +41 -0
  238. package/dist/cjs/components/PasswordField/PasswordField.stories.js.map +1 -0
  239. package/dist/cjs/components/PasswordField/PasswordField.test.d.ts +1 -0
  240. package/dist/cjs/components/PasswordField/PasswordField.test.js +34 -0
  241. package/dist/cjs/components/PasswordField/PasswordField.test.js.map +1 -0
  242. package/dist/cjs/components/PasswordField/ShowHideButton.d.ts +5 -0
  243. package/dist/cjs/components/PasswordField/index.d.ts +1 -0
  244. package/dist/cjs/components/Popover/Popover.d.ts +15 -0
  245. package/dist/cjs/components/Popover/Popover.stories.d.ts +7 -0
  246. package/dist/cjs/components/Popover/Popover.stories.js +32 -0
  247. package/dist/cjs/components/Popover/Popover.stories.js.map +1 -0
  248. package/dist/cjs/components/Popover/Popover.test.d.ts +1 -0
  249. package/dist/cjs/components/Popover/Popover.test.js +104 -0
  250. package/dist/cjs/components/Popover/Popover.test.js.map +1 -0
  251. package/dist/cjs/components/Popover/index.d.ts +1 -0
  252. package/dist/cjs/components/Progress/Progress.d.ts +20 -0
  253. package/dist/cjs/components/Progress/Progress.stories.d.ts +9 -0
  254. package/dist/cjs/components/Progress/Progress.stories.js +96 -0
  255. package/dist/cjs/components/Progress/Progress.stories.js.map +1 -0
  256. package/dist/cjs/components/Progress/Progress.test.d.ts +1 -0
  257. package/dist/cjs/components/Progress/Progress.test.js +60 -0
  258. package/dist/cjs/components/Progress/Progress.test.js.map +1 -0
  259. package/dist/cjs/components/Progress/index.d.ts +1 -0
  260. package/dist/cjs/components/Radio/Radio.d.ts +53 -0
  261. package/dist/cjs/components/Radio/Radio.stories.d.ts +12 -0
  262. package/dist/cjs/components/Radio/Radio.stories.js +122 -0
  263. package/dist/cjs/components/Radio/Radio.stories.js.map +1 -0
  264. package/dist/cjs/components/Radio/Radio.test.d.ts +1 -0
  265. package/dist/cjs/components/Radio/Radio.test.js +259 -0
  266. package/dist/cjs/components/Radio/Radio.test.js.map +1 -0
  267. package/dist/cjs/components/Radio/RadioButton.d.ts +3 -0
  268. package/dist/cjs/components/Radio/RadioButton.stories.d.ts +11 -0
  269. package/dist/cjs/components/Radio/RadioButton.stories.js +90 -0
  270. package/dist/cjs/components/Radio/RadioButton.stories.js.map +1 -0
  271. package/dist/cjs/components/Radio/RadioButton.test.d.ts +1 -0
  272. package/dist/cjs/components/Radio/RadioButton.test.js +23 -0
  273. package/dist/cjs/components/Radio/RadioButton.test.js.map +1 -0
  274. package/dist/cjs/components/Radio/RadioGroup.d.ts +30 -0
  275. package/dist/cjs/components/Radio/index.d.ts +3 -0
  276. package/dist/cjs/components/SVG/SVG.d.ts +11 -0
  277. package/dist/cjs/components/SVG/SVG.stories.d.ts +6 -0
  278. package/dist/cjs/components/SVG/SVG.stories.js +21 -0
  279. package/dist/cjs/components/SVG/SVG.stories.js.map +1 -0
  280. package/dist/cjs/components/SVG/SVG.test.d.ts +1 -0
  281. package/dist/cjs/components/SVG/SVG.test.js +28 -0
  282. package/dist/cjs/components/SVG/SVG.test.js.map +1 -0
  283. package/dist/cjs/components/SVG/index.d.ts +1 -0
  284. package/dist/cjs/components/Segment/Segment.d.ts +16 -0
  285. package/dist/cjs/components/Segment/Segment.stories.d.ts +19 -0
  286. package/dist/cjs/components/Segment/Segment.stories.js +125 -0
  287. package/dist/cjs/components/Segment/Segment.stories.js.map +1 -0
  288. package/dist/cjs/components/Segment/SegmentGroup.d.ts +13 -0
  289. package/dist/cjs/components/Segment/index.d.ts +2 -0
  290. package/dist/cjs/components/Select/Select.d.ts +20 -0
  291. package/dist/cjs/components/Select/Select.stories.d.ts +10 -0
  292. package/dist/cjs/components/Select/Select.stories.js +89 -0
  293. package/dist/cjs/components/Select/Select.stories.js.map +1 -0
  294. package/dist/cjs/components/Select/Select.test.d.ts +1 -0
  295. package/dist/cjs/components/Select/Select.test.js +108 -0
  296. package/dist/cjs/components/Select/Select.test.js.map +1 -0
  297. package/dist/cjs/components/Select/index.d.ts +1 -0
  298. package/dist/cjs/components/Slider/Slider.d.ts +19 -0
  299. package/dist/cjs/components/Slider/Slider.stories.d.ts +10 -0
  300. package/dist/cjs/components/Slider/Slider.stories.js +84 -0
  301. package/dist/cjs/components/Slider/Slider.stories.js.map +1 -0
  302. package/dist/cjs/components/Slider/Slider.test.d.ts +1 -0
  303. package/dist/cjs/components/Slider/Slider.test.js +85 -0
  304. package/dist/cjs/components/Slider/Slider.test.js.map +1 -0
  305. package/dist/cjs/components/Slider/helpers.d.ts +5 -0
  306. package/dist/cjs/components/Slider/helpers.test.d.ts +1 -0
  307. package/dist/cjs/components/Slider/helpers.test.js +75 -0
  308. package/dist/cjs/components/Slider/helpers.test.js.map +1 -0
  309. package/dist/cjs/components/Slider/index.d.ts +1 -0
  310. package/dist/cjs/components/Table/Body.d.ts +9 -0
  311. package/dist/cjs/components/Table/Cell.d.ts +11 -0
  312. package/dist/cjs/components/Table/Foot.d.ts +9 -0
  313. package/dist/cjs/components/Table/Head.d.ts +9 -0
  314. package/dist/cjs/components/Table/HeaderCell.d.ts +9 -0
  315. package/dist/cjs/components/Table/Row.d.ts +9 -0
  316. package/dist/cjs/components/Table/Table.d.ts +11 -0
  317. package/dist/cjs/components/Table/Table.stories.d.ts +7 -0
  318. package/dist/cjs/components/Table/Table.stories.js +17 -0
  319. package/dist/cjs/components/Table/Table.stories.js.map +1 -0
  320. package/dist/cjs/components/Table/Table.test.d.ts +1 -0
  321. package/dist/cjs/components/Table/Table.test.js +75 -0
  322. package/dist/cjs/components/Table/Table.test.js.map +1 -0
  323. package/dist/cjs/components/Table/index.d.ts +20 -0
  324. package/dist/cjs/components/Text/Text.d.ts +21 -0
  325. package/dist/cjs/components/Text/Text.stories.d.ts +10 -0
  326. package/dist/cjs/components/Text/Text.stories.js +38 -0
  327. package/dist/cjs/components/Text/Text.stories.js.map +1 -0
  328. package/dist/cjs/components/Text/Text.test.d.ts +1 -0
  329. package/dist/cjs/components/Text/Text.test.js +33 -0
  330. package/dist/cjs/components/Text/Text.test.js.map +1 -0
  331. package/dist/cjs/components/Text/index.d.ts +1 -0
  332. package/dist/cjs/components/TextArea/TextArea.d.ts +13 -0
  333. package/dist/cjs/components/TextArea/TextArea.stories.d.ts +11 -0
  334. package/dist/cjs/components/TextArea/TextArea.stories.js +92 -0
  335. package/dist/cjs/components/TextArea/TextArea.stories.js.map +1 -0
  336. package/dist/cjs/components/TextArea/TextArea.test.d.ts +1 -0
  337. package/dist/cjs/components/TextArea/TextArea.test.js +87 -0
  338. package/dist/cjs/components/TextArea/TextArea.test.js.map +1 -0
  339. package/dist/cjs/components/TextArea/index.d.ts +1 -0
  340. package/dist/cjs/components/TextAreaInput/TextAreaInput.d.ts +14 -0
  341. package/dist/cjs/components/TextAreaInput/TextAreaInput.test.d.ts +1 -0
  342. package/dist/cjs/components/TextAreaInput/TextAreaInput.test.js +35 -0
  343. package/dist/cjs/components/TextAreaInput/TextAreaInput.test.js.map +1 -0
  344. package/dist/cjs/components/TextAreaInput/index.d.ts +1 -0
  345. package/dist/cjs/components/TextField/TextField.d.ts +19 -0
  346. package/dist/cjs/components/TextField/TextField.stories.d.ts +20 -0
  347. package/dist/cjs/components/TextField/TextField.stories.js +219 -0
  348. package/dist/cjs/components/TextField/TextField.stories.js.map +1 -0
  349. package/dist/cjs/components/TextField/TextField.test.d.ts +1 -0
  350. package/dist/cjs/components/TextField/TextField.test.js +164 -0
  351. package/dist/cjs/components/TextField/TextField.test.js.map +1 -0
  352. package/dist/cjs/components/TextField/adornmentWithClassName.d.ts +2 -0
  353. package/dist/cjs/components/TextField/index.d.ts +1 -0
  354. package/dist/cjs/components/Title/Title.d.ts +15 -0
  355. package/dist/cjs/components/Title/Title.stories.d.ts +6 -0
  356. package/dist/cjs/components/Title/Title.stories.js +18 -0
  357. package/dist/cjs/components/Title/Title.stories.js.map +1 -0
  358. package/dist/cjs/components/Title/Title.test.d.ts +1 -0
  359. package/dist/cjs/components/Title/Title.test.js +22 -0
  360. package/dist/cjs/components/Title/Title.test.js.map +1 -0
  361. package/dist/cjs/components/Title/index.d.ts +1 -0
  362. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.d.ts +11 -0
  363. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.stories.d.ts +6 -0
  364. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.stories.js +14 -0
  365. package/dist/cjs/components/VisuallyHidden/VisuallyHidden.stories.js.map +1 -0
  366. package/dist/cjs/components/VisuallyHidden/index.d.ts +1 -0
  367. package/dist/cjs/components/index.d.ts +40 -0
  368. package/dist/cjs/hooks/index.d.ts +7 -0
  369. package/dist/cjs/hooks/useBodyScrollLock/index.d.ts +1 -0
  370. package/dist/cjs/hooks/useBodyScrollLock/useBodyScrollLock.d.ts +3 -0
  371. package/dist/cjs/hooks/useBodyScrollLock/useBodyScrollLock.test.d.ts +1 -0
  372. package/dist/cjs/hooks/useBodyScrollLock/useBodyScrollLock.test.js +31 -0
  373. package/dist/cjs/hooks/useBodyScrollLock/useBodyScrollLock.test.js.map +1 -0
  374. package/dist/cjs/hooks/useBreakpoint/index.d.ts +1 -0
  375. package/dist/cjs/hooks/useBreakpoint/useBreakpoint.d.ts +14 -0
  376. package/dist/cjs/hooks/useBreakpoint/useBreakpoint.stories.d.ts +7 -0
  377. package/dist/cjs/hooks/useBreakpoint/useBreakpoint.stories.js +28 -0
  378. package/dist/cjs/hooks/useBreakpoint/useBreakpoint.stories.js.map +1 -0
  379. package/dist/cjs/hooks/useBreakpoint/useBreakpoint.test.d.ts +1 -0
  380. package/dist/cjs/hooks/useBreakpoint/useBreakpoint.test.js +377 -0
  381. package/dist/cjs/hooks/useBreakpoint/useBreakpoint.test.js.map +1 -0
  382. package/dist/cjs/hooks/useButton/index.d.ts +1 -0
  383. package/dist/cjs/hooks/useButton/useButton.d.ts +35 -0
  384. package/dist/cjs/hooks/useButton/useButton.test.d.ts +1 -0
  385. package/dist/cjs/hooks/useButton/useButton.test.js +143 -0
  386. package/dist/cjs/hooks/useButton/useButton.test.js.map +1 -0
  387. package/dist/cjs/hooks/useLabel/index.d.ts +1 -0
  388. package/dist/cjs/hooks/useLabel/useLabel.d.ts +27 -0
  389. package/dist/cjs/hooks/useLabel/useLabel.test.d.ts +1 -0
  390. package/dist/cjs/hooks/useLabel/useLabel.test.js +49 -0
  391. package/dist/cjs/hooks/useLabel/useLabel.test.js.map +1 -0
  392. package/dist/cjs/hooks/useOnClickOutside/index.d.ts +1 -0
  393. package/dist/cjs/hooks/useOnClickOutside/useOnClickOutside.d.ts +2 -0
  394. package/dist/cjs/hooks/useTextField/index.d.ts +2 -0
  395. package/dist/cjs/hooks/useTextField/types.d.ts +26 -0
  396. package/dist/cjs/hooks/useTextField/useTextField.d.ts +2 -0
  397. package/dist/cjs/hooks/useTextField/useTextField.js +1 -1
  398. package/dist/cjs/hooks/useTextField/useTextField.js.map +1 -1
  399. package/dist/cjs/hooks/useTextField/useTextField.test.d.ts +1 -0
  400. package/dist/cjs/hooks/useTextField/useTextField.test.js +167 -0
  401. package/dist/cjs/hooks/useTextField/useTextField.test.js.map +1 -0
  402. package/dist/cjs/hooks/useWindowEvent/index.d.ts +1 -0
  403. package/dist/cjs/hooks/useWindowEvent/useWindowEvent.d.ts +1 -0
  404. package/dist/cjs/index.d.ts +3 -0
  405. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  406. package/dist/cjs/types/components.d.ts +2 -0
  407. package/dist/cjs/types/dom.d.ts +3 -0
  408. package/dist/cjs/types/events.d.ts +45 -0
  409. package/dist/cjs/types/icon.d.ts +9 -0
  410. package/dist/cjs/types/index.d.ts +5 -0
  411. package/dist/cjs/types/size.d.ts +1 -0
  412. package/dist/cjs/utils/StoryContainer.d.ts +1 -0
  413. package/dist/cjs/utils/changeCSS.d.ts +1 -0
  414. package/dist/cjs/utils/excludeControls.d.ts +1 -0
  415. package/dist/cjs/utils/excludeControls.test.d.ts +1 -0
  416. package/dist/cjs/utils/excludeControls.test.js +25 -0
  417. package/dist/cjs/utils/excludeControls.test.js.map +1 -0
  418. package/dist/cjs/utils/index.d.ts +8 -0
  419. package/dist/cjs/utils/index.js +0 -1
  420. package/dist/cjs/utils/index.js.map +1 -1
  421. package/dist/cjs/utils/jestHTMLDialogPolyfill.d.ts +1 -0
  422. package/dist/cjs/utils/jestMockMatchMedia.js +28 -0
  423. package/dist/cjs/utils/jestMockMatchMedia.js.map +1 -0
  424. package/dist/cjs/utils/mergeRefs.d.ts +2 -0
  425. package/dist/cjs/utils/polyfill-tests.d.ts +1 -0
  426. package/dist/cjs/utils/sizeClasses.d.ts +16 -0
  427. package/dist/cjs/utils/sizeClasses.test.d.ts +1 -0
  428. package/dist/cjs/utils/sizeClasses.test.js +20 -0
  429. package/dist/cjs/utils/sizeClasses.test.js.map +1 -0
  430. package/dist/cjs/utils/spaceDelimitedList.d.ts +1 -0
  431. package/dist/cjs/utils/spaceDelimitedList.test.d.ts +1 -0
  432. package/dist/cjs/utils/spaceDelimitedList.test.js +27 -0
  433. package/dist/cjs/utils/spaceDelimitedList.test.js.map +1 -0
  434. package/dist/esm/components/Drawer/Drawer.js +29 -19
  435. package/dist/esm/components/Drawer/Drawer.js.map +1 -1
  436. package/dist/esm/components/Drawer/DrawerContext.js +7 -0
  437. package/dist/esm/components/Drawer/DrawerContext.js.map +1 -0
  438. package/dist/esm/components/Drawer/useDrawer.js +11 -0
  439. package/dist/esm/components/Drawer/useDrawer.js.map +1 -0
  440. package/dist/esm/components/Flex/propUtils.test.js +97 -0
  441. package/dist/esm/components/Flex/propUtils.test.js.map +1 -0
  442. package/dist/esm/components/Modal/Content.js +3 -8
  443. package/dist/esm/components/Modal/Content.js.map +1 -1
  444. package/dist/esm/components/Modal/Header.js +4 -9
  445. package/dist/esm/components/Modal/Header.js.map +1 -1
  446. package/dist/esm/components/Modal/Modal.js +53 -38
  447. package/dist/esm/components/Modal/Modal.js.map +1 -1
  448. package/dist/esm/components/Modal/index.js.map +1 -1
  449. package/dist/esm/components/Modal/types.js +3 -0
  450. package/dist/esm/components/Modal/types.js.map +1 -0
  451. package/dist/esm/components/Slider/helpers.test.js +73 -0
  452. package/dist/esm/components/Slider/helpers.test.js.map +1 -0
  453. package/dist/esm/hooks/useBodyScrollLock/useBodyScrollLock.test.js +29 -0
  454. package/dist/esm/hooks/useBodyScrollLock/useBodyScrollLock.test.js.map +1 -0
  455. package/dist/esm/hooks/useTextField/useTextField.js +1 -1
  456. package/dist/esm/hooks/useTextField/useTextField.js.map +1 -1
  457. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  458. package/dist/esm/utils/excludeControls.test.js +23 -0
  459. package/dist/esm/utils/excludeControls.test.js.map +1 -0
  460. package/dist/esm/utils/index.js +0 -1
  461. package/dist/esm/utils/index.js.map +1 -1
  462. package/dist/esm/utils/jestMockMatchMedia.js +18 -0
  463. package/dist/esm/utils/jestMockMatchMedia.js.map +1 -0
  464. package/dist/esm/utils/sizeClasses.test.js +18 -0
  465. package/dist/esm/utils/sizeClasses.test.js.map +1 -0
  466. package/dist/esm/utils/spaceDelimitedList.test.js +25 -0
  467. package/dist/esm/utils/spaceDelimitedList.test.js.map +1 -0
  468. package/package.json +1 -1
  469. package/src/components/Accordion/Accordion.test.tsx +3 -19
  470. package/src/components/Checkbox/Checkbox.stories.tsx +2 -1
  471. package/src/components/Checkbox/CheckboxGroup.stories.tsx +3 -2
  472. package/src/components/Divider/Divider.stories.tsx +1 -1
  473. package/src/components/Drawer/Drawer.test.tsx +13 -47
  474. package/src/components/Drawer/Drawer.tsx +33 -20
  475. package/src/components/DropdownMenu/DropdownMenu.stories.tsx +4 -3
  476. package/src/components/Fieldset/Fieldset.stories.tsx +3 -2
  477. package/src/components/Modal/Content.tsx +18 -22
  478. package/src/components/Modal/Header.tsx +16 -22
  479. package/src/components/Modal/Modal.mdx +0 -1
  480. package/src/components/Modal/Modal.stories.tsx +6 -28
  481. package/src/components/Modal/Modal.test.tsx +76 -108
  482. package/src/components/Modal/Modal.tsx +77 -86
  483. package/src/components/Modal/index.tsx +2 -1
  484. package/src/components/Modal/types.ts +32 -0
  485. package/src/components/NumberField/NumberField.stories.tsx +2 -1
  486. package/src/components/PasswordField/PasswordField.stories.tsx +2 -1
  487. package/src/components/Progress/Progress.stories.tsx +2 -1
  488. package/src/components/Radio/Radio.stories.tsx +4 -3
  489. package/src/components/Radio/RadioButton.stories.tsx +4 -3
  490. package/src/components/Select/Select.stories.tsx +2 -2
  491. package/src/components/Slider/Slider.stories.tsx +2 -1
  492. package/src/components/TextArea/TextArea.stories.tsx +2 -1
  493. package/src/components/TextField/TextField.stories.tsx +6 -5
  494. package/src/hooks/useTextField/useTextField.tsx +3 -3
  495. package/src/utils/index.ts +0 -1
  496. package/src/utils/jestMockMatchMedia.ts +16 -0
@@ -0,0 +1,35 @@
1
+ import { ReactNode } from "react";
2
+ export interface ModalProps {
3
+ isOpen: boolean;
4
+ onClose?: () => void;
5
+ children?: ReactNode;
6
+ className?: string;
7
+ closeLabel?: string;
8
+ animation?: "slideUp" | "fade";
9
+ isFullScreen?: boolean;
10
+ /**
11
+ * **Deprecated:** No longer needed
12
+ */
13
+ size?: string;
14
+ /**
15
+ * **Deprecated:** No longer needed
16
+ */
17
+ appElement?: string;
18
+ /**
19
+ * **Deprecated:** No longer needed
20
+ */
21
+ preventCloseOnEsc?: boolean;
22
+ /**
23
+ * **Deprecated:** No longer needed
24
+ */
25
+ shouldFocusAfterRender?: boolean;
26
+ /**
27
+ * **Deprecated:** No longer needed
28
+ */
29
+ parentSelector?: () => HTMLElement;
30
+ }
31
+ declare const Modal: {
32
+ ({ isOpen, onClose, children, className, closeLabel, isFullScreen, animation, size, appElement, preventCloseOnEsc, shouldFocusAfterRender, parentSelector, }: ModalProps): import("react/jsx-runtime").JSX.Element;
33
+ displayName: string;
34
+ };
35
+ export { Modal };
@@ -1,4 +1,4 @@
1
- /* eslint-disable no-console */ "use client";
1
+ "use client";
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
@@ -14,6 +14,7 @@ const _dedupe = /*#__PURE__*/ _interop_require_default(require("classnames/dedup
14
14
  const _react = require("react");
15
15
  const _useBodyScrollLock = require("../../hooks/useBodyScrollLock");
16
16
  const _polyfilltests = require("../../utils/polyfill-tests");
17
+ const _utils = require("../../utils");
17
18
  function _interop_require_default(obj) {
18
19
  return obj && obj.__esModule ? obj : {
19
20
  default: obj
@@ -60,9 +61,10 @@ function _interop_require_wildcard(obj, nodeInterop) {
60
61
  }
61
62
  return newObj;
62
63
  }
63
- const Modal = ({ isOpen, onClose, children, className, closeLabel, isFullScreen, animation, // Deprecated props below
64
- size, appElement, preventCloseOnEsc, shouldFocusAfterRender, parentSelector })=>{
65
- var _window;
64
+ const TRANSITION_CLASS_NAME = "--transition";
65
+ const Modal = /*#__PURE__*/ (0, _react.forwardRef)((props, ref)=>{
66
+ const { isOpen, onClose, onOpen, children, className, closeLabel, isFullScreen, animation, // Deprecated props below
67
+ size, appElement, preventCloseOnEsc, shouldFocusAfterRender, parentSelector } = props;
66
68
  const hasWarnedAboutMissingLabels = (0, _react.useRef)(false);
67
69
  // Handle deprecated props
68
70
  if (!hasWarnedAboutMissingLabels.current) {
@@ -71,9 +73,14 @@ size, appElement, preventCloseOnEsc, shouldFocusAfterRender, parentSelector })=>
71
73
  hasWarnedAboutMissingLabels.current = true;
72
74
  }
73
75
  }
76
+ const hasOpened = (0, _react.useRef)(false);
74
77
  const modalRef = (0, _react.useRef)(null);
75
- const dialog = modalRef.current;
76
- const noPreference = (_window = window) === null || _window === void 0 ? void 0 : _window.matchMedia("(prefers-reduced-motion: no-preference)");
78
+ const hasDialogSupport = (0, _polyfilltests.supportsDialog)();
79
+ // Fire onOpen once
80
+ if (onOpen && !hasOpened.current) {
81
+ onOpen();
82
+ hasOpened.current = true;
83
+ }
77
84
  (0, _useBodyScrollLock.useBodyScrollLock)({
78
85
  enabled: isOpen
79
86
  });
@@ -82,57 +89,66 @@ size, appElement, preventCloseOnEsc, shouldFocusAfterRender, parentSelector })=>
82
89
  if (event) {
83
90
  event.preventDefault();
84
91
  event.stopPropagation();
85
- const doClose = ()=>{
86
- dialog.close();
87
- onClose === null || onClose === void 0 ? void 0 : onClose();
88
- };
89
- if (animation) {
90
- dialog.classList.add("close");
91
- dialog.addEventListener("animationend", ()=>{
92
- dialog.classList.remove("close");
93
- doClose();
94
- }, {
95
- once: true
96
- });
97
- } else {
92
+ }
93
+ const doClose = ()=>{
94
+ var _modalRef_current;
95
+ (_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.close();
96
+ onClose === null || onClose === void 0 ? void 0 : onClose();
97
+ };
98
+ // Delay close to allow backdrop exit transition
99
+ if (hasDialogSupport && animation) {
100
+ var _modalRef_current, _modalRef_current1;
101
+ (_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.classList.remove(TRANSITION_CLASS_NAME);
102
+ (_modalRef_current1 = modalRef.current) === null || _modalRef_current1 === void 0 ? void 0 : _modalRef_current1.addEventListener("transitionend", ()=>{
98
103
  doClose();
99
- }
104
+ }, {
105
+ once: true
106
+ });
107
+ } else {
108
+ doClose();
100
109
  }
101
110
  }, [
102
- animation,
103
- dialog,
104
- onClose
111
+ onClose,
112
+ hasDialogSupport,
113
+ animation
105
114
  ]);
106
115
  const modalClasses = (0, _dedupe.default)("mobius", "mobius/Modal", {
107
- animation,
116
+ "--no-dialog-support": !hasDialogSupport,
117
+ "--should-transition": hasDialogSupport && animation,
108
118
  "--slide-up": animation === "slideUp",
109
119
  "--fade": animation === "fade",
110
- "--has-reduced-motion": !noPreference.matches,
111
120
  "--is-fullscreen": isFullScreen
112
121
  }, className);
113
122
  // Add polyfill for HTML Dialog in old browsers
114
123
  (0, _react.useEffect)(()=>{
115
124
  async function toggleModal() {
116
- var _modalRef_current;
117
- if (!(0, _polyfilltests.supportsDialog)() && typeof window !== "undefined") {
125
+ var _modalRef_current, _modalRef_current1;
126
+ if (!hasDialogSupport && typeof window !== "undefined" && modalRef.current !== null) {
118
127
  // eslint-disable-next-line import/no-extraneous-dependencies
119
128
  const { default: dialogPolyfill } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("dialog-polyfill")));
120
129
  dialogPolyfill.registerDialog(modalRef.current);
121
130
  }
122
- if (isOpen) {
123
- var _modalRef_current1;
124
- (_modalRef_current1 = modalRef.current) === null || _modalRef_current1 === void 0 ? void 0 : _modalRef_current1.showModal();
125
- } else if ((_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.open) {
126
- var _modalRef_current2;
127
- (_modalRef_current2 = modalRef.current) === null || _modalRef_current2 === void 0 ? void 0 : _modalRef_current2.close();
131
+ if (isOpen && !((_modalRef_current = modalRef.current) === null || _modalRef_current === void 0 ? void 0 : _modalRef_current.open)) {
132
+ var _modalRef_current2, _modalRef_current3;
133
+ (_modalRef_current2 = modalRef.current) === null || _modalRef_current2 === void 0 ? void 0 : _modalRef_current2.showModal();
134
+ (_modalRef_current3 = modalRef.current) === null || _modalRef_current3 === void 0 ? void 0 : _modalRef_current3.classList.add(TRANSITION_CLASS_NAME);
135
+ onOpen === null || onOpen === void 0 ? void 0 : onOpen();
136
+ } else if (!isOpen && ((_modalRef_current1 = modalRef.current) === null || _modalRef_current1 === void 0 ? void 0 : _modalRef_current1.open)) {
137
+ handleClose();
128
138
  }
129
139
  }
130
140
  toggleModal();
131
141
  }, [
132
- isOpen
142
+ isOpen,
143
+ onOpen,
144
+ handleClose,
145
+ hasDialogSupport
133
146
  ]);
134
147
  return /*#__PURE__*/ (0, _jsxruntime.jsx)("dialog", {
135
- ref: modalRef,
148
+ ref: (0, _utils.mergeRefs)([
149
+ modalRef,
150
+ ref
151
+ ]),
136
152
  onCancel: handleClose,
137
153
  className: modalClasses,
138
154
  children: _react.Children.map(children, (child)=>{
@@ -145,7 +161,7 @@ size, appElement, preventCloseOnEsc, shouldFocusAfterRender, parentSelector })=>
145
161
  return child;
146
162
  })
147
163
  });
148
- };
164
+ });
149
165
  Modal.displayName = "Modal";
150
166
 
151
167
  //# sourceMappingURL=Modal.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Modal/Modal.tsx"],"sourcesContent":["/* eslint-disable no-console */\n\n\"use client\";\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport classNames from \"classnames/dedupe\";\nimport {\n Children,\n ReactEventHandler,\n ReactNode,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { useBodyScrollLock } from \"../../hooks/useBodyScrollLock\";\nimport { supportsDialog } from \"../../utils/polyfill-tests\";\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose?: () => void;\n children?: ReactNode;\n className?: string;\n closeLabel?: string;\n animation?: \"slideUp\" | \"fade\";\n isFullScreen?: boolean;\n /**\n * **Deprecated:** No longer needed\n */\n size?: string;\n /**\n * **Deprecated:** No longer needed\n */\n appElement?: string;\n /**\n * **Deprecated:** No longer needed\n */\n preventCloseOnEsc?: boolean;\n /**\n * **Deprecated:** No longer needed\n */\n shouldFocusAfterRender?: boolean;\n /**\n * **Deprecated:** No longer needed\n */\n parentSelector?: () => HTMLElement;\n}\n\nconst Modal = ({\n isOpen,\n onClose,\n children,\n className,\n closeLabel,\n isFullScreen,\n animation,\n // Deprecated props below\n size,\n appElement,\n preventCloseOnEsc,\n shouldFocusAfterRender,\n parentSelector,\n}: ModalProps) => {\n const hasWarnedAboutMissingLabels = useRef<boolean>(false);\n // Handle deprecated props\n if (!hasWarnedAboutMissingLabels.current) {\n if (\n size ||\n appElement ||\n preventCloseOnEsc ||\n shouldFocusAfterRender ||\n parentSelector\n ) {\n console.warn(\n `Deprecation warning: Mobius Modal no longer supports the following props: size, appElement, preventCloseOnEsc, shouldFocusAfterRender and parentSelector.`,\n );\n hasWarnedAboutMissingLabels.current = true;\n }\n }\n\n const modalRef = useRef<HTMLDialogElement>(null);\n const dialog = modalRef.current as HTMLDialogElement;\n const noPreference = window?.matchMedia(\n \"(prefers-reduced-motion: no-preference)\",\n );\n\n useBodyScrollLock({ enabled: isOpen });\n\n // Add close handler, to enable closing animations\n const handleClose: ReactEventHandler<HTMLDialogElement> = useCallback(\n event => {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n\n const doClose = () => {\n dialog.close();\n onClose?.();\n };\n\n if (animation) {\n dialog.classList.add(\"close\");\n dialog.addEventListener(\n \"animationend\",\n () => {\n dialog.classList.remove(\"close\");\n doClose();\n },\n { once: true },\n );\n } else {\n doClose();\n }\n }\n },\n [animation, dialog, onClose],\n );\n\n const modalClasses = classNames(\n \"mobius\",\n \"mobius/Modal\",\n {\n animation,\n \"--slide-up\": animation === \"slideUp\",\n \"--fade\": animation === \"fade\",\n \"--has-reduced-motion\": !noPreference.matches,\n \"--is-fullscreen\": isFullScreen,\n },\n className,\n );\n\n // Add polyfill for HTML Dialog in old browsers\n useEffect(() => {\n async function toggleModal() {\n if (!supportsDialog() && typeof window !== \"undefined\") {\n // eslint-disable-next-line import/no-extraneous-dependencies\n const { default: dialogPolyfill } = await import(\"dialog-polyfill\");\n dialogPolyfill.registerDialog(modalRef.current as HTMLDialogElement);\n }\n\n if (isOpen) {\n modalRef.current?.showModal();\n } else if (modalRef.current?.open) {\n modalRef.current?.close();\n }\n }\n\n toggleModal();\n }, [isOpen]);\n\n return (\n <dialog ref={modalRef} onCancel={handleClose} className={modalClasses}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n return cloneElement(child, {\n onClose: handleClose,\n closeLabel,\n } as any);\n }\n\n return child;\n })}\n </dialog>\n );\n};\n\nModal.displayName = \"Modal\";\nexport { Modal };\n"],"names":["Modal","isOpen","onClose","children","className","closeLabel","isFullScreen","animation","size","appElement","preventCloseOnEsc","shouldFocusAfterRender","parentSelector","window","hasWarnedAboutMissingLabels","useRef","current","console","warn","modalRef","dialog","noPreference","matchMedia","useBodyScrollLock","enabled","handleClose","useCallback","event","preventDefault","stopPropagation","doClose","close","classList","add","addEventListener","remove","once","modalClasses","classNames","matches","useEffect","toggleModal","supportsDialog","default","dialogPolyfill","registerDialog","showModal","open","ref","onCancel","Children","map","child","isValidElement","cloneElement","displayName"],"mappings":"AAAA,6BAA6B,GAE7B;;;;;+BAsKSA;;;eAAAA;;;;+DAnKc;uBAUhB;mCAC2B;+BACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgC/B,MAAMA,QAAQ,CAAC,EACbC,MAAM,EACNC,OAAO,EACPC,QAAQ,EACRC,SAAS,EACTC,UAAU,EACVC,YAAY,EACZC,SAAS,EACT,yBAAyB;AACzBC,IAAI,EACJC,UAAU,EACVC,iBAAiB,EACjBC,sBAAsB,EACtBC,cAAc,EACH;QAoBUC;IAnBrB,MAAMC,8BAA8BC,IAAAA,aAAM,EAAU;IACpD,0BAA0B;IAC1B,IAAI,CAACD,4BAA4BE,OAAO,EAAE;QACxC,IACER,QACAC,cACAC,qBACAC,0BACAC,gBACA;YACAK,QAAQC,IAAI,CACV,CAAC,yJAAyJ,CAAC;YAE7JJ,4BAA4BE,OAAO,GAAG;QACxC;IACF;IAEA,MAAMG,WAAWJ,IAAAA,aAAM,EAAoB;IAC3C,MAAMK,SAASD,SAASH,OAAO;IAC/B,MAAMK,gBAAeR,UAAAA,oBAAAA,8BAAAA,QAAQS,UAAU,CACrC;IAGFC,IAAAA,oCAAiB,EAAC;QAAEC,SAASvB;IAAO;IAEpC,kDAAkD;IAClD,MAAMwB,cAAoDC,IAAAA,kBAAW,EACnEC,CAAAA;QACE,IAAIA,OAAO;YACTA,MAAMC,cAAc;YACpBD,MAAME,eAAe;YAErB,MAAMC,UAAU;gBACdV,OAAOW,KAAK;gBACZ7B,oBAAAA,8BAAAA;YACF;YAEA,IAAIK,WAAW;gBACba,OAAOY,SAAS,CAACC,GAAG,CAAC;gBACrBb,OAAOc,gBAAgB,CACrB,gBACA;oBACEd,OAAOY,SAAS,CAACG,MAAM,CAAC;oBACxBL;gBACF,GACA;oBAAEM,MAAM;gBAAK;YAEjB,OAAO;gBACLN;YACF;QACF;IACF,GACA;QAACvB;QAAWa;QAAQlB;KAAQ;IAG9B,MAAMmC,eAAeC,IAAAA,eAAU,EAC7B,UACA,gBACA;QACE/B;QACA,cAAcA,cAAc;QAC5B,UAAUA,cAAc;QACxB,wBAAwB,CAACc,aAAakB,OAAO;QAC7C,mBAAmBjC;IACrB,GACAF;IAGF,+CAA+C;IAC/CoC,IAAAA,gBAAS,EAAC;QACR,eAAeC;gBASFtB;YARX,IAAI,CAACuB,IAAAA,6BAAc,OAAM,OAAO7B,WAAW,aAAa;gBACtD,6DAA6D;gBAC7D,MAAM,EAAE8B,SAASC,cAAc,EAAE,GAAG,MAAM,mEAAA,QAAO;gBACjDA,eAAeC,cAAc,CAAC1B,SAASH,OAAO;YAChD;YAEA,IAAIf,QAAQ;oBACVkB;iBAAAA,qBAAAA,SAASH,OAAO,cAAhBG,yCAAAA,mBAAkB2B,SAAS;YAC7B,OAAO,KAAI3B,oBAAAA,SAASH,OAAO,cAAhBG,wCAAAA,kBAAkB4B,IAAI,EAAE;oBACjC5B;iBAAAA,qBAAAA,SAASH,OAAO,cAAhBG,yCAAAA,mBAAkBY,KAAK;YACzB;QACF;QAEAU;IACF,GAAG;QAACxC;KAAO;IAEX,qBACE,qBAACmB;QAAO4B,KAAK7B;QAAU8B,UAAUxB;QAAarB,WAAWiC;kBACtDa,eAAQ,CAACC,GAAG,CAAChD,UAAUiD,CAAAA;YACtB,kBAAIC,IAAAA,qBAAc,EAACD,QAAQ;gBACzB,qBAAOE,IAAAA,mBAAY,EAACF,OAAO;oBACzBlD,SAASuB;oBACTpB;gBACF;YACF;YAEA,OAAO+C;QACT;;AAGN;AAEApD,MAAMuD,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../../src/components/Modal/Modal.tsx"],"sourcesContent":["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport {\n Children,\n Ref,\n SyntheticEvent,\n cloneElement,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport { useBodyScrollLock } from \"../../hooks/useBodyScrollLock\";\nimport { supportsDialog } from \"../../utils/polyfill-tests\";\nimport { ModalProps } from \"./types\";\nimport { mergeRefs } from \"../../utils\";\n\nexport type ModalElementType = HTMLDialogElement;\nexport type ModalRef = Ref<ModalElementType>;\n\nconst TRANSITION_CLASS_NAME = \"--transition\";\n\nconst Modal = forwardRef((props: ModalProps, ref: ModalRef) => {\n const {\n isOpen,\n onClose,\n onOpen,\n children,\n className,\n closeLabel,\n isFullScreen,\n animation,\n // Deprecated props below\n size,\n appElement,\n preventCloseOnEsc,\n shouldFocusAfterRender,\n parentSelector,\n } = props;\n const hasWarnedAboutMissingLabels = useRef<boolean>(false);\n // Handle deprecated props\n if (!hasWarnedAboutMissingLabels.current) {\n if (\n size ||\n appElement ||\n preventCloseOnEsc ||\n shouldFocusAfterRender ||\n parentSelector\n ) {\n console.warn(\n `Deprecation warning: Mobius Modal no longer supports the following props: size, appElement, preventCloseOnEsc, shouldFocusAfterRender and parentSelector.`,\n );\n hasWarnedAboutMissingLabels.current = true;\n }\n }\n\n const hasOpened = useRef<boolean>(false);\n const modalRef = useRef<HTMLDialogElement | null>(null);\n const hasDialogSupport = supportsDialog();\n\n // Fire onOpen once\n if (onOpen && !hasOpened.current) {\n onOpen();\n hasOpened.current = true;\n }\n\n useBodyScrollLock({ enabled: isOpen });\n\n // Add close handler, to enable closing animations\n const handleClose = useCallback(\n (event?: SyntheticEvent<HTMLElement, Event>) => {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const doClose = () => {\n modalRef.current?.close();\n onClose?.();\n };\n\n // Delay close to allow backdrop exit transition\n if (hasDialogSupport && animation) {\n modalRef.current?.classList.remove(TRANSITION_CLASS_NAME);\n modalRef.current?.addEventListener(\n \"transitionend\",\n () => {\n doClose();\n },\n { once: true },\n );\n } else {\n doClose();\n }\n },\n [onClose, hasDialogSupport, animation],\n );\n\n const modalClasses = classNames(\n \"mobius\",\n \"mobius/Modal\",\n {\n \"--no-dialog-support\": !hasDialogSupport, // This class is used to correctly position modal in x/y middle on iOS <= 15.2\n \"--should-transition\": hasDialogSupport && animation,\n \"--slide-up\": animation === \"slideUp\",\n \"--fade\": animation === \"fade\",\n \"--is-fullscreen\": isFullScreen,\n },\n className,\n );\n\n // Add polyfill for HTML Dialog in old browsers\n useEffect(() => {\n async function toggleModal() {\n if (\n !hasDialogSupport &&\n typeof window !== \"undefined\" &&\n modalRef.current !== null\n ) {\n // eslint-disable-next-line import/no-extraneous-dependencies\n const { default: dialogPolyfill } = await import(\"dialog-polyfill\");\n dialogPolyfill.registerDialog(modalRef.current);\n }\n\n if (isOpen && !modalRef.current?.open) {\n modalRef.current?.showModal();\n modalRef.current?.classList.add(TRANSITION_CLASS_NAME);\n onOpen?.();\n } else if (!isOpen && modalRef.current?.open) {\n handleClose();\n }\n }\n\n toggleModal();\n }, [isOpen, onOpen, handleClose, hasDialogSupport]);\n\n return (\n <dialog\n ref={mergeRefs([modalRef, ref])}\n onCancel={handleClose}\n className={modalClasses}\n >\n {Children.map(children, child => {\n if (isValidElement(child)) {\n return cloneElement(child, {\n onClose: handleClose,\n closeLabel,\n } as any);\n }\n\n return child;\n })}\n </dialog>\n );\n});\n\nModal.displayName = \"Modal\";\nexport { Modal };\n"],"names":["Modal","TRANSITION_CLASS_NAME","forwardRef","props","ref","isOpen","onClose","onOpen","children","className","closeLabel","isFullScreen","animation","size","appElement","preventCloseOnEsc","shouldFocusAfterRender","parentSelector","hasWarnedAboutMissingLabels","useRef","current","console","warn","hasOpened","modalRef","hasDialogSupport","supportsDialog","useBodyScrollLock","enabled","handleClose","useCallback","event","preventDefault","stopPropagation","doClose","close","classList","remove","addEventListener","once","modalClasses","classNames","useEffect","toggleModal","window","default","dialogPolyfill","registerDialog","open","showModal","add","dialog","mergeRefs","onCancel","Children","map","child","isValidElement","cloneElement","displayName"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { Modal } from ".";
3
+ type StoryType = StoryObj<typeof Modal>;
4
+ declare const meta: Meta<typeof Modal>;
5
+ export declare const Normal: StoryType;
6
+ export declare const FullScreen: StoryType;
7
+ export declare const WithAnimation: StoryType;
8
+ export declare const WithLongContent: StoryType;
9
+ export declare const WithNested: StoryType;
10
+ export default meta;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WithNested = exports.WithLongContent = exports.WithAnimation = exports.FullScreen = exports.Normal = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const _1 = require(".");
7
+ const utils_1 = require("../../utils");
8
+ const Button_1 = require("../Button");
9
+ const Text_1 = require("../Text");
10
+ const meta = {
11
+ title: "Components/Modal",
12
+ component: _1.Modal,
13
+ argTypes: Object.assign({ animation: {
14
+ options: ["slideUp", "fade", "neither"],
15
+ control: { type: "radio" },
16
+ mapping: {
17
+ slideUp: "slideUp",
18
+ fade: "fade",
19
+ neither: undefined,
20
+ },
21
+ } }, (0, utils_1.excludeControls)("appElement", "parentSelector", "isOpen", "preventCloseOnEsc", "shouldFocusAfterRender", "size")),
22
+ args: {
23
+ isFullScreen: false,
24
+ },
25
+ };
26
+ const Demo = (props) => {
27
+ const [open, setOpen] = (0, react_1.useState)(false);
28
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: () => setOpen(true), children: "Show Modal" }), (0, jsx_runtime_1.jsxs)(_1.Modal, Object.assign({}, props, { isOpen: open, onClose: () => setOpen(false), children: [(0, jsx_runtime_1.jsx)(_1.Modal.Header, { children: "The Latin Modal" }), (0, jsx_runtime_1.jsx)(_1.Modal.Content, { children: "Aliquam fringilla quam vel purus rhoncus interdum in quis sapien. Sed at eros et lectus mollis posuere. Morbi augue augue, venenatis vel consectetur sed, vulputate et lorem. Integer venenatis nibh molestie commodo lobortis. Phasellus sit amet dignissim nisi. Vivamus nisi augue, scelerisque commodo libero vitae, vulputate interdum ex. Integer non risus sollicitudin, cursus ipsum vitae, rhoncus nulla." })] }))] }));
29
+ };
30
+ const FullScreenDemo = (props) => {
31
+ const [open, setOpen] = (0, react_1.useState)(false);
32
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: () => setOpen(true), variant: "secondary", children: "Show Fullscreen Modal \uD83D\uDE80" }), (0, jsx_runtime_1.jsxs)(_1.Modal, Object.assign({}, props, { isOpen: open, isFullScreen: true, onClose: () => setOpen(false), children: [(0, jsx_runtime_1.jsx)(_1.Modal.Header, { children: "The Full Screen Modal" }), (0, jsx_runtime_1.jsx)(_1.Modal.Content, { children: "Aliquam fringilla quam vel purus rhoncus interdum in quis sapien. Sed at eros et lectus mollis posuere. Morbi augue augue, venenatis vel consectetur sed, vulputate et lorem. Integer venenatis nibh molestie commodo lobortis. Phasellus sit amet dignissim nisi. Vivamus nisi augue, scelerisque commodo libero vitae, vulputate interdum ex. Integer non risus sollicitudin, cursus ipsum vitae, rhoncus nulla." })] }))] }));
33
+ };
34
+ const WithAnimationDemo = ({ animation, isFullScreen, closeLabel, }) => {
35
+ const [open, setOpen] = (0, react_1.useState)(false);
36
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: () => setOpen(true), children: "Show Modal With Animation \uD83E\uDDD9\u200D\u2642\uFE0F" }), (0, jsx_runtime_1.jsxs)(_1.Modal, { isOpen: open, onClose: () => setOpen(false), animation: animation, isFullScreen: isFullScreen, closeLabel: closeLabel, children: [(0, jsx_runtime_1.jsx)(_1.Modal.Header, { children: "The Latin Modal" }), (0, jsx_runtime_1.jsx)(_1.Modal.Content, { children: "Aliquam fringilla quam vel purus rhoncus interdum in quis sapien. Sed at eros et lectus mollis posuere. Morbi augue augue, venenatis vel consectetur sed, vulputate et lorem. Integer venenatis nibh molestie commodo lobortis. Phasellus sit amet dignissim nisi. Vivamus nisi augue, scelerisque commodo libero vitae, vulputate interdum ex. Integer non risus sollicitudin, cursus ipsum vitae, rhoncus nulla." })] })] }));
37
+ };
38
+ const WithLongContentDemo = (props) => {
39
+ const [open, setOpen] = (0, react_1.useState)(false);
40
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: () => setOpen(true), children: "Show Modal" }), (0, jsx_runtime_1.jsxs)(_1.Modal, Object.assign({}, props, { isOpen: open, onClose: () => setOpen(false), children: [(0, jsx_runtime_1.jsx)(_1.Modal.Header, { children: "Aliquam fringilla quam vel purus rhoncus isuere. Morbi augue augue, venenatis vel consectetur sed, vulputate et lorem. Int" }), (0, jsx_runtime_1.jsxs)(_1.Modal.Content, { children: [(0, jsx_runtime_1.jsx)(Text_1.Text, { children: "Aliquam fringilla quam vel purus rhoncus interdum in quis sapien. Sed at eros et lectus mollis posuere. Morbi augue augue, venenatis vel consectetur sed, vulputate et lorem. Integer venenatis nibh molestie commodo lobortis. Phasellus sit amet dignissim nisi. Vivamus nisi augue, scelerisque commodo libero vitae, vulputate interdum ex. Integer non risus sollicitudin, cursus ipsum vitae, rhoncus nulla." }), (0, jsx_runtime_1.jsx)(Text_1.Text, { children: "Aliquam fringilla quam vel purus rhoncus interdum in quis sapien. Sed at eros et lectus mollis posuere. Morbi augue augue, venenatis vel consectetur sed, vulputate et lorem. Integer venenatis nibh molestie commodo lobortis. Phasellus sit amet dignissim nisi. Vivamus nisi augue, scelerisque commodo libero vitae, vulputate interdum ex. Integer non risus sollicitudin, cursus ipsum vitae, rhoncus nulla." }), (0, jsx_runtime_1.jsx)(Text_1.Text, { children: "Aliquam fringilla quam vel purus rhoncus interdum in quis sapien. Sed at eros et lectus mollis posuere. Morbi augue augue, venenatis vel consectetur sed, vulputate et lorem. Integer venenatis nibh molestie commodo lobortis. Phasellus sit amet dignissim nisi. Vivamus nisi augue, scelerisque commodo libero vitae, vulputate interdum ex. Integer non risus sollicitudin, cursus ipsum vitae, rhoncus nulla." }), (0, jsx_runtime_1.jsx)(Text_1.Text, { children: "Aliquam fringilla quam vel purus rhoncus interdum in quis sapien. Sed at eros et lectus mollis posuere. Morbi augue augue, venenatis vel consectetur sed, vulputate et lorem. Integer venenatis nibh molestie commodo lobortis. Phasellus sit amet dignissim nisi. Vivamus nisi augue, scelerisque commodo libero vitae, vulputate interdum ex. Integer non risus sollicitudin, cursus ipsum vitae, rhoncus nulla." }), (0, jsx_runtime_1.jsx)(Text_1.Text, { children: "Aliquam fringilla quam vel purus rhoncus interdum in quis sapien. Sed at eros et lectus mollis posuere. Morbi augue augue, venenatis vel consectetur sed, vulputate et lorem. Integer venenatis nibh molestie commodo lobortis. Phasellus sit amet dignissim nisi. Vivamus nisi augue, scelerisque commodo libero vitae, vulputate interdum ex. Integer non risus sollicitudin, cursus ipsum vitae, rhoncus nulla." }), (0, jsx_runtime_1.jsx)(Text_1.Text, { children: "Aliquam fringilla quam vel purus rhoncus interdum in quis sapien. Sed at eros et lectus mollis posuere. Morbi augue augue, venenatis vel consectetur sed, vulputate et lorem. Integer venenatis nibh molestie commodo lobortis. Phasellus sit amet dignissim nisi. Vivamus nisi augue, scelerisque commodo libero vitae, vulputate interdum ex. Integer non risus sollicitudin, cursus ipsum vitae, rhoncus nulla." }), (0, jsx_runtime_1.jsx)(Text_1.Text, { children: "Aliquam fringilla quam vel purus rhoncus interdum in quis sapien. Sed at eros et lectus mollis posuere. Morbi augue augue, venenatis vel consectetur sed, vulputate et lorem. Integer venenatis nibh molestie commodo lobortis. Phasellus sit amet dignissim nisi. Vivamus nisi augue, scelerisque commodo libero vitae, vulputate interdum ex. Integer non risus sollicitudin, cursus ipsum vitae, rhoncus nulla." })] })] }))] }));
41
+ };
42
+ const ChildModal = () => {
43
+ const [showModal, setShowModal] = (0, react_1.useState)(false);
44
+ const show = () => setShowModal(true);
45
+ const hide = () => setShowModal(false);
46
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: show, children: "Show child modal" }), (0, jsx_runtime_1.jsxs)(_1.Modal, { isOpen: showModal, onClose: hide, animation: "slideUp", children: [(0, jsx_runtime_1.jsx)(_1.Modal.Header, { children: "Howdy" }), (0, jsx_runtime_1.jsx)(_1.Modal.Content, { children: (0, jsx_runtime_1.jsx)(Text_1.Text, { children: "Closing or cancelling (with Escape key) should leave the parent modal open." }) })] })] }));
47
+ };
48
+ const WithNestedDemo = ({ animation, closeLabel }) => {
49
+ const [open, setOpen] = (0, react_1.useState)(false);
50
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Button_1.Button, { onClick: () => setOpen(true), children: "Show Nested Modal" }), (0, jsx_runtime_1.jsxs)(_1.Modal, { isOpen: open, onClose: () => setOpen(false), animation: animation, closeLabel: closeLabel, children: [(0, jsx_runtime_1.jsx)(_1.Modal.Header, { children: "The Latin Modal" }), (0, jsx_runtime_1.jsxs)(_1.Modal.Content, { children: [(0, jsx_runtime_1.jsx)(Text_1.Text, { children: "Closing or cancelling the next modal should leave me open." }), (0, jsx_runtime_1.jsx)(ChildModal, {})] })] })] }));
51
+ };
52
+ exports.Normal = {
53
+ render: (args) => (0, jsx_runtime_1.jsx)(Demo, Object.assign({}, args)),
54
+ args: {
55
+ isOpen: false,
56
+ closeLabel: "Close",
57
+ },
58
+ };
59
+ exports.FullScreen = {
60
+ render: (args) => (0, jsx_runtime_1.jsx)(FullScreenDemo, Object.assign({}, args)),
61
+ args: {
62
+ isOpen: false,
63
+ closeLabel: "Close",
64
+ isFullScreen: true,
65
+ },
66
+ };
67
+ exports.WithAnimation = {
68
+ render: (args) => (0, jsx_runtime_1.jsx)(WithAnimationDemo, Object.assign({}, args)),
69
+ args: {
70
+ isOpen: false,
71
+ animation: "slideUp",
72
+ closeLabel: "Close",
73
+ },
74
+ };
75
+ exports.WithLongContent = {
76
+ render: (args) => (0, jsx_runtime_1.jsx)(WithLongContentDemo, Object.assign({}, args)),
77
+ args: {
78
+ isOpen: false,
79
+ closeLabel: "Close",
80
+ },
81
+ };
82
+ exports.WithNested = {
83
+ render: (args) => (0, jsx_runtime_1.jsx)(WithNestedDemo, Object.assign({}, args)),
84
+ args: {
85
+ isOpen: false,
86
+ closeLabel: "Close",
87
+ },
88
+ };
89
+ exports.default = meta;
90
+ //# sourceMappingURL=Modal.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.stories.js","sourceRoot":"","sources":["../../../../src/components/Modal/Modal.stories.tsx"],"names":[],"mappings":";;;;AACA,iCAAiC;AACjC,wBAAsC;AACtC,uCAA8C;AAC9C,sCAAmC;AACnC,kCAA+B;AAI/B,MAAM,IAAI,GAAuB;IAC/B,KAAK,EAAE,kBAAkB;IACzB,SAAS,EAAE,QAAK;IAChB,QAAQ,kBACN,SAAS,EAAE;YACT,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC;YACvC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC1B,OAAO,EAAE;gBACP,OAAO,EAAE,SAAS;gBAClB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,SAAS;aACnB;SACF,IACE,IAAA,uBAAe,EAChB,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,mBAAmB,EACnB,wBAAwB,EACxB,MAAM,CACP,CACF;IACD,IAAI,EAAE;QACJ,YAAY,EAAE,KAAK;KACpB;CACF,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,KAAiB,EAAE,EAAE;IACjC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CACL,6DACE,uBAAC,eAAM,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,2BAAqB,EACzD,wBAAC,QAAK,oBAAK,KAAK,IAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,aAC3D,uBAAC,QAAK,CAAC,MAAM,kCAA+B,EAC5C,uBAAC,QAAK,CAAC,OAAO,qaAOE,KACV,IACP,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAE,EAAE;IAC3C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CACL,6DACE,uBAAC,eAAM,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAC,WAAW,mDAEhD,EACT,wBAAC,QAAK,oBACA,KAAK,IACT,MAAM,EAAE,IAAI,EACZ,YAAY,QACZ,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,aAE7B,uBAAC,QAAK,CAAC,MAAM,wCAAqC,EAClD,uBAAC,QAAK,CAAC,OAAO,qaAOE,KACV,IACP,CACJ,CAAC;AACJ,CAAC,CAAC;AAMF,MAAM,iBAAiB,GAAG,CAAC,EACzB,SAAS,EACT,YAAY,EACZ,UAAU,GAC0B,EAAE,EAAE;IACxC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CACL,6DACE,uBAAC,eAAM,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,yEAE3B,EACT,wBAAC,QAAK,IACJ,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAC7B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,UAAU,aAEtB,uBAAC,QAAK,CAAC,MAAM,kCAA+B,EAC5C,uBAAC,QAAK,CAAC,OAAO,qaAOE,IACV,IACP,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,KAAiB,EAAE,EAAE;IAChD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IACxC,OAAO,CACL,6DACE,uBAAC,eAAM,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,2BAAqB,EACzD,wBAAC,QAAK,oBAAK,KAAK,IAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,aAC3D,uBAAC,QAAK,CAAC,MAAM,6IAGE,EACf,wBAAC,QAAK,CAAC,OAAO,eACZ,uBAAC,WAAI,qaAQE,EACP,uBAAC,WAAI,qaAQE,EACP,uBAAC,WAAI,qaAQE,EACP,uBAAC,WAAI,qaAQE,EACP,uBAAC,WAAI,qaAQE,EACP,uBAAC,WAAI,qaAQE,EACP,uBAAC,WAAI,qaAQE,IACO,KACV,IACP,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAU,KAAK,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAEvC,OAAO,CACL,6DACE,uBAAC,eAAM,IAAC,OAAO,EAAE,IAAI,iCAA2B,EAChD,wBAAC,QAAK,IAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAC,SAAS,aAC1D,uBAAC,QAAK,CAAC,MAAM,wBAAqB,EAClC,uBAAC,QAAK,CAAC,OAAO,cACZ,uBAAC,WAAI,8FAGE,GACO,IACV,IACP,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAc,EAAE,EAAE;IAC/D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAExC,OAAO,CACL,6DACE,uBAAC,eAAM,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,kCAA4B,EAChE,wBAAC,QAAK,IACJ,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAC7B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,aAEtB,uBAAC,QAAK,CAAC,MAAM,kCAA+B,EAC5C,wBAAC,QAAK,CAAC,OAAO,eACZ,uBAAC,WAAI,6EAEE,EACP,uBAAC,UAAU,KAAG,IACA,IACV,IACP,CACJ,CAAC;AACJ,CAAC,CAAC;AAEW,QAAA,MAAM,GAAc;IAC/B,MAAM,EAAE,CAAC,IAAgB,EAAE,EAAE,CAAC,uBAAC,IAAI,oBAAK,IAAI,EAAI;IAChD,IAAI,EAAE;QACJ,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,OAAO;KACpB;CACF,CAAC;AAEW,QAAA,UAAU,GAAc;IACnC,MAAM,EAAE,CAAC,IAAgB,EAAE,EAAE,CAAC,uBAAC,cAAc,oBAAK,IAAI,EAAI;IAC1D,IAAI,EAAE;QACJ,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,OAAO;QACnB,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEW,QAAA,aAAa,GAAc;IACtC,MAAM,EAAE,CAAC,IAAgB,EAAE,EAAE,CAAC,uBAAC,iBAAiB,oBAAK,IAAI,EAAI;IAC7D,IAAI,EAAE;QACJ,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,OAAO;KACpB;CACF,CAAC;AAEW,QAAA,eAAe,GAAc;IACxC,MAAM,EAAE,CAAC,IAAgB,EAAE,EAAE,CAAC,uBAAC,mBAAmB,oBAAK,IAAI,EAAI;IAC/D,IAAI,EAAE;QACJ,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,OAAO;KACpB;CACF,CAAC;AAEW,QAAA,UAAU,GAAc;IACnC,MAAM,EAAE,CAAC,IAAgB,EAAE,EAAE,CAAC,uBAAC,cAAc,oBAAK,IAAI,EAAI;IAC1D,IAAI,EAAE;QACJ,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,OAAO;KACpB;CACF,CAAC;AAEF,kBAAe,IAAI,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("@testing-library/react");
8
+ const user_event_1 = __importDefault(require("@testing-library/user-event"));
9
+ const _1 = require(".");
10
+ const jestHTMLDialogPolyfill_1 = require("../../utils/jestHTMLDialogPolyfill");
11
+ (0, jestHTMLDialogPolyfill_1.jestHTMLDialogPolyfill)();
12
+ const MODAL_CLASS_NAME = "mobius/Modal";
13
+ const MODAL_CLOSE_CLASS_NAME = "mobius/ModalClose";
14
+ const mockMatchMedia = (matches) => {
15
+ Object.defineProperty(window, "matchMedia", {
16
+ writable: true,
17
+ configurable: true,
18
+ value: jest.fn().mockImplementation(query => ({
19
+ matches,
20
+ media: query,
21
+ onchange: null,
22
+ addListener: jest.fn(),
23
+ removeListener: jest.fn(),
24
+ addEventListener: jest.fn(),
25
+ removeEventListener: jest.fn(),
26
+ dispatchEvent: jest.fn(),
27
+ })),
28
+ });
29
+ };
30
+ describe("Modal", () => {
31
+ beforeEach(() => {
32
+ mockMatchMedia(true);
33
+ });
34
+ afterAll(() => {
35
+ jest.resetAllMocks();
36
+ });
37
+ it("should render without errors", () => {
38
+ const { container } = (0, react_1.render)((0, jsx_runtime_1.jsx)(_1.Modal, { isOpen: true, onClose: () => { } }));
39
+ expect(container).toBeTruthy();
40
+ });
41
+ it("should render with default class names", () => {
42
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(_1.Modal, { isOpen: true, onClose: () => { }, children: (0, jsx_runtime_1.jsx)(_1.Modal.Header, {}) }));
43
+ const dialog = react_1.screen.getByRole("dialog");
44
+ const closeButton = react_1.screen.getByLabelText("Close");
45
+ expect(dialog).toHaveClass(MODAL_CLASS_NAME);
46
+ expect(closeButton).toHaveClass(MODAL_CLOSE_CLASS_NAME);
47
+ });
48
+ it("should render with custom class name", () => {
49
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(_1.Modal, { className: "my-test-modal", isOpen: true, onClose: () => { }, children: (0, jsx_runtime_1.jsx)(_1.Modal.Header, {}) }));
50
+ const dialog = react_1.screen.getByRole("dialog");
51
+ const closeButton = react_1.screen.getByLabelText("Close");
52
+ expect(dialog).toHaveClass(MODAL_CLASS_NAME);
53
+ expect(dialog).toHaveClass("my-test-modal");
54
+ expect(closeButton).toHaveClass(MODAL_CLOSE_CLASS_NAME);
55
+ });
56
+ describe("given the animation prop is set to slideUp", () => {
57
+ it("should render with appropriate class name", () => {
58
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(_1.Modal, { isOpen: true, onClose: () => { }, animation: "slideUp" }));
59
+ const dialog = react_1.screen.getByRole("dialog");
60
+ expect(dialog).toHaveClass("--slide-up");
61
+ });
62
+ });
63
+ describe("given the animation prop is set to fade", () => {
64
+ it("should render with appropriate class name", () => {
65
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(_1.Modal, { isOpen: true, onClose: () => { }, animation: "fade" }));
66
+ const dialog = react_1.screen.getByRole("dialog");
67
+ expect(dialog).toHaveClass("--fade");
68
+ });
69
+ });
70
+ describe("given the user has reduced motion preference enabled", () => {
71
+ beforeEach(() => {
72
+ mockMatchMedia(false);
73
+ });
74
+ it("renders with appropriate class name", () => {
75
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(_1.Modal, { isOpen: true, onClose: () => { } }));
76
+ const dialog = react_1.screen.getByRole("dialog");
77
+ expect(dialog).toHaveClass("--has-reduced-motion");
78
+ });
79
+ });
80
+ // TODO: Cannot test until HTML Dialog is supported in JSDom
81
+ xdescribe("closing and cancelling", () => {
82
+ beforeAll(() => {
83
+ HTMLDialogElement.prototype.show = jest.fn(function mock() {
84
+ this.open = true;
85
+ });
86
+ HTMLDialogElement.prototype.showModal = jest.fn(function mock() {
87
+ this.open = true;
88
+ });
89
+ HTMLDialogElement.prototype.close = jest.fn(function mock() {
90
+ this.open = false;
91
+ });
92
+ });
93
+ it.only("pressing close button should close the modal", async () => {
94
+ const content = (0, jsx_runtime_1.jsx)(_1.Modal.Content, { children: "Sample content" });
95
+ let modalOpen = true;
96
+ const onClose = () => {
97
+ modalOpen = false;
98
+ };
99
+ const user = user_event_1.default.setup();
100
+ (0, react_1.render)((0, jsx_runtime_1.jsxs)(_1.Modal, { isOpen: modalOpen, onClose: onClose, closeLabel: "Close Me", children: [(0, jsx_runtime_1.jsx)(_1.Modal.Header, {}), content] }));
101
+ const modal = react_1.screen.getByRole("dialog", { hidden: true });
102
+ expect(modal).toBeInTheDocument();
103
+ expect(modal.open).toBe(true);
104
+ react_1.screen.debug();
105
+ const closeButton = react_1.screen.getByRole("button");
106
+ await user.click(closeButton); // This errors because
107
+ expect(modal.open).toBe(false);
108
+ });
109
+ it("should cancel the modal", async () => {
110
+ const content = (0, jsx_runtime_1.jsx)(_1.Modal.Content, { children: "Sample content" });
111
+ const onClose = jest.fn();
112
+ (0, react_1.render)((0, jsx_runtime_1.jsxs)(_1.Modal, { isOpen: true, onClose: onClose, children: [(0, jsx_runtime_1.jsx)(_1.Modal.Header, {}), content] }));
113
+ const modalContent = react_1.screen.getByText("Sample content");
114
+ expect(modalContent).toBeInTheDocument();
115
+ await user_event_1.default.keyboard("{escape}");
116
+ expect(onClose).toHaveBeenCalled();
117
+ });
118
+ });
119
+ describe("closeLabel prop", () => {
120
+ describe("given the label is defined", () => {
121
+ it("should render the label", () => {
122
+ const closeLabel = "Leave";
123
+ (0, react_1.render)((0, jsx_runtime_1.jsxs)(_1.Modal, { isOpen: true, onClose: () => { }, closeLabel: closeLabel, children: [(0, jsx_runtime_1.jsx)(_1.Modal.Header, {}), "Sample content"] }));
124
+ const closeButton = react_1.screen.getByText(closeLabel);
125
+ expect(closeButton).toBeInTheDocument();
126
+ });
127
+ });
128
+ describe("given the label is not defined", () => {
129
+ it("should render the default close button", () => {
130
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(_1.Modal, { isOpen: true, onClose: () => { }, children: (0, jsx_runtime_1.jsx)(_1.Modal.Header, {}) }));
131
+ const closeButton = react_1.screen.getByLabelText("Close");
132
+ expect(closeButton).toBeInTheDocument();
133
+ });
134
+ });
135
+ });
136
+ });
137
+ //# sourceMappingURL=Modal.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.test.js","sourceRoot":"","sources":["../../../../src/components/Modal/Modal.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { DivElementType as ModalContentDivElementType, ContentProps as ModalContentProps } from "./Content";
2
+ import { HeaderElementType as ModalHeaderElementType, HeaderProps as ModalHeaderProps } from "./Header";
3
+ import { ModalProps } from "./Modal";
4
+ declare const Modal: {
5
+ ({ isOpen, onClose, children, className, closeLabel, isFullScreen, animation, size, appElement, preventCloseOnEsc, shouldFocusAfterRender, parentSelector, }: ModalProps): import("react/jsx-runtime").JSX.Element;
6
+ displayName: string;
7
+ } & {
8
+ Header: import("react").ForwardRefExoticComponent<Omit<ModalHeaderProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
9
+ Content: import("react").ForwardRefExoticComponent<Omit<ModalContentProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
10
+ };
11
+ export { Modal };
12
+ export type { ModalContentDivElementType, ModalContentProps, ModalHeaderElementType, ModalHeaderProps, ModalProps, };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Modal/index.tsx"],"sourcesContent":["import {\n Content,\n DivElementType as ModalContentDivElementType,\n ContentProps as ModalContentProps,\n} from \"./Content\";\nimport {\n Header,\n HeaderElementType as ModalHeaderElementType,\n HeaderProps as ModalHeaderProps,\n} from \"./Header\";\nimport { Modal as ModalComponent, ModalProps } from \"./Modal\";\n\nconst Modal = Object.assign(ModalComponent, {\n Header,\n Content,\n});\n\nModal.displayName = \"Modal\";\nexport { Modal };\n\nexport type {\n ModalContentDivElementType,\n ModalContentProps,\n ModalHeaderElementType,\n ModalHeaderProps,\n ModalProps,\n};\n"],"names":["Modal","Object","assign","ModalComponent","Header","Content","displayName"],"mappings":";;;;+BAkBSA;;;eAAAA;;;yBAdF;wBAKA;uBAC6C;AAEpD,MAAMA,QAAQC,OAAOC,MAAM,CAACC,YAAc,EAAE;IAC1CC,QAAAA,cAAM;IACNC,SAAAA,gBAAO;AACT;AAEAL,MAAMM,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../../src/components/Modal/index.tsx"],"sourcesContent":["import {\n Content,\n DivElementType as ModalContentDivElementType,\n ContentProps as ModalContentProps,\n} from \"./Content\";\nimport {\n Header,\n HeaderElementType as ModalHeaderElementType,\n HeaderProps as ModalHeaderProps,\n} from \"./Header\";\nimport { Modal as ModalComponent } from \"./Modal\";\nimport { ModalProps } from \"./types\";\n\nconst Modal = Object.assign(ModalComponent, {\n Header,\n Content,\n});\n\nModal.displayName = \"Modal\";\nexport { Modal };\n\nexport type {\n ModalContentDivElementType,\n ModalContentProps,\n ModalHeaderElementType,\n ModalHeaderProps,\n ModalProps,\n};\n"],"names":["Modal","Object","assign","ModalComponent","Header","Content","displayName"],"mappings":";;;;+BAmBSA;;;eAAAA;;;yBAfF;wBAKA;uBACiC;AAGxC,MAAMA,QAAQC,OAAOC,MAAM,CAACC,YAAc,EAAE;IAC1CC,QAAAA,cAAM;IACNC,SAAAA,gBAAO;AACT;AAEAL,MAAMM,WAAW,GAAG"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/Modal/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { ChangeEvent, Ref, RefAttributes } from "react";
2
+ import { DOMProps } from "../../types/dom";
3
+ import { UseLabelProps } from "../../hooks";
4
+ import { ForwardedRefComponent } from "../../types/components";
5
+ export type NumberFieldElementType = HTMLInputElement;
6
+ export interface NumberFieldProps extends DOMProps, UseLabelProps, RefAttributes<NumberFieldElementType> {
7
+ id?: string;
8
+ /** Custom class name for setting specific CSS */
9
+ className?: string;
10
+ validationState?: "valid" | "invalid" | undefined;
11
+ /** The smallest value allowed for the input. */
12
+ minValue?: number;
13
+ /** The largest value allowed for the input. */
14
+ maxValue?: number;
15
+ /** The amount that the input value changes with each increment or decrement "tick". */
16
+ step?: number;
17
+ /** The default value (uncontrolled). */
18
+ defaultValue?: number;
19
+ /** Handler that is called when the value changes. */
20
+ onChange?: (event: ChangeEvent<NumberFieldElementType>) => void;
21
+ /** Temporary text that occupies the text input when it is empty. */
22
+ placeholder?: string;
23
+ /** Whether user input is required on the input before form submission. */
24
+ isRequired?: boolean;
25
+ /** Whether the input is disabled. */
26
+ isDisabled?: boolean;
27
+ /** Whether the input can be selected but not changed by the user. */
28
+ isReadOnly?: boolean;
29
+ /** An error message for the field. */
30
+ errorMessage?: string;
31
+ /** Identifies the element (or elements) that describes the object. */
32
+ "aria-describedby"?: string | undefined;
33
+ }
34
+ export type NumberFieldRef = Ref<NumberFieldElementType>;
35
+ export declare const NumberField: ForwardedRefComponent<NumberFieldProps, NumberFieldElementType>;
@@ -0,0 +1,10 @@
1
+ import type { Meta, StoryObj } from "@storybook/react";
2
+ import { NumberField } from "./NumberField";
3
+ type StoryType = StoryObj<typeof NumberField>;
4
+ declare const meta: Meta<typeof NumberField>;
5
+ export declare const Normal: StoryType;
6
+ export declare const LimitedRange: StoryType;
7
+ export declare const Valid: StoryType;
8
+ export declare const Invalid: StoryType;
9
+ export declare const Disabled: StoryType;
10
+ export default meta;