@variocube/app-ui 1.14.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/README.md +65 -0
- package/esm/AppShell/AppShell.d.ts +12 -0
- package/esm/AppShell/AppShell.js +92 -0
- package/esm/AppShell/AppShell.js.map +1 -0
- package/esm/AppShell/index.d.ts +1 -0
- package/esm/AppShell/index.js +2 -0
- package/esm/AppShell/index.js.map +1 -0
- package/esm/ErrorAlert.d.ts +12 -0
- package/esm/ErrorAlert.js +61 -0
- package/esm/ErrorAlert.js.map +1 -0
- package/esm/Input/ActionsMenu.d.ts +9 -0
- package/esm/Input/ActionsMenu.js +29 -0
- package/esm/Input/ActionsMenu.js.map +1 -0
- package/esm/Input/Checkbox.d.ts +9 -0
- package/esm/Input/Checkbox.js +23 -0
- package/esm/Input/Checkbox.js.map +1 -0
- package/esm/Input/EmailSenderField.d.ts +8 -0
- package/esm/Input/EmailSenderField.js +71 -0
- package/esm/Input/EmailSenderField.js.map +1 -0
- package/esm/Input/NumberField.d.ts +10 -0
- package/esm/Input/NumberField.js +94 -0
- package/esm/Input/NumberField.js.map +1 -0
- package/esm/Input/RadioGroup.d.ts +12 -0
- package/esm/Input/RadioGroup.js +20 -0
- package/esm/Input/RadioGroup.js.map +1 -0
- package/esm/Input/Select.d.ts +11 -0
- package/esm/Input/Select.js +19 -0
- package/esm/Input/Select.js.map +1 -0
- package/esm/Input/Selector.d.ts +10 -0
- package/esm/Input/Selector.js +19 -0
- package/esm/Input/Selector.js.map +1 -0
- package/esm/Input/Switch.d.ts +9 -0
- package/esm/Input/Switch.js +23 -0
- package/esm/Input/Switch.js.map +1 -0
- package/esm/Input/TextField.d.ts +7 -0
- package/esm/Input/TextField.js +58 -0
- package/esm/Input/TextField.js.map +1 -0
- package/esm/Input/UrlUploadField.d.ts +9 -0
- package/esm/Input/UrlUploadField.js +43 -0
- package/esm/Input/UrlUploadField.js.map +1 -0
- package/esm/Input/index.d.ts +9 -0
- package/esm/Input/index.js +10 -0
- package/esm/Input/index.js.map +1 -0
- package/esm/LanguageSwitcher/LanguageSwitcher.d.ts +14 -0
- package/esm/LanguageSwitcher/LanguageSwitcher.js +20 -0
- package/esm/LanguageSwitcher/LanguageSwitcher.js.map +1 -0
- package/esm/LanguageSwitcher/index.d.ts +1 -0
- package/esm/LanguageSwitcher/index.js +2 -0
- package/esm/LanguageSwitcher/index.js.map +1 -0
- package/esm/Paging/Paging.d.ts +40 -0
- package/esm/Paging/Paging.js +43 -0
- package/esm/Paging/Paging.js.map +1 -0
- package/esm/Paging/index.d.ts +1 -0
- package/esm/Paging/index.js +2 -0
- package/esm/Paging/index.js.map +1 -0
- package/esm/VCThemeProvider/JetbrainsMonoFont.d.ts +5 -0
- package/esm/VCThemeProvider/JetbrainsMonoFont.js +52 -0
- package/esm/VCThemeProvider/JetbrainsMonoFont.js.map +1 -0
- package/esm/VCThemeProvider/RobotoFont.d.ts +7 -0
- package/esm/VCThemeProvider/RobotoFont.js +49 -0
- package/esm/VCThemeProvider/RobotoFont.js.map +1 -0
- package/esm/VCThemeProvider/ThemeModeSwitcher.d.ts +2 -0
- package/esm/VCThemeProvider/ThemeModeSwitcher.js +14 -0
- package/esm/VCThemeProvider/ThemeModeSwitcher.js.map +1 -0
- package/esm/VCThemeProvider/VCThemeProvider.d.ts +25 -0
- package/esm/VCThemeProvider/VCThemeProvider.js +173 -0
- package/esm/VCThemeProvider/VCThemeProvider.js.map +1 -0
- package/esm/VCThemeProvider/code-colors.d.ts +108 -0
- package/esm/VCThemeProvider/code-colors.js +26 -0
- package/esm/VCThemeProvider/code-colors.js.map +1 -0
- package/esm/VCThemeProvider/index.d.ts +5 -0
- package/esm/VCThemeProvider/index.js +6 -0
- package/esm/VCThemeProvider/index.js.map +1 -0
- package/esm/audit/AuditChanges.d.ts +9 -0
- package/esm/audit/AuditChanges.js +43 -0
- package/esm/audit/AuditChanges.js.map +1 -0
- package/esm/audit/AuditTimeline.d.ts +6 -0
- package/esm/audit/AuditTimeline.js +13 -0
- package/esm/audit/AuditTimeline.js.map +1 -0
- package/esm/audit/AuditTimelineItem.d.ts +10 -0
- package/esm/audit/AuditTimelineItem.js +27 -0
- package/esm/audit/AuditTimelineItem.js.map +1 -0
- package/esm/audit/index.d.ts +4 -0
- package/esm/audit/index.js +5 -0
- package/esm/audit/index.js.map +1 -0
- package/esm/audit/types.d.ts +42 -0
- package/esm/audit/types.js +2 -0
- package/esm/audit/types.js.map +1 -0
- package/esm/breadcrumbs.d.ts +6 -0
- package/esm/breadcrumbs.js +13 -0
- package/esm/breadcrumbs.js.map +1 -0
- package/esm/code/Code.d.ts +10 -0
- package/esm/code/Code.js +19 -0
- package/esm/code/Code.js.map +1 -0
- package/esm/code/CodeBlock.d.ts +4 -0
- package/esm/code/CodeBlock.js +6 -0
- package/esm/code/CodeBlock.js.map +1 -0
- package/esm/code/Json.d.ts +4 -0
- package/esm/code/Json.js +60 -0
- package/esm/code/Json.js.map +1 -0
- package/esm/code/index.d.ts +3 -0
- package/esm/code/index.js +4 -0
- package/esm/code/index.js.map +1 -0
- package/esm/confirm/ConfirmButton.d.ts +16 -0
- package/esm/confirm/ConfirmButton.js +29 -0
- package/esm/confirm/ConfirmButton.js.map +1 -0
- package/esm/confirm/ConfirmDialog.d.ts +16 -0
- package/esm/confirm/ConfirmDialog.js +35 -0
- package/esm/confirm/ConfirmDialog.js.map +1 -0
- package/esm/confirm/ConfirmIconButton.d.ts +14 -0
- package/esm/confirm/ConfirmIconButton.js +29 -0
- package/esm/confirm/ConfirmIconButton.js.map +1 -0
- package/esm/confirm/ConfirmMenuItem.d.ts +15 -0
- package/esm/confirm/ConfirmMenuItem.js +31 -0
- package/esm/confirm/ConfirmMenuItem.js.map +1 -0
- package/esm/confirm/index.d.ts +4 -0
- package/esm/confirm/index.js +5 -0
- package/esm/confirm/index.js.map +1 -0
- package/esm/container/ContainerLayout.d.ts +8 -0
- package/esm/container/ContainerLayout.js +20 -0
- package/esm/container/ContainerLayout.js.map +1 -0
- package/esm/container/ContainerSettingsContext.d.ts +12 -0
- package/esm/container/ContainerSettingsContext.js +46 -0
- package/esm/container/ContainerSettingsContext.js.map +1 -0
- package/esm/container/ContainerWidthControl.d.ts +6 -0
- package/esm/container/ContainerWidthControl.js +12 -0
- package/esm/container/ContainerWidthControl.js.map +1 -0
- package/esm/container/index.d.ts +3 -0
- package/esm/container/index.js +4 -0
- package/esm/container/index.js.map +1 -0
- package/esm/content-table/ContentTable.d.ts +25 -0
- package/esm/content-table/ContentTable.js +87 -0
- package/esm/content-table/ContentTable.js.map +1 -0
- package/esm/content-table/UndrawEmpty.d.ts +2 -0
- package/esm/content-table/UndrawEmpty.js +71 -0
- package/esm/content-table/UndrawEmpty.js.map +1 -0
- package/esm/content-table/index.d.ts +1 -0
- package/esm/content-table/index.js +2 -0
- package/esm/content-table/index.js.map +1 -0
- package/esm/country/countries.d.ts +34 -0
- package/esm/country/countries.js +266 -0
- package/esm/country/countries.js.map +1 -0
- package/esm/country/country-select.d.ts +8 -0
- package/esm/country/country-select.js +18 -0
- package/esm/country/country-select.js.map +1 -0
- package/esm/country/index.d.ts +5 -0
- package/esm/country/index.js +6 -0
- package/esm/country/index.js.map +1 -0
- package/esm/country/locale-select.d.ts +9 -0
- package/esm/country/locale-select.js +15 -0
- package/esm/country/locale-select.js.map +1 -0
- package/esm/country/locales.d.ts +10 -0
- package/esm/country/locales.js +190 -0
- package/esm/country/locales.js.map +1 -0
- package/esm/country/phone-prefix-select.d.ts +9 -0
- package/esm/country/phone-prefix-select.js +18 -0
- package/esm/country/phone-prefix-select.js.map +1 -0
- package/esm/cube/BoxFeatures.d.ts +11 -0
- package/esm/cube/BoxFeatures.js +40 -0
- package/esm/cube/BoxFeatures.js.map +1 -0
- package/esm/cube/BoxMaintenanceChip.d.ts +9 -0
- package/esm/cube/BoxMaintenanceChip.js +15 -0
- package/esm/cube/BoxMaintenanceChip.js.map +1 -0
- package/esm/cube/BoxNumber.d.ts +6 -0
- package/esm/cube/BoxNumber.js +6 -0
- package/esm/cube/BoxNumber.js.map +1 -0
- package/esm/cube/BoxType.d.ts +7 -0
- package/esm/cube/BoxType.js +21 -0
- package/esm/cube/BoxType.js.map +1 -0
- package/esm/cube/CubeConnectedChip.d.ts +9 -0
- package/esm/cube/CubeConnectedChip.js +22 -0
- package/esm/cube/CubeConnectedChip.js.map +1 -0
- package/esm/cube/LockStatusChip.d.ts +11 -0
- package/esm/cube/LockStatusChip.js +40 -0
- package/esm/cube/LockStatusChip.js.map +1 -0
- package/esm/cube/UtilizationBar.d.ts +11 -0
- package/esm/cube/UtilizationBar.js +38 -0
- package/esm/cube/UtilizationBar.js.map +1 -0
- package/esm/cube/accessibility.d.ts +48 -0
- package/esm/cube/accessibility.js +242 -0
- package/esm/cube/accessibility.js.map +1 -0
- package/esm/cube/index.d.ts +8 -0
- package/esm/cube/index.js +9 -0
- package/esm/cube/index.js.map +1 -0
- package/esm/data-table/DataTable.d.ts +63 -0
- package/esm/data-table/DataTable.js +124 -0
- package/esm/data-table/DataTable.js.map +1 -0
- package/esm/data-table/DataTableColumnSettings.d.ts +10 -0
- package/esm/data-table/DataTableColumnSettings.js +98 -0
- package/esm/data-table/DataTableColumnSettings.js.map +1 -0
- package/esm/data-table/DataTableHeader.d.ts +2 -0
- package/esm/data-table/DataTableHeader.js +6 -0
- package/esm/data-table/DataTableHeader.js.map +1 -0
- package/esm/data-table/DataTableToolbar.d.ts +2 -0
- package/esm/data-table/DataTableToolbar.js +6 -0
- package/esm/data-table/DataTableToolbar.js.map +1 -0
- package/esm/data-table/index.d.ts +8 -0
- package/esm/data-table/index.js +9 -0
- package/esm/data-table/index.js.map +1 -0
- package/esm/data-table/useDataTableColumnStorage.d.ts +5 -0
- package/esm/data-table/useDataTableColumnStorage.js +20 -0
- package/esm/data-table/useDataTableColumnStorage.js.map +1 -0
- package/esm/data-table/useDataTableStorage.d.ts +16 -0
- package/esm/data-table/useDataTableStorage.js +19 -0
- package/esm/data-table/useDataTableStorage.js.map +1 -0
- package/esm/data-table/useSpringPage.d.ts +6 -0
- package/esm/data-table/useSpringPage.js +18 -0
- package/esm/data-table/useSpringPage.js.map +1 -0
- package/esm/data-table/useSpringPageable.d.ts +9 -0
- package/esm/data-table/useSpringPageable.js +10 -0
- package/esm/data-table/useSpringPageable.js.map +1 -0
- package/esm/date-pickers/PlainAdapterCommon.d.ts +31 -0
- package/esm/date-pickers/PlainAdapterCommon.js +97 -0
- package/esm/date-pickers/PlainAdapterCommon.js.map +1 -0
- package/esm/date-pickers/PlainDateAdapter.d.ts +30 -0
- package/esm/date-pickers/PlainDateAdapter.js +114 -0
- package/esm/date-pickers/PlainDateAdapter.js.map +1 -0
- package/esm/date-pickers/PlainDatePicker.d.ts +21 -0
- package/esm/date-pickers/PlainDatePicker.js +26 -0
- package/esm/date-pickers/PlainDatePicker.js.map +1 -0
- package/esm/date-pickers/PlainDatePicker.spec.d.ts +1 -0
- package/esm/date-pickers/PlainDatePicker.spec.js +15 -0
- package/esm/date-pickers/PlainDatePicker.spec.js.map +1 -0
- package/esm/date-pickers/PlainDateTimeAdapter.d.ts +30 -0
- package/esm/date-pickers/PlainDateTimeAdapter.js +114 -0
- package/esm/date-pickers/PlainDateTimeAdapter.js.map +1 -0
- package/esm/date-pickers/PlainDateTimePicker.d.ts +20 -0
- package/esm/date-pickers/PlainDateTimePicker.js +26 -0
- package/esm/date-pickers/PlainDateTimePicker.js.map +1 -0
- package/esm/date-pickers/PlainDateTimePicker.spec.d.ts +1 -0
- package/esm/date-pickers/PlainDateTimePicker.spec.js +15 -0
- package/esm/date-pickers/PlainDateTimePicker.spec.js.map +1 -0
- package/esm/date-pickers/PlainTimeAdapter.d.ts +58 -0
- package/esm/date-pickers/PlainTimeAdapter.js +194 -0
- package/esm/date-pickers/PlainTimeAdapter.js.map +1 -0
- package/esm/date-pickers/PlainTimePicker.d.ts +16 -0
- package/esm/date-pickers/PlainTimePicker.js +24 -0
- package/esm/date-pickers/PlainTimePicker.js.map +1 -0
- package/esm/date-pickers/PlainTimePicker.spec.d.ts +1 -0
- package/esm/date-pickers/PlainTimePicker.spec.js +15 -0
- package/esm/date-pickers/PlainTimePicker.spec.js.map +1 -0
- package/esm/date-pickers/TemporalAdapter.d.ts +18 -0
- package/esm/date-pickers/TemporalAdapter.js +109 -0
- package/esm/date-pickers/TemporalAdapter.js.map +1 -0
- package/esm/date-pickers/TimezoneSelect.d.ts +9 -0
- package/esm/date-pickers/TimezoneSelect.js +357 -0
- package/esm/date-pickers/TimezoneSelect.js.map +1 -0
- package/esm/date-pickers/getFormatString.d.ts +11 -0
- package/esm/date-pickers/getFormatString.js +26 -0
- package/esm/date-pickers/getFormatString.js.map +1 -0
- package/esm/date-pickers/index.d.ts +5 -0
- package/esm/date-pickers/index.js +6 -0
- package/esm/date-pickers/index.js.map +1 -0
- package/esm/date-pickers/parse.d.ts +4 -0
- package/esm/date-pickers/parse.js +66 -0
- package/esm/date-pickers/parse.js.map +1 -0
- package/esm/date-pickers/timeframe-picker.d.ts +46 -0
- package/esm/date-pickers/timeframe-picker.js +120 -0
- package/esm/date-pickers/timeframe-picker.js.map +1 -0
- package/esm/date-pickers/useLocale.d.ts +1 -0
- package/esm/date-pickers/useLocale.js +6 -0
- package/esm/date-pickers/useLocale.js.map +1 -0
- package/esm/date-pickers/useRenderInput.d.ts +4 -0
- package/esm/date-pickers/useRenderInput.js +8 -0
- package/esm/date-pickers/useRenderInput.js.map +1 -0
- package/esm/fetch.d.ts +51 -0
- package/esm/fetch.js +138 -0
- package/esm/fetch.js.map +1 -0
- package/esm/filter/Filter.d.ts +38 -0
- package/esm/filter/Filter.js +72 -0
- package/esm/filter/Filter.js.map +1 -0
- package/esm/filter/index.d.ts +1 -0
- package/esm/filter/index.js +2 -0
- package/esm/filter/index.js.map +1 -0
- package/esm/formats/CompactFormat.d.ts +22 -0
- package/esm/formats/CompactFormat.js +21 -0
- package/esm/formats/CompactFormat.js.map +1 -0
- package/esm/formats/CompactFormat.spec.d.ts +1 -0
- package/esm/formats/CompactFormat.spec.js +22 -0
- package/esm/formats/CompactFormat.spec.js.map +1 -0
- package/esm/formats/CurrencyFormat.d.ts +39 -0
- package/esm/formats/CurrencyFormat.js +25 -0
- package/esm/formats/CurrencyFormat.js.map +1 -0
- package/esm/formats/CurrencyFormat.spec.d.ts +1 -0
- package/esm/formats/CurrencyFormat.spec.js +22 -0
- package/esm/formats/CurrencyFormat.spec.js.map +1 -0
- package/esm/formats/DecimalFormat.d.ts +29 -0
- package/esm/formats/DecimalFormat.js +22 -0
- package/esm/formats/DecimalFormat.js.map +1 -0
- package/esm/formats/DecimalFormat.spec.d.ts +1 -0
- package/esm/formats/DecimalFormat.spec.js +22 -0
- package/esm/formats/DecimalFormat.spec.js.map +1 -0
- package/esm/formats/DurationFormat.d.ts +23 -0
- package/esm/formats/DurationFormat.js +35 -0
- package/esm/formats/DurationFormat.js.map +1 -0
- package/esm/formats/DurationFormat.spec.d.ts +1 -0
- package/esm/formats/DurationFormat.spec.js +52 -0
- package/esm/formats/DurationFormat.spec.js.map +1 -0
- package/esm/formats/RelativeTemporalFormat.d.ts +22 -0
- package/esm/formats/RelativeTemporalFormat.js +57 -0
- package/esm/formats/RelativeTemporalFormat.js.map +1 -0
- package/esm/formats/RelativeTemporalFormat.spec.d.ts +1 -0
- package/esm/formats/RelativeTemporalFormat.spec.js +77 -0
- package/esm/formats/RelativeTemporalFormat.spec.js.map +1 -0
- package/esm/formats/SwitchableTemporalFormat.d.ts +5 -0
- package/esm/formats/SwitchableTemporalFormat.js +11 -0
- package/esm/formats/SwitchableTemporalFormat.js.map +1 -0
- package/esm/formats/TemporalFormat.d.ts +27 -0
- package/esm/formats/TemporalFormat.js +19 -0
- package/esm/formats/TemporalFormat.js.map +1 -0
- package/esm/formats/TemporalFormat.spec.d.ts +1 -0
- package/esm/formats/TemporalFormat.spec.js +87 -0
- package/esm/formats/TemporalFormat.spec.js.map +1 -0
- package/esm/formats/TemporalRangeFormat.d.ts +30 -0
- package/esm/formats/TemporalRangeFormat.js +17 -0
- package/esm/formats/TemporalRangeFormat.js.map +1 -0
- package/esm/formats/TemporalRangeFormat.spec.d.ts +1 -0
- package/esm/formats/TemporalRangeFormat.spec.js +87 -0
- package/esm/formats/TemporalRangeFormat.spec.js.map +1 -0
- package/esm/formats/index.d.ts +8 -0
- package/esm/formats/index.js +9 -0
- package/esm/formats/index.js.map +1 -0
- package/esm/formats/types.d.ts +2 -0
- package/esm/formats/types.js +2 -0
- package/esm/formats/types.js.map +1 -0
- package/esm/formats/useDateTimeFormat.d.ts +2 -0
- package/esm/formats/useDateTimeFormat.js +7 -0
- package/esm/formats/useDateTimeFormat.js.map +1 -0
- package/esm/formats/useNumberFormat.d.ts +1 -0
- package/esm/formats/useNumberFormat.js +6 -0
- package/esm/formats/useNumberFormat.js.map +1 -0
- package/esm/formats/useRelativeTimeFormat.d.ts +1 -0
- package/esm/formats/useRelativeTimeFormat.js +6 -0
- package/esm/formats/useRelativeTimeFormat.js.map +1 -0
- package/esm/forms/EditForm.d.ts +13 -0
- package/esm/forms/EditForm.js +22 -0
- package/esm/forms/EditForm.js.map +1 -0
- package/esm/forms/SearchForm.d.ts +7 -0
- package/esm/forms/SearchForm.js +36 -0
- package/esm/forms/SearchForm.js.map +1 -0
- package/esm/forms/SubmitButton.d.ts +9 -0
- package/esm/forms/SubmitButton.js +28 -0
- package/esm/forms/SubmitButton.js.map +1 -0
- package/esm/forms/index.d.ts +4 -0
- package/esm/forms/index.js +5 -0
- package/esm/forms/index.js.map +1 -0
- package/esm/forms/useFormSubmit.d.ts +12 -0
- package/esm/forms/useFormSubmit.js +28 -0
- package/esm/forms/useFormSubmit.js.map +1 -0
- package/esm/getNavigatorLanguages.d.ts +5 -0
- package/esm/getNavigatorLanguages.js +11 -0
- package/esm/getNavigatorLanguages.js.map +1 -0
- package/esm/getSupportedFormatLocale.d.ts +19 -0
- package/esm/getSupportedFormatLocale.js +21 -0
- package/esm/getSupportedFormatLocale.js.map +1 -0
- package/esm/help/HelpButton.d.ts +12 -0
- package/esm/help/HelpButton.js +74 -0
- package/esm/help/HelpButton.js.map +1 -0
- package/esm/help/HelpDrawer.d.ts +3 -0
- package/esm/help/HelpDrawer.js +48 -0
- package/esm/help/HelpDrawer.js.map +1 -0
- package/esm/help/HelpSettingsContext.d.ts +26 -0
- package/esm/help/HelpSettingsContext.js +94 -0
- package/esm/help/HelpSettingsContext.js.map +1 -0
- package/esm/help/index.d.ts +3 -0
- package/esm/help/index.js +4 -0
- package/esm/help/index.js.map +1 -0
- package/esm/icons.d.ts +21 -0
- package/esm/icons.js +22 -0
- package/esm/icons.js.map +1 -0
- package/esm/index.d.ts +34 -0
- package/esm/index.js +35 -0
- package/esm/index.js.map +1 -0
- package/esm/layout/ErrorBoundary.d.ts +46 -0
- package/esm/layout/ErrorBoundary.js +186 -0
- package/esm/layout/ErrorBoundary.js.map +1 -0
- package/esm/layout/NotFound.d.ts +9 -0
- package/esm/layout/NotFound.js +26 -0
- package/esm/layout/NotFound.js.map +1 -0
- package/esm/layout/NotFoundSvg.d.ts +2 -0
- package/esm/layout/NotFoundSvg.js +37 -0
- package/esm/layout/NotFoundSvg.js.map +1 -0
- package/esm/layout/UserNav.d.ts +15 -0
- package/esm/layout/UserNav.js +50 -0
- package/esm/layout/UserNav.js.map +1 -0
- package/esm/layout/index.d.ts +5 -0
- package/esm/layout/index.js +6 -0
- package/esm/layout/index.js.map +1 -0
- package/esm/layout/layout-context.d.ts +9 -0
- package/esm/layout/layout-context.js +23 -0
- package/esm/layout/layout-context.js.map +1 -0
- package/esm/layout/page-title.d.ts +7 -0
- package/esm/layout/page-title.js +41 -0
- package/esm/layout/page-title.js.map +1 -0
- package/esm/list/List.d.ts +14 -0
- package/esm/list/List.js +25 -0
- package/esm/list/List.js.map +1 -0
- package/esm/list/SkeletonListItem.d.ts +14 -0
- package/esm/list/SkeletonListItem.js +11 -0
- package/esm/list/SkeletonListItem.js.map +1 -0
- package/esm/list/index.d.ts +1 -0
- package/esm/list/index.js +2 -0
- package/esm/list/index.js.map +1 -0
- package/esm/localization.d.ts +140 -0
- package/esm/localization.js +200 -0
- package/esm/localization.js.map +1 -0
- package/esm/logo/Logo.d.ts +7 -0
- package/esm/logo/Logo.js +29 -0
- package/esm/logo/Logo.js.map +1 -0
- package/esm/logo/VCAppLogo.d.ts +7 -0
- package/esm/logo/VCAppLogo.js +28 -0
- package/esm/logo/VCAppLogo.js.map +1 -0
- package/esm/logo/VCLogo.d.ts +4 -0
- package/esm/logo/VCLogo.js +33 -0
- package/esm/logo/VCLogo.js.map +1 -0
- package/esm/logo/VCLogoIcon.d.ts +4 -0
- package/esm/logo/VCLogoIcon.js +36 -0
- package/esm/logo/VCLogoIcon.js.map +1 -0
- package/esm/logo/index.d.ts +4 -0
- package/esm/logo/index.js +5 -0
- package/esm/logo/index.js.map +1 -0
- package/esm/splash/index.d.ts +3 -0
- package/esm/splash/index.js +37 -0
- package/esm/splash/index.js.map +1 -0
- package/esm/spring.d.ts +14 -0
- package/esm/spring.js +2 -0
- package/esm/spring.js.map +1 -0
- package/esm/storage/MemoryStorage.d.ts +7 -0
- package/esm/storage/MemoryStorage.js +18 -0
- package/esm/storage/MemoryStorage.js.map +1 -0
- package/esm/storage/index.d.ts +2 -0
- package/esm/storage/index.js +3 -0
- package/esm/storage/index.js.map +1 -0
- package/esm/storage/storage.d.ts +16 -0
- package/esm/storage/storage.js +87 -0
- package/esm/storage/storage.js.map +1 -0
- package/esm/storage/useStorage.d.ts +1 -0
- package/esm/storage/useStorage.js +29 -0
- package/esm/storage/useStorage.js.map +1 -0
- package/esm/tabs/Tabs.d.ts +10 -0
- package/esm/tabs/Tabs.js +95 -0
- package/esm/tabs/Tabs.js.map +1 -0
- package/esm/tabs/index.d.ts +1 -0
- package/esm/tabs/index.js +2 -0
- package/esm/tabs/index.js.map +1 -0
- package/esm/temporal/index.d.ts +2 -0
- package/esm/temporal/index.js +3 -0
- package/esm/temporal/index.js.map +1 -0
- package/esm/temporal/parse.d.ts +4 -0
- package/esm/temporal/parse.js +25 -0
- package/esm/temporal/parse.js.map +1 -0
- package/esm/temporal/polyfill.d.ts +34 -0
- package/esm/temporal/polyfill.js +10 -0
- package/esm/temporal/polyfill.js.map +1 -0
- package/esm/utils/defined.d.ts +1 -0
- package/esm/utils/defined.js +4 -0
- package/esm/utils/defined.js.map +1 -0
- package/esm/utils/index.d.ts +3 -0
- package/esm/utils/index.js +4 -0
- package/esm/utils/index.js.map +1 -0
- package/esm/utils/useFlag.d.ts +1 -0
- package/esm/utils/useFlag.js +9 -0
- package/esm/utils/useFlag.js.map +1 -0
- package/esm/utils/useIsMounted.d.ts +1 -0
- package/esm/utils/useIsMounted.js +12 -0
- package/esm/utils/useIsMounted.js.map +1 -0
- package/esm/view/View.d.ts +9 -0
- package/esm/view/View.js +22 -0
- package/esm/view/View.js.map +1 -0
- package/esm/view/ViewHeader.d.ts +10 -0
- package/esm/view/ViewHeader.js +15 -0
- package/esm/view/ViewHeader.js.map +1 -0
- package/esm/view/index.d.ts +2 -0
- package/esm/view/index.js +3 -0
- package/esm/view/index.js.map +1 -0
- package/package.json +72 -0
- package/src/AppShell/AppShell.tsx +165 -0
- package/src/AppShell/index.tsx +1 -0
- package/src/ErrorAlert.tsx +71 -0
- package/src/Input/ActionsMenu.tsx +102 -0
- package/src/Input/Checkbox.tsx +33 -0
- package/src/Input/EmailSenderField.tsx +64 -0
- package/src/Input/NumberField.tsx +127 -0
- package/src/Input/RadioGroup.tsx +37 -0
- package/src/Input/Select.tsx +33 -0
- package/src/Input/Selector.tsx +21 -0
- package/src/Input/Switch.tsx +33 -0
- package/src/Input/TextField.tsx +69 -0
- package/src/Input/UrlUploadField.tsx +84 -0
- package/src/Input/index.ts +9 -0
- package/src/LanguageSwitcher/LanguageSwitcher.tsx +63 -0
- package/src/LanguageSwitcher/index.ts +1 -0
- package/src/Paging/Paging.ts +77 -0
- package/src/Paging/index.ts +1 -0
- package/src/VCThemeProvider/JetbrainsMonoFont.tsx +55 -0
- package/src/VCThemeProvider/RobotoFont.tsx +52 -0
- package/src/VCThemeProvider/ThemeModeSwitcher.tsx +23 -0
- package/src/VCThemeProvider/VCThemeProvider.tsx +232 -0
- package/src/VCThemeProvider/code-colors.ts +34 -0
- package/src/VCThemeProvider/files.d.ts +2 -0
- package/src/VCThemeProvider/index.ts +5 -0
- package/src/audit/AuditChanges.tsx +82 -0
- package/src/audit/AuditTimeline.tsx +25 -0
- package/src/audit/AuditTimelineItem.tsx +75 -0
- package/src/audit/index.ts +4 -0
- package/src/audit/types.ts +46 -0
- package/src/breadcrumbs.tsx +27 -0
- package/src/code/Code.tsx +53 -0
- package/src/code/CodeBlock.tsx +15 -0
- package/src/code/Json.tsx +73 -0
- package/src/code/index.ts +3 -0
- package/src/confirm/ConfirmButton.tsx +69 -0
- package/src/confirm/ConfirmDialog.tsx +68 -0
- package/src/confirm/ConfirmIconButton.tsx +62 -0
- package/src/confirm/ConfirmMenuItem.tsx +66 -0
- package/src/confirm/index.ts +4 -0
- package/src/container/ContainerLayout.tsx +40 -0
- package/src/container/ContainerSettingsContext.tsx +77 -0
- package/src/container/ContainerWidthControl.tsx +20 -0
- package/src/container/index.ts +3 -0
- package/src/content-table/ContentTable.tsx +214 -0
- package/src/content-table/UndrawEmpty.tsx +285 -0
- package/src/content-table/index.ts +1 -0
- package/src/country/countries.ts +268 -0
- package/src/country/country-select.tsx +48 -0
- package/src/country/index.ts +5 -0
- package/src/country/locale-select.tsx +43 -0
- package/src/country/locales.ts +192 -0
- package/src/country/phone-prefix-select.tsx +50 -0
- package/src/cube/BoxFeatures.tsx +91 -0
- package/src/cube/BoxMaintenanceChip.tsx +33 -0
- package/src/cube/BoxNumber.tsx +10 -0
- package/src/cube/BoxType.tsx +22 -0
- package/src/cube/CubeConnectedChip.tsx +16 -0
- package/src/cube/LockStatusChip.tsx +54 -0
- package/src/cube/UtilizationBar.tsx +94 -0
- package/src/cube/accessibility.tsx +422 -0
- package/src/cube/index.tsx +8 -0
- package/src/data-table/DataTable.tsx +338 -0
- package/src/data-table/DataTableColumnSettings.tsx +204 -0
- package/src/data-table/DataTableHeader.tsx +10 -0
- package/src/data-table/DataTableToolbar.tsx +10 -0
- package/src/data-table/index.tsx +8 -0
- package/src/data-table/useDataTableColumnStorage.ts +26 -0
- package/src/data-table/useDataTableStorage.ts +43 -0
- package/src/data-table/useSpringPage.ts +21 -0
- package/src/data-table/useSpringPageable.ts +25 -0
- package/src/date-pickers/PlainAdapterCommon.ts +125 -0
- package/src/date-pickers/PlainDateAdapter.spec.ts +50 -0
- package/src/date-pickers/PlainDateAdapter.ts +139 -0
- package/src/date-pickers/PlainDatePicker.spec.tsx +22 -0
- package/src/date-pickers/PlainDatePicker.tsx +73 -0
- package/src/date-pickers/PlainDateTimeAdapter.spec.ts +50 -0
- package/src/date-pickers/PlainDateTimeAdapter.ts +140 -0
- package/src/date-pickers/PlainDateTimePicker.spec.tsx +22 -0
- package/src/date-pickers/PlainDateTimePicker.tsx +65 -0
- package/src/date-pickers/PlainTimeAdapter.ts +247 -0
- package/src/date-pickers/PlainTimePicker.spec.tsx +22 -0
- package/src/date-pickers/PlainTimePicker.tsx +45 -0
- package/src/date-pickers/TemporalAdapter.ts +150 -0
- package/src/date-pickers/TimezoneSelect.tsx +387 -0
- package/src/date-pickers/getFormatString.ts +38 -0
- package/src/date-pickers/index.ts +5 -0
- package/src/date-pickers/parse.spec.ts +43 -0
- package/src/date-pickers/parse.ts +72 -0
- package/src/date-pickers/timeframe-picker.tsx +202 -0
- package/src/date-pickers/useLocale.ts +6 -0
- package/src/date-pickers/useRenderInput.tsx +20 -0
- package/src/fetch.spec.ts +85 -0
- package/src/fetch.ts +165 -0
- package/src/filter/Filter.tsx +194 -0
- package/src/filter/index.ts +1 -0
- package/src/formats/CompactFormat.spec.tsx +25 -0
- package/src/formats/CompactFormat.tsx +48 -0
- package/src/formats/CurrencyFormat.spec.tsx +25 -0
- package/src/formats/CurrencyFormat.tsx +77 -0
- package/src/formats/DecimalFormat.spec.tsx +25 -0
- package/src/formats/DecimalFormat.tsx +59 -0
- package/src/formats/DurationFormat.spec.tsx +57 -0
- package/src/formats/DurationFormat.tsx +72 -0
- package/src/formats/RelativeTemporalFormat.spec.tsx +84 -0
- package/src/formats/RelativeTemporalFormat.tsx +86 -0
- package/src/formats/SwitchableTemporalFormat.tsx +17 -0
- package/src/formats/TemporalFormat.spec.tsx +110 -0
- package/src/formats/TemporalFormat.tsx +58 -0
- package/src/formats/TemporalRangeFormat.spec.tsx +159 -0
- package/src/formats/TemporalRangeFormat.tsx +62 -0
- package/src/formats/index.ts +8 -0
- package/src/formats/types.ts +4 -0
- package/src/formats/useDateTimeFormat.ts +7 -0
- package/src/formats/useNumberFormat.ts +6 -0
- package/src/formats/useRelativeTimeFormat.ts +6 -0
- package/src/forms/EditForm.tsx +69 -0
- package/src/forms/SearchForm.tsx +51 -0
- package/src/forms/SubmitButton.tsx +34 -0
- package/src/forms/index.ts +4 -0
- package/src/forms/useFormSubmit.tsx +28 -0
- package/src/getNavigatorLanguages.ts +11 -0
- package/src/getSupportedFormatLocale.ts +24 -0
- package/src/help/HelpButton.tsx +134 -0
- package/src/help/HelpDrawer.tsx +65 -0
- package/src/help/HelpSettingsContext.tsx +178 -0
- package/src/help/index.ts +3 -0
- package/src/icons.ts +23 -0
- package/src/index.ts +34 -0
- package/src/layout/ErrorBoundary.tsx +232 -0
- package/src/layout/NotFound.tsx +51 -0
- package/src/layout/NotFoundSvg.tsx +172 -0
- package/src/layout/UserNav.tsx +107 -0
- package/src/layout/index.ts +5 -0
- package/src/layout/layout-context.tsx +40 -0
- package/src/layout/page-title.tsx +33 -0
- package/src/list/List.tsx +40 -0
- package/src/list/SkeletonListItem.tsx +50 -0
- package/src/list/index.tsx +1 -0
- package/src/localization.tsx +404 -0
- package/src/logo/Logo.tsx +35 -0
- package/src/logo/VCAppLogo.tsx +28 -0
- package/src/logo/VCLogo.tsx +56 -0
- package/src/logo/VCLogoIcon.tsx +55 -0
- package/src/logo/V_C_LOGO.svg +1 -0
- package/src/logo/V_C_LOGO_ICON.svg +1 -0
- package/src/logo/V_C_LOGO_ICON_WHITE.svg +1 -0
- package/src/logo/V_C_LOGO_WHITE.svg +1 -0
- package/src/logo/index.tsx +4 -0
- package/src/splash/index.tsx +34 -0
- package/src/splash/template.html +86 -0
- package/src/spring.ts +15 -0
- package/src/storage/MemoryStorage.ts +21 -0
- package/src/storage/index.ts +2 -0
- package/src/storage/storage.ts +97 -0
- package/src/storage/useStorage.ts +35 -0
- package/src/tabs/Tabs.tsx +187 -0
- package/src/tabs/index.ts +1 -0
- package/src/temporal/index.ts +2 -0
- package/src/temporal/parse.ts +29 -0
- package/src/temporal/polyfill.ts +36 -0
- package/src/utils/defined.ts +4 -0
- package/src/utils/index.ts +3 -0
- package/src/utils/useFlag.ts +9 -0
- package/src/utils/useIsMounted.ts +12 -0
- package/src/view/View.tsx +22 -0
- package/src/view/ViewHeader.tsx +35 -0
- package/src/view/index.ts +2 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html style="height: 100%;" lang="en" class="notranslate" translate="no">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="google" content="notranslate" />
|
|
6
|
+
<title><%= htmlWebpackPlugin.options.title %></title>
|
|
7
|
+
<% if (typeof(htmlWebpackPlugin.options.manifest) !== "undefined") { %>
|
|
8
|
+
<link rel="manifest" href="<%= htmlWebpackPlugin.options.manifest %>" />
|
|
9
|
+
<% } %>
|
|
10
|
+
<style>
|
|
11
|
+
#splash {
|
|
12
|
+
position: fixed;
|
|
13
|
+
left: 0;
|
|
14
|
+
top: 0;
|
|
15
|
+
width: 100%;
|
|
16
|
+
height: 100%;
|
|
17
|
+
color: #282b33;
|
|
18
|
+
background: #fffaf7;
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-flow: column;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
align-items: center;
|
|
23
|
+
z-index: 99999;
|
|
24
|
+
}
|
|
25
|
+
#splash.fadeout {
|
|
26
|
+
transition: all 0.5s;
|
|
27
|
+
animation: none;
|
|
28
|
+
opacity: 0;
|
|
29
|
+
}
|
|
30
|
+
@media (prefers-color-scheme: dark) {
|
|
31
|
+
#splash {
|
|
32
|
+
background: #15161a;
|
|
33
|
+
color: #fdfaf7;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
#splash-icon {
|
|
37
|
+
width: 160px;
|
|
38
|
+
opacity: 0.5;
|
|
39
|
+
animation: 1s infinite alternate-reverse pulse-icon ease-in-out;
|
|
40
|
+
}
|
|
41
|
+
@keyframes pulse-icon {
|
|
42
|
+
0% { opacity: 0.25; }
|
|
43
|
+
100% { opacity: 0.5; }
|
|
44
|
+
}
|
|
45
|
+
.splash-error {
|
|
46
|
+
padding: 16px;
|
|
47
|
+
margin: 32px auto;
|
|
48
|
+
max-width: 640px;
|
|
49
|
+
background: #ffdddd;
|
|
50
|
+
color: #660000;
|
|
51
|
+
font-family: sans-serif;
|
|
52
|
+
}
|
|
53
|
+
#react-root {
|
|
54
|
+
width: 100%;
|
|
55
|
+
height: 100%;
|
|
56
|
+
}
|
|
57
|
+
noscript {
|
|
58
|
+
position: fixed;
|
|
59
|
+
left: 0;
|
|
60
|
+
top: 0;
|
|
61
|
+
width: 100%;
|
|
62
|
+
height: 100%;
|
|
63
|
+
z-index: 100000;
|
|
64
|
+
}
|
|
65
|
+
</style>
|
|
66
|
+
</head>
|
|
67
|
+
<body style="height: 100%;">
|
|
68
|
+
<div id="react-root"></div>
|
|
69
|
+
<div id="splash">
|
|
70
|
+
<svg viewBox="0 0 74 86" xmlns="http://www.w3.org/2000/svg" id="splash-icon">
|
|
71
|
+
<path d="M23.68 77.48 73.6 48.66v15.08l-36.82 21.3-13.1-7.56Zm-7.08-4.09 57-32.92V25.35L3.5 65.83l13.1 7.56ZM0 59.74V25.35l29.69 17.17L0 59.74Zm57-33 13.1-7.56L36.78 0l-13.1 7.56L57 26.74ZM16.6 11.65 3.5 19.21l33.28 19.22 13.1-7.56L16.6 11.65Z"
|
|
72
|
+
style="fill: currentColor; fill-rule: nonzero"
|
|
73
|
+
/>
|
|
74
|
+
</svg>
|
|
75
|
+
</div>
|
|
76
|
+
<noscript>
|
|
77
|
+
<div class="splash-error">
|
|
78
|
+
<h1>JavaScript required</h1>
|
|
79
|
+
<p>
|
|
80
|
+
This application uses JavaScript. Unfortunately, it doesn't seem to be available.
|
|
81
|
+
Please enable JavaScript or contact your administrator to do so in order to use this application.
|
|
82
|
+
</p>
|
|
83
|
+
</div>
|
|
84
|
+
</noscript>
|
|
85
|
+
</body>
|
|
86
|
+
</html>
|
package/src/spring.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Describes a Spring `Page` */
|
|
2
|
+
export interface SpringPage<T> {
|
|
3
|
+
content?: T[] | undefined;
|
|
4
|
+
totalElements?: number | undefined;
|
|
5
|
+
totalPages?: number | undefined;
|
|
6
|
+
size?: number | undefined;
|
|
7
|
+
number?: number | undefined;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Describes a Spring `Pageable` */
|
|
11
|
+
export interface SpringPageable {
|
|
12
|
+
sort?: string[] | undefined;
|
|
13
|
+
size?: number | undefined;
|
|
14
|
+
page?: number | undefined;
|
|
15
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
export class MemoryStorage {
|
|
3
|
+
|
|
4
|
+
private readonly data = new Map<string, string>();
|
|
5
|
+
|
|
6
|
+
getItem(key: string) {
|
|
7
|
+
return this.data.get(key);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
setItem(key: string, value: string) {
|
|
11
|
+
return this.data.set(key, value);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
removeItem(key: string) {
|
|
15
|
+
return this.data.delete(key);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
clear() {
|
|
19
|
+
return this.data.clear();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import {MemoryStorage} from "./MemoryStorage";
|
|
2
|
+
|
|
3
|
+
const TEST_KEY = "__check_storage_supported";
|
|
4
|
+
|
|
5
|
+
function isSupported(storage?: Storage) {
|
|
6
|
+
if (!storage) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
try {
|
|
10
|
+
storage.setItem(TEST_KEY, "1");
|
|
11
|
+
storage.removeItem(TEST_KEY);
|
|
12
|
+
return true;
|
|
13
|
+
} catch (e) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function findSupportedStorage() {
|
|
19
|
+
return [window.localStorage, window.sessionStorage].find(isSupported)
|
|
20
|
+
|| new MemoryStorage();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
type StorageChangeListener = (oldValue?: string, newValue?: string) => void;
|
|
24
|
+
|
|
25
|
+
class StorageWrapper {
|
|
26
|
+
private readonly listeners = new Map<string, Set<StorageChangeListener>>();
|
|
27
|
+
private readonly storageArea = findSupportedStorage();
|
|
28
|
+
|
|
29
|
+
constructor() {
|
|
30
|
+
window.addEventListener("storage", event => {
|
|
31
|
+
const {storageArea, key, oldValue, newValue} = event;
|
|
32
|
+
if (storageArea == this.storageArea && key && oldValue != newValue) {
|
|
33
|
+
this.notifyChangeListener(key, oldValue || undefined, newValue || undefined);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
addChangeListener(key: string, listener: StorageChangeListener) {
|
|
39
|
+
this.getOrCreateListeners(key).add(listener);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
removeChangeListener(key: string, listener: StorageChangeListener) {
|
|
43
|
+
this.getOrCreateListeners(key).delete(listener);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
write(key: string, value?: string) {
|
|
47
|
+
const oldValue = this.read(key);
|
|
48
|
+
try {
|
|
49
|
+
if (value !== undefined) {
|
|
50
|
+
this.storageArea.setItem(key, value);
|
|
51
|
+
} else {
|
|
52
|
+
this.storageArea.removeItem(key);
|
|
53
|
+
}
|
|
54
|
+
this.notifyChangeListener(key, oldValue, value);
|
|
55
|
+
} catch (error) {
|
|
56
|
+
// ignore error
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
delete(key: string) {
|
|
61
|
+
const oldValue = this.read(key);
|
|
62
|
+
try {
|
|
63
|
+
this.storageArea.removeItem(key);
|
|
64
|
+
this.notifyChangeListener(key, oldValue, undefined);
|
|
65
|
+
} catch (error) {
|
|
66
|
+
// ignore error
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
read(key: string) {
|
|
71
|
+
try {
|
|
72
|
+
return this.storageArea.getItem(key);
|
|
73
|
+
} catch (error) {
|
|
74
|
+
// ignore error
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
private notifyChangeListener(key: string, oldValue: any, newValue: any) {
|
|
80
|
+
const listeners = this.listeners.get(key);
|
|
81
|
+
if (listeners) {
|
|
82
|
+
listeners.forEach(listener => listener(oldValue, newValue));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
private getOrCreateListeners(key: string) {
|
|
87
|
+
return this.listeners.get(key) || this.createListeners(key);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
private createListeners(key: string) {
|
|
91
|
+
const listeners = new Set<StorageChangeListener>();
|
|
92
|
+
this.listeners.set(key, listeners);
|
|
93
|
+
return listeners;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export const storage = new StorageWrapper();
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {useCallback, useLayoutEffect, useMemo, useState} from "react";
|
|
2
|
+
import {storage} from "./storage";
|
|
3
|
+
|
|
4
|
+
export function useStorage<T>(key: string, defaultValue: T): [T, (newValue: T) => void] {
|
|
5
|
+
const defaultValueSerialized = useMemo(() => JSON.stringify(defaultValue), [defaultValue]);
|
|
6
|
+
|
|
7
|
+
const readStateFromStorage = useCallback(() => {
|
|
8
|
+
const storageValue = storage.read(key);
|
|
9
|
+
return storageValue ?? defaultValueSerialized;
|
|
10
|
+
}, [key, defaultValueSerialized]);
|
|
11
|
+
|
|
12
|
+
const [value, setValue] = useState(readStateFromStorage);
|
|
13
|
+
|
|
14
|
+
const updateStateFromStorage = useCallback(() => {
|
|
15
|
+
setValue(readStateFromStorage());
|
|
16
|
+
}, [readStateFromStorage]);
|
|
17
|
+
|
|
18
|
+
useLayoutEffect(() => {
|
|
19
|
+
storage.addChangeListener(key, updateStateFromStorage);
|
|
20
|
+
return () => storage.removeChangeListener(key, updateStateFromStorage);
|
|
21
|
+
}, [key, updateStateFromStorage]);
|
|
22
|
+
|
|
23
|
+
const typedValue = useMemo(() => JSON.parse(value), [value]);
|
|
24
|
+
|
|
25
|
+
const setTypedValue = useCallback((newValue: T) => {
|
|
26
|
+
const value = JSON.stringify(newValue);
|
|
27
|
+
if (value != defaultValueSerialized) {
|
|
28
|
+
storage.write(key, value);
|
|
29
|
+
} else {
|
|
30
|
+
storage.delete(key);
|
|
31
|
+
}
|
|
32
|
+
}, [key, defaultValueSerialized]);
|
|
33
|
+
|
|
34
|
+
return [typedValue, setTypedValue];
|
|
35
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import React, {Fragment, SyntheticEvent, useEffect, useRef, useState} from "react";
|
|
2
|
+
import {IconButton, ListItemIcon, ListItemText, Menu, MenuItem, Stack} from "@mui/material";
|
|
3
|
+
import MuiTabs, {TabsProps as MuiTabsProps} from "@mui/material/Tabs";
|
|
4
|
+
import MoreHorizIcon from '@mui/icons-material/MoreHoriz';
|
|
5
|
+
import MuiTab, {TabProps as MuiTabProps} from "@mui/material/Tab";
|
|
6
|
+
|
|
7
|
+
interface TabItem {
|
|
8
|
+
index: number;
|
|
9
|
+
width: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface TabProps extends MuiTabProps<React.ElementType> {
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface TabsProps extends MuiTabsProps {
|
|
16
|
+
items: TabProps [];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const hiddenSx = {
|
|
20
|
+
visibility: 'hidden',
|
|
21
|
+
height: 0,
|
|
22
|
+
maxHeight: 'unset',
|
|
23
|
+
minHeight: 'unset',
|
|
24
|
+
padding: 0
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function Tabs(props: TabsProps) {
|
|
28
|
+
const {
|
|
29
|
+
orientation = "horizontal",
|
|
30
|
+
scrollButtons = "auto",
|
|
31
|
+
allowScrollButtonsMobile = true,
|
|
32
|
+
sx,
|
|
33
|
+
onChange,
|
|
34
|
+
items: inItems,
|
|
35
|
+
value,
|
|
36
|
+
...rest
|
|
37
|
+
} = props;
|
|
38
|
+
|
|
39
|
+
const items = inItems.map((item, i) => ({
|
|
40
|
+
...item,
|
|
41
|
+
value: typeof item.value == "undefined" ? i : item.value
|
|
42
|
+
} as TabProps));
|
|
43
|
+
|
|
44
|
+
const ref = useRef(null);
|
|
45
|
+
const [dropdownEl, setDropdownEl] = useState<null|HTMLElement>(null);
|
|
46
|
+
|
|
47
|
+
const [overflowIndex, setOverflowIndex] = useState<number>(items.length);
|
|
48
|
+
|
|
49
|
+
const selectedIndex = items.findIndex((item) => item.value == value);
|
|
50
|
+
|
|
51
|
+
function handleTabOverflow(root: Element, items: TabItem[]) {
|
|
52
|
+
// clientWidth: what the user can see
|
|
53
|
+
// scrollWidth: actual size of the DOM object
|
|
54
|
+
const {clientWidth} = root;
|
|
55
|
+
|
|
56
|
+
// this basically loop through each item size and adding up the width of all items
|
|
57
|
+
// if the width exceed the clientWidth of the root node, item will be hidden from the horizontal tab display
|
|
58
|
+
// else the item remains visible and its ref from the dropdown list will be hidden otherwise
|
|
59
|
+
let overflowIndex = 0;
|
|
60
|
+
let itemsWidth = 0;
|
|
61
|
+
for (let i = 0; i < items.length; i++) {
|
|
62
|
+
itemsWidth += items[i].width;
|
|
63
|
+
if (itemsWidth < clientWidth) {
|
|
64
|
+
overflowIndex++;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
setOverflowIndex(overflowIndex);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (ref.current) {
|
|
72
|
+
// fetch the root node of tabs
|
|
73
|
+
const root = Array.from((ref.current as HTMLButtonElement).children).find(e => e.className.includes('tabRoot'));
|
|
74
|
+
if (root) {
|
|
75
|
+
// from the root node, traverse down to list node of tab items
|
|
76
|
+
const list = Array.from(root.children).find(e => e.className.includes('tabList'));
|
|
77
|
+
const items = list ? Array.from(list.children).map((e, index) => ({ index, width: e.clientWidth })) : [];
|
|
78
|
+
|
|
79
|
+
// apply the resize observer to the root node and watch for the size changes
|
|
80
|
+
const resizeObserver = new ResizeObserver(() => handleTabOverflow(root, items));
|
|
81
|
+
resizeObserver.observe(root);
|
|
82
|
+
return () => resizeObserver.disconnect();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}, [ref])
|
|
86
|
+
|
|
87
|
+
return (
|
|
88
|
+
<Stack
|
|
89
|
+
flex={1}
|
|
90
|
+
direction="row"
|
|
91
|
+
alignItems="center"
|
|
92
|
+
sx={{
|
|
93
|
+
borderBottom: 1,
|
|
94
|
+
borderColor: "divider"
|
|
95
|
+
}}
|
|
96
|
+
>
|
|
97
|
+
<MuiTabs
|
|
98
|
+
ref={ref}
|
|
99
|
+
orientation="horizontal"
|
|
100
|
+
visibleScrollbar={false}
|
|
101
|
+
scrollButtons={false}
|
|
102
|
+
allowScrollButtonsMobile={false}
|
|
103
|
+
sx={{
|
|
104
|
+
...sx,
|
|
105
|
+
flex: 1,
|
|
106
|
+
}}
|
|
107
|
+
classes={{
|
|
108
|
+
scroller: 'tabRoot',
|
|
109
|
+
flexContainer: 'tabList'
|
|
110
|
+
}}
|
|
111
|
+
value={value}
|
|
112
|
+
onChange={onChange}
|
|
113
|
+
{...rest}
|
|
114
|
+
>
|
|
115
|
+
{items
|
|
116
|
+
.map((tabProps, i) => (
|
|
117
|
+
<MuiTab
|
|
118
|
+
key={'muiTab-' + i}
|
|
119
|
+
iconPosition="start"
|
|
120
|
+
{...tabProps}
|
|
121
|
+
sx={{
|
|
122
|
+
...tabProps.sx,
|
|
123
|
+
...(i >= overflowIndex ? {display: "none"} : undefined),
|
|
124
|
+
minHeight: 48,
|
|
125
|
+
}}
|
|
126
|
+
/>
|
|
127
|
+
))}
|
|
128
|
+
</MuiTabs>
|
|
129
|
+
{(overflowIndex < items.length) && (
|
|
130
|
+
<Fragment>
|
|
131
|
+
<IconButton
|
|
132
|
+
sx={{
|
|
133
|
+
ml: 1
|
|
134
|
+
}}
|
|
135
|
+
onClick={ev => setDropdownEl(ev.currentTarget)}
|
|
136
|
+
color={selectedIndex >= overflowIndex ? "primary" : "default"}
|
|
137
|
+
>
|
|
138
|
+
<MoreHorizIcon fontSize="inherit" />
|
|
139
|
+
</IconButton>
|
|
140
|
+
<Menu
|
|
141
|
+
anchorEl={dropdownEl}
|
|
142
|
+
open={!!dropdownEl}
|
|
143
|
+
onClose={() => setDropdownEl(null)}
|
|
144
|
+
>
|
|
145
|
+
{items
|
|
146
|
+
.map((tabProps, i) => {
|
|
147
|
+
const {
|
|
148
|
+
label,
|
|
149
|
+
icon,
|
|
150
|
+
onClick,
|
|
151
|
+
component,
|
|
152
|
+
value: itemValue,
|
|
153
|
+
...rest
|
|
154
|
+
} = tabProps;
|
|
155
|
+
|
|
156
|
+
const selected = value == itemValue;
|
|
157
|
+
|
|
158
|
+
function handleClick(ev: SyntheticEvent) {
|
|
159
|
+
if (!selected && onChange) {
|
|
160
|
+
onChange(ev, i);
|
|
161
|
+
}
|
|
162
|
+
if (onClick) {
|
|
163
|
+
onClick(ev);
|
|
164
|
+
}
|
|
165
|
+
setDropdownEl(null);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return (
|
|
169
|
+
<MenuItem
|
|
170
|
+
key={'dropdownItem-' + i}
|
|
171
|
+
onClick={handleClick}
|
|
172
|
+
component={component ?? "li"}
|
|
173
|
+
sx={i < overflowIndex ? hiddenSx : {}}
|
|
174
|
+
selected={selected}
|
|
175
|
+
{...rest}
|
|
176
|
+
>
|
|
177
|
+
{icon && <ListItemIcon>{icon}</ListItemIcon>}
|
|
178
|
+
<ListItemText>{label}</ListItemText>
|
|
179
|
+
</MenuItem>
|
|
180
|
+
)
|
|
181
|
+
})}
|
|
182
|
+
</Menu>
|
|
183
|
+
</Fragment>
|
|
184
|
+
)}
|
|
185
|
+
</Stack>
|
|
186
|
+
);
|
|
187
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {Tabs} from "./Tabs";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {Instant, PlainDate, PlainDateTime, PlainTime} from "./polyfill";
|
|
2
|
+
|
|
3
|
+
export function tryParsePlainDate(value: string | undefined | null) {
|
|
4
|
+
return tryParseString(value, v => PlainDate.from(v, {overflow: "reject"}));
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function tryParsePlainDateTime(value: string | undefined | null) {
|
|
8
|
+
return tryParseString(value, v => PlainDateTime.from(v, {overflow: "reject"}));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function tryParsePlainTime(value: string | undefined | null) {
|
|
12
|
+
return tryParseString(value, v => PlainTime.from(v, {overflow: "reject"}));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function tryParseInstant(value: string | undefined | null) {
|
|
16
|
+
return tryParseString(value, Instant.from);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function tryParseString<T>(value: string | undefined | null, parseFn: (value: string) => T) {
|
|
20
|
+
if (value) {
|
|
21
|
+
try {
|
|
22
|
+
return parseFn(value);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
// ignore parse error
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module is a compatibility layer for the coming release of the Temporal API
|
|
3
|
+
* in browsers. It exports all relevant objects from the API to allow a smooth
|
|
4
|
+
* switch to a conditional polyfill or using the browser built-ins.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {Temporal, Intl, toTemporalInstant} from '@js-temporal/polyfill';
|
|
8
|
+
|
|
9
|
+
export const {
|
|
10
|
+
Instant,
|
|
11
|
+
ZonedDateTime,
|
|
12
|
+
PlainDateTime,
|
|
13
|
+
PlainDate,
|
|
14
|
+
PlainTime,
|
|
15
|
+
Now,
|
|
16
|
+
Duration,
|
|
17
|
+
TimeZone
|
|
18
|
+
} = Temporal;
|
|
19
|
+
|
|
20
|
+
export type Instant = Temporal.Instant;
|
|
21
|
+
export type ZonedDateTime = Temporal.ZonedDateTime;
|
|
22
|
+
export type PlainDateTime = Temporal.PlainDateTime;
|
|
23
|
+
export type PlainDate = Temporal.PlainDate;
|
|
24
|
+
export type PlainTime = Temporal.PlainTime;
|
|
25
|
+
export type Duration = Temporal.Duration;
|
|
26
|
+
export type TimeZone = Temporal.TimeZone;
|
|
27
|
+
|
|
28
|
+
export const {
|
|
29
|
+
DateTimeFormat
|
|
30
|
+
} = Intl;
|
|
31
|
+
|
|
32
|
+
export type DateTimeFormat = Intl.DateTimeFormat;
|
|
33
|
+
export type DateTimeFormatOptions = Intl.DateTimeFormatOptions;
|
|
34
|
+
export type Formattable = Intl.Formattable;
|
|
35
|
+
|
|
36
|
+
export {toTemporalInstant};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import {useCallback, useState} from "react";
|
|
2
|
+
|
|
3
|
+
export function useFlag(initialValue: boolean) {
|
|
4
|
+
const [flag, setFlag] = useState(initialValue);
|
|
5
|
+
const set = useCallback(() => setFlag(true), []);
|
|
6
|
+
const clear = useCallback(() => setFlag(false), []);
|
|
7
|
+
const toggle = useCallback(() => setFlag(prev => !prev), []);
|
|
8
|
+
return [flag, set, clear, toggle] as const;
|
|
9
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {Container, ContainerProps, Stack} from "@mui/material";
|
|
2
|
+
import React, {PropsWithChildren} from "react";
|
|
3
|
+
import {ErrorAlert} from "../ErrorAlert";
|
|
4
|
+
|
|
5
|
+
export interface ViewProps extends ContainerProps {
|
|
6
|
+
loading?: boolean;
|
|
7
|
+
error?: any;
|
|
8
|
+
spacing?: number;
|
|
9
|
+
py?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function View(props: PropsWithChildren<ViewProps>) {
|
|
13
|
+
const {maxWidth, loading, error, spacing = 2, py = 4, children, ...containerProps} = props;
|
|
14
|
+
return (
|
|
15
|
+
<Container maxWidth={maxWidth} {...containerProps}>
|
|
16
|
+
<Stack spacing={spacing} py={py} sx={{opacity: loading ? 0.5 : 1}}>
|
|
17
|
+
{error && <ErrorAlert error={error} />}
|
|
18
|
+
{children}
|
|
19
|
+
</Stack>
|
|
20
|
+
</Container>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {Box, Grid, Stack, Typography, TypographyProps} from "@mui/material";
|
|
2
|
+
import React, {PropsWithChildren} from "react";
|
|
3
|
+
import {PageTitle} from "../layout";
|
|
4
|
+
|
|
5
|
+
export interface ViewHeaderProps {
|
|
6
|
+
title?: React.ReactNode;
|
|
7
|
+
titleVariant?: TypographyProps["variant"];
|
|
8
|
+
titleAdornment?: React.ReactNode;
|
|
9
|
+
subTitle?: React.ReactNode;
|
|
10
|
+
actions?: React.ReactNode;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function ViewHeader(props: PropsWithChildren<ViewHeaderProps>) {
|
|
14
|
+
const {title, titleVariant, titleAdornment, subTitle, actions} = props;
|
|
15
|
+
return (
|
|
16
|
+
<Box>
|
|
17
|
+
<Grid container spacing={2} justifyContent="space-between" alignItems="center">
|
|
18
|
+
<Grid item xs>
|
|
19
|
+
<Stack direction="row" spacing={2} alignItems="center">
|
|
20
|
+
<PageTitle title={title} variant={titleVariant} overflow="hidden" textOverflow="ellipsis" />
|
|
21
|
+
{titleAdornment}
|
|
22
|
+
</Stack>
|
|
23
|
+
<Typography variant="subtitle1">
|
|
24
|
+
{subTitle}
|
|
25
|
+
</Typography>
|
|
26
|
+
</Grid>
|
|
27
|
+
{actions && (
|
|
28
|
+
<Grid item>
|
|
29
|
+
{actions}
|
|
30
|
+
</Grid>
|
|
31
|
+
)}
|
|
32
|
+
</Grid>
|
|
33
|
+
</Box>
|
|
34
|
+
);
|
|
35
|
+
}
|