@jini-ai/admin 0.4.2 → 0.4.4
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 +15 -0
- package/README.md +7 -0
- package/dist/agent-plugins/react/components/AgentPluginListPanel.d.ts +1 -1
- package/dist/agent-plugins/react/hooks/AgentPluginInspector.hooks.js +1 -1
- package/dist/agent-plugins/react/hooks/AgentPluginPanel.hooks.d.ts +1 -1
- package/dist/agent-plugins/react/hooks/AgentPluginsPage.hooks.d.ts +1 -1
- package/dist/agent-plugins/react/hooks/AgentPluginsPage.hooks.js +1 -1
- package/dist/agent-plugins/react/hooks/MarketplaceTab.hooks.d.ts +1 -1
- package/dist/agent-plugins/react/index.js +1 -1
- package/dist/agent-plugins/react/pages/AgentPluginsPage.d.ts +1 -1
- package/dist/agent-plugins/react/tabs/DownloadedTab.d.ts +1 -1
- package/dist/agent-plugins/react/tabs/InstalledTab.d.ts +1 -1
- package/dist/agent-plugins/react/tabs/MarketplaceTab.d.ts +1 -1
- package/dist/comments/adapters/http.d.ts +29 -0
- package/dist/comments/adapters/http.js +50 -0
- package/dist/comments/adapters/memory.d.ts +17 -0
- package/dist/comments/adapters/memory.js +61 -0
- package/dist/comments/comments.module.d.ts +73 -0
- package/dist/comments/comments.module.js +16 -0
- package/dist/comments/conformance/comments-api.conformance.d.ts +9 -0
- package/dist/comments/conformance/comments-api.conformance.js +63 -0
- package/dist/comments/controllers/comment-queue.controller.d.ts +48 -0
- package/dist/comments/controllers/comment-queue.controller.js +164 -0
- package/dist/comments/controllers/comment-settings.controller.d.ts +32 -0
- package/dist/comments/controllers/comment-settings.controller.js +77 -0
- package/dist/comments/controllers/comments.controller.d.ts +16 -0
- package/dist/comments/controllers/comments.controller.js +16 -0
- package/dist/comments/index.d.ts +13 -0
- package/dist/comments/index.js +8 -0
- package/dist/comments/messages.en.d.ts +54 -0
- package/dist/comments/messages.en.js +56 -0
- package/dist/comments/models.d.ts +22 -0
- package/dist/comments/models.js +2 -0
- package/dist/comments/ports.d.ts +14 -0
- package/dist/comments/ports.js +5 -0
- package/dist/comments/react/components/QueueSection.d.ts +30 -0
- package/dist/comments/react/components/QueueSection.js +57 -0
- package/dist/comments/react/components/SettingsSection.d.ts +14 -0
- package/dist/comments/react/components/SettingsSection.js +23 -0
- package/dist/comments/react/hooks/CommentsPage.hooks.d.ts +9 -0
- package/dist/comments/react/hooks/CommentsPage.hooks.js +10 -0
- package/dist/comments/react/hooks/CommentsPorts.hooks.d.ts +13 -0
- package/dist/comments/react/hooks/CommentsPorts.hooks.js +15 -0
- package/dist/comments/react/hooks/QueueSection.hooks.d.ts +62 -0
- package/dist/comments/react/hooks/QueueSection.hooks.js +57 -0
- package/dist/comments/react/hooks/SettingsSection.hooks.d.ts +12 -0
- package/dist/comments/react/hooks/SettingsSection.hooks.js +21 -0
- package/dist/comments/react/hooks/use-comment-queue.hooks.d.ts +34 -0
- package/dist/comments/react/hooks/use-comment-queue.hooks.js +47 -0
- package/dist/comments/react/hooks/use-comment-settings.hooks.d.ts +22 -0
- package/dist/comments/react/hooks/use-comment-settings.hooks.js +30 -0
- package/dist/comments/react/hooks/use-comments.hooks.d.ts +15 -0
- package/dist/comments/react/hooks/use-comments.hooks.js +20 -0
- package/dist/comments/react/index.d.ts +316 -0
- package/dist/comments/react/index.js +35 -0
- package/dist/comments/react/pages/CommentsPage.d.ts +12 -0
- package/dist/comments/react/pages/CommentsPage.js +15 -0
- package/dist/comments/rules.d.ts +140 -0
- package/dist/comments/rules.js +199 -0
- package/dist/core/index.d.ts +3 -1
- package/dist/core/index.js +1 -0
- package/dist/core/ledger-slice.d.ts +90 -0
- package/dist/core/ledger-slice.js +81 -0
- package/dist/core/ports/comments.d.ts +2 -0
- package/dist/core/ports/forms.d.ts +19 -7
- package/dist/core/ports/forms.js +4 -4
- package/dist/core/ports/index.d.ts +1 -1
- package/dist/core/ports/seo.d.ts +33 -6
- package/dist/core/react/bind-react.d.ts +46 -0
- package/dist/core/react/bind-react.js +28 -0
- package/dist/core/react/index.d.ts +3 -0
- package/dist/core/react/index.js +3 -0
- package/dist/core/react/use-controller.d.ts +16 -0
- package/dist/core/react/use-controller.js +18 -0
- package/dist/forms/adapters/http.d.ts +26 -0
- package/dist/forms/adapters/http.js +43 -0
- package/dist/forms/adapters/memory.d.ts +14 -0
- package/dist/forms/adapters/memory.js +77 -0
- package/dist/forms/conformance/forms-api.conformance.d.ts +17 -0
- package/dist/forms/conformance/forms-api.conformance.js +71 -0
- package/dist/forms/controllers/draft-store.d.ts +18 -0
- package/dist/forms/controllers/draft-store.js +17 -0
- package/dist/forms/controllers/field-attributes-dialog.controller.d.ts +37 -0
- package/dist/forms/controllers/field-attributes-dialog.controller.js +27 -0
- package/dist/forms/controllers/form-editor.controller.d.ts +36 -0
- package/dist/forms/controllers/form-editor.controller.js +22 -0
- package/dist/forms/controllers/form-fields-editor.controller.d.ts +20 -0
- package/dist/forms/controllers/form-fields-editor.controller.js +10 -0
- package/dist/forms/controllers/form-submission-detail.controller.d.ts +20 -0
- package/dist/forms/controllers/form-submission-detail.controller.js +10 -0
- package/dist/forms/controllers/form-submissions.controller.d.ts +25 -0
- package/dist/forms/controllers/form-submissions.controller.js +10 -0
- package/dist/forms/controllers/forms-list.controller.d.ts +22 -0
- package/dist/forms/controllers/forms-list.controller.js +10 -0
- package/dist/forms/forms.module.d.ts +138 -0
- package/dist/forms/forms.module.js +17 -0
- package/dist/forms/html-rules.d.ts +34 -0
- package/dist/forms/html-rules.js +34 -0
- package/dist/forms/index.d.ts +14 -0
- package/dist/forms/index.js +12 -0
- package/dist/forms/messages.en.d.ts +101 -0
- package/dist/forms/messages.en.js +105 -0
- package/dist/forms/models.d.ts +29 -0
- package/dist/forms/models.js +8 -0
- package/dist/forms/ports.d.ts +26 -0
- package/dist/forms/ports.js +6 -0
- package/dist/forms/react/components/FieldAttributesDialog.d.ts +14 -0
- package/dist/forms/react/components/FieldAttributesDialog.js +47 -0
- package/dist/forms/react/components/FormEditorFieldsBody.d.ts +28 -0
- package/dist/forms/react/components/FormEditorFieldsBody.js +24 -0
- package/dist/forms/react/components/FormEditorHeaderText.d.ts +7 -0
- package/dist/forms/react/components/FormEditorHeaderText.js +8 -0
- package/dist/forms/react/components/FormEditorMainPanel.d.ts +12 -0
- package/dist/forms/react/components/FormEditorMainPanel.js +13 -0
- package/dist/forms/react/components/FormEditorTabStrip.d.ts +13 -0
- package/dist/forms/react/components/FormEditorTabStrip.js +14 -0
- package/dist/forms/react/components/FormFieldsEditor.d.ts +13 -0
- package/dist/forms/react/components/FormFieldsEditor.js +39 -0
- package/dist/forms/react/components/FormSubmissionDate.d.ts +8 -0
- package/dist/forms/react/components/FormSubmissionDate.js +5 -0
- package/dist/forms/react/components/FormSubmissionDetail.d.ts +15 -0
- package/dist/forms/react/components/FormSubmissionDetail.js +30 -0
- package/dist/forms/react/components/FormSubmissions.d.ts +12 -0
- package/dist/forms/react/components/FormSubmissions.js +46 -0
- package/dist/forms/react/hooks/FormsPorts.hooks.d.ts +41 -0
- package/dist/forms/react/hooks/FormsPorts.hooks.js +16 -0
- package/dist/forms/react/hooks/forms-view.hooks.d.ts +117 -0
- package/dist/forms/react/hooks/forms-view.hooks.js +78 -0
- package/dist/forms/react/hooks/use-field-attributes-dialog.hooks.d.ts +31 -0
- package/dist/forms/react/hooks/use-field-attributes-dialog.hooks.js +22 -0
- package/dist/forms/react/hooks/use-form-editor.hooks.d.ts +118 -0
- package/dist/forms/react/hooks/use-form-editor.hooks.js +208 -0
- package/dist/forms/react/hooks/use-form-fields-editor.hooks.d.ts +34 -0
- package/dist/forms/react/hooks/use-form-fields-editor.hooks.js +36 -0
- package/dist/forms/react/hooks/use-form-submission-date.hooks.d.ts +12 -0
- package/dist/forms/react/hooks/use-form-submission-date.hooks.js +9 -0
- package/dist/forms/react/hooks/use-form-submission-detail.hooks.d.ts +68 -0
- package/dist/forms/react/hooks/use-form-submission-detail.hooks.js +81 -0
- package/dist/forms/react/hooks/use-form-submissions.hooks.d.ts +67 -0
- package/dist/forms/react/hooks/use-form-submissions.hooks.js +110 -0
- package/dist/forms/react/hooks/use-forms-list.hooks.d.ts +78 -0
- package/dist/forms/react/hooks/use-forms-list.hooks.js +103 -0
- package/dist/forms/react/index.d.ts +452 -0
- package/dist/forms/react/index.js +35 -0
- package/dist/forms/react/pages/FormEditor.d.ts +19 -0
- package/dist/forms/react/pages/FormEditor.js +40 -0
- package/dist/forms/react/pages/FormsList.d.ts +39 -0
- package/dist/forms/react/pages/FormsList.js +50 -0
- package/dist/forms/rules.d.ts +291 -0
- package/dist/forms/rules.js +338 -0
- package/dist/media/react/hooks/EditMediaPanel.hooks.js +1 -1
- package/dist/media/react/hooks/LibraryTab.hooks.d.ts +1 -1
- package/dist/media/react/hooks/LibraryTab.hooks.js +1 -1
- package/dist/media/react/hooks/MediaCard.hooks.js +6 -20
- package/dist/media/react/hooks/MediaGrid.hooks.d.ts +2 -2
- package/dist/media/react/hooks/MediaPage.hooks.d.ts +1 -1
- package/dist/media/react/hooks/MediaPage.hooks.js +1 -1
- package/dist/media/react/hooks/MediaPicker.hooks.js +1 -1
- package/dist/media/react/index.js +1 -1
- package/dist/media/react/tabs/LibraryTab.d.ts +1 -1
- package/dist/media/react/tabs/ProvidersTab.d.ts +1 -1
- package/dist/playground/react/components/Canvas.d.ts +1 -1
- package/dist/playground/react/hooks/Canvas.hooks.d.ts +1 -1
- package/dist/playground/react/hooks/Canvas.hooks.js +1 -1
- package/dist/playground/react/hooks/PlaygroundPage.hooks.d.ts +1 -1
- package/dist/playground/react/index.js +1 -1
- package/dist/playground/react/pages/PlaygroundPage.d.ts +1 -1
- package/dist/playground/react/tabs/CanvasTab.d.ts +1 -1
- package/dist/react/bind-react.d.ts +1 -45
- package/dist/react/bind-react.js +2 -27
- package/dist/react/components/ConfirmDialog/ConfirmDialog.d.ts +22 -5
- package/dist/react/components/ConfirmDialog/ConfirmDialog.hooks.d.ts +2 -2
- package/dist/react/components/ConfirmDialog/ConfirmDialog.hooks.js +17 -55
- package/dist/react/components/ConfirmDialog/ConfirmDialog.js +33 -70
- package/dist/react/components/RowMenu/RowMenu.hooks.js +14 -3
- package/dist/react/use-controller.d.ts +1 -15
- package/dist/react/use-controller.js +2 -17
- package/dist/redirects/adapters/http.d.ts +20 -0
- package/dist/redirects/adapters/http.js +31 -0
- package/dist/redirects/adapters/memory.d.ts +13 -0
- package/dist/redirects/adapters/memory.js +83 -0
- package/dist/redirects/conformance/redirects-api.conformance.d.ts +12 -0
- package/dist/redirects/conformance/redirects-api.conformance.js +66 -0
- package/dist/redirects/controllers/hit-count.controller.d.ts +14 -0
- package/dist/redirects/controllers/hit-count.controller.js +10 -0
- package/dist/redirects/controllers/import-redirects.controller.d.ts +28 -0
- package/dist/redirects/controllers/import-redirects.controller.js +29 -0
- package/dist/redirects/controllers/redirects.controller.d.ts +37 -0
- package/dist/redirects/controllers/redirects.controller.js +38 -0
- package/dist/redirects/index.d.ts +11 -0
- package/dist/redirects/index.js +10 -0
- package/dist/redirects/messages.en.d.ts +58 -0
- package/dist/redirects/messages.en.js +60 -0
- package/dist/redirects/models.d.ts +14 -0
- package/dist/redirects/models.js +2 -0
- package/dist/redirects/ports.d.ts +9 -0
- package/dist/redirects/ports.js +4 -0
- package/dist/redirects/react/components/HitCountCell.d.ts +19 -0
- package/dist/redirects/react/components/HitCountCell.js +19 -0
- package/dist/redirects/react/components/ImportRedirectsForm.d.ts +17 -0
- package/dist/redirects/react/components/ImportRedirectsForm.js +12 -0
- package/dist/redirects/react/hooks/RedirectsOptions.hooks.d.ts +27 -0
- package/dist/redirects/react/hooks/RedirectsOptions.hooks.js +15 -0
- package/dist/redirects/react/hooks/RedirectsPage.hooks.d.ts +50 -0
- package/dist/redirects/react/hooks/RedirectsPage.hooks.js +30 -0
- package/dist/redirects/react/hooks/RedirectsPorts.hooks.d.ts +10 -0
- package/dist/redirects/react/hooks/RedirectsPorts.hooks.js +11 -0
- package/dist/redirects/react/hooks/use-hit-count-cell.hooks.d.ts +19 -0
- package/dist/redirects/react/hooks/use-hit-count-cell.hooks.js +15 -0
- package/dist/redirects/react/hooks/use-import-redirects-form.hooks.d.ts +21 -0
- package/dist/redirects/react/hooks/use-import-redirects-form.hooks.js +25 -0
- package/dist/redirects/react/hooks/use-redirects.hooks.d.ts +34 -0
- package/dist/redirects/react/hooks/use-redirects.hooks.js +63 -0
- package/dist/redirects/react/hooks/wired.hooks.d.ts +55 -0
- package/dist/redirects/react/hooks/wired.hooks.js +31 -0
- package/dist/redirects/react/index.d.ts +324 -0
- package/dist/redirects/react/index.js +28 -0
- package/dist/redirects/react/pages/RedirectsPage.d.ts +15 -0
- package/dist/redirects/react/pages/RedirectsPage.js +20 -0
- package/dist/redirects/redirects.module.d.ts +77 -0
- package/dist/redirects/redirects.module.js +13 -0
- package/dist/redirects/rules.d.ts +131 -0
- package/dist/redirects/rules.js +134 -0
- package/dist/security/react/hooks/AccessTokensTab.hooks.d.ts +1 -1
- package/dist/security/react/hooks/AccessTokensTab.hooks.js +1 -1
- package/dist/security/react/hooks/RootKeyTab.hooks.d.ts +1 -1
- package/dist/security/react/hooks/RootKeyTab.hooks.js +1 -1
- package/dist/security/react/hooks/SecurityPage.hooks.d.ts +1 -1
- package/dist/security/react/index.js +1 -1
- package/dist/security/react/pages/SecurityPage.d.ts +1 -1
- package/dist/security/react/tabs/AccessTokensTab.d.ts +1 -1
- package/dist/security/react/tabs/RootKeyTab.d.ts +1 -1
- package/dist/seo/adapters/http.d.ts +31 -0
- package/dist/seo/adapters/http.js +37 -0
- package/dist/seo/adapters/memory.d.ts +28 -0
- package/dist/seo/adapters/memory.js +129 -0
- package/dist/seo/conformance/seo-api.conformance.d.ts +8 -0
- package/dist/seo/conformance/seo-api.conformance.js +44 -0
- package/dist/seo/controllers/entry-picker.controller.d.ts +21 -0
- package/dist/seo/controllers/entry-picker.controller.js +17 -0
- package/dist/seo/controllers/entry-section.controller.d.ts +20 -0
- package/dist/seo/controllers/entry-section.controller.js +7 -0
- package/dist/seo/controllers/media-ref.controller.d.ts +26 -0
- package/dist/seo/controllers/media-ref.controller.js +14 -0
- package/dist/seo/controllers/seo-entry.controller.d.ts +31 -0
- package/dist/seo/controllers/seo-entry.controller.js +52 -0
- package/dist/seo/controllers/seo.controller.d.ts +29 -0
- package/dist/seo/controllers/seo.controller.js +50 -0
- package/dist/seo/controllers/sitemap.controller.d.ts +25 -0
- package/dist/seo/controllers/sitemap.controller.js +27 -0
- package/dist/seo/index.d.ts +14 -0
- package/dist/seo/index.js +12 -0
- package/dist/seo/messages.en.d.ts +79 -0
- package/dist/seo/messages.en.js +79 -0
- package/dist/seo/models.d.ts +179 -0
- package/dist/seo/models.js +8 -0
- package/dist/seo/ports.d.ts +11 -0
- package/dist/seo/ports.js +4 -0
- package/dist/seo/react/components/MediaPickerBridge.d.ts +4 -0
- package/dist/seo/react/components/MediaPickerBridge.js +8 -0
- package/dist/seo/react/components/MediaRefField.d.ts +40 -0
- package/dist/seo/react/components/MediaRefField.js +12 -0
- package/dist/seo/react/components/SeoIcons.d.ts +13 -0
- package/dist/seo/react/components/SeoIcons.js +32 -0
- package/dist/seo/react/components/SitemapModal.d.ts +48 -0
- package/dist/seo/react/components/SitemapModal.js +72 -0
- package/dist/seo/react/hooks/MediaPickerBridge.hooks.d.ts +6 -0
- package/dist/seo/react/hooks/MediaPickerBridge.hooks.js +27 -0
- package/dist/seo/react/hooks/MediaRefField.hooks.d.ts +25 -0
- package/dist/seo/react/hooks/MediaRefField.hooks.js +30 -0
- package/dist/seo/react/hooks/SeoModuleTabs.d.ts +14 -0
- package/dist/seo/react/hooks/SeoModuleTabs.js +18 -0
- package/dist/seo/react/hooks/SeoPage.hooks.d.ts +69 -0
- package/dist/seo/react/hooks/SeoPage.hooks.js +37 -0
- package/dist/seo/react/hooks/SeoPorts.hooks.d.ts +19 -0
- package/dist/seo/react/hooks/SeoPorts.hooks.js +22 -0
- package/dist/seo/react/hooks/SitemapModal.hooks.d.ts +26 -0
- package/dist/seo/react/hooks/SitemapModal.hooks.js +20 -0
- package/dist/seo/react/hooks/use-entry-picker.hooks.d.ts +11 -0
- package/dist/seo/react/hooks/use-entry-picker.hooks.js +20 -0
- package/dist/seo/react/hooks/use-seo-entry-panel.hooks.d.ts +14 -0
- package/dist/seo/react/hooks/use-seo-entry-panel.hooks.js +26 -0
- package/dist/seo/react/hooks/use-seo-entry-section.hooks.d.ts +4 -0
- package/dist/seo/react/hooks/use-seo-entry-section.hooks.js +7 -0
- package/dist/seo/react/hooks/use-seo.hooks.d.ts +11 -0
- package/dist/seo/react/hooks/use-seo.hooks.js +29 -0
- package/dist/seo/react/hooks/use-sitemap-modal.hooks.d.ts +10 -0
- package/dist/seo/react/hooks/use-sitemap-modal.hooks.js +18 -0
- package/dist/seo/react/index.d.ts +369 -0
- package/dist/seo/react/index.js +30 -0
- package/dist/seo/react/options.d.ts +26 -0
- package/dist/seo/react/options.js +2 -0
- package/dist/seo/react/pages/SeoPage.d.ts +161 -0
- package/dist/seo/react/pages/SeoPage.js +215 -0
- package/dist/seo/rules.d.ts +142 -0
- package/dist/seo/rules.js +220 -0
- package/dist/seo/seo.module.d.ts +115 -0
- package/dist/seo/seo.module.js +14 -0
- package/dist/source-control/react/hooks/ProvidersTab.hooks.d.ts +1 -1
- package/dist/source-control/react/hooks/ProvidersTab.hooks.js +1 -1
- package/dist/source-control/react/hooks/SourceControlPage.hooks.d.ts +1 -1
- package/dist/source-control/react/index.js +1 -1
- package/dist/source-control/react/pages/SourceControlPage.d.ts +1 -1
- package/dist/source-control/react/tabs/ProvidersTab.d.ts +1 -1
- package/dist/widgets/adapters/http.d.ts +19 -0
- package/dist/widgets/adapters/http.js +33 -0
- package/dist/widgets/adapters/memory.d.ts +22 -0
- package/dist/widgets/adapters/memory.js +93 -0
- package/dist/widgets/conformance/widgets-api.conformance.d.ts +6 -0
- package/dist/widgets/conformance/widgets-api.conformance.js +55 -0
- package/dist/widgets/controllers/instance-editor.controller.d.ts +49 -0
- package/dist/widgets/controllers/instance-editor.controller.js +87 -0
- package/dist/widgets/controllers/library.controller.d.ts +33 -0
- package/dist/widgets/controllers/library.controller.js +53 -0
- package/dist/widgets/controllers/region-editor.controller.d.ts +42 -0
- package/dist/widgets/controllers/region-editor.controller.js +69 -0
- package/dist/widgets/controllers/regions.controller.d.ts +27 -0
- package/dist/widgets/controllers/regions.controller.js +44 -0
- package/dist/widgets/index.d.ts +11 -0
- package/dist/widgets/index.js +9 -0
- package/dist/widgets/messages.en.d.ts +78 -0
- package/dist/widgets/messages.en.js +83 -0
- package/dist/widgets/models.d.ts +62 -0
- package/dist/widgets/models.js +2 -0
- package/dist/widgets/ports.d.ts +79 -0
- package/dist/widgets/ports.js +5 -0
- package/dist/widgets/react/components/WidgetInstanceNotices.d.ts +14 -0
- package/dist/widgets/react/components/WidgetInstanceNotices.js +25 -0
- package/dist/widgets/react/components/WidgetRegionEditorHeaderActions.d.ts +22 -0
- package/dist/widgets/react/components/WidgetRegionEditorHeaderActions.js +18 -0
- package/dist/widgets/react/components/WidgetsLibraryNotices.d.ts +13 -0
- package/dist/widgets/react/components/WidgetsLibraryNotices.js +10 -0
- package/dist/widgets/react/hooks/WidgetsPorts.hooks.d.ts +270 -0
- package/dist/widgets/react/hooks/WidgetsPorts.hooks.js +17 -0
- package/dist/widgets/react/hooks/navigation.hooks.d.ts +9 -0
- package/dist/widgets/react/hooks/navigation.hooks.js +6 -0
- package/dist/widgets/react/hooks/page-views.hooks.d.ts +87 -0
- package/dist/widgets/react/hooks/page-views.hooks.js +30 -0
- package/dist/widgets/react/hooks/use-widget-instance-editor.hooks.d.ts +56 -0
- package/dist/widgets/react/hooks/use-widget-instance-editor.hooks.js +38 -0
- package/dist/widgets/react/hooks/use-widget-region-editor.hooks.d.ts +32 -0
- package/dist/widgets/react/hooks/use-widget-region-editor.hooks.js +22 -0
- package/dist/widgets/react/hooks/use-widget-regions.hooks.d.ts +23 -0
- package/dist/widgets/react/hooks/use-widget-regions.hooks.js +22 -0
- package/dist/widgets/react/hooks/use-widgets-library.hooks.d.ts +37 -0
- package/dist/widgets/react/hooks/use-widgets-library.hooks.js +23 -0
- package/dist/widgets/react/index.d.ts +391 -0
- package/dist/widgets/react/index.js +31 -0
- package/dist/widgets/react/pages/WidgetInstanceEditor.d.ts +23 -0
- package/dist/widgets/react/pages/WidgetInstanceEditor.js +37 -0
- package/dist/widgets/react/pages/WidgetRegionEditor.d.ts +22 -0
- package/dist/widgets/react/pages/WidgetRegionEditor.js +25 -0
- package/dist/widgets/react/pages/WidgetRegions.d.ts +21 -0
- package/dist/widgets/react/pages/WidgetRegions.js +31 -0
- package/dist/widgets/react/pages/WidgetsLibrary.d.ts +24 -0
- package/dist/widgets/react/pages/WidgetsLibrary.js +61 -0
- package/dist/widgets/rules.d.ts +94 -0
- package/dist/widgets/rules.js +83 -0
- package/dist/widgets/widgets.module.d.ts +122 -0
- package/dist/widgets/widgets.module.js +21 -0
- package/package.json +206 -9
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { FormEvent, ComponentType } from 'react';
|
|
2
|
+
import type { TabBarTab } from '@jini-ai/ui/tab-strip';
|
|
3
|
+
import type { SeoTranslator, SeoSettingsPatch, SeoSettings, SeoEntryAnalysis } from '../../models.js';
|
|
4
|
+
export { buildSeoSettingsPatch, resolveSeoTabId } from '../../rules.js';
|
|
5
|
+
export type { SeoTabId } from '../../rules.js';
|
|
6
|
+
export declare function resolveSeoTabs(_required?: Record<string, never>, { t }?: {
|
|
7
|
+
t?: SeoTranslator | undefined;
|
|
8
|
+
}): TabBarTab[];
|
|
9
|
+
export declare function sitemapStateLabel({ sitemapEnabled }: {
|
|
10
|
+
sitemapEnabled: boolean;
|
|
11
|
+
}, { t }?: {
|
|
12
|
+
t?: SeoTranslator | undefined;
|
|
13
|
+
}): string;
|
|
14
|
+
/** Module onTabChange owns the ?tab= URL. The host uses replace:true to avoid back-stack growth. */
|
|
15
|
+
export declare function useSeoPageActions({ onTabChange }: {
|
|
16
|
+
onTabChange?: ((required: {
|
|
17
|
+
tab: string;
|
|
18
|
+
}, optional?: Record<string, never>) => void) | undefined;
|
|
19
|
+
}, _optional?: Record<string, never>): {
|
|
20
|
+
changeTab: (tab: string) => void | undefined;
|
|
21
|
+
};
|
|
22
|
+
export declare function useSeoTabs({ tabId }: {
|
|
23
|
+
tabId?: string | null | undefined;
|
|
24
|
+
}, _optional?: Record<string, never>): {
|
|
25
|
+
activeTabId: "entries" | "defaults" | "sitemap";
|
|
26
|
+
tabs: TabBarTab[];
|
|
27
|
+
};
|
|
28
|
+
export declare function useAnalyzePanel({ analysis }: {
|
|
29
|
+
analysis: SeoEntryAnalysis;
|
|
30
|
+
}, _optional?: Record<string, never>): {
|
|
31
|
+
sortedIssues: import("../../../core/index.js").AdminSeoIssue[];
|
|
32
|
+
};
|
|
33
|
+
/** All seven defaults remain in one FormData submission; tabs never split this form. */
|
|
34
|
+
export declare function useSeoDefaults({ save }: {
|
|
35
|
+
save: (patch: SeoSettingsPatch) => Promise<void>;
|
|
36
|
+
}, _optional?: Record<string, never>): {
|
|
37
|
+
submit: (event: FormEvent<HTMLFormElement>) => void;
|
|
38
|
+
};
|
|
39
|
+
export interface SeoTabController {
|
|
40
|
+
locale: string;
|
|
41
|
+
settings: SeoSettings;
|
|
42
|
+
saving: boolean;
|
|
43
|
+
save: (patch: SeoSettingsPatch) => Promise<void>;
|
|
44
|
+
defaultOgImage: string;
|
|
45
|
+
setDefaultOgImage: (value: string) => void;
|
|
46
|
+
regenerateSitemap: () => void;
|
|
47
|
+
openSitemapModal: () => void;
|
|
48
|
+
}
|
|
49
|
+
/** Panel selection is presentation dispatch; this never changes the defaults form's field set. */
|
|
50
|
+
export declare function seoTabPanel({ activeTabId, controller, components }: {
|
|
51
|
+
activeTabId: import('../../rules.js').SeoTabId;
|
|
52
|
+
controller: SeoTabController;
|
|
53
|
+
components: {
|
|
54
|
+
SeoDefaultsTab: ComponentType<{
|
|
55
|
+
controller: SeoTabController;
|
|
56
|
+
}>;
|
|
57
|
+
SeoSitemapTab: ComponentType<{
|
|
58
|
+
controller: SeoTabController;
|
|
59
|
+
}>;
|
|
60
|
+
SeoEntrySection: ComponentType<{
|
|
61
|
+
locale: string;
|
|
62
|
+
}>;
|
|
63
|
+
};
|
|
64
|
+
}, _optional?: Record<string, never>): import("react").ReactElement<{
|
|
65
|
+
controller: SeoTabController;
|
|
66
|
+
}, string | import("react").JSXElementConstructor<any>> | import("react").ReactElement<{
|
|
67
|
+
locale: string;
|
|
68
|
+
}, string | import("react").JSXElementConstructor<any>>;
|
|
69
|
+
//# sourceMappingURL=SeoPage.hooks.d.ts.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createElement } from 'react';
|
|
2
|
+
import { SeoDefaultsIcon, SeoSitemapIcon, SeoEntriesIcon } from '../components/SeoIcons.js';
|
|
3
|
+
import { buildSeoSettingsPatch, resolveSeoTabId, sortIssuesBySeverity } from '../../rules.js';
|
|
4
|
+
import { useSeoOptions } from './SeoPorts.hooks.js';
|
|
5
|
+
export { buildSeoSettingsPatch, resolveSeoTabId } from '../../rules.js';
|
|
6
|
+
export function resolveSeoTabs(_required = {}, { t = key => key } = {}) {
|
|
7
|
+
return [
|
|
8
|
+
{ id: 'defaults', label: t('Site defaults'), icon: createElement(SeoDefaultsIcon), handle: 'seo-tab-defaults', handleLabel: 'Switch to the Site defaults tab — title template, meta description, social image and card handle, and the default robots directives' },
|
|
9
|
+
{ id: 'sitemap', label: t('Sitemap'), icon: createElement(SeoSitemapIcon), handle: 'seo-tab-sitemap', handleLabel: 'Switch to the Sitemap tab — rebuild the cached sitemap, or view the URLs it contains' },
|
|
10
|
+
{ id: 'entries', label: t('Pages & posts'), icon: createElement(SeoEntriesIcon), handle: 'seo-tab-entries', handleLabel: 'Switch to the Pages & posts tab — override and analyze the SEO metadata of one page or post' },
|
|
11
|
+
];
|
|
12
|
+
}
|
|
13
|
+
export function sitemapStateLabel({ sitemapEnabled }, { t = key => key } = {}) {
|
|
14
|
+
return t(sitemapEnabled ? 'This site publishes a sitemap.' : 'This site does not publish a sitemap. Turn it on under Site defaults.');
|
|
15
|
+
}
|
|
16
|
+
/** Module onTabChange owns the ?tab= URL. The host uses replace:true to avoid back-stack growth. */
|
|
17
|
+
export function useSeoPageActions({ onTabChange }, _optional = {}) { return { changeTab: (tab) => onTabChange?.({ tab }) }; }
|
|
18
|
+
export function useSeoTabs({ tabId }, _optional = {}) {
|
|
19
|
+
const { t } = useSeoOptions();
|
|
20
|
+
return { activeTabId: resolveSeoTabId({ tabId }), tabs: resolveSeoTabs({}, { t }) };
|
|
21
|
+
}
|
|
22
|
+
export function useAnalyzePanel({ analysis }, _optional = {}) {
|
|
23
|
+
return { sortedIssues: sortIssuesBySeverity({ issues: analysis.issues }) };
|
|
24
|
+
}
|
|
25
|
+
/** All seven defaults remain in one FormData submission; tabs never split this form. */
|
|
26
|
+
export function useSeoDefaults({ save }, _optional = {}) {
|
|
27
|
+
return { submit: (event) => { event.preventDefault(); void save(buildSeoSettingsPatch({ form: new FormData(event.currentTarget) })); } };
|
|
28
|
+
}
|
|
29
|
+
/** Panel selection is presentation dispatch; this never changes the defaults form's field set. */
|
|
30
|
+
export function seoTabPanel({ activeTabId, controller, components }, _optional = {}) {
|
|
31
|
+
if (activeTabId === 'sitemap')
|
|
32
|
+
return createElement(components.SeoSitemapTab, { controller });
|
|
33
|
+
if (activeTabId === 'entries')
|
|
34
|
+
return createElement(components.SeoEntrySection, { locale: controller.locale });
|
|
35
|
+
return createElement(components.SeoDefaultsTab, { controller });
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=SeoPage.hooks.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AdminSeoPort, SeoEventsPort } from '../../ports.js';
|
|
2
|
+
import type { MediaPickerPort } from '../../../contracts/media-picker.js';
|
|
3
|
+
import type { SeoReactOptions } from '../options.js';
|
|
4
|
+
export interface SeoPorts {
|
|
5
|
+
readonly seoApi: AdminSeoPort;
|
|
6
|
+
readonly seoEvents?: SeoEventsPort;
|
|
7
|
+
readonly mediaPicker?: MediaPickerPort;
|
|
8
|
+
}
|
|
9
|
+
export declare const SeoPortsContext: import("react").Context<SeoPorts | null>;
|
|
10
|
+
export declare const SeoOptionsContext: import("react").Context<SeoReactOptions | null>;
|
|
11
|
+
export declare function useSeoPorts(_required?: Record<string, never>, _optional?: Record<string, never>): SeoPorts;
|
|
12
|
+
export declare function useSeoOptions(_required?: Record<string, never>, _optional?: Record<string, never>): SeoReactOptions;
|
|
13
|
+
/** The legacy markup's locale argument is metadata only; translation is injected by the host. */
|
|
14
|
+
export declare function useSeoCopy(_required?: Record<string, never>, _optional?: Record<string, never>): (required: {
|
|
15
|
+
locale?: string;
|
|
16
|
+
key: string;
|
|
17
|
+
vars?: Record<string, string | number>;
|
|
18
|
+
}) => string;
|
|
19
|
+
//# sourceMappingURL=SeoPorts.hooks.d.ts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
import { AdminConfigError } from '../../../core/module/index.js';
|
|
3
|
+
export const SeoPortsContext = createContext(null);
|
|
4
|
+
export const SeoOptionsContext = createContext(null);
|
|
5
|
+
export function useSeoPorts(_required = {}, _optional = {}) {
|
|
6
|
+
const ports = useContext(SeoPortsContext);
|
|
7
|
+
if (!ports)
|
|
8
|
+
throw new AdminConfigError({ issues: ['React scope unavailable: seo'] });
|
|
9
|
+
return ports;
|
|
10
|
+
}
|
|
11
|
+
export function useSeoOptions(_required = {}, _optional = {}) {
|
|
12
|
+
const options = useContext(SeoOptionsContext);
|
|
13
|
+
if (!options)
|
|
14
|
+
throw new AdminConfigError({ issues: ['React options unavailable: seo (siteUrl is required)'] });
|
|
15
|
+
return options;
|
|
16
|
+
}
|
|
17
|
+
/** The legacy markup's locale argument is metadata only; translation is injected by the host. */
|
|
18
|
+
export function useSeoCopy(_required = {}, _optional = {}) {
|
|
19
|
+
const { t = key => key } = useSeoOptions();
|
|
20
|
+
return (required) => t(required.key, required.vars);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=SeoPorts.hooks.js.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { SitemapModalController } from '../../models.js';
|
|
2
|
+
/** Refetch only after accepted regeneration; a failed write must leave the viewed XML alone. */
|
|
3
|
+
export declare function useSitemapModalRegenerate({ onRegenerate, refetch }: {
|
|
4
|
+
onRegenerate: () => Promise<boolean>;
|
|
5
|
+
refetch: () => void;
|
|
6
|
+
}, _optional?: Record<string, never>): {
|
|
7
|
+
handleRegenerate: () => Promise<void>;
|
|
8
|
+
};
|
|
9
|
+
export declare function useSitemapTable({ modal }: {
|
|
10
|
+
modal: SitemapModalController;
|
|
11
|
+
}, _optional?: Record<string, never>): {
|
|
12
|
+
rowHandles: string[];
|
|
13
|
+
};
|
|
14
|
+
export declare function useSitemapViewToggle({ modal }: {
|
|
15
|
+
modal: SitemapModalController;
|
|
16
|
+
}, _optional?: Record<string, never>): {
|
|
17
|
+
toggleView: () => void;
|
|
18
|
+
};
|
|
19
|
+
export declare function useSitemapPresentation({ locale, modal }: {
|
|
20
|
+
locale: string;
|
|
21
|
+
modal: SitemapModalController;
|
|
22
|
+
}, _optional?: Record<string, never>): {
|
|
23
|
+
title: string;
|
|
24
|
+
sourceUrl: string;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=SitemapModal.hooks.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useSeoCopy, useSeoOptions } from './SeoPorts.hooks.js';
|
|
2
|
+
import { buildAgentListHandles } from '@jini-ai/agentic';
|
|
3
|
+
/** Refetch only after accepted regeneration; a failed write must leave the viewed XML alone. */
|
|
4
|
+
export function useSitemapModalRegenerate({ onRegenerate, refetch }, _optional = {}) {
|
|
5
|
+
return { handleRegenerate: async () => { if (await onRegenerate())
|
|
6
|
+
refetch(); } };
|
|
7
|
+
}
|
|
8
|
+
export function useSitemapTable({ modal }, _optional = {}) {
|
|
9
|
+
return { rowHandles: buildAgentListHandles({ prefix: 'seo-sitemap-row', ids: modal.filteredEntries.map(entry => entry.loc) }) };
|
|
10
|
+
}
|
|
11
|
+
export function useSitemapViewToggle({ modal }, _optional = {}) {
|
|
12
|
+
return { toggleView: () => modal.setView(modal.view === 'raw' ? 'table' : 'raw') };
|
|
13
|
+
}
|
|
14
|
+
export function useSitemapPresentation({ locale, modal }, _optional = {}) {
|
|
15
|
+
const t = useSeoCopy();
|
|
16
|
+
const { siteUrl } = useSeoOptions();
|
|
17
|
+
const title = modal.status === 'ready' ? t({ locale, key: 'Sitemap · {count} URLs' }).replace('{count}', String(modal.entries.length)) : t({ locale, key: 'Sitemap' });
|
|
18
|
+
return { title, sourceUrl: `${siteUrl().replace(/\/$/, '')}/sitemap.xml` };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=SitemapModal.hooks.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EntryPickerController, SeoTranslator, SeoErrorFormatter } from '../../models.js';
|
|
2
|
+
import type { AdminSeoPort } from '../../ports.js';
|
|
3
|
+
export type { EntryPickerController } from '../../models.js';
|
|
4
|
+
export declare function useEntryPicker({ api }: {
|
|
5
|
+
api: AdminSeoPort;
|
|
6
|
+
}, { t, describeError }?: {
|
|
7
|
+
t?: SeoTranslator | undefined;
|
|
8
|
+
describeError?: SeoErrorFormatter | undefined;
|
|
9
|
+
}): EntryPickerController;
|
|
10
|
+
export declare function useWiredEntryPicker(_required?: Record<string, never>, _optional?: Record<string, never>): EntryPickerController;
|
|
11
|
+
//# sourceMappingURL=use-entry-picker.hooks.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { describeSeoError } from '../../models.js';
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
import { useController } from '../../../core/react/use-controller.js';
|
|
4
|
+
import { createEntryPickerController } from '../../controllers/entry-picker.controller.js';
|
|
5
|
+
import { initialEntryPickerState } from '../../models.js';
|
|
6
|
+
import { useSeoOptions, useSeoPorts } from './SeoPorts.hooks.js';
|
|
7
|
+
export function useEntryPicker({ api }, { t, describeError } = {}) {
|
|
8
|
+
const translator = useRef(t);
|
|
9
|
+
translator.current = t;
|
|
10
|
+
const formatter = useRef(describeError);
|
|
11
|
+
formatter.current = describeError;
|
|
12
|
+
const { snapshot } = useController({ create: () => createEntryPickerController({ api }, { t: (key, vars) => translator.current?.(key, vars) ?? key, describeError: required => formatter.current ? formatter.current(required) : describeSeoError(required) }), dependencies: [api] }, { start: ({ controller }) => { void controller.load({}); } });
|
|
13
|
+
return snapshot ?? initialEntryPickerState;
|
|
14
|
+
}
|
|
15
|
+
export function useWiredEntryPicker(_required = {}, _optional = {}) {
|
|
16
|
+
const { seoApi: api } = useSeoPorts();
|
|
17
|
+
const { t, describeError } = useSeoOptions();
|
|
18
|
+
return useEntryPicker({ api }, { t, describeError });
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=use-entry-picker.hooks.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SeoEntryPanelController, SeoTranslator, SeoErrorFormatter } from '../../models.js';
|
|
2
|
+
import type { AdminSeoPort } from '../../ports.js';
|
|
3
|
+
export type { SeoEntryPanelController, SeoEntryPanelOptions } from '../../models.js';
|
|
4
|
+
export declare function useSeoEntryPanel({ api, entryId }: {
|
|
5
|
+
api: AdminSeoPort;
|
|
6
|
+
entryId: string;
|
|
7
|
+
}, { t, describeError }?: {
|
|
8
|
+
t?: SeoTranslator | undefined;
|
|
9
|
+
describeError?: SeoErrorFormatter | undefined;
|
|
10
|
+
}): SeoEntryPanelController;
|
|
11
|
+
export declare function useWiredSeoEntryPanel({ entryId }: {
|
|
12
|
+
entryId: string;
|
|
13
|
+
}, _optional?: Record<string, never>): SeoEntryPanelController;
|
|
14
|
+
//# sourceMappingURL=use-seo-entry-panel.hooks.d.ts.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { describeSeoError } from '../../models.js';
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
import { useController } from '../../../core/react/use-controller.js';
|
|
4
|
+
import { createSeoEntryController } from '../../controllers/seo-entry.controller.js';
|
|
5
|
+
import { initialSeoEntryState } from '../../models.js';
|
|
6
|
+
import { useSeoOptions, useSeoPorts } from './SeoPorts.hooks.js';
|
|
7
|
+
export function useSeoEntryPanel({ api, entryId }, { t, describeError } = {}) {
|
|
8
|
+
const translator = useRef(t);
|
|
9
|
+
translator.current = t;
|
|
10
|
+
const formatter = useRef(describeError);
|
|
11
|
+
formatter.current = describeError;
|
|
12
|
+
const { controller, snapshot } = useController({ create: () => createSeoEntryController({ api, entryId }, { t: (key, vars) => translator.current?.(key, vars) ?? key, describeError: required => formatter.current ? formatter.current(required) : describeSeoError(required) }), dependencies: [api, entryId] }, { start: ({ controller }) => { void controller.load({}); } });
|
|
13
|
+
const state = snapshot ?? initialSeoEntryState;
|
|
14
|
+
return {
|
|
15
|
+
...state,
|
|
16
|
+
fieldValue: (key, resolvedValue) => controller ? controller.fieldValue({ key, resolvedValue }) : resolvedValue,
|
|
17
|
+
setField: (key, value) => controller?.setField({ key, value }),
|
|
18
|
+
save: async () => { await controller?.save({}); },
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function useWiredSeoEntryPanel({ entryId }, _optional = {}) {
|
|
22
|
+
const { seoApi: api } = useSeoPorts();
|
|
23
|
+
const { t, describeError } = useSeoOptions();
|
|
24
|
+
return useSeoEntryPanel({ api, entryId }, { t, describeError });
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=use-seo-entry-panel.hooks.js.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SeoEntrySectionController } from '../../models.js';
|
|
2
|
+
export type { SeoEntrySectionController } from '../../models.js';
|
|
3
|
+
export declare function useSeoEntrySection(_required?: Record<string, never>, _optional?: Record<string, never>): SeoEntrySectionController;
|
|
4
|
+
//# sourceMappingURL=use-seo-entry-section.hooks.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { useController } from '../../../core/react/use-controller.js';
|
|
2
|
+
import { createSeoEntrySectionController } from '../../controllers/entry-section.controller.js';
|
|
3
|
+
export function useSeoEntrySection(_required = {}, _optional = {}) {
|
|
4
|
+
const { controller, snapshot } = useController({ create: () => createSeoEntrySectionController({}), dependencies: [] });
|
|
5
|
+
return { entryId: snapshot?.entryId ?? '', setEntryId: entryId => controller?.setEntryId({ entryId }) };
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=use-seo-entry-section.hooks.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SeoController, SeoTranslator } from '../../models.js';
|
|
2
|
+
import type { AdminSeoPort, SeoEventsPort } from '../../ports.js';
|
|
3
|
+
export type { SeoController } from '../../models.js';
|
|
4
|
+
export declare function useSeo({ api }: {
|
|
5
|
+
api: AdminSeoPort;
|
|
6
|
+
}, { t, events }?: {
|
|
7
|
+
t?: SeoTranslator | undefined;
|
|
8
|
+
events?: SeoEventsPort | undefined;
|
|
9
|
+
}): SeoController;
|
|
10
|
+
export declare function useWiredSeo(_required?: Record<string, never>, _optional?: Record<string, never>): SeoController;
|
|
11
|
+
//# sourceMappingURL=use-seo.hooks.d.ts.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
import { useController } from '../../../core/react/use-controller.js';
|
|
3
|
+
import { createSeoController } from '../../controllers/seo.controller.js';
|
|
4
|
+
import { initialSeoState } from '../../models.js';
|
|
5
|
+
import { useSeoOptions, useSeoPorts } from './SeoPorts.hooks.js';
|
|
6
|
+
export function useSeo({ api }, { t, events } = {}) {
|
|
7
|
+
const translator = useRef(t);
|
|
8
|
+
translator.current = t;
|
|
9
|
+
const { controller, snapshot } = useController({ create: () => createSeoController({ api }, { t: (key, vars) => translator.current?.(key, vars) ?? key }), dependencies: [api] }, { start: ({ controller }) => { void controller.load({}); } });
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
if (!controller || !events)
|
|
12
|
+
return;
|
|
13
|
+
return events.subscribe({ onRefresh: () => { void controller.load({}); } });
|
|
14
|
+
}, [controller, events]);
|
|
15
|
+
return {
|
|
16
|
+
...(snapshot ?? initialSeoState), locale: 'en',
|
|
17
|
+
save: async (patch) => { await controller?.save({ patch }); },
|
|
18
|
+
setDefaultOgImage: value => controller?.setDefaultOgImage({ value }),
|
|
19
|
+
regenerateSitemap: async () => await controller?.regenerateSitemap({}) ?? false,
|
|
20
|
+
openSitemapModal: () => controller?.openSitemapModal({}),
|
|
21
|
+
closeSitemapModal: () => controller?.closeSitemapModal({}),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function useWiredSeo(_required = {}, _optional = {}) {
|
|
25
|
+
const { seoApi: api, seoEvents: events } = useSeoPorts();
|
|
26
|
+
const { t } = useSeoOptions();
|
|
27
|
+
return useSeo({ api }, { t, events });
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=use-seo.hooks.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SitemapModalController, SitemapModalInputs } from '../../models.js';
|
|
2
|
+
import type { AdminSeoPort } from '../../ports.js';
|
|
3
|
+
export type { SitemapModalController, SitemapModalInputs } from '../../models.js';
|
|
4
|
+
export declare function useSitemapModal({ api, enabled }: {
|
|
5
|
+
api: AdminSeoPort;
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
onClose?: () => void;
|
|
8
|
+
}, _optional?: Record<string, never>): SitemapModalController;
|
|
9
|
+
export declare function useWiredSitemapModal({ enabled, onClose }: SitemapModalInputs, _optional?: Record<string, never>): SitemapModalController;
|
|
10
|
+
//# sourceMappingURL=use-sitemap-modal.hooks.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { useController } from '../../../core/react/use-controller.js';
|
|
3
|
+
import { createSitemapController } from '../../controllers/sitemap.controller.js';
|
|
4
|
+
import { parseSitemapXml, filterSitemapEntries } from '../../rules.js';
|
|
5
|
+
import { useSeoPorts } from './SeoPorts.hooks.js';
|
|
6
|
+
export function useSitemapModal({ api, enabled }, _optional = {}) {
|
|
7
|
+
const { controller, snapshot } = useController({ create: () => createSitemapController({ api, enabled }), dependencies: [api, enabled] }, { start: ({ controller }) => { void controller.load({}); } });
|
|
8
|
+
const state = snapshot ?? { status: enabled ? 'loading' : 'disabled', error: null, xmlText: '', filter: '', view: 'table' };
|
|
9
|
+
// Parse only when text/status changes, never on each filter keystroke.
|
|
10
|
+
const entries = useMemo(() => state.status === 'ready' ? parseSitemapXml({ xmlText: state.xmlText }) : [], [state.status, state.xmlText]);
|
|
11
|
+
const filteredEntries = useMemo(() => filterSitemapEntries({ entries, query: state.filter }), [entries, state.filter]);
|
|
12
|
+
return { ...state, entries, filteredEntries, setFilter: value => controller?.setFilter({ value }), setView: view => controller?.setView({ view }), refetch: () => { void controller?.load({}); } };
|
|
13
|
+
}
|
|
14
|
+
export function useWiredSitemapModal({ enabled, onClose }, _optional = {}) {
|
|
15
|
+
const { seoApi: api } = useSeoPorts();
|
|
16
|
+
return useSitemapModal({ api, enabled, onClose });
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=use-sitemap-modal.hooks.js.map
|