@antelopejs/dms 0.8.3 → 0.9.1
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 +36 -0
- package/data/module-store/catalog.json +71 -0
- package/dist/config.d.ts +7 -0
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/implementations/dms/frontend-backend-proxies.d.ts +3 -0
- package/dist/implementations/dms/frontend-backend-proxies.js +39 -0
- package/dist/implementations/dms/frontend-backend-proxies.js.map +1 -0
- package/dist/implementations/dms/frontend-bootstrap.d.ts +1 -0
- package/dist/implementations/dms/frontend-bootstrap.js +13 -0
- package/dist/implementations/dms/frontend-bootstrap.js.map +1 -1
- package/dist/implementations/dms/frontend-modules.d.ts +6 -2
- package/dist/implementations/dms/frontend-modules.js +37 -8
- package/dist/implementations/dms/frontend-modules.js.map +1 -1
- package/dist/implementations/dms/frontend-ready.d.ts +8 -0
- package/dist/implementations/dms/frontend-ready.js +34 -0
- package/dist/implementations/dms/frontend-ready.js.map +1 -0
- package/dist/implementations/dms/manifest.d.ts +7 -0
- package/dist/implementations/dms/manifest.js +13 -0
- package/dist/implementations/dms/manifest.js.map +1 -1
- package/dist/implementations/dms/menu-categories.d.ts +16 -0
- package/dist/implementations/dms/menu-categories.js +30 -0
- package/dist/implementations/dms/menu-categories.js.map +1 -0
- package/dist/implementations/dms/nav-badges.d.ts +0 -8
- package/dist/implementations/dms/nav-badges.js +0 -16
- package/dist/implementations/dms/nav-badges.js.map +1 -1
- package/dist/implementations/dms/page.d.ts +13 -5
- package/dist/implementations/dms/page.js +72 -41
- package/dist/implementations/dms/page.js.map +1 -1
- package/dist/implementations/dms-html-render/index.js +5 -2
- package/dist/implementations/dms-html-render/index.js.map +1 -1
- package/dist/implementations/dms-notifications/index.d.ts +4 -3
- package/dist/implementations/dms-notifications/index.js +14 -6
- package/dist/implementations/dms-notifications/index.js.map +1 -1
- package/dist/pages/settings/settings-index.js +3 -2
- package/dist/pages/settings/settings-index.js.map +1 -1
- package/dist/pages/settings/users/invites.js +2 -2
- package/dist/pages/settings/users/invites.js.map +1 -1
- package/dist/pages/settings/users/member-change-notifications.js +17 -6
- package/dist/pages/settings/users/member-change-notifications.js.map +1 -1
- package/dist/pages/settings/users/member-invite-form.d.ts +3 -2
- package/dist/pages/settings/users/member-invite-form.js +7 -4
- package/dist/pages/settings/users/member-invite-form.js.map +1 -1
- package/dist/pages/settings/users/member-roles-field.js +2 -1
- package/dist/pages/settings/users/member-roles-field.js.map +1 -1
- package/dist/pages/settings/users/members.js +4 -1
- package/dist/pages/settings/users/members.js.map +1 -1
- package/dist/pages/settings/users/notifications.d.ts +6 -0
- package/dist/pages/settings/users/notifications.js +23 -15
- package/dist/pages/settings/users/notifications.js.map +1 -1
- package/dist/pages/settings/users/profile.js +1 -1
- package/dist/pages/settings/users/profile.js.map +1 -1
- package/dist/pages/settings/users/region-form.d.ts +1 -1
- package/dist/pages/settings/users/region-form.js +2 -1
- package/dist/pages/settings/users/region-form.js.map +1 -1
- package/dist/pages/settings/users/role-editor-store.d.ts +3 -1
- package/dist/pages/settings/users/role-editor-store.js +17 -4
- package/dist/pages/settings/users/role-editor-store.js.map +1 -1
- package/dist/pages/settings/users/roles.js +1 -0
- package/dist/pages/settings/users/roles.js.map +1 -1
- package/dist/realtime/registry.d.ts +1 -0
- package/dist/realtime/registry.js +5 -0
- package/dist/realtime/registry.js.map +1 -1
- package/dist/routes/index.d.ts +1 -0
- package/dist/routes/index.js +1 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/realtime.d.ts +5 -1
- package/dist/routes/realtime.js +16 -9
- package/dist/routes/realtime.js.map +1 -1
- package/dist/routes/store.d.ts +21 -0
- package/dist/routes/store.js +130 -0
- package/dist/routes/store.js.map +1 -0
- package/dist/store/activity.d.ts +2 -0
- package/dist/store/activity.js +12 -0
- package/dist/store/activity.js.map +1 -0
- package/dist/store/cache.d.ts +8 -0
- package/dist/store/cache.js +29 -0
- package/dist/store/cache.js.map +1 -0
- package/dist/store/catalog.d.ts +4 -0
- package/dist/store/catalog.js +69 -0
- package/dist/store/catalog.js.map +1 -0
- package/dist/store/compatibility.d.ts +3 -0
- package/dist/store/compatibility.js +45 -0
- package/dist/store/compatibility.js.map +1 -0
- package/dist/store/declarations.d.ts +18 -0
- package/dist/store/declarations.js +116 -0
- package/dist/store/declarations.js.map +1 -0
- package/dist/store/frontend-compatibility.d.ts +18 -0
- package/dist/store/frontend-compatibility.js +93 -0
- package/dist/store/frontend-compatibility.js.map +1 -0
- package/dist/store/interfaces.d.ts +6 -0
- package/dist/store/interfaces.js +126 -0
- package/dist/store/interfaces.js.map +1 -0
- package/dist/store/listing.d.ts +2 -0
- package/dist/store/listing.js +180 -0
- package/dist/store/listing.js.map +1 -0
- package/dist/store/operations.d.ts +8 -0
- package/dist/store/operations.js +254 -0
- package/dist/store/operations.js.map +1 -0
- package/dist/store/registry.d.ts +4 -0
- package/dist/store/registry.js +61 -0
- package/dist/store/registry.js.map +1 -0
- package/dist/store/requirements.d.ts +14 -0
- package/dist/store/requirements.js +81 -0
- package/dist/store/requirements.js.map +1 -0
- package/dist/store/runtime.d.ts +11 -0
- package/dist/store/runtime.js +78 -0
- package/dist/store/runtime.js.map +1 -0
- package/dist/store/tarball.d.ts +2 -0
- package/dist/store/tarball.js +80 -0
- package/dist/store/tarball.js.map +1 -0
- package/dist/store/types.d.ts +98 -0
- package/dist/store/types.js +3 -0
- package/dist/store/types.js.map +1 -0
- package/dist/test/integration/account-deletion.test.js +2 -2
- package/dist/test/integration/account-deletion.test.js.map +1 -1
- package/dist/test/integration/auth/auth-key-rotation.test.js +2 -1
- package/dist/test/integration/auth/auth-key-rotation.test.js.map +1 -1
- package/dist/test/integration/auth/current-password.test.js +2 -1
- package/dist/test/integration/auth/current-password.test.js.map +1 -1
- package/dist/test/integration/auth/session-revocation.test.js +2 -1
- package/dist/test/integration/auth/session-revocation.test.js.map +1 -1
- package/dist/test/integration/auth/sign-in-country.test.js +2 -1
- package/dist/test/integration/auth/sign-in-country.test.js.map +1 -1
- package/dist/test/integration/auth/two-factor-codes.test.js +2 -1
- package/dist/test/integration/auth/two-factor-codes.test.js.map +1 -1
- package/dist/test/integration/auth/two-factor-password.test.js +3 -2
- package/dist/test/integration/auth/two-factor-password.test.js.map +1 -1
- package/dist/test/integration/email-change.test.js +2 -1
- package/dist/test/integration/email-change.test.js.map +1 -1
- package/dist/test/integration/files/component-files.test.js +2 -2
- package/dist/test/integration/files/component-files.test.js.map +1 -1
- package/dist/test/integration/member-settings-access.test.js +8 -7
- package/dist/test/integration/member-settings-access.test.js.map +1 -1
- package/dist/test/integration/menu-access-events.test.d.ts +1 -0
- package/dist/test/integration/menu-access-events.test.js +148 -0
- package/dist/test/integration/menu-access-events.test.js.map +1 -0
- package/dist/test/integration/notification-inbox.test.js +4 -1
- package/dist/test/integration/notification-inbox.test.js.map +1 -1
- package/dist/test/integration/notification-locked-subjects.test.js +3 -2
- package/dist/test/integration/notification-locked-subjects.test.js.map +1 -1
- package/dist/test/integration/notification-unread-badge.test.js +51 -5
- package/dist/test/integration/notification-unread-badge.test.js.map +1 -1
- package/dist/test/integration/page-layout-route-guard.test.d.ts +1 -0
- package/dist/test/integration/page-layout-route-guard.test.js +56 -0
- package/dist/test/integration/page-layout-route-guard.test.js.map +1 -0
- package/dist/test/integration/permission-warnings.test.js +3 -2
- package/dist/test/integration/permission-warnings.test.js.map +1 -1
- package/dist/test/integration/removed-member-notifications.test.js +3 -2
- package/dist/test/integration/removed-member-notifications.test.js.map +1 -1
- package/dist/test/integration/role-delete-reassign.test.js +2 -1
- package/dist/test/integration/role-delete-reassign.test.js.map +1 -1
- package/dist/test/integration/role-permission-ancestors.test.js +2 -1
- package/dist/test/integration/role-permission-ancestors.test.js.map +1 -1
- package/dist/test/unit/frontend-bootstrap.test.js +13 -0
- package/dist/test/unit/frontend-bootstrap.test.js.map +1 -1
- package/dist/test/unit/implementations/dms/category-slug-registry.test.js +14 -5
- package/dist/test/unit/implementations/dms/category-slug-registry.test.js.map +1 -1
- package/dist/test/unit/implementations/dms/frontend-backend-proxies.test.d.ts +1 -0
- package/dist/test/unit/implementations/dms/frontend-backend-proxies.test.js +66 -0
- package/dist/test/unit/implementations/dms/frontend-backend-proxies.test.js.map +1 -0
- package/dist/test/unit/implementations/dms/manifest-strip.test.js +26 -0
- package/dist/test/unit/implementations/dms/manifest-strip.test.js.map +1 -1
- package/dist/test/unit/implementations/dms/nav-badges.test.js +23 -9
- package/dist/test/unit/implementations/dms/nav-badges.test.js.map +1 -1
- package/dist/test/unit/implementations/dms-html-render/generate-html.test.js +22 -4
- package/dist/test/unit/implementations/dms-html-render/generate-html.test.js.map +1 -1
- package/dist/test/unit/interfaces/dms/page-layout-query.test.js +12 -0
- package/dist/test/unit/interfaces/dms/page-layout-query.test.js.map +1 -1
- package/dist/test/unit/interfaces/dms/page-teardown.test.js +1 -1
- package/dist/test/unit/interfaces/dms/page-teardown.test.js.map +1 -1
- package/dist/test/unit/pages/settings/member-roles-field.test.js +1 -1
- package/dist/test/unit/pages/settings/member-roles-field.test.js.map +1 -1
- package/dist/test/unit/pages/settings/role-delete-confirm.test.js.map +1 -1
- package/dist/test/unit/realtime/menu-topics.test.d.ts +1 -0
- package/dist/test/unit/realtime/menu-topics.test.js +26 -0
- package/dist/test/unit/realtime/menu-topics.test.js.map +1 -0
- package/dist/test/unit/store/store.test.d.ts +1 -0
- package/dist/test/unit/store/store.test.js +127 -0
- package/dist/test/unit/store/store.test.js.map +1 -0
- package/dist/validation/store.schema.d.ts +39 -0
- package/dist/validation/store.schema.js +27 -0
- package/dist/validation/store.schema.js.map +1 -0
- package/frontend-vue/deferred-plugins.ts +3 -4
- package/frontend-vue/dms.email.ts +5 -1
- package/frontend-vue/dms.frontend.ts +15 -5
- package/frontend-vue/dms.server.ts +74 -0
- package/frontend-vue/layers/dms-auth/app/composables/useLogout.ts +1 -1
- package/frontend-vue/layers/dms-auth/app/composables/usePostLoginRedirect.ts +16 -3
- package/frontend-vue/layers/dms-auth/app/custom-pages/auth/2fa.vue +3 -1
- package/frontend-vue/layers/dms-auth/app/custom-pages/auth/backup.vue +3 -1
- package/frontend-vue/layers/dms-auth/app/custom-pages/auth/forgot-validation.vue +1 -1
- package/frontend-vue/layers/dms-auth/app/custom-pages/auth/oauth-complete.vue +26 -3
- package/frontend-vue/layers/dms-auth/app/custom-pages/auth/recover.vue +1 -1
- package/frontend-vue/layers/dms-auth/app/custom-pages/auth/signup.vue +22 -25
- package/frontend-vue/layers/dms-auth/app/custom-pages/auth/validate.vue +1 -1
- package/frontend-vue/layers/dms-auth/app/middleware/auth.ts +5 -7
- package/frontend-vue/layers/dms-auth/app/plugins/permissions-preload.ts +17 -0
- package/frontend-vue/layers/dms-auth/server/accounts.ts +135 -0
- package/frontend-vue/layers/dms-auth/server/actions.ts +251 -0
- package/frontend-vue/layers/dms-auth/server/oauth.ts +260 -0
- package/frontend-vue/layers/dms-auth/server/session.ts +158 -0
- package/frontend-vue/layers/dms-core/app/build/utils/asyncDataScope.ts +47 -0
- package/frontend-vue/layers/dms-core/app/build/utils/permission-preview.ts +6 -2
- package/frontend-vue/layers/dms-core/app/composables/auth/useApiData.ts +148 -0
- package/frontend-vue/layers/dms-core/app/composables/auth/useAuthFetch.ts +7 -20
- package/frontend-vue/layers/dms-core/app/composables/auth/useCurrentUser.ts +2 -2
- package/frontend-vue/layers/dms-core/app/composables/auth/useMultiAccount.ts +18 -5
- package/frontend-vue/layers/dms-core/app/composables/auth/usePermissions.ts +35 -6
- package/frontend-vue/layers/dms-core/app/composables/auth/useSessionRecovery.ts +1 -1
- package/frontend-vue/layers/dms-core/app/composables/period/compareResolvers.ts +20 -14
- package/frontend-vue/layers/dms-core/app/composables/period/periodClock.ts +121 -0
- package/frontend-vue/layers/dms-core/app/composables/period/periodRenderNow.ts +42 -0
- package/frontend-vue/layers/dms-core/app/composables/period/periodTimeZone.ts +31 -0
- package/frontend-vue/layers/dms-core/app/composables/period/presetResolvers.ts +48 -19
- package/frontend-vue/layers/dms-core/app/composables/period/usePeriod.ts +33 -4
- package/frontend-vue/layers/dms-core/app/composables/period/usePeriodScope.ts +78 -25
- package/frontend-vue/layers/dms-core/app/composables/realtime/usePageRealtime.ts +3 -0
- package/frontend-vue/layers/dms-core/app/composables/realtime/useUserRealtime.ts +36 -6
- package/frontend-vue/layers/dms-core/app/composables/user/useUserRegionalPreferences.ts +1 -1
- package/frontend-vue/layers/dms-core/app/plugins/async-data-scope.ts +26 -0
- package/frontend-vue/layers/dms-core/app/utils/pageRoutes.ts +22 -0
- package/frontend-vue/layers/dms-core/app/utils/regional.ts +36 -3
- package/frontend-vue/layers/dms-core/app/utils/trailingDeduper.ts +10 -1
- package/frontend-vue/layers/dms-core/shared/types/app-config.ts +48 -4
- package/frontend-vue/layers/dms-layout/app/app.config.ts +42 -23
- package/frontend-vue/layers/dms-layout/app/assets/css/main.css +72 -20
- package/frontend-vue/layers/dms-layout/app/build/components/layout/DashboardFrame.vue +9 -0
- package/frontend-vue/layers/dms-layout/app/build/components/layout/DashboardSidebar.vue +0 -3
- package/frontend-vue/layers/dms-layout/app/build/components/notification/NotificationPopover.vue +9 -3
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleStoreDependencyPicker.vue +136 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleStoreRequirements.vue +98 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleStoreTile.vue +247 -29
- package/frontend-vue/layers/dms-layout/app/build/components/pages/modules/ModuleTile.vue +19 -2
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/members/MemberRolePicker.vue +13 -12
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/notification/NotificationInboxDisplay.vue +17 -7
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/notification/NotificationPreferencesForm.vue +0 -1
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/profile/ProfilePersonalInfo.vue +36 -33
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/profile/ProfileSecuritySummary.vue +1 -2
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/roles/role-types.ts +5 -4
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/security/SecuritySessions.vue +35 -28
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/security/SecurityStatus.vue +0 -1
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/security/SecurityTwoFactor.vue +1 -1
- package/frontend-vue/layers/dms-layout/app/build/composables/dev-reload/useDevReloadHolder.ts +7 -6
- package/frontend-vue/layers/dms-layout/app/build/composables/layout/sidePanelState.ts +1 -1
- package/frontend-vue/layers/dms-layout/app/build/composables/navigation/useVisitNavBadges.ts +26 -0
- package/frontend-vue/layers/dms-layout/app/build/composables/notification/useNotificationCatalog.ts +25 -23
- package/frontend-vue/layers/dms-layout/app/build/composables/notification/useNotificationPreferences.ts +44 -23
- package/frontend-vue/layers/dms-layout/app/build/composables/security/useSessionHandoff.ts +1 -1
- package/frontend-vue/layers/dms-layout/app/build/composables/settings/profile/preferencesSummary.ts +1 -1
- package/frontend-vue/layers/dms-layout/app/build/composables/settings/profile/useAccountData.ts +3 -2
- package/frontend-vue/layers/dms-layout/app/build/composables/settings/profile/useProfileAvatar.ts +1 -18
- package/frontend-vue/layers/dms-layout/app/build/composables/settings/profile/useProfilePreferences.ts +19 -23
- package/frontend-vue/layers/dms-layout/app/build/composables/settings/security/useSecurityFormat.ts +6 -3
- package/frontend-vue/layers/dms-layout/app/build/composables/settings/security/useSecurityOverview.ts +13 -18
- package/frontend-vue/layers/dms-layout/app/build/utils/module-store-catalog.ts +186 -120
- package/frontend-vue/layers/dms-layout/app/build/utils/module-store-install.ts +146 -0
- package/frontend-vue/layers/dms-layout/app/build/utils/modules-catalog.ts +8 -6
- package/frontend-vue/layers/dms-layout/app/build/utils/publicErrorMessage.ts +19 -0
- package/frontend-vue/layers/dms-layout/app/components/navigation/CollapsedMenuItem.vue +0 -11
- package/frontend-vue/layers/dms-layout/app/components/navigation/NavigationMenu.vue +3 -13
- package/frontend-vue/layers/dms-layout/app/composables/general/useSystemState.ts +7 -11
- package/frontend-vue/layers/dms-layout/app/composables/notification/useNotifications.ts +103 -22
- package/frontend-vue/layers/dms-layout/app/composables/page/useModuleStore.ts +109 -0
- package/frontend-vue/layers/dms-layout/app/composables/page/useModulesListing.ts +25 -102
- package/frontend-vue/layers/dms-layout/app/composables/page/usePageComponentPreload.ts +0 -10
- package/frontend-vue/layers/dms-layout/app/composables/page/useSiteLayout.ts +177 -96
- package/frontend-vue/layers/dms-layout/app/composables/profile/useUserLanguage.ts +3 -2
- package/frontend-vue/layers/dms-layout/app/custom-pages/modules.vue +341 -62
- package/frontend-vue/layers/dms-layout/app/emails/components/EmailLayout.vue +31 -11
- package/frontend-vue/layers/dms-layout/app/error.vue +5 -2
- package/frontend-vue/layers/dms-layout/app/middleware/module-routing.global.ts +1 -1
- package/frontend-vue/layers/dms-layout/app/middleware/page-leave-guard.global.ts +2 -2
- package/frontend-vue/layers/dms-layout/app/pages/[...slug].vue +12 -9
- package/frontend-vue/layers/dms-layout/app/plugins/dms-menu-sync.client.ts +31 -3
- package/frontend-vue/layers/dms-layout/app/plugins/favicon.ts +58 -0
- package/frontend-vue/layers/dms-layout/app/plugins/notification-stream.client.ts +15 -7
- package/frontend-vue/layers/dms-layout/app/plugins/profile-sync.client.ts +5 -1
- package/frontend-vue/layers/dms-layout/app/plugins/regional-preferences.ts +10 -4
- package/frontend-vue/layers/dms-layout/app/plugins/time-zone-cookie.client.ts +12 -0
- package/frontend-vue/layers/dms-layout/app/types/module-store.ts +134 -0
- package/frontend-vue/layers/dms-layout/app/types/page.ts +13 -0
- package/frontend-vue/layers/dms-layout/i18n/locales/layout-en-GB.json +107 -9
- package/frontend-vue/layers/dms-layout/i18n/locales/layout-fr-FR.json +107 -9
- package/frontend-vue/layers/dms-layout/server/html-render.ts +58 -0
- package/frontend-vue/layers/dms-layout/server/render-token.ts +95 -0
- package/frontend-vue/layers/dms-onboarding/app/composables/onboarding/useOnboarding.ts +25 -21
- package/frontend-vue/layers/dms-onboarding/app/middleware/onboarding.global.ts +1 -1
- package/frontend-vue/layers/dms-onboarding/app/plugins/onboarding-preload.ts +9 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/data-types/registerDefaults.ts +4 -1
- package/frontend-vue/layers/dms-ui/app/build/composables/files/useFileMetadata.ts +162 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/form/formRecordLoad.ts +23 -4
- package/frontend-vue/layers/dms-ui/app/build/composables/live/usePageDataRefresh.ts +101 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/navigation/useNavBadges.ts +33 -6
- package/frontend-vue/layers/dms-ui/app/build/composables/period/periodDisplay.ts +19 -16
- package/frontend-vue/layers/dms-ui/app/build/composables/period/periodQuery.ts +40 -20
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableFooter.ts +6 -8
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableListData.ts +42 -14
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableRows.ts +19 -8
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableViews.ts +1 -1
- package/frontend-vue/layers/dms-ui/app/components/chart/ChartCard.vue +5 -2
- package/frontend-vue/layers/dms-ui/app/components/flow-canvas/FlowCanvas.vue +9 -9
- package/frontend-vue/layers/dms-ui/app/components/form/Form.vue +20 -18
- package/frontend-vue/layers/dms-ui/app/components/form/components/Cascader.vue +2 -1
- package/frontend-vue/layers/dms-ui/app/components/form/components/File.vue +26 -132
- package/frontend-vue/layers/dms-ui/app/components/form/components/Image.vue +40 -105
- package/frontend-vue/layers/dms-ui/app/components/form/components/InputAddress.vue +2 -0
- package/frontend-vue/layers/dms-ui/app/components/form/components/Relation.vue +4 -4
- package/frontend-vue/layers/dms-ui/app/components/period/PeriodSelector.vue +9 -13
- package/frontend-vue/layers/dms-ui/app/components/table-view/CascaderPath.vue +2 -1
- package/frontend-vue/layers/dms-ui/app/components/table-view/FilePreview.vue +12 -24
- package/frontend-vue/layers/dms-ui/app/components/table-view/ImagePreview.vue +17 -29
- package/frontend-vue/layers/dms-ui/app/components/table-view/KanbanBoard.vue +7 -3
- package/frontend-vue/layers/dms-ui/app/components/table-view/TableView.vue +20 -8
- package/frontend-vue/layers/dms-ui/app/components/top-list/TopListCard.vue +8 -11
- package/frontend-vue/layers/dms-ui/app/composables/chart/useChartFetch.ts +146 -182
- package/frontend-vue/layers/dms-ui/app/composables/live/usePageLiveRefresh.ts +8 -2
- package/frontend-vue/layers/dms-ui/app/composables/useFileReadUrls.ts +11 -99
- package/frontend-vue/layers/dms-ui/app/utils/blockRefresh.ts +32 -3
- package/frontend-vue/package.json +3 -3
- package/frontend-vue/pnpm-lock.yaml +16 -22
- package/frontend-vue/server/private-options.ts +27 -0
- package/frontend-vue/tests/async-data-scope.test.ts +121 -0
- package/frontend-vue/tests/auth-middleware-error.test.ts +3 -3
- package/frontend-vue/tests/banner-block-fetch.test.ts +3 -0
- package/frontend-vue/tests/block-fetch-options-forwarding.test.ts +3 -0
- package/frontend-vue/tests/block-items-period-realtime.test.ts +3 -0
- package/frontend-vue/tests/block-not-found.test.ts +16 -2
- package/frontend-vue/tests/block-page-refresh.test.ts +3 -0
- package/frontend-vue/tests/block-route-params.test.ts +3 -0
- package/frontend-vue/tests/branding-defaults.test.ts +34 -0
- package/frontend-vue/tests/builtin-emails.test.ts +23 -2
- package/frontend-vue/tests/chart-live-pause.test.ts +4 -1
- package/frontend-vue/tests/chart-value-propagation.test.ts +4 -1
- package/frontend-vue/tests/composed-text-blocks.test.ts +3 -0
- package/frontend-vue/tests/email-layout.test.ts +66 -4
- package/frontend-vue/tests/error-page-message.test.ts +25 -2
- package/frontend-vue/tests/favicon.test.ts +131 -0
- package/frontend-vue/tests/file-fields-ssr.test.ts +145 -0
- package/frontend-vue/tests/file-read-urls.test.ts +145 -34
- package/frontend-vue/tests/file-unavailable.test.ts +5 -1
- package/frontend-vue/tests/fixtures/dataEngine.ts +44 -0
- package/frontend-vue/tests/form-load-error.test.ts +55 -1
- package/frontend-vue/tests/helpers/api-data-runtime.ts +77 -0
- package/frontend-vue/tests/image-hydration-ids.test.ts +21 -16
- package/frontend-vue/tests/image-reference-preservation.test.ts +59 -53
- package/frontend-vue/tests/input-number-adjust.test.ts +14 -0
- package/frontend-vue/tests/key-value-list-copy.test.ts +3 -0
- package/frontend-vue/tests/member-role-picker.test.ts +4 -2
- package/frontend-vue/tests/menu-sync-reconnect.test.ts +47 -0
- package/frontend-vue/tests/metadata-retry.test.ts +5 -1
- package/frontend-vue/tests/module-routing.test.ts +2 -5
- package/frontend-vue/tests/module-store-catalog.test.ts +270 -51
- package/frontend-vue/tests/modules-catalog.test.ts +17 -4
- package/frontend-vue/tests/modules-listing-transfer.test.ts +95 -0
- package/frontend-vue/tests/multi-account-validate.test.ts +23 -1
- package/frontend-vue/tests/nav-badge-tones.test.ts +66 -3
- package/frontend-vue/tests/notification-counts-from-writes.test.ts +223 -0
- package/frontend-vue/tests/notification-counts-transfer.test.ts +88 -0
- package/frontend-vue/tests/notification-inbox-display.test.ts +57 -5
- package/frontend-vue/tests/notification-popover-errors.test.ts +21 -1
- package/frontend-vue/tests/oauth-complete-handoff.test.ts +209 -0
- package/frontend-vue/tests/onboarding-middleware.test.ts +1 -1
- package/frontend-vue/tests/onboarding-transfer.test.ts +106 -0
- package/frontend-vue/tests/page-data-refresh.test.ts +141 -0
- package/frontend-vue/tests/page-fill-height.test.ts +16 -3
- package/frontend-vue/tests/page-no-visible-blocks.test.ts +12 -2
- package/frontend-vue/tests/page-realtime-remount.test.ts +1 -1
- package/frontend-vue/tests/page-record-label.test.ts +0 -7
- package/frontend-vue/tests/page-validation-redirect.test.ts +12 -2
- package/frontend-vue/tests/period-hydration-now.test.ts +185 -0
- package/frontend-vue/tests/period-live-pause.test.ts +3 -0
- package/frontend-vue/tests/period-reader-zone.test.ts +137 -0
- package/frontend-vue/tests/period-scope-first-fetch.test.ts +17 -1
- package/frontend-vue/tests/period-ssr.test.ts +195 -0
- package/frontend-vue/tests/permission-preview-partial.test.ts +0 -2
- package/frontend-vue/tests/permissions-transfer.test.ts +194 -0
- package/frontend-vue/tests/post-login-redirect.test.ts +10 -5
- package/frontend-vue/tests/profile-personal-info-ssr.test.ts +150 -0
- package/frontend-vue/tests/profile-preferences-summary.test.ts +15 -11
- package/frontend-vue/tests/realtime-reconnect.test.ts +22 -3
- package/frontend-vue/tests/roles-name-errors.test.ts +1 -1
- package/frontend-vue/tests/row-side-panel.test.ts +1 -1
- package/frontend-vue/tests/security-sessions-load-error.test.ts +3 -1
- package/frontend-vue/tests/server-routes-vs-pages.test.ts +26 -0
- package/frontend-vue/tests/server-routes.test.ts +582 -0
- package/frontend-vue/tests/session-handoff.test.ts +1 -1
- package/frontend-vue/tests/settings-reads-ssr.test.ts +232 -0
- package/frontend-vue/tests/side-panels.test.ts +8 -1
- package/frontend-vue/tests/sign-in-exit-history.test.ts +219 -0
- package/frontend-vue/tests/signup-invitation-link.test.ts +56 -8
- package/frontend-vue/tests/site-layout-categories.test.ts +42 -0
- package/frontend-vue/tests/site-layout-hydration.test.ts +3 -3
- package/frontend-vue/tests/site-layout-rendered.test.ts +103 -0
- package/frontend-vue/tests/site-layout-resync.test.ts +87 -0
- package/frontend-vue/tests/ssr-guard-preload.test.ts +188 -0
- package/frontend-vue/tests/table-cell-tones.test.ts +36 -1
- package/frontend-vue/tests/table-data-ssr.test.ts +195 -0
- package/frontend-vue/tests/table-list-data-requests.test.ts +154 -0
- package/frontend-vue/tests/table-retry-loading.test.ts +37 -0
- package/frontend-vue/tests/table-source-navigation.test.ts +0 -1
- package/frontend-vue/tests/table-source-period-scope.test.ts +0 -1
- package/frontend-vue/tests/table-view-views.test.ts +1 -1
- package/frontend-vue/tests/top-list-card-actions.test.ts +3 -0
- package/frontend-vue/tests/top-list-card-period-badge-ssr.test.ts +212 -0
- package/frontend-vue/tests/top-list-card-period-badge.test.ts +79 -0
- package/frontend-vue/tests/top-list-card-value-suffix.test.ts +3 -0
- package/frontend-vue/tests/trailing-deduper.test.ts +22 -0
- package/frontend-vue/tests/use-api-data-update.test.ts +119 -0
- package/frontend-vue/tests/use-api-data.test.ts +410 -0
- package/frontend-vue/tests/user-language.test.ts +8 -5
- package/frontend-vue/tests/widget-label-i18n.test.ts +4 -1
- package/frontend-vue/vitest.config.ts +6 -0
- package/package.json +2 -2
- package/skills/dms/SKILL.md +2 -1
- package/skills/dms-module/SKILL.md +1 -1
- package/skills/dms-pages/SKILL.md +4 -1
- package/frontend-vue/layers/dms-core/app/build/composables/page/usePageRecordLabel.ts +0 -9
- package/frontend-vue/layers/dms-layout/app/composables/page/usePrefetch.ts +0 -21
- package/frontend-vue/layers/dms-ui/app/build/composables/form/useControlError.ts +0 -10
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useServerRenderedAsyncData.ts +0 -23
- package/frontend-vue/tests/control-error-path.test.ts +0 -11
- package/frontend-vue/tests/modules-listing-per-request.test.ts +0 -104
- package/frontend-vue/tests/page-layout-background-refresh.test.ts +0 -321
|
@@ -12,6 +12,51 @@ export interface DmsLogoSources {
|
|
|
12
12
|
dark: string;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
/** The logos of an instance, one per place it is drawn. */
|
|
16
|
+
export interface DmsBrandingLogo {
|
|
17
|
+
/** The expanded sidebar and the auth pages. */
|
|
18
|
+
default: DmsLogoSources;
|
|
19
|
+
/** The icon-only sidebar. */
|
|
20
|
+
collapsed: DmsLogoSources;
|
|
21
|
+
/**
|
|
22
|
+
* The header of the emails, in place of `default.light`. A PNG or a JPEG:
|
|
23
|
+
* Gmail and Outlook refuse SVG, and an email leaves out a logo they cannot
|
|
24
|
+
* load. `dark` goes to the mail clients that follow the reader's dark mode.
|
|
25
|
+
*/
|
|
26
|
+
email?: DmsLogoSources;
|
|
27
|
+
/**
|
|
28
|
+
* The browser tab icon. `light` and `dark` follow the operating system's
|
|
29
|
+
* color scheme, not the dashboard's color mode: the browser draws the tab
|
|
30
|
+
* outside the page.
|
|
31
|
+
*/
|
|
32
|
+
favicon?: DmsLogoSources;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The Tailwind palette each Nuxt UI color role resolves to (`ui.colors`): a
|
|
37
|
+
* stock palette name, or one whose `--color-<name>-*` shades a stylesheet
|
|
38
|
+
* declares.
|
|
39
|
+
*/
|
|
40
|
+
export interface DmsUiColors {
|
|
41
|
+
primary: string;
|
|
42
|
+
secondary: string;
|
|
43
|
+
neutral: string;
|
|
44
|
+
success: string;
|
|
45
|
+
warning: string;
|
|
46
|
+
error: string;
|
|
47
|
+
info: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The DMS's own logos and palettes, kept whatever a layer sets in their place,
|
|
52
|
+
* so a tool can preview a return to the DMS look (the builder's theme editor).
|
|
53
|
+
* A layer overrides `branding.logo` and `ui.colors`, never these.
|
|
54
|
+
*/
|
|
55
|
+
export interface DmsBrandingDefaults {
|
|
56
|
+
logo: DmsBrandingLogo;
|
|
57
|
+
colors: DmsUiColors;
|
|
58
|
+
}
|
|
59
|
+
|
|
15
60
|
/**
|
|
16
61
|
* What the footer of the public and auth pages shows besides its links
|
|
17
62
|
* (`registerFooterLink`).
|
|
@@ -33,11 +78,10 @@ export interface DmsBrandingConfig {
|
|
|
33
78
|
* Absent when an instance ships no logo of its own; the layer's app config
|
|
34
79
|
* supplies the AntelopeJS one by default.
|
|
35
80
|
*/
|
|
36
|
-
logo?:
|
|
37
|
-
default: DmsLogoSources;
|
|
38
|
-
collapsed: DmsLogoSources;
|
|
39
|
-
};
|
|
81
|
+
logo?: DmsBrandingLogo;
|
|
40
82
|
footer?: DmsFooterConfig;
|
|
83
|
+
/** Supplied by the DMS layout layer's app config. */
|
|
84
|
+
defaults?: DmsBrandingDefaults;
|
|
41
85
|
}
|
|
42
86
|
|
|
43
87
|
export interface DmsAppConfig {
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
DmsBrandingLogo,
|
|
3
|
+
DmsUiColors,
|
|
4
|
+
} from "#dms-core/shared/types/app-config";
|
|
1
5
|
import { EYEBROW_CLASS } from "#dms-ui/app/build/utils/eyebrow";
|
|
2
6
|
import { actionsTheme } from "./theme/actions";
|
|
3
7
|
import { dataTheme } from "./theme/data";
|
|
@@ -8,21 +12,44 @@ import {
|
|
|
8
12
|
} from "./theme/navigation";
|
|
9
13
|
import { surfacesTheme } from "./theme/surfaces";
|
|
10
14
|
|
|
15
|
+
const ANTELOPE_ICON = "/images/antelope-logo/icon.svg";
|
|
16
|
+
|
|
17
|
+
// The palettes and logos are built afresh for each place that holds them: a
|
|
18
|
+
// merged app config keeps the very objects no layer overrides, so a live edit
|
|
19
|
+
// of `ui.colors` or `branding.logo` would otherwise rewrite
|
|
20
|
+
// `branding.defaults` too.
|
|
21
|
+
|
|
22
|
+
function dmsColors(): DmsUiColors {
|
|
23
|
+
return {
|
|
24
|
+
primary: "dms",
|
|
25
|
+
// The AI accent of the v2 design.
|
|
26
|
+
secondary: "violet",
|
|
27
|
+
neutral: "neutral",
|
|
28
|
+
// Design semantic hexes map exactly onto these Tailwind palettes:
|
|
29
|
+
// success #10b981 (emerald), warning #f59e0b (amber),
|
|
30
|
+
// error #ef4444 (red), info #06b6d4 (cyan).
|
|
31
|
+
success: "emerald",
|
|
32
|
+
warning: "amber",
|
|
33
|
+
error: "red",
|
|
34
|
+
info: "cyan",
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// No email logo: the AntelopeJS logos are SVG, which mail clients refuse.
|
|
39
|
+
function dmsLogo(): DmsBrandingLogo {
|
|
40
|
+
return {
|
|
41
|
+
default: {
|
|
42
|
+
light: "/images/antelope-logo/light.svg",
|
|
43
|
+
dark: "/images/antelope-logo/dark.svg",
|
|
44
|
+
},
|
|
45
|
+
collapsed: { light: ANTELOPE_ICON, dark: ANTELOPE_ICON },
|
|
46
|
+
favicon: { light: ANTELOPE_ICON, dark: ANTELOPE_ICON },
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
11
50
|
export default {
|
|
12
51
|
ui: {
|
|
13
|
-
colors:
|
|
14
|
-
primary: "dms",
|
|
15
|
-
// The AI accent of the v2 design.
|
|
16
|
-
secondary: "violet",
|
|
17
|
-
neutral: "neutral",
|
|
18
|
-
// Design semantic hexes map exactly onto these Tailwind palettes:
|
|
19
|
-
// success #10b981 (emerald), warning #f59e0b (amber),
|
|
20
|
-
// error #ef4444 (red), info #06b6d4 (cyan).
|
|
21
|
-
success: "emerald",
|
|
22
|
-
warning: "amber",
|
|
23
|
-
error: "red",
|
|
24
|
-
info: "cyan",
|
|
25
|
-
},
|
|
52
|
+
colors: dmsColors(),
|
|
26
53
|
icons: {
|
|
27
54
|
arrowDown: "i-ph-arrow-down-light",
|
|
28
55
|
arrowLeft: "i-ph-arrow-left-light",
|
|
@@ -184,16 +211,8 @@ export default {
|
|
|
184
211
|
},
|
|
185
212
|
},
|
|
186
213
|
branding: {
|
|
187
|
-
logo:
|
|
188
|
-
|
|
189
|
-
light: "/images/antelope-logo/light.svg",
|
|
190
|
-
dark: "/images/antelope-logo/dark.svg",
|
|
191
|
-
},
|
|
192
|
-
collapsed: {
|
|
193
|
-
light: "/images/antelope-logo/icon.svg",
|
|
194
|
-
dark: "/images/antelope-logo/icon.svg",
|
|
195
|
-
},
|
|
196
|
-
},
|
|
214
|
+
logo: dmsLogo(),
|
|
215
|
+
defaults: { logo: dmsLogo(), colors: dmsColors() },
|
|
197
216
|
footer: {
|
|
198
217
|
copyright: "Antelope",
|
|
199
218
|
githubStar: true,
|
|
@@ -125,11 +125,23 @@
|
|
|
125
125
|
|
|
126
126
|
/* Accent for text, icons and lines. The light theme needs the deep dms-700
|
|
127
127
|
to stay readable on white; solid fills keep the bright dms-400 through
|
|
128
|
-
--dms-accent-fill instead, with dark ink on top, in both themes.
|
|
128
|
+
--dms-accent-fill instead, with dark ink on top, in both themes. The
|
|
129
|
+
whole accent family derives from the primary palette, so pointing
|
|
130
|
+
`ui.colors.primary` elsewhere leaves no cyan behind. The fill hover and
|
|
131
|
+
its ink sit between shades: on the dms palette they come within a few
|
|
132
|
+
units of the v2 design's #5fe0ec and #04181b. */
|
|
129
133
|
--ui-primary: var(--ui-color-primary-700);
|
|
130
134
|
--dms-accent-fill: var(--ui-color-primary-400);
|
|
131
|
-
--dms-accent-fill-hover:
|
|
132
|
-
|
|
135
|
+
--dms-accent-fill-hover: color-mix(
|
|
136
|
+
in srgb,
|
|
137
|
+
var(--ui-color-primary-400) 75%,
|
|
138
|
+
var(--ui-color-primary-200)
|
|
139
|
+
);
|
|
140
|
+
--dms-accent-on-fill: color-mix(
|
|
141
|
+
in srgb,
|
|
142
|
+
var(--ui-color-primary-950) 50%,
|
|
143
|
+
black
|
|
144
|
+
);
|
|
133
145
|
|
|
134
146
|
/* v2 status inks: the light theme uses the 700 shades so success, warning
|
|
135
147
|
and error text stays readable on white; tints and lines stay bright. */
|
|
@@ -191,11 +203,13 @@
|
|
|
191
203
|
0 0 0 1px color-mix(in srgb, var(--dms-accent) 30%, transparent),
|
|
192
204
|
0 0 24px -4px color-mix(in srgb, var(--dms-accent) 45%, transparent);
|
|
193
205
|
--dms-focus-ring:
|
|
194
|
-
0 0 0 2px var(--ui-bg-muted),
|
|
206
|
+
0 0 0 2px var(--ui-bg-muted),
|
|
207
|
+
0 0 0 4px color-mix(in srgb, var(--ui-color-primary-600) 55%, transparent);
|
|
195
208
|
/* Command palette: the deepest shadow, plus an accent halo ring. */
|
|
196
209
|
--dms-shadow-cmdk:
|
|
197
210
|
0 1px 2px rgb(11 17 20 / 0.06), 0 30px 80px rgb(11 17 20 / 0.18);
|
|
198
|
-
--dms-halo-accent: 0 0 0 6px
|
|
211
|
+
--dms-halo-accent: 0 0 0 6px
|
|
212
|
+
color-mix(in srgb, var(--ui-color-primary-600) 12%, transparent);
|
|
199
213
|
/* Assistant mode swaps the accent halo for a violet (secondary) one,
|
|
200
214
|
and tints its surfaces and lines with the same violet. Plain rgb():
|
|
201
215
|
Chromium fringes the anti-aliased edge of an oklab colour-mix border
|
|
@@ -213,16 +227,30 @@
|
|
|
213
227
|
0 1px 2px rgb(11 17 20 / 0.06), 0 24px 64px rgb(11 17 20 / 0.16);
|
|
214
228
|
--dms-overlay: rgb(11 17 20 / 0.28);
|
|
215
229
|
--dms-glow-accent:
|
|
216
|
-
0 0 0 1px var(--ui-color-primary-600),
|
|
230
|
+
0 0 0 1px var(--ui-color-primary-600),
|
|
231
|
+
0 4px 16px
|
|
232
|
+
color-mix(in srgb, var(--ui-color-primary-600) 18%, transparent);
|
|
217
233
|
|
|
218
234
|
--dms-accent: var(--ui-color-primary-500);
|
|
219
235
|
|
|
220
236
|
/* Form controls (v2 --accent-tint*, --error-tint, --border-top,
|
|
221
237
|
--btn-highlight): the 3px focus halo around fields, the strongest border
|
|
222
238
|
(unchecked boxes, dropzones) and the highlight on accent fills. */
|
|
223
|
-
--dms-accent-tint:
|
|
224
|
-
|
|
225
|
-
|
|
239
|
+
--dms-accent-tint: color-mix(
|
|
240
|
+
in srgb,
|
|
241
|
+
var(--ui-color-primary-600) 9%,
|
|
242
|
+
transparent
|
|
243
|
+
);
|
|
244
|
+
--dms-accent-tint-strong: color-mix(
|
|
245
|
+
in srgb,
|
|
246
|
+
var(--ui-color-primary-600) 15%,
|
|
247
|
+
transparent
|
|
248
|
+
);
|
|
249
|
+
--dms-accent-line: color-mix(
|
|
250
|
+
in srgb,
|
|
251
|
+
var(--ui-color-primary-600) 35%,
|
|
252
|
+
transparent
|
|
253
|
+
);
|
|
226
254
|
--dms-error-tint: rgb(220 38 38 / 0.08);
|
|
227
255
|
--dms-border-top: #c9d1d7;
|
|
228
256
|
--dms-field-border-hover: color-mix(
|
|
@@ -231,7 +259,8 @@
|
|
|
231
259
|
var(--ui-text-muted)
|
|
232
260
|
);
|
|
233
261
|
--dms-fill-highlight:
|
|
234
|
-
inset 0 1px 0 rgb(255 255 255 / 0.45),
|
|
262
|
+
inset 0 1px 0 rgb(255 255 255 / 0.45),
|
|
263
|
+
0 1px 2px color-mix(in srgb, var(--ui-color-primary-950) 18%, transparent);
|
|
235
264
|
|
|
236
265
|
/* Charts and dashboards (v2 --chart-*, --sparkline, --skeleton): step 1
|
|
237
266
|
is the main series, step 2 (violet) always the comparison. Lines use
|
|
@@ -285,12 +314,12 @@
|
|
|
285
314
|
--dms-bg-muted: #0d1114;
|
|
286
315
|
--dms-canvas-glow: radial-gradient(
|
|
287
316
|
900px 600px at 85% -10%,
|
|
288
|
-
|
|
317
|
+
color-mix(in srgb, var(--ui-color-primary-400) 5.5%, transparent),
|
|
289
318
|
transparent 70%
|
|
290
319
|
);
|
|
291
320
|
--dms-stage-glow: radial-gradient(
|
|
292
321
|
closest-side,
|
|
293
|
-
|
|
322
|
+
color-mix(in srgb, var(--ui-color-primary-400) 10%, transparent),
|
|
294
323
|
transparent
|
|
295
324
|
);
|
|
296
325
|
|
|
@@ -316,10 +345,12 @@
|
|
|
316
345
|
0 0 0 1px color-mix(in srgb, var(--dms-accent) 35%, transparent),
|
|
317
346
|
0 0 32px -4px color-mix(in srgb, var(--dms-accent) 45%, transparent);
|
|
318
347
|
--dms-focus-ring:
|
|
319
|
-
0 0 0 2px var(--ui-bg-muted),
|
|
348
|
+
0 0 0 2px var(--ui-bg-muted),
|
|
349
|
+
0 0 0 4px color-mix(in srgb, var(--ui-color-primary-400) 60%, transparent);
|
|
320
350
|
--dms-shadow-cmdk:
|
|
321
351
|
0 50px 140px rgb(0 0 0 / 0.7), inset 0 1px 0 rgb(255 255 255 / 0.04);
|
|
322
|
-
--dms-halo-accent: 0 0 0 8px
|
|
352
|
+
--dms-halo-accent: 0 0 0 8px
|
|
353
|
+
color-mix(in srgb, var(--ui-color-primary-400) 7%, transparent);
|
|
323
354
|
--dms-assistant-halo: 0 0 0 8px rgb(167 139 250 / 0.09);
|
|
324
355
|
--dms-assistant-tint: rgb(167 139 250 / 0.12);
|
|
325
356
|
--dms-assistant-line: rgb(167 139 250 / 0.4);
|
|
@@ -329,12 +360,25 @@
|
|
|
329
360
|
0 40px 120px rgb(0 0 0 / 0.7), inset 0 1px 0 rgb(255 255 255 / 0.04);
|
|
330
361
|
--dms-overlay: rgb(3 5 6 / 0.62);
|
|
331
362
|
--dms-glow-accent:
|
|
332
|
-
0 0 0 1px var(--ui-color-primary-400),
|
|
363
|
+
0 0 0 1px var(--ui-color-primary-400),
|
|
364
|
+
0 0 40px color-mix(in srgb, var(--ui-color-primary-400) 25%, transparent);
|
|
333
365
|
--dms-accent: var(--ui-color-primary-400);
|
|
334
366
|
|
|
335
|
-
--dms-accent-tint:
|
|
336
|
-
|
|
337
|
-
|
|
367
|
+
--dms-accent-tint: color-mix(
|
|
368
|
+
in srgb,
|
|
369
|
+
var(--ui-color-primary-400) 10%,
|
|
370
|
+
transparent
|
|
371
|
+
);
|
|
372
|
+
--dms-accent-tint-strong: color-mix(
|
|
373
|
+
in srgb,
|
|
374
|
+
var(--ui-color-primary-400) 16%,
|
|
375
|
+
transparent
|
|
376
|
+
);
|
|
377
|
+
--dms-accent-line: color-mix(
|
|
378
|
+
in srgb,
|
|
379
|
+
var(--ui-color-primary-400) 35%,
|
|
380
|
+
transparent
|
|
381
|
+
);
|
|
338
382
|
--dms-error-tint: rgb(248 113 113 / 0.13);
|
|
339
383
|
--dms-border-top: #3a4550;
|
|
340
384
|
--dms-field-border-hover: color-mix(
|
|
@@ -380,7 +424,11 @@
|
|
|
380
424
|
--ui-border-accented: #8a949d;
|
|
381
425
|
--dms-border-top: #8a949d;
|
|
382
426
|
--dms-chart-grid: #dfe4e8;
|
|
383
|
-
--dms-accent-line:
|
|
427
|
+
--dms-accent-line: color-mix(
|
|
428
|
+
in srgb,
|
|
429
|
+
var(--ui-color-primary-600) 60%,
|
|
430
|
+
transparent
|
|
431
|
+
);
|
|
384
432
|
--dms-success-line: rgb(22 163 74 / 0.55);
|
|
385
433
|
--dms-warning-line: rgb(217 119 6 / 0.6);
|
|
386
434
|
--dms-error-line: rgb(220 38 38 / 0.55);
|
|
@@ -398,7 +446,11 @@
|
|
|
398
446
|
--ui-border-accented: #5f6b76;
|
|
399
447
|
--dms-border-top: #6b7782;
|
|
400
448
|
--dms-chart-grid: #262e36;
|
|
401
|
-
--dms-accent-line:
|
|
449
|
+
--dms-accent-line: color-mix(
|
|
450
|
+
in srgb,
|
|
451
|
+
var(--ui-color-primary-400) 60%,
|
|
452
|
+
transparent
|
|
453
|
+
);
|
|
402
454
|
--dms-success-line: rgb(74 222 128 / 0.6);
|
|
403
455
|
--dms-warning-line: rgb(251 191 36 / 0.6);
|
|
404
456
|
--dms-error-line: rgb(248 113 113 / 0.6);
|
|
@@ -6,6 +6,7 @@ import DashboardBanners from "./DashboardBanners.vue";
|
|
|
6
6
|
import GithubStarPrompt from "./GithubStarPrompt.vue";
|
|
7
7
|
import RolePreviewBar from "./RolePreviewBar.vue";
|
|
8
8
|
import { useAppWidgets } from "../../../composables/useAppWidgets";
|
|
9
|
+
import { useVisitNavBadges } from "../../composables/navigation/useVisitNavBadges";
|
|
9
10
|
import {
|
|
10
11
|
sidePanelWidthStyle,
|
|
11
12
|
useActiveSidePanel,
|
|
@@ -45,6 +46,14 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
45
46
|
});
|
|
46
47
|
|
|
47
48
|
providePageFillHeight(toRef(props, "fillHeight"));
|
|
49
|
+
// A custom page brings no site layout: read with the page, and taken over by
|
|
50
|
+
// the browser before the sidebar, the header and the banners render it.
|
|
51
|
+
useRenderedSiteLayout();
|
|
52
|
+
// The bell's counts, read with the page too, before the header and the page
|
|
53
|
+
// (the inbox, the profile's summary) show them.
|
|
54
|
+
useRenderedBellCounts();
|
|
55
|
+
|
|
56
|
+
useVisitNavBadges();
|
|
48
57
|
|
|
49
58
|
const { widgets: appWidgets } = useAppWidgets();
|
|
50
59
|
// A fill-height page has nothing to scroll past the dock: no clearance.
|
package/frontend-vue/layers/dms-layout/app/build/components/notification/NotificationPopover.vue
CHANGED
|
@@ -3,7 +3,10 @@ import { formatRelativeTime } from "#dms-core/app/utils/formatter";
|
|
|
3
3
|
import NotificationCard from "./NotificationCard.vue";
|
|
4
4
|
import { useNavBadges } from "#dms-ui/app/build/composables/navigation/useNavBadges";
|
|
5
5
|
import { settleWidgetRequest } from "./widgetRequest";
|
|
6
|
-
import
|
|
6
|
+
import {
|
|
7
|
+
settledRenderedBellCounts,
|
|
8
|
+
type UserNotification,
|
|
9
|
+
} from "../../../composables/notification/useNotifications";
|
|
7
10
|
import { resolveNotificationTone } from "../pages/settings/notification/notificationDisplay";
|
|
8
11
|
import { DMS_TONE_SOLID, iconWellToneOf } from "#dms-ui/app/build/utils/tone";
|
|
9
12
|
import DmsRowSkeleton from "#dms-ui/app/build/components/skeleton/RowSkeleton.vue";
|
|
@@ -20,11 +23,12 @@ const SKELETON_ROW_COUNT = 4;
|
|
|
20
23
|
const NOTIFICATIONS_SETTINGS_PAGE = "settings.user.notifications";
|
|
21
24
|
|
|
22
25
|
const { t, locale } = useI18n();
|
|
23
|
-
const { loggedIn } =
|
|
26
|
+
const { loggedIn } = useDmsUserSession();
|
|
24
27
|
const { processI18n } = useTranslation();
|
|
25
28
|
const {
|
|
26
29
|
unreadCount,
|
|
27
30
|
unreadTone,
|
|
31
|
+
areCountsLoaded,
|
|
28
32
|
notifications,
|
|
29
33
|
hasMore,
|
|
30
34
|
fetchBellCounts,
|
|
@@ -89,7 +93,9 @@ const handleFormSubmitSuccess = async (event: Event) => {
|
|
|
89
93
|
|
|
90
94
|
onMounted(async () => {
|
|
91
95
|
if (!loggedIn.value) return;
|
|
92
|
-
|
|
96
|
+
// Read with the page (`useRenderedBellCounts`) unless that read failed.
|
|
97
|
+
if (!areCountsLoaded.value) await settledRenderedBellCounts();
|
|
98
|
+
if (!areCountsLoaded.value) await refreshCounts();
|
|
93
99
|
|
|
94
100
|
window.addEventListener(
|
|
95
101
|
FormEvents.SUBMIT_SUCCESS,
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { MONO_CHIP_CLASS } from "#dms-ui/app/build/utils/monoChip";
|
|
3
|
+
import type { MissingInterface } from "../../../../types/module-store";
|
|
4
|
+
import {
|
|
5
|
+
type DependencyDraft,
|
|
6
|
+
type DependencyDraftError,
|
|
7
|
+
OTHER_PACKAGE_CHOICE,
|
|
8
|
+
validateDependencyDraft,
|
|
9
|
+
} from "../../../utils/module-store-install";
|
|
10
|
+
|
|
11
|
+
interface ModuleStoreDependencyPickerProps {
|
|
12
|
+
/** The interfaces the release needs and no running module implements. */
|
|
13
|
+
missing: MissingInterface[];
|
|
14
|
+
/** One draft per missing interface, in the same order. */
|
|
15
|
+
drafts: DependencyDraft[];
|
|
16
|
+
/** Confirm was tried: the fields say what is wrong. */
|
|
17
|
+
showErrors?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface ModuleStoreDependencyPickerEmits {
|
|
21
|
+
update: [index: number, patch: Partial<DependencyDraft>];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const props = withDefaults(defineProps<ModuleStoreDependencyPickerProps>(), {
|
|
25
|
+
showErrors: false,
|
|
26
|
+
});
|
|
27
|
+
const emit = defineEmits<ModuleStoreDependencyPickerEmits>();
|
|
28
|
+
const { t } = useI18n();
|
|
29
|
+
|
|
30
|
+
const CONFIG_PLACEHOLDER = "{}";
|
|
31
|
+
const CONFIG_ROWS = 3;
|
|
32
|
+
|
|
33
|
+
const groups = computed(() =>
|
|
34
|
+
props.missing.map((missing, index) => {
|
|
35
|
+
const draft = props.drafts[index];
|
|
36
|
+
const errors =
|
|
37
|
+
props.showErrors && draft ? validateDependencyDraft(draft) : {};
|
|
38
|
+
return {
|
|
39
|
+
missing,
|
|
40
|
+
draft,
|
|
41
|
+
errors,
|
|
42
|
+
items: [
|
|
43
|
+
...missing.candidates.map((candidate) => ({
|
|
44
|
+
label: candidate.name,
|
|
45
|
+
description: candidate.package,
|
|
46
|
+
value: candidate.package,
|
|
47
|
+
})),
|
|
48
|
+
{
|
|
49
|
+
label: t("modules.store.install_dialog.other"),
|
|
50
|
+
value: OTHER_PACKAGE_CHOICE,
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
};
|
|
54
|
+
}),
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
function errorText(error: DependencyDraftError | undefined) {
|
|
58
|
+
return error ? t(`modules.store.install_dialog.errors.${error}`) : undefined;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Sends `field` of draft `index` as the control typed it. */
|
|
62
|
+
function updateField(
|
|
63
|
+
index: number,
|
|
64
|
+
field: keyof DependencyDraft,
|
|
65
|
+
value: unknown,
|
|
66
|
+
): void {
|
|
67
|
+
emit("update", index, { [field]: String(value ?? "") });
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function fieldId(index: number, field: string): string {
|
|
71
|
+
return `store-dependency-${index}-${field}`;
|
|
72
|
+
}
|
|
73
|
+
</script>
|
|
74
|
+
|
|
75
|
+
<template>
|
|
76
|
+
<div class="flex flex-col gap-4">
|
|
77
|
+
<section
|
|
78
|
+
v-for="(group, index) in groups"
|
|
79
|
+
:key="group.missing.interfacePackage"
|
|
80
|
+
class="flex flex-col gap-2.5"
|
|
81
|
+
:aria-labelledby="fieldId(index, 'title')"
|
|
82
|
+
>
|
|
83
|
+
<h4
|
|
84
|
+
:id="fieldId(index, 'title')"
|
|
85
|
+
class="text-highlighted text-[13px] font-semibold"
|
|
86
|
+
>
|
|
87
|
+
<code :class="[MONO_CHIP_CLASS, 'bg-elevated text-xs']">
|
|
88
|
+
{{ group.missing.interfacePackage }}
|
|
89
|
+
</code>
|
|
90
|
+
</h4>
|
|
91
|
+
<template v-if="group.draft">
|
|
92
|
+
<URadioGroup
|
|
93
|
+
:model-value="group.draft.choice"
|
|
94
|
+
:items="group.items"
|
|
95
|
+
size="sm"
|
|
96
|
+
:aria-labelledby="fieldId(index, 'title')"
|
|
97
|
+
@update:model-value="updateField(index, 'choice', $event)"
|
|
98
|
+
/>
|
|
99
|
+
<UFormField
|
|
100
|
+
v-if="group.draft.choice === OTHER_PACKAGE_CHOICE"
|
|
101
|
+
:label="t('modules.store.install_dialog.package_label')"
|
|
102
|
+
:error="errorText(group.errors.package)"
|
|
103
|
+
>
|
|
104
|
+
<UInput
|
|
105
|
+
:id="fieldId(index, 'package')"
|
|
106
|
+
:model-value="group.draft.otherPackage"
|
|
107
|
+
class="w-full font-mono"
|
|
108
|
+
autocomplete="off"
|
|
109
|
+
spellcheck="false"
|
|
110
|
+
:placeholder="t('modules.store.install_dialog.package_placeholder')"
|
|
111
|
+
@update:model-value="updateField(index, 'otherPackage', $event)"
|
|
112
|
+
/>
|
|
113
|
+
</UFormField>
|
|
114
|
+
<UFormField
|
|
115
|
+
:label="t('modules.store.install_dialog.config_label')"
|
|
116
|
+
:hint="t('modules.store.install_dialog.config_hint')"
|
|
117
|
+
:error="errorText(group.errors.config)"
|
|
118
|
+
>
|
|
119
|
+
<UTextarea
|
|
120
|
+
:id="fieldId(index, 'config')"
|
|
121
|
+
:model-value="group.draft.config"
|
|
122
|
+
class="w-full font-mono text-xs"
|
|
123
|
+
:rows="CONFIG_ROWS"
|
|
124
|
+
autoresize
|
|
125
|
+
spellcheck="false"
|
|
126
|
+
:placeholder="CONFIG_PLACEHOLDER"
|
|
127
|
+
@update:model-value="updateField(index, 'config', $event)"
|
|
128
|
+
/>
|
|
129
|
+
</UFormField>
|
|
130
|
+
</template>
|
|
131
|
+
</section>
|
|
132
|
+
<p class="text-muted text-xs">
|
|
133
|
+
{{ t("modules.store.install_dialog.note") }}
|
|
134
|
+
</p>
|
|
135
|
+
</div>
|
|
136
|
+
</template>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import DmsCopyButton from "#dms-ui/app/components/copy/CopyButton.vue";
|
|
3
|
+
import type { StoreListingEntry } from "../../../../types/module-store";
|
|
4
|
+
|
|
5
|
+
interface ModuleStoreRequirementsProps {
|
|
6
|
+
/** The store module whose requirements the tile spells out. */
|
|
7
|
+
entry: StoreListingEntry;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const props = defineProps<ModuleStoreRequirementsProps>();
|
|
11
|
+
const { t } = useI18n();
|
|
12
|
+
|
|
13
|
+
const LIST_SEPARATOR = ", ";
|
|
14
|
+
|
|
15
|
+
const requirement = computed(() => props.entry.frontendRequirement);
|
|
16
|
+
const missingInterfaces = computed(() =>
|
|
17
|
+
props.entry.missingInterfaces
|
|
18
|
+
.map((missing) => missing.interfacePackage)
|
|
19
|
+
.join(LIST_SEPARATOR),
|
|
20
|
+
);
|
|
21
|
+
const dependents = computed(() => props.entry.dependents.join(LIST_SEPARATOR));
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<template>
|
|
25
|
+
<!-- The release needs another dms-frontend: what to run, what it breaks.
|
|
26
|
+
The store never moves dms-frontend itself. -->
|
|
27
|
+
<div
|
|
28
|
+
v-if="requirement"
|
|
29
|
+
class="flex flex-col gap-1.5 rounded-[8px] bg-(--ui-warning)/8 px-2.5 py-1.5 text-xs text-(--ui-warning)"
|
|
30
|
+
>
|
|
31
|
+
<p>
|
|
32
|
+
{{
|
|
33
|
+
t("modules.store.frontend_requirement.needs", {
|
|
34
|
+
range: requirement.range,
|
|
35
|
+
running: requirement.running,
|
|
36
|
+
})
|
|
37
|
+
}}
|
|
38
|
+
</p>
|
|
39
|
+
<template v-if="requirement.target">
|
|
40
|
+
<p v-if="requirement.command" class="text-toned">
|
|
41
|
+
{{
|
|
42
|
+
t("modules.store.frontend_requirement.run", {
|
|
43
|
+
target: requirement.target,
|
|
44
|
+
})
|
|
45
|
+
}}
|
|
46
|
+
</p>
|
|
47
|
+
<div
|
|
48
|
+
v-if="requirement.command"
|
|
49
|
+
class="text-highlighted flex min-w-0 items-center gap-1 rounded-[6px] border border-(--ui-border) bg-(--dms-bg-muted) ps-2 font-mono text-[11px]"
|
|
50
|
+
>
|
|
51
|
+
<code class="min-w-0 flex-1 truncate" :title="requirement.command">
|
|
52
|
+
{{ requirement.command }}
|
|
53
|
+
</code>
|
|
54
|
+
<DmsCopyButton :value="requirement.command" />
|
|
55
|
+
</div>
|
|
56
|
+
<template v-if="requirement.breaks.length > 0">
|
|
57
|
+
<p>
|
|
58
|
+
{{
|
|
59
|
+
t("modules.store.frontend_requirement.breaks", {
|
|
60
|
+
target: requirement.target,
|
|
61
|
+
})
|
|
62
|
+
}}
|
|
63
|
+
</p>
|
|
64
|
+
<ul class="text-toned flex flex-col gap-0.5">
|
|
65
|
+
<li
|
|
66
|
+
v-for="layer in requirement.breaks"
|
|
67
|
+
:key="layer.name"
|
|
68
|
+
class="flex min-w-0 items-baseline gap-1.5"
|
|
69
|
+
>
|
|
70
|
+
<span class="truncate font-mono">{{ layer.name }}</span>
|
|
71
|
+
<span class="text-dimmed shrink-0">
|
|
72
|
+
{{
|
|
73
|
+
t("modules.store.frontend_requirement.supports", {
|
|
74
|
+
range: layer.range,
|
|
75
|
+
})
|
|
76
|
+
}}
|
|
77
|
+
</span>
|
|
78
|
+
</li>
|
|
79
|
+
</ul>
|
|
80
|
+
</template>
|
|
81
|
+
</template>
|
|
82
|
+
<p v-else class="text-toned">
|
|
83
|
+
{{ t("modules.store.frontend_requirement.no_target") }}
|
|
84
|
+
</p>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<p
|
|
88
|
+
v-if="missingInterfaces"
|
|
89
|
+
class="text-toned truncate text-xs"
|
|
90
|
+
:title="missingInterfaces"
|
|
91
|
+
>
|
|
92
|
+
{{ t("modules.store.requires", { interfaces: missingInterfaces }) }}
|
|
93
|
+
</p>
|
|
94
|
+
|
|
95
|
+
<p v-if="dependents" class="text-xs text-(--ui-warning)">
|
|
96
|
+
{{ t("modules.store.used_by", { modules: dependents }) }}
|
|
97
|
+
</p>
|
|
98
|
+
</template>
|