@jxsuite/studio 4.1.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/data/elements-meta.json +5 -15
- package/data/html-meta.json +51 -6
- package/dist/chunks/{2020-n6tfwnda.js → 2020-g79n01v9.js} +14 -14
- package/dist/chunks/action-group-sp6tna8v.js +118 -0
- package/dist/chunks/adapter-nj7tnjfn.js +13 -0
- package/dist/chunks/cf-account-picker-qwkm9zrf.js +495 -0
- package/dist/chunks/cf-settings-71bv5zn9.js +20 -0
- package/dist/chunks/color-area-v17df7b8.js +154 -0
- package/dist/chunks/color-field-anwybnkn.js +208 -0
- package/dist/chunks/color-slider-44ez96fc.js +79 -0
- package/dist/chunks/color-xgg3kfw7.js +35 -0
- package/dist/chunks/combobox-5e7jev23.js +236 -0
- package/dist/chunks/components-vj72gqtq.js +20 -0
- package/dist/chunks/content-source-5mex4x1h.js +46 -0
- package/dist/chunks/convert-to-repeater-n64h8znc.js +639 -0
- package/dist/chunks/dialog-s890b918.js +85 -0
- package/dist/chunks/editor-3qhbg51x.js +35 -0
- package/dist/chunks/entry-commands-234hjnqw.js +42 -0
- package/dist/chunks/extension-sections-3hpcambp.js +651 -0
- package/dist/chunks/file-ops-8yhd83xr.js +47 -0
- package/dist/chunks/files-hnxqxtsg.js +72 -0
- package/dist/chunks/format-host-779sfp2n.js +40 -0
- package/dist/chunks/fs-events-b88z7g4h.js +18 -0
- package/dist/chunks/git-panel-xwj8fpab.js +49 -0
- package/dist/chunks/icons-yy10wk9r.js +402 -0
- package/dist/chunks/iframe-entry-15g3n6xv.js +114 -0
- package/dist/chunks/iframe-entry-b27vq81n.js +203 -0
- package/dist/chunks/iframe-entry-nbyxee1y.js +154 -0
- package/dist/chunks/iframe-host-syr0f9sb.js +115 -0
- package/dist/chunks/{index-wcnt3r9g.js → index-mdmyx6s2.js} +11 -11
- package/dist/chunks/index-n4j7qxyr.js +109 -0
- package/dist/chunks/{javascript-q8kpmfah.js → javascript-xvrfrpkb.js} +8 -9
- package/dist/chunks/{jsonMode-dkr040ga.js → jsonMode-tyx2kj6p.js} +526 -527
- package/dist/chunks/jx-validate-j0wxk72w.js +15 -0
- package/dist/chunks/layers-ff81wthn.js +30 -0
- package/dist/chunks/layers-panel-pnnghw12.js +40 -0
- package/dist/chunks/listbox-6v2ac08j.js +44 -0
- package/dist/chunks/lit-html-m244w9nh.js +17 -0
- package/dist/chunks/media-picker-cqhhxhhe.js +33 -0
- package/dist/chunks/menu-9p2w46gj.js +15 -0
- package/dist/chunks/menu-q99sy9rf.js +285 -0
- package/dist/chunks/{monaco-binding-rj6xpx9y.js → monaco-binding-sw6en4dw.js} +12 -15
- package/dist/chunks/monaco-buffer-bhy3hb6m.js +24 -0
- package/dist/chunks/{monaco-setup-vx9bhp1d.js → monaco-setup-8r62fj6y.js} +27 -37
- package/dist/chunks/notify-628t0anh.js +21 -0
- package/dist/chunks/number-field-5cndyft8.js +72 -0
- package/dist/chunks/parse-0zx14y15.js +10 -0
- package/dist/chunks/platform-ts9cg1a4.js +15 -0
- package/dist/chunks/popover-47z3ytva.js +25 -0
- package/dist/chunks/publish-panel-5zt840sy.js +27 -0
- package/dist/chunks/quick-search-3748564r.js +45 -0
- package/dist/chunks/references-qvvxej7h.js +26 -0
- package/dist/chunks/right-panel-eccz92qt.js +45 -0
- package/dist/chunks/section-registry-5pq32t0q.js +25 -0
- package/dist/chunks/select-2r16ez41.js +49 -0
- package/dist/chunks/split-g7nm1rgb.js +191 -0
- package/dist/chunks/studio-0hqbpbd0.js +62 -0
- package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
- package/dist/chunks/{studio-b55y6ewx.js → studio-1knfqgy7.js} +58 -58
- package/dist/chunks/{studio-2b946z26.js → studio-1z1kcjv4.js} +3628 -6095
- package/dist/chunks/studio-3773086z.js +111 -0
- package/dist/chunks/{studio-4r1pv6zf.js → studio-38emantv.js} +22 -5
- package/dist/chunks/{studio-x813zp48.js → studio-3rz5md06.js} +30 -30
- package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
- package/dist/chunks/studio-5te5tqng.js +81 -0
- package/dist/chunks/studio-5wt9nvhd.js +4763 -0
- package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
- package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
- package/dist/chunks/studio-6xa21ej9.js +28 -0
- package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
- package/dist/chunks/{studio-gcye7qka.js → studio-7e11jpa9.js} +21 -21
- package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
- package/dist/chunks/studio-7xnmgv66.js +13615 -0
- package/dist/chunks/studio-8scdew0e.js +258 -0
- package/dist/chunks/{studio-fbf92ckf.js → studio-93zafjcm.js} +275 -163
- package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
- package/dist/chunks/studio-a79k90n9.js +1162 -0
- package/dist/chunks/studio-aj37eer3.js +422 -0
- package/dist/chunks/studio-b0k5tqgp.js +2432 -0
- package/dist/chunks/studio-b4s9eykd.js +2811 -0
- package/dist/chunks/{studio-f3wqjtk5.js → studio-d0300636.js} +5076 -18
- package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
- package/dist/chunks/studio-e1pgga3k.js +839 -0
- package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
- package/dist/chunks/{studio-q43a5y9h.js → studio-g3jevyjt.js} +16 -16
- package/dist/chunks/studio-gb13095a.js +2806 -0
- package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
- package/dist/chunks/{studio-dm19q43r.js → studio-hhvs4sdg.js} +10 -10
- package/dist/chunks/{studio-x4qkdat5.js → studio-js8nv53n.js} +1749 -2481
- package/dist/chunks/{studio-qjy2z9bv.js → studio-jxp12rnj.js} +32 -137
- package/dist/chunks/{studio-trxrabqf.js → studio-k75n7vhp.js} +527 -283
- package/dist/chunks/{studio-q9jd1a60.js → studio-kcgff4r0.js} +15 -18
- package/dist/chunks/studio-kkqkcp3d.js +17668 -0
- package/dist/chunks/studio-mhhyamxf.js +763 -0
- package/dist/chunks/{studio-cft9r4r7.js → studio-nq5yf5mp.js} +22 -22
- package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
- package/dist/chunks/studio-nzzpvzx9.js +185 -0
- package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
- package/dist/chunks/{studio-3bqpr0zh.js → studio-pxbgypmg.js} +299 -110
- package/dist/chunks/studio-q0a3yk4n.js +33 -0
- package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
- package/dist/chunks/{studio-6yw4y3my.js → studio-qhhm6hbt.js} +8 -8
- package/dist/chunks/studio-qk4bfsq2.js +362 -0
- package/dist/chunks/{studio-msd847zn.js → studio-qk90fgqm.js} +361 -90
- package/dist/chunks/{studio-jkftxyvz.js → studio-r6nvacqs.js} +5861 -2154
- package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
- package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
- package/dist/chunks/studio-rs76k67r.js +12 -0
- package/dist/chunks/studio-sbjyc8bt.js +954 -0
- package/dist/chunks/{studio-1wagb550.js → studio-syg2tadj.js} +11 -11
- package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
- package/dist/chunks/studio-tqgryxwg.js +1171 -0
- package/dist/chunks/studio-try13h8c.js +8448 -0
- package/dist/chunks/studio-vfq8qpjt.js +1219 -0
- package/dist/chunks/studio-vhv5tgxm.js +51 -0
- package/dist/chunks/{studio-ahn3pdgx.js → studio-vw7mzp6z.js} +52 -38
- package/dist/chunks/studio-wqpngpsk.js +174 -0
- package/dist/chunks/studio-wqz6dggm.js +1356 -0
- package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
- package/dist/chunks/studio-yxa81f45.js +12 -0
- package/dist/chunks/studio-zdn2g6dt.js +148 -0
- package/dist/chunks/swatch-group-t0n6h2rn.js +139 -0
- package/dist/chunks/tabs-wbp1cdws.js +156 -0
- package/dist/chunks/textfield-abk6qyee.js +73 -0
- package/dist/chunks/toast-780pvfbv.js +27 -0
- package/dist/chunks/toast-host-3sqv46sn.js +116 -0
- package/dist/chunks/toolbar-xbh5bhtr.js +194 -0
- package/dist/chunks/tooltip-eptb614w.js +369 -0
- package/dist/chunks/tree-a73p0pqm.js +367 -0
- package/dist/chunks/{tsMode-76kr53q0.js → tsMode-jy4m86rv.js} +83 -85
- package/dist/chunks/workspace-t55jdjbx.js +69 -0
- package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
- package/dist/iframe-entry.js +1873 -673
- package/dist/studio.js +52757 -36535
- package/dist/workers/editor.worker.js +1040 -1085
- package/dist/workers/json.worker.js +1946 -1991
- package/dist/workers/ts.worker.js +4960 -5005
- package/index.html +1 -0
- package/package.json +18 -52
- package/src/about/about-modal.ts +72 -123
- package/src/browse/library-commands.ts +20 -49
- package/src/browse/library-layouts.ts +87 -218
- package/src/browse/library-pane.ts +406 -438
- package/src/canvas/canvas-helpers.ts +0 -49
- package/src/canvas/canvas-live-render.ts +25 -2
- package/src/canvas/canvas-render.ts +666 -231
- package/src/canvas/canvas-surface.ts +0 -1
- package/src/canvas/canvas-utils.ts +333 -113
- package/src/canvas/dialog-path.ts +76 -0
- package/src/canvas/dialog-state.ts +67 -0
- package/src/canvas/diff-marks.ts +252 -0
- package/src/canvas/diff-toolbar.ts +349 -0
- package/src/canvas/diff-view.ts +123 -0
- package/src/canvas/edit-width-drag.ts +187 -0
- package/src/canvas/edit-width.ts +150 -0
- package/src/canvas/iframe-entry.ts +125 -8
- package/src/canvas/iframe-host.ts +271 -15
- package/src/canvas/iframe-interaction.ts +133 -13
- package/src/canvas/iframe-patch.ts +7 -1
- package/src/canvas/iframe-position.ts +5 -6
- package/src/canvas/iframe-protocol.ts +106 -5
- package/src/canvas/iframe-render.ts +373 -5
- package/src/canvas/iframe-slash.ts +2 -2
- package/src/canvas/iframe-subtree.ts +5 -8
- package/src/canvas/path-mapping.ts +25 -3
- package/src/canvas/popover-path.ts +106 -0
- package/src/canvas/popover-state.ts +155 -0
- package/src/canvas/surface-registry.ts +21 -10
- package/src/collab/presence-chips.ts +51 -73
- package/src/commands/app-commands.ts +10 -0
- package/src/commands/budget.ts +12 -0
- package/src/commands/command-args.ts +404 -6
- package/src/commands/defaults.ts +44 -14
- package/src/commands/live-context.ts +11 -5
- package/src/commands/reference.ts +12 -2
- package/src/commands/registry.ts +177 -10
- package/src/commands/run-reported.ts +120 -0
- package/src/content/entry-commands.ts +16 -23
- package/src/content/entry-editor.ts +144 -101
- package/src/editor/canvas-slash-bridge.ts +2 -2
- package/src/editor/context-menu.ts +49 -200
- package/src/editor/convert-to-component.ts +42 -82
- package/src/editor/convert-to-repeater.ts +132 -173
- package/src/editor/inline-edit.ts +11 -0
- package/src/editor/shortcuts.ts +76 -49
- package/src/editor/slash-menu.ts +150 -157
- package/src/files/components.ts +39 -0
- package/src/files/file-ops.ts +117 -11
- package/src/files/files.ts +944 -660
- package/src/files/json-layout.ts +474 -0
- package/src/files/serialize-document.ts +8 -1
- package/src/format/convert-file.ts +16 -10
- package/src/format/format-host.ts +50 -1
- package/src/github/github-auth.ts +71 -29
- package/src/github/github-publish.ts +57 -65
- package/src/grid/cell-editors.ts +46 -4
- package/src/grid/cell-popovers.ts +65 -62
- package/src/grid/grid-open.ts +86 -64
- package/src/grid/grid-panel.ts +390 -469
- package/src/grid/redirects-grid.ts +40 -44
- package/src/hosting/layout.ts +2 -0
- package/src/i18n/i18n-commands.ts +137 -62
- package/src/media/media-pane.ts +83 -133
- package/src/new-project/add-repo-modal.ts +125 -176
- package/src/new-project/import-tab.ts +181 -252
- package/src/new-project/location-fields.ts +93 -160
- package/src/new-project/new-project-modal.ts +376 -367
- package/src/packages/jxsuite-update.ts +76 -18
- package/src/packages/pull-package-sync.ts +5 -1
- package/src/panels/activity-panel.ts +137 -104
- package/src/panels/ai-chat/chat-markdown.ts +15 -13
- package/src/panels/ai-chat/chat-view.ts +307 -472
- package/src/panels/ai-chat/composer.ts +175 -163
- package/src/panels/ai-chat/sessions-view.ts +31 -62
- package/src/panels/ai-panel.ts +213 -185
- package/src/panels/block-action-bar.ts +444 -645
- package/src/panels/bottom-dock.ts +112 -47
- package/src/panels/chat-panel.ts +19 -14
- package/src/panels/data-explorer.ts +141 -102
- package/src/panels/data-grid.ts +183 -150
- package/src/panels/dnd.ts +75 -20
- package/src/panels/editors.ts +26 -19
- package/src/panels/elements-panel.ts +243 -186
- package/src/panels/empty-state.ts +26 -42
- package/src/panels/events-panel.ts +950 -729
- package/src/panels/formula-workspace.ts +434 -207
- package/src/panels/frontmatter-fields.ts +185 -153
- package/src/panels/frontmatter-panel.ts +411 -187
- package/src/panels/git-diff-open.ts +148 -0
- package/src/panels/git-panel.ts +679 -605
- package/src/panels/head-panel.ts +617 -435
- package/src/panels/i18n-panel.ts +148 -135
- package/src/panels/imports-panel.ts +388 -414
- package/src/panels/jump-bar.ts +175 -147
- package/src/panels/layers-panel.ts +785 -671
- package/src/panels/left-panel.ts +166 -94
- package/src/panels/navigator-panels.ts +1 -1
- package/src/panels/pane-context.ts +529 -677
- package/src/panels/pane-grid.ts +265 -241
- package/src/panels/panel-registry.ts +15 -4
- package/src/panels/problems-panel.ts +181 -99
- package/src/panels/properties-panel.ts +1525 -966
- package/src/panels/provenance.ts +31 -113
- package/src/panels/quick-search.ts +223 -184
- package/src/panels/right-panel.ts +135 -169
- package/src/panels/seo-modal.ts +346 -167
- package/src/panels/settings-menu.ts +114 -661
- package/src/panels/settings-pane.ts +102 -86
- package/src/panels/signals-panel.ts +1318 -1172
- package/src/panels/statement-editor.ts +556 -428
- package/src/panels/style-panel.ts +1367 -630
- package/src/panels/style-utils.ts +36 -32
- package/src/panels/stylebook-doc.ts +30 -73
- package/src/panels/stylebook-layers-panel.ts +202 -109
- package/src/panels/stylebook-panel.ts +124 -88
- package/src/panels/tab-strip.ts +386 -288
- package/src/platforms/cloud.ts +106 -16
- package/src/platforms/devserver.ts +13 -0
- package/src/publish/deploy-checklist.ts +124 -78
- package/src/publish/publish-commands.ts +4 -12
- package/src/publish/publish-panel.ts +134 -328
- package/src/services/a11y-report.ts +100 -43
- package/src/services/ai-command-tools.ts +538 -0
- package/src/services/ai-project-tools.ts +8 -2
- package/src/services/ai-session-store.ts +6 -0
- package/src/services/ai-system-prompt.ts +112 -24
- package/src/services/ai-tools.ts +36 -212
- package/src/services/ai-write-report.ts +174 -0
- package/src/services/document-assistant.ts +59 -8
- package/src/services/idle.ts +16 -14
- package/src/services/live-surfaces.ts +237 -0
- package/src/services/model-uri.ts +75 -0
- package/src/services/notify.ts +63 -6
- package/src/services/popover-report.ts +325 -0
- package/src/services/surface-registry.ts +56 -0
- package/src/services/tool-executor.ts +6 -0
- package/src/settings/contexts-section.ts +301 -299
- package/src/settings/contributed-section.ts +361 -222
- package/src/settings/css-vars-editor.ts +320 -325
- package/src/settings/defs-editor.ts +572 -535
- package/src/settings/dependencies-editor.ts +79 -107
- package/src/settings/extension-commands.ts +379 -0
- package/src/settings/extension-rows.ts +113 -0
- package/src/settings/extensions-section.ts +287 -0
- package/src/settings/general-settings.ts +130 -181
- package/src/settings/head-editor.ts +10 -305
- package/src/settings/locales-section.ts +146 -196
- package/src/settings/preferences-accounts.ts +1 -1
- package/src/settings/preferences-dialog.ts +350 -330
- package/src/settings/project-sections.ts +108 -181
- package/src/settings/schema-field-ui.ts +11 -399
- package/src/settings/section-registry.ts +8 -1
- package/src/settings/settings-document.ts +31 -29
- package/src/shell/tree.ts +42 -87
- package/src/shell.ts +48 -36
- package/src/studio.ts +104 -69
- package/src/style/token-ref.ts +0 -39
- package/src/surfaces/about.json +263 -0
- package/src/surfaces/about.ts +163 -0
- package/src/surfaces/add-repo.json +486 -0
- package/src/surfaces/add-repo.ts +236 -0
- package/src/surfaces/ai-chat.json +2185 -0
- package/src/surfaces/ai-chat.ts +549 -0
- package/src/surfaces/ai-credentials-form.json +332 -0
- package/src/surfaces/ai-credentials-form.ts +151 -0
- package/src/surfaces/ai-managed-connect.json +108 -0
- package/src/surfaces/ai-managed-connect.ts +123 -0
- package/src/surfaces/ai-model-picker.json +114 -0
- package/src/surfaces/ai-model-picker.ts +139 -0
- package/src/surfaces/block-action-bar.json +640 -0
- package/src/surfaces/block-action-bar.ts +368 -0
- package/src/surfaces/bottom-dock.json +154 -0
- package/src/surfaces/bottom-dock.ts +125 -0
- package/src/surfaces/canvas-stage.json +444 -0
- package/src/surfaces/canvas-stage.ts +253 -0
- package/src/surfaces/cf-account-picker.json +300 -0
- package/src/surfaces/cf-account-picker.ts +214 -0
- package/src/surfaces/commandbar.json +985 -0
- package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +417 -391
- package/src/surfaces/convert-repeater.json +309 -0
- package/src/surfaces/convert-repeater.ts +276 -0
- package/src/surfaces/data-actions.json +157 -0
- package/src/surfaces/data-actions.ts +115 -0
- package/src/surfaces/dialog.json +289 -0
- package/src/surfaces/dialog.ts +343 -0
- package/src/surfaces/diff-toolbar.json +266 -0
- package/src/surfaces/diff-toolbar.ts +139 -0
- package/src/surfaces/doc-header.json +739 -0
- package/src/surfaces/doc-header.ts +223 -0
- package/src/surfaces/empty-state.json +152 -0
- package/src/surfaces/empty-state.ts +173 -0
- package/src/surfaces/entry-editor.json +281 -0
- package/src/surfaces/entry-editor.ts +191 -0
- package/src/surfaces/expression-editor.json +977 -0
- package/src/surfaces/expression-editor.ts +266 -0
- package/src/surfaces/files-panel.json +592 -0
- package/src/surfaces/files-panel.ts +301 -0
- package/src/surfaces/formula-palette.json +364 -0
- package/src/surfaces/formula-palette.ts +340 -0
- package/src/surfaces/git-panel.json +1822 -0
- package/src/surfaces/git-panel.ts +272 -0
- package/src/surfaces/github-auth.json +112 -0
- package/src/surfaces/github-auth.ts +139 -0
- package/src/surfaces/github-publish.json +206 -0
- package/src/surfaces/github-publish.ts +169 -0
- package/src/surfaces/grid-cell.json +218 -0
- package/src/surfaces/grid-cell.ts +120 -0
- package/src/surfaces/grid-open.json +147 -0
- package/src/surfaces/grid-open.ts +87 -0
- package/src/surfaces/grid-panel.json +706 -0
- package/src/surfaces/grid-panel.ts +206 -0
- package/src/surfaces/grid-replace.json +179 -0
- package/src/surfaces/grid-replace.ts +89 -0
- package/src/surfaces/grid-views.json +446 -0
- package/src/surfaces/grid-views.ts +172 -0
- package/src/surfaces/inspector-dock.json +187 -0
- package/src/surfaces/inspector-dock.ts +161 -0
- package/src/surfaces/jump-bar.json +243 -0
- package/src/surfaces/jump-bar.ts +129 -0
- package/src/surfaces/jxsuite-update.json +146 -0
- package/src/surfaces/jxsuite-update.ts +149 -0
- package/src/surfaces/library-pane.json +1509 -0
- package/src/surfaces/library-pane.ts +363 -0
- package/src/surfaces/logic-panel.json +1949 -0
- package/src/surfaces/logic-panel.ts +369 -0
- package/src/surfaces/logic-workspace.json +685 -0
- package/src/surfaces/logic-workspace.ts +238 -0
- package/src/surfaces/media-browser.json +303 -0
- package/src/surfaces/media-browser.ts +145 -0
- package/src/surfaces/media-field.json +163 -0
- package/src/surfaces/media-field.ts +116 -0
- package/src/surfaces/media-pane.json +513 -0
- package/src/surfaces/media-pane.ts +197 -0
- package/src/surfaces/menu.json +232 -0
- package/src/surfaces/menu.ts +375 -0
- package/src/surfaces/navigator-dock.json +113 -0
- package/src/surfaces/navigator-dock.ts +130 -0
- package/src/surfaces/new-project.json +1654 -0
- package/src/surfaces/new-project.ts +411 -0
- package/src/surfaces/palette.json +535 -0
- package/src/surfaces/pane-context.json +1497 -0
- package/src/surfaces/pane-context.ts +513 -0
- package/src/surfaces/pane-grid.json +188 -0
- package/src/surfaces/pane-grid.ts +250 -0
- package/src/surfaces/panel-activity.json +563 -0
- package/src/surfaces/panel-activity.ts +187 -0
- package/src/surfaces/panel-data.json +141 -0
- package/src/surfaces/panel-data.ts +156 -0
- package/src/surfaces/panel-deploy-checklist.json +283 -0
- package/src/surfaces/panel-deploy-checklist.ts +175 -0
- package/src/surfaces/panel-elements.json +367 -0
- package/src/surfaces/panel-elements.ts +175 -0
- package/src/surfaces/panel-i18n.json +569 -0
- package/src/surfaces/panel-i18n.ts +212 -0
- package/src/surfaces/panel-imports.json +780 -0
- package/src/surfaces/panel-imports.ts +209 -0
- package/src/surfaces/panel-outline.json +734 -0
- package/src/surfaces/panel-outline.ts +326 -0
- package/src/surfaces/panel-page.json +1017 -0
- package/src/surfaces/panel-page.ts +240 -0
- package/src/surfaces/panel-problems.json +497 -0
- package/src/surfaces/panel-problems.ts +157 -0
- package/src/surfaces/panel-signals.json +1973 -0
- package/src/surfaces/panel-signals.ts +436 -0
- package/src/surfaces/panel-stylebook-layers.json +317 -0
- package/src/surfaces/panel-stylebook-layers.ts +155 -0
- package/src/surfaces/preferences.json +850 -0
- package/src/surfaces/preferences.ts +332 -0
- package/src/surfaces/progress-modal.json +110 -0
- package/src/surfaces/progress-modal.ts +150 -0
- package/src/surfaces/properties-panel.json +1578 -0
- package/src/surfaces/properties-panel.ts +337 -0
- package/src/surfaces/publish.json +945 -0
- package/src/surfaces/publish.ts +392 -0
- package/src/surfaces/push-plan.json +110 -0
- package/src/surfaces/push-plan.ts +87 -0
- package/src/surfaces/rail.json +255 -0
- package/src/surfaces/rail.ts +206 -0
- package/src/surfaces/reference-field.json +191 -0
- package/src/surfaces/reference-field.ts +168 -0
- package/src/surfaces/schema-builder.json +1011 -0
- package/src/surfaces/schema-builder.ts +181 -0
- package/src/surfaces/schema-form.json +1013 -0
- package/src/surfaces/schema-form.ts +287 -0
- package/src/surfaces/secret-field.json +60 -0
- package/src/surfaces/secret-field.ts +146 -0
- package/src/surfaces/seo.json +932 -0
- package/src/surfaces/seo.ts +334 -0
- package/src/surfaces/settings-contexts.json +538 -0
- package/src/surfaces/settings-contexts.ts +196 -0
- package/src/surfaces/settings-contributed.json +489 -0
- package/src/surfaces/settings-contributed.ts +199 -0
- package/src/surfaces/settings-css-vars.json +820 -0
- package/src/surfaces/settings-css-vars.ts +199 -0
- package/src/surfaces/settings-defs.json +1363 -0
- package/src/surfaces/settings-defs.ts +232 -0
- package/src/surfaces/settings-deploy.json +108 -0
- package/src/surfaces/settings-deploy.ts +135 -0
- package/src/surfaces/settings-extensions.json +486 -0
- package/src/surfaces/settings-extensions.ts +201 -0
- package/src/surfaces/settings-head.json +779 -0
- package/src/surfaces/settings-head.ts +397 -0
- package/src/surfaces/settings-locales.json +420 -0
- package/src/surfaces/settings-locales.ts +137 -0
- package/src/surfaces/settings-overview.json +423 -0
- package/src/surfaces/settings-overview.ts +218 -0
- package/src/surfaces/settings-packages.json +549 -0
- package/src/surfaces/settings-packages.ts +158 -0
- package/src/surfaces/settings-pane.json +147 -0
- package/src/surfaces/settings-pane.ts +150 -0
- package/src/surfaces/settings-rawjson.json +104 -0
- package/src/surfaces/settings-rawjson.ts +107 -0
- package/src/surfaces/shell.json +99 -0
- package/src/surfaces/shell.ts +30 -0
- package/src/surfaces/slash-menu.json +180 -0
- package/src/surfaces/slash-menu.ts +272 -0
- package/src/surfaces/statements.json +607 -0
- package/src/surfaces/statements.ts +238 -0
- package/src/surfaces/statusbar.json +94 -0
- package/src/{panels → surfaces}/statusbar.ts +164 -90
- package/src/surfaces/style-panel.json +1643 -0
- package/src/surfaces/style-panel.ts +338 -0
- package/src/surfaces/stylebook-chrome.json +122 -0
- package/src/surfaces/stylebook-chrome.ts +122 -0
- package/src/surfaces/tab-strip.json +448 -0
- package/src/surfaces/tab-strip.ts +200 -0
- package/src/surfaces/target-line.json +419 -0
- package/src/surfaces/target-line.ts +349 -0
- package/src/surfaces/toasts.json +189 -0
- package/src/surfaces/welcome.json +571 -0
- package/src/surfaces/welcome.ts +338 -0
- package/src/tabs/project-config.ts +111 -21
- package/src/tabs/tab.ts +52 -1
- package/src/types.ts +22 -0
- package/src/ui/ai-credentials-form.ts +104 -100
- package/src/ui/ai-managed-connect.ts +54 -36
- package/src/ui/ai-model-picker.ts +75 -47
- package/src/ui/cf-account-picker.ts +76 -141
- package/src/ui/color-selector.ts +80 -301
- package/src/ui/dynamic-slot.ts +43 -283
- package/src/ui/expression-editor.ts +797 -576
- package/src/ui/field-input.ts +8 -181
- package/src/ui/form-controls.ts +838 -366
- package/src/ui/formula-chips.ts +80 -85
- package/src/ui/kit.ts +33 -0
- package/src/ui/layers.ts +296 -593
- package/src/ui/media-picker.ts +203 -284
- package/src/ui/panel-resize.ts +251 -64
- package/src/ui/popover-surface.ts +153 -0
- package/src/ui/progress-modal.ts +22 -60
- package/src/ui/regions.ts +13 -7
- package/src/ui/schema-form.ts +906 -440
- package/src/ui/surface.ts +122 -0
- package/src/ui/unit-selector.ts +15 -131
- package/src/ui/value-source.ts +14 -0
- package/src/ui/virtual-window.ts +88 -9
- package/src/utils/canvas-media.ts +72 -0
- package/src/utils/edit-display.ts +7 -2
- package/src/utils/element-selectors.ts +69 -0
- package/src/utils/link-target.ts +2 -2
- package/src/utils/studio-utils.ts +0 -10
- package/src/view.ts +15 -0
- package/src/workspace/pane-derive.ts +36 -14
- package/src/workspace/workspace.ts +75 -6
- package/styles/canvas.css +72 -467
- package/styles/forced-colors.css +48 -82
- package/styles/forced-colors.json +41 -0
- package/styles/inspector.css +2 -1301
- package/styles/overlays.css +96 -2823
- package/styles/panels.css +6 -1423
- package/styles/shell-frame.css +272 -0
- package/styles/shell-frame.json +227 -0
- package/styles/shell.css +0 -1568
- package/styles/tokens.css +65 -136
- package/styles/tokens.json +84 -0
- package/dist/chunks/Overlay.dev-etqjwyf9.js +0 -23
- package/dist/chunks/adapter-jkcyhgtr.js +0 -14
- package/dist/chunks/cf-account-picker-en86v7x7.js +0 -163
- package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
- package/dist/chunks/components-zmx10t62.js +0 -21
- package/dist/chunks/content-source-48xg86wj.js +0 -49
- package/dist/chunks/convert-to-repeater-43tfn7cs.js +0 -268
- package/dist/chunks/editor-cptq5jp1.js +0 -37
- package/dist/chunks/entry-commands-e63f1xc0.js +0 -46
- package/dist/chunks/extension-sections-txv08xxg.js +0 -311
- package/dist/chunks/file-ops-wbh4hhsx.js +0 -48
- package/dist/chunks/files-3kfkwhk4.js +0 -93
- package/dist/chunks/flow-qbfgrpeh.js +0 -634
- package/dist/chunks/focus-trap.esm-9t2drp0g.js +0 -1025
- package/dist/chunks/focus-visible-6eg70z18.js +0 -167
- package/dist/chunks/format-host-w16q81tf.js +0 -43
- package/dist/chunks/fs-events-hrrg328g.js +0 -21
- package/dist/chunks/git-panel-532whr1y.js +0 -59
- package/dist/chunks/index-zqxmqxmh.js +0 -109
- package/dist/chunks/jx-validate-8er6gbxy.js +0 -19
- package/dist/chunks/layers-panel-07hm7g5j.js +0 -67
- package/dist/chunks/layers-q75tj2mf.js +0 -45
- package/dist/chunks/lit-html-j055mkh8.js +0 -22
- package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
- package/dist/chunks/notify-yjm79n4s.js +0 -30
- package/dist/chunks/parse-24d0gay3.js +0 -19
- package/dist/chunks/platform-ba1j1gbh.js +0 -16
- package/dist/chunks/publish-panel-v9st96ja.js +0 -29
- package/dist/chunks/quick-search-zccjp6gv.js +0 -66
- package/dist/chunks/references-3qx8fkyp.js +0 -29
- package/dist/chunks/right-panel-vm3b6kwy.js +0 -46
- package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
- package/dist/chunks/sp-overlay.dev-qgvhnxf4.js +0 -18
- package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
- package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
- package/dist/chunks/sp-tooltip.dev-4sastdnw.js +0 -15
- package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
- package/dist/chunks/studio-0a5qrh01.js +0 -3
- package/dist/chunks/studio-0bq6eh7v.js +0 -12
- package/dist/chunks/studio-18j3bmcz.js +0 -14
- package/dist/chunks/studio-1ngbejft.js +0 -181
- package/dist/chunks/studio-4b5z1x43.js +0 -424
- package/dist/chunks/studio-4n2b5gzb.js +0 -357
- package/dist/chunks/studio-4rzyrtjz.js +0 -426
- package/dist/chunks/studio-5fx3g9jg.js +0 -4325
- package/dist/chunks/studio-5myknm0a.js +0 -1903
- package/dist/chunks/studio-7afd21nw.js +0 -67
- package/dist/chunks/studio-7nte2hj4.js +0 -613
- package/dist/chunks/studio-8jpzqk5s.js +0 -128
- package/dist/chunks/studio-8q517dfr.js +0 -24
- package/dist/chunks/studio-950k0dx6.js +0 -6939
- package/dist/chunks/studio-9n4mrmnb.js +0 -184
- package/dist/chunks/studio-a0tswy0w.js +0 -58
- package/dist/chunks/studio-ahnzd9rg.js +0 -23
- package/dist/chunks/studio-bgxt93ga.js +0 -62
- package/dist/chunks/studio-cmb03bg5.js +0 -13890
- package/dist/chunks/studio-d1ks410h.js +0 -175
- package/dist/chunks/studio-ef49pnzx.js +0 -387
- package/dist/chunks/studio-eqq1w638.js +0 -113
- package/dist/chunks/studio-ew0djmhg.js +0 -341
- package/dist/chunks/studio-gfgb8pe6.js +0 -1652
- package/dist/chunks/studio-h4rxscfc.js +0 -10
- package/dist/chunks/studio-jc994dnr.js +0 -1066
- package/dist/chunks/studio-kyh9avvv.js +0 -28
- package/dist/chunks/studio-m3hwn7y1.js +0 -120
- package/dist/chunks/studio-mtfnaqs9.js +0 -659
- package/dist/chunks/studio-n6j9t10q.js +0 -318
- package/dist/chunks/studio-n8b9wqwy.js +0 -291
- package/dist/chunks/studio-qcy05dp8.js +0 -1743
- package/dist/chunks/studio-qq6jym04.js +0 -53
- package/dist/chunks/studio-rdx8jcxy.js +0 -83
- package/dist/chunks/studio-rn9ta2mz.js +0 -111
- package/dist/chunks/studio-t7qb9db8.js +0 -665
- package/dist/chunks/studio-tmc5emrw.js +0 -8
- package/dist/chunks/studio-z6nw2ek2.js +0 -18
- package/dist/chunks/studio-zczps70q.js +0 -378
- package/dist/chunks/studio-zqazsct2.js +0 -1823
- package/dist/chunks/workspace-fjx52ryv.js +0 -89
- package/src/panels/activity-bar.ts +0 -251
- package/src/panels/panel-scheduler.ts +0 -219
- package/src/panels/style-inputs.ts +0 -237
- package/src/panels/target-line.ts +0 -274
- package/src/panels/welcome-screen.ts +0 -346
- package/src/ui/button-group.ts +0 -102
- package/src/ui/choice-field.ts +0 -72
- package/src/ui/field-row.ts +0 -249
- package/src/ui/formula-palette.ts +0 -213
- package/src/ui/icons.ts +0 -52
- package/src/ui/jx-theme.ts +0 -130
- package/src/ui/spectrum.ts +0 -340
- package/src/ui/value-selector.ts +0 -174
- package/src/ui/widgets.ts +0 -172
- /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
- /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
- /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
- /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
import {
|
|
2
|
-
commitTabBuffers
|
|
3
|
-
} from "./studio-wcy8trfx.js";
|
|
4
|
-
import {
|
|
5
|
-
applyDocOpToDoc,
|
|
6
|
-
childArray,
|
|
7
|
-
cloneValue
|
|
8
|
-
} from "./studio-5ehhackm.js";
|
|
9
|
-
import {
|
|
10
|
-
childIndex,
|
|
11
|
-
getNodeAtPath,
|
|
12
|
-
isAncestor,
|
|
13
|
-
normalizeArrayChildren,
|
|
14
|
-
parentElementPath,
|
|
15
|
-
pathsEqual,
|
|
16
|
-
projectState
|
|
17
|
-
} from "./studio-p4ngc046.js";
|
|
18
|
-
import {
|
|
19
|
-
computed,
|
|
20
|
-
effect,
|
|
21
2
|
effectScope,
|
|
22
|
-
notify,
|
|
23
3
|
onScopeDispose,
|
|
4
|
+
effect,
|
|
24
5
|
reactive,
|
|
25
|
-
toRaw
|
|
26
|
-
|
|
6
|
+
toRaw,
|
|
7
|
+
computed,
|
|
8
|
+
notify2
|
|
9
|
+
} from "./studio-p1dw8wfw.js";
|
|
10
|
+
import {
|
|
11
|
+
commitTabBuffers2
|
|
12
|
+
} from "./studio-q3x06vmj.js";
|
|
13
|
+
import {
|
|
14
|
+
getPlatform2
|
|
15
|
+
} from "./studio-6nzaktvy.js";
|
|
16
|
+
import {
|
|
17
|
+
formatByName2,
|
|
18
|
+
formatForPath2,
|
|
19
|
+
defaultContentFormat2
|
|
20
|
+
} from "./studio-vw7mzp6z.js";
|
|
27
21
|
import {
|
|
28
|
-
ensureNestedStyle,
|
|
29
22
|
getNestedStyle,
|
|
23
|
+
ensureNestedStyle,
|
|
30
24
|
isEventBinding
|
|
31
|
-
} from "./studio-
|
|
25
|
+
} from "./studio-7r42c6ca.js";
|
|
32
26
|
import {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
getNodeAtPath2,
|
|
28
|
+
normalizeArrayChildren,
|
|
29
|
+
parentElementPath,
|
|
30
|
+
childIndex,
|
|
31
|
+
pathsEqual,
|
|
32
|
+
isAncestor,
|
|
33
|
+
projectState
|
|
34
|
+
} from "./studio-6ewqv390.js";
|
|
37
35
|
import {
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
cloneValue2,
|
|
37
|
+
childArray2,
|
|
38
|
+
applyDocOpToDoc2
|
|
39
|
+
} from "./studio-727xh0e3.js";
|
|
40
40
|
import {
|
|
41
|
-
|
|
42
|
-
} from "./studio-
|
|
41
|
+
__preload
|
|
42
|
+
} from "./studio-5te5tqng.js";
|
|
43
43
|
|
|
44
44
|
// ../schema/src/locale.ts
|
|
45
45
|
var RTL_SCRIPTS = new Set([
|
|
@@ -237,9 +237,9 @@ function resolveExt(def) {
|
|
|
237
237
|
return { ext: ".json", unresolvedFormat: null };
|
|
238
238
|
}
|
|
239
239
|
if (def.format === undefined || def.format === "") {
|
|
240
|
-
return { ext:
|
|
240
|
+
return { ext: defaultContentFormat2()?.extensions[0] ?? ".json", unresolvedFormat: null };
|
|
241
241
|
}
|
|
242
|
-
const format =
|
|
242
|
+
const format = formatByName2(def.format);
|
|
243
243
|
return format?.extensions[0] === undefined ? { ext: null, unresolvedFormat: def.format } : { ext: format.extensions[0], unresolvedFormat: null };
|
|
244
244
|
}
|
|
245
245
|
function sourcePattern(source, locales) {
|
|
@@ -319,9 +319,6 @@ function collectionForFile(path, config) {
|
|
|
319
319
|
}
|
|
320
320
|
|
|
321
321
|
// src/utils/studio-utils.ts
|
|
322
|
-
function camelToKebab(str) {
|
|
323
|
-
return str.replaceAll(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);
|
|
324
|
-
}
|
|
325
322
|
function camelToLabel(prop) {
|
|
326
323
|
return prop.replaceAll(/([A-Z])/g, " $1").replace(/^./, (c) => c.toUpperCase());
|
|
327
324
|
}
|
|
@@ -409,7 +406,7 @@ function findContentTypeSchema(documentPath, projectConfig) {
|
|
|
409
406
|
return null;
|
|
410
407
|
}
|
|
411
408
|
if (!match.fileBacked) {
|
|
412
|
-
const ext = match.ext ??
|
|
409
|
+
const ext = match.ext ?? defaultContentFormat2()?.extensions[0] ?? ".json";
|
|
413
410
|
if (!documentPath.toLowerCase().endsWith(ext.toLowerCase())) {
|
|
414
411
|
return null;
|
|
415
412
|
}
|
|
@@ -622,7 +619,7 @@ function setTransactGate(fn) {
|
|
|
622
619
|
}
|
|
623
620
|
function rollbackFailedTransaction(tab, record, selectionBefore, dirtyBefore) {
|
|
624
621
|
for (let i = record.docOps.length - 1;i >= 0; i--) {
|
|
625
|
-
|
|
622
|
+
applyDocOpToDoc2(tab.doc.document, toRaw(record.docOps[i].inverse));
|
|
626
623
|
}
|
|
627
624
|
for (let i = record.fmOps.length - 1;i >= 0; i--) {
|
|
628
625
|
const op = record.fmOps[i];
|
|
@@ -726,7 +723,7 @@ function materializeState(snapshots, target) {
|
|
|
726
723
|
const doc = jsonClone(snapshots[base].document);
|
|
727
724
|
for (let i = base + 1;i <= target; i++) {
|
|
728
725
|
for (const op of snapshots[i].forwardOps ?? []) {
|
|
729
|
-
|
|
726
|
+
applyDocOpToDoc2(doc, op);
|
|
730
727
|
}
|
|
731
728
|
}
|
|
732
729
|
return doc;
|
|
@@ -743,8 +740,8 @@ function applyExternalDocOps(tab, ops) {
|
|
|
743
740
|
}
|
|
744
741
|
var DOC_META_KEYS = new Set(["state", "$media", "$head", "$elements", "imports", "$layout"]);
|
|
745
742
|
function applyDocOp(tab, op) {
|
|
746
|
-
const prev = op.op === "set-key" ?
|
|
747
|
-
|
|
743
|
+
const prev = op.op === "set-key" ? getNodeAtPath2(tab.doc.document, op.path)?.[op.key] : null;
|
|
744
|
+
applyDocOpToDoc2(tab.doc.document, op);
|
|
748
745
|
recordDocOp({ forward: op, inverse: op });
|
|
749
746
|
switch (op.op) {
|
|
750
747
|
case "set-key": {
|
|
@@ -938,14 +935,14 @@ function redo(tab) {
|
|
|
938
935
|
tab.doc.dirty = true;
|
|
939
936
|
}
|
|
940
937
|
function mutateInsertNode(tab, parentPath, index, nodeDef) {
|
|
941
|
-
const parent =
|
|
938
|
+
const parent = getNodeAtPath2(tab.doc.document, parentPath);
|
|
942
939
|
if (!parent) {
|
|
943
940
|
return;
|
|
944
941
|
}
|
|
945
|
-
|
|
942
|
+
childArray2(parent).splice(index, 0, structuredClone(nodeDef));
|
|
946
943
|
recordPatch({ index, op: "insert", parentPath });
|
|
947
944
|
recordDocOp({
|
|
948
|
-
forward: { index, node:
|
|
945
|
+
forward: { index, node: cloneValue2(nodeDef), op: "insert-child", parentPath },
|
|
949
946
|
inverse: { index, op: "remove-child", parentPath }
|
|
950
947
|
});
|
|
951
948
|
}
|
|
@@ -955,11 +952,11 @@ function mutateRemoveNode(tab, path) {
|
|
|
955
952
|
}
|
|
956
953
|
const elemPath = parentElementPath(path);
|
|
957
954
|
const idx = childIndex(path);
|
|
958
|
-
const [removed] =
|
|
955
|
+
const [removed] = getNodeAtPath2(tab.doc.document, elemPath).children.splice(idx, 1);
|
|
959
956
|
recordPatch({ op: "remove", path });
|
|
960
957
|
recordDocOp({
|
|
961
958
|
forward: { index: idx, op: "remove-child", parentPath: elemPath },
|
|
962
|
-
inverse: { index: idx, node:
|
|
959
|
+
inverse: { index: idx, node: cloneValue2(removed), op: "insert-child", parentPath: elemPath }
|
|
963
960
|
});
|
|
964
961
|
tab.session.selection = pruneSelection(tab.session.selection, path);
|
|
965
962
|
}
|
|
@@ -967,17 +964,17 @@ function mutateDuplicateNode(tab, path) {
|
|
|
967
964
|
if (!path || !isSpliceablePath(path)) {
|
|
968
965
|
return;
|
|
969
966
|
}
|
|
970
|
-
const node =
|
|
967
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
971
968
|
if (!node) {
|
|
972
969
|
return;
|
|
973
970
|
}
|
|
974
971
|
const elemPath = parentElementPath(path);
|
|
975
972
|
const idx = childIndex(path);
|
|
976
973
|
const clone = structuredClone(toRaw(node));
|
|
977
|
-
|
|
974
|
+
getNodeAtPath2(tab.doc.document, elemPath).children.splice(idx + 1, 0, clone);
|
|
978
975
|
recordPatch({ index: idx + 1, op: "insert", parentPath: elemPath });
|
|
979
976
|
recordDocOp({
|
|
980
|
-
forward: { index: idx + 1, node:
|
|
977
|
+
forward: { index: idx + 1, node: cloneValue2(clone), op: "insert-child", parentPath: elemPath },
|
|
981
978
|
inverse: { index: idx + 1, op: "remove-child", parentPath: elemPath }
|
|
982
979
|
});
|
|
983
980
|
tab.session.selection = [[...elemPath, "children", idx + 1]];
|
|
@@ -1009,7 +1006,7 @@ function mutateWrapNode(tab, path, wrapperTag = "div") {
|
|
|
1009
1006
|
if (!path || !isSpliceablePath(path)) {
|
|
1010
1007
|
return;
|
|
1011
1008
|
}
|
|
1012
|
-
const node =
|
|
1009
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1013
1010
|
if (!node) {
|
|
1014
1011
|
return;
|
|
1015
1012
|
}
|
|
@@ -1019,11 +1016,11 @@ function mutateWrapNode(tab, path, wrapperTag = "div") {
|
|
|
1019
1016
|
children: [structuredClone(toRaw(node))],
|
|
1020
1017
|
tagName: wrapperTag
|
|
1021
1018
|
};
|
|
1022
|
-
const original =
|
|
1023
|
-
|
|
1019
|
+
const original = cloneValue2(node);
|
|
1020
|
+
getNodeAtPath2(tab.doc.document, elemPath).children.splice(idx, 1, wrapper);
|
|
1024
1021
|
recordPatch({ op: "replace", path });
|
|
1025
1022
|
recordDocOp({
|
|
1026
|
-
forward: { index: idx, node:
|
|
1023
|
+
forward: { index: idx, node: cloneValue2(wrapper), op: "set-child", parentPath: elemPath },
|
|
1027
1024
|
inverse: { index: idx, node: original, op: "set-child", parentPath: elemPath }
|
|
1028
1025
|
});
|
|
1029
1026
|
tab.session.selection = [[...elemPath, "children", idx]];
|
|
@@ -1035,8 +1032,8 @@ function mutateMoveNode(tab, fromPath, toParentPath, toIndex) {
|
|
|
1035
1032
|
if (!fromParentPath || typeof fromIdx !== "number") {
|
|
1036
1033
|
return;
|
|
1037
1034
|
}
|
|
1038
|
-
const fromParent =
|
|
1039
|
-
const toParent =
|
|
1035
|
+
const fromParent = getNodeAtPath2(doc, fromParentPath);
|
|
1036
|
+
const toParent = getNodeAtPath2(doc, toParentPath);
|
|
1040
1037
|
if (!fromParent || !Array.isArray(fromParent.children) || !toParent) {
|
|
1041
1038
|
return;
|
|
1042
1039
|
}
|
|
@@ -1048,7 +1045,7 @@ function mutateMoveNode(tab, fromPath, toParentPath, toIndex) {
|
|
|
1048
1045
|
if (fromParent === toParent && fromIdx < toIndex) {
|
|
1049
1046
|
adjustedIndex -= 1;
|
|
1050
1047
|
}
|
|
1051
|
-
|
|
1048
|
+
childArray2(toParent).splice(adjustedIndex, 0, node);
|
|
1052
1049
|
recordPatch({ fromPath, op: "move", toIndex: adjustedIndex, toParentPath });
|
|
1053
1050
|
recordDocOp({
|
|
1054
1051
|
forward: {
|
|
@@ -1075,18 +1072,18 @@ function mutateMoveNode(tab, fromPath, toParentPath, toIndex) {
|
|
|
1075
1072
|
}
|
|
1076
1073
|
}
|
|
1077
1074
|
function mutateUpdateProperty(tab, path, key, value) {
|
|
1078
|
-
const node =
|
|
1075
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1079
1076
|
if (!node) {
|
|
1080
1077
|
return;
|
|
1081
1078
|
}
|
|
1082
1079
|
const prev = node[key];
|
|
1083
|
-
const before =
|
|
1080
|
+
const before = cloneValue2(prev);
|
|
1084
1081
|
if (value === undefined || value === null || value === "") {
|
|
1085
1082
|
delete node[key];
|
|
1086
1083
|
} else {
|
|
1087
1084
|
node[key] = value;
|
|
1088
1085
|
}
|
|
1089
|
-
recordDocOp(setKeyPair(path, key, before,
|
|
1086
|
+
recordDocOp(setKeyPair(path, key, before, cloneValue2(node[key])));
|
|
1090
1087
|
if (key === "textContent") {
|
|
1091
1088
|
recordPatch({ op: "set-text", path });
|
|
1092
1089
|
} else if (key === "style") {
|
|
@@ -1098,8 +1095,8 @@ function mutateUpdateProperty(tab, path, key, value) {
|
|
|
1098
1095
|
}
|
|
1099
1096
|
}
|
|
1100
1097
|
function mutateUpdateStyle(tab, path, prop, value) {
|
|
1101
|
-
const node =
|
|
1102
|
-
const styleBefore =
|
|
1098
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1099
|
+
const styleBefore = cloneValue2(node.style);
|
|
1103
1100
|
if (!node.style) {
|
|
1104
1101
|
node.style = {};
|
|
1105
1102
|
}
|
|
@@ -1111,12 +1108,12 @@ function mutateUpdateStyle(tab, path, prop, value) {
|
|
|
1111
1108
|
if (Object.keys(node.style).length === 0) {
|
|
1112
1109
|
delete node.style;
|
|
1113
1110
|
}
|
|
1114
|
-
recordDocOp(setKeyPair(path, "style", styleBefore,
|
|
1111
|
+
recordDocOp(setKeyPair(path, "style", styleBefore, cloneValue2(node.style)));
|
|
1115
1112
|
recordPatch({ op: "set-style", path });
|
|
1116
1113
|
}
|
|
1117
1114
|
function mutateUpdateAttribute(tab, path, attr, value) {
|
|
1118
|
-
const node =
|
|
1119
|
-
const attrsBefore =
|
|
1115
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1116
|
+
const attrsBefore = cloneValue2(node.attributes);
|
|
1120
1117
|
if (!node.attributes) {
|
|
1121
1118
|
node.attributes = {};
|
|
1122
1119
|
}
|
|
@@ -1128,15 +1125,15 @@ function mutateUpdateAttribute(tab, path, attr, value) {
|
|
|
1128
1125
|
if (Object.keys(node.attributes).length === 0) {
|
|
1129
1126
|
delete node.attributes;
|
|
1130
1127
|
}
|
|
1131
|
-
recordDocOp(setKeyPair(path, "attributes", attrsBefore,
|
|
1128
|
+
recordDocOp(setKeyPair(path, "attributes", attrsBefore, cloneValue2(node.attributes)));
|
|
1132
1129
|
recordPatch({ attr, op: "set-attr", path });
|
|
1133
1130
|
}
|
|
1134
1131
|
function mutateUpdateMediaStyle(tab, path, mediaName, prop, value) {
|
|
1135
1132
|
if (!mediaName) {
|
|
1136
1133
|
return mutateUpdateStyle(tab, path, prop, value);
|
|
1137
1134
|
}
|
|
1138
|
-
const node =
|
|
1139
|
-
const styleBefore =
|
|
1135
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1136
|
+
const styleBefore = cloneValue2(node.style);
|
|
1140
1137
|
if (!node.style) {
|
|
1141
1138
|
node.style = {};
|
|
1142
1139
|
}
|
|
@@ -1153,12 +1150,12 @@ function mutateUpdateMediaStyle(tab, path, mediaName, prop, value) {
|
|
|
1153
1150
|
if (Object.keys(node.style).length === 0) {
|
|
1154
1151
|
delete node.style;
|
|
1155
1152
|
}
|
|
1156
|
-
recordDocOp(setKeyPair(path, "style", styleBefore,
|
|
1153
|
+
recordDocOp(setKeyPair(path, "style", styleBefore, cloneValue2(node.style)));
|
|
1157
1154
|
recordPatch({ op: "set-style", path });
|
|
1158
1155
|
}
|
|
1159
1156
|
function mutateUpdateNestedStyle(tab, path, selector, prop, value) {
|
|
1160
|
-
const node =
|
|
1161
|
-
const styleBefore =
|
|
1157
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1158
|
+
const styleBefore = cloneValue2(node.style);
|
|
1162
1159
|
if (!node.style) {
|
|
1163
1160
|
node.style = {};
|
|
1164
1161
|
}
|
|
@@ -1174,12 +1171,12 @@ function mutateUpdateNestedStyle(tab, path, selector, prop, value) {
|
|
|
1174
1171
|
if (Object.keys(node.style).length === 0) {
|
|
1175
1172
|
delete node.style;
|
|
1176
1173
|
}
|
|
1177
|
-
recordDocOp(setKeyPair(path, "style", styleBefore,
|
|
1174
|
+
recordDocOp(setKeyPair(path, "style", styleBefore, cloneValue2(node.style)));
|
|
1178
1175
|
recordPatch({ op: "set-style", path });
|
|
1179
1176
|
}
|
|
1180
1177
|
function mutateUpdateMediaNestedStyle(tab, path, mediaName, selector, prop, value) {
|
|
1181
|
-
const node =
|
|
1182
|
-
const styleBefore =
|
|
1178
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1179
|
+
const styleBefore = cloneValue2(node.style);
|
|
1183
1180
|
if (!node.style) {
|
|
1184
1181
|
node.style = {};
|
|
1185
1182
|
}
|
|
@@ -1200,7 +1197,7 @@ function mutateUpdateMediaNestedStyle(tab, path, mediaName, selector, prop, valu
|
|
|
1200
1197
|
if (Object.keys(node.style).length === 0) {
|
|
1201
1198
|
delete node.style;
|
|
1202
1199
|
}
|
|
1203
|
-
recordDocOp(setKeyPair(path, "style", styleBefore,
|
|
1200
|
+
recordDocOp(setKeyPair(path, "style", styleBefore, cloneValue2(node.style)));
|
|
1204
1201
|
recordPatch({ op: "set-style", path });
|
|
1205
1202
|
}
|
|
1206
1203
|
function pruneEmptyStylePath(root, stylePath) {
|
|
@@ -1222,8 +1219,8 @@ function pruneEmptyStylePath(root, stylePath) {
|
|
|
1222
1219
|
}
|
|
1223
1220
|
}
|
|
1224
1221
|
function mutateUpdateNestedStylePath(tab, path, stylePath, prop, value) {
|
|
1225
|
-
const node =
|
|
1226
|
-
const styleBefore =
|
|
1222
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1223
|
+
const styleBefore = cloneValue2(node.style);
|
|
1227
1224
|
if (!node.style) {
|
|
1228
1225
|
node.style = {};
|
|
1229
1226
|
}
|
|
@@ -1240,12 +1237,12 @@ function mutateUpdateNestedStylePath(tab, path, stylePath, prop, value) {
|
|
|
1240
1237
|
if (Object.keys(node.style).length === 0) {
|
|
1241
1238
|
delete node.style;
|
|
1242
1239
|
}
|
|
1243
|
-
recordDocOp(setKeyPair(path, "style", styleBefore,
|
|
1240
|
+
recordDocOp(setKeyPair(path, "style", styleBefore, cloneValue2(node.style)));
|
|
1244
1241
|
recordPatch({ op: "set-style", path });
|
|
1245
1242
|
}
|
|
1246
1243
|
function mutateUpdateMediaNestedStylePath(tab, path, mediaName, stylePath, prop, value) {
|
|
1247
|
-
const node =
|
|
1248
|
-
const styleBefore =
|
|
1244
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1245
|
+
const styleBefore = cloneValue2(node.style);
|
|
1249
1246
|
if (!node.style) {
|
|
1250
1247
|
node.style = {};
|
|
1251
1248
|
}
|
|
@@ -1267,45 +1264,45 @@ function mutateUpdateMediaNestedStylePath(tab, path, mediaName, stylePath, prop,
|
|
|
1267
1264
|
if (Object.keys(node.style).length === 0) {
|
|
1268
1265
|
delete node.style;
|
|
1269
1266
|
}
|
|
1270
|
-
recordDocOp(setKeyPair(path, "style", styleBefore,
|
|
1267
|
+
recordDocOp(setKeyPair(path, "style", styleBefore, cloneValue2(node.style)));
|
|
1271
1268
|
recordPatch({ op: "set-style", path });
|
|
1272
1269
|
}
|
|
1273
1270
|
function mutateReplaceStyle(tab, path, style) {
|
|
1274
|
-
const node =
|
|
1275
|
-
const styleBefore =
|
|
1271
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1272
|
+
const styleBefore = cloneValue2(node.style);
|
|
1276
1273
|
if (style && Object.keys(style).length > 0) {
|
|
1277
1274
|
node.style = style;
|
|
1278
1275
|
} else {
|
|
1279
1276
|
delete node.style;
|
|
1280
1277
|
}
|
|
1281
|
-
recordDocOp(setKeyPair(path, "style", styleBefore,
|
|
1278
|
+
recordDocOp(setKeyPair(path, "style", styleBefore, cloneValue2(node.style)));
|
|
1282
1279
|
recordPatch({ op: "set-style", path });
|
|
1283
1280
|
}
|
|
1284
1281
|
function mutateAddDef(tab, name, def) {
|
|
1285
1282
|
const doc = tab.doc.document;
|
|
1286
|
-
const before =
|
|
1283
|
+
const before = cloneValue2(doc.state);
|
|
1287
1284
|
if (!doc.state) {
|
|
1288
1285
|
doc.state = {};
|
|
1289
1286
|
}
|
|
1290
1287
|
doc.state[name] = def;
|
|
1291
|
-
recordDocOp(setKeyPair([], "state", before,
|
|
1288
|
+
recordDocOp(setKeyPair([], "state", before, cloneValue2(doc.state)));
|
|
1292
1289
|
recordPatch({ key: "state", op: "doc-meta" });
|
|
1293
1290
|
}
|
|
1294
1291
|
function mutateRemoveDef(tab, name) {
|
|
1295
1292
|
const doc = tab.doc.document;
|
|
1296
1293
|
if (doc.state) {
|
|
1297
|
-
const before =
|
|
1294
|
+
const before = cloneValue2(doc.state);
|
|
1298
1295
|
delete doc.state[name];
|
|
1299
1296
|
if (Object.keys(doc.state).length === 0) {
|
|
1300
1297
|
delete doc.state;
|
|
1301
1298
|
}
|
|
1302
|
-
recordDocOp(setKeyPair([], "state", before,
|
|
1299
|
+
recordDocOp(setKeyPair([], "state", before, cloneValue2(doc.state)));
|
|
1303
1300
|
recordPatch({ key: "state", op: "doc-meta" });
|
|
1304
1301
|
}
|
|
1305
1302
|
}
|
|
1306
1303
|
function mutateUpdateDef(tab, name, updates) {
|
|
1307
1304
|
const doc = tab.doc.document;
|
|
1308
|
-
const stateBefore =
|
|
1305
|
+
const stateBefore = cloneValue2(doc.state);
|
|
1309
1306
|
if (!doc.state) {
|
|
1310
1307
|
doc.state = {};
|
|
1311
1308
|
}
|
|
@@ -1318,7 +1315,7 @@ function mutateUpdateDef(tab, name, updates) {
|
|
|
1318
1315
|
delete entry[k];
|
|
1319
1316
|
}
|
|
1320
1317
|
}
|
|
1321
|
-
recordDocOp(setKeyPair([], "state", stateBefore,
|
|
1318
|
+
recordDocOp(setKeyPair([], "state", stateBefore, cloneValue2(doc.state)));
|
|
1322
1319
|
recordPatch({ key: "state", op: "doc-meta" });
|
|
1323
1320
|
}
|
|
1324
1321
|
function mutateRenameDef(tab, oldName, newName) {
|
|
@@ -1326,15 +1323,15 @@ function mutateRenameDef(tab, oldName, newName) {
|
|
|
1326
1323
|
if (!doc.state || !doc.state[oldName]) {
|
|
1327
1324
|
return;
|
|
1328
1325
|
}
|
|
1329
|
-
const before =
|
|
1326
|
+
const before = cloneValue2(doc.state);
|
|
1330
1327
|
doc.state[newName] = doc.state[oldName];
|
|
1331
1328
|
delete doc.state[oldName];
|
|
1332
|
-
recordDocOp(setKeyPair([], "state", before,
|
|
1329
|
+
recordDocOp(setKeyPair([], "state", before, cloneValue2(doc.state)));
|
|
1333
1330
|
recordPatch({ key: "state", op: "doc-meta" });
|
|
1334
1331
|
}
|
|
1335
1332
|
function mutateUpdateProp(tab, path, propName, value) {
|
|
1336
|
-
const node =
|
|
1337
|
-
const propsBefore =
|
|
1333
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1334
|
+
const propsBefore = cloneValue2(node.$props);
|
|
1338
1335
|
if (!node.$props) {
|
|
1339
1336
|
node.$props = {};
|
|
1340
1337
|
}
|
|
@@ -1346,49 +1343,49 @@ function mutateUpdateProp(tab, path, propName, value) {
|
|
|
1346
1343
|
if (Object.keys(node.$props).length === 0) {
|
|
1347
1344
|
delete node.$props;
|
|
1348
1345
|
}
|
|
1349
|
-
recordDocOp(setKeyPair(path, "$props", propsBefore,
|
|
1346
|
+
recordDocOp(setKeyPair(path, "$props", propsBefore, cloneValue2(node.$props)));
|
|
1350
1347
|
recordPatch({ op: "replace", path });
|
|
1351
1348
|
}
|
|
1352
1349
|
function mutateAddSwitchCase(tab, path, caseName, caseDef) {
|
|
1353
|
-
const node =
|
|
1354
|
-
const before =
|
|
1350
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1351
|
+
const before = cloneValue2(node.cases);
|
|
1355
1352
|
if (!node.cases) {
|
|
1356
1353
|
node.cases = {};
|
|
1357
1354
|
}
|
|
1358
1355
|
node.cases[caseName] = caseDef || { tagName: "div", textContent: caseName };
|
|
1359
|
-
recordDocOp(setKeyPair(path, "cases", before,
|
|
1356
|
+
recordDocOp(setKeyPair(path, "cases", before, cloneValue2(node.cases)));
|
|
1360
1357
|
recordPatch({ op: "replace", path });
|
|
1361
1358
|
}
|
|
1362
1359
|
function mutateRemoveSwitchCase(tab, path, caseName) {
|
|
1363
|
-
const node =
|
|
1360
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1364
1361
|
if (node.cases) {
|
|
1365
|
-
const before =
|
|
1362
|
+
const before = cloneValue2(node.cases);
|
|
1366
1363
|
delete node.cases[caseName];
|
|
1367
|
-
recordDocOp(setKeyPair(path, "cases", before,
|
|
1364
|
+
recordDocOp(setKeyPair(path, "cases", before, cloneValue2(node.cases)));
|
|
1368
1365
|
recordPatch({ op: "replace", path });
|
|
1369
1366
|
}
|
|
1370
1367
|
}
|
|
1371
1368
|
function mutateRenameSwitchCase(tab, path, oldName, newName) {
|
|
1372
|
-
const node =
|
|
1369
|
+
const node = getNodeAtPath2(tab.doc.document, path);
|
|
1373
1370
|
if (!node.cases || !node.cases[oldName]) {
|
|
1374
1371
|
return;
|
|
1375
1372
|
}
|
|
1376
|
-
const before =
|
|
1373
|
+
const before = cloneValue2(node.cases);
|
|
1377
1374
|
node.cases[newName] = node.cases[oldName];
|
|
1378
1375
|
delete node.cases[oldName];
|
|
1379
|
-
recordDocOp(setKeyPair(path, "cases", before,
|
|
1376
|
+
recordDocOp(setKeyPair(path, "cases", before, cloneValue2(node.cases)));
|
|
1380
1377
|
recordPatch({ op: "replace", path });
|
|
1381
1378
|
}
|
|
1382
1379
|
function mutateUpdateFrontmatter(tab, field, value) {
|
|
1383
1380
|
const fm = tab.doc.content.frontmatter;
|
|
1384
|
-
const before = Object.hasOwn(fm, field) ?
|
|
1381
|
+
const before = Object.hasOwn(fm, field) ? cloneValue2(fm[field]) : undefined;
|
|
1385
1382
|
const deletes = value === undefined || value === null || value === "";
|
|
1386
1383
|
if (deletes) {
|
|
1387
1384
|
delete fm[field];
|
|
1388
1385
|
} else {
|
|
1389
1386
|
fm[field] = value;
|
|
1390
1387
|
}
|
|
1391
|
-
const after = deletes ? undefined :
|
|
1388
|
+
const after = deletes ? undefined : cloneValue2(value);
|
|
1392
1389
|
recordFmOp({ after, before, field });
|
|
1393
1390
|
tab.doc.dirty = true;
|
|
1394
1391
|
}
|
|
@@ -1520,6 +1517,8 @@ function createDefaultUi(canvasMode, preview = false) {
|
|
|
1520
1517
|
return {
|
|
1521
1518
|
activeMedia: null,
|
|
1522
1519
|
activeSelector: null,
|
|
1520
|
+
openPopover: null,
|
|
1521
|
+
openDialog: null,
|
|
1523
1522
|
canvasMode,
|
|
1524
1523
|
editZoom: 1,
|
|
1525
1524
|
editingFormula: null,
|
|
@@ -1542,7 +1541,7 @@ function createDefaultUi(canvasMode, preview = false) {
|
|
|
1542
1541
|
zoom: 1
|
|
1543
1542
|
};
|
|
1544
1543
|
}
|
|
1545
|
-
var ALL_MODES = ["edit", "design", "preview", "source", "stylebook"];
|
|
1544
|
+
var ALL_MODES = ["edit", "design", "preview", "source", "stylebook", "git-diff"];
|
|
1546
1545
|
function createTab({
|
|
1547
1546
|
id,
|
|
1548
1547
|
documentPath = null,
|
|
@@ -1552,7 +1551,8 @@ function createTab({
|
|
|
1552
1551
|
sourceFormat = null,
|
|
1553
1552
|
capabilities,
|
|
1554
1553
|
openedFrom = null,
|
|
1555
|
-
preview: previewTab = false
|
|
1554
|
+
preview: previewTab = false,
|
|
1555
|
+
layout = null
|
|
1556
1556
|
}) {
|
|
1557
1557
|
const scope = effectScope();
|
|
1558
1558
|
normalizeArrayChildren(document);
|
|
@@ -1566,6 +1566,7 @@ function createTab({
|
|
|
1566
1566
|
dirty: false,
|
|
1567
1567
|
document,
|
|
1568
1568
|
handlersSource: null,
|
|
1569
|
+
layout,
|
|
1569
1570
|
mode: inferDocumentMode(documentPath, sourceFormat),
|
|
1570
1571
|
sourceFormat
|
|
1571
1572
|
}),
|
|
@@ -1601,14 +1602,14 @@ function inferModes(documentPath, sourceFormat) {
|
|
|
1601
1602
|
if (documentPath === PROJECT_CONFIG_PATH) {
|
|
1602
1603
|
return ["stylebook", "source"];
|
|
1603
1604
|
}
|
|
1604
|
-
const format =
|
|
1605
|
+
const format = formatByName2(sourceFormat) ?? formatForPath2(documentPath);
|
|
1605
1606
|
if (format) {
|
|
1606
1607
|
return format.studio?.modes ?? ["edit", "design", "preview", "source"];
|
|
1607
1608
|
}
|
|
1608
1609
|
return ALL_MODES;
|
|
1609
1610
|
}
|
|
1610
1611
|
function inferDocumentMode(documentPath, sourceFormat) {
|
|
1611
|
-
const format =
|
|
1612
|
+
const format = formatByName2(sourceFormat) ?? formatForPath2(documentPath);
|
|
1612
1613
|
if (format) {
|
|
1613
1614
|
return format.studio?.documentMode?.default ?? "content";
|
|
1614
1615
|
}
|
|
@@ -1677,12 +1678,12 @@ var MIRROR_DEBOUNCE_MS = 800;
|
|
|
1677
1678
|
var MIRROR_MAX_LAG_MS = 2500;
|
|
1678
1679
|
var collabModulePromise = null;
|
|
1679
1680
|
function loadCollab() {
|
|
1680
|
-
collabModulePromise ??= import("./index-
|
|
1681
|
+
collabModulePromise ??= (__preload("n4j7qxyr"), import("./index-n4j7qxyr.js"));
|
|
1681
1682
|
return collabModulePromise;
|
|
1682
1683
|
}
|
|
1683
1684
|
function maybePlatform() {
|
|
1684
1685
|
try {
|
|
1685
|
-
return
|
|
1686
|
+
return getPlatform2();
|
|
1686
1687
|
} catch {
|
|
1687
1688
|
return null;
|
|
1688
1689
|
}
|
|
@@ -2103,7 +2104,7 @@ async function attachSession(tab) {
|
|
|
2103
2104
|
state.status = "failed";
|
|
2104
2105
|
state.active = false;
|
|
2105
2106
|
state.attachError = error instanceof Error ? error.message : String(error);
|
|
2106
|
-
|
|
2107
|
+
notify2.warn(`Live collaboration is not available for "${path}" — ${state.attachError}`, {
|
|
2107
2108
|
key: `collab:${path}`,
|
|
2108
2109
|
path,
|
|
2109
2110
|
source: "Collaboration"
|
|
@@ -2420,6 +2421,13 @@ function numberArg(commandId, args, key) {
|
|
|
2420
2421
|
}
|
|
2421
2422
|
return value;
|
|
2422
2423
|
}
|
|
2424
|
+
function integerArg(commandId, args, key) {
|
|
2425
|
+
const value = args[key];
|
|
2426
|
+
if (typeof value !== "number" || !Number.isInteger(value)) {
|
|
2427
|
+
throw refuse(commandId, key, `expected an integer, got ${describe(value)}`);
|
|
2428
|
+
}
|
|
2429
|
+
return value;
|
|
2430
|
+
}
|
|
2423
2431
|
function boundedNumberArg(commandId, args, key, minimum, maximum) {
|
|
2424
2432
|
const value = numberArg(commandId, args, key);
|
|
2425
2433
|
if (value < minimum || value > maximum) {
|
|
@@ -2437,7 +2445,7 @@ function booleanArg(commandId, args, key) {
|
|
|
2437
2445
|
function enumArg(commandId, args, key, declared) {
|
|
2438
2446
|
const value = args[key];
|
|
2439
2447
|
if (typeof value !== "string" || !declared.includes(value)) {
|
|
2440
|
-
throw refuse(commandId, key, `${describe(value)} is not declared — declared: ${declared.join(", ")}`);
|
|
2448
|
+
throw refuse(commandId, key, `${describe(value)} is not declared — declared: ${declared.join(", ") || "none"}`);
|
|
2441
2449
|
}
|
|
2442
2450
|
return value;
|
|
2443
2451
|
}
|
|
@@ -2509,14 +2517,234 @@ function pathListProperty(description) {
|
|
|
2509
2517
|
function stringProperty(description) {
|
|
2510
2518
|
return { description, type: "string" };
|
|
2511
2519
|
}
|
|
2520
|
+
function isPathSegmentTypes(types) {
|
|
2521
|
+
return types.length === 2 && types.includes("string") && types.includes("number");
|
|
2522
|
+
}
|
|
2523
|
+
function typesOf(type) {
|
|
2524
|
+
return Array.isArray(type) ? type : [type];
|
|
2525
|
+
}
|
|
2526
|
+
function describeShape(property) {
|
|
2527
|
+
const p = property;
|
|
2528
|
+
if ("enum" in p) {
|
|
2529
|
+
return "enum";
|
|
2530
|
+
}
|
|
2531
|
+
if ("const" in p) {
|
|
2532
|
+
return "const";
|
|
2533
|
+
}
|
|
2534
|
+
if (Array.isArray(p.oneOf)) {
|
|
2535
|
+
return "one-of";
|
|
2536
|
+
}
|
|
2537
|
+
if (Array.isArray(p.type)) {
|
|
2538
|
+
return "typed";
|
|
2539
|
+
}
|
|
2540
|
+
switch (p.type) {
|
|
2541
|
+
case "boolean": {
|
|
2542
|
+
return "boolean";
|
|
2543
|
+
}
|
|
2544
|
+
case "number":
|
|
2545
|
+
case "integer": {
|
|
2546
|
+
if (p.minimum !== undefined && p.maximum !== undefined) {
|
|
2547
|
+
return "bounded-number";
|
|
2548
|
+
}
|
|
2549
|
+
return p.type === "integer" ? "integer" : "number";
|
|
2550
|
+
}
|
|
2551
|
+
case "string": {
|
|
2552
|
+
return "string";
|
|
2553
|
+
}
|
|
2554
|
+
case "array": {
|
|
2555
|
+
const items = p.items?.type;
|
|
2556
|
+
if (Array.isArray(items)) {
|
|
2557
|
+
return isPathSegmentTypes(items) ? "path" : "pass-through";
|
|
2558
|
+
}
|
|
2559
|
+
return items === "array" ? "path-list" : "pass-through";
|
|
2560
|
+
}
|
|
2561
|
+
case "null":
|
|
2562
|
+
case "object": {
|
|
2563
|
+
return "typed";
|
|
2564
|
+
}
|
|
2565
|
+
default: {
|
|
2566
|
+
break;
|
|
2567
|
+
}
|
|
2568
|
+
}
|
|
2569
|
+
return "pass-through";
|
|
2570
|
+
}
|
|
2571
|
+
function isJsonType(type, value) {
|
|
2572
|
+
switch (type) {
|
|
2573
|
+
case "null": {
|
|
2574
|
+
return value === null;
|
|
2575
|
+
}
|
|
2576
|
+
case "boolean": {
|
|
2577
|
+
return typeof value === "boolean";
|
|
2578
|
+
}
|
|
2579
|
+
case "string": {
|
|
2580
|
+
return typeof value === "string";
|
|
2581
|
+
}
|
|
2582
|
+
case "number": {
|
|
2583
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
2584
|
+
}
|
|
2585
|
+
case "integer": {
|
|
2586
|
+
return typeof value === "number" && Number.isInteger(value);
|
|
2587
|
+
}
|
|
2588
|
+
case "array": {
|
|
2589
|
+
return Array.isArray(value);
|
|
2590
|
+
}
|
|
2591
|
+
case "object": {
|
|
2592
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2593
|
+
}
|
|
2594
|
+
default: {
|
|
2595
|
+
break;
|
|
2596
|
+
}
|
|
2597
|
+
}
|
|
2598
|
+
return false;
|
|
2599
|
+
}
|
|
2600
|
+
function listTypes(types) {
|
|
2601
|
+
if (types.length <= 1) {
|
|
2602
|
+
return types.join("");
|
|
2603
|
+
}
|
|
2604
|
+
return `${types.slice(0, -1).join(", ")} or ${types.at(-1)}`;
|
|
2605
|
+
}
|
|
2606
|
+
function typedArg(commandId, args, key, types) {
|
|
2607
|
+
const value = args[key];
|
|
2608
|
+
if (!types.some((type) => isJsonType(type, value))) {
|
|
2609
|
+
throw refuse(commandId, key, `expected ${listTypes(types)}, got ${describe(value)}`);
|
|
2610
|
+
}
|
|
2611
|
+
return value;
|
|
2612
|
+
}
|
|
2613
|
+
function shapeOf(property) {
|
|
2614
|
+
switch (describeShape(property)) {
|
|
2615
|
+
case "enum": {
|
|
2616
|
+
return `one of ${(property.enum ?? []).map((v) => describe(v)).join(" | ")}`;
|
|
2617
|
+
}
|
|
2618
|
+
case "const": {
|
|
2619
|
+
return `the constant ${describe(property.const)}`;
|
|
2620
|
+
}
|
|
2621
|
+
case "one-of": {
|
|
2622
|
+
return (property.oneOf ?? []).map((branch) => shapeOf(branch)).join(" or ");
|
|
2623
|
+
}
|
|
2624
|
+
case "typed": {
|
|
2625
|
+
return listTypes(typesOf(property.type ?? []));
|
|
2626
|
+
}
|
|
2627
|
+
case "boolean": {
|
|
2628
|
+
return "a boolean";
|
|
2629
|
+
}
|
|
2630
|
+
case "bounded-number": {
|
|
2631
|
+
return `a number from ${property.minimum} to ${property.maximum}`;
|
|
2632
|
+
}
|
|
2633
|
+
case "number": {
|
|
2634
|
+
return "a finite number";
|
|
2635
|
+
}
|
|
2636
|
+
case "integer": {
|
|
2637
|
+
return "an integer";
|
|
2638
|
+
}
|
|
2639
|
+
case "string": {
|
|
2640
|
+
return "a non-empty string";
|
|
2641
|
+
}
|
|
2642
|
+
case "path": {
|
|
2643
|
+
return "a document path";
|
|
2644
|
+
}
|
|
2645
|
+
case "path-list": {
|
|
2646
|
+
return "a list of document paths";
|
|
2647
|
+
}
|
|
2648
|
+
default: {
|
|
2649
|
+
return "anything";
|
|
2650
|
+
}
|
|
2651
|
+
}
|
|
2652
|
+
}
|
|
2653
|
+
function oneOfArg(commandId, args, key, branches) {
|
|
2654
|
+
const value = args[key];
|
|
2655
|
+
const refusals = [];
|
|
2656
|
+
for (const branch of branches) {
|
|
2657
|
+
if (branch.type !== undefined && !typesOf(branch.type).some((type) => isJsonType(type, value))) {
|
|
2658
|
+
continue;
|
|
2659
|
+
}
|
|
2660
|
+
try {
|
|
2661
|
+
return coerceProperty(commandId, args, key, branch);
|
|
2662
|
+
} catch (error) {
|
|
2663
|
+
refusals.push(error);
|
|
2664
|
+
}
|
|
2665
|
+
}
|
|
2666
|
+
if (refusals.length === 1) {
|
|
2667
|
+
throw refusals[0];
|
|
2668
|
+
}
|
|
2669
|
+
throw refuse(commandId, key, `expected ${branches.map((branch) => shapeOf(branch)).join(" or ")}, got ${describe(value)}`);
|
|
2670
|
+
}
|
|
2671
|
+
function coerceProperty(commandId, args, key, property) {
|
|
2672
|
+
switch (describeShape(property)) {
|
|
2673
|
+
case "enum": {
|
|
2674
|
+
return enumArg(commandId, args, key, property.enum ?? []);
|
|
2675
|
+
}
|
|
2676
|
+
case "const": {
|
|
2677
|
+
const value = args[key];
|
|
2678
|
+
if (value !== property.const) {
|
|
2679
|
+
throw refuse(commandId, key, `expected the constant ${describe(property.const)}, got ${describe(value)}`);
|
|
2680
|
+
}
|
|
2681
|
+
return value;
|
|
2682
|
+
}
|
|
2683
|
+
case "one-of": {
|
|
2684
|
+
return oneOfArg(commandId, args, key, property.oneOf ?? []);
|
|
2685
|
+
}
|
|
2686
|
+
case "typed": {
|
|
2687
|
+
return typedArg(commandId, args, key, typesOf(property.type ?? []));
|
|
2688
|
+
}
|
|
2689
|
+
case "boolean": {
|
|
2690
|
+
return booleanArg(commandId, args, key);
|
|
2691
|
+
}
|
|
2692
|
+
case "bounded-number": {
|
|
2693
|
+
if (property.type === "integer") {
|
|
2694
|
+
integerArg(commandId, args, key);
|
|
2695
|
+
}
|
|
2696
|
+
return boundedNumberArg(commandId, args, key, property.minimum, property.maximum);
|
|
2697
|
+
}
|
|
2698
|
+
case "number": {
|
|
2699
|
+
return numberArg(commandId, args, key);
|
|
2700
|
+
}
|
|
2701
|
+
case "integer": {
|
|
2702
|
+
return integerArg(commandId, args, key);
|
|
2703
|
+
}
|
|
2704
|
+
case "string": {
|
|
2705
|
+
return stringArg(commandId, args, key);
|
|
2706
|
+
}
|
|
2707
|
+
case "path": {
|
|
2708
|
+
return pathArg(commandId, args, key);
|
|
2709
|
+
}
|
|
2710
|
+
case "path-list": {
|
|
2711
|
+
return pathListArg(commandId, args, key);
|
|
2712
|
+
}
|
|
2713
|
+
default: {
|
|
2714
|
+
return args[key];
|
|
2715
|
+
}
|
|
2716
|
+
}
|
|
2717
|
+
}
|
|
2718
|
+
function coerceArgs(commandId, schema, args) {
|
|
2719
|
+
const spec = schema;
|
|
2720
|
+
const properties = spec.properties ?? {};
|
|
2721
|
+
const declared = Object.keys(properties);
|
|
2722
|
+
const required = spec.required ?? [];
|
|
2723
|
+
const coerced = {};
|
|
2724
|
+
for (const [key, value] of Object.entries(args)) {
|
|
2725
|
+
if (value === undefined || Object.hasOwn(properties, key)) {
|
|
2726
|
+
continue;
|
|
2727
|
+
}
|
|
2728
|
+
if (spec.additionalProperties === false) {
|
|
2729
|
+
throw refuse(commandId, key, `not declared — declared: ${declared.join(", ") || "none"}`);
|
|
2730
|
+
}
|
|
2731
|
+
coerced[key] = value;
|
|
2732
|
+
}
|
|
2733
|
+
for (const key of declared) {
|
|
2734
|
+
if (args[key] === undefined && !required.includes(key)) {
|
|
2735
|
+
continue;
|
|
2736
|
+
}
|
|
2737
|
+
coerced[key] = coerceProperty(commandId, args, key, properties[key]);
|
|
2738
|
+
}
|
|
2739
|
+
return coerced;
|
|
2740
|
+
}
|
|
2512
2741
|
|
|
2513
2742
|
// src/workspace/workspace.ts
|
|
2514
2743
|
var CLOSED_TAB_LIMIT = 20;
|
|
2515
|
-
var
|
|
2516
|
-
var
|
|
2517
|
-
var
|
|
2518
|
-
|
|
2519
|
-
activePaneId: PRIMARY_PANE,
|
|
2744
|
+
var PRIMARY_PANE2 = "primary";
|
|
2745
|
+
var SECONDARY_PANE2 = "secondary";
|
|
2746
|
+
var workspace2 = reactive({
|
|
2747
|
+
activePaneId: PRIMARY_PANE2,
|
|
2520
2748
|
clipboard: null,
|
|
2521
2749
|
closedTabs: [],
|
|
2522
2750
|
componentRegistry: [],
|
|
@@ -2531,7 +2759,7 @@ var workspace = reactive({
|
|
|
2531
2759
|
{
|
|
2532
2760
|
activeTabId: null,
|
|
2533
2761
|
derived: null,
|
|
2534
|
-
id:
|
|
2762
|
+
id: PRIMARY_PANE2,
|
|
2535
2763
|
tabOrder: []
|
|
2536
2764
|
}
|
|
2537
2765
|
],
|
|
@@ -2543,83 +2771,77 @@ var workspace = reactive({
|
|
|
2543
2771
|
activityBar: "files"
|
|
2544
2772
|
},
|
|
2545
2773
|
get activeTabId() {
|
|
2546
|
-
const pane =
|
|
2547
|
-
return pane.derived?.kind === "lens" ?
|
|
2774
|
+
const pane = activePane2();
|
|
2775
|
+
return pane.derived?.kind === "lens" ? paneById2(pane.derived.sourcePaneId)?.activeTabId ?? null : pane.activeTabId;
|
|
2548
2776
|
},
|
|
2549
2777
|
get tabOrder() {
|
|
2550
|
-
return
|
|
2778
|
+
return activePane2().tabOrder;
|
|
2551
2779
|
}
|
|
2552
2780
|
});
|
|
2553
|
-
var
|
|
2554
|
-
function
|
|
2555
|
-
const { panes } =
|
|
2556
|
-
return panes.find((pane) => pane.id ===
|
|
2781
|
+
var activeTab2 = computed(() => workspace2.activeTabId ? workspace2.tabs.get(workspace2.activeTabId) ?? null : null);
|
|
2782
|
+
function activePane2() {
|
|
2783
|
+
const { panes } = workspace2;
|
|
2784
|
+
return panes.find((pane) => pane.id === workspace2.activePaneId) ?? panes[0];
|
|
2557
2785
|
}
|
|
2558
|
-
function
|
|
2559
|
-
return
|
|
2786
|
+
function paneById2(paneId) {
|
|
2787
|
+
return workspace2.panes.find((pane) => pane.id === paneId);
|
|
2560
2788
|
}
|
|
2561
|
-
function
|
|
2562
|
-
return
|
|
2789
|
+
function paneOfTab2(tabId) {
|
|
2790
|
+
return workspace2.panes.find((pane) => pane.tabOrder.includes(tabId));
|
|
2563
2791
|
}
|
|
2564
|
-
function
|
|
2565
|
-
const pane =
|
|
2566
|
-
if (!pane || pane.id ===
|
|
2792
|
+
function focusPane2(paneId) {
|
|
2793
|
+
const pane = paneById2(paneId);
|
|
2794
|
+
if (!pane || pane.id === workspace2.activePaneId) {
|
|
2567
2795
|
return;
|
|
2568
2796
|
}
|
|
2569
|
-
|
|
2797
|
+
workspace2.activePaneId = pane.id;
|
|
2570
2798
|
resetTabCycle();
|
|
2571
2799
|
const { activeTabId } = pane;
|
|
2572
2800
|
if (activeTabId) {
|
|
2573
2801
|
promoteMru(activeTabId);
|
|
2574
|
-
const tab =
|
|
2802
|
+
const tab = workspace2.tabs.get(activeTabId);
|
|
2575
2803
|
if (tab) {
|
|
2576
2804
|
syncTreeSelection(tab);
|
|
2577
2805
|
}
|
|
2578
2806
|
}
|
|
2579
2807
|
}
|
|
2580
|
-
function
|
|
2581
|
-
return
|
|
2582
|
-
}
|
|
2583
|
-
function focusOtherPane() {
|
|
2584
|
-
const other = workspace.panes.find((pane) => pane.id !== workspace.activePaneId);
|
|
2585
|
-
if (other) {
|
|
2586
|
-
focusPane(other.id);
|
|
2587
|
-
}
|
|
2808
|
+
function isPaneFocused2(paneId) {
|
|
2809
|
+
return workspace2.activePaneId === paneId;
|
|
2588
2810
|
}
|
|
2589
2811
|
function splitRight() {
|
|
2590
|
-
const source =
|
|
2812
|
+
const source = activePane2();
|
|
2591
2813
|
const tabId = source.activeTabId;
|
|
2592
|
-
const tab = tabId ?
|
|
2814
|
+
const tab = tabId ? workspace2.tabs.get(tabId) : null;
|
|
2593
2815
|
if (!tabId || !tab) {
|
|
2594
2816
|
return null;
|
|
2595
2817
|
}
|
|
2596
|
-
const target =
|
|
2597
|
-
|
|
2598
|
-
|
|
2818
|
+
const target = receivingPane2();
|
|
2819
|
+
detachTab2(tabId);
|
|
2820
|
+
insertIntoPane2(target, tabId);
|
|
2599
2821
|
target.activeTabId = tabId;
|
|
2600
|
-
|
|
2822
|
+
workspace2.activePaneId = target.id;
|
|
2601
2823
|
resetTabCycle();
|
|
2602
2824
|
promoteMru(tabId);
|
|
2603
2825
|
return target;
|
|
2604
2826
|
}
|
|
2605
|
-
function
|
|
2606
|
-
const source =
|
|
2607
|
-
return
|
|
2827
|
+
function sidePane2() {
|
|
2828
|
+
const source = activePane2();
|
|
2829
|
+
return workspace2.panes.find((pane) => pane.id !== source.id) ?? addPane(SECONDARY_PANE2);
|
|
2608
2830
|
}
|
|
2609
|
-
function
|
|
2610
|
-
const target =
|
|
2831
|
+
function receivingPane2() {
|
|
2832
|
+
const target = sidePane2();
|
|
2611
2833
|
if (target.derived) {
|
|
2612
2834
|
target.derived = null;
|
|
2613
2835
|
}
|
|
2614
2836
|
return target;
|
|
2615
2837
|
}
|
|
2616
2838
|
function addPane(paneId) {
|
|
2617
|
-
const existing =
|
|
2839
|
+
const existing = paneById2(paneId);
|
|
2618
2840
|
if (existing) {
|
|
2619
2841
|
return existing;
|
|
2620
2842
|
}
|
|
2621
|
-
|
|
2622
|
-
...
|
|
2843
|
+
workspace2.panes = [
|
|
2844
|
+
...workspace2.panes,
|
|
2623
2845
|
{
|
|
2624
2846
|
activeTabId: null,
|
|
2625
2847
|
derived: null,
|
|
@@ -2627,35 +2849,35 @@ function addPane(paneId) {
|
|
|
2627
2849
|
tabOrder: []
|
|
2628
2850
|
}
|
|
2629
2851
|
];
|
|
2630
|
-
return
|
|
2852
|
+
return paneById2(paneId);
|
|
2631
2853
|
}
|
|
2632
2854
|
function closePane(paneId) {
|
|
2633
|
-
if (
|
|
2855
|
+
if (workspace2.panes.length < 2) {
|
|
2634
2856
|
return;
|
|
2635
2857
|
}
|
|
2636
|
-
const closingId = paneId ===
|
|
2637
|
-
const pane = closingId === undefined ? undefined :
|
|
2638
|
-
const survivor =
|
|
2858
|
+
const closingId = paneId === PRIMARY_PANE2 ? workspace2.panes.find((candidate) => candidate.id !== PRIMARY_PANE2)?.id : paneId;
|
|
2859
|
+
const pane = closingId === undefined ? undefined : paneById2(closingId);
|
|
2860
|
+
const survivor = workspace2.panes.find((candidate) => candidate.id !== closingId);
|
|
2639
2861
|
if (!pane || !survivor) {
|
|
2640
2862
|
return;
|
|
2641
2863
|
}
|
|
2642
2864
|
for (const tabId of pane.tabOrder) {
|
|
2643
|
-
|
|
2865
|
+
insertIntoPane2(survivor, tabId);
|
|
2644
2866
|
}
|
|
2645
|
-
survivor.activeTabId =
|
|
2646
|
-
|
|
2867
|
+
survivor.activeTabId = workspace2.activePaneId === pane.id ? pane.activeTabId ?? survivor.activeTabId : survivor.activeTabId ?? pane.activeTabId;
|
|
2868
|
+
workspace2.activePaneId = survivor.id;
|
|
2647
2869
|
if (survivor.derived?.sourcePaneId === pane.id) {
|
|
2648
2870
|
survivor.derived = null;
|
|
2649
2871
|
}
|
|
2650
|
-
|
|
2872
|
+
workspace2.panes = workspace2.panes.filter((candidate) => candidate.id !== pane.id);
|
|
2651
2873
|
resetTabCycle();
|
|
2652
2874
|
}
|
|
2653
2875
|
function paneIsEmpty(pane) {
|
|
2654
2876
|
return pane.tabOrder.length === 0 && pane.derived === null;
|
|
2655
2877
|
}
|
|
2656
|
-
function
|
|
2878
|
+
function detachTab2(tabId) {
|
|
2657
2879
|
const emptied = [];
|
|
2658
|
-
for (const pane of
|
|
2880
|
+
for (const pane of workspace2.panes) {
|
|
2659
2881
|
if (!pane.tabOrder.includes(tabId)) {
|
|
2660
2882
|
continue;
|
|
2661
2883
|
}
|
|
@@ -2663,7 +2885,7 @@ function detachTab(tabId) {
|
|
|
2663
2885
|
if (pane.activeTabId === tabId) {
|
|
2664
2886
|
pane.activeTabId = pane.tabOrder.at(-1) ?? null;
|
|
2665
2887
|
}
|
|
2666
|
-
if (pane.id !==
|
|
2888
|
+
if (pane.id !== PRIMARY_PANE2 && paneIsEmpty(pane)) {
|
|
2667
2889
|
emptied.push(pane.id);
|
|
2668
2890
|
}
|
|
2669
2891
|
}
|
|
@@ -2671,7 +2893,7 @@ function detachTab(tabId) {
|
|
|
2671
2893
|
closePane(paneId);
|
|
2672
2894
|
}
|
|
2673
2895
|
}
|
|
2674
|
-
function
|
|
2896
|
+
function insertIntoPane2(pane, tabId, index) {
|
|
2675
2897
|
if (pane.tabOrder.includes(tabId)) {
|
|
2676
2898
|
return;
|
|
2677
2899
|
}
|
|
@@ -2681,7 +2903,7 @@ function insertIntoPane(pane, tabId, index) {
|
|
|
2681
2903
|
function pinnedCount(pane) {
|
|
2682
2904
|
let count = 0;
|
|
2683
2905
|
for (const id of pane.tabOrder) {
|
|
2684
|
-
if (
|
|
2906
|
+
if (workspace2.tabs.get(id)?.pinned !== true) {
|
|
2685
2907
|
break;
|
|
2686
2908
|
}
|
|
2687
2909
|
count += 1;
|
|
@@ -2689,25 +2911,25 @@ function pinnedCount(pane) {
|
|
|
2689
2911
|
return count;
|
|
2690
2912
|
}
|
|
2691
2913
|
function defaultSlot(pane, tabId) {
|
|
2692
|
-
return
|
|
2914
|
+
return workspace2.tabs.get(tabId)?.pinned === true ? pinnedCount(pane) : pane.tabOrder.length;
|
|
2693
2915
|
}
|
|
2694
|
-
function
|
|
2695
|
-
|
|
2696
|
-
|
|
2916
|
+
function setWorkspaceProject2(root, config = null) {
|
|
2917
|
+
workspace2.projectRoot = root;
|
|
2918
|
+
workspace2.projectConfig = config;
|
|
2697
2919
|
}
|
|
2698
|
-
function
|
|
2699
|
-
const active =
|
|
2920
|
+
function isTabActive2(tab) {
|
|
2921
|
+
const active = activeTab2.value;
|
|
2700
2922
|
return tab !== null && active !== null && toRaw(active) === toRaw(tab);
|
|
2701
2923
|
}
|
|
2702
|
-
function
|
|
2924
|
+
function tabIsLive2(tab) {
|
|
2703
2925
|
if (!tab) {
|
|
2704
2926
|
return false;
|
|
2705
2927
|
}
|
|
2706
|
-
const held =
|
|
2928
|
+
const held = workspace2.tabs.get(tab.id);
|
|
2707
2929
|
return held !== undefined && toRaw(held) === toRaw(tab);
|
|
2708
2930
|
}
|
|
2709
2931
|
function promoteMru(tabId) {
|
|
2710
|
-
|
|
2932
|
+
workspace2.mruOrder = [tabId, ...workspace2.mruOrder.filter((id) => id !== tabId)];
|
|
2711
2933
|
}
|
|
2712
2934
|
var _cycleList = null;
|
|
2713
2935
|
var _cycleIndex = 0;
|
|
@@ -2721,8 +2943,8 @@ function syncTreeSelection(tab) {
|
|
|
2721
2943
|
}
|
|
2722
2944
|
}
|
|
2723
2945
|
function setActiveTab(tabId, opts = {}) {
|
|
2724
|
-
const tab =
|
|
2725
|
-
const pane =
|
|
2946
|
+
const tab = workspace2.tabs.get(tabId);
|
|
2947
|
+
const pane = paneOfTab2(tabId);
|
|
2726
2948
|
if (!tab || !pane) {
|
|
2727
2949
|
return;
|
|
2728
2950
|
}
|
|
@@ -2730,18 +2952,18 @@ function setActiveTab(tabId, opts = {}) {
|
|
|
2730
2952
|
if (opts.focus === false) {
|
|
2731
2953
|
return;
|
|
2732
2954
|
}
|
|
2733
|
-
|
|
2955
|
+
workspace2.activePaneId = pane.id;
|
|
2734
2956
|
if (!opts.cycling) {
|
|
2735
2957
|
resetTabCycle();
|
|
2736
2958
|
promoteMru(tabId);
|
|
2737
2959
|
}
|
|
2738
2960
|
syncTreeSelection(tab);
|
|
2739
2961
|
}
|
|
2740
|
-
function
|
|
2741
|
-
const previous =
|
|
2962
|
+
function openTab2(opts) {
|
|
2963
|
+
const previous = workspace2.tabs.get(opts.id);
|
|
2742
2964
|
const preview = opts.preview === true && previous?.pinned !== true;
|
|
2743
2965
|
const tab = createTab({ ...opts, preview });
|
|
2744
|
-
const pane = (opts.paneId === undefined ? undefined :
|
|
2966
|
+
const pane = (opts.paneId === undefined ? undefined : paneById2(opts.paneId)) ?? activePane2();
|
|
2745
2967
|
let slot;
|
|
2746
2968
|
if (previous) {
|
|
2747
2969
|
tab.pinned = previous.pinned;
|
|
@@ -2749,43 +2971,43 @@ function openTab(opts) {
|
|
|
2749
2971
|
} else {
|
|
2750
2972
|
if (preview) {
|
|
2751
2973
|
const sitting = previewTabIn(pane);
|
|
2752
|
-
const sittingTab = sitting ?
|
|
2974
|
+
const sittingTab = sitting ? workspace2.tabs.get(sitting) : null;
|
|
2753
2975
|
if (sittingTab) {
|
|
2754
|
-
|
|
2976
|
+
commitTabBuffers2(sittingTab);
|
|
2755
2977
|
}
|
|
2756
|
-
|
|
2978
|
+
promoteDirtyPreviewTabs2();
|
|
2757
2979
|
}
|
|
2758
2980
|
const replaced = preview ? previewTabIn(pane) : null;
|
|
2759
2981
|
if (replaced) {
|
|
2760
2982
|
slot = pane.tabOrder.indexOf(replaced);
|
|
2761
|
-
|
|
2983
|
+
closeTab2(replaced);
|
|
2762
2984
|
}
|
|
2763
|
-
|
|
2985
|
+
insertIntoPane2(pane, tab.id, slot);
|
|
2764
2986
|
}
|
|
2765
|
-
|
|
2987
|
+
workspace2.tabs.set(tab.id, tab);
|
|
2766
2988
|
setActiveTab(tab.id, { focus: opts.focus !== false });
|
|
2767
2989
|
ensureCollab(tab);
|
|
2768
2990
|
return tab;
|
|
2769
2991
|
}
|
|
2770
2992
|
function previewTabIn(pane) {
|
|
2771
|
-
return pane.tabOrder.find((id) =>
|
|
2993
|
+
return pane.tabOrder.find((id) => workspace2.tabs.get(id)?.preview === true) ?? null;
|
|
2772
2994
|
}
|
|
2773
|
-
function
|
|
2774
|
-
const tab =
|
|
2995
|
+
function promoteTab2(tabId) {
|
|
2996
|
+
const tab = workspace2.tabs.get(tabId);
|
|
2775
2997
|
if (tab?.preview === true) {
|
|
2776
2998
|
tab.preview = false;
|
|
2777
2999
|
}
|
|
2778
3000
|
}
|
|
2779
|
-
function
|
|
2780
|
-
for (const [id, tab] of
|
|
3001
|
+
function promoteDirtyPreviewTabs2() {
|
|
3002
|
+
for (const [id, tab] of workspace2.tabs) {
|
|
2781
3003
|
if (tab.preview && tab.doc.dirty) {
|
|
2782
|
-
|
|
3004
|
+
promoteTab2(id);
|
|
2783
3005
|
}
|
|
2784
3006
|
}
|
|
2785
3007
|
}
|
|
2786
|
-
function
|
|
2787
|
-
const tab =
|
|
2788
|
-
const pane =
|
|
3008
|
+
function setTabPinned2(tabId, pinned) {
|
|
3009
|
+
const tab = workspace2.tabs.get(tabId);
|
|
3010
|
+
const pane = paneOfTab2(tabId);
|
|
2789
3011
|
if (!tab || !pane) {
|
|
2790
3012
|
return;
|
|
2791
3013
|
}
|
|
@@ -2794,34 +3016,34 @@ function setTabPinned(tabId, pinned) {
|
|
|
2794
3016
|
tab.preview = false;
|
|
2795
3017
|
}
|
|
2796
3018
|
const without = pane.tabOrder.filter((id) => id !== tabId);
|
|
2797
|
-
const boundary = without.filter((id) =>
|
|
3019
|
+
const boundary = without.filter((id) => workspace2.tabs.get(id)?.pinned === true).length;
|
|
2798
3020
|
pane.tabOrder = [...without.slice(0, boundary), tabId, ...without.slice(boundary)];
|
|
2799
3021
|
}
|
|
2800
|
-
function
|
|
2801
|
-
const tab =
|
|
2802
|
-
const pane =
|
|
3022
|
+
function moveTab2(tabId, toIndex) {
|
|
3023
|
+
const tab = workspace2.tabs.get(tabId);
|
|
3024
|
+
const pane = paneOfTab2(tabId);
|
|
2803
3025
|
if (!tab || !pane) {
|
|
2804
3026
|
return;
|
|
2805
3027
|
}
|
|
2806
3028
|
const without = pane.tabOrder.filter((id) => id !== tabId);
|
|
2807
|
-
const boundary = without.filter((id) =>
|
|
3029
|
+
const boundary = without.filter((id) => workspace2.tabs.get(id)?.pinned === true).length;
|
|
2808
3030
|
const lower = tab.pinned ? 0 : boundary;
|
|
2809
3031
|
const upper = tab.pinned ? boundary : without.length;
|
|
2810
3032
|
const at = Math.min(Math.max(toIndex, lower), upper);
|
|
2811
3033
|
pane.tabOrder = [...without.slice(0, at), tabId, ...without.slice(at)];
|
|
2812
3034
|
}
|
|
2813
|
-
function
|
|
2814
|
-
const tab =
|
|
3035
|
+
function closeTab2(tabId) {
|
|
3036
|
+
const tab = workspace2.tabs.get(tabId);
|
|
2815
3037
|
if (!tab) {
|
|
2816
3038
|
return;
|
|
2817
3039
|
}
|
|
2818
|
-
const pane =
|
|
3040
|
+
const pane = paneOfTab2(tabId);
|
|
2819
3041
|
const wasActive = pane?.activeTabId === tabId;
|
|
2820
3042
|
rememberClosedTab(tab);
|
|
2821
3043
|
disposeTab(tab);
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
3044
|
+
workspace2.tabs.delete(tabId);
|
|
3045
|
+
detachTab2(tabId);
|
|
3046
|
+
workspace2.mruOrder = workspace2.mruOrder.filter((id) => id !== tabId);
|
|
2825
3047
|
resetTabCycle();
|
|
2826
3048
|
if (pane && paneIsEmpty(pane)) {
|
|
2827
3049
|
closePane(pane.id);
|
|
@@ -2829,47 +3051,47 @@ function closeTab(tabId) {
|
|
|
2829
3051
|
if (!wasActive) {
|
|
2830
3052
|
return;
|
|
2831
3053
|
}
|
|
2832
|
-
const survivor =
|
|
2833
|
-
const next =
|
|
3054
|
+
const survivor = activePane2();
|
|
3055
|
+
const next = workspace2.mruOrder.find((id) => survivor.tabOrder.includes(id)) ?? survivor.tabOrder.at(-1) ?? null;
|
|
2834
3056
|
if (next) {
|
|
2835
3057
|
setActiveTab(next);
|
|
2836
3058
|
}
|
|
2837
3059
|
}
|
|
2838
|
-
function
|
|
2839
|
-
const tabs = [...
|
|
2840
|
-
|
|
3060
|
+
function closeAllTabs2() {
|
|
3061
|
+
const tabs = [...workspace2.tabs.values()];
|
|
3062
|
+
workspace2.tabs.clear();
|
|
2841
3063
|
resetPanes();
|
|
2842
|
-
|
|
3064
|
+
workspace2.mruOrder = [];
|
|
2843
3065
|
resetTabCycle();
|
|
2844
3066
|
for (const tab of tabs) {
|
|
2845
3067
|
disposeTab(tab);
|
|
2846
3068
|
}
|
|
2847
3069
|
}
|
|
2848
3070
|
function resetPanes() {
|
|
2849
|
-
|
|
2850
|
-
|
|
3071
|
+
workspace2.panes = [{ activeTabId: null, derived: null, id: PRIMARY_PANE2, tabOrder: [] }];
|
|
3072
|
+
workspace2.activePaneId = PRIMARY_PANE2;
|
|
2851
3073
|
}
|
|
2852
3074
|
function rememberClosedTab(tab) {
|
|
2853
3075
|
if (!tab.documentPath) {
|
|
2854
3076
|
return;
|
|
2855
3077
|
}
|
|
2856
3078
|
const path = tab.documentPath;
|
|
2857
|
-
|
|
3079
|
+
workspace2.closedTabs = [
|
|
2858
3080
|
{ documentPath: path },
|
|
2859
|
-
...
|
|
3081
|
+
...workspace2.closedTabs.filter((entry) => entry.documentPath !== path)
|
|
2860
3082
|
].slice(0, CLOSED_TAB_LIMIT);
|
|
2861
3083
|
}
|
|
2862
3084
|
function takeClosedTabPath() {
|
|
2863
|
-
const [entry] =
|
|
3085
|
+
const [entry] = workspace2.closedTabs;
|
|
2864
3086
|
if (!entry) {
|
|
2865
3087
|
return;
|
|
2866
3088
|
}
|
|
2867
|
-
|
|
3089
|
+
workspace2.closedTabs = workspace2.closedTabs.slice(1);
|
|
2868
3090
|
return entry.documentPath;
|
|
2869
3091
|
}
|
|
2870
3092
|
function cycleTab(step) {
|
|
2871
3093
|
if (!_cycleList) {
|
|
2872
|
-
_cycleList =
|
|
3094
|
+
_cycleList = workspace2.mruOrder.filter((id) => workspace2.tabs.has(id));
|
|
2873
3095
|
_cycleIndex = 0;
|
|
2874
3096
|
}
|
|
2875
3097
|
const list = _cycleList;
|
|
@@ -2881,21 +3103,14 @@ function cycleTab(step) {
|
|
|
2881
3103
|
setActiveTab(id, { cycling: true });
|
|
2882
3104
|
return id;
|
|
2883
3105
|
}
|
|
2884
|
-
function
|
|
2885
|
-
const
|
|
2886
|
-
|
|
2887
|
-
if (settled) {
|
|
2888
|
-
promoteMru(settled);
|
|
2889
|
-
}
|
|
2890
|
-
}
|
|
2891
|
-
function replaceAllTabs(newTabOpts) {
|
|
2892
|
-
const oldIds = [...workspace.tabs.keys()];
|
|
2893
|
-
const oldTabs = [...workspace.tabs.values()];
|
|
3106
|
+
function replaceAllTabs2(newTabOpts) {
|
|
3107
|
+
const oldIds = [...workspace2.tabs.keys()];
|
|
3108
|
+
const oldTabs = [...workspace2.tabs.values()];
|
|
2894
3109
|
const newTab = createTab(newTabOpts);
|
|
2895
|
-
|
|
3110
|
+
workspace2.tabs.set(newTab.id, newTab);
|
|
2896
3111
|
resetPanes();
|
|
2897
|
-
|
|
2898
|
-
|
|
3112
|
+
workspace2.panes[0].tabOrder = [newTab.id];
|
|
3113
|
+
workspace2.mruOrder = [];
|
|
2899
3114
|
resetTabCycle();
|
|
2900
3115
|
setActiveTab(newTab.id);
|
|
2901
3116
|
ensureCollab(newTab);
|
|
@@ -2903,52 +3118,52 @@ function replaceAllTabs(newTabOpts) {
|
|
|
2903
3118
|
if (id === newTab.id) {
|
|
2904
3119
|
continue;
|
|
2905
3120
|
}
|
|
2906
|
-
|
|
3121
|
+
workspace2.tabs.delete(id);
|
|
2907
3122
|
}
|
|
2908
3123
|
for (const tab of oldTabs) {
|
|
2909
3124
|
disposeTab(tab);
|
|
2910
3125
|
}
|
|
2911
3126
|
return newTab;
|
|
2912
3127
|
}
|
|
2913
|
-
function
|
|
3128
|
+
function activateTab2(tabId, opts = {}) {
|
|
2914
3129
|
setActiveTab(tabId, opts);
|
|
2915
3130
|
}
|
|
2916
|
-
function
|
|
2917
|
-
const pane =
|
|
2918
|
-
if (!pane || !
|
|
3131
|
+
function moveTabToPane2(tabId, paneId) {
|
|
3132
|
+
const pane = paneById2(paneId);
|
|
3133
|
+
if (!pane || !workspace2.tabs.has(tabId)) {
|
|
2919
3134
|
return null;
|
|
2920
3135
|
}
|
|
2921
3136
|
if (pane.tabOrder.includes(tabId)) {
|
|
2922
3137
|
return pane;
|
|
2923
3138
|
}
|
|
2924
|
-
|
|
2925
|
-
|
|
3139
|
+
detachTab2(tabId);
|
|
3140
|
+
insertIntoPane2(pane, tabId);
|
|
2926
3141
|
return pane;
|
|
2927
3142
|
}
|
|
2928
|
-
function
|
|
2929
|
-
const tab =
|
|
3143
|
+
function renameTab2(oldId, newId, newDocumentPath) {
|
|
3144
|
+
const tab = workspace2.tabs.get(oldId);
|
|
2930
3145
|
if (!tab) {
|
|
2931
3146
|
return;
|
|
2932
3147
|
}
|
|
2933
3148
|
tab.id = newId;
|
|
2934
3149
|
tab.documentPath = newDocumentPath;
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
for (const pane of
|
|
3150
|
+
workspace2.tabs.delete(oldId);
|
|
3151
|
+
workspace2.tabs.set(newId, tab);
|
|
3152
|
+
for (const pane of workspace2.panes) {
|
|
2938
3153
|
pane.tabOrder = pane.tabOrder.map((id) => id === oldId ? newId : id);
|
|
2939
3154
|
if (pane.activeTabId === oldId) {
|
|
2940
3155
|
pane.activeTabId = newId;
|
|
2941
3156
|
}
|
|
2942
3157
|
}
|
|
2943
|
-
|
|
3158
|
+
workspace2.mruOrder = workspace2.mruOrder.map((id) => id === oldId ? newId : id);
|
|
2944
3159
|
resetTabCycle();
|
|
2945
3160
|
rekeyCollab(tab);
|
|
2946
3161
|
}
|
|
2947
|
-
function
|
|
3162
|
+
function registerTabCommands2(registry, deps) {
|
|
2948
3163
|
registry.registerAll([...tabCommands(deps), ...paneCommands(deps)]);
|
|
2949
3164
|
}
|
|
2950
3165
|
function tabCommands(deps) {
|
|
2951
|
-
const twoOrMoreTabs = () =>
|
|
3166
|
+
const twoOrMoreTabs = () => workspace2.tabs.size > 1;
|
|
2952
3167
|
return [
|
|
2953
3168
|
{
|
|
2954
3169
|
id: "document.nextTab",
|
|
@@ -2980,6 +3195,39 @@ function tabCommands(deps) {
|
|
|
2980
3195
|
cycleTab(-1);
|
|
2981
3196
|
}
|
|
2982
3197
|
},
|
|
3198
|
+
{
|
|
3199
|
+
args: argsSchema({
|
|
3200
|
+
path: stringProperty('Project-relative path of the file to open, e.g. "pages/about.json" or ' + '"components/nav-bar.json". It must exist.')
|
|
3201
|
+
}),
|
|
3202
|
+
id: "document.open",
|
|
3203
|
+
title: "Open Document",
|
|
3204
|
+
category: "Document",
|
|
3205
|
+
level: "project",
|
|
3206
|
+
menus: ["palette"],
|
|
3207
|
+
group: "1_file",
|
|
3208
|
+
when: (ctx) => ctx.project.open,
|
|
3209
|
+
requires: "an open project",
|
|
3210
|
+
aiTool: {
|
|
3211
|
+
description: "Open a project file as the active document; the document tools then operate on it. " + "Use it when the user should SEE the page, or for iterative visual refinement after " + "creating a page or component.",
|
|
3212
|
+
name: "open_document",
|
|
3213
|
+
report: ({ after, args }) => {
|
|
3214
|
+
const path = stringArg("document.open", args, "path");
|
|
3215
|
+
const active = activeTab2.value?.documentPath ?? null;
|
|
3216
|
+
if (active !== path) {
|
|
3217
|
+
return `Opened "${path}", but the active document is ${active === null ? "none" : `"${active}"`}.`;
|
|
3218
|
+
}
|
|
3219
|
+
const where = after.editor.kind === "canvas" ? "on the canvas; the document tools now operate on it" : `in the ${EDITOR_KIND_LABELS[after.editor.kind]} editor, which is not an element tree the document tools can edit`;
|
|
3220
|
+
return `"${path}" is the active document, ${where}.`;
|
|
3221
|
+
}
|
|
3222
|
+
},
|
|
3223
|
+
run: async (_ctx, args) => {
|
|
3224
|
+
const path = stringArg("document.open", args, "path");
|
|
3225
|
+
await deps.openFile(path);
|
|
3226
|
+
if (![...workspace2.tabs.values()].some((tab) => tab.documentPath === path)) {
|
|
3227
|
+
throw new RangeError(`command "document.open" argument "path": "${path}" could not be opened — it does ` + `not exist, or no editor claims its format. Problems has the reason.`);
|
|
3228
|
+
}
|
|
3229
|
+
}
|
|
3230
|
+
},
|
|
2983
3231
|
{
|
|
2984
3232
|
id: "document.reopenClosed",
|
|
2985
3233
|
title: "Reopen Closed Document",
|
|
@@ -2988,7 +3236,7 @@ function tabCommands(deps) {
|
|
|
2988
3236
|
keybinding: "mod+shift+t",
|
|
2989
3237
|
menus: ["context/tab", "palette"],
|
|
2990
3238
|
group: "1_file",
|
|
2991
|
-
enablement: () =>
|
|
3239
|
+
enablement: () => workspace2.closedTabs.length > 0,
|
|
2992
3240
|
requires: "a document closed in this session",
|
|
2993
3241
|
run: async () => {
|
|
2994
3242
|
const path = takeClosedTabPath();
|
|
@@ -3007,10 +3255,10 @@ function tabCommands(deps) {
|
|
|
3007
3255
|
when: (ctx) => ctx.document.open,
|
|
3008
3256
|
requires: "an open document",
|
|
3009
3257
|
run: () => {
|
|
3010
|
-
const id =
|
|
3011
|
-
const tab = id ?
|
|
3258
|
+
const id = workspace2.activeTabId;
|
|
3259
|
+
const tab = id ? workspace2.tabs.get(id) : null;
|
|
3012
3260
|
if (id && tab) {
|
|
3013
|
-
|
|
3261
|
+
setTabPinned2(id, !tab.pinned);
|
|
3014
3262
|
}
|
|
3015
3263
|
}
|
|
3016
3264
|
},
|
|
@@ -3027,9 +3275,9 @@ function tabCommands(deps) {
|
|
|
3027
3275
|
when: (ctx) => ctx.document.open,
|
|
3028
3276
|
requires: "an open document",
|
|
3029
3277
|
run: (_ctx, args) => {
|
|
3030
|
-
const id =
|
|
3031
|
-
if (id &&
|
|
3032
|
-
|
|
3278
|
+
const id = workspace2.activeTabId;
|
|
3279
|
+
if (id && workspace2.tabs.get(id)) {
|
|
3280
|
+
setTabPinned2(id, booleanArg("document.setPinned", args, "pinned"));
|
|
3033
3281
|
}
|
|
3034
3282
|
}
|
|
3035
3283
|
},
|
|
@@ -3042,21 +3290,21 @@ function tabCommands(deps) {
|
|
|
3042
3290
|
group: "1_file",
|
|
3043
3291
|
when: (ctx) => ctx.document.open,
|
|
3044
3292
|
enablement: () => {
|
|
3045
|
-
const id =
|
|
3046
|
-
return id !== null &&
|
|
3293
|
+
const id = workspace2.activeTabId;
|
|
3294
|
+
return id !== null && workspace2.tabs.get(id)?.preview === true;
|
|
3047
3295
|
},
|
|
3048
3296
|
requires: "a preview document — one opened by a single click",
|
|
3049
3297
|
run: () => {
|
|
3050
|
-
const id =
|
|
3298
|
+
const id = workspace2.activeTabId;
|
|
3051
3299
|
if (id) {
|
|
3052
|
-
|
|
3300
|
+
promoteTab2(id);
|
|
3053
3301
|
}
|
|
3054
3302
|
}
|
|
3055
3303
|
}
|
|
3056
3304
|
];
|
|
3057
3305
|
}
|
|
3058
3306
|
function paneCommands(deps) {
|
|
3059
|
-
const twoPanes = () =>
|
|
3307
|
+
const twoPanes = () => workspace2.panes.length > 1;
|
|
3060
3308
|
return [
|
|
3061
3309
|
{
|
|
3062
3310
|
id: "pane.splitRight",
|
|
@@ -3067,7 +3315,7 @@ function paneCommands(deps) {
|
|
|
3067
3315
|
menus: ["context/pane", "context/tab", "palette"],
|
|
3068
3316
|
group: "5_pane",
|
|
3069
3317
|
when: (ctx) => ctx.document.open,
|
|
3070
|
-
enablement: () =>
|
|
3318
|
+
enablement: () => workspace2.activeTabId !== null,
|
|
3071
3319
|
requires: "an open document",
|
|
3072
3320
|
undo: "none",
|
|
3073
3321
|
run: () => {
|
|
@@ -3085,21 +3333,17 @@ function paneCommands(deps) {
|
|
|
3085
3333
|
menus: ["context/pane", "context/tab", "palette"],
|
|
3086
3334
|
group: "5_pane",
|
|
3087
3335
|
when: (ctx) => ctx.document.open,
|
|
3088
|
-
enablement: () =>
|
|
3336
|
+
enablement: () => workspace2.activeTabId !== null,
|
|
3089
3337
|
requires: "an open document",
|
|
3090
3338
|
undo: "none",
|
|
3091
|
-
aiTool: {
|
|
3092
|
-
description: "Open a second document in the pane beside the current one, without moving the document " + "you are in.",
|
|
3093
|
-
name: "compare_with"
|
|
3094
|
-
},
|
|
3095
3339
|
run: async (_ctx, args) => {
|
|
3096
3340
|
const path = stringArg("pane.compareWith", args, "path");
|
|
3097
|
-
const here =
|
|
3098
|
-
const held = here.activeTabId ?
|
|
3341
|
+
const here = activePane2();
|
|
3342
|
+
const held = here.activeTabId ? workspace2.tabs.get(here.activeTabId) : null;
|
|
3099
3343
|
if (held?.documentPath === path) {
|
|
3100
3344
|
throw new RangeError(`command "pane.compareWith" argument "path": "${path}" is the document this pane is ` + `already showing — name a different one`);
|
|
3101
3345
|
}
|
|
3102
|
-
await deps.openFileInPane(
|
|
3346
|
+
await deps.openFileInPane(receivingPane2().id, path);
|
|
3103
3347
|
}
|
|
3104
3348
|
},
|
|
3105
3349
|
{
|
|
@@ -3114,7 +3358,7 @@ function paneCommands(deps) {
|
|
|
3114
3358
|
requires: "a split pane grid",
|
|
3115
3359
|
undo: "none",
|
|
3116
3360
|
run: () => {
|
|
3117
|
-
|
|
3361
|
+
focusPane2(PRIMARY_PANE2);
|
|
3118
3362
|
}
|
|
3119
3363
|
},
|
|
3120
3364
|
{
|
|
@@ -3129,7 +3373,7 @@ function paneCommands(deps) {
|
|
|
3129
3373
|
requires: "a split pane grid",
|
|
3130
3374
|
undo: "none",
|
|
3131
3375
|
run: () => {
|
|
3132
|
-
|
|
3376
|
+
focusPane2(SECONDARY_PANE2);
|
|
3133
3377
|
}
|
|
3134
3378
|
},
|
|
3135
3379
|
{
|
|
@@ -3147,17 +3391,17 @@ function paneCommands(deps) {
|
|
|
3147
3391
|
];
|
|
3148
3392
|
}
|
|
3149
3393
|
function runUnsplit() {
|
|
3150
|
-
const derived =
|
|
3151
|
-
if (derived?.id ===
|
|
3394
|
+
const derived = workspace2.panes.find((pane) => pane.derived !== null);
|
|
3395
|
+
if (derived?.id === PRIMARY_PANE2) {
|
|
3152
3396
|
derived.derived = null;
|
|
3153
3397
|
if (!paneIsEmpty(derived)) {
|
|
3154
3398
|
return;
|
|
3155
3399
|
}
|
|
3156
3400
|
}
|
|
3157
|
-
closePane(derived?.id ??
|
|
3401
|
+
closePane(derived?.id ?? SECONDARY_PANE2);
|
|
3158
3402
|
}
|
|
3159
3403
|
|
|
3160
|
-
export { LANGUAGE_TAG_PATTERN, canonicalizeLocale, isWellFormedLocale, localeDirection, localeLabel, resolveI18n, localeOfPath, servedLocaleOfPath, translationKeyOfPath, translationPathFor, EDITOR_KIND_LABELS, editorKindForMode, canvasViewForMode, inCanvas, hasSelection, hasElementSelection, emptyContext, makeContext, keyScopeStack, PROJECT_CONFIG_PATH, createTab, editorKindOf, editorKindsOf, modeForEditorKind, disposeTab, primarySelection, selectionAnchor, isSelected, cloneSelection, toggleSelected, rangeSelection, isSpliceablePath, structuralBatch, uniquePaths, unifyValues, setPatchConsumer, recordDocOp, transactDoc, transact, beginBatch, endBatch, isBatching, batchTab, setHistoryDelegate, canUndo, canRedo, undo, redo, mutateInsertNode, mutateRemoveNode, mutateDuplicateNode, mutateRemoveNodes, mutateDuplicateNodes, mutateWrapNode, mutateMoveNode, mutateUpdateProperty, mutateUpdateStyle, mutateUpdateAttribute, mutateUpdateMediaStyle, mutateUpdateNestedStyle, mutateUpdateMediaNestedStyle, mutateUpdateNestedStylePath, mutateUpdateMediaNestedStylePath, mutateReplaceStyle, mutateAddDef, mutateRemoveDef, mutateUpdateDef, mutateRenameDef, mutateUpdateProp, mutateAddSwitchCase, mutateRemoveSwitchCase, mutateRenameSwitchCase, mutateUpdateFrontmatter, collabState, isCollabPath, stringArg, optionalStringArg, boundedNumberArg, booleanArg, enumArg, pathArg, nullablePathArg, pathListArg, argsSchema, enumProperty, derivedEnumProperty, numberProperty, booleanProperty, pathProperty, pathListProperty, stringProperty, LOCALE_PLACEHOLDER, collectionForDirectory, collectionForFile,
|
|
3404
|
+
export { LANGUAGE_TAG_PATTERN, canonicalizeLocale, isWellFormedLocale, localeDirection, localeLabel, resolveI18n, localeOfPath, servedLocaleOfPath, translationKeyOfPath, translationPathFor, EDITOR_KIND_LABELS, editorKindForMode, canvasViewForMode, inCanvas, hasSelection, hasElementSelection, emptyContext, makeContext, keyScopeStack, PROJECT_CONFIG_PATH, createTab, editorKindOf, editorKindsOf, modeForEditorKind, disposeTab, primarySelection, selectionAnchor, isSelected, cloneSelection, toggleSelected, rangeSelection, isSpliceablePath, structuralBatch, uniquePaths, unifyValues, setPatchConsumer, recordDocOp, transactDoc, transact, beginBatch, endBatch, isBatching, batchTab, setHistoryDelegate, canUndo, canRedo, undo, redo, mutateInsertNode, mutateRemoveNode, mutateDuplicateNode, mutateRemoveNodes, mutateDuplicateNodes, mutateWrapNode, mutateMoveNode, mutateUpdateProperty, mutateUpdateStyle, mutateUpdateAttribute, mutateUpdateMediaStyle, mutateUpdateNestedStyle, mutateUpdateMediaNestedStyle, mutateUpdateNestedStylePath, mutateUpdateMediaNestedStylePath, mutateReplaceStyle, mutateAddDef, mutateRemoveDef, mutateUpdateDef, mutateRenameDef, mutateUpdateProp, mutateAddSwitchCase, mutateRemoveSwitchCase, mutateRenameSwitchCase, mutateUpdateFrontmatter, collabState, isCollabPath, stringArg, optionalStringArg, boundedNumberArg, booleanArg, enumArg, pathArg, nullablePathArg, pathListArg, argsSchema, enumProperty, derivedEnumProperty, numberProperty, booleanProperty, pathProperty, pathListProperty, stringProperty, coerceArgs, LOCALE_PLACEHOLDER, collectionForDirectory, collectionForFile, camelToLabel, toCamelCase, kebabToLabel, propLabel, attrLabel, abbreviateValue, isMediaFormat, inferInputType, findContentTypeSchema, friendlyNameToVar, varDisplayName, parseCemType, jsonClone, configureCollabSerializer, configureCollabParser, configureCollabNotifier, collabSourceContext, collabReadOnly, collabSave, flushAllCollab, setCollabEnabled, isCollabEnabled, PRIMARY_PANE2, SECONDARY_PANE2, workspace2, activeTab2, activePane2, paneById2, paneOfTab2, focusPane2, isPaneFocused2, sidePane2, receivingPane2, detachTab2, insertIntoPane2, setWorkspaceProject2, isTabActive2, tabIsLive2, openTab2, promoteTab2, promoteDirtyPreviewTabs2, setTabPinned2, moveTab2, closeTab2, closeAllTabs2, replaceAllTabs2, activateTab2, moveTabToPane2, renameTab2, registerTabCommands2 };
|
|
3161
3405
|
|
|
3162
|
-
//# debugId=
|
|
3163
|
-
//# sourceMappingURL=studio-
|
|
3406
|
+
//# debugId=835A5B58C44D6A6B64756E2164756E21
|
|
3407
|
+
//# sourceMappingURL=studio-k75n7vhp.js.map
|