@antelopejs/dms 0.9.8 → 0.11.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 +171 -0
- package/README.md +1 -1
- package/data/module-store/catalog.json +2 -2
- package/dist/attachments/table-view.js +2 -2
- package/dist/attachments/table-view.js.map +1 -1
- package/dist/automation/actions.d.ts +2 -0
- package/dist/automation/actions.js +116 -71
- package/dist/automation/actions.js.map +1 -1
- package/dist/automation/i18n.d.ts +4 -0
- package/dist/automation/i18n.js +19 -0
- package/dist/automation/i18n.js.map +1 -0
- package/dist/automation/send-notification.d.ts +21 -0
- package/dist/automation/send-notification.js +163 -0
- package/dist/automation/send-notification.js.map +1 -0
- package/dist/automation/triggers.js +19 -25
- package/dist/automation/triggers.js.map +1 -1
- package/dist/client-origin-cors.d.ts +1 -0
- package/dist/client-origin-cors.js +19 -0
- package/dist/client-origin-cors.js.map +1 -0
- package/dist/config.d.ts +3 -2
- package/dist/config.js +5 -7
- package/dist/config.js.map +1 -1
- package/dist/frontend-module.d.ts +4 -0
- package/dist/frontend-module.js +37 -0
- package/dist/frontend-module.js.map +1 -0
- package/dist/implementations/dms/client-ip.js +1 -1
- package/dist/implementations/dms/client-ip.js.map +1 -1
- package/dist/implementations/dms/dev-reload.d.ts +5 -0
- package/dist/implementations/dms/dev-reload.js +23 -3
- package/dist/implementations/dms/dev-reload.js.map +1 -1
- package/dist/implementations/dms/frontend-modules.d.ts +2 -4
- package/dist/implementations/dms/frontend-modules.js +38 -94
- package/dist/implementations/dms/frontend-modules.js.map +1 -1
- package/dist/implementations/dms/frontend-ready.d.ts +12 -2
- package/dist/implementations/dms/frontend-ready.js +34 -4
- package/dist/implementations/dms/frontend-ready.js.map +1 -1
- package/dist/implementations/dms/layout-banners.d.ts +2 -1
- package/dist/implementations/dms/layout-banners.js +9 -0
- package/dist/implementations/dms/layout-banners.js.map +1 -1
- package/dist/implementations/dms/manifest.d.ts +7 -2
- package/dist/implementations/dms/manifest.js +12 -7
- package/dist/implementations/dms/manifest.js.map +1 -1
- package/dist/implementations/dms/page.d.ts +4 -3
- package/dist/implementations/dms/page.js +49 -18
- package/dist/implementations/dms/page.js.map +1 -1
- package/dist/implementations/dms/permissions-resolver.d.ts +2 -2
- package/dist/implementations/dms/permissions-resolver.js +2 -2
- package/dist/implementations/dms/permissions-resolver.js.map +1 -1
- package/dist/implementations/dms/realtime.js +1 -0
- package/dist/implementations/dms/realtime.js.map +1 -1
- package/dist/implementations/dms-base/bulk-selection.d.ts +1 -1
- package/dist/implementations/dms-base/bulk-selection.js +23 -1
- package/dist/implementations/dms-base/bulk-selection.js.map +1 -1
- package/dist/implementations/dms-base/filter-tokens.js +5 -3
- package/dist/implementations/dms-base/filter-tokens.js.map +1 -1
- package/dist/implementations/dms-base/search-route.d.ts +1 -0
- package/dist/implementations/dms-base/search-route.js +35 -13
- package/dist/implementations/dms-base/search-route.js.map +1 -1
- package/dist/implementations/dms-base/table-view.js +11 -6
- package/dist/implementations/dms-base/table-view.js.map +1 -1
- package/dist/implementations/dms-notifications/index.d.ts +2 -2
- package/dist/implementations/dms-notifications/index.js +5 -5
- package/dist/implementations/dms-notifications/index.js.map +1 -1
- package/dist/index.js +32 -55
- package/dist/index.js.map +1 -1
- package/dist/pages/modules/index.d.ts +1 -0
- package/dist/pages/modules/index.js +1 -0
- package/dist/pages/modules/index.js.map +1 -1
- package/dist/pages/modules/modules-store.d.ts +9 -0
- package/dist/pages/modules/modules-store.js +30 -0
- package/dist/pages/modules/modules-store.js.map +1 -0
- package/dist/pages/settings/users/account-credentials.js +2 -2
- package/dist/pages/settings/users/account-credentials.js.map +1 -1
- package/dist/pages/settings/users/account-data-store.js +25 -8
- package/dist/pages/settings/users/account-data-store.js.map +1 -1
- package/dist/pages/settings/users/invite-extension-routes.js +9 -3
- package/dist/pages/settings/users/invite-extension-routes.js.map +1 -1
- package/dist/pages/settings/users/member-management.js +13 -14
- package/dist/pages/settings/users/member-management.js.map +1 -1
- package/dist/pages/settings/users/profile.d.ts +1 -4
- package/dist/pages/settings/users/profile.js +0 -35
- package/dist/pages/settings/users/profile.js.map +1 -1
- package/dist/pages/settings/users/role-editor-store.js +26 -18
- package/dist/pages/settings/users/role-editor-store.js.map +1 -1
- package/dist/pages/settings/users/role-editor.d.ts +0 -1
- package/dist/pages/settings/users/role-editor.js +1 -2
- package/dist/pages/settings/users/role-editor.js.map +1 -1
- package/dist/pages/settings/users/role-preview.js +1 -2
- package/dist/pages/settings/users/role-preview.js.map +1 -1
- package/dist/pages/settings/users/roles.js +2 -2
- package/dist/pages/settings/users/roles.js.map +1 -1
- package/dist/pages/settings/users/two-factor-operations.js.map +1 -1
- package/dist/realtime/broker.d.ts +6 -0
- package/dist/realtime/broker.js +8 -1
- package/dist/realtime/broker.js.map +1 -1
- package/dist/realtime/presence.d.ts +8 -3
- package/dist/realtime/presence.js +8 -4
- package/dist/realtime/presence.js.map +1 -1
- package/dist/realtime/sessions.d.ts +11 -1
- package/dist/realtime/sessions.js +21 -3
- package/dist/realtime/sessions.js.map +1 -1
- package/dist/realtime/table-view.d.ts +2 -2
- package/dist/realtime/table-view.js +4 -3
- package/dist/realtime/table-view.js.map +1 -1
- package/dist/routes/auth/client-ip.d.ts +1 -0
- package/dist/routes/auth/client-ip.js +18 -0
- package/dist/routes/auth/client-ip.js.map +1 -1
- package/dist/routes/auth/oauth/config.d.ts +2 -1
- package/dist/routes/auth/oauth/config.js +5 -1
- package/dist/routes/auth/oauth/config.js.map +1 -1
- package/dist/routes/auth/session-handoff.d.ts +0 -1
- package/dist/routes/auth/session-handoff.js +0 -2
- package/dist/routes/auth/session-handoff.js.map +1 -1
- package/dist/routes/auth.js +3 -2
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/index.d.ts +0 -1
- package/dist/routes/index.js +0 -1
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/realtime.d.ts +13 -1
- package/dist/routes/realtime.js +114 -29
- package/dist/routes/realtime.js.map +1 -1
- package/dist/startup-config.d.ts +2 -0
- package/dist/startup-config.js +62 -0
- package/dist/startup-config.js.map +1 -0
- package/dist/store/interfaces.d.ts +3 -2
- package/dist/store/interfaces.js +16 -6
- package/dist/store/interfaces.js.map +1 -1
- package/dist/store/listing.js +25 -15
- package/dist/store/listing.js.map +1 -1
- package/dist/store/operations.js +5 -2
- package/dist/store/operations.js.map +1 -1
- package/dist/store/requirements.js +3 -2
- package/dist/store/requirements.js.map +1 -1
- package/dist/store/runtime.d.ts +10 -1
- package/dist/store/runtime.js +33 -6
- package/dist/store/runtime.js.map +1 -1
- package/dist/store/types.d.ts +10 -0
- package/dist/utils/ensure-default-tenant.d.ts +2 -1
- package/dist/utils/ensure-default-tenant.js +13 -1
- package/dist/utils/ensure-default-tenant.js.map +1 -1
- package/dist/utils/export-jobs.js +2 -1
- package/dist/utils/export-jobs.js.map +1 -1
- package/dist/validation/auth.schema.d.ts +2 -2
- package/dist/validation/member-invite.schema.d.ts +2 -10
- package/dist/validation/member-invite.schema.js +2 -15
- package/dist/validation/member-invite.schema.js.map +1 -1
- package/frontend-vue/dms.frontend.ts +24 -5
- package/frontend-vue/dms.server.ts +17 -0
- package/frontend-vue/layers/dms-auth/server/accounts.ts +3 -4
- package/frontend-vue/layers/dms-core/app/build/composables/renderNow.ts +33 -0
- package/frontend-vue/layers/dms-core/app/build/composables/user/tablePreferences.ts +5 -1
- package/frontend-vue/layers/dms-core/app/build/utils/crossTab.ts +199 -0
- package/frontend-vue/layers/dms-core/app/build/utils/sharedRealtimeConnection.ts +410 -0
- package/frontend-vue/layers/dms-core/app/composables/auth/useApiData.ts +77 -12
- package/frontend-vue/layers/dms-core/app/composables/data-types/useDataType.ts +26 -0
- package/frontend-vue/layers/dms-core/app/composables/live/livePauseSource.ts +29 -0
- package/frontend-vue/layers/dms-core/app/composables/period/compareResolvers.ts +150 -9
- package/frontend-vue/layers/dms-core/app/composables/period/usePeriod.ts +6 -4
- package/frontend-vue/layers/dms-core/app/composables/period/usePeriodScope.ts +27 -1
- package/frontend-vue/layers/dms-core/app/composables/realtime/useUserRealtime.ts +256 -119
- package/frontend-vue/layers/dms-core/app/composables/translation/useComposedText.ts +21 -8
- package/frontend-vue/layers/dms-core/app/composables/translation/useTranslation.ts +25 -5
- package/frontend-vue/layers/dms-core/app/composables/useApiError.ts +3 -5
- package/frontend-vue/layers/dms-core/app/composables/useFieldErrors.ts +61 -26
- package/frontend-vue/layers/dms-core/app/plugins/dev-error-log.ts +16 -0
- package/frontend-vue/layers/dms-core/app/types/user.ts +6 -0
- package/frontend-vue/layers/dms-core/app/utils/composedText.ts +7 -2
- package/frontend-vue/layers/dms-core/app/utils/formatter.ts +134 -35
- package/frontend-vue/layers/dms-core/app/utils/url-interpolation.ts +18 -1
- package/frontend-vue/layers/dms-core/i18n/locales/core-en-GB.json +136 -2
- package/frontend-vue/layers/dms-core/i18n/locales/core-fr-FR.json +136 -2
- package/frontend-vue/layers/dms-core/shared/types/app-config.ts +0 -2
- package/frontend-vue/layers/dms-layout/app/app.config.ts +0 -1
- package/frontend-vue/layers/dms-layout/app/assets/css/main.css +11 -1
- package/frontend-vue/layers/dms-layout/app/assets/fonts/Geist-Italic-Variable.woff2 +0 -0
- package/frontend-vue/layers/dms-layout/app/assets/fonts/Geist-Variable.woff2 +0 -0
- package/frontend-vue/layers/dms-layout/app/assets/fonts/GeistMono-Italic-Variable.woff2 +0 -0
- package/frontend-vue/layers/dms-layout/app/assets/fonts/GeistMono-Variable.woff2 +0 -0
- package/frontend-vue/layers/dms-layout/app/build/components/layout/DashboardBanners.vue +3 -2
- package/frontend-vue/layers/dms-layout/app/build/components/layout/DashboardHeader.vue +41 -21
- package/frontend-vue/layers/dms-layout/app/build/components/layout/DashboardPageBody.vue +6 -2
- package/frontend-vue/layers/dms-layout/app/build/components/layout/DashboardSidebar.vue +4 -19
- package/frontend-vue/layers/dms-layout/app/build/components/layout/Footer.vue +11 -107
- package/frontend-vue/layers/dms-layout/app/build/components/layout/GithubStarPrompt.vue +18 -7
- package/frontend-vue/layers/dms-layout/app/build/components/layout/PageHeaderActionsOutlet.vue +4 -0
- package/frontend-vue/layers/dms-layout/app/build/components/layout/RowSidePanel.vue +43 -82
- package/frontend-vue/layers/dms-layout/app/build/components/layout/SidebarUserMenu.vue +44 -3
- package/frontend-vue/layers/dms-layout/app/build/components/layout/UserIdentity.vue +11 -3
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleCatalogTile.vue +132 -35
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleManageMenu.vue +59 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleSourceLabel.vue +25 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleStoreBanners.vue +73 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleStoreOperation.vue +116 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleStoreRequirements.vue +8 -3
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleStoreTile.vue +85 -207
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleTile.vue +10 -3
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleTileSkeleton.vue +68 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/notification/NotificationInboxDisplay.vue +24 -8
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/notification/NotificationInboxItem.vue +8 -5
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/region/RegionTimeZoneInput.vue +1 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/roles/role-permissions.ts +19 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/roles/useRoleEditor.ts +2 -1
- package/frontend-vue/layers/dms-layout/app/build/composables/layout/useSidePanelWidth.ts +31 -70
- package/frontend-vue/layers/dms-layout/app/build/composables/notification/useNotificationGroupsOpen.ts +11 -1
- package/frontend-vue/layers/dms-layout/app/build/utils/dev-reload-stream.ts +81 -0
- package/frontend-vue/layers/dms-layout/app/build/utils/github-repository.ts +2 -2
- package/frontend-vue/layers/dms-layout/app/build/utils/module-store-catalog.ts +232 -36
- package/frontend-vue/layers/dms-layout/app/build/utils/modules-catalog.ts +122 -14
- package/frontend-vue/layers/dms-layout/app/composables/layout/useLayoutBanners.ts +32 -3
- package/frontend-vue/layers/dms-layout/app/composables/layout/useServedHeaderActions.ts +49 -11
- package/frontend-vue/layers/dms-layout/app/composables/page/useModuleHistory.ts +3 -2
- package/frontend-vue/layers/dms-layout/app/composables/page/useModuleStore.ts +59 -4
- package/frontend-vue/layers/dms-layout/app/composables/page/useModuleStoreActions.ts +194 -0
- package/frontend-vue/layers/dms-layout/app/composables/page/usePageComponentPreload.ts +23 -3
- package/frontend-vue/layers/dms-layout/app/composables/page/usePageLayout.ts +4 -2
- package/frontend-vue/layers/dms-layout/app/composables/page/usePageRecordDeletion.ts +162 -0
- package/frontend-vue/layers/dms-layout/app/composables/page/useSiteLayout.ts +6 -1
- package/frontend-vue/layers/dms-layout/app/custom-layouts/DefaultLayout.vue +6 -2
- package/frontend-vue/layers/dms-layout/app/custom-layouts/SettingsLayout.vue +6 -2
- package/frontend-vue/layers/dms-layout/app/custom-pages/modules-store.vue +291 -0
- package/frontend-vue/layers/dms-layout/app/custom-pages/modules.vue +87 -474
- package/frontend-vue/layers/dms-layout/app/middleware/module-routing.global.ts +3 -0
- package/frontend-vue/layers/dms-layout/app/pages/[...slug].vue +13 -22
- package/frontend-vue/layers/dms-layout/app/plugins/command-palette-navigation.client.ts +11 -10
- package/frontend-vue/layers/dms-layout/app/plugins/command-palette-personal-pages.client.ts +22 -52
- package/frontend-vue/layers/dms-layout/app/plugins/command-palette-quick-actions.client.ts +7 -7
- package/frontend-vue/layers/dms-layout/app/plugins/command-palette-session.client.ts +11 -10
- package/frontend-vue/layers/dms-layout/app/plugins/dms-dev-reload.client.ts +14 -9
- package/frontend-vue/layers/dms-layout/app/theme/actions.ts +5 -4
- package/frontend-vue/layers/dms-layout/app/theme/form-controls.ts +9 -4
- package/frontend-vue/layers/dms-layout/app/theme/surfaces.ts +22 -6
- package/frontend-vue/layers/dms-layout/app/types/module-store.ts +9 -0
- package/frontend-vue/layers/dms-layout/app/types/page.ts +15 -1
- package/frontend-vue/layers/dms-layout/app/utils/account-menu.ts +11 -0
- package/frontend-vue/layers/dms-layout/app/utils/breadcrumb.ts +57 -0
- package/frontend-vue/layers/dms-layout/app/utils/pageQuery.ts +26 -0
- package/frontend-vue/layers/dms-layout/i18n/locales/layout-en-GB.json +45 -18
- package/frontend-vue/layers/dms-layout/i18n/locales/layout-fr-FR.json +44 -17
- package/frontend-vue/layers/dms-ui/app/build/components/containers/TargetComponentTree.vue +31 -0
- package/frontend-vue/layers/dms-ui/app/build/components/containers/constants.ts +25 -0
- package/frontend-vue/layers/dms-ui/app/build/components/containers/drawer/DynamicDrawer.vue +244 -15
- package/frontend-vue/layers/dms-ui/app/build/components/containers/modal/DynamicModal.vue +42 -25
- package/frontend-vue/layers/dms-ui/app/build/components/containers/row/RowHeader.vue +153 -0
- package/frontend-vue/layers/dms-ui/app/build/components/containers/row/RowNotFound.vue +44 -0
- package/frontend-vue/layers/dms-ui/app/build/components/containers/row/drawerRowHeader.ts +35 -0
- package/frontend-vue/layers/dms-ui/app/build/components/form/FormEntries.vue +44 -9
- package/frontend-vue/layers/dms-ui/app/build/components/form/FormErrorSummary.vue +11 -4
- package/frontend-vue/layers/dms-ui/app/build/components/form/FormFieldControl.vue +38 -5
- package/frontend-vue/layers/dms-ui/app/build/components/form/FormFieldNotes.vue +29 -5
- package/frontend-vue/layers/dms-ui/app/build/components/form/FormLoadError.vue +5 -1
- package/frontend-vue/layers/dms-ui/app/build/components/form/FormSectionNav.vue +3 -1
- package/frontend-vue/layers/dms-ui/app/build/components/form/FormSections.vue +106 -27
- package/frontend-vue/layers/dms-ui/app/build/components/table/Actions.vue +12 -4
- package/frontend-vue/layers/dms-ui/app/build/components/table/Empty.vue +4 -2
- package/frontend-vue/layers/dms-ui/app/build/components/table/FiltersRow.vue +48 -1
- package/frontend-vue/layers/dms-ui/app/build/components/table/Pagination.vue +55 -54
- package/frontend-vue/layers/dms-ui/app/build/components/table/RowSelection.vue +2 -1
- package/frontend-vue/layers/dms-ui/app/build/components/table/Table.vue +396 -288
- package/frontend-vue/layers/dms-ui/app/build/components/table/Tabs.vue +2 -1
- package/frontend-vue/layers/dms-ui/app/build/components/table/Views.vue +2 -1
- package/frontend-vue/layers/dms-ui/app/build/components/table-view/CardAvatar.vue +59 -0
- package/frontend-vue/layers/dms-ui/app/build/components/table-view/CardGridSkeleton.vue +19 -2
- package/frontend-vue/layers/dms-ui/app/build/components/table-view/CardRowActions.vue +38 -0
- package/frontend-vue/layers/dms-ui/app/build/components/table-view/CardsDisplay.vue +148 -104
- package/frontend-vue/layers/dms-ui/app/build/components/table-view/LiveHoldBanner.vue +17 -2
- package/frontend-vue/layers/dms-ui/app/build/composables/actions/bulkSelection.ts +43 -9
- package/frontend-vue/layers/dms-ui/app/build/composables/actions/rowComponentOptions.ts +76 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/actions/rowNavigation.ts +172 -27
- package/frontend-vue/layers/dms-ui/app/build/composables/actions/useActionTargets.ts +270 -46
- package/frontend-vue/layers/dms-ui/app/build/composables/confirm/actionError.ts +6 -1
- package/frontend-vue/layers/dms-ui/app/build/composables/confirm/confirmDialogTexts.ts +2 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/containers/closingLayers.ts +186 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/containers/context.ts +14 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/containers/drawerSize.ts +229 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/containers/useResizableSize.ts +175 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/data-types/metricCells.ts +18 -35
- package/frontend-vue/layers/dms-ui/app/build/composables/data-types/numberSuffix.ts +44 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/data-types/registerDefaults.ts +123 -27
- package/frontend-vue/layers/dms-ui/app/build/composables/data-types/registerFieldTypes.ts +2 -1
- package/frontend-vue/layers/dms-ui/app/build/composables/data-types/relationFilter.ts +75 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/data-types/relationRows.ts +92 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/data-types/relationValue.ts +39 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/data-types/twoLineCell.ts +3 -3
- package/frontend-vue/layers/dms-ui/app/build/composables/data-types/useColumnValueRenderer.ts +6 -2
- package/frontend-vue/layers/dms-ui/app/build/composables/form/createFormFields.ts +15 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/form/fieldSaved.ts +40 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/form/fieldValueRule.ts +62 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/form/formEntryContext.ts +5 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/form/formFooter.ts +42 -7
- package/frontend-vue/layers/dms-ui/app/build/composables/form/formLayout.ts +106 -4
- package/frontend-vue/layers/dms-ui/app/build/composables/form/formRecordLoad.ts +11 -5
- package/frontend-vue/layers/dms-ui/app/build/composables/form/formSections.ts +32 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/form/formValidation.ts +36 -4
- package/frontend-vue/layers/dms-ui/app/build/composables/form/readonlyValue.ts +19 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/form/registerFormFunctions.ts +27 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/form/repeaterTable.ts +78 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/form/serverFieldErrors.ts +49 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/form/toasterClearance.ts +118 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/form/useInstantForm.ts +12 -1
- package/frontend-vue/layers/dms-ui/app/build/composables/live/currentPageLive.ts +41 -3
- package/frontend-vue/layers/dms-ui/app/build/composables/live/livePoller.ts +10 -2
- package/frontend-vue/layers/dms-ui/app/build/composables/live/pageReadClock.ts +28 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/live/shortcuts.ts +1 -1
- package/frontend-vue/layers/dms-ui/app/build/composables/live/usePageLiveHost.ts +17 -3
- package/frontend-vue/layers/dms-ui/app/build/composables/live/useUpdatedLabel.ts +38 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/page-toolbar/pageToolbarContext.ts +75 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/page-toolbar/toolbarControlHeight.ts +29 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/period/periodComparison.ts +52 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/period/periodDisplay.ts +21 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/period/periodShortLabels.ts +28 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/period/usePeriodDraft.ts +1 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table/useRelationFilterLabels.ts +97 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table/useRowScrollAnchor.ts +106 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table/useTable.ts +9 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table/useTableColumns.ts +1 -2
- package/frontend-vue/layers/dms-ui/app/build/composables/table/utils/archivedCount.ts +31 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table/utils/filterEditorValue.ts +38 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table/utils/formatFilterValue.ts +33 -2
- package/frontend-vue/layers/dms-ui/app/build/composables/table/utils/scrollEdges.ts +31 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useCardFields.ts +33 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useMobileDisplay.ts +48 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useScrolledPastTop.ts +41 -18
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableFooter.ts +3 -2
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableLinkedVisit.ts +78 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableLiveHold.ts +135 -22
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableRows.ts +56 -25
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableViewRowActions.ts +90 -35
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableViews.ts +86 -10
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/bulkActions.ts +14 -4
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/card.ts +127 -2
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/compareValues.ts +13 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/expandedRows.ts +28 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/groupedRows.ts +114 -1
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/linkedArrival.ts +308 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/locateRow.ts +106 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/pageArrival.ts +34 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/pinnedRows.ts +17 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/quickFilters.ts +41 -33
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/recordLink.ts +24 -8
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/tableCounts.ts +113 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/tableQuery.ts +27 -4
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/views.ts +22 -6
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/utils/writeError.ts +21 -0
- package/frontend-vue/layers/dms-ui/app/build/utils/addressSuggestions.ts +49 -0
- package/frontend-vue/layers/dms-ui/app/build/utils/codeHighlight.ts +67 -29
- package/frontend-vue/layers/dms-ui/app/build/utils/eyebrow.ts +12 -0
- package/frontend-vue/layers/dms-ui/app/build/utils/fieldOptionsI18n.ts +51 -11
- package/frontend-vue/layers/dms-ui/app/build/utils/htmlGrammar.ts +79 -0
- package/frontend-vue/layers/dms-ui/app/build/utils/inputWidth.ts +53 -0
- package/frontend-vue/layers/dms-ui/app/build/utils/numberAdjustment.ts +6 -3
- package/frontend-vue/layers/dms-ui/app/build/utils/relativeDate.ts +19 -5
- package/frontend-vue/layers/dms-ui/app/build/utils/scrollWithin.ts +99 -0
- package/frontend-vue/layers/dms-ui/app/build/utils/shellParser.ts +1 -1
- package/frontend-vue/layers/dms-ui/app/build/utils/streamHighlight.ts +90 -0
- package/frontend-vue/layers/dms-ui/app/build/utils/urlVariables.ts +36 -14
- package/frontend-vue/layers/dms-ui/app/components/PasswordStrength.vue +1 -1
- package/frontend-vue/layers/dms-ui/app/components/RecursiveComponent.vue +9 -1
- package/frontend-vue/layers/dms-ui/app/components/blocks/LiveToggleBlock.vue +80 -32
- package/frontend-vue/layers/dms-ui/app/components/blocks/PageToolbarBlock.vue +137 -0
- package/frontend-vue/layers/dms-ui/app/components/blocks/StatGroupBlock.vue +5 -0
- package/frontend-vue/layers/dms-ui/app/components/chart/ApexChartHost.vue +16 -2
- package/frontend-vue/layers/dms-ui/app/components/chart/Chart.vue +24 -5
- package/frontend-vue/layers/dms-ui/app/components/chart/ChartCard.vue +41 -23
- package/frontend-vue/layers/dms-ui/app/components/code-snippet/CodeSnippet.vue +23 -12
- package/frontend-vue/layers/dms-ui/app/components/confirm/ConfirmModal.vue +1 -1
- package/frontend-vue/layers/dms-ui/app/components/container-footer/ContainerFooter.vue +34 -0
- package/frontend-vue/layers/dms-ui/app/components/field-row/FieldRow.vue +25 -2
- package/frontend-vue/layers/dms-ui/app/components/flow-canvas/FlowCanvas.vue +2 -2
- package/frontend-vue/layers/dms-ui/app/components/form/Form.vue +119 -36
- package/frontend-vue/layers/dms-ui/app/components/form/components/Cascader.vue +53 -22
- package/frontend-vue/layers/dms-ui/app/components/form/components/DatePicker.vue +20 -1
- package/frontend-vue/layers/dms-ui/app/components/form/components/Display.vue +13 -1
- package/frontend-vue/layers/dms-ui/app/components/form/components/Image.vue +8 -3
- package/frontend-vue/layers/dms-ui/app/components/form/components/InputAddress.vue +53 -5
- package/frontend-vue/layers/dms-ui/app/components/form/components/InputCode.vue +29 -5
- package/frontend-vue/layers/dms-ui/app/components/form/components/InputNumber.vue +45 -8
- package/frontend-vue/layers/dms-ui/app/components/form/components/InputPercentage.vue +28 -5
- package/frontend-vue/layers/dms-ui/app/components/form/components/InputSecret.vue +5 -0
- package/frontend-vue/layers/dms-ui/app/components/form/components/InputText.vue +19 -2
- package/frontend-vue/layers/dms-ui/app/components/form/components/InputTime.vue +2 -1
- package/frontend-vue/layers/dms-ui/app/components/form/components/Relation.vue +226 -65
- package/frontend-vue/layers/dms-ui/app/components/form/components/Repeater.vue +80 -30
- package/frontend-vue/layers/dms-ui/app/components/form/components/RepeaterTable.vue +210 -0
- package/frontend-vue/layers/dms-ui/app/components/form/components/Select.vue +4 -2
- package/frontend-vue/layers/dms-ui/app/components/grid/GridRow.vue +11 -2
- package/frontend-vue/layers/dms-ui/app/components/key-value-list/KeyValueList.vue +79 -70
- package/frontend-vue/layers/dms-ui/app/components/kpi/KpiCard.vue +117 -21
- package/frontend-vue/layers/dms-ui/app/components/meter/Meter.vue +2 -1
- package/frontend-vue/layers/dms-ui/app/components/period/PeriodSelector.vue +113 -34
- package/frontend-vue/layers/dms-ui/app/components/save-bar/SaveBar.vue +14 -2
- package/frontend-vue/layers/dms-ui/app/components/section-header/Eyebrow.vue +6 -1
- package/frontend-vue/layers/dms-ui/app/components/segmented/Segmented.vue +13 -0
- package/frontend-vue/layers/dms-ui/app/components/stat-group/StatGroup.vue +52 -3
- package/frontend-vue/layers/dms-ui/app/components/tab/Tab.vue +2 -1
- package/frontend-vue/layers/dms-ui/app/components/table-view/CascaderPath.vue +74 -25
- package/frontend-vue/layers/dms-ui/app/components/table-view/KanbanBoard.vue +48 -44
- package/frontend-vue/layers/dms-ui/app/components/table-view/KanbanDisplay.vue +4 -1
- package/frontend-vue/layers/dms-ui/app/components/table-view/TableView.vue +426 -97
- package/frontend-vue/layers/dms-ui/app/components/top-list/TopListCard.vue +33 -5
- package/frontend-vue/layers/dms-ui/app/composables/chart/apexCategoryLabels.ts +68 -0
- package/frontend-vue/layers/dms-ui/app/composables/chart/apexDatetimeBuckets.ts +306 -0
- package/frontend-vue/layers/dms-ui/app/composables/chart/formatValue.ts +4 -3
- package/frontend-vue/layers/dms-ui/app/composables/chart/heatmapColors.ts +93 -0
- package/frontend-vue/layers/dms-ui/app/composables/chart/localizeSeries.ts +62 -0
- package/frontend-vue/layers/dms-ui/app/composables/chart/useApexChart.ts +116 -8
- package/frontend-vue/layers/dms-ui/app/composables/chart/useApexChart.types.ts +7 -0
- package/frontend-vue/layers/dms-ui/app/composables/containers/types.ts +84 -1
- package/frontend-vue/layers/dms-ui/app/composables/containers/useDrawer.ts +69 -8
- package/frontend-vue/layers/dms-ui/app/composables/form/types/field-saved.ts +11 -0
- package/frontend-vue/layers/dms-ui/app/composables/form/types/field.ts +16 -0
- package/frontend-vue/layers/dms-ui/app/composables/form/types/functions.ts +1 -0
- package/frontend-vue/layers/dms-ui/app/composables/form/useForm.ts +189 -28
- package/frontend-vue/layers/dms-ui/app/composables/live/usePageLive.ts +29 -12
- package/frontend-vue/layers/dms-ui/app/composables/page-toolbar/usePageToolbarSize.ts +30 -0
- package/frontend-vue/layers/dms-ui/app/composables/table-view/kanban.ts +4 -2
- package/frontend-vue/layers/dms-ui/app/composables/table-view/types/action-target.ts +22 -3
- package/frontend-vue/layers/dms-ui/app/composables/table-view/types/config.ts +4 -0
- package/frontend-vue/layers/dms-ui/app/composables/table-view/types/display.ts +24 -1
- package/frontend-vue/layers/dms-ui/app/plugins/closing-layers.client.ts +10 -0
- package/frontend-vue/layers/dms-ui/app/plugins/live-pause-source.ts +15 -0
- package/frontend-vue/layers/dms-ui/app/plugins/register.ts +2 -0
- package/frontend-vue/layers/dms-ui/app/types/input-number.ts +3 -2
- package/frontend-vue/layers/dms-ui/app/types/page-toolbar.ts +7 -0
- package/frontend-vue/layers/dms-ui/app/types/row-action.ts +0 -2
- package/frontend-vue/layers/dms-ui/app/types/row-navigation.ts +17 -0
- package/frontend-vue/layers/dms-ui/app/types/table/query.ts +2 -1
- package/frontend-vue/layers/dms-ui/app/utils/blockRefresh.ts +3 -1
- package/frontend-vue/layers/dms-ui/app/utils/cascader.ts +94 -3
- package/frontend-vue/layers/dms-ui/app/utils/componentTree.ts +24 -0
- package/frontend-vue/layers/dms-ui/i18n/locales/ui-en-GB.json +20 -5
- package/frontend-vue/layers/dms-ui/i18n/locales/ui-fr-FR.json +20 -5
- package/frontend-vue/package.json +6 -2
- package/package.json +11 -10
- package/skills/dms/SKILL.md +1 -1
- package/skills/dms-auth/SKILL.md +5 -3
- package/skills/dms-best-practices/REFERENCE.md +2 -0
- package/skills/dms-best-practices/SKILL.md +4 -0
- package/skills/dms-module/SKILL.md +3 -2
- package/skills/dms-pages/REFERENCE.md +129 -16
- package/skills/dms-pages/SKILL.md +1 -1
- package/skills/dms-project/DEV-SERVERS.md +23 -1
- package/skills/dms-project/REFERENCE.md +1 -1
- package/skills/dms-project/SKILL.md +4 -1
- package/skills/dms-project/scripts/dms-dev.sh +205 -17
- package/dist/hooks/tenant-instances.d.ts +0 -1
- package/dist/hooks/tenant-instances.js +0 -13
- package/dist/hooks/tenant-instances.js.map +0 -1
- package/dist/routes/startup-gate.d.ts +0 -7
- package/dist/routes/startup-gate.js +0 -39
- package/dist/routes/startup-gate.js.map +0 -1
- package/frontend-vue/layers/dms-core/app/composables/period/periodRenderNow.ts +0 -42
|
@@ -408,6 +408,8 @@
|
|
|
408
408
|
"too_short": "Cette valeur est trop courte.",
|
|
409
409
|
"too_small": "Cette valeur est trop petite.",
|
|
410
410
|
"too_large": "Cette valeur est trop grande.",
|
|
411
|
+
"named_required": "{field} est obligatoire.",
|
|
412
|
+
"named_invalid": "{field} n’est pas valide.",
|
|
411
413
|
"with_values": "{message} : {values}",
|
|
412
414
|
"code_incomplete": "Saisissez tous les chiffres du code.",
|
|
413
415
|
"password_rules": "Le mot de passe ne respecte pas toutes les règles.",
|
|
@@ -438,7 +440,8 @@
|
|
|
438
440
|
"chart": {
|
|
439
441
|
"no_data": "Aucune donnée",
|
|
440
442
|
"legend_period": "Période",
|
|
441
|
-
"legend_comparison": "Comparaison"
|
|
443
|
+
"legend_comparison": "Comparaison",
|
|
444
|
+
"versus_value": "vs {value}"
|
|
442
445
|
},
|
|
443
446
|
"period": {
|
|
444
447
|
"aria_label": "Sélecteur de période",
|
|
@@ -463,12 +466,33 @@
|
|
|
463
466
|
"all": "Toute la période",
|
|
464
467
|
"custom": "Personnalisé"
|
|
465
468
|
},
|
|
469
|
+
"short_presets": {
|
|
470
|
+
"last-hour": "1 h",
|
|
471
|
+
"last-24h": "24 h",
|
|
472
|
+
"today": "Auj.",
|
|
473
|
+
"yesterday": "Hier",
|
|
474
|
+
"last-7-days": "7 j",
|
|
475
|
+
"last-30-days": "30 j",
|
|
476
|
+
"last-90-days": "90 j",
|
|
477
|
+
"this-month": "Mois",
|
|
478
|
+
"last-month": "M-1",
|
|
479
|
+
"this-quarter": "Trim.",
|
|
480
|
+
"last-quarter": "T-1",
|
|
481
|
+
"ytd": "Année",
|
|
482
|
+
"last-year": "A-1",
|
|
483
|
+
"all": "Tout"
|
|
484
|
+
},
|
|
466
485
|
"comparisons": {
|
|
467
486
|
"none": "Sans comparaison",
|
|
468
487
|
"previous-period": "vs période précédente",
|
|
469
488
|
"previous-year": "vs année précédente",
|
|
470
489
|
"custom": "Personnalisé"
|
|
471
490
|
},
|
|
491
|
+
"compare_labels": {
|
|
492
|
+
"previous-period": "vs période précédente",
|
|
493
|
+
"previous-year": "vs année précédente",
|
|
494
|
+
"custom": "vs période de comparaison"
|
|
495
|
+
},
|
|
472
496
|
"compare_options": {
|
|
473
497
|
"none": "Aucune comparaison",
|
|
474
498
|
"previous-period": "Période précédente",
|
|
@@ -494,7 +518,117 @@
|
|
|
494
518
|
},
|
|
495
519
|
"a11y": {
|
|
496
520
|
"breadcrumb": "Fil d'Ariane",
|
|
497
|
-
"
|
|
521
|
+
"close": "Fermer",
|
|
522
|
+
"loading": "Chargement",
|
|
523
|
+
"show_options": "Afficher les options"
|
|
524
|
+
},
|
|
525
|
+
"automation": {
|
|
526
|
+
"triggers": {
|
|
527
|
+
"memberAdded": {
|
|
528
|
+
"name": "Membre ajouté",
|
|
529
|
+
"description": "Se déclenche quand un utilisateur devient membre d'un espace de travail"
|
|
530
|
+
},
|
|
531
|
+
"memberRemoved": {
|
|
532
|
+
"name": "Membre retiré",
|
|
533
|
+
"description": "Se déclenche quand des membres sont retirés d'un espace de travail"
|
|
534
|
+
},
|
|
535
|
+
"inviteCreated": {
|
|
536
|
+
"name": "Invitation créée",
|
|
537
|
+
"description": "Se déclenche quand une invitation est créée dans un espace de travail"
|
|
538
|
+
},
|
|
539
|
+
"userRegistered": {
|
|
540
|
+
"name": "Utilisateur inscrit",
|
|
541
|
+
"description": "Se déclenche quand un nouvel utilisateur termine son inscription"
|
|
542
|
+
},
|
|
543
|
+
"recordCreated": {
|
|
544
|
+
"name": "Enregistrement créé",
|
|
545
|
+
"description": "Se déclenche quand des lignes sont créées dans une table adossée à une TableView"
|
|
546
|
+
},
|
|
547
|
+
"recordUpdated": {
|
|
548
|
+
"name": "Enregistrement modifié",
|
|
549
|
+
"description": "Se déclenche quand des lignes sont modifiées dans une table adossée à une TableView"
|
|
550
|
+
},
|
|
551
|
+
"recordDeleted": {
|
|
552
|
+
"name": "Enregistrement supprimé",
|
|
553
|
+
"description": "Se déclenche quand des lignes sont supprimées dans une table adossée à une TableView"
|
|
554
|
+
},
|
|
555
|
+
"record": {
|
|
556
|
+
"fields": {
|
|
557
|
+
"location": "Emplacement du contrôleur de données à surveiller, par ex. \"/api/tables/members\". Laissez vide pour réagir à toutes les tables."
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
},
|
|
561
|
+
"actions": {
|
|
562
|
+
"sendEmail": {
|
|
563
|
+
"name": "Envoyer un e-mail",
|
|
564
|
+
"description": "Envoie un e-mail HTML via le fournisseur d'e-mail configuré, rédigé tel quel ou généré à partir d'un modèle HTML enregistré",
|
|
565
|
+
"fields": {
|
|
566
|
+
"template": "Nom d'un modèle HTML enregistré à générer à la place du HTML",
|
|
567
|
+
"props": "Propriétés avec lesquelles le modèle est généré",
|
|
568
|
+
"language": "Langue dans laquelle le modèle est généré ; par défaut celle du destinataire quand l'adresse appartient à un utilisateur"
|
|
569
|
+
}
|
|
570
|
+
},
|
|
571
|
+
"sendNotification": {
|
|
572
|
+
"name": "Envoyer une notification",
|
|
573
|
+
"description": "Envoie une notification dans l'application à des utilisateurs précis et/ou à tous les utilisateurs ayant l'un des rôles indiqués",
|
|
574
|
+
"fields": {
|
|
575
|
+
"userId": "Un destinataire, par ex. l'ID utilisateur d'un déclencheur",
|
|
576
|
+
"tenantId": "Espace de travail dont les membres reçoivent la notification par rôle ; laissez vide pour l'espace par défaut",
|
|
577
|
+
"title": "Texte littéral, ou clé de traduction \"$\"",
|
|
578
|
+
"description": "Texte littéral, ou clé de traduction \"$\"",
|
|
579
|
+
"params": "Paramètres d'interpolation des traductions du titre et de la description",
|
|
580
|
+
"idempotencyKey": "Clé stable de l'événement, par ex. l'ID de livraison d'un déclencheur : un événement rejoué n'est livré qu'une fois"
|
|
581
|
+
}
|
|
582
|
+
},
|
|
583
|
+
"inviteUser": {
|
|
584
|
+
"name": "Inviter un utilisateur",
|
|
585
|
+
"description": "Invite une adresse e-mail dans un espace de travail : un utilisateur existant y est ajouté directement comme membre, sinon une invitation est créée (et son e-mail d'inscription envoyé, sauf si Envoyer l'e-mail est désactivé)",
|
|
586
|
+
"fields": {
|
|
587
|
+
"tenantId": "Espace de travail où inviter ; par défaut l'espace par défaut",
|
|
588
|
+
"language": "Langue de l'e-mail d'invitation et du compte qu'il crée ; en par défaut",
|
|
589
|
+
"inviterName": "Nom de l'expéditeur indiqué dans l'e-mail d'invitation"
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
},
|
|
593
|
+
"fields": {
|
|
594
|
+
"actorId": "ID de l'auteur",
|
|
595
|
+
"actorName": "Nom de l'auteur",
|
|
596
|
+
"asTenantOwner": "Propriétaire de l'espace",
|
|
597
|
+
"at": "Date",
|
|
598
|
+
"deliveryId": "ID de livraison",
|
|
599
|
+
"description": "Description",
|
|
600
|
+
"email": "E-mail",
|
|
601
|
+
"error": "Erreur",
|
|
602
|
+
"firstname": "Prénom",
|
|
603
|
+
"html": "HTML",
|
|
604
|
+
"icon": "Icône",
|
|
605
|
+
"idempotencyKey": "Clé de rejeu",
|
|
606
|
+
"ids": "ID des enregistrements",
|
|
607
|
+
"inviteId": "ID de l'invitation",
|
|
608
|
+
"inviterName": "Nom de l'invitant",
|
|
609
|
+
"isTenantOwner": "Propriétaire de l'espace",
|
|
610
|
+
"kind": "Résultat",
|
|
611
|
+
"language": "Langue",
|
|
612
|
+
"lastname": "Nom",
|
|
613
|
+
"linkTo": "Lien",
|
|
614
|
+
"location": "Table",
|
|
615
|
+
"messageId": "ID du message",
|
|
616
|
+
"name": "Nom",
|
|
617
|
+
"ok": "Envoyée",
|
|
618
|
+
"params": "Paramètres",
|
|
619
|
+
"props": "Propriétés du modèle",
|
|
620
|
+
"roleIds": "Rôles",
|
|
621
|
+
"sendEmail": "Envoyer l'e-mail",
|
|
622
|
+
"subject": "Objet",
|
|
623
|
+
"success": "Succès",
|
|
624
|
+
"template": "Modèle",
|
|
625
|
+
"tenantId": "Espace de travail",
|
|
626
|
+
"title": "Titre",
|
|
627
|
+
"to": "Destinataire",
|
|
628
|
+
"tone": "Ton",
|
|
629
|
+
"userId": "Utilisateur",
|
|
630
|
+
"userIds": "Utilisateurs"
|
|
631
|
+
}
|
|
498
632
|
}
|
|
499
633
|
}
|
|
500
634
|
}
|
|
@@ -31,7 +31,12 @@
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
/* Self-hosted Geist (SIL OFL 1.1, files and LICENSE.txt in ../fonts).
|
|
34
|
-
Variable files cover weights 100–900 and keep builds deterministic offline.
|
|
34
|
+
Variable files cover weights 100–900 and keep builds deterministic offline.
|
|
35
|
+
Geist has no narrow no-break space (U+202F), which French and a few other
|
|
36
|
+
locales group digits with: a fallback face drew it a fraction of a digit
|
|
37
|
+
wide, so "1 234" read as "1234". Each file here maps U+202F to its no-break
|
|
38
|
+
space glyph (fontTools: cmap[0x202F] = cmap[0xA0]); keep that mapping when
|
|
39
|
+
updating them. */
|
|
35
40
|
@font-face {
|
|
36
41
|
font-family: "Geist";
|
|
37
42
|
font-style: normal;
|
|
@@ -155,6 +160,11 @@
|
|
|
155
160
|
items, ~10px menus and 16px modals. */
|
|
156
161
|
--ui-radius: calc(0.5rem / 1.5);
|
|
157
162
|
--dms-radius-card: 0.875rem;
|
|
163
|
+
/* Pill tabs keep their v2 10px track, 7px tab and 4px count at the
|
|
164
|
+
default radius, and follow a theme that changes it. */
|
|
165
|
+
--dms-radius-tab-list: calc(var(--ui-radius) * 1.875);
|
|
166
|
+
--dms-radius-tab: calc(var(--ui-radius) * 1.3125);
|
|
167
|
+
--dms-radius-tab-badge: calc(var(--ui-radius) * 0.75);
|
|
158
168
|
|
|
159
169
|
/* v2 shell metrics: 48px navbar, 56px sidebar brand row. */
|
|
160
170
|
--ui-header-height: 3rem;
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -3,8 +3,9 @@ import DmsBlockActions from "#dms-ui/app/build/components/blocks/BlockActions.vu
|
|
|
3
3
|
import { useComposedText } from "#dms-core/app/composables/translation/useComposedText";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* Stacks the global layout banners under the dashboard header, on
|
|
7
|
-
*
|
|
6
|
+
* Stacks the global layout banners under the dashboard header, on the pages
|
|
7
|
+
* each banner's scope covers (the application's pages unless it says
|
|
8
|
+
* otherwise). Each banner carries its own live-region role, so a
|
|
8
9
|
* banner appearing after a navigation is announced as well. A text is a
|
|
9
10
|
* string or a composed text, written in the reader's language, followed by
|
|
10
11
|
* the banner's link buttons.
|
|
@@ -11,6 +11,12 @@ import {
|
|
|
11
11
|
import { usePageRecordLabel } from "#dms-core/app/composables/page/usePageRecordLabel";
|
|
12
12
|
import type { CategoryInfo } from "../../../types/page";
|
|
13
13
|
import { resolveModuleLandingSlug } from "../../../utils/moduleLanding";
|
|
14
|
+
import {
|
|
15
|
+
foldBreadcrumb,
|
|
16
|
+
isFoldedCrumbs,
|
|
17
|
+
withParentCrumb,
|
|
18
|
+
} from "../../../utils/breadcrumb";
|
|
19
|
+
import { fillRouteParams } from "../../../utils/pageQuery";
|
|
14
20
|
|
|
15
21
|
const HOME_ICON = "i-ph-house-light";
|
|
16
22
|
/** Breadcrumb slot of the folded middle crumbs on small screens. */
|
|
@@ -130,6 +136,26 @@ function moduleLandingSlug(
|
|
|
130
136
|
);
|
|
131
137
|
}
|
|
132
138
|
|
|
139
|
+
/**
|
|
140
|
+
* The crumb of the page the current one is a detail of (`parentSlug`), its
|
|
141
|
+
* route parameters filled from the current page's: none when it is missing,
|
|
142
|
+
* out of reach, or names a parameter the current page lacks.
|
|
143
|
+
*/
|
|
144
|
+
const parentCrumb = computed((): BreadcrumbItem | null => {
|
|
145
|
+
const current = siteLayout.findMatchingRoute(route.path);
|
|
146
|
+
const parentSlug = current?.metadata.parentSlug;
|
|
147
|
+
if (!parentSlug) return null;
|
|
148
|
+
const path = fillRouteParams(parentSlug, current.params);
|
|
149
|
+
if (path.includes(":")) return null;
|
|
150
|
+
const parent = siteLayout.findMatchingRoute(path)?.metadata;
|
|
151
|
+
if (!parent || parent.hasAccess === false) return null;
|
|
152
|
+
const target = buildBreadcrumbTarget(path, parent, route.query);
|
|
153
|
+
return {
|
|
154
|
+
label: processI18n(parent.displayName),
|
|
155
|
+
...(target ? { to: target } : {}),
|
|
156
|
+
};
|
|
157
|
+
});
|
|
158
|
+
|
|
133
159
|
const breadcrumb = computed((): BreadcrumbItem[] => {
|
|
134
160
|
const base: BreadcrumbItem[] = [
|
|
135
161
|
{ icon: HOME_ICON, to: homepage || "/", "aria-label": t("header.home") },
|
|
@@ -143,7 +169,7 @@ const breadcrumb = computed((): BreadcrumbItem[] => {
|
|
|
143
169
|
|
|
144
170
|
const paths = route.path.split("/").filter((path) => path);
|
|
145
171
|
|
|
146
|
-
const
|
|
172
|
+
const pathCrumbs = base.concat(
|
|
147
173
|
paths
|
|
148
174
|
.map((path, index): BreadcrumbItem | null => {
|
|
149
175
|
const to = `/${paths.slice(0, index + 1).join("/")}`;
|
|
@@ -170,6 +196,7 @@ const breadcrumb = computed((): BreadcrumbItem[] => {
|
|
|
170
196
|
})
|
|
171
197
|
.filter((item) => item !== null),
|
|
172
198
|
);
|
|
199
|
+
const crumbs = withParentCrumb(pathCrumbs, parentCrumb.value);
|
|
173
200
|
|
|
174
201
|
// Written as the row has it: an email address keeps its lowercase.
|
|
175
202
|
const last = crumbs.at(-1);
|
|
@@ -183,32 +210,25 @@ const breadcrumb = computed((): BreadcrumbItem[] => {
|
|
|
183
210
|
return crumbs;
|
|
184
211
|
});
|
|
185
212
|
|
|
213
|
+
// The middle crumbs fold into a "…" menu (see the `#ellipsis` slot) so a
|
|
214
|
+
// deep page still fits a phone without losing the way back up.
|
|
186
215
|
const mobileBreadcrumb = computed(
|
|
187
|
-
(): (BreadcrumbItem & { children?: DropdownMenuItem[] })[] =>
|
|
188
|
-
|
|
189
|
-
return
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
breadcrumb.value[0]!,
|
|
196
|
-
{
|
|
197
|
-
slot: MOBILE_ELLIPSIS_SLOT,
|
|
198
|
-
children: breadcrumb.value.slice(1, -1).map((x) => ({
|
|
199
|
-
label: x.label,
|
|
200
|
-
to: x.to,
|
|
201
|
-
})),
|
|
202
|
-
},
|
|
203
|
-
breadcrumb.value.slice(-1)[0]!,
|
|
204
|
-
];
|
|
205
|
-
},
|
|
216
|
+
(): (BreadcrumbItem & { children?: DropdownMenuItem[] })[] =>
|
|
217
|
+
foldBreadcrumb(breadcrumb.value, MOBILE_ELLIPSIS_SLOT).map((crumb) => {
|
|
218
|
+
if (!isFoldedCrumbs(crumb)) return crumb;
|
|
219
|
+
return {
|
|
220
|
+
slot: crumb.slot,
|
|
221
|
+
children: crumb.children.map((x) => ({ label: x.label, to: x.to })),
|
|
222
|
+
};
|
|
223
|
+
}),
|
|
206
224
|
);
|
|
207
225
|
</script>
|
|
208
226
|
|
|
209
227
|
<template>
|
|
210
228
|
<div data-dms-persistent-header>
|
|
211
|
-
|
|
229
|
+
<!-- The phone toggle below is the only one: the navbar's own would sit
|
|
230
|
+
next to it. -->
|
|
231
|
+
<UDashboardNavbar :toggle="false">
|
|
212
232
|
<template #leading>
|
|
213
233
|
<UButton
|
|
214
234
|
class="lg:hidden"
|
|
@@ -14,10 +14,12 @@ interface Props {
|
|
|
14
14
|
/** Header buttons declared by the backend page (`headerActions`). */
|
|
15
15
|
headerActions?: LayoutHeaderAction[];
|
|
16
16
|
/**
|
|
17
|
-
* The page query the server
|
|
18
|
-
*
|
|
17
|
+
* The page query the server served the buttons for, set when one declares
|
|
18
|
+
* an `availability` or the page reads a `record` (`headerActionsQuery`).
|
|
19
19
|
*/
|
|
20
20
|
headerActionsQuery?: Record<string, string>;
|
|
21
|
+
/** The route parameters (`:id`) they were resolved for, likewise. */
|
|
22
|
+
headerActionsParams?: Record<string, string>;
|
|
21
23
|
/** Space between the page header and the page. */
|
|
22
24
|
headerClass?: string;
|
|
23
25
|
}
|
|
@@ -29,6 +31,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
29
31
|
description: undefined,
|
|
30
32
|
headerActions: () => [],
|
|
31
33
|
headerActionsQuery: undefined,
|
|
34
|
+
headerActionsParams: undefined,
|
|
32
35
|
headerClass: "pb-6",
|
|
33
36
|
});
|
|
34
37
|
|
|
@@ -67,6 +70,7 @@ const PAGE_SLOT_CLASS =
|
|
|
67
70
|
<PageHeaderActionsOutlet
|
|
68
71
|
:actions="props.headerActions"
|
|
69
72
|
:served-query="props.headerActionsQuery"
|
|
73
|
+
:served-params="props.headerActionsParams"
|
|
70
74
|
/>
|
|
71
75
|
</template>
|
|
72
76
|
</PageHeader>
|
|
@@ -14,13 +14,10 @@ import { useKeyboardPlatform } from "#dms-ui/app/composables/global/keyboardPlat
|
|
|
14
14
|
import { useMediaQuery } from "@vueuse/core";
|
|
15
15
|
import DmsSidebarUserMenu from "./SidebarUserMenu.vue";
|
|
16
16
|
|
|
17
|
-
const SETTINGS_PATH = "/settings";
|
|
18
17
|
const MODULES_PATH = "/modules";
|
|
19
|
-
// Registered
|
|
20
|
-
const SETTINGS_FULL_ID = "settings";
|
|
18
|
+
// Registered id of the Modules entry, so "Preview as role" can lock it.
|
|
21
19
|
const MODULES_FULL_ID = "modules";
|
|
22
20
|
const MODULES_TREE_KEY = "modules";
|
|
23
|
-
const SETTINGS_ICON = "i-ph-gear-six-light";
|
|
24
21
|
const MODULES_ICON = "i-ph-squares-four-light";
|
|
25
22
|
const BACK_ICON = "i-ph-arrow-left-light";
|
|
26
23
|
const ESCAPE_KEY = "Escape";
|
|
@@ -254,21 +251,9 @@ const footerItems = computed((): NavigationMenuItem[] => {
|
|
|
254
251
|
});
|
|
255
252
|
}
|
|
256
253
|
|
|
257
|
-
//
|
|
258
|
-
// destinations, regardless of the router's
|
|
259
|
-
|
|
260
|
-
addActiveStateToMenuItem(
|
|
261
|
-
{
|
|
262
|
-
fullId: SETTINGS_FULL_ID,
|
|
263
|
-
label: t("menu.section.settings"),
|
|
264
|
-
to: SETTINGS_PATH,
|
|
265
|
-
icon: SETTINGS_ICON,
|
|
266
|
-
} as DmsMenuItem,
|
|
267
|
-
currentFullId.value,
|
|
268
|
-
currentRoute.value,
|
|
269
|
-
),
|
|
270
|
-
);
|
|
271
|
-
|
|
254
|
+
// The settings are reached from the account menu, not from here. Back and
|
|
255
|
+
// Modules only highlight their destinations, regardless of the router's
|
|
256
|
+
// default prefix matching.
|
|
272
257
|
if (isOwner.value) {
|
|
273
258
|
result.push({
|
|
274
259
|
fullId: MODULES_FULL_ID,
|
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import type { SelectItem } from "@nuxt/ui";
|
|
3
|
-
import {
|
|
4
|
-
GITHUB_REPOSITORY,
|
|
5
|
-
GITHUB_REPOSITORY_URL,
|
|
6
|
-
} from "../../utils/github-repository";
|
|
7
3
|
|
|
8
4
|
const EXTERNAL_LINK_PATTERN = /^https?:\/\//;
|
|
9
5
|
const DEFAULT_COPYRIGHT = "Antelope";
|
|
10
|
-
const GITHUB_REPOSITORY_API = `https://api.github.com/repos/${GITHUB_REPOSITORY}`;
|
|
11
|
-
const GITHUB_STARS_CACHE_KEY = "dms-github-stars";
|
|
12
|
-
// GitHub allows 60 anonymous API calls an hour per visitor: the count is
|
|
13
|
-
// cached for the session and refreshed hourly.
|
|
14
|
-
const GITHUB_STARS_CACHE_TTL_MS = 60 * 60 * 1000;
|
|
15
6
|
|
|
16
7
|
const { locale, setLocale, t } = useI18n();
|
|
8
|
+
const { loggedIn: isLoggedIn } = useDmsUserSession();
|
|
9
|
+
const { changeLanguage } = useUserLanguage();
|
|
17
10
|
const { uniqueLocales } = useUniqueLocales();
|
|
18
11
|
const { links } = useFooterLinks();
|
|
19
12
|
const { processI18n } = useTranslation();
|
|
@@ -23,7 +16,6 @@ const copyright = computed(() =>
|
|
|
23
16
|
? null
|
|
24
17
|
: processI18n(footer.value.copyright ?? DEFAULT_COPYRIGHT),
|
|
25
18
|
);
|
|
26
|
-
const showsGithubStar = computed(() => footer.value.githubStar !== false);
|
|
27
19
|
const showsLocaleSwitcher = computed(
|
|
28
20
|
() => footer.value.localeSwitcher !== false,
|
|
29
21
|
);
|
|
@@ -37,82 +29,23 @@ function isExternal(to: string): boolean {
|
|
|
37
29
|
return EXTERNAL_LINK_PATTERN.test(to);
|
|
38
30
|
}
|
|
39
31
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
// and the segment only goes away if no count could be read.
|
|
48
|
-
const githubStarsSettled = ref(false);
|
|
49
|
-
const formattedGithubStars = computed(() =>
|
|
50
|
-
githubStars.value === null
|
|
51
|
-
? ""
|
|
52
|
-
: new Intl.NumberFormat(locale.value, { notation: "compact" }).format(
|
|
53
|
-
githubStars.value,
|
|
54
|
-
),
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
function readCachedStars(): CachedStars | null {
|
|
58
|
-
try {
|
|
59
|
-
const raw = sessionStorage.getItem(GITHUB_STARS_CACHE_KEY);
|
|
60
|
-
return raw ? (JSON.parse(raw) as CachedStars) : null;
|
|
61
|
-
} catch {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function writeCachedStars(count: number): void {
|
|
67
|
-
try {
|
|
68
|
-
sessionStorage.setItem(
|
|
69
|
-
GITHUB_STARS_CACHE_KEY,
|
|
70
|
-
JSON.stringify({ count, fetchedAt: Date.now() } satisfies CachedStars),
|
|
71
|
-
);
|
|
72
|
-
} catch {
|
|
73
|
-
/* storage unavailable: the count is fetched again next time */
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Starring itself happens on GitHub (it needs the visitor's GitHub session);
|
|
78
|
-
// the button shows the live count and opens the repository.
|
|
79
|
-
async function loadGithubStars(): Promise<void> {
|
|
80
|
-
const cached = readCachedStars();
|
|
81
|
-
if (cached && Date.now() - cached.fetchedAt < GITHUB_STARS_CACHE_TTL_MS) {
|
|
82
|
-
githubStars.value = cached.count;
|
|
32
|
+
// A signed-in user on a page of this layout (the account switcher) switches
|
|
33
|
+
// their profile's language too: the session applies that one on every load,
|
|
34
|
+
// and the server writes in it, so switching the screen alone would leave the
|
|
35
|
+
// two apart. A visitor's choice lives in the locale cookie.
|
|
36
|
+
async function onLocaleChange(code: unknown) {
|
|
37
|
+
if (isLoggedIn.value) {
|
|
38
|
+
await changeLanguage(code as string);
|
|
83
39
|
return;
|
|
84
40
|
}
|
|
85
|
-
try {
|
|
86
|
-
const response = await fetch(GITHUB_REPOSITORY_API, {
|
|
87
|
-
headers: { Accept: "application/vnd.github+json" },
|
|
88
|
-
});
|
|
89
|
-
if (!response.ok) return;
|
|
90
|
-
const { stargazers_count: count } = (await response.json()) as {
|
|
91
|
-
stargazers_count?: unknown;
|
|
92
|
-
};
|
|
93
|
-
if (typeof count !== "number") return;
|
|
94
|
-
githubStars.value = count;
|
|
95
|
-
writeCachedStars(count);
|
|
96
|
-
} catch {
|
|
97
|
-
/* offline or rate-limited: the button shows without a count */
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
onMounted(async () => {
|
|
102
|
-
if (!showsGithubStar.value) return;
|
|
103
|
-
await loadGithubStars();
|
|
104
|
-
githubStarsSettled.value = true;
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
async function onLocaleChange(code: unknown) {
|
|
108
41
|
await setLocale(code as typeof locale.value);
|
|
109
42
|
}
|
|
110
43
|
</script>
|
|
111
44
|
|
|
112
45
|
<template>
|
|
113
46
|
<!-- v2 .au-foot: one quiet 12.5px row, the locale switcher pushed right.
|
|
114
|
-
On phones the links get a taller invisible hit area
|
|
115
|
-
|
|
47
|
+
On phones the links get a taller invisible hit area, so each stays
|
|
48
|
+
easy to tap. -->
|
|
116
49
|
<footer
|
|
117
50
|
class="border-default text-dimmed flex flex-wrap items-center gap-x-[18px] gap-y-1.5 border-t px-5 py-3 text-[12.5px] max-sm:justify-center"
|
|
118
51
|
>
|
|
@@ -136,35 +69,6 @@ async function onLocaleChange(code: unknown) {
|
|
|
136
69
|
</DmsLink>
|
|
137
70
|
</template>
|
|
138
71
|
|
|
139
|
-
<!-- GitHub star button: icon + "Star" | live count, opens the repository. -->
|
|
140
|
-
<a
|
|
141
|
-
v-if="showsGithubStar"
|
|
142
|
-
:href="GITHUB_REPOSITORY_URL"
|
|
143
|
-
target="_blank"
|
|
144
|
-
rel="noopener noreferrer"
|
|
145
|
-
:aria-label="t('empty_layout.footer.github_star_label')"
|
|
146
|
-
:title="t('empty_layout.footer.github_star_label')"
|
|
147
|
-
class="border-default text-muted hover:text-highlighted hover:border-accented hover:bg-elevated inline-flex h-6 items-stretch overflow-hidden rounded-md border transition-colors max-sm:h-8"
|
|
148
|
-
>
|
|
149
|
-
<span class="flex items-center gap-1.5 px-2 font-medium">
|
|
150
|
-
<UIcon name="i-ph-github-logo" class="size-3.5" :aria-hidden="true" />
|
|
151
|
-
<UIcon name="i-ph-star" class="size-3" :aria-hidden="true" />
|
|
152
|
-
{{ t("empty_layout.footer.github_star") }}
|
|
153
|
-
</span>
|
|
154
|
-
<span
|
|
155
|
-
v-if="githubStars !== null || !githubStarsSettled"
|
|
156
|
-
class="border-default flex items-center border-s px-2 font-mono tabular-nums"
|
|
157
|
-
>
|
|
158
|
-
<USkeleton
|
|
159
|
-
:aria-label="t('dms.a11y.loading')"
|
|
160
|
-
v-if="githubStars === null"
|
|
161
|
-
aria-hidden="true"
|
|
162
|
-
class="h-2.5 w-6"
|
|
163
|
-
/>
|
|
164
|
-
<template v-else>{{ formattedGithubStars }}</template>
|
|
165
|
-
</span>
|
|
166
|
-
</a>
|
|
167
|
-
|
|
168
72
|
<USelect
|
|
169
73
|
v-if="showsLocaleSwitcher"
|
|
170
74
|
:model-value="locale"
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { computed } from "vue";
|
|
3
|
+
import { useOpenDialog } from "#dms-ui/app/build/composables/containers/closingLayers";
|
|
3
4
|
import { isFloatingSaveBarShown } from "#dms-ui/app/build/composables/form/floatingSaveBars";
|
|
4
5
|
import { useGithubStarPrompt } from "../../composables/general/useGithubStarPrompt";
|
|
6
|
+
import { useActiveSidePanel } from "../../composables/layout/sidePanelState";
|
|
7
|
+
import { useSidebarState } from "./sidebarState";
|
|
5
8
|
|
|
6
9
|
const TITLE_ID = "dms-github-star-prompt-title";
|
|
7
10
|
const DESCRIPTION_ID = "dms-github-star-prompt-description";
|
|
@@ -9,6 +12,9 @@ const DESCRIPTION_ID = "dms-github-star-prompt-description";
|
|
|
9
12
|
const { t } = useI18n();
|
|
10
13
|
const { user } = useCurrentUser();
|
|
11
14
|
const toast = useToast();
|
|
15
|
+
const { open: isSidebarOpen } = useSidebarState();
|
|
16
|
+
const { panel: sidePanel } = useActiveSidePanel();
|
|
17
|
+
const isDialogOpen = useOpenDialog();
|
|
12
18
|
|
|
13
19
|
// Developers only: a production build, a client's dashboard included, never
|
|
14
20
|
// counts, stores or shows anything. The same flag gates the dev reload.
|
|
@@ -16,15 +22,21 @@ const { isDue, snooze, star, dismiss } = useGithubStarPrompt(
|
|
|
16
22
|
import.meta.env.DEV,
|
|
17
23
|
);
|
|
18
24
|
|
|
19
|
-
// The toaster stacks in the same corner,
|
|
20
|
-
//
|
|
21
|
-
//
|
|
25
|
+
// The toaster stacks in the same corner, a floating save bar sticks to the
|
|
26
|
+
// bottom of the panel, and the phone sidebar keeps its account menu trigger
|
|
27
|
+
// at the bottom of the screen: the prompt steps aside while any is up rather
|
|
28
|
+
// than cover it. The sidebar only opens as a drawer, below `lg`. It waits
|
|
29
|
+
// as well while a drawer, a modal or a side panel is open, whose footer or
|
|
30
|
+
// content it would float over, and comes back once they close.
|
|
22
31
|
const isShown = computed(
|
|
23
32
|
() =>
|
|
24
33
|
isDue.value &&
|
|
25
34
|
!!user.value &&
|
|
26
35
|
toast.toasts.value.length === 0 &&
|
|
27
|
-
!isFloatingSaveBarShown.value
|
|
36
|
+
!isFloatingSaveBarShown.value &&
|
|
37
|
+
!isSidebarOpen.value &&
|
|
38
|
+
!sidePanel.value &&
|
|
39
|
+
!isDialogOpen.value,
|
|
28
40
|
);
|
|
29
41
|
</script>
|
|
30
42
|
|
|
@@ -34,14 +46,13 @@ const isShown = computed(
|
|
|
34
46
|
width, rising into place like a toast. The buttons take the card's
|
|
35
47
|
full width, so the longer French label still fits beside "Later".
|
|
36
48
|
On a phone it tightens and drops the icon, so the text runs the full
|
|
37
|
-
width and covers less of the page.
|
|
38
|
-
open side panel, whose width the dashboard frame sets. -->
|
|
49
|
+
width and covers less of the page. -->
|
|
39
50
|
<div
|
|
40
51
|
v-if="isShown"
|
|
41
52
|
role="dialog"
|
|
42
53
|
:aria-labelledby="TITLE_ID"
|
|
43
54
|
:aria-describedby="DESCRIPTION_ID"
|
|
44
|
-
class="bg-default ring-accented fixed inset-x-3 bottom-3 z-50 rounded-(--dms-radius-card) p-3 shadow-(--dms-shadow-pop) ring transition duration-300 ease-out motion-reduce:transition-none sm:inset-x-auto sm:right-5 sm:bottom-5 sm:w-[380px] sm:p-3.5 sm:ps-4
|
|
55
|
+
class="bg-default ring-accented fixed inset-x-3 bottom-3 z-50 rounded-(--dms-radius-card) p-3 shadow-(--dms-shadow-pop) ring transition duration-300 ease-out motion-reduce:transition-none sm:inset-x-auto sm:right-5 sm:bottom-5 sm:w-[380px] sm:p-3.5 sm:ps-4 starting:translate-y-4 starting:opacity-0"
|
|
45
56
|
>
|
|
46
57
|
<div class="flex items-start gap-3 pe-6">
|
|
47
58
|
<DmsIconWell icon="i-ph-star" size="sm" class="max-sm:hidden" />
|
package/frontend-vue/layers/dms-layout/app/build/components/layout/PageHeaderActionsOutlet.vue
CHANGED
|
@@ -11,15 +11,19 @@ interface PageHeaderActionsOutletProps {
|
|
|
11
11
|
actions: LayoutHeaderAction[];
|
|
12
12
|
/** The page query the server resolved their availability for. */
|
|
13
13
|
servedQuery?: Record<string, string>;
|
|
14
|
+
/** The route parameters the server resolved their availability for. */
|
|
15
|
+
servedParams?: Record<string, string>;
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
const props = withDefaults(defineProps<PageHeaderActionsOutletProps>(), {
|
|
17
19
|
servedQuery: undefined,
|
|
20
|
+
servedParams: undefined,
|
|
18
21
|
});
|
|
19
22
|
|
|
20
23
|
const actions = useServedHeaderActions({
|
|
21
24
|
actions: () => props.actions,
|
|
22
25
|
servedQuery: () => props.servedQuery,
|
|
26
|
+
servedParams: () => props.servedParams,
|
|
23
27
|
});
|
|
24
28
|
|
|
25
29
|
const ROOT_SELECTOR = "[data-dms-page-header-actions]";
|