@okta/odyssey-react-mui 1.28.1 → 1.29.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 +8 -0
- package/dist/Breadcrumbs.js +1 -0
- package/dist/Breadcrumbs.js.map +1 -1
- package/dist/Buttons/MenuItem.js +1 -0
- package/dist/Buttons/MenuItem.js.map +1 -1
- package/dist/Checkbox.js +62 -35
- package/dist/Checkbox.js.map +1 -1
- package/dist/DataTable/reorderDataRowsLocally.js.map +1 -1
- package/dist/DataTable/useRowReordering.js.map +1 -1
- package/dist/HtmlProps.js.map +1 -1
- package/dist/Pagination/Pagination.js +2 -1
- package/dist/Pagination/Pagination.js.map +1 -1
- package/dist/Radio.js +65 -38
- package/dist/Radio.js.map +1 -1
- package/dist/Typography.js +20 -0
- package/dist/Typography.js.map +1 -1
- package/dist/index.scss +1 -1
- package/dist/labs/DataFilters.js +9 -5
- package/dist/labs/DataFilters.js.map +1 -1
- package/dist/labs/DataTable.js +7 -7
- package/dist/labs/DataTable.js.map +1 -1
- package/dist/labs/DataView/BulkActionsMenu.js.map +1 -1
- package/dist/labs/DataView/CardLayoutContent.js +6 -5
- package/dist/labs/DataView/CardLayoutContent.js.map +1 -1
- package/dist/labs/DataView/DataCard.js +1 -0
- package/dist/labs/DataView/DataCard.js.map +1 -1
- package/dist/labs/DataView/DataTable.js.map +1 -1
- package/dist/labs/DataView/DataView.js +2 -2
- package/dist/labs/DataView/DataView.js.map +1 -1
- package/dist/labs/DataView/DetailPanel.js.map +1 -1
- package/dist/labs/DataView/RowActions.js.map +1 -1
- package/dist/labs/DataView/TableLayoutContent.js +1 -1
- package/dist/labs/DataView/TableLayoutContent.js.map +1 -1
- package/dist/labs/DataView/TableSettings.js.map +1 -1
- package/dist/labs/DataView/componentTypes.js.map +1 -1
- package/dist/labs/DataView/dataTypes.js.map +1 -1
- package/dist/labs/DataView/fetchData.js.map +1 -1
- package/dist/labs/DataView/testSupportData.js +201 -0
- package/dist/labs/DataView/testSupportData.js.map +1 -0
- package/dist/labs/DataView/useFilterConversion.js.map +1 -1
- package/dist/labs/{DateField.js → DatePickers/DateField.js} +1 -1
- package/dist/labs/DatePickers/DateField.js.map +1 -0
- package/dist/labs/DatePickers/DateFieldActionBar.js +56 -0
- package/dist/labs/DatePickers/DateFieldActionBar.js.map +1 -0
- package/dist/labs/DatePickers/DateFieldLocalizationProvider.js +32 -0
- package/dist/labs/DatePickers/DateFieldLocalizationProvider.js.map +1 -0
- package/dist/labs/{DatePicker.js → DatePickers/DatePicker.js} +30 -73
- package/dist/labs/DatePickers/DatePicker.js.map +1 -0
- package/dist/labs/DatePickers/DatePicker.types.d.js.map +1 -0
- package/dist/labs/DatePickers/DateTimeField.js +166 -0
- package/dist/labs/DatePickers/DateTimeField.js.map +1 -0
- package/dist/labs/DatePickers/DateTimePicker.js +233 -0
- package/dist/labs/DatePickers/DateTimePicker.js.map +1 -0
- package/dist/labs/{datePickerTheme.js → DatePickers/datePickerTheme.js} +2 -2
- package/dist/labs/DatePickers/datePickerTheme.js.map +1 -0
- package/dist/labs/DatePickers/dateTimePickerTheme.js +230 -0
- package/dist/labs/DatePickers/dateTimePickerTheme.js.map +1 -0
- package/dist/labs/DatePickers/index.js +15 -0
- package/dist/labs/DatePickers/index.js.map +1 -0
- package/dist/labs/DatePickers/useDateFieldsTranslations.js.map +1 -0
- package/dist/labs/{useOdysseyDateFields.js → DatePickers/useOdysseyDateFields.js} +36 -3
- package/dist/labs/DatePickers/useOdysseyDateFields.js.map +1 -0
- package/dist/labs/PageTemplate.js +1 -1
- package/dist/labs/PageTemplate.js.map +1 -1
- package/dist/labs/SideNav/SideNav.js +40 -34
- package/dist/labs/SideNav/SideNav.js.map +1 -1
- package/dist/labs/SideNav/SideNavHeader.js +6 -4
- package/dist/labs/SideNav/SideNavHeader.js.map +1 -1
- package/dist/labs/SideNav/SideNavItemContent.js +11 -11
- package/dist/labs/SideNav/SideNavItemContent.js.map +1 -1
- package/dist/labs/SideNav/SideNavToggleButton.js +1 -1
- package/dist/labs/SideNav/SideNavToggleButton.js.map +1 -1
- package/dist/labs/SideNav/types.js.map +1 -1
- package/dist/labs/TimeZonePicker.js.map +1 -1
- package/dist/labs/index.js +1 -3
- package/dist/labs/index.js.map +1 -1
- package/dist/properties/ts/odyssey-react-mui.js +2 -0
- package/dist/properties/ts/odyssey-react-mui.js.map +1 -1
- package/dist/src/Breadcrumbs.d.ts.map +1 -1
- package/dist/src/Buttons/MenuItem.d.ts.map +1 -1
- package/dist/src/Checkbox.d.ts.map +1 -1
- package/dist/src/DataTable/reorderDataRowsLocally.d.ts +3 -3
- package/dist/src/DataTable/reorderDataRowsLocally.d.ts.map +1 -1
- package/dist/src/DataTable/useRowReordering.d.ts +10 -10
- package/dist/src/DataTable/useRowReordering.d.ts.map +1 -1
- package/dist/src/HtmlProps.d.ts +27 -0
- package/dist/src/HtmlProps.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/Radio.d.ts +1 -1
- package/dist/src/Radio.d.ts.map +1 -1
- package/dist/src/Typography.d.ts +11 -11
- package/dist/src/Typography.d.ts.map +1 -1
- package/dist/src/labs/DataFilters.d.ts.map +1 -1
- package/dist/src/labs/DataTable.d.ts +11 -11
- package/dist/src/labs/DataTable.d.ts.map +1 -1
- package/dist/src/labs/DataView/BulkActionsMenu.d.ts +3 -3
- package/dist/src/labs/DataView/BulkActionsMenu.d.ts.map +1 -1
- package/dist/src/labs/DataView/CardLayoutContent.d.ts +18 -15
- package/dist/src/labs/DataView/CardLayoutContent.d.ts.map +1 -1
- package/dist/src/labs/DataView/DataCard.d.ts +7 -4
- package/dist/src/labs/DataView/DataCard.d.ts.map +1 -1
- package/dist/src/labs/DataView/DataTable.d.ts +6 -2
- package/dist/src/labs/DataView/DataTable.d.ts.map +1 -1
- package/dist/src/labs/DataView/DataView.d.ts +6 -2
- package/dist/src/labs/DataView/DataView.d.ts.map +1 -1
- package/dist/src/labs/DataView/DetailPanel.d.ts +5 -5
- package/dist/src/labs/DataView/DetailPanel.d.ts.map +1 -1
- package/dist/src/labs/DataView/RowActions.d.ts +3 -3
- package/dist/src/labs/DataView/RowActions.d.ts.map +1 -1
- package/dist/src/labs/DataView/TableLayoutContent.d.ts +18 -15
- package/dist/src/labs/DataView/TableLayoutContent.d.ts.map +1 -1
- package/dist/src/labs/DataView/TableSettings.d.ts +7 -3
- package/dist/src/labs/DataView/TableSettings.d.ts.map +1 -1
- package/dist/src/labs/DataView/componentTypes.d.ts +17 -17
- package/dist/src/labs/DataView/componentTypes.d.ts.map +1 -1
- package/dist/src/labs/DataView/dataTypes.d.ts +6 -6
- package/dist/src/labs/DataView/dataTypes.d.ts.map +1 -1
- package/dist/src/labs/DataView/fetchData.d.ts +6 -6
- package/dist/src/labs/DataView/fetchData.d.ts.map +1 -1
- package/dist/src/labs/DataView/testSupportData.d.ts +33 -0
- package/dist/src/labs/DataView/testSupportData.d.ts.map +1 -0
- package/dist/src/labs/DataView/useFilterConversion.d.ts +5 -4
- package/dist/src/labs/DataView/useFilterConversion.d.ts.map +1 -1
- package/dist/src/labs/{DateField.d.ts → DatePickers/DateField.d.ts} +1 -1
- package/dist/src/labs/DatePickers/DateField.d.ts.map +1 -0
- package/dist/src/labs/DatePickers/DateFieldActionBar.d.ts +15 -0
- package/dist/src/labs/DatePickers/DateFieldActionBar.d.ts.map +1 -0
- package/dist/src/labs/DatePickers/DateFieldLocalizationProvider.d.ts +20 -0
- package/dist/src/labs/DatePickers/DateFieldLocalizationProvider.d.ts.map +1 -0
- package/dist/src/labs/DatePickers/DatePicker.d.ts +17 -0
- package/dist/src/labs/DatePickers/DatePicker.d.ts.map +1 -0
- package/dist/src/labs/DatePickers/DateTimeField.d.ts +20 -0
- package/dist/src/labs/DatePickers/DateTimeField.d.ts.map +1 -0
- package/dist/src/labs/DatePickers/DateTimePicker.d.ts +17 -0
- package/dist/src/labs/DatePickers/DateTimePicker.d.ts.map +1 -0
- package/dist/src/labs/DatePickers/datePickerTheme.d.ts +22 -0
- package/dist/src/labs/DatePickers/datePickerTheme.d.ts.map +1 -0
- package/dist/src/labs/{datePickerTheme.d.ts → DatePickers/dateTimePickerTheme.d.ts} +2 -2
- package/dist/src/labs/DatePickers/dateTimePickerTheme.d.ts.map +1 -0
- package/dist/src/labs/DatePickers/index.d.ts +15 -0
- package/dist/src/labs/DatePickers/index.d.ts.map +1 -0
- package/dist/src/labs/DatePickers/useDateFieldsTranslations.d.ts.map +1 -0
- package/dist/src/labs/{useOdysseyDateFields.d.ts → DatePickers/useOdysseyDateFields.d.ts} +49 -6
- package/dist/src/labs/DatePickers/useOdysseyDateFields.d.ts.map +1 -0
- package/dist/src/labs/SideNav/SideNav.d.ts.map +1 -1
- package/dist/src/labs/SideNav/SideNavHeader.d.ts.map +1 -1
- package/dist/src/labs/SideNav/SideNavItemContent.d.ts +1 -1
- package/dist/src/labs/SideNav/SideNavItemContent.d.ts.map +1 -1
- package/dist/src/labs/SideNav/types.d.ts +2 -2
- package/dist/src/labs/SideNav/types.d.ts.map +1 -1
- package/dist/src/labs/TimeZonePicker.d.ts +4 -1
- package/dist/src/labs/TimeZonePicker.d.ts.map +1 -1
- package/dist/src/labs/index.d.ts +1 -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/theme/components.d.ts.map +1 -1
- package/dist/src/theme/mixins.d.ts.map +1 -1
- package/dist/src/theme/mixins.types.d.ts +2 -0
- package/dist/src/theme/mixins.types.d.ts.map +1 -1
- package/dist/src/{labs → ui-shell}/UiShell/UiShell.d.ts +2 -2
- package/dist/src/ui-shell/UiShell/UiShell.d.ts.map +1 -0
- package/dist/src/{labs → ui-shell}/UiShell/UiShellContent.d.ts +12 -8
- package/dist/src/ui-shell/UiShell/UiShellContent.d.ts.map +1 -0
- package/dist/src/ui-shell/UiShell/bufferLatest.d.ts.map +1 -0
- package/dist/src/ui-shell/UiShell/createMessageBus.d.ts.map +1 -0
- package/dist/src/ui-shell/UiShell/createStore.d.ts.map +1 -0
- package/dist/src/ui-shell/UiShell/index.d.ts.map +1 -0
- package/dist/src/{labs → ui-shell}/UiShell/renderUiShell.d.ts +3 -4
- package/dist/src/ui-shell/UiShell/renderUiShell.d.ts.map +1 -0
- package/dist/src/{labs → ui-shell}/UiShell/useHasUiShell.d.ts +1 -0
- package/dist/src/ui-shell/UiShell/useHasUiShell.d.ts.map +1 -0
- package/dist/src/ui-shell/UiShell/useScrollState.d.ts.map +1 -0
- package/dist/src/ui-shell/index.d.ts +14 -0
- package/dist/src/ui-shell/index.d.ts.map +1 -0
- package/dist/src/{web-component → ui-shell}/renderReactInWebComponent.d.ts +3 -23
- package/dist/src/ui-shell/renderReactInWebComponent.d.ts.map +1 -0
- package/dist/src/web-component/index.d.ts +0 -1
- package/dist/src/web-component/index.d.ts.map +1 -1
- package/dist/src/web-component/shadow-dom.d.ts +23 -2
- package/dist/src/web-component/shadow-dom.d.ts.map +1 -1
- package/dist/theme/components.js +38 -4
- package/dist/theme/components.js.map +1 -1
- package/dist/theme/mixins.js +2 -1
- package/dist/theme/mixins.js.map +1 -1
- package/dist/theme/mixins.types.js.map +1 -1
- package/dist/tsconfig.production.tsbuildinfo +1 -1
- package/dist/{labs → ui-shell}/UiShell/UiShell.js +2 -0
- package/dist/ui-shell/UiShell/UiShell.js.map +1 -0
- package/dist/{labs → ui-shell}/UiShell/UiShellContent.js +19 -11
- package/dist/ui-shell/UiShell/UiShellContent.js.map +1 -0
- package/dist/ui-shell/UiShell/bufferLatest.js.map +1 -0
- package/dist/ui-shell/UiShell/createMessageBus.js.map +1 -0
- package/dist/ui-shell/UiShell/createStore.js.map +1 -0
- package/dist/ui-shell/UiShell/index.js.map +1 -0
- package/dist/{labs → ui-shell}/UiShell/renderUiShell.js +4 -2
- package/dist/ui-shell/UiShell/renderUiShell.js.map +1 -0
- package/dist/{labs → ui-shell}/UiShell/useHasUiShell.js +1 -1
- package/dist/ui-shell/UiShell/useHasUiShell.js.map +1 -0
- package/dist/ui-shell/UiShell/useScrollState.js.map +1 -0
- package/dist/ui-shell/index.js +14 -0
- package/dist/ui-shell/index.js.map +1 -0
- package/dist/{web-component → ui-shell}/renderReactInWebComponent.js +7 -17
- package/dist/ui-shell/renderReactInWebComponent.js.map +1 -0
- package/dist/web-component/index.js +0 -1
- package/dist/web-component/index.js.map +1 -1
- package/dist/web-component/shadow-dom.js +12 -2
- package/dist/web-component/shadow-dom.js.map +1 -1
- package/package.json +10 -3
- package/src/Breadcrumbs.tsx +5 -1
- package/src/Buttons/MenuItem.tsx +1 -0
- package/src/Checkbox.tsx +86 -44
- package/src/DataTable/reorderDataRowsLocally.tsx +3 -3
- package/src/DataTable/useRowReordering.tsx +16 -23
- package/src/HtmlProps.ts +27 -0
- package/src/Pagination/Pagination.tsx +2 -2
- package/src/Radio.tsx +78 -39
- package/src/Typography.tsx +26 -1
- package/src/labs/DataFilters.tsx +7 -3
- package/src/labs/DataTable.tsx +41 -33
- package/src/labs/DataView/BulkActionsMenu.tsx +4 -4
- package/src/labs/DataView/CardLayoutContent.tsx +34 -28
- package/src/labs/DataView/DataCard.tsx +13 -6
- package/src/labs/DataView/DataTable.tsx +11 -4
- package/src/labs/DataView/DataView.test.tsx +1012 -87
- package/src/labs/DataView/DataView.tsx +18 -11
- package/src/labs/DataView/DetailPanel.tsx +4 -4
- package/src/labs/DataView/RowActions.tsx +4 -4
- package/src/labs/DataView/TableLayoutContent.tsx +30 -24
- package/src/labs/DataView/TableSettings.tsx +12 -6
- package/src/labs/DataView/componentTypes.ts +17 -17
- package/src/labs/DataView/dataTypes.ts +14 -8
- package/src/labs/DataView/fetchData.ts +9 -7
- package/src/labs/DataView/testSupportData.tsx +301 -0
- package/src/labs/DataView/useFilterConversion.ts +8 -8
- package/src/labs/{DateField.tsx → DatePickers/DateField.tsx} +2 -2
- package/src/labs/DatePickers/DateFieldActionBar.tsx +65 -0
- package/src/labs/DatePickers/DateFieldLocalizationProvider.tsx +46 -0
- package/src/labs/{DatePicker.tsx → DatePickers/DatePicker.tsx} +31 -136
- package/src/labs/DatePickers/DateTimeField.tsx +271 -0
- package/src/labs/DatePickers/DateTimePicker.test.tsx +66 -0
- package/src/labs/DatePickers/DateTimePicker.tsx +303 -0
- package/src/labs/{datePickerTheme.tsx → DatePickers/datePickerTheme.tsx} +2 -2
- package/src/labs/DatePickers/dateTimePickerTheme.ts +213 -0
- package/src/labs/DatePickers/index.ts +15 -0
- package/src/labs/{useOdysseyDateFields.ts → DatePickers/useOdysseyDateFields.ts} +112 -10
- package/src/labs/PageTemplate.tsx +1 -1
- package/src/labs/SideNav/SideNav.tsx +38 -39
- package/src/labs/SideNav/SideNavHeader.tsx +6 -4
- package/src/labs/SideNav/SideNavItemContent.tsx +21 -18
- package/src/labs/SideNav/SideNavToggleButton.tsx +1 -1
- package/src/labs/SideNav/types.ts +2 -2
- package/src/labs/TimeZonePicker.tsx +5 -1
- package/src/labs/index.ts +2 -3
- package/src/properties/odyssey-react-mui.properties +2 -0
- package/src/properties/ts/odyssey-react-mui.ts +1 -1
- package/src/theme/components.tsx +45 -4
- package/src/theme/mixins.ts +1 -0
- package/src/theme/mixins.types.ts +2 -0
- package/src/{labs → ui-shell}/UiShell/UiShell.tsx +3 -0
- package/src/{labs → ui-shell}/UiShell/UiShellContent.tsx +60 -31
- package/src/{labs → ui-shell}/UiShell/renderUiShell.test.tsx +16 -22
- package/src/{labs → ui-shell}/UiShell/renderUiShell.tsx +7 -4
- package/src/{labs → ui-shell}/UiShell/useHasUiShell.ts +1 -1
- package/src/ui-shell/index.ts +14 -0
- package/src/{web-component → ui-shell}/renderReactInWebComponent.test.tsx +1 -1
- package/src/{web-component → ui-shell}/renderReactInWebComponent.ts +9 -45
- package/src/web-component/index.ts +0 -1
- package/src/web-component/shadow-dom.ts +36 -3
- package/dist/labs/DateField.js.map +0 -1
- package/dist/labs/DatePicker.js.map +0 -1
- package/dist/labs/DatePicker.types.d.js.map +0 -1
- package/dist/labs/UiShell/UiShell.js.map +0 -1
- package/dist/labs/UiShell/UiShellContent.js.map +0 -1
- package/dist/labs/UiShell/bufferLatest.js.map +0 -1
- package/dist/labs/UiShell/createMessageBus.js.map +0 -1
- package/dist/labs/UiShell/createStore.js.map +0 -1
- package/dist/labs/UiShell/index.js.map +0 -1
- package/dist/labs/UiShell/renderUiShell.js.map +0 -1
- package/dist/labs/UiShell/useHasUiShell.js.map +0 -1
- package/dist/labs/UiShell/useScrollState.js.map +0 -1
- package/dist/labs/datePickerTheme.js.map +0 -1
- package/dist/labs/useDateFieldsTranslations.js.map +0 -1
- package/dist/labs/useOdysseyDateFields.js.map +0 -1
- package/dist/src/labs/DateField.d.ts.map +0 -1
- package/dist/src/labs/DatePicker.d.ts +0 -47
- package/dist/src/labs/DatePicker.d.ts.map +0 -1
- package/dist/src/labs/UiShell/UiShell.d.ts.map +0 -1
- package/dist/src/labs/UiShell/UiShellContent.d.ts.map +0 -1
- package/dist/src/labs/UiShell/bufferLatest.d.ts.map +0 -1
- package/dist/src/labs/UiShell/createMessageBus.d.ts.map +0 -1
- package/dist/src/labs/UiShell/createStore.d.ts.map +0 -1
- package/dist/src/labs/UiShell/index.d.ts.map +0 -1
- package/dist/src/labs/UiShell/renderUiShell.d.ts.map +0 -1
- package/dist/src/labs/UiShell/useHasUiShell.d.ts.map +0 -1
- package/dist/src/labs/UiShell/useScrollState.d.ts.map +0 -1
- package/dist/src/labs/datePickerTheme.d.ts.map +0 -1
- package/dist/src/labs/useDateFieldsTranslations.d.ts.map +0 -1
- package/dist/src/labs/useOdysseyDateFields.d.ts.map +0 -1
- package/dist/src/web-component/renderReactInWebComponent.d.ts.map +0 -1
- package/dist/web-component/renderReactInWebComponent.js.map +0 -1
- /package/dist/labs/{DatePicker.types.d.js → DatePickers/DatePicker.types.d.js} +0 -0
- /package/dist/labs/{useDateFieldsTranslations.js → DatePickers/useDateFieldsTranslations.js} +0 -0
- /package/dist/src/labs/{useDateFieldsTranslations.d.ts → DatePickers/useDateFieldsTranslations.d.ts} +0 -0
- /package/dist/src/{labs → ui-shell}/UiShell/bufferLatest.d.ts +0 -0
- /package/dist/src/{labs → ui-shell}/UiShell/createMessageBus.d.ts +0 -0
- /package/dist/src/{labs → ui-shell}/UiShell/createStore.d.ts +0 -0
- /package/dist/src/{labs → ui-shell}/UiShell/index.d.ts +0 -0
- /package/dist/src/{labs → ui-shell}/UiShell/useScrollState.d.ts +0 -0
- /package/dist/{labs → ui-shell}/UiShell/bufferLatest.js +0 -0
- /package/dist/{labs → ui-shell}/UiShell/createMessageBus.js +0 -0
- /package/dist/{labs → ui-shell}/UiShell/createStore.js +0 -0
- /package/dist/{labs → ui-shell}/UiShell/index.js +0 -0
- /package/dist/{labs → ui-shell}/UiShell/useScrollState.js +0 -0
- /package/src/labs/{DatePicker.types.d.ts → DatePickers/DatePicker.types.d.ts} +0 -0
- /package/src/labs/{useDateFieldsTranslations.ts → DatePickers/useDateFieldsTranslations.ts} +0 -0
- /package/src/{labs → ui-shell}/UiShell/UiShell.test.tsx +0 -0
- /package/src/{labs → ui-shell}/UiShell/bufferLatest.test.ts +0 -0
- /package/src/{labs → ui-shell}/UiShell/bufferLatest.ts +0 -0
- /package/src/{labs → ui-shell}/UiShell/createMessageBus.test.ts +0 -0
- /package/src/{labs → ui-shell}/UiShell/createMessageBus.ts +0 -0
- /package/src/{labs → ui-shell}/UiShell/createStore.test.ts +0 -0
- /package/src/{labs → ui-shell}/UiShell/createStore.ts +0 -0
- /package/src/{labs → ui-shell}/UiShell/index.ts +0 -0
- /package/src/{labs → ui-shell}/UiShell/useScrollState.ts +0 -0
package/src/theme/components.tsx
CHANGED
|
@@ -425,7 +425,7 @@ export const components = ({
|
|
|
425
425
|
display: "none",
|
|
426
426
|
}),
|
|
427
427
|
}),
|
|
428
|
-
listbox: {
|
|
428
|
+
listbox: ({ theme }) => ({
|
|
429
429
|
borderWidth: odysseyTokens.BorderWidthMain,
|
|
430
430
|
borderStyle: odysseyTokens.BorderStyleMain,
|
|
431
431
|
borderColor: odysseyTokens.HueNeutral200,
|
|
@@ -447,6 +447,15 @@ export const components = ({
|
|
|
447
447
|
backgroundColor: odysseyTokens.HueNeutral100,
|
|
448
448
|
},
|
|
449
449
|
|
|
450
|
+
[`&.${autocompleteClasses.focusVisible}`]: {
|
|
451
|
+
backgroundColor: "transparent",
|
|
452
|
+
boxShadow: theme.mixins.insetFocusRing,
|
|
453
|
+
|
|
454
|
+
[`&:hover`]: {
|
|
455
|
+
backgroundColor: odysseyTokens.HueNeutral100,
|
|
456
|
+
},
|
|
457
|
+
},
|
|
458
|
+
|
|
450
459
|
[`&[aria-selected="true"]`]: {
|
|
451
460
|
backgroundColor: "transparent",
|
|
452
461
|
color: odysseyTokens.TypographyColorAction,
|
|
@@ -466,7 +475,7 @@ export const components = ({
|
|
|
466
475
|
marginBlockStart: 0,
|
|
467
476
|
marginBlockEnd: 0,
|
|
468
477
|
},
|
|
469
|
-
},
|
|
478
|
+
}),
|
|
470
479
|
loading: {
|
|
471
480
|
paddingBlock: odysseyTokens.Spacing3,
|
|
472
481
|
paddingInline: odysseyTokens.Spacing4,
|
|
@@ -2184,7 +2193,7 @@ export const components = ({
|
|
|
2184
2193
|
styleOverrides: {
|
|
2185
2194
|
list: {
|
|
2186
2195
|
paddingBlock: odysseyTokens.Spacing2,
|
|
2187
|
-
paddingInline: odysseyTokens.Spacing2
|
|
2196
|
+
paddingInline: `${odysseyTokens.Spacing2} !important`,
|
|
2188
2197
|
borderRadius: odysseyTokens.BorderRadiusMain,
|
|
2189
2198
|
},
|
|
2190
2199
|
root: {
|
|
@@ -2198,7 +2207,7 @@ export const components = ({
|
|
|
2198
2207
|
},
|
|
2199
2208
|
MuiMenuItem: {
|
|
2200
2209
|
styleOverrides: {
|
|
2201
|
-
root: ({ ownerState }) => ({
|
|
2210
|
+
root: ({ ownerState, theme }) => ({
|
|
2202
2211
|
gap: odysseyTokens.Spacing2,
|
|
2203
2212
|
minHeight: "unset",
|
|
2204
2213
|
maxWidth: `calc(55ch - ${odysseyTokens.Spacing4})`,
|
|
@@ -2244,6 +2253,7 @@ export const components = ({
|
|
|
2244
2253
|
[`&.${menuItemClasses.selected}`]: {
|
|
2245
2254
|
backgroundColor: "transparent",
|
|
2246
2255
|
color: odysseyTokens.TypographyColorAction,
|
|
2256
|
+
fontWeight: odysseyTokens.TypographyWeightBodyBold,
|
|
2247
2257
|
|
|
2248
2258
|
"&:hover": {
|
|
2249
2259
|
backgroundColor: odysseyTokens.PalettePrimaryLighter,
|
|
@@ -2252,6 +2262,33 @@ export const components = ({
|
|
|
2252
2262
|
backgroundColor: odysseyTokens.PalettePrimaryLighter,
|
|
2253
2263
|
},
|
|
2254
2264
|
},
|
|
2265
|
+
|
|
2266
|
+
[`&.${menuItemClasses.focusVisible}`]: {
|
|
2267
|
+
backgroundColor: odysseyTokens.PalettePrimaryLighter,
|
|
2268
|
+
color: odysseyTokens.TypographyColorAction,
|
|
2269
|
+
|
|
2270
|
+
"&:hover": {
|
|
2271
|
+
backgroundColor: odysseyTokens.PalettePrimaryLighter,
|
|
2272
|
+
|
|
2273
|
+
"@media (hover: none)": {
|
|
2274
|
+
backgroundColor: odysseyTokens.PalettePrimaryLighter,
|
|
2275
|
+
},
|
|
2276
|
+
},
|
|
2277
|
+
},
|
|
2278
|
+
},
|
|
2279
|
+
|
|
2280
|
+
[`&.${menuItemClasses.focusVisible}`]: {
|
|
2281
|
+
backgroundColor: "transparent",
|
|
2282
|
+
boxShadow: theme.mixins.insetFocusRing,
|
|
2283
|
+
|
|
2284
|
+
"&:hover": {
|
|
2285
|
+
backgroundColor: odysseyTokens.HueNeutral100,
|
|
2286
|
+
|
|
2287
|
+
// Reset on touch devices, it doesn't add specificity
|
|
2288
|
+
"@media (hover: none)": {
|
|
2289
|
+
backgroundColor: "transparent",
|
|
2290
|
+
},
|
|
2291
|
+
},
|
|
2255
2292
|
},
|
|
2256
2293
|
|
|
2257
2294
|
"&[data-empty='true']": {
|
|
@@ -2269,6 +2306,10 @@ export const components = ({
|
|
|
2269
2306
|
borderBlockEnd: `1px solid ${odysseyTokens.BorderColorDisplay}`,
|
|
2270
2307
|
}),
|
|
2271
2308
|
|
|
2309
|
+
...(!ownerState.isFullWidth && {
|
|
2310
|
+
maxWidth: "100%",
|
|
2311
|
+
}),
|
|
2312
|
+
|
|
2272
2313
|
[`&.${menuItemClasses.disabled}`]: {
|
|
2273
2314
|
opacity: 1,
|
|
2274
2315
|
color: odysseyTokens.TypographyColorDisabled,
|
package/src/theme/mixins.ts
CHANGED
|
@@ -16,6 +16,7 @@ declare module "@mui/material/styles" {
|
|
|
16
16
|
borderStyle?: string;
|
|
17
17
|
borderWidth?: string;
|
|
18
18
|
maxWidth?: string;
|
|
19
|
+
insetFocusRing?: string;
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
interface MixinsOptions {
|
|
@@ -23,6 +24,7 @@ declare module "@mui/material/styles" {
|
|
|
23
24
|
borderStyle?: string;
|
|
24
25
|
borderWidth?: string;
|
|
25
26
|
maxWidth?: string;
|
|
27
|
+
insetFocusRing?: string;
|
|
26
28
|
}
|
|
27
29
|
}
|
|
28
30
|
|
|
@@ -50,6 +50,7 @@ export type UiShellProps = {
|
|
|
50
50
|
UiShellContentProps,
|
|
51
51
|
| "appBackgroundContrastMode"
|
|
52
52
|
| "appComponent"
|
|
53
|
+
| "hasStandardAppContentPadding"
|
|
53
54
|
| "initialVisibleSections"
|
|
54
55
|
| "onError"
|
|
55
56
|
| "optionalComponents"
|
|
@@ -66,6 +67,7 @@ const UiShell = ({
|
|
|
66
67
|
appBackgroundContrastMode,
|
|
67
68
|
appComponent,
|
|
68
69
|
appRootElement,
|
|
70
|
+
hasStandardAppContentPadding,
|
|
69
71
|
initialVisibleSections,
|
|
70
72
|
onError = console.error,
|
|
71
73
|
onSubscriptionCreated,
|
|
@@ -101,6 +103,7 @@ const UiShell = ({
|
|
|
101
103
|
{...componentProps}
|
|
102
104
|
appBackgroundContrastMode={appBackgroundContrastMode}
|
|
103
105
|
appComponent={appComponent}
|
|
106
|
+
hasStandardAppContentPadding={hasStandardAppContentPadding}
|
|
104
107
|
initialVisibleSections={initialVisibleSections}
|
|
105
108
|
onError={onError}
|
|
106
109
|
optionalComponents={optionalComponents}
|
|
@@ -14,9 +14,9 @@ import styled from "@emotion/styled";
|
|
|
14
14
|
import { memo, type ReactElement, type ReactNode } from "react";
|
|
15
15
|
import { ErrorBoundary, ErrorBoundaryProps } from "react-error-boundary";
|
|
16
16
|
|
|
17
|
-
import { AppSwitcher, type AppSwitcherProps } from "
|
|
18
|
-
import { SideNav, type SideNavProps } from "
|
|
19
|
-
import { TopNav, type TopNavProps } from "
|
|
17
|
+
import { AppSwitcher, type AppSwitcherProps } from "../../labs/AppSwitcher";
|
|
18
|
+
import { SideNav, type SideNavProps } from "../../labs/SideNav";
|
|
19
|
+
import { TopNav, type TopNavProps } from "../../labs/TopNav";
|
|
20
20
|
import {
|
|
21
21
|
useOdysseyDesignTokens,
|
|
22
22
|
type DesignTokens,
|
|
@@ -28,21 +28,33 @@ const emptySideNavItems = [] satisfies SideNavProps["sideNavItems"];
|
|
|
28
28
|
|
|
29
29
|
const StyledAppContainer = styled("div", {
|
|
30
30
|
shouldForwardProp: (prop) =>
|
|
31
|
-
prop !== "odysseyDesignTokens" &&
|
|
31
|
+
prop !== "odysseyDesignTokens" &&
|
|
32
|
+
prop !== "appBackgroundContrastMode" &&
|
|
33
|
+
prop !== "hasStandardAppContentPadding",
|
|
32
34
|
})<{
|
|
33
35
|
appBackgroundContrastMode: ContrastMode;
|
|
36
|
+
hasStandardAppContentPadding: UiShellContentProps["hasStandardAppContentPadding"];
|
|
34
37
|
odysseyDesignTokens: DesignTokens;
|
|
35
|
-
}>(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
}>(
|
|
39
|
+
({
|
|
40
|
+
appBackgroundContrastMode,
|
|
41
|
+
hasStandardAppContentPadding,
|
|
42
|
+
odysseyDesignTokens,
|
|
43
|
+
}) => ({
|
|
44
|
+
gridArea: "app-content",
|
|
45
|
+
overflowX: "hidden",
|
|
46
|
+
overflowY: "auto",
|
|
47
|
+
backgroundColor:
|
|
48
|
+
appBackgroundContrastMode === "highContrast"
|
|
49
|
+
? odysseyDesignTokens.HueNeutralWhite
|
|
50
|
+
: odysseyDesignTokens.HueNeutral50,
|
|
51
|
+
|
|
52
|
+
...(hasStandardAppContentPadding && {
|
|
53
|
+
paddingBlock: odysseyDesignTokens.Spacing5,
|
|
54
|
+
paddingInline: odysseyDesignTokens.Spacing8,
|
|
55
|
+
}),
|
|
56
|
+
}),
|
|
57
|
+
);
|
|
46
58
|
|
|
47
59
|
const StyledBannersContainer = styled("div")(() => ({
|
|
48
60
|
gridArea: "banners",
|
|
@@ -88,13 +100,16 @@ export type UiShellNavComponentProps = {
|
|
|
88
100
|
*/
|
|
89
101
|
appSwitcherProps?: AppSwitcherProps;
|
|
90
102
|
/**
|
|
91
|
-
* Object that gets pass directly to the side nav component.
|
|
103
|
+
* Object that gets pass directly to the side nav component. If `undefined` and in `initialVisibleSections`, SideNav will be initially rendered. Pass `null` to hide a previously-visible SideNav.
|
|
92
104
|
*/
|
|
93
|
-
sideNavProps?: Omit<SideNavProps, "footerComponent"
|
|
105
|
+
sideNavProps?: Omit<SideNavProps, "footerComponent"> | null;
|
|
94
106
|
/**
|
|
95
|
-
* Object that gets pass directly to the top nav component.
|
|
107
|
+
* Object that gets pass directly to the top nav component. If `undefined` and in `initialVisibleSections`, TopNav will be initially rendered. Pass `null` to hide a previously-visible TopNav.
|
|
96
108
|
*/
|
|
97
|
-
topNavProps?: Omit<
|
|
109
|
+
topNavProps?: Omit<
|
|
110
|
+
TopNavProps,
|
|
111
|
+
"leftSideComponent" | "rightSideComponent"
|
|
112
|
+
> | null;
|
|
98
113
|
};
|
|
99
114
|
|
|
100
115
|
export type UiShellContentProps = {
|
|
@@ -106,6 +121,10 @@ export type UiShellContentProps = {
|
|
|
106
121
|
* React app component that renders as children in the correct location of the shell.
|
|
107
122
|
*/
|
|
108
123
|
appComponent: ReactNode;
|
|
124
|
+
/**
|
|
125
|
+
* defaults to `true`. If `false`, the content area will have no padding provided
|
|
126
|
+
*/
|
|
127
|
+
hasStandardAppContentPadding?: boolean;
|
|
109
128
|
/**
|
|
110
129
|
* Which parts of the UI Shell should be visible initially? For example,
|
|
111
130
|
* if sideNavProps is undefined, should the space for the sidenav be initially visible?
|
|
@@ -136,6 +155,7 @@ export type UiShellContentProps = {
|
|
|
136
155
|
const UiShellContent = ({
|
|
137
156
|
appBackgroundContrastMode = "lowContrast",
|
|
138
157
|
appComponent,
|
|
158
|
+
hasStandardAppContentPadding = true,
|
|
139
159
|
initialVisibleSections = ["TopNav", "SideNav", "AppSwitcher"],
|
|
140
160
|
onError = console.error,
|
|
141
161
|
optionalComponents,
|
|
@@ -172,11 +192,16 @@ const UiShellContent = ({
|
|
|
172
192
|
<StyledSideNavContainer>
|
|
173
193
|
{
|
|
174
194
|
/* If SideNav should be initially visible and we have not yet received props, render SideNav with minimal inputs */
|
|
175
|
-
initialVisibleSections?.includes("SideNav") &&
|
|
176
|
-
|
|
177
|
-
<
|
|
178
|
-
|
|
179
|
-
|
|
195
|
+
initialVisibleSections?.includes("SideNav") &&
|
|
196
|
+
sideNavProps === undefined && (
|
|
197
|
+
<ErrorBoundary fallback={null} onError={onError}>
|
|
198
|
+
<SideNav
|
|
199
|
+
isLoading
|
|
200
|
+
appName=""
|
|
201
|
+
sideNavItems={emptySideNavItems}
|
|
202
|
+
/>
|
|
203
|
+
</ErrorBoundary>
|
|
204
|
+
)
|
|
180
205
|
}
|
|
181
206
|
{sideNavProps && (
|
|
182
207
|
<ErrorBoundary fallback={null} onError={onError}>
|
|
@@ -199,15 +224,18 @@ const UiShellContent = ({
|
|
|
199
224
|
</ErrorBoundary>
|
|
200
225
|
)}
|
|
201
226
|
</StyledSideNavContainer>
|
|
202
|
-
|
|
203
227
|
<StyledTopNavContainer>
|
|
204
228
|
{
|
|
205
229
|
/* If TopNav should be initially visible and we have not yet received props, render Topnav with minimal inputs */
|
|
206
|
-
initialVisibleSections?.includes("TopNav") &&
|
|
207
|
-
|
|
208
|
-
<
|
|
209
|
-
|
|
210
|
-
|
|
230
|
+
initialVisibleSections?.includes("TopNav") &&
|
|
231
|
+
topNavProps === undefined && (
|
|
232
|
+
<ErrorBoundary fallback={null} onError={onError}>
|
|
233
|
+
<TopNav
|
|
234
|
+
leftSideComponent={optionalComponents?.topNavLeftSide}
|
|
235
|
+
rightSideComponent={optionalComponents?.topNavRightSide}
|
|
236
|
+
/>
|
|
237
|
+
</ErrorBoundary>
|
|
238
|
+
)
|
|
211
239
|
}
|
|
212
240
|
{topNavProps && (
|
|
213
241
|
<ErrorBoundary fallback={null} onError={onError}>
|
|
@@ -222,8 +250,9 @@ const UiShellContent = ({
|
|
|
222
250
|
</StyledTopNavContainer>
|
|
223
251
|
|
|
224
252
|
<StyledAppContainer
|
|
225
|
-
odysseyDesignTokens={odysseyDesignTokens}
|
|
226
253
|
appBackgroundContrastMode={appBackgroundContrastMode}
|
|
254
|
+
hasStandardAppContentPadding={hasStandardAppContentPadding}
|
|
255
|
+
odysseyDesignTokens={odysseyDesignTokens}
|
|
227
256
|
ref={scrollableContentRef}
|
|
228
257
|
tabIndex={0}
|
|
229
258
|
>
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
* See the License for the specific language governing permissions and limitations under the License.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import { act
|
|
13
|
+
import { act } from "@testing-library/react";
|
|
14
14
|
|
|
15
15
|
import { renderUiShell } from "./renderUiShell";
|
|
16
16
|
import {
|
|
17
17
|
ReactInWebComponentElement,
|
|
18
18
|
reactWebComponentElementName,
|
|
19
|
-
} from "
|
|
19
|
+
} from "../renderReactInWebComponent";
|
|
20
20
|
|
|
21
21
|
describe("renderUiShell", () => {
|
|
22
22
|
afterEach(() => {
|
|
@@ -126,11 +126,9 @@ describe("renderUiShell", () => {
|
|
|
126
126
|
});
|
|
127
127
|
});
|
|
128
128
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
).toHaveTextContent(appName);
|
|
133
|
-
});
|
|
129
|
+
expect(
|
|
130
|
+
rootElement.querySelector(reactWebComponentElementName)!.shadowRoot,
|
|
131
|
+
).toHaveTextContent(appName);
|
|
134
132
|
});
|
|
135
133
|
|
|
136
134
|
test("renders `UiShell` with immediately updated props", async () => {
|
|
@@ -155,11 +153,9 @@ describe("renderUiShell", () => {
|
|
|
155
153
|
});
|
|
156
154
|
});
|
|
157
155
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
).toHaveTextContent(appName);
|
|
162
|
-
});
|
|
156
|
+
expect(
|
|
157
|
+
rootElement.querySelector(reactWebComponentElementName)!.shadowRoot,
|
|
158
|
+
).toHaveTextContent(appName);
|
|
163
159
|
});
|
|
164
160
|
|
|
165
161
|
test("renders `<slot>` in the event of an error", async () => {
|
|
@@ -188,16 +184,14 @@ describe("renderUiShell", () => {
|
|
|
188
184
|
);
|
|
189
185
|
});
|
|
190
186
|
|
|
191
|
-
await waitFor(() => {
|
|
192
|
-
expect(onError).toHaveBeenCalledTimes(1);
|
|
193
|
-
expect(consoleError).toHaveBeenCalledTimes(1);
|
|
194
|
-
expect(
|
|
195
|
-
rootElement
|
|
196
|
-
.querySelector(reactWebComponentElementName)!
|
|
197
|
-
.shadowRoot?.querySelector("slot"),
|
|
198
|
-
).toBeInstanceOf(HTMLSlotElement);
|
|
199
|
-
});
|
|
200
|
-
|
|
201
187
|
consoleErrorSpy.mockRestore();
|
|
188
|
+
|
|
189
|
+
expect(onError).toHaveBeenCalledTimes(1);
|
|
190
|
+
expect(consoleError).toHaveBeenCalledTimes(1);
|
|
191
|
+
expect(
|
|
192
|
+
rootElement
|
|
193
|
+
.querySelector(reactWebComponentElementName)!
|
|
194
|
+
.shadowRoot?.querySelector("slot"),
|
|
195
|
+
).toBeInstanceOf(HTMLSlotElement);
|
|
202
196
|
});
|
|
203
197
|
});
|
|
@@ -16,10 +16,9 @@ import { ErrorBoundary } from "react-error-boundary";
|
|
|
16
16
|
import { bufferLatest } from "./bufferLatest";
|
|
17
17
|
import { createMessageBus } from "./createMessageBus";
|
|
18
18
|
import { UiShell, UiShellProps } from "./UiShell";
|
|
19
|
-
import { renderReactInWebComponent } from "
|
|
19
|
+
import { renderReactInWebComponent } from "../renderReactInWebComponent";
|
|
20
20
|
import { type UiShellNavComponentProps } from "./UiShellContent";
|
|
21
|
-
|
|
22
|
-
export const uiShellDataAttribute = "data-unified-ui-shell";
|
|
21
|
+
import { uiShellDataAttribute } from "./useHasUiShell";
|
|
23
22
|
|
|
24
23
|
export const optionalComponentSlotNames: Record<
|
|
25
24
|
keyof Required<UiShellProps>["optionalComponents"],
|
|
@@ -43,6 +42,7 @@ export const optionalComponentSlotNames: Record<
|
|
|
43
42
|
export const renderUiShell = ({
|
|
44
43
|
appBackgroundContrastMode,
|
|
45
44
|
appRootElement: explicitAppRootElement,
|
|
45
|
+
hasStandardAppContentPadding,
|
|
46
46
|
initialVisibleSections,
|
|
47
47
|
onError = console.error,
|
|
48
48
|
uiShellRootElement,
|
|
@@ -61,7 +61,9 @@ export const renderUiShell = ({
|
|
|
61
61
|
uiShellRootElement: HTMLElement;
|
|
62
62
|
} & Pick<
|
|
63
63
|
UiShellProps,
|
|
64
|
-
|
|
64
|
+
| "appBackgroundContrastMode"
|
|
65
|
+
| "hasStandardAppContentPadding"
|
|
66
|
+
| "initialVisibleSections"
|
|
65
67
|
>) => {
|
|
66
68
|
const appRootElement =
|
|
67
69
|
explicitAppRootElement || document.createElement("div");
|
|
@@ -109,6 +111,7 @@ export const renderUiShell = ({
|
|
|
109
111
|
appBackgroundContrastMode={appBackgroundContrastMode}
|
|
110
112
|
appComponent={appComponent}
|
|
111
113
|
appRootElement={reactRootElements.appRootElement}
|
|
114
|
+
hasStandardAppContentPadding={hasStandardAppContentPadding}
|
|
112
115
|
initialVisibleSections={initialVisibleSections}
|
|
113
116
|
onError={onError}
|
|
114
117
|
onSubscriptionCreated={publishSubscriptionCreated}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
import { useEffect, useState } from "react";
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
export const uiShellDataAttribute = "data-unified-ui-shell";
|
|
16
16
|
|
|
17
17
|
export const useHasUiShell = () => {
|
|
18
18
|
const [hasUiShell, setHasUiShell] = useState(false);
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
export * from "./UiShell";
|
|
14
|
+
export * from "./renderReactInWebComponent";
|
|
@@ -11,42 +11,11 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { type ReactNode } from "react";
|
|
14
|
-
import type
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
* These are bare elements that
|
|
20
|
-
*/
|
|
21
|
-
export const createReactRootElements = () => {
|
|
22
|
-
const appRootElement = document.createElement("div");
|
|
23
|
-
const stylesRootElement = document.createElement("div");
|
|
24
|
-
|
|
25
|
-
// This `div` may cause layout issues unless it inherits the parent's height.
|
|
26
|
-
appRootElement.style.setProperty("height", "inherit");
|
|
27
|
-
|
|
28
|
-
appRootElement.setAttribute("id", "app-root");
|
|
29
|
-
stylesRootElement.setAttribute("id", "style-root");
|
|
30
|
-
stylesRootElement.setAttribute("nonce", window.cspNonce);
|
|
31
|
-
|
|
32
|
-
return {
|
|
33
|
-
/**
|
|
34
|
-
* The element your React root component renders into.
|
|
35
|
-
* React has to render or portal somewhere, and this element can be used for that root element.
|
|
36
|
-
*
|
|
37
|
-
* In the case of a web component, there is no defined root element, so you have to define it yourself.
|
|
38
|
-
*/
|
|
39
|
-
appRootElement,
|
|
40
|
-
/**
|
|
41
|
-
* In React apps, your styles typically go in `document.head`, but you may want to render them somewhere else.
|
|
42
|
-
*
|
|
43
|
-
* Specifically when rendering in a web component, there is no `<head>`, so you have to create a spot for styles to render.
|
|
44
|
-
*/
|
|
45
|
-
stylesRootElement,
|
|
46
|
-
};
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
export type ReactRootElements = ReturnType<typeof createReactRootElements>;
|
|
14
|
+
import { createRoot, type Root } from "react-dom/client";
|
|
15
|
+
import {
|
|
16
|
+
createReactRootElements,
|
|
17
|
+
type ReactRootElements,
|
|
18
|
+
} from "../web-component";
|
|
50
19
|
|
|
51
20
|
export const reactWebComponentElementName = "odyssey-react-web-component";
|
|
52
21
|
|
|
@@ -56,8 +25,8 @@ export type GetReactComponentInWebComponent = (
|
|
|
56
25
|
|
|
57
26
|
export class ReactInWebComponentElement extends HTMLElement {
|
|
58
27
|
getReactComponent: GetReactComponentInWebComponent;
|
|
28
|
+
reactRoot: Root;
|
|
59
29
|
reactRootElements: ReactRootElements;
|
|
60
|
-
reactRootPromise: Promise<Root>;
|
|
61
30
|
|
|
62
31
|
constructor(getReactComponent: GetReactComponentInWebComponent) {
|
|
63
32
|
super();
|
|
@@ -81,20 +50,15 @@ export class ReactInWebComponentElement extends HTMLElement {
|
|
|
81
50
|
shadowRoot.appendChild(this.reactRootElements.stylesRootElement);
|
|
82
51
|
shadowRoot.appendChild(this.reactRootElements.appRootElement);
|
|
83
52
|
|
|
84
|
-
|
|
85
|
-
this.reactRootPromise = import("react-dom/client").then(({ createRoot }) =>
|
|
86
|
-
createRoot(this.reactRootElements.appRootElement),
|
|
87
|
-
);
|
|
53
|
+
this.reactRoot = createRoot(this.reactRootElements.appRootElement);
|
|
88
54
|
}
|
|
89
55
|
|
|
90
56
|
connectedCallback() {
|
|
91
|
-
this.
|
|
92
|
-
reactRoot.render(this.getReactComponent(this.reactRootElements)),
|
|
93
|
-
);
|
|
57
|
+
this.reactRoot.render(this.getReactComponent(this.reactRootElements));
|
|
94
58
|
}
|
|
95
59
|
|
|
96
60
|
disconnectedCallback() {
|
|
97
|
-
this.
|
|
61
|
+
this.reactRoot.unmount();
|
|
98
62
|
}
|
|
99
63
|
}
|
|
100
64
|
|
|
@@ -10,10 +10,43 @@
|
|
|
10
10
|
* See the License for the specific language governing permissions and limitations under the License.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Creates elements for a Shadow DOM that Odyssey will render into.
|
|
15
|
+
* The Emotion root is for `<style>` tags and the app root is for an app to render into.
|
|
16
|
+
* These are bare elements that
|
|
17
|
+
*/
|
|
18
|
+
export const createReactRootElements = () => {
|
|
19
|
+
const appRootElement = document.createElement("div");
|
|
20
|
+
const stylesRootElement = document.createElement("div");
|
|
21
|
+
|
|
22
|
+
// This `div` may cause layout issues unless it inherits the parent's height.
|
|
23
|
+
appRootElement.style.setProperty("height", "inherit");
|
|
24
|
+
|
|
25
|
+
appRootElement.setAttribute("id", "app-root");
|
|
26
|
+
stylesRootElement.setAttribute("id", "style-root");
|
|
27
|
+
stylesRootElement.setAttribute("nonce", window.cspNonce);
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
/**
|
|
31
|
+
* The element your React root component renders into.
|
|
32
|
+
* React has to render or portal somewhere, and this element can be used for that root element.
|
|
33
|
+
*
|
|
34
|
+
* In the case of a web component, there is no defined root element, so you have to define it yourself.
|
|
35
|
+
*/
|
|
36
|
+
appRootElement,
|
|
37
|
+
/**
|
|
38
|
+
* In React apps, your styles typically go in `document.head`, but you may want to render them somewhere else.
|
|
39
|
+
*
|
|
40
|
+
* Specifically when rendering in a web component, there is no `<head>`, so you have to create a spot for styles to render.
|
|
41
|
+
*/
|
|
42
|
+
stylesRootElement,
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export type ReactRootElements = ReturnType<typeof createReactRootElements>;
|
|
14
47
|
|
|
15
48
|
/**
|
|
16
|
-
* @deprecated Use `renderReactInWebComponent` instead. This function was necessary when using bare Shadow DOM, but with UI Shell rendering in a Web Component, you won't be able to render your Shadow DOM in its Shadow DOM without using a Web Component.
|
|
49
|
+
* @deprecated Use `renderReactInWebComponent` from `@okta/odyssey-react-mui/ui-shell` instead. This function was necessary when using bare Shadow DOM, but with UI Shell rendering in a Web Component, you won't be able to render your Shadow DOM in its Shadow DOM without using a Web Component.
|
|
17
50
|
*/
|
|
18
51
|
export const createShadowDomElements = (containerElement: HTMLElement) => {
|
|
19
52
|
const shadowRoot = containerElement.attachShadow({ mode: "open" });
|
|
@@ -32,7 +65,7 @@ export const createShadowDomElements = (containerElement: HTMLElement) => {
|
|
|
32
65
|
|
|
33
66
|
/**
|
|
34
67
|
* @deprecated Use `createShadowDomElements` instead which returns an object instead of an array. It's otherwise the same.
|
|
35
|
-
* @deprecated Ideally, use `renderReactInWebComponent` instead. This function was necessary when using bare Shadow DOM, but with UI Shell rendering in a Web Component, you won't be able to render your Shadow DOM in its Shadow DOM without using a Web Component. */
|
|
68
|
+
* @deprecated Ideally, use `renderReactInWebComponent` from `@okta/odyssey-react-mui/ui-shell` instead. This function was necessary when using bare Shadow DOM, but with UI Shell rendering in a Web Component, you won't be able to render your Shadow DOM in its Shadow DOM without using a Web Component. */
|
|
36
69
|
export const createShadowRootElement = (
|
|
37
70
|
containerElement: HTMLElement,
|
|
38
71
|
): [HTMLStyleElement, HTMLDivElement] => {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DateField.js","names":["memo","useCallback","useEffect","useImperativeHandle","useRef","useState","DateField","MuiDateField","useTranslation","Field","jsx","_jsx","Fragment","_Fragment","useOdysseyDateError","t","Map","formatDateTimeToUtcIsoDateString","value","toUTC","toISO","defaultValue","endAdornment","errorMessage","hasInitialFocus","hint","HintLinkComponent","id","idOverride","inputRef","isDisabled","isOptional","isReadOnly","label","minDate","maxDate","onBlur","onChange","onFocus","timezone","errorMap","displayedErrorMessage","setDisplayedErrorMessage","internalValidationError","localInputRef","focus","current","checkMinMaxValidity","hasMinError","hasMaxError","get","clearErrorMessages","undefined","validateAndCallOnChange","validationContext","validationError","hasEnteredFullYear","year","toString","length","odysseyValidationError","isValid","dateStringFromDateTime","checkFieldValidityAndSetError","event","hasVisibleAdornment","renderFieldComponent","ariaDescribedBy","errorMessageElementId","labelElementId","autoFocus","disabled","inputProps","InputProps","error","Boolean","children","_InputAdornment","position","name","readOnly","variant","fieldType","hasVisibleLabel","MemoizedDateField","displayName"],"sources":["../../src/labs/DateField.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 FocusEventHandler,\n memo,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { InputAdornment } from \"@mui/material\";\nimport {\n DateField as MuiDateField,\n DateFieldProps as MuiDateFieldProps,\n DateValidationError,\n} from \"@mui/x-date-pickers\";\nimport { DateTime } from \"luxon\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Field, RenderFieldComponentProps } from \"../Field\";\nimport { TextFieldProps } from \"../TextField\";\n\nexport type DateFieldProps = {\n onChange?: (value: string) => void;\n} & Pick<\n MuiDateFieldProps<DateTime>,\n \"defaultValue\" | \"inputRef\" | \"minDate\" | \"maxDate\" | \"timezone\" | \"value\"\n> &\n Pick<\n TextFieldProps,\n | \"endAdornment\"\n | \"errorMessage\"\n | \"hasInitialFocus\"\n | \"hint\"\n | \"HintLinkComponent\"\n | \"id\"\n | \"isDisabled\"\n | \"isOptional\"\n | \"isReadOnly\"\n | \"label\"\n | \"onBlur\"\n | \"onFocus\"\n >;\n\nconst useOdysseyDateError = () => {\n const { t } = useTranslation();\n\n return new Map<DateValidationError, string>([\n [\"invalidDate\", t(\"picker.error.invalid\")],\n [\"maxDate\", t(\"picker.error.maxdate\")],\n [\"minDate\", t(\"picker.error.mindate\")],\n ]);\n};\n\nconst formatDateTimeToUtcIsoDateString = (value: DateTime) =>\n value.toUTC().toISO();\n\nconst DateField = ({\n defaultValue,\n endAdornment,\n errorMessage,\n hasInitialFocus,\n hint,\n HintLinkComponent,\n id: idOverride,\n inputRef,\n isDisabled = false,\n isOptional = false,\n isReadOnly,\n label,\n minDate,\n maxDate,\n onBlur,\n onChange,\n onFocus,\n timezone,\n value,\n}: DateFieldProps) => {\n const errorMap = useOdysseyDateError();\n const [displayedErrorMessage, setDisplayedErrorMessage] =\n useState(errorMessage);\n\n const internalValidationError = useRef<string | undefined>();\n const localInputRef = useRef<HTMLInputElement>(null);\n\n useImperativeHandle(\n inputRef,\n () => {\n return {\n focus: () => {\n localInputRef.current?.focus();\n },\n };\n },\n [],\n );\n\n const checkMinMaxValidity = useCallback(\n (value: DateTime) => {\n const hasMinError = minDate && value.toUTC() < minDate.toUTC();\n const hasMaxError = maxDate && value.toUTC() > maxDate.toUTC();\n\n if (hasMinError || hasMaxError) {\n if (hasMinError) {\n setDisplayedErrorMessage(errorMap.get(\"minDate\"));\n }\n\n if (hasMaxError) {\n setDisplayedErrorMessage(errorMap.get(\"maxDate\"));\n }\n\n return false;\n }\n\n return true;\n },\n [errorMap, minDate, maxDate],\n );\n\n useEffect(() => {\n if (value) {\n checkMinMaxValidity(value);\n }\n\n if (defaultValue) {\n checkMinMaxValidity(defaultValue);\n }\n }, [checkMinMaxValidity, defaultValue, minDate, maxDate, value]);\n\n const clearErrorMessages = useCallback(() => {\n setDisplayedErrorMessage(undefined);\n internalValidationError.current = undefined;\n }, [internalValidationError, setDisplayedErrorMessage]);\n\n const validateAndCallOnChange = useCallback<\n NonNullable<MuiDateFieldProps<DateTime>[\"onChange\"]>\n >(\n (value, validationContext) => {\n clearErrorMessages();\n const { validationError } = validationContext;\n const hasEnteredFullYear = value?.year.toString().length === 4;\n\n if (validationError) {\n const odysseyValidationError = errorMap.get(validationError);\n\n if (odysseyValidationError) {\n internalValidationError.current = odysseyValidationError;\n\n if (value?.isValid && hasEnteredFullYear) {\n setDisplayedErrorMessage(odysseyValidationError);\n }\n }\n }\n\n if (value?.isValid && !validationError) {\n const dateStringFromDateTime = formatDateTimeToUtcIsoDateString(value);\n\n if (dateStringFromDateTime && checkMinMaxValidity(value)) {\n onChange?.(dateStringFromDateTime);\n }\n }\n },\n [checkMinMaxValidity, clearErrorMessages, errorMap, onChange],\n );\n\n const checkFieldValidityAndSetError = useCallback<\n FocusEventHandler<HTMLInputElement>\n >(\n (event) => {\n if (internalValidationError?.current && !displayedErrorMessage) {\n setDisplayedErrorMessage(internalValidationError.current);\n }\n onBlur?.(event);\n },\n [displayedErrorMessage, internalValidationError, onBlur],\n );\n\n const hasVisibleAdornment = !isReadOnly && !isDisabled;\n\n const renderFieldComponent = useCallback(\n ({\n ariaDescribedBy,\n errorMessageElementId,\n id,\n labelElementId,\n }: RenderFieldComponentProps) => (\n <MuiDateField\n /* eslint-disable-next-line jsx-a11y/no-autofocus */\n autoFocus={hasInitialFocus}\n defaultValue={defaultValue}\n disabled={isDisabled}\n id={id}\n inputProps={{\n \"aria-describedby\": ariaDescribedBy,\n \"aria-errormessage\": errorMessageElementId,\n \"aria-labelledby\": labelElementId,\n }}\n InputProps={{\n error: Boolean(displayedErrorMessage || errorMessage),\n endAdornment: (\n <>\n {hasVisibleAdornment && (\n <InputAdornment position=\"end\">{endAdornment}</InputAdornment>\n )}\n </>\n ),\n }}\n inputRef={localInputRef}\n minDate={minDate}\n maxDate={maxDate}\n name={id}\n onBlur={checkFieldValidityAndSetError}\n onChange={validateAndCallOnChange}\n onFocus={onFocus}\n readOnly={isReadOnly}\n timezone={timezone}\n value={value}\n variant=\"standard\"\n />\n ),\n [\n checkFieldValidityAndSetError,\n defaultValue,\n displayedErrorMessage,\n endAdornment,\n errorMessage,\n hasInitialFocus,\n hasVisibleAdornment,\n isDisabled,\n localInputRef,\n minDate,\n maxDate,\n onFocus,\n isReadOnly,\n timezone,\n validateAndCallOnChange,\n value,\n ],\n );\n\n return (\n <Field\n errorMessage={displayedErrorMessage || errorMessage}\n fieldType=\"single\"\n hasVisibleLabel\n hint={hint}\n HintLinkComponent={HintLinkComponent}\n id={idOverride}\n isDisabled={isDisabled}\n isOptional={isOptional}\n label={label}\n renderFieldComponent={renderFieldComponent}\n />\n );\n};\n\nconst MemoizedDateField = memo(DateField);\nMemoizedDateField.displayName = \"DateField\";\n\nexport { MemoizedDateField as DateField };\n"],"mappings":"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"}
|