@simplybusiness/mobius 10.1.2 → 10.3.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 (342) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/cjs/components/AddressLookup/AddressLookup.js +223 -162
  3. package/dist/cjs/components/AddressLookup/AddressLookup.js.map +4 -4
  4. package/dist/cjs/components/AddressLookup/index.js +223 -162
  5. package/dist/cjs/components/AddressLookup/index.js.map +4 -4
  6. package/dist/cjs/components/Alert/Alert.js +10 -7
  7. package/dist/cjs/components/Alert/Alert.js.map +2 -2
  8. package/dist/cjs/components/Alert/index.js +10 -7
  9. package/dist/cjs/components/Alert/index.js.map +2 -2
  10. package/dist/cjs/components/Box/Box.js +18 -3
  11. package/dist/cjs/components/Box/Box.js.map +3 -3
  12. package/dist/cjs/components/Box/index.js +18 -3
  13. package/dist/cjs/components/Box/index.js.map +3 -3
  14. package/dist/cjs/components/Breadcrumbs/BreadcrumbItem.js +18 -3
  15. package/dist/cjs/components/Breadcrumbs/BreadcrumbItem.js.map +3 -3
  16. package/dist/cjs/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  17. package/dist/cjs/components/Breadcrumbs/index.js +18 -3
  18. package/dist/cjs/components/Breadcrumbs/index.js.map +3 -3
  19. package/dist/cjs/components/Checkbox/Checkbox.js +190 -129
  20. package/dist/cjs/components/Checkbox/Checkbox.js.map +4 -4
  21. package/dist/cjs/components/Checkbox/CheckboxGroup.js +195 -134
  22. package/dist/cjs/components/Checkbox/CheckboxGroup.js.map +4 -4
  23. package/dist/cjs/components/Checkbox/index.js +203 -142
  24. package/dist/cjs/components/Checkbox/index.js.map +4 -4
  25. package/dist/cjs/components/Combobox/Combobox.js +218 -157
  26. package/dist/cjs/components/Combobox/Combobox.js.map +4 -4
  27. package/dist/cjs/components/Combobox/index.js +218 -157
  28. package/dist/cjs/components/Combobox/index.js.map +4 -4
  29. package/dist/cjs/components/DateField/DateField.js +191 -130
  30. package/dist/cjs/components/DateField/DateField.js.map +4 -4
  31. package/dist/cjs/components/DateField/index.js +191 -130
  32. package/dist/cjs/components/DateField/index.js.map +4 -4
  33. package/dist/cjs/components/ErrorMessage/ErrorMessage.js +182 -121
  34. package/dist/cjs/components/ErrorMessage/ErrorMessage.js.map +4 -4
  35. package/dist/cjs/components/ErrorMessage/index.js +182 -121
  36. package/dist/cjs/components/ErrorMessage/index.js.map +4 -4
  37. package/dist/cjs/components/ExpandableText/ExpandableText.js +182 -121
  38. package/dist/cjs/components/ExpandableText/ExpandableText.js.map +4 -4
  39. package/dist/cjs/components/ExpandableText/index.js +182 -121
  40. package/dist/cjs/components/ExpandableText/index.js.map +4 -4
  41. package/dist/cjs/components/Grid/Grid.js +2 -2
  42. package/dist/cjs/components/Grid/Grid.js.map +2 -2
  43. package/dist/cjs/components/Grid/Item.js +3 -3
  44. package/dist/cjs/components/Grid/Item.js.map +2 -2
  45. package/dist/cjs/components/Grid/index.js +5 -5
  46. package/dist/cjs/components/Grid/index.js.map +2 -2
  47. package/dist/cjs/components/List/List.js +15 -7
  48. package/dist/cjs/components/List/List.js.map +2 -2
  49. package/dist/cjs/components/List/index.js +15 -7
  50. package/dist/cjs/components/List/index.js.map +2 -2
  51. package/dist/cjs/components/Logo/Logo.js.map +2 -2
  52. package/dist/cjs/components/Logo/index.js.map +2 -2
  53. package/dist/cjs/components/MaskedField/MaskedField.js +185 -124
  54. package/dist/cjs/components/MaskedField/MaskedField.js.map +4 -4
  55. package/dist/cjs/components/MaskedField/index.js +185 -124
  56. package/dist/cjs/components/MaskedField/index.js.map +4 -4
  57. package/dist/cjs/components/Modal/Header.js +38 -21
  58. package/dist/cjs/components/Modal/Header.js.map +3 -3
  59. package/dist/cjs/components/Modal/Modal.js +13 -3
  60. package/dist/cjs/components/Modal/Modal.js.map +2 -2
  61. package/dist/cjs/components/Modal/ModalContext.js +4 -1
  62. package/dist/cjs/components/Modal/ModalContext.js.map +2 -2
  63. package/dist/cjs/components/Modal/index.js +63 -39
  64. package/dist/cjs/components/Modal/index.js.map +3 -3
  65. package/dist/cjs/components/Modal/types.js.map +1 -1
  66. package/dist/cjs/components/Modal/useModal.js +6 -3
  67. package/dist/cjs/components/Modal/useModal.js.map +2 -2
  68. package/dist/cjs/components/NumberField/NumberField.js +185 -124
  69. package/dist/cjs/components/NumberField/NumberField.js.map +4 -4
  70. package/dist/cjs/components/NumberField/index.js +185 -124
  71. package/dist/cjs/components/NumberField/index.js.map +4 -4
  72. package/dist/cjs/components/PasswordField/PasswordField.js +185 -124
  73. package/dist/cjs/components/PasswordField/PasswordField.js.map +4 -4
  74. package/dist/cjs/components/PasswordField/ShowHideButton.js +182 -121
  75. package/dist/cjs/components/PasswordField/ShowHideButton.js.map +4 -4
  76. package/dist/cjs/components/PasswordField/index.js +185 -124
  77. package/dist/cjs/components/PasswordField/index.js.map +4 -4
  78. package/dist/cjs/components/Radio/Radio.js +182 -121
  79. package/dist/cjs/components/Radio/Radio.js.map +4 -4
  80. package/dist/cjs/components/Radio/RadioGroup.js +182 -121
  81. package/dist/cjs/components/Radio/RadioGroup.js.map +4 -4
  82. package/dist/cjs/components/Radio/index.js +182 -121
  83. package/dist/cjs/components/Radio/index.js.map +4 -4
  84. package/dist/cjs/components/SVG/SVG.js.map +2 -2
  85. package/dist/cjs/components/SVG/index.js.map +2 -2
  86. package/dist/cjs/components/Segment/Segment.js +2 -2
  87. package/dist/cjs/components/Segment/Segment.js.map +2 -2
  88. package/dist/cjs/components/Segment/index.js +2 -2
  89. package/dist/cjs/components/Segment/index.js.map +2 -2
  90. package/dist/cjs/components/Select/Select.js +182 -121
  91. package/dist/cjs/components/Select/Select.js.map +4 -4
  92. package/dist/cjs/components/Select/index.js +182 -121
  93. package/dist/cjs/components/Select/index.js.map +4 -4
  94. package/dist/cjs/components/Table/HeaderCell.js +2 -2
  95. package/dist/cjs/components/Table/HeaderCell.js.map +2 -2
  96. package/dist/cjs/components/Table/index.js +2 -2
  97. package/dist/cjs/components/Table/index.js.map +2 -2
  98. package/dist/cjs/components/Text/Text.js +10 -7
  99. package/dist/cjs/components/Text/Text.js.map +2 -2
  100. package/dist/cjs/components/Text/index.js +10 -7
  101. package/dist/cjs/components/Text/index.js.map +2 -2
  102. package/dist/cjs/components/TextArea/TextArea.js +182 -121
  103. package/dist/cjs/components/TextArea/TextArea.js.map +4 -4
  104. package/dist/cjs/components/TextArea/index.js +182 -121
  105. package/dist/cjs/components/TextArea/index.js.map +4 -4
  106. package/dist/cjs/components/TextField/TextField.js +185 -124
  107. package/dist/cjs/components/TextField/TextField.js.map +4 -4
  108. package/dist/cjs/components/TextField/index.js +185 -124
  109. package/dist/cjs/components/TextField/index.js.map +4 -4
  110. package/dist/cjs/components/TextOrHTML/TextOrHTML.js +10 -7
  111. package/dist/cjs/components/TextOrHTML/TextOrHTML.js.map +2 -2
  112. package/dist/cjs/components/TextOrHTML/index.js +10 -7
  113. package/dist/cjs/components/TextOrHTML/index.js.map +2 -2
  114. package/dist/cjs/components/index.js +209 -148
  115. package/dist/cjs/components/index.js.map +4 -4
  116. package/dist/cjs/index.js +209 -148
  117. package/dist/cjs/index.js.map +4 -4
  118. package/dist/cjs/meta.json +876 -571
  119. package/dist/cjs/utils/filterUnsetValues.js +36 -0
  120. package/dist/cjs/utils/filterUnsetValues.js.map +7 -0
  121. package/dist/cjs/utils/index.js +13 -0
  122. package/dist/cjs/utils/index.js.map +3 -3
  123. package/dist/esm/{chunk-NYFCN7EA.js → chunk-6GGDGE7D.js} +4 -4
  124. package/dist/esm/{chunk-OUKMP3DO.js → chunk-7JT4DKQA.js} +2 -2
  125. package/dist/esm/chunk-CZWEMAKZ.js +16 -0
  126. package/dist/esm/chunk-CZWEMAKZ.js.map +7 -0
  127. package/dist/esm/{chunk-Q5YY6HPF.js → chunk-DZVBN6ZI.js} +5 -5
  128. package/dist/esm/{chunk-OC6ULO4M.js → chunk-EJLNC5X5.js} +2 -2
  129. package/dist/esm/{chunk-LVZ2T6AY.js → chunk-EZ4S7XVZ.js} +16 -8
  130. package/dist/esm/chunk-EZ4S7XVZ.js.map +7 -0
  131. package/dist/esm/chunk-FIAL4HTE.js +1 -0
  132. package/dist/esm/{chunk-YLL2DKVF.js → chunk-FQ6P6JB5.js} +3 -3
  133. package/dist/esm/chunk-FQ6P6JB5.js.map +7 -0
  134. package/dist/esm/{chunk-OZ2IUZIJ.js → chunk-HP2NRM7T.js} +2 -2
  135. package/dist/esm/{chunk-PB2OICEB.js → chunk-I6EUIFUJ.js} +15 -11
  136. package/dist/esm/chunk-I6EUIFUJ.js.map +7 -0
  137. package/dist/esm/{chunk-3IMYDZRT.js → chunk-JFDDW3IV.js} +1 -1
  138. package/dist/esm/chunk-JFDDW3IV.js.map +7 -0
  139. package/dist/esm/{chunk-4IB5ROL6.js → chunk-KXLTGNKF.js} +12 -5
  140. package/dist/esm/chunk-KXLTGNKF.js.map +7 -0
  141. package/dist/esm/{chunk-TL4OCKNP.js → chunk-LWRY3VIB.js} +2 -2
  142. package/dist/esm/chunk-MPB5F6QL.js +53 -0
  143. package/dist/esm/chunk-MPB5F6QL.js.map +7 -0
  144. package/dist/esm/{chunk-DNMS6KEY.js → chunk-PARKMZYZ.js} +4 -4
  145. package/dist/esm/{chunk-DNMS6KEY.js.map → chunk-PARKMZYZ.js.map} +2 -2
  146. package/dist/esm/chunk-Q5MIALGZ.js +15 -0
  147. package/dist/esm/{chunk-ZHX7Z5IU.js.map → chunk-Q5MIALGZ.js.map} +2 -2
  148. package/dist/esm/{chunk-N5WGQAHM.js → chunk-QWD72EVP.js} +4 -4
  149. package/dist/esm/{chunk-KLXMVFIR.js → chunk-TBKQA5ZF.js} +5 -2
  150. package/dist/esm/{chunk-KLXMVFIR.js.map → chunk-TBKQA5ZF.js.map} +2 -2
  151. package/dist/esm/{chunk-B243ELKZ.js → chunk-TJCUKTFX.js} +10 -4
  152. package/dist/esm/chunk-TJCUKTFX.js.map +7 -0
  153. package/dist/esm/{chunk-P5ZPHAQT.js → chunk-UCNWPF7R.js} +3 -3
  154. package/dist/esm/chunk-UCNWPF7R.js.map +7 -0
  155. package/dist/esm/{chunk-S37ULE57.js → chunk-VASDBM4Z.js} +1 -1
  156. package/dist/esm/{chunk-S37ULE57.js.map → chunk-VASDBM4Z.js.map} +2 -2
  157. package/dist/esm/{chunk-QRHDVVRK.js → chunk-VIDKIVA6.js} +2 -2
  158. package/dist/esm/{chunk-SDGIWQ3R.js → chunk-WP5OEMNG.js} +3 -3
  159. package/dist/esm/{chunk-SDGIWQ3R.js.map → chunk-WP5OEMNG.js.map} +2 -2
  160. package/dist/esm/{chunk-MLN5ELQR.js → chunk-WXRQIMMM.js} +1 -1
  161. package/dist/esm/chunk-WXRQIMMM.js.map +7 -0
  162. package/dist/esm/{chunk-O47IW7HD.js → chunk-YCE2KOB2.js} +5 -5
  163. package/dist/esm/{chunk-SNRPWCHL.js → chunk-ZS5MFZHD.js} +11 -8
  164. package/dist/esm/chunk-ZS5MFZHD.js.map +7 -0
  165. package/dist/esm/components/Accordion/Accordion.js +7 -6
  166. package/dist/esm/components/Accordion/AccordionLink.js +6 -5
  167. package/dist/esm/components/Accordion/AccordionList.js +8 -7
  168. package/dist/esm/components/Accordion/index.js +8 -7
  169. package/dist/esm/components/AddressLookup/AddressLookup.js +41 -40
  170. package/dist/esm/components/AddressLookup/__mocks__/LoqateAddressLookupService.js +2 -1
  171. package/dist/esm/components/AddressLookup/__mocks__/LoqateAddressLookupService.js.map +1 -1
  172. package/dist/esm/components/AddressLookup/index.js +41 -40
  173. package/dist/esm/components/Alert/Alert.js +4 -4
  174. package/dist/esm/components/Alert/index.js +4 -4
  175. package/dist/esm/components/Box/Box.js +3 -2
  176. package/dist/esm/components/Box/index.js +3 -2
  177. package/dist/esm/components/Breadcrumbs/BreadcrumbItem.js +4 -3
  178. package/dist/esm/components/Breadcrumbs/Breadcrumbs.js +1 -1
  179. package/dist/esm/components/Breadcrumbs/index.js +7 -6
  180. package/dist/esm/components/Checkbox/Checkbox.js +41 -40
  181. package/dist/esm/components/Checkbox/CheckboxGroup.js +41 -40
  182. package/dist/esm/components/Checkbox/index.js +41 -40
  183. package/dist/esm/components/Combobox/Combobox.js +41 -40
  184. package/dist/esm/components/Combobox/index.js +41 -40
  185. package/dist/esm/components/Container/Container.js +2 -1
  186. package/dist/esm/components/Container/index.js +2 -1
  187. package/dist/esm/components/DateField/DateField.js +41 -40
  188. package/dist/esm/components/DateField/index.js +41 -40
  189. package/dist/esm/components/Drawer/Drawer.js +4 -3
  190. package/dist/esm/components/Drawer/index.js +4 -3
  191. package/dist/esm/components/ErrorMessage/ErrorMessage.js +41 -40
  192. package/dist/esm/components/ErrorMessage/index.js +41 -40
  193. package/dist/esm/components/ExpandableText/ExpandableText.js +41 -40
  194. package/dist/esm/components/ExpandableText/index.js +41 -40
  195. package/dist/esm/components/Fieldset/Fieldset.js +2 -1
  196. package/dist/esm/components/Fieldset/index.js +2 -1
  197. package/dist/esm/components/Flex/Flex.js +2 -1
  198. package/dist/esm/components/Flex/index.js +2 -1
  199. package/dist/esm/components/Flex/propUtils.js +2 -1
  200. package/dist/esm/components/Grid/Grid.js +3 -2
  201. package/dist/esm/components/Grid/Item.js +5 -4
  202. package/dist/esm/components/Grid/index.js +7 -6
  203. package/dist/esm/components/List/List.js +1 -1
  204. package/dist/esm/components/List/index.js +1 -1
  205. package/dist/esm/components/Logo/Logo.js +1 -1
  206. package/dist/esm/components/Logo/index.js +1 -1
  207. package/dist/esm/components/MaskedField/MaskedField.js +41 -40
  208. package/dist/esm/components/MaskedField/MaskedField.js.map +1 -1
  209. package/dist/esm/components/MaskedField/index.js +41 -40
  210. package/dist/esm/components/Modal/Header.js +3 -3
  211. package/dist/esm/components/Modal/Modal.js +6 -5
  212. package/dist/esm/components/Modal/ModalContext.js +1 -1
  213. package/dist/esm/components/Modal/index.js +10 -9
  214. package/dist/esm/components/Modal/useModal.js +2 -2
  215. package/dist/esm/components/NumberField/NumberField.js +41 -40
  216. package/dist/esm/components/NumberField/index.js +41 -40
  217. package/dist/esm/components/PasswordField/PasswordField.js +41 -40
  218. package/dist/esm/components/PasswordField/ShowHideButton.js +41 -40
  219. package/dist/esm/components/PasswordField/index.js +41 -40
  220. package/dist/esm/components/Radio/Radio.js +41 -40
  221. package/dist/esm/components/Radio/RadioGroup.js +41 -40
  222. package/dist/esm/components/Radio/index.js +41 -40
  223. package/dist/esm/components/SVG/SVG.js +1 -1
  224. package/dist/esm/components/SVG/index.js +1 -1
  225. package/dist/esm/components/Segment/Segment.js +1 -1
  226. package/dist/esm/components/Segment/index.js +1 -1
  227. package/dist/esm/components/Select/Select.js +41 -40
  228. package/dist/esm/components/Select/index.js +41 -40
  229. package/dist/esm/components/Slider/Slider.js +4 -3
  230. package/dist/esm/components/Slider/index.js +4 -3
  231. package/dist/esm/components/Table/HeaderCell.js +1 -1
  232. package/dist/esm/components/Table/index.js +2 -2
  233. package/dist/esm/components/Text/Text.js +1 -1
  234. package/dist/esm/components/Text/index.js +1 -1
  235. package/dist/esm/components/TextArea/TextArea.js +41 -40
  236. package/dist/esm/components/TextArea/index.js +41 -40
  237. package/dist/esm/components/TextField/TextField.js +41 -40
  238. package/dist/esm/components/TextField/index.js +41 -40
  239. package/dist/esm/components/TextOrHTML/TextOrHTML.js +2 -2
  240. package/dist/esm/components/TextOrHTML/index.js +2 -2
  241. package/dist/esm/components/Title/Title.js +2 -1
  242. package/dist/esm/components/Title/index.js +2 -1
  243. package/dist/esm/components/Toast/index.js +3 -3
  244. package/dist/esm/components/Trust/Trust.js +2 -1
  245. package/dist/esm/components/Trust/index.js +2 -1
  246. package/dist/esm/components/index.js +54 -53
  247. package/dist/esm/hooks/index.js +6 -5
  248. package/dist/esm/hooks/useDialog/index.js +2 -1
  249. package/dist/esm/hooks/useDialog/useDialog.js +2 -1
  250. package/dist/esm/hooks/useDialogPolyfill/index.js +2 -1
  251. package/dist/esm/hooks/useDialogPolyfill/useDialogPolyfill.js +2 -1
  252. package/dist/esm/index.js +56 -55
  253. package/dist/esm/meta.json +5694 -5363
  254. package/dist/esm/utils/filterUnsetValues.js +8 -0
  255. package/dist/esm/utils/filterUnsetValues.js.map +7 -0
  256. package/dist/esm/utils/index.js +5 -1
  257. package/dist/tsconfig.build.tsbuildinfo +1 -1
  258. package/dist/types/components/Breadcrumbs/Breadcrumbs.d.ts +1 -1
  259. package/dist/types/components/Grid/Grid.d.ts +1 -1
  260. package/dist/types/components/Grid/Item.d.ts +1 -1
  261. package/dist/types/components/List/List.d.ts +1 -1
  262. package/dist/types/components/Logo/Logo.d.ts +8 -0
  263. package/dist/types/components/Modal/types.d.ts +2 -0
  264. package/dist/types/components/Modal/useModal.d.ts +2 -0
  265. package/dist/types/components/SVG/SVG.d.ts +4 -0
  266. package/dist/types/components/Segment/Segment.d.ts +4 -3
  267. package/dist/types/components/Table/HeaderCell.d.ts +2 -1
  268. package/dist/types/components/Text/Text.d.ts +1 -1
  269. package/dist/types/utils/filterUnsetValues.d.ts +6 -0
  270. package/dist/types/utils/index.d.ts +1 -0
  271. package/package.json +4 -4
  272. package/src/components/Accordion/Accordion.test.tsx +7 -0
  273. package/src/components/AddressLookup/AddressLookup.test.tsx +76 -0
  274. package/src/components/AddressLookup/AddressLookup.tsx +9 -0
  275. package/src/components/Box/Box.test.tsx +24 -0
  276. package/src/components/Box/Box.tsx +11 -3
  277. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +130 -0
  278. package/src/components/Breadcrumbs/Breadcrumbs.tsx +1 -1
  279. package/src/components/Button/Button.test.tsx +77 -0
  280. package/src/components/Container/Container.test.tsx +19 -0
  281. package/src/components/Divider/Divider.test.tsx +18 -0
  282. package/src/components/Drawer/Drawer.css +24 -3
  283. package/src/components/Flex/Flex.test.tsx +7 -0
  284. package/src/components/Grid/Grid.test.tsx +30 -0
  285. package/src/components/Grid/Grid.tsx +2 -2
  286. package/src/components/Grid/Item.tsx +3 -3
  287. package/src/components/Icon/Icon.test.tsx +33 -0
  288. package/src/components/Image/Image.test.tsx +7 -0
  289. package/src/components/Label/Label.test.tsx +7 -0
  290. package/src/components/Link/Link.test.tsx +44 -0
  291. package/src/components/List/List.test.tsx +11 -0
  292. package/src/components/List/List.tsx +6 -2
  293. package/src/components/Logo/Logo.test.tsx +36 -0
  294. package/src/components/Logo/Logo.tsx +8 -0
  295. package/src/components/Modal/Header.tsx +13 -2
  296. package/src/components/Modal/Modal.css +42 -3
  297. package/src/components/Modal/Modal.test.tsx +19 -1
  298. package/src/components/Modal/Modal.tsx +11 -2
  299. package/src/components/Modal/ModalContext.tsx +2 -0
  300. package/src/components/Modal/types.ts +2 -0
  301. package/src/components/Modal/useModal.ts +2 -2
  302. package/src/components/Option/Option.test.tsx +67 -0
  303. package/src/components/Progress/Progress.test.tsx +7 -0
  304. package/src/components/SVG/SVG.test.tsx +40 -0
  305. package/src/components/SVG/SVG.tsx +4 -0
  306. package/src/components/Segment/Segment.test.tsx +72 -0
  307. package/src/components/Segment/Segment.tsx +7 -4
  308. package/src/components/Stack/Stack.test.tsx +41 -1
  309. package/src/components/Table/HeaderCell.tsx +3 -2
  310. package/src/components/Table/Table.test.tsx +180 -0
  311. package/src/components/Text/Text.test.tsx +80 -0
  312. package/src/components/Text/Text.tsx +13 -8
  313. package/src/components/TextAreaInput/TextAreaInput.test.tsx +51 -0
  314. package/src/components/Trust/Trust.test.tsx +52 -1
  315. package/src/components/VisuallyHidden/VisuallyHidden.test.tsx +66 -0
  316. package/src/utils/filterUndefinedProps.test.ts +11 -0
  317. package/src/utils/filterUnsetValues.test.ts +16 -0
  318. package/src/utils/filterUnsetValues.ts +17 -0
  319. package/src/utils/index.ts +1 -0
  320. package/dist/esm/chunk-3IMYDZRT.js.map +0 -7
  321. package/dist/esm/chunk-4IB5ROL6.js.map +0 -7
  322. package/dist/esm/chunk-B243ELKZ.js.map +0 -7
  323. package/dist/esm/chunk-DSYPZETD.js +0 -1
  324. package/dist/esm/chunk-LVZ2T6AY.js.map +0 -7
  325. package/dist/esm/chunk-MLN5ELQR.js.map +0 -7
  326. package/dist/esm/chunk-P5ZPHAQT.js.map +0 -7
  327. package/dist/esm/chunk-PB2OICEB.js.map +0 -7
  328. package/dist/esm/chunk-SNRPWCHL.js.map +0 -7
  329. package/dist/esm/chunk-XNVA7FCA.js +0 -39
  330. package/dist/esm/chunk-XNVA7FCA.js.map +0 -7
  331. package/dist/esm/chunk-YLL2DKVF.js.map +0 -7
  332. package/dist/esm/chunk-ZHX7Z5IU.js +0 -15
  333. /package/dist/esm/{chunk-NYFCN7EA.js.map → chunk-6GGDGE7D.js.map} +0 -0
  334. /package/dist/esm/{chunk-OUKMP3DO.js.map → chunk-7JT4DKQA.js.map} +0 -0
  335. /package/dist/esm/{chunk-Q5YY6HPF.js.map → chunk-DZVBN6ZI.js.map} +0 -0
  336. /package/dist/esm/{chunk-OC6ULO4M.js.map → chunk-EJLNC5X5.js.map} +0 -0
  337. /package/dist/esm/{chunk-DSYPZETD.js.map → chunk-FIAL4HTE.js.map} +0 -0
  338. /package/dist/esm/{chunk-OZ2IUZIJ.js.map → chunk-HP2NRM7T.js.map} +0 -0
  339. /package/dist/esm/{chunk-TL4OCKNP.js.map → chunk-LWRY3VIB.js.map} +0 -0
  340. /package/dist/esm/{chunk-N5WGQAHM.js.map → chunk-QWD72EVP.js.map} +0 -0
  341. /package/dist/esm/{chunk-QRHDVVRK.js.map → chunk-VIDKIVA6.js.map} +0 -0
  342. /package/dist/esm/{chunk-O47IW7HD.js.map → chunk-YCE2KOB2.js.map} +0 -0
@@ -1,4 +1,6 @@
1
+ import { createRef } from "react";
1
2
  import { render, screen } from "@testing-library/react";
3
+ import userEvent from "@testing-library/user-event";
2
4
  import { TextAreaInput } from ".";
3
5
 
4
6
  const CLASS_NAME = "mobius-text-area__input";
@@ -35,4 +37,53 @@ describe("TextAreaInput", () => {
35
37
  expect(screen.getByLabelText("test")).toHaveClass(CLASS_NAME);
36
38
  });
37
39
  });
40
+
41
+ describe("accessibility attributes", () => {
42
+ it("forwards aria-label", () => {
43
+ render(<TextAreaInput aria-label="Description" />);
44
+ expect(screen.getByRole("textbox")).toHaveAttribute(
45
+ "aria-label",
46
+ "Description",
47
+ );
48
+ });
49
+
50
+ it("forwards aria-describedby", () => {
51
+ render(<TextAreaInput aria-describedby="help-text" />);
52
+ expect(screen.getByRole("textbox")).toHaveAttribute(
53
+ "aria-describedby",
54
+ "help-text",
55
+ );
56
+ });
57
+
58
+ it("sets required when isRequired", () => {
59
+ render(<TextAreaInput isRequired />);
60
+ expect(screen.getByRole("textbox")).toBeRequired();
61
+ });
62
+
63
+ it("sets readOnly when isReadOnly", () => {
64
+ render(<TextAreaInput isReadOnly />);
65
+ expect(screen.getByRole("textbox")).toHaveAttribute("readOnly");
66
+ });
67
+ });
68
+
69
+ describe("focus", () => {
70
+ it("is focusable via Tab", async () => {
71
+ render(<TextAreaInput aria-label="test" />);
72
+ await userEvent.tab();
73
+ expect(screen.getByRole("textbox")).toHaveFocus();
74
+ });
75
+
76
+ it("accepts typed input", async () => {
77
+ render(<TextAreaInput aria-label="test" />);
78
+ const textbox = screen.getByRole("textbox");
79
+ await userEvent.type(textbox, "hello");
80
+ expect(textbox).toHaveValue("hello");
81
+ });
82
+ });
83
+
84
+ it("forwards ref", () => {
85
+ const ref = createRef<HTMLTextAreaElement>();
86
+ render(<TextAreaInput ref={ref} aria-label="test" />);
87
+ expect(ref.current).toBeInstanceOf(HTMLTextAreaElement);
88
+ });
38
89
  });
@@ -1,4 +1,5 @@
1
- import { render } from "@testing-library/react";
1
+ import { createRef } from "react";
2
+ import { render, screen } from "@testing-library/react";
2
3
  import { Trust } from ".";
3
4
 
4
5
  describe("Trust", () => {
@@ -35,4 +36,54 @@ describe("Trust", () => {
35
36
  );
36
37
  });
37
38
  });
39
+
40
+ describe("semantic HTML and accessibility", () => {
41
+ it("renders a <div> element by default", () => {
42
+ const { container } = render(
43
+ <Trust locale="en-US" variant="micro-combo" theme="dark" />,
44
+ );
45
+ expect(container.firstChild?.nodeName).toBe("DIV");
46
+ });
47
+
48
+ it("renders with the specified elementType", () => {
49
+ const { container } = render(
50
+ <Trust
51
+ locale="en-US"
52
+ variant="micro-combo"
53
+ theme="dark"
54
+ elementType="section"
55
+ />,
56
+ );
57
+ expect(container.firstChild?.nodeName).toBe("SECTION");
58
+ });
59
+
60
+ it("contains a Trustpilot link with target='_blank'", () => {
61
+ render(<Trust locale="en-US" variant="micro-combo" theme="dark" />);
62
+ const link = screen.getByRole("link", { name: "Trustpilot" });
63
+ expect(link).toHaveAttribute("target", "_blank");
64
+ });
65
+
66
+ it("Trustpilot link has rel='noopener noreferrer' for security", () => {
67
+ render(<Trust locale="en-US" variant="micro-combo" theme="dark" />);
68
+ const link = screen.getByRole("link", { name: "Trustpilot" });
69
+ expect(link).toHaveAttribute("rel", "noopener noreferrer");
70
+ });
71
+
72
+ it("includes Trustpilot data attributes for the widget", () => {
73
+ const { container } = render(
74
+ <Trust locale="en-US" variant="micro-combo" theme="dark" />,
75
+ );
76
+ expect(container.firstChild).toHaveAttribute("data-businessunit-id");
77
+ expect(container.firstChild).toHaveAttribute("data-template-id");
78
+ expect(container.firstChild).toHaveAttribute("data-theme", "dark");
79
+ });
80
+ });
81
+
82
+ it("forwards ref", () => {
83
+ const ref = createRef<HTMLDivElement>();
84
+ render(
85
+ <Trust ref={ref} locale="en-US" variant="micro-combo" theme="dark" />,
86
+ );
87
+ expect(ref.current).toBeInstanceOf(HTMLDivElement);
88
+ });
38
89
  });
@@ -0,0 +1,66 @@
1
+ import { render, screen } from "@testing-library/react";
2
+ import { VisuallyHidden } from "./VisuallyHidden";
3
+
4
+ describe("VisuallyHidden", () => {
5
+ it("renders children", () => {
6
+ render(<VisuallyHidden>Hidden text</VisuallyHidden>);
7
+
8
+ expect(screen.getByText("Hidden text")).toBeInTheDocument();
9
+ });
10
+
11
+ it("applies hiding styles", () => {
12
+ render(<VisuallyHidden data-testid="hidden">Content</VisuallyHidden>);
13
+
14
+ const el = screen.getByTestId("hidden");
15
+ expect(el).toHaveStyle({ position: "absolute" });
16
+ expect(el).toHaveStyle({ width: "1px" });
17
+ expect(el).toHaveStyle({ height: "1px" });
18
+ expect(el).toHaveStyle({ overflow: "hidden" });
19
+ });
20
+
21
+ it("forwards custom className", () => {
22
+ render(
23
+ <VisuallyHidden data-testid="hidden" className="custom">
24
+ Content
25
+ </VisuallyHidden>,
26
+ );
27
+
28
+ expect(screen.getByTestId("hidden")).toHaveClass("custom");
29
+ });
30
+
31
+ it("renders as div by default", () => {
32
+ render(<VisuallyHidden data-testid="hidden">Content</VisuallyHidden>);
33
+
34
+ expect(screen.getByTestId("hidden").tagName).toBe("DIV");
35
+ });
36
+
37
+ it("changes element type with elementType prop", () => {
38
+ render(
39
+ <VisuallyHidden data-testid="hidden" elementType="span">
40
+ Content
41
+ </VisuallyHidden>,
42
+ );
43
+
44
+ expect(screen.getByTestId("hidden").tagName).toBe("SPAN");
45
+ });
46
+
47
+ it("forwards role prop", () => {
48
+ render(
49
+ <VisuallyHidden data-testid="hidden" role="status">
50
+ Content
51
+ </VisuallyHidden>,
52
+ );
53
+
54
+ expect(screen.getByTestId("hidden")).toHaveAttribute("role", "status");
55
+ });
56
+
57
+ it("forwards id prop", () => {
58
+ render(
59
+ <VisuallyHidden data-testid="hidden" id="my-id">
60
+ Content
61
+ </VisuallyHidden>,
62
+ );
63
+
64
+ expect(screen.getByTestId("hidden")).toHaveAttribute("id", "my-id");
65
+ });
66
+ });
@@ -12,4 +12,15 @@ describe("filterUndefinedProps", () => {
12
12
 
13
13
  expect(result).toEqual({ a: 1, c: 3 });
14
14
  });
15
+
16
+ it("preserves null and empty string (undefined-only contract)", () => {
17
+ const result = filterUndefinedProps({
18
+ a: 1,
19
+ b: null,
20
+ c: "",
21
+ d: 0,
22
+ });
23
+
24
+ expect(result).toEqual({ a: 1, b: null, c: "", d: 0 });
25
+ });
15
26
  });
@@ -0,0 +1,16 @@
1
+ import { filterUnsetValues } from "./filterUnsetValues";
2
+
3
+ describe("filterUnsetValues", () => {
4
+ it("removes undefined, null, and empty string", () => {
5
+ expect(
6
+ filterUnsetValues({
7
+ a: 1,
8
+ b: undefined,
9
+ c: null,
10
+ d: "",
11
+ e: 0,
12
+ f: false,
13
+ }),
14
+ ).toEqual({ a: 1, e: 0, f: false });
15
+ });
16
+ });
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Drops `undefined`, `null`, and empty string entries.
3
+ * Use when merging style objects so “unset” values from `style` do not override
4
+ * computed values from component props.
5
+ */
6
+ export const filterUnsetValues = (
7
+ props: Record<string, unknown>,
8
+ ): Record<string, unknown> => {
9
+ const filtered: Record<string, unknown> = {};
10
+ Object.keys(props).forEach(key => {
11
+ const value = props[key];
12
+ if (value !== undefined && value !== null && value !== "") {
13
+ filtered[key] = value;
14
+ }
15
+ });
16
+ return filtered;
17
+ };
@@ -2,6 +2,7 @@ export * from "./changeCSS";
2
2
  export * from "./delay";
3
3
  export * from "./excludeControls";
4
4
  export * from "./filterUndefinedProps";
5
+ export * from "./filterUnsetValues";
5
6
  export * from "./getSpacingValue";
6
7
  export * from "./mergeRefs";
7
8
  export * from "./polyfill-tests";
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/Breadcrumbs/Breadcrumbs.tsx"],
4
- "sourcesContent": ["\"use client\";\n\nimport type { ReactElement, RefAttributes, ReactNode } from \"react\";\nimport { Children, cloneElement } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport \"./Breadcrumbs.css\";\n\nexport type BreadcrumbsElementType = HTMLUListElement;\n\nexport interface BreadcrumbsProps extends RefAttributes<BreadcrumbsElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n children?: ReactNode;\n \"aria-label\"?: string;\n}\n\nconst Breadcrumbs = ({ ref, ...props }: BreadcrumbsProps) => {\n const { \"aria-label\": ariaLabel = \"Breadcrumbs\" } = props;\n const { navProps } = { navProps: { \"aria-label\": ariaLabel } };\n const { children, ...otherProps } = props;\n const childArray = Children.toArray(children);\n\n // Reshape class name and apply to outer element\n const classes = classNames(\n \"mobius\",\n \"mobius-breadcrumb\",\n otherProps.className,\n );\n\n return (\n <nav ref={ref} {...otherProps} {...navProps} className={classes}>\n <ul>\n {childArray.map((child, i) =>\n cloneElement(\n child as ReactElement,\n {\n key: i,\n isCurrent: i === childArray.length - 1,\n } as { key: number; isCurrent: boolean },\n ),\n )}\n </ul>\n </nav>\n );\n};\n\nBreadcrumbs.displayName = \"Breadcrumbs\";\nexport { Breadcrumbs };\n"],
5
- "mappings": ";AAGA,SAAS,UAAU,oBAAoB;AACvC,OAAO,gBAAgB;AACvB,OAAO;AA0BD;AAfN,IAAM,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,MAAwB;AAC3D,QAAM,EAAE,cAAc,YAAY,cAAc,IAAI;AACpD,QAAM,EAAE,SAAS,IAAI,EAAE,UAAU,EAAE,cAAc,UAAU,EAAE;AAC7D,QAAM,EAAE,UAAU,GAAG,WAAW,IAAI;AACpC,QAAM,aAAa,SAAS,QAAQ,QAAQ;AAG5C,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb;AAEA,SACE,oBAAC,SAAI,KAAW,GAAG,YAAa,GAAG,UAAU,WAAW,SACtD,8BAAC,QACE,qBAAW;AAAA,IAAI,CAAC,OAAO,MACtB;AAAA,MACE;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,WAAW,MAAM,WAAW,SAAS;AAAA,MACvC;AAAA,IACF;AAAA,EACF,GACF,GACF;AAEJ;AAEA,YAAY,cAAc;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/Modal/Modal.tsx"],
4
- "sourcesContent": ["\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useDialog } from \"../../hooks\";\nimport { mergeRefs } from \"../../utils\";\nimport { supportsDialog } from \"../../utils/polyfill-tests\";\nimport { ModalContext } from \"./ModalContext\";\nimport type { ModalProps } from \"./types\";\nimport \"./Modal.css\";\n\nexport type ModalElementType = HTMLDialogElement;\n\nconst TRANSITION_CSS_VARIABLE = \"--modal-transition-duration\";\n\nconst Modal = ({ ref, ...props }: ModalProps) => {\n const {\n isOpen,\n onClose,\n onOpen,\n children,\n className,\n closeLabel,\n isFullScreen,\n animation,\n ...rest\n } = props;\n const [shouldTransition, setShouldTransition] = useState(false);\n\n useEffect(() => {\n setShouldTransition(supportsDialog());\n }, []);\n\n const dialogRef = useRef<HTMLDialogElement | null>(null);\n const { close } = useDialog({\n ref: dialogRef,\n isOpen,\n onOpen,\n onClose,\n transition: {\n isEnabled: !!animation,\n CSSVariable: TRANSITION_CSS_VARIABLE,\n },\n });\n\n const modalClasses = classNames(\n \"mobius\",\n \"mobius-modal\",\n {\n \"--no-dialog-support\": !shouldTransition, // This class is used to correctly position modal in x/y middle on iOS <= 15.2\n \"--should-transition\": shouldTransition && animation,\n \"--slide-up\": animation === \"slideUp\",\n \"--fade\": animation === \"fade\",\n \"--is-fullscreen\": isFullScreen,\n },\n className,\n );\n\n const contextValue = useMemo(\n () => ({\n onClose: close,\n closeLabel,\n }),\n [close, closeLabel],\n );\n\n return (\n <dialog\n ref={mergeRefs([dialogRef, ref])}\n onCancel={close}\n className={modalClasses}\n {...rest}\n >\n <ModalContext.Provider value={contextValue}>\n {children}\n </ModalContext.Provider>\n </dialog>\n );\n};\n\nModal.displayName = \"Modal\";\nexport { Modal };\n"],
5
- "mappings": ";;;;;;;;;;;;;;AAEA,OAAO,gBAAgB;AACvB,SAAS,WAAW,SAAS,QAAQ,gBAAgB;AAMrD,OAAO;AAgED;AA5DN,IAAM,0BAA0B;AAEhC,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,KAAK;AAE9D,YAAU,MAAM;AACd,wBAAoB,eAAe,CAAC;AAAA,EACtC,GAAG,CAAC,CAAC;AAEL,QAAM,YAAY,OAAiC,IAAI;AACvD,QAAM,EAAE,MAAM,IAAI,UAAU;AAAA,IAC1B,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,MACV,WAAW,CAAC,CAAC;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF,CAAC;AAED,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,MACE,uBAAuB,CAAC;AAAA;AAAA,MACxB,uBAAuB,oBAAoB;AAAA,MAC3C,cAAc,cAAc;AAAA,MAC5B,UAAU,cAAc;AAAA,MACxB,mBAAmB;AAAA,IACrB;AAAA,IACA;AAAA,EACF;AAEA,QAAM,eAAe;AAAA,IACnB,OAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IACA,CAAC,OAAO,UAAU;AAAA,EACpB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,UAAU,CAAC,WAAW,GAAG,CAAC;AAAA,MAC/B,UAAU;AAAA,MACV,WAAW;AAAA,MACV,GAAG;AAAA,MAEJ,8BAAC,aAAa,UAAb,EAAsB,OAAO,cAC3B,UACH;AAAA;AAAA,EACF;AAEJ;AAEA,MAAM,cAAc;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/Box/Box.tsx"],
4
- "sourcesContent": ["import classNames from \"classnames/dedupe\";\nimport type { BoxProps } from \"./types\";\nimport { getSpacingValue, filterUndefinedProps } from \"../../utils\";\nimport \"./Box.css\";\n\nconst Box = ({ ref, ...props }: BoxProps) => {\n const {\n elementType: Element = \"div\",\n padding,\n paddingX,\n paddingInline,\n paddingInlineStart,\n paddingInlineEnd,\n paddingY,\n paddingBlock,\n paddingBlockStart,\n paddingBlockEnd,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n width,\n height,\n style,\n ...otherProps\n } = props;\n\n const classes = classNames(\"mobius\", \"mobius-box\", otherProps.className);\n\n const styleProps = filterUndefinedProps({\n padding: getSpacingValue(padding),\n paddingInline: getSpacingValue(paddingInline || paddingX),\n paddingBlock: getSpacingValue(paddingBlock || paddingY),\n paddingTop: getSpacingValue(paddingTop || paddingBlockStart),\n paddingRight: getSpacingValue(paddingRight || paddingInlineEnd),\n paddingBottom: getSpacingValue(paddingBottom || paddingBlockEnd),\n paddingLeft: getSpacingValue(paddingLeft || paddingInlineStart),\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n width,\n height,\n ...style,\n });\n\n return (\n <Element ref={ref} style={styleProps} {...otherProps} className={classes} />\n );\n};\n\nBox.displayName = \"Box\";\nexport { Box };\n"],
5
- "mappings": ";;;;;;;;AAAA,OAAO,gBAAgB;AAGvB,OAAO;AAgDH;AA9CJ,IAAM,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,MAAgB;AAC3C,QAAM;AAAA,IACJ,aAAa,UAAU;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,UAAU,WAAW,UAAU,cAAc,WAAW,SAAS;AAEvE,QAAM,aAAa,qBAAqB;AAAA,IACtC,SAAS,gBAAgB,OAAO;AAAA,IAChC,eAAe,gBAAgB,iBAAiB,QAAQ;AAAA,IACxD,cAAc,gBAAgB,gBAAgB,QAAQ;AAAA,IACtD,YAAY,gBAAgB,cAAc,iBAAiB;AAAA,IAC3D,cAAc,gBAAgB,gBAAgB,gBAAgB;AAAA,IAC9D,eAAe,gBAAgB,iBAAiB,eAAe;AAAA,IAC/D,aAAa,gBAAgB,eAAe,kBAAkB;AAAA,IAC9D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AAED,SACE,oBAAC,WAAQ,KAAU,OAAO,YAAa,GAAG,YAAY,WAAW,SAAS;AAE9E;AAEA,IAAI,cAAc;",
6
- "names": []
7
- }
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-DSYPZETD.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/List/List.tsx"],
4
- "sourcesContent": ["import type { ReactNode, Ref } from \"react\";\nimport { Children, cloneElement, isValidElement } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./List.css\";\n\nexport type ListStyleType =\n | \"disc\"\n | \"circle\"\n | \"square\"\n | \"decimal\"\n | \"georgian\"\n | \"trad-chinese-informal\"\n | \"kannada\";\n\nexport interface ListProps extends DOMProps {\n children?: ReactNode;\n isOrdered?: boolean;\n isReversed?: boolean;\n start?: number;\n liststyletype?: ListStyleType;\n icon?: ReactNode;\n className?: string;\n ref?: Ref<HTMLOListElement & HTMLUListElement>;\n}\n\nconst List = ({ ref, ...props }: ListProps) => {\n const Component: \"ol\" | \"ul\" = props.isOrdered ? \"ol\" : \"ul\";\n const { children, icon, ...otherProps } = props;\n\n // Remove props that should not exist on ol or ul element\n\n const { isOrdered, liststyletype, isReversed, ...restProps } = otherProps;\n\n const mappedProps = {\n ...restProps,\n reversed: isReversed,\n };\n\n const classes = classNames(\n \"mobius\",\n \"mobius-list\",\n {\n \"--has-icon\": icon,\n [`--is-${liststyletype}`]: liststyletype,\n },\n otherProps.className,\n );\n\n return (\n <Component ref={ref} {...mappedProps} className={classes}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n // List items accept a parentIcon prop which is not part of standard HTML\n return cloneElement(child, {\n parentIcon: icon,\n } as { parentIcon?: ReactNode });\n }\n\n return child;\n })}\n </Component>\n );\n};\n\nList.displayName = \"List\";\nexport { List };\n"],
5
- "mappings": ";AACA,SAAS,UAAU,cAAc,sBAAsB;AACvD,OAAO,gBAAgB;AAEvB,OAAO;AA8CH;AAxBJ,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,QAAM,YAAyB,MAAM,YAAY,OAAO;AACxD,QAAM,EAAE,UAAU,MAAM,GAAG,WAAW,IAAI;AAI1C,QAAM,EAAE,WAAW,eAAe,YAAY,GAAG,UAAU,IAAI;AAE/D,QAAM,cAAc;AAAA,IAClB,GAAG;AAAA,IACH,UAAU;AAAA,EACZ;AAEA,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,MACE,cAAc;AAAA,MACd,CAAC,QAAQ,aAAa,EAAE,GAAG;AAAA,IAC7B;AAAA,IACA,WAAW;AAAA,EACb;AAEA,SACE,oBAAC,aAAU,KAAW,GAAG,aAAa,WAAW,SAC9C,mBAAS,IAAI,UAAU,WAAS;AAC/B,QAAI,eAAe,KAAK,GAAG;AAEzB,aAAO,aAAa,OAAO;AAAA,QACzB,YAAY;AAAA,MACd,CAA+B;AAAA,IACjC;AAEA,WAAO;AAAA,EACT,CAAC,GACH;AAEJ;AAEA,KAAK,cAAc;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/Logo/Logo.tsx"],
4
- "sourcesContent": ["import type { RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type LogoElementType = SVGSVGElement;\n\nexport interface LogoProps extends DOMProps, RefAttributes<LogoElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Custom width. When defined along with height, it will scale proportionally */\n width?: string;\n /** Custom height. When defined along with width, it will scale proportionally */\n height?: string;\n}\n\nexport const Logo = ({ ref, ...props }: LogoProps) => {\n const { className, width, height, ...otherProps } = props;\n\n const classes = classNames(\"mobius\", \"mobius-logo\", className);\n\n return (\n <svg\n width={width}\n height={height}\n ref={ref}\n className={classes}\n viewBox=\"0 0 144 37\"\n {...otherProps}\n >\n <defs>\n <linearGradient\n id=\"logo-gradient\"\n x1=\"83.508%\"\n x2=\"11.891%\"\n y1=\"76.042%\"\n y2=\"26.973%\"\n >\n <stop stopColor=\"#4632D8\" offset=\"0%\" />\n <stop stopColor=\"#9084E8\" offset=\"100%\" />\n </linearGradient>\n </defs>\n <g>\n <path\n fill=\"#0E0A2B\"\n d=\"M68.788 11.307c0-2.486-2.027-3.345-3.833-4.1-1.332-.562-2.471-1.036-2.471-2.072 0-.873.77-1.42 1.968-1.42 1.051 0 1.806.444 2.294.725.193.103.474.222.755.133.192-.06.34-.207.459-.444l.34-.621c.266-.474.163-.888-.281-1.2-.533-.384-1.88-1.05-3.537-1.05-2.738 0-4.647 1.643-4.647 4.01 0 2.413 2.012 3.301 3.788 4.07 1.347.593 2.516 1.096 2.516 2.161 0 .873-.754 1.45-1.924 1.45-1.287 0-2.22-.65-2.678-.961l-.03-.015c-.533-.296-.903-.237-1.228.192l-.415.607c-.444.607-.148.992.134 1.228.828.637 2.427 1.392 4.203 1.392 2.708 0 4.587-1.673 4.587-4.085zm4.44 2.975V6.186c0-.577-.31-.888-.873-.888h-.843c-.563 0-.874.311-.874.888v8.096c0 .577.296.888.874.888h.843c.563 0 .873-.311.873-.888zM71.482 4.203h.755c.518 0 .814-.281.814-.8v-.517c0-.518-.296-.814-.814-.814h-.755c-.518 0-.8.281-.8.814v.518c.016.518.297.8.8.8zM92.645 24.48h.755c.518 0 .814-.282.814-.8v-.518c0-.518-.296-.814-.814-.814h-.755c-.518 0-.799.282-.799.814v.518c0 .518.281.8.8.8zm-6.26-19.42c-1.539 0-2.397.962-2.945 1.895-.444-1.243-1.435-1.895-2.871-1.895-1.362 0-2.146.888-2.723 1.806v-.68c0-.578-.311-.889-.873-.889h-.74c-.563 0-.873.311-.873.888v8.096c0 .577.295.888.873.888h.843c.577 0 .873-.311.873-.888V10.73c0-2.25.888-3.271 2.058-3.271 1.006 0 1.198.71 1.198 1.85v4.987c0 .578.311.888.888.888h.844c.577 0 .873-.31.873-.888v-3.551c0-2.25.873-3.271 2.013-3.271 1.036 0 1.243.74 1.243 1.85v4.987c0 .577.31.888.888.888h.814c.577 0 .888-.31.888-.888V8.835c0-2.5-1.095-3.774-3.27-3.774zm10.804 10.33c2.679 0 4.558-2.13 4.558-5.164 0-3.094-1.776-5.166-4.425-5.166-1.761 0-2.708 1.036-3.049 1.51v-.533c0-.459-.34-.755-.873-.755h-.607c-.562 0-.888.326-.888.888v11.9c0 .576.311.887.888.887h.814c.578 0 .888-.31.888-.888v-3.404c0-.207-.014-.4-.014-.532.325.429 1.184 1.258 2.708 1.258zm-2.768-5.105c0-1.362.622-2.975 2.368-2.975 1.377 0 2.309 1.184 2.309 2.945 0 1.746-.947 2.916-2.338 2.916-1.54 0-2.339-1.45-2.339-2.886zm12.965 4.07v-.652c0-.444-.252-.725-.681-.784-.34-.03-.68-.192-.68-1.066v-9.47c0-.563-.326-.888-.874-.888h-.843c-.563 0-.874.31-.874.888v9.679c0 1.258.34 2.16 1.021 2.678.637.489 1.466.533 2.013.533.607 0 .918-.325.918-.917zm9.457-9.073h-.962c-.518 0-.844.237-.977.726l-1.717 4.972c-.089.311-.192.71-.251.977-.074-.281-.193-.71-.296-1.021l-1.835-4.943c-.163-.489-.489-.71-.977-.71h-1.036c-.415 0-.622.162-.71.295-.09.134-.163.385.014.755l3.685 8.57-.34.813c-.252.592-.77 1.229-1.45 1.229-.267 0-.474-.09-.652-.163h-.014c-.43-.104-.755.074-.962.488l-.163.415c-.119.251-.148.517-.06.725.075.192.237.34.474.429.326.118.814.296 1.391.296 1.628 0 2.975-.977 3.597-2.605l3.996-10.226c.103-.296.088-.563-.045-.755-.163-.163-.4-.267-.71-.267zM67.634 28.297c.977-.592 1.54-1.658 1.54-2.886 0-2.176-1.688-3.567-4.293-3.567h-4.04c-.562 0-.873.311-.873.888v11.899c0 .577.296.888.873.888h4.1c1.346 0 2.5-.34 3.33-.962.932-.71 1.42-1.761 1.42-3.049.03-1.524-.784-2.767-2.057-3.211zm-5.017-.962v-3.212h2.25c1.02 0 1.628.592 1.628 1.584 0 .991-.607 1.643-1.57 1.643h-2.308v-.015zm4.396 4.01c0 1.155-.71 1.865-1.865 1.865h-2.53v-3.714h2.53c1.14.014 1.865.74 1.865 1.85zm12.638-5.712h-.814c-.577 0-.888.31-.888.888v3.655c0 2.176-1.361 3.182-2.634 3.182-1.006 0-1.406-.547-1.406-1.88v-4.942c0-.578-.31-.888-.888-.888h-.814c-.562 0-.888.325-.888.888v5.431c0 2.516 1.17 3.774 3.463 3.774a3.937 3.937 0 003.286-1.761v.651c0 .577.296.888.873.888h.74c.577 0 .888-.31.888-.888v-8.095c-.03-.578-.355-.903-.918-.903zm6.956 3.937c-.917-.311-1.702-.592-1.702-1.184 0-.74.77-.859 1.229-.859.784 0 1.406.281 1.805.474.548.237.947.118 1.184-.34l.193-.341c.251-.518.133-.947-.326-1.184-.326-.178-1.288-.71-2.753-.71-2.279 0-3.803 1.213-3.803 3.004 0 2.042 1.731 2.65 3.137 3.138.903.325 1.687.592 1.687 1.169 0 .547-.488.902-1.258.902-.917 0-1.613-.37-2.057-.621l-.059-.03c-.533-.28-.903-.207-1.213.222l-.222.34c-.178.252-.237.504-.178.726.044.207.192.37.4.488a5.774 5.774 0 003.285 1.007c2.235 0 3.789-1.273 3.789-3.079-.03-2.042-1.761-2.649-3.138-3.122zm6.897-3.937h-.844c-.562 0-.873.31-.873.888v8.095c0 .577.296.888.873.888h.844c.577 0 .873-.31.873-.888v-8.095c0-.563-.31-.888-.873-.888zm9.324-.237c-1.924 0-2.93 1.154-3.36 1.806v-.681c0-.577-.31-.888-.873-.888h-.74c-.563 0-.873.31-.873.888v8.095c0 .577.296.888.873.888h.843c.578 0 .874-.31.874-.888v-3.744c0-1.79 1.14-3.078 2.708-3.078 1.021 0 1.436.547 1.436 1.88v4.942c0 .577.31.888.887.888h.814c.578 0 .888-.31.888-.888v-5.431c0-2.516-1.169-3.789-3.477-3.789zm10.448 0c-2.96 0-5.032 2.131-5.032 5.165 0 2.99 2.235 5.165 5.313 5.165 1.48 0 2.635-.533 3.345-.977.444-.266.562-.695.296-1.198l-.222-.385c-.266-.459-.651-.563-1.184-.31h-.015a3.885 3.885 0 01-2.042.606c-1.54 0-2.634-.962-2.812-2.472h5.816a.935.935 0 00.933-.917c.014-2.827-1.717-4.677-4.396-4.677zm-.044 2.013c1.065 0 1.79.77 1.864 1.968h-4.1c.253-1.213 1.096-1.968 2.236-1.968zm10.152 2.16c-.917-.31-1.702-.591-1.702-1.183 0-.74.77-.859 1.229-.859.784 0 1.406.281 1.805.474.548.237.947.118 1.184-.34l.192-.341c.252-.518.134-.947-.325-1.184-.326-.178-1.288-.71-2.753-.71-2.279 0-3.803 1.213-3.803 3.004 0 2.042 1.731 2.65 3.137 3.138.903.325 1.687.592 1.687 1.169 0 .547-.488.902-1.258.902-.917 0-1.613-.37-2.057-.621l-.059-.03c-.533-.28-.903-.207-1.214.222l-.222.34c-.177.252-.236.504-.177.726.044.207.192.37.4.488a5.774 5.774 0 003.285 1.007c2.235 0 3.789-1.273 3.789-3.079-.015-2.042-1.747-2.649-3.138-3.122zm8.791 0c-.917-.31-1.702-.591-1.702-1.183 0-.74.77-.859 1.229-.859.784 0 1.406.281 1.805.474.548.237.947.118 1.184-.34l.192-.341c.252-.518.134-.947-.325-1.184-.326-.178-1.288-.71-2.753-.71-2.279 0-3.803 1.213-3.803 3.004 0 2.042 1.731 2.65 3.137 3.138.903.325 1.687.592 1.687 1.169 0 .547-.488.902-1.258.902-.917 0-1.613-.37-2.057-.621l-.059-.03c-.533-.28-.903-.207-1.214.222l-.222.34c-.177.252-.236.504-.177.726.044.207.192.37.4.488a5.774 5.774 0 003.285 1.007c2.235 0 3.789-1.273 3.789-3.079-.015-2.042-1.747-2.649-3.138-3.122z\"\n />\n <path\n fill=\"url(#logo-gradient)\"\n d=\"M22.747 22.288c.607 1.214.918 2.59.918 4.144 0 1.45-.267 2.827-.8 4.1a10.018 10.018 0 01-2.279 3.36c-.991.961-2.235 1.73-3.744 2.278-1.51.563-3.167.829-4.988.829-2.264 0-4.35-.385-6.29-1.14-1.938-.77-3.492-1.598-4.676-2.5-.31-.252-.548-.504-.696-.77a1.332 1.332 0 01-.177-.71.718.718 0 010-.252c.03-.37.207-.785.547-1.199l1.14-1.598c.4-.548.829-.844 1.288-.918a.896.896 0 01.222-.03c.4 0 .873.163 1.39.474 2.487 1.776 4.914 2.679 7.252 2.679 1.643 0 2.96-.385 3.922-1.14.962-.755 1.45-1.746 1.45-2.96 0-.725-.192-1.39-.562-1.983a5.347 5.347 0 00-1.539-1.569 18.207 18.207 0 00-2.235-1.287 56.102 56.102 0 00-2.649-1.214c-.917-.4-1.835-.814-2.752-1.258a19.282 19.282 0 01-2.62-1.539 14.014 14.014 0 01-2.22-1.924c-.666-.695-1.169-1.539-1.554-2.545-.37-.992-.562-2.087-.562-3.271 0-2.042.533-3.863 1.598-5.446 1.066-1.584 2.516-2.797 4.336-3.641C8.303.414 10.345 0 12.624 0c1.91 0 3.685.281 5.358.844 1.657.562 2.96 1.198 3.892 1.88.68.473 1.006 1.035 1.006 1.671 0 .385-.118.785-.37 1.2l-.917 1.657c-.385.74-.903 1.11-1.554 1.11-.4 0-.83-.133-1.318-.4a42.421 42.421 0 00-1.687-.947c-.473-.237-1.14-.488-1.998-.71a9.458 9.458 0 00-2.56-.356c-1.672 0-3.004.37-3.981 1.11-.992.74-1.48 1.717-1.48 2.946 0 .902.31 1.701.932 2.412.622.695 1.421 1.302 2.398 1.79.977.489 2.057.977 3.256 1.466a54.048 54.048 0 013.552 1.628 20.795 20.795 0 013.24 2.042c.948.755 1.732 1.732 2.354 2.945zm31.257 2.945c0 3.197-1.155 6.083-3.256 8.14-2.265 2.205-5.506 3.36-9.368 3.36H30.71c-2.443 0-4.278-1.836-4.278-4.278V4.53c0-1.2.43-2.28 1.214-3.064C28.43.681 29.51.252 30.709.252h9.013c3.419 0 6.32 1.095 8.377 3.182 1.909 1.923 2.945 4.558 2.945 7.429 0 2.294-.622 4.203-1.91 5.816 1.377.77 2.487 1.776 3.286 2.99 1.066 1.583 1.584 3.448 1.584 5.564zm-12.106-7.68c.044-.03 4.913-3.02 4.913-6.675 0-1.761-.607-3.345-1.717-4.455-1.568-1.584-3.788-1.924-5.372-1.924H30.68v28h10.7c2.738 0 4.958-.754 6.408-2.16 1.273-1.243 1.983-3.049 1.983-5.106 0-1.272-.296-2.353-.858-3.196v-.03c-1.362-2.353-6.838-3.774-6.897-3.789l-.844-.222.726-.444z\"\n />\n <path\n fill=\"#0E0A2B\"\n d=\"M138.199 25.455c0-.4.074-.784.222-1.14.148-.354.355-.665.606-.932.267-.266.563-.473.903-.621.34-.148.725-.222 1.11-.222.4 0 .784.074 1.125.222.355.148.666.355.917.621.267.267.474.578.622.933.148.355.222.74.222 1.14 0 .399-.074.784-.222 1.139a2.86 2.86 0 01-.622.932 3.087 3.087 0 01-.917.637 2.646 2.646 0 01-1.125.236c-.4 0-.77-.074-1.11-.236a2.777 2.777 0 01-.903-.637 2.821 2.821 0 01-.606-.932 2.898 2.898 0 01-.222-1.14zm.71 0c0 .326.06.622.163.903.103.281.266.518.459.725a2.051 2.051 0 001.524.666c.31 0 .592-.059.858-.177a2.175 2.175 0 001.155-1.214c.118-.281.162-.577.162-.903 0-.325-.059-.621-.162-.902a2.422 2.422 0 00-.46-.726 2.112 2.112 0 00-.695-.488 2.073 2.073 0 00-.858-.178c-.31 0-.592.06-.844.178a2.051 2.051 0 00-.68.488 2.45 2.45 0 00-.46.726 2.636 2.636 0 00-.162.902zm1.154-1.14c0-.221.119-.34.34-.34h.889c.296 0 .532.09.695.252.178.163.267.4.267.68a.623.623 0 01-.06.297.557.557 0 01-.133.222.512.512 0 01-.163.148c-.059.044-.118.059-.162.074v.014l.03.03c.014.015.014.03.029.06l.044.088.34.666c.06.118.075.207.045.281-.03.074-.104.104-.207.104h-.104c-.192 0-.31-.089-.385-.252l-.384-.829h-.4v.74c0 .222-.104.34-.31.34h-.06c-.207 0-.31-.118-.31-.34v-2.234zm1.051 1.037c.133 0 .252-.045.31-.119.075-.074.104-.192.104-.325s-.03-.252-.103-.326a.413.413 0 00-.296-.118h-.385v.873h.37v.015z\"\n />\n </g>\n </svg>\n );\n};\n\nLogo.displayName = \"Logo\";\n"],
5
- "mappings": ";AACA,OAAO,gBAAgB;AA6Bf,SAOE,KAPF;AAfD,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AACpD,QAAM,EAAE,WAAW,OAAO,QAAQ,GAAG,WAAW,IAAI;AAEpD,QAAM,UAAU,WAAW,UAAU,eAAe,SAAS;AAE7D,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,SAAQ;AAAA,MACP,GAAG;AAAA,MAEJ;AAAA,4BAAC,UACC;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YAEH;AAAA,kCAAC,UAAK,WAAU,WAAU,QAAO,MAAK;AAAA,cACtC,oBAAC,UAAK,WAAU,WAAU,QAAO,QAAO;AAAA;AAAA;AAAA,QAC1C,GACF;AAAA,QACA,qBAAC,OACC;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,GAAE;AAAA;AAAA,UACJ;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,GAAE;AAAA;AAAA,UACJ;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,GAAE;AAAA;AAAA,UACJ;AAAA,WACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,KAAK,cAAc;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/Table/HeaderCell.tsx"],
4
- "sourcesContent": ["import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface HeaderCellProps extends RefAttributes<HTMLTableCellElement> {\n children?: ReactNode;\n className?: string;\n colSpan?: number;\n rowSpan?: number;\n}\n\nexport type HeaderCellRef = Ref<HTMLTableCellElement>;\n\nconst HeaderCell = ({ ref, ...props }: HeaderCellProps) => {\n const classes = classNames(\n \"mobius\",\n \"mobius-table__head-cell\",\n props.className,\n );\n\n return <th {...props} ref={ref} className={classes} />;\n};\n\nHeaderCell.displayName = \"Table.HeaderCell\";\nexport { HeaderCell };\n"],
5
- "mappings": ";AACA,OAAO,gBAAgB;AAkBd;AAPT,IAAM,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,MAAuB;AACzD,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR;AAEA,SAAO,oBAAC,QAAI,GAAG,OAAO,KAAU,WAAW,SAAS;AACtD;AAEA,WAAW,cAAc;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/ErrorMessage/ErrorMessage.tsx", "../../src/components/AddressLookup/AddressLookup.tsx", "../../src/components/Combobox/Combobox.tsx", "../../src/components/TextField/TextField.tsx", "../../src/components/Checkbox/Checkbox.tsx", "../../src/components/Checkbox/CheckboxGroup.tsx", "../../src/components/DateField/DateField.tsx", "../../src/components/NumberField/NumberField.tsx", "../../src/components/PasswordField/PasswordField.tsx", "../../src/components/PasswordField/ShowHideButton.tsx", "../../src/components/Radio/Radio.tsx", "../../src/components/Radio/RadioGroup.tsx", "../../src/components/Select/Select.tsx", "../../src/components/TextArea/TextArea.tsx", "../../src/components/ExpandableText/ExpandableText.tsx", "../../src/components/MaskedField/index.tsx"],
4
- "sourcesContent": ["import { error } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport { TextOrHTML } from \"../..\";\nimport { Icon } from \"../Icon\";\nimport \"./ErrorMessage.css\";\n\nexport interface ErrorMessageProps {\n errorMessage?: string;\n id?: string;\n className?: string;\n}\n\nexport const ErrorMessage = ({\n id,\n errorMessage,\n className,\n}: ErrorMessageProps) => {\n const classes = classNames(\"mobius\", \"mobius-error-message\", className);\n\n if (!errorMessage) return null;\n\n return (\n <div id={id} className={classes} data-testid=\"ErrorMessage\" role=\"alert\">\n <Icon\n icon={error}\n className=\"mobius-error-message__icon\"\n aria-hidden=\"true\"\n />\n <TextOrHTML\n elementType=\"span\"\n className=\"mobius-error-message__text\"\n text={errorMessage}\n />\n </div>\n );\n};\n\nErrorMessage.displayName = \"ErrorMessage\";\n", "import { search } from \"@simplybusiness/icons\";\nimport { useCallback, useState } from \"react\";\nimport type { ComboboxOption } from \"../Combobox\";\nimport { Combobox } from \"../Combobox\";\nimport { Icon } from \"../Icon\";\nimport type {\n AddressLookupProps,\n AddressLookupService,\n LoqateSearchResponse,\n LoqateSearchResultItem,\n} from \"./types\";\nimport { isLoqateErrorResponse } from \"./utils\";\n\nfunction optionsFromResponse(\n { Items }: LoqateSearchResponse,\n addressLookupService: AddressLookupService,\n) {\n if (!Items || !Array.isArray(Items)) {\n throw Error(\"No address found\");\n }\n\n if (isLoqateErrorResponse(Items)) {\n throw Error(Items[0].Description);\n }\n\n return (Items as LoqateSearchResultItem[]).map(item => ({\n id: item.Id,\n label: `${item.Text}, ${item.Description}`,\n value: item.Text,\n // Add a callback to trigger secondary search\n // if the address type is not \"Address\"\n callback:\n item.Type === \"Address\"\n ? undefined\n : async () => {\n const result = await addressLookupService.findById(item.Id);\n return optionsFromResponse(result, addressLookupService);\n },\n }));\n}\n\nexport const AddressLookup = ({\n ref,\n addressLookupService,\n onAddressSelected,\n onOptionsDisplayed,\n onError,\n errorMessage,\n ...otherProps\n}: AddressLookupProps) => {\n const [error, _setError] = useState<Error | null>(null);\n\n const setError = useCallback(\n (newError: Error | null) => {\n if (newError != null) onError?.(newError);\n _setError(newError);\n },\n [onError],\n );\n\n const asyncOptions = useCallback(\n async (searchTerm: string) => {\n try {\n const response = await addressLookupService.search(searchTerm);\n setError(null);\n const options = optionsFromResponse(response, addressLookupService);\n onOptionsDisplayed?.();\n return options;\n } catch (e) {\n setError(e as Error);\n return [];\n }\n },\n [addressLookupService, setError, onOptionsDisplayed],\n );\n\n const handleSelected = (selected: ComboboxOption) => {\n setError(null);\n\n if (typeof selected === \"string\" || !selected.id) {\n setError(new Error(\"Selected option missing id\"));\n return Promise.resolve();\n }\n\n return addressLookupService\n .get(selected.id)\n .then(onAddressSelected)\n .catch(setError);\n };\n\n const realErrorMessage = (error && \"An error occurred\") || errorMessage;\n\n return (\n <Combobox\n {...otherProps}\n ref={ref}\n onSelected={handleSelected}\n asyncOptions={asyncOptions}\n errorMessage={realErrorMessage}\n icon={<Icon icon={search} />}\n />\n );\n};\n\nAddressLookup.displayName = \"AddressLookup\";\n", "import { useOnUnmount } from \"@simplybusiness/mobius-hooks\";\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport type { FocusEvent } from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport { useBreakpoint } from \"../../hooks\";\nimport { TextField } from \"../TextField\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport { Listbox } from \"./Listbox\"; // Import Listbox component\nimport type { ComboboxOption, ComboboxProps, ComboboxRef } from \"./types\";\nimport { useComboboxHighlight } from \"./useComboboxHighlight\";\nimport { useComboboxOptions } from \"./useComboboxOptions\";\nimport { getOptionLabel, getOptionValue, isOptionGroup } from \"./utils\";\nimport \"./Combobox.css\";\n\nconst ComboboxInner = <T extends ComboboxOption>({\n ref,\n ...props\n}: ComboboxProps<T>) => {\n const {\n id,\n defaultValue,\n value,\n options,\n asyncOptions,\n delay,\n minSearchLength,\n onSelected,\n className,\n placeholder,\n icon,\n onBlur,\n onFocus,\n onChange,\n // onSearched, // unused prop, consider removing\n optionComponent,\n optionTestIdPrefix,\n errorMessage,\n ...otherProps\n } = props;\n // Avoid re-fetching after selecting an option\n const skipNextDebounceRef = useRef(false);\n const fallbackRef = useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = useState(defaultValue || \"\");\n const [isOpen, setIsOpen] = useState(false);\n const [isChanging, setIsChanging] = useState(false);\n const { filteredOptions, updateFilteredOptions, isLoading, error } =\n useComboboxOptions({\n options,\n asyncOptions,\n inputValue,\n delay,\n minSearchLength,\n skipNextDebounceRef,\n });\n const [validationError, setValidationError] = useState(\n error?.message || errorMessage,\n );\n const {\n highlightedIndex,\n highlightedGroupIndex,\n highlightNextOption,\n highlightPreviousOption,\n highlightFirstOption,\n highlightLastOption,\n clearHighlight,\n } = useComboboxHighlight(filteredOptions);\n\n const inputRef = ref || fallbackRef;\n const listboxId = useId();\n const statusId = useId();\n const blurTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const userInteractedRef = useRef(false);\n const justSelectedRef = useRef(false);\n const { down } = useBreakpoint();\n const isMobile = down(\"md\");\n\n useEffect(() => {\n setValidationError(error?.message || errorMessage);\n }, [error, errorMessage]);\n\n // Helper to create properly-typed empty value based on option type\n const getEmptyValue = (): T => {\n // Check first available option to determine if we're using string or object options\n const firstOption = filteredOptions\n ? isOptionGroup(filteredOptions)\n ? filteredOptions[0]?.options[0]\n : filteredOptions[0]\n : options\n ? isOptionGroup(options)\n ? options[0]?.options[0]\n : options[0]\n : undefined;\n\n // If options are strings, return empty string\n if (typeof firstOption === \"string\") {\n return \"\" as T;\n }\n\n // If options are objects, return empty object with same shape\n return { label: \"\", value: \"\" } as T;\n };\n\n const handleFocus = (e: FocusEvent) => {\n onFocus?.(e);\n if (!filteredOptions || filteredOptions.length === 0) return;\n if (blurTimeoutRef.current) {\n clearTimeout(blurTimeoutRef.current);\n blurTimeoutRef.current = null;\n }\n\n // Check if this is natural focus (user click/Tab) or programmatic focus\n const isNaturalFocus =\n userInteractedRef.current || e.relatedTarget !== null;\n if (userInteractedRef.current) {\n userInteractedRef.current = false;\n }\n\n // Block opening only if programmatic focus right after selection\n if (justSelectedRef.current && !isNaturalFocus) {\n return;\n }\n\n // Open dropdown for natural focus\n if (isNaturalFocus) {\n setIsOpen(true);\n justSelectedRef.current = false;\n }\n };\n\n useEffect(() => {\n if (!inputRef || typeof inputRef === \"function\") return;\n const inputElement = inputRef.current;\n if (!inputElement) return;\n\n const handleMouseDown = () => {\n // Track that user clicked/interacted with input\n userInteractedRef.current = true;\n };\n\n inputElement.addEventListener(\"mousedown\", handleMouseDown);\n return () => {\n inputElement.removeEventListener(\"mousedown\", handleMouseDown);\n };\n }, [inputRef]);\n\n useOnUnmount(() => {\n if (blurTimeoutRef.current) {\n clearTimeout(blurTimeoutRef.current);\n }\n });\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n setValidationError(undefined);\n justSelectedRef.current = false;\n setIsChanging(true);\n // Only open immediately for sync options; async options controlled by useEffect\n if (!asyncOptions) {\n setIsOpen(true);\n }\n clearHighlight();\n onChange?.(e);\n };\n\n const handleOptionSelect = (option: T) => {\n const val = getOptionValue(option);\n\n // Allow empty values to pass through\n if (!val && val !== \"\") return;\n\n if (\n typeof option === \"object\" &&\n \"callback\" in option &&\n option.callback &&\n typeof option.callback === \"function\"\n ) {\n justSelectedRef.current = true;\n setTimeout(() => {\n if (inputRef && typeof inputRef !== \"function\" && inputRef.current) {\n inputRef.current.focus();\n }\n }, 0);\n const callbackPromise = option.callback();\n updateFilteredOptions(callbackPromise);\n callbackPromise\n .then(() => {\n setIsOpen(true);\n setIsChanging(true);\n })\n .catch(() => {\n // error handled inside updateFilteredOptions via setError\n });\n return;\n }\n\n // Prevent re-fetching options after selecting an option\n skipNextDebounceRef.current = true;\n justSelectedRef.current = true;\n\n setIsChanging(false);\n setValidationError(undefined);\n setIsOpen(false);\n setInputValue(val);\n onSelected?.(option);\n };\n\n const getFirstOption = () => {\n if (!filteredOptions) return undefined;\n if (isOptionGroup(filteredOptions)) {\n return filteredOptions[0]?.options[0];\n }\n\n return filteredOptions[0];\n };\n\n const getHighlightedOption = () => {\n if (!filteredOptions) return undefined;\n if (highlightedIndex === -1) return undefined;\n\n if (isOptionGroup(filteredOptions)) {\n const group = filteredOptions[highlightedGroupIndex];\n return group?.options[highlightedIndex];\n }\n\n return filteredOptions[highlightedIndex];\n };\n\n const getHighlightedOptionId = () => {\n const option = getHighlightedOption();\n if (!option) return undefined;\n\n if (isOptionGroup(filteredOptions)) {\n return `${listboxId}-option-${highlightedGroupIndex}-${highlightedIndex}`;\n }\n\n return `${listboxId}-option-${highlightedIndex}`;\n };\n\n const handleBlur = (e: FocusEvent<Element, Element>) => {\n // Force selection if user has matched an entry by typing (not already selected)\n // Defer this to allow natural focus flow to complete first\n if (!justSelectedRef.current) {\n const typedText = inputValue.trim();\n const typedTextLower = typedText.toLowerCase();\n const highlightedOption = getHighlightedOption();\n const label = getOptionLabel(highlightedOption);\n\n if (typedTextLower === label?.toLowerCase()) {\n // Exact match with an option\n setTimeout(() => {\n handleOptionSelect(highlightedOption as T);\n }, 0);\n } else if (typedText === \"\") {\n // Allow empty values\n setTimeout(() => {\n handleOptionSelect(getEmptyValue());\n }, 0);\n } else {\n // Invalid value (not in options and not empty)\n setValidationError(\n errorMessage || \"Please select an option from the list\",\n );\n setTimeout(() => {\n setInputValue(\"\");\n }, 0);\n }\n }\n\n blurTimeoutRef.current = setTimeout(() => {\n onBlur?.(e);\n setIsOpen(false);\n setIsChanging(false);\n }, 150);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightNextOption();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightPreviousOption();\n break;\n case \"Home\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightFirstOption();\n break;\n case \"End\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightLastOption();\n break;\n case \"Enter\":\n e.preventDefault();\n if (isOpen) {\n const selectedOption = getHighlightedOption() || getFirstOption();\n if (selectedOption) {\n handleOptionSelect(selectedOption);\n }\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setInputValue(\"\");\n setIsOpen(false);\n clearHighlight();\n break;\n default:\n // Do nothing\n }\n };\n\n useEffect(() => {\n if (value) {\n setInputValue(value);\n }\n }, [value]);\n\n // Open and close the combobox based on async filtered options\n useEffect(() => {\n if (asyncOptions && isChanging) {\n setIsOpen(!!filteredOptions && filteredOptions.length > 0);\n }\n }, [filteredOptions, asyncOptions, isChanging]);\n\n const classes = classNames(\n \"mobius mobius-combobox\",\n {\n \"mobius-combobox--is-expanded\": isOpen,\n \"mobius-combobox--is-loading\": isLoading,\n \"mobius-combobox--is-mobile\": isMobile,\n },\n className,\n );\n\n const getStatusMessage = () => {\n if (isLoading) return \"Loading options\";\n if (!filteredOptions || filteredOptions.length === 0) {\n return isChanging ? \"No options found\" : \"\";\n }\n const count = isOptionGroup(filteredOptions)\n ? filteredOptions.reduce((sum, group) => sum + group.options.length, 0)\n : filteredOptions.length;\n return isOpen && isChanging\n ? `${count} option${count === 1 ? \"\" : \"s\"} available`\n : \"\";\n };\n\n return (\n <div id={id} data-testid=\"mobius-combobox__wrapper\" className={classes}>\n <VisuallyHidden\n role=\"status\"\n aria-live=\"polite\"\n id={statusId}\n elementType=\"div\"\n className=\"mobius-combobox__status\"\n >\n {getStatusMessage()}\n </VisuallyHidden>\n <TextField\n {...otherProps}\n className=\"mobius-combobox__input\"\n role=\"combobox\"\n value={inputValue}\n placeholder={placeholder}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={handleInputChange}\n autoComplete=\"off\"\n aria-describedby={isLoading ? statusId : undefined}\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls={isOpen ? listboxId : undefined}\n aria-expanded={isOpen}\n aria-activedescendant={\n highlightedIndex === -1 ? undefined : getHighlightedOptionId()\n }\n prefixInside={icon}\n ref={inputRef}\n errorMessage={errorMessage || validationError || error?.message}\n />\n <Listbox\n id={listboxId}\n isOpen={isOpen}\n isLoading={isLoading}\n options={filteredOptions}\n highlightedIndex={highlightedIndex}\n highlightedGroupIndex={highlightedGroupIndex}\n onOptionSelect={handleOptionSelect}\n optionComponent={optionComponent}\n optionTestIdPrefix={optionTestIdPrefix}\n />\n </div>\n );\n};\n\nexport const Combobox = ComboboxInner as <T extends ComboboxOption>(\n props: ComboboxProps<T> & { ref?: ComboboxRef },\n) => React.JSX.Element;\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type {\n HTMLInputTypeAttribute,\n ReactElement,\n ReactNode,\n Ref,\n RefAttributes,\n} from \"react\";\nimport type { UseTextFieldProps } from \"../../hooks\";\nimport { useTextField, useValidationClasses } from \"../../hooks\";\nimport type { DOMProps, FocusEvents } from \"../../types\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport { adornmentWithClassName } from \"./adornmentWithClassName\";\nimport \"./TextField.css\";\n\nexport type TextFieldElementType = HTMLInputElement;\nexport interface TextFieldProps\n extends\n DOMProps,\n FocusEvents,\n UseTextFieldProps,\n RefAttributes<TextFieldElementType> {\n className?: string;\n errorMessage?: string;\n children?: ReactNode;\n label?: string;\n type?: Exclude<\n HTMLInputTypeAttribute,\n | \"button\"\n | \"checkbox\"\n | \"color\"\n | \"date\"\n | \"datetime-local\"\n | \"file\"\n | \"image\"\n | \"month\"\n | \"radio\"\n | \"range\"\n | \"reset\"\n | \"submit\"\n | \"week\"\n >;\n prefixInside?: ReactElement;\n prefixOutside?: ReactElement;\n suffixInside?: ReactElement;\n suffixOutside?: ReactElement;\n}\n\nexport type TextFieldRef = Ref<TextFieldElementType>;\n\nconst TextField = ({ ref, ...props }: TextFieldProps) => {\n const {\n isDisabled,\n type = \"text\",\n isInvalid,\n className,\n label,\n errorMessage,\n children,\n isRequired,\n prefixInside,\n prefixOutside,\n suffixInside,\n suffixOutside,\n autoComplete,\n isReadOnly,\n ...otherProps\n } = props;\n\n const resolvedAutoComplete =\n autoComplete ??\n (type === \"email\" ? \"email\" : type === \"tel\" ? \"tel\" : undefined);\n\n const { inputProps, labelProps, errorMessageProps } = useTextField({\n ...props,\n autoComplete: resolvedAutoComplete,\n \"aria-errormessage\": errorMessage,\n });\n\n const hidden = type === \"hidden\";\n\n const validationClasses = useValidationClasses({ isInvalid });\n\n const textfieldClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n \"--is-hidden\": hidden,\n [className || \"\"]: true,\n };\n\n const sharedClasses = classNames(validationClasses, textfieldClasses);\n\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-text-field\",\n sharedClasses,\n );\n\n const inputClasses = classNames(\n \"mobius\",\n \"mobius-text-field__input\",\n sharedClasses,\n );\n\n const inputWrapperClasses = classNames(\n \"mobius-text-field__input-wrapper\",\n sharedClasses,\n );\n\n return (\n <Stack gap=\"xs\" className={containerClasses}>\n {label && !hidden && (\n <Label {...labelProps} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className=\"mobius-text-field__inner-container\">\n {adornmentWithClassName(\n prefixOutside,\n labelClasses,\n \"mobius-text-field__prefix-outside\",\n )}\n <div className={inputWrapperClasses}>\n {adornmentWithClassName(\n prefixInside,\n labelClasses,\n \"mobius-text-field__prefix-inside\",\n )}\n <input\n {...otherProps}\n {...inputProps}\n ref={ref}\n type={type}\n className={inputClasses}\n />\n {adornmentWithClassName(\n suffixInside,\n labelClasses,\n \"mobius-text-field__suffix-inside\",\n )}\n </div>\n {adornmentWithClassName(\n suffixOutside,\n labelClasses,\n \"mobius-text-field__suffix-outside\",\n )}\n </div>\n {children && (\n <div className=\"mobius-text-field__children\">{children}</div>\n )}\n\n <ErrorMessage {...errorMessageProps} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nTextField.displayName = \"TextField\";\nexport { TextField };\n", "\"use client\";\n\nimport type { ChangeEvent } from \"react\";\nimport { useRef, useId, useState, useEffect } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport { squareTick, square } from \"@simplybusiness/icons\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport type { CheckboxElementType, CheckboxProps } from \"./types\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { useValidationClasses } from \"../../hooks\";\nimport { Icon } from \"../Icon\";\nimport { Stack } from \"../Stack\";\nimport \"./Checkbox.css\";\n\nexport const Checkbox = ({ ref, ...props }: CheckboxProps) => {\n const {\n id,\n label,\n isDisabled,\n isRequired,\n isInvalid,\n onChange,\n className,\n errorMessage,\n selected,\n defaultSelected = false,\n isReadOnly,\n isLastItem,\n name,\n value,\n [\"aria-describedby\"]: ariaDescribedBy,\n ...rest\n } = props;\n const [checked, setChecked] = useState<boolean>(defaultSelected);\n const fallbackRef = useRef<HTMLInputElement>(null);\n const refObj = ref || fallbackRef;\n const inputId = useId();\n\n const isControlled = typeof selected === \"boolean\";\n useEffect(() => {\n if (isControlled) {\n setChecked(selected);\n }\n }, [selected, isControlled]);\n\n const validationClasses = useValidationClasses({ isInvalid });\n const sharedClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n \"--is-selected\": checked,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n },\n validationClasses,\n );\n // Append an additional wrapper class name to differenitate from input\n const wrapperClasses = classNames(\n \"mobius\",\n \"mobius-checkbox\",\n sharedClasses,\n className,\n );\n const labelClasses = classNames(\"mobius-checkbox__label\", sharedClasses);\n const inputClasses = classNames(\"mobius-checkbox__input\", sharedClasses);\n const iconClasses = classNames(\"mobius-checkbox__icon\", sharedClasses);\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n ariaDescribedBy,\n ]);\n const labelId = useId();\n\n const handleChange = (event: ChangeEvent<CheckboxElementType>) => {\n setChecked(!checked);\n if (onChange) {\n onChange(event, isLastItem);\n }\n };\n\n return (\n <Stack gap=\"xs\" className={wrapperClasses}>\n <label className={labelClasses}>\n <input\n aria-describedby={describedBy}\n aria-errormessage={shouldErrorMessageShow}\n aria-invalid={isInvalid}\n aria-labelledby={labelId}\n readOnly={isReadOnly}\n disabled={isDisabled}\n ref={refObj}\n className={inputClasses}\n onChange={handleChange}\n type=\"checkbox\"\n checked={checked}\n required={isRequired}\n id={id || inputId}\n name={name}\n value={value}\n {...rest}\n />\n <Icon\n icon={checked ? squareTick : square}\n size=\"md\"\n className={iconClasses}\n />\n <span id={labelId} className=\"mobius-checkbox__visible-label\">\n {label}\n </span>\n </label>\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nCheckbox.displayName = \"Checkbox\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport {\n type ChangeEvent,\n type ReactElement,\n Children,\n cloneElement,\n isValidElement,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Checkbox } from \"./Checkbox\";\nimport type { CheckboxElementType, CheckboxGroupProps } from \"./types\";\nimport \"./CheckboxGroup.css\";\n\nexport const CheckboxGroup = ({ ref, ...props }: CheckboxGroupProps) => {\n const {\n label,\n isDisabled = false,\n isRequired,\n isInvalid,\n orientation = \"vertical\",\n onChange,\n className,\n errorMessage,\n children,\n defaultValue = [],\n isReadOnly,\n itemsPerRow,\n lastItemDisables = false,\n ...rest\n } = props;\n const [selected, setSelected] = useState<string[]>(defaultValue);\n\n // Handle controlled behavior - update state when defaultValue prop changes\n // Use a ref to track if we've initialized to avoid infinite re-renders\n const isInitializedRef = useRef(false);\n const prevDefaultValueRef = useRef<string[]>(defaultValue);\n\n useEffect(() => {\n // Only update if defaultValue has actually changed (shallow comparison)\n const hasChanged =\n defaultValue.length !== prevDefaultValueRef.current.length ||\n defaultValue.some(\n (val, index) => val !== prevDefaultValueRef.current[index],\n );\n\n if (hasChanged || !isInitializedRef.current) {\n setSelected(defaultValue);\n prevDefaultValueRef.current = defaultValue;\n isInitializedRef.current = true;\n }\n }, [defaultValue]);\n\n const checkboxGroupClasses = classNames(\n \"mobius\",\n \"mobius-checkbox-group\",\n className,\n {\n \"--is-horizontal\": orientation === \"horizontal\",\n \"--is-vertical\": orientation === \"vertical\",\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n },\n );\n const validationClasses = useValidationClasses({ isInvalid });\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n const labelId = useId();\n\n const handleChange = (\n event: ChangeEvent<CheckboxElementType>,\n isLastItem = false,\n ) => {\n const {\n target: { value, checked },\n } = event;\n let newValue = [...selected];\n\n if (!checked) {\n newValue = selected.filter(item => item !== value);\n }\n\n if (checked) {\n newValue = [...selected, value];\n }\n\n if (checked && lastItemDisables && isLastItem) {\n newValue = [value];\n }\n\n setSelected(newValue);\n onChange?.(newValue);\n };\n\n const childrenArray = Children.toArray(children);\n const lastCheckbox = childrenArray\n .filter(\n child =>\n isValidElement(child) && (child as ReactElement).type === Checkbox,\n )\n .pop() as ReactElement<CheckboxElementType> | undefined;\n const lastCheckboxIsChecked =\n lastCheckbox && selected.includes(lastCheckbox.props.value);\n\n return (\n <div\n {...rest}\n aria-labelledby={props[\"aria-labelledby\"] || labelId}\n ref={ref}\n className={checkboxGroupClasses}\n role=\"group\"\n style={\n {\n \"--checkbox-items-per-row\": itemsPerRow || Children.count(children),\n } as React.CSSProperties\n }\n >\n {label && (\n <Label elementType=\"span\" id={labelId} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className=\"mobius-checkbox-group__wrapper\">\n {childrenArray.map(child => {\n if (isValidElement(child)) {\n // lastItemDisables support\n const isLastItem = child === lastCheckbox;\n const isChildDisabled =\n isDisabled ||\n (lastItemDisables && lastCheckboxIsChecked && !isLastItem);\n\n const childProps = child.props as {\n value: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n };\n\n return cloneElement(\n child as ReactElement,\n {\n isDisabled: isChildDisabled,\n isRequired,\n isReadOnly,\n isInvalid,\n isLastItem,\n selected: selected.includes(childProps.value),\n onChange: childProps.onChange || handleChange,\n \"aria-describedby\": describedBy,\n } as Record<string, unknown>,\n );\n }\n\n return child;\n })}\n </div>\n {errorMessage && (\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n )}\n </div>\n );\n};\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { FocusEvent, RefAttributes } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { mergeRefs } from \"../../utils/mergeRefs\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport { convertToDateFormat, isValidDate } from \"./validation\";\n\nexport interface DateFieldProps\n extends Omit<TextFieldProps, \"type\">, RefAttributes<TextFieldElementType> {\n /** The earliest date allowed for the input. */\n min?: string;\n /** The latest date allowed for the input. */\n max?: string;\n /** Date format to use. */\n format?: string;\n}\n\nexport const MIN_MAX_ERROR =\n '\"min\" value should not be greater than \"max\" value.';\n\nexport const DateField = ({ ref, ...props }: DateFieldProps) => {\n const {\n min,\n max,\n format,\n className,\n errorMessage,\n defaultValue,\n value,\n ...otherProps\n } = props;\n const [error, setError] = useState<string | undefined>(errorMessage);\n const [isInvalid, setIsInvalid] = useState<boolean | undefined>(undefined);\n const localRef = useRef<TextFieldElementType>(null);\n const classes = classNames(\"mobius-date-field\", className);\n\n // If a custom format is provided, convert the min, max,\n // and defaultValue dates to that format\n const formattedMin = min ? convertToDateFormat(min, format) : undefined;\n const formattedMax = max ? convertToDateFormat(max, format) : undefined;\n const formattedDefaultValue = defaultValue\n ? convertToDateFormat(defaultValue, format)\n : undefined;\n const formattedValue = value ? convertToDateFormat(value, format) : undefined;\n\n const setInvalidState = (error?: string) => {\n setError(error);\n setIsInvalid(true);\n };\n\n const setValidState = () => {\n setError(props.errorMessage);\n setIsInvalid(false);\n };\n\n // Validate min and max values\n useEffect(() => {\n if (!isValidDate(min, format)) {\n setInvalidState(`Invalid min date: ${min}`);\n return;\n }\n if (!isValidDate(max, format)) {\n setInvalidState(`Invalid max date: ${max}`);\n return;\n }\n\n if (min && max) {\n const minDate = new Date(min);\n const maxDate = new Date(max);\n if (minDate > maxDate) {\n setInvalidState(MIN_MAX_ERROR);\n } else {\n setValidState();\n }\n } else {\n setValidState();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [min, max, format]);\n\n const validate = () => {\n // If 'min' or 'max' values are provided, checkValidity() will\n // validate the date and return a boolean\n const isValidInput = localRef.current?.checkValidity();\n\n if (!isValidInput) {\n setInvalidState(\"Invalid date input\");\n } else {\n setValidState();\n }\n };\n\n // User has interacted with the component and navigated away\n const handleBlur = (event: FocusEvent<Element>) => {\n validate();\n otherProps.onBlur?.(event);\n };\n\n return (\n <TextField\n ref={mergeRefs([localRef, ref])}\n className={classes}\n type=\"date\"\n min={formattedMin}\n max={formattedMax}\n errorMessage={errorMessage ?? error}\n isInvalid={isInvalid}\n defaultValue={formattedDefaultValue}\n value={formattedValue}\n onBlur={handleBlur}\n {...otherProps}\n />\n );\n};\n\nDateField.displayName = \"DateField\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport { type RefAttributes, useCallback, useEffect, useRef } from \"react\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport \"./NumberField.css\";\n\nexport type NumberFieldElementType = TextFieldElementType;\n\nexport interface NumberFieldProps\n extends\n Omit<TextFieldProps, \"type\" | \"defaultValue\" | \"inputElementType\">,\n RefAttributes<NumberFieldElementType> {\n /** The smallest value allowed for the input. */\n minValue?: number;\n /** The largest value allowed for the input. */\n maxValue?: number;\n /** The amount that the input value changes with each increment or decrement \"tick\". */\n step?: number; // ??\n /** The default value for the input. */\n defaultValue?: number;\n /** Flag to hide the spin buttons. */\n hideSpinButtons?: boolean;\n}\n\nexport const NumberField = ({ ref, ...props }: NumberFieldProps) => {\n const {\n minValue,\n maxValue,\n step,\n defaultValue,\n hideSpinButtons,\n className,\n ...otherProps\n } = props;\n const {\n onFocus: customOnFocus,\n onBlur: customOnBlur,\n ...rest\n } = otherProps as Omit<TextFieldProps, \"onFocus\" | \"onBlur\"> & {\n onFocus?: React.FocusEventHandler<HTMLInputElement>;\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n };\n\n const focusedInputRef = useRef<HTMLInputElement | null>(null);\n const wheelHandler = useCallback((ev: Event) => ev.preventDefault(), []);\n\n useEffect(() => {\n return () => {\n focusedInputRef.current?.removeEventListener(\"wheel\", wheelHandler);\n focusedInputRef.current = null;\n };\n }, [wheelHandler]);\n\n const containerClasses = classNames(\"mobius-number-field\", className, {\n \"--hide-spin-buttons\": hideSpinButtons,\n });\n\n const handleBeforeInput = (\n event: React.FormEvent<NumberFieldElementType>,\n ) => {\n const { data } = event.nativeEvent as InputEvent;\n if (step && Number.isInteger(step) && data === \".\") {\n event.preventDefault();\n }\n if (minValue && minValue >= 0 && data === \"-\") {\n event.preventDefault();\n }\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const { value } = event.target;\n const numValue = parseFloat(value);\n\n // On blur, snap to nearest valid step value if step is defined\n if (step && step > 1 && !isNaN(numValue)) {\n const baseValue = minValue ?? 0;\n const steps = Math.round((numValue - baseValue) / step);\n const snappedValue = baseValue + steps * step;\n\n // Only update if the value changed\n if (snappedValue !== numValue) {\n event.target.value = snappedValue.toString();\n // Trigger change event for the corrected value\n const changeEvent = new Event(\"change\", { bubbles: true });\n event.target.dispatchEvent(changeEvent);\n // Also call the onChange handler if provided\n const syntheticChangeEvent = {\n ...event,\n target: event.target,\n currentTarget: event.currentTarget,\n } as React.ChangeEvent<HTMLInputElement>;\n otherProps.onChange?.(syntheticChangeEvent);\n }\n }\n\n customOnBlur?.(event);\n };\n\n const forwardedProps: TextFieldProps = {\n ...rest,\n onFocus: e => {\n const el = e.currentTarget as HTMLInputElement;\n focusedInputRef.current?.removeEventListener(\"wheel\", wheelHandler);\n focusedInputRef.current = el;\n el.addEventListener(\"wheel\", wheelHandler, { passive: false });\n customOnFocus?.(e as React.FocusEvent<HTMLInputElement>);\n },\n onBlur: e => handleBlur(e as React.FocusEvent<HTMLInputElement>),\n };\n\n return (\n <TextField\n {...forwardedProps}\n className={containerClasses}\n onBeforeInput={handleBeforeInput}\n type=\"number\"\n min={minValue ?? undefined}\n max={maxValue ?? undefined}\n step={step}\n ref={ref}\n defaultValue={\n defaultValue != null ? defaultValue?.toString() : defaultValue\n }\n />\n );\n};\n\nNumberField.displayName = \"NumberField\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport { useRef, useState } from \"react\";\nimport { mergeRefs } from \"../../utils/mergeRefs\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport { ShowHideButton } from \"./ShowHideButton\";\nimport \"./PasswordField.css\";\n\nexport type PasswordFieldAutoComplete = \"current-password\" | \"new-password\";\n\nexport interface PasswordFieldProps extends TextFieldProps {\n autoComplete?: PasswordFieldAutoComplete;\n}\n\nexport const PasswordField = ({\n ref,\n className,\n autoComplete = \"current-password\",\n ...props\n}: PasswordFieldProps) => {\n const [show, setShow] = useState(false);\n const type = show ? \"text\" : \"password\";\n const classes = classNames(\"mobius-password-field\", className);\n const localRef = useRef<TextFieldElementType>(null);\n\n const handleShowHideButtonClick = () => {\n const selectionStart = localRef.current?.selectionStart;\n const selectionEnd = localRef.current?.selectionEnd;\n\n setShow(oldShow => !oldShow);\n requestAnimationFrame(() => {\n localRef.current?.focus();\n if (selectionStart != null && selectionEnd != null) {\n localRef.current?.setSelectionRange(selectionStart, selectionEnd);\n }\n });\n };\n\n return (\n <TextField\n ref={mergeRefs([localRef, ref])}\n className={classes}\n {...props}\n autoComplete={autoComplete}\n type={type}\n suffixInside={\n <ShowHideButton onClick={handleShowHideButtonClick} show={show} />\n }\n />\n );\n};\n\nPasswordField.displayName = \"PasswordField\";\n", "import { eye, eyeSlash } from \"@simplybusiness/icons\";\nimport { Icon } from \"../..\";\n\nexport interface ShowHideButtonProps {\n show?: boolean;\n onClick: () => void;\n}\n\nexport const ShowHideButton = ({\n show = false,\n onClick,\n}: ShowHideButtonProps) => (\n <button\n className=\"mobius-password-field__show-button\"\n type=\"button\"\n onClick={e => {\n e.preventDefault();\n onClick();\n }}\n aria-label={`${show ? \"Hide\" : \"Show\"} password`}\n data-testid=\"show-hide-button\"\n >\n <Icon icon={show ? eyeSlash : eye} aria-hidden=\"true\" />\n </button>\n);\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport {\n Children,\n isValidElement,\n useLayoutEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { HTMLElementEvent } from \"../../types/events\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport \"./Radio.css\";\n\nexport type RadioElementType = HTMLInputElement;\n\nexport type RadioOverflowInfo = {\n vertical: boolean;\n horizontal: boolean;\n};\n\nexport type AriaRadioProps = {\n /**\n * Defines a string value that labels the current element.\n */\n \"aria-label\"?: string;\n /**\n * Identifies the element (or elements) that labels the current element.\n */\n \"aria-labelledby\"?: string;\n /**\n * Identifies the element (or elements) that describes the object.\n */\n \"aria-describedby\"?: string;\n /**\n * Identifies the element (or elements) that provide a detailed, extended description for the object.\n */\n \"aria-details\"?: string;\n};\n\nexport interface RadioProps\n extends DOMProps, AriaRadioProps, RefAttributes<RadioElementType> {\n children?: ReactNode;\n className?: string;\n label?: ReactNode;\n errorMessage?: string;\n value: string;\n isDisabled?: boolean;\n onChange?: (event: HTMLElementEvent<RadioElementType>) => void;\n defaultChecked?: boolean;\n /**\n * Callback fired when label overflow state changes.\n * Only invoked when the Radio is in horizontal orientation to prevent infinite loops with autoStack.\n * Provides information about vertical and horizontal overflow.\n */\n onOverflow?: (overflow: RadioOverflowInfo) => void;\n // Internal:** Do not use\n groupDisabled?: boolean;\n // Internal:** Do not use\n name?: string;\n // Internal:** Do not use\n selected?: string;\n // Internal:** Do not use\n setSelected?: React.Dispatch<React.SetStateAction<string>>;\n isRequired?: boolean;\n /**\n * **Internal:** Passed via cloneElement from RadioGroup.\n * @internal\n */\n orientation?: \"horizontal\" | \"vertical\";\n}\n\nconst Radio = ({ ref, ...props }: RadioProps) => {\n const {\n children,\n value,\n label,\n className,\n isDisabled,\n errorMessage,\n onChange,\n defaultChecked,\n groupDisabled,\n name,\n selected,\n setSelected,\n isRequired,\n onOverflow,\n orientation,\n ...otherProps\n } = props;\n const realDisabled = groupDisabled || isDisabled;\n const isMultiline = label && children;\n const isControlled = selected !== undefined;\n const isChecked = isControlled ? selected === value : defaultChecked;\n\n const contentRef = useRef<HTMLDivElement>(null);\n const prevOverflowRef = useRef<RadioOverflowInfo>({\n vertical: false,\n horizontal: false,\n });\n\n const hasIconFirst = useMemo(() => {\n if (!children || Children.count(children) === 0) return false;\n\n const firstChild = Children.toArray(children)[0];\n if (!isValidElement(firstChild)) return false;\n\n const props = firstChild.props as Record<string, unknown>;\n return \"icon\" in props && props.icon !== undefined;\n }, [children]);\n\n // Detect overflow and call callback\n useLayoutEffect(() => {\n if (!contentRef.current || !onOverflow) return;\n\n // Only detect overflow when in horizontal orientation\n // This prevents infinite loops when autoStack switches to vertical\n if (orientation === \"vertical\") {\n return;\n }\n\n const element = contentRef.current;\n\n // Check for content being cut off (true overflow)\n const scrollOverflowVertical = element.scrollHeight > element.clientHeight;\n const scrollOverflowHorizontal = element.scrollWidth > element.clientWidth;\n\n // Check for multi-line text wrapping by comparing height to single line height\n const styles = window.getComputedStyle(element);\n const lineHeight = parseFloat(styles.lineHeight);\n const fontSize = parseFloat(styles.fontSize);\n const singleLineHeight = isNaN(lineHeight) ? fontSize * 1.2 : lineHeight;\n\n // Tolerance multiplier to account for sub-pixel rendering and line-height variations.\n // If element height is greater than single line, text has wrapped.\n const WRAP_DETECTION_TOLERANCE = 1.1;\n const hasWrapped =\n element.clientHeight > singleLineHeight * WRAP_DETECTION_TOLERANCE;\n\n const vertical = scrollOverflowVertical || hasWrapped;\n const horizontal = scrollOverflowHorizontal;\n\n const newOverflowState = { vertical, horizontal };\n const prevOverflow = prevOverflowRef.current;\n\n // Only call callback if state actually changed\n if (\n newOverflowState.vertical !== prevOverflow.vertical ||\n newOverflowState.horizontal !== prevOverflow.horizontal\n ) {\n prevOverflowRef.current = newOverflowState;\n onOverflow(newOverflowState);\n }\n }, [label, children, onOverflow, orientation]);\n\n const radioClasses = {\n \"--is-disabled\": realDisabled,\n \"--is-selected\": selected === value,\n \"--is-multiline\": !!isMultiline,\n \"--is-required\": isRequired,\n };\n const containerClasses = classNames(\n \"mobius-radio__label\",\n radioClasses,\n className,\n { \"--has-icon-first\": hasIconFirst },\n );\n\n const inputClasses = classNames(\"mobius-radio__input\", radioClasses);\n\n // Exclude props that are passed via cloneElement in `<RadioGroup />`\n const { \"aria-describedby\": _ariaDescribedBy, ...rest } = otherProps;\n\n // Handle all interactions through onChange event\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n // Update internal state for RadioGroup\n if (setSelected) {\n setSelected(event.target.value);\n }\n\n // Call parent onChange callback\n if (onChange) {\n // Create an HTMLElementEvent-compatible object\n const adaptedEvent: HTMLElementEvent<HTMLInputElement> = {\n ...event.nativeEvent,\n target: event.target,\n };\n onChange(adaptedEvent);\n }\n };\n\n return (\n <>\n <Label className={containerClasses}>\n <input\n aria-describedby={otherProps[\"aria-describedby\"]}\n disabled={realDisabled}\n ref={ref}\n className={inputClasses}\n value={value}\n tabIndex={0}\n type=\"radio\"\n onChange={handleChange}\n {...(isControlled\n ? { checked: isChecked }\n : { defaultChecked: isChecked })}\n name={name}\n required={isRequired}\n {...rest}\n />\n {isMultiline ? (\n <div ref={contentRef} className=\"mobius-radio__content--multiline\">\n <div className=\"mobius-radio__content-first-line\">{label}</div>\n <div className=\"mobius-radio__extra-content\">{children}</div>\n </div>\n ) : (\n <div ref={contentRef} className=\"mobius-radio__content\">\n {label || children}\n </div>\n )}\n </Label>\n {errorMessage && <ErrorMessage errorMessage={errorMessage} />}\n </>\n );\n};\n\nRadio.displayName = \"Radio\";\nexport { Radio };\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport type { Validation } from \"../../types\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { HTMLElementEvent } from \"../../types/events\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport type { RadioOverflowInfo } from \"./Radio\";\n\nexport type RadioGroupElementType = HTMLDivElement;\n\nexport interface RadioGroupProps\n extends DOMProps, Validation, RefAttributes<RadioGroupElementType> {\n children: ReactNode;\n className?: string;\n orientation?: \"horizontal\" | \"vertical\";\n errorMessage?: string;\n // Callback that fires when select changes\n onChange?: (event: HTMLElementEvent<HTMLInputElement>) => void;\n /**\n * Automatically change orientation from horizontal to vertical when any Radio label overflows.\n * Only applies when orientation is set to \"horizontal\".\n */\n autoStack?: boolean;\n // Defines a string value that labels the current element.\n \"aria-label\"?: string;\n // Identifies the element (or elements) that labels the current element.\n \"aria-labelledby\"?: string;\n // Identifies the element that provides an error message for the object.\n \"aria-errormessage\"?: string;\n // Identifies the element (or elements) that describes the object.\n \"aria-describedby\"?: string;\n // Whether user input is required on the input before form submission.\n isRequired?: boolean;\n // Whether the input is disabled.\n isDisabled?: boolean;\n // Whether the input can be selected but not changed by the user.\n isReadOnly?: boolean;\n // The default value (uncontrolled).\n defaultValue?: string;\n // The content to display as the label.\n label?: ReactNode;\n /**\n * The value of the radio button, used when submitting an HTML form.\n * See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio#Value).\n */\n value?: string;\n name?: string;\n}\n\nconst getDefaultVal = (children: ReactNode, defaultValue?: string) => {\n if (Array.isArray(children) && defaultValue) {\n const option = children?.find(item => item.props.value === defaultValue);\n\n if (!option) return \"\";\n\n return option.props.value;\n }\n\n return \"\";\n};\n\nconst RadioGroup = ({ ref, ...props }: RadioGroupProps) => {\n const {\n label,\n isDisabled = false,\n isRequired,\n isInvalid,\n orientation = \"vertical\",\n className,\n errorMessage,\n children,\n defaultValue,\n value,\n isReadOnly,\n name,\n onChange,\n autoStack = false,\n ...rest\n } = props;\n const defaultSelected = getDefaultVal(children, value || defaultValue);\n const [selected, setSelected] = useState<string>(defaultSelected);\n const overflowsRef = useRef<Record<string, RadioOverflowInfo>>({});\n const [hasOverflow, setHasOverflow] = useState(false);\n\n // Handle controlled behavior - update state when value prop changes\n useEffect(() => {\n if (value !== undefined) {\n setSelected(value);\n }\n }, [value]);\n\n // Handle overflow detection and auto-stack if needed\n const handleOverflow = useCallback(\n (radioValue: string, overflow: RadioOverflowInfo) => {\n overflowsRef.current = {\n ...overflowsRef.current,\n [radioValue]: overflow,\n };\n\n // Check if any radio has overflow\n const anyOverflow = Object.values(overflowsRef.current).some(\n o => o.vertical || o.horizontal,\n );\n\n if (anyOverflow !== hasOverflow) {\n setHasOverflow(anyOverflow);\n }\n },\n [hasOverflow],\n );\n\n // Determine effective orientation (auto-stack if needed)\n const effectiveOrientation =\n autoStack && orientation === \"horizontal\" && hasOverflow\n ? \"vertical\"\n : orientation;\n\n const validationClasses = useValidationClasses({ isInvalid });\n const radioClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n [`--is-${effectiveOrientation}`]: true,\n [className || \"\"]: true,\n };\n const radioGroupClasses = classNames(\n \"mobius\",\n \"mobius-radio-group\",\n radioClasses,\n validationClasses,\n );\n const radioWrapperClasses = classNames(\"mobius-radio__wrapper\", {\n [`--is-${effectiveOrientation}`]: true,\n });\n const labelClasses = classNames(radioClasses, validationClasses);\n const errorMessageId = useId();\n const defaultNameAttrId = useId();\n const nameAttribute = name || defaultNameAttrId;\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n const labelId = useId();\n\n return (\n <div\n {...rest}\n aria-describedby={describedBy}\n aria-disabled={isDisabled}\n aria-errormessage={shouldErrorMessageShow}\n aria-invalid={isInvalid}\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"] || labelId}\n aria-orientation={effectiveOrientation}\n aria-readonly={isReadOnly}\n aria-required={isRequired}\n ref={ref}\n className={radioGroupClasses}\n role=\"radiogroup\"\n >\n <Stack gap=\"xs\">\n {label && (\n <Label htmlFor={name} id={labelId} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className={radioWrapperClasses}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n const childValue = (child.props as { value?: string }).value;\n return cloneElement(\n child as ReactElement,\n {\n orientation: effectiveOrientation,\n groupDisabled: isDisabled,\n name: nameAttribute,\n selected: selected || defaultSelected, // in case state does not update\n setSelected,\n isRequired,\n \"aria-describedby\": describedBy,\n onChange,\n onOverflow: childValue\n ? (overflow: RadioOverflowInfo) =>\n handleOverflow(childValue, overflow)\n : undefined,\n } as Record<string, unknown>,\n );\n }\n\n return child;\n })}\n </div>\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n </Stack>\n </div>\n );\n};\n\nRadioGroup.displayName = \"RadioGroup\";\nexport { RadioGroup };\n", "\"use client\";\n\nimport { chevronDown } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport type { ChangeEvent, ReactElement, RefAttributes } from \"react\";\nimport { useId } from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport type { UseLabelProps } from \"../../hooks/useLabel\";\nimport { useLabel } from \"../../hooks/useLabel\";\nimport type { DOMProps, Validation } from \"../../types\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Icon } from \"../Icon\";\nimport { Label } from \"../Label\";\nimport type { OptionProps } from \"../Option\";\nimport { Stack } from \"../Stack\";\nimport \"./Select.css\";\n\nexport type SelectElementType = HTMLSelectElement;\nexport interface SelectProps\n extends\n UseLabelProps,\n Validation,\n DOMProps,\n RefAttributes<SelectElementType> {\n name?: string;\n onChange?: (e: ChangeEvent<HTMLSelectElement>) => void;\n value?: string;\n defaultValue?: string;\n className?: string;\n errorMessage?: string;\n children?: ReactElement<OptionProps>[] | ReactElement<OptionProps>;\n \"aria-describedby\"?: string;\n isDisabled?: boolean;\n}\n\nconst Select = ({ ref, ...props }: SelectProps) => {\n const {\n label,\n onChange,\n isInvalid,\n errorMessage,\n isDisabled = false,\n isRequired,\n ...otherProps\n } = props;\n\n const { labelProps, fieldProps } = useLabel({\n label,\n ...otherProps,\n });\n\n const validationClasses = useValidationClasses({ isInvalid });\n\n const stateClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n };\n\n const sharedClasses = classNames(validationClasses, stateClasses);\n\n const wrapperClasses = classNames(\n \"mobius-select__wrapper\",\n sharedClasses,\n otherProps.className,\n );\n const selectClasses = classNames(\n \"mobius-select\",\n sharedClasses,\n otherProps.className,\n );\n const labelClasses = classNames(\n \"mobius-label\",\n sharedClasses,\n otherProps.className,\n );\n const iconClasses = classNames(\"mobius-select__icon\", sharedClasses);\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n\n const handleChange = (e: ChangeEvent<HTMLSelectElement>) => {\n if (onChange) {\n onChange(e);\n }\n };\n\n return (\n <Stack className=\"mobius mobius-select__outer\" gap=\"xs\">\n {label && (\n <Label {...labelProps} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className={wrapperClasses}>\n <select\n {...otherProps}\n {...fieldProps}\n ref={ref}\n multiple={false}\n className={selectClasses}\n disabled={isDisabled}\n aria-invalid={!!errorMessage}\n aria-describedby={describedBy}\n aria-required={isRequired}\n required={isRequired}\n onChange={handleChange}\n />\n <span className={iconClasses}>\n <Icon icon={chevronDown} />\n </span>\n </div>\n {errorMessage && (\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n )}\n </Stack>\n );\n};\n\nSelect.displayName = \"Select\";\nexport { Select };\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { RefAttributes } from \"react\";\nimport type { UseTextFieldProps } from \"../../hooks\";\nimport { useTextField, useValidationClasses } from \"../../hooks\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport { TextAreaInput } from \"../TextAreaInput\";\nimport \"./TextArea.css\";\n\nexport type TextAreaElementType = HTMLTextAreaElement;\n\nexport interface TextAreaProps\n extends UseTextFieldProps, DOMProps, RefAttributes<TextAreaElementType> {\n className?: string;\n errorMessage?: string;\n}\n\nconst TextArea = ({ ref, ...props }: TextAreaProps) => {\n const {\n isDisabled,\n className,\n errorMessage,\n label,\n isInvalid,\n ...otherProps\n } = props;\n\n const { inputProps, labelProps, errorMessageProps } = useTextField(props);\n\n // Set class name for atom, including interaction state\n const classes = classNames(\"mobius\", \"mobius-text-area\", className);\n const validationClasses = useValidationClasses({ isInvalid });\n const inputClasses = classNames(\"mobius-text-area__input\", validationClasses);\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n\n return (\n <Stack className={classes} gap=\"xs\">\n {label && (\n <Label {...labelProps} className={labelClasses}>\n {props.label}\n </Label>\n )}\n <TextAreaInput\n {...otherProps}\n {...inputProps}\n ref={ref}\n className={inputClasses}\n isDisabled={isDisabled}\n aria-invalid={errorMessage != null}\n />\n <ErrorMessage {...errorMessageProps} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nTextArea.displayName = \"TextArea\";\nexport { TextArea };\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport type { RefAttributes } from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport { Accordion, TextOrHTML, useBreakpoint } from \"../..\";\nimport type { DOMProps } from \"../../types\";\nimport type { AccordionProps } from \"../Accordion/Accordion\";\nimport type { TextProps } from \"../Text/Text\";\nimport \"./ExpandableText.css\";\n\nexport type ExpandableTextElementType = HTMLDivElement;\n\nexport interface ExpandableTextProps\n extends DOMProps, RefAttributes<ExpandableTextElementType> {\n /** The text content to display (can be plain text or HTML) */\n text: string;\n /** Maximum number of lines to show when collapsed */\n maxLines?: number;\n /** Breakpoint at which collapsing should be applied. If not provided, collapsing is always applied */\n breakpoint?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Text for the expand trigger */\n showText?: string;\n /** Text for the collapse trigger */\n hideText?: string;\n /** Custom class name for the container */\n className?: string;\n /** Props to pass to the Text component */\n textProps?: Partial<TextProps>;\n /** Props to pass to the Accordion component */\n accordionProps?: Partial<AccordionProps>;\n /** Callback when expansion state changes */\n onToggle?: (expanded: boolean) => void;\n}\n\nexport const ExpandableText = ({ ref, ...props }: ExpandableTextProps) => {\n const {\n text,\n maxLines = 3,\n breakpoint,\n showText = \"Read more\",\n hideText = \"Read less\",\n className,\n textProps = {},\n accordionProps = {},\n onToggle,\n ...otherProps\n } = props;\n\n const [isExpanded, setIsExpanded] = useState(false);\n const [isCollapsed, setIsCollapsed] = useState(false);\n const textRef = useRef<HTMLDivElement>(null);\n const { down } = useBreakpoint();\n\n // Generate unique ID for accessibility\n const baseId = useId();\n const expandButtonId = `expandable-text-expand-${baseId}`;\n\n // Determine if content should be collapsible based on breakpoint\n const shouldCollapse = breakpoint ? down(breakpoint) : true;\n\n useEffect(() => {\n if (!shouldCollapse || !textRef.current) {\n setIsCollapsed(false);\n return;\n }\n\n // Check if text is actually collapsed by comparing scroll height with client height\n const element = textRef.current;\n const isOverflowing = element.scrollHeight > element.clientHeight;\n setIsCollapsed(isOverflowing);\n }, [text, shouldCollapse, maxLines]);\n\n // If breakpoint is specified and we're above it, show full text without collapsible UI\n if (breakpoint && !shouldCollapse) {\n return (\n <div ref={ref} className={className} {...otherProps}>\n <TextOrHTML text={text} textWrapper {...textProps} />\n </div>\n );\n }\n\n const handleAccordionChange = (expanded: boolean) => {\n setIsExpanded(expanded);\n onToggle?.(expanded);\n };\n\n const classes = classNames(\"mobius-expandable-text\", className);\n const textContainerClasses = classNames(\"mobius-expandable-text__content\", {\n \"mobius-expandable-text__content--collapsed\": !isExpanded,\n });\n\n // CSS custom property for dynamic line clamping\n const textContainerStyle = {\n \"--line-clamp\": maxLines,\n } as React.CSSProperties;\n\n return (\n <div\n ref={ref}\n className={classes}\n data-testid=\"expandable-text\"\n {...otherProps}\n >\n <div\n ref={textRef}\n className={textContainerClasses}\n style={textContainerStyle}\n data-testid=\"expandable-text-content\"\n aria-describedby={isCollapsed ? expandButtonId : undefined}\n >\n <TextOrHTML elementType=\"span\" textWrapper text={text} {...textProps} />\n </div>\n {isCollapsed && (\n <Accordion\n showText={showText}\n hideText={hideText}\n headerPosition=\"bottom\"\n onChange={handleAccordionChange}\n onClick={(e?: React.MouseEvent) => {\n e?.stopPropagation();\n }}\n id={expandButtonId}\n {...accordionProps}\n />\n )}\n </div>\n );\n};\n\nExpandableText.displayName = \"ExpandableText\";\n", "\"use client\";\n\nimport loadable from \"@loadable/component\";\nimport { TextField } from \"../TextField\";\nimport type { MaskedFieldProps } from \"./MaskedField\";\n\n/** Lazy-loads MaskedField (and react-imask) so consumers importing only TextField don't bundle react-imask. */\nconst LoadableMaskedField = loadable(() => import(\"./MaskedField\"), {\n resolveComponent: mod => mod.MaskedField,\n});\n\nexport function MaskedField(props: MaskedFieldProps) {\n const {\n mask: _mask,\n useMaskedValue: _useMaskedValue,\n \"data-testid\": _dataTestId,\n ref: forwardedRef,\n ...textFieldProps\n } = props;\n return (\n <LoadableMaskedField\n {...props}\n fallback={\n <TextField\n {...textFieldProps}\n ref={forwardedRef}\n type=\"text\"\n isDisabled\n isReadOnly\n />\n }\n />\n );\n}\n\nMaskedField.displayName = \"MaskedField\";\n\nexport type {\n MaskedFieldProps,\n MaskedFieldRef,\n MaskedFieldElementType,\n} from \"./MaskedField\";\n"],
5
- "mappings": "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",
6
- "names": ["classNames", "useState", "classNames", "jsx", "jsxs", "error", "classNames", "jsx", "error", "useState", "useRef", "useId", "useState", "useEffect", "classNames", "jsx", "jsxs", "useState", "useRef", "useId", "useEffect", "classNames", "classNames", "useEffect", "useId", "useRef", "useState", "jsx", "jsxs", "useState", "useRef", "useEffect", "classNames", "useId", "classNames", "useEffect", "useRef", "useState", "jsx", "error", "useState", "useRef", "classNames", "useEffect", "classNames", "useCallback", "useEffect", "useRef", "jsx", "useRef", "useCallback", "useEffect", "classNames", "classNames", "useRef", "useState", "jsx", "jsx", "useState", "classNames", "useRef", "classNames", "Children", "isValidElement", "useRef", "jsx", "jsxs", "useRef", "Children", "isValidElement", "props", "classNames", "classNames", "Children", "cloneElement", "isValidElement", "useCallback", "useEffect", "useId", "useRef", "useState", "jsx", "jsxs", "useState", "useRef", "useEffect", "useCallback", "classNames", "useId", "Children", "isValidElement", "cloneElement", "classNames", "useId", "jsx", "jsxs", "classNames", "useId", "classNames", "jsx", "jsxs", "classNames", "classNames", "useEffect", "useId", "useRef", "useState", "jsx", "jsxs", "useState", "useRef", "useId", "useEffect", "classNames", "jsx", "jsx", "jsxs", "classNames"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/components/Text/Text.tsx"],
4
- "sourcesContent": ["import type { ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./Text.css\";\n\nexport type TextElementType = HTMLHeadingElement | HTMLParagraphElement;\nexport type TextVariantType =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"body\"\n | \"small\"\n | \"legal\"\n | \"title\";\nexport type ElementType = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"p\" | \"span\";\nexport interface TextProps extends DOMProps, RefAttributes<TextElementType> {\n /** HTML element for the text */\n elementType?: ElementType;\n /** Specify font size override */\n variant?: TextVariantType;\n /** Specify compact line height override */\n spacing?: \"loose\" | \"tight\";\n /** Custom class name for setting specific CSS */\n className?: string;\n children: ReactNode;\n style?: React.CSSProperties;\n}\n\nconst getElementType = (\n variant: TextVariantType | undefined,\n elementType: ElementType | undefined,\n) => {\n if (variant) {\n return [\"h1\", \"h2\", \"h3\", \"h4\"].includes(variant) ? variant : \"p\";\n }\n return elementType || \"p\";\n};\n\nconst Text = ({ ref, elementType: Component = \"p\", ...props }: TextProps) => {\n // Remove non-DOM props from element\n const { variant, className, spacing, ...otherProps } = props;\n\n // If a variant is supplied, set the class name and element type\n const elementType = getElementType(variant, Component);\n const variantType = variant || elementType;\n const classes = classNames(\n \"mobius\",\n \"mobius-text\",\n { [`--is-${variantType}`]: variantType },\n { [`--has-line-height-${spacing}`]: spacing },\n className,\n );\n\n return <Component ref={ref} {...otherProps} className={classes} />;\n};\n\nText.displayName = \"Text\";\nexport { Text };\n"],
5
- "mappings": ";AACA,OAAO,gBAAgB;AAEvB,OAAO;AAmDE;AAzBT,IAAM,iBAAiB,CACrB,SACA,gBACG;AACH,MAAI,SAAS;AACX,WAAO,CAAC,MAAM,MAAM,MAAM,IAAI,EAAE,SAAS,OAAO,IAAI,UAAU;AAAA,EAChE;AACA,SAAO,eAAe;AACxB;AAEA,IAAM,OAAO,CAAC,EAAE,KAAK,aAAa,YAAY,KAAK,GAAG,MAAM,MAAiB;AAE3E,QAAM,EAAE,SAAS,WAAW,SAAS,GAAG,WAAW,IAAI;AAGvD,QAAM,cAAc,eAAe,SAAS,SAAS;AACrD,QAAM,cAAc,WAAW;AAC/B,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA,EAAE,CAAC,QAAQ,WAAW,EAAE,GAAG,YAAY;AAAA,IACvC,EAAE,CAAC,qBAAqB,OAAO,EAAE,GAAG,QAAQ;AAAA,IAC5C;AAAA,EACF;AAEA,SAAO,oBAAC,aAAU,KAAW,GAAG,YAAY,WAAW,SAAS;AAClE;AAEA,KAAK,cAAc;",
6
- "names": []
7
- }