@12ui/design 0.2.81 → 0.2.83
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 +11 -7
- package/SKILL.md +1 -1
- package/dist/branch-execution.d.ts.map +1 -1
- package/dist/branch-execution.js +6 -0
- package/dist/branch-execution.js.map +1 -1
- package/dist/branch-materialize.d.ts.map +1 -1
- package/dist/branch-materialize.js +6 -2
- package/dist/branch-materialize.js.map +1 -1
- package/dist/cli-capabilities.d.ts +4 -7
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +4 -4
- package/dist/cli-capabilities.js.map +1 -1
- package/dist/cli-help/conversion.d.ts +1 -1
- package/dist/cli-help/conversion.js +1 -1
- package/dist/cli-help/conversion.js.map +1 -1
- package/dist/cli-help/index.d.ts +3 -3
- package/dist/cli-help/workflow.d.ts +2 -2
- package/dist/cli-help/workflow.js +4 -4
- package/dist/cli-help/workflow.js.map +1 -1
- package/dist/cli-image-backend.d.ts +6 -1
- package/dist/cli-image-backend.d.ts.map +1 -1
- package/dist/cli-image-backend.js +8 -3
- package/dist/cli-image-backend.js.map +1 -1
- package/dist/cli-local-runtime.d.ts +6 -0
- package/dist/cli-local-runtime.d.ts.map +1 -1
- package/dist/cli-local-runtime.js +14 -1
- package/dist/cli-local-runtime.js.map +1 -1
- package/dist/cli-usage.d.ts.map +1 -1
- package/dist/cli-usage.js +8 -7
- package/dist/cli-usage.js.map +1 -1
- package/dist/cli-workspace-draw.d.ts.map +1 -1
- package/dist/cli-workspace-draw.js +2 -0
- package/dist/cli-workspace-draw.js.map +1 -1
- package/dist/cli-workspace-runner.d.ts.map +1 -1
- package/dist/cli-workspace-runner.js +2 -1
- package/dist/cli-workspace-runner.js.map +1 -1
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +13 -1
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/mcp-slate-tool-defs.d.ts.map +1 -1
- package/dist/mcp-slate-tool-defs.js +3 -2
- package/dist/mcp-slate-tool-defs.js.map +1 -1
- package/dist/mcp-slate-ui-copy.d.ts +10 -0
- package/dist/mcp-slate-ui-copy.d.ts.map +1 -1
- package/dist/mcp-slate-ui-copy.js +9 -0
- package/dist/mcp-slate-ui-copy.js.map +1 -1
- package/dist/mcp-slate-ui-locales/de-DE.d.ts.map +1 -1
- package/dist/mcp-slate-ui-locales/de-DE.js +5 -0
- package/dist/mcp-slate-ui-locales/de-DE.js.map +1 -1
- package/dist/mcp-slate-ui-locales/es-419.d.ts.map +1 -1
- package/dist/mcp-slate-ui-locales/es-419.js +5 -0
- package/dist/mcp-slate-ui-locales/es-419.js.map +1 -1
- package/dist/mcp-slate-ui-locales/es-ES.d.ts.map +1 -1
- package/dist/mcp-slate-ui-locales/es-ES.js +5 -0
- package/dist/mcp-slate-ui-locales/es-ES.js.map +1 -1
- package/dist/mcp-slate-ui-locales/fr-FR.d.ts.map +1 -1
- package/dist/mcp-slate-ui-locales/fr-FR.js +5 -0
- package/dist/mcp-slate-ui-locales/fr-FR.js.map +1 -1
- package/dist/mcp-slate-ui-locales/hi-IN.d.ts.map +1 -1
- package/dist/mcp-slate-ui-locales/hi-IN.js +5 -0
- package/dist/mcp-slate-ui-locales/hi-IN.js.map +1 -1
- package/dist/mcp-slate-ui-locales/it-IT.d.ts.map +1 -1
- package/dist/mcp-slate-ui-locales/it-IT.js +5 -0
- package/dist/mcp-slate-ui-locales/it-IT.js.map +1 -1
- package/dist/mcp-slate-ui-locales/ja-JP.d.ts.map +1 -1
- package/dist/mcp-slate-ui-locales/ja-JP.js +5 -0
- package/dist/mcp-slate-ui-locales/ja-JP.js.map +1 -1
- package/dist/mcp-slate-ui-locales/ko-KR.d.ts.map +1 -1
- package/dist/mcp-slate-ui-locales/ko-KR.js +5 -0
- package/dist/mcp-slate-ui-locales/ko-KR.js.map +1 -1
- package/dist/mcp-slate-ui-locales/pt-BR.d.ts.map +1 -1
- package/dist/mcp-slate-ui-locales/pt-BR.js +5 -0
- package/dist/mcp-slate-ui-locales/pt-BR.js.map +1 -1
- package/dist/mcp-slate-ui-locales/zh-CN.d.ts.map +1 -1
- package/dist/mcp-slate-ui-locales/zh-CN.js +5 -0
- package/dist/mcp-slate-ui-locales/zh-CN.js.map +1 -1
- package/dist/mcp-slate-ui-locales/zh-TW.d.ts.map +1 -1
- package/dist/mcp-slate-ui-locales/zh-TW.js +5 -0
- package/dist/mcp-slate-ui-locales/zh-TW.js.map +1 -1
- package/dist/mcp-slate-ui-script-board.d.ts +19 -0
- package/dist/mcp-slate-ui-script-board.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-board.js +126 -0
- package/dist/mcp-slate-ui-script-board.js.map +1 -0
- package/dist/mcp-slate-ui-script-designs.d.ts +1 -1
- package/dist/mcp-slate-ui-script-designs.d.ts.map +1 -1
- package/dist/mcp-slate-ui-script-designs.js +24 -15
- package/dist/mcp-slate-ui-script-designs.js.map +1 -1
- package/dist/mcp-slate-ui-script-inspiration-collage.d.ts +5 -2
- package/dist/mcp-slate-ui-script-inspiration-collage.d.ts.map +1 -1
- package/dist/mcp-slate-ui-script-inspiration-collage.js +9 -5
- package/dist/mcp-slate-ui-script-inspiration-collage.js.map +1 -1
- package/dist/mcp-slate-ui-script-inspiration-gallery.d.ts +7 -4
- package/dist/mcp-slate-ui-script-inspiration-gallery.d.ts.map +1 -1
- package/dist/mcp-slate-ui-script-inspiration-gallery.js +46 -5
- package/dist/mcp-slate-ui-script-inspiration-gallery.js.map +1 -1
- package/dist/mcp-slate-ui-script-inspiration-grid.d.ts.map +1 -1
- package/dist/mcp-slate-ui-script-inspiration-grid.js +4 -0
- package/dist/mcp-slate-ui-script-inspiration-grid.js.map +1 -1
- package/dist/mcp-slate-ui-script-pause.d.ts +4 -0
- package/dist/mcp-slate-ui-script-pause.d.ts.map +1 -1
- package/dist/mcp-slate-ui-script-pause.js +9 -2
- package/dist/mcp-slate-ui-script-pause.js.map +1 -1
- package/dist/mcp-slate-ui-script-peek.d.ts +16 -0
- package/dist/mcp-slate-ui-script-peek.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-peek.js +89 -0
- package/dist/mcp-slate-ui-script-peek.js.map +1 -0
- package/dist/mcp-slate-ui-script-references.d.ts +4 -2
- package/dist/mcp-slate-ui-script-references.d.ts.map +1 -1
- package/dist/mcp-slate-ui-script-references.js +39 -7
- package/dist/mcp-slate-ui-script-references.js.map +1 -1
- package/dist/mcp-slate-ui-script-remote.js +2 -2
- package/dist/mcp-slate-ui-script-viewer.d.ts +7 -2
- package/dist/mcp-slate-ui-script-viewer.d.ts.map +1 -1
- package/dist/mcp-slate-ui-script-viewer.js +183 -50
- package/dist/mcp-slate-ui-script-viewer.js.map +1 -1
- package/dist/mcp-slate-ui-script.d.ts.map +1 -1
- package/dist/mcp-slate-ui-script.js +4 -0
- package/dist/mcp-slate-ui-script.js.map +1 -1
- package/dist/mcp-slate-ui-styles-board.d.ts +7 -0
- package/dist/mcp-slate-ui-styles-board.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles-board.js +30 -0
- package/dist/mcp-slate-ui-styles-board.js.map +1 -0
- package/dist/mcp-slate-ui-styles-designs.d.ts +2 -1
- package/dist/mcp-slate-ui-styles-designs.d.ts.map +1 -1
- package/dist/mcp-slate-ui-styles-designs.js +10 -8
- package/dist/mcp-slate-ui-styles-designs.js.map +1 -1
- package/dist/mcp-slate-ui-styles-inspiration.d.ts.map +1 -1
- package/dist/mcp-slate-ui-styles-inspiration.js +13 -2
- package/dist/mcp-slate-ui-styles-inspiration.js.map +1 -1
- package/dist/mcp-slate-ui-styles-loading.d.ts +18 -0
- package/dist/mcp-slate-ui-styles-loading.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles-loading.js +37 -0
- package/dist/mcp-slate-ui-styles-loading.js.map +1 -0
- package/dist/mcp-slate-ui-styles-peek.d.ts +8 -0
- package/dist/mcp-slate-ui-styles-peek.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles-peek.js +13 -0
- package/dist/mcp-slate-ui-styles-peek.js.map +1 -0
- package/dist/mcp-slate-ui-styles.d.ts.map +1 -1
- package/dist/mcp-slate-ui-styles.js +0 -3
- package/dist/mcp-slate-ui-styles.js.map +1 -1
- package/dist/mcp-slate-ui.d.ts.map +1 -1
- package/dist/mcp-slate-ui.js +4 -1
- package/dist/mcp-slate-ui.js.map +1 -1
- package/dist/mcp-workflow-tools.js +2 -2
- package/dist/mcp-workflow-tools.js.map +1 -1
- package/dist/prototype-browsers.d.ts +10 -2
- package/dist/prototype-browsers.d.ts.map +1 -1
- package/dist/prototype-browsers.js +27 -2
- package/dist/prototype-browsers.js.map +1 -1
- package/dist/review-files-server.d.ts +8 -0
- package/dist/review-files-server.d.ts.map +1 -0
- package/dist/review-files-server.js +133 -0
- package/dist/review-files-server.js.map +1 -0
- package/dist/review-page-assets.d.ts +1 -1
- package/dist/review-page-assets.d.ts.map +1 -1
- package/dist/review-page-assets.js +3 -1
- package/dist/review-page-assets.js.map +1 -1
- package/dist/review-page.d.ts +8 -1
- package/dist/review-page.d.ts.map +1 -1
- package/dist/review-page.js +32 -21
- package/dist/review-page.js.map +1 -1
- package/dist/review-server-guard.d.ts +33 -0
- package/dist/review-server-guard.d.ts.map +1 -0
- package/dist/review-server-guard.js +65 -0
- package/dist/review-server-guard.js.map +1 -0
- package/dist/review-server.d.ts +2 -0
- package/dist/review-server.d.ts.map +1 -1
- package/dist/review-server.js +45 -74
- package/dist/review-server.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/slate-actions.d.ts +6 -7
- package/dist/slate-actions.d.ts.map +1 -1
- package/dist/slate-actions.js +6 -9
- package/dist/slate-actions.js.map +1 -1
- package/dist/slate-branch-runner.d.ts +120 -0
- package/dist/slate-branch-runner.d.ts.map +1 -0
- package/dist/slate-branch-runner.js +312 -0
- package/dist/slate-branch-runner.js.map +1 -0
- package/dist/slate-captions-local.d.ts +14 -0
- package/dist/slate-captions-local.d.ts.map +1 -0
- package/dist/slate-captions-local.js +70 -0
- package/dist/slate-captions-local.js.map +1 -0
- package/dist/slate-captions-remote.d.ts +29 -0
- package/dist/slate-captions-remote.d.ts.map +1 -0
- package/dist/slate-captions-remote.js +65 -0
- package/dist/slate-captions-remote.js.map +1 -0
- package/dist/slate-captions.d.ts +41 -0
- package/dist/slate-captions.d.ts.map +1 -0
- package/dist/slate-captions.js +112 -0
- package/dist/slate-captions.js.map +1 -0
- package/dist/slate-commit.d.ts.map +1 -1
- package/dist/slate-commit.js +8 -6
- package/dist/slate-commit.js.map +1 -1
- package/dist/slate-image-executor.d.ts +18 -3
- package/dist/slate-image-executor.d.ts.map +1 -1
- package/dist/slate-image-executor.js +18 -5
- package/dist/slate-image-executor.js.map +1 -1
- package/dist/slate-paths.d.ts +3 -1
- package/dist/slate-paths.d.ts.map +1 -1
- package/dist/slate-paths.js +8 -2
- package/dist/slate-paths.js.map +1 -1
- package/dist/slate-round-prompt.d.ts +0 -12
- package/dist/slate-round-prompt.d.ts.map +1 -1
- package/dist/slate-round-prompt.js +0 -15
- package/dist/slate-round-prompt.js.map +1 -1
- package/dist/slate-round-runner.d.ts.map +1 -1
- package/dist/slate-round-runner.js +8 -14
- package/dist/slate-round-runner.js.map +1 -1
- package/dist/slate-runner-context.d.ts +3 -0
- package/dist/slate-runner-context.d.ts.map +1 -1
- package/dist/slate-runner-context.js.map +1 -1
- package/dist/slate-runner-main.d.ts +3 -0
- package/dist/slate-runner-main.d.ts.map +1 -1
- package/dist/slate-runner-main.js +5 -1
- package/dist/slate-runner-main.js.map +1 -1
- package/dist/slate-runner-spawn.js +2 -2
- package/dist/slate-runner-spawn.js.map +1 -1
- package/dist/slate-site-references-capture.d.ts +38 -1
- package/dist/slate-site-references-capture.d.ts.map +1 -1
- package/dist/slate-site-references-capture.js +25 -7
- package/dist/slate-site-references-capture.js.map +1 -1
- package/dist/slate-site-references-client.d.ts +13 -1
- package/dist/slate-site-references-client.d.ts.map +1 -1
- package/dist/slate-site-references-client.js +39 -14
- package/dist/slate-site-references-client.js.map +1 -1
- package/dist/slate-site-references-local.d.ts +3 -0
- package/dist/slate-site-references-local.d.ts.map +1 -1
- package/dist/slate-site-references-local.js +20 -1
- package/dist/slate-site-references-local.js.map +1 -1
- package/dist/slate-site-references-suggest.d.ts +25 -2
- package/dist/slate-site-references-suggest.d.ts.map +1 -1
- package/dist/slate-site-references-suggest.js +71 -12
- package/dist/slate-site-references-suggest.js.map +1 -1
- package/dist/slate-site-references.d.ts +11 -0
- package/dist/slate-site-references.d.ts.map +1 -1
- package/dist/slate-site-references.js +42 -3
- package/dist/slate-site-references.js.map +1 -1
- package/dist/slate-view-contract.d.ts +39 -1
- package/dist/slate-view-contract.d.ts.map +1 -1
- package/dist/slate-view.d.ts.map +1 -1
- package/dist/slate-view.js +8 -0
- package/dist/slate-view.js.map +1 -1
- package/dist/slate-workspace-parse.d.ts.map +1 -1
- package/dist/slate-workspace-parse.js +35 -0
- package/dist/slate-workspace-parse.js.map +1 -1
- package/dist/slate-workspace-types.d.ts +31 -2
- package/dist/slate-workspace-types.d.ts.map +1 -1
- package/dist/workflow/adapter-12ui.js +1 -1
- package/dist/workflow/adapter-12ui.js.map +1 -1
- package/dist/workflow/adapters.d.ts.map +1 -1
- package/dist/workflow/adapters.js +3 -3
- package/dist/workflow/adapters.js.map +1 -1
- package/dist/workflow/providers.js +2 -2
- package/dist/workflow/providers.js.map +1 -1
- package/dist/workflow/routing.d.ts +8 -1
- package/dist/workflow/routing.d.ts.map +1 -1
- package/dist/workflow/routing.js +9 -2
- package/dist/workflow/routing.js.map +1 -1
- package/dist/workflow/types.d.ts +5 -2
- package/dist/workflow/types.d.ts.map +1 -1
- package/dist/workflow/types.js.map +1 -1
- package/dist/workflow-transport.d.ts.map +1 -1
- package/dist/workflow-transport.js +4 -2
- package/dist/workflow-transport.js.map +1 -1
- package/dist/workspace-draw-branch.d.ts +27 -0
- package/dist/workspace-draw-branch.d.ts.map +1 -0
- package/dist/workspace-draw-branch.js +101 -0
- package/dist/workspace-draw-branch.js.map +1 -0
- package/dist/workspace-draw-client.d.ts +27 -0
- package/dist/workspace-draw-client.d.ts.map +1 -1
- package/dist/workspace-draw-client.js +30 -0
- package/dist/workspace-draw-client.js.map +1 -1
- package/dist/workspace-draw-codex.d.ts +5 -5
- package/dist/workspace-draw-codex.d.ts.map +1 -1
- package/dist/workspace-draw-codex.js +4 -3
- package/dist/workspace-draw-codex.js.map +1 -1
- package/dist/workspace-draw-run.d.ts +19 -3
- package/dist/workspace-draw-run.d.ts.map +1 -1
- package/dist/workspace-draw-run.js +44 -4
- package/dist/workspace-draw-run.js.map +1 -1
- package/dist/workspace-draw-types.d.ts +18 -2
- package/dist/workspace-draw-types.d.ts.map +1 -1
- package/dist/workspace-draw-types.js.map +1 -1
- package/dist/workspace-runner-main.d.ts +9 -2
- package/dist/workspace-runner-main.d.ts.map +1 -1
- package/dist/workspace-runner-main.js +21 -2
- package/dist/workspace-runner-main.js.map +1 -1
- package/dist/workspace-runner-spawn.js +1 -1
- package/dist/workspace-runner-spawn.js.map +1 -1
- package/open-design.json +2 -2
- package/package.json +1 -1
- package/runtime/codex-conversion/bin/convert.mjs +1 -1
- package/runtime/codex-conversion/src/codex/caller-home.mjs +95 -0
- package/runtime/codex-conversion/src/codex/home.mjs +8 -2
- package/runtime/codex-conversion/src/images/execute.mjs +1 -1
- package/runtime/codex-conversion/src/images/native-invoke.mjs +21 -13
- package/runtime/codex-conversion/src/images/native.mjs +42 -19
- package/runtime/codex-conversion/src/run.mjs +2 -1
- package/skills/12ui-design/SKILL.md +6 -6
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export declare const REVIEW_PAGE_STYLES = "\n :root{color-scheme:light;--paper:#f7f3ed;--panel:#fffdf8;--ink:#143b33;--text:#202523;--muted:#6a706c;--line:#d9d4ca;--signal:#ef6b22;--soft:#e8eee9;--shadow:0 18px 50px rgba(31,45,39,.08)}\n *{box-sizing:border-box}html{background:var(--paper);scroll-behavior:smooth}body{margin:0;color:var(--text);font:15px/1.45 Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;background:radial-gradient(circle at 8% 16%,rgba(239,107,34,.08),transparent 24rem),var(--paper)}\n button,textarea{font:inherit}button,a{touch-action:manipulation}.mast{padding:28px clamp(20px,4vw,64px);border-bottom:1px solid var(--line);background:rgba(247,243,237,.92);backdrop-filter:blur(12px);position:sticky;top:0;z-index:20;display:flex;align-items:flex-end;justify-content:space-between;gap:24px}.brand{display:flex;align-items:center;gap:14px}.brand-mark{width:42px;height:42px;border-radius:50%;background:var(--ink);color:var(--paper);display:grid;place-items:center;font:700 18px Georgia,serif}.mast h1,.run h2{font-family:Georgia,\"Times New Roman\",serif;color:var(--ink);margin:0;font-weight:500}.mast h1{font-size:clamp(28px,4vw,46px);line-height:1}.mast p{margin:6px 0 0;color:var(--muted)}.summary{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.summary span,.count,.mark-chip,.edit-mode{border:1px solid var(--line);border-radius:999px;padding:7px 11px;background:var(--panel);white-space:nowrap}.mark-chip{text-transform:capitalize;color:var(--ink);border-color:#9fb5a8;background:var(--soft);font-size:12px}.shell{width:min(1760px,100%);margin:0 auto;padding:36px clamp(16px,3vw,48px) 100px}.empty{max-width:680px;margin:14vh auto;padding:48px;border:1px solid var(--line);border-radius:22px;background:var(--panel);box-shadow:var(--shadow)}.empty h2{font:500 38px/1.1 Georgia,serif;color:var(--ink);margin:0 0 12px}.run{margin-bottom:64px}.run-head{display:flex;justify-content:space-between;align-items:flex-start;gap:24px;padding:0 4px 20px;border-bottom:1px solid var(--ink)}.run h2{font-size:clamp(28px,3vw,42px);line-height:1.05;max-width:1080px}.run-head p{margin:8px 0 0;color:var(--muted);overflow-wrap:anywhere}.run-purpose{max-width:920px;color:var(--text)!important}.eyebrow{margin:0 0 7px!important;color:var(--signal)!important;letter-spacing:.08em;font-size:11px;font-weight:800}.site-nav{display:flex;gap:8px;overflow:auto;padding:14px 2px 0}.site-nav a{flex:0 0 auto;color:var(--ink);text-decoration:none;border:1px solid var(--line);border-radius:999px;padding:7px 12px;background:var(--panel);font-size:12px;font-weight:750}.group{padding-top:26px}.group>h3{font:500 22px Georgia,serif;color:var(--ink);margin:0 0 14px}.items{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,360px),1fr));gap:18px}.group--pages .items,.group--conversions .items{grid-template-columns:repeat(auto-fit,minmax(min(100%,580px),1fr))}.group--branch-pages .items{display:grid;grid-template-columns:1fr;gap:28px}.item{min-width:0;border:1px solid var(--line);border-radius:18px;background:rgba(255,253,248,.92);overflow:hidden;box-shadow:0 6px 24px rgba(31,45,39,.04);scroll-margin-top:130px}.item-head{min-height:80px;padding:18px 20px 14px;display:flex;justify-content:space-between;gap:14px;align-items:flex-start}.item-head h4{font:500 21px/1.15 Georgia,serif;color:var(--ink);margin:0}.item-head p{margin:6px 0 0;color:var(--muted);font-size:13px}.item-badges{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end}.edit-mode{padding:5px 9px;font-size:11px;color:var(--muted)}.preview{position:relative;display:block;width:100%;background:#e7e4dc;border-block:1px solid var(--line)}.preview--image{aspect-ratio:16/10;overflow:hidden}.preview--image img{display:block;width:100%;height:100%;object-fit:contain}.preview--html{height:520px;min-height:280px;max-height:1100px;resize:vertical;overflow:auto}.preview--html iframe{display:block;width:100%;height:100%;border:0;background:white}.open{position:absolute;right:10px;top:10px;border:1px solid rgba(20,59,51,.28);border-radius:999px;padding:7px 12px;background:rgba(255,253,248,.93);color:var(--ink);text-decoration:none;font-size:12px;font-weight:700}.preview--layerdoc{min-height:250px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--muted);gap:8px}.preview--layerdoc strong{font:500 24px Georgia,serif;color:var(--ink)}.layerdoc-mark{font:500 38px Georgia,serif;color:var(--signal)}.published-page>p{padding:12px 16px;margin:0!important;background:#f3f0e9}.screen-sequence{padding:18px 0;border-block:1px solid var(--line);background:#f0eee8}.screen-sequence>p{padding:0 20px}.sequence-track{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(min(82vw,420px),1fr);gap:14px;overflow-x:auto;padding:0 20px 8px;scroll-snap-type:x proximity}.screen{margin:0;border:1px solid var(--line);border-radius:13px;overflow:hidden;background:var(--panel);scroll-snap-align:start}.screen .preview{border-top:0}.screen figcaption{padding:13px 15px 15px}.screen h5{font:500 17px/1.2 Georgia,serif;margin:0;color:var(--ink)}.screen figcaption p{font-size:12px;color:var(--muted);margin:7px 0 0}.comparison{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line);border-block:1px solid var(--line)}.comparison section{background:var(--panel);min-width:0}.comparison .eyebrow{padding:10px 14px;margin:0!important}.comparison .preview{border-bottom:0}.edit-receipt{padding:10px 18px;margin:0;color:var(--muted);font-size:12px;border-bottom:1px solid var(--line)}.diff-strip{display:flex;gap:10px;overflow-x:auto;padding:12px 18px;border-bottom:1px solid var(--line);background:#fff8ef}.diff-region{flex:0 0 min(340px,82vw);border-left:3px solid var(--signal);padding:8px 10px;background:var(--panel)}.diff-region strong{display:block;color:var(--ink);font-size:12px}.diff-region span{display:block;color:var(--muted);font-size:11px;margin-top:3px}.diff-region del,.diff-region ins{display:block;font-size:12px;text-decoration:none;margin-top:5px}.diff-region del{color:#8f3a2f}.diff-region ins{color:#1f6955}.controls{display:grid;grid-template-columns:minmax(0,1fr);gap:0}.feedback,.edit{padding:18px 20px}.edit{border-top:1px solid var(--line);background:#f3f4ef}.edit--disabled p,.edit-note{margin:0;color:var(--muted)}label{display:grid;gap:7px;color:var(--ink);font-weight:700;font-size:13px}textarea{width:100%;min-height:82px;resize:vertical;border:1px solid #bbb9b1;border-radius:10px;padding:11px 12px;background:#fff;color:var(--text);outline:none}textarea:focus{border-color:var(--ink);box-shadow:0 0 0 3px rgba(20,59,51,.12)}.mark-row,.save-row{display:flex;align-items:center;gap:8px}.mark-row{margin-bottom:14px;flex-wrap:wrap}.mark-row button,.save,.apply{border:1px solid var(--ink);border-radius:999px;background:transparent;color:var(--ink);padding:8px 13px;font-weight:750;cursor:pointer}.mark-row button.active,.save,.apply{background:var(--ink);color:white}.mark-row .clear{border-color:transparent;color:var(--muted)}.save-row{margin-top:11px;min-height:36px}.save,.apply{border-radius:9px;padding:9px 18px}.apply{background:var(--signal);border-color:var(--signal)}button:disabled{cursor:wait;opacity:.55}.status{font-size:12px;color:var(--muted)}.cost{margin:10px 0 0;color:var(--muted);font-size:12px}.cost strong{color:var(--signal)}.history{border-top:1px solid var(--line);padding:12px 20px}.history summary{cursor:pointer;color:var(--ink);font-weight:750}.history ol{margin:10px 0 0;padding-left:22px}.history li{padding:5px 0;color:var(--muted);font-size:12px}.history a{color:var(--ink)}code{font:12px ui-monospace,SFMono-Regular,Menlo,monospace;background:#e9e5dc;padding:2px 5px;border-radius:4px}\n .prototype-panel{margin-top:24px;border:1px solid var(--line);border-radius:18px;background:rgba(255,253,248,.92);overflow:hidden;box-shadow:0 6px 24px rgba(31,45,39,.04)}.prototype-panel--empty,.prototype-copy{padding:20px;display:flex;align-items:flex-end;justify-content:space-between;gap:22px}.prototype-panel h3{font:500 24px Georgia,serif;color:var(--ink);margin:0}.prototype-panel p{margin:7px 0 0;color:var(--muted);max-width:880px}.prototype-action{display:flex;align-items:center;gap:10px;flex:0 0 auto}.prototype-action--disabled{font-size:12px}.prototype-panel>.preview--html{height:680px;border-bottom:0}.prototype-holdings{padding:24px;border-top:1px solid var(--line);background:#f3f0e9}.prototype-holdings>header{margin-bottom:16px}.holding-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,440px),1fr));gap:16px}.holding-card{min-width:0;background:var(--panel);border:1px solid var(--line);border-radius:15px;overflow:hidden}.holding-card .preview--html{height:360px}.holding-card .edit{border-top:0}\n @media(max-width:760px){.mast{position:static;align-items:flex-start;flex-direction:column}.summary{justify-content:flex-start}.shell{padding-top:24px}.run-head,.prototype-panel--empty,.prototype-copy{flex-direction:column;align-items:flex-start}.comparison{grid-template-columns:1fr}.preview--html{height:400px}.item-head{min-height:0}.screen{flex-basis:86vw}}\n";
|
|
2
|
-
export declare const REVIEW_PAGE_SCRIPT = "\n const post = async (url, body) => {\n const response = await fetch(url, {method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify(body)});\n const payload = await response.json().catch(() => ({error:'The server returned no detail.'}));\n if (!response.ok) throw new Error(payload.error || 'The request failed.');\n return payload;\n };\n for (const form of document.querySelectorAll('[data-feedback]')) {\n const status = form.querySelector('.status');\n const save = async () => {\n status.textContent = 'Saving\u2026';\n try {\n await post('/api/feedback', {runId:form.dataset.run,itemId:form.dataset.item,note:form.elements.note.value,mark:form.dataset.mark || null});\n status.textContent = 'Saved';\n } catch (error) { status.textContent = error.message; }\n };\n form.addEventListener('submit', (event) => { event.preventDefault(); save(); });\n for (const button of form.querySelectorAll('[data-mark]')) button.addEventListener('click', () => {\n form.dataset.mark = button.dataset.mark;\n for (const peer of form.querySelectorAll('[data-mark]')) {\n const active = Boolean(peer.dataset.mark) && peer.dataset.mark === form.dataset.mark;\n peer.classList.toggle('active', active); peer.setAttribute('aria-pressed', String(active));\n }\n save();\n });\n }\n for (const form of document.querySelectorAll('[data-edit]')) form.addEventListener('submit', async (event) => {\n event.preventDefault();\n const button = form.querySelector('.apply'); const status = form.querySelector('.status');\n button.disabled = true; status.textContent = form.dataset.mode === 'convert-then-edit' ? 'Converting, then editing\u2026' : 'Applying\u2026';\n try {\n await post('/api/edit', {runId:form.dataset.run,itemId:form.dataset.item,prompt:form.elements.prompt.value});\n status.textContent = 'Applied'; window.location.reload();\n } catch (error) { status.textContent = error.message; button.disabled = false; }\n });\n for (const form of document.querySelectorAll('[data-prototype]')) form.addEventListener('submit', async (event) => {\n event.preventDefault();\n const button = form.querySelector('.apply'); const status = form.querySelector('.status');\n button.disabled = true; status.textContent = 'Building prototype\u2026';\n try {\n await post('/api/prototype', {runId:form.dataset.run});\n status.textContent = 'Built'; window.location.reload();\n } catch (error) { status.textContent = error.message; button.disabled = false; }\n });\n for (const form of document.querySelectorAll('[data-fill-gap]')) form.addEventListener('submit', async (event) => {\n event.preventDefault();\n const button = form.querySelector('.apply'); const status = form.querySelector('.status');\n button.disabled = true; status.textContent = 'Generating, converting, then rebuilding\u2026';\n try {\n await post('/api/prototype/fill', {runId:form.dataset.run,holding:form.dataset.holding});\n status.textContent = 'Filled'; window.location.reload();\n } catch (error) { status.textContent = error.message; button.disabled = false; }\n });\n";
|
|
2
|
+
export declare const REVIEW_PAGE_SCRIPT = "\n const token = document.querySelector('meta[name=\"12ui-review-token\"]').content;\n const post = async (url, body) => {\n const response = await fetch(url, {method:'POST',headers:{'content-type':'application/json','x-12ui-token':token},body:JSON.stringify(body)});\n const payload = await response.json().catch(() => ({error:'The server returned no detail.'}));\n if (!response.ok) throw new Error(payload.error || 'The request failed.');\n return payload;\n };\n for (const form of document.querySelectorAll('[data-feedback]')) {\n const status = form.querySelector('.status');\n const save = async () => {\n status.textContent = 'Saving\u2026';\n try {\n await post('/api/feedback', {runId:form.dataset.run,itemId:form.dataset.item,note:form.elements.note.value,mark:form.dataset.mark || null});\n status.textContent = 'Saved';\n } catch (error) { status.textContent = error.message; }\n };\n form.addEventListener('submit', (event) => { event.preventDefault(); save(); });\n for (const button of form.querySelectorAll('[data-mark]')) button.addEventListener('click', () => {\n form.dataset.mark = button.dataset.mark;\n for (const peer of form.querySelectorAll('[data-mark]')) {\n const active = Boolean(peer.dataset.mark) && peer.dataset.mark === form.dataset.mark;\n peer.classList.toggle('active', active); peer.setAttribute('aria-pressed', String(active));\n }\n save();\n });\n }\n for (const form of document.querySelectorAll('[data-edit]')) form.addEventListener('submit', async (event) => {\n event.preventDefault();\n const button = form.querySelector('.apply'); const status = form.querySelector('.status');\n button.disabled = true; status.textContent = form.dataset.mode === 'convert-then-edit' ? 'Converting, then editing\u2026' : 'Applying\u2026';\n try {\n await post('/api/edit', {runId:form.dataset.run,itemId:form.dataset.item,prompt:form.elements.prompt.value});\n status.textContent = 'Applied'; window.location.reload();\n } catch (error) { status.textContent = error.message; button.disabled = false; }\n });\n for (const form of document.querySelectorAll('[data-prototype]')) form.addEventListener('submit', async (event) => {\n event.preventDefault();\n const button = form.querySelector('.apply'); const status = form.querySelector('.status');\n button.disabled = true; status.textContent = 'Building prototype\u2026';\n try {\n await post('/api/prototype', {runId:form.dataset.run});\n status.textContent = 'Built'; window.location.reload();\n } catch (error) { status.textContent = error.message; button.disabled = false; }\n });\n for (const form of document.querySelectorAll('[data-fill-gap]')) form.addEventListener('submit', async (event) => {\n event.preventDefault();\n const button = form.querySelector('.apply'); const status = form.querySelector('.status');\n button.disabled = true; status.textContent = 'Generating, converting, then rebuilding\u2026';\n try {\n await post('/api/prototype/fill', {runId:form.dataset.run,holding:form.dataset.holding});\n status.textContent = 'Filled'; window.location.reload();\n } catch (error) { status.textContent = error.message; button.disabled = false; }\n });\n";
|
|
3
3
|
//# sourceMappingURL=review-page-assets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-page-assets.d.ts","sourceRoot":"","sources":["../src/review-page-assets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"review-page-assets.d.ts","sourceRoot":"","sources":["../src/review-page-assets.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,m7RAM9B,CAAC;AAEF,eAAO,MAAM,kBAAkB,iwGAsD9B,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { REVIEW_TOKEN_HEADER } from './review-server-guard.js';
|
|
1
2
|
export const REVIEW_PAGE_STYLES = `
|
|
2
3
|
:root{color-scheme:light;--paper:#f7f3ed;--panel:#fffdf8;--ink:#143b33;--text:#202523;--muted:#6a706c;--line:#d9d4ca;--signal:#ef6b22;--soft:#e8eee9;--shadow:0 18px 50px rgba(31,45,39,.08)}
|
|
3
4
|
*{box-sizing:border-box}html{background:var(--paper);scroll-behavior:smooth}body{margin:0;color:var(--text);font:15px/1.45 Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:radial-gradient(circle at 8% 16%,rgba(239,107,34,.08),transparent 24rem),var(--paper)}
|
|
@@ -6,8 +7,9 @@ export const REVIEW_PAGE_STYLES = `
|
|
|
6
7
|
@media(max-width:760px){.mast{position:static;align-items:flex-start;flex-direction:column}.summary{justify-content:flex-start}.shell{padding-top:24px}.run-head,.prototype-panel--empty,.prototype-copy{flex-direction:column;align-items:flex-start}.comparison{grid-template-columns:1fr}.preview--html{height:400px}.item-head{min-height:0}.screen{flex-basis:86vw}}
|
|
7
8
|
`;
|
|
8
9
|
export const REVIEW_PAGE_SCRIPT = `
|
|
10
|
+
const token = document.querySelector('meta[name="12ui-review-token"]').content;
|
|
9
11
|
const post = async (url, body) => {
|
|
10
|
-
const response = await fetch(url, {method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify(body)});
|
|
12
|
+
const response = await fetch(url, {method:'POST',headers:{'content-type':'application/json','${REVIEW_TOKEN_HEADER}':token},body:JSON.stringify(body)});
|
|
11
13
|
const payload = await response.json().catch(() => ({error:'The server returned no detail.'}));
|
|
12
14
|
if (!response.ok) throw new Error(payload.error || 'The request failed.');
|
|
13
15
|
return payload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-page-assets.js","sourceRoot":"","sources":["../src/review-page-assets.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;CAMjC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG
|
|
1
|
+
{"version":3,"file":"review-page-assets.js","sourceRoot":"","sources":["../src/review-page-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;CAMjC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;mGAGiE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDrH,CAAC"}
|
package/dist/review-page.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
import type { ReviewModel } from './review-types.js';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* `token` is the serving session's secret (`review-server-guard.ts`): the page's actions send it with every POST.
|
|
4
|
+
* `files` is the origin the run files are served from (`review-files-server.ts`), never this page's own.
|
|
5
|
+
*/
|
|
6
|
+
export declare const renderReviewPage: (model: ReviewModel, session: {
|
|
7
|
+
token: string;
|
|
8
|
+
files: string;
|
|
9
|
+
}) => string;
|
|
3
10
|
//# sourceMappingURL=review-page.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-page.d.ts","sourceRoot":"","sources":["../src/review-page.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAIV,WAAW,EAEZ,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"review-page.d.ts","sourceRoot":"","sources":["../src/review-page.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAIV,WAAW,EAEZ,MAAM,mBAAmB,CAAC;AAiR3B;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,WAAW,EAAE,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAG,MAoBhG,CAAC"}
|
package/dist/review-page.js
CHANGED
|
@@ -25,8 +25,13 @@ const mediaAt = (file) => {
|
|
|
25
25
|
return 'image';
|
|
26
26
|
return 'layerdoc';
|
|
27
27
|
};
|
|
28
|
+
/**
|
|
29
|
+
* A run's own files are served from the review's second origin (`review-files-server.ts`), which holds no session
|
|
30
|
+
* token and takes no POST, so a run's HTML runs normally there (module scripts, its own fetches and fonts, storage)
|
|
31
|
+
* and still cannot read this page or act as it. `files` is that origin, e.g. `http://127.0.0.1:52011`.
|
|
32
|
+
*/
|
|
28
33
|
const mediaFrame = (args) => {
|
|
29
|
-
const url = reviewFileUrl(args.run, args.media.path)
|
|
34
|
+
const url = `${args.files}${reviewFileUrl(args.run, args.media.path)}`;
|
|
30
35
|
if (args.media.kind === 'image') {
|
|
31
36
|
return `<a class="preview preview--image" href="${url}" target="_blank" rel="noreferrer">
|
|
32
37
|
<img src="${url}" alt="${escapeHtml(args.label)}">
|
|
@@ -34,7 +39,7 @@ const mediaFrame = (args) => {
|
|
|
34
39
|
}
|
|
35
40
|
if (args.media.kind === 'html') {
|
|
36
41
|
return `<div class="preview preview--html">
|
|
37
|
-
<iframe src="${url}" title="${escapeHtml(args.label)}" loading="lazy" sandbox="allow-scripts"></iframe>
|
|
42
|
+
<iframe src="${url}" title="${escapeHtml(args.label)}" loading="lazy" sandbox="allow-scripts allow-same-origin"></iframe>
|
|
38
43
|
<a class="open" href="${url}" target="_blank" rel="noreferrer">Open</a>
|
|
39
44
|
</div>`;
|
|
40
45
|
}
|
|
@@ -60,7 +65,7 @@ const changedRegionStrip = (edit) => {
|
|
|
60
65
|
</div>`;
|
|
61
66
|
}).join('')}</div>`;
|
|
62
67
|
};
|
|
63
|
-
const comparison = (run, item) => {
|
|
68
|
+
const comparison = (files, run, item) => {
|
|
64
69
|
if (!item.latestEdit)
|
|
65
70
|
return '';
|
|
66
71
|
const originalPath = path.resolve(run.root, item.latestEdit.original);
|
|
@@ -71,6 +76,7 @@ const comparison = (run, item) => {
|
|
|
71
76
|
<section>
|
|
72
77
|
<p class="eyebrow">Original</p>
|
|
73
78
|
${mediaFrame({
|
|
79
|
+
files,
|
|
74
80
|
run,
|
|
75
81
|
media: { kind: mediaAt(originalPath), path: originalPath },
|
|
76
82
|
label: `${item.title}, original`,
|
|
@@ -79,6 +85,7 @@ const comparison = (run, item) => {
|
|
|
79
85
|
<section>
|
|
80
86
|
<p class="eyebrow">Edited</p>
|
|
81
87
|
${mediaFrame({
|
|
88
|
+
files,
|
|
82
89
|
run,
|
|
83
90
|
media: { kind: 'html', path: editedPath },
|
|
84
91
|
label: `${item.title}, edited`,
|
|
@@ -88,13 +95,13 @@ const comparison = (run, item) => {
|
|
|
88
95
|
${changedRegionStrip(item.latestEdit)}
|
|
89
96
|
<p class="edit-receipt">Applied “${escapeHtml(item.latestEdit.prompt)}” · ${escapeHtml(cost)} base · ${operations.length} ${operations.length === 1 ? 'edit' : 'edits'}${operations.length > 0 ? ` · ${escapeHtml(operations.join(', '))}` : ''}</p>`;
|
|
90
97
|
};
|
|
91
|
-
const branchSequence = (run, item) => {
|
|
98
|
+
const branchSequence = (files, run, item) => {
|
|
92
99
|
if (!item.branchPage || item.branchPage.screens.length === 0)
|
|
93
100
|
return '';
|
|
94
101
|
return `<section class="screen-sequence">
|
|
95
102
|
<p class="eyebrow">Plan sequence</p>
|
|
96
103
|
<div class="sequence-track">${item.branchPage.screens.map((screen) => `<figure class="screen">
|
|
97
|
-
${mediaFrame({ run, media: screen.media, label: `${item.title}, ${screen.label}` })}
|
|
104
|
+
${mediaFrame({ files, run, media: screen.media, label: `${item.title}, ${screen.label}` })}
|
|
98
105
|
<figcaption>
|
|
99
106
|
<p class="eyebrow">${screen.winner ? 'Winner' : escapeHtml(screen.label)}</p>
|
|
100
107
|
<h5>${escapeHtml(screen.direction)}</h5>
|
|
@@ -151,7 +158,7 @@ const editPanel = (model, run, item) => {
|
|
|
151
158
|
</div>
|
|
152
159
|
</form>`;
|
|
153
160
|
};
|
|
154
|
-
const historyPanel = (run, item) => {
|
|
161
|
+
const historyPanel = (files, run, item) => {
|
|
155
162
|
const history = item.editHistory ?? [];
|
|
156
163
|
if (history.length === 0)
|
|
157
164
|
return '';
|
|
@@ -159,11 +166,11 @@ const historyPanel = (run, item) => {
|
|
|
159
166
|
<ol>${history.map((edit) => {
|
|
160
167
|
const result = path.resolve(run.root, edit.resultPath ?? edit.html);
|
|
161
168
|
const cost = edit.cost ? usd(edit.cost.baseUsd) : 'price not recorded';
|
|
162
|
-
return `<li>“${escapeHtml(edit.prompt)}” · ${escapeHtml(cost)} · <a href="${reviewFileUrl(run, result)}" target="_blank" rel="noreferrer">Open result</a></li>`;
|
|
169
|
+
return `<li>“${escapeHtml(edit.prompt)}” · ${escapeHtml(cost)} · <a href="${files}${reviewFileUrl(run, result)}" target="_blank" rel="noreferrer">Open result</a></li>`;
|
|
163
170
|
}).join('')}</ol>
|
|
164
171
|
</details>`;
|
|
165
172
|
};
|
|
166
|
-
const itemCard = (model, run, item) => {
|
|
173
|
+
const itemCard = (files, model, run, item) => {
|
|
167
174
|
const branch = item.group === 'branch-pages';
|
|
168
175
|
const mode = item.editQuote?.mode === 'convert-then-edit' ? 'Converts first' : item.editSource ? 'Edits directly' : '';
|
|
169
176
|
return `<article class="item ${branch || item.group === 'pages' || item.group === 'conversions' ? 'item--wide' : ''}" id="${escapeHtml(item.id)}">
|
|
@@ -178,14 +185,14 @@ const itemCard = (model, run, item) => {
|
|
|
178
185
|
${item.feedback?.mark ? `<span class="mark-chip">${escapeHtml(item.feedback.mark)}</span>` : ''}
|
|
179
186
|
</div>
|
|
180
187
|
</header>
|
|
181
|
-
${branchSequence(run, item)}
|
|
188
|
+
${branchSequence(files, run, item)}
|
|
182
189
|
${branch
|
|
183
|
-
? `<section class="published-page"><p class="eyebrow">Exported page · drag the lower edge to resize</p>${mediaFrame({ run, media: item.media, label: item.title })}</section>${comparison(run, item)}`
|
|
184
|
-
: item.latestEdit ? comparison(run, item) : mediaFrame({ run, media: item.media, label: item.title })}
|
|
190
|
+
? `<section class="published-page"><p class="eyebrow">Exported page · drag the lower edge to resize</p>${mediaFrame({ files, run, media: item.media, label: item.title })}</section>${comparison(files, run, item)}`
|
|
191
|
+
: item.latestEdit ? comparison(files, run, item) : mediaFrame({ files, run, media: item.media, label: item.title })}
|
|
185
192
|
<div class="controls">
|
|
186
193
|
${feedbackPanel(run, item)}
|
|
187
194
|
${editPanel(model, run, item)}
|
|
188
|
-
${historyPanel(run, item)}
|
|
195
|
+
${historyPanel(files, run, item)}
|
|
189
196
|
</div>
|
|
190
197
|
</article>`;
|
|
191
198
|
};
|
|
@@ -206,7 +213,7 @@ const prototypeAction = (model, run, label) => {
|
|
|
206
213
|
<span class="status" role="status"></span>
|
|
207
214
|
</form>`;
|
|
208
215
|
};
|
|
209
|
-
const prototypePanel = (model, run) => {
|
|
216
|
+
const prototypePanel = (files, model, run) => {
|
|
210
217
|
if (!run.branch)
|
|
211
218
|
return '';
|
|
212
219
|
const prototype = run.branch.prototype;
|
|
@@ -220,7 +227,7 @@ const prototypePanel = (model, run) => {
|
|
|
220
227
|
<header><p class="eyebrow">Missing destinations</p><h3>${prototype.holdings.length} ${prototype.holdings.length === 1 ? 'gap' : 'gaps'} surfaced by navigation</h3><p>Each action is explicit. It claims one matching draft, converts it with Standard, adds the real page, then rebuilds the prototype.</p></header>
|
|
221
228
|
<div class="holding-grid">${prototype.holdings.map((holding) => `<article class="holding-card">
|
|
222
229
|
<div class="item-head"><div><p class="eyebrow">Holding page</p><h4>${escapeHtml(holding.title)}</h4></div></div>
|
|
223
|
-
${mediaFrame({ run, media: { kind: 'html', path: holding.path }, label: `${holding.title} holding page` })}
|
|
230
|
+
${mediaFrame({ files, run, media: { kind: 'html', path: holding.path }, label: `${holding.title} holding page` })}
|
|
224
231
|
${model.prototypeAvailable ? `<form class="edit" data-fill-gap data-run="${escapeHtml(run.id)}" data-holding="${escapeHtml(holding.slug)}">
|
|
225
232
|
<p class="edit-note">Generates this destination from the approved winner, converts it, and rebuilds the prototype. Nothing runs until you press the button.</p>
|
|
226
233
|
<div class="save-row"><button type="submit" class="apply">Fill this gap · ${escapeHtml(usd(REVIEW_PROTOTYPE_GAP_BASE_USD))}+</button><span class="status" role="status"></span></div>
|
|
@@ -229,11 +236,11 @@ const prototypePanel = (model, run) => {
|
|
|
229
236
|
</section>`;
|
|
230
237
|
return `<section class="prototype-panel">
|
|
231
238
|
<div class="prototype-copy"><p class="eyebrow">Interactive branch</p><h3>Prototype</h3><p>Open it, resize it, and follow the real navigation. The manifest records deterministic precedence, model labels, gates, and warnings.</p>${prototypeAction(model, run, 'Rebuild prototype')}</div>
|
|
232
|
-
${mediaFrame({ run, media: prototype.index, label: `${run.label} prototype` })}
|
|
239
|
+
${mediaFrame({ files, run, media: prototype.index, label: `${run.label} prototype` })}
|
|
233
240
|
${holdings}
|
|
234
241
|
</section>`;
|
|
235
242
|
};
|
|
236
|
-
const runSection = (model, run) => {
|
|
243
|
+
const runSection = (files, model, run) => {
|
|
237
244
|
const groups = [...new Set(run.items.map((item) => item.group))];
|
|
238
245
|
return `<section class="run" id="${escapeHtml(run.id)}">
|
|
239
246
|
<header class="run-head">
|
|
@@ -247,22 +254,26 @@ const runSection = (model, run) => {
|
|
|
247
254
|
</div>
|
|
248
255
|
<span class="count">${run.items.length} ${run.items.length === 1 ? 'item' : 'items'}</span>
|
|
249
256
|
</header>
|
|
250
|
-
${prototypePanel(model, run)}
|
|
257
|
+
${prototypePanel(files, model, run)}
|
|
251
258
|
${groups.map((group) => `<section class="group group--${group}">
|
|
252
259
|
<h3>${groupLabels[group]}</h3>
|
|
253
|
-
<div class="items">${run.items.filter((item) => item.group === group).map((item) => itemCard(model, run, item)).join('')}</div>
|
|
260
|
+
<div class="items">${run.items.filter((item) => item.group === group).map((item) => itemCard(files, model, run, item)).join('')}</div>
|
|
254
261
|
</section>`).join('')}
|
|
255
262
|
</section>`;
|
|
256
263
|
};
|
|
257
|
-
|
|
264
|
+
/**
|
|
265
|
+
* `token` is the serving session's secret (`review-server-guard.ts`): the page's actions send it with every POST.
|
|
266
|
+
* `files` is the origin the run files are served from (`review-files-server.ts`), never this page's own.
|
|
267
|
+
*/
|
|
268
|
+
export const renderReviewPage = (model, session) => {
|
|
258
269
|
const itemCount = model.runs.reduce((total, run) => total + run.items.length, 0);
|
|
259
270
|
const marked = model.runs.reduce((total, run) => (total + run.items.filter((item) => item.feedback?.mark).length), 0);
|
|
260
271
|
const body = model.runs.length > 0
|
|
261
|
-
? model.runs.map((run) => runSection(model, run)).join('')
|
|
272
|
+
? model.runs.map((run) => runSection(session.files, model, run)).join('')
|
|
262
273
|
: '<section class="empty"><h2>No stored runs found</h2><p>Pass a run directory, or use <code>12ui review --all</code> from the project that owns its <code>.12ui</code> runs.</p></section>';
|
|
263
274
|
return `<!doctype html>
|
|
264
275
|
<html lang="en">
|
|
265
|
-
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>12ui review</title><style>${REVIEW_PAGE_STYLES}</style></head>
|
|
276
|
+
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="12ui-review-token" content="${escapeHtml(session.token)}"><title>12ui review</title><style>${REVIEW_PAGE_STYLES}</style></head>
|
|
266
277
|
<body>
|
|
267
278
|
<header class="mast">
|
|
268
279
|
<div class="brand"><span class="brand-mark">12</span><div><h1>12ui review</h1><p>Review the design, edit what is structured, and leave exact feedback.</p></div></div>
|
package/dist/review-page.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-page.js","sourceRoot":"","sources":["../src/review-page.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"review-page.js","sourceRoot":"","sources":["../src/review-page.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { IncomingMessage } from 'node:http';
|
|
2
|
+
/**
|
|
3
|
+
* WHO MAY CALL THE REVIEW SERVER. `12ui review` listens on loopback, and its POST routes write feedback and spend
|
|
4
|
+
* 12ui credits (edits, prototype labels, gap fills), so any web page the user visits could otherwise POST to it, and a
|
|
5
|
+
* DNS-rebound page could read its own copy of the review page (gate 0.2.80). Every request must name this server's
|
|
6
|
+
* own host, a request that carries an Origin must come from that host, and every POST must carry this session's
|
|
7
|
+
* token and be JSON (which a cross-origin page cannot send without a preflight this server never answers). The token
|
|
8
|
+
* is generated when the server starts and reaches only the page this server serves. The workspace server
|
|
9
|
+
* (`slate-browser-server.ts`) holds the same line.
|
|
10
|
+
*/
|
|
11
|
+
export declare const REVIEW_TOKEN_HEADER = "x-12ui-token";
|
|
12
|
+
/** One session's secret: 24 random bytes, base64url, safe to place in an HTML attribute. */
|
|
13
|
+
export declare const newReviewToken: () => string;
|
|
14
|
+
export declare class ReviewAccessError extends Error {
|
|
15
|
+
readonly status: number;
|
|
16
|
+
readonly code: string;
|
|
17
|
+
constructor(status: number, code: string, message: string);
|
|
18
|
+
}
|
|
19
|
+
/** Refuses a request that is not this server's own page talking to it; returns nothing when it is. */
|
|
20
|
+
export declare const assertReviewAccess: (request: IncomingMessage, args: {
|
|
21
|
+
port: number;
|
|
22
|
+
token: string;
|
|
23
|
+
}) => void;
|
|
24
|
+
/**
|
|
25
|
+
* WHO MAY READ A RUN'S FILES. They are served from a second loopback origin (`review-files-server.ts`) that holds no
|
|
26
|
+
* token and changes nothing, so a run's own HTML runs there as a normal page and still cannot read the review page or
|
|
27
|
+
* act as it. Every request must name that origin's own host (a DNS-rebound name cannot read the user's files), and
|
|
28
|
+
* only reads are taken.
|
|
29
|
+
*/
|
|
30
|
+
export declare const assertReviewFileAccess: (request: IncomingMessage, args: {
|
|
31
|
+
port: number;
|
|
32
|
+
}) => void;
|
|
33
|
+
//# sourceMappingURL=review-server-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-server-guard.d.ts","sourceRoot":"","sources":["../src/review-server-guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD;;;;;;;;GAQG;AAEH,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAElD,4FAA4F;AAC5F,eAAO,MAAM,cAAc,QAAO,MAA+C,CAAC;AAElF,qBAAa,iBAAkB,SAAQ,KAAK;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAArC,MAAM,EAAE,MAAM,EAAW,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAG5E;AASD,sGAAsG;AACtG,eAAO,MAAM,kBAAkB,GAAI,SAAS,eAAe,EAAE,MAAM;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAG,IAiBpG,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,eAAe,EAAE,MAAM;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,IAQzF,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* WHO MAY CALL THE REVIEW SERVER. `12ui review` listens on loopback, and its POST routes write feedback and spend
|
|
4
|
+
* 12ui credits (edits, prototype labels, gap fills), so any web page the user visits could otherwise POST to it, and a
|
|
5
|
+
* DNS-rebound page could read its own copy of the review page (gate 0.2.80). Every request must name this server's
|
|
6
|
+
* own host, a request that carries an Origin must come from that host, and every POST must carry this session's
|
|
7
|
+
* token and be JSON (which a cross-origin page cannot send without a preflight this server never answers). The token
|
|
8
|
+
* is generated when the server starts and reaches only the page this server serves. The workspace server
|
|
9
|
+
* (`slate-browser-server.ts`) holds the same line.
|
|
10
|
+
*/
|
|
11
|
+
export const REVIEW_TOKEN_HEADER = 'x-12ui-token';
|
|
12
|
+
/** One session's secret: 24 random bytes, base64url, safe to place in an HTML attribute. */
|
|
13
|
+
export const newReviewToken = () => randomBytes(24).toString('base64url');
|
|
14
|
+
export class ReviewAccessError extends Error {
|
|
15
|
+
status;
|
|
16
|
+
code;
|
|
17
|
+
constructor(status, code, message) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.status = status;
|
|
20
|
+
this.code = code;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const sameToken = (given, token) => {
|
|
24
|
+
if (given === undefined)
|
|
25
|
+
return false;
|
|
26
|
+
const a = Buffer.from(given);
|
|
27
|
+
const b = Buffer.from(token);
|
|
28
|
+
return a.length === b.length && timingSafeEqual(a, b);
|
|
29
|
+
};
|
|
30
|
+
/** Refuses a request that is not this server's own page talking to it; returns nothing when it is. */
|
|
31
|
+
export const assertReviewAccess = (request, args) => {
|
|
32
|
+
const host = request.headers.host;
|
|
33
|
+
if (host !== `127.0.0.1:${args.port}` && host !== `localhost:${args.port}`) {
|
|
34
|
+
throw new ReviewAccessError(403, 'host_refused', 'This review is only served to the address 12ui review printed.');
|
|
35
|
+
}
|
|
36
|
+
const origin = request.headers.origin;
|
|
37
|
+
if (origin !== undefined && origin !== `http://${host}`) {
|
|
38
|
+
throw new ReviewAccessError(403, 'origin_refused', 'Cross-origin requests are refused.');
|
|
39
|
+
}
|
|
40
|
+
if (request.method !== 'POST')
|
|
41
|
+
return;
|
|
42
|
+
const given = request.headers[REVIEW_TOKEN_HEADER];
|
|
43
|
+
if (!sameToken(typeof given === 'string' ? given : undefined, args.token)) {
|
|
44
|
+
throw new ReviewAccessError(401, 'token_required', 'Reload the review page that 12ui review opened: its actions carry this session\'s token.');
|
|
45
|
+
}
|
|
46
|
+
if (!/^application\/json(\s*;.*)?$/iu.test(request.headers['content-type'] ?? '')) {
|
|
47
|
+
throw new ReviewAccessError(415, 'json_required', 'The request must be JSON.');
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* WHO MAY READ A RUN'S FILES. They are served from a second loopback origin (`review-files-server.ts`) that holds no
|
|
52
|
+
* token and changes nothing, so a run's own HTML runs there as a normal page and still cannot read the review page or
|
|
53
|
+
* act as it. Every request must name that origin's own host (a DNS-rebound name cannot read the user's files), and
|
|
54
|
+
* only reads are taken.
|
|
55
|
+
*/
|
|
56
|
+
export const assertReviewFileAccess = (request, args) => {
|
|
57
|
+
const host = request.headers.host;
|
|
58
|
+
if (host !== `127.0.0.1:${args.port}` && host !== `localhost:${args.port}`) {
|
|
59
|
+
throw new ReviewAccessError(403, 'host_refused', 'These run files are only served to the address the review page links.');
|
|
60
|
+
}
|
|
61
|
+
if (request.method !== 'GET' && request.method !== 'HEAD') {
|
|
62
|
+
throw new ReviewAccessError(405, 'read_only', 'Run files are read-only.');
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=review-server-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-server-guard.js","sourceRoot":"","sources":["../src/review-server-guard.ts"],"names":[],"mappings":"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"}
|
package/dist/review-server.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export type ReviewPrototypeRunner = (args: {
|
|
|
7
7
|
export type ReviewServer = {
|
|
8
8
|
url: string;
|
|
9
9
|
port: number;
|
|
10
|
+
/** The run files' own origin (`review-files-server.ts`), e.g. `http://127.0.0.1:52011`; it holds no token. */
|
|
11
|
+
filesUrl: string;
|
|
10
12
|
/** Set when the first discovery trimmed ("showing N of M ...") or skipped unreadable runs. */
|
|
11
13
|
notice?: string;
|
|
12
14
|
close: () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-server.d.ts","sourceRoot":"","sources":["../src/review-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"review-server.d.ts","sourceRoot":"","sources":["../src/review-server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AA8D1E,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEvB,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,8GAA8G;IAC9G,QAAQ,EAAE,MAAM,CAAC;IACjB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,SAAS;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;CAC/C,KAAG,OAAO,CAAC,YAAY,CA8KvB,CAAC"}
|