@prenta/admin 2.6.0 → 2.7.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 +104 -0
- package/design-system/tokens.css +179 -85
- package/design-system/tokens.json +276 -85
- package/design-system/tokens.scss +148 -44
- package/design-system/tokens.tailwind.cjs +50 -1
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +42 -20
- package/dist/AdminRoot.js.map +1 -1
- package/dist/LoginRoot.d.ts.map +1 -1
- package/dist/LoginRoot.js +2 -1
- package/dist/LoginRoot.js.map +1 -1
- package/dist/__tests__/components/author-avatar.test.js +3 -17
- package/dist/__tests__/components/author-avatar.test.js.map +1 -1
- package/dist/__tests__/components/notification-bell.test.js +86 -15
- package/dist/__tests__/components/notification-bell.test.js.map +1 -1
- package/dist/__tests__/components/responsive-tiers.render.test.d.ts +2 -0
- package/dist/__tests__/components/responsive-tiers.render.test.d.ts.map +1 -0
- package/dist/__tests__/components/responsive-tiers.render.test.js +313 -0
- package/dist/__tests__/components/responsive-tiers.render.test.js.map +1 -0
- package/dist/__tests__/components/serp-preview.render.test.js +6 -3
- package/dist/__tests__/components/serp-preview.render.test.js.map +1 -1
- package/dist/__tests__/components/shell-primitives.render.test.d.ts +2 -0
- package/dist/__tests__/components/shell-primitives.render.test.d.ts.map +1 -0
- package/dist/__tests__/components/shell-primitives.render.test.js +716 -0
- package/dist/__tests__/components/shell-primitives.render.test.js.map +1 -0
- package/dist/__tests__/components/theme-provider-accent.test.js +49 -7
- package/dist/__tests__/components/theme-provider-accent.test.js.map +1 -1
- package/dist/__tests__/components/toggle.test.js +10 -3
- package/dist/__tests__/components/toggle.test.js.map +1 -1
- package/dist/__tests__/components/ui-primitives.test.js +3 -7
- package/dist/__tests__/components/ui-primitives.test.js.map +1 -1
- package/dist/__tests__/layout/build-nav-items.test.js +1 -1
- package/dist/__tests__/layout/build-nav-items.test.js.map +1 -1
- package/dist/__tests__/layout/shell-nav.render.test.d.ts +2 -0
- package/dist/__tests__/layout/shell-nav.render.test.d.ts.map +1 -0
- package/dist/__tests__/layout/shell-nav.render.test.js +736 -0
- package/dist/__tests__/layout/shell-nav.render.test.js.map +1 -0
- package/dist/__tests__/layout/sidebar-forms-submenu.render.test.js +8 -4
- package/dist/__tests__/layout/sidebar-forms-submenu.render.test.js.map +1 -1
- package/dist/__tests__/layout/sidebar-groups.render.test.d.ts +2 -0
- package/dist/__tests__/layout/sidebar-groups.render.test.d.ts.map +1 -0
- package/dist/__tests__/layout/sidebar-groups.render.test.js +56 -0
- package/dist/__tests__/layout/sidebar-groups.render.test.js.map +1 -0
- package/dist/__tests__/layout/sidebar-menus.render.test.d.ts +2 -0
- package/dist/__tests__/layout/sidebar-menus.render.test.d.ts.map +1 -0
- package/dist/__tests__/layout/sidebar-menus.render.test.js +82 -0
- package/dist/__tests__/layout/sidebar-menus.render.test.js.map +1 -0
- package/dist/__tests__/layout/sidebar-plugin-nav.test.js +1 -1
- package/dist/__tests__/layout/sidebar-plugin-nav.test.js.map +1 -1
- package/dist/__tests__/layout/sidebar-posts.test.js +48 -38
- package/dist/__tests__/layout/sidebar-posts.test.js.map +1 -1
- package/dist/__tests__/layout/sidebar-submenu.render.test.js +26 -10
- package/dist/__tests__/layout/sidebar-submenu.render.test.js.map +1 -1
- package/dist/__tests__/layout/topbar.render.test.d.ts +2 -0
- package/dist/__tests__/layout/topbar.render.test.d.ts.map +1 -0
- package/dist/__tests__/layout/topbar.render.test.js +406 -0
- package/dist/__tests__/layout/topbar.render.test.js.map +1 -0
- package/dist/__tests__/lib/api.test.js +2 -0
- package/dist/__tests__/lib/api.test.js.map +1 -1
- package/dist/__tests__/lib/job-drawer.test.d.ts +2 -0
- package/dist/__tests__/lib/job-drawer.test.d.ts.map +1 -0
- package/dist/__tests__/lib/job-drawer.test.js +393 -0
- package/dist/__tests__/lib/job-drawer.test.js.map +1 -0
- package/dist/__tests__/lib/job-view.test.d.ts +2 -0
- package/dist/__tests__/lib/job-view.test.d.ts.map +1 -0
- package/dist/__tests__/lib/job-view.test.js +387 -0
- package/dist/__tests__/lib/job-view.test.js.map +1 -0
- package/dist/__tests__/lib/jobs-service.test.d.ts +2 -0
- package/dist/__tests__/lib/jobs-service.test.d.ts.map +1 -0
- package/dist/__tests__/lib/jobs-service.test.js +88 -0
- package/dist/__tests__/lib/jobs-service.test.js.map +1 -0
- package/dist/__tests__/router/admin-route-order.test.d.ts +2 -0
- package/dist/__tests__/router/admin-route-order.test.d.ts.map +1 -0
- package/dist/__tests__/router/admin-route-order.test.js +36 -0
- package/dist/__tests__/router/admin-route-order.test.js.map +1 -0
- package/dist/__tests__/styles/ai-gradient-contrast.test.d.ts +2 -0
- package/dist/__tests__/styles/ai-gradient-contrast.test.d.ts.map +1 -0
- package/dist/__tests__/styles/ai-gradient-contrast.test.js +110 -0
- package/dist/__tests__/styles/ai-gradient-contrast.test.js.map +1 -0
- package/dist/__tests__/styles/breakpoint-order.test.d.ts +2 -0
- package/dist/__tests__/styles/breakpoint-order.test.d.ts.map +1 -0
- package/dist/__tests__/styles/breakpoint-order.test.js +52 -0
- package/dist/__tests__/styles/breakpoint-order.test.js.map +1 -0
- package/dist/__tests__/styles/responsive-layer.test.js +303 -12
- package/dist/__tests__/styles/responsive-layer.test.js.map +1 -1
- package/dist/__tests__/styles/tailwind-preset.test.d.ts +2 -0
- package/dist/__tests__/styles/tailwind-preset.test.d.ts.map +1 -0
- package/dist/__tests__/styles/tailwind-preset.test.js +147 -0
- package/dist/__tests__/styles/tailwind-preset.test.js.map +1 -0
- package/dist/__tests__/styles/theme-token-scope.test.js +9 -3
- package/dist/__tests__/styles/theme-token-scope.test.js.map +1 -1
- package/dist/__tests__/styles/tiers.test.d.ts +2 -0
- package/dist/__tests__/styles/tiers.test.d.ts.map +1 -0
- package/dist/__tests__/styles/tiers.test.js +121 -0
- package/dist/__tests__/styles/tiers.test.js.map +1 -0
- package/dist/__tests__/styles/tokens-drift.test.js +57 -6
- package/dist/__tests__/styles/tokens-drift.test.js.map +1 -1
- package/dist/__tests__/views/admin-lazy-route.render.test.js +27 -1
- package/dist/__tests__/views/admin-lazy-route.render.test.js.map +1 -1
- package/dist/__tests__/views/ai-settings.render.test.js +4 -4
- package/dist/__tests__/views/appearance-menus-route.render.test.d.ts +2 -0
- package/dist/__tests__/views/appearance-menus-route.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/appearance-menus-route.render.test.js +50 -0
- package/dist/__tests__/views/appearance-menus-route.render.test.js.map +1 -0
- package/dist/__tests__/views/appearance-settings.render.test.js +8 -6
- package/dist/__tests__/views/appearance-settings.render.test.js.map +1 -1
- package/dist/__tests__/views/appearance-theme-provider.render.test.d.ts +2 -0
- package/dist/__tests__/views/appearance-theme-provider.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/appearance-theme-provider.render.test.js +286 -0
- package/dist/__tests__/views/appearance-theme-provider.render.test.js.map +1 -0
- package/dist/__tests__/views/dashboard.test.js +37 -0
- package/dist/__tests__/views/dashboard.test.js.map +1 -1
- package/dist/__tests__/views/document-edit-navigation.render.test.d.ts +2 -0
- package/dist/__tests__/views/document-edit-navigation.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/document-edit-navigation.render.test.js +101 -0
- package/dist/__tests__/views/document-edit-navigation.render.test.js.map +1 -0
- package/dist/__tests__/views/document-edit-routes.render.test.d.ts +2 -0
- package/dist/__tests__/views/document-edit-routes.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/document-edit-routes.render.test.js +113 -0
- package/dist/__tests__/views/document-edit-routes.render.test.js.map +1 -0
- package/dist/__tests__/views/email-settings.render.test.js +2 -2
- package/dist/__tests__/views/form-entries.render.test.js +15 -0
- package/dist/__tests__/views/form-entries.render.test.js.map +1 -1
- package/dist/__tests__/views/form-submissions.render.test.js +18 -0
- package/dist/__tests__/views/form-submissions.render.test.js.map +1 -1
- package/dist/__tests__/views/forms-list.render.test.js +12 -0
- package/dist/__tests__/views/forms-list.render.test.js.map +1 -1
- package/dist/__tests__/views/general-settings.render.test.js +26 -10
- package/dist/__tests__/views/general-settings.render.test.js.map +1 -1
- package/dist/__tests__/views/jobs-drawer.render.test.d.ts +2 -0
- package/dist/__tests__/views/jobs-drawer.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/jobs-drawer.render.test.js +908 -0
- package/dist/__tests__/views/jobs-drawer.render.test.js.map +1 -0
- package/dist/__tests__/views/jobs-list.render.test.d.ts +2 -0
- package/dist/__tests__/views/jobs-list.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/jobs-list.render.test.js +695 -0
- package/dist/__tests__/views/jobs-list.render.test.js.map +1 -0
- package/dist/__tests__/views/kpi-grid.test.d.ts +2 -0
- package/dist/__tests__/views/kpi-grid.test.d.ts.map +1 -0
- package/dist/__tests__/views/kpi-grid.test.js +26 -0
- package/dist/__tests__/views/kpi-grid.test.js.map +1 -0
- package/dist/__tests__/views/mcp-connect.render.test.js +1 -0
- package/dist/__tests__/views/mcp-connect.render.test.js.map +1 -1
- package/dist/__tests__/views/post-section-editor.test.js +3 -1
- package/dist/__tests__/views/post-section-editor.test.js.map +1 -1
- package/dist/__tests__/views/script-tags.render.test.js +25 -0
- package/dist/__tests__/views/script-tags.render.test.js.map +1 -1
- package/dist/__tests__/views/security-settings.render.test.js +9 -8
- package/dist/__tests__/views/security-settings.render.test.js.map +1 -1
- package/dist/__tests__/views/seo-settings.render.test.js +7 -7
- package/dist/__tests__/views/seo-settings.render.test.js.map +1 -1
- package/dist/__tests__/views/settings-save-bar.render.test.d.ts +2 -0
- package/dist/__tests__/views/settings-save-bar.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/settings-save-bar.render.test.js +68 -0
- package/dist/__tests__/views/settings-save-bar.render.test.js.map +1 -0
- package/dist/__tests__/views/settings-save-footer.render.test.js +23 -15
- package/dist/__tests__/views/settings-save-footer.render.test.js.map +1 -1
- package/dist/__tests__/views/settings-tabs.render.test.d.ts +2 -0
- package/dist/__tests__/views/settings-tabs.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/settings-tabs.render.test.js +319 -0
- package/dist/__tests__/views/settings-tabs.render.test.js.map +1 -0
- package/dist/__tests__/views/updates-tab.render.test.js +4 -3
- package/dist/__tests__/views/updates-tab.render.test.js.map +1 -1
- package/dist/components/Breadcrumbs.d.ts +8 -1
- package/dist/components/Breadcrumbs.d.ts.map +1 -1
- package/dist/components/Breadcrumbs.js +6 -0
- package/dist/components/Breadcrumbs.js.map +1 -1
- package/dist/components/CommandPalette.d.ts.map +1 -1
- package/dist/components/CommandPalette.js +40 -4
- package/dist/components/CommandPalette.js.map +1 -1
- package/dist/components/LocaleSwitcher.d.ts.map +1 -1
- package/dist/components/LocaleSwitcher.js +1 -1
- package/dist/components/LocaleSwitcher.js.map +1 -1
- package/dist/components/NotificationBell.d.ts.map +1 -1
- package/dist/components/NotificationBell.js +44 -3
- package/dist/components/NotificationBell.js.map +1 -1
- package/dist/components/OfflineStatus.js +1 -1
- package/dist/components/OfflineStatus.js.map +1 -1
- package/dist/components/PresenceIndicator.d.ts.map +1 -1
- package/dist/components/PresenceIndicator.js +2 -1
- package/dist/components/PresenceIndicator.js.map +1 -1
- package/dist/components/ReflowMeter.js +2 -2
- package/dist/components/ReflowMeter.js.map +1 -1
- package/dist/components/SEOPanel.js +2 -2
- package/dist/components/SEOPanel.js.map +1 -1
- package/dist/components/ThemeProvider.d.ts +24 -4
- package/dist/components/ThemeProvider.d.ts.map +1 -1
- package/dist/components/ThemeProvider.js +80 -22
- package/dist/components/ThemeProvider.js.map +1 -1
- package/dist/components/TipTapEditor.d.ts.map +1 -1
- package/dist/components/TipTapEditor.js +3 -4
- package/dist/components/TipTapEditor.js.map +1 -1
- package/dist/components/forms/EmbedPanel.js +1 -1
- package/dist/components/forms/EmbedPanel.js.map +1 -1
- package/dist/components/forms/FormEntryDetailPane.js +6 -1
- package/dist/components/forms/FormEntryDetailPane.js.map +1 -1
- package/dist/components/forms/ShortcodeGlossary.d.ts.map +1 -1
- package/dist/components/forms/ShortcodeGlossary.js +6 -1
- package/dist/components/forms/ShortcodeGlossary.js.map +1 -1
- package/dist/components/forms/primitives.d.ts +15 -5
- package/dist/components/forms/primitives.d.ts.map +1 -1
- package/dist/components/forms/primitives.js +11 -11
- package/dist/components/forms/primitives.js.map +1 -1
- package/dist/components/pages/tag-badges.d.ts +2 -1
- package/dist/components/pages/tag-badges.d.ts.map +1 -1
- package/dist/components/pages/tag-badges.js +4 -3
- package/dist/components/pages/tag-badges.js.map +1 -1
- package/dist/components/seo/PageAuditPanel.js +2 -2
- package/dist/components/seo/PageAuditPanel.js.map +1 -1
- package/dist/components/seo/SerpPreview.d.ts +4 -4
- package/dist/components/seo/SerpPreview.js +1 -1
- package/dist/components/seo/SerpPreview.js.map +1 -1
- package/dist/components/seo/primitives.js +2 -2
- package/dist/components/seo/primitives.js.map +1 -1
- package/dist/components/ui/AuthorAvatar.d.ts +4 -4
- package/dist/components/ui/AuthorAvatar.d.ts.map +1 -1
- package/dist/components/ui/AuthorAvatar.js +11 -10
- package/dist/components/ui/AuthorAvatar.js.map +1 -1
- package/dist/components/ui/Badge.d.ts +1 -1
- package/dist/components/ui/Badge.js +1 -1
- package/dist/components/ui/Badge.js.map +1 -1
- package/dist/components/ui/Breadcrumb.d.ts +27 -0
- package/dist/components/ui/Breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/Breadcrumb.js +41 -0
- package/dist/components/ui/Breadcrumb.js.map +1 -0
- package/dist/components/ui/Button.d.ts +2 -2
- package/dist/components/ui/Button.d.ts.map +1 -1
- package/dist/components/ui/Button.js +31 -16
- package/dist/components/ui/Button.js.map +1 -1
- package/dist/components/ui/Card.d.ts +8 -4
- package/dist/components/ui/Card.d.ts.map +1 -1
- package/dist/components/ui/Card.js +21 -13
- package/dist/components/ui/Card.js.map +1 -1
- package/dist/components/ui/CardListControls.d.ts +34 -0
- package/dist/components/ui/CardListControls.d.ts.map +1 -0
- package/dist/components/ui/CardListControls.js +25 -0
- package/dist/components/ui/CardListControls.js.map +1 -0
- package/dist/components/ui/CountChip.d.ts +20 -0
- package/dist/components/ui/CountChip.d.ts.map +1 -0
- package/dist/components/ui/CountChip.js +48 -0
- package/dist/components/ui/CountChip.js.map +1 -0
- package/dist/components/ui/FilterPill.d.ts +2 -1
- package/dist/components/ui/FilterPill.d.ts.map +1 -1
- package/dist/components/ui/FilterPill.js +3 -2
- package/dist/components/ui/FilterPill.js.map +1 -1
- package/dist/components/ui/Input.d.ts +1 -1
- package/dist/components/ui/InspectorPane.d.ts +1 -1
- package/dist/components/ui/InspectorPane.d.ts.map +1 -1
- package/dist/components/ui/InspectorPane.js +15 -4
- package/dist/components/ui/InspectorPane.js.map +1 -1
- package/dist/components/ui/Modal.d.ts.map +1 -1
- package/dist/components/ui/Modal.js +10 -2
- package/dist/components/ui/Modal.js.map +1 -1
- package/dist/components/ui/PageHeader.d.ts +28 -0
- package/dist/components/ui/PageHeader.d.ts.map +1 -0
- package/dist/components/ui/PageHeader.js +18 -0
- package/dist/components/ui/PageHeader.js.map +1 -0
- package/dist/components/ui/RowActions.d.ts +5 -0
- package/dist/components/ui/RowActions.d.ts.map +1 -1
- package/dist/components/ui/RowActions.js +7 -2
- package/dist/components/ui/RowActions.js.map +1 -1
- package/dist/components/ui/Segmented.d.ts +21 -0
- package/dist/components/ui/Segmented.d.ts.map +1 -0
- package/dist/components/ui/Segmented.js +41 -0
- package/dist/components/ui/Segmented.js.map +1 -0
- package/dist/components/ui/Toaster.d.ts +12 -0
- package/dist/components/ui/Toaster.d.ts.map +1 -0
- package/dist/components/ui/Toaster.js +103 -0
- package/dist/components/ui/Toaster.js.map +1 -0
- package/dist/components/ui/Toggle.d.ts +4 -3
- package/dist/components/ui/Toggle.d.ts.map +1 -1
- package/dist/components/ui/Toggle.js +16 -12
- package/dist/components/ui/Toggle.js.map +1 -1
- package/dist/components/ui/UnderlineTabs.d.ts +56 -0
- package/dist/components/ui/UnderlineTabs.d.ts.map +1 -0
- package/dist/components/ui/UnderlineTabs.js +205 -0
- package/dist/components/ui/UnderlineTabs.js.map +1 -0
- package/dist/components/ui/UnsavedBar.d.ts +25 -0
- package/dist/components/ui/UnsavedBar.d.ts.map +1 -0
- package/dist/components/ui/UnsavedBar.js +22 -0
- package/dist/components/ui/UnsavedBar.js.map +1 -0
- package/dist/components/ui/admin-links.d.ts +11 -0
- package/dist/components/ui/admin-links.d.ts.map +1 -0
- package/dist/components/ui/admin-links.js +10 -0
- package/dist/components/ui/admin-links.js.map +1 -0
- package/dist/components/ui/card-table.d.ts +43 -0
- package/dist/components/ui/card-table.d.ts.map +1 -0
- package/dist/components/ui/card-table.js +31 -0
- package/dist/components/ui/card-table.js.map +1 -0
- package/dist/components/virtual-window.d.ts +7 -0
- package/dist/components/virtual-window.d.ts.map +1 -1
- package/dist/components/virtual-window.js +5 -2
- package/dist/components/virtual-window.js.map +1 -1
- package/dist/fields/RelationshipField.js +1 -1
- package/dist/fields/RelationshipField.js.map +1 -1
- package/dist/files/dm-mono-latin-400-normal.woff +0 -0
- package/dist/files/dm-mono-latin-400-normal.woff2 +0 -0
- package/dist/files/dm-mono-latin-500-normal.woff +0 -0
- package/dist/files/dm-mono-latin-500-normal.woff2 +0 -0
- package/dist/files/dm-mono-latin-ext-400-normal.woff +0 -0
- package/dist/files/dm-mono-latin-ext-400-normal.woff2 +0 -0
- package/dist/files/dm-mono-latin-ext-500-normal.woff +0 -0
- package/dist/files/dm-mono-latin-ext-500-normal.woff2 +0 -0
- package/dist/files/dm-sans-latin-400-normal.woff +0 -0
- package/dist/files/dm-sans-latin-400-normal.woff2 +0 -0
- package/dist/files/dm-sans-latin-500-normal.woff +0 -0
- package/dist/files/dm-sans-latin-500-normal.woff2 +0 -0
- package/dist/files/dm-sans-latin-600-normal.woff +0 -0
- package/dist/files/dm-sans-latin-600-normal.woff2 +0 -0
- package/dist/files/dm-sans-latin-700-normal.woff +0 -0
- package/dist/files/dm-sans-latin-700-normal.woff2 +0 -0
- package/dist/files/dm-sans-latin-ext-400-normal.woff +0 -0
- package/dist/files/dm-sans-latin-ext-400-normal.woff2 +0 -0
- package/dist/files/dm-sans-latin-ext-500-normal.woff +0 -0
- package/dist/files/dm-sans-latin-ext-500-normal.woff2 +0 -0
- package/dist/files/dm-sans-latin-ext-600-normal.woff +0 -0
- package/dist/files/dm-sans-latin-ext-600-normal.woff2 +0 -0
- package/dist/files/dm-sans-latin-ext-700-normal.woff +0 -0
- package/dist/files/dm-sans-latin-ext-700-normal.woff2 +0 -0
- package/dist/hooks/useAppearanceBootstrap.d.ts.map +1 -1
- package/dist/hooks/useAppearanceBootstrap.js +9 -3
- package/dist/hooks/useAppearanceBootstrap.js.map +1 -1
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/layout/Header.d.ts +14 -5
- package/dist/layout/Header.d.ts.map +1 -1
- package/dist/layout/Header.js +78 -13
- package/dist/layout/Header.js.map +1 -1
- package/dist/layout/Layout.d.ts +5 -3
- package/dist/layout/Layout.d.ts.map +1 -1
- package/dist/layout/Layout.js +45 -54
- package/dist/layout/Layout.js.map +1 -1
- package/dist/layout/MobileTabBar.d.ts +20 -0
- package/dist/layout/MobileTabBar.d.ts.map +1 -0
- package/dist/layout/MobileTabBar.js +29 -0
- package/dist/layout/MobileTabBar.js.map +1 -0
- package/dist/layout/Sidebar.d.ts +8 -26
- package/dist/layout/Sidebar.d.ts.map +1 -1
- package/dist/layout/Sidebar.js +309 -345
- package/dist/layout/Sidebar.js.map +1 -1
- package/dist/layout/nav-config.d.ts +101 -0
- package/dist/layout/nav-config.d.ts.map +1 -0
- package/dist/layout/nav-config.js +297 -0
- package/dist/layout/nav-config.js.map +1 -0
- package/dist/layout/primitives/AdminShell.d.ts +10 -2
- package/dist/layout/primitives/AdminShell.d.ts.map +1 -1
- package/dist/layout/primitives/AdminShell.js +114 -6
- package/dist/layout/primitives/AdminShell.js.map +1 -1
- package/dist/layout/topbar-classes.d.ts +8 -0
- package/dist/layout/topbar-classes.d.ts.map +1 -0
- package/dist/layout/topbar-classes.js +8 -0
- package/dist/layout/topbar-classes.js.map +1 -0
- package/dist/layout/use-nav-items.d.ts +10 -0
- package/dist/layout/use-nav-items.d.ts.map +1 -0
- package/dist/layout/use-nav-items.js +39 -0
- package/dist/layout/use-nav-items.js.map +1 -0
- package/dist/lib/api.d.ts +6 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +1 -1
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/appearance-api.d.ts +3 -1
- package/dist/lib/appearance-api.d.ts.map +1 -1
- package/dist/lib/appearance-api.js +1 -0
- package/dist/lib/appearance-api.js.map +1 -1
- package/dist/lib/job-drawer.d.ts +128 -0
- package/dist/lib/job-drawer.d.ts.map +1 -0
- package/dist/lib/job-drawer.js +351 -0
- package/dist/lib/job-drawer.js.map +1 -0
- package/dist/lib/job-view.d.ts +187 -0
- package/dist/lib/job-view.d.ts.map +1 -0
- package/dist/lib/job-view.js +363 -0
- package/dist/lib/job-view.js.map +1 -0
- package/dist/lib/jobs-service.d.ts +134 -0
- package/dist/lib/jobs-service.d.ts.map +1 -0
- package/dist/lib/jobs-service.js +179 -0
- package/dist/lib/jobs-service.js.map +1 -0
- package/dist/lib/sheet-focus.d.ts +24 -0
- package/dist/lib/sheet-focus.d.ts.map +1 -0
- package/dist/lib/sheet-focus.js +61 -0
- package/dist/lib/sheet-focus.js.map +1 -0
- package/dist/lib/tiers.d.ts +30 -0
- package/dist/lib/tiers.d.ts.map +1 -0
- package/dist/lib/tiers.js +43 -0
- package/dist/lib/tiers.js.map +1 -0
- package/dist/prenta-admin.css +1 -1
- package/dist/router/admin-routes.d.ts.map +1 -1
- package/dist/router/admin-routes.js +8 -0
- package/dist/router/admin-routes.js.map +1 -1
- package/dist/router/index.d.ts +5 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +7 -0
- package/dist/router/index.js.map +1 -1
- package/dist/views/ApiKeys.js +2 -2
- package/dist/views/ApiKeys.js.map +1 -1
- package/dist/views/AppearanceChrome.d.ts +6 -0
- package/dist/views/AppearanceChrome.d.ts.map +1 -0
- package/dist/views/AppearanceChrome.js +25 -0
- package/dist/views/AppearanceChrome.js.map +1 -0
- package/dist/views/CollectionList.d.ts.map +1 -1
- package/dist/views/CollectionList.js +73 -53
- package/dist/views/CollectionList.js.map +1 -1
- package/dist/views/Dashboard.d.ts.map +1 -1
- package/dist/views/Dashboard.js +14 -8
- package/dist/views/Dashboard.js.map +1 -1
- package/dist/views/DocumentEdit.d.ts +6 -1
- package/dist/views/DocumentEdit.d.ts.map +1 -1
- package/dist/views/DocumentEdit.js +44 -8
- package/dist/views/DocumentEdit.js.map +1 -1
- package/dist/views/FormDeliveries.d.ts.map +1 -1
- package/dist/views/FormDeliveries.js +7 -1
- package/dist/views/FormDeliveries.js.map +1 -1
- package/dist/views/FormEntries.d.ts.map +1 -1
- package/dist/views/FormEntries.js +11 -2
- package/dist/views/FormEntries.js.map +1 -1
- package/dist/views/FormSubmissions.d.ts +1 -1
- package/dist/views/FormSubmissions.d.ts.map +1 -1
- package/dist/views/FormSubmissions.js +15 -4
- package/dist/views/FormSubmissions.js.map +1 -1
- package/dist/views/Forms.d.ts.map +1 -1
- package/dist/views/Forms.js +6 -4
- package/dist/views/Forms.js.map +1 -1
- package/dist/views/FormsSettings.d.ts +2 -0
- package/dist/views/FormsSettings.d.ts.map +1 -0
- package/dist/views/FormsSettings.js +37 -0
- package/dist/views/FormsSettings.js.map +1 -0
- package/dist/views/Jobs/BusyButton.d.ts +15 -0
- package/dist/views/Jobs/BusyButton.d.ts.map +1 -0
- package/dist/views/Jobs/BusyButton.js +26 -0
- package/dist/views/Jobs/BusyButton.js.map +1 -0
- package/dist/views/Jobs/CancelJobDialog.d.ts +21 -0
- package/dist/views/Jobs/CancelJobDialog.d.ts.map +1 -0
- package/dist/views/Jobs/CancelJobDialog.js +66 -0
- package/dist/views/Jobs/CancelJobDialog.js.map +1 -0
- package/dist/views/Jobs/DrawerActivity.d.ts +16 -0
- package/dist/views/Jobs/DrawerActivity.d.ts.map +1 -0
- package/dist/views/Jobs/DrawerActivity.js +59 -0
- package/dist/views/Jobs/DrawerActivity.js.map +1 -0
- package/dist/views/Jobs/DrawerOverview.d.ts +28 -0
- package/dist/views/Jobs/DrawerOverview.d.ts.map +1 -0
- package/dist/views/Jobs/DrawerOverview.js +32 -0
- package/dist/views/Jobs/DrawerOverview.js.map +1 -0
- package/dist/views/Jobs/DrawerResults.d.ts +25 -0
- package/dist/views/Jobs/DrawerResults.d.ts.map +1 -0
- package/dist/views/Jobs/DrawerResults.js +50 -0
- package/dist/views/Jobs/DrawerResults.js.map +1 -0
- package/dist/views/Jobs/DrawerReview.d.ts +44 -0
- package/dist/views/Jobs/DrawerReview.d.ts.map +1 -0
- package/dist/views/Jobs/DrawerReview.js +110 -0
- package/dist/views/Jobs/DrawerReview.js.map +1 -0
- package/dist/views/Jobs/JobDrawer.d.ts +31 -0
- package/dist/views/Jobs/JobDrawer.d.ts.map +1 -0
- package/dist/views/Jobs/JobDrawer.js +353 -0
- package/dist/views/Jobs/JobDrawer.js.map +1 -0
- package/dist/views/Jobs/JobsTable.d.ts +19 -0
- package/dist/views/Jobs/JobsTable.d.ts.map +1 -0
- package/dist/views/Jobs/JobsTable.js +80 -0
- package/dist/views/Jobs/JobsTable.js.map +1 -0
- package/dist/views/Jobs/WorkerStrip.d.ts +22 -0
- package/dist/views/Jobs/WorkerStrip.d.ts.map +1 -0
- package/dist/views/Jobs/WorkerStrip.js +63 -0
- package/dist/views/Jobs/WorkerStrip.js.map +1 -0
- package/dist/views/Jobs/atoms.d.ts +19 -0
- package/dist/views/Jobs/atoms.d.ts.map +1 -0
- package/dist/views/Jobs/atoms.js +52 -0
- package/dist/views/Jobs/atoms.js.map +1 -0
- package/dist/views/Jobs/focus.d.ts +23 -0
- package/dist/views/Jobs/focus.d.ts.map +1 -0
- package/dist/views/Jobs/focus.js +54 -0
- package/dist/views/Jobs/focus.js.map +1 -0
- package/dist/views/Jobs/icons.d.ts +22 -0
- package/dist/views/Jobs/icons.d.ts.map +1 -0
- package/dist/views/Jobs/icons.js +23 -0
- package/dist/views/Jobs/icons.js.map +1 -0
- package/dist/views/Jobs/placeholders.d.ts +6 -0
- package/dist/views/Jobs/placeholders.d.ts.map +1 -0
- package/dist/views/Jobs/placeholders.js +20 -0
- package/dist/views/Jobs/placeholders.js.map +1 -0
- package/dist/views/Jobs/useJobDetail.d.ts +21 -0
- package/dist/views/Jobs/useJobDetail.d.ts.map +1 -0
- package/dist/views/Jobs/useJobDetail.js +39 -0
- package/dist/views/Jobs/useJobDetail.js.map +1 -0
- package/dist/views/Jobs/useJobsFeed.d.ts +35 -0
- package/dist/views/Jobs/useJobsFeed.d.ts.map +1 -0
- package/dist/views/Jobs/useJobsFeed.js +231 -0
- package/dist/views/Jobs/useJobsFeed.js.map +1 -0
- package/dist/views/Jobs/useReviewItems.d.ts +39 -0
- package/dist/views/Jobs/useReviewItems.d.ts.map +1 -0
- package/dist/views/Jobs/useReviewItems.js +140 -0
- package/dist/views/Jobs/useReviewItems.js.map +1 -0
- package/dist/views/Jobs.d.ts +10 -1
- package/dist/views/Jobs.d.ts.map +1 -1
- package/dist/views/Jobs.js +126 -35
- package/dist/views/Jobs.js.map +1 -1
- package/dist/views/MediaBrowser.d.ts.map +1 -1
- package/dist/views/MediaBrowser.js +37 -9
- package/dist/views/MediaBrowser.js.map +1 -1
- package/dist/views/Pages/PagesListView.d.ts +1 -1
- package/dist/views/Pages/PagesListView.d.ts.map +1 -1
- package/dist/views/Pages/PagesListView.js +34 -5
- package/dist/views/Pages/PagesListView.js.map +1 -1
- package/dist/views/Posts/NewPostTypeInstructions.d.ts.map +1 -1
- package/dist/views/Posts/NewPostTypeInstructions.js +12 -2
- package/dist/views/Posts/NewPostTypeInstructions.js.map +1 -1
- package/dist/views/Posts/PostTypesView.d.ts.map +1 -1
- package/dist/views/Posts/PostTypesView.js +10 -1
- package/dist/views/Posts/PostTypesView.js.map +1 -1
- package/dist/views/Posts/PostsListView.d.ts +1 -2
- package/dist/views/Posts/PostsListView.d.ts.map +1 -1
- package/dist/views/Posts/PostsListView.js +31 -3
- package/dist/views/Posts/PostsListView.js.map +1 -1
- package/dist/views/SEO.d.ts.map +1 -1
- package/dist/views/SEO.js +3 -3
- package/dist/views/SEO.js.map +1 -1
- package/dist/views/ScriptTags.d.ts.map +1 -1
- package/dist/views/ScriptTags.js +20 -15
- package/dist/views/ScriptTags.js.map +1 -1
- package/dist/views/Settings.d.ts.map +1 -1
- package/dist/views/Settings.js +115 -51
- package/dist/views/Settings.js.map +1 -1
- package/dist/views/SpamFolder.d.ts +2 -0
- package/dist/views/SpamFolder.d.ts.map +1 -0
- package/dist/views/SpamFolder.js +14 -0
- package/dist/views/SpamFolder.js.map +1 -0
- package/dist/views/Trash.d.ts +6 -1
- package/dist/views/Trash.d.ts.map +1 -1
- package/dist/views/Trash.js +7 -2
- package/dist/views/Trash.js.map +1 -1
- package/dist/views/Users.js +2 -2
- package/dist/views/Users.js.map +1 -1
- package/dist/views/WidgetsPlaceholder.d.ts +2 -0
- package/dist/views/WidgetsPlaceholder.d.ts.map +1 -0
- package/dist/views/WidgetsPlaceholder.js +15 -0
- package/dist/views/WidgetsPlaceholder.js.map +1 -0
- package/dist/views/dashboard/kpi-grid.d.ts +18 -0
- package/dist/views/dashboard/kpi-grid.d.ts.map +1 -0
- package/dist/views/dashboard/kpi-grid.js +36 -0
- package/dist/views/dashboard/kpi-grid.js.map +1 -0
- package/dist/views/lazy-views.d.ts +4 -0
- package/dist/views/lazy-views.d.ts.map +1 -1
- package/dist/views/lazy-views.js +4 -0
- package/dist/views/lazy-views.js.map +1 -1
- package/dist/views/page-editor/PageTab.js +1 -1
- package/dist/views/page-editor/PageTab.js.map +1 -1
- package/dist/views/page-editor/ReviewBar.js +1 -1
- package/dist/views/page-editor/ReviewBar.js.map +1 -1
- package/dist/views/page-editor/VersionHistoryPanel.js +1 -1
- package/dist/views/page-editor/VersionHistoryPanel.js.map +1 -1
- package/dist/views/seo/AuditTab.js +1 -1
- package/dist/views/seo/AuditTab.js.map +1 -1
- package/dist/views/seo/OverviewTab.d.ts.map +1 -1
- package/dist/views/seo/OverviewTab.js +2 -2
- package/dist/views/seo/OverviewTab.js.map +1 -1
- package/dist/views/seo/ProposalsTab.js +1 -1
- package/dist/views/seo/ProposalsTab.js.map +1 -1
- package/dist/views/settings/AISettingsTab.d.ts.map +1 -1
- package/dist/views/settings/AISettingsTab.js +4 -2
- package/dist/views/settings/AISettingsTab.js.map +1 -1
- package/dist/views/settings/AccessProtectionCard.js +1 -1
- package/dist/views/settings/AccessProtectionCard.js.map +1 -1
- package/dist/views/settings/AdminThemeCard.d.ts.map +1 -1
- package/dist/views/settings/AdminThemeCard.js +63 -15
- package/dist/views/settings/AdminThemeCard.js.map +1 -1
- package/dist/views/settings/AppearanceTab.d.ts.map +1 -1
- package/dist/views/settings/AppearanceTab.js +4 -2
- package/dist/views/settings/AppearanceTab.js.map +1 -1
- package/dist/views/settings/BrandPreviewCard.js +1 -1
- package/dist/views/settings/BrandPreviewCard.js.map +1 -1
- package/dist/views/settings/BrandVoiceCard.js +1 -1
- package/dist/views/settings/BrandVoiceCard.js.map +1 -1
- package/dist/views/settings/EmailSettingsTab.d.ts.map +1 -1
- package/dist/views/settings/EmailSettingsTab.js +5 -3
- package/dist/views/settings/EmailSettingsTab.js.map +1 -1
- package/dist/views/settings/GeneralSettingsTab.d.ts.map +1 -1
- package/dist/views/settings/GeneralSettingsTab.js +4 -2
- package/dist/views/settings/GeneralSettingsTab.js.map +1 -1
- package/dist/views/settings/McpConnectTab.d.ts.map +1 -1
- package/dist/views/settings/McpConnectTab.js +1 -1
- package/dist/views/settings/McpConnectTab.js.map +1 -1
- package/dist/views/settings/ProviderConnectionCard.js +1 -1
- package/dist/views/settings/ProviderConnectionCard.js.map +1 -1
- package/dist/views/settings/SearchDataCard.js +1 -1
- package/dist/views/settings/SearchDataCard.js.map +1 -1
- package/dist/views/settings/SecurityStatusCard.js +2 -2
- package/dist/views/settings/SecurityStatusCard.js.map +1 -1
- package/dist/views/settings/SecurityTab.d.ts.map +1 -1
- package/dist/views/settings/SecurityTab.js +4 -2
- package/dist/views/settings/SecurityTab.js.map +1 -1
- package/dist/views/settings/SeoAutopilotCard.js +2 -2
- package/dist/views/settings/SeoAutopilotCard.js.map +1 -1
- package/dist/views/settings/SeoSettingsTab.d.ts.map +1 -1
- package/dist/views/settings/SeoSettingsTab.js +5 -3
- package/dist/views/settings/SeoSettingsTab.js.map +1 -1
- package/dist/views/settings/SiteIndexStatusCard.js +1 -1
- package/dist/views/settings/SiteIndexStatusCard.js.map +1 -1
- package/dist/views/settings/SiteThemeCard.js +1 -1
- package/dist/views/settings/UpdatesTab.d.ts.map +1 -1
- package/dist/views/settings/UpdatesTab.js +6 -5
- package/dist/views/settings/UpdatesTab.js.map +1 -1
- package/dist/views/settings/components.d.ts +7 -11
- package/dist/views/settings/components.d.ts.map +1 -1
- package/dist/views/settings/components.js +18 -12
- package/dist/views/settings/components.js.map +1 -1
- package/dist/views/settings/useAppearanceSettings.d.ts +7 -1
- package/dist/views/settings/useAppearanceSettings.d.ts.map +1 -1
- package/dist/views/settings/useAppearanceSettings.js +89 -22
- package/dist/views/settings/useAppearanceSettings.js.map +1 -1
- package/dist/views/users/UserDetailDrawer.js +1 -1
- package/dist/views/users/UserDetailDrawer.js.map +1 -1
- package/package.json +11 -9
- package/src/AdminRoot.tsx +88 -30
- package/src/LoginRoot.tsx +2 -1
- package/src/__tests__/components/author-avatar.test.tsx +3 -20
- package/src/__tests__/components/notification-bell.test.tsx +146 -14
- package/src/__tests__/components/responsive-tiers.render.test.tsx +461 -0
- package/src/__tests__/components/serp-preview.render.test.tsx +6 -3
- package/src/__tests__/components/shell-primitives.render.test.tsx +951 -0
- package/src/__tests__/components/theme-provider-accent.test.tsx +83 -8
- package/src/__tests__/components/toggle.test.tsx +11 -3
- package/src/__tests__/components/ui-primitives.test.tsx +5 -8
- package/src/__tests__/layout/build-nav-items.test.ts +1 -1
- package/src/__tests__/layout/shell-nav.render.test.tsx +983 -0
- package/src/__tests__/layout/sidebar-forms-submenu.render.test.tsx +8 -4
- package/src/__tests__/layout/sidebar-groups.render.test.tsx +116 -0
- package/src/__tests__/layout/sidebar-menus.render.test.tsx +116 -0
- package/src/__tests__/layout/sidebar-plugin-nav.test.ts +1 -1
- package/src/__tests__/layout/sidebar-posts.test.ts +48 -40
- package/src/__tests__/layout/sidebar-submenu.render.test.tsx +35 -10
- package/src/__tests__/layout/topbar.render.test.tsx +464 -0
- package/src/__tests__/lib/api.test.ts +2 -0
- package/src/__tests__/lib/job-drawer.test.ts +493 -0
- package/src/__tests__/lib/job-view.test.ts +437 -0
- package/src/__tests__/lib/jobs-service.test.ts +98 -0
- package/src/__tests__/router/admin-route-order.test.ts +39 -0
- package/src/__tests__/styles/ai-gradient-contrast.test.ts +135 -0
- package/src/__tests__/styles/breakpoint-order.test.ts +68 -0
- package/src/__tests__/styles/responsive-layer.test.ts +367 -12
- package/src/__tests__/styles/tailwind-preset.test.ts +154 -0
- package/src/__tests__/styles/theme-token-scope.test.ts +10 -3
- package/src/__tests__/styles/tiers.test.ts +136 -0
- package/src/__tests__/styles/tokens-drift.test.ts +67 -6
- package/src/__tests__/views/admin-lazy-route.render.test.tsx +41 -1
- package/src/__tests__/views/ai-settings.render.test.tsx +4 -4
- package/src/__tests__/views/appearance-menus-route.render.test.tsx +58 -0
- package/src/__tests__/views/appearance-settings.render.test.tsx +10 -8
- package/src/__tests__/views/appearance-theme-provider.render.test.tsx +347 -0
- package/src/__tests__/views/dashboard.test.tsx +48 -0
- package/src/__tests__/views/document-edit-navigation.render.test.tsx +130 -0
- package/src/__tests__/views/document-edit-routes.render.test.tsx +130 -0
- package/src/__tests__/views/email-settings.render.test.tsx +2 -2
- package/src/__tests__/views/form-entries.render.test.tsx +22 -0
- package/src/__tests__/views/form-submissions.render.test.tsx +22 -0
- package/src/__tests__/views/forms-list.render.test.tsx +13 -0
- package/src/__tests__/views/general-settings.render.test.tsx +38 -11
- package/src/__tests__/views/jobs-drawer.render.test.tsx +1047 -0
- package/src/__tests__/views/jobs-list.render.test.tsx +850 -0
- package/src/__tests__/views/kpi-grid.test.ts +29 -0
- package/src/__tests__/views/mcp-connect.render.test.tsx +1 -0
- package/src/__tests__/views/post-section-editor.test.tsx +5 -1
- package/src/__tests__/views/script-tags.render.test.tsx +29 -0
- package/src/__tests__/views/security-settings.render.test.tsx +9 -10
- package/src/__tests__/views/seo-settings.render.test.tsx +7 -9
- package/src/__tests__/views/settings-save-bar.render.test.tsx +91 -0
- package/src/__tests__/views/settings-save-footer.render.test.tsx +25 -15
- package/src/__tests__/views/settings-tabs.render.test.tsx +371 -0
- package/src/__tests__/views/updates-tab.render.test.tsx +4 -3
- package/src/components/Breadcrumbs.tsx +7 -1
- package/src/components/CommandPalette.tsx +51 -3
- package/src/components/LocaleSwitcher.tsx +5 -6
- package/src/components/NotificationBell.tsx +74 -18
- package/src/components/OfflineStatus.tsx +1 -1
- package/src/components/PresenceIndicator.tsx +2 -1
- package/src/components/ReflowMeter.tsx +3 -3
- package/src/components/SEOPanel.tsx +2 -2
- package/src/components/ThemeProvider.tsx +122 -42
- package/src/components/TipTapEditor.tsx +3 -4
- package/src/components/forms/EmbedPanel.tsx +1 -1
- package/src/components/forms/FormEntryDetailPane.tsx +7 -1
- package/src/components/forms/ShortcodeGlossary.tsx +7 -1
- package/src/components/forms/primitives.tsx +37 -21
- package/src/components/pages/tag-badges.tsx +4 -3
- package/src/components/seo/PageAuditPanel.tsx +2 -2
- package/src/components/seo/SerpPreview.tsx +5 -5
- package/src/components/seo/primitives.tsx +2 -2
- package/src/components/ui/AuthorAvatar.tsx +11 -10
- package/src/components/ui/Badge.tsx +1 -1
- package/src/components/ui/Breadcrumb.tsx +109 -0
- package/src/components/ui/Button.tsx +40 -15
- package/src/components/ui/Card.tsx +35 -32
- package/src/components/ui/CardListControls.tsx +90 -0
- package/src/components/ui/CountChip.tsx +90 -0
- package/src/components/ui/FilterPill.tsx +5 -3
- package/src/components/ui/InspectorPane.tsx +21 -7
- package/src/components/ui/Modal.tsx +20 -6
- package/src/components/ui/PageHeader.tsx +63 -0
- package/src/components/ui/RowActions.tsx +7 -2
- package/src/components/ui/Segmented.tsx +97 -0
- package/src/components/ui/Toaster.tsx +139 -0
- package/src/components/ui/Toggle.tsx +18 -14
- package/src/components/ui/UnderlineTabs.tsx +373 -0
- package/src/components/ui/UnsavedBar.tsx +119 -0
- package/src/components/ui/admin-links.tsx +20 -0
- package/src/components/ui/card-table.ts +34 -0
- package/src/components/virtual-window.tsx +13 -2
- package/src/fields/RelationshipField.tsx +1 -1
- package/src/hooks/useAppearanceBootstrap.ts +9 -3
- package/src/index.ts +19 -0
- package/src/layout/Header.tsx +210 -135
- package/src/layout/Layout.tsx +61 -108
- package/src/layout/MobileTabBar.tsx +92 -0
- package/src/layout/Sidebar.tsx +555 -593
- package/src/layout/nav-config.tsx +425 -0
- package/src/layout/primitives/AdminShell.tsx +154 -6
- package/src/layout/topbar-classes.ts +8 -0
- package/src/layout/use-nav-items.ts +40 -0
- package/src/lib/api.ts +7 -1
- package/src/lib/appearance-api.ts +4 -0
- package/src/lib/job-drawer.ts +424 -0
- package/src/lib/job-view.ts +456 -0
- package/src/lib/jobs-service.ts +290 -0
- package/src/lib/sheet-focus.ts +71 -0
- package/src/lib/tiers.ts +43 -0
- package/src/router/admin-routes.ts +8 -0
- package/src/router/index.ts +9 -1
- package/src/styles/prenta-tokens.css +263 -82
- package/src/styles/responsive.css +460 -22
- package/src/styles/theme.css +177 -28
- package/src/views/ApiKeys.tsx +2 -2
- package/src/views/AppearanceChrome.tsx +74 -0
- package/src/views/CollectionList.tsx +264 -205
- package/src/views/Dashboard.tsx +26 -13
- package/src/views/DocumentEdit.tsx +111 -56
- package/src/views/FormDeliveries.tsx +30 -17
- package/src/views/FormEntries.tsx +28 -20
- package/src/views/FormSubmissions.tsx +32 -34
- package/src/views/Forms.tsx +55 -34
- package/src/views/FormsSettings.tsx +94 -0
- package/src/views/Jobs/BusyButton.tsx +56 -0
- package/src/views/Jobs/CancelJobDialog.tsx +127 -0
- package/src/views/Jobs/DrawerActivity.tsx +142 -0
- package/src/views/Jobs/DrawerOverview.tsx +139 -0
- package/src/views/Jobs/DrawerResults.tsx +155 -0
- package/src/views/Jobs/DrawerReview.tsx +464 -0
- package/src/views/Jobs/JobDrawer.tsx +556 -0
- package/src/views/Jobs/JobsTable.tsx +260 -0
- package/src/views/Jobs/WorkerStrip.tsx +144 -0
- package/src/views/Jobs/atoms.tsx +93 -0
- package/src/views/Jobs/focus.ts +56 -0
- package/src/views/Jobs/icons.tsx +111 -0
- package/src/views/Jobs/placeholders.tsx +66 -0
- package/src/views/Jobs/useJobDetail.ts +64 -0
- package/src/views/Jobs/useJobsFeed.ts +249 -0
- package/src/views/Jobs/useReviewItems.ts +187 -0
- package/src/views/Jobs.tsx +282 -105
- package/src/views/MediaBrowser.tsx +71 -21
- package/src/views/Pages/PagesListView.tsx +115 -39
- package/src/views/Posts/NewPostTypeInstructions.tsx +15 -10
- package/src/views/Posts/PostTypesView.tsx +28 -6
- package/src/views/Posts/PostsListView.tsx +130 -40
- package/src/views/SEO.tsx +23 -8
- package/src/views/ScriptTags.tsx +233 -153
- package/src/views/Settings.tsx +215 -256
- package/src/views/SpamFolder.tsx +32 -0
- package/src/views/Trash.tsx +12 -1
- package/src/views/Users.tsx +2 -2
- package/src/views/WidgetsPlaceholder.tsx +33 -0
- package/src/views/dashboard/kpi-grid.ts +38 -0
- package/src/views/lazy-views.tsx +12 -0
- package/src/views/page-editor/PageTab.tsx +2 -2
- package/src/views/page-editor/ReviewBar.tsx +1 -1
- package/src/views/page-editor/VersionHistoryPanel.tsx +1 -1
- package/src/views/seo/AuditTab.tsx +1 -1
- package/src/views/seo/OverviewTab.tsx +6 -5
- package/src/views/seo/ProposalsTab.tsx +1 -1
- package/src/views/settings/AISettingsTab.tsx +10 -6
- package/src/views/settings/AccessProtectionCard.tsx +1 -1
- package/src/views/settings/AdminThemeCard.tsx +228 -35
- package/src/views/settings/AppearanceTab.tsx +10 -6
- package/src/views/settings/BrandPreviewCard.tsx +1 -1
- package/src/views/settings/BrandVoiceCard.tsx +1 -1
- package/src/views/settings/EmailSettingsTab.tsx +11 -7
- package/src/views/settings/GeneralSettingsTab.tsx +10 -6
- package/src/views/settings/McpConnectTab.tsx +2 -1
- package/src/views/settings/ProviderConnectionCard.tsx +1 -1
- package/src/views/settings/SearchDataCard.tsx +1 -1
- package/src/views/settings/SecurityStatusCard.tsx +2 -2
- package/src/views/settings/SecurityTab.tsx +10 -6
- package/src/views/settings/SeoAutopilotCard.tsx +2 -2
- package/src/views/settings/SeoSettingsTab.tsx +13 -9
- package/src/views/settings/SiteIndexStatusCard.tsx +1 -1
- package/src/views/settings/SiteThemeCard.tsx +1 -1
- package/src/views/settings/UpdatesTab.tsx +107 -101
- package/src/views/settings/components.tsx +26 -62
- package/src/views/settings/useAppearanceSettings.ts +116 -25
- package/src/views/users/UserDetailDrawer.tsx +1 -1
- package/dist/components/ui/StatPill.d.ts +0 -18
- package/dist/components/ui/StatPill.d.ts.map +0 -1
- package/dist/components/ui/StatPill.js +0 -5
- package/dist/components/ui/StatPill.js.map +0 -1
- package/src/components/ui/StatPill.tsx +0 -37
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
/** jobs-data.jsx `TYPES`. */
|
|
2
|
+
export const JOB_TYPES = {
|
|
3
|
+
'seo-scan': {
|
|
4
|
+
label: 'SEO scan',
|
|
5
|
+
unit: 'pages',
|
|
6
|
+
who: 'Weekly cron',
|
|
7
|
+
when: 'Mon 04:00 UTC',
|
|
8
|
+
slice: 'Audits the next batch of pages. Sends the SEO digest when the run finishes.',
|
|
9
|
+
perSlice: 100,
|
|
10
|
+
},
|
|
11
|
+
'content-health': {
|
|
12
|
+
label: 'Content health',
|
|
13
|
+
unit: 'documents',
|
|
14
|
+
who: 'Nightly cron',
|
|
15
|
+
when: 'Daily 02:30 UTC',
|
|
16
|
+
slice: 'Scans 25 documents, then resolves issues that are gone.',
|
|
17
|
+
perSlice: 25,
|
|
18
|
+
},
|
|
19
|
+
'batch-ai': {
|
|
20
|
+
label: 'Batch AI',
|
|
21
|
+
unit: 'documents',
|
|
22
|
+
who: 'Started by an editor',
|
|
23
|
+
when: 'On demand',
|
|
24
|
+
slice: 'Applies the operation to one document.',
|
|
25
|
+
perSlice: 1,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
function isKnownJobType(type) {
|
|
29
|
+
return Object.hasOwn(JOB_TYPES, type);
|
|
30
|
+
}
|
|
31
|
+
/** A type the kit doesn't know still gets a row (CONFLICTS.md §4: generic tile). */
|
|
32
|
+
export function jobType(type) {
|
|
33
|
+
return isKnownJobType(type)
|
|
34
|
+
? JOB_TYPES[type]
|
|
35
|
+
: { label: type, unit: 'documents', who: 'System', when: '', slice: '', perSlice: 0 };
|
|
36
|
+
}
|
|
37
|
+
/** jobs-data.jsx `OPS`: the batch AI operations, with the wizard's copy. */
|
|
38
|
+
export const JOB_OPS = [
|
|
39
|
+
{
|
|
40
|
+
id: 'meta',
|
|
41
|
+
label: 'Rewrite meta descriptions',
|
|
42
|
+
d: 'Writes a description under 155 characters from the page content.',
|
|
43
|
+
field: 'Meta description',
|
|
44
|
+
filter: 'Missing or over 160 characters',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: 'alt',
|
|
48
|
+
label: 'Generate image alt text',
|
|
49
|
+
d: 'Describes each image for screen readers and search.',
|
|
50
|
+
field: 'Alt text',
|
|
51
|
+
filter: 'No alt text',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
id: 'titles',
|
|
55
|
+
label: 'Shorten long titles',
|
|
56
|
+
d: 'Keeps the meaning, trims SEO titles to 60 characters.',
|
|
57
|
+
field: 'SEO title',
|
|
58
|
+
filter: 'Over 60 characters',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: 'excerpt',
|
|
62
|
+
label: 'Write excerpts',
|
|
63
|
+
d: 'A two-sentence summary for cards and feeds.',
|
|
64
|
+
field: 'Excerpt',
|
|
65
|
+
filter: 'No excerpt',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'links',
|
|
69
|
+
label: 'Add internal links',
|
|
70
|
+
d: 'Suggests up to 3 links to related pages in the body.',
|
|
71
|
+
field: 'Body links',
|
|
72
|
+
filter: 'Fewer than 2 internal links',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'custom',
|
|
76
|
+
label: 'Custom instruction',
|
|
77
|
+
d: 'Describe the change in your own words.',
|
|
78
|
+
field: 'Field you choose',
|
|
79
|
+
filter: 'Any',
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
/**
|
|
83
|
+
* jobs-data.jsx `view()`, copied. Two edits: attempts read the job's
|
|
84
|
+
* `maxAttempts` (always 3 today) instead of a literal 3, and a cancel with no
|
|
85
|
+
* known canceller leaves the sub-line empty instead of "by undefined".
|
|
86
|
+
*/
|
|
87
|
+
export function view(j) {
|
|
88
|
+
if (j.cancelling)
|
|
89
|
+
return { k: 'cancelling', l: 'Cancelling', t: 'warn', sub: 'Stops after this slice' };
|
|
90
|
+
if (j.state === 'running')
|
|
91
|
+
return {
|
|
92
|
+
k: 'running',
|
|
93
|
+
l: 'Running',
|
|
94
|
+
t: 'acc',
|
|
95
|
+
sub: `Slice ${(j.done || 0) + 1} · ${jobType(j.type).unit === 'pages' ? 'auditing' : 'working'}`,
|
|
96
|
+
};
|
|
97
|
+
if (j.state === 'queued' && j.error)
|
|
98
|
+
return {
|
|
99
|
+
k: 'retry',
|
|
100
|
+
l: 'Retrying',
|
|
101
|
+
t: 'warn',
|
|
102
|
+
sub: `Attempt ${j.attempts + 1} of ${j.maxAttempts} · in ${j.retryIn}s`,
|
|
103
|
+
};
|
|
104
|
+
if (j.state === 'queued' && j.done > 0)
|
|
105
|
+
return { k: 'between', l: 'In progress', t: 'acc', sub: 'Waiting for the next slice' };
|
|
106
|
+
if (j.state === 'queued')
|
|
107
|
+
return {
|
|
108
|
+
k: 'queued',
|
|
109
|
+
l: 'Queued',
|
|
110
|
+
t: 'mute',
|
|
111
|
+
sub: j.queuePos
|
|
112
|
+
? `Behind ${j.queuePos} job${j.queuePos > 1 ? 's' : ''}`
|
|
113
|
+
: 'Waiting for the worker',
|
|
114
|
+
};
|
|
115
|
+
if (j.state === 'dead')
|
|
116
|
+
return { k: 'dead', l: 'Failed', t: 'err', sub: `After ${j.maxAttempts} attempts` };
|
|
117
|
+
if (j.state === 'cancelled')
|
|
118
|
+
return {
|
|
119
|
+
k: 'cancelled',
|
|
120
|
+
l: 'Cancelled',
|
|
121
|
+
t: 'mute',
|
|
122
|
+
sub: j.cancelledBy ? `by ${j.cancelledBy}` : '',
|
|
123
|
+
};
|
|
124
|
+
if (j.type === 'batch-ai' && j.pending > 0)
|
|
125
|
+
return {
|
|
126
|
+
k: 'review',
|
|
127
|
+
l: 'Needs review',
|
|
128
|
+
t: 'rev',
|
|
129
|
+
sub: `${j.pending} change${j.pending > 1 ? 's' : ''} waiting`,
|
|
130
|
+
};
|
|
131
|
+
return { k: 'ok', l: 'Succeeded', t: 'suc', sub: j.took ? `Took ${j.took}` : '' };
|
|
132
|
+
}
|
|
133
|
+
/** jobs-data.jsx `active()`: the worker still has work to do on it. */
|
|
134
|
+
export function active(j) {
|
|
135
|
+
return j.state === 'queued' || j.state === 'running';
|
|
136
|
+
}
|
|
137
|
+
/** jobs-view.jsx `FILTERS`. */
|
|
138
|
+
export const JOB_FILTERS = [
|
|
139
|
+
{ id: 'all', label: 'All' },
|
|
140
|
+
{ id: 'active', label: 'Active' },
|
|
141
|
+
{ id: 'review', label: 'Needs review' },
|
|
142
|
+
{ id: 'ok', label: 'Succeeded' },
|
|
143
|
+
{ id: 'dead', label: 'Failed' },
|
|
144
|
+
{ id: 'cancelled', label: 'Cancelled' },
|
|
145
|
+
];
|
|
146
|
+
/** jobs-view.jsx `match()`. */
|
|
147
|
+
export function matchJob(j, f) {
|
|
148
|
+
const v = view(j);
|
|
149
|
+
if (f === 'all')
|
|
150
|
+
return true;
|
|
151
|
+
if (f === 'active')
|
|
152
|
+
return active(j);
|
|
153
|
+
if (f === 'review')
|
|
154
|
+
return v.k === 'review' || (j.type === 'batch-ai' && j.pending > 0 && j.state !== 'cancelled');
|
|
155
|
+
if (f === 'ok')
|
|
156
|
+
return j.state === 'succeeded';
|
|
157
|
+
if (f === 'dead')
|
|
158
|
+
return j.state === 'dead';
|
|
159
|
+
return j.state === 'cancelled';
|
|
160
|
+
}
|
|
161
|
+
/** Counts per filter, over the rows the type select leaves (jobs-view.jsx `counts`). */
|
|
162
|
+
export function countJobs(rows) {
|
|
163
|
+
const counts = {};
|
|
164
|
+
for (const { id } of JOB_FILTERS)
|
|
165
|
+
counts[id] = rows.filter((row) => matchJob(row, id)).length;
|
|
166
|
+
return counts;
|
|
167
|
+
}
|
|
168
|
+
/** Whether the row shows a Review button (jobs-view.jsx row actions). */
|
|
169
|
+
export function hasReviewAction(j) {
|
|
170
|
+
return view(j).k === 'review' || (j.items && j.pending > 0);
|
|
171
|
+
}
|
|
172
|
+
/** A running job whose lock is older than this crashed mid-slice (JOBS.md). */
|
|
173
|
+
const STALE_LOCK_MS = 10 * 60_000;
|
|
174
|
+
/** The worker cron runs once a minute. */
|
|
175
|
+
const TICK_MS = 60_000;
|
|
176
|
+
const WEEKDAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
177
|
+
const MONTHS = [
|
|
178
|
+
'Jan',
|
|
179
|
+
'Feb',
|
|
180
|
+
'Mar',
|
|
181
|
+
'Apr',
|
|
182
|
+
'May',
|
|
183
|
+
'Jun',
|
|
184
|
+
'Jul',
|
|
185
|
+
'Aug',
|
|
186
|
+
'Sep',
|
|
187
|
+
'Oct',
|
|
188
|
+
'Nov',
|
|
189
|
+
'Dec',
|
|
190
|
+
];
|
|
191
|
+
function pad(value) {
|
|
192
|
+
return String(value).padStart(2, '0');
|
|
193
|
+
}
|
|
194
|
+
function clock(date) {
|
|
195
|
+
return `${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
|
196
|
+
}
|
|
197
|
+
/** Calendar days from `from` to `to`, in local time. */
|
|
198
|
+
function dayDiff(to, from) {
|
|
199
|
+
const start = (date) => new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
200
|
+
return Math.round((start(to).getTime() - start(from).getTime()) / 86_400_000);
|
|
201
|
+
}
|
|
202
|
+
/** "now", "34 min ago", "Today 02:30", "Yesterday 16:04", "Mon 04:00", then "12 Oct". */
|
|
203
|
+
export function formatCreated(iso, now) {
|
|
204
|
+
const at = new Date(iso);
|
|
205
|
+
const ms = now - at.getTime();
|
|
206
|
+
if (ms < 60_000)
|
|
207
|
+
return 'now';
|
|
208
|
+
if (ms < 3_600_000)
|
|
209
|
+
return `${Math.floor(ms / 60_000)} min ago`;
|
|
210
|
+
const days = dayDiff(new Date(now), at);
|
|
211
|
+
if (days === 0)
|
|
212
|
+
return `Today ${clock(at)}`;
|
|
213
|
+
if (days === 1)
|
|
214
|
+
return `Yesterday ${clock(at)}`;
|
|
215
|
+
if (days < 7)
|
|
216
|
+
return `${WEEKDAYS[at.getDay()]} ${clock(at)}`;
|
|
217
|
+
const year = at.getFullYear() === new Date(now).getFullYear() ? '' : ` ${at.getFullYear()}`;
|
|
218
|
+
return `${at.getDate()} ${MONTHS[at.getMonth()]}${year}`;
|
|
219
|
+
}
|
|
220
|
+
/** "today 14:00", "tomorrow 00:00", then "Sun 1 Nov 00:00": a time still to come, in local time. */
|
|
221
|
+
export function formatLater(at, now) {
|
|
222
|
+
const date = new Date(at);
|
|
223
|
+
const days = dayDiff(date, new Date(now));
|
|
224
|
+
if (days <= 0)
|
|
225
|
+
return `today ${clock(date)}`;
|
|
226
|
+
if (days === 1)
|
|
227
|
+
return `tomorrow ${clock(date)}`;
|
|
228
|
+
return `${WEEKDAYS[date.getDay()]} ${date.getDate()} ${MONTHS[date.getMonth()]} ${clock(date)}`;
|
|
229
|
+
}
|
|
230
|
+
/** "12s", "17 min", "1h 52m". */
|
|
231
|
+
export function formatDuration(ms) {
|
|
232
|
+
const seconds = Math.max(0, Math.round(ms / 1000));
|
|
233
|
+
if (seconds < 60)
|
|
234
|
+
return `${seconds}s`;
|
|
235
|
+
const minutes = Math.round(seconds / 60);
|
|
236
|
+
if (minutes < 60)
|
|
237
|
+
return `${minutes} min`;
|
|
238
|
+
return `${Math.floor(minutes / 60)}h ${minutes % 60}m`;
|
|
239
|
+
}
|
|
240
|
+
/** "24s", "3 min", "5h", "2 days": how long ago the worker last ran. */
|
|
241
|
+
export function formatSince(ms) {
|
|
242
|
+
const seconds = Math.max(0, Math.floor(ms / 1000));
|
|
243
|
+
if (seconds < 60)
|
|
244
|
+
return `${seconds}s`;
|
|
245
|
+
const minutes = Math.floor(seconds / 60);
|
|
246
|
+
if (minutes < 60)
|
|
247
|
+
return `${minutes} min`;
|
|
248
|
+
const hours = Math.floor(minutes / 60);
|
|
249
|
+
if (hours < 48)
|
|
250
|
+
return `${hours}h`;
|
|
251
|
+
return `${Math.floor(hours / 24)} days`;
|
|
252
|
+
}
|
|
253
|
+
/** "Mon 04:00 UTC" or "Daily 02:30 UTC" from a weekly or daily cron; anything else as written. */
|
|
254
|
+
export function scheduleLabel(cron) {
|
|
255
|
+
const [minute, hour, dayOfMonth, month, weekday, ...rest] = cron.trim().split(/\s+/);
|
|
256
|
+
const simple = rest.length === 0 &&
|
|
257
|
+
/^\d{1,2}$/.test(minute ?? '') &&
|
|
258
|
+
/^\d{1,2}$/.test(hour ?? '') &&
|
|
259
|
+
dayOfMonth === '*' &&
|
|
260
|
+
month === '*';
|
|
261
|
+
if (!simple)
|
|
262
|
+
return cron;
|
|
263
|
+
const time = `${pad(Number(hour))}:${pad(Number(minute))} UTC`;
|
|
264
|
+
if (weekday === '*')
|
|
265
|
+
return `Daily ${time}`;
|
|
266
|
+
if (weekday !== undefined && /^[0-6]$/.test(weekday))
|
|
267
|
+
return `${WEEKDAYS[Number(weekday)]} ${time}`;
|
|
268
|
+
return cron;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* "next tonight", "next today", "next tomorrow" or "next Mon 19 Oct". In UTC,
|
|
272
|
+
* like the schedule it follows ("Mon 04:00 UTC · next Mon 26 Oct"), so the
|
|
273
|
+
* weekday never disagrees with the label.
|
|
274
|
+
*/
|
|
275
|
+
export function formatNextRun(iso, now) {
|
|
276
|
+
const at = new Date(iso);
|
|
277
|
+
const utcDay = (date) => Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
|
|
278
|
+
const days = Math.round((utcDay(at) - utcDay(new Date(now))) / 86_400_000);
|
|
279
|
+
const night = at.getUTCHours() >= 18 || at.getUTCHours() < 6;
|
|
280
|
+
if (at.getTime() - now < 86_400_000 && night && days <= 1)
|
|
281
|
+
return 'next tonight';
|
|
282
|
+
if (days <= 0)
|
|
283
|
+
return 'next today';
|
|
284
|
+
if (days === 1)
|
|
285
|
+
return 'next tomorrow';
|
|
286
|
+
return `next ${WEEKDAYS[at.getUTCDay()]} ${at.getUTCDate()} ${MONTHS[at.getUTCMonth()]}`;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Seconds until a retry runs: the first worker tick at or after its backoff.
|
|
290
|
+
* Without a tick ahead (the worker hasn't run, or is late) it's the backoff alone.
|
|
291
|
+
*/
|
|
292
|
+
function retryInSeconds(runAt, now, nextTickAt) {
|
|
293
|
+
let at = runAt;
|
|
294
|
+
if (nextTickAt !== null && nextTickAt > now) {
|
|
295
|
+
at = nextTickAt + Math.max(0, Math.ceil((runAt - nextTickAt) / TICK_MS)) * TICK_MS;
|
|
296
|
+
}
|
|
297
|
+
return Math.max(0, Math.ceil((at - now) / 1000));
|
|
298
|
+
}
|
|
299
|
+
function who(job) {
|
|
300
|
+
const by = job.createdBy;
|
|
301
|
+
if (!by)
|
|
302
|
+
return jobType(job.type).who;
|
|
303
|
+
if ('kind' in by)
|
|
304
|
+
return by.schedule === 'weekly-seo' ? 'Weekly cron' : 'Nightly cron';
|
|
305
|
+
return by.name;
|
|
306
|
+
}
|
|
307
|
+
/** Claim order (`claimNext`): earliest `runAt`, then oldest. */
|
|
308
|
+
function claimsBefore(a, b) {
|
|
309
|
+
const runA = Date.parse(a.runAt);
|
|
310
|
+
const runB = Date.parse(b.runAt);
|
|
311
|
+
if (runA !== runB)
|
|
312
|
+
return runA < runB;
|
|
313
|
+
return Date.parse(a.createdAt) < Date.parse(b.createdAt);
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* API jobs in the kit's row shape. `now` is when the list was fetched, so the
|
|
317
|
+
* retry countdown and "34 min ago" move with each poll. `worker` aligns the
|
|
318
|
+
* retry countdown with the once-a-minute worker.
|
|
319
|
+
*/
|
|
320
|
+
export function toJobRows(jobs, now, worker) {
|
|
321
|
+
const nextTickAt = worker?.nextTickAt ? Date.parse(worker.nextTickAt) : null;
|
|
322
|
+
const isActive = (job) => job.status === 'queued' || job.status === 'running';
|
|
323
|
+
return jobs.map((job) => {
|
|
324
|
+
const stale = job.status === 'running' &&
|
|
325
|
+
job.lockedAt !== null &&
|
|
326
|
+
now - Date.parse(job.lockedAt) > STALE_LOCK_MS;
|
|
327
|
+
// A stale lock is handled as a failed slice on the next tick (JOBS.md).
|
|
328
|
+
const state = stale ? 'queued' : job.status;
|
|
329
|
+
const error = stale ? 'Worker stopped mid-slice' : job.lastError;
|
|
330
|
+
const finished = state === 'succeeded' ? (job.finishedAt ?? job.updatedAt) : null;
|
|
331
|
+
const review = job.review;
|
|
332
|
+
return {
|
|
333
|
+
id: job.id,
|
|
334
|
+
type: job.type,
|
|
335
|
+
title: job.title,
|
|
336
|
+
scope: job.scope,
|
|
337
|
+
state,
|
|
338
|
+
status: job.status,
|
|
339
|
+
cancelling: !!job.cancelRequestedAt && isActive(job),
|
|
340
|
+
done: job.progress.done,
|
|
341
|
+
total: job.progress.total,
|
|
342
|
+
attempts: job.attempts,
|
|
343
|
+
maxAttempts: job.maxAttempts,
|
|
344
|
+
error,
|
|
345
|
+
retryIn: state === 'queued' && error
|
|
346
|
+
? retryInSeconds(stale ? now : Date.parse(job.runAt), now, nextTickAt)
|
|
347
|
+
: 0,
|
|
348
|
+
queuePos: state === 'queued' && !error
|
|
349
|
+
? jobs.filter((other) => other.id !== job.id &&
|
|
350
|
+
isActive(other) &&
|
|
351
|
+
(other.status === 'running' || claimsBefore(other, job))).length
|
|
352
|
+
: 0,
|
|
353
|
+
cancelledBy: job.cancelledBy?.name ?? null,
|
|
354
|
+
pending: review?.pending ?? 0,
|
|
355
|
+
items: !!review && review.pending + review.approved + review.rejected > 0,
|
|
356
|
+
review: job.type === 'batch-ai' && 'review' in job.payload ? job.payload.review : null,
|
|
357
|
+
took: finished ? formatDuration(Date.parse(finished) - Date.parse(job.createdAt)) : null,
|
|
358
|
+
by: who(job),
|
|
359
|
+
created: formatCreated(job.createdAt, now),
|
|
360
|
+
};
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
//# sourceMappingURL=job-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-view.js","sourceRoot":"","sources":["../../src/lib/job-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jobs service: a typed client over the cms-core Jobs endpoints
|
|
3
|
+
* (DATA_CONTRACTS.md §1, envelopes in CONFLICTS.md §4). The Jobs screen calls
|
|
4
|
+
* these, never `cmsApi` directly.
|
|
5
|
+
*
|
|
6
|
+
* Every call returns an outcome rather than throwing, so a screen can tell a
|
|
7
|
+
* failed request from an empty list and show the server's message (a
|
|
8
|
+
* viewer's 403, a 409 for a job that can't be retried).
|
|
9
|
+
*/
|
|
10
|
+
import type { Job, JobEvent, JobReviewItem, JobWorkerStatus } from '@prenta/core';
|
|
11
|
+
export type JobsOutcome<T> = {
|
|
12
|
+
ok: true;
|
|
13
|
+
value: T;
|
|
14
|
+
} | {
|
|
15
|
+
ok: false;
|
|
16
|
+
error: string;
|
|
17
|
+
status: number;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* A polled read. It also carries the server's clock (the `Date` header) and,
|
|
21
|
+
* on a 429, how long the server asked the client to wait (`Retry-After`).
|
|
22
|
+
*/
|
|
23
|
+
export type PollOutcome<T> = {
|
|
24
|
+
ok: true;
|
|
25
|
+
value: T;
|
|
26
|
+
serverTime: number | null;
|
|
27
|
+
} | {
|
|
28
|
+
ok: false;
|
|
29
|
+
error: string;
|
|
30
|
+
status: number;
|
|
31
|
+
serverTime: number | null;
|
|
32
|
+
retryAfterMs: number | null;
|
|
33
|
+
};
|
|
34
|
+
/** The screen lists the newest 50 jobs (JOBS.md). */
|
|
35
|
+
export declare const JOBS_LIST_LIMIT = 50;
|
|
36
|
+
/** The job types "Run now" can start. Batch AI starts from a set of documents instead. */
|
|
37
|
+
export type RunnableJobType = 'seo-scan' | 'content-health';
|
|
38
|
+
/** `GET /jobs`: newest first. */
|
|
39
|
+
export declare function listJobs(limit?: number, signal?: AbortSignal): Promise<PollOutcome<Job[]>>;
|
|
40
|
+
/** `GET /jobs/worker`: the last tick and the scan schedules, for the worker strip. */
|
|
41
|
+
export declare function getJobWorker(signal?: AbortSignal): Promise<PollOutcome<JobWorkerStatus>>;
|
|
42
|
+
/**
|
|
43
|
+
* `POST /jobs/run`. When a job of that type is already queued or running the
|
|
44
|
+
* server returns it with `reused: true` instead of adding one.
|
|
45
|
+
*/
|
|
46
|
+
export declare function runJobNow(type: RunnableJobType): Promise<JobsOutcome<{
|
|
47
|
+
job: Job;
|
|
48
|
+
reused: boolean;
|
|
49
|
+
}>>;
|
|
50
|
+
/** `POST /jobs/:id/retry`: a failed job, or one waiting to retry. Anything else is a 409. */
|
|
51
|
+
export declare function retryJob(id: string): Promise<JobsOutcome<Job>>;
|
|
52
|
+
/**
|
|
53
|
+
* `POST /jobs/:id/cancel`. A queued job comes back cancelled; a running one
|
|
54
|
+
* comes back with `cancelRequestedAt` set and stops after its slice. A job
|
|
55
|
+
* that already finished comes back unchanged.
|
|
56
|
+
*/
|
|
57
|
+
export declare function cancelJob(id: string): Promise<JobsOutcome<Job>>;
|
|
58
|
+
/**
|
|
59
|
+
* `GET /jobs/:id`: the job with its scan `results`. A caller who could retry
|
|
60
|
+
* or cancel it also gets the full `lastError` with its stack; others get the
|
|
61
|
+
* one line the list shows.
|
|
62
|
+
*/
|
|
63
|
+
export declare function getJob(id: string, signal?: AbortSignal): Promise<JobsOutcome<Job>>;
|
|
64
|
+
/** `GET /jobs/:id/events`: the job's newest 50 events. */
|
|
65
|
+
export declare function listJobEvents(id: string, signal?: AbortSignal): Promise<JobsOutcome<JobEvent[]>>;
|
|
66
|
+
/** The drawer loads a job's suggested changes 20 at a time (TRACKING P-18). */
|
|
67
|
+
export declare const REVIEW_PAGE_SIZE = 20;
|
|
68
|
+
/** The most `GET /jobs/:id/review` returns in one page. */
|
|
69
|
+
export declare const REVIEW_PAGE_MAX = 100;
|
|
70
|
+
export interface ReviewPage {
|
|
71
|
+
items: JobReviewItem[];
|
|
72
|
+
/** Pass back as `cursor` for the next page; null on the last one. */
|
|
73
|
+
nextCursor: string | null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* `GET /jobs/:id/review`: the job's changes, pending and decided, in the
|
|
77
|
+
* order they were suggested. A caller who can't edit content, or can't read
|
|
78
|
+
* one of the collections the job writes, gets a 403.
|
|
79
|
+
*/
|
|
80
|
+
export declare function listReviewItems(id: string, page?: {
|
|
81
|
+
cursor?: string | null;
|
|
82
|
+
limit?: number;
|
|
83
|
+
}, signal?: AbortSignal): Promise<JobsOutcome<ReviewPage>>;
|
|
84
|
+
/**
|
|
85
|
+
* "Save as draft" (which keeps a published document's status, so its change
|
|
86
|
+
* stays in review) or "Publish" (CONFLICTS.md §4).
|
|
87
|
+
*/
|
|
88
|
+
export type OnApprove = 'draft' | 'publish';
|
|
89
|
+
export type ReviewAction = {
|
|
90
|
+
action: 'approve';
|
|
91
|
+
onApprove?: OnApprove;
|
|
92
|
+
after?: string;
|
|
93
|
+
} | {
|
|
94
|
+
action: 'reject';
|
|
95
|
+
} | {
|
|
96
|
+
action: 'undo';
|
|
97
|
+
};
|
|
98
|
+
export interface ReviewDecision {
|
|
99
|
+
item: JobReviewItem;
|
|
100
|
+
/** The document's status after the decision, such as `PUBLISHED`. Null for an image. */
|
|
101
|
+
documentStatus: string | null;
|
|
102
|
+
/** Set when an undo left the document published, now showing the previous text. */
|
|
103
|
+
notice: string | null;
|
|
104
|
+
}
|
|
105
|
+
/** `POST /jobs/:id/review/:itemId`: approve, reject or undo one change. */
|
|
106
|
+
export declare function decideReviewItem(jobId: string, itemId: string, decision: ReviewAction): Promise<JobsOutcome<ReviewDecision>>;
|
|
107
|
+
export interface ApproveAllOutcome {
|
|
108
|
+
approved: number;
|
|
109
|
+
/** Changes this call couldn't apply. They stay pending. */
|
|
110
|
+
skipped: number;
|
|
111
|
+
/** Pending changes left, skipped ones included. */
|
|
112
|
+
remaining: number;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* `POST /jobs/:id/review/approve-all`, with the job's own "When a change is
|
|
116
|
+
* approved". The server stops starting changes after 20 seconds, so a caller
|
|
117
|
+
* asks again while `remaining` is more than `skipped`.
|
|
118
|
+
*/
|
|
119
|
+
export declare function approveAllReviewItems(jobId: string): Promise<JobsOutcome<ApproveAllOutcome>>;
|
|
120
|
+
/**
|
|
121
|
+
* Why a review decision was refused with a 409, read from the server's
|
|
122
|
+
* message (cms-core `jobs/review.ts`), which the drawer shows as it is:
|
|
123
|
+
* - `published`: approved without Publish on a published document, so the
|
|
124
|
+
* change stays in review;
|
|
125
|
+
* - `changed`: the document changed while the change was being saved, or its
|
|
126
|
+
* publish state moved since it was read, and nothing was written;
|
|
127
|
+
* - `link-gone`: the page a link points to isn't published at that address;
|
|
128
|
+
* - `decided`: someone else decided the change first;
|
|
129
|
+
* - `gone`: the change or its document no longer exists.
|
|
130
|
+
* Null for any other refusal.
|
|
131
|
+
*/
|
|
132
|
+
export type ReviewConflict = 'published' | 'changed' | 'link-gone' | 'decided' | 'gone';
|
|
133
|
+
export declare function reviewConflict(status: number, error: string): ReviewConflict | null;
|
|
134
|
+
//# sourceMappingURL=jobs-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs-service.d.ts","sourceRoot":"","sources":["../../src/lib/jobs-service.ts"],"names":[],"mappings":"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"}
|