@simplybusiness/mobius 10.2.0 → 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.
- package/CHANGELOG.md +15 -0
- package/dist/cjs/components/AddressLookup/AddressLookup.js +219 -162
- package/dist/cjs/components/AddressLookup/AddressLookup.js.map +4 -4
- package/dist/cjs/components/AddressLookup/index.js +219 -162
- package/dist/cjs/components/AddressLookup/index.js.map +4 -4
- package/dist/cjs/components/Alert/Alert.js +10 -7
- package/dist/cjs/components/Alert/Alert.js.map +2 -2
- package/dist/cjs/components/Alert/index.js +10 -7
- package/dist/cjs/components/Alert/index.js.map +2 -2
- package/dist/cjs/components/Box/Box.js +18 -3
- package/dist/cjs/components/Box/Box.js.map +3 -3
- package/dist/cjs/components/Box/index.js +18 -3
- package/dist/cjs/components/Box/index.js.map +3 -3
- package/dist/cjs/components/Breadcrumbs/BreadcrumbItem.js +18 -3
- package/dist/cjs/components/Breadcrumbs/BreadcrumbItem.js.map +3 -3
- package/dist/cjs/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/cjs/components/Breadcrumbs/index.js +18 -3
- package/dist/cjs/components/Breadcrumbs/index.js.map +3 -3
- package/dist/cjs/components/Checkbox/Checkbox.js +186 -129
- package/dist/cjs/components/Checkbox/Checkbox.js.map +4 -4
- package/dist/cjs/components/Checkbox/CheckboxGroup.js +191 -134
- package/dist/cjs/components/Checkbox/CheckboxGroup.js.map +4 -4
- package/dist/cjs/components/Checkbox/index.js +199 -142
- package/dist/cjs/components/Checkbox/index.js.map +4 -4
- package/dist/cjs/components/Combobox/Combobox.js +214 -157
- package/dist/cjs/components/Combobox/Combobox.js.map +4 -4
- package/dist/cjs/components/Combobox/index.js +214 -157
- package/dist/cjs/components/Combobox/index.js.map +4 -4
- package/dist/cjs/components/DateField/DateField.js +187 -130
- package/dist/cjs/components/DateField/DateField.js.map +4 -4
- package/dist/cjs/components/DateField/index.js +187 -130
- package/dist/cjs/components/DateField/index.js.map +4 -4
- package/dist/cjs/components/ErrorMessage/ErrorMessage.js +178 -121
- package/dist/cjs/components/ErrorMessage/ErrorMessage.js.map +4 -4
- package/dist/cjs/components/ErrorMessage/index.js +178 -121
- package/dist/cjs/components/ErrorMessage/index.js.map +4 -4
- package/dist/cjs/components/ExpandableText/ExpandableText.js +178 -121
- package/dist/cjs/components/ExpandableText/ExpandableText.js.map +4 -4
- package/dist/cjs/components/ExpandableText/index.js +178 -121
- package/dist/cjs/components/ExpandableText/index.js.map +4 -4
- package/dist/cjs/components/Grid/Grid.js +2 -2
- package/dist/cjs/components/Grid/Grid.js.map +2 -2
- package/dist/cjs/components/Grid/Item.js +3 -3
- package/dist/cjs/components/Grid/Item.js.map +2 -2
- package/dist/cjs/components/Grid/index.js +5 -5
- package/dist/cjs/components/Grid/index.js.map +2 -2
- package/dist/cjs/components/List/List.js +15 -7
- package/dist/cjs/components/List/List.js.map +2 -2
- package/dist/cjs/components/List/index.js +15 -7
- package/dist/cjs/components/List/index.js.map +2 -2
- package/dist/cjs/components/Logo/Logo.js.map +2 -2
- package/dist/cjs/components/Logo/index.js.map +2 -2
- package/dist/cjs/components/MaskedField/MaskedField.js +181 -124
- package/dist/cjs/components/MaskedField/MaskedField.js.map +4 -4
- package/dist/cjs/components/MaskedField/index.js +181 -124
- package/dist/cjs/components/MaskedField/index.js.map +4 -4
- package/dist/cjs/components/Modal/Header.js +38 -21
- package/dist/cjs/components/Modal/Header.js.map +3 -3
- package/dist/cjs/components/Modal/Modal.js +13 -3
- package/dist/cjs/components/Modal/Modal.js.map +2 -2
- package/dist/cjs/components/Modal/ModalContext.js +4 -1
- package/dist/cjs/components/Modal/ModalContext.js.map +2 -2
- package/dist/cjs/components/Modal/index.js +63 -39
- package/dist/cjs/components/Modal/index.js.map +3 -3
- package/dist/cjs/components/Modal/types.js.map +1 -1
- package/dist/cjs/components/Modal/useModal.js +6 -3
- package/dist/cjs/components/Modal/useModal.js.map +2 -2
- package/dist/cjs/components/NumberField/NumberField.js +181 -124
- package/dist/cjs/components/NumberField/NumberField.js.map +4 -4
- package/dist/cjs/components/NumberField/index.js +181 -124
- package/dist/cjs/components/NumberField/index.js.map +4 -4
- package/dist/cjs/components/PasswordField/PasswordField.js +181 -124
- package/dist/cjs/components/PasswordField/PasswordField.js.map +4 -4
- package/dist/cjs/components/PasswordField/ShowHideButton.js +178 -121
- package/dist/cjs/components/PasswordField/ShowHideButton.js.map +4 -4
- package/dist/cjs/components/PasswordField/index.js +181 -124
- package/dist/cjs/components/PasswordField/index.js.map +4 -4
- package/dist/cjs/components/Radio/Radio.js +178 -121
- package/dist/cjs/components/Radio/Radio.js.map +4 -4
- package/dist/cjs/components/Radio/RadioGroup.js +178 -121
- package/dist/cjs/components/Radio/RadioGroup.js.map +4 -4
- package/dist/cjs/components/Radio/index.js +178 -121
- package/dist/cjs/components/Radio/index.js.map +4 -4
- package/dist/cjs/components/SVG/SVG.js.map +2 -2
- package/dist/cjs/components/SVG/index.js.map +2 -2
- package/dist/cjs/components/Segment/Segment.js +2 -2
- package/dist/cjs/components/Segment/Segment.js.map +2 -2
- package/dist/cjs/components/Segment/index.js +2 -2
- package/dist/cjs/components/Segment/index.js.map +2 -2
- package/dist/cjs/components/Select/Select.js +178 -121
- package/dist/cjs/components/Select/Select.js.map +4 -4
- package/dist/cjs/components/Select/index.js +178 -121
- package/dist/cjs/components/Select/index.js.map +4 -4
- package/dist/cjs/components/Table/HeaderCell.js +2 -2
- package/dist/cjs/components/Table/HeaderCell.js.map +2 -2
- package/dist/cjs/components/Table/index.js +2 -2
- package/dist/cjs/components/Table/index.js.map +2 -2
- package/dist/cjs/components/Text/Text.js +10 -7
- package/dist/cjs/components/Text/Text.js.map +2 -2
- package/dist/cjs/components/Text/index.js +10 -7
- package/dist/cjs/components/Text/index.js.map +2 -2
- package/dist/cjs/components/TextArea/TextArea.js +178 -121
- package/dist/cjs/components/TextArea/TextArea.js.map +4 -4
- package/dist/cjs/components/TextArea/index.js +178 -121
- package/dist/cjs/components/TextArea/index.js.map +4 -4
- package/dist/cjs/components/TextField/TextField.js +181 -124
- package/dist/cjs/components/TextField/TextField.js.map +4 -4
- package/dist/cjs/components/TextField/index.js +181 -124
- package/dist/cjs/components/TextField/index.js.map +4 -4
- package/dist/cjs/components/TextOrHTML/TextOrHTML.js +10 -7
- package/dist/cjs/components/TextOrHTML/TextOrHTML.js.map +2 -2
- package/dist/cjs/components/TextOrHTML/index.js +10 -7
- package/dist/cjs/components/TextOrHTML/index.js.map +2 -2
- package/dist/cjs/components/index.js +205 -148
- package/dist/cjs/components/index.js.map +4 -4
- package/dist/cjs/index.js +205 -148
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/meta.json +844 -539
- package/dist/cjs/utils/filterUnsetValues.js +36 -0
- package/dist/cjs/utils/filterUnsetValues.js.map +7 -0
- package/dist/cjs/utils/index.js +13 -0
- package/dist/cjs/utils/index.js.map +3 -3
- package/dist/esm/{chunk-NYFCN7EA.js → chunk-6GGDGE7D.js} +4 -4
- package/dist/esm/{chunk-OUKMP3DO.js → chunk-7JT4DKQA.js} +2 -2
- package/dist/esm/chunk-CZWEMAKZ.js +16 -0
- package/dist/esm/chunk-CZWEMAKZ.js.map +7 -0
- package/dist/esm/{chunk-Q5YY6HPF.js → chunk-DZVBN6ZI.js} +5 -5
- package/dist/esm/{chunk-OC6ULO4M.js → chunk-EJLNC5X5.js} +2 -2
- package/dist/esm/{chunk-LVZ2T6AY.js → chunk-EZ4S7XVZ.js} +16 -8
- package/dist/esm/chunk-EZ4S7XVZ.js.map +7 -0
- package/dist/esm/chunk-FIAL4HTE.js +1 -0
- package/dist/esm/{chunk-YLL2DKVF.js → chunk-FQ6P6JB5.js} +3 -3
- package/dist/esm/chunk-FQ6P6JB5.js.map +7 -0
- package/dist/esm/{chunk-OZ2IUZIJ.js → chunk-HP2NRM7T.js} +2 -2
- package/dist/esm/{chunk-RR4UQSOZ.js → chunk-I6EUIFUJ.js} +11 -11
- package/dist/esm/{chunk-3IMYDZRT.js → chunk-JFDDW3IV.js} +1 -1
- package/dist/esm/chunk-JFDDW3IV.js.map +7 -0
- package/dist/esm/{chunk-4IB5ROL6.js → chunk-KXLTGNKF.js} +12 -5
- package/dist/esm/chunk-KXLTGNKF.js.map +7 -0
- package/dist/esm/{chunk-TL4OCKNP.js → chunk-LWRY3VIB.js} +2 -2
- package/dist/esm/chunk-MPB5F6QL.js +53 -0
- package/dist/esm/chunk-MPB5F6QL.js.map +7 -0
- package/dist/esm/{chunk-DNMS6KEY.js → chunk-PARKMZYZ.js} +4 -4
- package/dist/esm/{chunk-DNMS6KEY.js.map → chunk-PARKMZYZ.js.map} +2 -2
- package/dist/esm/chunk-Q5MIALGZ.js +15 -0
- package/dist/esm/{chunk-ZHX7Z5IU.js.map → chunk-Q5MIALGZ.js.map} +2 -2
- package/dist/esm/{chunk-N5WGQAHM.js → chunk-QWD72EVP.js} +4 -4
- package/dist/esm/{chunk-KLXMVFIR.js → chunk-TBKQA5ZF.js} +5 -2
- package/dist/esm/{chunk-KLXMVFIR.js.map → chunk-TBKQA5ZF.js.map} +2 -2
- package/dist/esm/{chunk-B243ELKZ.js → chunk-TJCUKTFX.js} +10 -4
- package/dist/esm/chunk-TJCUKTFX.js.map +7 -0
- package/dist/esm/{chunk-P5ZPHAQT.js → chunk-UCNWPF7R.js} +3 -3
- package/dist/esm/chunk-UCNWPF7R.js.map +7 -0
- package/dist/esm/{chunk-S37ULE57.js → chunk-VASDBM4Z.js} +1 -1
- package/dist/esm/{chunk-S37ULE57.js.map → chunk-VASDBM4Z.js.map} +2 -2
- package/dist/esm/{chunk-QRHDVVRK.js → chunk-VIDKIVA6.js} +2 -2
- package/dist/esm/{chunk-SDGIWQ3R.js → chunk-WP5OEMNG.js} +3 -3
- package/dist/esm/{chunk-SDGIWQ3R.js.map → chunk-WP5OEMNG.js.map} +2 -2
- package/dist/esm/{chunk-MLN5ELQR.js → chunk-WXRQIMMM.js} +1 -1
- package/dist/esm/chunk-WXRQIMMM.js.map +7 -0
- package/dist/esm/{chunk-O47IW7HD.js → chunk-YCE2KOB2.js} +5 -5
- package/dist/esm/{chunk-SNRPWCHL.js → chunk-ZS5MFZHD.js} +11 -8
- package/dist/esm/chunk-ZS5MFZHD.js.map +7 -0
- package/dist/esm/components/Accordion/Accordion.js +7 -6
- package/dist/esm/components/Accordion/AccordionLink.js +6 -5
- package/dist/esm/components/Accordion/AccordionList.js +8 -7
- package/dist/esm/components/Accordion/index.js +8 -7
- package/dist/esm/components/AddressLookup/AddressLookup.js +41 -40
- package/dist/esm/components/AddressLookup/__mocks__/LoqateAddressLookupService.js +2 -1
- package/dist/esm/components/AddressLookup/__mocks__/LoqateAddressLookupService.js.map +1 -1
- package/dist/esm/components/AddressLookup/index.js +41 -40
- package/dist/esm/components/Alert/Alert.js +4 -4
- package/dist/esm/components/Alert/index.js +4 -4
- package/dist/esm/components/Box/Box.js +3 -2
- package/dist/esm/components/Box/index.js +3 -2
- package/dist/esm/components/Breadcrumbs/BreadcrumbItem.js +4 -3
- package/dist/esm/components/Breadcrumbs/Breadcrumbs.js +1 -1
- package/dist/esm/components/Breadcrumbs/index.js +7 -6
- package/dist/esm/components/Checkbox/Checkbox.js +41 -40
- package/dist/esm/components/Checkbox/CheckboxGroup.js +41 -40
- package/dist/esm/components/Checkbox/index.js +41 -40
- package/dist/esm/components/Combobox/Combobox.js +41 -40
- package/dist/esm/components/Combobox/index.js +41 -40
- package/dist/esm/components/Container/Container.js +2 -1
- package/dist/esm/components/Container/index.js +2 -1
- package/dist/esm/components/DateField/DateField.js +41 -40
- package/dist/esm/components/DateField/index.js +41 -40
- package/dist/esm/components/Drawer/Drawer.js +4 -3
- package/dist/esm/components/Drawer/index.js +4 -3
- package/dist/esm/components/ErrorMessage/ErrorMessage.js +41 -40
- package/dist/esm/components/ErrorMessage/index.js +41 -40
- package/dist/esm/components/ExpandableText/ExpandableText.js +41 -40
- package/dist/esm/components/ExpandableText/index.js +41 -40
- package/dist/esm/components/Fieldset/Fieldset.js +2 -1
- package/dist/esm/components/Fieldset/index.js +2 -1
- package/dist/esm/components/Flex/Flex.js +2 -1
- package/dist/esm/components/Flex/index.js +2 -1
- package/dist/esm/components/Flex/propUtils.js +2 -1
- package/dist/esm/components/Grid/Grid.js +3 -2
- package/dist/esm/components/Grid/Item.js +5 -4
- package/dist/esm/components/Grid/index.js +7 -6
- package/dist/esm/components/List/List.js +1 -1
- package/dist/esm/components/List/index.js +1 -1
- package/dist/esm/components/Logo/Logo.js +1 -1
- package/dist/esm/components/Logo/index.js +1 -1
- package/dist/esm/components/MaskedField/MaskedField.js +41 -40
- package/dist/esm/components/MaskedField/MaskedField.js.map +1 -1
- package/dist/esm/components/MaskedField/index.js +41 -40
- package/dist/esm/components/Modal/Header.js +3 -3
- package/dist/esm/components/Modal/Modal.js +6 -5
- package/dist/esm/components/Modal/ModalContext.js +1 -1
- package/dist/esm/components/Modal/index.js +10 -9
- package/dist/esm/components/Modal/useModal.js +2 -2
- package/dist/esm/components/NumberField/NumberField.js +41 -40
- package/dist/esm/components/NumberField/index.js +41 -40
- package/dist/esm/components/PasswordField/PasswordField.js +41 -40
- package/dist/esm/components/PasswordField/ShowHideButton.js +41 -40
- package/dist/esm/components/PasswordField/index.js +41 -40
- package/dist/esm/components/Radio/Radio.js +41 -40
- package/dist/esm/components/Radio/RadioGroup.js +41 -40
- package/dist/esm/components/Radio/index.js +41 -40
- package/dist/esm/components/SVG/SVG.js +1 -1
- package/dist/esm/components/SVG/index.js +1 -1
- package/dist/esm/components/Segment/Segment.js +1 -1
- package/dist/esm/components/Segment/index.js +1 -1
- package/dist/esm/components/Select/Select.js +41 -40
- package/dist/esm/components/Select/index.js +41 -40
- package/dist/esm/components/Slider/Slider.js +4 -3
- package/dist/esm/components/Slider/index.js +4 -3
- package/dist/esm/components/Table/HeaderCell.js +1 -1
- package/dist/esm/components/Table/index.js +2 -2
- package/dist/esm/components/Text/Text.js +1 -1
- package/dist/esm/components/Text/index.js +1 -1
- package/dist/esm/components/TextArea/TextArea.js +41 -40
- package/dist/esm/components/TextArea/index.js +41 -40
- package/dist/esm/components/TextField/TextField.js +41 -40
- package/dist/esm/components/TextField/index.js +41 -40
- package/dist/esm/components/TextOrHTML/TextOrHTML.js +2 -2
- package/dist/esm/components/TextOrHTML/index.js +2 -2
- package/dist/esm/components/Title/Title.js +2 -1
- package/dist/esm/components/Title/index.js +2 -1
- package/dist/esm/components/Toast/index.js +3 -3
- package/dist/esm/components/Trust/Trust.js +2 -1
- package/dist/esm/components/Trust/index.js +2 -1
- package/dist/esm/components/index.js +54 -53
- package/dist/esm/hooks/index.js +6 -5
- package/dist/esm/hooks/useDialog/index.js +2 -1
- package/dist/esm/hooks/useDialog/useDialog.js +2 -1
- package/dist/esm/hooks/useDialogPolyfill/index.js +2 -1
- package/dist/esm/hooks/useDialogPolyfill/useDialogPolyfill.js +2 -1
- package/dist/esm/index.js +56 -55
- package/dist/esm/meta.json +5690 -5359
- package/dist/esm/utils/filterUnsetValues.js +8 -0
- package/dist/esm/utils/filterUnsetValues.js.map +7 -0
- package/dist/esm/utils/index.js +5 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/components/Breadcrumbs/Breadcrumbs.d.ts +1 -1
- package/dist/types/components/Grid/Grid.d.ts +1 -1
- package/dist/types/components/Grid/Item.d.ts +1 -1
- package/dist/types/components/List/List.d.ts +1 -1
- package/dist/types/components/Logo/Logo.d.ts +8 -0
- package/dist/types/components/Modal/types.d.ts +2 -0
- package/dist/types/components/Modal/useModal.d.ts +2 -0
- package/dist/types/components/SVG/SVG.d.ts +4 -0
- package/dist/types/components/Segment/Segment.d.ts +4 -3
- package/dist/types/components/Table/HeaderCell.d.ts +2 -1
- package/dist/types/components/Text/Text.d.ts +1 -1
- package/dist/types/utils/filterUnsetValues.d.ts +6 -0
- package/dist/types/utils/index.d.ts +1 -0
- package/package.json +4 -4
- package/src/components/Accordion/Accordion.test.tsx +7 -0
- package/src/components/Box/Box.test.tsx +24 -0
- package/src/components/Box/Box.tsx +11 -3
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +130 -0
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +1 -1
- package/src/components/Button/Button.test.tsx +77 -0
- package/src/components/Container/Container.test.tsx +19 -0
- package/src/components/Divider/Divider.test.tsx +18 -0
- package/src/components/Flex/Flex.test.tsx +7 -0
- package/src/components/Grid/Grid.test.tsx +30 -0
- package/src/components/Grid/Grid.tsx +2 -2
- package/src/components/Grid/Item.tsx +3 -3
- package/src/components/Icon/Icon.test.tsx +33 -0
- package/src/components/Image/Image.test.tsx +7 -0
- package/src/components/Label/Label.test.tsx +7 -0
- package/src/components/Link/Link.test.tsx +44 -0
- package/src/components/List/List.test.tsx +11 -0
- package/src/components/List/List.tsx +6 -2
- package/src/components/Logo/Logo.test.tsx +36 -0
- package/src/components/Logo/Logo.tsx +8 -0
- package/src/components/Modal/Header.tsx +13 -2
- package/src/components/Modal/Modal.test.tsx +19 -1
- package/src/components/Modal/Modal.tsx +11 -2
- package/src/components/Modal/ModalContext.tsx +2 -0
- package/src/components/Modal/types.ts +2 -0
- package/src/components/Modal/useModal.ts +2 -2
- package/src/components/Option/Option.test.tsx +67 -0
- package/src/components/Progress/Progress.test.tsx +7 -0
- package/src/components/SVG/SVG.test.tsx +40 -0
- package/src/components/SVG/SVG.tsx +4 -0
- package/src/components/Segment/Segment.test.tsx +72 -0
- package/src/components/Segment/Segment.tsx +7 -4
- package/src/components/Stack/Stack.test.tsx +41 -1
- package/src/components/Table/HeaderCell.tsx +3 -2
- package/src/components/Table/Table.test.tsx +180 -0
- package/src/components/Text/Text.test.tsx +80 -0
- package/src/components/Text/Text.tsx +13 -8
- package/src/components/TextAreaInput/TextAreaInput.test.tsx +51 -0
- package/src/components/Trust/Trust.test.tsx +52 -1
- package/src/components/VisuallyHidden/VisuallyHidden.test.tsx +66 -0
- package/src/utils/filterUndefinedProps.test.ts +11 -0
- package/src/utils/filterUnsetValues.test.ts +16 -0
- package/src/utils/filterUnsetValues.ts +17 -0
- package/src/utils/index.ts +1 -0
- package/dist/esm/chunk-3IMYDZRT.js.map +0 -7
- package/dist/esm/chunk-4IB5ROL6.js.map +0 -7
- package/dist/esm/chunk-B243ELKZ.js.map +0 -7
- package/dist/esm/chunk-DSYPZETD.js +0 -1
- package/dist/esm/chunk-LVZ2T6AY.js.map +0 -7
- package/dist/esm/chunk-MLN5ELQR.js.map +0 -7
- package/dist/esm/chunk-P5ZPHAQT.js.map +0 -7
- package/dist/esm/chunk-SNRPWCHL.js.map +0 -7
- package/dist/esm/chunk-XNVA7FCA.js +0 -39
- package/dist/esm/chunk-XNVA7FCA.js.map +0 -7
- package/dist/esm/chunk-YLL2DKVF.js.map +0 -7
- package/dist/esm/chunk-ZHX7Z5IU.js +0 -15
- /package/dist/esm/{chunk-NYFCN7EA.js.map → chunk-6GGDGE7D.js.map} +0 -0
- /package/dist/esm/{chunk-OUKMP3DO.js.map → chunk-7JT4DKQA.js.map} +0 -0
- /package/dist/esm/{chunk-Q5YY6HPF.js.map → chunk-DZVBN6ZI.js.map} +0 -0
- /package/dist/esm/{chunk-OC6ULO4M.js.map → chunk-EJLNC5X5.js.map} +0 -0
- /package/dist/esm/{chunk-DSYPZETD.js.map → chunk-FIAL4HTE.js.map} +0 -0
- /package/dist/esm/{chunk-OZ2IUZIJ.js.map → chunk-HP2NRM7T.js.map} +0 -0
- /package/dist/esm/{chunk-RR4UQSOZ.js.map → chunk-I6EUIFUJ.js.map} +0 -0
- /package/dist/esm/{chunk-TL4OCKNP.js.map → chunk-LWRY3VIB.js.map} +0 -0
- /package/dist/esm/{chunk-N5WGQAHM.js.map → chunk-QWD72EVP.js.map} +0 -0
- /package/dist/esm/{chunk-QRHDVVRK.js.map → chunk-VIDKIVA6.js.map} +0 -0
- /package/dist/esm/{chunk-O47IW7HD.js.map → chunk-YCE2KOB2.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RefAttributes, ReactNode } from "react";
|
|
2
2
|
import "./Breadcrumbs.css";
|
|
3
|
-
export type BreadcrumbsElementType =
|
|
3
|
+
export type BreadcrumbsElementType = HTMLElement;
|
|
4
4
|
export interface BreadcrumbsProps extends RefAttributes<BreadcrumbsElementType> {
|
|
5
5
|
/** Custom class name for setting specific CSS */
|
|
6
6
|
className?: string;
|
|
@@ -25,7 +25,7 @@ export interface GridProps extends RefAttributes<GridElementType>, DOMProps {
|
|
|
25
25
|
style?: React.CSSProperties;
|
|
26
26
|
}
|
|
27
27
|
declare const Grid: {
|
|
28
|
-
({ ref
|
|
28
|
+
({ ref, ...props }: GridProps): import("react/jsx-runtime").JSX.Element;
|
|
29
29
|
displayName: string;
|
|
30
30
|
};
|
|
31
31
|
export { Grid };
|
|
@@ -25,7 +25,7 @@ export interface GridItemProps extends RefAttributes<GridItemElementType>, DOMPr
|
|
|
25
25
|
export declare const getBreakpointMap: (config: Partial<Record<SizeType, number>>) => Record<string, number | undefined>;
|
|
26
26
|
export declare const DEFAULT_SPAN = 12;
|
|
27
27
|
declare const GridItem: {
|
|
28
|
-
({ ref
|
|
28
|
+
({ ref, ...props }: GridItemProps): import("react/jsx-runtime").JSX.Element;
|
|
29
29
|
displayName: string;
|
|
30
30
|
};
|
|
31
31
|
export { GridItem };
|
|
@@ -10,7 +10,7 @@ export interface ListProps extends DOMProps {
|
|
|
10
10
|
liststyletype?: ListStyleType;
|
|
11
11
|
icon?: ReactNode;
|
|
12
12
|
className?: string;
|
|
13
|
-
ref?: Ref<
|
|
13
|
+
ref?: Ref<HTMLElement>;
|
|
14
14
|
}
|
|
15
15
|
declare const List: {
|
|
16
16
|
({ ref, ...props }: ListProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -8,6 +8,14 @@ export interface LogoProps extends DOMProps, RefAttributes<LogoElementType> {
|
|
|
8
8
|
width?: string;
|
|
9
9
|
/** Custom height. When defined along with width, it will scale proportionally */
|
|
10
10
|
height?: string;
|
|
11
|
+
/** ARIA role for the SVG element */
|
|
12
|
+
role?: React.AriaRole;
|
|
13
|
+
/** Accessible label for the logo */
|
|
14
|
+
"aria-label"?: string;
|
|
15
|
+
/** Whether the logo is hidden from screen readers */
|
|
16
|
+
"aria-hidden"?: boolean | "true" | "false";
|
|
17
|
+
/** ID of an element that labels the logo */
|
|
18
|
+
"aria-labelledby"?: string;
|
|
11
19
|
}
|
|
12
20
|
export declare const Logo: {
|
|
13
21
|
({ ref, ...props }: LogoProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -13,4 +13,6 @@ export interface ModalProps extends RefAttributes<ModalElementType> {
|
|
|
13
13
|
export type ModalContextProps = {
|
|
14
14
|
onClose: (event?: SyntheticEvent<HTMLElement, Event>) => void;
|
|
15
15
|
closeLabel: string | undefined;
|
|
16
|
+
titleId: string | undefined;
|
|
17
|
+
setTitleId: (id: string) => void;
|
|
16
18
|
};
|
|
@@ -4,6 +4,10 @@ export interface SVGProps extends DOMProps, RefAttributes<SVGSVGElement> {
|
|
|
4
4
|
children: React.ReactElement<React.SVGProps<SVGSVGElement>>;
|
|
5
5
|
className?: string;
|
|
6
6
|
style?: React.CSSProperties;
|
|
7
|
+
role?: React.AriaRole;
|
|
8
|
+
"aria-label"?: string;
|
|
9
|
+
"aria-hidden"?: boolean | "true" | "false";
|
|
10
|
+
"aria-labelledby"?: string;
|
|
7
11
|
}
|
|
8
12
|
declare const SVG: {
|
|
9
13
|
({ ref, ...props }: SVGProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { ReactNode } from "react";
|
|
1
|
+
import type { ReactNode, RefAttributes } from "react";
|
|
2
2
|
import type { DOMProps } from "../../types/dom";
|
|
3
3
|
import "./Segment.css";
|
|
4
|
-
export
|
|
4
|
+
export type SegmentElementType = HTMLDivElement;
|
|
5
|
+
export interface SegmentProps extends DOMProps, RefAttributes<SegmentElementType> {
|
|
5
6
|
className?: string;
|
|
6
7
|
heading?: string;
|
|
7
8
|
/** Background colour for Segment */
|
|
@@ -11,7 +12,7 @@ export interface SegmentProps extends DOMProps {
|
|
|
11
12
|
children?: ReactNode;
|
|
12
13
|
}
|
|
13
14
|
declare const Segment: {
|
|
14
|
-
(props: SegmentProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
({ ref, ...props }: SegmentProps): import("react/jsx-runtime").JSX.Element;
|
|
15
16
|
displayName: string;
|
|
16
17
|
};
|
|
17
18
|
export { Segment };
|
|
@@ -4,10 +4,11 @@ export interface HeaderCellProps extends RefAttributes<HTMLTableCellElement> {
|
|
|
4
4
|
className?: string;
|
|
5
5
|
colSpan?: number;
|
|
6
6
|
rowSpan?: number;
|
|
7
|
+
scope?: "col" | "row" | "colgroup" | "rowgroup";
|
|
7
8
|
}
|
|
8
9
|
export type HeaderCellRef = Ref<HTMLTableCellElement>;
|
|
9
10
|
declare const HeaderCell: {
|
|
10
|
-
({ ref, ...props }: HeaderCellProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
({ ref, scope, ...props }: HeaderCellProps): import("react/jsx-runtime").JSX.Element;
|
|
11
12
|
displayName: string;
|
|
12
13
|
};
|
|
13
14
|
export { HeaderCell };
|
|
@@ -17,7 +17,7 @@ export interface TextProps extends DOMProps, RefAttributes<TextElementType> {
|
|
|
17
17
|
style?: React.CSSProperties;
|
|
18
18
|
}
|
|
19
19
|
declare const Text: {
|
|
20
|
-
({ ref, elementType
|
|
20
|
+
({ ref, elementType, ...props }: TextProps): import("react/jsx-runtime").JSX.Element;
|
|
21
21
|
displayName: string;
|
|
22
22
|
};
|
|
23
23
|
export { Text };
|
|
@@ -0,0 +1,6 @@
|
|
|
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 declare const filterUnsetValues: (props: Record<string, unknown>) => Record<string, unknown>;
|
|
@@ -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";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplybusiness/mobius",
|
|
3
3
|
"license": "UNLICENSED",
|
|
4
|
-
"version": "10.
|
|
4
|
+
"version": "10.3.0",
|
|
5
5
|
"description": "Core library of Mobius react components",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -68,8 +68,8 @@
|
|
|
68
68
|
"@eslint/js": "^9.39.3",
|
|
69
69
|
"@react-types/progress": "^3.5.18",
|
|
70
70
|
"@simplybusiness/build-scripts": "^3.0.0",
|
|
71
|
-
"@simplybusiness/eslint-config": "^2.0.
|
|
72
|
-
"@simplybusiness/eslint-plugin": "^1.3.
|
|
71
|
+
"@simplybusiness/eslint-config": "^2.0.5",
|
|
72
|
+
"@simplybusiness/eslint-plugin": "^1.3.1",
|
|
73
73
|
"@testing-library/dom": "^10.4.1",
|
|
74
74
|
"@testing-library/jest-dom": "6.9.1",
|
|
75
75
|
"@testing-library/react": "^16.3.2",
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
"dependencies": {
|
|
99
99
|
"@floating-ui/react": "^0.27.19",
|
|
100
100
|
"@loadable/component": "^5.16.7",
|
|
101
|
-
"@simplybusiness/icons": "^5.0.
|
|
101
|
+
"@simplybusiness/icons": "^5.0.4",
|
|
102
102
|
"@simplybusiness/mobius-hooks": "^0.1.1",
|
|
103
103
|
"classnames": "^2.5.1",
|
|
104
104
|
"dialog-polyfill": "^0.5.6",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createRef } from "react";
|
|
1
2
|
import { fireEvent, render, screen } from "@testing-library/react";
|
|
2
3
|
import userEvent from "@testing-library/user-event";
|
|
3
4
|
import type { AccordionLinkElementType } from "./AccordionLink";
|
|
@@ -408,4 +409,10 @@ describe("Accordion", () => {
|
|
|
408
409
|
expect(screen.queryByText(customShow)).not.toBeInTheDocument();
|
|
409
410
|
});
|
|
410
411
|
});
|
|
412
|
+
|
|
413
|
+
it("forwards ref", () => {
|
|
414
|
+
const ref = createRef<HTMLDivElement>();
|
|
415
|
+
render(<Accordion ref={ref}>Text</Accordion>);
|
|
416
|
+
expect(ref.current).toBeInstanceOf(HTMLDivElement);
|
|
417
|
+
});
|
|
411
418
|
});
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { createRef } from "react";
|
|
1
2
|
import { render } from "@testing-library/react";
|
|
3
|
+
import type { CSSProperties } from "react";
|
|
2
4
|
import { Box } from ".";
|
|
3
5
|
|
|
4
6
|
const CLASS_NAME = "mobius-box";
|
|
@@ -216,5 +218,27 @@ describe("Box", () => {
|
|
|
216
218
|
|
|
217
219
|
expect(elementStyles.padding).toEqual("100px");
|
|
218
220
|
});
|
|
221
|
+
|
|
222
|
+
it("does not remove prop padding when style padding is undefined", () => {
|
|
223
|
+
const { container } = render(
|
|
224
|
+
<Box padding={50} style={{ padding: undefined } as CSSProperties} />,
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
expect(container.firstChild).toHaveStyle({ padding: "50px" });
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
it("does not remove prop padding when style padding is an empty string", () => {
|
|
231
|
+
const { container } = render(
|
|
232
|
+
<Box padding={50} style={{ padding: "" }} />,
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
expect(container.firstChild).toHaveStyle({ padding: "50px" });
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
it("forwards ref", () => {
|
|
240
|
+
const ref = createRef<HTMLDivElement>();
|
|
241
|
+
render(<Box ref={ref}>Text</Box>);
|
|
242
|
+
expect(ref.current).toBeInstanceOf(HTMLDivElement);
|
|
219
243
|
});
|
|
220
244
|
});
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import classNames from "classnames/dedupe";
|
|
2
2
|
import type { BoxProps } from "./types";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
filterUndefinedProps,
|
|
5
|
+
filterUnsetValues,
|
|
6
|
+
getSpacingValue,
|
|
7
|
+
} from "../../utils";
|
|
4
8
|
import "./Box.css";
|
|
5
9
|
|
|
6
10
|
const Box = ({ ref, ...props }: BoxProps) => {
|
|
@@ -31,7 +35,7 @@ const Box = ({ ref, ...props }: BoxProps) => {
|
|
|
31
35
|
|
|
32
36
|
const classes = classNames("mobius", "mobius-box", otherProps.className);
|
|
33
37
|
|
|
34
|
-
const
|
|
38
|
+
const fromProps = filterUndefinedProps({
|
|
35
39
|
padding: getSpacingValue(padding),
|
|
36
40
|
paddingInline: getSpacingValue(paddingInline || paddingX),
|
|
37
41
|
paddingBlock: getSpacingValue(paddingBlock || paddingY),
|
|
@@ -45,7 +49,11 @@ const Box = ({ ref, ...props }: BoxProps) => {
|
|
|
45
49
|
maxHeight,
|
|
46
50
|
width,
|
|
47
51
|
height,
|
|
48
|
-
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const styleProps = filterUndefinedProps({
|
|
55
|
+
...fromProps,
|
|
56
|
+
...(style ? filterUnsetValues(style as Record<string, unknown>) : {}),
|
|
49
57
|
});
|
|
50
58
|
|
|
51
59
|
return (
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createRef } from "react";
|
|
1
2
|
import { render, screen } from "@testing-library/react";
|
|
2
3
|
import { Breadcrumbs, BreadcrumbItem } from ".";
|
|
3
4
|
import { Link } from "../Link";
|
|
@@ -93,4 +94,133 @@ describe("Breadcrumbs", () => {
|
|
|
93
94
|
);
|
|
94
95
|
});
|
|
95
96
|
});
|
|
97
|
+
|
|
98
|
+
describe("semantic HTML and ARIA", () => {
|
|
99
|
+
it("renders a <nav> element with aria-label", () => {
|
|
100
|
+
render(
|
|
101
|
+
<Breadcrumbs data-testid="nav">
|
|
102
|
+
<BreadcrumbItem>Home</BreadcrumbItem>
|
|
103
|
+
<BreadcrumbItem>Current</BreadcrumbItem>
|
|
104
|
+
</Breadcrumbs>,
|
|
105
|
+
);
|
|
106
|
+
const nav = screen.getByTestId("nav");
|
|
107
|
+
expect(nav.nodeName).toBe("NAV");
|
|
108
|
+
expect(nav).toHaveAttribute("aria-label", "Breadcrumbs");
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("supports custom aria-label on the nav element", () => {
|
|
112
|
+
render(
|
|
113
|
+
<Breadcrumbs data-testid="nav" aria-label="Page navigation">
|
|
114
|
+
<BreadcrumbItem>Home</BreadcrumbItem>
|
|
115
|
+
<BreadcrumbItem>Current</BreadcrumbItem>
|
|
116
|
+
</Breadcrumbs>,
|
|
117
|
+
);
|
|
118
|
+
expect(screen.getByTestId("nav")).toHaveAttribute(
|
|
119
|
+
"aria-label",
|
|
120
|
+
"Page navigation",
|
|
121
|
+
);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it("contains a <ul> list inside the nav", () => {
|
|
125
|
+
render(
|
|
126
|
+
<Breadcrumbs data-testid="nav">
|
|
127
|
+
<BreadcrumbItem>Home</BreadcrumbItem>
|
|
128
|
+
<BreadcrumbItem>Current</BreadcrumbItem>
|
|
129
|
+
</Breadcrumbs>,
|
|
130
|
+
);
|
|
131
|
+
expect(screen.getByRole("list")).toBeInTheDocument();
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it("renders each BreadcrumbItem as a <li>", () => {
|
|
135
|
+
render(
|
|
136
|
+
<Breadcrumbs>
|
|
137
|
+
<BreadcrumbItem>Home</BreadcrumbItem>
|
|
138
|
+
<BreadcrumbItem>About</BreadcrumbItem>
|
|
139
|
+
<BreadcrumbItem>Current</BreadcrumbItem>
|
|
140
|
+
</Breadcrumbs>,
|
|
141
|
+
);
|
|
142
|
+
expect(screen.getAllByRole("listitem")).toHaveLength(3);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it("sets aria-current on the last (current) item", () => {
|
|
146
|
+
render(
|
|
147
|
+
<Breadcrumbs>
|
|
148
|
+
<BreadcrumbItem>
|
|
149
|
+
<Link href="/home">Home</Link>
|
|
150
|
+
</BreadcrumbItem>
|
|
151
|
+
<BreadcrumbItem>Current page</BreadcrumbItem>
|
|
152
|
+
</Breadcrumbs>,
|
|
153
|
+
);
|
|
154
|
+
// The last item gets isCurrent=true automatically, which sets aria-current="page"
|
|
155
|
+
const currentItem = screen.getByText("Current page");
|
|
156
|
+
expect(currentItem).toHaveAttribute("aria-current", "page");
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it("does not set aria-current on non-current items", () => {
|
|
160
|
+
render(
|
|
161
|
+
<Breadcrumbs>
|
|
162
|
+
<BreadcrumbItem>
|
|
163
|
+
<Link href="/home" data-testid="home-link">
|
|
164
|
+
Home
|
|
165
|
+
</Link>
|
|
166
|
+
</BreadcrumbItem>
|
|
167
|
+
<BreadcrumbItem>Current page</BreadcrumbItem>
|
|
168
|
+
</Breadcrumbs>,
|
|
169
|
+
);
|
|
170
|
+
expect(screen.getByTestId("home-link")).not.toHaveAttribute(
|
|
171
|
+
"aria-current",
|
|
172
|
+
);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it("sets aria-disabled on a disabled item", () => {
|
|
176
|
+
render(
|
|
177
|
+
<Breadcrumbs>
|
|
178
|
+
<BreadcrumbItem isDisabled>Disabled item</BreadcrumbItem>
|
|
179
|
+
<BreadcrumbItem>Current</BreadcrumbItem>
|
|
180
|
+
</Breadcrumbs>,
|
|
181
|
+
);
|
|
182
|
+
expect(screen.getByText("Disabled item")).toHaveAttribute(
|
|
183
|
+
"aria-disabled",
|
|
184
|
+
"true",
|
|
185
|
+
);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it("sets aria-disabled on the current (last) item", () => {
|
|
189
|
+
render(
|
|
190
|
+
<Breadcrumbs>
|
|
191
|
+
<BreadcrumbItem>
|
|
192
|
+
<Link href="/home">Home</Link>
|
|
193
|
+
</BreadcrumbItem>
|
|
194
|
+
<BreadcrumbItem>Current page</BreadcrumbItem>
|
|
195
|
+
</Breadcrumbs>,
|
|
196
|
+
);
|
|
197
|
+
// isCurrent=true causes aria-disabled to be true (current page is not navigable)
|
|
198
|
+
expect(screen.getByText("Current page")).toHaveAttribute(
|
|
199
|
+
"aria-disabled",
|
|
200
|
+
"true",
|
|
201
|
+
);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
it("hides the separator from assistive technology", () => {
|
|
205
|
+
render(
|
|
206
|
+
<Breadcrumbs>
|
|
207
|
+
<BreadcrumbItem>
|
|
208
|
+
<Link href="/home">Home</Link>
|
|
209
|
+
</BreadcrumbItem>
|
|
210
|
+
<BreadcrumbItem>Current</BreadcrumbItem>
|
|
211
|
+
</Breadcrumbs>,
|
|
212
|
+
);
|
|
213
|
+
expect(screen.getByText(">")).toHaveAttribute("aria-hidden", "true");
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
it("forwards ref", () => {
|
|
218
|
+
const ref = createRef<HTMLUListElement>();
|
|
219
|
+
render(
|
|
220
|
+
<Breadcrumbs ref={ref}>
|
|
221
|
+
<BreadcrumbItem>Home</BreadcrumbItem>
|
|
222
|
+
</Breadcrumbs>,
|
|
223
|
+
);
|
|
224
|
+
expect(ref.current).toBeInstanceOf(HTMLElement);
|
|
225
|
+
});
|
|
96
226
|
});
|
|
@@ -5,7 +5,7 @@ import { Children, cloneElement } from "react";
|
|
|
5
5
|
import classNames from "classnames/dedupe";
|
|
6
6
|
import "./Breadcrumbs.css";
|
|
7
7
|
|
|
8
|
-
export type BreadcrumbsElementType =
|
|
8
|
+
export type BreadcrumbsElementType = HTMLElement;
|
|
9
9
|
|
|
10
10
|
export interface BreadcrumbsProps extends RefAttributes<BreadcrumbsElementType> {
|
|
11
11
|
/** Custom class name for setting specific CSS */
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createRef } from "react";
|
|
1
2
|
import { render, screen } from "@testing-library/react";
|
|
2
3
|
import userEvent from "@testing-library/user-event";
|
|
3
4
|
import { chevronDown } from "@simplybusiness/icons";
|
|
@@ -74,6 +75,61 @@ describe("Button", () => {
|
|
|
74
75
|
});
|
|
75
76
|
});
|
|
76
77
|
|
|
78
|
+
describe("keyboard interactions", () => {
|
|
79
|
+
it("activates on Enter key", async () => {
|
|
80
|
+
const onPress = vi.fn();
|
|
81
|
+
render(<Button onPress={onPress}>Click</Button>);
|
|
82
|
+
await userEvent.tab();
|
|
83
|
+
await userEvent.keyboard("[Enter]");
|
|
84
|
+
expect(onPress).toHaveBeenCalled();
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it("activates on Space key", async () => {
|
|
88
|
+
const onPress = vi.fn();
|
|
89
|
+
render(<Button onPress={onPress}>Click</Button>);
|
|
90
|
+
await userEvent.tab();
|
|
91
|
+
await userEvent.keyboard("[Space]");
|
|
92
|
+
expect(onPress).toHaveBeenCalled();
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
describe("when disabled", () => {
|
|
97
|
+
it("does not fire onPress", async () => {
|
|
98
|
+
const onPress = vi.fn();
|
|
99
|
+
render(
|
|
100
|
+
<Button onPress={onPress} isDisabled>
|
|
101
|
+
Click
|
|
102
|
+
</Button>,
|
|
103
|
+
);
|
|
104
|
+
await userEvent.click(screen.getByRole("button"));
|
|
105
|
+
expect(onPress).not.toHaveBeenCalled();
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it("does not fire onClick", async () => {
|
|
109
|
+
const onClick = vi.fn();
|
|
110
|
+
render(
|
|
111
|
+
<Button onClick={onClick} isDisabled>
|
|
112
|
+
Click
|
|
113
|
+
</Button>,
|
|
114
|
+
);
|
|
115
|
+
await userEvent.click(screen.getByRole("button"));
|
|
116
|
+
expect(onClick).not.toHaveBeenCalled();
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it("has aria-disabled attribute", () => {
|
|
120
|
+
render(<Button isDisabled>Click</Button>);
|
|
121
|
+
expect(screen.getByRole("button")).toHaveAttribute(
|
|
122
|
+
"aria-disabled",
|
|
123
|
+
"true",
|
|
124
|
+
);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it("is not focusable", () => {
|
|
128
|
+
render(<Button isDisabled>Click</Button>);
|
|
129
|
+
expect(screen.getByRole("button")).toHaveAttribute("tabIndex", "-1");
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
77
133
|
describe("uses correct class names", () => {
|
|
78
134
|
it("uses Mobius class", () => {
|
|
79
135
|
render(<Button />);
|
|
@@ -106,5 +162,26 @@ describe("Button", () => {
|
|
|
106
162
|
|
|
107
163
|
expect(button).toHaveClass("--variant-link");
|
|
108
164
|
});
|
|
165
|
+
|
|
166
|
+
it.each(["sm", "md", "lg"] as const)("applies --size-%s class", size => {
|
|
167
|
+
render(<Button size={size} />);
|
|
168
|
+
expect(screen.getByRole("button")).toHaveClass(`--size-${size}`);
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it("applies --is-loading class when isLoading is true", () => {
|
|
172
|
+
render(<Button isLoading>Loading</Button>);
|
|
173
|
+
expect(screen.getByRole("button")).toHaveClass("--is-loading");
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it("applies --is-success class when isSuccess is true", () => {
|
|
177
|
+
render(<Button isSuccess>Done</Button>);
|
|
178
|
+
expect(screen.getByRole("button")).toHaveClass("--is-success");
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
it("forwards ref", () => {
|
|
183
|
+
const ref = createRef<HTMLButtonElement>();
|
|
184
|
+
render(<Button ref={ref}>Text</Button>);
|
|
185
|
+
expect(ref.current).toBeInstanceOf(HTMLButtonElement);
|
|
109
186
|
});
|
|
110
187
|
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createRef } from "react";
|
|
1
2
|
import { render, screen } from "@testing-library/react";
|
|
2
3
|
import { Container } from ".";
|
|
3
4
|
|
|
@@ -51,5 +52,23 @@ describe("Container", () => {
|
|
|
51
52
|
expect(screen.getByTestId("test")).toHaveClass("my-class");
|
|
52
53
|
expect(screen.getByTestId("test")).toHaveClass(CLASS_NAME);
|
|
53
54
|
});
|
|
55
|
+
|
|
56
|
+
it.each(["xxs", "xs", "sm", "md", "lg", "xl", "xxl"] as const)(
|
|
57
|
+
"applies --is-%s class",
|
|
58
|
+
size => {
|
|
59
|
+
render(
|
|
60
|
+
<Container size={size} data-testid="test">
|
|
61
|
+
Sample text
|
|
62
|
+
</Container>,
|
|
63
|
+
);
|
|
64
|
+
expect(screen.getByTestId("test")).toHaveClass(`--is-${size}`);
|
|
65
|
+
},
|
|
66
|
+
);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it("forwards ref", () => {
|
|
70
|
+
const ref = createRef<HTMLDivElement>();
|
|
71
|
+
render(<Container ref={ref}>Text</Container>);
|
|
72
|
+
expect(ref.current).toBeInstanceOf(HTMLDivElement);
|
|
54
73
|
});
|
|
55
74
|
});
|
|
@@ -30,4 +30,22 @@ describe("Divider", () => {
|
|
|
30
30
|
expect(screen.getByRole("separator")).toHaveClass(CLASS_NAME);
|
|
31
31
|
});
|
|
32
32
|
});
|
|
33
|
+
|
|
34
|
+
describe("ARIA attributes", () => {
|
|
35
|
+
it("has aria-orientation='horizontal' by default", () => {
|
|
36
|
+
render(<Divider />);
|
|
37
|
+
expect(screen.getByRole("separator")).toHaveAttribute(
|
|
38
|
+
"aria-orientation",
|
|
39
|
+
"horizontal",
|
|
40
|
+
);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("supports aria-orientation='vertical'", () => {
|
|
44
|
+
render(<Divider aria-orientation="vertical" />);
|
|
45
|
+
expect(screen.getByRole("separator")).toHaveAttribute(
|
|
46
|
+
"aria-orientation",
|
|
47
|
+
"vertical",
|
|
48
|
+
);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
33
51
|
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createRef } from "react";
|
|
1
2
|
import { render, screen } from "@testing-library/react";
|
|
2
3
|
import { Flex } from ".";
|
|
3
4
|
|
|
@@ -73,4 +74,10 @@ describe("Test for Flex", () => {
|
|
|
73
74
|
expect(screen.getByTestId("test")).toHaveClass(CLASS_NAME);
|
|
74
75
|
});
|
|
75
76
|
});
|
|
77
|
+
|
|
78
|
+
it("forwards ref", () => {
|
|
79
|
+
const ref = createRef<HTMLDivElement>();
|
|
80
|
+
render(<Flex ref={ref}>Text</Flex>);
|
|
81
|
+
expect(ref.current).toBeInstanceOf(HTMLDivElement);
|
|
82
|
+
});
|
|
76
83
|
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createRef } from "react";
|
|
1
2
|
import { render, screen } from "@testing-library/react";
|
|
2
3
|
import { Grid } from ".";
|
|
3
4
|
|
|
@@ -14,6 +15,35 @@ describe("Test for Grid", () => {
|
|
|
14
15
|
expect(view).toBeTruthy();
|
|
15
16
|
});
|
|
16
17
|
|
|
18
|
+
it("forwards ref to the grid container", () => {
|
|
19
|
+
const ref = createRef<HTMLDivElement>();
|
|
20
|
+
render(
|
|
21
|
+
<Grid ref={ref}>
|
|
22
|
+
<Grid.Item>Item</Grid.Item>
|
|
23
|
+
</Grid>,
|
|
24
|
+
);
|
|
25
|
+
expect(ref.current).toBeInstanceOf(HTMLDivElement);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it("forwards ref to the grid item", () => {
|
|
29
|
+
const ref = createRef<HTMLDivElement>();
|
|
30
|
+
render(
|
|
31
|
+
<Grid>
|
|
32
|
+
<Grid.Item ref={ref}>Item</Grid.Item>
|
|
33
|
+
</Grid>,
|
|
34
|
+
);
|
|
35
|
+
expect(ref.current).toBeInstanceOf(HTMLDivElement);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it("uses mobius class on Grid.Item", () => {
|
|
39
|
+
render(
|
|
40
|
+
<Grid>
|
|
41
|
+
<Grid.Item>Item</Grid.Item>
|
|
42
|
+
</Grid>,
|
|
43
|
+
);
|
|
44
|
+
expect(screen.getByText("Item")).toHaveClass("mobius");
|
|
45
|
+
});
|
|
46
|
+
|
|
17
47
|
describe("given the span prop is an array", () => {
|
|
18
48
|
it("should render default as fallback", () => {
|
|
19
49
|
const span = [1, 2, 3];
|
|
@@ -40,7 +40,7 @@ export interface GridProps extends RefAttributes<GridElementType>, DOMProps {
|
|
|
40
40
|
style?: React.CSSProperties;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
const Grid = ({ ref
|
|
43
|
+
const Grid = ({ ref, ...props }: GridProps) => {
|
|
44
44
|
const {
|
|
45
45
|
columns = 12,
|
|
46
46
|
gap,
|
|
@@ -70,7 +70,7 @@ const Grid = ({ ref: _ref, ...props }: GridProps) => {
|
|
|
70
70
|
...style,
|
|
71
71
|
});
|
|
72
72
|
|
|
73
|
-
return <div style={styles} className={classes} {...rest} />;
|
|
73
|
+
return <div ref={ref} style={styles} className={classes} {...rest} />;
|
|
74
74
|
};
|
|
75
75
|
|
|
76
76
|
Grid.displayName = "Grid";
|
|
@@ -43,7 +43,7 @@ export const getBreakpointMap = (config: Partial<Record<SizeType, number>>) =>
|
|
|
43
43
|
|
|
44
44
|
export const DEFAULT_SPAN = 12;
|
|
45
45
|
|
|
46
|
-
const GridItem = ({ ref
|
|
46
|
+
const GridItem = ({ ref, ...props }: GridItemProps) => {
|
|
47
47
|
const {
|
|
48
48
|
breakpoint: { size: breakpointSize },
|
|
49
49
|
} = useBreakpoint();
|
|
@@ -69,7 +69,7 @@ const GridItem = ({ ref: _ref, ...props }: GridItemProps) => {
|
|
|
69
69
|
xxl,
|
|
70
70
|
});
|
|
71
71
|
const [responsiveSpan, setResponsiveSpan] = useState<number | undefined>();
|
|
72
|
-
const classes = classNames("mobius-grid__item", className);
|
|
72
|
+
const classes = classNames("mobius", "mobius-grid__item", className);
|
|
73
73
|
|
|
74
74
|
useEffect(() => {
|
|
75
75
|
setResponsiveSpan(breakpointMap[breakpointSize]);
|
|
@@ -81,7 +81,7 @@ const GridItem = ({ ref: _ref, ...props }: GridItemProps) => {
|
|
|
81
81
|
justifySelf,
|
|
82
82
|
};
|
|
83
83
|
|
|
84
|
-
return <div style={{ ...styles }} className={classes} {...rest} />;
|
|
84
|
+
return <div ref={ref} style={{ ...styles }} className={classes} {...rest} />;
|
|
85
85
|
};
|
|
86
86
|
|
|
87
87
|
GridItem.displayName = "GridItem";
|