@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,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared building blocks for the taxonomy admin surfaces (`taxonomy.categories`,
|
|
3
|
+
* `taxonomy.tags`): slugify plus presentational Loading / Error / Empty / Modal /
|
|
4
|
+
* Confirm atoms. Ported verbatim from `apps/reference/components/taxonomy-ui.tsx`
|
|
5
|
+
* (0.2.0 T11). Markup / copy are unchanged; the only wiring substitution (plan
|
|
6
|
+
* §1.3) is the `apiGet`/`apiSend` re-export, which now sources the JSON layer
|
|
7
|
+
* from `@kywi-software/core/host-client` instead of the app-local `lib/admin-api`.
|
|
8
|
+
* All markup uses the shipped `kywi-*` admin design-system classes.
|
|
9
|
+
*/
|
|
10
|
+
import React from 'react';
|
|
11
|
+
export { getJson as apiGet, sendJson as apiSend } from '../../../host-client/index.js';
|
|
12
|
+
/** Derive a URL-safe slug from a human label. */
|
|
13
|
+
export declare function slugify(input: string): string;
|
|
14
|
+
export declare function Loading({ label }: {
|
|
15
|
+
label?: string;
|
|
16
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export declare function ErrorBox({ message, onRetry }: {
|
|
18
|
+
message: string;
|
|
19
|
+
onRetry?: () => void;
|
|
20
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export declare function EmptyState({ children }: {
|
|
22
|
+
children: React.ReactNode;
|
|
23
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export declare function Modal({ title, onClose, children, labelledBy, }: {
|
|
25
|
+
title: string;
|
|
26
|
+
onClose: () => void;
|
|
27
|
+
children: React.ReactNode;
|
|
28
|
+
labelledBy?: string;
|
|
29
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export declare function ConfirmDialog({ title, message, confirmLabel, danger, busy, onConfirm, onCancel, }: {
|
|
31
|
+
title: string;
|
|
32
|
+
message: React.ReactNode;
|
|
33
|
+
confirmLabel?: string;
|
|
34
|
+
danger?: boolean;
|
|
35
|
+
busy?: boolean;
|
|
36
|
+
onConfirm: () => void;
|
|
37
|
+
onCancel: () => void;
|
|
38
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
//# sourceMappingURL=taxonomy-ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxonomy-ui.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/taxonomy/taxonomy-ui.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAA4B,MAAM,OAAO,CAAA;AAIhD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,+BAA+B,CAAA;AAEtF,iDAAiD;AACjD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM7C;AAID,wBAAgB,OAAO,CAAC,EAAE,KAAkB,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,2CAOjE;AAED,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,2CAWvF;AAED,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAErE;AAID,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,OAAO,EACP,QAAQ,EACR,UAA+B,GAChC,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,2CA6CA;AAID,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,EACP,YAAuB,EACvB,MAAa,EACb,IAAY,EACZ,SAAS,EACT,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,2CAqCA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Shared building blocks for the taxonomy admin surfaces (`taxonomy.categories`,
|
|
5
|
+
* `taxonomy.tags`): slugify plus presentational Loading / Error / Empty / Modal /
|
|
6
|
+
* Confirm atoms. Ported verbatim from `apps/reference/components/taxonomy-ui.tsx`
|
|
7
|
+
* (0.2.0 T11). Markup / copy are unchanged; the only wiring substitution (plan
|
|
8
|
+
* §1.3) is the `apiGet`/`apiSend` re-export, which now sources the JSON layer
|
|
9
|
+
* from `@kywi-software/core/host-client` instead of the app-local `lib/admin-api`.
|
|
10
|
+
* All markup uses the shipped `kywi-*` admin design-system classes.
|
|
11
|
+
*/
|
|
12
|
+
import { useEffect, useRef } from 'react';
|
|
13
|
+
// ── Data layer (single source: host-client JSON layer) ─────────────────────────
|
|
14
|
+
export { getJson as apiGet, sendJson as apiSend } from '../../../host-client/index.js';
|
|
15
|
+
/** Derive a URL-safe slug from a human label. */
|
|
16
|
+
export function slugify(input) {
|
|
17
|
+
return input
|
|
18
|
+
.toLowerCase()
|
|
19
|
+
.trim()
|
|
20
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
21
|
+
.replace(/^-+|-+$/g, '');
|
|
22
|
+
}
|
|
23
|
+
// ── Presentational states ─────────────────────────────────────────────────────
|
|
24
|
+
export function Loading({ label = 'Loading…' }) {
|
|
25
|
+
return (_jsxs("div", { className: "kywi-admin-loading", role: "status", "aria-live": "polite", children: [_jsx("span", { className: "kywi-spinner", "aria-hidden": "true" }), _jsx("span", { children: label })] }));
|
|
26
|
+
}
|
|
27
|
+
export function ErrorBox({ message, onRetry }) {
|
|
28
|
+
return (_jsxs("div", { className: "kywi-admin-error", role: "alert", children: [_jsx("p", { className: "kywi-admin-error-message", children: message }), onRetry && (_jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: onRetry, children: "Try again" }))] }));
|
|
29
|
+
}
|
|
30
|
+
export function EmptyState({ children }) {
|
|
31
|
+
return _jsx("div", { className: "kywi-admin-empty-state", children: children });
|
|
32
|
+
}
|
|
33
|
+
// ── Modal frame ───────────────────────────────────────────────────────────────
|
|
34
|
+
export function Modal({ title, onClose, children, labelledBy = 'kywi-modal-title', }) {
|
|
35
|
+
const firstFieldRef = useRef(null);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
function onKey(e) {
|
|
38
|
+
if (e.key === 'Escape')
|
|
39
|
+
onClose();
|
|
40
|
+
}
|
|
41
|
+
window.addEventListener('keydown', onKey);
|
|
42
|
+
// Focus the first focusable control for keyboard users.
|
|
43
|
+
firstFieldRef.current?.querySelector('input, select, textarea, button')?.focus();
|
|
44
|
+
return () => window.removeEventListener('keydown', onKey);
|
|
45
|
+
}, [onClose]);
|
|
46
|
+
return (_jsx("div", { className: "kywi-admin-picker-overlay", onClick: (e) => {
|
|
47
|
+
if (e.target === e.currentTarget)
|
|
48
|
+
onClose();
|
|
49
|
+
}, children: _jsxs("div", { className: "kywi-admin-picker-modal", role: "dialog", "aria-modal": "true", "aria-labelledby": labelledBy, children: [_jsxs("div", { className: "kywi-admin-picker-header", children: [_jsx("span", { id: labelledBy, className: "kywi-admin-picker-title", children: title }), _jsx("button", { type: "button", className: "kywi-admin-picker-close", "aria-label": "Close", onClick: onClose, children: "\u00D7" })] }), _jsx("div", { ref: firstFieldRef, style: { padding: 'var(--kywi-space-5)' }, children: children })] }) }));
|
|
50
|
+
}
|
|
51
|
+
// ── Confirm dialog ─────────────────────────────────────────────────────────────
|
|
52
|
+
export function ConfirmDialog({ title, message, confirmLabel = 'Delete', danger = true, busy = false, onConfirm, onCancel, }) {
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
function onKey(e) {
|
|
55
|
+
if (e.key === 'Escape')
|
|
56
|
+
onCancel();
|
|
57
|
+
}
|
|
58
|
+
window.addEventListener('keydown', onKey);
|
|
59
|
+
return () => window.removeEventListener('keydown', onKey);
|
|
60
|
+
}, [onCancel]);
|
|
61
|
+
return (_jsx("div", { className: "kywi-admin-picker-overlay", onClick: (e) => {
|
|
62
|
+
if (e.target === e.currentTarget)
|
|
63
|
+
onCancel();
|
|
64
|
+
}, children: _jsxs("div", { className: "kywi-confirm", role: "alertdialog", "aria-modal": "true", "aria-labelledby": "kywi-confirm-title", children: [_jsx("h2", { id: "kywi-confirm-title", className: "kywi-section-heading", children: title }), _jsx("div", { className: "kywi-admin-confirm-text", children: message }), _jsxs("div", { className: "kywi-admin-form-actions", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: onCancel, disabled: busy, children: "Cancel" }), _jsx("button", { type: "button", className: `kywi-btn ${danger ? 'kywi-btn-danger' : 'kywi-btn-primary'}`, onClick: onConfirm, disabled: busy, children: busy ? 'Working…' : confirmLabel })] })] }) }));
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=taxonomy-ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxonomy-ui.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/taxonomy/taxonomy-ui.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Shared loading / error presentational states for the Translations surface.
|
|
2
|
+
* Ported verbatim from `apps/reference/components/admin-states.tsx` (0.2.0 T11). */
|
|
3
|
+
export declare function LoadingState({ label }: {
|
|
4
|
+
label?: string;
|
|
5
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare function ErrorState({ message, onRetry }: {
|
|
7
|
+
message: string;
|
|
8
|
+
onRetry?: () => void;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=states.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/translations/states.tsx"],"names":[],"mappings":"AAGA;oFACoF;AAEpF,wBAAgB,YAAY,CAAC,EAAE,KAAkB,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,2CAOtE;AAED,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,2CAWzF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/** Shared loading / error presentational states for the Translations surface.
|
|
4
|
+
* Ported verbatim from `apps/reference/components/admin-states.tsx` (0.2.0 T11). */
|
|
5
|
+
export function LoadingState({ label = 'Loading…' }) {
|
|
6
|
+
return (_jsxs("div", { className: "kywi-admin-loading", role: "status", "aria-live": "polite", children: [_jsx("span", { className: "kywi-spinner", "aria-hidden": "true" }), _jsx("span", { children: label })] }));
|
|
7
|
+
}
|
|
8
|
+
export function ErrorState({ message, onRetry }) {
|
|
9
|
+
return (_jsxs("div", { className: "kywi-admin-error", role: "alert", children: [_jsx("p", { className: "kywi-admin-error-message", children: message }), onRetry && (_jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: onRetry, children: "Try again" }))] }));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=states.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"states.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/translations/states.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ;oFACoF;AAEpF,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,GAAG,UAAU,EAAsB;IACrE,OAAO,CACL,eAAK,SAAS,EAAC,oBAAoB,EAAC,IAAI,EAAC,QAAQ,eAAW,QAAQ,aAClE,eAAM,SAAS,EAAC,cAAc,iBAAa,MAAM,GAAG,EACpD,yBAAO,KAAK,GAAQ,IAChB,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAA6C;IACxF,OAAO,CACL,eAAK,SAAS,EAAC,kBAAkB,EAAC,IAAI,EAAC,OAAO,aAC5C,YAAG,SAAS,EAAC,0BAA0B,YAAE,OAAO,GAAK,EACpD,OAAO,IAAI,CACV,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,6BAA6B,EAAC,OAAO,EAAE,OAAO,0BAErE,CACV,IACG,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translations-index.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/translations/translations-index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AA0CrD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,MAAM,EAAE,YAAY,2CAmN/D"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* `translations.index` surface — the Translations coverage dashboard, ported
|
|
5
|
+
* verbatim from `apps/reference/app/admin/translations/page.tsx` (0.2.0 T11).
|
|
6
|
+
* Markup / copy / inline styles are unchanged; the wiring substitutions (plan
|
|
7
|
+
* §1.3) are: `useRouter().push` → `useAdminContext().navigate`, `adminFetch` →
|
|
8
|
+
* `useAdminContext().fetch`, and the `LoadingState`/`ErrorState` atoms now import
|
|
9
|
+
* from the co-located `./states`. `AdminShellWrapper` is gone — chrome is
|
|
10
|
+
* rendered once by `KywiAdminApp` (T14).
|
|
11
|
+
*/
|
|
12
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
13
|
+
import { useAdminContext } from '../../context.js';
|
|
14
|
+
import { LoadingState, ErrorState } from './states.js';
|
|
15
|
+
/** Friendly language name for a locale code, falling back to the raw code. */
|
|
16
|
+
function localeName(locale, inLocale) {
|
|
17
|
+
try {
|
|
18
|
+
const name = new Intl.DisplayNames([inLocale], { type: 'language' }).of(locale);
|
|
19
|
+
return name ? `${name} (${locale})` : locale;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return locale;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export default function TranslationsSurface(_props) {
|
|
26
|
+
const { fetch: adminFetch, navigate } = useAdminContext();
|
|
27
|
+
const [locales, setLocales] = useState(null);
|
|
28
|
+
const [coverage, setCoverage] = useState(null);
|
|
29
|
+
const [strings, setStrings] = useState(null);
|
|
30
|
+
const [loading, setLoading] = useState(true);
|
|
31
|
+
const [error, setError] = useState(null);
|
|
32
|
+
const [creating, setCreating] = useState(null);
|
|
33
|
+
const [createError, setCreateError] = useState(null);
|
|
34
|
+
const load = useCallback(async () => {
|
|
35
|
+
setLoading(true);
|
|
36
|
+
setError(null);
|
|
37
|
+
try {
|
|
38
|
+
const [lRes, cRes, sRes] = await Promise.all([
|
|
39
|
+
adminFetch('/api/v1/translations/locales'),
|
|
40
|
+
adminFetch('/api/v1/translations/coverage'),
|
|
41
|
+
adminFetch('/api/v1/translations/strings'),
|
|
42
|
+
]);
|
|
43
|
+
if (!lRes.ok)
|
|
44
|
+
throw new Error(`Could not load locales (${lRes.status})`);
|
|
45
|
+
if (!cRes.ok)
|
|
46
|
+
throw new Error(`Could not load coverage (${cRes.status})`);
|
|
47
|
+
if (!sRes.ok)
|
|
48
|
+
throw new Error(`Could not load interface strings (${sRes.status})`);
|
|
49
|
+
setLocales((await lRes.json()).data);
|
|
50
|
+
setCoverage((await cRes.json()).data);
|
|
51
|
+
setStrings((await sRes.json()).data);
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
setError(e instanceof Error ? e.message : 'Failed to load translation data');
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
setLoading(false);
|
|
58
|
+
}
|
|
59
|
+
}, []);
|
|
60
|
+
useEffect(() => { load(); }, [load]);
|
|
61
|
+
const createTranslation = useCallback(async (item, locale) => {
|
|
62
|
+
setCreating(`${item.id}:${locale}`);
|
|
63
|
+
setCreateError(null);
|
|
64
|
+
try {
|
|
65
|
+
const res = await adminFetch('/api/v1/translations', {
|
|
66
|
+
method: 'POST',
|
|
67
|
+
headers: { 'Content-Type': 'application/json' },
|
|
68
|
+
body: JSON.stringify({ sourceId: item.id, locale }),
|
|
69
|
+
});
|
|
70
|
+
const body = await res.json().catch(() => null);
|
|
71
|
+
if (!res.ok)
|
|
72
|
+
throw new Error(body?.error?.message ?? `Create failed (${res.status})`);
|
|
73
|
+
// The translation is a fresh draft in the target locale — open its editor.
|
|
74
|
+
navigate(`/admin/content/${body.data.contentTypeName}/${body.data.id}`);
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
setCreateError(e instanceof Error ? e.message : 'Failed to create translation');
|
|
78
|
+
setCreating(null);
|
|
79
|
+
}
|
|
80
|
+
}, [navigate]);
|
|
81
|
+
const defaultLocale = coverage?.defaultLocale ?? locales?.defaultLocale ?? 'en';
|
|
82
|
+
const stringKeys = strings
|
|
83
|
+
? Array.from(new Set(Object.values(strings.bundles).flatMap((b) => Object.keys(b)))).sort()
|
|
84
|
+
: [];
|
|
85
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "kywi-admin-page-header", children: _jsx("h1", { children: "Translations" }) }), loading ? (_jsx(LoadingState, { label: "Loading translation coverage\u2026" })) : error ? (_jsx(ErrorState, { message: error, onRetry: load })) : (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 'var(--kywi-space-6, 1.5rem)', maxWidth: 960 }, children: [_jsxs("section", { className: "kywi-admin-settings-section", "aria-label": "Configured locales", children: [_jsx("h2", { className: "kywi-admin-settings-section-title", children: "Configured locales" }), _jsx("div", { className: "kywi-tag-list", style: { display: 'flex', gap: '0.5rem', flexWrap: 'wrap' }, children: (locales?.locales ?? []).map((l) => (_jsxs("span", { className: "kywi-admin-status-badge", "data-default": l === defaultLocale, children: [localeName(l, defaultLocale), l === defaultLocale ? ' · default' : ''] }, l))) }), _jsxs("p", { className: "kywi-field-hint", style: { marginTop: '0.75rem' }, children: ["Locales are defined in ", _jsx("code", { children: "kywi.config.ts" }), " (", _jsx("code", { children: "site.locales" }), ") and are read-only here. Add a locale in code, then create translations below."] })] }), _jsxs("section", { className: "kywi-admin-settings-section", "aria-label": "Content coverage", children: [_jsx("h2", { className: "kywi-admin-settings-section-title", children: "Content coverage" }), _jsxs("p", { className: "kywi-field-hint", style: { marginTop: '-0.25rem', marginBottom: '1rem' }, children: ["Which ", _jsx("strong", { children: "published" }), " ", localeName(defaultLocale, defaultLocale), " content still lacks a translation in each locale. Creating one copies the source and opens the editor in the target locale."] }), createError && _jsx(ErrorState, { message: createError }), (coverage?.locales.length ?? 0) === 0 ? (_jsxs("div", { className: "kywi-admin-empty-state", children: ["No additional locales are configured. Add one to ", _jsx("code", { children: "site.locales" }), " to manage translations."] })) : (coverage.locales.map((lc) => (_jsxs("div", { style: { marginBottom: '1.5rem' }, children: [_jsxs("div", { style: {
|
|
86
|
+
display: 'flex',
|
|
87
|
+
alignItems: 'center',
|
|
88
|
+
justifyContent: 'space-between',
|
|
89
|
+
marginBottom: '0.5rem',
|
|
90
|
+
flexWrap: 'wrap',
|
|
91
|
+
gap: '0.5rem',
|
|
92
|
+
}, children: [_jsx("h3", { style: { fontSize: '0.95rem', fontWeight: 600 }, children: localeName(lc.locale, defaultLocale) }), _jsxs("span", { className: "kywi-admin-status-badge", "data-complete": lc.translated === lc.total, children: [lc.translated, " / ", lc.total, " translated"] })] }), lc.missing.length === 0 ? (_jsx("div", { className: "kywi-admin-callout kywi-admin-callout-success", children: lc.total === 0
|
|
93
|
+
? 'No published content yet.'
|
|
94
|
+
: `All published content is translated into ${lc.locale}.` })) : (_jsxs("table", { className: "kywi-admin-table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Title" }), _jsx("th", { children: "Type" }), _jsx("th", { children: "Slug" }), _jsx("th", { style: { textAlign: 'right' }, children: "Action" })] }) }), _jsx("tbody", { children: lc.missing.map((item) => {
|
|
95
|
+
const busy = creating === `${item.id}:${lc.locale}`;
|
|
96
|
+
return (_jsxs("tr", { children: [_jsx("td", { children: item.title }), _jsx("td", { children: item.contentTypeName }), _jsx("td", { children: _jsx("code", { children: item.slug }) }), _jsx("td", { style: { textAlign: 'right' }, children: _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary kywi-btn-sm", disabled: !!creating, onClick: () => createTranslation(item, lc.locale), children: busy ? 'Creating…' : `Create ${lc.locale} translation` }) })] }, item.id));
|
|
97
|
+
}) })] }))] }, lc.locale))))] }), _jsxs("section", { className: "kywi-admin-settings-section", "aria-label": "Interface strings", children: [_jsx("h2", { className: "kywi-admin-settings-section-title", children: "Interface strings" }), _jsxs("div", { className: "kywi-admin-callout kywi-admin-callout-info", children: ["Resource bundles are JSON files loaded at startup (", _jsx("code", { children: "apps/reference/i18n/*.json" }), "). They are config-as-code and edited in the repository \u2014 this view is read-only."] }), stringKeys.length === 0 ? (_jsx("div", { className: "kywi-admin-empty-state", children: "No interface string bundles are loaded." })) : (_jsx("div", { className: "kywi-table-scroll", style: { overflowX: 'auto' }, children: _jsxs("table", { className: "kywi-admin-table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Key" }), (strings?.locales ?? []).map((l) => (_jsx("th", { children: l.toUpperCase() }, l)))] }) }), _jsx("tbody", { children: stringKeys.map((key) => (_jsxs("tr", { children: [_jsx("td", { children: _jsx("code", { children: key }) }), (strings?.locales ?? []).map((l) => (_jsx("td", { children: strings?.bundles[l]?.[key] ?? (_jsx("span", { className: "kywi-def-val--muted", children: "\u2014" })) }, l)))] }, key))) })] }) }))] })] }))] }));
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=translations-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"translations-index.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/translations/translations-index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;GAQG;AAEH,OAAc,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA8BtD,8EAA8E;AAC9E,SAAS,UAAU,CAAC,MAAc,EAAE,QAAgB;IAClD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;QAC/E,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAA;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,MAAoB;IAC9D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAA;IACzD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAyB,IAAI,CAAC,CAAA;IACpE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAA0B,IAAI,CAAC,CAAA;IACvE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAyB,IAAI,CAAC,CAAA;IACpE,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;IACvD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC7D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEnE,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClC,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC3C,UAAU,CAAC,8BAA8B,CAAC;gBAC1C,UAAU,CAAC,+BAA+B,CAAC;gBAC3C,UAAU,CAAC,8BAA8B,CAAC;aAC3C,CAAC,CAAA;YACF,IAAI,CAAC,IAAI,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;YACxE,IAAI,CAAC,IAAI,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;YACzE,IAAI,CAAC,IAAI,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;YAClF,UAAU,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAuB,CAAC,CAAA;YACvD,WAAW,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAwB,CAAC,CAAA;YACzD,UAAU,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAuB,CAAC,CAAA;QACzD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,QAAQ,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAA;QAC9E,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAA,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEnC,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,EAAE,IAAiB,EAAE,MAAc,EAAE,EAAE;QAChF,WAAW,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC,CAAA;QACnC,cAAc,CAAC,IAAI,CAAC,CAAA;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,sBAAsB,EAAE;gBACnD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;aACpD,CAAC,CAAA;YACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;YAC/C,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,kBAAkB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;YACrF,2EAA2E;YAC3E,QAAQ,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QACzE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,cAAc,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAA;YAC/E,WAAW,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,MAAM,aAAa,GAAG,QAAQ,EAAE,aAAa,IAAI,OAAO,EAAE,aAAa,IAAI,IAAI,CAAA;IAC/E,MAAM,UAAU,GAAG,OAAO;QACxB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QAC3F,CAAC,CAAC,EAAE,CAAA;IAEN,OAAO,CACL,8BACE,cAAK,SAAS,EAAC,wBAAwB,YACrC,wCAAqB,GACjB,EAEL,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,YAAY,IAAC,KAAK,EAAC,oCAA+B,GAAG,CACvD,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACV,KAAC,UAAU,IAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,GAAI,CAC9C,CAAC,CAAC,CAAC,CACF,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,6BAA6B,EAAE,QAAQ,EAAE,GAAG,EAAE,aAEzG,mBAAS,SAAS,EAAC,6BAA6B,gBAAY,oBAAoB,aAC9E,aAAI,SAAS,EAAC,mCAAmC,mCAAwB,EACzE,cAAK,SAAS,EAAC,eAAe,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YACvF,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnC,gBAAc,SAAS,EAAC,yBAAyB,kBAAe,CAAC,KAAK,aAAa,aAChF,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,EAC5B,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAF/B,CAAC,CAGL,CACR,CAAC,GACE,EACN,aAAG,SAAS,EAAC,iBAAiB,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,wCACrC,4CAA2B,QAAE,0CAAyB,uFAE3E,IACI,EAGV,mBAAS,SAAS,EAAC,6BAA6B,gBAAY,kBAAkB,aAC5E,aAAI,SAAS,EAAC,mCAAmC,iCAAsB,EACvE,aAAG,SAAS,EAAC,iBAAiB,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,uBAC7E,yCAA0B,OAAE,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,oIAGxE,EAEH,WAAW,IAAI,KAAC,UAAU,IAAC,OAAO,EAAE,WAAW,GAAI,EAEnD,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACvC,eAAK,SAAS,EAAC,wBAAwB,kEACY,0CAAyB,gCAEtE,CACP,CAAC,CAAC,CAAC,CACF,QAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAC5B,eAAqB,KAAK,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,aACpD,eACE,KAAK,EAAE;4CACL,OAAO,EAAE,MAAM;4CACf,UAAU,EAAE,QAAQ;4CACpB,cAAc,EAAE,eAAe;4CAC/B,YAAY,EAAE,QAAQ;4CACtB,QAAQ,EAAE,MAAM;4CAChB,GAAG,EAAE,QAAQ;yCACd,aAED,aAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,YAChD,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,GAClC,EACL,gBAAM,SAAS,EAAC,yBAAyB,mBAAgB,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,KAAK,aAChF,EAAE,CAAC,UAAU,SAAK,EAAE,CAAC,KAAK,mBACtB,IACH,EAEL,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACzB,cAAK,SAAS,EAAC,+CAA+C,YAC3D,EAAE,CAAC,KAAK,KAAK,CAAC;4CACb,CAAC,CAAC,2BAA2B;4CAC7B,CAAC,CAAC,4CAA4C,EAAE,CAAC,MAAM,GAAG,GACxD,CACP,CAAC,CAAC,CAAC,CACF,iBAAO,SAAS,EAAC,kBAAkB,aACjC,0BACE,yBACE,iCAAc,EACd,gCAAa,EACb,gCAAa,EACb,aAAI,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,uBAAa,IAC3C,GACC,EACR,0BACG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oDACvB,MAAM,IAAI,GAAG,QAAQ,KAAK,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,CAAA;oDACnD,OAAO,CACL,yBACE,uBAAK,IAAI,CAAC,KAAK,GAAM,EACrB,uBAAK,IAAI,CAAC,eAAe,GAAM,EAC/B,uBAAI,yBAAO,IAAI,CAAC,IAAI,GAAQ,GAAK,EACjC,aAAI,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,YAC/B,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,yCAAyC,EACnD,QAAQ,EAAE,CAAC,CAAC,QAAQ,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,YAEhD,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,MAAM,cAAc,GAChD,GACN,KAbE,IAAI,CAAC,EAAE,CAcX,CACN,CAAA;gDACH,CAAC,CAAC,GACI,IACF,CACT,KA1DO,EAAE,CAAC,MAAM,CA2Db,CACP,CAAC,CACH,IACO,EAGV,mBAAS,SAAS,EAAC,6BAA6B,gBAAY,mBAAmB,aAC7E,aAAI,SAAS,EAAC,mCAAmC,kCAAuB,EACxE,eAAK,SAAS,EAAC,4CAA4C,oEACN,wDAAuC,8FAEtF,EACL,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACzB,cAAK,SAAS,EAAC,wBAAwB,wDAA8C,CACtF,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,YAC7D,iBAAO,SAAS,EAAC,kBAAkB,aACjC,0BACE,yBACE,+BAAY,EACX,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnC,uBAAa,CAAC,CAAC,WAAW,EAAE,IAAnB,CAAC,CAAwB,CACnC,CAAC,IACC,GACC,EACR,0BACG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACvB,yBACE,uBAAI,yBAAO,GAAG,GAAQ,GAAK,EAC1B,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnC,uBACG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAC7B,eAAM,SAAS,EAAC,qBAAqB,uBAAS,CAC/C,IAHM,CAAC,CAIL,CACN,CAAC,KARK,GAAG,CASP,CACN,CAAC,GACI,IACF,GACJ,CACP,IACO,IACN,CACP,IACA,CACJ,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trash-index.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/trash/trash-index.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AA6BrD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,MAAM,EAAE,YAAY,2CAwK7D"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Trash surface (`/admin/trash`) — 0.2.0 T6 migration.
|
|
5
|
+
*
|
|
6
|
+
* Ported verbatim from `apps/reference/app/admin/trash/page.tsx`. `apiGet`/
|
|
7
|
+
* `apiSend` (the app's `taxonomy-ui` re-exports of `getJson`/`sendJson`) →
|
|
8
|
+
* `getJson`/`sendJson` imported directly from `@kywi-software/core/host-client`;
|
|
9
|
+
* `Loading`/`ErrorBox`/`EmptyState`/`ConfirmDialog` → core `admin/primitives`.
|
|
10
|
+
* The outer `AdminShellWrapper` is dropped — chrome renders once around every
|
|
11
|
+
* surface via `KywiAdminApp`/`AdminChrome`.
|
|
12
|
+
*/
|
|
13
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
14
|
+
import { getJson, sendJson } from '../../../host-client/index.js';
|
|
15
|
+
import { Loading, ErrorBox, EmptyState, ConfirmDialog } from '../../primitives.js';
|
|
16
|
+
function formatDate(value) {
|
|
17
|
+
if (!value)
|
|
18
|
+
return '—';
|
|
19
|
+
const d = new Date(value);
|
|
20
|
+
return isNaN(d.getTime())
|
|
21
|
+
? '—'
|
|
22
|
+
: d.toLocaleString(undefined, {
|
|
23
|
+
year: 'numeric',
|
|
24
|
+
month: 'short',
|
|
25
|
+
day: 'numeric',
|
|
26
|
+
hour: '2-digit',
|
|
27
|
+
minute: '2-digit',
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
// ── Surface ──────────────────────────────────────────────────────────────────
|
|
31
|
+
export default function TrashIndexSurface(_props) {
|
|
32
|
+
const [rows, setRows] = useState([]);
|
|
33
|
+
const [loading, setLoading] = useState(true);
|
|
34
|
+
const [error, setError] = useState(null);
|
|
35
|
+
const [notice, setNotice] = useState(null);
|
|
36
|
+
// Row-level busy state keyed by id, so one row's action doesn't disable all.
|
|
37
|
+
const [busyId, setBusyId] = useState(null);
|
|
38
|
+
// Pending permanent-delete confirmation (null = closed).
|
|
39
|
+
const [purging, setPurging] = useState(null);
|
|
40
|
+
const [purgeBusy, setPurgeBusy] = useState(false);
|
|
41
|
+
const load = useCallback(async () => {
|
|
42
|
+
setLoading(true);
|
|
43
|
+
setError(null);
|
|
44
|
+
try {
|
|
45
|
+
setRows(await getJson('/api/v1/content/trash'));
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
setError(e instanceof Error ? e.message : 'Failed to load trash');
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
setLoading(false);
|
|
52
|
+
}
|
|
53
|
+
}, []);
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
load();
|
|
56
|
+
}, [load]);
|
|
57
|
+
const handleRestore = useCallback(async (row) => {
|
|
58
|
+
setBusyId(row.id);
|
|
59
|
+
setError(null);
|
|
60
|
+
setNotice(null);
|
|
61
|
+
try {
|
|
62
|
+
await sendJson(`/api/v1/content/by-id/${row.id}/restore`, 'POST');
|
|
63
|
+
setRows(prev => prev.filter(r => r.id !== row.id));
|
|
64
|
+
setNotice(`Restored “${row.title}”.`);
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
setError(e instanceof Error ? e.message : 'Failed to restore content');
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
setBusyId(null);
|
|
71
|
+
}
|
|
72
|
+
}, []);
|
|
73
|
+
const confirmPurge = useCallback(async () => {
|
|
74
|
+
if (!purging)
|
|
75
|
+
return;
|
|
76
|
+
const row = purging;
|
|
77
|
+
setPurgeBusy(true);
|
|
78
|
+
setError(null);
|
|
79
|
+
setNotice(null);
|
|
80
|
+
try {
|
|
81
|
+
await sendJson(`/api/v1/content/by-id/${row.id}/permanent`, 'DELETE');
|
|
82
|
+
setRows(prev => prev.filter(r => r.id !== row.id));
|
|
83
|
+
setNotice(`Permanently deleted “${row.title}”.`);
|
|
84
|
+
setPurging(null);
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
setError(e instanceof Error ? e.message : 'Failed to delete content');
|
|
88
|
+
setPurging(null);
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
setPurgeBusy(false);
|
|
92
|
+
}
|
|
93
|
+
}, [purging]);
|
|
94
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "kywi-admin-page-header", children: [_jsx("h1", { children: "Trash" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: load, disabled: loading, children: "Refresh" })] }), _jsx("p", { className: "kywi-text-muted", style: { marginTop: 'calc(-1 * var(--kywi-space-2))' }, children: "Soft-deleted content. Restore returns an item to its content type; permanent delete removes it for good and cannot be undone." }), notice && (_jsx("p", { className: "kywi-admin-callout kywi-admin-callout-info", role: "status", children: notice })), loading ? (_jsx(Loading, { label: "Loading trash\u2026" })) : error && rows.length === 0 ? (_jsx(ErrorBox, { message: error, onRetry: load })) : rows.length === 0 ? (_jsxs(EmptyState, { children: [_jsx("p", { children: "Trash is empty." }), _jsx("p", { className: "kywi-text-muted", children: "Deleted content lands here first, so you can restore it or remove it permanently." })] })) : (_jsxs(_Fragment, { children: [error && (_jsx("p", { className: "kywi-admin-error-message", role: "alert", children: error })), _jsxs("table", { className: "kywi-admin-table", "data-testid": "trash-table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: "Title" }), _jsx("th", { scope: "col", children: "Type" }), _jsx("th", { scope: "col", children: "Deleted" }), _jsx("th", { scope: "col", children: "Actions" })] }) }), _jsx("tbody", { children: rows.map(row => (_jsxs("tr", { "data-testid": "trash-row", "data-content-id": row.id, children: [_jsx("td", { children: row.title || _jsx("span", { className: "kywi-text-muted", children: "Untitled" }) }), _jsx("td", { children: _jsx("code", { children: row.contentTypeName }) }), _jsx("td", { children: formatDate(row.deletedAt) }), _jsx("td", { children: _jsxs("div", { className: "kywi-admin-actions", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary kywi-btn-sm", onClick: () => handleRestore(row), disabled: busyId === row.id, children: busyId === row.id ? 'Restoring…' : 'Restore' }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-danger kywi-btn-sm", onClick: () => setPurging(row), disabled: busyId === row.id, children: "Delete permanently" })] }) })] }, row.id))) })] })] })), purging && (_jsx(ConfirmDialog, { title: `Permanently delete “${purging.title || 'Untitled'}”?`, message: _jsx("p", { children: "This removes the content for good. This action cannot be undone." }), confirmLabel: "Delete permanently", busy: purgeBusy, onConfirm: confirmPurge, onCancel: () => setPurging(null) }))] }));
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=trash-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trash-index.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/trash/trash-index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;GASG;AAEH,OAAc,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE/D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAWlF,SAAS,UAAU,CAAC,KAAoB;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAA;IACtB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;IACzB,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE;YAC1B,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,OAAO;YACd,GAAG,EAAE,SAAS;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAA;AACR,CAAC;AAED,gFAAgF;AAEhF,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,MAAoB;IAC5D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAa,EAAE,CAAC,CAAA;IAChD,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;IACvD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEzD,6EAA6E;IAC7E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACzD,yDAAyD;IACzD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAkB,IAAI,CAAC,CAAA;IAC7D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEjD,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,OAAO,CAAa,uBAAuB,CAAC,CAAC,CAAA;QAC7D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,QAAQ,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAA;QACnE,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,EAAE,CAAA;IACR,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,MAAM,aAAa,GAAG,WAAW,CAC/B,KAAK,EAAE,GAAa,EAAE,EAAE;QACtB,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,SAAS,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,yBAAyB,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;YACjE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YAClD,SAAS,CAAC,aAAa,GAAG,CAAC,KAAK,IAAI,CAAC,CAAA;QACvC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,QAAQ,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAA;QACxE,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,IAAI,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,EACD,EAAE,CACH,CAAA;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,MAAM,GAAG,GAAG,OAAO,CAAA;QACnB,YAAY,CAAC,IAAI,CAAC,CAAA;QAClB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,SAAS,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,yBAAyB,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;YACrE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YAClD,SAAS,CAAC,wBAAwB,GAAG,CAAC,KAAK,IAAI,CAAC,CAAA;YAChD,UAAU,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,QAAQ,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAA;YACrE,UAAU,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,OAAO,CACL,8BACE,eAAK,SAAS,EAAC,wBAAwB,aACrC,iCAAc,EACd,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6BAA6B,EACvC,OAAO,EAAE,IAAI,EACb,QAAQ,EAAE,OAAO,wBAGV,IACL,EAEN,YAAG,SAAS,EAAC,iBAAiB,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gCAAgC,EAAE,8IAGjF,EAEH,MAAM,IAAI,CACT,YAAG,SAAS,EAAC,4CAA4C,EAAC,IAAI,EAAC,QAAQ,YACpE,MAAM,GACL,CACL,EAEA,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,OAAO,IAAC,KAAK,EAAC,qBAAgB,GAAG,CACnC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC/B,KAAC,QAAQ,IAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,GAAI,CAC5C,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,MAAC,UAAU,eACT,0CAAsB,EACtB,YAAG,SAAS,EAAC,iBAAiB,kGAE1B,IACO,CACd,CAAC,CAAC,CAAC,CACF,8BACG,KAAK,IAAI,CACR,YAAG,SAAS,EAAC,0BAA0B,EAAC,IAAI,EAAC,OAAO,YACjD,KAAK,GACJ,CACL,EACD,iBAAO,SAAS,EAAC,kBAAkB,iBAAa,aAAa,aAC3D,0BACE,yBACE,aAAI,KAAK,EAAC,KAAK,sBAAW,EAC1B,aAAI,KAAK,EAAC,KAAK,qBAAU,EACzB,aAAI,KAAK,EAAC,KAAK,wBAAa,EAC5B,aAAI,KAAK,EAAC,KAAK,wBAAa,IACzB,GACC,EACR,0BACG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CACf,6BAA6B,WAAW,qBAAkB,GAAG,CAAC,EAAE,aAC9D,uBAAK,GAAG,CAAC,KAAK,IAAI,eAAM,SAAS,EAAC,iBAAiB,yBAAgB,GAAM,EACzE,uBACE,yBAAO,GAAG,CAAC,eAAe,GAAQ,GAC/B,EACL,uBAAK,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,GAAM,EACpC,uBACE,eAAK,SAAS,EAAC,oBAAoB,aACjC,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,yCAAyC,EACnD,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EACjC,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAC,EAAE,YAE1B,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,GACtC,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,sCAAsC,EAChD,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAC9B,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAC,EAAE,mCAGpB,IACL,GACH,KAzBE,GAAG,CAAC,EAAE,CA0BV,CACN,CAAC,GACI,IACF,IACP,CACJ,EAEA,OAAO,IAAI,CACV,KAAC,aAAa,IACZ,KAAK,EAAE,uBAAuB,OAAO,CAAC,KAAK,IAAI,UAAU,IAAI,EAC7D,OAAO,EACL,2FAEI,EAEN,YAAY,EAAC,oBAAoB,EACjC,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAChC,CACH,IACA,CACJ,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared data helpers for the admin Users surface (0.2.0 admin-app migration,
|
|
3
|
+
* plan §1.3 / §2, T9). Ported verbatim from
|
|
4
|
+
* `apps/reference/app/admin/users/users-data.ts`; the only substitution is the
|
|
5
|
+
* fetch source: the reference read `adminFetch` from app-local `lib/admin-auth`,
|
|
6
|
+
* these helpers instead take a `fetchFn: FetchLike` parameter supplied by each
|
|
7
|
+
* surface from `useAdminContext().fetch` (same pattern as
|
|
8
|
+
* `surfaces/content/runtime-content-types.ts`). All calls go through the
|
|
9
|
+
* DB-backed /api/v1 handler.
|
|
10
|
+
*/
|
|
11
|
+
import type { FetchLike } from '../../content-editor-api.js';
|
|
12
|
+
export interface RawUser {
|
|
13
|
+
id: string;
|
|
14
|
+
email: string;
|
|
15
|
+
firstName: string;
|
|
16
|
+
lastName: string;
|
|
17
|
+
role: string;
|
|
18
|
+
isActive: boolean;
|
|
19
|
+
lastLoginAt: string | null;
|
|
20
|
+
}
|
|
21
|
+
export interface RawGroup {
|
|
22
|
+
id: string;
|
|
23
|
+
name: string;
|
|
24
|
+
type: string;
|
|
25
|
+
defaultRole: string;
|
|
26
|
+
siteId: string;
|
|
27
|
+
}
|
|
28
|
+
export interface RawSite {
|
|
29
|
+
id: string;
|
|
30
|
+
slug: string;
|
|
31
|
+
name: string;
|
|
32
|
+
}
|
|
33
|
+
/** The role model, in privilege order, per packages/core/src/auth/roles.ts. */
|
|
34
|
+
export declare const KYWI_ROLES: readonly ["superAdmin", "siteAdmin", "editor", "author", "reader"];
|
|
35
|
+
export declare function fetchData<T>(fetchFn: FetchLike, path: string): Promise<T>;
|
|
36
|
+
export declare function loadUsers(fetchFn: FetchLike): Promise<RawUser[]>;
|
|
37
|
+
export declare function loadGroups(fetchFn: FetchLike): Promise<RawGroup[]>;
|
|
38
|
+
export declare function loadSites(fetchFn: FetchLike): Promise<RawSite[]>;
|
|
39
|
+
/** Load groups plus their member user-IDs (one members call per group). */
|
|
40
|
+
export declare function loadGroupsWithMembers(fetchFn: FetchLike): Promise<{
|
|
41
|
+
groups: RawGroup[];
|
|
42
|
+
membersByGroup: Record<string, string[]>;
|
|
43
|
+
}>;
|
|
44
|
+
/** Invert a groupId→userIds map into userId→groupNames. */
|
|
45
|
+
export declare function buildUserGroupNames(groups: RawGroup[], membersByGroup: Record<string, string[]>): Record<string, string[]>;
|
|
46
|
+
export declare function fullName(u: {
|
|
47
|
+
firstName: string;
|
|
48
|
+
lastName: string;
|
|
49
|
+
email: string;
|
|
50
|
+
}): string;
|
|
51
|
+
//# sourceMappingURL=users-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users-data.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/users/users-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,+EAA+E;AAC/E,eAAO,MAAM,UAAU,oEAAqE,CAAA;AAE5F,wBAAsB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAc/E;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAEtE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAExE;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAEtE;AAED,2EAA2E;AAC3E,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;IACvE,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACzC,CAAC,CAYD;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,QAAQ,EAAE,EAClB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACvC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAW1B;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAG1F"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/** The role model, in privilege order, per packages/core/src/auth/roles.ts. */
|
|
2
|
+
export const KYWI_ROLES = ['superAdmin', 'siteAdmin', 'editor', 'author', 'reader'];
|
|
3
|
+
export async function fetchData(fetchFn, path) {
|
|
4
|
+
const res = await fetchFn(path);
|
|
5
|
+
if (!res.ok) {
|
|
6
|
+
let message = `Request failed (${res.status})`;
|
|
7
|
+
try {
|
|
8
|
+
const body = await res.json();
|
|
9
|
+
message = body?.error?.message ?? message;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
/* keep default */
|
|
13
|
+
}
|
|
14
|
+
throw new Error(message);
|
|
15
|
+
}
|
|
16
|
+
const body = await res.json();
|
|
17
|
+
return body.data;
|
|
18
|
+
}
|
|
19
|
+
export async function loadUsers(fetchFn) {
|
|
20
|
+
return fetchData(fetchFn, '/api/v1/users');
|
|
21
|
+
}
|
|
22
|
+
export async function loadGroups(fetchFn) {
|
|
23
|
+
return fetchData(fetchFn, '/api/v1/groups');
|
|
24
|
+
}
|
|
25
|
+
export async function loadSites(fetchFn) {
|
|
26
|
+
return fetchData(fetchFn, '/api/v1/sites');
|
|
27
|
+
}
|
|
28
|
+
/** Load groups plus their member user-IDs (one members call per group). */
|
|
29
|
+
export async function loadGroupsWithMembers(fetchFn) {
|
|
30
|
+
const groups = await loadGroups(fetchFn);
|
|
31
|
+
const entries = await Promise.all(groups.map(async (g) => {
|
|
32
|
+
try {
|
|
33
|
+
return [g.id, await fetchData(fetchFn, `/api/v1/groups/${g.id}/members`)];
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return [g.id, []];
|
|
37
|
+
}
|
|
38
|
+
}));
|
|
39
|
+
return { groups, membersByGroup: Object.fromEntries(entries) };
|
|
40
|
+
}
|
|
41
|
+
/** Invert a groupId→userIds map into userId→groupNames. */
|
|
42
|
+
export function buildUserGroupNames(groups, membersByGroup) {
|
|
43
|
+
const nameById = new Map(groups.map(g => [g.id, g.name]));
|
|
44
|
+
const result = {};
|
|
45
|
+
for (const [groupId, userIds] of Object.entries(membersByGroup)) {
|
|
46
|
+
const name = nameById.get(groupId);
|
|
47
|
+
if (!name)
|
|
48
|
+
continue;
|
|
49
|
+
for (const userId of userIds) {
|
|
50
|
+
;
|
|
51
|
+
(result[userId] ??= []).push(name);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
export function fullName(u) {
|
|
57
|
+
const name = `${u.firstName ?? ''} ${u.lastName ?? ''}`.trim();
|
|
58
|
+
return name || u.email;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=users-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users-data.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/users/users-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users-detail.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/users/users-detail.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAwBrD,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,2CAyKlE"}
|