@kywi-software/core 0.1.0 → 0.2.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/dist/admin/app.d.ts +69 -0
- package/dist/admin/app.d.ts.map +1 -0
- package/dist/admin/app.js +98 -0
- package/dist/admin/app.js.map +1 -0
- package/dist/admin/chrome.d.ts +37 -0
- package/dist/admin/chrome.d.ts.map +1 -0
- package/dist/admin/chrome.js +162 -0
- package/dist/admin/chrome.js.map +1 -0
- package/dist/admin/context.d.ts +58 -0
- package/dist/admin/context.d.ts.map +1 -0
- package/dist/admin/context.js +31 -0
- package/dist/admin/context.js.map +1 -0
- package/dist/admin/index.d.ts +9 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +12 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/nav.d.ts +21 -1
- package/dist/admin/nav.d.ts.map +1 -1
- package/dist/admin/nav.js +45 -88
- package/dist/admin/nav.js.map +1 -1
- package/dist/admin/primitives.d.ts +52 -0
- package/dist/admin/primitives.d.ts.map +1 -0
- package/dist/admin/primitives.js +78 -0
- package/dist/admin/primitives.js.map +1 -0
- package/dist/admin/registry.d.ts +130 -0
- package/dist/admin/registry.d.ts.map +1 -0
- package/dist/admin/registry.js +456 -0
- package/dist/admin/registry.js.map +1 -0
- package/dist/admin/server.d.ts +154 -0
- package/dist/admin/server.d.ts.map +1 -0
- package/dist/admin/server.js +121 -0
- package/dist/admin/server.js.map +1 -0
- package/dist/admin/shell.d.ts +27 -1
- package/dist/admin/shell.d.ts.map +1 -1
- package/dist/admin/shell.js +10 -4
- package/dist/admin/shell.js.map +1 -1
- package/dist/admin/styles/admin.css +24 -0
- package/dist/admin/surface-matcher.d.ts +51 -0
- package/dist/admin/surface-matcher.d.ts.map +1 -0
- package/dist/admin/surface-matcher.js +181 -0
- package/dist/admin/surface-matcher.js.map +1 -0
- package/dist/admin/surfaces/approvals/approvals-data.d.ts +17 -0
- package/dist/admin/surfaces/approvals/approvals-data.d.ts.map +1 -0
- package/dist/admin/surfaces/approvals/approvals-data.js +55 -0
- package/dist/admin/surfaces/approvals/approvals-data.js.map +1 -0
- package/dist/admin/surfaces/approvals/approvals-index.d.ts +3 -0
- package/dist/admin/surfaces/approvals/approvals-index.d.ts.map +1 -0
- package/dist/admin/surfaces/approvals/approvals-index.js +75 -0
- package/dist/admin/surfaces/approvals/approvals-index.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-data.d.ts +107 -0
- package/dist/admin/surfaces/audiences/audiences-data.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-data.js +216 -0
- package/dist/admin/surfaces/audiences/audiences-data.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-detail.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-detail.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-detail.js +78 -0
- package/dist/admin/surfaces/audiences/audiences-detail.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-edit.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-edit.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-edit.js +55 -0
- package/dist/admin/surfaces/audiences/audiences-edit.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-fields.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-fields.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-fields.js +56 -0
- package/dist/admin/surfaces/audiences/audiences-fields.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-list.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-list.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-list.js +50 -0
- package/dist/admin/surfaces/audiences/audiences-list.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-new.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-new.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-new.js +54 -0
- package/dist/admin/surfaces/audiences/audiences-new.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-preview-tokens.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-preview-tokens.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-preview-tokens.js +123 -0
- package/dist/admin/surfaces/audiences/audiences-preview-tokens.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-selfid-widget.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-selfid-widget.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-selfid-widget.js +50 -0
- package/dist/admin/surfaces/audiences/audiences-selfid-widget.js.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-test.d.ts +3 -0
- package/dist/admin/surfaces/audiences/audiences-test.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/audiences-test.js +39 -0
- package/dist/admin/surfaces/audiences/audiences-test.js.map +1 -0
- package/dist/admin/surfaces/audiences/states.d.ts +10 -0
- package/dist/admin/surfaces/audiences/states.d.ts.map +1 -0
- package/dist/admin/surfaces/audiences/states.js +11 -0
- package/dist/admin/surfaces/audiences/states.js.map +1 -0
- package/dist/admin/surfaces/changesets/changesets-data.d.ts +35 -0
- package/dist/admin/surfaces/changesets/changesets-data.d.ts.map +1 -0
- package/dist/admin/surfaces/changesets/changesets-data.js +151 -0
- package/dist/admin/surfaces/changesets/changesets-data.js.map +1 -0
- package/dist/admin/surfaces/changesets/changesets-detail.d.ts +3 -0
- package/dist/admin/surfaces/changesets/changesets-detail.d.ts.map +1 -0
- package/dist/admin/surfaces/changesets/changesets-detail.js +84 -0
- package/dist/admin/surfaces/changesets/changesets-detail.js.map +1 -0
- package/dist/admin/surfaces/changesets/changesets-index.d.ts +3 -0
- package/dist/admin/surfaces/changesets/changesets-index.d.ts.map +1 -0
- package/dist/admin/surfaces/changesets/changesets-index.js +62 -0
- package/dist/admin/surfaces/changesets/changesets-index.js.map +1 -0
- package/dist/admin/surfaces/comments/comment-moderation.d.ts +18 -0
- package/dist/admin/surfaces/comments/comment-moderation.d.ts.map +1 -0
- package/dist/admin/surfaces/comments/comment-moderation.js +36 -0
- package/dist/admin/surfaces/comments/comment-moderation.js.map +1 -0
- package/dist/admin/surfaces/comments/comments-data.d.ts +23 -0
- package/dist/admin/surfaces/comments/comments-data.d.ts.map +1 -0
- package/dist/admin/surfaces/comments/comments-data.js +81 -0
- package/dist/admin/surfaces/comments/comments-data.js.map +1 -0
- package/dist/admin/surfaces/comments/comments-index.d.ts +3 -0
- package/dist/admin/surfaces/comments/comments-index.d.ts.map +1 -0
- package/dist/admin/surfaces/comments/comments-index.js +73 -0
- package/dist/admin/surfaces/comments/comments-index.js.map +1 -0
- package/dist/admin/surfaces/content/content-edit.d.ts +3 -0
- package/dist/admin/surfaces/content/content-edit.d.ts.map +1 -0
- package/dist/admin/surfaces/content/content-edit.js +321 -0
- package/dist/admin/surfaces/content/content-edit.js.map +1 -0
- package/dist/admin/surfaces/content/content-index.d.ts +3 -0
- package/dist/admin/surfaces/content/content-index.d.ts.map +1 -0
- package/dist/admin/surfaces/content/content-index.js +21 -0
- package/dist/admin/surfaces/content/content-index.js.map +1 -0
- package/dist/admin/surfaces/content/content-list.d.ts +3 -0
- package/dist/admin/surfaces/content/content-list.d.ts.map +1 -0
- package/dist/admin/surfaces/content/content-list.js +70 -0
- package/dist/admin/surfaces/content/content-list.js.map +1 -0
- package/dist/admin/surfaces/content/content-new.d.ts +3 -0
- package/dist/admin/surfaces/content/content-new.d.ts.map +1 -0
- package/dist/admin/surfaces/content/content-new.js +109 -0
- package/dist/admin/surfaces/content/content-new.js.map +1 -0
- package/dist/admin/surfaces/content/content-translation-bar.d.ts +12 -0
- package/dist/admin/surfaces/content/content-translation-bar.d.ts.map +1 -0
- package/dist/admin/surfaces/content/content-translation-bar.js +65 -0
- package/dist/admin/surfaces/content/content-translation-bar.js.map +1 -0
- package/dist/admin/surfaces/content/runtime-content-types.d.ts +41 -0
- package/dist/admin/surfaces/content/runtime-content-types.d.ts.map +1 -0
- package/dist/admin/surfaces/content/runtime-content-types.js +51 -0
- package/dist/admin/surfaces/content/runtime-content-types.js.map +1 -0
- package/dist/admin/surfaces/contentTree/content-tree.d.ts +3 -0
- package/dist/admin/surfaces/contentTree/content-tree.d.ts.map +1 -0
- package/dist/admin/surfaces/contentTree/content-tree.js +179 -0
- package/dist/admin/surfaces/contentTree/content-tree.js.map +1 -0
- package/dist/admin/surfaces/contentTree/move-to-picker.d.ts +12 -0
- package/dist/admin/surfaces/contentTree/move-to-picker.d.ts.map +1 -0
- package/dist/admin/surfaces/contentTree/move-to-picker.js +77 -0
- package/dist/admin/surfaces/contentTree/move-to-picker.js.map +1 -0
- package/dist/admin/surfaces/contentTypes/content-types-designer.d.ts +3 -0
- package/dist/admin/surfaces/contentTypes/content-types-designer.d.ts.map +1 -0
- package/dist/admin/surfaces/contentTypes/content-types-designer.js +260 -0
- package/dist/admin/surfaces/contentTypes/content-types-designer.js.map +1 -0
- package/dist/admin/surfaces/contentTypes/content-types-list.d.ts +3 -0
- package/dist/admin/surfaces/contentTypes/content-types-list.d.ts.map +1 -0
- package/dist/admin/surfaces/contentTypes/content-types-list.js +69 -0
- package/dist/admin/surfaces/contentTypes/content-types-list.js.map +1 -0
- package/dist/admin/surfaces/dashboard/dashboard-index.d.ts +3 -0
- package/dist/admin/surfaces/dashboard/dashboard-index.d.ts.map +1 -0
- package/dist/admin/surfaces/dashboard/dashboard-index.js +100 -0
- package/dist/admin/surfaces/dashboard/dashboard-index.js.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-data.d.ts +12 -0
- package/dist/admin/surfaces/experiments/experiments-data.d.ts.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-data.js +89 -0
- package/dist/admin/surfaces/experiments/experiments-data.js.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-detail.d.ts +3 -0
- package/dist/admin/surfaces/experiments/experiments-detail.d.ts.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-detail.js +87 -0
- package/dist/admin/surfaces/experiments/experiments-detail.js.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-list.d.ts +3 -0
- package/dist/admin/surfaces/experiments/experiments-list.d.ts.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-list.js +37 -0
- package/dist/admin/surfaces/experiments/experiments-list.js.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-new.d.ts +3 -0
- package/dist/admin/surfaces/experiments/experiments-new.d.ts.map +1 -0
- package/dist/admin/surfaces/experiments/experiments-new.js +33 -0
- package/dist/admin/surfaces/experiments/experiments-new.js.map +1 -0
- package/dist/admin/surfaces/experiments/states.d.ts +10 -0
- package/dist/admin/surfaces/experiments/states.d.ts.map +1 -0
- package/dist/admin/surfaces/experiments/states.js +11 -0
- package/dist/admin/surfaces/experiments/states.js.map +1 -0
- package/dist/admin/surfaces/extensions/extensions-data.d.ts +59 -0
- package/dist/admin/surfaces/extensions/extensions-data.d.ts.map +1 -0
- package/dist/admin/surfaces/extensions/extensions-data.js +71 -0
- package/dist/admin/surfaces/extensions/extensions-data.js.map +1 -0
- package/dist/admin/surfaces/extensions/extensions-import-export.d.ts +3 -0
- package/dist/admin/surfaces/extensions/extensions-import-export.d.ts.map +1 -0
- package/dist/admin/surfaces/extensions/extensions-import-export.js +77 -0
- package/dist/admin/surfaces/extensions/extensions-import-export.js.map +1 -0
- package/dist/admin/surfaces/extensions/extensions-list.d.ts +3 -0
- package/dist/admin/surfaces/extensions/extensions-list.d.ts.map +1 -0
- package/dist/admin/surfaces/extensions/extensions-list.js +106 -0
- package/dist/admin/surfaces/extensions/extensions-list.js.map +1 -0
- package/dist/admin/surfaces/extensions/form-modal.d.ts +17 -0
- package/dist/admin/surfaces/extensions/form-modal.d.ts.map +1 -0
- package/dist/admin/surfaces/extensions/form-modal.js +27 -0
- package/dist/admin/surfaces/extensions/form-modal.js.map +1 -0
- package/dist/admin/surfaces/feeds/feed-editor.d.ts +8 -0
- package/dist/admin/surfaces/feeds/feed-editor.d.ts.map +1 -0
- package/dist/admin/surfaces/feeds/feed-editor.js +120 -0
- package/dist/admin/surfaces/feeds/feed-editor.js.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-data.d.ts +35 -0
- package/dist/admin/surfaces/feeds/feeds-data.d.ts.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-data.js +81 -0
- package/dist/admin/surfaces/feeds/feeds-data.js.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-detail.d.ts +3 -0
- package/dist/admin/surfaces/feeds/feeds-detail.d.ts.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-detail.js +36 -0
- package/dist/admin/surfaces/feeds/feeds-detail.js.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-list.d.ts +3 -0
- package/dist/admin/surfaces/feeds/feeds-list.d.ts.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-list.js +49 -0
- package/dist/admin/surfaces/feeds/feeds-list.js.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-new.d.ts +3 -0
- package/dist/admin/surfaces/feeds/feeds-new.d.ts.map +1 -0
- package/dist/admin/surfaces/feeds/feeds-new.js +7 -0
- package/dist/admin/surfaces/feeds/feeds-new.js.map +1 -0
- package/dist/admin/surfaces/forms/form-editor.d.ts +5 -0
- package/dist/admin/surfaces/forms/form-editor.d.ts.map +1 -0
- package/dist/admin/surfaces/forms/form-editor.js +59 -0
- package/dist/admin/surfaces/forms/form-editor.js.map +1 -0
- package/dist/admin/surfaces/forms/forms-data.d.ts +52 -0
- package/dist/admin/surfaces/forms/forms-data.d.ts.map +1 -0
- package/dist/admin/surfaces/forms/forms-data.js +106 -0
- package/dist/admin/surfaces/forms/forms-data.js.map +1 -0
- package/dist/admin/surfaces/forms/forms-edit.d.ts +3 -0
- package/dist/admin/surfaces/forms/forms-edit.d.ts.map +1 -0
- package/dist/admin/surfaces/forms/forms-edit.js +40 -0
- package/dist/admin/surfaces/forms/forms-edit.js.map +1 -0
- package/dist/admin/surfaces/forms/forms-list.d.ts +3 -0
- package/dist/admin/surfaces/forms/forms-list.d.ts.map +1 -0
- package/dist/admin/surfaces/forms/forms-list.js +53 -0
- package/dist/admin/surfaces/forms/forms-list.js.map +1 -0
- package/dist/admin/surfaces/forms/forms-new.d.ts +3 -0
- package/dist/admin/surfaces/forms/forms-new.d.ts.map +1 -0
- package/dist/admin/surfaces/forms/forms-new.js +7 -0
- package/dist/admin/surfaces/forms/forms-new.js.map +1 -0
- package/dist/admin/surfaces/forms/forms-submissions.d.ts +3 -0
- package/dist/admin/surfaces/forms/forms-submissions.d.ts.map +1 -0
- package/dist/admin/surfaces/forms/forms-submissions.js +125 -0
- package/dist/admin/surfaces/forms/forms-submissions.js.map +1 -0
- package/dist/admin/surfaces/layouts/layout-editor-client.d.ts +8 -0
- package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -0
- package/dist/admin/surfaces/layouts/layout-editor-client.js +77 -0
- package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-data.d.ts +53 -0
- package/dist/admin/surfaces/layouts/layouts-data.d.ts.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-data.js +61 -0
- package/dist/admin/surfaces/layouts/layouts-data.js.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-detail.d.ts +3 -0
- package/dist/admin/surfaces/layouts/layouts-detail.d.ts.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-detail.js +38 -0
- package/dist/admin/surfaces/layouts/layouts-detail.js.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-list.d.ts +3 -0
- package/dist/admin/surfaces/layouts/layouts-list.d.ts.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-list.js +62 -0
- package/dist/admin/surfaces/layouts/layouts-list.js.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-new.d.ts +3 -0
- package/dist/admin/surfaces/layouts/layouts-new.d.ts.map +1 -0
- package/dist/admin/surfaces/layouts/layouts-new.js +7 -0
- package/dist/admin/surfaces/layouts/layouts-new.js.map +1 -0
- package/dist/admin/surfaces/login.d.ts +20 -0
- package/dist/admin/surfaces/login.d.ts.map +1 -0
- package/dist/admin/surfaces/login.js +92 -0
- package/dist/admin/surfaces/login.js.map +1 -0
- package/dist/admin/surfaces/media/library.d.ts +3 -0
- package/dist/admin/surfaces/media/library.d.ts.map +1 -0
- package/dist/admin/surfaces/media/library.js +7 -0
- package/dist/admin/surfaces/media/library.js.map +1 -0
- package/dist/admin/surfaces/media/media-client.d.ts +4 -0
- package/dist/admin/surfaces/media/media-client.d.ts.map +1 -0
- package/dist/admin/surfaces/media/media-client.js +203 -0
- package/dist/admin/surfaces/media/media-client.js.map +1 -0
- package/dist/admin/surfaces/media/upload.d.ts +3 -0
- package/dist/admin/surfaces/media/upload.d.ts.map +1 -0
- package/dist/admin/surfaces/media/upload.js +7 -0
- package/dist/admin/surfaces/media/upload.js.map +1 -0
- package/dist/admin/surfaces/plugins/plugins-data.d.ts +37 -0
- package/dist/admin/surfaces/plugins/plugins-data.d.ts.map +1 -0
- package/dist/admin/surfaces/plugins/plugins-data.js +31 -0
- package/dist/admin/surfaces/plugins/plugins-data.js.map +1 -0
- package/dist/admin/surfaces/plugins/plugins-index.d.ts +3 -0
- package/dist/admin/surfaces/plugins/plugins-index.d.ts.map +1 -0
- package/dist/admin/surfaces/plugins/plugins-index.js +72 -0
- package/dist/admin/surfaces/plugins/plugins-index.js.map +1 -0
- package/dist/admin/surfaces/search/search-index.d.ts +3 -0
- package/dist/admin/surfaces/search/search-index.d.ts.map +1 -0
- package/dist/admin/surfaces/search/search-index.js +76 -0
- package/dist/admin/surfaces/search/search-index.js.map +1 -0
- package/dist/admin/surfaces/settings/admin-features.d.ts +3 -0
- package/dist/admin/surfaces/settings/admin-features.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/admin-features.js +138 -0
- package/dist/admin/surfaces/settings/admin-features.js.map +1 -0
- package/dist/admin/surfaces/settings/settings-ax.d.ts +3 -0
- package/dist/admin/surfaces/settings/settings-ax.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/settings-ax.js +63 -0
- package/dist/admin/surfaces/settings/settings-ax.js.map +1 -0
- package/dist/admin/surfaces/settings/settings-cache.d.ts +3 -0
- package/dist/admin/surfaces/settings/settings-cache.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/settings-cache.js +64 -0
- package/dist/admin/surfaces/settings/settings-cache.js.map +1 -0
- package/dist/admin/surfaces/settings/settings-email.d.ts +3 -0
- package/dist/admin/surfaces/settings/settings-email.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/settings-email.js +89 -0
- package/dist/admin/surfaces/settings/settings-email.js.map +1 -0
- package/dist/admin/surfaces/settings/settings-general.d.ts +3 -0
- package/dist/admin/surfaces/settings/settings-general.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/settings-general.js +91 -0
- package/dist/admin/surfaces/settings/settings-general.js.map +1 -0
- package/dist/admin/surfaces/settings/settings-site.d.ts +3 -0
- package/dist/admin/surfaces/settings/settings-site.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/settings-site.js +14 -0
- package/dist/admin/surfaces/settings/settings-site.js.map +1 -0
- package/dist/admin/surfaces/settings/settings-sites.d.ts +3 -0
- package/dist/admin/surfaces/settings/settings-sites.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/settings-sites.js +134 -0
- package/dist/admin/surfaces/settings/settings-sites.js.map +1 -0
- package/dist/admin/surfaces/settings/states.d.ts +33 -0
- package/dist/admin/surfaces/settings/states.d.ts.map +1 -0
- package/dist/admin/surfaces/settings/states.js +33 -0
- package/dist/admin/surfaces/settings/states.js.map +1 -0
- package/dist/admin/surfaces/taxonomy/categories.d.ts +3 -0
- package/dist/admin/surfaces/taxonomy/categories.d.ts.map +1 -0
- package/dist/admin/surfaces/taxonomy/categories.js +162 -0
- package/dist/admin/surfaces/taxonomy/categories.js.map +1 -0
- package/dist/admin/surfaces/taxonomy/tags.d.ts +3 -0
- package/dist/admin/surfaces/taxonomy/tags.d.ts.map +1 -0
- package/dist/admin/surfaces/taxonomy/tags.js +112 -0
- package/dist/admin/surfaces/taxonomy/tags.js.map +1 -0
- package/dist/admin/surfaces/taxonomy/taxonomy-ui.d.ts +39 -0
- package/dist/admin/surfaces/taxonomy/taxonomy-ui.d.ts.map +1 -0
- package/dist/admin/surfaces/taxonomy/taxonomy-ui.js +66 -0
- package/dist/admin/surfaces/taxonomy/taxonomy-ui.js.map +1 -0
- package/dist/admin/surfaces/translations/states.d.ts +10 -0
- package/dist/admin/surfaces/translations/states.d.ts.map +1 -0
- package/dist/admin/surfaces/translations/states.js +11 -0
- package/dist/admin/surfaces/translations/states.js.map +1 -0
- package/dist/admin/surfaces/translations/translations-index.d.ts +3 -0
- package/dist/admin/surfaces/translations/translations-index.d.ts.map +1 -0
- package/dist/admin/surfaces/translations/translations-index.js +99 -0
- package/dist/admin/surfaces/translations/translations-index.js.map +1 -0
- package/dist/admin/surfaces/trash/trash-index.d.ts +3 -0
- package/dist/admin/surfaces/trash/trash-index.d.ts.map +1 -0
- package/dist/admin/surfaces/trash/trash-index.js +96 -0
- package/dist/admin/surfaces/trash/trash-index.js.map +1 -0
- package/dist/admin/surfaces/users/users-data.d.ts +51 -0
- package/dist/admin/surfaces/users/users-data.d.ts.map +1 -0
- package/dist/admin/surfaces/users/users-data.js +60 -0
- package/dist/admin/surfaces/users/users-data.js.map +1 -0
- package/dist/admin/surfaces/users/users-detail.d.ts +3 -0
- package/dist/admin/surfaces/users/users-detail.d.ts.map +1 -0
- package/dist/admin/surfaces/users/users-detail.js +148 -0
- package/dist/admin/surfaces/users/users-detail.js.map +1 -0
- package/dist/admin/surfaces/users/users-groups.d.ts +3 -0
- package/dist/admin/surfaces/users/users-groups.d.ts.map +1 -0
- package/dist/admin/surfaces/users/users-groups.js +136 -0
- package/dist/admin/surfaces/users/users-groups.js.map +1 -0
- package/dist/admin/surfaces/users/users-list.d.ts +3 -0
- package/dist/admin/surfaces/users/users-list.d.ts.map +1 -0
- package/dist/admin/surfaces/users/users-list.js +119 -0
- package/dist/admin/surfaces/users/users-list.js.map +1 -0
- package/dist/admin/surfaces/users/users-new.d.ts +3 -0
- package/dist/admin/surfaces/users/users-new.d.ts.map +1 -0
- package/dist/admin/surfaces/users/users-new.js +78 -0
- package/dist/admin/surfaces/users/users-new.js.map +1 -0
- package/dist/admin/surfaces/users/users-permissions.d.ts +3 -0
- package/dist/admin/surfaces/users/users-permissions.d.ts.map +1 -0
- package/dist/admin/surfaces/users/users-permissions.js +135 -0
- package/dist/admin/surfaces/users/users-permissions.js.map +1 -0
- package/dist/admin/surfaces/webServices/api-keys.d.ts +3 -0
- package/dist/admin/surfaces/webServices/api-keys.d.ts.map +1 -0
- package/dist/admin/surfaces/webServices/api-keys.js +65 -0
- package/dist/admin/surfaces/webServices/api-keys.js.map +1 -0
- package/dist/admin/surfaces/webServices/oauth.d.ts +3 -0
- package/dist/admin/surfaces/webServices/oauth.d.ts.map +1 -0
- package/dist/admin/surfaces/webServices/oauth.js +75 -0
- package/dist/admin/surfaces/webServices/oauth.js.map +1 -0
- package/dist/admin/surfaces/webServices/secret-reveal-modal.d.ts +8 -0
- package/dist/admin/surfaces/webServices/secret-reveal-modal.d.ts.map +1 -0
- package/dist/admin/surfaces/webServices/secret-reveal-modal.js +30 -0
- package/dist/admin/surfaces/webServices/secret-reveal-modal.js.map +1 -0
- package/dist/admin/surfaces/webServices/web-services-data.d.ts +38 -0
- package/dist/admin/surfaces/webServices/web-services-data.d.ts.map +1 -0
- package/dist/admin/surfaces/webServices/web-services-data.js +52 -0
- package/dist/admin/surfaces/webServices/web-services-data.js.map +1 -0
- package/dist/api/admin-features-routes.d.ts +10 -0
- package/dist/api/admin-features-routes.d.ts.map +1 -0
- package/dist/api/admin-features-routes.js +61 -0
- package/dist/api/admin-features-routes.js.map +1 -0
- package/dist/api/graphql/resolvers.d.ts +6 -6
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -1
- package/dist/config/define.d.ts +22 -1
- package/dist/config/define.d.ts.map +1 -1
- package/dist/config/define.js +44 -0
- package/dist/config/define.js.map +1 -1
- package/dist/config/parse.d.ts.map +1 -1
- package/dist/config/parse.js +8 -2
- package/dist/config/parse.js.map +1 -1
- package/dist/config/types.d.ts +60 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +20 -1
- package/dist/config/types.js.map +1 -1
- package/dist/config/validate.d.ts.map +1 -1
- package/dist/config/validate.js +60 -0
- package/dist/config/validate.js.map +1 -1
- package/dist/db/admin-features-queries.d.ts +29 -0
- package/dist/db/admin-features-queries.d.ts.map +1 -0
- package/dist/db/admin-features-queries.js +46 -0
- package/dist/db/admin-features-queries.js.map +1 -0
- package/dist/db/analytics-queries.d.ts +2 -2
- package/dist/db/audit-queries.d.ts +3 -3
- package/dist/db/category-queries.d.ts +6 -6
- package/dist/db/changeset-audit-queries.d.ts +2 -2
- package/dist/db/changeset-queries.d.ts +8 -8
- package/dist/db/extension-queries.d.ts +17 -17
- package/dist/db/feed-queries.d.ts +6 -6
- package/dist/db/media-queries.d.ts +12 -12
- package/dist/db/site-admin-queries.d.ts +1 -1
- package/dist/db/site-queries.d.ts +3 -3
- package/dist/db/tag-queries.d.ts +4 -4
- package/dist/db/webhook-queries.d.ts +8 -8
- package/dist/db/workflow-queries.d.ts +5 -5
- package/dist/experiments/schema.d.ts +1 -1
- package/dist/host-client/index.d.ts +1 -0
- package/dist/host-client/index.d.ts.map +1 -1
- package/dist/host-client/index.js +4 -0
- package/dist/host-client/index.js.map +1 -1
- package/dist/host-client/json.d.ts +36 -0
- package/dist/host-client/json.d.ts.map +1 -0
- package/dist/host-client/json.js +106 -0
- package/dist/host-client/json.js.map +1 -0
- package/dist/layout/modules-extended.d.ts.map +1 -1
- package/dist/layout/modules-extended.js +9 -8
- package/dist/layout/modules-extended.js.map +1 -1
- package/dist/layout/modules.js +5 -5
- package/dist/layout/modules.js.map +1 -1
- package/dist/schema/base.d.ts +1 -1
- package/dist/scope/breadcrumbs.d.ts.map +1 -1
- package/dist/scope/breadcrumbs.js +4 -1
- package/dist/scope/breadcrumbs.js.map +1 -1
- package/dist/scope/head-foot.d.ts +12 -4
- package/dist/scope/head-foot.d.ts.map +1 -1
- package/dist/scope/head-foot.js +14 -6
- package/dist/scope/head-foot.js.map +1 -1
- package/dist/scope/jsonld.d.ts.map +1 -1
- package/dist/scope/jsonld.js +1 -11
- package/dist/scope/jsonld.js.map +1 -1
- package/dist/scope/kywi-form.d.ts.map +1 -1
- package/dist/scope/kywi-form.js +3 -3
- package/dist/scope/kywi-form.js.map +1 -1
- package/dist/scope/kywi-wizard-form.d.ts.map +1 -1
- package/dist/scope/kywi-wizard-form.js +3 -3
- package/dist/scope/kywi-wizard-form.js.map +1 -1
- package/dist/scope/rendering.d.ts.map +1 -1
- package/dist/scope/rendering.js +7 -6
- package/dist/scope/rendering.js.map +1 -1
- package/dist/util/jsonld.d.ts +13 -0
- package/dist/util/jsonld.d.ts.map +1 -0
- package/dist/util/jsonld.js +15 -0
- package/dist/util/jsonld.js.map +1 -0
- package/dist/util/sanitize.d.ts +6 -0
- package/dist/util/sanitize.d.ts.map +1 -0
- package/dist/util/sanitize.js +156 -0
- package/dist/util/sanitize.js.map +1 -0
- package/package.json +12 -3
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* `extensions.list` surface — the EAV subtype/set/attribute manager, ported
|
|
5
|
+
* verbatim from `apps/reference/app/admin/extensions/page.tsx` (0.2.0 T12).
|
|
6
|
+
* Markup / classes / copy unchanged; wiring substitutions (plan §1.3):
|
|
7
|
+
* `useRouter().push` → `useAdminContext().navigate`; the `adminFetch`-backed data
|
|
8
|
+
* helpers take the context `fetch`; `LoadingState`/`ErrorState` are the canonical
|
|
9
|
+
* core primitives; `FormModal` is the migrated sibling component.
|
|
10
|
+
* `AdminShellWrapper` is gone — chrome is rendered once by `KywiAdminApp` (T14).
|
|
11
|
+
*/
|
|
12
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
13
|
+
import { useAdminContext } from '../../context.js';
|
|
14
|
+
import { LoadingState, ErrorState } from '../../primitives.js';
|
|
15
|
+
import { ExtensionManager } from '../../extension-manager.js';
|
|
16
|
+
import { FormModal } from './form-modal.js';
|
|
17
|
+
import { loadSubtypes, createSubtype, deleteSubtype, createSet, deleteSet, createAttribute, deleteAttribute, exportExtensions, ATTRIBUTE_TYPES, BASE_CONTENT_TYPES, } from './extensions-data.js';
|
|
18
|
+
const noop = () => { };
|
|
19
|
+
export default function ExtensionsListSurface(_props) {
|
|
20
|
+
const { fetch: adminFetch, navigate } = useAdminContext();
|
|
21
|
+
const [subtypes, setSubtypes] = useState([]);
|
|
22
|
+
const [loading, setLoading] = useState(true);
|
|
23
|
+
const [error, setError] = useState(null);
|
|
24
|
+
const [subtypeModal, setSubtypeModal] = useState(false);
|
|
25
|
+
const [setModalFor, setSetModalFor] = useState(null);
|
|
26
|
+
const [attrModalFor, setAttrModalFor] = useState(null);
|
|
27
|
+
const load = useCallback(async () => {
|
|
28
|
+
setLoading(true);
|
|
29
|
+
setError(null);
|
|
30
|
+
try {
|
|
31
|
+
setSubtypes(await loadSubtypes(adminFetch));
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
setError(e instanceof Error ? e.message : 'Failed to load extensions');
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
setLoading(false);
|
|
38
|
+
}
|
|
39
|
+
}, [adminFetch]);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
load();
|
|
42
|
+
}, [load]);
|
|
43
|
+
const guard = useCallback(async (fn, fallback) => {
|
|
44
|
+
setError(null);
|
|
45
|
+
try {
|
|
46
|
+
await fn();
|
|
47
|
+
await load();
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
setError(e instanceof Error ? e.message : fallback);
|
|
51
|
+
}
|
|
52
|
+
}, [load]);
|
|
53
|
+
const handleExport = useCallback(async () => {
|
|
54
|
+
setError(null);
|
|
55
|
+
try {
|
|
56
|
+
const data = await exportExtensions(adminFetch);
|
|
57
|
+
const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
|
|
58
|
+
const url = URL.createObjectURL(blob);
|
|
59
|
+
const a = document.createElement('a');
|
|
60
|
+
a.href = url;
|
|
61
|
+
a.download = 'kywi-extensions.json';
|
|
62
|
+
document.body.appendChild(a);
|
|
63
|
+
a.click();
|
|
64
|
+
a.remove();
|
|
65
|
+
URL.revokeObjectURL(url);
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
setError(e instanceof Error ? e.message : 'Export failed');
|
|
69
|
+
}
|
|
70
|
+
}, [adminFetch]);
|
|
71
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "kywi-admin-page-header", children: _jsxs("div", { children: [_jsx("h1", { children: "Extensions" }), _jsxs("p", { className: "kywi-admin-section-hint", children: ["Extend content with EAV subtypes, attribute sets and attributes. Use", ' ', _jsx("button", { type: "button", className: "kywi-link-button", onClick: () => navigate('/admin/extensions/import-export'), children: "Import / Export" }), ' ', "to move definitions between environments."] })] }) }), error && _jsx(ErrorState, { message: error, onRetry: load }), loading ? (_jsx(LoadingState, { label: "Loading extensions\u2026" })) : (_jsx(ExtensionManager, { subtypes: subtypes, onCreateSubtype: () => setSubtypeModal(true), onUpdateSubtype: noop, onDeleteSubtype: id => void (window.confirm('Delete this subtype and all its sets/attributes?') &&
|
|
72
|
+
guard(() => deleteSubtype(adminFetch, id), 'Delete failed')), onCreateSet: ({ subtypeId }) => setSetModalFor(subtypeId), onUpdateSet: noop, onDeleteSet: id => void (window.confirm('Delete this attribute set?') && guard(() => deleteSet(adminFetch, id), 'Delete failed')), onCreateAttribute: ({ setId }) => setAttrModalFor(setId), onUpdateAttribute: noop, onDeleteAttribute: id => void (window.confirm('Delete this attribute?') && guard(() => deleteAttribute(adminFetch, id), 'Delete failed')), onReorderAttributes: noop, onExport: () => void handleExport(), onImport: () => navigate('/admin/extensions/import-export') })), subtypeModal && (_jsx(FormModal, { title: "New subtype", submitLabel: "Create subtype", fields: [
|
|
73
|
+
{ name: 'name', label: 'Name', type: 'text', required: true, placeholder: 'e.g. product' },
|
|
74
|
+
{ name: 'baseContentType', label: 'Base content type', type: 'select', options: BASE_CONTENT_TYPES },
|
|
75
|
+
{ name: 'description', label: 'Description', type: 'text' },
|
|
76
|
+
], onCancel: () => setSubtypeModal(false), onSubmit: values => {
|
|
77
|
+
setSubtypeModal(false);
|
|
78
|
+
const description = (values.description ?? '').trim();
|
|
79
|
+
void guard(() => createSubtype(adminFetch, {
|
|
80
|
+
name: (values.name ?? '').trim(),
|
|
81
|
+
baseContentType: values.baseContentType ?? 'content',
|
|
82
|
+
...(description ? { description } : {}),
|
|
83
|
+
}), 'Create failed');
|
|
84
|
+
} })), setModalFor && (_jsx(FormModal, { title: "New attribute set", submitLabel: "Create set", fields: [
|
|
85
|
+
{ name: 'name', label: 'Name', type: 'text', required: true, placeholder: 'e.g. specs' },
|
|
86
|
+
{ name: 'label', label: 'Label', type: 'text', required: true, placeholder: 'e.g. Specifications' },
|
|
87
|
+
], onCancel: () => setSetModalFor(null), onSubmit: values => {
|
|
88
|
+
const subtypeId = setModalFor;
|
|
89
|
+
setSetModalFor(null);
|
|
90
|
+
void guard(() => createSet(adminFetch, { subtypeId, name: (values.name ?? '').trim(), label: (values.label ?? '').trim() }), 'Create failed');
|
|
91
|
+
} })), attrModalFor && (_jsx(FormModal, { title: "New attribute", submitLabel: "Create attribute", fields: [
|
|
92
|
+
{ name: 'name', label: 'Name', type: 'text', required: true, placeholder: 'e.g. weight' },
|
|
93
|
+
{ name: 'label', label: 'Label', type: 'text', required: true, placeholder: 'e.g. Weight (kg)' },
|
|
94
|
+
{ name: 'type', label: 'Type', type: 'select', options: ATTRIBUTE_TYPES },
|
|
95
|
+
], onCancel: () => setAttrModalFor(null), onSubmit: values => {
|
|
96
|
+
const setId = attrModalFor;
|
|
97
|
+
setAttrModalFor(null);
|
|
98
|
+
void guard(() => createAttribute(adminFetch, {
|
|
99
|
+
setId,
|
|
100
|
+
name: (values.name ?? '').trim(),
|
|
101
|
+
label: (values.label ?? '').trim(),
|
|
102
|
+
type: values.type ?? 'text',
|
|
103
|
+
}), 'Create failed');
|
|
104
|
+
} }))] }));
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=extensions-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions-list.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/extensions/extensions-list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface FormModalField {
|
|
2
|
+
name: string;
|
|
3
|
+
label: string;
|
|
4
|
+
type: 'text' | 'select';
|
|
5
|
+
options?: readonly string[];
|
|
6
|
+
required?: boolean;
|
|
7
|
+
placeholder?: string;
|
|
8
|
+
defaultValue?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function FormModal({ title, fields, submitLabel, onSubmit, onCancel, }: {
|
|
11
|
+
title: string;
|
|
12
|
+
fields: FormModalField[];
|
|
13
|
+
submitLabel?: string;
|
|
14
|
+
onSubmit: (values: Record<string, string>) => void;
|
|
15
|
+
onCancel: () => void;
|
|
16
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=form-modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-modal.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/extensions/form-modal.tsx"],"names":[],"mappings":"AAcA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;IACvB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,MAAM,EACN,WAAsB,EACtB,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;IAClD,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,2CAoEA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* `FormModal` — a small reusable modal that collects a handful of fields and
|
|
5
|
+
* returns them as a name→value map. Ported verbatim from
|
|
6
|
+
* `apps/reference/components/form-modal.tsx` (0.2.0 T12); only the Extensions
|
|
7
|
+
* surface uses it (to gather the real create payloads the ExtensionManager fires
|
|
8
|
+
* with empty callbacks), so it lives alongside that surface. No wiring changes —
|
|
9
|
+
* it is a pure presentational component built on the shared admin overlay/modal
|
|
10
|
+
* classes.
|
|
11
|
+
*/
|
|
12
|
+
import { useState } from 'react';
|
|
13
|
+
export function FormModal({ title, fields, submitLabel = 'Create', onSubmit, onCancel, }) {
|
|
14
|
+
const [values, setValues] = useState(() => Object.fromEntries(fields.map(f => [f.name, f.defaultValue ?? (f.type === 'select' ? (f.options?.[0] ?? '') : '')])));
|
|
15
|
+
function set(name, value) {
|
|
16
|
+
setValues(prev => ({ ...prev, [name]: value }));
|
|
17
|
+
}
|
|
18
|
+
function handleSubmit(e) {
|
|
19
|
+
e.preventDefault();
|
|
20
|
+
onSubmit(values);
|
|
21
|
+
}
|
|
22
|
+
return (_jsx("div", { className: "kywi-overlay-shell", role: "dialog", "aria-modal": "true", "aria-label": title, onClick: onCancel, children: _jsxs("div", { className: "kywi-admin-picker-modal", onClick: e => e.stopPropagation(), children: [_jsxs("div", { className: "kywi-admin-picker-header", children: [_jsx("h2", { className: "kywi-admin-picker-title", children: title }), _jsx("button", { type: "button", className: "kywi-admin-picker-close", onClick: onCancel, "aria-label": "Close", children: "\u00D7" })] }), _jsxs("form", { className: "kywi-admin-secret-modal-body", onSubmit: handleSubmit, children: [fields.map(f => {
|
|
23
|
+
const id = `fm-${f.name}`;
|
|
24
|
+
return (_jsxs("div", { className: "kywi-field", children: [_jsxs("label", { className: "kywi-field-label", htmlFor: id, children: [f.label, f.required ? '' : _jsx("span", { className: "kywi-field-optional", children: " (optional)" })] }), f.type === 'select' ? (_jsx("select", { id: id, className: "kywi-select", value: values[f.name] ?? '', onChange: e => set(f.name, e.target.value), children: (f.options ?? []).map(o => (_jsx("option", { value: o, children: o }, o))) })) : (_jsx("input", { id: id, type: "text", className: "kywi-input", value: values[f.name] ?? '', placeholder: f.placeholder, required: f.required, onChange: e => set(f.name, e.target.value) }))] }, f.name));
|
|
25
|
+
}), _jsxs("div", { className: "kywi-admin-secret-actions", children: [_jsx("button", { type: "button", className: "kywi-btn", onClick: onCancel, children: "Cancel" }), _jsx("button", { type: "submit", className: "kywi-btn kywi-btn-primary", children: submitLabel })] })] })] }) }));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=form-modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-modal.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/extensions/form-modal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type FeedRow } from './feeds-data.js';
|
|
2
|
+
interface FeedEditorProps {
|
|
3
|
+
/** Existing feed when editing; undefined when creating. */
|
|
4
|
+
feed?: FeedRow;
|
|
5
|
+
}
|
|
6
|
+
export declare function FeedEditor({ feed }: FeedEditorProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=feed-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feed-editor.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/feeds/feed-editor.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAOL,KAAK,OAAO,EAEb,MAAM,iBAAiB,CAAA;AAqBxB,UAAU,eAAe;IACvB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe,2CAsLnD"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* `FeedEditor` — the create/edit feed orchestration sidecar for `feeds.new` /
|
|
5
|
+
* `feeds.detail`, ported verbatim from
|
|
6
|
+
* `apps/reference/app/admin/feeds/feed-editor.tsx` (0.2.0 T10). Markup /
|
|
7
|
+
* classes / copy unchanged; wiring substitutions (plan §1.3): `useRouter().push`
|
|
8
|
+
* → `useAdminContext().navigate`, the local `states.tsx` duplicate of
|
|
9
|
+
* `ErrorState` → the identical core primitive. `FeedBuilder` was already a core
|
|
10
|
+
* component (`admin/feed-builder.tsx`); only the local import path changes.
|
|
11
|
+
* `feeds-new.tsx` / `feeds-detail.tsx` mount this directly — chrome renders
|
|
12
|
+
* once via `KywiAdminApp` (T14), so no wrapper is needed here.
|
|
13
|
+
*/
|
|
14
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
15
|
+
import { useAdminContext } from '../../context.js';
|
|
16
|
+
import { FeedBuilder } from '../../feed-builder.js';
|
|
17
|
+
import { ErrorState } from '../../primitives.js';
|
|
18
|
+
import { createFeed, updateFeed, previewFeed, loadContentTypes, } from './feeds-data.js';
|
|
19
|
+
function slugify(value) {
|
|
20
|
+
return value
|
|
21
|
+
.toLowerCase()
|
|
22
|
+
.trim()
|
|
23
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
24
|
+
.replace(/^-+|-+$/g, '');
|
|
25
|
+
}
|
|
26
|
+
/** Best-effort human label for a feed result row. */
|
|
27
|
+
function rowTitle(item) {
|
|
28
|
+
return (item.title ??
|
|
29
|
+
item.name ??
|
|
30
|
+
item.slug ??
|
|
31
|
+
item.id ??
|
|
32
|
+
'(untitled)');
|
|
33
|
+
}
|
|
34
|
+
export function FeedEditor({ feed }) {
|
|
35
|
+
const { navigate } = useAdminContext();
|
|
36
|
+
const isEdit = feed !== undefined;
|
|
37
|
+
const [name, setName] = useState(feed?.name ?? '');
|
|
38
|
+
const [slug, setSlug] = useState(feed?.slug ?? '');
|
|
39
|
+
const [slugTouched, setSlugTouched] = useState(isEdit);
|
|
40
|
+
const [query, setQuery] = useState(feed?.query ?? null);
|
|
41
|
+
const [contentTypes, setContentTypes] = useState([]);
|
|
42
|
+
const [typesError, setTypesError] = useState(null);
|
|
43
|
+
const [preview, setPreview] = useState(null);
|
|
44
|
+
const [previewing, setPreviewing] = useState(false);
|
|
45
|
+
const [previewError, setPreviewError] = useState(null);
|
|
46
|
+
const [saving, setSaving] = useState(false);
|
|
47
|
+
const [saveError, setSaveError] = useState(null);
|
|
48
|
+
// Load the source content types for the builder's dropdown.
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
let alive = true;
|
|
51
|
+
loadContentTypes()
|
|
52
|
+
.then(t => { if (alive)
|
|
53
|
+
setContentTypes(t); })
|
|
54
|
+
.catch(e => { if (alive)
|
|
55
|
+
setTypesError(e instanceof Error ? e.message : 'Failed to load content types'); });
|
|
56
|
+
return () => { alive = false; };
|
|
57
|
+
}, []);
|
|
58
|
+
const runPreview = useCallback(async (q) => {
|
|
59
|
+
setPreviewing(true);
|
|
60
|
+
setPreviewError(null);
|
|
61
|
+
try {
|
|
62
|
+
setPreview(await previewFeed(q));
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
setPreview(null);
|
|
66
|
+
setPreviewError(e instanceof Error ? e.message : 'Preview failed');
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
setPreviewing(false);
|
|
70
|
+
}
|
|
71
|
+
}, []);
|
|
72
|
+
// Preview an already-saved feed's query on first load.
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
if (feed?.query)
|
|
75
|
+
void runPreview(feed.query);
|
|
76
|
+
}, [feed, runPreview]);
|
|
77
|
+
// FeedBuilder emits the current query via its "Apply query" button — apply + preview.
|
|
78
|
+
const handleQueryApply = useCallback((q) => {
|
|
79
|
+
setQuery(q);
|
|
80
|
+
if (!slugTouched && !name)
|
|
81
|
+
setName(q.contentType ? `${q.contentType} feed` : '');
|
|
82
|
+
void runPreview(q);
|
|
83
|
+
}, [runPreview, slugTouched, name]);
|
|
84
|
+
const handleNameChange = useCallback((value) => {
|
|
85
|
+
setName(value);
|
|
86
|
+
if (!slugTouched)
|
|
87
|
+
setSlug(slugify(value));
|
|
88
|
+
}, [slugTouched]);
|
|
89
|
+
const handleSave = useCallback(async () => {
|
|
90
|
+
setSaveError(null);
|
|
91
|
+
if (!name.trim()) {
|
|
92
|
+
setSaveError('A feed name is required.');
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (!slug.trim()) {
|
|
96
|
+
setSaveError('A feed slug is required.');
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (!query) {
|
|
100
|
+
setSaveError('Configure and apply the query before saving.');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
setSaving(true);
|
|
104
|
+
try {
|
|
105
|
+
if (isEdit) {
|
|
106
|
+
await updateFeed(feed.slug, { name: name.trim(), query });
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
await createFeed({ name: name.trim(), slug: slug.trim(), query });
|
|
110
|
+
}
|
|
111
|
+
navigate('/admin/feeds');
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
setSaveError(e instanceof Error ? e.message : 'Save failed');
|
|
115
|
+
setSaving(false);
|
|
116
|
+
}
|
|
117
|
+
}, [name, slug, query, isEdit, feed, navigate]);
|
|
118
|
+
return (_jsxs("div", { className: "kywi-feed-editor", children: [_jsxs("div", { className: "kywi-admin-page-header", children: [_jsxs("div", { children: [_jsx("h1", { children: isEdit ? `Edit feed: ${feed.name}` : 'New feed' }), _jsx("p", { className: "kywi-text-muted", children: "Configure a content query, apply it to preview live results, then save it as a reusable feed." })] }), _jsxs("div", { className: "kywi-admin-button-row", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: () => navigate('/admin/feeds'), children: "Cancel" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-primary", onClick: handleSave, disabled: saving, children: saving ? 'Saving…' : isEdit ? 'Save changes' : 'Save feed' })] })] }), saveError && _jsx(ErrorState, { message: saveError }), _jsxs("div", { className: "kywi-feed-editor-meta", children: [_jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "feed-name", className: "kywi-field-label", children: "Feed name" }), _jsx("input", { id: "feed-name", type: "text", className: "kywi-input", value: name, onChange: e => handleNameChange(e.target.value), placeholder: "Latest blog posts" })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "feed-slug", className: "kywi-field-label", children: "Slug" }), _jsx("input", { id: "feed-slug", type: "text", className: "kywi-input", value: slug, disabled: isEdit, onChange: e => { setSlugTouched(true); setSlug(slugify(e.target.value)); }, placeholder: "latest-blog-posts" }), isEdit && _jsx("span", { className: "kywi-field-hint", children: "Slug is fixed after creation." })] })] }), _jsxs("div", { className: "kywi-feed-editor-grid", children: [_jsxs("div", { className: "kywi-feed-editor-builder", children: [typesError ? (_jsx(ErrorState, { message: typesError })) : (_jsx(FeedBuilder, { contentTypes: contentTypes, ...(query ? { initialQuery: query } : {}), onSave: handleQueryApply })), _jsxs("p", { className: "kywi-field-hint", children: ["Click ", _jsx("strong", { children: "Apply query" }), " in the builder to apply the query and refresh the preview, then ", _jsx("strong", { children: "Save changes" }), " above to store the feed."] })] }), _jsxs("aside", { className: "kywi-feed-preview", "aria-label": "Feed preview", children: [_jsx("h2", { className: "kywi-feed-preview-title", children: "Preview" }), previewing ? (_jsxs("div", { className: "kywi-admin-loading", role: "status", children: [_jsx("span", { className: "kywi-spinner", "aria-hidden": "true" }), _jsx("span", { children: "Running query\u2026" })] })) : previewError ? (_jsx(ErrorState, { message: previewError, ...(query ? { onRetry: () => runPreview(query) } : {}) })) : !preview ? (_jsx("div", { className: "kywi-empty-state", children: _jsx("p", { children: "No preview yet. Apply a query to see matching content." }) })) : preview.items.length === 0 ? (_jsx("div", { className: "kywi-empty-state", children: _jsx("p", { children: "The query matched no content." }) })) : (_jsxs(_Fragment, { children: [_jsxs("p", { className: "kywi-feed-preview-count", children: [preview.total, " match", preview.total === 1 ? '' : 'es', " \u00B7 showing ", preview.items.length] }), _jsx("ul", { className: "kywi-feed-preview-list", children: preview.items.map((item, i) => (_jsxs("li", { className: "kywi-feed-preview-item", children: [_jsx("span", { className: "kywi-feed-preview-item-title", children: rowTitle(item) }), typeof item.status === 'string' && (_jsx("span", { className: `kywi-admin-status-badge kywi-status-${item.status}`, children: item.status }))] }, item.id ?? i))) })] }))] })] })] }));
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=feed-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feed-editor.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/feeds/feed-editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { FeedQuery, FeedResult } from '../../../feeds/types.js';
|
|
2
|
+
export type { FeedQuery, FeedResult };
|
|
3
|
+
export interface FeedRow {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
slug: string;
|
|
7
|
+
query: FeedQuery;
|
|
8
|
+
cacheTtl: number | null;
|
|
9
|
+
createdAt: string;
|
|
10
|
+
updatedAt: string;
|
|
11
|
+
}
|
|
12
|
+
export interface FeedWritePayload {
|
|
13
|
+
name: string;
|
|
14
|
+
slug: string;
|
|
15
|
+
query: FeedQuery;
|
|
16
|
+
cacheTtl?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ContentTypeOption {
|
|
19
|
+
name: string;
|
|
20
|
+
label: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function loadFeeds(): Promise<FeedRow[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Load a single feed's saved definition. GET /feeds/:slug executes the query and
|
|
25
|
+
* returns rows (a FeedResult), not the definition — so the editable name/slug/query
|
|
26
|
+
* come from the list endpoint, which returns full feed rows.
|
|
27
|
+
*/
|
|
28
|
+
export declare function loadFeed(slug: string): Promise<FeedRow>;
|
|
29
|
+
export declare function createFeed(payload: FeedWritePayload): Promise<FeedRow>;
|
|
30
|
+
export declare function updateFeed(slug: string, payload: Partial<FeedWritePayload>): Promise<FeedRow>;
|
|
31
|
+
export declare function deleteFeed(slug: string): Promise<void>;
|
|
32
|
+
/** Run an ad-hoc query for the live preview panel. */
|
|
33
|
+
export declare function previewFeed(query: FeedQuery): Promise<FeedResult>;
|
|
34
|
+
export declare function loadContentTypes(): Promise<ContentTypeOption[]>;
|
|
35
|
+
//# sourceMappingURL=feeds-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feeds-data.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/feeds/feeds-data.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEpE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AAErC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AA+BD,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAEpD;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK7D;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAI5E;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnG;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,sDAAsD;AACtD,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAIvE;AAID,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAKrE"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data helpers for the admin Feeds surface — 0.2.0 T10 migration.
|
|
3
|
+
*
|
|
4
|
+
* Ported verbatim from `apps/reference/app/admin/feeds/feeds-data.ts`; only the
|
|
5
|
+
* import source changes: `adminFetch` now comes directly from
|
|
6
|
+
* `@kywi-software/core/host-client` instead of the app's `lib/admin-auth`, and
|
|
7
|
+
* `FeedQuery`/`FeedResult` are imported from the co-located `feeds/types.js`
|
|
8
|
+
* module instead of the public `@kywi-software/core/admin` re-export.
|
|
9
|
+
*
|
|
10
|
+
* A feed is a saved, named content query (kywi_feeds). CRUD flows through the
|
|
11
|
+
* DB-backed /feeds routes; the live preview runs an ad-hoc query through
|
|
12
|
+
* POST /feeds/query. All requests go through adminFetch, whose httpOnly session
|
|
13
|
+
* cookie is bridged to an Authorization header by middleware.
|
|
14
|
+
*/
|
|
15
|
+
import { adminFetch } from '../../../host-client/index.js';
|
|
16
|
+
async function readData(res) {
|
|
17
|
+
if (!res.ok) {
|
|
18
|
+
let message = `Request failed (${res.status})`;
|
|
19
|
+
try {
|
|
20
|
+
const body = await res.json();
|
|
21
|
+
message = body?.error?.message ?? message;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
/* keep default */
|
|
25
|
+
}
|
|
26
|
+
throw new Error(message);
|
|
27
|
+
}
|
|
28
|
+
const body = await res.json();
|
|
29
|
+
return body.data;
|
|
30
|
+
}
|
|
31
|
+
async function expectOk(res) {
|
|
32
|
+
if (res.ok)
|
|
33
|
+
return;
|
|
34
|
+
let message = `Request failed (${res.status})`;
|
|
35
|
+
try {
|
|
36
|
+
const body = await res.json();
|
|
37
|
+
message = body?.error?.message ?? message;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
/* keep default */
|
|
41
|
+
}
|
|
42
|
+
throw new Error(message);
|
|
43
|
+
}
|
|
44
|
+
// ─── Feeds ─────────────────────────────────────────────────────────────────
|
|
45
|
+
export async function loadFeeds() {
|
|
46
|
+
return readData(await adminFetch('/api/v1/feeds'));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Load a single feed's saved definition. GET /feeds/:slug executes the query and
|
|
50
|
+
* returns rows (a FeedResult), not the definition — so the editable name/slug/query
|
|
51
|
+
* come from the list endpoint, which returns full feed rows.
|
|
52
|
+
*/
|
|
53
|
+
export async function loadFeed(slug) {
|
|
54
|
+
const feeds = await loadFeeds();
|
|
55
|
+
const feed = feeds.find(f => f.slug === slug);
|
|
56
|
+
if (!feed)
|
|
57
|
+
throw new Error(`Feed "${slug}" not found`);
|
|
58
|
+
return feed;
|
|
59
|
+
}
|
|
60
|
+
export async function createFeed(payload) {
|
|
61
|
+
return readData(await adminFetch('/api/v1/feeds', { method: 'POST', body: JSON.stringify(payload) }));
|
|
62
|
+
}
|
|
63
|
+
export async function updateFeed(slug, payload) {
|
|
64
|
+
return readData(await adminFetch(`/api/v1/feeds/${encodeURIComponent(slug)}`, {
|
|
65
|
+
method: 'PUT',
|
|
66
|
+
body: JSON.stringify(payload),
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
export async function deleteFeed(slug) {
|
|
70
|
+
await expectOk(await adminFetch(`/api/v1/feeds/${encodeURIComponent(slug)}`, { method: 'DELETE' }));
|
|
71
|
+
}
|
|
72
|
+
/** Run an ad-hoc query for the live preview panel. */
|
|
73
|
+
export async function previewFeed(query) {
|
|
74
|
+
return readData(await adminFetch('/api/v1/feeds/query', { method: 'POST', body: JSON.stringify(query) }));
|
|
75
|
+
}
|
|
76
|
+
// ─── Content types (feed source options) ─────────────────────────────────────
|
|
77
|
+
export async function loadContentTypes() {
|
|
78
|
+
const types = await readData(await adminFetch('/api/v1/config/content-types'));
|
|
79
|
+
return types.map(t => ({ name: t.name, label: t.label }));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=feeds-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feeds-data.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/feeds/feeds-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feeds-detail.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/feeds/feeds-detail.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKrD,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,2CA4BlE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* `feeds.detail` surface — ported verbatim from
|
|
5
|
+
* `apps/reference/app/admin/feeds/[slug]/page.tsx` (0.2.0 T10). Wiring
|
|
6
|
+
* substitutions (plan §1.3): `useParams()` → `props.params.slug`,
|
|
7
|
+
* `AdminShellWrapper` dropped — chrome renders once via `KywiAdminApp` (T14) —
|
|
8
|
+
* and the local `states.tsx` duplicate of `LoadingState`/`ErrorState` importing
|
|
9
|
+
* from the identical core primitives instead.
|
|
10
|
+
*/
|
|
11
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
12
|
+
import { LoadingState, ErrorState } from '../../primitives.js';
|
|
13
|
+
import { FeedEditor } from './feed-editor.js';
|
|
14
|
+
import { loadFeed } from './feeds-data.js';
|
|
15
|
+
export default function FeedsDetailSurface({ params }) {
|
|
16
|
+
const slug = params.slug ?? '';
|
|
17
|
+
const [feed, setFeed] = useState(null);
|
|
18
|
+
const [loading, setLoading] = useState(true);
|
|
19
|
+
const [error, setError] = useState(null);
|
|
20
|
+
const load = useCallback(async () => {
|
|
21
|
+
setLoading(true);
|
|
22
|
+
setError(null);
|
|
23
|
+
try {
|
|
24
|
+
setFeed(await loadFeed(decodeURIComponent(slug)));
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
setError(e instanceof Error ? e.message : 'Failed to load feed');
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
setLoading(false);
|
|
31
|
+
}
|
|
32
|
+
}, [slug]);
|
|
33
|
+
useEffect(() => { load(); }, [load]);
|
|
34
|
+
return loading ? (_jsx(LoadingState, { label: "Loading feed\u2026" })) : error || !feed ? (_jsx(ErrorState, { message: error ?? 'Feed not found', onRetry: load })) : (_jsx(FeedEditor, { feed: feed }));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=feeds-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feeds-detail.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/feeds/feeds-detail.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;GAOG;AAEH,OAAc,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE/D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAgB,MAAM,iBAAiB,CAAA;AAExD,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,MAAM,EAAgB;IACjE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;IAE9B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAiB,IAAI,CAAC,CAAA;IACtD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEvD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClC,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,QAAQ,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAA;QAClE,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAA,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEnC,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,KAAC,YAAY,IAAC,KAAK,EAAC,oBAAe,GAAG,CACvC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACnB,KAAC,UAAU,IAAC,OAAO,EAAE,KAAK,IAAI,gBAAgB,EAAE,OAAO,EAAE,IAAI,GAAI,CAClE,CAAC,CAAC,CAAC,CACF,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,CAC3B,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feeds-list.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/feeds/feeds-list.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKrD,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,MAAM,EAAE,YAAY,2CAiH5D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* `feeds.list` surface — the Feeds index, ported verbatim from
|
|
5
|
+
* `apps/reference/app/admin/feeds/page.tsx` (0.2.0 T10). Markup / classes /
|
|
6
|
+
* copy unchanged; wiring substitutions (plan §1.3): `useRouter().push` →
|
|
7
|
+
* `useAdminContext().navigate`, the local `states.tsx` duplicate of
|
|
8
|
+
* `LoadingState`/`ErrorState` → the identical core primitives,
|
|
9
|
+
* `AdminShellWrapper` dropped — chrome renders once via `KywiAdminApp` (T14).
|
|
10
|
+
*/
|
|
11
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
12
|
+
import { useAdminContext } from '../../context.js';
|
|
13
|
+
import { LoadingState, ErrorState } from '../../primitives.js';
|
|
14
|
+
import { loadFeeds, deleteFeed } from './feeds-data.js';
|
|
15
|
+
export default function FeedsListSurface(_props) {
|
|
16
|
+
const { navigate } = useAdminContext();
|
|
17
|
+
const [feeds, setFeeds] = useState([]);
|
|
18
|
+
const [loading, setLoading] = useState(true);
|
|
19
|
+
const [error, setError] = useState(null);
|
|
20
|
+
const load = useCallback(async () => {
|
|
21
|
+
setLoading(true);
|
|
22
|
+
setError(null);
|
|
23
|
+
try {
|
|
24
|
+
const rows = await loadFeeds();
|
|
25
|
+
rows.sort((a, b) => (b.updatedAt ?? '').localeCompare(a.updatedAt ?? ''));
|
|
26
|
+
setFeeds(rows);
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
setError(e instanceof Error ? e.message : 'Failed to load feeds');
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
setLoading(false);
|
|
33
|
+
}
|
|
34
|
+
}, []);
|
|
35
|
+
useEffect(() => { load(); }, [load]);
|
|
36
|
+
const handleDelete = useCallback(async (feed) => {
|
|
37
|
+
if (!window.confirm(`Delete feed "${feed.name}"? This cannot be undone.`))
|
|
38
|
+
return;
|
|
39
|
+
try {
|
|
40
|
+
await deleteFeed(feed.slug);
|
|
41
|
+
await load();
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
window.alert(e instanceof Error ? e.message : 'Delete failed');
|
|
45
|
+
}
|
|
46
|
+
}, [load]);
|
|
47
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "kywi-admin-page-header", children: [_jsxs("div", { children: [_jsx("h1", { children: "Feeds" }), _jsx("p", { className: "kywi-text-muted", children: "Saved content queries with a live preview. Reuse them across the site." })] }), _jsx("div", { className: "kywi-admin-button-row", children: _jsx("button", { type: "button", className: "kywi-btn kywi-btn-primary", onClick: () => navigate('/admin/feeds/new'), children: "New Feed" }) })] }), loading ? (_jsx(LoadingState, { label: "Loading feeds\u2026" })) : error ? (_jsx(ErrorState, { message: error, onRetry: load })) : feeds.length === 0 ? (_jsxs("div", { className: "kywi-empty-state", children: [_jsx("p", { children: "No feeds yet." }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-primary", onClick: () => navigate('/admin/feeds/new'), children: "Create your first feed" })] })) : (_jsx("div", { className: "kywi-table-scroll", children: _jsxs("table", { className: "kywi-table kywi-feeds-table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Name" }), _jsx("th", { children: "Slug" }), _jsx("th", { children: "Source type" }), _jsx("th", { children: "Limit" }), _jsx("th", { children: "Updated" }), _jsx("th", { className: "kywi-col-actions", children: "Actions" })] }) }), _jsx("tbody", { children: feeds.map(feed => (_jsxs("tr", { children: [_jsx("td", { children: _jsx("button", { type: "button", className: "kywi-link-button", onClick: () => navigate(`/admin/feeds/${encodeURIComponent(feed.slug)}`), children: feed.name }) }), _jsx("td", { children: _jsx("code", { children: feed.slug }) }), _jsx("td", { children: feed.query?.contentType ?? '—' }), _jsx("td", { children: feed.query?.limit ?? '—' }), _jsx("td", { children: feed.updatedAt ? new Date(feed.updatedAt).toLocaleDateString() : '—' }), _jsxs("td", { className: "kywi-col-actions", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost kywi-btn-sm", onClick: () => navigate(`/admin/feeds/${encodeURIComponent(feed.slug)}`), children: "Edit" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-danger kywi-btn-sm", onClick: () => handleDelete(feed), children: "Delete" })] })] }, feed.id))) })] }) }))] }));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=feeds-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feeds-list.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/feeds/feeds-list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feeds-new.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/feeds/feeds-new.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGrD,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,MAAM,EAAE,YAAY,2CAE3D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feeds-new.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/feeds/feeds-new.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAWZ,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,MAAoB;IAC1D,OAAO,KAAC,UAAU,KAAG,CAAA;AACvB,CAAC"}
|