@growth-labs/cms 0.1.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/README.md +165 -0
- package/dist/engine/activity-log.d.ts +17 -0
- package/dist/engine/activity-log.d.ts.map +1 -0
- package/dist/engine/activity-log.js +17 -0
- package/dist/engine/activity-log.js.map +1 -0
- package/dist/engine/ai-prompts.d.ts +57 -0
- package/dist/engine/ai-prompts.d.ts.map +1 -0
- package/dist/engine/ai-prompts.js +90 -0
- package/dist/engine/ai-prompts.js.map +1 -0
- package/dist/engine/ai-writeback.d.ts +36 -0
- package/dist/engine/ai-writeback.d.ts.map +1 -0
- package/dist/engine/ai-writeback.js +45 -0
- package/dist/engine/ai-writeback.js.map +1 -0
- package/dist/engine/api-keys.d.ts +76 -0
- package/dist/engine/api-keys.d.ts.map +1 -0
- package/dist/engine/api-keys.js +165 -0
- package/dist/engine/api-keys.js.map +1 -0
- package/dist/engine/content-insights.d.ts +36 -0
- package/dist/engine/content-insights.d.ts.map +1 -0
- package/dist/engine/content-insights.js +114 -0
- package/dist/engine/content-insights.js.map +1 -0
- package/dist/engine/contributors.d.ts +25 -0
- package/dist/engine/contributors.d.ts.map +1 -0
- package/dist/engine/contributors.js +59 -0
- package/dist/engine/contributors.js.map +1 -0
- package/dist/engine/cron.d.ts +15 -0
- package/dist/engine/cron.d.ts.map +1 -0
- package/dist/engine/cron.js +33 -0
- package/dist/engine/cron.js.map +1 -0
- package/dist/engine/d1.d.ts +16 -0
- package/dist/engine/d1.d.ts.map +1 -0
- package/dist/engine/d1.js +13 -0
- package/dist/engine/d1.js.map +1 -0
- package/dist/engine/foundry-dispatch.d.ts +52 -0
- package/dist/engine/foundry-dispatch.d.ts.map +1 -0
- package/dist/engine/foundry-dispatch.js +290 -0
- package/dist/engine/foundry-dispatch.js.map +1 -0
- package/dist/engine/import-parsers.d.ts +11 -0
- package/dist/engine/import-parsers.d.ts.map +1 -0
- package/dist/engine/import-parsers.js +373 -0
- package/dist/engine/import-parsers.js.map +1 -0
- package/dist/engine/index.d.ts +28 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +57 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/invites.d.ts +78 -0
- package/dist/engine/invites.d.ts.map +1 -0
- package/dist/engine/invites.js +158 -0
- package/dist/engine/invites.js.map +1 -0
- package/dist/engine/members.d.ts +59 -0
- package/dist/engine/members.d.ts.map +1 -0
- package/dist/engine/members.js +124 -0
- package/dist/engine/members.js.map +1 -0
- package/dist/engine/membership-rules.d.ts +25 -0
- package/dist/engine/membership-rules.d.ts.map +1 -0
- package/dist/engine/membership-rules.js +44 -0
- package/dist/engine/membership-rules.js.map +1 -0
- package/dist/engine/og-render.d.ts +40 -0
- package/dist/engine/og-render.d.ts.map +1 -0
- package/dist/engine/og-render.js +26 -0
- package/dist/engine/og-render.js.map +1 -0
- package/dist/engine/publish-guard.d.ts +58 -0
- package/dist/engine/publish-guard.d.ts.map +1 -0
- package/dist/engine/publish-guard.js +80 -0
- package/dist/engine/publish-guard.js.map +1 -0
- package/dist/engine/publisher.d.ts +171 -0
- package/dist/engine/publisher.d.ts.map +1 -0
- package/dist/engine/publisher.js +597 -0
- package/dist/engine/publisher.js.map +1 -0
- package/dist/engine/revisions.d.ts +39 -0
- package/dist/engine/revisions.d.ts.map +1 -0
- package/dist/engine/revisions.js +203 -0
- package/dist/engine/revisions.js.map +1 -0
- package/dist/engine/sanitize.d.ts +52 -0
- package/dist/engine/sanitize.d.ts.map +1 -0
- package/dist/engine/sanitize.js +155 -0
- package/dist/engine/sanitize.js.map +1 -0
- package/dist/engine/seed-membership.d.ts +29 -0
- package/dist/engine/seed-membership.d.ts.map +1 -0
- package/dist/engine/seed-membership.js +65 -0
- package/dist/engine/seed-membership.js.map +1 -0
- package/dist/engine/seo.d.ts +20 -0
- package/dist/engine/seo.d.ts.map +1 -0
- package/dist/engine/seo.js +50 -0
- package/dist/engine/seo.js.map +1 -0
- package/dist/engine/slug-redirects.d.ts +8 -0
- package/dist/engine/slug-redirects.d.ts.map +1 -0
- package/dist/engine/slug-redirects.js +26 -0
- package/dist/engine/slug-redirects.js.map +1 -0
- package/dist/engine/slug.d.ts +6 -0
- package/dist/engine/slug.d.ts.map +1 -0
- package/dist/engine/slug.js +28 -0
- package/dist/engine/slug.js.map +1 -0
- package/dist/engine/soft-delete.d.ts +8 -0
- package/dist/engine/soft-delete.d.ts.map +1 -0
- package/dist/engine/soft-delete.js +28 -0
- package/dist/engine/soft-delete.js.map +1 -0
- package/dist/engine/tags.d.ts +14 -0
- package/dist/engine/tags.d.ts.map +1 -0
- package/dist/engine/tags.js +79 -0
- package/dist/engine/tags.js.map +1 -0
- package/dist/engine/topics.d.ts +10 -0
- package/dist/engine/topics.d.ts.map +1 -0
- package/dist/engine/topics.js +140 -0
- package/dist/engine/topics.js.map +1 -0
- package/dist/engine/url-guard.d.ts +12 -0
- package/dist/engine/url-guard.d.ts.map +1 -0
- package/dist/engine/url-guard.js +129 -0
- package/dist/engine/url-guard.js.map +1 -0
- package/dist/engine/validator/checks/bare-url-not-autolinked.d.ts +20 -0
- package/dist/engine/validator/checks/bare-url-not-autolinked.d.ts.map +1 -0
- package/dist/engine/validator/checks/bare-url-not-autolinked.js +54 -0
- package/dist/engine/validator/checks/bare-url-not-autolinked.js.map +1 -0
- package/dist/engine/validator/checks/broken-footnote-label.d.ts +16 -0
- package/dist/engine/validator/checks/broken-footnote-label.d.ts.map +1 -0
- package/dist/engine/validator/checks/broken-footnote-label.js +17 -0
- package/dist/engine/validator/checks/broken-footnote-label.js.map +1 -0
- package/dist/engine/validator/checks/double-encoded-entities.d.ts +18 -0
- package/dist/engine/validator/checks/double-encoded-entities.d.ts.map +1 -0
- package/dist/engine/validator/checks/double-encoded-entities.js +23 -0
- package/dist/engine/validator/checks/double-encoded-entities.js.map +1 -0
- package/dist/engine/validator/checks/empty-alt-text.d.ts +14 -0
- package/dist/engine/validator/checks/empty-alt-text.d.ts.map +1 -0
- package/dist/engine/validator/checks/empty-alt-text.js +23 -0
- package/dist/engine/validator/checks/empty-alt-text.js.map +1 -0
- package/dist/engine/validator/checks/heading-hierarchy-skip.d.ts +11 -0
- package/dist/engine/validator/checks/heading-hierarchy-skip.d.ts.map +1 -0
- package/dist/engine/validator/checks/heading-hierarchy-skip.js +20 -0
- package/dist/engine/validator/checks/heading-hierarchy-skip.js.map +1 -0
- package/dist/engine/validator/checks/html-comment-leak.d.ts +20 -0
- package/dist/engine/validator/checks/html-comment-leak.d.ts.map +1 -0
- package/dist/engine/validator/checks/html-comment-leak.js +30 -0
- package/dist/engine/validator/checks/html-comment-leak.js.map +1 -0
- package/dist/engine/validator/checks/iframe-missing-dims-and-wrapper.d.ts +12 -0
- package/dist/engine/validator/checks/iframe-missing-dims-and-wrapper.d.ts.map +1 -0
- package/dist/engine/validator/checks/iframe-missing-dims-and-wrapper.js +17 -0
- package/dist/engine/validator/checks/iframe-missing-dims-and-wrapper.js.map +1 -0
- package/dist/engine/validator/checks/invisible-control-chars.d.ts +24 -0
- package/dist/engine/validator/checks/invisible-control-chars.d.ts.map +1 -0
- package/dist/engine/validator/checks/invisible-control-chars.js +30 -0
- package/dist/engine/validator/checks/invisible-control-chars.js.map +1 -0
- package/dist/engine/validator/checks/paywall-marker-leak.d.ts +17 -0
- package/dist/engine/validator/checks/paywall-marker-leak.d.ts.map +1 -0
- package/dist/engine/validator/checks/paywall-marker-leak.js +22 -0
- package/dist/engine/validator/checks/paywall-marker-leak.js.map +1 -0
- package/dist/engine/validator/checks/raw-block-html.d.ts +28 -0
- package/dist/engine/validator/checks/raw-block-html.d.ts.map +1 -0
- package/dist/engine/validator/checks/raw-block-html.js +38 -0
- package/dist/engine/validator/checks/raw-block-html.js.map +1 -0
- package/dist/engine/validator/checks/stale-body-html.d.ts +28 -0
- package/dist/engine/validator/checks/stale-body-html.d.ts.map +1 -0
- package/dist/engine/validator/checks/stale-body-html.js +15 -0
- package/dist/engine/validator/checks/stale-body-html.js.map +1 -0
- package/dist/engine/validator/checks/unresolved-footnote-anchor.d.ts +11 -0
- package/dist/engine/validator/checks/unresolved-footnote-anchor.d.ts.map +1 -0
- package/dist/engine/validator/checks/unresolved-footnote-anchor.js +48 -0
- package/dist/engine/validator/checks/unresolved-footnote-anchor.js.map +1 -0
- package/dist/engine/validator/checks/word-gdocs-paste-artifacts.d.ts +23 -0
- package/dist/engine/validator/checks/word-gdocs-paste-artifacts.d.ts.map +1 -0
- package/dist/engine/validator/checks/word-gdocs-paste-artifacts.js +47 -0
- package/dist/engine/validator/checks/word-gdocs-paste-artifacts.js.map +1 -0
- package/dist/engine/validator/index.d.ts +75 -0
- package/dist/engine/validator/index.d.ts.map +1 -0
- package/dist/engine/validator/index.js +313 -0
- package/dist/engine/validator/index.js.map +1 -0
- package/dist/engine/validator/scan.d.ts +28 -0
- package/dist/engine/validator/scan.d.ts.map +1 -0
- package/dist/engine/validator/scan.js +97 -0
- package/dist/engine/validator/scan.js.map +1 -0
- package/dist/engine/validator/types.d.ts +50 -0
- package/dist/engine/validator/types.d.ts.map +1 -0
- package/dist/engine/validator/types.js +51 -0
- package/dist/engine/validator/types.js.map +1 -0
- package/dist/engine/webhook-signer.d.ts +39 -0
- package/dist/engine/webhook-signer.d.ts.map +1 -0
- package/dist/engine/webhook-signer.js +117 -0
- package/dist/engine/webhook-signer.js.map +1 -0
- package/dist/engine/webhooks.d.ts +75 -0
- package/dist/engine/webhooks.d.ts.map +1 -0
- package/dist/engine/webhooks.js +139 -0
- package/dist/engine/webhooks.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/index.d.ts +6 -0
- package/dist/integration/index.d.ts.map +1 -0
- package/dist/integration/index.js +294 -0
- package/dist/integration/index.js.map +1 -0
- package/dist/integration/options.d.ts +105 -0
- package/dist/integration/options.d.ts.map +1 -0
- package/dist/integration/options.js +25 -0
- package/dist/integration/options.js.map +1 -0
- package/dist/integration/vite-plugin.d.ts +4 -0
- package/dist/integration/vite-plugin.d.ts.map +1 -0
- package/dist/integration/vite-plugin.js +37 -0
- package/dist/integration/vite-plugin.js.map +1 -0
- package/dist/providers/index.d.ts +3 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/null.d.ts +9 -0
- package/dist/providers/null.d.ts.map +1 -0
- package/dist/providers/null.js +144 -0
- package/dist/providers/null.js.map +1 -0
- package/dist/providers/types.d.ts +277 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/routes/ai.d.ts +25 -0
- package/dist/routes/ai.d.ts.map +1 -0
- package/dist/routes/ai.js +381 -0
- package/dist/routes/ai.js.map +1 -0
- package/dist/routes/analytics.d.ts +15 -0
- package/dist/routes/analytics.d.ts.map +1 -0
- package/dist/routes/analytics.js +61 -0
- package/dist/routes/analytics.js.map +1 -0
- package/dist/routes/api-keys.d.ts +13 -0
- package/dist/routes/api-keys.d.ts.map +1 -0
- package/dist/routes/api-keys.js +109 -0
- package/dist/routes/api-keys.js.map +1 -0
- package/dist/routes/authors.d.ts +19 -0
- package/dist/routes/authors.d.ts.map +1 -0
- package/dist/routes/authors.js +202 -0
- package/dist/routes/authors.js.map +1 -0
- package/dist/routes/authz-matrix.d.ts +78 -0
- package/dist/routes/authz-matrix.d.ts.map +1 -0
- package/dist/routes/authz-matrix.js +170 -0
- package/dist/routes/authz-matrix.js.map +1 -0
- package/dist/routes/calendar.d.ts +19 -0
- package/dist/routes/calendar.d.ts.map +1 -0
- package/dist/routes/calendar.js +89 -0
- package/dist/routes/calendar.js.map +1 -0
- package/dist/routes/config.d.ts +70 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +23 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/content-insights.d.ts +18 -0
- package/dist/routes/content-insights.d.ts.map +1 -0
- package/dist/routes/content-insights.js +137 -0
- package/dist/routes/content-insights.js.map +1 -0
- package/dist/routes/content.d.ts +145 -0
- package/dist/routes/content.d.ts.map +1 -0
- package/dist/routes/content.js +1374 -0
- package/dist/routes/content.js.map +1 -0
- package/dist/routes/context.d.ts +104 -0
- package/dist/routes/context.d.ts.map +1 -0
- package/dist/routes/context.js +26 -0
- package/dist/routes/context.js.map +1 -0
- package/dist/routes/cron.d.ts +8 -0
- package/dist/routes/cron.d.ts.map +1 -0
- package/dist/routes/cron.js +20 -0
- package/dist/routes/cron.js.map +1 -0
- package/dist/routes/dashboard.d.ts +12 -0
- package/dist/routes/dashboard.d.ts.map +1 -0
- package/dist/routes/dashboard.js +113 -0
- package/dist/routes/dashboard.js.map +1 -0
- package/dist/routes/imports.d.ts +10 -0
- package/dist/routes/imports.d.ts.map +1 -0
- package/dist/routes/imports.js +149 -0
- package/dist/routes/imports.js.map +1 -0
- package/dist/routes/index.d.ts +75 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +141 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/media-lib.d.ts +75 -0
- package/dist/routes/media-lib.d.ts.map +1 -0
- package/dist/routes/media-lib.js +305 -0
- package/dist/routes/media-lib.js.map +1 -0
- package/dist/routes/media.d.ts +32 -0
- package/dist/routes/media.d.ts.map +1 -0
- package/dist/routes/media.js +756 -0
- package/dist/routes/media.js.map +1 -0
- package/dist/routes/preview.d.ts +19 -0
- package/dist/routes/preview.d.ts.map +1 -0
- package/dist/routes/preview.js +150 -0
- package/dist/routes/preview.js.map +1 -0
- package/dist/routes/rbac-invites.d.ts +31 -0
- package/dist/routes/rbac-invites.d.ts.map +1 -0
- package/dist/routes/rbac-invites.js +174 -0
- package/dist/routes/rbac-invites.js.map +1 -0
- package/dist/routes/rbac.d.ts +12 -0
- package/dist/routes/rbac.d.ts.map +1 -0
- package/dist/routes/rbac.js +126 -0
- package/dist/routes/rbac.js.map +1 -0
- package/dist/routes/shell.d.ts +22 -0
- package/dist/routes/shell.d.ts.map +1 -0
- package/dist/routes/shell.js +123 -0
- package/dist/routes/shell.js.map +1 -0
- package/dist/routes/subscriptions.d.ts +21 -0
- package/dist/routes/subscriptions.d.ts.map +1 -0
- package/dist/routes/subscriptions.js +127 -0
- package/dist/routes/subscriptions.js.map +1 -0
- package/dist/routes/tags.d.ts +23 -0
- package/dist/routes/tags.d.ts.map +1 -0
- package/dist/routes/tags.js +68 -0
- package/dist/routes/tags.js.map +1 -0
- package/dist/routes/topics.d.ts +12 -0
- package/dist/routes/topics.d.ts.map +1 -0
- package/dist/routes/topics.js +49 -0
- package/dist/routes/topics.js.map +1 -0
- package/dist/routes/webhooks.d.ts +31 -0
- package/dist/routes/webhooks.d.ts.map +1 -0
- package/dist/routes/webhooks.js +173 -0
- package/dist/routes/webhooks.js.map +1 -0
- package/dist/schema/index.d.ts +4 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +6 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/insights-ingest.d.ts +959 -0
- package/dist/schema/insights-ingest.d.ts.map +1 -0
- package/dist/schema/insights-ingest.js +112 -0
- package/dist/schema/insights-ingest.js.map +1 -0
- package/dist/schema/migrations.d.ts +63 -0
- package/dist/schema/migrations.d.ts.map +1 -0
- package/dist/schema/migrations.js +589 -0
- package/dist/schema/migrations.js.map +1 -0
- package/dist/schema/tables.d.ts +11 -0
- package/dist/schema/tables.d.ts.map +1 -0
- package/dist/schema/tables.js +56 -0
- package/dist/schema/tables.js.map +1 -0
- package/dist/schema/types.d.ts +476 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +37 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/ui/api/_authz.d.ts +6 -0
- package/dist/ui/api/_authz.d.ts.map +1 -0
- package/dist/ui/api/_authz.js +74 -0
- package/dist/ui/api/_authz.js.map +1 -0
- package/dist/ui/api/_content-config.d.ts +22 -0
- package/dist/ui/api/_content-config.d.ts.map +1 -0
- package/dist/ui/api/_content-config.js +50 -0
- package/dist/ui/api/_content-config.js.map +1 -0
- package/dist/ui/api/activity.d.ts +3 -0
- package/dist/ui/api/activity.d.ts.map +1 -0
- package/dist/ui/api/activity.js +28 -0
- package/dist/ui/api/activity.js.map +1 -0
- package/dist/ui/api/analytics.d.ts +3 -0
- package/dist/ui/api/analytics.d.ts.map +1 -0
- package/dist/ui/api/analytics.js +36 -0
- package/dist/ui/api/analytics.js.map +1 -0
- package/dist/ui/api/authors/[id].d.ts +4 -0
- package/dist/ui/api/authors/[id].d.ts.map +1 -0
- package/dist/ui/api/authors/[id].js +17 -0
- package/dist/ui/api/authors/[id].js.map +1 -0
- package/dist/ui/api/authors.d.ts +4 -0
- package/dist/ui/api/authors.d.ts.map +1 -0
- package/dist/ui/api/authors.js +12 -0
- package/dist/ui/api/authors.js.map +1 -0
- package/dist/ui/api/calendar.d.ts +3 -0
- package/dist/ui/api/calendar.d.ts.map +1 -0
- package/dist/ui/api/calendar.js +16 -0
- package/dist/ui/api/calendar.js.map +1 -0
- package/dist/ui/api/content/[id]/ai/headlines.d.ts +3 -0
- package/dist/ui/api/content/[id]/ai/headlines.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/ai/headlines.js +7 -0
- package/dist/ui/api/content/[id]/ai/headlines.js.map +1 -0
- package/dist/ui/api/content/[id]/ai/meta-description.d.ts +3 -0
- package/dist/ui/api/content/[id]/ai/meta-description.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/ai/meta-description.js +6 -0
- package/dist/ui/api/content/[id]/ai/meta-description.js.map +1 -0
- package/dist/ui/api/content/[id]/ai/og-image.d.ts +3 -0
- package/dist/ui/api/content/[id]/ai/og-image.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/ai/og-image.js +7 -0
- package/dist/ui/api/content/[id]/ai/og-image.js.map +1 -0
- package/dist/ui/api/content/[id]/ai/proofread.d.ts +3 -0
- package/dist/ui/api/content/[id]/ai/proofread.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/ai/proofread.js +7 -0
- package/dist/ui/api/content/[id]/ai/proofread.js.map +1 -0
- package/dist/ui/api/content/[id]/ai/takeaways.d.ts +3 -0
- package/dist/ui/api/content/[id]/ai/takeaways.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/ai/takeaways.js +6 -0
- package/dist/ui/api/content/[id]/ai/takeaways.js.map +1 -0
- package/dist/ui/api/content/[id]/contributors.d.ts +4 -0
- package/dist/ui/api/content/[id]/contributors.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/contributors.js +8 -0
- package/dist/ui/api/content/[id]/contributors.js.map +1 -0
- package/dist/ui/api/content/[id]/preview-token.d.ts +3 -0
- package/dist/ui/api/content/[id]/preview-token.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/preview-token.js +16 -0
- package/dist/ui/api/content/[id]/preview-token.js.map +1 -0
- package/dist/ui/api/content/[id]/revisions/[rev]/restore.d.ts +3 -0
- package/dist/ui/api/content/[id]/revisions/[rev]/restore.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/revisions/[rev]/restore.js +7 -0
- package/dist/ui/api/content/[id]/revisions/[rev]/restore.js.map +1 -0
- package/dist/ui/api/content/[id]/revisions/[rev].d.ts +3 -0
- package/dist/ui/api/content/[id]/revisions/[rev].d.ts.map +1 -0
- package/dist/ui/api/content/[id]/revisions/[rev].js +6 -0
- package/dist/ui/api/content/[id]/revisions/[rev].js.map +1 -0
- package/dist/ui/api/content/[id]/revisions.d.ts +3 -0
- package/dist/ui/api/content/[id]/revisions.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/revisions.js +6 -0
- package/dist/ui/api/content/[id]/revisions.js.map +1 -0
- package/dist/ui/api/content/[id]/seo-score.d.ts +3 -0
- package/dist/ui/api/content/[id]/seo-score.d.ts.map +1 -0
- package/dist/ui/api/content/[id]/seo-score.js +7 -0
- package/dist/ui/api/content/[id]/seo-score.js.map +1 -0
- package/dist/ui/api/content/[id].d.ts +5 -0
- package/dist/ui/api/content/[id].d.ts.map +1 -0
- package/dist/ui/api/content/[id].js +17 -0
- package/dist/ui/api/content/[id].js.map +1 -0
- package/dist/ui/api/content/bulk.d.ts +3 -0
- package/dist/ui/api/content/bulk.d.ts.map +1 -0
- package/dist/ui/api/content/bulk.js +7 -0
- package/dist/ui/api/content/bulk.js.map +1 -0
- package/dist/ui/api/content/counts.d.ts +3 -0
- package/dist/ui/api/content/counts.d.ts.map +1 -0
- package/dist/ui/api/content/counts.js +8 -0
- package/dist/ui/api/content/counts.js.map +1 -0
- package/dist/ui/api/content/foundry-callback.d.ts +3 -0
- package/dist/ui/api/content/foundry-callback.d.ts.map +1 -0
- package/dist/ui/api/content/foundry-callback.js +8 -0
- package/dist/ui/api/content/foundry-callback.js.map +1 -0
- package/dist/ui/api/content/import/confirm.d.ts +3 -0
- package/dist/ui/api/content/import/confirm.d.ts.map +1 -0
- package/dist/ui/api/content/import/confirm.js +11 -0
- package/dist/ui/api/content/import/confirm.js.map +1 -0
- package/dist/ui/api/content/import/parse.d.ts +3 -0
- package/dist/ui/api/content/import/parse.d.ts.map +1 -0
- package/dist/ui/api/content/import/parse.js +11 -0
- package/dist/ui/api/content/import/parse.js.map +1 -0
- package/dist/ui/api/content/insights-ingest.d.ts +3 -0
- package/dist/ui/api/content/insights-ingest.d.ts.map +1 -0
- package/dist/ui/api/content/insights-ingest.js +15 -0
- package/dist/ui/api/content/insights-ingest.js.map +1 -0
- package/dist/ui/api/content-insights/dismiss.d.ts +3 -0
- package/dist/ui/api/content-insights/dismiss.d.ts.map +1 -0
- package/dist/ui/api/content-insights/dismiss.js +16 -0
- package/dist/ui/api/content-insights/dismiss.js.map +1 -0
- package/dist/ui/api/content-insights/index.d.ts +3 -0
- package/dist/ui/api/content-insights/index.d.ts.map +1 -0
- package/dist/ui/api/content-insights/index.js +12 -0
- package/dist/ui/api/content-insights/index.js.map +1 -0
- package/dist/ui/api/content-insights/undismiss.d.ts +3 -0
- package/dist/ui/api/content-insights/undismiss.d.ts.map +1 -0
- package/dist/ui/api/content-insights/undismiss.js +16 -0
- package/dist/ui/api/content-insights/undismiss.js.map +1 -0
- package/dist/ui/api/content.d.ts +4 -0
- package/dist/ui/api/content.d.ts.map +1 -0
- package/dist/ui/api/content.js +16 -0
- package/dist/ui/api/content.js.map +1 -0
- package/dist/ui/api/dashboard.d.ts +3 -0
- package/dist/ui/api/dashboard.d.ts.map +1 -0
- package/dist/ui/api/dashboard.js +22 -0
- package/dist/ui/api/dashboard.js.map +1 -0
- package/dist/ui/api/me.d.ts +3 -0
- package/dist/ui/api/me.d.ts.map +1 -0
- package/dist/ui/api/me.js +18 -0
- package/dist/ui/api/me.js.map +1 -0
- package/dist/ui/api/media/[id].d.ts +3 -0
- package/dist/ui/api/media/[id].d.ts.map +1 -0
- package/dist/ui/api/media/[id].js +17 -0
- package/dist/ui/api/media/[id].js.map +1 -0
- package/dist/ui/api/media/images.d.ts +3 -0
- package/dist/ui/api/media/images.d.ts.map +1 -0
- package/dist/ui/api/media/images.js +6 -0
- package/dist/ui/api/media/images.js.map +1 -0
- package/dist/ui/api/media/library/[id].d.ts +3 -0
- package/dist/ui/api/media/library/[id].d.ts.map +1 -0
- package/dist/ui/api/media/library/[id].js +6 -0
- package/dist/ui/api/media/library/[id].js.map +1 -0
- package/dist/ui/api/media/library.d.ts +3 -0
- package/dist/ui/api/media/library.d.ts.map +1 -0
- package/dist/ui/api/media/library.js +17 -0
- package/dist/ui/api/media/library.js.map +1 -0
- package/dist/ui/api/media/podcast/abort.d.ts +3 -0
- package/dist/ui/api/media/podcast/abort.d.ts.map +1 -0
- package/dist/ui/api/media/podcast/abort.js +4 -0
- package/dist/ui/api/media/podcast/abort.js.map +1 -0
- package/dist/ui/api/media/podcast/complete.d.ts +3 -0
- package/dist/ui/api/media/podcast/complete.d.ts.map +1 -0
- package/dist/ui/api/media/podcast/complete.js +4 -0
- package/dist/ui/api/media/podcast/complete.js.map +1 -0
- package/dist/ui/api/media/podcast/init.d.ts +3 -0
- package/dist/ui/api/media/podcast/init.d.ts.map +1 -0
- package/dist/ui/api/media/podcast/init.js +4 -0
- package/dist/ui/api/media/podcast/init.js.map +1 -0
- package/dist/ui/api/media/podcast/part.d.ts +3 -0
- package/dist/ui/api/media/podcast/part.d.ts.map +1 -0
- package/dist/ui/api/media/podcast/part.js +4 -0
- package/dist/ui/api/media/podcast/part.js.map +1 -0
- package/dist/ui/api/media/podcast.d.ts +3 -0
- package/dist/ui/api/media/podcast.d.ts.map +1 -0
- package/dist/ui/api/media/podcast.js +6 -0
- package/dist/ui/api/media/podcast.js.map +1 -0
- package/dist/ui/api/media/videos/abort.d.ts +3 -0
- package/dist/ui/api/media/videos/abort.d.ts.map +1 -0
- package/dist/ui/api/media/videos/abort.js +6 -0
- package/dist/ui/api/media/videos/abort.js.map +1 -0
- package/dist/ui/api/media/videos/complete.d.ts +3 -0
- package/dist/ui/api/media/videos/complete.d.ts.map +1 -0
- package/dist/ui/api/media/videos/complete.js +6 -0
- package/dist/ui/api/media/videos/complete.js.map +1 -0
- package/dist/ui/api/media/videos/init.d.ts +3 -0
- package/dist/ui/api/media/videos/init.d.ts.map +1 -0
- package/dist/ui/api/media/videos/init.js +6 -0
- package/dist/ui/api/media/videos/init.js.map +1 -0
- package/dist/ui/api/media/videos/part.d.ts +3 -0
- package/dist/ui/api/media/videos/part.d.ts.map +1 -0
- package/dist/ui/api/media/videos/part.js +6 -0
- package/dist/ui/api/media/videos/part.js.map +1 -0
- package/dist/ui/api/notifications.d.ts +4 -0
- package/dist/ui/api/notifications.d.ts.map +1 -0
- package/dist/ui/api/notifications.js +20 -0
- package/dist/ui/api/notifications.js.map +1 -0
- package/dist/ui/api/search.d.ts +3 -0
- package/dist/ui/api/search.d.ts.map +1 -0
- package/dist/ui/api/search.js +18 -0
- package/dist/ui/api/search.js.map +1 -0
- package/dist/ui/api/settings/api-keys/[id].d.ts +3 -0
- package/dist/ui/api/settings/api-keys/[id].d.ts.map +1 -0
- package/dist/ui/api/settings/api-keys/[id].js +22 -0
- package/dist/ui/api/settings/api-keys/[id].js.map +1 -0
- package/dist/ui/api/settings/api-keys.d.ts +4 -0
- package/dist/ui/api/settings/api-keys.d.ts.map +1 -0
- package/dist/ui/api/settings/api-keys.js +19 -0
- package/dist/ui/api/settings/api-keys.js.map +1 -0
- package/dist/ui/api/settings/domains.d.ts +3 -0
- package/dist/ui/api/settings/domains.d.ts.map +1 -0
- package/dist/ui/api/settings/domains.js +32 -0
- package/dist/ui/api/settings/domains.js.map +1 -0
- package/dist/ui/api/settings/integrations.d.ts +3 -0
- package/dist/ui/api/settings/integrations.d.ts.map +1 -0
- package/dist/ui/api/settings/integrations.js +32 -0
- package/dist/ui/api/settings/integrations.js.map +1 -0
- package/dist/ui/api/settings/members/[userId].d.ts +4 -0
- package/dist/ui/api/settings/members/[userId].d.ts.map +1 -0
- package/dist/ui/api/settings/members/[userId].js +26 -0
- package/dist/ui/api/settings/members/[userId].js.map +1 -0
- package/dist/ui/api/settings/members/invite.d.ts +3 -0
- package/dist/ui/api/settings/members/invite.d.ts.map +1 -0
- package/dist/ui/api/settings/members/invite.js +21 -0
- package/dist/ui/api/settings/members/invite.js.map +1 -0
- package/dist/ui/api/settings/members.d.ts +3 -0
- package/dist/ui/api/settings/members.d.ts.map +1 -0
- package/dist/ui/api/settings/members.js +17 -0
- package/dist/ui/api/settings/members.js.map +1 -0
- package/dist/ui/api/settings/webhooks/[id]/test.d.ts +3 -0
- package/dist/ui/api/settings/webhooks/[id]/test.d.ts.map +1 -0
- package/dist/ui/api/settings/webhooks/[id]/test.js +24 -0
- package/dist/ui/api/settings/webhooks/[id]/test.js.map +1 -0
- package/dist/ui/api/settings/webhooks/[id].d.ts +3 -0
- package/dist/ui/api/settings/webhooks/[id].d.ts.map +1 -0
- package/dist/ui/api/settings/webhooks/[id].js +23 -0
- package/dist/ui/api/settings/webhooks/[id].js.map +1 -0
- package/dist/ui/api/settings/webhooks.d.ts +4 -0
- package/dist/ui/api/settings/webhooks.d.ts.map +1 -0
- package/dist/ui/api/settings/webhooks.js +21 -0
- package/dist/ui/api/settings/webhooks.js.map +1 -0
- package/dist/ui/api/subscriptions.d.ts +4 -0
- package/dist/ui/api/subscriptions.d.ts.map +1 -0
- package/dist/ui/api/subscriptions.js +47 -0
- package/dist/ui/api/subscriptions.js.map +1 -0
- package/dist/ui/api/tags/[id].d.ts +4 -0
- package/dist/ui/api/tags/[id].d.ts.map +1 -0
- package/dist/ui/api/tags/[id].js +18 -0
- package/dist/ui/api/tags/[id].js.map +1 -0
- package/dist/ui/api/tags/index.d.ts +4 -0
- package/dist/ui/api/tags/index.d.ts.map +1 -0
- package/dist/ui/api/tags/index.js +13 -0
- package/dist/ui/api/tags/index.js.map +1 -0
- package/dist/ui/api/topics/[id].d.ts +3 -0
- package/dist/ui/api/topics/[id].d.ts.map +1 -0
- package/dist/ui/api/topics/[id].js +15 -0
- package/dist/ui/api/topics/[id].js.map +1 -0
- package/dist/ui/api/topics/index.d.ts +4 -0
- package/dist/ui/api/topics/index.d.ts.map +1 -0
- package/dist/ui/api/topics/index.js +12 -0
- package/dist/ui/api/topics/index.js.map +1 -0
- package/dist/ui/api/workspace-settings.d.ts +4 -0
- package/dist/ui/api/workspace-settings.d.ts.map +1 -0
- package/dist/ui/api/workspace-settings.js +20 -0
- package/dist/ui/api/workspace-settings.js.map +1 -0
- package/dist/ui/client/boot-state.d.ts +15 -0
- package/dist/ui/client/boot-state.d.ts.map +1 -0
- package/dist/ui/client/boot-state.js +36 -0
- package/dist/ui/client/boot-state.js.map +1 -0
- package/dist/ui/client/mount.d.ts +3 -0
- package/dist/ui/client/mount.d.ts.map +1 -0
- package/dist/ui/client/mount.js +37 -0
- package/dist/ui/client/mount.js.map +1 -0
- package/dist/ui/commands.d.ts +23 -0
- package/dist/ui/commands.d.ts.map +1 -0
- package/dist/ui/commands.js +48 -0
- package/dist/ui/commands.js.map +1 -0
- package/dist/ui/components/CmsApp.d.ts +16 -0
- package/dist/ui/components/CmsApp.d.ts.map +1 -0
- package/dist/ui/components/CmsApp.js +74 -0
- package/dist/ui/components/CmsApp.js.map +1 -0
- package/dist/ui/components/CommandPalette.d.ts +7 -0
- package/dist/ui/components/CommandPalette.d.ts.map +1 -0
- package/dist/ui/components/CommandPalette.js +61 -0
- package/dist/ui/components/CommandPalette.js.map +1 -0
- package/dist/ui/components/NoAccessScreen.d.ts +2 -0
- package/dist/ui/components/NoAccessScreen.d.ts.map +1 -0
- package/dist/ui/components/NoAccessScreen.js +42 -0
- package/dist/ui/components/NoAccessScreen.js.map +1 -0
- package/dist/ui/components/ShareModal.d.ts +27 -0
- package/dist/ui/components/ShareModal.d.ts.map +1 -0
- package/dist/ui/components/ShareModal.js +208 -0
- package/dist/ui/components/ShareModal.js.map +1 -0
- package/dist/ui/components/SharePickers.d.ts +39 -0
- package/dist/ui/components/SharePickers.d.ts.map +1 -0
- package/dist/ui/components/SharePickers.js +352 -0
- package/dist/ui/components/SharePickers.js.map +1 -0
- package/dist/ui/components/ShareStatsPanel.d.ts +22 -0
- package/dist/ui/components/ShareStatsPanel.d.ts.map +1 -0
- package/dist/ui/components/ShareStatsPanel.js +317 -0
- package/dist/ui/components/ShareStatsPanel.js.map +1 -0
- package/dist/ui/components/Sidebar.d.ts +7 -0
- package/dist/ui/components/Sidebar.d.ts.map +1 -0
- package/dist/ui/components/Sidebar.js +20 -0
- package/dist/ui/components/Sidebar.js.map +1 -0
- package/dist/ui/components/SiteSwitcher.d.ts +4 -0
- package/dist/ui/components/SiteSwitcher.d.ts.map +1 -0
- package/dist/ui/components/SiteSwitcher.js +35 -0
- package/dist/ui/components/SiteSwitcher.js.map +1 -0
- package/dist/ui/components/Topbar.d.ts +9 -0
- package/dist/ui/components/Topbar.d.ts.map +1 -0
- package/dist/ui/components/Topbar.js +20 -0
- package/dist/ui/components/Topbar.js.map +1 -0
- package/dist/ui/editor/AiAssistPanel.d.ts +8 -0
- package/dist/ui/editor/AiAssistPanel.d.ts.map +1 -0
- package/dist/ui/editor/AiAssistPanel.js +221 -0
- package/dist/ui/editor/AiAssistPanel.js.map +1 -0
- package/dist/ui/editor/ContentForm.d.ts +46 -0
- package/dist/ui/editor/ContentForm.d.ts.map +1 -0
- package/dist/ui/editor/ContentForm.js +821 -0
- package/dist/ui/editor/ContentForm.js.map +1 -0
- package/dist/ui/editor/Rte.d.ts +16 -0
- package/dist/ui/editor/Rte.d.ts.map +1 -0
- package/dist/ui/editor/Rte.js +272 -0
- package/dist/ui/editor/Rte.js.map +1 -0
- package/dist/ui/editor/ai-assist.d.ts +43 -0
- package/dist/ui/editor/ai-assist.d.ts.map +1 -0
- package/dist/ui/editor/ai-assist.js +114 -0
- package/dist/ui/editor/ai-assist.js.map +1 -0
- package/dist/ui/editor/autosave.d.ts +18 -0
- package/dist/ui/editor/autosave.d.ts.map +1 -0
- package/dist/ui/editor/autosave.js +23 -0
- package/dist/ui/editor/autosave.js.map +1 -0
- package/dist/ui/editor/content-payload.d.ts +19 -0
- package/dist/ui/editor/content-payload.d.ts.map +1 -0
- package/dist/ui/editor/content-payload.js +97 -0
- package/dist/ui/editor/content-payload.js.map +1 -0
- package/dist/ui/editor/editor-media-upload.d.ts +6 -0
- package/dist/ui/editor/editor-media-upload.d.ts.map +1 -0
- package/dist/ui/editor/editor-media-upload.js +20 -0
- package/dist/ui/editor/editor-media-upload.js.map +1 -0
- package/dist/ui/editor/serialize.d.ts +6 -0
- package/dist/ui/editor/serialize.d.ts.map +1 -0
- package/dist/ui/editor/serialize.js +479 -0
- package/dist/ui/editor/serialize.js.map +1 -0
- package/dist/ui/editor/tweet-embed.d.ts +4 -0
- package/dist/ui/editor/tweet-embed.d.ts.map +1 -0
- package/dist/ui/editor/tweet-embed.js +49 -0
- package/dist/ui/editor/tweet-embed.js.map +1 -0
- package/dist/ui/hash-router.d.ts +5 -0
- package/dist/ui/hash-router.d.ts.map +1 -0
- package/dist/ui/hash-router.js +25 -0
- package/dist/ui/hash-router.js.map +1 -0
- package/dist/ui/icons.d.ts +32 -0
- package/dist/ui/icons.d.ts.map +1 -0
- package/dist/ui/icons.js +86 -0
- package/dist/ui/icons.js.map +1 -0
- package/dist/ui/inspector/Field.d.ts +12 -0
- package/dist/ui/inspector/Field.d.ts.map +1 -0
- package/dist/ui/inspector/Field.js +8 -0
- package/dist/ui/inspector/Field.js.map +1 -0
- package/dist/ui/inspector/FoundryTab.d.ts +9 -0
- package/dist/ui/inspector/FoundryTab.d.ts.map +1 -0
- package/dist/ui/inspector/FoundryTab.js +362 -0
- package/dist/ui/inspector/FoundryTab.js.map +1 -0
- package/dist/ui/inspector/HistoryTab.d.ts +7 -0
- package/dist/ui/inspector/HistoryTab.d.ts.map +1 -0
- package/dist/ui/inspector/HistoryTab.js +289 -0
- package/dist/ui/inspector/HistoryTab.js.map +1 -0
- package/dist/ui/inspector/Inspector.d.ts +13 -0
- package/dist/ui/inspector/Inspector.d.ts.map +1 -0
- package/dist/ui/inspector/Inspector.js +163 -0
- package/dist/ui/inspector/Inspector.js.map +1 -0
- package/dist/ui/inspector/OrganizeTab.d.ts +15 -0
- package/dist/ui/inspector/OrganizeTab.d.ts.map +1 -0
- package/dist/ui/inspector/OrganizeTab.js +319 -0
- package/dist/ui/inspector/OrganizeTab.js.map +1 -0
- package/dist/ui/inspector/PublishTab.d.ts +18 -0
- package/dist/ui/inspector/PublishTab.d.ts.map +1 -0
- package/dist/ui/inspector/PublishTab.js +339 -0
- package/dist/ui/inspector/PublishTab.js.map +1 -0
- package/dist/ui/inspector/Section.d.ts +10 -0
- package/dist/ui/inspector/Section.d.ts.map +1 -0
- package/dist/ui/inspector/Section.js +40 -0
- package/dist/ui/inspector/Section.js.map +1 -0
- package/dist/ui/inspector/SeoTab.d.ts +19 -0
- package/dist/ui/inspector/SeoTab.d.ts.map +1 -0
- package/dist/ui/inspector/SeoTab.js +328 -0
- package/dist/ui/inspector/SeoTab.js.map +1 -0
- package/dist/ui/inspector/foundry-stages.d.ts +36 -0
- package/dist/ui/inspector/foundry-stages.d.ts.map +1 -0
- package/dist/ui/inspector/foundry-stages.js +101 -0
- package/dist/ui/inspector/foundry-stages.js.map +1 -0
- package/dist/ui/inspector/inspector-data.d.ts +80 -0
- package/dist/ui/inspector/inspector-data.d.ts.map +1 -0
- package/dist/ui/inspector/inspector-data.js +172 -0
- package/dist/ui/inspector/inspector-data.js.map +1 -0
- package/dist/ui/inspector/organize-data.d.ts +23 -0
- package/dist/ui/inspector/organize-data.d.ts.map +1 -0
- package/dist/ui/inspector/organize-data.js +28 -0
- package/dist/ui/inspector/organize-data.js.map +1 -0
- package/dist/ui/inspector/revision-diff.d.ts +49 -0
- package/dist/ui/inspector/revision-diff.d.ts.map +1 -0
- package/dist/ui/inspector/revision-diff.js +166 -0
- package/dist/ui/inspector/revision-diff.js.map +1 -0
- package/dist/ui/inspector/seo-helpers.d.ts +37 -0
- package/dist/ui/inspector/seo-helpers.d.ts.map +1 -0
- package/dist/ui/inspector/seo-helpers.js +37 -0
- package/dist/ui/inspector/seo-helpers.js.map +1 -0
- package/dist/ui/inspector/tab-visibility.d.ts +14 -0
- package/dist/ui/inspector/tab-visibility.d.ts.map +1 -0
- package/dist/ui/inspector/tab-visibility.js +28 -0
- package/dist/ui/inspector/tab-visibility.js.map +1 -0
- package/dist/ui/nav.d.ts +16 -0
- package/dist/ui/nav.d.ts.map +1 -0
- package/dist/ui/nav.js +33 -0
- package/dist/ui/nav.js.map +1 -0
- package/dist/ui/pages/admin.astro +32 -0
- package/dist/ui/preview/draft-page.d.ts +37 -0
- package/dist/ui/preview/draft-page.d.ts.map +1 -0
- package/dist/ui/preview/draft-page.js +212 -0
- package/dist/ui/preview/draft-page.js.map +1 -0
- package/dist/ui/preview/preview-layout.d.ts +23 -0
- package/dist/ui/preview/preview-layout.d.ts.map +1 -0
- package/dist/ui/preview/preview-layout.js +30 -0
- package/dist/ui/preview/preview-layout.js.map +1 -0
- package/dist/ui/screens/AnalyticsScreen.d.ts +2 -0
- package/dist/ui/screens/AnalyticsScreen.d.ts.map +1 -0
- package/dist/ui/screens/AnalyticsScreen.js +408 -0
- package/dist/ui/screens/AnalyticsScreen.js.map +1 -0
- package/dist/ui/screens/AuthorsScreen.d.ts +2 -0
- package/dist/ui/screens/AuthorsScreen.d.ts.map +1 -0
- package/dist/ui/screens/AuthorsScreen.js +225 -0
- package/dist/ui/screens/AuthorsScreen.js.map +1 -0
- package/dist/ui/screens/CalendarScreen.d.ts +6 -0
- package/dist/ui/screens/CalendarScreen.d.ts.map +1 -0
- package/dist/ui/screens/CalendarScreen.js +327 -0
- package/dist/ui/screens/CalendarScreen.js.map +1 -0
- package/dist/ui/screens/ContentInsightsScreen.d.ts +2 -0
- package/dist/ui/screens/ContentInsightsScreen.d.ts.map +1 -0
- package/dist/ui/screens/ContentInsightsScreen.js +129 -0
- package/dist/ui/screens/ContentInsightsScreen.js.map +1 -0
- package/dist/ui/screens/ContentRoute.d.ts +2 -0
- package/dist/ui/screens/ContentRoute.d.ts.map +1 -0
- package/dist/ui/screens/ContentRoute.js +32 -0
- package/dist/ui/screens/ContentRoute.js.map +1 -0
- package/dist/ui/screens/DashboardScreen.d.ts +6 -0
- package/dist/ui/screens/DashboardScreen.d.ts.map +1 -0
- package/dist/ui/screens/DashboardScreen.js +273 -0
- package/dist/ui/screens/DashboardScreen.js.map +1 -0
- package/dist/ui/screens/EditorScreen.d.ts +7 -0
- package/dist/ui/screens/EditorScreen.d.ts.map +1 -0
- package/dist/ui/screens/EditorScreen.js +426 -0
- package/dist/ui/screens/EditorScreen.js.map +1 -0
- package/dist/ui/screens/LibraryScreen.d.ts +6 -0
- package/dist/ui/screens/LibraryScreen.d.ts.map +1 -0
- package/dist/ui/screens/LibraryScreen.js +580 -0
- package/dist/ui/screens/LibraryScreen.js.map +1 -0
- package/dist/ui/screens/MediaScreen.d.ts +2 -0
- package/dist/ui/screens/MediaScreen.d.ts.map +1 -0
- package/dist/ui/screens/MediaScreen.js +173 -0
- package/dist/ui/screens/MediaScreen.js.map +1 -0
- package/dist/ui/screens/SettingsScreen.d.ts +4 -0
- package/dist/ui/screens/SettingsScreen.d.ts.map +1 -0
- package/dist/ui/screens/SettingsScreen.js +751 -0
- package/dist/ui/screens/SettingsScreen.js.map +1 -0
- package/dist/ui/screens/SocialShareScreen.d.ts +2 -0
- package/dist/ui/screens/SocialShareScreen.d.ts.map +1 -0
- package/dist/ui/screens/SocialShareScreen.js +224 -0
- package/dist/ui/screens/SocialShareScreen.js.map +1 -0
- package/dist/ui/screens/SubscriptionsScreen.d.ts +2 -0
- package/dist/ui/screens/SubscriptionsScreen.d.ts.map +1 -0
- package/dist/ui/screens/SubscriptionsScreen.js +441 -0
- package/dist/ui/screens/SubscriptionsScreen.js.map +1 -0
- package/dist/ui/screens/TopicsScreen.d.ts +2 -0
- package/dist/ui/screens/TopicsScreen.d.ts.map +1 -0
- package/dist/ui/screens/TopicsScreen.js +360 -0
- package/dist/ui/screens/TopicsScreen.js.map +1 -0
- package/dist/ui/screens/analytics-data.d.ts +19 -0
- package/dist/ui/screens/analytics-data.d.ts.map +1 -0
- package/dist/ui/screens/analytics-data.js +42 -0
- package/dist/ui/screens/analytics-data.js.map +1 -0
- package/dist/ui/screens/calendar-data.d.ts +45 -0
- package/dist/ui/screens/calendar-data.d.ts.map +1 -0
- package/dist/ui/screens/calendar-data.js +70 -0
- package/dist/ui/screens/calendar-data.js.map +1 -0
- package/dist/ui/screens/content-insights-data.d.ts +54 -0
- package/dist/ui/screens/content-insights-data.d.ts.map +1 -0
- package/dist/ui/screens/content-insights-data.js +82 -0
- package/dist/ui/screens/content-insights-data.js.map +1 -0
- package/dist/ui/screens/content-view.d.ts +21 -0
- package/dist/ui/screens/content-view.d.ts.map +1 -0
- package/dist/ui/screens/content-view.js +17 -0
- package/dist/ui/screens/content-view.js.map +1 -0
- package/dist/ui/screens/library-data.d.ts +76 -0
- package/dist/ui/screens/library-data.d.ts.map +1 -0
- package/dist/ui/screens/library-data.js +116 -0
- package/dist/ui/screens/library-data.js.map +1 -0
- package/dist/ui/screens/media-upload.d.ts +19 -0
- package/dist/ui/screens/media-upload.d.ts.map +1 -0
- package/dist/ui/screens/media-upload.js +187 -0
- package/dist/ui/screens/media-upload.js.map +1 -0
- package/dist/ui/screens/public-url.d.ts +24 -0
- package/dist/ui/screens/public-url.d.ts.map +1 -0
- package/dist/ui/screens/public-url.js +74 -0
- package/dist/ui/screens/public-url.js.map +1 -0
- package/dist/ui/screens/registry.d.ts +3 -0
- package/dist/ui/screens/registry.d.ts.map +1 -0
- package/dist/ui/screens/registry.js +38 -0
- package/dist/ui/screens/registry.js.map +1 -0
- package/dist/ui/screens/render-state.d.ts +105 -0
- package/dist/ui/screens/render-state.d.ts.map +1 -0
- package/dist/ui/screens/render-state.js +127 -0
- package/dist/ui/screens/render-state.js.map +1 -0
- package/dist/ui/screens/settings-data.d.ts +55 -0
- package/dist/ui/screens/settings-data.d.ts.map +1 -0
- package/dist/ui/screens/settings-data.js +89 -0
- package/dist/ui/screens/settings-data.js.map +1 -0
- package/dist/ui/screens/settings-panels-data.d.ts +58 -0
- package/dist/ui/screens/settings-panels-data.d.ts.map +1 -0
- package/dist/ui/screens/settings-panels-data.js +88 -0
- package/dist/ui/screens/settings-panels-data.js.map +1 -0
- package/dist/ui/screens/social-share-data.d.ts +307 -0
- package/dist/ui/screens/social-share-data.d.ts.map +1 -0
- package/dist/ui/screens/social-share-data.js +447 -0
- package/dist/ui/screens/social-share-data.js.map +1 -0
- package/dist/ui/screens/topics-data.d.ts +38 -0
- package/dist/ui/screens/topics-data.d.ts.map +1 -0
- package/dist/ui/screens/topics-data.js +50 -0
- package/dist/ui/screens/topics-data.js.map +1 -0
- package/dist/ui/styles/broadsheet.css +394 -0
- package/dist/ui/theme.d.ts +23 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +87 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/tweaks.d.ts +7 -0
- package/dist/ui/tweaks.d.ts.map +1 -0
- package/dist/ui/tweaks.js +31 -0
- package/dist/ui/tweaks.js.map +1 -0
- package/dist/ui/use-hash-router.d.ts +6 -0
- package/dist/ui/use-hash-router.d.ts.map +1 -0
- package/dist/ui/use-hash-router.js +15 -0
- package/dist/ui/use-hash-router.js.map +1 -0
- package/dist/ui/use-tweaks.d.ts +6 -0
- package/dist/ui/use-tweaks.d.ts.map +1 -0
- package/dist/ui/use-tweaks.js +24 -0
- package/dist/ui/use-tweaks.js.map +1 -0
- package/dist/ui/workspace-context.d.ts +34 -0
- package/dist/ui/workspace-context.d.ts.map +1 -0
- package/dist/ui/workspace-context.js +32 -0
- package/dist/ui/workspace-context.js.map +1 -0
- package/migrations/0001_create_cms_tables.sql +200 -0
- package/migrations/0002_review_softdelete_board.sql +112 -0
- package/migrations/0003_content_contributors.sql +16 -0
- package/migrations/0004_seo_faq_columns.sql +6 -0
- package/migrations/0005_revision_delta_columns.sql +5 -0
- package/migrations/0006_processing_trigger_token.sql +4 -0
- package/migrations/0007_content_slug_redirects.sql +9 -0
- package/migrations/0008_workspace_settings.sql +17 -0
- package/migrations/0009_workspace_memberships.sql +36 -0
- package/migrations/0010_api_keys_webhooks.sql +21 -0
- package/migrations/0011_notifications_activity.sql +22 -0
- package/migrations/0012_content_imports.sql +10 -0
- package/migrations/0013_media_normalization.sql +4 -0
- package/migrations/0014_api_key_prefix.sql +3 -0
- package/migrations/0015_cms_topics.sql +7 -0
- package/migrations/0016_content_insights.sql +53 -0
- package/package.json +82 -0
- package/src/engine/activity-log.ts +39 -0
- package/src/engine/ai-prompts.ts +124 -0
- package/src/engine/ai-writeback.ts +62 -0
- package/src/engine/api-keys.ts +239 -0
- package/src/engine/content-insights.ts +198 -0
- package/src/engine/contributors.ts +95 -0
- package/src/engine/cron.ts +62 -0
- package/src/engine/d1.ts +29 -0
- package/src/engine/foundry-dispatch.ts +417 -0
- package/src/engine/import-parsers.ts +478 -0
- package/src/engine/index.ts +230 -0
- package/src/engine/invites.ts +271 -0
- package/src/engine/members.ts +216 -0
- package/src/engine/membership-rules.ts +63 -0
- package/src/engine/og-render.ts +59 -0
- package/src/engine/publish-guard.ts +123 -0
- package/src/engine/publisher.ts +1032 -0
- package/src/engine/revisions.ts +292 -0
- package/src/engine/sanitize.ts +183 -0
- package/src/engine/seed-membership.ts +92 -0
- package/src/engine/seo.ts +72 -0
- package/src/engine/slug-redirects.ts +34 -0
- package/src/engine/slug.ts +33 -0
- package/src/engine/soft-delete.ts +42 -0
- package/src/engine/tags.ts +95 -0
- package/src/engine/topics.ts +158 -0
- package/src/engine/url-guard.ts +136 -0
- package/src/engine/validator/checks/bare-url-not-autolinked.ts +78 -0
- package/src/engine/validator/checks/broken-footnote-label.ts +33 -0
- package/src/engine/validator/checks/double-encoded-entities.ts +46 -0
- package/src/engine/validator/checks/empty-alt-text.ts +35 -0
- package/src/engine/validator/checks/heading-hierarchy-skip.ts +33 -0
- package/src/engine/validator/checks/html-comment-leak.ts +58 -0
- package/src/engine/validator/checks/iframe-missing-dims-and-wrapper.ts +34 -0
- package/src/engine/validator/checks/invisible-control-chars.ts +58 -0
- package/src/engine/validator/checks/paywall-marker-leak.ts +43 -0
- package/src/engine/validator/checks/raw-block-html.ts +65 -0
- package/src/engine/validator/checks/stale-body-html.ts +39 -0
- package/src/engine/validator/checks/unresolved-footnote-anchor.ts +61 -0
- package/src/engine/validator/checks/word-gdocs-paste-artifacts.ts +72 -0
- package/src/engine/validator/index.ts +385 -0
- package/src/engine/validator/scan.ts +103 -0
- package/src/engine/validator/types.ts +114 -0
- package/src/engine/webhook-signer.ts +139 -0
- package/src/engine/webhooks.ts +224 -0
- package/src/index.ts +79 -0
- package/src/integration/index.ts +298 -0
- package/src/integration/options.ts +30 -0
- package/src/integration/vite-plugin.ts +37 -0
- package/src/providers/index.ts +2 -0
- package/src/providers/null.ts +160 -0
- package/src/providers/types.ts +284 -0
- package/src/routes/ai.ts +461 -0
- package/src/routes/analytics.ts +78 -0
- package/src/routes/api-keys.ts +133 -0
- package/src/routes/authors.ts +282 -0
- package/src/routes/authz-matrix.ts +239 -0
- package/src/routes/calendar.ts +127 -0
- package/src/routes/config.ts +99 -0
- package/src/routes/content-insights.ts +159 -0
- package/src/routes/content.ts +1753 -0
- package/src/routes/context.ts +146 -0
- package/src/routes/cron.ts +27 -0
- package/src/routes/dashboard.ts +174 -0
- package/src/routes/imports.ts +190 -0
- package/src/routes/index.ts +295 -0
- package/src/routes/media-lib.ts +405 -0
- package/src/routes/media.ts +944 -0
- package/src/routes/preview.ts +182 -0
- package/src/routes/rbac-invites.ts +220 -0
- package/src/routes/rbac.ts +155 -0
- package/src/routes/shell.ts +163 -0
- package/src/routes/subscriptions.ts +167 -0
- package/src/routes/tags.ts +93 -0
- package/src/routes/topics.ts +58 -0
- package/src/routes/webhooks.ts +233 -0
- package/src/schema/index.ts +45 -0
- package/src/schema/insights-ingest.ts +126 -0
- package/src/schema/migrations.ts +599 -0
- package/src/schema/tables.ts +59 -0
- package/src/schema/types.ts +576 -0
- package/src/ui/api/_authz.ts +100 -0
- package/src/ui/api/_content-config.ts +75 -0
- package/src/ui/api/activity.ts +33 -0
- package/src/ui/api/analytics.ts +42 -0
- package/src/ui/api/authors/[id].ts +23 -0
- package/src/ui/api/authors.ts +19 -0
- package/src/ui/api/calendar.ts +21 -0
- package/src/ui/api/content/[id]/ai/headlines.ts +10 -0
- package/src/ui/api/content/[id]/ai/meta-description.ts +11 -0
- package/src/ui/api/content/[id]/ai/og-image.ts +10 -0
- package/src/ui/api/content/[id]/ai/proofread.ts +10 -0
- package/src/ui/api/content/[id]/ai/takeaways.ts +11 -0
- package/src/ui/api/content/[id]/contributors.ts +13 -0
- package/src/ui/api/content/[id]/preview-token.ts +21 -0
- package/src/ui/api/content/[id]/revisions/[rev]/restore.ts +12 -0
- package/src/ui/api/content/[id]/revisions/[rev].ts +11 -0
- package/src/ui/api/content/[id]/revisions.ts +9 -0
- package/src/ui/api/content/[id]/seo-score.ts +10 -0
- package/src/ui/api/content/[id].ts +23 -0
- package/src/ui/api/content/bulk.ts +10 -0
- package/src/ui/api/content/counts.ts +11 -0
- package/src/ui/api/content/foundry-callback.ts +11 -0
- package/src/ui/api/content/import/confirm.ts +16 -0
- package/src/ui/api/content/import/parse.ts +16 -0
- package/src/ui/api/content/insights-ingest.ts +24 -0
- package/src/ui/api/content-insights/dismiss.ts +23 -0
- package/src/ui/api/content-insights/index.ts +21 -0
- package/src/ui/api/content-insights/undismiss.ts +23 -0
- package/src/ui/api/content.ts +21 -0
- package/src/ui/api/dashboard.ts +28 -0
- package/src/ui/api/me.ts +23 -0
- package/src/ui/api/media/[id].ts +22 -0
- package/src/ui/api/media/images.ts +9 -0
- package/src/ui/api/media/library/[id].ts +9 -0
- package/src/ui/api/media/library.ts +22 -0
- package/src/ui/api/media/podcast/abort.ts +6 -0
- package/src/ui/api/media/podcast/complete.ts +6 -0
- package/src/ui/api/media/podcast/init.ts +6 -0
- package/src/ui/api/media/podcast/part.ts +6 -0
- package/src/ui/api/media/podcast.ts +9 -0
- package/src/ui/api/media/videos/abort.ts +9 -0
- package/src/ui/api/media/videos/complete.ts +9 -0
- package/src/ui/api/media/videos/init.ts +9 -0
- package/src/ui/api/media/videos/part.ts +9 -0
- package/src/ui/api/notifications.ts +26 -0
- package/src/ui/api/search.ts +23 -0
- package/src/ui/api/settings/api-keys/[id].ts +28 -0
- package/src/ui/api/settings/api-keys.ts +25 -0
- package/src/ui/api/settings/domains.ts +37 -0
- package/src/ui/api/settings/integrations.ts +40 -0
- package/src/ui/api/settings/members/[userId].ts +33 -0
- package/src/ui/api/settings/members/invite.ts +27 -0
- package/src/ui/api/settings/members.ts +23 -0
- package/src/ui/api/settings/webhooks/[id]/test.ts +30 -0
- package/src/ui/api/settings/webhooks/[id].ts +29 -0
- package/src/ui/api/settings/webhooks.ts +27 -0
- package/src/ui/api/subscriptions.ts +56 -0
- package/src/ui/api/tags/[id].ts +24 -0
- package/src/ui/api/tags/index.ts +18 -0
- package/src/ui/api/topics/[id].ts +20 -0
- package/src/ui/api/topics/index.ts +17 -0
- package/src/ui/api/workspace-settings.ts +26 -0
- package/src/ui/client/boot-state.ts +42 -0
- package/src/ui/client/mount.tsx +41 -0
- package/src/ui/commands.ts +62 -0
- package/src/ui/components/CmsApp.tsx +149 -0
- package/src/ui/components/CommandPalette.tsx +118 -0
- package/src/ui/components/NoAccessScreen.tsx +79 -0
- package/src/ui/components/ShareModal.tsx +650 -0
- package/src/ui/components/SharePickers.tsx +790 -0
- package/src/ui/components/ShareStatsPanel.tsx +721 -0
- package/src/ui/components/Sidebar.tsx +86 -0
- package/src/ui/components/SiteSwitcher.tsx +100 -0
- package/src/ui/components/Topbar.tsx +93 -0
- package/src/ui/editor/AiAssistPanel.tsx +407 -0
- package/src/ui/editor/ContentForm.tsx +1462 -0
- package/src/ui/editor/Rte.tsx +382 -0
- package/src/ui/editor/ai-assist.ts +139 -0
- package/src/ui/editor/autosave.ts +36 -0
- package/src/ui/editor/content-payload.ts +125 -0
- package/src/ui/editor/editor-media-upload.ts +26 -0
- package/src/ui/editor/serialize.ts +522 -0
- package/src/ui/editor/tweet-embed.ts +60 -0
- package/src/ui/hash-router.ts +30 -0
- package/src/ui/icons.tsx +208 -0
- package/src/ui/inspector/Field.tsx +30 -0
- package/src/ui/inspector/FoundryTab.tsx +613 -0
- package/src/ui/inspector/HistoryTab.tsx +482 -0
- package/src/ui/inspector/Inspector.tsx +328 -0
- package/src/ui/inspector/OrganizeTab.tsx +534 -0
- package/src/ui/inspector/PublishTab.tsx +626 -0
- package/src/ui/inspector/Section.tsx +81 -0
- package/src/ui/inspector/SeoTab.tsx +573 -0
- package/src/ui/inspector/foundry-stages.ts +140 -0
- package/src/ui/inspector/inspector-data.ts +232 -0
- package/src/ui/inspector/organize-data.ts +51 -0
- package/src/ui/inspector/revision-diff.ts +213 -0
- package/src/ui/inspector/seo-helpers.ts +71 -0
- package/src/ui/inspector/tab-visibility.ts +37 -0
- package/src/ui/nav.ts +48 -0
- package/src/ui/pages/admin.astro +32 -0
- package/src/ui/preview/draft-page.tsx +395 -0
- package/src/ui/preview/preview-layout.ts +49 -0
- package/src/ui/screens/AnalyticsScreen.tsx +938 -0
- package/src/ui/screens/AuthorsScreen.tsx +524 -0
- package/src/ui/screens/CalendarScreen.tsx +694 -0
- package/src/ui/screens/ContentInsightsScreen.tsx +417 -0
- package/src/ui/screens/ContentRoute.tsx +35 -0
- package/src/ui/screens/DashboardScreen.tsx +654 -0
- package/src/ui/screens/EditorScreen.tsx +673 -0
- package/src/ui/screens/LibraryScreen.tsx +1350 -0
- package/src/ui/screens/MediaScreen.tsx +357 -0
- package/src/ui/screens/SettingsScreen.tsx +1841 -0
- package/src/ui/screens/SocialShareScreen.tsx +670 -0
- package/src/ui/screens/SubscriptionsScreen.tsx +1240 -0
- package/src/ui/screens/TopicsScreen.tsx +912 -0
- package/src/ui/screens/analytics-data.ts +68 -0
- package/src/ui/screens/calendar-data.ts +126 -0
- package/src/ui/screens/content-insights-data.ts +127 -0
- package/src/ui/screens/content-view.ts +30 -0
- package/src/ui/screens/library-data.ts +177 -0
- package/src/ui/screens/media-upload.ts +283 -0
- package/src/ui/screens/public-url.ts +81 -0
- package/src/ui/screens/registry.tsx +53 -0
- package/src/ui/screens/render-state.ts +228 -0
- package/src/ui/screens/settings-data.ts +140 -0
- package/src/ui/screens/settings-panels-data.ts +142 -0
- package/src/ui/screens/social-share-data.ts +753 -0
- package/src/ui/screens/topics-data.ts +75 -0
- package/src/ui/styles/broadsheet.css +394 -0
- package/src/ui/theme.ts +104 -0
- package/src/ui/tweaks.ts +37 -0
- package/src/ui/use-hash-router.ts +17 -0
- package/src/ui/use-tweaks.ts +31 -0
- package/src/ui/workspace-context.tsx +62 -0
- package/src/virtual.d.ts +4 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ContentType } from '../../schema/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Derives the Fronts public URL for a content item given its `type` and
|
|
4
|
+
* `slug`, optionally joined onto a `siteBase`.
|
|
5
|
+
*
|
|
6
|
+
* - **With `siteBase`** (e.g. `'https://fronts.co'`): returns the absolute
|
|
7
|
+
* URL — any trailing slashes on `siteBase` are stripped before joining.
|
|
8
|
+
* - **Without `siteBase`** (or `undefined`): returns a relative path
|
|
9
|
+
* (e.g. `'/article/my-piece'`) — still valid for pre-filling
|
|
10
|
+
* `destinationUrl` once the operator corrects the origin after mount.
|
|
11
|
+
*
|
|
12
|
+
* Slugs that accidentally start with a slash are trimmed to avoid
|
|
13
|
+
* double-slash paths.
|
|
14
|
+
*
|
|
15
|
+
* @param row - The content item (needs `type` and `slug`).
|
|
16
|
+
* @param siteBase - Optional absolute origin (e.g. `'https://fronts.co'`).
|
|
17
|
+
* Trailing slashes are stripped. Omit for a relative path.
|
|
18
|
+
* @returns The public URL string.
|
|
19
|
+
*/
|
|
20
|
+
export declare function publicUrlFor(row: {
|
|
21
|
+
type: ContentType;
|
|
22
|
+
slug: string;
|
|
23
|
+
}, siteBase?: string): string;
|
|
24
|
+
//# sourceMappingURL=public-url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-url.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/public-url.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AA6BxD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAUhG"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// src/ui/screens/public-url.ts — pure per-content public URL helper.
|
|
2
|
+
//
|
|
3
|
+
// Derives the Fronts public URL for a content item from its slug + type so the
|
|
4
|
+
// per-content Share action can pre-fill `destinationUrl` in the Social Share
|
|
5
|
+
// builder without knowing the live origin at build time.
|
|
6
|
+
//
|
|
7
|
+
// Path mapping is sourced from the confirmed Fronts page structure:
|
|
8
|
+
// article → /article/<slug> (src/pages/article/[slug].astro)
|
|
9
|
+
// podcast → /podcast/<slug> (src/pages/podcast/[slug].astro)
|
|
10
|
+
// video → /video/<slug> (src/pages/video/[slug].astro)
|
|
11
|
+
// newsletter → /warfronts-weekly/<slug>
|
|
12
|
+
// (src/pages/warfronts-weekly/[slug].astro)
|
|
13
|
+
//
|
|
14
|
+
// SOURCE OF TRUTH for the path scheme: the Fronts site page structure at
|
|
15
|
+
// /Users/zephyr/projects/fulcrum-labs/fronts/src/pages/
|
|
16
|
+
// and Fronts lib/content.ts line ~779 (`/warfronts-weekly/${row.slug}/`).
|
|
17
|
+
// If the Fronts path scheme changes, update CONTENT_PUBLIC_PATH below.
|
|
18
|
+
//
|
|
19
|
+
// The helper is pure: no DOM, no fetch, no `window`. `siteBase` is injected
|
|
20
|
+
// by the caller (the SocialShareScreen / ShareModal reads it from workspace
|
|
21
|
+
// config or defaults to a relative path). This keeps the function testable
|
|
22
|
+
// under plain vitest.
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Path table
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
/**
|
|
27
|
+
* Maps each CMS `ContentType` to a function that returns its Fronts public
|
|
28
|
+
* path segment (WITHOUT a leading or trailing slash duplication risk — the
|
|
29
|
+
* helper always joins via `/${path}/${slug}`).
|
|
30
|
+
*
|
|
31
|
+
* Newsletter maps to the Fronts `warfronts-weekly` path, which is the
|
|
32
|
+
* site-specific canonical for the `newsletter` content type on Fronts.co.
|
|
33
|
+
* This is a one-line change if a future site uses a different newsletter path.
|
|
34
|
+
*/
|
|
35
|
+
const CONTENT_PUBLIC_PATH = {
|
|
36
|
+
article: (slug) => `/article/${slug}`,
|
|
37
|
+
podcast: (slug) => `/podcast/${slug}`,
|
|
38
|
+
video: (slug) => `/video/${slug}`,
|
|
39
|
+
// newsletter type maps to the warfronts-weekly path on Fronts.co.
|
|
40
|
+
// SOURCE: fronts/src/pages/warfronts-weekly/[slug].astro
|
|
41
|
+
// fronts/src/lib/content.ts ~L779
|
|
42
|
+
newsletter: (slug) => `/warfronts-weekly/${slug}`,
|
|
43
|
+
};
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
// publicUrlFor
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
/**
|
|
48
|
+
* Derives the Fronts public URL for a content item given its `type` and
|
|
49
|
+
* `slug`, optionally joined onto a `siteBase`.
|
|
50
|
+
*
|
|
51
|
+
* - **With `siteBase`** (e.g. `'https://fronts.co'`): returns the absolute
|
|
52
|
+
* URL — any trailing slashes on `siteBase` are stripped before joining.
|
|
53
|
+
* - **Without `siteBase`** (or `undefined`): returns a relative path
|
|
54
|
+
* (e.g. `'/article/my-piece'`) — still valid for pre-filling
|
|
55
|
+
* `destinationUrl` once the operator corrects the origin after mount.
|
|
56
|
+
*
|
|
57
|
+
* Slugs that accidentally start with a slash are trimmed to avoid
|
|
58
|
+
* double-slash paths.
|
|
59
|
+
*
|
|
60
|
+
* @param row - The content item (needs `type` and `slug`).
|
|
61
|
+
* @param siteBase - Optional absolute origin (e.g. `'https://fronts.co'`).
|
|
62
|
+
* Trailing slashes are stripped. Omit for a relative path.
|
|
63
|
+
* @returns The public URL string.
|
|
64
|
+
*/
|
|
65
|
+
export function publicUrlFor(row, siteBase) {
|
|
66
|
+
const cleanSlug = row.slug.replace(/^\/+/, '');
|
|
67
|
+
const path = CONTENT_PUBLIC_PATH[row.type](cleanSlug);
|
|
68
|
+
if (!siteBase) {
|
|
69
|
+
return path;
|
|
70
|
+
}
|
|
71
|
+
const base = siteBase.replace(/\/+$/, '');
|
|
72
|
+
return `${base}${path}`;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=public-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-url.js","sourceRoot":"","sources":["../../../src/ui/screens/public-url.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,yDAAyD;AACzD,EAAE;AACF,oEAAoE;AACpE,wEAAwE;AACxE,wEAAwE;AACxE,sEAAsE;AACtE,0CAA0C;AAC1C,iFAAiF;AACjF,EAAE;AACF,yEAAyE;AACzE,0DAA0D;AAC1D,0EAA0E;AAC1E,uEAAuE;AACvE,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAC3E,sBAAsB;AAItB,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAkD;IAC1E,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;IACrC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;IACrC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE;IACjC,kEAAkE;IAClE,yDAAyD;IACzD,0CAA0C;IAC1C,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,IAAI,EAAE;CACjD,CAAA;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,YAAY,CAAC,GAAwC,EAAE,QAAiB;IACvF,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC9C,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAA;IAErD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACzC,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAAA;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/registry.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AA2B7D,eAAO,MAAM,UAAU,EAAE,cAYxB,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useHashRouter } from '../use-hash-router.js';
|
|
3
|
+
import { AnalyticsScreen } from './AnalyticsScreen.js';
|
|
4
|
+
import { AuthorsScreen } from './AuthorsScreen.js';
|
|
5
|
+
import { CalendarScreen } from './CalendarScreen.js';
|
|
6
|
+
import { ContentInsightsScreen } from './ContentInsightsScreen.js';
|
|
7
|
+
import { ContentRoute } from './ContentRoute.js';
|
|
8
|
+
import { DashboardScreen } from './DashboardScreen.js';
|
|
9
|
+
import { MediaScreen } from './MediaScreen.js';
|
|
10
|
+
import { SettingsScreen } from './SettingsScreen.js';
|
|
11
|
+
import { SocialShareScreen } from './SocialShareScreen.js';
|
|
12
|
+
import { SubscriptionsScreen } from './SubscriptionsScreen.js';
|
|
13
|
+
import { TopicsScreen } from './TopicsScreen.js';
|
|
14
|
+
// Thin wrappers that supply the openDoc seam for screens that need it.
|
|
15
|
+
// On click, we navigate to the content route; the ContentRoute will handle
|
|
16
|
+
// any subsequent doc-open action (e.g. the user picks a doc from the library).
|
|
17
|
+
function DashboardRoute() {
|
|
18
|
+
const { navigate } = useHashRouter();
|
|
19
|
+
return _jsx(DashboardScreen, { openDoc: () => navigate('content') });
|
|
20
|
+
}
|
|
21
|
+
function CalendarRoute() {
|
|
22
|
+
const { navigate } = useHashRouter();
|
|
23
|
+
return _jsx(CalendarScreen, { openDoc: () => navigate('content') });
|
|
24
|
+
}
|
|
25
|
+
export const cmsScreens = {
|
|
26
|
+
content: () => _jsx(ContentRoute, {}),
|
|
27
|
+
'content-insights': () => _jsx(ContentInsightsScreen, {}),
|
|
28
|
+
dashboard: () => _jsx(DashboardRoute, {}),
|
|
29
|
+
calendar: () => _jsx(CalendarRoute, {}),
|
|
30
|
+
media: () => _jsx(MediaScreen, {}),
|
|
31
|
+
analytics: () => _jsx(AnalyticsScreen, {}),
|
|
32
|
+
authors: () => _jsx(AuthorsScreen, {}),
|
|
33
|
+
topics: () => _jsx(TopicsScreen, {}),
|
|
34
|
+
subscriptions: () => _jsx(SubscriptionsScreen, {}),
|
|
35
|
+
'social-share': () => _jsx(SocialShareScreen, {}),
|
|
36
|
+
settings: () => _jsx(SettingsScreen, {}),
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/ui/screens/registry.tsx"],"names":[],"mappings":";AAcA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,uEAAuE;AACvE,2EAA2E;AAC3E,+EAA+E;AAC/E,SAAS,cAAc;IACtB,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAA;IACpC,OAAO,KAAC,eAAe,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAI,CAAA;AAC/D,CAAC;AAED,SAAS,aAAa;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAA;IACpC,OAAO,KAAC,cAAc,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAI,CAAA;AAC9D,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAmB;IACzC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAC,YAAY,KAAG;IAC/B,kBAAkB,EAAE,GAAG,EAAE,CAAC,KAAC,qBAAqB,KAAG;IACnD,SAAS,EAAE,GAAG,EAAE,CAAC,KAAC,cAAc,KAAG;IACnC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAC,aAAa,KAAG;IACjC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAC,WAAW,KAAG;IAC5B,SAAS,EAAE,GAAG,EAAE,CAAC,KAAC,eAAe,KAAG;IACpC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAC,aAAa,KAAG;IAChC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAC,YAAY,KAAG;IAC9B,aAAa,EAAE,GAAG,EAAE,CAAC,KAAC,mBAAmB,KAAG;IAC5C,cAAc,EAAE,GAAG,EAAE,CAAC,KAAC,iBAAiB,KAAG;IAC3C,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAC,cAAc,KAAG;CAClC,CAAA"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { ProviderResult, ProviderStatus } from '../../providers/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extract the ProviderStatus from a ProviderResult.
|
|
4
|
+
* Used by every card to branch on live/partial/empty rendering.
|
|
5
|
+
* Null-safe: a provider that returns a null/absent result is treated as
|
|
6
|
+
* 'empty' rather than throwing on `.status` (that crash blanked the whole
|
|
7
|
+
* analytics screen, which has no per-card boundary).
|
|
8
|
+
*/
|
|
9
|
+
export declare function selectKpiState<T>(result: ProviderResult<T> | null | undefined): ProviderStatus;
|
|
10
|
+
export type KpiFormat = 'num' | 'pct' | 'usd';
|
|
11
|
+
/** Sentinel returned by formatKpi when the value is null. */
|
|
12
|
+
export interface KpiPending {
|
|
13
|
+
pending: true;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Format a KPI value for display.
|
|
17
|
+
*
|
|
18
|
+
* - `null` → `{ pending: true }` (renders as "— pending backfill", never as "0")
|
|
19
|
+
* - `'num'` (default) → comma-separated integer string (e.g. 2160 → "2,160")
|
|
20
|
+
* - `'pct'` → one-decimal percent (e.g. 0.021 → "2.1%")
|
|
21
|
+
* - `'usd'` → dollar-prefixed, no cents when whole (e.g. 186 → "$186"; 186.5 → "$186.50")
|
|
22
|
+
*/
|
|
23
|
+
export declare function formatKpi(value: number | null, fmt?: KpiFormat): string | KpiPending;
|
|
24
|
+
/**
|
|
25
|
+
* A top-content item as returned by AnalyticsProvider.getTopContent.
|
|
26
|
+
* The title field is optional — some providers supply it, others only give ids.
|
|
27
|
+
*/
|
|
28
|
+
export interface TopContentProvider {
|
|
29
|
+
id: string;
|
|
30
|
+
title?: string;
|
|
31
|
+
reads: number;
|
|
32
|
+
}
|
|
33
|
+
/** A merged top-content item with a D1-sourced title (or null when unavailable). */
|
|
34
|
+
export interface TopContentMerged {
|
|
35
|
+
id: string;
|
|
36
|
+
title: string | null;
|
|
37
|
+
reads: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Join analytics provider top-content items with a D1 titles map.
|
|
41
|
+
*
|
|
42
|
+
* The D1 title (from content_items) takes precedence when present.
|
|
43
|
+
* If neither the D1 map nor the provider supplies a title, the result is null
|
|
44
|
+
* (honest: the screen renders "—" or omits the title column).
|
|
45
|
+
*
|
|
46
|
+
* Order is preserved from `providerTop` (highest reads first, as ranked by provider).
|
|
47
|
+
*/
|
|
48
|
+
export declare function mergeTopContent(providerTop: TopContentProvider[], titlesById: Record<string, string>): TopContentMerged[];
|
|
49
|
+
/** Pill labels for the needs-attention queue. */
|
|
50
|
+
export type AttentionPill = 'review' | 'processing' | 'scheduled' | 'draft';
|
|
51
|
+
/**
|
|
52
|
+
* A content row as returned by the dashboard summary route's needsAttention array.
|
|
53
|
+
* Mirrors the server-side shape (same fields as LibraryRow minus visibility/featured/authorName).
|
|
54
|
+
*/
|
|
55
|
+
export interface NeedsAttentionRow {
|
|
56
|
+
id: string;
|
|
57
|
+
type: string;
|
|
58
|
+
status: string;
|
|
59
|
+
slug: string;
|
|
60
|
+
title: string;
|
|
61
|
+
publishAt: string | null;
|
|
62
|
+
processingState: string | null;
|
|
63
|
+
}
|
|
64
|
+
/** A queue item with the resolved pill label for dashboard rendering. */
|
|
65
|
+
export interface AttentionItem {
|
|
66
|
+
id: string;
|
|
67
|
+
type: string;
|
|
68
|
+
status: string;
|
|
69
|
+
slug: string;
|
|
70
|
+
title: string;
|
|
71
|
+
publishAt: string | null;
|
|
72
|
+
pill: AttentionPill;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Convert a flat list of content rows into dashboard queue items with pill labels.
|
|
76
|
+
*
|
|
77
|
+
* Rules:
|
|
78
|
+
* - published rows are excluded (they are fine, not attention-worthy)
|
|
79
|
+
* - a video row with a mid-flight processingState (not null/ready/failed) → pill = "processing"
|
|
80
|
+
* - otherwise pill mirrors the row status (review/scheduled/draft)
|
|
81
|
+
*/
|
|
82
|
+
export declare function splitNeedsAttention(rows: NeedsAttentionRow[]): AttentionItem[];
|
|
83
|
+
/** A plan-mix bucket from SubscriptionsProvider.getPlanMix. */
|
|
84
|
+
export interface PlanMixBucket {
|
|
85
|
+
plan: string;
|
|
86
|
+
count: number;
|
|
87
|
+
}
|
|
88
|
+
/** A resolved bar segment for the plan-mix chart. */
|
|
89
|
+
export interface PlanMixBar {
|
|
90
|
+
name: string;
|
|
91
|
+
count: number;
|
|
92
|
+
/** Percentage of total subscribers (0–100, rounds to 2 dp). */
|
|
93
|
+
pct: number;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Convert plan-mix provider buckets into bar segments with resolved display names and
|
|
97
|
+
* percentages.
|
|
98
|
+
*
|
|
99
|
+
* `resolvePlanName` is the sync resolver from SubscriptionsProvider (echoes the id
|
|
100
|
+
* when no map is configured — honest default until the Fronts impl ships).
|
|
101
|
+
*
|
|
102
|
+
* pct values sum to 100 (within floating-point tolerance).
|
|
103
|
+
*/
|
|
104
|
+
export declare function planMixToBars(planMix: PlanMixBucket[], resolvePlanName: (variantId: string) => string): PlanMixBar[];
|
|
105
|
+
//# sourceMappingURL=render-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-state.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/render-state.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAM9E;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc,CAE9F;AAMD,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;AAE7C,6DAA6D;AAC7D,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,IAAI,CAAA;CACb;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,GAAE,SAAiB,GAAG,MAAM,GAAG,UAAU,CAmB3F;AAMD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACb;AAED,oFAAoF;AACpF,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,WAAW,EAAE,kBAAkB,EAAE,EACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,gBAAgB,EAAE,CAMpB;AAMD,iDAAiD;AACjD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAA;AAE3E;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,IAAI,EAAE,aAAa,CAAA;CACnB;AAID;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,aAAa,EAAE,CAkC9E;AAMD,+DAA+D;AAC/D,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACb;AAED,qDAAqD;AACrD,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAA;CACX;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC5B,OAAO,EAAE,aAAa,EAAE,EACxB,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAC5C,UAAU,EAAE,CAQd"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// src/ui/screens/render-state.ts — pure render-state helpers for the inject screens.
|
|
2
|
+
//
|
|
3
|
+
// No React, no D1, no browser globals. Pure data-in / data-out helpers used by
|
|
4
|
+
// the Dashboard, Analytics, Subscriptions, and Calendar screens to apply the
|
|
5
|
+
// live/partial/empty + null→"pending" honesty convention.
|
|
6
|
+
//
|
|
7
|
+
// Helpers:
|
|
8
|
+
// selectKpiState — extract the ProviderStatus from a ProviderResult
|
|
9
|
+
// formatKpi — number|null → formatted string or { pending: true } sentinel
|
|
10
|
+
// mergeTopContent — join analytics provider top-content ids with D1 titles
|
|
11
|
+
// splitNeedsAttention — group content rows into dashboard queue items with pill labels
|
|
12
|
+
// planMixToBars — plan-mix buckets → bar segments with resolved names + pct
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// selectKpiState
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/**
|
|
17
|
+
* Extract the ProviderStatus from a ProviderResult.
|
|
18
|
+
* Used by every card to branch on live/partial/empty rendering.
|
|
19
|
+
* Null-safe: a provider that returns a null/absent result is treated as
|
|
20
|
+
* 'empty' rather than throwing on `.status` (that crash blanked the whole
|
|
21
|
+
* analytics screen, which has no per-card boundary).
|
|
22
|
+
*/
|
|
23
|
+
export function selectKpiState(result) {
|
|
24
|
+
return result?.status ?? 'empty';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Format a KPI value for display.
|
|
28
|
+
*
|
|
29
|
+
* - `null` → `{ pending: true }` (renders as "— pending backfill", never as "0")
|
|
30
|
+
* - `'num'` (default) → comma-separated integer string (e.g. 2160 → "2,160")
|
|
31
|
+
* - `'pct'` → one-decimal percent (e.g. 0.021 → "2.1%")
|
|
32
|
+
* - `'usd'` → dollar-prefixed, no cents when whole (e.g. 186 → "$186"; 186.5 → "$186.50")
|
|
33
|
+
*/
|
|
34
|
+
export function formatKpi(value, fmt = 'num') {
|
|
35
|
+
if (value === null) {
|
|
36
|
+
return { pending: true };
|
|
37
|
+
}
|
|
38
|
+
switch (fmt) {
|
|
39
|
+
case 'pct': {
|
|
40
|
+
return `${(value * 100).toFixed(1)}%`;
|
|
41
|
+
}
|
|
42
|
+
case 'usd': {
|
|
43
|
+
const rounded = Math.round(value * 100) / 100;
|
|
44
|
+
const isWhole = rounded === Math.floor(rounded);
|
|
45
|
+
return isWhole ? `$${rounded.toLocaleString('en-US')}` : `$${rounded.toFixed(2)}`;
|
|
46
|
+
}
|
|
47
|
+
default: {
|
|
48
|
+
// 'num' — comma-separated, no decimals
|
|
49
|
+
return Math.round(value).toLocaleString('en-US');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Join analytics provider top-content items with a D1 titles map.
|
|
55
|
+
*
|
|
56
|
+
* The D1 title (from content_items) takes precedence when present.
|
|
57
|
+
* If neither the D1 map nor the provider supplies a title, the result is null
|
|
58
|
+
* (honest: the screen renders "—" or omits the title column).
|
|
59
|
+
*
|
|
60
|
+
* Order is preserved from `providerTop` (highest reads first, as ranked by provider).
|
|
61
|
+
*/
|
|
62
|
+
export function mergeTopContent(providerTop, titlesById) {
|
|
63
|
+
return providerTop.map((item) => ({
|
|
64
|
+
id: item.id,
|
|
65
|
+
title: titlesById[item.id] ?? item.title ?? null,
|
|
66
|
+
reads: item.reads,
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
const NON_PROCESSING_STATES = new Set(['ready', 'failed']);
|
|
70
|
+
/**
|
|
71
|
+
* Convert a flat list of content rows into dashboard queue items with pill labels.
|
|
72
|
+
*
|
|
73
|
+
* Rules:
|
|
74
|
+
* - published rows are excluded (they are fine, not attention-worthy)
|
|
75
|
+
* - a video row with a mid-flight processingState (not null/ready/failed) → pill = "processing"
|
|
76
|
+
* - otherwise pill mirrors the row status (review/scheduled/draft)
|
|
77
|
+
*/
|
|
78
|
+
export function splitNeedsAttention(rows) {
|
|
79
|
+
const result = [];
|
|
80
|
+
for (const row of rows) {
|
|
81
|
+
if (row.status === 'published')
|
|
82
|
+
continue;
|
|
83
|
+
let pill;
|
|
84
|
+
const isMidFlight = row.processingState !== null && !NON_PROCESSING_STATES.has(row.processingState);
|
|
85
|
+
if (isMidFlight) {
|
|
86
|
+
pill = 'processing';
|
|
87
|
+
}
|
|
88
|
+
else if (row.status === 'review') {
|
|
89
|
+
pill = 'review';
|
|
90
|
+
}
|
|
91
|
+
else if (row.status === 'scheduled') {
|
|
92
|
+
pill = 'scheduled';
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// draft + archived + anything else — show as draft
|
|
96
|
+
pill = 'draft';
|
|
97
|
+
}
|
|
98
|
+
result.push({
|
|
99
|
+
id: row.id,
|
|
100
|
+
type: row.type,
|
|
101
|
+
status: row.status,
|
|
102
|
+
slug: row.slug,
|
|
103
|
+
title: row.title,
|
|
104
|
+
publishAt: row.publishAt,
|
|
105
|
+
pill,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Convert plan-mix provider buckets into bar segments with resolved display names and
|
|
112
|
+
* percentages.
|
|
113
|
+
*
|
|
114
|
+
* `resolvePlanName` is the sync resolver from SubscriptionsProvider (echoes the id
|
|
115
|
+
* when no map is configured — honest default until the Fronts impl ships).
|
|
116
|
+
*
|
|
117
|
+
* pct values sum to 100 (within floating-point tolerance).
|
|
118
|
+
*/
|
|
119
|
+
export function planMixToBars(planMix, resolvePlanName) {
|
|
120
|
+
const total = planMix.reduce((acc, b) => acc + b.count, 0);
|
|
121
|
+
return planMix.map((bucket) => ({
|
|
122
|
+
name: resolvePlanName(bucket.plan),
|
|
123
|
+
count: bucket.count,
|
|
124
|
+
pct: total === 0 ? 0 : (bucket.count / total) * 100,
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=render-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-state.js","sourceRoot":"","sources":["../../../src/ui/screens/render-state.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,0DAA0D;AAC1D,EAAE;AACF,WAAW;AACX,yEAAyE;AACzE,qFAAqF;AACrF,+EAA+E;AAC/E,yFAAyF;AACzF,kFAAkF;AAIlF,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAI,MAA4C;IAC7E,OAAO,MAAM,EAAE,MAAM,IAAI,OAAO,CAAA;AACjC,CAAC;AAaD;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAAoB,EAAE,MAAiB,KAAK;IACrE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACzB,CAAC;IAED,QAAQ,GAAG,EAAE,CAAC;QACb,KAAK,KAAK,CAAC,CAAC,CAAC;YACZ,OAAO,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;QACtC,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;YAC7C,MAAM,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC/C,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QAClF,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACT,uCAAuC;YACvC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QACjD,CAAC;IACF,CAAC;AACF,CAAC;AAuBD;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC9B,WAAiC,EACjC,UAAkC;IAElC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACjC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAChD,KAAK,EAAE,IAAI,CAAC,KAAK;KACjB,CAAC,CAAC,CAAA;AACJ,CAAC;AAkCD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;AAE1D;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAyB;IAC5D,MAAM,MAAM,GAAoB,EAAE,CAAA;IAElC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW;YAAE,SAAQ;QAExC,IAAI,IAAmB,CAAA;QAEvB,MAAM,WAAW,GAChB,GAAG,CAAC,eAAe,KAAK,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAEhF,IAAI,WAAW,EAAE,CAAC;YACjB,IAAI,GAAG,YAAY,CAAA;QACpB,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpC,IAAI,GAAG,QAAQ,CAAA;QAChB,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACvC,IAAI,GAAG,WAAW,CAAA;QACnB,CAAC;aAAM,CAAC;YACP,mDAAmD;YACnD,IAAI,GAAG,OAAO,CAAA;QACf,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,IAAI;SACJ,CAAC,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC;AAoBD;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC5B,OAAwB,EACxB,eAA8C;IAE9C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAE1D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;QAClC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG;KACnD,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { CmsRole } from '../../schema/types.js';
|
|
2
|
+
export interface RoleOption {
|
|
3
|
+
value: CmsRole;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
/** Display order matches the design: Owner → Senior Editor → Editor → Contributor → Producer. */
|
|
7
|
+
export declare function roleOptions(): RoleOption[];
|
|
8
|
+
/** Return the human-readable display label for a CmsRole value. */
|
|
9
|
+
export declare function roleLabel(role: CmsRole): string;
|
|
10
|
+
/**
|
|
11
|
+
* The keys from workspace_settings that the UI may PATCH via
|
|
12
|
+
* GET|PATCH /admin/api/workspace-settings. Must match the SETTINGS_PATCHABLE
|
|
13
|
+
* list in shell.ts (the server's allowlist).
|
|
14
|
+
*/
|
|
15
|
+
export declare const SETTINGS_PATCHABLE_KEYS: readonly ["publication_name", "tagline", "language", "timezone", "require_review", "auto_seo", "scheduled_publish", "premium_default", "accent_color", "display_typeface"];
|
|
16
|
+
export type SettingsPatchableKey = (typeof SETTINGS_PATCHABLE_KEYS)[number];
|
|
17
|
+
export type SettingsFormState = Partial<Record<SettingsPatchableKey, string | number | null>> & Record<string, unknown>;
|
|
18
|
+
/**
|
|
19
|
+
* Given an arbitrary form-state object, emit only the SETTINGS_PATCHABLE_KEYS
|
|
20
|
+
* that are present (not strictly undefined) in the input. This ensures no
|
|
21
|
+
* unknown/rogue keys ever reach the server PATCH body.
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildSettingsPatch(formState: SettingsFormState): Partial<Record<SettingsPatchableKey, string | number | null>>;
|
|
24
|
+
/**
|
|
25
|
+
* Returns true when the current membership role is allowed to edit
|
|
26
|
+
* General/Branding/Publishing-defaults settings.
|
|
27
|
+
* Spec §12 scope guard 5: these settings are owner-gated.
|
|
28
|
+
*/
|
|
29
|
+
export declare function canEditSettings(role: CmsRole | null | undefined): boolean;
|
|
30
|
+
/** The API shape returned by GET /admin/api/settings/members. */
|
|
31
|
+
export interface ApiMemberRow {
|
|
32
|
+
userId: string;
|
|
33
|
+
role: CmsRole;
|
|
34
|
+
email: string;
|
|
35
|
+
name: string | null;
|
|
36
|
+
image?: string | null;
|
|
37
|
+
acceptedAt: number | null;
|
|
38
|
+
createdAt: number;
|
|
39
|
+
}
|
|
40
|
+
/** The UI view shape for a member row in the Roles & Team tab. */
|
|
41
|
+
export interface MemberRowView {
|
|
42
|
+
userId: string;
|
|
43
|
+
role: CmsRole;
|
|
44
|
+
email: string;
|
|
45
|
+
name: string | null;
|
|
46
|
+
image?: string | null;
|
|
47
|
+
/** True when this row represents the currently-logged-in user. */
|
|
48
|
+
isSelf: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Map an API member row to the UI view shape, computing `isSelf` by
|
|
52
|
+
* comparing the member's userId against the current session's subject.
|
|
53
|
+
*/
|
|
54
|
+
export declare function memberRowView(member: ApiMemberRow, currentSubject: string | null): MemberRowView;
|
|
55
|
+
//# sourceMappingURL=settings-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-data.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/settings-data.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAMpD,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACb;AAED,iGAAiG;AACjG,wBAAgB,WAAW,IAAI,UAAU,EAAE,CAQ1C;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAa/C;AAMD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,4KAW1B,CAAA;AAEV,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE3E,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,GAC5F,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAExB;;;;GAIG;AACH,wBAAgB,kBAAkB,CACjC,SAAS,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAQ/D;AAMD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEzE;AAMD,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,kEAAkE;IAClE,MAAM,EAAE,OAAO,CAAA;CACf;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa,CAShG"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// src/ui/screens/settings-data.ts — pure helper functions for the Settings screen (P7 Task 10).
|
|
2
|
+
//
|
|
3
|
+
// No React, no fetch, no D1. Everything here is pure and vitest-testable
|
|
4
|
+
// without any environment setup.
|
|
5
|
+
/** Display order matches the design: Owner → Senior Editor → Editor → Contributor → Producer. */
|
|
6
|
+
export function roleOptions() {
|
|
7
|
+
return [
|
|
8
|
+
{ value: 'owner', label: 'Owner' },
|
|
9
|
+
{ value: 'senior_editor', label: 'Senior Editor' },
|
|
10
|
+
{ value: 'editor', label: 'Editor' },
|
|
11
|
+
{ value: 'contributor', label: 'Contributor' },
|
|
12
|
+
{ value: 'producer', label: 'Producer' },
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
/** Return the human-readable display label for a CmsRole value. */
|
|
16
|
+
export function roleLabel(role) {
|
|
17
|
+
switch (role) {
|
|
18
|
+
case 'owner':
|
|
19
|
+
return 'Owner';
|
|
20
|
+
case 'senior_editor':
|
|
21
|
+
return 'Senior Editor';
|
|
22
|
+
case 'editor':
|
|
23
|
+
return 'Editor';
|
|
24
|
+
case 'contributor':
|
|
25
|
+
return 'Contributor';
|
|
26
|
+
case 'producer':
|
|
27
|
+
return 'Producer';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Settings patch
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
/**
|
|
34
|
+
* The keys from workspace_settings that the UI may PATCH via
|
|
35
|
+
* GET|PATCH /admin/api/workspace-settings. Must match the SETTINGS_PATCHABLE
|
|
36
|
+
* list in shell.ts (the server's allowlist).
|
|
37
|
+
*/
|
|
38
|
+
export const SETTINGS_PATCHABLE_KEYS = [
|
|
39
|
+
'publication_name',
|
|
40
|
+
'tagline',
|
|
41
|
+
'language',
|
|
42
|
+
'timezone',
|
|
43
|
+
'require_review',
|
|
44
|
+
'auto_seo',
|
|
45
|
+
'scheduled_publish',
|
|
46
|
+
'premium_default',
|
|
47
|
+
'accent_color',
|
|
48
|
+
'display_typeface',
|
|
49
|
+
];
|
|
50
|
+
/**
|
|
51
|
+
* Given an arbitrary form-state object, emit only the SETTINGS_PATCHABLE_KEYS
|
|
52
|
+
* that are present (not strictly undefined) in the input. This ensures no
|
|
53
|
+
* unknown/rogue keys ever reach the server PATCH body.
|
|
54
|
+
*/
|
|
55
|
+
export function buildSettingsPatch(formState) {
|
|
56
|
+
const patch = {};
|
|
57
|
+
for (const key of SETTINGS_PATCHABLE_KEYS) {
|
|
58
|
+
if (key in formState) {
|
|
59
|
+
patch[key] = formState[key];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return patch;
|
|
63
|
+
}
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// Permission gates
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
/**
|
|
68
|
+
* Returns true when the current membership role is allowed to edit
|
|
69
|
+
* General/Branding/Publishing-defaults settings.
|
|
70
|
+
* Spec §12 scope guard 5: these settings are owner-gated.
|
|
71
|
+
*/
|
|
72
|
+
export function canEditSettings(role) {
|
|
73
|
+
return role === 'owner';
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Map an API member row to the UI view shape, computing `isSelf` by
|
|
77
|
+
* comparing the member's userId against the current session's subject.
|
|
78
|
+
*/
|
|
79
|
+
export function memberRowView(member, currentSubject) {
|
|
80
|
+
return {
|
|
81
|
+
userId: member.userId,
|
|
82
|
+
role: member.role,
|
|
83
|
+
email: member.email,
|
|
84
|
+
name: member.name,
|
|
85
|
+
image: member.image,
|
|
86
|
+
isSelf: currentSubject != null && member.userId === currentSubject,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=settings-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-data.js","sourceRoot":"","sources":["../../../src/ui/screens/settings-data.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,EAAE;AACF,yEAAyE;AACzE,iCAAiC;AAajC,iGAAiG;AACjG,MAAM,UAAU,WAAW;IAC1B,OAAO;QACN,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;QAClC,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE;QAClD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;QACpC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;QAC9C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;KACxC,CAAA;AACF,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,SAAS,CAAC,IAAa;IACtC,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,OAAO;YACX,OAAO,OAAO,CAAA;QACf,KAAK,eAAe;YACnB,OAAO,eAAe,CAAA;QACvB,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAA;QAChB,KAAK,aAAa;YACjB,OAAO,aAAa,CAAA;QACrB,KAAK,UAAU;YACd,OAAO,UAAU,CAAA;IACnB,CAAC;AACF,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACtC,kBAAkB;IAClB,SAAS;IACT,UAAU;IACV,UAAU;IACV,gBAAgB;IAChB,UAAU;IACV,mBAAmB;IACnB,iBAAiB;IACjB,cAAc;IACd,kBAAkB;CACT,CAAA;AAOV;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CACjC,SAA4B;IAE5B,MAAM,KAAK,GAAkE,EAAE,CAAA;IAC/E,KAAK,MAAM,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAC3C,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAA2B,CAAA;QACtD,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAgC;IAC/D,OAAO,IAAI,KAAK,OAAO,CAAA;AACxB,CAAC;AA4BD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB,EAAE,cAA6B;IAChF,OAAO;QACN,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,cAAc,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc;KAClE,CAAA;AACF,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { ApiKeyListEntry } from '../../engine/api-keys.js';
|
|
2
|
+
/**
|
|
3
|
+
* Return the safe masked display string for an API key list entry.
|
|
4
|
+
* The masked value is stored in the key entry (the raw is never stored).
|
|
5
|
+
* Falls back to 'mk_live_••••' if the stored masked hint is absent/empty.
|
|
6
|
+
*
|
|
7
|
+
* SECURITY: this function never accepts or emits a raw key value. The
|
|
8
|
+
* ApiKeyListEntry type has no rawKey field — the raw is returned only on
|
|
9
|
+
* creation and is never retrievable again.
|
|
10
|
+
*/
|
|
11
|
+
export declare function maskApiKeyView(key: ApiKeyListEntry): string;
|
|
12
|
+
export interface WebhookEventOption {
|
|
13
|
+
value: string;
|
|
14
|
+
label: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Return the full list of webhook event options for the event <select>.
|
|
18
|
+
* Order matches the WEBHOOK_EVENTS enum (canonical 12-event list).
|
|
19
|
+
*/
|
|
20
|
+
export declare function webhookEventOptions(): WebhookEventOption[];
|
|
21
|
+
export interface IntegrationProviderResult {
|
|
22
|
+
status: string;
|
|
23
|
+
detail?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface IntegrationStatusView {
|
|
26
|
+
/** Human-readable status label, e.g. 'Connected' or 'Off'. */
|
|
27
|
+
label: string;
|
|
28
|
+
/** True only when the provider confirms a live connection. */
|
|
29
|
+
connected: boolean;
|
|
30
|
+
/** Optional detail string, e.g. 'fronts-media · 412 GB'. */
|
|
31
|
+
detail: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Map a raw provider status result to a display view.
|
|
35
|
+
*
|
|
36
|
+
* HONESTY CONTRACT (spec §12 scope guard 5): an empty / null / disconnected
|
|
37
|
+
* status must NEVER render as "Connected". The connected=true path requires
|
|
38
|
+
* an explicit status === 'connected' signal from the provider.
|
|
39
|
+
*/
|
|
40
|
+
export declare function integrationStatusView(result: IntegrationProviderResult | null | undefined): IntegrationStatusView;
|
|
41
|
+
export interface DomainEntry {
|
|
42
|
+
domain: string;
|
|
43
|
+
role?: string;
|
|
44
|
+
sslActive?: boolean;
|
|
45
|
+
}
|
|
46
|
+
export interface DomainRowView {
|
|
47
|
+
domain: string;
|
|
48
|
+
/** Display role string, e.g. 'Primary', 'Redirect → …'. */
|
|
49
|
+
role: string;
|
|
50
|
+
/** Whether SSL is active for this domain. */
|
|
51
|
+
sslActive: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Map a raw domain entry to the display view shape for the Domains tab.
|
|
55
|
+
* Domains are read-only in P7 — no connect/disconnect mutation is exposed.
|
|
56
|
+
*/
|
|
57
|
+
export declare function domainRowView(entry: DomainEntry): DomainRowView;
|
|
58
|
+
//# sourceMappingURL=settings-panels-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-panels-data.d.ts","sourceRoot":"","sources":["../../../src/ui/screens/settings-panels-data.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAO/D;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAK3D;AAMD,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACb;AAiBD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,kBAAkB,EAAE,CAK1D;AAMD,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,qBAAqB;IACrC,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAA;IACb,8DAA8D;IAC9D,SAAS,EAAE,OAAO,CAAA;IAClB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAA;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,yBAAyB,GAAG,IAAI,GAAG,SAAS,GAClD,qBAAqB,CAavB;AAMD,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAA;IACZ,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAA;CAClB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAM/D"}
|