@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-slate-ui-styles-designs.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-designs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-designs.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-designs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,QAgHnC,CAAC"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The Designs tab and the large view. Tiles are large and keep the frame's shape (`--ar` per tile); a grid's columns
|
|
3
3
|
* are no narrower than `--tile` times the square root of its ratio (`--shape`), so a 3:2 design is about 160 px wide on
|
|
4
|
-
* a phone (two across),
|
|
4
|
+
* a phone (two across), 300 px in a card (two across in Codex's inline frame) and 400 px in the workspace (three across
|
|
5
|
+
* at 1440 px). A slot being drawn is the loading surface (mcp-slate-ui-styles-loading.ts). Under
|
|
5
6
|
* each picture is one row: the code (and where it came from, or its page) at the left, the four icon actions at the
|
|
6
7
|
* right, so nothing covers the design. The chosen design has the selection's own language: a thick ring in the host's
|
|
7
8
|
* accent and a filled check on the picture.
|
|
8
9
|
*/
|
|
9
10
|
export const SLATE_UI_DESIGNS_STYLES = String.raw `
|
|
10
11
|
.designs { --tile: 130px; display: flex; flex-direction: column; gap: 22px; min-width: 0; }
|
|
11
|
-
@container (min-width: 480px) { .designs { --tile:
|
|
12
|
-
#stage .designs { --tile:
|
|
12
|
+
@container (min-width: 480px) { .designs { --tile: 250px; } }
|
|
13
|
+
#stage .designs { --tile: 330px; }
|
|
13
14
|
@media (max-width: 639px) { #stage .designs { --tile: 130px; } }
|
|
14
15
|
|
|
15
16
|
/* The bar: how many a round draws, and More. */
|
|
@@ -32,13 +33,14 @@ export const SLATE_UI_DESIGNS_STYLES = String.raw `
|
|
|
32
33
|
.feedimg:not([src]) { visibility: hidden; }
|
|
33
34
|
.feedmore { flex: none; font-size: 11px; color: var(--text2); padding-left: 2px; }
|
|
34
35
|
.dnote { min-width: 0; flex: 0 1 auto; font-size: 12px; color: var(--text2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
36
|
+
.dcaption { min-width: 0; flex: 1 1 0; font-size: 12px; color: var(--text2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
37
|
+
.dcaption + .spacer { display: none; }
|
|
35
38
|
.dstat { display: inline-flex; align-items: center; gap: 6px; flex: none; font-size: 12px; color: var(--text2); font-variant-numeric: tabular-nums; }
|
|
36
39
|
.dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; }
|
|
37
40
|
.dot.run { background: var(--ring); animation: pulse 1.2s ease-in-out infinite; }
|
|
38
41
|
.dot.err { background: var(--danger); }
|
|
39
42
|
@keyframes pulse { 50% { opacity: .3; } }
|
|
40
43
|
.earlier { align-self: center; color: var(--text2); }
|
|
41
|
-
.dsec.branch .dgrid { padding-left: 14px; border-left: 2px solid var(--ring); margin-left: 10px; }
|
|
42
44
|
|
|
43
45
|
.dgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, calc(var(--tile) * var(--shape, 1.22))), 1fr)); gap: 14px 12px; align-items: start; min-width: 0; }
|
|
44
46
|
#stage .dgrid { gap: 20px 16px; }
|
|
@@ -57,11 +59,9 @@ export const SLATE_UI_DESIGNS_STYLES = String.raw `
|
|
|
57
59
|
/* Under the picture: its letter and, where there is one, where it came from; the words shorten with an ellipsis (the full words are the tag's title). */
|
|
58
60
|
.dmeta { display: flex; flex-wrap: nowrap; align-items: center; gap: 0 4px; min-width: 0; min-height: 28px; margin-top: 4px; }
|
|
59
61
|
.dtag { display: inline-flex; align-items: baseline; gap: 6px; min-width: 0; max-width: 100%; flex: 1 1 auto; overflow: hidden; white-space: nowrap; }
|
|
60
|
-
.dtag .code { position: static; flex: none; padding: 0 7px; border-radius: 999px; background: var(--fill); color: var(--text); font-size: 12px; font-weight: 600; line-height: 20px; }
|
|
62
|
+
.dtag .code, .bchead .code { position: static; flex: none; padding: 0 7px; border-radius: 999px; background: var(--fill); color: var(--text); font-size: 12px; font-weight: 600; line-height: 20px; }
|
|
61
63
|
.dfrom { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; font-size: 12px; color: var(--text2); }
|
|
62
64
|
.dpage { min-width: 0; font-size: 12px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; }
|
|
63
|
-
.spin { position: absolute; left: 50%; top: 50%; width: 26px; height: 26px; margin: -13px 0 0 -13px; border: 2.5px solid var(--border); border-top-color: var(--text2); border-radius: 50%; animation: spin .9s linear infinite; }
|
|
64
|
-
@keyframes spin { to { transform: rotate(360deg); } }
|
|
65
65
|
.dtile.loading .dtag .code { background: transparent; box-shadow: inset 0 0 0 1px var(--border); color: var(--text2); }
|
|
66
66
|
/* The tile's one action: a labelled pill over the picture's top right, on hover or keyboard focus, always on a touch screen. */
|
|
67
67
|
.dpick { position: absolute; right: 8px; top: 8px; z-index: 2; padding: 5px 12px; border: 0; border-radius: 999px; background: var(--bg); color: var(--text); font-size: 12px; font-weight: 600; box-shadow: var(--elev); opacity: 0; transition: opacity .12s; }
|
|
@@ -111,10 +111,12 @@ export const SLATE_UI_DESIGNS_STYLES = String.raw `
|
|
|
111
111
|
.lvacts { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; }
|
|
112
112
|
.lvform { display: flex; align-items: center; gap: 4px; width: min(720px, 100%); padding: 4px 4px 4px 6px; border: 1px solid var(--border); border-radius: 999px; background: var(--bg); }
|
|
113
113
|
.lvform:focus-within { border-color: var(--ring); }
|
|
114
|
+
.seg.lvscope { display: inline-flex; flex: none; padding: 2px; border-radius: 999px; background: var(--fill); }
|
|
115
|
+
.lvscope button.segbtn { white-space: nowrap; }
|
|
114
116
|
.lvmode { display: inline-grid; place-items: center; flex: none; width: 30px; height: 30px; border-radius: 50%; background: var(--accent-solid); color: var(--inverse-text); }
|
|
115
117
|
input.lvinput { flex: 1 1 auto; min-width: 0; padding: 8px 6px; border: 0; background: transparent; color: var(--text); font: inherit; }
|
|
116
118
|
input.lvinput:focus-visible { outline: none; }
|
|
117
|
-
@media (prefers-reduced-motion: reduce) { .dot.run { animation: none; } button.dface { transition: none; } .dpick { transition: none; }
|
|
119
|
+
@media (prefers-reduced-motion: reduce) { .dot.run { animation: none; } button.dface { transition: none; } .dpick { transition: none; } }
|
|
118
120
|
/* The scribble layer of the large view's edit lies exactly over the picture. */
|
|
119
121
|
.scribble { position: absolute; inset: 0; width: 100%; height: 100%; cursor: crosshair; touch-action: none; }
|
|
120
122
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-slate-ui-styles-designs.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-designs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-designs.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-designs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgHhD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-slate-ui-styles-inspiration.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-inspiration.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,2BAA2B,
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-inspiration.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-inspiration.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,2BAA2B,QAsEvC,CAAC"}
|
|
@@ -18,6 +18,8 @@ export const SLATE_UI_INSPIRATION_STYLES = String.raw `
|
|
|
18
18
|
.insp { container-type: inline-size; }
|
|
19
19
|
.refs { container-type: inline-size; }
|
|
20
20
|
.insp > .status { margin: 0 0 10px; }
|
|
21
|
+
/* One quiet sentence on what the tab is doing for this brief: no icon, no box. */
|
|
22
|
+
.tabcaption { margin: 0 0 8px; font-size: var(--fs-sm); line-height: 1.35; color: var(--text2); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
|
|
21
23
|
.results { min-width: 0; }
|
|
22
24
|
/* The gutter is kept, so the scroll bar coming and going never changes the collage's width. */
|
|
23
25
|
.insp.card .results { max-height: max(360px, 72cqw); overflow-y: auto; scrollbar-gutter: stable; padding: 2px; }
|
|
@@ -40,8 +42,17 @@ export const SLATE_UI_INSPIRATION_STYLES = String.raw `
|
|
|
40
42
|
.zoombtn svg { width: 15px; height: 15px; }
|
|
41
43
|
@media (hover: hover) { .gtile .zoombtn { opacity: 0; transition: opacity .12s; } .gtile:hover .zoombtn, .gtile .zoombtn:focus-visible { opacity: 1; } }
|
|
42
44
|
.skelgrid:empty { display: none; }
|
|
43
|
-
.skelgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%,
|
|
44
|
-
.skelgrid > .skeleton { height:
|
|
45
|
+
.skelgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap: 16px; }
|
|
46
|
+
.skelgrid > .skeleton { height: 200px; border-radius: var(--radius); }
|
|
47
|
+
/* A captioned grid (References): the picture, then its name and its site's domain (a link) in the reserved strip. */
|
|
48
|
+
.captioned .refbtn { bottom: auto; height: calc(100% - 42px); }
|
|
49
|
+
.gcap { position: absolute; left: 2px; right: 2px; bottom: 0; height: 42px; display: flex; flex-direction: column; justify-content: center; gap: 1px; min-width: 0; line-height: 16px; }
|
|
50
|
+
.gname { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: var(--fs-sm); font-weight: 600; color: var(--text); }
|
|
51
|
+
.gdomain { align-self: flex-start; max-width: 100%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: var(--fs-sm); color: var(--text2); text-decoration: none; }
|
|
52
|
+
.gdomain:hover { color: var(--ring); text-decoration: underline; }
|
|
53
|
+
.gdomain:focus-visible { outline: 2px solid var(--ring); outline-offset: 1px; border-radius: 3px; }
|
|
54
|
+
.gtile.pending .refbtn { cursor: default; background: var(--fill); }
|
|
55
|
+
.gtile.pending .refbtn:disabled { opacity: 1; }
|
|
45
56
|
.placeholder { display: grid; place-items: center; min-height: 160px; border-radius: var(--radius); background: var(--fill); color: var(--text2); padding: 16px; text-align: center; font-size: var(--fs-sm); }
|
|
46
57
|
/* The tray: the picks, the countdown while a round waits, and the one action. */
|
|
47
58
|
.tray { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--border2); background: var(--bg); min-width: 0; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-slate-ui-styles-inspiration.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-inspiration.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-inspiration.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-inspiration.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEpD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The loading surface, everywhere a picture is on its way (`.shimmer`): an Inspiration or References tile until its
|
|
3
|
+
* picture lands, the skeleton tiles of a first search, a reference site whose screenshot is still being captured, and a
|
|
4
|
+
* design slot while it is drawn.
|
|
5
|
+
*
|
|
6
|
+
* A field of fine dots in the host's ink whose brightness ripples across the frame: one soft crest with a faint echo,
|
|
7
|
+
* travelling diagonally. The wave is fixed to the frame (`background-attachment: fixed`), so every loading tile on
|
|
8
|
+
* screen is a window onto the same wave and a grid of them reads as one calm surface rather than many blinking boxes.
|
|
9
|
+
*
|
|
10
|
+
* - On a picture (`img.shimmer`, no pixels yet) the dots are the picture's own mask, so its tile's ground shows between
|
|
11
|
+
* them; on anything else they are an overlay (`::before`) over the element's own ground, under its content.
|
|
12
|
+
* - The colours are the host's ink (`--text`) mixed into transparency, so Codex's light and dark themes drive it.
|
|
13
|
+
* - Reduced motion: still dots, no wave.
|
|
14
|
+
* - Chosen over the web's light band (apps/web generatedDesignPromptEdit.css) side by side in light and dark (evidence
|
|
15
|
+
* 12ui/slate-ui-polish/loading): the band must stay faint not to glare in light, and then all but vanishes on dark.
|
|
16
|
+
*/
|
|
17
|
+
export declare const SLATE_UI_LOADING_STYLES: string;
|
|
18
|
+
//# sourceMappingURL=mcp-slate-ui-styles-loading.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-loading.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-loading.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,uBAAuB,QAmBnC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The loading surface, everywhere a picture is on its way (`.shimmer`): an Inspiration or References tile until its
|
|
3
|
+
* picture lands, the skeleton tiles of a first search, a reference site whose screenshot is still being captured, and a
|
|
4
|
+
* design slot while it is drawn.
|
|
5
|
+
*
|
|
6
|
+
* A field of fine dots in the host's ink whose brightness ripples across the frame: one soft crest with a faint echo,
|
|
7
|
+
* travelling diagonally. The wave is fixed to the frame (`background-attachment: fixed`), so every loading tile on
|
|
8
|
+
* screen is a window onto the same wave and a grid of them reads as one calm surface rather than many blinking boxes.
|
|
9
|
+
*
|
|
10
|
+
* - On a picture (`img.shimmer`, no pixels yet) the dots are the picture's own mask, so its tile's ground shows between
|
|
11
|
+
* them; on anything else they are an overlay (`::before`) over the element's own ground, under its content.
|
|
12
|
+
* - The colours are the host's ink (`--text`) mixed into transparency, so Codex's light and dark themes drive it.
|
|
13
|
+
* - Reduced motion: still dots, no wave.
|
|
14
|
+
* - Chosen over the web's light band (apps/web generatedDesignPromptEdit.css) side by side in light and dark (evidence
|
|
15
|
+
* 12ui/slate-ui-polish/loading): the band must stay faint not to glare in light, and then all but vanishes on dark.
|
|
16
|
+
*/
|
|
17
|
+
export const SLATE_UI_LOADING_STYLES = String.raw `
|
|
18
|
+
.shimmer, .shimmer:not(img)::before {
|
|
19
|
+
--dot: color-mix(in srgb, var(--text) 15%, transparent);
|
|
20
|
+
--dot-mid: color-mix(in srgb, var(--text) 28%, transparent);
|
|
21
|
+
--dot-hi: color-mix(in srgb, var(--text) 56%, transparent);
|
|
22
|
+
}
|
|
23
|
+
img.shimmer, .shimmer:not(img)::before {
|
|
24
|
+
background-color: transparent;
|
|
25
|
+
background-image: linear-gradient(118deg, var(--dot) 34%, var(--dot-mid) 39%, var(--dot) 42.5%, var(--dot-mid) 45.5%, var(--dot-hi) 50%, var(--dot-mid) 54%, var(--dot) 59%);
|
|
26
|
+
background-size: 200vw 200vh;
|
|
27
|
+
background-attachment: fixed;
|
|
28
|
+
-webkit-mask: radial-gradient(circle, #000 1.15px, transparent 1.75px) 0 0 / 9px 9px;
|
|
29
|
+
mask: radial-gradient(circle, #000 1.15px, transparent 1.75px) 0 0 / 9px 9px;
|
|
30
|
+
animation: dotwave 2.4s cubic-bezier(.45, .05, .55, .95) infinite;
|
|
31
|
+
}
|
|
32
|
+
.shimmer:not(img)::before { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; }
|
|
33
|
+
.skelgrid > .skeleton { position: relative; overflow: hidden; background: var(--fill); }
|
|
34
|
+
@keyframes dotwave { from { background-position: -135vw -135vh; } to { background-position: 35vw 35vh; } }
|
|
35
|
+
@media (prefers-reduced-motion: reduce) { .shimmer { animation: none; } .shimmer:not(img)::before { animation: none; background-image: none; background-color: var(--dot-mid); } img.shimmer { background-image: none; background-color: var(--dot-mid); } }
|
|
36
|
+
`;
|
|
37
|
+
//# sourceMappingURL=mcp-slate-ui-styles-loading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-loading.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-loading.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;CAmBhD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The hover peek (mcp-slate-ui-script-peek.ts): a larger copy of a tile's picture floating over the grid, fixed to the
|
|
3
|
+
* frame, never taking the pointer. It appears at its full size after the hover delay, with no entry animation (a
|
|
4
|
+
* scale-in was measured frozen at the tile's size in headless Chromium), and a soft shadow in either theme; a selected
|
|
5
|
+
* or chosen tile's copy keeps its ring.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SLATE_UI_PEEK_STYLES: string;
|
|
8
|
+
//# sourceMappingURL=mcp-slate-ui-styles-peek.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-peek.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-peek.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,QAKhC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The hover peek (mcp-slate-ui-script-peek.ts): a larger copy of a tile's picture floating over the grid, fixed to the
|
|
3
|
+
* frame, never taking the pointer. It appears at its full size after the hover delay, with no entry animation (a
|
|
4
|
+
* scale-in was measured frozen at the tile's size in headless Chromium), and a soft shadow in either theme; a selected
|
|
5
|
+
* or chosen tile's copy keeps its ring.
|
|
6
|
+
*/
|
|
7
|
+
export const SLATE_UI_PEEK_STYLES = String.raw `
|
|
8
|
+
.peek { position: fixed; z-index: 30; pointer-events: none; overflow: hidden; border-radius: var(--radius-lg); background: var(--fill);
|
|
9
|
+
box-shadow: 0 0 0 1px var(--border2), 0 2px 6px light-dark(rgb(0 0 0 / .06), rgb(0 0 0 / .3)), 0 18px 44px -8px light-dark(rgb(0 0 0 / .28), rgb(0 0 0 / .62)); }
|
|
10
|
+
.peek.on { box-shadow: 0 0 0 3px var(--ring), 0 2px 6px light-dark(rgb(0 0 0 / .06), rgb(0 0 0 / .3)), 0 18px 44px -8px light-dark(rgb(0 0 0 / .28), rgb(0 0 0 / .62)); }
|
|
11
|
+
.peek img { display: block; width: 100%; height: 100%; object-fit: contain; }
|
|
12
|
+
`;
|
|
13
|
+
//# sourceMappingURL=mcp-slate-ui-styles-peek.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-peek.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-peek.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;CAK7C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-slate-ui-styles.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,QA6H3B,CAAC"}
|
|
@@ -117,8 +117,6 @@ export const SLATE_UI_STYLES = String.raw `
|
|
|
117
117
|
.thumb { display: block; width: 100%; height: 100%; background: var(--fill); object-fit: contain; object-position: center; }
|
|
118
118
|
.tilenote { position: absolute; left: 8px; right: 8px; top: 6px; bottom: 6px; display: flex; align-items: center; justify-content: center; font-size: var(--fs-sm); font-weight: 500; line-height: 1.35; text-align: center; color: var(--text2); }
|
|
119
119
|
.tilenote > span { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4; overflow: hidden; overflow-wrap: anywhere; }
|
|
120
|
-
.shimmer { background: linear-gradient(100deg, var(--fill) 30%, var(--fill-hover) 50%, var(--fill) 70%); background-size: 200% 100%; animation: shimmer 1.4s linear infinite; }
|
|
121
|
-
@keyframes shimmer { from { background-position: 100% 0; } to { background-position: -100% 0; } }
|
|
122
120
|
input[type="text"] {
|
|
123
121
|
width: 100%; padding: 8px 10px; font: inherit; color: var(--text); background: var(--bg);
|
|
124
122
|
border: 1px solid var(--border); border-radius: var(--radius);
|
|
@@ -135,7 +133,6 @@ export const SLATE_UI_STYLES = String.raw `
|
|
|
135
133
|
button:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
|
|
136
134
|
button:disabled { opacity: .45; cursor: default; }
|
|
137
135
|
.note { margin: 10px 0 0; font-size: var(--fs-sm); color: var(--text2); }
|
|
138
|
-
@media (prefers-reduced-motion: reduce) { .shimmer { animation: none; } }
|
|
139
136
|
.status { min-height: 18px; margin: 8px 0 0; font-size: var(--fs-sm); overflow-wrap: anywhere; }
|
|
140
137
|
.status:empty { display: none; }
|
|
141
138
|
.status.ok { color: var(--ok); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-slate-ui-styles.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6HxC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-slate-ui.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAUlF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,gBAAgB,GAAI,YAAY;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,KAAG,MAwCxE,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,aAAa,QAAwC,CAAC"}
|
package/dist/mcp-slate-ui.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { SLATE_UI_COPY as COPY } from './mcp-slate-ui-copy.js';
|
|
2
2
|
import { buildSlateUiScript } from './mcp-slate-ui-script.js';
|
|
3
3
|
import { SLATE_UI_STYLES } from './mcp-slate-ui-styles.js';
|
|
4
|
+
import { SLATE_UI_LOADING_STYLES } from './mcp-slate-ui-styles-loading.js';
|
|
5
|
+
import { SLATE_UI_PEEK_STYLES } from './mcp-slate-ui-styles-peek.js';
|
|
4
6
|
import { SLATE_UI_INSPIRATION_STYLES } from './mcp-slate-ui-styles-inspiration.js';
|
|
5
7
|
import { SLATE_UI_PAUSE_STYLES } from './mcp-slate-ui-styles-pause.js';
|
|
6
8
|
import { SLATE_UI_STAGE_STYLES } from './mcp-slate-ui-styles-stage.js';
|
|
9
|
+
import { SLATE_UI_BOARD_STYLES } from './mcp-slate-ui-styles-board.js';
|
|
7
10
|
import { SLATE_UI_DESIGNS_STYLES } from './mcp-slate-ui-styles-designs.js';
|
|
8
11
|
/**
|
|
9
12
|
* The workspace view for one target, as one self-contained HTML document: no external script, stylesheet or font, so
|
|
@@ -28,7 +31,7 @@ export const buildSlateUiHtml = ({ target }) => `<!doctype html>
|
|
|
28
31
|
<meta charset="utf-8">
|
|
29
32
|
<meta name="viewport" content="width=device-width, initial-scale=1">${target === 'local' ? '' : `\n<meta name="slate-target" content="${target}">`}
|
|
30
33
|
<title>${COPY.title}</title>
|
|
31
|
-
<style>${SLATE_UI_STYLES}${SLATE_UI_STAGE_STYLES}${SLATE_UI_DESIGNS_STYLES}${SLATE_UI_INSPIRATION_STYLES}${SLATE_UI_PAUSE_STYLES}</style>
|
|
34
|
+
<style>${SLATE_UI_STYLES}${SLATE_UI_LOADING_STYLES}${SLATE_UI_STAGE_STYLES}${SLATE_UI_DESIGNS_STYLES}${SLATE_UI_BOARD_STYLES}${SLATE_UI_INSPIRATION_STYLES}${SLATE_UI_PAUSE_STYLES}${SLATE_UI_PEEK_STYLES}</style>
|
|
32
35
|
</head>
|
|
33
36
|
<body>
|
|
34
37
|
<div id="fatal" class="hidden" role="alert"></div>
|
package/dist/mcp-slate-ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-slate-ui.js","sourceRoot":"","sources":["../src/mcp-slate-ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAsB,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAE3E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,MAAM,EAA6B,EAAU,EAAE,CAAC;;;;sEAIb,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wCAAwC,MAAM,IAAI;SACzI,IAAI,CAAC,KAAK;SACV,eAAe,GAAG,qBAAqB,GAAG,uBAAuB,GAAG,2BAA2B,GAAG,qBAAqB;;;;;
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui.js","sourceRoot":"","sources":["../src/mcp-slate-ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAsB,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAE3E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,MAAM,EAA6B,EAAU,EAAE,CAAC;;;;sEAIb,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wCAAwC,MAAM,IAAI;SACzI,IAAI,CAAC,KAAK;SACV,eAAe,GAAG,uBAAuB,GAAG,qBAAqB,GAAG,uBAAuB,GAAG,qBAAqB,GAAG,2BAA2B,GAAG,qBAAqB,GAAG,oBAAoB;;;;;qCAKpK,IAAI,CAAC,KAAK;wDACS,IAAI,CAAC,KAAK;;wGAEsC,IAAI,CAAC,UAAU,kBAAkB,IAAI,CAAC,gBAAgB,oKAAoK,IAAI,CAAC,MAAM;;qDAExR,IAAI,CAAC,KAAK;+HACgE,IAAI,CAAC,cAAc;6HACrB,IAAI,CAAC,aAAa;sHACzB,IAAI,CAAC,UAAU;;;sEAG/D,IAAI,CAAC,aAAa,YAAY,IAAI,CAAC,aAAa;;;;;;;;;;;;;;;UAe5G,kBAAkB,CAAC,MAAM,CAAC;;;CAGnC,CAAC;AAEF,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC"}
|
|
@@ -34,11 +34,11 @@ export const MCP_WORKFLOW_TOOL_DEFINITIONS = [
|
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
name: 'design.workflow.execute',
|
|
37
|
-
description: 'Route a prepared operation. Image, image-edit and convert work runs only through the 12ui CLI\'s own providers (the 12ui API, or the OpenAI API for images
|
|
37
|
+
description: 'Route a prepared operation. Image, image-edit and convert work runs only through the 12ui CLI\'s own providers (the 12ui API on the 12ui sign-in, or the OpenAI API for images when the user opts in with allowPaid), never a host session. Text and code may go to a declared session (a handoff to complete with host tools, then register), a local CLI, the 12ui API, or the OpenAI API under allowPaid. Ambiguous dispatched work is not retried on another provider.',
|
|
38
38
|
inputSchema: object({
|
|
39
39
|
workspace, operationId: string,
|
|
40
40
|
providers: { type: 'array', minItems: 1, uniqueItems: true, items: { enum: [...PROVIDERS] }, description: 'Provider preference order. A session is eligible only for explicitly declared capabilities.' },
|
|
41
|
-
allowPaid: { type: 'array', uniqueItems: true, items: { enum: ['openai', '12ui'] }, description: '
|
|
41
|
+
allowPaid: { type: 'array', uniqueItems: true, items: { enum: ['openai', '12ui'] }, description: 'The user\'s opt-in to spend on their own OpenAI API key ("openai"). Key presence is not that opt-in. 12ui credit use needs no permission; a "12ui" entry changes nothing.' },
|
|
42
42
|
sessionCapabilities: capabilityList,
|
|
43
43
|
trustCodexConfig,
|
|
44
44
|
}, ['workspace', 'operationId']),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-workflow-tools.js","sourceRoot":"","sources":["../src/mcp-workflow-tools.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mcp-workflow-tools.js","sourceRoot":"","sources":["../src/mcp-workflow-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,10 +17,18 @@ export declare const resolvePrototypeBrowserProvisioning: (args?: {
|
|
|
17
17
|
playwrightCli?: string;
|
|
18
18
|
}) => Promise<PrototypeBrowserProvisioning>;
|
|
19
19
|
export declare const isMissingPrototypeBrowserOutput: (output: string) => boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Installs Chromium into the managed browsers path, the same install the command
|
|
22
|
+
* above names. Only the References tab's capture calls it: that capture runs
|
|
23
|
+
* unattended (the workspace runner, or the draw command while the person
|
|
24
|
+
* chooses), so nobody would read the command, and a fresh home has no browser.
|
|
25
|
+
*/
|
|
26
|
+
export declare const installPrototypeBrowser: (provisioning: Pick<PrototypeBrowserProvisioning, "environment">, playwrightCli?: string) => Promise<void>;
|
|
20
27
|
/**
|
|
21
28
|
* The one statement of a missing managed browser, shared by every command that
|
|
22
|
-
* drives Chromium (prototype stages, scene capture).
|
|
23
|
-
* browser on
|
|
29
|
+
* drives Chromium (prototype stages, scene capture). Those commands never
|
|
30
|
+
* download a browser on their own; they name the exact install command for this
|
|
31
|
+
* environment (the References capture installs it, above).
|
|
24
32
|
*/
|
|
25
33
|
export declare const missingPrototypeBrowserMessage: (args: {
|
|
26
34
|
/** What cannot start, e.g. `Prototype runtime` or `Scene capture`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prototype-browsers.d.ts","sourceRoot":"","sources":["../src/prototype-browsers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prototype-browsers.d.ts","sourceRoot":"","sources":["../src/prototype-browsers.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,4BAA4B,GAAG;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAmCF;;;;;GAKG;AACH,eAAO,MAAM,mCAAmC,GAAU,OAAM;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACnB,KAAG,OAAO,CAAC,4BAA4B,CAmB5C,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAAI,QAAQ,MAAM,KAAG,OAGhE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAClC,cAAc,IAAI,CAAC,4BAA4B,EAAE,aAAa,CAAC,EAC/D,gBAAe,MAAiC,KAC/C,OAAO,CAAC,IAAI,CAcd,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,GAAI,MAAM;IACnD,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,IAAI,CAAC,4BAA4B,EAAE,cAAc,GAAG,gBAAgB,CAAC,CAAC;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KAAG,MAMH,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
1
2
|
import { createRequire } from 'node:module';
|
|
2
3
|
import os from 'node:os';
|
|
3
4
|
import path from 'node:path';
|
|
@@ -44,10 +45,34 @@ export const resolvePrototypeBrowserProvisioning = async (args = {}) => {
|
|
|
44
45
|
};
|
|
45
46
|
export const isMissingPrototypeBrowserOutput = (output) => (/Executable doesn't exist at/u.test(output)
|
|
46
47
|
&& /playwright install/u.test(output));
|
|
48
|
+
/**
|
|
49
|
+
* Installs Chromium into the managed browsers path, the same install the command
|
|
50
|
+
* above names. Only the References tab's capture calls it: that capture runs
|
|
51
|
+
* unattended (the workspace runner, or the draw command while the person
|
|
52
|
+
* chooses), so nobody would read the command, and a fresh home has no browser.
|
|
53
|
+
*/
|
|
54
|
+
export const installPrototypeBrowser = async (provisioning, playwrightCli = installedPlaywrightCli()) => {
|
|
55
|
+
await new Promise((resolve, reject) => {
|
|
56
|
+
const child = spawn(process.execPath, [playwrightCli, 'install', 'chromium'], {
|
|
57
|
+
env: provisioning.environment,
|
|
58
|
+
stdio: ['ignore', 'ignore', 'pipe'],
|
|
59
|
+
});
|
|
60
|
+
let stderr = '';
|
|
61
|
+
child.stderr.setEncoding('utf8').on('data', (chunk) => { stderr = (stderr + chunk).slice(-2000); });
|
|
62
|
+
child.on('error', reject);
|
|
63
|
+
child.on('close', (code) => {
|
|
64
|
+
if (code === 0)
|
|
65
|
+
resolve();
|
|
66
|
+
else
|
|
67
|
+
reject(new Error(`Chromium install exited with ${code}: ${stderr.trim()}`));
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
};
|
|
47
71
|
/**
|
|
48
72
|
* The one statement of a missing managed browser, shared by every command that
|
|
49
|
-
* drives Chromium (prototype stages, scene capture).
|
|
50
|
-
* browser on
|
|
73
|
+
* drives Chromium (prototype stages, scene capture). Those commands never
|
|
74
|
+
* download a browser on their own; they name the exact install command for this
|
|
75
|
+
* environment (the References capture installs it, above).
|
|
51
76
|
*/
|
|
52
77
|
export const missingPrototypeBrowserMessage = (args) => (`${args.subject} cannot start because Chromium is not installed in the managed`
|
|
53
78
|
+ ` 12ui browser directory at ${args.provisioning.browsersPath}.\n`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prototype-browsers.js","sourceRoot":"","sources":["../src/prototype-browsers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"prototype-browsers.js","sourceRoot":"","sources":["../src/prototype-browsers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReviewModel } from './review-types.js';
|
|
2
|
+
export type ReviewFilesServer = {
|
|
3
|
+
port: number;
|
|
4
|
+
close: () => Promise<void>;
|
|
5
|
+
};
|
|
6
|
+
/** Serves `/files/<run>/<path>` for the runs `model()` currently lists, read-only, on its own loopback port. */
|
|
7
|
+
export declare const startReviewFilesServer: (model: () => ReviewModel) => Promise<ReviewFilesServer>;
|
|
8
|
+
//# sourceMappingURL=review-files-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-files-server.d.ts","sourceRoot":"","sources":["../src/review-files-server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAkFrD,MAAM,MAAM,iBAAiB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC;AAE7E,gHAAgH;AAChH,eAAO,MAAM,sBAAsB,GAAU,OAAO,MAAM,WAAW,KAAG,OAAO,CAAC,iBAAiB,CA6ChG,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { createReadStream } from 'node:fs';
|
|
2
|
+
import { realpath, stat } from 'node:fs/promises';
|
|
3
|
+
import http from 'node:http';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { assertReviewFileAccess } from './review-server-guard.js';
|
|
6
|
+
/**
|
|
7
|
+
* THE RUN FILES' OWN ORIGIN. `12ui review` serves a run's files (its HTML, scripts, fonts, images) from a second
|
|
8
|
+
* loopback port, not the review page's: a run's HTML opened from the page, or framed in it, is then a normal page at
|
|
9
|
+
* an origin that holds no session token and takes no request that changes anything (`assertReviewFileAccess`). It
|
|
10
|
+
* runs as it would anywhere (module scripts, fetches of its own files, local `@font-face`, storage), and the browser's
|
|
11
|
+
* same-origin policy keeps it from reading the review page, whose server refuses its requests by Origin
|
|
12
|
+
* (`assertReviewAccess`).
|
|
13
|
+
*/
|
|
14
|
+
const CONTENT_TYPES = {
|
|
15
|
+
'.avif': 'image/avif',
|
|
16
|
+
'.css': 'text/css; charset=utf-8',
|
|
17
|
+
'.gif': 'image/gif',
|
|
18
|
+
'.htm': 'text/html; charset=utf-8',
|
|
19
|
+
'.html': 'text/html; charset=utf-8',
|
|
20
|
+
'.ico': 'image/x-icon',
|
|
21
|
+
'.jpeg': 'image/jpeg',
|
|
22
|
+
'.jpg': 'image/jpeg',
|
|
23
|
+
'.js': 'text/javascript; charset=utf-8',
|
|
24
|
+
'.json': 'application/json; charset=utf-8',
|
|
25
|
+
'.map': 'application/json; charset=utf-8',
|
|
26
|
+
'.mjs': 'text/javascript; charset=utf-8',
|
|
27
|
+
'.otf': 'font/otf',
|
|
28
|
+
'.png': 'image/png',
|
|
29
|
+
'.svg': 'image/svg+xml',
|
|
30
|
+
'.ttf': 'font/ttf',
|
|
31
|
+
'.txt': 'text/plain; charset=utf-8',
|
|
32
|
+
'.wasm': 'application/wasm',
|
|
33
|
+
'.webmanifest': 'application/manifest+json',
|
|
34
|
+
'.webp': 'image/webp',
|
|
35
|
+
'.woff': 'font/woff',
|
|
36
|
+
'.woff2': 'font/woff2',
|
|
37
|
+
};
|
|
38
|
+
const serveRunFile = async (args) => {
|
|
39
|
+
const segments = args.pathname.split('/').slice(2).map((segment) => decodeURIComponent(segment));
|
|
40
|
+
const runId = segments.shift();
|
|
41
|
+
const run = args.model.runs.find((candidate) => candidate.id === runId);
|
|
42
|
+
if (!run || segments.length === 0 || segments.some((segment) => (!segment
|
|
43
|
+
|| segment === '.'
|
|
44
|
+
|| segment === '..'
|
|
45
|
+
|| segment.startsWith('.')
|
|
46
|
+
|| segment.includes('/')
|
|
47
|
+
|| segment.includes('\\')))) {
|
|
48
|
+
args.response.writeHead(404).end('not found');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const root = await realpath(run.root).catch(() => null);
|
|
52
|
+
const candidate = path.resolve(run.root, ...segments);
|
|
53
|
+
const file = await realpath(candidate).catch(() => null);
|
|
54
|
+
if (!root || !file || (file !== root && !file.startsWith(`${root}${path.sep}`))) {
|
|
55
|
+
args.response.writeHead(403).end('forbidden');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (path.relative(root, file).split(path.sep).some((segment) => segment.startsWith('.'))) {
|
|
59
|
+
args.response.writeHead(404).end('not found');
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const details = await stat(file).catch(() => null);
|
|
63
|
+
if (!details?.isFile()) {
|
|
64
|
+
args.response.writeHead(404).end('not found');
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
args.response.writeHead(200, {
|
|
68
|
+
'content-type': CONTENT_TYPES[path.extname(file).toLowerCase()] ?? 'application/octet-stream',
|
|
69
|
+
'content-length': details.size,
|
|
70
|
+
'cache-control': 'no-store',
|
|
71
|
+
'x-content-type-options': 'nosniff',
|
|
72
|
+
});
|
|
73
|
+
if (args.method === 'HEAD')
|
|
74
|
+
args.response.end();
|
|
75
|
+
else
|
|
76
|
+
createReadStream(file).pipe(args.response);
|
|
77
|
+
};
|
|
78
|
+
/** Serves `/files/<run>/<path>` for the runs `model()` currently lists, read-only, on its own loopback port. */
|
|
79
|
+
export const startReviewFilesServer = async (model) => {
|
|
80
|
+
let port = 0;
|
|
81
|
+
const server = http.createServer(async (request, response) => {
|
|
82
|
+
const method = request.method ?? 'GET';
|
|
83
|
+
try {
|
|
84
|
+
assertReviewFileAccess(request, { port });
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
const refused = error;
|
|
88
|
+
response.writeHead(refused.status, { 'content-type': 'text/plain; charset=utf-8', allow: 'GET, HEAD' }).end(refused.message);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
let pathname;
|
|
92
|
+
try {
|
|
93
|
+
pathname = new URL(request.url ?? '/', 'http://127.0.0.1').pathname;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
response.writeHead(400).end('bad request');
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (!pathname.startsWith('/files/')) {
|
|
100
|
+
response.writeHead(404).end('not found');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
await serveRunFile({ model: model(), pathname, method, response });
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
if (!response.headersSent)
|
|
108
|
+
response.writeHead(400).end('bad request');
|
|
109
|
+
else
|
|
110
|
+
response.destroy();
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
await new Promise((resolve, reject) => {
|
|
114
|
+
server.once('error', reject);
|
|
115
|
+
server.listen(0, '127.0.0.1', () => resolve());
|
|
116
|
+
});
|
|
117
|
+
const address = server.address();
|
|
118
|
+
if (!address || typeof address === 'string') {
|
|
119
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
120
|
+
throw new Error('Review file server did not bind a local TCP port');
|
|
121
|
+
}
|
|
122
|
+
port = address.port;
|
|
123
|
+
return {
|
|
124
|
+
port,
|
|
125
|
+
close: () => new Promise((resolve, reject) => {
|
|
126
|
+
server.close((error) => { if (error)
|
|
127
|
+
reject(error);
|
|
128
|
+
else
|
|
129
|
+
resolve(); });
|
|
130
|
+
}),
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=review-files-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-files-server.js","sourceRoot":"","sources":["../src/review-files-server.ts"],"names":[],"mappings":"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"}
|