@okta/odyssey-react-mui 1.32.0 → 1.32.4
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/dist/cjs/theme/components.cjs +6 -0
- package/dist/cjs/theme/components.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNav.cjs +2 -1
- package/dist/cjs/ui-shell/SideNav/SideNav.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNavItemContent.cjs +36 -11
- package/dist/cjs/ui-shell/SideNav/SideNavItemContent.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNavItemLinkContent.cjs +3 -1
- package/dist/cjs/ui-shell/SideNav/SideNavItemLinkContent.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNavLogo.cjs +14 -2
- package/dist/cjs/ui-shell/SideNav/SideNavLogo.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNavToggleButton.cjs +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNavToggleButton.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/types.cjs.map +1 -1
- package/dist/cjs/ui-shell/UiShellContent.cjs +48 -32
- package/dist/cjs/ui-shell/UiShellContent.cjs.map +1 -1
- package/dist/cjs/ui-shell/index.cjs +9 -1
- package/dist/cjs/ui-shell/index.cjs.map +1 -1
- package/dist/cjs/useContrastMode.cjs +1 -1
- package/dist/cjs/useContrastMode.cjs.map +1 -1
- package/dist/esm/theme/components.js +6 -0
- package/dist/esm/theme/components.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNav.js +2 -1
- package/dist/esm/ui-shell/SideNav/SideNav.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNavItemContent.js +37 -12
- package/dist/esm/ui-shell/SideNav/SideNavItemContent.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNavItemLinkContent.js +3 -1
- package/dist/esm/ui-shell/SideNav/SideNavItemLinkContent.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNavLogo.js +14 -2
- package/dist/esm/ui-shell/SideNav/SideNavLogo.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNavToggleButton.js +1 -1
- package/dist/esm/ui-shell/SideNav/SideNavToggleButton.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/types.js.map +1 -1
- package/dist/esm/ui-shell/UiShellContent.js +45 -31
- package/dist/esm/ui-shell/UiShellContent.js.map +1 -1
- package/dist/esm/ui-shell/index.js +1 -0
- package/dist/esm/ui-shell/index.js.map +1 -1
- package/dist/esm/useContrastMode.js +2 -2
- package/dist/esm/useContrastMode.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.scss +1 -1
- package/dist/tsconfig.production.tsbuildinfo +1 -1
- package/dist/types/theme/components.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNav.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNavItemContent.d.ts +9 -7
- package/dist/types/ui-shell/SideNav/SideNavItemContent.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNavItemLinkContent.d.ts +1 -1
- package/dist/types/ui-shell/SideNav/SideNavItemLinkContent.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNavLogo.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/types.d.ts +5 -1
- package/dist/types/ui-shell/SideNav/types.d.ts.map +1 -1
- package/dist/types/ui-shell/UiShellContent.d.ts +8 -2
- package/dist/types/ui-shell/UiShellContent.d.ts.map +1 -1
- package/dist/types/ui-shell/index.d.ts +1 -1
- package/dist/types/ui-shell/index.d.ts.map +1 -1
- package/package.json +4 -4
- package/.browserslistrc +0 -1
- package/.svgrrc.cjs +0 -13
- package/CHANGELOG.md +0 -1490
- package/babel.config.cjs +0 -112
- package/i18n.config.json +0 -10
- package/scripts/generateIconsIndex.ts +0 -49
- package/scripts/generateTestSelectorsJson.ts +0 -33
- package/scripts/properties-to-ts.ts +0 -111
- package/src/@types/i18next.d.ts +0 -24
- package/src/@types/properties.d.ts +0 -292
- package/src/@types/react-augment.d.ts +0 -22
- package/src/Accordion.tsx +0 -117
- package/src/Autocomplete.tsx +0 -321
- package/src/Badge.tsx +0 -112
- package/src/Banner.tsx +0 -112
- package/src/Box.tsx +0 -44
- package/src/Breadcrumbs.tsx +0 -221
- package/src/Buttons/BaseButton.tsx +0 -250
- package/src/Buttons/BaseMenuButton.tsx +0 -342
- package/src/Buttons/Button.tsx +0 -30
- package/src/Buttons/ButtonContext.tsx +0 -23
- package/src/Buttons/MenuButton.tsx +0 -33
- package/src/Buttons/MenuContext.ts +0 -25
- package/src/Buttons/MenuItem.tsx +0 -103
- package/src/Buttons/index.ts +0 -25
- package/src/Callout.tsx +0 -176
- package/src/Card.tsx +0 -186
- package/src/Checkbox.tsx +0 -261
- package/src/CheckboxGroup.tsx +0 -127
- package/src/CircularProgress.tsx +0 -42
- package/src/CssBaseline.tsx +0 -20
- package/src/DataTable/DataTable.tsx +0 -968
- package/src/DataTable/DataTableRowActions.tsx +0 -132
- package/src/DataTable/DataTableSettings.tsx +0 -136
- package/src/DataTable/constants.ts +0 -13
- package/src/DataTable/index.tsx +0 -28
- package/src/DataTable/reorderDataRowsLocally.tsx +0 -48
- package/src/DataTable/useRowReordering.tsx +0 -232
- package/src/DataTable/useScrollIndication.tsx +0 -125
- package/src/DatePickers/DateField.tsx +0 -267
- package/src/DatePickers/DateFieldActionBar.tsx +0 -65
- package/src/DatePickers/DateFieldLocalizationProvider.tsx +0 -46
- package/src/DatePickers/DatePicker.test.tsx +0 -66
- package/src/DatePickers/DatePicker.tsx +0 -299
- package/src/DatePickers/DatePicker.types.d.ts +0 -14
- package/src/DatePickers/TimeZonePicker.tsx +0 -59
- package/src/DatePickers/datePickerTheme.tsx +0 -377
- package/src/DatePickers/index.ts +0 -15
- package/src/DatePickers/useDateFieldsTranslations.ts +0 -94
- package/src/DatePickers/useOdysseyDateFields.ts +0 -303
- package/src/Dialog.tsx +0 -178
- package/src/Drawer.tsx +0 -255
- package/src/EmptyState.tsx +0 -79
- package/src/ErrorMessageList.tsx +0 -56
- package/src/Field.tsx +0 -189
- package/src/FieldComponentProps.ts +0 -66
- package/src/FieldError.tsx +0 -59
- package/src/FieldHint.tsx +0 -72
- package/src/FieldLabel.tsx +0 -67
- package/src/Fieldset.tsx +0 -116
- package/src/FieldsetContext.tsx +0 -23
- package/src/FileUploader/FileUploadIllustration.tsx +0 -66
- package/src/FileUploader/FileUploadPreview.tsx +0 -151
- package/src/FileUploader/FileUploader.tsx +0 -311
- package/src/FileUploader/index.ts +0 -13
- package/src/Form.tsx +0 -185
- package/src/FormCheckedProps.ts +0 -59
- package/src/HintLink.tsx +0 -28
- package/src/HtmlProps.ts +0 -112
- package/src/IconWithTooltip.tsx +0 -90
- package/src/Link.tsx +0 -115
- package/src/MuiPropsChild.tsx +0 -42
- package/src/MuiPropsContext.ts +0 -18
- package/src/NativeSelect.tsx +0 -249
- package/src/NullElement.tsx +0 -13
- package/src/OdysseyCacheProvider.test.tsx +0 -39
- package/src/OdysseyCacheProvider.tsx +0 -86
- package/src/OdysseyDesignTokensContext.tsx +0 -23
- package/src/OdysseyProvider.tsx +0 -92
- package/src/OdysseyThemeProvider.test.tsx +0 -211
- package/src/OdysseyThemeProvider.tsx +0 -109
- package/src/OdysseyTranslationProvider.test.tsx +0 -95
- package/src/OdysseyTranslationProvider.tsx +0 -77
- package/src/OdysseyTranslationProvider.types.ts +0 -47
- package/src/Pagination/Pagination.test.tsx +0 -327
- package/src/Pagination/Pagination.tsx +0 -417
- package/src/Pagination/constants.ts +0 -13
- package/src/Pagination/index.ts +0 -15
- package/src/Pagination/usePagination.ts +0 -45
- package/src/PasswordField.tsx +0 -253
- package/src/Radio.tsx +0 -199
- package/src/RadioGroup.tsx +0 -164
- package/src/ScreenReaderText.tsx +0 -53
- package/src/SearchField.tsx +0 -240
- package/src/Select.tsx +0 -576
- package/src/Stack.tsx +0 -56
- package/src/Status.tsx +0 -67
- package/src/Surface.tsx +0 -61
- package/src/SvgIcon.ts +0 -22
- package/src/Switch.tsx +0 -425
- package/src/Tabs.tsx +0 -259
- package/src/Tag.tsx +0 -317
- package/src/TagList.tsx +0 -55
- package/src/TagListContext.tsx +0 -23
- package/src/TextField.tsx +0 -298
- package/src/Toast.tsx +0 -151
- package/src/ToastStack.tsx +0 -43
- package/src/Tooltip.tsx +0 -61
- package/src/Typography.test.tsx +0 -26
- package/src/Typography.tsx +0 -474
- package/src/createContrastColors.ts +0 -112
- package/src/createUniqueAlphabeticalId.test.ts +0 -22
- package/src/createUniqueAlphabeticalId.ts +0 -17
- package/src/createUniqueId.test.ts +0 -22
- package/src/createUniqueId.ts +0 -17
- package/src/getTypedObjectKeys.ts +0 -15
- package/src/hexToRgb.ts +0 -40
- package/src/i18n.ts +0 -110
- package/src/icons.generated/Add.tsx +0 -44
- package/src/icons.generated/AddCircle.tsx +0 -46
- package/src/icons.generated/Apps.tsx +0 -44
- package/src/icons.generated/ArrowBottom.tsx +0 -46
- package/src/icons.generated/ArrowDown.tsx +0 -46
- package/src/icons.generated/ArrowLeft.tsx +0 -46
- package/src/icons.generated/ArrowLowerLeft.tsx +0 -46
- package/src/icons.generated/ArrowLowerRight.tsx +0 -46
- package/src/icons.generated/ArrowRight.tsx +0 -46
- package/src/icons.generated/ArrowTop.tsx +0 -46
- package/src/icons.generated/ArrowUnsorted.tsx +0 -46
- package/src/icons.generated/ArrowUp.tsx +0 -46
- package/src/icons.generated/ArrowUpperLeft.tsx +0 -46
- package/src/icons.generated/ArrowUpperRight.tsx +0 -46
- package/src/icons.generated/Bug.tsx +0 -44
- package/src/icons.generated/Calendar.tsx +0 -46
- package/src/icons.generated/Call.tsx +0 -44
- package/src/icons.generated/Chat.tsx +0 -44
- package/src/icons.generated/Check.tsx +0 -44
- package/src/icons.generated/CheckCircleFilled.tsx +0 -47
- package/src/icons.generated/ChevronDown.tsx +0 -46
- package/src/icons.generated/ChevronLeft.tsx +0 -46
- package/src/icons.generated/ChevronRight.tsx +0 -46
- package/src/icons.generated/ChevronUp.tsx +0 -46
- package/src/icons.generated/Clock.tsx +0 -44
- package/src/icons.generated/Close.tsx +0 -44
- package/src/icons.generated/CloseCircleFilled.tsx +0 -47
- package/src/icons.generated/CollapseLeft.tsx +0 -46
- package/src/icons.generated/CollapseRight.tsx +0 -46
- package/src/icons.generated/Copy.tsx +0 -44
- package/src/icons.generated/Custom.tsx +0 -50
- package/src/icons.generated/DangerDiamond.tsx +0 -46
- package/src/icons.generated/DangerDiamondFilled.tsx +0 -47
- package/src/icons.generated/Delete.tsx +0 -44
- package/src/icons.generated/Deny.tsx +0 -44
- package/src/icons.generated/Devices.tsx +0 -46
- package/src/icons.generated/Directory.tsx +0 -46
- package/src/icons.generated/Documentation.tsx +0 -46
- package/src/icons.generated/Download.tsx +0 -46
- package/src/icons.generated/DragIndicator.tsx +0 -46
- package/src/icons.generated/Duo.tsx +0 -62
- package/src/icons.generated/Edit.tsx +0 -44
- package/src/icons.generated/Email.tsx +0 -49
- package/src/icons.generated/ExpandLeft.tsx +0 -46
- package/src/icons.generated/ExpandRight.tsx +0 -46
- package/src/icons.generated/ExternalLink.tsx +0 -44
- package/src/icons.generated/Fido2.tsx +0 -72
- package/src/icons.generated/Filter.tsx +0 -44
- package/src/icons.generated/Folder.tsx +0 -44
- package/src/icons.generated/Globe.tsx +0 -44
- package/src/icons.generated/GoogleAuth.tsx +0 -70
- package/src/icons.generated/Grid.tsx +0 -47
- package/src/icons.generated/Group.tsx +0 -44
- package/src/icons.generated/Hide.tsx +0 -44
- package/src/icons.generated/Home.tsx +0 -44
- package/src/icons.generated/Idp.tsx +0 -54
- package/src/icons.generated/InformationCircle.tsx +0 -47
- package/src/icons.generated/InformationCircleFilled.tsx +0 -47
- package/src/icons.generated/Link.tsx +0 -44
- package/src/icons.generated/List.tsx +0 -44
- package/src/icons.generated/Lock.tsx +0 -44
- package/src/icons.generated/More.tsx +0 -44
- package/src/icons.generated/Notification.tsx +0 -46
- package/src/icons.generated/OktaVerify.tsx +0 -46
- package/src/icons.generated/OnPremMfa.tsx +0 -52
- package/src/icons.generated/OneTimePassword.tsx +0 -65
- package/src/icons.generated/Password.tsx +0 -80
- package/src/icons.generated/Pause.tsx +0 -44
- package/src/icons.generated/QuestionCircle.tsx +0 -46
- package/src/icons.generated/QuestionCircleFilled.tsx +0 -47
- package/src/icons.generated/Refresh.tsx +0 -46
- package/src/icons.generated/Reset.tsx +0 -44
- package/src/icons.generated/Resume.tsx +0 -44
- package/src/icons.generated/Search.tsx +0 -44
- package/src/icons.generated/SecurityQuestion.tsx +0 -51
- package/src/icons.generated/Server.tsx +0 -44
- package/src/icons.generated/Settings.tsx +0 -46
- package/src/icons.generated/Show.tsx +0 -44
- package/src/icons.generated/SmartCard.tsx +0 -65
- package/src/icons.generated/Sms.tsx +0 -55
- package/src/icons.generated/Subtract.tsx +0 -46
- package/src/icons.generated/SymantecVip.tsx +0 -52
- package/src/icons.generated/Sync.tsx +0 -44
- package/src/icons.generated/ThumbsDown.tsx +0 -46
- package/src/icons.generated/ThumbsUp.tsx +0 -46
- package/src/icons.generated/Unlock.tsx +0 -44
- package/src/icons.generated/Upload.tsx +0 -44
- package/src/icons.generated/User.tsx +0 -44
- package/src/icons.generated/Video.tsx +0 -44
- package/src/icons.generated/VoiceCall.tsx +0 -62
- package/src/icons.generated/Warning.tsx +0 -46
- package/src/icons.generated/WarningFilled.tsx +0 -46
- package/src/icons.generated/Yubikey.tsx +0 -44
- package/src/icons.generated/index.ts +0 -107
- package/src/index.ts +0 -118
- package/src/inputUtils.ts +0 -80
- package/src/labs/AppTile.tsx +0 -421
- package/src/labs/DataFilters.tsx +0 -871
- package/src/labs/DataTable.tsx +0 -877
- package/src/labs/DataTablePagination.tsx +0 -88
- package/src/labs/DataView/BulkActionsMenu.tsx +0 -98
- package/src/labs/DataView/CardLayoutContent.tsx +0 -272
- package/src/labs/DataView/DataCard.tsx +0 -357
- package/src/labs/DataView/DataTable.tsx +0 -128
- package/src/labs/DataView/DataView.test.tsx +0 -1168
- package/src/labs/DataView/DataView.tsx +0 -504
- package/src/labs/DataView/DetailPanel.tsx +0 -31
- package/src/labs/DataView/LayoutSwitcher.tsx +0 -72
- package/src/labs/DataView/RowActions.tsx +0 -125
- package/src/labs/DataView/TableLayoutContent.tsx +0 -500
- package/src/labs/DataView/TableSettings.tsx +0 -144
- package/src/labs/DataView/componentTypes.ts +0 -129
- package/src/labs/DataView/constants.tsx +0 -28
- package/src/labs/DataView/dataTypes.ts +0 -83
- package/src/labs/DataView/fetchData.ts +0 -49
- package/src/labs/DataView/index.ts +0 -19
- package/src/labs/DataView/tableConstants.tsx +0 -137
- package/src/labs/DataView/testSupportData.tsx +0 -301
- package/src/labs/DataView/useFilterConversion.ts +0 -88
- package/src/labs/DatePickers/DateTimeField.tsx +0 -267
- package/src/labs/DatePickers/DateTimePicker.test.tsx +0 -70
- package/src/labs/DatePickers/DateTimePicker.tsx +0 -303
- package/src/labs/DatePickers/dateTimePickerTheme.ts +0 -216
- package/src/labs/DatePickers/index.ts +0 -13
- package/src/labs/GroupPicker.tsx +0 -261
- package/src/labs/OdysseyPickers/ComposablePicker.test.tsx +0 -32
- package/src/labs/OdysseyPickers/ComposablePicker.tsx +0 -188
- package/src/labs/OdysseyPickers/Picker.tsx +0 -381
- package/src/labs/OdysseyPickers/PickerVirtualizationListBox.tsx +0 -192
- package/src/labs/OdysseyPickers/PickerWithOptionAdornment.tsx +0 -429
- package/src/labs/OdysseyPickers/index.ts +0 -15
- package/src/labs/PageTemplate/Layout.tsx +0 -85
- package/src/labs/PageTemplate/PageTemplate.tsx +0 -234
- package/src/labs/PageTemplate/index.ts +0 -14
- package/src/labs/PaginatedTable.tsx +0 -290
- package/src/labs/README.md +0 -46
- package/src/labs/StaticTable.tsx +0 -131
- package/src/labs/UserProfile.tsx +0 -104
- package/src/labs/UserProfileMenuButton.tsx +0 -86
- package/src/labs/index.ts +0 -47
- package/src/labs/materialReactTableTypes.tsx +0 -19
- package/src/properties/odyssey-react-mui.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_cs.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_da.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_de.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_el.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_es.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_fi.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_fr.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_ht.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_hu.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_id.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_it.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_ja.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_ko.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_ms.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_nb.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_nl_NL.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_ok_PL.properties +0 -126
- package/src/properties/translations/odyssey-react-mui_ok_SK.properties +0 -126
- package/src/properties/translations/odyssey-react-mui_pl.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_pt_BR.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_ro.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_ru.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_sv.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_th.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_tr.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_uk.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_vi.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_zh_CN.properties +0 -140
- package/src/properties/translations/odyssey-react-mui_zh_TW.properties +0 -140
- package/src/properties/ts/odyssey-react-mui.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_cs.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_da.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_de.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_el.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_es.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_fi.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_fr.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_ht.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_hu.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_id.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_it.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_ja.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_ko.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_ms.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_nb.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_nl_NL.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_ok_PL.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_ok_SK.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_pl.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_pt_BR.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_ro.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_ru.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_sv.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_th.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_tr.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_uk.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_vi.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_zh_CN.ts +0 -1
- package/src/properties/ts/odyssey-react-mui_zh_TW.ts +0 -1
- package/src/remUtils.ts +0 -27
- package/src/shadow-dom/index.ts +0 -13
- package/src/shadow-dom/shadow-dom.test.ts +0 -24
- package/src/shadow-dom/shadow-dom.ts +0 -54
- package/src/test-selectors/getByQuerySelector.ts +0 -176
- package/src/test-selectors/getComputedAccessibleErrorMessageText.ts +0 -52
- package/src/test-selectors/getComputedAccessibleText.ts +0 -36
- package/src/test-selectors/index.ts +0 -15
- package/src/test-selectors/interpolateString.ts +0 -41
- package/src/test-selectors/linkedHtmlSelectors.ts +0 -73
- package/src/test-selectors/queryOdysseySelector.ts +0 -36
- package/src/test-selectors/querySelector.ts +0 -249
- package/src/test-selectors/sanityChecks.ts +0 -53
- package/src/test-selectors/testSelector.ts +0 -143
- package/src/theme/components.tsx +0 -3275
- package/src/theme/components.types.ts +0 -111
- package/src/theme/createOdysseyMuiTheme.ts +0 -54
- package/src/theme/index.ts +0 -13
- package/src/theme/mixins.ts +0 -29
- package/src/theme/mixins.types.ts +0 -31
- package/src/theme/palette.ts +0 -112
- package/src/theme/palette.types.ts +0 -24
- package/src/theme/shape.ts +0 -31
- package/src/theme/spacing.ts +0 -34
- package/src/theme/theme.ts +0 -13
- package/src/theme/typography.ts +0 -137
- package/src/theme/typography.types.ts +0 -41
- package/src/theme/useContrastMode.test.tsx +0 -504
- package/src/ui-shell/AppSwitcher/AppSwitcher.tsx +0 -94
- package/src/ui-shell/AppSwitcher/AppSwitcherApp.tsx +0 -146
- package/src/ui-shell/AppSwitcher/OktaAura.tsx +0 -50
- package/src/ui-shell/AppSwitcher/index.ts +0 -13
- package/src/ui-shell/SideNav/CollapseIcon.tsx +0 -34
- package/src/ui-shell/SideNav/HandleIcon.tsx +0 -35
- package/src/ui-shell/SideNav/NavAccordion.tsx +0 -243
- package/src/ui-shell/SideNav/OktaLogo.tsx +0 -34
- package/src/ui-shell/SideNav/SideNav.test.tsx +0 -326
- package/src/ui-shell/SideNav/SideNav.tsx +0 -810
- package/src/ui-shell/SideNav/SideNavFooterContent.tsx +0 -85
- package/src/ui-shell/SideNav/SideNavHeader.tsx +0 -134
- package/src/ui-shell/SideNav/SideNavItemContent.tsx +0 -402
- package/src/ui-shell/SideNav/SideNavItemContentContext.tsx +0 -29
- package/src/ui-shell/SideNav/SideNavItemLinkContent.tsx +0 -90
- package/src/ui-shell/SideNav/SideNavLogo.tsx +0 -65
- package/src/ui-shell/SideNav/SideNavToggleButton.tsx +0 -272
- package/src/ui-shell/SideNav/SortableList/SortableItem.tsx +0 -237
- package/src/ui-shell/SideNav/SortableList/SortableList.tsx +0 -132
- package/src/ui-shell/SideNav/SortableList/SortableOverlay.tsx +0 -34
- package/src/ui-shell/SideNav/index.ts +0 -16
- package/src/ui-shell/SideNav/types.ts +0 -224
- package/src/ui-shell/TopNav/TopNav.tsx +0 -109
- package/src/ui-shell/TopNav/TopNavLinksList.tsx +0 -68
- package/src/ui-shell/TopNav/TopNavListItem.tsx +0 -209
- package/src/ui-shell/TopNav/index.ts +0 -13
- package/src/ui-shell/UiShell.test.tsx +0 -366
- package/src/ui-shell/UiShell.tsx +0 -153
- package/src/ui-shell/UiShellContent.tsx +0 -350
- package/src/ui-shell/UiShellProvider.tsx +0 -103
- package/src/ui-shell/bufferLatest.test.ts +0 -79
- package/src/ui-shell/bufferLatest.ts +0 -64
- package/src/ui-shell/createMessageBus.test.ts +0 -115
- package/src/ui-shell/createMessageBus.ts +0 -53
- package/src/ui-shell/createStore.test.ts +0 -103
- package/src/ui-shell/createStore.ts +0 -37
- package/src/ui-shell/index.ts +0 -21
- package/src/ui-shell/renderUiShell.test.tsx +0 -203
- package/src/ui-shell/renderUiShell.tsx +0 -158
- package/src/ui-shell/useHasUiShell.ts +0 -25
- package/src/ui-shell/useScrollState.ts +0 -59
- package/src/useAutocomplete.tsx +0 -184
- package/src/useContrastMode.tsx +0 -143
- package/src/useNormalizedKey.ts +0 -17
- package/src/useUniqueAlphabeticalId.ts +0 -21
- package/src/useUniqueId.ts +0 -21
- package/src/web-component/createReactRootElements.test.ts +0 -40
- package/src/web-component/createReactRootElements.ts +0 -39
- package/src/web-component/index.ts +0 -13
- package/src/web-component/renderReactInWebComponent.test.tsx +0 -128
- package/src/web-component/renderReactInWebComponent.ts +0 -135
- package/tsconfig.json +0 -16
- package/tsconfig.production.json +0 -13
- package/vitest.config.ts +0 -36
- package/vitest.setup.ts +0 -32
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
3
|
-
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
4
|
-
*
|
|
5
|
-
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
7
|
-
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
8
|
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
-
*
|
|
10
|
-
* See the License for the specific language governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
declare global {
|
|
14
|
-
// eslint-disable-next-line no-var
|
|
15
|
-
var cspNonce: string; // Adding types to `globalThis` requires we use `var`.
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
import createCache, { StylisPlugin } from "@emotion/cache";
|
|
19
|
-
import { memo, useMemo, ReactNode } from "react";
|
|
20
|
-
import { useUniqueAlphabeticalId } from "./useUniqueAlphabeticalId.js";
|
|
21
|
-
import { CacheProvider } from "@emotion/react";
|
|
22
|
-
|
|
23
|
-
export type OdysseyCacheProviderProps = {
|
|
24
|
-
children: ReactNode;
|
|
25
|
-
/**
|
|
26
|
-
* Emotion caches styles into the style element.
|
|
27
|
-
* When enabling this prop, Emotion caches the styles at this element, rather than in <head>.
|
|
28
|
-
* @deprecated Use `EmotionRootElement` instead. This was incorrectly configured as an `HTMLStyleElement`, but then we're rendering `<style>` inside `<style>`. We need this to be a `<div>` instead.
|
|
29
|
-
*/
|
|
30
|
-
emotionRoot?: HTMLStyleElement;
|
|
31
|
-
/**
|
|
32
|
-
* Emotion adds `<style>` elements into this DOM node. Normally, Emotion puts these in `document.head`.
|
|
33
|
-
* This is useful if you want to render into a Shadow DOM or iframe.
|
|
34
|
-
*/
|
|
35
|
-
emotionRootElement?: HTMLElement;
|
|
36
|
-
hasShadowDom?: boolean;
|
|
37
|
-
nonce?: string;
|
|
38
|
-
/**
|
|
39
|
-
* Emotion renders into this HTML element.
|
|
40
|
-
* When enabling this prop, Emotion renders at the top of this component rather than the bottom like it does in the HTML `<head>`.
|
|
41
|
-
* @deprecated Will be removed in a future Odyssey version. Use `hasShadowDomElement` instead.
|
|
42
|
-
*/
|
|
43
|
-
shadowDomElement?: HTMLDivElement | HTMLElement;
|
|
44
|
-
stylisPlugins?: StylisPlugin[];
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const OdysseyCacheProvider = ({
|
|
48
|
-
children,
|
|
49
|
-
emotionRoot,
|
|
50
|
-
emotionRootElement,
|
|
51
|
-
hasShadowDom: hasShadowDomProp,
|
|
52
|
-
nonce,
|
|
53
|
-
shadowDomElement,
|
|
54
|
-
stylisPlugins,
|
|
55
|
-
}: OdysseyCacheProviderProps) => {
|
|
56
|
-
const uniqueAlphabeticalId = useUniqueAlphabeticalId();
|
|
57
|
-
|
|
58
|
-
const hasShadowDom = hasShadowDomProp || shadowDomElement;
|
|
59
|
-
|
|
60
|
-
const emotionCache = useMemo(() => {
|
|
61
|
-
return createCache({
|
|
62
|
-
...((emotionRootElement || emotionRoot) && {
|
|
63
|
-
container: emotionRootElement || emotionRoot,
|
|
64
|
-
}),
|
|
65
|
-
key: uniqueAlphabeticalId,
|
|
66
|
-
nonce: nonce ?? globalThis.cspNonce,
|
|
67
|
-
prepend: true,
|
|
68
|
-
speedy: hasShadowDom ? false : true, // <-- Needs to be set to false when shadow-dom is used! https://github.com/emotion-js/emotion/issues/2053#issuecomment-713429122
|
|
69
|
-
...(stylisPlugins && { stylisPlugins }),
|
|
70
|
-
});
|
|
71
|
-
}, [
|
|
72
|
-
emotionRoot,
|
|
73
|
-
emotionRootElement,
|
|
74
|
-
hasShadowDom,
|
|
75
|
-
nonce,
|
|
76
|
-
stylisPlugins,
|
|
77
|
-
uniqueAlphabeticalId,
|
|
78
|
-
]);
|
|
79
|
-
|
|
80
|
-
return <CacheProvider value={emotionCache}>{children}</CacheProvider>;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const MemoizedOdysseyCacheProvider = memo(OdysseyCacheProvider);
|
|
84
|
-
MemoizedOdysseyCacheProvider.displayName = "OdysseyCacheProvider";
|
|
85
|
-
|
|
86
|
-
export { MemoizedOdysseyCacheProvider as OdysseyCacheProvider };
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
3
|
-
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
4
|
-
*
|
|
5
|
-
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
7
|
-
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
8
|
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
-
*
|
|
10
|
-
* See the License for the specific language governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import * as odysseyDesignTokens from "@okta/odyssey-design-tokens";
|
|
14
|
-
import { createContext, useContext } from "react";
|
|
15
|
-
|
|
16
|
-
export type DesignTokens = typeof odysseyDesignTokens;
|
|
17
|
-
export const defaultOdysseyDesignTokensContextValue = odysseyDesignTokens;
|
|
18
|
-
export const OdysseyDesignTokensContext = createContext(
|
|
19
|
-
defaultOdysseyDesignTokensContextValue,
|
|
20
|
-
);
|
|
21
|
-
|
|
22
|
-
export const useOdysseyDesignTokens = () =>
|
|
23
|
-
useContext(OdysseyDesignTokensContext);
|
package/src/OdysseyProvider.tsx
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
3
|
-
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
4
|
-
*
|
|
5
|
-
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
7
|
-
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
8
|
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
-
*
|
|
10
|
-
* See the License for the specific language governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { memo, ReactNode } from "react";
|
|
14
|
-
import { ScopedCssBaseline } from "@mui/material";
|
|
15
|
-
|
|
16
|
-
import {
|
|
17
|
-
OdysseyCacheProvider,
|
|
18
|
-
OdysseyCacheProviderProps,
|
|
19
|
-
} from "./OdysseyCacheProvider.js";
|
|
20
|
-
import {
|
|
21
|
-
OdysseyThemeProvider,
|
|
22
|
-
OdysseyThemeProviderProps,
|
|
23
|
-
} from "./OdysseyThemeProvider.js";
|
|
24
|
-
import {
|
|
25
|
-
OdysseyTranslationProvider,
|
|
26
|
-
OdysseyTranslationProviderProps,
|
|
27
|
-
} from "./OdysseyTranslationProvider.js";
|
|
28
|
-
import { DefaultSupportedLanguages } from "./OdysseyTranslationProvider.types.js";
|
|
29
|
-
const scopedCssBaselineStyles = {
|
|
30
|
-
height: "inherit",
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
export type OdysseyProviderProps<
|
|
34
|
-
SupportedLanguages extends string = DefaultSupportedLanguages,
|
|
35
|
-
> = OdysseyCacheProviderProps &
|
|
36
|
-
OdysseyThemeProviderProps &
|
|
37
|
-
OdysseyTranslationProviderProps<SupportedLanguages> & {
|
|
38
|
-
children: ReactNode;
|
|
39
|
-
/**
|
|
40
|
-
* Whether to emit the ScopedCssBaseline. Defaults to true.
|
|
41
|
-
*/
|
|
42
|
-
hasScopedCssBaseline?: boolean;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
const OdysseyProvider = <SupportedLanguages extends string>({
|
|
46
|
-
children,
|
|
47
|
-
contrastMode,
|
|
48
|
-
designTokensOverride,
|
|
49
|
-
emotionRoot,
|
|
50
|
-
emotionRootElement,
|
|
51
|
-
languageCode,
|
|
52
|
-
nonce,
|
|
53
|
-
shadowDomElement,
|
|
54
|
-
shadowRootElement,
|
|
55
|
-
stylisPlugins,
|
|
56
|
-
themeOverride,
|
|
57
|
-
translationOverrides,
|
|
58
|
-
hasScopedCssBaseline = true,
|
|
59
|
-
}: OdysseyProviderProps<SupportedLanguages>) => (
|
|
60
|
-
<OdysseyCacheProvider
|
|
61
|
-
emotionRootElement={emotionRootElement || emotionRoot}
|
|
62
|
-
hasShadowDom={Boolean(shadowRootElement || shadowDomElement)}
|
|
63
|
-
nonce={nonce}
|
|
64
|
-
stylisPlugins={stylisPlugins}
|
|
65
|
-
>
|
|
66
|
-
<OdysseyThemeProvider
|
|
67
|
-
contrastMode={contrastMode}
|
|
68
|
-
designTokensOverride={designTokensOverride}
|
|
69
|
-
shadowDomElement={shadowDomElement}
|
|
70
|
-
shadowRootElement={shadowRootElement}
|
|
71
|
-
themeOverride={themeOverride}
|
|
72
|
-
>
|
|
73
|
-
<OdysseyTranslationProvider<SupportedLanguages>
|
|
74
|
-
languageCode={languageCode}
|
|
75
|
-
translationOverrides={translationOverrides}
|
|
76
|
-
>
|
|
77
|
-
{hasScopedCssBaseline ? (
|
|
78
|
-
<ScopedCssBaseline sx={scopedCssBaselineStyles}>
|
|
79
|
-
{children}
|
|
80
|
-
</ScopedCssBaseline>
|
|
81
|
-
) : (
|
|
82
|
-
children
|
|
83
|
-
)}
|
|
84
|
-
</OdysseyTranslationProvider>
|
|
85
|
-
</OdysseyThemeProvider>
|
|
86
|
-
</OdysseyCacheProvider>
|
|
87
|
-
);
|
|
88
|
-
OdysseyProvider.displayName = "OdysseyProvider";
|
|
89
|
-
|
|
90
|
-
const MemoizedOdysseyProvider = memo(OdysseyProvider) as typeof OdysseyProvider;
|
|
91
|
-
|
|
92
|
-
export { MemoizedOdysseyProvider as OdysseyProvider };
|
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
3
|
-
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
4
|
-
*
|
|
5
|
-
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
7
|
-
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
8
|
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
-
*
|
|
10
|
-
* See the License for the specific language governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { render, waitFor, act } from "@testing-library/react";
|
|
14
|
-
import { useTheme } from "@mui/material/styles";
|
|
15
|
-
import * as Tokens from "@okta/odyssey-design-tokens";
|
|
16
|
-
import { useContext } from "react";
|
|
17
|
-
import { MockInstance } from "vitest";
|
|
18
|
-
|
|
19
|
-
import { useOdysseyDesignTokens } from "./OdysseyDesignTokensContext.js";
|
|
20
|
-
import { OdysseyThemeProvider } from "./OdysseyThemeProvider.js";
|
|
21
|
-
import { ContrastModeContext } from "./useContrastMode.js";
|
|
22
|
-
|
|
23
|
-
describe("OdysseyThemeProvider", () => {
|
|
24
|
-
afterEach(() => {
|
|
25
|
-
vi.clearAllMocks();
|
|
26
|
-
document.documentElement.style.setProperty("backgroundColor", null);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
describe("contrast mode handling", () => {
|
|
30
|
-
let getComputedStyleSpy: MockInstance<typeof window.getComputedStyle>;
|
|
31
|
-
|
|
32
|
-
beforeEach(() => {
|
|
33
|
-
getComputedStyleSpy = vi
|
|
34
|
-
.spyOn(window, "getComputedStyle")
|
|
35
|
-
.mockImplementation(
|
|
36
|
-
() =>
|
|
37
|
-
({ backgroundColor: Tokens.HueNeutral50 }) as CSSStyleDeclaration,
|
|
38
|
-
);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
afterEach(() => {
|
|
42
|
-
getComputedStyleSpy.mockRestore();
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it("should update contrast mode based on background color changes", async () => {
|
|
46
|
-
const TestComponent = () => {
|
|
47
|
-
const { contrastMode } = useContext(ContrastModeContext);
|
|
48
|
-
return <div data-testid="container">{contrastMode}</div>;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
const { getByTestId } = render(
|
|
52
|
-
<OdysseyThemeProvider>
|
|
53
|
-
<TestComponent />
|
|
54
|
-
</OdysseyThemeProvider>,
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
const testContainer = getByTestId("container");
|
|
58
|
-
|
|
59
|
-
act(() => {
|
|
60
|
-
testContainer.style.backgroundColor = Tokens.HueNeutral50;
|
|
61
|
-
const event = new Event("transitionend");
|
|
62
|
-
Object.defineProperty(event, "propertyName", {
|
|
63
|
-
value: "background-color",
|
|
64
|
-
});
|
|
65
|
-
testContainer.dispatchEvent(event);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
await waitFor(() => {
|
|
69
|
-
expect(getByTestId("container").textContent).toBe("highContrast");
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
describe("theme customization", () => {
|
|
75
|
-
it("should merge theme overrides with base theme", () => {
|
|
76
|
-
const themeOverride = {
|
|
77
|
-
palette: {
|
|
78
|
-
primary: {
|
|
79
|
-
main: "#000000",
|
|
80
|
-
},
|
|
81
|
-
},
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
const TestComponent = () => {
|
|
85
|
-
const theme = useTheme();
|
|
86
|
-
return <div data-testid="theme-test">{theme.palette.primary.main}</div>;
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
const { getByTestId } = render(
|
|
90
|
-
<OdysseyThemeProvider themeOverride={themeOverride}>
|
|
91
|
-
<TestComponent />
|
|
92
|
-
</OdysseyThemeProvider>,
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
expect(getByTestId("theme-test").textContent).toBe("#000000");
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it("should merge design tokens override with base tokens", () => {
|
|
99
|
-
const designTokensOverride = {
|
|
100
|
-
HueNeutral50: "#654321",
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
const TestComponent = () => {
|
|
104
|
-
const tokens = useOdysseyDesignTokens();
|
|
105
|
-
return <div data-testid="token-test">{tokens.HueNeutral50}</div>;
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
const { getByTestId } = render(
|
|
109
|
-
<OdysseyThemeProvider designTokensOverride={designTokensOverride}>
|
|
110
|
-
<TestComponent />
|
|
111
|
-
</OdysseyThemeProvider>,
|
|
112
|
-
);
|
|
113
|
-
|
|
114
|
-
expect(getByTestId("token-test").textContent).toBe("#654321");
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
it("should properly handle nested providers with different configurations", () => {
|
|
118
|
-
const outerThemeOverride = {
|
|
119
|
-
palette: {
|
|
120
|
-
primary: {
|
|
121
|
-
main: "#111111",
|
|
122
|
-
},
|
|
123
|
-
},
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
const innerThemeOverride = {
|
|
127
|
-
palette: {
|
|
128
|
-
primary: {
|
|
129
|
-
main: "#222222",
|
|
130
|
-
},
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
const TestComponent = () => {
|
|
135
|
-
const theme = useTheme();
|
|
136
|
-
return (
|
|
137
|
-
<div data-testid="nested-test">{theme.palette.primary.main}</div>
|
|
138
|
-
);
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
const { getByTestId } = render(
|
|
142
|
-
<OdysseyThemeProvider themeOverride={outerThemeOverride}>
|
|
143
|
-
<OdysseyThemeProvider themeOverride={innerThemeOverride}>
|
|
144
|
-
<TestComponent />
|
|
145
|
-
</OdysseyThemeProvider>
|
|
146
|
-
</OdysseyThemeProvider>,
|
|
147
|
-
);
|
|
148
|
-
|
|
149
|
-
expect(getByTestId("nested-test").textContent).toBe("#222222");
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
describe("shadow DOM configuration", () => {
|
|
154
|
-
let shadowRoot: HTMLDivElement;
|
|
155
|
-
let shadowDom: HTMLDivElement;
|
|
156
|
-
|
|
157
|
-
beforeEach(() => {
|
|
158
|
-
shadowRoot = document.createElement("div");
|
|
159
|
-
shadowDom = document.createElement("div");
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
it("should properly configure shadow root element for MUI components", () => {
|
|
163
|
-
const TestComponent = () => {
|
|
164
|
-
const theme = useTheme();
|
|
165
|
-
return (
|
|
166
|
-
<div data-testid="shadow-root-test">
|
|
167
|
-
{theme.components?.MuiPopover?.defaultProps?.container ===
|
|
168
|
-
shadowRoot
|
|
169
|
-
? "shadow-root-configured"
|
|
170
|
-
: "no-shadow-root"}
|
|
171
|
-
</div>
|
|
172
|
-
);
|
|
173
|
-
};
|
|
174
|
-
|
|
175
|
-
const { getByTestId } = render(
|
|
176
|
-
<OdysseyThemeProvider shadowRootElement={shadowRoot}>
|
|
177
|
-
<TestComponent />
|
|
178
|
-
</OdysseyThemeProvider>,
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
expect(getByTestId("shadow-root-test").textContent).toBe(
|
|
182
|
-
"shadow-root-configured",
|
|
183
|
-
);
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
it("should handle both shadowRootElement and deprecated shadowDomElement", () => {
|
|
187
|
-
const TestComponent = () => {
|
|
188
|
-
const theme = useTheme();
|
|
189
|
-
return (
|
|
190
|
-
<div data-testid="shadow-test">
|
|
191
|
-
{theme.components?.MuiPopover?.defaultProps?.container ===
|
|
192
|
-
shadowRoot
|
|
193
|
-
? "using-shadow-root"
|
|
194
|
-
: "using-shadow-dom"}
|
|
195
|
-
</div>
|
|
196
|
-
);
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
const { getByTestId } = render(
|
|
200
|
-
<OdysseyThemeProvider
|
|
201
|
-
shadowRootElement={shadowRoot}
|
|
202
|
-
shadowDomElement={shadowDom}
|
|
203
|
-
>
|
|
204
|
-
<TestComponent />
|
|
205
|
-
</OdysseyThemeProvider>,
|
|
206
|
-
);
|
|
207
|
-
|
|
208
|
-
expect(getByTestId("shadow-test").textContent).toBe("using-shadow-root");
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
});
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
3
|
-
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
4
|
-
*
|
|
5
|
-
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
7
|
-
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
8
|
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
-
*
|
|
10
|
-
* See the License for the specific language governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { memo, ReactNode, useMemo } from "react";
|
|
14
|
-
import {
|
|
15
|
-
createTheme,
|
|
16
|
-
ThemeProvider as MuiThemeProvider,
|
|
17
|
-
} from "@mui/material/styles";
|
|
18
|
-
import { ThemeOptions } from "@mui/material";
|
|
19
|
-
import { deepmerge } from "@mui/utils";
|
|
20
|
-
import styled from "@emotion/styled";
|
|
21
|
-
import { createOdysseyMuiTheme, DesignTokensOverride } from "./theme/index.js";
|
|
22
|
-
import * as Tokens from "@okta/odyssey-design-tokens";
|
|
23
|
-
|
|
24
|
-
import {
|
|
25
|
-
ContrastMode,
|
|
26
|
-
ContrastModeContext,
|
|
27
|
-
useContrastMode,
|
|
28
|
-
} from "./useContrastMode.js";
|
|
29
|
-
import { OdysseyDesignTokensContext } from "./OdysseyDesignTokensContext.js";
|
|
30
|
-
|
|
31
|
-
export type OdysseyThemeProviderProps = {
|
|
32
|
-
children: ReactNode;
|
|
33
|
-
contrastMode?: ContrastMode;
|
|
34
|
-
designTokensOverride?: DesignTokensOverride;
|
|
35
|
-
/** @deprecated Use shadowRootElement instead */
|
|
36
|
-
shadowDomElement?: HTMLDivElement | HTMLElement;
|
|
37
|
-
shadowRootElement?: HTMLDivElement | HTMLElement;
|
|
38
|
-
themeOverride?: ThemeOptions;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const StyledContrastContainerStyles = styled("div")(() => ({
|
|
42
|
-
height: "inherit",
|
|
43
|
-
}));
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* This function doesn't include the Emotion Cache or Translations. You should probably be using `OdysseyProvider`.
|
|
47
|
-
*
|
|
48
|
-
* Some teams have a need to wrap separately (SIW), but most teams will never need to use this explicitly.
|
|
49
|
-
*/
|
|
50
|
-
const OdysseyThemeProvider = ({
|
|
51
|
-
children,
|
|
52
|
-
contrastMode: explicitContrastMode,
|
|
53
|
-
designTokensOverride,
|
|
54
|
-
shadowDomElement,
|
|
55
|
-
shadowRootElement,
|
|
56
|
-
themeOverride,
|
|
57
|
-
}: OdysseyThemeProviderProps) => {
|
|
58
|
-
const { contrastMode, contrastContainerRef } = useContrastMode({
|
|
59
|
-
contrastMode: explicitContrastMode,
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
const odysseyTokens = useMemo(
|
|
63
|
-
() => ({ ...Tokens, ...designTokensOverride }),
|
|
64
|
-
[designTokensOverride],
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
const effectiveShadowRootElement = shadowRootElement || shadowDomElement;
|
|
68
|
-
|
|
69
|
-
const odysseyTheme = useMemo(
|
|
70
|
-
() =>
|
|
71
|
-
createOdysseyMuiTheme({
|
|
72
|
-
contrastMode,
|
|
73
|
-
odysseyTokens,
|
|
74
|
-
shadowRootElement: effectiveShadowRootElement,
|
|
75
|
-
}),
|
|
76
|
-
[contrastMode, odysseyTokens, effectiveShadowRootElement],
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
const customOdysseyTheme = useMemo(
|
|
80
|
-
() => createTheme(deepmerge(odysseyTheme, themeOverride || {})),
|
|
81
|
-
[odysseyTheme, themeOverride],
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
const contrastModeProviderValue = useMemo(
|
|
85
|
-
() => ({
|
|
86
|
-
contrastMode,
|
|
87
|
-
}),
|
|
88
|
-
[contrastMode],
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
return (
|
|
92
|
-
<StyledContrastContainerStyles ref={contrastContainerRef}>
|
|
93
|
-
<ContrastModeContext.Provider value={contrastModeProviderValue}>
|
|
94
|
-
<MuiThemeProvider theme={customOdysseyTheme}>
|
|
95
|
-
<OdysseyDesignTokensContext.Provider value={odysseyTokens}>
|
|
96
|
-
{children}
|
|
97
|
-
</OdysseyDesignTokensContext.Provider>
|
|
98
|
-
</MuiThemeProvider>
|
|
99
|
-
</ContrastModeContext.Provider>
|
|
100
|
-
</StyledContrastContainerStyles>
|
|
101
|
-
);
|
|
102
|
-
};
|
|
103
|
-
OdysseyThemeProvider.displayName = "OdysseyThemeProvider";
|
|
104
|
-
|
|
105
|
-
const MemoizedOdysseyThemeProvider = memo(
|
|
106
|
-
OdysseyThemeProvider,
|
|
107
|
-
) as typeof OdysseyThemeProvider;
|
|
108
|
-
|
|
109
|
-
export { MemoizedOdysseyThemeProvider as OdysseyThemeProvider };
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
3
|
-
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
4
|
-
*
|
|
5
|
-
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
7
|
-
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
8
|
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
-
*
|
|
10
|
-
* See the License for the specific language governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { render, screen } from "@testing-library/react";
|
|
14
|
-
import { OdysseyTranslationProvider } from "./OdysseyTranslationProvider.js";
|
|
15
|
-
import { odysseyTranslate } from "./i18n.js";
|
|
16
|
-
import { TextField } from "./TextField.js";
|
|
17
|
-
|
|
18
|
-
describe("OdysseyTranslationProvider", () => {
|
|
19
|
-
it("defaults to 'en' translation bundle", () => {
|
|
20
|
-
render(
|
|
21
|
-
<OdysseyTranslationProvider>
|
|
22
|
-
<span>{odysseyTranslate("fieldlabel.optional.text")}</span>
|
|
23
|
-
</OdysseyTranslationProvider>,
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
expect(screen.getByText("Optional"));
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it("defaults to 'en' for unsupported langauges", () => {
|
|
30
|
-
render(
|
|
31
|
-
<OdysseyTranslationProvider languageCode="test">
|
|
32
|
-
<span>{odysseyTranslate("fieldlabel.optional.text")}</span>
|
|
33
|
-
</OdysseyTranslationProvider>,
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
expect(screen.getByText("Optional"));
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it("allows translations for non-okta supported languages for existing keys", () => {
|
|
40
|
-
const translationOverrides = {
|
|
41
|
-
ar: {
|
|
42
|
-
"fieldlabel.optional.text":
|
|
43
|
-
"\u063A\u064A\u0631 \u0645\u0637\u0644\u0648\u0628",
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
render(
|
|
48
|
-
<OdysseyTranslationProvider<"ar">
|
|
49
|
-
languageCode="ar"
|
|
50
|
-
translationOverrides={translationOverrides}
|
|
51
|
-
>
|
|
52
|
-
<TextField label="" isOptional />
|
|
53
|
-
</OdysseyTranslationProvider>,
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
expect(
|
|
57
|
-
screen.getByText("\u063A\u064A\u0631 \u0645\u0637\u0644\u0648\u0628"),
|
|
58
|
-
);
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it("can modify a translation bundle with translantionOverrides", () => {
|
|
62
|
-
const translationOverrides = {
|
|
63
|
-
en: {
|
|
64
|
-
"fieldlabel.optional.text": "Non Required",
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
render(
|
|
69
|
-
<OdysseyTranslationProvider translationOverrides={translationOverrides}>
|
|
70
|
-
<TextField label="" isOptional />
|
|
71
|
-
</OdysseyTranslationProvider>,
|
|
72
|
-
);
|
|
73
|
-
|
|
74
|
-
expect(screen.getByText("Non Required"));
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
it("can change the displayed language with languageCode", () => {
|
|
78
|
-
const translationOverrides = {
|
|
79
|
-
fr: {
|
|
80
|
-
"fieldlabel.optional.text": "Optionnel",
|
|
81
|
-
},
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
render(
|
|
85
|
-
<OdysseyTranslationProvider
|
|
86
|
-
languageCode="fr"
|
|
87
|
-
translationOverrides={translationOverrides}
|
|
88
|
-
>
|
|
89
|
-
<TextField label="" isOptional />
|
|
90
|
-
</OdysseyTranslationProvider>,
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
expect(screen.getByText("Optionnel"));
|
|
94
|
-
});
|
|
95
|
-
});
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2023-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
3
|
-
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
4
|
-
*
|
|
5
|
-
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
7
|
-
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
8
|
-
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
9
|
-
*
|
|
10
|
-
* See the License for the specific language governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { ReactNode, useEffect } from "react";
|
|
14
|
-
|
|
15
|
-
import { DefaultSupportedLanguages } from "./OdysseyTranslationProvider.types.js";
|
|
16
|
-
|
|
17
|
-
import { i18n, defaultNS, resources } from "./i18n.js";
|
|
18
|
-
import { I18nextProvider } from "react-i18next";
|
|
19
|
-
import { getTypedObjectKeys } from "./getTypedObjectKeys.js";
|
|
20
|
-
|
|
21
|
-
export type OdysseyI18nResourceKeys = (typeof resources)["en"];
|
|
22
|
-
export const odysseyI18nResourceKeysList = getTypedObjectKeys(resources["en"]);
|
|
23
|
-
|
|
24
|
-
export type TranslationOverrides<
|
|
25
|
-
SupportedLanguages extends string = DefaultSupportedLanguages,
|
|
26
|
-
> = Record<SupportedLanguages, Partial<OdysseyI18nResourceKeys>>;
|
|
27
|
-
|
|
28
|
-
const mergeBundleOverrides = <
|
|
29
|
-
SupportedLanguages extends string = DefaultSupportedLanguages,
|
|
30
|
-
>(
|
|
31
|
-
languageCode: SupportedLanguages,
|
|
32
|
-
translationOverrides: TranslationOverrides<SupportedLanguages>,
|
|
33
|
-
) => {
|
|
34
|
-
const translationStringOverrides = translationOverrides[languageCode];
|
|
35
|
-
|
|
36
|
-
const translationStrings =
|
|
37
|
-
languageCode in resources
|
|
38
|
-
? resources[languageCode as DefaultSupportedLanguages]
|
|
39
|
-
: {};
|
|
40
|
-
|
|
41
|
-
return {
|
|
42
|
-
...translationStrings,
|
|
43
|
-
...translationStringOverrides,
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
export type OdysseyTranslationProviderProps<
|
|
48
|
-
SupportedLanguages extends string = DefaultSupportedLanguages,
|
|
49
|
-
> = {
|
|
50
|
-
children: ReactNode;
|
|
51
|
-
languageCode?: SupportedLanguages | DefaultSupportedLanguages;
|
|
52
|
-
translationOverrides?: TranslationOverrides<SupportedLanguages>;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
export const OdysseyTranslationProvider = <SupportedLanguages extends string>({
|
|
56
|
-
children,
|
|
57
|
-
languageCode,
|
|
58
|
-
translationOverrides,
|
|
59
|
-
}: OdysseyTranslationProviderProps<SupportedLanguages>) => {
|
|
60
|
-
useEffect(() => {
|
|
61
|
-
i18n.changeLanguage(languageCode || window.navigator.language);
|
|
62
|
-
}, [languageCode]);
|
|
63
|
-
|
|
64
|
-
useEffect(() => {
|
|
65
|
-
if (translationOverrides) {
|
|
66
|
-
getTypedObjectKeys(translationOverrides).forEach((language) => {
|
|
67
|
-
const bundle = mergeBundleOverrides<SupportedLanguages>(
|
|
68
|
-
language,
|
|
69
|
-
translationOverrides,
|
|
70
|
-
);
|
|
71
|
-
i18n.addResourceBundle(language, defaultNS, bundle);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}, [translationOverrides]);
|
|
75
|
-
|
|
76
|
-
return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;
|
|
77
|
-
};
|