@jxsuite/studio 6.1.0 → 6.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/2020-f2gkpy8d.js +4 -0
- package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
- package/dist/chunks/adapter-4912g339.js +4 -0
- package/dist/chunks/cf-account-picker-wccaenh6.js +4 -0
- package/dist/chunks/cf-settings-br6105tr.js +4 -0
- package/dist/chunks/color-28ksk2qm.js +4 -0
- package/dist/chunks/color-area-0fj8a4ga.js +4 -0
- package/dist/chunks/color-field-xch8kx2g.js +4 -0
- package/dist/chunks/color-slider-jxd8v350.js +4 -0
- package/dist/chunks/combobox-p0efwjke.js +4 -0
- package/dist/chunks/components-db68vsn7.js +4 -0
- package/dist/chunks/content-source-1449qesq.js +4 -0
- package/dist/chunks/convert-to-repeater-5h457egj.js +4 -0
- package/dist/chunks/dialog-c4x05vyx.js +4 -0
- package/dist/chunks/editor-x9jn86a7.js +4 -0
- package/dist/chunks/entry-commands-may24cpt.js +4 -0
- package/dist/chunks/extension-sections-pvr14vxr.js +4 -0
- package/dist/chunks/file-ops-x9v54pcj.js +4 -0
- package/dist/chunks/files-j3knqf0s.js +4 -0
- package/dist/chunks/format-host-tyre2trb.js +4 -0
- package/dist/chunks/fs-events-64ma9htc.js +4 -0
- package/dist/chunks/git-panel-84ps5dex.js +4 -0
- package/dist/chunks/grid-view-d2wq9ezg.js +51 -0
- package/dist/chunks/icons-pnfz478q.js +4 -0
- package/dist/chunks/iframe-entry-fvbk89gm.js +5 -0
- package/dist/chunks/iframe-entry-jdcktez8.js +5 -0
- package/dist/chunks/iframe-entry-x0ygf2yr.js +5 -0
- package/dist/chunks/iframe-entry-zap785cw.js +5 -0
- package/dist/chunks/iframe-host-ck6vejt5.js +4 -0
- package/dist/chunks/index-b8xw3vy9.js +4 -0
- package/dist/chunks/{index-gybvv7a6.js → index-zpjmzqfk.js} +3 -3
- package/dist/chunks/{javascript-rnvdp3k4.js → javascript-m54mnwp6.js} +3 -3
- package/dist/chunks/jsonMode-w15cmrcm.js +13 -0
- package/dist/chunks/jx-validate-at3zn8wa.js +4 -0
- package/dist/chunks/layers-h4xp1pss.js +4 -0
- package/dist/chunks/layers-panel-m5hw1d7g.js +4 -0
- package/dist/chunks/listbox-e74qjyq6.js +4 -0
- package/dist/chunks/lit-html-8t8t3dnr.js +4 -0
- package/dist/chunks/media-picker-2cweexc5.js +4 -0
- package/dist/chunks/menu-n6yzswmy.js +4 -0
- package/dist/chunks/menu-ynw13y0s.js +4 -0
- package/dist/chunks/monaco-binding-7gx83x3r.js +4 -0
- package/dist/chunks/monaco-buffer-qzxn567r.js +4 -0
- package/dist/chunks/monaco-setup-gxf6656g.js +4 -0
- package/dist/chunks/notify-cj5zbrs2.js +4 -0
- package/dist/chunks/number-field-y62xq0ty.js +4 -0
- package/dist/chunks/parse-b7ddhr8m.js +4 -0
- package/dist/chunks/platform-3dfws9js.js +4 -0
- package/dist/chunks/popover-jt2gxmzs.js +4 -0
- package/dist/chunks/publish-panel-1gvxbj21.js +4 -0
- package/dist/chunks/quick-search-0dajrwqg.js +4 -0
- package/dist/chunks/references-49qgt404.js +4 -0
- package/dist/chunks/right-panel-jm1bwe53.js +4 -0
- package/dist/chunks/section-registry-6kwc4fky.js +4 -0
- package/dist/chunks/select-rzds841e.js +4 -0
- package/dist/chunks/split-n2gfpm5m.js +4 -0
- package/dist/chunks/{studio-5g0ag7c0.js → studio-0q988f9w.js} +3 -3
- package/dist/chunks/studio-0rt52vpq.js +5 -0
- package/dist/chunks/studio-18vgbhs5.js +5 -0
- package/dist/chunks/{studio-pxg4ap1e.js → studio-1fxkaaea.js} +4 -4
- package/dist/chunks/studio-24mccdrj.js +5 -0
- package/dist/chunks/studio-2eh507zk.js +9 -0
- package/dist/chunks/studio-2hcbccfv.js +5 -0
- package/dist/chunks/studio-2j1cb95x.js +5 -0
- package/dist/chunks/studio-2jbs3rxv.js +5 -0
- package/dist/chunks/{studio-qbj760tx.js → studio-485046te.js} +7 -7
- package/dist/chunks/studio-4h8k4dw9.js +5 -0
- package/dist/chunks/studio-5f6n18kx.js +5 -0
- package/dist/chunks/studio-5gthpky6.js +5 -0
- package/dist/chunks/studio-5ve6bbep.js +5 -0
- package/dist/chunks/studio-6ep3js6b.js +9 -0
- package/dist/chunks/studio-6wkmf3wz.js +9 -0
- package/dist/chunks/studio-841rf3cg.js +5 -0
- package/dist/chunks/studio-8gmwgheg.js +5 -0
- package/dist/chunks/studio-8qm0ep50.js +5 -0
- package/dist/chunks/{studio-anyrgzvb.js → studio-90pq9km1.js} +4 -4
- package/dist/chunks/studio-924p1tm1.js +6 -0
- package/dist/chunks/{studio-v2bvmbjj.js → studio-a3g98wjr.js} +4 -4
- package/dist/chunks/studio-a3shpz9y.js +5 -0
- package/dist/chunks/studio-amsbaaar.js +6 -0
- package/dist/chunks/studio-at5spjbc.js +7 -0
- package/dist/chunks/studio-b2xv945e.js +5 -0
- package/dist/chunks/studio-bn5nkafw.js +5 -0
- package/dist/chunks/studio-bw6q5xjf.js +9 -0
- package/dist/chunks/studio-c7q0t9x1.js +5 -0
- package/dist/chunks/studio-camnhc96.js +6 -0
- package/dist/chunks/studio-cffqvnzd.js +5 -0
- package/dist/chunks/studio-d81xfh1g.js +5 -0
- package/dist/chunks/studio-dgz8d0c1.js +5 -0
- package/dist/chunks/studio-efvfrsf8.js +5 -0
- package/dist/chunks/studio-er30bpcx.js +5 -0
- package/dist/chunks/studio-ezscgr64.js +5 -0
- package/dist/chunks/studio-ffrrncvz.js +5 -0
- package/dist/chunks/studio-fpphgn8y.js +10 -0
- package/dist/chunks/studio-j1kvhdjk.js +4 -0
- package/dist/chunks/{studio-txjjzrsm.js → studio-j430n16g.js} +5 -5
- package/dist/chunks/studio-jjkg84nj.js +5 -0
- package/dist/chunks/studio-m0q32ars.js +4 -0
- package/dist/chunks/studio-m6bdst11.js +5 -0
- package/dist/chunks/studio-nv2cptd4.js +64 -0
- package/dist/chunks/studio-nwfrc98n.js +5 -0
- package/dist/chunks/studio-p1wgvp7r.js +5 -0
- package/dist/chunks/studio-pag2wncm.js +5 -0
- package/dist/chunks/studio-qvanvzfd.js +5 -0
- package/dist/chunks/studio-qwa64kt7.js +5 -0
- package/dist/chunks/studio-rk1zc4x3.js +928 -0
- package/dist/chunks/studio-se2r3ptc.js +5 -0
- package/dist/chunks/studio-sg2a0dh0.js +5 -0
- package/dist/chunks/studio-tjzjhe68.js +5 -0
- package/dist/chunks/{studio-0x3jyb8r.js → studio-tq0rtfwj.js} +4 -4
- package/dist/chunks/{studio-cpxkgjrj.js → studio-v0jzqdjm.js} +4 -4
- package/dist/chunks/studio-v2w7q8r1.js +7 -0
- package/dist/chunks/studio-v5vjq1h0.js +4 -0
- package/dist/chunks/studio-v8aga3vp.js +14 -0
- package/dist/chunks/studio-vfcdrfmv.js +5 -0
- package/dist/chunks/studio-vmfkgdjf.js +5 -0
- package/dist/chunks/studio-wt1816jj.js +5 -0
- package/dist/chunks/studio-wz73q5kq.js +4 -0
- package/dist/chunks/studio-y04qtxvp.js +7 -0
- package/dist/chunks/studio-y21g8zzg.js +5 -0
- package/dist/chunks/studio-y64hrt8p.js +12 -0
- package/dist/chunks/studio-ynn90f58.js +16 -0
- package/dist/chunks/studio-yxz682sx.js +5 -0
- package/dist/chunks/studio-zp7snvkq.js +5 -0
- package/dist/chunks/studio-zq4z6tm6.js +5 -0
- package/dist/chunks/swatch-group-ewh24n1f.js +4 -0
- package/dist/chunks/tabs-f5cw3tgp.js +4 -0
- package/dist/chunks/textfield-wewc8rq2.js +4 -0
- package/dist/chunks/toast-c9fn075p.js +4 -0
- package/dist/chunks/toast-host-ke5z4ng7.js +4 -0
- package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
- package/dist/chunks/tooltip-5v8ngwj2.js +4 -0
- package/dist/chunks/tree-mdq3v5cw.js +4 -0
- package/dist/chunks/tsMode-sf49ee9x.js +14 -0
- package/dist/chunks/workspace-jtfahpee.js +4 -0
- package/dist/chunks/ws-client-nze0k6mv.js +4 -0
- package/dist/iframe-entry.js +16 -16
- package/dist/manifest.json +63 -63
- package/dist/studio.js +98 -98
- package/dist/workers/ts.worker.js +3 -3
- package/package.json +11 -11
- package/src/about/about-modal.ts +4 -3
- package/src/account/action-flow.ts +45 -38
- package/src/account-status.ts +7 -2
- package/src/browse/library-layouts.ts +8 -5
- package/src/browse/library-model.ts +18 -6
- package/src/browse/library-pane.ts +37 -21
- package/src/browse/library-preview.ts +14 -9
- package/src/browse/library-source.ts +1 -1
- package/src/canvas/asset-refs.ts +24 -9
- package/src/canvas/asset-resolve.ts +19 -23
- package/src/canvas/canvas-helpers.ts +7 -6
- package/src/canvas/canvas-live-render.ts +44 -53
- package/src/canvas/canvas-patcher.ts +30 -30
- package/src/canvas/canvas-perf.ts +11 -5
- package/src/canvas/canvas-render.ts +66 -42
- package/src/canvas/canvas-surface.ts +5 -3
- package/src/canvas/canvas-utils.ts +163 -64
- package/src/canvas/dialog-path.ts +9 -4
- package/src/canvas/dialog-state.ts +1 -2
- package/src/canvas/diff-marks.ts +9 -16
- package/src/canvas/diff-toolbar.ts +8 -7
- package/src/canvas/edit-width-drag.ts +4 -1
- package/src/canvas/edit-width.ts +1 -3
- package/src/canvas/iframe-channel.ts +27 -13
- package/src/canvas/iframe-drop.ts +13 -12
- package/src/canvas/iframe-editable-root.ts +29 -16
- package/src/canvas/iframe-entry.ts +80 -63
- package/src/canvas/iframe-eval.ts +73 -49
- package/src/canvas/iframe-host.ts +203 -118
- package/src/canvas/iframe-inline-edit.ts +69 -32
- package/src/canvas/iframe-insert.ts +5 -4
- package/src/canvas/iframe-interaction.ts +37 -26
- package/src/canvas/iframe-overlay.ts +1 -1
- package/src/canvas/iframe-patch.ts +18 -15
- package/src/canvas/iframe-position.ts +12 -6
- package/src/canvas/iframe-protocol.ts +15 -16
- package/src/canvas/iframe-render.ts +41 -36
- package/src/canvas/iframe-slash.ts +24 -11
- package/src/canvas/iframe-subtree.ts +6 -2
- package/src/canvas/path-mapping.ts +19 -12
- package/src/canvas/popover-path.ts +7 -3
- package/src/canvas/popover-state.ts +1 -2
- package/src/canvas/serialize-scope.ts +13 -5
- package/src/canvas/stage-scrollbar.ts +2 -1
- package/src/canvas/surface-registry.ts +21 -3
- package/src/collab/collab-commands.ts +7 -2
- package/src/collab/collab-session.ts +84 -45
- package/src/collab/collab-state.ts +4 -3
- package/src/collab/monaco-binding.ts +16 -13
- package/src/collab/monaco-cursors.ts +5 -2
- package/src/commands/budget.ts +3 -3
- package/src/commands/command-args.ts +103 -71
- package/src/commands/context.ts +22 -20
- package/src/commands/defaults.ts +4 -1
- package/src/commands/keymap.ts +47 -43
- package/src/commands/levels.ts +3 -3
- package/src/commands/live-context.ts +10 -8
- package/src/commands/reference.ts +2 -1
- package/src/commands/registry.ts +12 -10
- package/src/commands/run-reported.ts +15 -10
- package/src/component-props.ts +46 -30
- package/src/content/collection-match.ts +5 -4
- package/src/content/draft-state.ts +4 -3
- package/src/content/entry-commands.ts +3 -2
- package/src/content/entry-editor.ts +29 -17
- package/src/content/entry-fields.ts +12 -7
- package/src/content/entry-model.ts +21 -12
- package/src/editor/canvas-context-menu.ts +1 -2
- package/src/editor/canvas-slash-bridge.ts +3 -6
- package/src/editor/content-slice.ts +16 -14
- package/src/editor/context-menu.ts +35 -22
- package/src/editor/convert-targets.ts +30 -35
- package/src/editor/convert-to-component.ts +11 -5
- package/src/editor/convert-to-repeater.ts +34 -22
- package/src/editor/editable-tags.ts +17 -2
- package/src/editor/file-drop-action.ts +21 -22
- package/src/editor/inline-edit-apply.ts +35 -17
- package/src/editor/inline-edit.ts +66 -50
- package/src/editor/inline-format.ts +59 -56
- package/src/editor/inline-link.ts +40 -15
- package/src/editor/insert-zone-action.ts +1 -1
- package/src/editor/merge-tags.ts +58 -19
- package/src/editor/repeater-scope.ts +39 -28
- package/src/editor/shortcuts.ts +87 -47
- package/src/editor/slash-menu.ts +1 -6
- package/src/files/asset-versions.ts +4 -4
- package/src/files/components.ts +15 -10
- package/src/files/elements.ts +5 -6
- package/src/files/file-ops.ts +77 -36
- package/src/files/files.ts +90 -95
- package/src/files/media-meta.ts +2 -1
- package/src/files/media-paths.ts +6 -1
- package/src/files/serialize-document.ts +2 -2
- package/src/format/constraints.ts +1 -1
- package/src/format/convert-file.ts +27 -13
- package/src/format/format-choices.ts +2 -1
- package/src/format/format-host.ts +76 -50
- package/src/github/github-auth-status.ts +27 -3
- package/src/github/github-auth.ts +19 -9
- package/src/github/github-publish.ts +24 -20
- package/src/grid/cell-editors.ts +46 -31
- package/src/grid/cell-popovers.ts +5 -3
- package/src/grid/edit-buffer.ts +10 -9
- package/src/grid/grid-controller.ts +20 -22
- package/src/grid/grid-layout.ts +21 -5
- package/src/grid/grid-open.ts +3 -6
- package/src/grid/grid-panel.ts +11 -4
- package/src/grid/grid-source.ts +8 -8
- package/src/grid/grid-view.ts +14 -17
- package/src/grid/redirects-grid.ts +14 -5
- package/src/grid/redirects.ts +16 -14
- package/src/grid/schema-columns.ts +25 -19
- package/src/grid/sources/connector-source.ts +47 -20
- package/src/grid/sources/content-source.ts +25 -24
- package/src/grid/sources/csv-file-source.ts +2 -2
- package/src/grid/tabulator-tables.d.ts +55 -34
- package/src/hosting/stage.ts +7 -7
- package/src/i18n/i18n-commands.ts +1 -2
- package/src/media/media-pane.ts +4 -1
- package/src/new-project/add-repo-modal.ts +20 -19
- package/src/new-project/import-tab.ts +10 -14
- package/src/new-project/location-fields.ts +2 -1
- package/src/new-project/new-project-modal.ts +12 -9
- package/src/packages/jxsuite-update.ts +4 -3
- package/src/packages/pull-package-sync.ts +26 -25
- package/src/page-params.ts +97 -68
- package/src/panels/activity-panel.ts +17 -9
- package/src/panels/ai-chat/attached-context.ts +13 -7
- package/src/panels/ai-chat/chat-view.ts +80 -73
- package/src/panels/ai-chat/composer.ts +30 -33
- package/src/panels/ai-chat/sessions-view.ts +1 -2
- package/src/panels/ai-panel.ts +23 -20
- package/src/panels/block-action-bar.ts +46 -35
- package/src/panels/bottom-dock.ts +5 -3
- package/src/panels/canvas-dnd-bridge.ts +31 -24
- package/src/panels/data-explorer.ts +62 -25
- package/src/panels/data-grid.ts +14 -11
- package/src/panels/dnd.ts +108 -118
- package/src/panels/editors.ts +55 -22
- package/src/panels/elements-panel.ts +10 -3
- package/src/panels/events-panel.ts +84 -69
- package/src/panels/formula-workspace.ts +76 -51
- package/src/panels/frontmatter-fields.ts +24 -19
- package/src/panels/frontmatter-panel.ts +44 -34
- package/src/panels/git-diff-open.ts +4 -4
- package/src/panels/git-panel.ts +49 -61
- package/src/panels/head-panel.ts +131 -111
- package/src/panels/i18n-panel.ts +10 -3
- package/src/panels/imports-panel.ts +23 -47
- package/src/panels/jump-bar.ts +48 -29
- package/src/panels/layers-panel.ts +97 -74
- package/src/panels/left-panel.ts +3 -3
- package/src/panels/pane-context.ts +31 -22
- package/src/panels/pane-grid.ts +49 -20
- package/src/panels/panel-registry.ts +22 -37
- package/src/panels/properties-panel.ts +175 -121
- package/src/panels/quick-search.ts +53 -31
- package/src/panels/right-panel.ts +3 -3
- package/src/panels/seo-modal.ts +13 -17
- package/src/panels/settings-menu.ts +15 -15
- package/src/panels/signals-panel.ts +153 -131
- package/src/panels/statement-editor.ts +230 -140
- package/src/panels/style-panel.ts +254 -216
- package/src/panels/style-utils.ts +114 -51
- package/src/panels/stylebook-doc.ts +57 -54
- package/src/panels/stylebook-layers-panel.ts +9 -9
- package/src/panels/stylebook-panel.ts +13 -17
- package/src/panels/tab-drop.ts +27 -11
- package/src/panels/tab-strip.ts +36 -26
- package/src/platform-errors.ts +57 -43
- package/src/platform.ts +58 -30
- package/src/platforms/cloud.ts +345 -175
- package/src/platforms/default-platform.ts +10 -4
- package/src/platforms/devserver.ts +174 -127
- package/src/platforms/read-batcher.ts +16 -8
- package/src/project-list.ts +2 -1
- package/src/publish/deploy-checklist.ts +8 -2
- package/src/publish/pages-service.ts +28 -13
- package/src/publish/publish-commands.ts +5 -4
- package/src/publish/publish-panel.ts +10 -6
- package/src/recent-projects.ts +15 -8
- package/src/resize-edges.ts +26 -36
- package/src/services/a11y-report.ts +26 -19
- package/src/services/agent-seed.ts +23 -11
- package/src/services/ai-ask.ts +9 -12
- package/src/services/ai-command-tools.ts +68 -62
- package/src/services/ai-import-tools.ts +80 -67
- package/src/services/ai-models.ts +17 -13
- package/src/services/ai-project-tools.ts +68 -32
- package/src/services/ai-session-store.ts +19 -10
- package/src/services/ai-system-prompt.ts +46 -20
- package/src/services/ai-tools.ts +71 -27
- package/src/services/ai-write-report.ts +20 -12
- package/src/services/ai-writes.ts +4 -4
- package/src/services/automation.ts +58 -31
- package/src/services/cem-export.ts +149 -58
- package/src/services/clock.ts +6 -1
- package/src/services/code-services.ts +37 -31
- package/src/services/context-manager.ts +14 -10
- package/src/services/context-resolver.ts +20 -8
- package/src/services/data-service.ts +19 -15
- package/src/services/directory-picker.ts +18 -12
- package/src/services/document-assistant.ts +39 -19
- package/src/services/gated-registry.ts +10 -6
- package/src/services/harness/chat-reducer.ts +23 -1
- package/src/services/import-client.ts +91 -38
- package/src/services/import-seed.ts +8 -2
- package/src/services/jx-validate.ts +28 -31
- package/src/services/live-preview.ts +0 -0
- package/src/services/live-surfaces.ts +6 -3
- package/src/services/model-uri.ts +10 -2
- package/src/services/module-preloads.ts +12 -8
- package/src/services/monaco-buffer.ts +43 -24
- package/src/services/monaco-lazy.ts +7 -8
- package/src/services/monaco-setup.ts +23 -16
- package/src/services/notify.ts +44 -17
- package/src/services/popover-report.ts +25 -10
- package/src/services/preview-eval.ts +20 -8
- package/src/services/profile.ts +13 -6
- package/src/services/project-path.ts +13 -10
- package/src/services/references.ts +0 -0
- package/src/services/render-critic.ts +8 -7
- package/src/services/settings/kernel.ts +13 -4
- package/src/services/settings/write-queue.ts +9 -9
- package/src/services/token-lint.ts +12 -10
- package/src/services/tool-executor.ts +17 -5
- package/src/services/tool-outcomes.ts +44 -24
- package/src/services/trusted-types.ts +24 -7
- package/src/settings/contexts-section.ts +11 -8
- package/src/settings/contributed-section.ts +79 -60
- package/src/settings/css-vars-editor.ts +37 -16
- package/src/settings/defs-editor.ts +38 -35
- package/src/settings/extension-rows.ts +16 -8
- package/src/settings/extension-sections.ts +23 -13
- package/src/settings/extensions-section.ts +4 -1
- package/src/settings/general-settings.ts +11 -8
- package/src/settings/locales-section.ts +20 -12
- package/src/settings/preferences-dialog.ts +9 -6
- package/src/settings/preferences-keymap.ts +7 -5
- package/src/settings/preferences-sections.ts +11 -5
- package/src/settings/project-sections.ts +1 -1
- package/src/settings/schema-field-ui.ts +9 -0
- package/src/settings/settings-document.ts +5 -5
- package/src/shell/tree.ts +6 -5
- package/src/shell.ts +104 -81
- package/src/site-context.ts +37 -22
- package/src/state.ts +41 -49
- package/src/store.ts +54 -34
- package/src/studio.ts +39 -77
- package/src/style/live-preview.ts +1 -1
- package/src/style/project-styles.ts +6 -7
- package/src/style/token-ref.ts +5 -4
- package/src/surfaces/about.ts +18 -19
- package/src/surfaces/add-repo.ts +17 -19
- package/src/surfaces/ai-chat.ts +31 -36
- package/src/surfaces/ai-credentials-form.ts +6 -16
- package/src/surfaces/ai-managed-connect.ts +3 -4
- package/src/surfaces/ai-model-picker.ts +3 -5
- package/src/surfaces/block-action-bar.ts +22 -11
- package/src/surfaces/boot-failure.ts +4 -5
- package/src/surfaces/bottom-dock.ts +9 -18
- package/src/surfaces/canvas-stage.ts +12 -11
- package/src/surfaces/cf-account-picker.ts +17 -18
- package/src/surfaces/commandbar.ts +14 -9
- package/src/surfaces/convert-repeater.ts +17 -19
- package/src/surfaces/data-actions.ts +9 -7
- package/src/surfaces/dialog.ts +26 -28
- package/src/surfaces/diff-toolbar.ts +9 -7
- package/src/surfaces/doc-header.ts +10 -19
- package/src/surfaces/empty-state.ts +7 -10
- package/src/surfaces/entry-editor.ts +14 -11
- package/src/surfaces/expression-editor.ts +11 -25
- package/src/surfaces/files-panel.ts +27 -14
- package/src/surfaces/formula-palette.ts +4 -5
- package/src/surfaces/git-panel.ts +7 -15
- package/src/surfaces/github-auth.ts +16 -20
- package/src/surfaces/github-publish.ts +17 -22
- package/src/surfaces/grid-cell.ts +30 -31
- package/src/surfaces/grid-open.ts +10 -14
- package/src/surfaces/grid-panel.ts +13 -9
- package/src/surfaces/grid-replace.ts +13 -13
- package/src/surfaces/grid-views.ts +15 -18
- package/src/surfaces/inspector-dock.ts +13 -12
- package/src/surfaces/jump-bar.ts +5 -6
- package/src/surfaces/jxsuite-update.ts +16 -22
- package/src/surfaces/library-pane.ts +25 -20
- package/src/surfaces/logic-panel.ts +17 -30
- package/src/surfaces/logic-workspace.ts +13 -15
- package/src/surfaces/media-browser.ts +11 -10
- package/src/surfaces/media-field.ts +4 -5
- package/src/surfaces/media-pane.ts +8 -7
- package/src/surfaces/menu.ts +29 -23
- package/src/surfaces/navigator-dock.ts +11 -12
- package/src/surfaces/new-project.ts +27 -26
- package/src/surfaces/pane-context.ts +20 -25
- package/src/surfaces/pane-grid.ts +15 -10
- package/src/surfaces/panel-activity.ts +5 -6
- package/src/surfaces/panel-data.ts +3 -4
- package/src/surfaces/panel-deploy-checklist.ts +5 -6
- package/src/surfaces/panel-elements.ts +5 -7
- package/src/surfaces/panel-i18n.ts +5 -7
- package/src/surfaces/panel-imports.ts +6 -13
- package/src/surfaces/panel-outline.ts +25 -19
- package/src/surfaces/panel-page.ts +11 -18
- package/src/surfaces/panel-problems.ts +5 -7
- package/src/surfaces/panel-signals.ts +20 -34
- package/src/surfaces/panel-stylebook-layers.ts +5 -8
- package/src/surfaces/preferences.ts +21 -11
- package/src/surfaces/progress-modal.ts +15 -9
- package/src/surfaces/properties-panel.json +1 -1
- package/src/surfaces/properties-panel.ts +20 -42
- package/src/surfaces/publish.ts +18 -18
- package/src/surfaces/push-plan.ts +7 -8
- package/src/surfaces/rail.json +126 -73
- package/src/surfaces/rail.ts +38 -12
- package/src/surfaces/reference-field.ts +11 -15
- package/src/surfaces/schema-builder.ts +16 -22
- package/src/surfaces/schema-form.ts +15 -25
- package/src/surfaces/secret-field.ts +9 -6
- package/src/surfaces/seo.ts +21 -15
- package/src/surfaces/settings-contexts.ts +9 -7
- package/src/surfaces/settings-contributed.ts +14 -10
- package/src/surfaces/settings-css-vars.ts +5 -12
- package/src/surfaces/settings-defs.json +2 -2
- package/src/surfaces/settings-defs.ts +17 -21
- package/src/surfaces/settings-deploy.ts +8 -15
- package/src/surfaces/settings-extensions.ts +5 -6
- package/src/surfaces/settings-head.ts +33 -39
- package/src/surfaces/settings-locales.ts +8 -20
- package/src/surfaces/settings-overview.ts +5 -6
- package/src/surfaces/settings-packages.ts +8 -7
- package/src/surfaces/settings-pane.ts +9 -18
- package/src/surfaces/settings-rawjson.ts +5 -6
- package/src/surfaces/shell.ts +1 -2
- package/src/surfaces/slash-menu.ts +19 -9
- package/src/surfaces/statements.ts +13 -18
- package/src/surfaces/statusbar.ts +17 -14
- package/src/surfaces/style-panel.ts +18 -31
- package/src/surfaces/stylebook-chrome.ts +3 -5
- package/src/surfaces/tab-strip.ts +14 -13
- package/src/surfaces/target-line.ts +6 -7
- package/src/surfaces/welcome.ts +5 -7
- package/src/tabs/patch-ops.ts +4 -3
- package/src/tabs/project-config.ts +32 -21
- package/src/tabs/selection.ts +36 -8
- package/src/tabs/tab.ts +52 -41
- package/src/tabs/transact.ts +98 -53
- package/src/tabs/typing.ts +31 -0
- package/src/types.ts +32 -17
- package/src/ui/ai-credentials-form.ts +10 -13
- package/src/ui/ai-model-picker.ts +3 -3
- package/src/ui/cf-account-picker.ts +7 -9
- package/src/ui/color-selector.ts +9 -5
- package/src/ui/dynamic-slot.ts +7 -8
- package/src/ui/expression-editor.ts +112 -105
- package/src/ui/form-controls.ts +57 -48
- package/src/ui/formula-catalog.ts +239 -230
- package/src/ui/formula-chips.ts +33 -18
- package/src/ui/layers.ts +44 -31
- package/src/ui/media-picker.ts +18 -9
- package/src/ui/popover-surface.ts +20 -12
- package/src/ui/progress-modal.ts +13 -8
- package/src/ui/regions.ts +7 -6
- package/src/ui/schema-form.ts +113 -70
- package/src/ui/surface.ts +71 -8
- package/src/ui/timing.ts +9 -0
- package/src/ui/value-source.ts +44 -31
- package/src/ui/virtual-window.ts +3 -2
- package/src/utils/base64.ts +3 -1
- package/src/utils/edit-display.ts +103 -74
- package/src/utils/element-selectors.ts +3 -2
- package/src/utils/google-fonts.ts +15 -14
- package/src/utils/inherited-style.ts +18 -20
- package/src/utils/link-target.ts +1 -1
- package/src/utils/preview-format.ts +25 -3
- package/src/utils/strip-events.ts +49 -22
- package/src/utils/studio-utils.ts +29 -14
- package/src/view.ts +2 -3
- package/src/workspace/pane-derive.ts +10 -12
- package/src/workspace/session.ts +53 -43
- package/src/workspace/workspace.ts +47 -36
- package/dist/chunks/2020-nkxms0ay.js +0 -4
- package/dist/chunks/adapter-m948ab5f.js +0 -4
- package/dist/chunks/cf-account-picker-n8hr38v7.js +0 -4
- package/dist/chunks/cf-settings-356xdtne.js +0 -4
- package/dist/chunks/color-area-jqhna8zy.js +0 -4
- package/dist/chunks/color-field-embq5ctg.js +0 -4
- package/dist/chunks/color-fpezvnkt.js +0 -4
- package/dist/chunks/color-slider-1qmw7wqy.js +0 -4
- package/dist/chunks/combobox-773hdzyj.js +0 -4
- package/dist/chunks/components-yk3t844e.js +0 -4
- package/dist/chunks/content-source-bawmyc09.js +0 -4
- package/dist/chunks/convert-to-repeater-7wns8kf1.js +0 -4
- package/dist/chunks/dialog-mtm9fq5t.js +0 -4
- package/dist/chunks/editor-6sc8nacq.js +0 -4
- package/dist/chunks/entry-commands-8ay9fh81.js +0 -4
- package/dist/chunks/extension-sections-na7rj3nr.js +0 -4
- package/dist/chunks/file-ops-gye0qw56.js +0 -4
- package/dist/chunks/files-dmc2xvcq.js +0 -4
- package/dist/chunks/format-host-t76b53f8.js +0 -4
- package/dist/chunks/fs-events-cg4tpz06.js +0 -4
- package/dist/chunks/git-panel-yef7bshy.js +0 -4
- package/dist/chunks/grid-view-7tt4bxw1.js +0 -51
- package/dist/chunks/icons-qbh8akb1.js +0 -4
- package/dist/chunks/iframe-entry-f7mqjwpm.js +0 -5
- package/dist/chunks/iframe-entry-haw7jkvz.js +0 -5
- package/dist/chunks/iframe-entry-z6qrytv3.js +0 -5
- package/dist/chunks/iframe-host-tmz30gfp.js +0 -4
- package/dist/chunks/index-nag78a9h.js +0 -4
- package/dist/chunks/jsonMode-zhwsprqk.js +0 -13
- package/dist/chunks/jx-validate-3gbp5nkn.js +0 -4
- package/dist/chunks/layers-fvz99859.js +0 -4
- package/dist/chunks/layers-panel-gchmbf9p.js +0 -4
- package/dist/chunks/listbox-s8fkmnq8.js +0 -4
- package/dist/chunks/lit-html-9agdspkt.js +0 -4
- package/dist/chunks/media-picker-rhjvyy00.js +0 -4
- package/dist/chunks/menu-2e4y9j7b.js +0 -4
- package/dist/chunks/menu-37d07z9m.js +0 -4
- package/dist/chunks/monaco-binding-2jnhjjvr.js +0 -4
- package/dist/chunks/monaco-buffer-rp21359g.js +0 -4
- package/dist/chunks/monaco-setup-vhh7gayr.js +0 -4
- package/dist/chunks/notify-h3www560.js +0 -4
- package/dist/chunks/number-field-gw7sq8rn.js +0 -4
- package/dist/chunks/parse-897fvqah.js +0 -4
- package/dist/chunks/platform-hz34wcd7.js +0 -4
- package/dist/chunks/popover-8htra4er.js +0 -4
- package/dist/chunks/publish-panel-exsmjzyj.js +0 -4
- package/dist/chunks/quick-search-pgaqeh0m.js +0 -4
- package/dist/chunks/references-2cgdxnb8.js +0 -4
- package/dist/chunks/right-panel-jf856w5w.js +0 -4
- package/dist/chunks/section-registry-jnf8r5gy.js +0 -4
- package/dist/chunks/select-n3v7gwas.js +0 -4
- package/dist/chunks/split-pff8f3ze.js +0 -4
- package/dist/chunks/studio-0f55h9ye.js +0 -5
- package/dist/chunks/studio-0sqdhnew.js +0 -12
- package/dist/chunks/studio-19x1c75w.js +0 -5
- package/dist/chunks/studio-2sqcndak.js +0 -5
- package/dist/chunks/studio-3aey7dd3.js +0 -5
- package/dist/chunks/studio-3bpdkq2s.js +0 -5
- package/dist/chunks/studio-47y6fbpf.js +0 -5
- package/dist/chunks/studio-4m3826v2.js +0 -5
- package/dist/chunks/studio-4nx2dj1g.js +0 -4
- package/dist/chunks/studio-4xv5s47r.js +0 -9
- package/dist/chunks/studio-5g4t8v6w.js +0 -5
- package/dist/chunks/studio-5py436sf.js +0 -5
- package/dist/chunks/studio-77kt594t.js +0 -5
- package/dist/chunks/studio-8f87n763.js +0 -10
- package/dist/chunks/studio-8mb00b84.js +0 -5
- package/dist/chunks/studio-8p51gq2h.js +0 -6
- package/dist/chunks/studio-954ds834.js +0 -5
- package/dist/chunks/studio-9ft45c83.js +0 -9
- package/dist/chunks/studio-a2138x5k.js +0 -7
- package/dist/chunks/studio-a9yzstqj.js +0 -5
- package/dist/chunks/studio-acdksxx6.js +0 -5
- package/dist/chunks/studio-ar8jcf2y.js +0 -5
- package/dist/chunks/studio-bmn4mn9j.js +0 -7
- package/dist/chunks/studio-e7xxa0sj.js +0 -5
- package/dist/chunks/studio-ecaz25vk.js +0 -5
- package/dist/chunks/studio-ery42sqr.js +0 -4
- package/dist/chunks/studio-fzdywr6p.js +0 -9
- package/dist/chunks/studio-g5fmf0c1.js +0 -5
- package/dist/chunks/studio-g7nse7zb.js +0 -5
- package/dist/chunks/studio-geq1ea6k.js +0 -14
- package/dist/chunks/studio-ghkb32r8.js +0 -5
- package/dist/chunks/studio-ghrhy2y7.js +0 -5
- package/dist/chunks/studio-grawhey1.js +0 -5
- package/dist/chunks/studio-h0xgswew.js +0 -5
- package/dist/chunks/studio-h9c4p2tx.js +0 -5
- package/dist/chunks/studio-jyzj5cxs.js +0 -5
- package/dist/chunks/studio-mgx8yhnz.js +0 -64
- package/dist/chunks/studio-mpb04y1d.js +0 -6
- package/dist/chunks/studio-n17mty64.js +0 -5
- package/dist/chunks/studio-nwh2eqsk.js +0 -6
- package/dist/chunks/studio-q1h883bt.js +0 -16
- package/dist/chunks/studio-q4tv82h7.js +0 -9
- package/dist/chunks/studio-qpqa7vk3.js +0 -5
- package/dist/chunks/studio-qqz8e5gk.js +0 -5
- package/dist/chunks/studio-qvasen3f.js +0 -5
- package/dist/chunks/studio-rggdb3hm.js +0 -5
- package/dist/chunks/studio-sghy936h.js +0 -4
- package/dist/chunks/studio-skprc6ef.js +0 -5
- package/dist/chunks/studio-tt2nactf.js +0 -5
- package/dist/chunks/studio-tyasmc39.js +0 -5
- package/dist/chunks/studio-vk9ezads.js +0 -5
- package/dist/chunks/studio-vzacdfsc.js +0 -4
- package/dist/chunks/studio-w4c0xmrw.js +0 -5
- package/dist/chunks/studio-wfjqhhbk.js +0 -5
- package/dist/chunks/studio-wgh5kxpj.js +0 -5
- package/dist/chunks/studio-xasj0796.js +0 -5
- package/dist/chunks/studio-y78s8r2n.js +0 -5
- package/dist/chunks/studio-z8w183sh.js +0 -5
- package/dist/chunks/studio-zscd9ty4.js +0 -928
- package/dist/chunks/studio-zxp13sss.js +0 -7
- package/dist/chunks/studio-zygnmm01.js +0 -5
- package/dist/chunks/swatch-group-8qh9a3bm.js +0 -4
- package/dist/chunks/tabs-jwthg40w.js +0 -4
- package/dist/chunks/textfield-spy3hc77.js +0 -4
- package/dist/chunks/toast-4d35zd64.js +0 -4
- package/dist/chunks/toast-host-8sjmfed3.js +0 -4
- package/dist/chunks/tooltip-fd6g9xy3.js +0 -4
- package/dist/chunks/tree-h19v1jfz.js +0 -4
- package/dist/chunks/tsMode-gr0m4dzr.js +0 -14
- package/dist/chunks/workspace-m15qtcqp.js +0 -4
- package/dist/chunks/ws-client-nf61frr1.js +0 -4
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
* marks with `localStorage["jx-canvas-debug"] = "1"`.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
+
import { isFunction } from "@jxsuite/schema/guards";
|
|
16
|
+
import type { JsonValue } from "@jxsuite/schema/types";
|
|
17
|
+
|
|
15
18
|
/** Rolling window per span. Bounded so a long session cannot grow the sample arrays. */
|
|
16
19
|
const SAMPLE_LIMIT = 128;
|
|
17
20
|
|
|
@@ -106,7 +109,12 @@ export const canvasPerf: CanvasPerf = {
|
|
|
106
109
|
timings: {},
|
|
107
110
|
};
|
|
108
111
|
|
|
109
|
-
|
|
112
|
+
declare global {
|
|
113
|
+
/** The live counters, for inspection from a devtools console or a profiling harness. */
|
|
114
|
+
var __jxCanvasPerf: CanvasPerf | undefined;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
globalThis.__jxCanvasPerf = canvasPerf;
|
|
110
118
|
|
|
111
119
|
/** Retained duration samples per span, parallel to `canvasPerf.timings`. */
|
|
112
120
|
const samples = new Map<string, number[]>();
|
|
@@ -121,13 +129,11 @@ function debugEnabled() {
|
|
|
121
129
|
|
|
122
130
|
/** Monotonic clock, or 0 when the environment has no `performance` (durations then read as 0). */
|
|
123
131
|
function now(): number {
|
|
124
|
-
return typeof performance !== "undefined" &&
|
|
125
|
-
? performance.now()
|
|
126
|
-
: 0;
|
|
132
|
+
return typeof performance !== "undefined" && isFunction(performance.now) ? performance.now() : 0;
|
|
127
133
|
}
|
|
128
134
|
|
|
129
135
|
/** Log a canvas perf event when debug mode is on. */
|
|
130
|
-
export function perfLog(event: string, detail?:
|
|
136
|
+
export function perfLog(event: string, detail?: JsonValue) {
|
|
131
137
|
if (debugEnabled()) {
|
|
132
138
|
console.debug(`[jx-canvas] ${event}`, detail ?? "");
|
|
133
139
|
}
|
|
@@ -4,13 +4,17 @@
|
|
|
4
4
|
* dispatches to manage/settings/source/edit/design/preview rendering paths.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { render
|
|
7
|
+
import { render, nothing } from "lit-html";
|
|
8
8
|
import type * as monaco from "monaco-editor";
|
|
9
9
|
import type { WireDiffMarks } from "./iframe-protocol";
|
|
10
10
|
import type * as Y from "yjs";
|
|
11
11
|
import { loadedMonaco, loadMonaco, mountStillWanted } from "../services/monaco-lazy";
|
|
12
12
|
|
|
13
|
-
import { getNodeAtPath
|
|
13
|
+
import { getNodeAtPath } from "@jxsuite/schema/doc-ops";
|
|
14
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
15
|
+
import { errorMessage } from "@jxsuite/schema/parse";
|
|
16
|
+
import { stageOf } from "./surface-registry";
|
|
17
|
+
import { updateCanvas } from "../store";
|
|
14
18
|
import { activeTab, tabIsLive, workspace } from "../workspace/workspace";
|
|
15
19
|
import {
|
|
16
20
|
activeMediaOfPane,
|
|
@@ -40,8 +44,6 @@ import { canRenderComparison } from "../panels/git-diff-open";
|
|
|
40
44
|
import { releaseStageScrollbar, trackStageScrollbar } from "./stage-scrollbar";
|
|
41
45
|
import { renderDiffToolbar, setDiffRepaint, setDiffToolbarHost } from "./diff-toolbar";
|
|
42
46
|
import { attachCursorStyles } from "../collab/monaco-cursors";
|
|
43
|
-
import type { AwarenessLike } from "../collab/monaco-cursors";
|
|
44
|
-
import type { BindingAwareness } from "../collab/monaco-binding";
|
|
45
47
|
import { monacoTheme, shell } from "../shell";
|
|
46
48
|
import { parseSourceForPath } from "../files/file-ops";
|
|
47
49
|
import { serializeDocument } from "../files/serialize-document";
|
|
@@ -63,6 +65,7 @@ import {
|
|
|
63
65
|
bufferWrites,
|
|
64
66
|
commitBufferWrites,
|
|
65
67
|
} from "../services/monaco-buffer";
|
|
68
|
+
import { noteTyping } from "../tabs/typing";
|
|
66
69
|
import { diffModelUrisFor, modelUriFor, monacoLangForPath } from "../services/model-uri";
|
|
67
70
|
import { renderWelcome } from "../surfaces/welcome";
|
|
68
71
|
import { emptyState } from "../surfaces/empty-state";
|
|
@@ -411,13 +414,15 @@ async function createSourceCollabBinding(
|
|
|
411
414
|
): Promise<() => void> {
|
|
412
415
|
const { bindMonacoToYText } = await import("../collab/monaco-binding");
|
|
413
416
|
const unbind = bindMonacoToYText({
|
|
414
|
-
awareness: ctx.awareness
|
|
417
|
+
awareness: ctx.awareness,
|
|
415
418
|
editors: [editor],
|
|
416
419
|
model,
|
|
417
420
|
origin: ctx.localOrigin,
|
|
421
|
+
/* SAFETY: collabSourceContext's `text` is `collab.sourceText(handle.doc)`, the session's shared
|
|
422
|
+
source Y.Text, attached to the handle's Y.Doc as the binding requires. */
|
|
418
423
|
text: ctx.text as Y.Text,
|
|
419
424
|
});
|
|
420
|
-
const detachStyles = attachCursorStyles(ctx.awareness
|
|
425
|
+
const detachStyles = attachCursorStyles(ctx.awareness, document);
|
|
421
426
|
return () => {
|
|
422
427
|
detachStyles();
|
|
423
428
|
unbind();
|
|
@@ -557,7 +562,7 @@ function sideMarks(
|
|
|
557
562
|
*/
|
|
558
563
|
async function mountDiffEditor(
|
|
559
564
|
surface: CanvasSurface,
|
|
560
|
-
container:
|
|
565
|
+
container: HTMLElement,
|
|
561
566
|
state: GitDiffState,
|
|
562
567
|
): Promise<void> {
|
|
563
568
|
const { paneId } = surface;
|
|
@@ -588,17 +593,20 @@ async function mountDiffEditor(
|
|
|
588
593
|
lang,
|
|
589
594
|
monaco.Uri.parse(uris.work),
|
|
590
595
|
);
|
|
591
|
-
const editor = monaco.editor.createDiffEditor(
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
596
|
+
const editor: NonNullable<CanvasSurface["monacoDiffEditor"]> = monaco.editor.createDiffEditor(
|
|
597
|
+
container,
|
|
598
|
+
{
|
|
599
|
+
automaticLayout: true,
|
|
600
|
+
fontFamily: "'JetBrains Mono', 'SF Mono', 'Fira Code', 'Consolas', monospace",
|
|
601
|
+
fontSize: 12,
|
|
602
|
+
minimap: { enabled: false },
|
|
603
|
+
originalEditable: false,
|
|
604
|
+
readOnly: true,
|
|
605
|
+
renderSideBySide: true,
|
|
606
|
+
scrollBeyondLastLine: false,
|
|
607
|
+
theme: monacoTheme(),
|
|
608
|
+
},
|
|
609
|
+
);
|
|
602
610
|
editor.setModel({ modified, original });
|
|
603
611
|
editor._diffKey = key;
|
|
604
612
|
surface.monacoDiffEditor = editor;
|
|
@@ -662,7 +670,7 @@ function resetCanvasView(surface: CanvasSurface) {
|
|
|
662
670
|
async function mountSourceEditor(
|
|
663
671
|
tab: Tab,
|
|
664
672
|
surface: CanvasSurface,
|
|
665
|
-
editorContainer:
|
|
673
|
+
editorContainer: HTMLElement,
|
|
666
674
|
filePath: string,
|
|
667
675
|
lang: string,
|
|
668
676
|
): Promise<void> {
|
|
@@ -756,7 +764,7 @@ async function mountSourceEditor(
|
|
|
756
764
|
// Typed as the surface `view` declares (the editor plus `_ignoreNextChange` / `_writes`), because
|
|
757
765
|
// The instance is HELD here now rather than re-read off `view.monacoEditor` in every callback.
|
|
758
766
|
const sourceEditor: NonNullable<typeof surface.monacoEditor> = monaco.editor.create(
|
|
759
|
-
editorContainer
|
|
767
|
+
editorContainer,
|
|
760
768
|
{
|
|
761
769
|
automaticLayout: true,
|
|
762
770
|
fontFamily: "'JetBrains Mono', 'SF Mono', 'Fira Code', 'Consolas', monospace",
|
|
@@ -800,8 +808,10 @@ async function mountSourceEditor(
|
|
|
800
808
|
return;
|
|
801
809
|
}
|
|
802
810
|
// A keystroke: the buffer is ahead of the document until the commit lands, and the text is the
|
|
803
|
-
// User's own — which is the narrower fact the close and quit gates read.
|
|
811
|
+
// User's own — which is the narrower fact the close and quit gates read. Noted for Save too, which
|
|
812
|
+
// Must not read disabled over text the commit has not parsed yet.
|
|
804
813
|
writes.markTyped();
|
|
814
|
+
noteTyping(tab.id);
|
|
805
815
|
writes.arm(BUFFER_COMMIT, 600, async () => {
|
|
806
816
|
/* `tab` is the tab this editor was MOUNTED for, captured above and never re-read. It used to
|
|
807
817
|
be `activeTab.value` — whatever was focused when the timer fired — which is the same
|
|
@@ -829,7 +839,7 @@ async function mountSourceEditor(
|
|
|
829
839
|
if (!tabIsLive(tab)) {
|
|
830
840
|
return;
|
|
831
841
|
}
|
|
832
|
-
tab.doc.document = document
|
|
842
|
+
tab.doc.document = document;
|
|
833
843
|
tab.doc.content.frontmatter = frontmatter;
|
|
834
844
|
tab.doc.dirty = true;
|
|
835
845
|
writes.markSettled();
|
|
@@ -842,6 +852,8 @@ async function mountSourceEditor(
|
|
|
842
852
|
// The buffer's text is the author's own layout now — the objects they opened up or
|
|
843
853
|
// Closed, the blank lines they left — so it is what the next save preserves.
|
|
844
854
|
const parsed = parseJsonDocument(sourceEditor.getValue());
|
|
855
|
+
/* SAFETY: a JSON source tab holds a Jx document, whose schema makes the top-level object
|
|
856
|
+
parseJsonDocument returns a node; text that does not parse throws into the catch. */
|
|
845
857
|
tab.doc.document = parsed.document as JxMutableNode;
|
|
846
858
|
tab.doc.layout = parsed.layout;
|
|
847
859
|
tab.doc.dirty = true;
|
|
@@ -927,7 +939,7 @@ function renderDerivationNotice(
|
|
|
927
939
|
surface.wrap.style.display = "block";
|
|
928
940
|
const registry = activeRegistry();
|
|
929
941
|
const pin = registry?.get("pane.pin");
|
|
930
|
-
|
|
942
|
+
render(
|
|
931
943
|
emptyState(surface.wrap, {
|
|
932
944
|
message,
|
|
933
945
|
...(held && { detail: `${tabLabel(held)} is still open here.` }),
|
|
@@ -951,7 +963,7 @@ function renderCanvasImpl(surface: CanvasSurface) {
|
|
|
951
963
|
/* Every read below is scoped to ONE pane. The stage, the panels it mounted and the mode it draws
|
|
952
964
|
are the surface's; the document is whatever tab that pane is showing, which is `activeTab` only
|
|
953
965
|
when the pane is the focused one. */
|
|
954
|
-
const canvasWrap = surface
|
|
966
|
+
const canvasWrap = stageOf(surface);
|
|
955
967
|
/* A pane with no stage renders nothing — it is not an error and it is not a fallback to some
|
|
956
968
|
other pane's stage. Two schedulers can name a stage-less pane: a frame queued for a pane that
|
|
957
969
|
lost the shell's single stage between the schedule and the rAF, and `escalateToFullRender` on
|
|
@@ -1009,6 +1021,8 @@ function renderCanvasImpl(surface: CanvasSurface) {
|
|
|
1009
1021
|
);
|
|
1010
1022
|
return;
|
|
1011
1023
|
}
|
|
1024
|
+
/* SAFETY: `initCanvasRender` runs at studio boot (studio.ts), before the shell schedules the first
|
|
1025
|
+
pane render, and nothing resets `_ctx` afterwards. */
|
|
1012
1026
|
const ctx = _ctx as CanvasRenderCtx;
|
|
1013
1027
|
const S = {
|
|
1014
1028
|
document: tab.doc.document,
|
|
@@ -1190,8 +1204,8 @@ function renderCanvasImpl(surface: CanvasSurface) {
|
|
|
1190
1204
|
curFilter !== surface.prevStylebookFilter ||
|
|
1191
1205
|
curCustomized !== surface.prevStylebookCustomizedOnly;
|
|
1192
1206
|
if (!filterChanged) {
|
|
1193
|
-
const style = transposeStylebookStyle(getEffectiveStyle(tab.doc.document
|
|
1194
|
-
if (postStyleUpdateToStylebookHosts(style
|
|
1207
|
+
const style = transposeStylebookStyle(getEffectiveStyle(tab.doc.document.style));
|
|
1208
|
+
if (postStyleUpdateToStylebookHosts(style) > 0) {
|
|
1195
1209
|
return;
|
|
1196
1210
|
}
|
|
1197
1211
|
}
|
|
@@ -1258,7 +1272,7 @@ function renderCanvasImpl(surface: CanvasSurface) {
|
|
|
1258
1272
|
leaving, and lit's part, which the empty-state and welcome paths own. */
|
|
1259
1273
|
releaseCanvasHosts(canvasWrap);
|
|
1260
1274
|
detachCanvasStage(surface);
|
|
1261
|
-
|
|
1275
|
+
render(nothing, canvasWrap);
|
|
1262
1276
|
surface.panzoomWrap = null;
|
|
1263
1277
|
// Reset inline style overrides from other modes
|
|
1264
1278
|
canvasWrap.style.padding = "";
|
|
@@ -1462,7 +1476,7 @@ function renderCanvasImpl(surface: CanvasSurface) {
|
|
|
1462
1476
|
decided rather than the opener: a comparison reaches this branch from three doors (the panel,
|
|
1463
1477
|
a Diff lens, the Editor axis) and only this one sees every arrival. Forcing it here also
|
|
1464
1478
|
leaves `diffView` alone, so a document opened after a `.css` still comes up Visual. */
|
|
1465
|
-
const renderable = canRenderComparison(gitDiffState.filePath
|
|
1479
|
+
const renderable = canRenderComparison(gitDiffState.filePath);
|
|
1466
1480
|
if (diffShowsCode(surface.paneId, renderable)) {
|
|
1467
1481
|
/* A null map is how the toolbar learns there is no visual half to offer: it draws Code as a
|
|
1468
1482
|
static label rather than as half of a choice, and reports the line marks instead of a node
|
|
@@ -1515,12 +1529,15 @@ function renderCanvasImpl(surface: CanvasSurface) {
|
|
|
1515
1529
|
|
|
1516
1530
|
/** @param {string} content */
|
|
1517
1531
|
const parseContent = (content: string): Promise<JxMutableNode> => {
|
|
1518
|
-
const fmtPath = gitDiffState.filePath
|
|
1532
|
+
const fmtPath = gitDiffState.filePath;
|
|
1519
1533
|
if (formatForPath(fmtPath)) {
|
|
1520
1534
|
return parseSourceForPath(fmtPath, content).then((r) => r.document);
|
|
1521
1535
|
}
|
|
1522
1536
|
return Promise.resolve().then(() => {
|
|
1523
1537
|
try {
|
|
1538
|
+
/* SAFETY: a side of a VISUAL comparison is a revision of a document the canvas renders
|
|
1539
|
+
(canRenderComparison chose this half), a JSON Jx document; unparseable text throws into
|
|
1540
|
+
the catch, which draws the failure instead. */
|
|
1524
1541
|
return JSON.parse(content) as JxMutableNode;
|
|
1525
1542
|
} catch {
|
|
1526
1543
|
return {
|
|
@@ -1633,8 +1650,8 @@ function renderCanvasImpl(surface: CanvasSurface) {
|
|
|
1633
1650
|
const entry = canvasPanelEntry(null, null, true);
|
|
1634
1651
|
// A component-definition doc (root tag is a custom element) is a fragment, not a page: it should
|
|
1635
1652
|
// Hug its content rather than have the column fill+stretch to the viewport (dead scroll space).
|
|
1636
|
-
const rootTag =
|
|
1637
|
-
const isComponentDoc =
|
|
1653
|
+
const rootTag = S.document.tagName;
|
|
1654
|
+
const isComponentDoc = isString(rootTag) && rootTag.includes("-");
|
|
1638
1655
|
const { featureToggles: editToggles } = S.ui;
|
|
1639
1656
|
/* The stage stacks when it carries the card: the band first, the page's scroller below it.
|
|
1640
1657
|
Set on every render rather than on the transition, because whether a document HAS a header
|
|
@@ -1677,6 +1694,8 @@ function renderCanvasImpl(surface: CanvasSurface) {
|
|
|
1677
1694
|
}
|
|
1678
1695
|
const editColumn = stageHost(surface, "edit-column");
|
|
1679
1696
|
const scroller = stageHost(surface, "edit-canvas");
|
|
1697
|
+
/* SAFETY: the edit stage view always draws its `edit-canvas` part, and this runs only once
|
|
1698
|
+
drawStage settled with that stage (the `!stage` return above). */
|
|
1680
1699
|
entry.panel.scrollContainer = scroller as HTMLElement;
|
|
1681
1700
|
/* The one mode whose stage SCROLLS under the zoom pod, so the one that tells the pane how
|
|
1682
1701
|
wide its scrollbar is. The pod floats in the pane's chrome layer, which spans the gutter
|
|
@@ -1730,7 +1749,7 @@ function renderCanvasImpl(surface: CanvasSurface) {
|
|
|
1730
1749
|
if (!hasMedia) {
|
|
1731
1750
|
// Single panel — use baseWidth if a custom one is defined, otherwise full-width
|
|
1732
1751
|
const effectiveMedia = getEffectiveMedia(S.document.$media);
|
|
1733
|
-
const hasBaseWidth = effectiveMedia
|
|
1752
|
+
const hasBaseWidth = effectiveMedia["--"];
|
|
1734
1753
|
const label = hasBaseWidth ? `${mediaDisplayName("--")} (${baseWidth}px)` : null;
|
|
1735
1754
|
const entry = canvasPanelEntry(
|
|
1736
1755
|
hasBaseWidth ? "base" : null,
|
|
@@ -1897,8 +1916,11 @@ function renderCanvasIntoPanel(
|
|
|
1897
1916
|
) {
|
|
1898
1917
|
const gen = passGen ?? surface.renderGeneration;
|
|
1899
1918
|
const tab = tabOfPane(surface.paneId);
|
|
1919
|
+
/* SAFETY: every caller is a renderCanvasImpl pass, which returns before drawing any panel when its
|
|
1920
|
+
pane has no tab, so without an override `tab` was non-null when this pass began; the git-diff
|
|
1921
|
+
callers always pass their override. */
|
|
1900
1922
|
const docToRender = docOverride || (tab?.doc.document as JxMutableNode);
|
|
1901
|
-
const canvas = panel
|
|
1923
|
+
const { canvas } = panel;
|
|
1902
1924
|
|
|
1903
1925
|
canvasPerf.panelRenders += 1;
|
|
1904
1926
|
panel.ready = false;
|
|
@@ -1944,14 +1966,16 @@ function renderCanvasIntoPanel(
|
|
|
1944
1966
|
// The canvas you are looking at; it says so itself.
|
|
1945
1967
|
}
|
|
1946
1968
|
})
|
|
1947
|
-
.catch(
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1969
|
+
.catch(reportMountFailure);
|
|
1970
|
+
}
|
|
1971
|
+
|
|
1972
|
+
/** A canvas mount that rejected, reported as a Problem with the failure's own message. */
|
|
1973
|
+
function reportMountFailure(cause: unknown): void {
|
|
1974
|
+
notify.error("The canvas could not be mounted.", {
|
|
1975
|
+
detail: errorMessage(cause),
|
|
1976
|
+
key: "canvas.mount",
|
|
1977
|
+
source: "Canvas",
|
|
1978
|
+
});
|
|
1955
1979
|
}
|
|
1956
1980
|
|
|
1957
1981
|
/*
|
|
@@ -2009,7 +2033,7 @@ function refuseUnresolvableToken(token: string): void {
|
|
|
2009
2033
|
throw new RangeError(`command "insert.data" needs an open document; no tab is active`);
|
|
2010
2034
|
}
|
|
2011
2035
|
const root = tokenRoot(token);
|
|
2012
|
-
const state =
|
|
2036
|
+
const state = tab.doc.document.state ?? {};
|
|
2013
2037
|
if (root === "state") {
|
|
2014
2038
|
const name = token.split(".")[1] ?? "";
|
|
2015
2039
|
if (!(name in state)) {
|
|
@@ -17,6 +17,7 @@ import { allCanvasSurfaces, stageContaining, surfaceForPane } from "./surface-re
|
|
|
17
17
|
import type { CanvasSurface } from "./surface-registry";
|
|
18
18
|
import type { PaneDerivation } from "../workspace/workspace";
|
|
19
19
|
import type { CanvasPanel } from "../types";
|
|
20
|
+
import type { UnboundCanvasPanel } from "./canvas-utils";
|
|
20
21
|
import type { Tab } from "../tabs/tab";
|
|
21
22
|
|
|
22
23
|
export {
|
|
@@ -149,11 +150,12 @@ export function panelHostingCanvas(
|
|
|
149
150
|
* answers with the FOCUSED pane's tab, which is a different document the moment the click is in a
|
|
150
151
|
* pane the keyboard is not in.
|
|
151
152
|
*
|
|
152
|
-
* @param {
|
|
153
|
+
* @param {UnboundCanvasPanel} panel
|
|
153
154
|
* @returns {Tab | null}
|
|
154
155
|
*/
|
|
155
|
-
export function tabOfMountedPanel(panel:
|
|
156
|
-
|
|
156
|
+
export function tabOfMountedPanel(panel: UnboundCanvasPanel): Tab | null {
|
|
157
|
+
// An unbound board (no canvas node yet) has no pane mounting it.
|
|
158
|
+
const canvasEl = panel.canvas;
|
|
157
159
|
const mounted = canvasEl ? panelHostingCanvas(canvasEl) : null;
|
|
158
160
|
return mounted ? tabOfPane(mounted.surface.paneId) : null;
|
|
159
161
|
}
|