@jxsuite/studio 5.2.0 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data/css-meta.json +28 -27
- package/dist/chunks/{cf-account-picker-h4dab9bq.js → cf-account-picker-3f08rry6.js} +21 -18
- package/dist/chunks/{cf-settings-adg74qsk.js → cf-settings-m79r7p5y.js} +4 -4
- package/dist/chunks/{components-5y78e05d.js → components-xm826zjw.js} +3 -3
- package/dist/chunks/{content-source-sgg1sv6n.js → content-source-jt7rbcbc.js} +22 -22
- package/dist/chunks/{convert-to-repeater-mf1cxgfn.js → convert-to-repeater-vg38bq99.js} +22 -22
- package/dist/chunks/{editor-3qhbg51x.js → editor-ddy019sn.js} +2 -2
- package/dist/chunks/entry-commands-64nb2a9a.js +42 -0
- package/dist/chunks/{extension-sections-c6zwzbre.js → extension-sections-r73an5s6.js} +31 -30
- package/dist/chunks/{file-ops-vrpq1jjk.js → file-ops-3xan8mnj.js} +21 -21
- package/dist/chunks/{files-msaf95y6.js → files-egsb0ry8.js} +30 -29
- package/dist/chunks/{format-host-f64fnesp.js → format-host-mym8qnd0.js} +3 -3
- package/dist/chunks/{fs-events-3y6y0nrm.js → fs-events-z2gg8qjt.js} +4 -4
- package/dist/chunks/{git-panel-bv5e22j0.js → git-panel-a05atk6q.js} +20 -20
- package/dist/chunks/{grid-view-1p6hsyjx.css → grid-view-3g1h2re8.css} +956 -139
- package/dist/chunks/{grid-view-paj67nr5.js → grid-view-qaqer9kr.js} +24 -24
- package/dist/chunks/{icons-yy10wk9r.js → icons-drxq9q10.js} +8 -2
- package/dist/chunks/{iframe-host-dh5np8vk.js → iframe-host-psetcv20.js} +11 -11
- package/dist/chunks/{index-n4j7qxyr.js → index-9yjae3hz.js} +4 -4
- package/dist/chunks/{javascript-4abzjcy9.css → javascript-bc9z461d.css} +688 -54
- package/dist/chunks/{javascript-xvrfrpkb.js → javascript-hr5sg57n.js} +2 -2
- package/dist/chunks/{jsonMode-vvmpmk34.css → jsonMode-qqd9nm1t.css} +1120 -303
- package/dist/chunks/{jsonMode-tyx2kj6p.js → jsonMode-zs88v0wr.js} +4 -4
- package/dist/chunks/{jx-validate-j0wxk72w.js → jx-validate-epp2z3s3.js} +2 -2
- package/dist/chunks/layers-panel-83a16ytx.js +41 -0
- package/dist/chunks/{layers-1vcfdbet.js → layers-s6mc01ry.js} +3 -3
- package/dist/chunks/{listbox-6v2ac08j.js → listbox-b7jxnhq1.js} +19 -3
- package/dist/chunks/{media-picker-p49nhqhs.js → media-picker-nhn6rv4w.js} +11 -11
- package/dist/chunks/{menu-qht48vnc.js → menu-8j4qxjrp.js} +4 -4
- package/dist/chunks/{monaco-binding-sw6en4dw.js → monaco-binding-e8d9wzyk.js} +3 -3
- package/dist/chunks/{monaco-buffer-pykwbm92.js → monaco-buffer-jaq1t9zj.js} +2 -2
- package/dist/chunks/{monaco-setup-8vbyqnhr.css → monaco-setup-ey9cjcm3.css} +954 -137
- package/dist/chunks/{monaco-setup-8r62fj6y.js → monaco-setup-gsjdysze.js} +7 -7
- package/dist/chunks/{platform-ts9cg1a4.js → platform-fnchmhy7.js} +5 -3
- package/dist/chunks/publish-panel-ak6hxfma.js +27 -0
- package/dist/chunks/quick-search-c63mkt3b.js +47 -0
- package/dist/chunks/{references-h69xp9zz.js → references-f7bdv3z5.js} +3 -3
- package/dist/chunks/right-panel-t5n8wttg.js +45 -0
- package/dist/chunks/{split-g7nm1rgb.js → split-4cz4b6ef.js} +14 -3
- package/dist/chunks/{studio-sar8g54p.js → studio-01269reb.js} +8 -8
- package/dist/chunks/{studio-rnyf3f8e.js → studio-0a4gncx0.js} +3 -3
- package/dist/chunks/{studio-e1f24eff.js → studio-0d4p4wxj.js} +6778 -2993
- package/dist/chunks/{studio-4wbb9ct0.js → studio-1tejxvba.js} +3006 -1855
- package/dist/chunks/{studio-p6pmwkvh.js → studio-3nprwbd9.js} +147 -28
- package/dist/chunks/{studio-4c041r8y.js → studio-40z39dme.js} +3 -3
- package/dist/chunks/{studio-68fydsrj.js → studio-482eeazk.js} +20 -20
- package/dist/chunks/{studio-y4f9fdge.js → studio-4998spet.js} +10 -9
- package/dist/chunks/{studio-nq5yf5mp.js → studio-557bmn0x.js} +2 -2
- package/dist/chunks/{studio-hdc2jt3z.js → studio-5w26wza5.js} +3 -3
- package/dist/chunks/{studio-6nzaktvy.js → studio-6pwn9j8c.js} +6 -3
- package/dist/chunks/{studio-wnsyffg1.js → studio-6vg0x5fz.js} +3 -2
- package/dist/chunks/{studio-vn5hske5.js → studio-7d3c1m59.js} +12 -5
- package/dist/chunks/{studio-28vs5k2y.js → studio-9vsvz7w7.js} +7 -7
- package/dist/chunks/{studio-t3adrr56.js → studio-9wm0xzpf.js} +19 -19
- package/dist/chunks/{studio-38emantv.js → studio-a5h5j33a.js} +19 -5
- package/dist/chunks/{studio-ympe0n7a.js → studio-ag3z6shb.js} +10 -4
- package/dist/chunks/studio-aj9drheq.js +177 -0
- package/dist/chunks/{studio-vt0tj32j.js → studio-apv9x70c.js} +189 -130
- package/dist/chunks/{studio-c04nzbby.js → studio-b9q3znz8.js} +2 -2
- package/dist/chunks/{studio-2mdbbc76.js → studio-bh47w0cy.js} +9 -10
- package/dist/chunks/{studio-ez11dmdh.js → studio-dgdm6vvt.js} +264 -52
- package/dist/chunks/{studio-5nz00bhh.js → studio-dwdcr2e8.js} +4 -4
- package/dist/chunks/{studio-nqgawfks.js → studio-fbcyz234.js} +146 -139
- package/dist/chunks/{studio-kcgff4r0.js → studio-fgmfksz8.js} +2 -2
- package/dist/chunks/{studio-x72j58vw.js → studio-fqpkpq1t.js} +7 -4
- package/dist/chunks/{studio-15f3kxqe.js → studio-fy320dfc.js} +62 -68
- package/dist/chunks/{studio-zjjde71a.js → studio-gjj4bbfx.js} +2 -2
- package/dist/chunks/{studio-66arbpc2.js → studio-jfhxy8h3.js} +16 -15
- package/dist/chunks/{studio-d0300636.js → studio-ks2zzth2.js} +17 -2
- package/dist/chunks/{studio-c07s5ckd.js → studio-kwewmhhq.js} +4 -4
- package/dist/chunks/{studio-01jeck2y.js → studio-m58xn8at.js} +26 -25
- package/dist/chunks/{studio-mpzwze9x.js → studio-mfkh1q8d.js} +17 -17
- package/dist/chunks/{studio-etvx9s2g.js → studio-mrh0a92f.js} +17 -17
- package/dist/chunks/{studio-qa7fzxan.js → studio-mt79tn56.js} +3 -3
- package/dist/chunks/{studio-hhskq2mr.js → studio-ne593z1j.js} +39 -32
- package/dist/chunks/{studio-h4nvnjvz.js → studio-ptfcxkz5.js} +418 -232
- package/dist/chunks/{studio-4xmjcrg3.js → studio-qxye31h7.js} +7 -7
- package/dist/chunks/{studio-a1pswps3.js → studio-rav5bpmp.js} +81 -59
- package/dist/chunks/{studio-ncn9e189.js → studio-rwmmbrth.js} +6 -6
- package/dist/chunks/{studio-en82c639.js → studio-sceg8ws0.js} +8 -8
- package/dist/chunks/{studio-wjpgxywa.js → studio-sjas5b3a.js} +19 -13
- package/dist/chunks/{studio-4r14yzyy.js → studio-vd67b66d.js} +3 -3
- package/dist/chunks/{studio-14d9tq4d.js → studio-w475cbf9.js} +10 -10
- package/dist/chunks/{studio-ctm7bhx5.js → studio-w7gpcvfj.js} +9 -9
- package/dist/chunks/{studio-9j6sfeba.js → studio-xrbfdxgk.js} +7 -7
- package/dist/chunks/{studio-x10fp4tp.js → studio-y49b6mjv.js} +35 -35
- package/dist/chunks/{studio-5t7ena5z.js → studio-ygvr9e4q.js} +10 -10
- package/dist/chunks/{studio-z2smx5ce.js → studio-yxmmjy2a.js} +9 -6
- package/dist/chunks/{tsMode-jy4m86rv.js → tsMode-ay4c78ne.js} +4 -4
- package/dist/chunks/{tsMode-hnxxb73h.css → tsMode-c72wyz27.css} +954 -137
- package/dist/chunks/{workspace-bnw54cha.js → workspace-b9k2frks.js} +5 -5
- package/dist/chunks/{ws-client-ny4zc51r.js → ws-client-erze4czt.js} +356 -20
- package/dist/codicon.ttf +0 -0
- package/dist/iframe-entry.js +20 -18
- package/dist/studio.css +956 -139
- package/dist/studio.js +1511 -851
- package/dist/workers/editor.worker.js +196 -107
- package/dist/workers/json.worker.js +196 -107
- package/dist/workers/ts.worker.js +196 -107
- package/package.json +18 -17
- package/src/about/about-modal.ts +4 -3
- package/src/browse/library-commands.ts +15 -13
- package/src/browse/library-pane.ts +2 -2
- package/src/canvas/canvas-render.ts +97 -83
- package/src/canvas/canvas-surface.ts +2 -2
- package/src/canvas/canvas-utils.ts +42 -32
- package/src/canvas/diff-toolbar.ts +21 -2
- package/src/canvas/diff-view.ts +30 -6
- package/src/canvas/iframe-entry.ts +2 -2
- package/src/canvas/iframe-host.ts +5 -5
- package/src/canvas/iframe-interaction.ts +7 -6
- package/src/canvas/iframe-overlay.ts +1 -1
- package/src/canvas/iframe-protocol.ts +6 -5
- package/src/canvas/iframe-render.ts +3 -3
- package/src/canvas/popover-state.ts +1 -1
- package/src/canvas/stage-scrollbar.ts +112 -0
- package/src/canvas/surface-registry.ts +9 -2
- package/src/collab/collab-commands.ts +8 -6
- package/src/collab/collab-session.ts +4 -4
- package/src/collab/collab-state.ts +4 -4
- package/src/collab/presence-chips.ts +3 -3
- package/src/commands/app-commands.ts +7 -7
- package/src/commands/budget.ts +17 -16
- package/src/commands/command-args.ts +10 -9
- package/src/commands/context.ts +20 -10
- package/src/commands/defaults.ts +30 -29
- package/src/commands/levels.ts +8 -6
- package/src/commands/live-context.ts +12 -10
- package/src/commands/reference.ts +5 -5
- package/src/commands/registry.ts +2 -2
- package/src/content/draft-state.ts +9 -8
- package/src/content/entry-commands.ts +16 -14
- package/src/content/entry-editor.ts +2 -2
- package/src/content/entry-fields.ts +1 -1
- package/src/editor/context-menu.ts +4 -4
- package/src/editor/convert-to-component.ts +6 -5
- package/src/editor/inline-edit.ts +3 -3
- package/src/editor/shortcuts.ts +88 -20
- package/src/editor/slash-menu.ts +11 -10
- package/src/files/elements.ts +4 -5
- package/src/files/file-ops.ts +1 -1
- package/src/files/files.ts +21 -17
- package/src/files/serialize-document.ts +1 -1
- package/src/format/convert-file.ts +5 -5
- package/src/github/github-auth-status.ts +107 -0
- package/src/github/github-auth.ts +18 -82
- package/src/github/github-publish.ts +7 -6
- package/src/grid/cell-editors.ts +8 -7
- package/src/grid/grid-layout.ts +1 -1
- package/src/grid/grid-open.ts +6 -5
- package/src/grid/grid-panel.ts +13 -12
- package/src/grid/redirects-grid.ts +14 -11
- package/src/grid/redirects.ts +10 -5
- package/src/grid/sources/content-source.ts +10 -9
- package/src/hosting/document.ts +28 -1
- package/src/hosting/stage.ts +15 -4
- package/src/i18n/i18n-commands.ts +9 -7
- package/src/new-project/location-fields.ts +16 -3
- package/src/new-project/new-project-modal.ts +23 -7
- package/src/page-params.ts +6 -6
- package/src/panels/activity-panel.ts +11 -10
- package/src/panels/ai-chat/chat-view.ts +27 -14
- package/src/panels/ai-chat/composer.ts +10 -3
- package/src/panels/ai-panel.ts +87 -29
- package/src/panels/block-action-bar.ts +59 -33
- package/src/panels/bottom-dock.ts +22 -22
- package/src/panels/chat-panel.ts +40 -5
- package/src/panels/data-explorer.ts +9 -9
- package/src/panels/data-grid.ts +1 -1
- package/src/panels/editors.ts +8 -8
- package/src/panels/elements-panel.ts +7 -8
- package/src/panels/empty-state.ts +1 -1
- package/src/panels/events-panel.ts +13 -12
- package/src/panels/formula-workspace.ts +8 -5
- package/src/panels/frontmatter-fields.ts +4 -1
- package/src/panels/frontmatter-panel.ts +18 -18
- package/src/panels/git-panel.ts +19 -13
- package/src/panels/head-panel.ts +9 -10
- package/src/panels/i18n-panel.ts +6 -4
- package/src/panels/imports-panel.ts +1 -1
- package/src/panels/jump-bar.ts +20 -18
- package/src/panels/layers-panel.ts +19 -17
- package/src/panels/left-panel.ts +3 -3
- package/src/panels/navigator-panels.ts +8 -8
- package/src/panels/overlays.ts +1 -1
- package/src/panels/pane-context.ts +56 -28
- package/src/panels/pane-grid.ts +9 -8
- package/src/panels/panel-registry.ts +47 -19
- package/src/panels/problems-panel.ts +11 -12
- package/src/panels/properties-panel.ts +21 -20
- package/src/panels/provenance.ts +3 -3
- package/src/panels/quick-search.ts +15 -11
- package/src/panels/right-panel.ts +4 -3
- package/src/panels/seo-modal.ts +5 -4
- package/src/panels/settings-menu.ts +9 -9
- package/src/panels/settings-pane.ts +3 -3
- package/src/panels/signals-panel.ts +16 -9
- package/src/panels/statement-editor.ts +12 -9
- package/src/panels/style-panel.ts +45 -41
- package/src/panels/stylebook-panel.ts +0 -1
- package/src/panels/tab-strip.ts +26 -23
- package/src/platform-errors.ts +2 -2
- package/src/platform.ts +44 -4
- package/src/platforms/cloud.ts +11 -1
- package/src/platforms/default-platform.ts +141 -4
- package/src/platforms/devserver.ts +23 -3
- package/src/publish/deploy-checklist.ts +11 -10
- package/src/publish/publish-commands.ts +9 -8
- package/src/services/a11y-report.ts +1 -1
- package/src/services/ai-ask.ts +39 -16
- package/src/services/ai-command-tools.ts +28 -14
- package/src/services/ai-import-tools.ts +43 -29
- package/src/services/ai-project-tools.ts +20 -38
- package/src/services/ai-settings.ts +55 -2
- package/src/services/ai-tools.ts +69 -58
- package/src/services/ai-write-report.ts +4 -4
- package/src/services/ai-writes.ts +74 -55
- package/src/services/automation.ts +12 -12
- package/src/services/clock.ts +2 -1
- package/src/services/connection.ts +2 -2
- package/src/services/context-manager.ts +69 -6
- package/src/services/directory-picker.ts +93 -27
- package/src/services/document-assistant.ts +86 -17
- package/src/services/gated-registry.ts +4 -3
- package/src/services/idle.ts +5 -4
- package/src/services/live-surfaces.ts +2 -1
- package/src/services/module-preloads.ts +67 -0
- package/src/services/notify.ts +9 -7
- package/src/services/popover-report.ts +3 -3
- package/src/services/preview-eval.ts +1 -1
- package/src/services/project-adoption.ts +34 -1
- package/src/services/project-path.ts +53 -0
- package/src/services/settings/kernel.ts +13 -2
- package/src/services/tool-executor.ts +135 -30
- package/src/services/tool-outcomes.ts +143 -0
- package/src/settings/contexts-section.ts +8 -8
- package/src/settings/contributed-section.ts +6 -6
- package/src/settings/css-vars-editor.ts +6 -5
- package/src/settings/extension-commands.ts +19 -18
- package/src/settings/extension-sections.ts +7 -7
- package/src/settings/extensions-section.ts +3 -3
- package/src/settings/general-settings.ts +21 -18
- package/src/settings/preferences-accounts.ts +3 -3
- package/src/settings/preferences-dialog.ts +9 -8
- package/src/settings/preferences-sections.ts +1 -1
- package/src/settings/project-sections.ts +2 -2
- package/src/settings/section-registry.ts +7 -6
- package/src/settings/settings-document.ts +41 -43
- package/src/shell/tree.ts +29 -0
- package/src/shell.ts +63 -55
- package/src/site-context.ts +1 -1
- package/src/store.ts +2 -2
- package/src/studio.ts +52 -28
- package/src/style/live-preview.ts +8 -8
- package/src/style/project-styles.ts +8 -9
- package/src/style/token-ref.ts +2 -2
- package/src/surfaces/about.json +6 -2
- package/src/surfaces/add-repo.json +2 -2
- package/src/surfaces/add-repo.ts +2 -2
- package/src/surfaces/ai-chat.json +14 -6
- package/src/surfaces/ai-chat.ts +4 -2
- package/src/surfaces/ai-credentials-form.json +53 -49
- package/src/surfaces/ai-credentials-form.ts +18 -4
- package/src/surfaces/ai-managed-connect.json +4 -4
- package/src/surfaces/block-action-bar.json +4 -4
- package/src/surfaces/block-action-bar.ts +3 -3
- package/src/surfaces/boot-failure.json +228 -0
- package/src/surfaces/boot-failure.ts +156 -0
- package/src/surfaces/bottom-dock.json +1 -1
- package/src/surfaces/canvas-stage.json +9 -40
- package/src/surfaces/canvas-stage.ts +9 -9
- package/src/surfaces/cf-account-picker.json +11 -8
- package/src/surfaces/commandbar.ts +11 -10
- package/src/surfaces/convert-repeater.ts +3 -2
- package/src/surfaces/dialog.json +7 -1
- package/src/surfaces/dialog.ts +2 -2
- package/src/surfaces/doc-header.json +6 -13
- package/src/surfaces/doc-header.ts +4 -5
- package/src/surfaces/entry-editor.json +1 -1
- package/src/surfaces/entry-editor.ts +2 -1
- package/src/surfaces/expression-editor.json +5 -5
- package/src/surfaces/files-panel.json +4 -3
- package/src/surfaces/files-panel.ts +1 -1
- package/src/surfaces/formula-palette.json +10 -9
- package/src/surfaces/formula-palette.ts +11 -7
- package/src/surfaces/git-panel.json +167 -109
- package/src/surfaces/git-panel.ts +2 -2
- package/src/surfaces/github-auth.json +2 -1
- package/src/surfaces/github-publish.ts +3 -3
- package/src/surfaces/grid-open.json +1 -1
- package/src/surfaces/grid-panel.json +2 -2
- package/src/surfaces/grid-views.json +1 -1
- package/src/surfaces/inspector-dock.json +2 -2
- package/src/surfaces/jump-bar.json +1 -1
- package/src/surfaces/jump-bar.ts +1 -1
- package/src/surfaces/library-pane.ts +2 -1
- package/src/surfaces/logic-panel.json +7 -7
- package/src/surfaces/logic-panel.ts +6 -4
- package/src/surfaces/logic-workspace.json +2 -2
- package/src/surfaces/logic-workspace.ts +2 -2
- package/src/surfaces/media-browser.ts +3 -3
- package/src/surfaces/media-pane.ts +2 -1
- package/src/surfaces/menu.ts +5 -5
- package/src/surfaces/new-project.json +1 -1
- package/src/surfaces/palette.json +8 -7
- package/src/surfaces/pane-context.json +86 -57
- package/src/surfaces/pane-context.ts +2 -1
- package/src/surfaces/pane-grid.json +3 -3
- package/src/surfaces/panel-activity.json +2 -1
- package/src/surfaces/panel-deploy-checklist.json +1 -1
- package/src/surfaces/panel-elements.ts +2 -1
- package/src/surfaces/panel-i18n.ts +2 -1
- package/src/surfaces/panel-outline.json +1 -1
- package/src/surfaces/panel-outline.ts +4 -3
- package/src/surfaces/panel-page.json +2 -2
- package/src/surfaces/panel-page.ts +4 -1
- package/src/surfaces/panel-problems.json +4 -3
- package/src/surfaces/panel-problems.ts +2 -2
- package/src/surfaces/panel-signals.json +23 -8
- package/src/surfaces/panel-signals.ts +5 -1
- package/src/surfaces/panel-stylebook-layers.json +1 -1
- package/src/surfaces/panel-stylebook-layers.ts +2 -2
- package/src/surfaces/preferences.json +21 -8
- package/src/surfaces/preferences.ts +9 -1
- package/src/surfaces/properties-panel.json +4 -4
- package/src/surfaces/properties-panel.ts +2 -2
- package/src/surfaces/publish.json +1 -1
- package/src/surfaces/publish.ts +2 -1
- package/src/surfaces/push-plan.json +4 -3
- package/src/surfaces/rail.json +2 -2
- package/src/surfaces/rail.ts +10 -4
- package/src/surfaces/reference-field.json +1 -1
- package/src/surfaces/schema-form.json +2 -2
- package/src/surfaces/schema-form.ts +1 -1
- package/src/surfaces/seo.json +1 -1
- package/src/surfaces/seo.ts +2 -2
- package/src/surfaces/settings-contributed.ts +2 -1
- package/src/surfaces/settings-css-vars.json +4 -4
- package/src/surfaces/settings-deploy.json +4 -4
- package/src/surfaces/settings-deploy.ts +2 -1
- package/src/surfaces/settings-extensions.json +6 -6
- package/src/surfaces/settings-extensions.ts +6 -2
- package/src/surfaces/settings-locales.json +4 -4
- package/src/surfaces/settings-overview.ts +2 -1
- package/src/surfaces/settings-pane.ts +3 -2
- package/src/surfaces/settings-rawjson.ts +1 -1
- package/src/surfaces/slash-menu.ts +4 -4
- package/src/surfaces/statements.json +3 -3
- package/src/surfaces/statusbar.ts +23 -23
- package/src/surfaces/style-panel.json +9 -5
- package/src/surfaces/style-panel.ts +3 -3
- package/src/surfaces/tab-strip.json +2 -2
- package/src/surfaces/target-line.json +1 -1
- package/src/surfaces/target-line.ts +12 -10
- package/src/surfaces/welcome.json +7 -2
- package/src/tabs/doc-op-apply.ts +5 -5
- package/src/tabs/patch-ops.ts +3 -3
- package/src/tabs/project-config.ts +10 -10
- package/src/tabs/selection.ts +1 -1
- package/src/tabs/tab.ts +13 -14
- package/src/tabs/transact.ts +18 -24
- package/src/types.ts +27 -3
- package/src/ui/ai-credentials-form.ts +74 -16
- package/src/ui/ai-managed-connect.ts +68 -19
- package/src/ui/color-selector.ts +1 -1
- package/src/ui/expression-editor.ts +3 -3
- package/src/ui/form-controls.ts +6 -5
- package/src/ui/formula-catalog.ts +4 -4
- package/src/ui/formula-chips.ts +2 -2
- package/src/ui/layers.ts +20 -18
- package/src/ui/panel-resize.ts +8 -28
- package/src/ui/popover-surface.ts +2 -2
- package/src/ui/progress-modal.ts +3 -3
- package/src/ui/regions.ts +14 -9
- package/src/ui/schema-form.ts +10 -9
- package/src/ui/timing.ts +9 -7
- package/src/ui/value-source.ts +4 -4
- package/src/ui/virtual-window.ts +58 -5
- package/src/utils/base64.ts +20 -1
- package/src/utils/canvas-media.ts +1 -1
- package/src/utils/studio-utils.ts +0 -31
- package/src/view.ts +4 -3
- package/src/workspace/pane-derive.ts +14 -13
- package/src/workspace/session.ts +7 -6
- package/src/workspace/workspace.ts +49 -39
- package/styles/canvas.css +1 -27
- package/styles/inspector.css +4 -3
- package/styles/overlays.css +1 -1
- package/styles/tokens.css +17 -1
- package/styles/tokens.json +6 -1
- package/dist/chunks/entry-commands-w9qsxa6q.js +0 -42
- package/dist/chunks/layers-panel-fksbdg4q.js +0 -40
- package/dist/chunks/publish-panel-vz23wwmg.js +0 -27
- package/dist/chunks/quick-search-e9rp74m8.js +0 -46
- package/dist/chunks/right-panel-j97t2yvy.js +0 -45
- package/dist/chunks/studio-727xh0e3.js +0 -76
- package/src/files/json-layout.ts +0 -474
- package/src/services/ai-turn-signal.ts +0 -70
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { computed, reactive, toRaw } from "../reactivity";
|
|
2
2
|
import { commitTabBuffers } from "../services/monaco-buffer";
|
|
3
|
+
import { resetAiWrites } from "../services/ai-writes";
|
|
3
4
|
import { ensureCollab, rekeyCollab } from "../collab/collab-session";
|
|
4
5
|
import { createTab, disposeTab } from "../tabs/tab";
|
|
5
6
|
import { projectState } from "../state";
|
|
@@ -12,7 +13,7 @@ import {
|
|
|
12
13
|
} from "../commands/command-args";
|
|
13
14
|
import { EDITOR_KIND_LABELS } from "../commands/context";
|
|
14
15
|
import type { Tab, TabOrigin } from "../tabs/tab";
|
|
15
|
-
import type { JsonLayout } from "
|
|
16
|
+
import type { JsonLayout } from "@jxsuite/schema/json-layout";
|
|
16
17
|
|
|
17
18
|
import type { ComponentEntry } from "../files/components";
|
|
18
19
|
import type { AnyCommand, CommandRegistry } from "../commands/registry";
|
|
@@ -35,11 +36,11 @@ export interface ClosedTabRecord {
|
|
|
35
36
|
const CLOSED_TAB_LIMIT = 20;
|
|
36
37
|
|
|
37
38
|
/**
|
|
38
|
-
* One editor pane — the unit of split, focus and zoom (§
|
|
39
|
+
* One editor pane — the unit of split, focus and zoom (§18.1).
|
|
39
40
|
*
|
|
40
41
|
* A tab BELONGS to a pane, and the pane is what splits; the tab strip is per-pane for the same
|
|
41
|
-
* reason.
|
|
42
|
-
*
|
|
42
|
+
* reason. The model is deliberately minimal, an ordered list and an active id; derived panes and
|
|
43
|
+
* their follow behaviour (§18.4) sit beside it in `derived` rather than in either.
|
|
43
44
|
*/
|
|
44
45
|
export interface Pane {
|
|
45
46
|
id: string;
|
|
@@ -357,10 +358,10 @@ export function focusOtherPane() {
|
|
|
357
358
|
* `session.ui.canvasMode`), one picked the replacement kind, and two narrowed what the controls
|
|
358
359
|
* offered so no dropdown could contain an entry the app would refuse.
|
|
359
360
|
*
|
|
360
|
-
* The cap existed because a second LIVE canvas host was unaffordable, and it is gone because
|
|
361
|
-
*
|
|
362
|
-
* flipped a splitting Design tab to `source` before focus moved, so `⌘\` on a page
|
|
363
|
-
* designing silently became "open this as Code somewhere else".
|
|
361
|
+
* The cap existed because a second LIVE canvas host was unaffordable, and it is gone because render
|
|
362
|
+
* fan-out (§18.2) made it affordable — see {@link MAX_PANES}. Its LAST act was a bug:
|
|
363
|
+
* `capToPaneKind` flipped a splitting Design tab to `source` before focus moved, so `⌘\` on a page
|
|
364
|
+
* you were designing silently became "open this as Code somewhere else".
|
|
364
365
|
*
|
|
365
366
|
* What replaces them is `tabs/tab.ts`'s `editorKindsOf` — the kinds a DOCUMENT declares — which is
|
|
366
367
|
* the only narrowing left and the only one that was ever about the document rather than about what
|
|
@@ -371,7 +372,7 @@ export function focusOtherPane() {
|
|
|
371
372
|
* Split the grid and move a tab into the new pane, which becomes focused.
|
|
372
373
|
*
|
|
373
374
|
* Moves rather than duplicates: one tab is one document with one undo history and one collab
|
|
374
|
-
* session, and two strips claiming the same id is the duplicate-`repeat`-key bug §
|
|
375
|
+
* session, and two strips claiming the same id is the duplicate-`repeat`-key bug §14.1 describes.
|
|
375
376
|
*
|
|
376
377
|
* The subject is `tabId` when given, else the focused pane's active tab. The drag resolver names
|
|
377
378
|
* the tab it is carrying — the gesture points at a chip, not at whatever the keyboard is in — and
|
|
@@ -607,11 +608,11 @@ export function paneIsEmpty(pane: Pane): boolean {
|
|
|
607
608
|
return pane.tabOrder.length === 0 && pane.derived === null;
|
|
608
609
|
}
|
|
609
610
|
|
|
610
|
-
/* No `togglePaneZoom`.
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
611
|
+
/* No `togglePaneZoom`. It was removed when the shell still handed one stage between panes: the
|
|
612
|
+
focused pane already filled the shell, so the state existed, both commands wrote it, and nothing
|
|
613
|
+
that draws ever read it — a control whose only observable effect is on itself. There is a grid of
|
|
614
|
+
live panes now (§18.3), so a zoom is buildable, but no section of studio.md asks for one; it
|
|
615
|
+
comes back with the section that does, and not one release earlier. */
|
|
615
616
|
|
|
616
617
|
/**
|
|
617
618
|
* Remove a tab id from whichever pane holds it, without touching the tab itself.
|
|
@@ -696,6 +697,13 @@ function defaultSlot(pane: Pane, tabId: string): number {
|
|
|
696
697
|
* @param {object | null} [config]
|
|
697
698
|
*/
|
|
698
699
|
export function setWorkspaceProject(root: string | null, config: object | null = null) {
|
|
700
|
+
/* Leaving a project drops the assistant's record of what each turn changed (ai.md §3.2). It
|
|
701
|
+
names project-relative paths, and its Restore undoes the active tab, so carried into another
|
|
702
|
+
project it would list files that are not there and undo a document the turn never touched.
|
|
703
|
+
Adopting a project from none keeps it: a bootstrap conversation follows the project it made. */
|
|
704
|
+
if (workspace.projectRoot && root !== workspace.projectRoot) {
|
|
705
|
+
resetAiWrites();
|
|
706
|
+
}
|
|
699
707
|
workspace.projectRoot = root;
|
|
700
708
|
workspace.projectConfig = config;
|
|
701
709
|
}
|
|
@@ -820,12 +828,12 @@ function setActiveTab(tabId: string, opts: { cycling?: boolean; focus?: boolean
|
|
|
820
828
|
* keys. Callers that mean "show me this file" should use `files/files.ts`'s `openFileInTab`, which
|
|
821
829
|
* activates the existing tab instead.
|
|
822
830
|
*
|
|
823
|
-
* `preview: true` opens a DISPOSABLE tab (
|
|
824
|
-
* browsing, and browsing must not litter, so the next preview open in
|
|
825
|
-
* It is opt-in rather than the default because only the CALLER knows
|
|
826
|
-
* browsing or committing — an author who typed a new file name has
|
|
827
|
-
* discarding that tab on their next click is the one failure a preview tab
|
|
828
|
-
* {@link promoteTab} records a commitment made after the fact.
|
|
831
|
+
* `preview: true` opens a DISPOSABLE tab (docs/studio/interface/tabs.md): single-clicking through
|
|
832
|
+
* the tree or the palette is browsing, and browsing must not litter, so the next preview open in
|
|
833
|
+
* the same pane takes its slot. It is opt-in rather than the default because only the CALLER knows
|
|
834
|
+
* whether the author was browsing or committing — an author who typed a new file name has
|
|
835
|
+
* committed, and silently discarding that tab on their next click is the one failure a preview tab
|
|
836
|
+
* must never have. {@link promoteTab} records a commitment made after the fact.
|
|
829
837
|
*
|
|
830
838
|
* `paneId` says WHERE, and `focus` says whether the keyboard goes with it. Both default to today's
|
|
831
839
|
* answer — the focused pane, and yes — because "open this document" has always meant "in front of
|
|
@@ -1383,12 +1391,12 @@ export function tabCommands(deps: TabCommandDeps): AnyCommand[] {
|
|
|
1383
1391
|
"Use it when the user should SEE the page, or for iterative visual refinement after " +
|
|
1384
1392
|
"creating a page or component.",
|
|
1385
1393
|
name: "open_document",
|
|
1386
|
-
/* The person's own read: `activeTab` is what the tab strip highlights, and `editor.kind`
|
|
1387
|
-
|
|
1394
|
+
/* The person's own read: `activeTab` is what the tab strip highlights, and `editor.kind` is
|
|
1395
|
+
the fact the document-tree tier is gated on. Both are named so the model learns in one
|
|
1388
1396
|
round whether the tree tools reach the file it opened — a `.csv` lands in the Grid, a
|
|
1389
1397
|
`.png` in the Media viewer, and neither is an element tree. The `.value` read is module
|
|
1390
|
-
state, which a projected `report` may close over (§12.4); `after`
|
|
1391
|
-
document is active. */
|
|
1398
|
+
state, which a projected `report` may close over (studio-ui-guidelines.md §12.4); `after`
|
|
1399
|
+
alone cannot say WHICH document is active. */
|
|
1392
1400
|
report: ({ after, args }) => {
|
|
1393
1401
|
const path = stringArg("document.open", args, "path");
|
|
1394
1402
|
const active = activeTab.value?.documentPath ?? null;
|
|
@@ -1402,11 +1410,12 @@ export function tabCommands(deps: TabCommandDeps): AnyCommand[] {
|
|
|
1402
1410
|
return `"${path}" is the active document, ${where}.`;
|
|
1403
1411
|
},
|
|
1404
1412
|
},
|
|
1405
|
-
/* Refuses by THROWING (§12.4's first review rule). `openFileInTab`
|
|
1406
|
-
open as a Problem and returns normally — the right answer for a
|
|
1407
|
-
where the toast is in front of the person — so the record has to
|
|
1408
|
-
The hand tool this replaced read `getTab()` after the open and
|
|
1409
|
-
success, so a missing file left the PREVIOUS document active and
|
|
1413
|
+
/* Refuses by THROWING (studio-ui-guidelines.md §12.4's first review rule). `openFileInTab`
|
|
1414
|
+
reports a file it cannot open as a Problem and returns normally — the right answer for a
|
|
1415
|
+
click in the Files tree, where the toast is in front of the person — so the record has to
|
|
1416
|
+
look for the tab itself. The hand tool this replaced read `getTab()` after the open and
|
|
1417
|
+
called whatever it found a success, so a missing file left the PREVIOUS document active and
|
|
1418
|
+
reported "Switched to". */
|
|
1410
1419
|
run: async (_ctx, args) => {
|
|
1411
1420
|
const path = stringArg("document.open", args, "path");
|
|
1412
1421
|
await deps.openFile(path);
|
|
@@ -1435,8 +1444,9 @@ export function tabCommands(deps: TabCommandDeps): AnyCommand[] {
|
|
|
1435
1444
|
group: "1_file",
|
|
1436
1445
|
when: (ctx) => ctx.project.open,
|
|
1437
1446
|
requires: "an open project",
|
|
1438
|
-
/* No `aiTool`, by §12.4's first deletion rule: chrome — it arranges
|
|
1439
|
-
looking at. No `undo`: opening a tab is not a state the undo stack
|
|
1447
|
+
/* No `aiTool`, by studio-ui-guidelines.md §12.4's first deletion rule: chrome — it arranges
|
|
1448
|
+
what the person is looking at. No `undo`: opening a tab is not a state the undo stack
|
|
1449
|
+
owns. */
|
|
1440
1450
|
undo: "none",
|
|
1441
1451
|
/* The non-drag equivalent of dragging a file row onto the other pane's strip (SC 2.5.7): the
|
|
1442
1452
|
same `receivingPane` the drag resolver uses, so a file tree row and this command can never
|
|
@@ -1550,12 +1560,12 @@ export function tabCommands(deps: TabCommandDeps): AnyCommand[] {
|
|
|
1550
1560
|
* The pane commands.
|
|
1551
1561
|
*
|
|
1552
1562
|
* They live beside the pane model for the same reason the tab commands do, and they are the whole
|
|
1553
|
-
* user-facing surface of §
|
|
1563
|
+
* user-facing surface of the pane transport (§18.1): split, focus, unsplit, zoom.
|
|
1554
1564
|
*
|
|
1555
1565
|
* `⌘0` and `⌘⌥0` are a PAIR, and they are both bound. `⌘0` was `canvas.zoomReset`, which held it
|
|
1556
|
-
* for the one verb of the zoom cluster that also has a button in the floating zoom pod
|
|
1557
|
-
*
|
|
1558
|
-
*
|
|
1566
|
+
* for the one verb of the zoom cluster that also has a button in the floating zoom pod — so the
|
|
1567
|
+
* chord was the second way to reach a control that is already on screen, while focusing a pane had
|
|
1568
|
+
* no way at all. The zoom keeps its pod button and gives up the key.
|
|
1559
1569
|
*
|
|
1560
1570
|
* @param {TabCommandDeps} deps
|
|
1561
1571
|
* @returns {AnyCommand[]}
|
|
@@ -1604,13 +1614,13 @@ export function paneCommands(deps: TabCommandDeps): AnyCommand[] {
|
|
|
1604
1614
|
/* This is NOT `pane.derive`, and the distinction is the whole reason both exist. `derive`
|
|
1605
1615
|
shows a projection OF THIS PANE — its Code, its diff, the same page at another breakpoint —
|
|
1606
1616
|
and follows it. `compareWith` puts THAT DOCUMENT beside this one and then leaves it alone.
|
|
1607
|
-
Collapsing them would give "open a second document in the other pane" two definition
|
|
1608
|
-
|
|
1617
|
+
Collapsing them would give "open a second document in the other pane" two definition sites,
|
|
1618
|
+
which is how the shell redesign's two names for it came to disagree in the first place. */
|
|
1609
1619
|
enablement: () => workspace.activeTabId !== null,
|
|
1610
1620
|
requires: "an open document",
|
|
1611
1621
|
undo: "none",
|
|
1612
|
-
/* No `aiTool`, by §12.4's first deletion rule: chrome — it arranges
|
|
1613
|
-
looking at. */
|
|
1622
|
+
/* No `aiTool`, by studio-ui-guidelines.md §12.4's first deletion rule: chrome — it arranges
|
|
1623
|
+
what the person is looking at. */
|
|
1614
1624
|
run: async (_ctx, args) => {
|
|
1615
1625
|
const path = stringArg("pane.compareWith", args, "path");
|
|
1616
1626
|
const here = activePane();
|
package/styles/canvas.css
CHANGED
|
@@ -18,32 +18,6 @@
|
|
|
18
18
|
min-height: 0;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
/* ─── Document Header card ─────────────────────
|
|
22
|
-
Region ⑧: the artefact's own header, drawn IN the stage. `#frontmatter-panel` — a fourth
|
|
23
|
-
full-width band up to 40vh that appeared and vanished as a side effect of the canvas mode — is
|
|
24
|
-
gone, grid row and all.
|
|
25
|
-
|
|
26
|
-
Two placements, because the stage draws a page two ways. In Edit the card is `in-column`: a block
|
|
27
|
-
of the document's own centered column that scrolls with it, so it is part of the artefact rather
|
|
28
|
-
than a strip above it. In Design the artboards are under a pan/zoom transform, and a form drawn
|
|
29
|
-
at 40% is a picture of a form — so the card is `pinned` above the surface at 1:1, and that is the
|
|
30
|
-
one placement that still needs a cap. */
|
|
31
|
-
.doc-header-host[hidden] {
|
|
32
|
-
display: none;
|
|
33
|
-
}
|
|
34
|
-
.doc-header-host.in-column {
|
|
35
|
-
display: block;
|
|
36
|
-
padding-bottom: 16px;
|
|
37
|
-
}
|
|
38
|
-
.doc-header-host.pinned {
|
|
39
|
-
flex-shrink: 0;
|
|
40
|
-
max-height: 40vh;
|
|
41
|
-
overflow-y: auto;
|
|
42
|
-
}
|
|
43
|
-
.doc-header-host.pinned .doc-header {
|
|
44
|
-
border-width: 0 0 1px;
|
|
45
|
-
border-radius: 0;
|
|
46
|
-
}
|
|
47
21
|
/* ─── Content edit mode canvas ─────────────── */
|
|
48
22
|
.content-edit-canvas {
|
|
49
23
|
width: 100%;
|
|
@@ -201,7 +175,7 @@
|
|
|
201
175
|
.overlay-coselection-group {
|
|
202
176
|
display: contents;
|
|
203
177
|
}
|
|
204
|
-
/* The other members of a multi-selection (§6.
|
|
178
|
+
/* The other members of a multi-selection (§6.7). Same accent, thinner: one box is the primary —
|
|
205
179
|
what the Inspector, the block action bar and the status bar address — and the rest are along for
|
|
206
180
|
the batch. A selection of one draws no co-selection boxes at all. */
|
|
207
181
|
.overlay-coselection {
|
package/styles/inspector.css
CHANGED
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
text-decoration: underline;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
/* ─── Provenance dots on a section heading (
|
|
79
|
+
/* ─── Provenance dots on a section heading (§6.7) ─────────────────────────────
|
|
80
80
|
The chip itself is styled with the rest of the row vocabulary further down —
|
|
81
81
|
one block, because Style and Component Props are the same chip in two
|
|
82
82
|
cascades. What is only needed here is the DOT form: a collapsed accordion
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
border: none;
|
|
94
94
|
cursor: default;
|
|
95
95
|
}
|
|
96
|
-
/* `mixed` (§6.
|
|
96
|
+
/* `mixed` (§6.7) — the multi-selection's own state. Neutral on purpose: unlike the other three it
|
|
97
97
|
says nothing about WHERE the value came from, only that the selected elements disagree, so it
|
|
98
98
|
must not borrow the accent that means "set here" or the amber that means "inherited". */
|
|
99
99
|
.set-dot.provenance-chip--mixed {
|
|
@@ -146,7 +146,8 @@
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
/* ─── The Layout-element card ───────────────────────────────────────────────
|
|
149
|
-
What the inspector says when you click page chrome —
|
|
149
|
+
What the inspector says when you click page chrome — the first click a new author makes
|
|
150
|
+
(docs/studio/design/properties.md, "Layout elements"). */
|
|
150
151
|
.layout-origin {
|
|
151
152
|
display: flex;
|
|
152
153
|
align-items: center;
|
package/styles/overlays.css
CHANGED
|
@@ -232,7 +232,7 @@
|
|
|
232
232
|
color: var(--danger);
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
/* ───
|
|
235
|
+
/* ─── The toast host — the fourth overlay layer ───────────────────────────── */
|
|
236
236
|
/* The consequence line inside a destructive confirmation — what this delete or rename breaks, and
|
|
237
237
|
what survives it. Set apart from the question above it, because the question is a sentence the
|
|
238
238
|
user already wrote in their head and this is the part they have not thought about. */
|
package/styles/tokens.css
CHANGED
|
@@ -12,7 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
The four --canvas-* steps are the exception and are meant to be: they colour surfaces that
|
|
14
14
|
render as a light DOCUMENT in both chromes, so they are mixed from the black and white keywords
|
|
15
|
-
and do not follow the theme. See tokens.json for what else moved here out of styles/spectrum.css.
|
|
15
|
+
and do not follow the theme. See tokens.json for what else moved here out of styles/spectrum.css.
|
|
16
|
+
|
|
17
|
+
user-select: none on :root is Studio's selection policy: the chrome is not text. Every surface
|
|
18
|
+
inherits it, a modal dialog restates it below, and a part whose text the reader must copy opts
|
|
19
|
+
back in from its own surface document, against the list tests/selection-policy.test.ts holds. */
|
|
16
20
|
|
|
17
21
|
:root {
|
|
18
22
|
box-sizing: border-box;
|
|
@@ -24,6 +28,7 @@
|
|
|
24
28
|
font-family: var(--jx-font-sans, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif);
|
|
25
29
|
font-size: var(--jx-text-md, 12px);
|
|
26
30
|
line-height: 1.5;
|
|
31
|
+
user-select: none;
|
|
27
32
|
--panel-w-left: 240px;
|
|
28
33
|
--panel-w-right: 280px;
|
|
29
34
|
--bg: var(--jx-bg, #111114);
|
|
@@ -89,6 +94,17 @@
|
|
|
89
94
|
overflow: hidden;
|
|
90
95
|
background: var(--jx-bg, #111114);
|
|
91
96
|
}
|
|
97
|
+
/* The root's `user-select: none` restated, because a modal dialog would otherwise take it back:
|
|
98
|
+
Chromium's UA sheet gives a MODAL dialog `user-select: text` (measured: `auto` while closed or
|
|
99
|
+
after show(), `text` after showModal()), and Blink inherits that into every node inside. Every
|
|
100
|
+
Studio modal is a jx-dialog opened with showModal(), so without this rule the headline, labels
|
|
101
|
+
and buttons of every dialog would be selectable whatever the root says. An author rule beats the
|
|
102
|
+
UA one at any specificity, since it is not `!important`. A dialog's MESSAGE opts back in from
|
|
103
|
+
its own surface document (`surfaces/dialog.json`), and an input inside one stays selectable
|
|
104
|
+
without help. */
|
|
105
|
+
:root dialog {
|
|
106
|
+
user-select: none;
|
|
107
|
+
}
|
|
92
108
|
:root[data-theme="light"],
|
|
93
109
|
:root[data-theme="light"] body {
|
|
94
110
|
background: var(--jx-bg, #f7f7f9);
|
package/styles/tokens.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
3
|
"$id": "StudioTokens",
|
|
4
|
-
"$description": "Studio's global base and its semantic token layer, as a Jx style block. `styles/tokens.css` is GENERATED from this by `scripts/build-styles.ts`; edit this file and run `bun run styles:sync`. It stays a linked stylesheet because every declaration in it is pre-paint: the kit's own theme is adopted from JavaScript, so these hex fallbacks are what paints the shell before that lands. THE LAST OF `styles/spectrum.css` IS HERE. That file was the whole of what was declared ON the `sp-theme` element, where Spectrum's own ramp was in scope and `:root` was not, and its header said it would be deleted whole when that element went. It has: the box is `#shell-root` in `shell-frame.json`, the typography is the four declarations above (the sans stack is the kit's and 12px is `--jx-text-md`, which is what `--spectrum-font-size-75` resolved to), and `--case-c`/`--slot-c` are aliases in the same idiom as `--switch-c`, at the values `panel-outline.json` had already written down as their fallbacks. THE FOUR `--canvas-*` STEPS DO NOT FOLLOW THE THEME, and that is the point of them rather than an oversight: they colour surfaces that render as a light DOCUMENT in both chromes — the stylebook, the element-card previews, the empty-slot placeholder on the canvas — so they are mixed from the `black` and `white` KEYWORDS, which is what `var(--spectrum-black)`/`var(--spectrum-white)` were. Seven more steps were declared beside them and no rule in the package ever read one, so those are not here. The four `--data-*` syntax colours are not here either, for a reason `panel-data.json` states outright: nothing read them, they were declared for a palette nobody wrote, and `data-tone` still carries the type on every value for the day somebody does.",
|
|
4
|
+
"$description": "Studio's global base and its semantic token layer, as a Jx style block. `styles/tokens.css` is GENERATED from this by `scripts/build-styles.ts`; edit this file and run `bun run styles:sync`. It stays a linked stylesheet because every declaration in it is pre-paint: the kit's own theme is adopted from JavaScript, so these hex fallbacks are what paints the shell before that lands. THE LAST OF `styles/spectrum.css` IS HERE. That file was the whole of what was declared ON the `sp-theme` element, where Spectrum's own ramp was in scope and `:root` was not, and its header said it would be deleted whole when that element went. It has: the box is `#shell-root` in `shell-frame.json`, the typography is the four declarations above (the sans stack is the kit's and 12px is `--jx-text-md`, which is what `--spectrum-font-size-75` resolved to), and `--case-c`/`--slot-c` are aliases in the same idiom as `--switch-c`, at the values `panel-outline.json` had already written down as their fallbacks. THE FOUR `--canvas-*` STEPS DO NOT FOLLOW THE THEME, and that is the point of them rather than an oversight: they colour surfaces that render as a light DOCUMENT in both chromes — the stylebook, the element-card previews, the empty-slot placeholder on the canvas — so they are mixed from the `black` and `white` KEYWORDS, which is what `var(--spectrum-black)`/`var(--spectrum-white)` were. Seven more steps were declared beside them and no rule in the package ever read one, so those are not here. The four `--data-*` syntax colours are not here either, for a reason `panel-data.json` states outright: nothing read them, they were declared for a palette nobody wrote, and `data-tone` still carries the type on every value for the day somebody does. THE CHROME IS NOT TEXT: `user-select: none` on the root is Studio's selection policy, stated once so a drag across the window highlights no label, button or heading; every surface inherits it, `& dialog` restates it where the UA sheet would reopen it, and a part whose text the reader must copy opts back in on that part alone, from its own surface document, against the list `tests/selection-policy.test.ts` holds. Editable controls, Monaco and the canvas iframe keep their own selection and need nothing.",
|
|
5
5
|
"tagName": "html",
|
|
6
6
|
"style": {
|
|
7
7
|
"box-sizing": "border-box",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"font-family": "var(--jx-font-sans, -apple-system, BlinkMacSystemFont, \"Segoe UI\", system-ui, sans-serif)",
|
|
14
14
|
"font-size": "var(--jx-text-md, 12px)",
|
|
15
15
|
"line-height": "1.5",
|
|
16
|
+
"user-select": "none",
|
|
16
17
|
"--panel-w-left": "240px",
|
|
17
18
|
"--panel-w-right": "280px",
|
|
18
19
|
"--bg": "var(--jx-bg, #111114)",
|
|
@@ -77,6 +78,10 @@
|
|
|
77
78
|
"overflow": "hidden",
|
|
78
79
|
"background": "var(--jx-bg, #111114)"
|
|
79
80
|
},
|
|
81
|
+
"& dialog": {
|
|
82
|
+
"$description": "The root's `user-select: none` restated, because a modal dialog would otherwise take it back: Chromium's UA sheet gives a MODAL dialog `user-select: text` (measured: `auto` while closed or after show(), `text` after showModal()), and Blink inherits that into every node inside. Every Studio modal is a jx-dialog opened with showModal(), so without this rule the headline, labels and buttons of every dialog would be selectable whatever the root says. An author rule beats the UA one at any specificity, since it is not `!important`. A dialog's MESSAGE opts back in from its own surface document (`surfaces/dialog.json`), and an input inside one stays selectable without help.",
|
|
83
|
+
"user-select": "none"
|
|
84
|
+
},
|
|
80
85
|
"&[data-theme=\"light\"], &[data-theme=\"light\"] body": {
|
|
81
86
|
"background": "var(--jx-bg, #f7f7f9)"
|
|
82
87
|
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createEntry2,
|
|
3
|
-
registerContentCommands2
|
|
4
|
-
} from "./studio-68fydsrj.js";
|
|
5
|
-
import"./studio-hdc2jt3z.js";
|
|
6
|
-
import"./studio-ctm7bhx5.js";
|
|
7
|
-
import"./studio-5t7ena5z.js";
|
|
8
|
-
import"./studio-x10fp4tp.js";
|
|
9
|
-
import"./studio-4c041r8y.js";
|
|
10
|
-
import"./studio-q0a3yk4n.js";
|
|
11
|
-
import"./studio-4r14yzyy.js";
|
|
12
|
-
import"./studio-y4f9fdge.js";
|
|
13
|
-
import"./studio-9j6sfeba.js";
|
|
14
|
-
import"./studio-x72j58vw.js";
|
|
15
|
-
import"./studio-nq5yf5mp.js";
|
|
16
|
-
import"./studio-etvx9s2g.js";
|
|
17
|
-
import"./studio-mpzwze9x.js";
|
|
18
|
-
import"./studio-zjjde71a.js";
|
|
19
|
-
import"./studio-z2smx5ce.js";
|
|
20
|
-
import"./studio-en82c639.js";
|
|
21
|
-
import"./studio-c07s5ckd.js";
|
|
22
|
-
import"./studio-ez11dmdh.js";
|
|
23
|
-
import"./studio-wnsyffg1.js";
|
|
24
|
-
import"./studio-m1p9b6c3.js";
|
|
25
|
-
import"./studio-esrxgwh6.js";
|
|
26
|
-
import"./studio-28vs5k2y.js";
|
|
27
|
-
import"./studio-6nzaktvy.js";
|
|
28
|
-
import"./studio-qa7fzxan.js";
|
|
29
|
-
import"./studio-ympe0n7a.js";
|
|
30
|
-
import"./studio-1k325pwf.js";
|
|
31
|
-
import"./studio-p6pmwkvh.js";
|
|
32
|
-
import"./studio-yxa81f45.js";
|
|
33
|
-
import"./studio-3ntvq6cg.js";
|
|
34
|
-
import"./studio-d8z5bajd.js";
|
|
35
|
-
import"./studio-tjjk7jvk.js";
|
|
36
|
-
export {
|
|
37
|
-
createEntry2 as createEntry,
|
|
38
|
-
registerContentCommands2 as registerContentCommands
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
//# debugId=474288D19E3E71A764756E2164756E21
|
|
42
|
-
//# sourceMappingURL=entry-commands-w9qsxa6q.js.map
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
startLayerTitleEdit2,
|
|
3
|
-
registerLayersPanel2
|
|
4
|
-
} from "./studio-hhskq2mr.js";
|
|
5
|
-
import"./studio-2mdbbc76.js";
|
|
6
|
-
import"./studio-a1pswps3.js";
|
|
7
|
-
import"./studio-ncn9e189.js";
|
|
8
|
-
import"./studio-5nz00bhh.js";
|
|
9
|
-
import"./studio-ctm7bhx5.js";
|
|
10
|
-
import"./studio-q0a3yk4n.js";
|
|
11
|
-
import"./studio-4r14yzyy.js";
|
|
12
|
-
import"./studio-x72j58vw.js";
|
|
13
|
-
import"./studio-nq5yf5mp.js";
|
|
14
|
-
import"./studio-etvx9s2g.js";
|
|
15
|
-
import"./studio-mpzwze9x.js";
|
|
16
|
-
import"./studio-zjjde71a.js";
|
|
17
|
-
import"./studio-z2smx5ce.js";
|
|
18
|
-
import"./studio-en82c639.js";
|
|
19
|
-
import"./studio-c07s5ckd.js";
|
|
20
|
-
import"./studio-ez11dmdh.js";
|
|
21
|
-
import"./studio-wnsyffg1.js";
|
|
22
|
-
import"./studio-m1p9b6c3.js";
|
|
23
|
-
import"./studio-esrxgwh6.js";
|
|
24
|
-
import"./studio-28vs5k2y.js";
|
|
25
|
-
import"./studio-6nzaktvy.js";
|
|
26
|
-
import"./studio-qa7fzxan.js";
|
|
27
|
-
import"./studio-ympe0n7a.js";
|
|
28
|
-
import"./studio-1k325pwf.js";
|
|
29
|
-
import"./studio-p6pmwkvh.js";
|
|
30
|
-
import"./studio-yxa81f45.js";
|
|
31
|
-
import"./studio-3ntvq6cg.js";
|
|
32
|
-
import"./studio-d8z5bajd.js";
|
|
33
|
-
import"./studio-tjjk7jvk.js";
|
|
34
|
-
export {
|
|
35
|
-
registerLayersPanel2 as registerLayersPanel,
|
|
36
|
-
startLayerTitleEdit2 as startLayerTitleEdit
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
//# debugId=0A17594D4CFC8C3764756E2164756E21
|
|
40
|
-
//# sourceMappingURL=layers-panel-fksbdg4q.js.map
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
seedPublishConnected2,
|
|
3
|
-
openPublishPanel2
|
|
4
|
-
} from "./studio-14d9tq4d.js";
|
|
5
|
-
import"./studio-vn5hske5.js";
|
|
6
|
-
import"./studio-c04nzbby.js";
|
|
7
|
-
import"./studio-9j6sfeba.js";
|
|
8
|
-
import"./studio-mpzwze9x.js";
|
|
9
|
-
import"./studio-z2smx5ce.js";
|
|
10
|
-
import"./studio-ez11dmdh.js";
|
|
11
|
-
import"./studio-wnsyffg1.js";
|
|
12
|
-
import"./studio-m1p9b6c3.js";
|
|
13
|
-
import"./studio-28vs5k2y.js";
|
|
14
|
-
import"./studio-6nzaktvy.js";
|
|
15
|
-
import"./studio-ympe0n7a.js";
|
|
16
|
-
import"./studio-1k325pwf.js";
|
|
17
|
-
import"./studio-p6pmwkvh.js";
|
|
18
|
-
import"./studio-yxa81f45.js";
|
|
19
|
-
import"./studio-3ntvq6cg.js";
|
|
20
|
-
import"./studio-d8z5bajd.js";
|
|
21
|
-
export {
|
|
22
|
-
openPublishPanel2 as openPublishPanel,
|
|
23
|
-
seedPublishConnected2 as seedPublishConnected
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
//# debugId=6014AB98C3074CCB64756E2164756E21
|
|
27
|
-
//# sourceMappingURL=publish-panel-vz23wwmg.js.map
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
initQuickSearch2,
|
|
3
|
-
openQuickSearch2
|
|
4
|
-
} from "./studio-66arbpc2.js";
|
|
5
|
-
import"./studio-01jeck2y.js";
|
|
6
|
-
import"./studio-vt0tj32j.js";
|
|
7
|
-
import"./studio-wjpgxywa.js";
|
|
8
|
-
import"./studio-t171hxhe.js";
|
|
9
|
-
import"./studio-5nz00bhh.js";
|
|
10
|
-
import"./studio-hdc2jt3z.js";
|
|
11
|
-
import"./studio-t3adrr56.js";
|
|
12
|
-
import"./studio-5t7ena5z.js";
|
|
13
|
-
import"./studio-x10fp4tp.js";
|
|
14
|
-
import"./studio-4c041r8y.js";
|
|
15
|
-
import"./studio-q0a3yk4n.js";
|
|
16
|
-
import"./studio-4r14yzyy.js";
|
|
17
|
-
import"./studio-y4f9fdge.js";
|
|
18
|
-
import"./studio-9j6sfeba.js";
|
|
19
|
-
import"./studio-x72j58vw.js";
|
|
20
|
-
import"./studio-nq5yf5mp.js";
|
|
21
|
-
import"./studio-etvx9s2g.js";
|
|
22
|
-
import"./studio-mpzwze9x.js";
|
|
23
|
-
import"./studio-zjjde71a.js";
|
|
24
|
-
import"./studio-z2smx5ce.js";
|
|
25
|
-
import"./studio-en82c639.js";
|
|
26
|
-
import"./studio-c07s5ckd.js";
|
|
27
|
-
import"./studio-ez11dmdh.js";
|
|
28
|
-
import"./studio-wnsyffg1.js";
|
|
29
|
-
import"./studio-m1p9b6c3.js";
|
|
30
|
-
import"./studio-esrxgwh6.js";
|
|
31
|
-
import"./studio-28vs5k2y.js";
|
|
32
|
-
import"./studio-6nzaktvy.js";
|
|
33
|
-
import"./studio-qa7fzxan.js";
|
|
34
|
-
import"./studio-ympe0n7a.js";
|
|
35
|
-
import"./studio-1k325pwf.js";
|
|
36
|
-
import"./studio-p6pmwkvh.js";
|
|
37
|
-
import"./studio-yxa81f45.js";
|
|
38
|
-
import"./studio-3ntvq6cg.js";
|
|
39
|
-
import"./studio-d8z5bajd.js";
|
|
40
|
-
export {
|
|
41
|
-
initQuickSearch2 as initQuickSearch,
|
|
42
|
-
openQuickSearch2 as openQuickSearch
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
//# debugId=1B07B932BE385C7264756E2164756E21
|
|
46
|
-
//# sourceMappingURL=quick-search-e9rp74m8.js.map
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
mount2,
|
|
3
|
-
unmount2,
|
|
4
|
-
render2,
|
|
5
|
-
inspectorTab2,
|
|
6
|
-
setInspectorTab2
|
|
7
|
-
} from "./studio-15f3kxqe.js";
|
|
8
|
-
import"./studio-2mdbbc76.js";
|
|
9
|
-
import"./studio-a1pswps3.js";
|
|
10
|
-
import"./studio-ncn9e189.js";
|
|
11
|
-
import"./studio-5nz00bhh.js";
|
|
12
|
-
import"./studio-ctm7bhx5.js";
|
|
13
|
-
import"./studio-4r14yzyy.js";
|
|
14
|
-
import"./studio-x72j58vw.js";
|
|
15
|
-
import"./studio-nq5yf5mp.js";
|
|
16
|
-
import"./studio-etvx9s2g.js";
|
|
17
|
-
import"./studio-mpzwze9x.js";
|
|
18
|
-
import"./studio-zjjde71a.js";
|
|
19
|
-
import"./studio-z2smx5ce.js";
|
|
20
|
-
import"./studio-en82c639.js";
|
|
21
|
-
import"./studio-c07s5ckd.js";
|
|
22
|
-
import"./studio-ez11dmdh.js";
|
|
23
|
-
import"./studio-wnsyffg1.js";
|
|
24
|
-
import"./studio-m1p9b6c3.js";
|
|
25
|
-
import"./studio-esrxgwh6.js";
|
|
26
|
-
import"./studio-28vs5k2y.js";
|
|
27
|
-
import"./studio-6nzaktvy.js";
|
|
28
|
-
import"./studio-qa7fzxan.js";
|
|
29
|
-
import"./studio-ympe0n7a.js";
|
|
30
|
-
import"./studio-1k325pwf.js";
|
|
31
|
-
import"./studio-p6pmwkvh.js";
|
|
32
|
-
import"./studio-yxa81f45.js";
|
|
33
|
-
import"./studio-3ntvq6cg.js";
|
|
34
|
-
import"./studio-d8z5bajd.js";
|
|
35
|
-
import"./studio-tjjk7jvk.js";
|
|
36
|
-
export {
|
|
37
|
-
inspectorTab2 as inspectorTab,
|
|
38
|
-
mount2 as mount,
|
|
39
|
-
render2 as render,
|
|
40
|
-
setInspectorTab2 as setInspectorTab,
|
|
41
|
-
unmount2 as unmount
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
//# debugId=ACC2FC3785A3466764756E2164756E21
|
|
45
|
-
//# sourceMappingURL=right-panel-j97t2yvy.js.map
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
// ../collab/src/ops.ts
|
|
2
|
-
function jsonClone(value) {
|
|
3
|
-
return JSON.parse(JSON.stringify(value));
|
|
4
|
-
}
|
|
5
|
-
function cloneValue2(v) {
|
|
6
|
-
return v === undefined || v === null ? v : jsonClone(v);
|
|
7
|
-
}
|
|
8
|
-
function getNodeAtPath3(doc, path) {
|
|
9
|
-
let node = doc;
|
|
10
|
-
for (const key of path) {
|
|
11
|
-
if (node == null) {
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
node = node[key];
|
|
15
|
-
}
|
|
16
|
-
return node;
|
|
17
|
-
}
|
|
18
|
-
function childArray2(node) {
|
|
19
|
-
if (Array.isArray(node)) {
|
|
20
|
-
throw new TypeError("Cannot insert into a children array; parentPath must point at a node");
|
|
21
|
-
}
|
|
22
|
-
if (!node.children) {
|
|
23
|
-
node.children = [];
|
|
24
|
-
}
|
|
25
|
-
if (!Array.isArray(node.children)) {
|
|
26
|
-
throw new TypeError("Cannot insert into mapped-array children; edit the map template instead");
|
|
27
|
-
}
|
|
28
|
-
return node.children;
|
|
29
|
-
}
|
|
30
|
-
function applyDocOpToDoc2(doc, op) {
|
|
31
|
-
switch (op.op) {
|
|
32
|
-
case "set-key": {
|
|
33
|
-
const node = getNodeAtPath3(doc, op.path);
|
|
34
|
-
if (!node) {
|
|
35
|
-
throw new Error(`doc-op-node-not-found:${op.path.join("/")}`);
|
|
36
|
-
}
|
|
37
|
-
const target = node;
|
|
38
|
-
if (op.value === undefined) {
|
|
39
|
-
delete target[op.key];
|
|
40
|
-
} else {
|
|
41
|
-
target[op.key] = cloneValue2(op.value);
|
|
42
|
-
}
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
case "insert-child": {
|
|
46
|
-
const parent = getNodeAtPath3(doc, op.parentPath);
|
|
47
|
-
childArray2(parent).splice(op.index, 0, cloneValue2(op.node));
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
case "remove-child": {
|
|
51
|
-
const parent = getNodeAtPath3(doc, op.parentPath);
|
|
52
|
-
childArray2(parent).splice(op.index, 1);
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
case "set-child": {
|
|
56
|
-
const parent = getNodeAtPath3(doc, op.parentPath);
|
|
57
|
-
childArray2(parent).splice(op.index, 1, cloneValue2(op.node));
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
case "move-child": {
|
|
61
|
-
const fromParent = getNodeAtPath3(doc, op.fromParentPath);
|
|
62
|
-
const toParent = getNodeAtPath3(doc, op.toParentPath);
|
|
63
|
-
const [node] = childArray2(fromParent).splice(op.fromIndex, 1);
|
|
64
|
-
childArray2(toParent).splice(op.toIndex, 0, node);
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
default: {
|
|
68
|
-
throw new Error(`unknown-doc-op:${op.op}`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export { cloneValue2, getNodeAtPath3, childArray2, applyDocOpToDoc2 };
|
|
74
|
-
|
|
75
|
-
//# debugId=32556033BC6FC83D64756E2164756E21
|
|
76
|
-
//# sourceMappingURL=studio-727xh0e3.js.map
|