@okta/odyssey-react-mui 1.21.2 → 1.23.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 +34 -0
- package/dist/@types/i18next.d.js.map +1 -1
- package/dist/Autocomplete.js +106 -38
- package/dist/Autocomplete.js.map +1 -1
- package/dist/Callout.js +12 -24
- package/dist/Callout.js.map +1 -1
- package/dist/Checkbox.js +26 -11
- package/dist/Checkbox.js.map +1 -1
- package/dist/CheckboxGroup.js +14 -3
- package/dist/CheckboxGroup.js.map +1 -1
- package/dist/DataTable/DataTable.js +10 -2
- package/dist/DataTable/DataTable.js.map +1 -1
- package/dist/DataTable/useScrollIndication.js +9 -5
- package/dist/DataTable/useScrollIndication.js.map +1 -1
- package/dist/Field.js +3 -1
- package/dist/Field.js.map +1 -1
- package/dist/FileUploader/FileUploadIllustration.js.map +1 -0
- package/dist/FileUploader/FileUploadPreview.js.map +1 -0
- package/dist/{labs/FileUpload.js → FileUploader/FileUploader.js} +6 -5
- package/dist/FileUploader/FileUploader.js.map +1 -0
- package/dist/FileUploader/index.js +13 -0
- package/dist/FileUploader/index.js.map +1 -0
- package/dist/OdysseyCacheProvider.js +4 -3
- package/dist/OdysseyCacheProvider.js.map +1 -1
- package/dist/OdysseyProvider.js +10 -3
- package/dist/OdysseyProvider.js.map +1 -1
- package/dist/OdysseyThemeProvider.js +3 -2
- package/dist/OdysseyThemeProvider.js.map +1 -1
- package/dist/Radio.js +33 -6
- package/dist/Radio.js.map +1 -1
- package/dist/RadioGroup.js +17 -5
- package/dist/RadioGroup.js.map +1 -1
- package/dist/Select.js +89 -31
- package/dist/Select.js.map +1 -1
- package/dist/{labs/Switch.js → Switch.js} +77 -23
- package/dist/Switch.js.map +1 -0
- package/dist/Tabs.js +7 -9
- package/dist/Tabs.js.map +1 -1
- package/dist/Tag.js +102 -4
- package/dist/Tag.js.map +1 -1
- package/dist/TextField.js +16 -39
- package/dist/TextField.js.map +1 -1
- package/dist/Toast.js +2 -2
- package/dist/Toast.js.map +1 -1
- package/dist/ToastStack.js.map +1 -1
- package/dist/createShadowDomElements.js +43 -0
- package/dist/createShadowDomElements.js.map +1 -0
- package/dist/i18n.js +1 -1
- package/dist/i18n.js.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/index.scss +96 -8
- package/dist/labs/AppTile.js +124 -0
- package/dist/labs/AppTile.js.map +1 -0
- package/dist/labs/DataView/BulkActionsMenu.js.map +1 -0
- package/dist/labs/{DataComponents/StackContent.js → DataView/CardLayoutContent.js} +14 -14
- package/dist/labs/DataView/CardLayoutContent.js.map +1 -0
- package/dist/labs/{DataComponents/StackCard.js → DataView/DataCard.js} +6 -6
- package/dist/labs/DataView/DataCard.js.map +1 -0
- package/dist/labs/{DataComponents → DataView}/DataTable.js +6 -2
- package/dist/labs/DataView/DataTable.js.map +1 -0
- package/dist/labs/{DataComponents → DataView}/DataView.js +79 -30
- package/dist/labs/DataView/DataView.js.map +1 -0
- package/dist/labs/DataView/DetailPanel.js.map +1 -0
- package/dist/labs/DataView/LayoutSwitcher.js.map +1 -0
- package/dist/labs/DataView/RowActions.js.map +1 -0
- package/dist/labs/{DataComponents/TableContent.js → DataView/TableLayoutContent.js} +34 -20
- package/dist/labs/DataView/TableLayoutContent.js.map +1 -0
- package/dist/labs/{DataComponents → DataView}/TableSettings.js +2 -2
- package/dist/labs/DataView/TableSettings.js.map +1 -0
- package/dist/labs/DataView/componentTypes.js.map +1 -0
- package/dist/labs/{DataComponents → DataView}/constants.js +2 -2
- package/dist/labs/DataView/constants.js.map +1 -0
- package/dist/labs/DataView/dataTypes.js.map +1 -0
- package/dist/labs/DataView/fetchData.js.map +1 -0
- package/dist/labs/{DataComponents → DataView}/index.js +0 -1
- package/dist/labs/DataView/index.js.map +1 -0
- package/dist/labs/DataView/tableConstants.js.map +1 -0
- package/dist/labs/DataView/useFilterConversion.js.map +1 -0
- package/dist/labs/DateField.js +2 -0
- package/dist/labs/DateField.js.map +1 -1
- package/dist/labs/DatePicker.js +5 -1
- package/dist/labs/DatePicker.js.map +1 -1
- package/dist/labs/SideNav/CollapseIcon.js +44 -0
- package/dist/labs/SideNav/CollapseIcon.js.map +1 -0
- package/dist/labs/SideNav/OktaLogo.js +36 -0
- package/dist/labs/SideNav/OktaLogo.js.map +1 -0
- package/dist/labs/SideNav/SideNav.js +335 -0
- package/dist/labs/SideNav/SideNav.js.map +1 -0
- package/dist/labs/SideNav/SideNavFooterContent.js +49 -0
- package/dist/labs/SideNav/SideNavFooterContent.js.map +1 -0
- package/dist/labs/SideNav/SideNavHeader.js +81 -0
- package/dist/labs/SideNav/SideNavHeader.js.map +1 -0
- package/dist/labs/SideNav/SideNavItemContent.js +157 -0
- package/dist/labs/SideNav/SideNavItemContent.js.map +1 -0
- package/dist/labs/SideNav/SideNavItemLinkContent.js +71 -0
- package/dist/labs/SideNav/SideNavItemLinkContent.js.map +1 -0
- package/dist/labs/SideNav/index.js +14 -0
- package/dist/labs/SideNav/index.js.map +1 -0
- package/dist/labs/SideNav/types.js +2 -0
- package/dist/labs/SideNav/types.js.map +1 -0
- package/dist/labs/TopNav.js +2 -1
- package/dist/labs/TopNav.js.map +1 -1
- package/dist/labs/index.js +3 -4
- package/dist/labs/index.js.map +1 -1
- package/dist/labs/useDateFieldsTranslations.js +1 -1
- package/dist/labs/useDateFieldsTranslations.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui.js +3 -1
- package/dist/properties/ts/odyssey-react-mui.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_cs.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_cs.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_da.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_da.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_de.js +16 -2
- package/dist/properties/ts/odyssey-react-mui_de.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_el.js +18 -4
- package/dist/properties/ts/odyssey-react-mui_el.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_es.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_es.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_fi.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_fi.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_fr.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_fr.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_ht.js +18 -4
- package/dist/properties/ts/odyssey-react-mui_ht.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_hu.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_hu.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_id.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_id.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_it.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_it.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_ja.js +16 -2
- package/dist/properties/ts/odyssey-react-mui_ja.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_ko.js +16 -2
- package/dist/properties/ts/odyssey-react-mui_ko.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_ms.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_ms.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_nb.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_nb.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_nl_NL.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_nl_NL.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_pl.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_pl.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_pt_BR.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_pt_BR.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_ro.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_ro.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_ru.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_ru.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_sv.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_sv.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_th.js +16 -2
- package/dist/properties/ts/odyssey-react-mui_th.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_tr.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_tr.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_uk.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_uk.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_vi.js +17 -3
- package/dist/properties/ts/odyssey-react-mui_vi.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_zh_CN.js +16 -2
- package/dist/properties/ts/odyssey-react-mui_zh_CN.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui_zh_TW.js +16 -2
- package/dist/properties/ts/odyssey-react-mui_zh_TW.js.map +1 -1
- package/dist/src/Autocomplete.d.ts +30 -0
- package/dist/src/Autocomplete.d.ts.map +1 -1
- package/dist/src/Callout.d.ts +11 -23
- package/dist/src/Callout.d.ts.map +1 -1
- package/dist/src/Checkbox.d.ts +2 -2
- package/dist/src/Checkbox.d.ts.map +1 -1
- package/dist/src/CheckboxGroup.d.ts +3 -3
- package/dist/src/CheckboxGroup.d.ts.map +1 -1
- package/dist/src/DataTable/DataTable.d.ts +9 -1
- package/dist/src/DataTable/DataTable.d.ts.map +1 -1
- package/dist/src/DataTable/useScrollIndication.d.ts.map +1 -1
- package/dist/src/Field.d.ts +3 -2
- package/dist/src/Field.d.ts.map +1 -1
- package/dist/src/FileUploader/FileUploadIllustration.d.ts.map +1 -0
- package/dist/src/{labs → FileUploader}/FileUploadPreview.d.ts +2 -2
- package/dist/src/FileUploader/FileUploadPreview.d.ts.map +1 -0
- package/dist/src/{labs/FileUpload.d.ts → FileUploader/FileUploader.d.ts} +5 -4
- package/dist/src/FileUploader/FileUploader.d.ts.map +1 -0
- package/dist/src/FileUploader/index.d.ts +13 -0
- package/dist/src/FileUploader/index.d.ts.map +1 -0
- package/dist/src/NativeSelect.d.ts +1 -1
- package/dist/src/OdysseyCacheProvider.d.ts +7 -3
- package/dist/src/OdysseyCacheProvider.d.ts.map +1 -1
- package/dist/src/OdysseyProvider.d.ts +1 -1
- package/dist/src/OdysseyProvider.d.ts.map +1 -1
- package/dist/src/OdysseyThemeProvider.d.ts +3 -1
- package/dist/src/OdysseyThemeProvider.d.ts.map +1 -1
- package/dist/src/OdysseyTranslationProvider.d.ts +1 -1
- package/dist/src/OdysseyTranslationProvider.d.ts.map +1 -1
- package/dist/src/PasswordField.d.ts +1 -1
- package/dist/src/Radio.d.ts +6 -8
- package/dist/src/Radio.d.ts.map +1 -1
- package/dist/src/RadioGroup.d.ts +4 -5
- package/dist/src/RadioGroup.d.ts.map +1 -1
- package/dist/src/SearchField.d.ts +1 -1
- package/dist/src/Select.d.ts +38 -2
- package/dist/src/Select.d.ts.map +1 -1
- package/dist/src/{labs/Switch.d.ts → Switch.d.ts} +8 -4
- package/dist/src/Switch.d.ts.map +1 -0
- package/dist/src/Tabs.d.ts +6 -8
- package/dist/src/Tabs.d.ts.map +1 -1
- package/dist/src/Tag.d.ts +7 -1
- package/dist/src/Tag.d.ts.map +1 -1
- package/dist/src/TextField.d.ts +17 -40
- package/dist/src/TextField.d.ts.map +1 -1
- package/dist/src/ToastStack.d.ts +2 -2
- package/dist/src/ToastStack.d.ts.map +1 -1
- package/dist/src/{createShadowRootElement.d.ts → createShadowDomElements.d.ts} +6 -1
- package/dist/src/createShadowDomElements.d.ts.map +1 -0
- package/dist/src/i18n.d.ts +2 -2
- package/dist/src/i18n.d.ts.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/labs/AppTile.d.ts +39 -0
- package/dist/src/labs/AppTile.d.ts.map +1 -0
- package/dist/src/labs/DataView/BulkActionsMenu.d.ts.map +1 -0
- package/dist/src/labs/{DataComponents/StackContent.d.ts → DataView/CardLayoutContent.d.ts} +7 -7
- package/dist/src/labs/DataView/CardLayoutContent.d.ts.map +1 -0
- package/dist/src/labs/{DataComponents/StackCard.d.ts → DataView/DataCard.d.ts} +4 -4
- package/dist/src/labs/DataView/DataCard.d.ts.map +1 -0
- package/dist/src/labs/DataView/DataTable.d.ts +16 -0
- package/dist/src/labs/DataView/DataTable.d.ts.map +1 -0
- package/dist/src/labs/{DataComponents → DataView}/DataView.d.ts +1 -1
- package/dist/src/labs/DataView/DataView.d.ts.map +1 -0
- package/dist/src/labs/{DataComponents → DataView}/DetailPanel.d.ts +2 -2
- package/dist/src/labs/DataView/DetailPanel.d.ts.map +1 -0
- package/dist/src/labs/DataView/LayoutSwitcher.d.ts.map +1 -0
- package/dist/src/labs/DataView/RowActions.d.ts.map +1 -0
- package/dist/src/labs/{DataComponents/TableContent.d.ts → DataView/TableLayoutContent.d.ts} +8 -7
- package/dist/src/labs/DataView/TableLayoutContent.d.ts.map +1 -0
- package/dist/src/labs/{DataComponents → DataView}/TableSettings.d.ts +3 -3
- package/dist/src/labs/DataView/TableSettings.d.ts.map +1 -0
- package/dist/src/labs/{DataComponents → DataView}/componentTypes.d.ts +21 -9
- package/dist/src/labs/DataView/componentTypes.d.ts.map +1 -0
- package/dist/src/labs/{DataComponents → DataView}/constants.d.ts +1 -1
- package/dist/src/labs/DataView/constants.d.ts.map +1 -0
- package/dist/src/labs/DataView/dataTypes.d.ts.map +1 -0
- package/dist/src/labs/DataView/fetchData.d.ts.map +1 -0
- package/dist/src/labs/{DataComponents → DataView}/index.d.ts +0 -1
- package/dist/src/labs/DataView/index.d.ts.map +1 -0
- package/dist/src/labs/DataView/tableConstants.d.ts.map +1 -0
- package/dist/src/labs/{DataComponents → DataView}/useFilterConversion.d.ts +2 -2
- package/dist/src/labs/DataView/useFilterConversion.d.ts.map +1 -0
- package/dist/src/labs/DateField.d.ts +2 -2
- package/dist/src/labs/DateField.d.ts.map +1 -1
- package/dist/src/labs/DatePicker.d.ts +2 -2
- package/dist/src/labs/DatePicker.d.ts.map +1 -1
- package/dist/src/labs/SideNav/CollapseIcon.d.ts +17 -0
- package/dist/src/labs/SideNav/CollapseIcon.d.ts.map +1 -0
- package/dist/src/labs/SideNav/OktaLogo.d.ts +14 -0
- package/dist/src/labs/SideNav/OktaLogo.d.ts.map +1 -0
- package/dist/src/labs/SideNav/SideNav.d.ts +16 -0
- package/dist/src/labs/SideNav/SideNav.d.ts.map +1 -0
- package/dist/{test-selectors/odysseyTestSelectors.js → src/labs/SideNav/SideNavFooterContent.d.ts} +6 -9
- package/dist/src/labs/SideNav/SideNavFooterContent.d.ts.map +1 -0
- package/dist/src/labs/SideNav/SideNavHeader.d.ts +16 -0
- package/dist/src/labs/SideNav/SideNavHeader.d.ts.map +1 -0
- package/dist/src/labs/SideNav/SideNavItemContent.d.ts +33 -0
- package/dist/src/labs/SideNav/SideNavItemContent.d.ts.map +1 -0
- package/dist/src/labs/SideNav/SideNavItemLinkContent.d.ts +16 -0
- package/dist/src/labs/SideNav/SideNavItemLinkContent.d.ts.map +1 -0
- package/dist/src/labs/SideNav/index.d.ts +14 -0
- package/dist/src/labs/SideNav/index.d.ts.map +1 -0
- package/dist/src/labs/{SideNav.d.ts → SideNav/types.d.ts} +54 -33
- package/dist/src/labs/SideNav/types.d.ts.map +1 -0
- package/dist/src/labs/TopNav.d.ts +1 -0
- package/dist/src/labs/TopNav.d.ts.map +1 -1
- package/dist/src/labs/index.d.ts +2 -3
- package/dist/src/labs/index.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui.d.ts +2 -0
- package/dist/src/properties/ts/odyssey-react-mui.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_cs.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_cs.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_da.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_da.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_de.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_de.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_el.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_el.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_es.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_es.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_fi.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_fi.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_fr.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_fr.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_ht.d.ts +16 -2
- package/dist/src/properties/ts/odyssey-react-mui_ht.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_hu.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_hu.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_id.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_id.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_it.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_it.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_ja.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_ja.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_ko.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_ko.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_ms.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_ms.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_nb.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_nb.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_nl_NL.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_nl_NL.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_pl.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_pl.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_pt_BR.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_pt_BR.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_ro.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_ro.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_ru.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_ru.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_sv.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_sv.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_th.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_th.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_tr.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_tr.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_uk.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_uk.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_vi.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_vi.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_zh_CN.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_zh_CN.d.ts.map +1 -1
- package/dist/src/properties/ts/odyssey-react-mui_zh_TW.d.ts +15 -1
- package/dist/src/properties/ts/odyssey-react-mui_zh_TW.d.ts.map +1 -1
- package/dist/src/test-selectors/getByQuerySelector.d.ts +148 -0
- package/dist/src/test-selectors/getByQuerySelector.d.ts.map +1 -0
- package/dist/src/test-selectors/getComputedAccessibleErrorMessageText.d.ts +14 -0
- package/dist/src/test-selectors/getComputedAccessibleErrorMessageText.d.ts.map +1 -0
- package/dist/src/test-selectors/getComputedAccessibleText.d.ts +23 -0
- package/dist/src/test-selectors/getComputedAccessibleText.d.ts.map +1 -0
- package/dist/src/test-selectors/index.d.ts +2 -2
- package/dist/src/test-selectors/index.d.ts.map +1 -1
- package/{src/test-selectors/odysseyTestSelectors.ts → dist/src/test-selectors/interpolateString.d.ts} +4 -11
- package/dist/src/test-selectors/interpolateString.d.ts.map +1 -0
- package/dist/src/test-selectors/linkedHtmlSelectors.d.ts +24 -0
- package/dist/src/test-selectors/linkedHtmlSelectors.d.ts.map +1 -0
- package/dist/src/test-selectors/queryOdysseySelector.d.ts +5755 -0
- package/dist/src/test-selectors/queryOdysseySelector.d.ts.map +1 -0
- package/dist/src/test-selectors/querySelector.d.ts +59 -3613
- package/dist/src/test-selectors/querySelector.d.ts.map +1 -1
- package/dist/src/test-selectors/sanityChecks.d.ts +18 -0
- package/dist/src/test-selectors/sanityChecks.d.ts.map +1 -0
- package/dist/src/test-selectors/testSelector.d.ts +46 -0
- package/dist/src/test-selectors/testSelector.d.ts.map +1 -0
- package/dist/src/theme/components.d.ts +3 -1
- package/dist/src/theme/components.d.ts.map +1 -1
- package/dist/src/theme/createOdysseyMuiTheme.d.ts +3 -1
- package/dist/src/theme/createOdysseyMuiTheme.d.ts.map +1 -1
- package/dist/test-selectors/getByQuerySelector.js +64 -0
- package/dist/test-selectors/getByQuerySelector.js.map +1 -0
- package/dist/test-selectors/getComputedAccessibleErrorMessageText.js +25 -0
- package/dist/test-selectors/getComputedAccessibleErrorMessageText.js.map +1 -0
- package/dist/test-selectors/getComputedAccessibleText.js +24 -0
- package/dist/test-selectors/getComputedAccessibleText.js.map +1 -0
- package/dist/test-selectors/index.js +2 -2
- package/dist/test-selectors/index.js.map +1 -1
- package/dist/test-selectors/interpolateString.js +25 -0
- package/dist/test-selectors/interpolateString.js.map +1 -0
- package/dist/test-selectors/linkedHtmlSelectors.js +34 -0
- package/dist/test-selectors/linkedHtmlSelectors.js.map +1 -0
- package/dist/test-selectors/queryOdysseySelector.js +26 -0
- package/dist/test-selectors/queryOdysseySelector.js.map +1 -0
- package/dist/test-selectors/querySelector.js +82 -58
- package/dist/test-selectors/querySelector.js.map +1 -1
- package/dist/test-selectors/sanityChecks.js +33 -0
- package/dist/test-selectors/sanityChecks.js.map +1 -0
- package/dist/test-selectors/testSelector.js +2 -0
- package/dist/test-selectors/testSelector.js.map +1 -0
- package/dist/test-selectors/testSelectors.json +1 -1
- package/dist/theme/components.js +231 -146
- package/dist/theme/components.js.map +1 -1
- package/dist/theme/createOdysseyMuiTheme.js +3 -2
- package/dist/theme/createOdysseyMuiTheme.js.map +1 -1
- package/dist/tsconfig.production.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/jest.setup.js +3 -0
- package/package.json +5 -5
- package/scripts/generateTestSelectorsJson.ts +1 -1
- package/src/@types/i18next.d.ts +1 -1
- package/src/Autocomplete.tsx +140 -45
- package/src/Callout.tsx +13 -25
- package/src/Checkbox.tsx +39 -9
- package/src/CheckboxGroup.tsx +20 -4
- package/src/DataTable/DataTable.tsx +24 -1
- package/src/DataTable/useScrollIndication.tsx +11 -4
- package/src/Field.tsx +5 -2
- package/src/{labs → FileUploader}/FileUploadPreview.tsx +3 -3
- package/src/{labs/FileUpload.tsx → FileUploader/FileUploader.tsx} +7 -6
- package/src/FileUploader/index.ts +13 -0
- package/src/OdysseyCacheProvider.test.tsx +1 -0
- package/src/OdysseyCacheProvider.tsx +18 -4
- package/src/OdysseyProvider.tsx +12 -4
- package/src/OdysseyThemeProvider.tsx +6 -2
- package/src/Radio.tsx +41 -12
- package/src/RadioGroup.tsx +26 -7
- package/src/Select.tsx +116 -45
- package/src/{labs/Switch.tsx → Switch.tsx} +95 -41
- package/src/Tabs.tsx +8 -10
- package/src/Tag.tsx +134 -3
- package/src/TextField.tsx +18 -41
- package/src/Toast.tsx +1 -1
- package/src/ToastStack.tsx +2 -2
- package/src/createShadowDomElements.ts +53 -0
- package/src/i18n.ts +3 -3
- package/src/index.ts +7 -2
- package/src/labs/AppTile.tsx +200 -0
- package/src/labs/{DataComponents/StackContent.tsx → DataView/CardLayoutContent.tsx} +24 -19
- package/src/labs/{DataComponents/StackCard.tsx → DataView/DataCard.tsx} +7 -7
- package/src/labs/{DataComponents → DataView}/DataTable.tsx +8 -4
- package/src/labs/DataView/DataView.test.tsx +158 -0
- package/src/labs/{DataComponents → DataView}/DataView.tsx +119 -42
- package/src/labs/{DataComponents → DataView}/DetailPanel.tsx +2 -2
- package/src/labs/{DataComponents/TableContent.tsx → DataView/TableLayoutContent.tsx} +59 -27
- package/src/labs/{DataComponents → DataView}/TableSettings.tsx +5 -4
- package/src/labs/{DataComponents → DataView}/componentTypes.ts +24 -9
- package/src/labs/{DataComponents → DataView}/constants.tsx +2 -2
- package/src/labs/{DataComponents → DataView}/index.tsx +0 -1
- package/src/labs/{DataComponents → DataView}/useFilterConversion.ts +2 -2
- package/src/labs/DateField.tsx +3 -0
- package/src/labs/DatePicker.tsx +12 -1
- package/src/labs/SideNav/CollapseIcon.tsx +48 -0
- package/src/labs/SideNav/OktaLogo.tsx +39 -0
- package/src/labs/SideNav/SideNav.tsx +486 -0
- package/src/labs/SideNav/SideNavFooterContent.tsx +64 -0
- package/src/labs/SideNav/SideNavHeader.tsx +88 -0
- package/src/labs/SideNav/SideNavItemContent.tsx +216 -0
- package/src/labs/SideNav/SideNavItemLinkContent.tsx +87 -0
- package/src/labs/SideNav/index.ts +15 -0
- package/src/labs/SideNav/types.ts +152 -0
- package/src/labs/TopNav.tsx +3 -1
- package/src/labs/index.ts +3 -4
- package/src/labs/useDateFieldsTranslations.ts +1 -1
- package/src/properties/odyssey-react-mui.properties +2 -1
- package/src/properties/translations/odyssey-react-mui_cs.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_da.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_de.properties +14 -2
- package/src/properties/translations/odyssey-react-mui_el.properties +16 -4
- package/src/properties/translations/odyssey-react-mui_es.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_fi.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_fr.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_ht.properties +17 -6
- package/src/properties/translations/odyssey-react-mui_hu.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_id.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_it.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_ja.properties +14 -2
- package/src/properties/translations/odyssey-react-mui_ko.properties +14 -2
- package/src/properties/translations/odyssey-react-mui_ms.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_nb.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_nl_NL.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_pl.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_pt_BR.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_ro.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_ru.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_sv.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_th.properties +14 -2
- package/src/properties/translations/odyssey-react-mui_tr.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_uk.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_vi.properties +15 -3
- package/src/properties/translations/odyssey-react-mui_zh_CN.properties +14 -2
- package/src/properties/translations/odyssey-react-mui_zh_TW.properties +14 -2
- package/src/properties/ts/odyssey-react-mui.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_cs.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_da.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_de.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_el.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_es.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_fi.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_fr.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_ht.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_hu.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_id.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_it.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_ja.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_ko.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_ms.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_nb.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_nl_NL.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_pl.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_pt_BR.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_ro.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_ru.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_sv.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_th.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_tr.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_uk.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_vi.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_zh_CN.ts +1 -1
- package/src/properties/ts/odyssey-react-mui_zh_TW.ts +1 -1
- package/src/test-selectors/getByQuerySelector.ts +176 -0
- package/src/test-selectors/getComputedAccessibleErrorMessageText.ts +52 -0
- package/src/test-selectors/getComputedAccessibleText.ts +36 -0
- package/src/test-selectors/index.ts +2 -2
- package/src/test-selectors/interpolateString.ts +41 -0
- package/src/test-selectors/linkedHtmlSelectors.ts +73 -0
- package/src/test-selectors/queryOdysseySelector.ts +36 -0
- package/src/test-selectors/querySelector.ts +221 -170
- package/src/test-selectors/sanityChecks.ts +53 -0
- package/src/test-selectors/testSelector.ts +143 -0
- package/src/theme/components.tsx +238 -150
- package/src/theme/createOdysseyMuiTheme.ts +4 -1
- package/dist/createShadowRootElement.js +0 -26
- package/dist/createShadowRootElement.js.map +0 -1
- package/dist/labs/DataComponents/BulkActionsMenu.js.map +0 -1
- package/dist/labs/DataComponents/DataStack.js +0 -85
- package/dist/labs/DataComponents/DataStack.js.map +0 -1
- package/dist/labs/DataComponents/DataTable.js.map +0 -1
- package/dist/labs/DataComponents/DataView.js.map +0 -1
- package/dist/labs/DataComponents/DetailPanel.js.map +0 -1
- package/dist/labs/DataComponents/LayoutSwitcher.js.map +0 -1
- package/dist/labs/DataComponents/RowActions.js.map +0 -1
- package/dist/labs/DataComponents/StackCard.js.map +0 -1
- package/dist/labs/DataComponents/StackContent.js.map +0 -1
- package/dist/labs/DataComponents/TableContent.js.map +0 -1
- package/dist/labs/DataComponents/TableSettings.js.map +0 -1
- package/dist/labs/DataComponents/componentTypes.js.map +0 -1
- package/dist/labs/DataComponents/constants.js.map +0 -1
- package/dist/labs/DataComponents/dataTypes.js.map +0 -1
- package/dist/labs/DataComponents/fetchData.js.map +0 -1
- package/dist/labs/DataComponents/index.js.map +0 -1
- package/dist/labs/DataComponents/tableConstants.js.map +0 -1
- package/dist/labs/DataComponents/useFilterConversion.js.map +0 -1
- package/dist/labs/FileUpload.js.map +0 -1
- package/dist/labs/FileUploadIllustration.js.map +0 -1
- package/dist/labs/FileUploadPreview.js.map +0 -1
- package/dist/labs/SideNav.js +0 -478
- package/dist/labs/SideNav.js.map +0 -1
- package/dist/labs/Switch.js.map +0 -1
- package/dist/src/createShadowRootElement.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/BulkActionsMenu.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/DataStack.d.ts +0 -20
- package/dist/src/labs/DataComponents/DataStack.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/DataTable.d.ts +0 -16
- package/dist/src/labs/DataComponents/DataTable.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/DataView.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/DetailPanel.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/LayoutSwitcher.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/RowActions.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/StackCard.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/StackContent.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/TableContent.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/TableSettings.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/componentTypes.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/constants.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/dataTypes.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/fetchData.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/index.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/tableConstants.d.ts.map +0 -1
- package/dist/src/labs/DataComponents/useFilterConversion.d.ts.map +0 -1
- package/dist/src/labs/FileUpload.d.ts.map +0 -1
- package/dist/src/labs/FileUploadIllustration.d.ts.map +0 -1
- package/dist/src/labs/FileUploadPreview.d.ts.map +0 -1
- package/dist/src/labs/SideNav.d.ts.map +0 -1
- package/dist/src/labs/Switch.d.ts.map +0 -1
- package/dist/src/test-selectors/featureTestSelector.d.ts +0 -31
- package/dist/src/test-selectors/featureTestSelector.d.ts.map +0 -1
- package/dist/src/test-selectors/odysseyTestSelectors.d.ts +0 -120
- package/dist/src/test-selectors/odysseyTestSelectors.d.ts.map +0 -1
- package/dist/test-selectors/featureTestSelector.js +0 -2
- package/dist/test-selectors/featureTestSelector.js.map +0 -1
- package/dist/test-selectors/odysseyTestSelectors.js.map +0 -1
- package/src/createShadowRootElement.ts +0 -31
- package/src/labs/DataComponents/DataStack.tsx +0 -105
- package/src/labs/SideNav.tsx +0 -745
- package/src/test-selectors/featureTestSelector.ts +0 -41
- /package/dist/{labs → FileUploader}/FileUploadIllustration.js +0 -0
- /package/dist/{labs → FileUploader}/FileUploadPreview.js +0 -0
- /package/dist/labs/{DataComponents → DataView}/BulkActionsMenu.js +0 -0
- /package/dist/labs/{DataComponents → DataView}/DetailPanel.js +0 -0
- /package/dist/labs/{DataComponents → DataView}/LayoutSwitcher.js +0 -0
- /package/dist/labs/{DataComponents → DataView}/RowActions.js +0 -0
- /package/dist/labs/{DataComponents → DataView}/componentTypes.js +0 -0
- /package/dist/labs/{DataComponents → DataView}/dataTypes.js +0 -0
- /package/dist/labs/{DataComponents → DataView}/fetchData.js +0 -0
- /package/dist/labs/{DataComponents → DataView}/tableConstants.js +0 -0
- /package/dist/labs/{DataComponents → DataView}/useFilterConversion.js +0 -0
- /package/dist/src/{labs → FileUploader}/FileUploadIllustration.d.ts +0 -0
- /package/dist/src/labs/{DataComponents → DataView}/BulkActionsMenu.d.ts +0 -0
- /package/dist/src/labs/{DataComponents → DataView}/LayoutSwitcher.d.ts +0 -0
- /package/dist/src/labs/{DataComponents → DataView}/RowActions.d.ts +0 -0
- /package/dist/src/labs/{DataComponents → DataView}/dataTypes.d.ts +0 -0
- /package/dist/src/labs/{DataComponents → DataView}/fetchData.d.ts +0 -0
- /package/dist/src/labs/{DataComponents → DataView}/tableConstants.d.ts +0 -0
- /package/src/{labs → FileUploader}/FileUploadIllustration.tsx +0 -0
- /package/src/labs/{DataComponents → DataView}/BulkActionsMenu.tsx +0 -0
- /package/src/labs/{DataComponents → DataView}/LayoutSwitcher.tsx +0 -0
- /package/src/labs/{DataComponents → DataView}/RowActions.tsx +0 -0
- /package/src/labs/{DataComponents → DataView}/dataTypes.ts +0 -0
- /package/src/labs/{DataComponents → DataView}/fetchData.ts +0 -0
- /package/src/labs/{DataComponents → DataView}/tableConstants.tsx +0 -0
package/dist/Select.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","useImperativeHandle","Field","CheckIcon","CloseCircleFilledIcon","ComponentControlledState","useInputValues","getControlState","normalizedKey","styled","useOdysseyDesignTokens","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","SelectContainer","div","ChipsPositioningContainer","shouldForwardProp","prop","odysseyDesignTokens","Spacing0","Spacing5","Spacing1","BorderWidthMain","NonInteractiveIcon","Spacing2","ChipsInnerContainer","_Box","isInteractive","Spacing6","CONTROLLED","Select","ariaDescribedBy","defaultValue","errorMessage","errorMessageList","hasMultipleChoices","hasMultipleChoicesProp","hint","HintLinkComponent","id","idOverride","inputRef","isDisabled","isFullWidth","isMultiSelect","isOptional","label","name","nameOverride","onBlur","onChange","onChangeProp","onFocus","options","testId","translate","value","undefined","controlledStateRef","controlledValue","uncontrolledValue","internalSelectedValues","setInternalSelectedValues","current","localInputRef","focus","inputValues","controlState","event","child","target","split","normalizedOptions","map","option","text","type","removeSelectedValue","selectedValue","Array","isArray","newValue","filter","internalSelectedValue","syntheticEvent","Chips","stopPropagation","hasNonInteractiveIcon","children","item","length","_Chip","tabIndex","onDelete","deleteIcon","sx","pointerEvents","onMouseDown","renderedOptions","index","_ListSubheader","isSelected","includes","_MenuItem","selected","_Checkbox","checked","_ListItemSecondaryAction","toString","renderValue","renderFieldComponent","errorMessageElementId","labelElementId","_Select","displayEmpty","inputProps","labelId","multiple","fieldType","hasVisibleLabel","MemoizedSelect","displayName"],"sources":["../src/Select.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useImperativeHandle,\n MouseEvent,\n} from \"react\";\nimport {\n Box as MuiBox,\n Checkbox as MuiCheckbox,\n Chip as MuiChip,\n ListItemSecondaryAction,\n ListSubheader,\n MenuItem as MuiMenuItem,\n Select as MuiSelect,\n SelectChangeEvent,\n} from \"@mui/material\";\nimport { SelectProps as MuiSelectProps } from \"@mui/material\";\n\nimport { Field } from \"./Field\";\nimport {\n FieldComponentProps,\n FieldComponentRenderProps,\n} from \"./FieldComponentProps\";\nimport { CheckIcon, CloseCircleFilledIcon } from \"./icons.generated\";\nimport type { HtmlProps } from \"./HtmlProps\";\nimport {\n ComponentControlledState,\n FocusHandle,\n useInputValues,\n getControlState,\n} from \"./inputUtils\";\nimport { normalizedKey } from \"./useNormalizedKey\";\nimport styled from \"@emotion/styled\";\n\nimport {\n useOdysseyDesignTokens,\n DesignTokens,\n} from \"./OdysseyDesignTokensContext\";\n\nexport type SelectOption = {\n text: string;\n type?: \"heading\" | \"option\";\n value?: string;\n};\n\nconst SelectContainer = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n`;\n\nconst ChipsPositioningContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>`\n display: flex;\n align-items: center;\n position: absolute;\n top: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing0};\n right: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing5};\n bottom: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing0};\n left: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n margin-inline-start: ${({ odysseyDesignTokens }) =>\n odysseyDesignTokens.BorderWidthMain};\n opacity: 1;\n pointer-events: none;\n`;\n\nconst NonInteractiveIcon = styled(CloseCircleFilledIcon, {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>`\n font-size: 1em;\n margin-inline-start: ${({ odysseyDesignTokens }) =>\n odysseyDesignTokens.Spacing2};\n margin-inline-end: -${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n margin-block-end: -1px;\n`;\n\nconst ChipsInnerContainer = styled(MuiBox, {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isInteractive\",\n})<{\n isInteractive?: boolean;\n odysseyDesignTokens: DesignTokens;\n}>`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n pointer-events: none;\n opacity: ${({ isInteractive }) => (isInteractive ? 1 : 0)};\n min-height: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing6};\n`;\n\nexport type SelectValueType<HasMultipleChoices> =\n HasMultipleChoices extends true ? string[] : string;\n\nexport type SelectProps<\n Value extends SelectValueType<HasMultipleChoices>,\n HasMultipleChoices extends boolean,\n> = {\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue?: MuiSelectProps<Value>[\"defaultValue\"];\n /**\n * If `true`, the Select allows multiple selections\n */\n hasMultipleChoices?: HasMultipleChoices;\n /**\n * The ref forwarded to the Select\n */\n inputRef?: React.RefObject<FocusHandle>;\n /**\n * @deprecated Use `hasMultipleChoices` instead.\n */\n /** **Deprecated:** use `hasMultipleChoices` */\n isMultiSelect?: HasMultipleChoices;\n /**\n * The label text for the Select\n */\n label: string;\n /**\n * Callback fired when the Select loses focus\n */\n onBlur?: MuiSelectProps<Value>[\"onBlur\"];\n /**\n * Callback fired when the value of the Select changes\n */\n onChange?: MuiSelectProps<Value>[\"onChange\"];\n /**\n * Callback fired when the Select gains focus\n */\n onFocus?: MuiSelectProps<Value>[\"onFocus\"];\n /**\n * The options for the Select\n */\n options: (string | SelectOption)[];\n /**\n * The value or values selected in the Select\n */\n value?: Value;\n} & Pick<\n FieldComponentProps,\n | \"errorMessage\"\n | \"errorMessageList\"\n | \"hint\"\n | \"HintLinkComponent\"\n | \"id\"\n | \"isDisabled\"\n | \"isFullWidth\"\n | \"isOptional\"\n | \"name\"\n> &\n Pick<HtmlProps, \"ariaDescribedBy\" | \"testId\" | \"translate\">;\n\ntype SelectRenderProps = Partial<\n Pick<FieldComponentRenderProps, \"ariaDescribedBy\" | \"errorMessageElementId\">\n> &\n Pick<FieldComponentRenderProps, \"id\" | \"labelElementId\">;\n\n/**\n * Options in Odyssey <Select> are passed as an array, which can contain any combination\n * of the following:\n * - string — A simple string. The string will be both the text and the value of the resulting option.\n * <option value=\"string\">string</option>\n *\n * - { text: string } — Same as above, but the string is contained within an object.\n * <option value=\"text\">text</option>\n *\n * - { text: string, value: string } — The option text will be text, and the option value will be value.\n * <option value=\"value\">text</option>\n *\n * - { text: string, type: \"heading\" } — Used to display a group heading with the text\n */\n\nconst { CONTROLLED } = ComponentControlledState;\nconst Select = <\n Value extends SelectValueType<HasMultipleChoices>,\n HasMultipleChoices extends boolean,\n>({\n ariaDescribedBy,\n defaultValue,\n errorMessage,\n errorMessageList,\n hasMultipleChoices: hasMultipleChoicesProp,\n hint,\n HintLinkComponent,\n id: idOverride,\n inputRef,\n isDisabled = false,\n isFullWidth = false,\n isMultiSelect,\n isOptional = false,\n label,\n name: nameOverride,\n onBlur,\n onChange: onChangeProp,\n onFocus,\n options,\n testId,\n translate,\n value,\n}: SelectProps<Value, HasMultipleChoices>) => {\n const hasMultipleChoices = useMemo(\n () =>\n hasMultipleChoicesProp === undefined\n ? isMultiSelect\n : hasMultipleChoicesProp,\n [hasMultipleChoicesProp, isMultiSelect],\n );\n const controlledStateRef = useRef(\n getControlState({\n controlledValue: value,\n uncontrolledValue: defaultValue,\n }),\n );\n const [internalSelectedValues, setInternalSelectedValues] = useState(\n controlledStateRef.current === CONTROLLED ? value : defaultValue,\n );\n\n const localInputRef = useRef<HTMLSelectElement>(null);\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n useImperativeHandle(\n inputRef,\n () => {\n return {\n focus: () => {\n localInputRef.current?.focus();\n },\n };\n },\n [],\n );\n\n useEffect(() => {\n if (controlledStateRef.current === CONTROLLED) {\n setInternalSelectedValues(value);\n }\n }, [value]);\n\n const inputValues = useInputValues({\n defaultValue,\n value,\n controlState: controlledStateRef.current,\n });\n\n const onChange = useCallback<NonNullable<MuiSelectProps<Value>[\"onChange\"]>>(\n (event, child) => {\n const {\n target: { value },\n } = event;\n if (controlledStateRef.current !== CONTROLLED) {\n setInternalSelectedValues(\n (typeof value === \"string\" && hasMultipleChoices\n ? value.split(\",\")\n : value) as Value,\n );\n }\n onChangeProp?.(event, child);\n },\n [hasMultipleChoices, onChangeProp],\n );\n\n // Normalize the options array to accommodate the various\n // data types that might be passed\n const normalizedOptions = useMemo(\n () =>\n options.map((option) => {\n if (typeof option === \"object\") {\n /**\n * If the value of `option?.value is an empty string, we need to make sure that we\n * set an empty string to `value` in the normalized option so that the select component\n * can potentially set it as the selected one in the text input\n */\n const value =\n option?.value === \"\" ? option.value : option.value || option.text;\n return {\n text: option.text,\n value,\n type: option.type === \"heading\" ? \"heading\" : \"option\",\n };\n }\n return { text: option, value: option, type: \"option\" };\n }),\n [options],\n );\n\n const removeSelectedValue = useCallback(\n (selectedValue: string) => {\n if (Array.isArray(internalSelectedValues)) {\n const newValue = internalSelectedValues.filter(\n (internalSelectedValue) => internalSelectedValue !== selectedValue,\n );\n\n const syntheticEvent = {\n target: { value: newValue },\n } as SelectChangeEvent<Value>;\n\n onChange(syntheticEvent, null);\n }\n },\n [internalSelectedValues, onChange],\n );\n\n const Chips = useCallback(\n ({ isInteractive }: { isInteractive: boolean }) => {\n const stopPropagation = (event: MouseEvent<SVGSVGElement>) =>\n event.stopPropagation();\n\n const hasNonInteractiveIcon =\n !isInteractive &&\n controlledStateRef.current === CONTROLLED &&\n hasMultipleChoices;\n\n return (\n Array.isArray(internalSelectedValues) && (\n <ChipsInnerContainer\n isInteractive={isInteractive}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {internalSelectedValues.map(\n (item) =>\n item?.length > 0 && (\n <MuiChip\n key={item}\n label={\n <>\n {item}\n {hasNonInteractiveIcon && (\n <NonInteractiveIcon\n odysseyDesignTokens={odysseyDesignTokens}\n />\n )}\n </>\n }\n tabIndex={-1}\n onDelete={\n isInteractive && controlledStateRef.current === CONTROLLED\n ? () => removeSelectedValue(item)\n : undefined\n }\n deleteIcon={\n <CloseCircleFilledIcon\n sx={{ pointerEvents: \"auto\" }}\n // We need to stop event propagation on mouse down to prevent the deletion\n // from being blocked by the Select list opening, and also ensure that\n // the pointerEvent is registered even when the parent's are not\n onMouseDown={stopPropagation}\n />\n }\n />\n ),\n )}\n </ChipsInnerContainer>\n )\n );\n },\n [\n controlledStateRef,\n hasMultipleChoices,\n internalSelectedValues,\n odysseyDesignTokens,\n removeSelectedValue,\n ],\n );\n\n // Convert the options into the ReactNode children\n // that will populate the <Select>\n const renderedOptions = useMemo(\n () =>\n normalizedOptions.map((option, index) => {\n if (option.type === \"heading\") {\n return (\n <ListSubheader key={option.text}> {option.text} </ListSubheader>\n );\n }\n\n const isSelected = hasMultipleChoices\n ? internalSelectedValues?.includes(option.value)\n : internalSelectedValues === option.value;\n\n return (\n <MuiMenuItem\n key={normalizedKey(option.text, index.toString())}\n value={option.value}\n selected={isSelected}\n >\n {hasMultipleChoices && <MuiCheckbox checked={isSelected} />}\n {option.text}\n {!hasMultipleChoices && internalSelectedValues === option.value && (\n <ListItemSecondaryAction>\n <CheckIcon />\n </ListItemSecondaryAction>\n )}\n </MuiMenuItem>\n );\n }),\n [hasMultipleChoices, normalizedOptions, internalSelectedValues],\n );\n const renderValue = useCallback(\n (value: Value) => Array.isArray(value) && <Chips isInteractive={false} />,\n [Chips],\n );\n\n const renderFieldComponent = useCallback(\n ({\n ariaDescribedBy,\n errorMessageElementId,\n id,\n labelElementId,\n }: SelectRenderProps) => (\n <SelectContainer>\n <MuiSelect\n {...inputValues}\n aria-describedby={ariaDescribedBy}\n aria-errormessage={errorMessageElementId}\n displayEmpty\n id={id}\n inputProps={{ \"data-se\": testId }}\n inputRef={localInputRef}\n labelId={labelElementId}\n multiple={hasMultipleChoices}\n name={nameOverride ?? id}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n renderValue={hasMultipleChoices ? renderValue : undefined}\n translate={translate}\n >\n {renderedOptions}\n </MuiSelect>\n {hasMultipleChoices && (\n <>\n <ChipsPositioningContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <Chips isInteractive={true} />\n </ChipsPositioningContainer>\n </>\n )}\n </SelectContainer>\n ),\n [\n Chips,\n inputValues,\n hasMultipleChoices,\n nameOverride,\n odysseyDesignTokens,\n onBlur,\n onChange,\n onFocus,\n renderedOptions,\n renderValue,\n testId,\n translate,\n ],\n );\n\n return (\n <Field\n ariaDescribedBy={ariaDescribedBy}\n errorMessage={errorMessage}\n errorMessageList={errorMessageList}\n fieldType=\"single\"\n hasVisibleLabel\n hint={hint}\n HintLinkComponent={HintLinkComponent}\n id={idOverride}\n isDisabled={isDisabled}\n isFullWidth={isFullWidth}\n isOptional={isOptional}\n label={label}\n renderFieldComponent={renderFieldComponent}\n />\n );\n};\n\nconst MemoizedSelect = memo(Select);\nMemoizedSelect.displayName = \"Select\";\n\nexport { MemoizedSelect as Select };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Select.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","useImperativeHandle","Field","CheckIcon","CloseCircleFilledIcon","ComponentControlledState","useInputValues","getControlState","normalizedKey","styled","useOdysseyDesignTokens","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","SelectTestSelector","accessibleText","errorMessage","hint","label","children","list","listItem","elementSelector","method","options","role","isControlledElement","SelectContainer","div","ChipsPositioningContainer","shouldForwardProp","prop","odysseyDesignTokens","Spacing0","Spacing5","Spacing1","BorderWidthMain","NonInteractiveIcon","Spacing2","ChipsInnerContainer","_Box","isInteractive","isReadOnly","Spacing6","CONTROLLED","Select","ariaDescribedBy","defaultValue","errorMessageList","hasMultipleChoices","hasMultipleChoicesProp","HintLinkComponent","id","idOverride","inputRef","isDisabled","isFullWidth","isMultiSelect","isOptional","name","nameOverride","onBlur","onChange","onChangeProp","onFocus","testId","translate","value","selectRef","undefined","controlledStateRef","controlledValue","uncontrolledValue","internalSelectedValues","setInternalSelectedValues","current","localInputRef","focus","inputValues","controlState","event","child","preventDefault","target","split","normalizedOptions","normalizedOptionsMap","map","option","text","type","Map","removeSelectedValue","selectedValue","Array","isArray","newValue","filter","internalSelectedValue","syntheticEvent","Chips","stopPropagation","hasNonInteractiveIcon","item","length","_Chip","get","tabIndex","onDelete","deleteIcon","sx","pointerEvents","onMouseDown","renderedOptions","index","_ListSubheader","isSelected","includes","_MenuItem","selected","_Checkbox","checked","_ListItemSecondaryAction","toString","renderValue","renderFieldComponent","errorMessageElementId","labelElementId","_Select","displayEmpty","inputProps","readOnly","el","labelId","multiple","fieldType","hasVisibleLabel","MemoizedSelect","displayName"],"sources":["../src/Select.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useImperativeHandle,\n} from \"react\";\nimport {\n Box as MuiBox,\n Checkbox as MuiCheckbox,\n Chip as MuiChip,\n ListItemSecondaryAction,\n ListSubheader,\n MenuItem as MuiMenuItem,\n Select as MuiSelect,\n SelectChangeEvent,\n} from \"@mui/material\";\nimport { SelectProps as MuiSelectProps } from \"@mui/material\";\nimport { Field } from \"./Field\";\nimport {\n FieldComponentProps,\n FieldComponentRenderProps,\n} from \"./FieldComponentProps\";\nimport { CheckIcon, CloseCircleFilledIcon } from \"./icons.generated\";\nimport type { HtmlProps } from \"./HtmlProps\";\nimport {\n ComponentControlledState,\n FocusHandle,\n useInputValues,\n getControlState,\n} from \"./inputUtils\";\nimport { normalizedKey } from \"./useNormalizedKey\";\nimport styled from \"@emotion/styled\";\nimport {\n useOdysseyDesignTokens,\n DesignTokens,\n} from \"./OdysseyDesignTokensContext\";\nimport { TestSelector } from \"./test-selectors\";\n\nexport const SelectTestSelector = {\n accessibleText: {\n errorMessage: \"errorMessage\",\n hint: \"description\",\n label: \"label\",\n },\n children: {\n list: {\n accessibleText: {\n label: \"label\",\n },\n children: {\n listItem: {\n accessibleText: {\n label: \"label\",\n },\n elementSelector: {\n method: \"ByRole\",\n options: {\n label: \"name\",\n },\n role: \"option\",\n },\n },\n },\n isControlledElement: true,\n },\n },\n elementSelector: {\n method: \"ByRole\",\n options: {\n label: \"name\",\n },\n role: \"combobox\",\n },\n} as const satisfies TestSelector;\n\nexport type SelectOption = {\n text: string;\n type?: \"heading\" | \"option\";\n value?: string;\n};\n\nconst SelectContainer = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n`;\n\nconst ChipsPositioningContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>`\n display: flex;\n align-items: center;\n position: absolute;\n top: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing0};\n right: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing5};\n bottom: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing0};\n left: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n margin-inline-start: ${({ odysseyDesignTokens }) =>\n odysseyDesignTokens.BorderWidthMain};\n opacity: 1;\n pointer-events: none;\n`;\n\nconst NonInteractiveIcon = styled(CloseCircleFilledIcon, {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>`\n font-size: 1em;\n margin-inline-start: ${({ odysseyDesignTokens }) =>\n odysseyDesignTokens.Spacing2};\n margin-inline-end: -${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n margin-block-end: -1px;\n`;\n\nconst ChipsInnerContainer = styled(MuiBox, {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"isInteractive\" &&\n prop !== \"isReadOnly\",\n})<{\n isInteractive?: boolean;\n isReadOnly?: boolean;\n odysseyDesignTokens: DesignTokens;\n}>`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n pointer-events: none;\n opacity: ${({ isInteractive, isReadOnly }) =>\n isInteractive || isReadOnly ? 1 : 0};\n min-height: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing6};\n`;\n\nexport type SelectValueType<HasMultipleChoices> =\n HasMultipleChoices extends true ? string[] : string;\n\nexport type SelectProps<\n Value extends SelectValueType<HasMultipleChoices>,\n HasMultipleChoices extends boolean,\n> = {\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue?: MuiSelectProps<Value>[\"defaultValue\"];\n /**\n * If `true`, the Select allows multiple selections\n */\n hasMultipleChoices?: HasMultipleChoices;\n /**\n * The ref forwarded to the Select\n */\n inputRef?: React.RefObject<FocusHandle>;\n /**\n * @deprecated Use `hasMultipleChoices` instead.\n */\n /** **Deprecated:** use `hasMultipleChoices` */\n isMultiSelect?: HasMultipleChoices;\n /**\n * The label text for the Select\n */\n label: string;\n /**\n * Callback fired when the Select loses focus\n */\n onBlur?: MuiSelectProps<Value>[\"onBlur\"];\n /**\n * Callback fired when the value of the Select changes\n */\n onChange?: MuiSelectProps<Value>[\"onChange\"];\n /**\n * Callback fired when the Select gains focus\n */\n onFocus?: MuiSelectProps<Value>[\"onFocus\"];\n /**\n * The options for the Select\n */\n options: (string | SelectOption)[];\n /**\n * The value or values selected in the Select\n */\n value?: Value;\n} & Pick<\n FieldComponentProps,\n | \"errorMessage\"\n | \"errorMessageList\"\n | \"hint\"\n | \"HintLinkComponent\"\n | \"id\"\n | \"isDisabled\"\n | \"isFullWidth\"\n | \"isOptional\"\n | \"isReadOnly\"\n | \"name\"\n> &\n Pick<HtmlProps, \"ariaDescribedBy\" | \"testId\" | \"translate\">;\n\ntype SelectRenderProps = Partial<\n Pick<FieldComponentRenderProps, \"ariaDescribedBy\" | \"errorMessageElementId\">\n> &\n Pick<FieldComponentRenderProps, \"id\" | \"labelElementId\">;\n\n/**\n * Options in Odyssey <Select> are passed as an array, which can contain any combination\n * of the following:\n * - string — A simple string. The string will be both the text and the value of the resulting option.\n * <option value=\"string\">string</option>\n *\n * - { text: string } — Same as above, but the string is contained within an object.\n * <option value=\"text\">text</option>\n *\n * - { text: string, value: string } — The option text will be text, and the option value will be value.\n * <option value=\"value\">text</option>\n *\n * - { text: string, type: \"heading\" } — Used to display a group heading with the text\n */\n\nconst { CONTROLLED } = ComponentControlledState;\nconst Select = <\n Value extends SelectValueType<HasMultipleChoices>,\n HasMultipleChoices extends boolean,\n>({\n ariaDescribedBy,\n defaultValue,\n errorMessage,\n errorMessageList,\n hasMultipleChoices: hasMultipleChoicesProp,\n hint,\n HintLinkComponent,\n id: idOverride,\n inputRef,\n isDisabled = false,\n isFullWidth = false,\n isMultiSelect,\n isOptional = false,\n isReadOnly = false,\n label,\n name: nameOverride,\n onBlur,\n onChange: onChangeProp,\n onFocus,\n options,\n testId,\n translate,\n value,\n}: SelectProps<Value, HasMultipleChoices>) => {\n const selectRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n\n const hasMultipleChoices = useMemo(\n () =>\n hasMultipleChoicesProp === undefined\n ? isMultiSelect\n : hasMultipleChoicesProp,\n [hasMultipleChoicesProp, isMultiSelect],\n );\n\n const controlledStateRef = useRef(\n getControlState({\n controlledValue: value,\n uncontrolledValue: defaultValue,\n }),\n );\n const [internalSelectedValues, setInternalSelectedValues] = useState(\n controlledStateRef.current === CONTROLLED ? value : defaultValue,\n );\n\n const localInputRef = useRef<HTMLSelectElement>(null);\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n useImperativeHandle(\n inputRef,\n () => {\n return {\n focus: () => {\n localInputRef.current?.focus();\n },\n };\n },\n [],\n );\n\n useEffect(() => {\n if (controlledStateRef.current === CONTROLLED) {\n setInternalSelectedValues(value);\n }\n }, [value]);\n\n const inputValues = useInputValues({\n defaultValue,\n value,\n controlState: controlledStateRef.current,\n });\n\n const onChange = useCallback<NonNullable<MuiSelectProps<Value>[\"onChange\"]>>(\n (event, child) => {\n if (isReadOnly) {\n event.preventDefault();\n } else {\n const {\n target: { value },\n } = event;\n if (controlledStateRef.current !== CONTROLLED) {\n setInternalSelectedValues(\n (typeof value === \"string\" && hasMultipleChoices\n ? value.split(\",\")\n : value) as Value,\n );\n }\n onChangeProp?.(event, child);\n }\n },\n [hasMultipleChoices, onChangeProp, isReadOnly],\n );\n // Normalize the options array to accommodate the various\n // data types that might be passed\n const [normalizedOptions, normalizedOptionsMap] = useMemo(() => {\n const normalizedOptions = options.map((option) => {\n if (typeof option === \"object\") {\n /**\n * If the value of `option?.value is an empty string, we need to make sure that we\n * set an empty string to `value` in the normalized option so that the select component\n * can potentially set it as the selected one in the text input\n */\n const value =\n option?.value === \"\" ? option.value : option.value || option.text;\n return {\n text: option.text,\n value,\n type: option.type === \"heading\" ? \"heading\" : \"option\",\n };\n }\n\n return { text: option, value: option, type: \"option\" };\n });\n\n const normalizedOptionsMap = new Map(\n normalizedOptions.map((option) => [option.value, option]),\n );\n return [normalizedOptions, normalizedOptionsMap];\n }, [options]);\n\n const removeSelectedValue = useCallback(\n (selectedValue: string) => {\n if (Array.isArray(internalSelectedValues)) {\n const newValue = internalSelectedValues.filter(\n (internalSelectedValue) => internalSelectedValue !== selectedValue,\n );\n\n const syntheticEvent = {\n target: { value: newValue },\n } as SelectChangeEvent<Value>;\n\n onChange(syntheticEvent, null);\n }\n },\n [internalSelectedValues, onChange],\n );\n\n const Chips = useCallback(\n ({\n isInteractive,\n isReadOnly,\n }: {\n isInteractive: boolean;\n isReadOnly?: boolean;\n }) => {\n const stopPropagation = (event: React.MouseEvent<SVGSVGElement>) =>\n event.stopPropagation();\n\n const hasNonInteractiveIcon =\n !isInteractive &&\n controlledStateRef.current === CONTROLLED &&\n hasMultipleChoices;\n return (\n Array.isArray(internalSelectedValues) && (\n <ChipsInnerContainer\n isInteractive={isInteractive}\n isReadOnly={isReadOnly}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {internalSelectedValues.map(\n (item) =>\n item?.length > 0 && (\n <MuiChip\n key={item}\n label={\n <>\n {normalizedOptionsMap.get(item)?.text}\n {hasNonInteractiveIcon && (\n <NonInteractiveIcon\n odysseyDesignTokens={odysseyDesignTokens}\n />\n )}\n </>\n }\n tabIndex={-1}\n onDelete={\n isInteractive && controlledStateRef.current === CONTROLLED\n ? () => removeSelectedValue(item)\n : undefined\n }\n deleteIcon={\n <CloseCircleFilledIcon\n sx={{ pointerEvents: \"auto\" }}\n // We need to stop event propagation on mouse down to prevent the deletion\n // from being blocked by the Select list opening, and also ensure that\n // the pointerEvent is registered even when the parent's are not\n onMouseDown={stopPropagation}\n />\n }\n />\n ),\n )}\n </ChipsInnerContainer>\n )\n );\n },\n [\n controlledStateRef,\n hasMultipleChoices,\n internalSelectedValues,\n odysseyDesignTokens,\n removeSelectedValue,\n normalizedOptionsMap,\n ],\n );\n\n // Convert the options into the ReactNode children\n // that will populate the <Select>\n const renderedOptions = useMemo(\n () =>\n normalizedOptions.map((option, index) => {\n if (option.type === \"heading\") {\n return (\n <ListSubheader key={option.text}> {option.text} </ListSubheader>\n );\n }\n\n const isSelected = hasMultipleChoices\n ? internalSelectedValues?.includes(option.value)\n : internalSelectedValues === option.value;\n\n return (\n <MuiMenuItem\n data-empty={!option.text}\n key={normalizedKey(option.text, index.toString())}\n value={option.value}\n selected={isSelected}\n >\n {hasMultipleChoices && <MuiCheckbox checked={isSelected} />}\n {option.text}\n {!hasMultipleChoices && internalSelectedValues === option.value && (\n <ListItemSecondaryAction>\n <CheckIcon />\n </ListItemSecondaryAction>\n )}\n </MuiMenuItem>\n );\n }),\n [hasMultipleChoices, normalizedOptions, internalSelectedValues],\n );\n\n const renderValue = useCallback(\n (value: Value) => Array.isArray(value) && <Chips isInteractive={false} />,\n [Chips],\n );\n\n const renderFieldComponent = useCallback(\n ({\n ariaDescribedBy,\n errorMessageElementId,\n id,\n labelElementId,\n }: SelectRenderProps) => (\n <SelectContainer>\n <MuiSelect\n {...inputValues}\n aria-describedby={ariaDescribedBy}\n aria-errormessage={errorMessageElementId}\n displayEmpty\n id={id}\n inputProps={{\n \"data-se\": testId,\n \"aria-disabled\": isDisabled || isReadOnly,\n readOnly: isReadOnly,\n }}\n inputRef={(el: HTMLInputElement | HTMLTextAreaElement | null) => {\n if (localInputRef.current !== el) {\n (localInputRef as React.MutableRefObject<typeof el>).current = el;\n }\n selectRef.current = el;\n }}\n labelId={labelElementId}\n multiple={hasMultipleChoices}\n name={nameOverride ?? id}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n renderValue={hasMultipleChoices ? renderValue : undefined}\n translate={translate}\n >\n {renderedOptions}\n </MuiSelect>\n {hasMultipleChoices && (\n <>\n <ChipsPositioningContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <Chips isInteractive={!isReadOnly} isReadOnly={isReadOnly} />\n </ChipsPositioningContainer>\n </>\n )}\n </SelectContainer>\n ),\n [\n Chips,\n inputValues,\n hasMultipleChoices,\n isDisabled,\n isReadOnly,\n nameOverride,\n odysseyDesignTokens,\n onBlur,\n onChange,\n onFocus,\n renderedOptions,\n renderValue,\n testId,\n translate,\n ],\n );\n\n return (\n <Field\n ariaDescribedBy={ariaDescribedBy}\n errorMessage={errorMessage}\n errorMessageList={errorMessageList}\n fieldType=\"single\"\n hasVisibleLabel\n hint={hint}\n HintLinkComponent={HintLinkComponent}\n id={idOverride}\n isDisabled={isDisabled}\n isFullWidth={isFullWidth}\n isOptional={isOptional}\n label={label}\n renderFieldComponent={renderFieldComponent}\n />\n );\n};\n\nconst MemoizedSelect = memo(Select);\nMemoizedSelect.displayName = \"Select\";\n\nexport { MemoizedSelect as Select };\n"],"mappings":"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"}
|
|
@@ -14,20 +14,20 @@ import _FormLabel from "@mui/material/FormLabel";
|
|
|
14
14
|
import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
15
15
|
import { useTranslation } from "react-i18next";
|
|
16
16
|
import styled from "@emotion/styled";
|
|
17
|
-
import { Box } from "
|
|
18
|
-
import { FieldHint } from "
|
|
19
|
-
import { CheckIcon } from "
|
|
20
|
-
import { ComponentControlledState, getControlState } from "
|
|
21
|
-
import { useOdysseyDesignTokens } from "
|
|
22
|
-
import { stripRem, toRem } from "
|
|
23
|
-
import { useUniqueId } from "
|
|
17
|
+
import { Box } from "./Box.js";
|
|
18
|
+
import { FieldHint } from "./FieldHint.js";
|
|
19
|
+
import { CheckIcon } from "./icons.generated/index.js";
|
|
20
|
+
import { ComponentControlledState, getControlState } from "./inputUtils.js";
|
|
21
|
+
import { useOdysseyDesignTokens } from "./OdysseyDesignTokensContext.js";
|
|
22
|
+
import { stripRem, toRem } from "./remUtils.js";
|
|
23
|
+
import { useUniqueId } from "./useUniqueId.js";
|
|
24
24
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
25
25
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
26
26
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
27
27
|
const {
|
|
28
28
|
CONTROLLED
|
|
29
29
|
} = ComponentControlledState;
|
|
30
|
-
const nonForwardedProps = ["isChecked", "isDisabled", "isFullWidth", "odysseyDesignTokens"];
|
|
30
|
+
const nonForwardedProps = ["isChecked", "isDisabled", "isFullWidth", "isReadOnly", "odysseyDesignTokens"];
|
|
31
31
|
const SwitchAndLabelContainer = styled("div", {
|
|
32
32
|
shouldForwardProp: prop => !nonForwardedProps.includes(prop)
|
|
33
33
|
})(({
|
|
@@ -46,18 +46,29 @@ const StyledSwitchLabel = styled(_FormLabel, {
|
|
|
46
46
|
shouldForwardProp: prop => !nonForwardedProps.includes(prop)
|
|
47
47
|
})(({
|
|
48
48
|
isDisabled,
|
|
49
|
+
isReadOnly,
|
|
49
50
|
odysseyDesignTokens
|
|
50
51
|
}) => ({
|
|
51
52
|
display: "block",
|
|
52
53
|
margin: 0,
|
|
53
|
-
color:
|
|
54
|
+
color: odysseyDesignTokens.PaletteNeutralDark,
|
|
54
55
|
...(isDisabled && {
|
|
56
|
+
color: odysseyDesignTokens.TypographyColorDisabled,
|
|
55
57
|
p: {
|
|
56
58
|
color: odysseyDesignTokens.TypographyColorDisabled
|
|
57
59
|
},
|
|
58
60
|
a: {
|
|
59
61
|
color: `${odysseyDesignTokens.TypographyColorDisabled} !important`
|
|
60
62
|
}
|
|
63
|
+
}),
|
|
64
|
+
...(isReadOnly && {
|
|
65
|
+
color: odysseyDesignTokens.HueNeutral700,
|
|
66
|
+
p: {
|
|
67
|
+
color: odysseyDesignTokens.HueNeutral700
|
|
68
|
+
},
|
|
69
|
+
a: {
|
|
70
|
+
color: `${odysseyDesignTokens.HueNeutral700} !important`
|
|
71
|
+
}
|
|
61
72
|
})
|
|
62
73
|
}));
|
|
63
74
|
const SwitchTrack = styled("div", {
|
|
@@ -65,20 +76,31 @@ const SwitchTrack = styled("div", {
|
|
|
65
76
|
})(({
|
|
66
77
|
isChecked,
|
|
67
78
|
isDisabled,
|
|
79
|
+
isReadOnly,
|
|
68
80
|
odysseyDesignTokens
|
|
69
81
|
}) => ({
|
|
70
82
|
position: "relative",
|
|
71
83
|
width: odysseyDesignTokens.Spacing7,
|
|
72
84
|
height: `calc(${odysseyDesignTokens.Spacing4} + ${odysseyDesignTokens.Spacing1})`,
|
|
73
85
|
borderRadius: odysseyDesignTokens.BorderRadiusOuter,
|
|
74
|
-
backgroundColor:
|
|
75
|
-
transition: `background-color ${odysseyDesignTokens.TransitionDurationMain}
|
|
86
|
+
backgroundColor: odysseyDesignTokens.HueNeutral300,
|
|
87
|
+
transition: `background-color ${odysseyDesignTokens.TransitionDurationMain}`,
|
|
88
|
+
...(isDisabled && {
|
|
89
|
+
backgroundColor: odysseyDesignTokens.HueNeutral200
|
|
90
|
+
}),
|
|
91
|
+
...(isReadOnly && {
|
|
92
|
+
backgroundColor: odysseyDesignTokens.HueNeutral600
|
|
93
|
+
}),
|
|
94
|
+
...(isChecked && !isDisabled && !isReadOnly && {
|
|
95
|
+
backgroundColor: odysseyDesignTokens.PaletteSuccessLight
|
|
96
|
+
})
|
|
76
97
|
}));
|
|
77
98
|
const SwitchThumb = styled("span", {
|
|
78
99
|
shouldForwardProp: prop => !nonForwardedProps.includes(prop)
|
|
79
100
|
})(({
|
|
80
101
|
isChecked,
|
|
81
102
|
isDisabled,
|
|
103
|
+
isReadOnly,
|
|
82
104
|
odysseyDesignTokens
|
|
83
105
|
}) => {
|
|
84
106
|
const thumbOffset = toRem(3);
|
|
@@ -92,9 +114,18 @@ const SwitchThumb = styled("span", {
|
|
|
92
114
|
width: `calc(${odysseyDesignTokens.Spacing4} - ${toRem(2)}rem)`,
|
|
93
115
|
height: `calc(${odysseyDesignTokens.Spacing4} - ${toRem(2)}rem)`,
|
|
94
116
|
borderRadius: odysseyDesignTokens.BorderRadiusRound,
|
|
95
|
-
backgroundColor:
|
|
96
|
-
transform:
|
|
97
|
-
transition: `transform ${odysseyDesignTokens.TransitionDurationMain}
|
|
117
|
+
backgroundColor: odysseyDesignTokens.HueNeutralWhite,
|
|
118
|
+
transform: "translate3d(0, -50%, 0)",
|
|
119
|
+
transition: `transform ${odysseyDesignTokens.TransitionDurationMain}`,
|
|
120
|
+
...(isDisabled && {
|
|
121
|
+
backgroundColor: odysseyDesignTokens.HueNeutral50
|
|
122
|
+
}),
|
|
123
|
+
...(isReadOnly && {
|
|
124
|
+
backgroundColor: odysseyDesignTokens.HueNeutral400
|
|
125
|
+
}),
|
|
126
|
+
...(isChecked && {
|
|
127
|
+
transform: `translate3d(${transformDistance}rem, -50%, 0)`
|
|
128
|
+
})
|
|
98
129
|
};
|
|
99
130
|
});
|
|
100
131
|
const SwitchCheckMark = styled(CheckIcon, {
|
|
@@ -102,6 +133,7 @@ const SwitchCheckMark = styled(CheckIcon, {
|
|
|
102
133
|
})(({
|
|
103
134
|
isChecked,
|
|
104
135
|
isDisabled,
|
|
136
|
+
isReadOnly,
|
|
105
137
|
odysseyDesignTokens
|
|
106
138
|
}) => ({
|
|
107
139
|
position: "absolute",
|
|
@@ -110,13 +142,22 @@ const SwitchCheckMark = styled(CheckIcon, {
|
|
|
110
142
|
width: odysseyDesignTokens.Spacing4,
|
|
111
143
|
transform: "translateY(-50%)",
|
|
112
144
|
transition: `opacity ${odysseyDesignTokens.TransitionDurationMain}`,
|
|
113
|
-
opacity:
|
|
145
|
+
opacity: 0,
|
|
114
146
|
path: {
|
|
115
|
-
fill:
|
|
116
|
-
}
|
|
147
|
+
fill: odysseyDesignTokens.HueNeutralWhite
|
|
148
|
+
},
|
|
149
|
+
...(isChecked && {
|
|
150
|
+
opacity: 1
|
|
151
|
+
}),
|
|
152
|
+
...((isDisabled || isReadOnly) && {
|
|
153
|
+
path: {
|
|
154
|
+
fill: odysseyDesignTokens.HueNeutral50
|
|
155
|
+
}
|
|
156
|
+
})
|
|
117
157
|
}));
|
|
118
158
|
const HiddenCheckbox = styled.input(({
|
|
119
|
-
odysseyDesignTokens
|
|
159
|
+
odysseyDesignTokens,
|
|
160
|
+
isReadOnly
|
|
120
161
|
}) => ({
|
|
121
162
|
position: "absolute",
|
|
122
163
|
top: 0,
|
|
@@ -125,7 +166,7 @@ const HiddenCheckbox = styled.input(({
|
|
|
125
166
|
height: "100%",
|
|
126
167
|
margin: 0,
|
|
127
168
|
opacity: 0,
|
|
128
|
-
cursor: "pointer",
|
|
169
|
+
cursor: isReadOnly ? "default" : "pointer",
|
|
129
170
|
zIndex: 2,
|
|
130
171
|
"&:focus-visible": {
|
|
131
172
|
"~ [data-switch-track='true']": {
|
|
@@ -139,13 +180,15 @@ const SwitchLabel = ({
|
|
|
139
180
|
HintLinkComponent,
|
|
140
181
|
inputId,
|
|
141
182
|
isDisabled,
|
|
142
|
-
label
|
|
183
|
+
label,
|
|
184
|
+
isReadOnly
|
|
143
185
|
}) => {
|
|
144
186
|
const odysseyDesignTokens = useOdysseyDesignTokens();
|
|
145
187
|
return _jsx(_Fragment, {
|
|
146
188
|
children: _jsxs(StyledSwitchLabel, {
|
|
147
189
|
htmlFor: inputId,
|
|
148
190
|
isDisabled: isDisabled,
|
|
191
|
+
isReadOnly: isReadOnly,
|
|
149
192
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
150
193
|
children: [label, hint && _jsx(FieldHint, {
|
|
151
194
|
id: hintId,
|
|
@@ -165,6 +208,7 @@ const Switch = ({
|
|
|
165
208
|
isDefaultChecked,
|
|
166
209
|
isDisabled,
|
|
167
210
|
isFullWidth = false,
|
|
211
|
+
isReadOnly = false,
|
|
168
212
|
label,
|
|
169
213
|
name,
|
|
170
214
|
onChange,
|
|
@@ -199,6 +243,10 @@ const Switch = ({
|
|
|
199
243
|
const hintId = hint ? `${inputId}-hint` : undefined;
|
|
200
244
|
const labelElementId = `${inputId}-label`;
|
|
201
245
|
const handleOnChange = useCallback(event => {
|
|
246
|
+
if (isReadOnly) {
|
|
247
|
+
event.preventDefault();
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
202
250
|
const target = event.target;
|
|
203
251
|
const {
|
|
204
252
|
checked,
|
|
@@ -209,7 +257,7 @@ const Switch = ({
|
|
|
209
257
|
checked,
|
|
210
258
|
value
|
|
211
259
|
});
|
|
212
|
-
}, [onChange, setInternalSwitchChecked]);
|
|
260
|
+
}, [onChange, setInternalSwitchChecked, isReadOnly]);
|
|
213
261
|
return _jsx(Box, {
|
|
214
262
|
sx: {
|
|
215
263
|
marginBlockEnd: odysseyDesignTokens.Spacing2,
|
|
@@ -227,7 +275,8 @@ const Switch = ({
|
|
|
227
275
|
inputId: inputId,
|
|
228
276
|
isDisabled: isDisabled,
|
|
229
277
|
isFullWidth: isFullWidth,
|
|
230
|
-
label: label
|
|
278
|
+
label: label,
|
|
279
|
+
isReadOnly: isReadOnly
|
|
231
280
|
}), _jsxs(SwitchContainer, {
|
|
232
281
|
children: [_jsx(HiddenCheckbox, {
|
|
233
282
|
...inputValues,
|
|
@@ -242,19 +291,24 @@ const Switch = ({
|
|
|
242
291
|
onChange: handleOnChange,
|
|
243
292
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
244
293
|
type: "checkbox",
|
|
245
|
-
value: value
|
|
294
|
+
value: value,
|
|
295
|
+
readOnly: isReadOnly,
|
|
296
|
+
isReadOnly: isReadOnly
|
|
246
297
|
}), _jsxs(SwitchTrack, {
|
|
247
298
|
"data-switch-track": true,
|
|
248
299
|
isChecked: internalSwitchChecked,
|
|
249
300
|
isDisabled: isDisabled,
|
|
301
|
+
isReadOnly: isReadOnly,
|
|
250
302
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
251
303
|
children: [_jsx(SwitchThumb, {
|
|
252
304
|
isChecked: internalSwitchChecked,
|
|
253
305
|
isDisabled: isDisabled,
|
|
306
|
+
isReadOnly: isReadOnly,
|
|
254
307
|
odysseyDesignTokens: odysseyDesignTokens
|
|
255
308
|
}), _jsx(SwitchCheckMark, {
|
|
256
309
|
isChecked: internalSwitchChecked,
|
|
257
310
|
isDisabled: isDisabled,
|
|
311
|
+
isReadOnly: isReadOnly,
|
|
258
312
|
odysseyDesignTokens: odysseyDesignTokens
|
|
259
313
|
})]
|
|
260
314
|
})]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Switch.js","names":["memo","useCallback","useEffect","useMemo","useRef","useState","useTranslation","styled","Box","FieldHint","CheckIcon","ComponentControlledState","getControlState","useOdysseyDesignTokens","stripRem","toRem","useUniqueId","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","CONTROLLED","nonForwardedProps","SwitchAndLabelContainer","shouldForwardProp","prop","includes","isFullWidth","odysseyDesignTokens","display","alignItems","justifyContent","maxWidth","TypographyLineLengthMax","SwitchContainer","div","position","StyledSwitchLabel","_FormLabel","isDisabled","isReadOnly","margin","color","PaletteNeutralDark","TypographyColorDisabled","p","a","HueNeutral700","SwitchTrack","isChecked","width","Spacing7","height","Spacing4","Spacing1","borderRadius","BorderRadiusOuter","backgroundColor","HueNeutral300","transition","TransitionDurationMain","HueNeutral200","HueNeutral600","PaletteSuccessLight","SwitchThumb","thumbOffset","trackWidth","thumbWidth","transformDistance","top","left","BorderRadiusRound","HueNeutralWhite","transform","HueNeutral50","HueNeutral400","SwitchCheckMark","opacity","path","fill","HiddenCheckbox","input","cursor","zIndex","boxShadow","PalettePrimaryMain","SwitchLabel","hint","hintId","HintLinkComponent","inputId","label","children","htmlFor","id","text","LinkComponent","MemoizedSwitchLabel","displayName","Switch","idProp","isDefaultChecked","name","onChange","testId","value","t","controlledStateRef","controlledValue","uncontrolledValue","inputValues","current","checked","defaultChecked","internalSwitchChecked","setInternalSwitchChecked","Boolean","undefined","labelElementId","handleOnChange","event","preventDefault","target","sx","marginBlockEnd","Spacing2","disabled","type","readOnly","MemoizedSwitch"],"sources":["../src/Switch.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n ChangeEventHandler,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { SwitchProps as MuiSwitchProps, FormLabel } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\nimport styled from \"@emotion/styled\";\n\nimport { Box } from \"./Box\";\nimport { FieldComponentProps } from \"./FieldComponentProps\";\nimport { FieldHint } from \"./FieldHint\";\nimport { CheckedFieldProps } from \"./FormCheckedProps\";\nimport type { HtmlProps } from \"./HtmlProps\";\nimport { CheckIcon } from \"./icons.generated\";\nimport { ComponentControlledState, getControlState } from \"./inputUtils\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"./OdysseyDesignTokensContext\";\nimport { stripRem, toRem } from \"./remUtils\";\nimport { useUniqueId } from \"./useUniqueId\";\n\nconst { CONTROLLED } = ComponentControlledState;\n\nconst nonForwardedProps = [\n \"isChecked\",\n \"isDisabled\",\n \"isFullWidth\",\n \"isReadOnly\",\n \"odysseyDesignTokens\",\n];\n\nconst SwitchAndLabelContainer = styled(\"div\", {\n shouldForwardProp: (prop) => !nonForwardedProps.includes(prop),\n})<\n Pick<SwitchProps, \"isFullWidth\" | \"isDisabled\" | \"isReadOnly\"> & {\n odysseyDesignTokens: DesignTokens;\n }\n>(({ isFullWidth, odysseyDesignTokens }) => ({\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n maxWidth: isFullWidth ? \"100%\" : odysseyDesignTokens.TypographyLineLengthMax,\n}));\n\nconst SwitchContainer = styled.div({\n position: \"relative\",\n});\n\nconst StyledSwitchLabel = styled(FormLabel, {\n shouldForwardProp: (prop) => !nonForwardedProps.includes(prop),\n})<\n Pick<SwitchLabelComponentProps, \"isDisabled\" | \"isReadOnly\"> & {\n odysseyDesignTokens: DesignTokens;\n }\n>(({ isDisabled, isReadOnly, odysseyDesignTokens }) => ({\n display: \"block\",\n margin: 0,\n color: odysseyDesignTokens.PaletteNeutralDark,\n\n ...(isDisabled && {\n color: odysseyDesignTokens.TypographyColorDisabled,\n p: {\n color: odysseyDesignTokens.TypographyColorDisabled,\n },\n a: {\n color: `${odysseyDesignTokens.TypographyColorDisabled} !important`,\n },\n }),\n\n ...(isReadOnly && {\n color: odysseyDesignTokens.HueNeutral700,\n p: {\n color: odysseyDesignTokens.HueNeutral700,\n },\n a: {\n color: `${odysseyDesignTokens.HueNeutral700} !important`,\n },\n }),\n}));\n\nconst SwitchTrack = styled(\"div\", {\n shouldForwardProp: (prop) => !nonForwardedProps.includes(prop),\n})<\n Pick<SwitchProps, \"isChecked\" | \"isDisabled\" | \"isReadOnly\"> & {\n odysseyDesignTokens: DesignTokens;\n }\n>(({ isChecked, isDisabled, isReadOnly, odysseyDesignTokens }) => ({\n position: \"relative\",\n width: odysseyDesignTokens.Spacing7,\n height: `calc(${odysseyDesignTokens.Spacing4} + ${odysseyDesignTokens.Spacing1})`,\n borderRadius: odysseyDesignTokens.BorderRadiusOuter,\n backgroundColor: odysseyDesignTokens.HueNeutral300,\n transition: `background-color ${odysseyDesignTokens.TransitionDurationMain}`,\n\n ...(isDisabled && {\n backgroundColor: odysseyDesignTokens.HueNeutral200,\n }),\n\n ...(isReadOnly && {\n backgroundColor: odysseyDesignTokens.HueNeutral600,\n }),\n\n ...(isChecked &&\n !isDisabled &&\n !isReadOnly && {\n backgroundColor: odysseyDesignTokens.PaletteSuccessLight,\n }),\n}));\n\nconst SwitchThumb = styled(\"span\", {\n shouldForwardProp: (prop) => !nonForwardedProps.includes(prop),\n})<\n Pick<SwitchProps, \"isChecked\" | \"isDisabled\" | \"isReadOnly\"> & {\n odysseyDesignTokens: DesignTokens;\n }\n>(({ isChecked, isDisabled, isReadOnly, odysseyDesignTokens }) => {\n const thumbOffset = toRem(3);\n const trackWidth = stripRem(odysseyDesignTokens.Spacing7);\n const thumbWidth = stripRem(odysseyDesignTokens.Spacing4) - toRem(2);\n const transformDistance = trackWidth - thumbWidth - thumbOffset * 2;\n\n return {\n position: \"absolute\",\n top: \"50%\",\n left: `${thumbOffset}rem`,\n width: `calc(${odysseyDesignTokens.Spacing4} - ${toRem(2)}rem)`,\n height: `calc(${odysseyDesignTokens.Spacing4} - ${toRem(2)}rem)`,\n borderRadius: odysseyDesignTokens.BorderRadiusRound,\n backgroundColor: odysseyDesignTokens.HueNeutralWhite,\n transform: \"translate3d(0, -50%, 0)\",\n transition: `transform ${odysseyDesignTokens.TransitionDurationMain}`,\n\n ...(isDisabled && {\n backgroundColor: odysseyDesignTokens.HueNeutral50,\n }),\n\n ...(isReadOnly && {\n backgroundColor: odysseyDesignTokens.HueNeutral400,\n }),\n\n ...(isChecked && {\n transform: `translate3d(${transformDistance}rem, -50%, 0)`,\n }),\n };\n});\n\nconst SwitchCheckMark = styled(CheckIcon, {\n shouldForwardProp: (prop) => !nonForwardedProps.includes(prop),\n})<\n Pick<SwitchProps, \"isChecked\" | \"isDisabled\" | \"isReadOnly\"> & {\n odysseyDesignTokens: DesignTokens;\n }\n>(({ isChecked, isDisabled, isReadOnly, odysseyDesignTokens }) => ({\n position: \"absolute\",\n top: \"50%\",\n left: 3,\n width: odysseyDesignTokens.Spacing4,\n transform: \"translateY(-50%)\",\n transition: `opacity ${odysseyDesignTokens.TransitionDurationMain}`,\n opacity: 0,\n path: {\n fill: odysseyDesignTokens.HueNeutralWhite,\n },\n\n ...(isChecked && {\n opacity: 1,\n }),\n\n ...((isDisabled || isReadOnly) && {\n path: {\n fill: odysseyDesignTokens.HueNeutral50,\n },\n }),\n}));\n\nconst HiddenCheckbox = styled.input<{\n odysseyDesignTokens: DesignTokens;\n isReadOnly?: boolean;\n}>(({ odysseyDesignTokens, isReadOnly }) => ({\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n margin: 0,\n opacity: 0,\n cursor: isReadOnly ? \"default\" : \"pointer\",\n zIndex: 2,\n\n \"&:focus-visible\": {\n \"~ [data-switch-track='true']\": {\n boxShadow: `0 0 0 2px ${odysseyDesignTokens.HueNeutralWhite}, 0 0 0 4px ${odysseyDesignTokens.PalettePrimaryMain}`,\n },\n },\n}));\n\ntype OnChangeCallbackArguments = {\n checked: boolean;\n value: string;\n};\n\nexport type SwitchProps = {\n /**\n * The label text for the Switch\n */\n label: string;\n /**\n * The change event handler for the Switch\n */\n onChange?: ({ checked, value }: OnChangeCallbackArguments) => void;\n /**\n * The value attribute of the Switch\n */\n value: string;\n /**\n * Determines whether the Switch is read-only\n */\n isReadOnly?: boolean;\n} & Pick<\n FieldComponentProps,\n \"hint\" | \"HintLinkComponent\" | \"id\" | \"isFullWidth\" | \"isDisabled\" | \"name\"\n> &\n Pick<CheckedFieldProps<MuiSwitchProps>, \"isChecked\" | \"isDefaultChecked\"> &\n Pick<HtmlProps, \"testId\">;\n\ntype SwitchLabelComponentProps = {\n hint: SwitchProps[\"hint\"];\n hintId?: string;\n HintLinkComponent: SwitchProps[\"HintLinkComponent\"];\n inputId: string;\n isDisabled: SwitchProps[\"isDisabled\"];\n isFullWidth: SwitchProps[\"isFullWidth\"];\n label: SwitchProps[\"label\"];\n isReadOnly: SwitchProps[\"isReadOnly\"];\n};\n\nconst SwitchLabel = ({\n hint,\n hintId,\n HintLinkComponent,\n inputId,\n isDisabled,\n label,\n isReadOnly,\n}: SwitchLabelComponentProps) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n return (\n <>\n <StyledSwitchLabel\n htmlFor={inputId}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {label}\n {hint && (\n <FieldHint\n id={hintId}\n text={hint}\n LinkComponent={HintLinkComponent}\n />\n )}\n </StyledSwitchLabel>\n </>\n );\n};\n\nconst MemoizedSwitchLabel = memo(SwitchLabel);\nSwitchLabel.displayName = \"SwitchLabel\";\n\nconst Switch = ({\n hint,\n HintLinkComponent,\n id: idProp,\n isChecked,\n isDefaultChecked,\n isDisabled,\n isFullWidth = false,\n isReadOnly = false,\n label,\n name,\n onChange,\n testId,\n value,\n}: SwitchProps) => {\n const { t } = useTranslation();\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const controlledStateRef = useRef(\n getControlState({\n controlledValue: isChecked,\n uncontrolledValue: isDefaultChecked,\n }),\n );\n const inputValues = useMemo(() => {\n if (controlledStateRef.current === CONTROLLED) {\n return { checked: isChecked };\n }\n return { defaultChecked: isDefaultChecked };\n }, [isDefaultChecked, isChecked]);\n\n const [internalSwitchChecked, setInternalSwitchChecked] = useState(\n controlledStateRef.current === CONTROLLED\n ? Boolean(isChecked)\n : Boolean(isDefaultChecked),\n );\n\n useEffect(() => {\n if (controlledStateRef.current === CONTROLLED) {\n setInternalSwitchChecked(Boolean(isChecked));\n }\n }, [isChecked]);\n\n const inputId = useUniqueId(idProp);\n\n const hintId = hint ? `${inputId}-hint` : undefined;\n const labelElementId = `${inputId}-label`;\n\n const handleOnChange = useCallback<ChangeEventHandler<HTMLInputElement>>(\n (event) => {\n if (isReadOnly) {\n event.preventDefault();\n return;\n }\n const target = event.target;\n const { checked, value } = target;\n setInternalSwitchChecked(checked);\n onChange?.({ checked, value });\n },\n [onChange, setInternalSwitchChecked, isReadOnly],\n );\n\n return (\n <Box\n sx={{\n marginBlockEnd: odysseyDesignTokens.Spacing2,\n \"&:last-child\": {\n marginBlockEnd: 0,\n },\n }}\n >\n <SwitchAndLabelContainer\n isFullWidth={isFullWidth}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <MemoizedSwitchLabel\n hint={hint}\n hintId={hintId}\n HintLinkComponent={HintLinkComponent}\n inputId={inputId}\n isDisabled={isDisabled}\n isFullWidth={isFullWidth}\n label={label}\n isReadOnly={isReadOnly}\n />\n <SwitchContainer>\n <HiddenCheckbox\n {...inputValues}\n aria-checked={internalSwitchChecked}\n aria-describedby={hintId}\n aria-label={\n internalSwitchChecked\n ? `${label}: ${t(\"switch.active\")}`\n : `${label}: ${t(\"switch.inactive\")}`\n }\n aria-labelledby={labelElementId}\n data-se={testId}\n disabled={isDisabled}\n id={inputId}\n name={name ?? inputId}\n onChange={handleOnChange}\n odysseyDesignTokens={odysseyDesignTokens}\n type=\"checkbox\"\n value={value}\n readOnly={isReadOnly}\n isReadOnly={isReadOnly}\n />\n <SwitchTrack\n data-switch-track\n isChecked={internalSwitchChecked}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <SwitchThumb\n isChecked={internalSwitchChecked}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n odysseyDesignTokens={odysseyDesignTokens}\n />\n <SwitchCheckMark\n isChecked={internalSwitchChecked}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n odysseyDesignTokens={odysseyDesignTokens}\n />\n </SwitchTrack>\n </SwitchContainer>\n </SwitchAndLabelContainer>\n </Box>\n );\n};\n\nconst MemoizedSwitch = memo(Switch);\nMemoizedSwitch.displayName = \"Switch\";\n\nexport { MemoizedSwitch as Switch };\n"],"mappings":"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"}
|
package/dist/Tabs.js
CHANGED
|
@@ -19,26 +19,24 @@ import { useOdysseyDesignTokens } from "./OdysseyDesignTokensContext.js";
|
|
|
19
19
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
20
20
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
21
21
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
22
|
-
export const
|
|
23
|
-
|
|
22
|
+
export const TabsTestSelector = {
|
|
23
|
+
children: {
|
|
24
24
|
tabItem: {
|
|
25
|
-
|
|
25
|
+
elementSelector: {
|
|
26
26
|
method: "ByRole",
|
|
27
27
|
options: {
|
|
28
|
-
|
|
28
|
+
label: "name"
|
|
29
29
|
},
|
|
30
|
-
templateVariableNames: ["label"],
|
|
31
30
|
role: "tab"
|
|
32
31
|
}
|
|
33
32
|
}
|
|
34
33
|
},
|
|
35
|
-
|
|
34
|
+
elementSelector: {
|
|
36
35
|
method: "ByRole",
|
|
37
36
|
options: {
|
|
38
|
-
|
|
37
|
+
label: "name"
|
|
39
38
|
},
|
|
40
|
-
role: "tablist"
|
|
41
|
-
templateVariableNames: ["ariaLabel"]
|
|
39
|
+
role: "tablist"
|
|
42
40
|
}
|
|
43
41
|
};
|
|
44
42
|
const TabLabel = ({
|
package/dist/Tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","names":["memo","useCallback","useEffect","useState","TabContext","MuiTabContext","TabList","MuiTabList","TabPanel","MuiTabPanel","Badge","Box","useOdysseyDesignTokens","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","TabsTestSelectors","feature","tabItem","selector","method","options","name","templateVariableNames","role","TabLabel","label","notificationCount","notificationCountMax","tabState","value","odysseyDesignTokens","children","undefined","sx","marginInlineStart","Spacing2","badgeContent","badgeContentMax","type","Tabs","ariaLabel","initialValue","tabs","onChange","onChangeProp","setTabState","scrollButtons","setScrollButtons","event","animationFrame","cleanup","cancelAnimationFrame","document","removeEventListener","refreshScrollButtons","requestAnimationFrame","addEventListener","renderTab","tab","index","testId","isDisabled","startIcon","_Tab","disabled","icon","tabIndex","toString","variant","map","MemoizedTabs","displayName"],"sources":["../src/Tabs.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n ReactElement,\n ReactNode,\n memo,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport {\n TabContext as MuiTabContext,\n TabList as MuiTabList,\n TabListProps as MuiTabListProps,\n TabPanel as MuiTabPanel,\n} from \"@mui/lab\";\nimport { Tab as MuiTab } from \"@mui/material\";\n\nimport { Badge, BadgeProps } from \"./Badge\";\nimport { Box } from \"./Box\";\nimport { HtmlProps } from \"./HtmlProps\";\nimport { useOdysseyDesignTokens } from \"./OdysseyDesignTokensContext\";\nimport { type FeatureTestSelector } from \"./test-selectors\";\n\nexport const TabsTestSelectors = {\n feature: {\n tabItem: {\n selector: {\n method: \"ByRole\",\n options: {\n name: \"${label}\",\n },\n templateVariableNames: [\"label\"],\n role: \"tab\",\n },\n },\n },\n selector: {\n method: \"ByRole\",\n options: {\n name: \"${ariaLabel}\",\n },\n role: \"tablist\",\n templateVariableNames: [\"ariaLabel\"],\n },\n} as const satisfies FeatureTestSelector;\n\nexport type TabItemProps = {\n /**\n * The content of the Tab itself\n */\n children: ReactNode;\n /**\n * If `true`, the TabItem is disabled\n */\n isDisabled?: boolean;\n /**\n * The label text for the TabItem\n */\n label: string;\n /**\n * An optional icon to display at the start of the TabItem\n */\n startIcon?: ReactElement;\n /**\n * The value associated with the TabItem\n */\n value?: string;\n} & {\n notificationCount?: BadgeProps[\"badgeContent\"];\n notificationCountMax?: BadgeProps[\"badgeContentMax\"];\n} & Pick<HtmlProps, \"testId\" | \"translate\">;\n\nexport type TabsProps = {\n /**\n * @deprecated please use the `value` prop instead\n * When `value` is provided, `initialValue` isn't used.\n */\n initialValue?: string;\n /**\n * The TabItems to be included in the Tabs group\n */\n tabs: TabItemProps[];\n /**\n * Identifier for the selected tab.\n */\n value?: string;\n /**\n * Callback fired when the active tab is changed.\n */\n onChange?: MuiTabListProps[\"onChange\"];\n};\n\nconst TabLabel = ({\n label,\n notificationCount,\n notificationCountMax,\n tabState,\n value,\n}: Pick<\n TabItemProps,\n \"label\" | \"notificationCount\" | \"notificationCountMax\" | \"value\"\n> & {\n tabState: string;\n}) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n return (\n <>\n {label}\n {notificationCount !== undefined && notificationCount > 0 && (\n <Box\n sx={{\n marginInlineStart: notificationCount\n ? odysseyDesignTokens.Spacing2\n : 0,\n }}\n >\n <Badge\n badgeContent={notificationCount}\n badgeContentMax={notificationCountMax}\n type={value === tabState ? \"attention\" : \"default\"}\n />\n </Box>\n )}\n </>\n );\n};\n\nconst Tabs = ({\n ariaLabel,\n initialValue,\n tabs,\n value,\n onChange: onChangeProp,\n}: TabsProps & Pick<HtmlProps, \"ariaLabel\">) => {\n const [tabState, setTabState] = useState(initialValue ?? value ?? \"0\");\n /*\n The scrollButtons prop is initially set to `false`.\n It's then reset to `auto` when the document is visible.\n This prevents a rare bug where scroll buttons appear\n when the component is rendered while hidden and the\n screen is wide enough to not need scroll buttons.\n */\n const [scrollButtons, setScrollButtons] =\n useState<MuiTabListProps[\"scrollButtons\"]>(false);\n const onChange = useCallback<NonNullable<MuiTabListProps[\"onChange\"]>>(\n (event, value: string) => {\n setTabState(value);\n onChangeProp?.(event, value);\n },\n [onChangeProp],\n );\n\n useEffect(() => {\n if (value !== undefined) {\n setTabState(value);\n }\n }, [value]);\n\n // listen for visibility change to reset scroll buttons override\n useEffect(() => {\n // keep track of animation frame to cancel when needed\n let animationFrame: number;\n\n // called when unmounted or scroll buttons is reset\n const cleanup = () => {\n cancelAnimationFrame(animationFrame);\n document.removeEventListener(\"visibilitychange\", refreshScrollButtons);\n };\n\n // Reset the scroll buttons override when the document becomes visible.\n // If called, then the document is hidden because the event listener\n // is only registered if the document is hidden\n function refreshScrollButtons() {\n animationFrame = requestAnimationFrame(() => {\n cleanup();\n setScrollButtons(\"auto\");\n });\n }\n\n // don't override scroll buttons if it's already set to \"auto\"\n if (scrollButtons !== \"auto\") {\n document.addEventListener(\"visibilitychange\", refreshScrollButtons);\n }\n return () => {\n cleanup();\n };\n }, [scrollButtons]);\n\n const renderTab = useCallback(\n (tab: TabItemProps, index: number) => {\n const {\n testId,\n isDisabled,\n label,\n startIcon,\n value,\n notificationCount,\n notificationCountMax,\n } = tab;\n\n return (\n <MuiTab\n data-se={testId}\n disabled={isDisabled}\n icon={startIcon}\n tabIndex={0}\n label={\n <TabLabel\n label={label}\n notificationCount={notificationCount}\n notificationCountMax={notificationCountMax}\n tabState={tabState}\n value={value}\n />\n }\n value={value ? value : index.toString()}\n key={value ? value : index.toString()}\n />\n );\n },\n [tabState],\n );\n\n return (\n <MuiTabContext value={tabState}>\n <MuiTabList\n onChange={onChange}\n aria-label={ariaLabel}\n variant=\"scrollable\"\n scrollButtons={scrollButtons}\n >\n {tabs.map((tab, index) => renderTab(tab, index))}\n </MuiTabList>\n {tabs.map((tab, index) => (\n <MuiTabPanel\n value={tab.value ? tab.value : index.toString()}\n key={tab.value ? tab.value : index.toString()}\n >\n {tab.children}\n </MuiTabPanel>\n ))}\n </MuiTabContext>\n );\n};\n\nconst MemoizedTabs = memo(Tabs);\nMemoizedTabs.displayName = \"Tabs\";\n\nexport { MemoizedTabs as Tabs };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs.js","names":["memo","useCallback","useEffect","useState","TabContext","MuiTabContext","TabList","MuiTabList","TabPanel","MuiTabPanel","Badge","Box","useOdysseyDesignTokens","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","TabsTestSelector","children","tabItem","elementSelector","method","options","label","role","TabLabel","notificationCount","notificationCountMax","tabState","value","odysseyDesignTokens","undefined","sx","marginInlineStart","Spacing2","badgeContent","badgeContentMax","type","Tabs","ariaLabel","initialValue","tabs","onChange","onChangeProp","setTabState","scrollButtons","setScrollButtons","event","animationFrame","cleanup","cancelAnimationFrame","document","removeEventListener","refreshScrollButtons","requestAnimationFrame","addEventListener","renderTab","tab","index","testId","isDisabled","startIcon","_Tab","disabled","icon","tabIndex","toString","variant","map","MemoizedTabs","displayName"],"sources":["../src/Tabs.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n ReactElement,\n ReactNode,\n memo,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport {\n TabContext as MuiTabContext,\n TabList as MuiTabList,\n TabListProps as MuiTabListProps,\n TabPanel as MuiTabPanel,\n} from \"@mui/lab\";\nimport { Tab as MuiTab } from \"@mui/material\";\n\nimport { Badge, BadgeProps } from \"./Badge\";\nimport { Box } from \"./Box\";\nimport { HtmlProps } from \"./HtmlProps\";\nimport { useOdysseyDesignTokens } from \"./OdysseyDesignTokensContext\";\nimport { type TestSelector } from \"./test-selectors\";\n\nexport const TabsTestSelector = {\n children: {\n tabItem: {\n elementSelector: {\n method: \"ByRole\",\n options: {\n label: \"name\",\n },\n role: \"tab\",\n },\n },\n },\n elementSelector: {\n method: \"ByRole\",\n options: {\n label: \"name\",\n },\n role: \"tablist\",\n },\n} as const satisfies TestSelector;\n\nexport type TabItemProps = {\n /**\n * The content of the Tab itself\n */\n children: ReactNode;\n /**\n * If `true`, the TabItem is disabled\n */\n isDisabled?: boolean;\n /**\n * The label text for the TabItem\n */\n label: string;\n /**\n * An optional icon to display at the start of the TabItem\n */\n startIcon?: ReactElement;\n /**\n * The value associated with the TabItem\n */\n value?: string;\n} & {\n notificationCount?: BadgeProps[\"badgeContent\"];\n notificationCountMax?: BadgeProps[\"badgeContentMax\"];\n} & Pick<HtmlProps, \"testId\" | \"translate\">;\n\nexport type TabsProps = {\n /**\n * @deprecated please use the `value` prop instead\n * When `value` is provided, `initialValue` isn't used.\n */\n initialValue?: string;\n /**\n * The TabItems to be included in the Tabs group\n */\n tabs: TabItemProps[];\n /**\n * Identifier for the selected tab.\n */\n value?: string;\n /**\n * Callback fired when the active tab is changed.\n */\n onChange?: MuiTabListProps[\"onChange\"];\n};\n\nconst TabLabel = ({\n label,\n notificationCount,\n notificationCountMax,\n tabState,\n value,\n}: Pick<\n TabItemProps,\n \"label\" | \"notificationCount\" | \"notificationCountMax\" | \"value\"\n> & {\n tabState: string;\n}) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n return (\n <>\n {label}\n {notificationCount !== undefined && notificationCount > 0 && (\n <Box\n sx={{\n marginInlineStart: notificationCount\n ? odysseyDesignTokens.Spacing2\n : 0,\n }}\n >\n <Badge\n badgeContent={notificationCount}\n badgeContentMax={notificationCountMax}\n type={value === tabState ? \"attention\" : \"default\"}\n />\n </Box>\n )}\n </>\n );\n};\n\nconst Tabs = ({\n ariaLabel,\n initialValue,\n tabs,\n value,\n onChange: onChangeProp,\n}: TabsProps & Pick<HtmlProps, \"ariaLabel\">) => {\n const [tabState, setTabState] = useState(initialValue ?? value ?? \"0\");\n /*\n The scrollButtons prop is initially set to `false`.\n It's then reset to `auto` when the document is visible.\n This prevents a rare bug where scroll buttons appear\n when the component is rendered while hidden and the\n screen is wide enough to not need scroll buttons.\n */\n const [scrollButtons, setScrollButtons] =\n useState<MuiTabListProps[\"scrollButtons\"]>(false);\n const onChange = useCallback<NonNullable<MuiTabListProps[\"onChange\"]>>(\n (event, value: string) => {\n setTabState(value);\n onChangeProp?.(event, value);\n },\n [onChangeProp],\n );\n\n useEffect(() => {\n if (value !== undefined) {\n setTabState(value);\n }\n }, [value]);\n\n // listen for visibility change to reset scroll buttons override\n useEffect(() => {\n // keep track of animation frame to cancel when needed\n let animationFrame: number;\n\n // called when unmounted or scroll buttons is reset\n const cleanup = () => {\n cancelAnimationFrame(animationFrame);\n document.removeEventListener(\"visibilitychange\", refreshScrollButtons);\n };\n\n // Reset the scroll buttons override when the document becomes visible.\n // If called, then the document is hidden because the event listener\n // is only registered if the document is hidden\n function refreshScrollButtons() {\n animationFrame = requestAnimationFrame(() => {\n cleanup();\n setScrollButtons(\"auto\");\n });\n }\n\n // don't override scroll buttons if it's already set to \"auto\"\n if (scrollButtons !== \"auto\") {\n document.addEventListener(\"visibilitychange\", refreshScrollButtons);\n }\n return () => {\n cleanup();\n };\n }, [scrollButtons]);\n\n const renderTab = useCallback(\n (tab: TabItemProps, index: number) => {\n const {\n testId,\n isDisabled,\n label,\n startIcon,\n value,\n notificationCount,\n notificationCountMax,\n } = tab;\n\n return (\n <MuiTab\n data-se={testId}\n disabled={isDisabled}\n icon={startIcon}\n tabIndex={0}\n label={\n <TabLabel\n label={label}\n notificationCount={notificationCount}\n notificationCountMax={notificationCountMax}\n tabState={tabState}\n value={value}\n />\n }\n value={value ? value : index.toString()}\n key={value ? value : index.toString()}\n />\n );\n },\n [tabState],\n );\n\n return (\n <MuiTabContext value={tabState}>\n <MuiTabList\n onChange={onChange}\n aria-label={ariaLabel}\n variant=\"scrollable\"\n scrollButtons={scrollButtons}\n >\n {tabs.map((tab, index) => renderTab(tab, index))}\n </MuiTabList>\n {tabs.map((tab, index) => (\n <MuiTabPanel\n value={tab.value ? tab.value : index.toString()}\n key={tab.value ? tab.value : index.toString()}\n >\n {tab.children}\n </MuiTabPanel>\n ))}\n </MuiTabContext>\n );\n};\n\nconst MemoizedTabs = memo(Tabs);\nMemoizedTabs.displayName = \"Tabs\";\n\nexport { MemoizedTabs as Tabs };\n"],"mappings":"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"}
|