@jxsuite/studio 4.0.0 → 5.0.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-xp8vnwma.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-fyf63pmy.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-2w1f35qs.js +18 -0
- package/dist/chunks/content-source-3wqeas45.js +46 -0
- package/dist/chunks/convert-to-repeater-d0cgnb6d.js +639 -0
- package/dist/chunks/dialog-s890b918.js +85 -0
- package/dist/chunks/editor-3qhbg51x.js +35 -0
- package/dist/chunks/entry-commands-d6g50j7s.js +42 -0
- package/dist/chunks/extension-sections-fy7q4fe9.js +651 -0
- package/dist/chunks/file-ops-3btj6st0.js +47 -0
- package/dist/chunks/files-ef8fgs3w.js +72 -0
- package/dist/chunks/format-host-3c33nwr8.js +40 -0
- package/dist/chunks/fs-events-13tj6sex.js +18 -0
- package/dist/chunks/git-panel-4wp2rn9b.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-jgesd924.js +115 -0
- package/dist/chunks/{index-nj44jpzj.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-1nq5evsh.js +29 -0
- package/dist/chunks/layers-panel-ar2gh90g.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-2qbetq73.js +33 -0
- package/dist/chunks/menu-q99sy9rf.js +285 -0
- package/dist/chunks/menu-rf7n72mf.js +14 -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-rws7k4br.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-98f7sr3g.js +27 -0
- package/dist/chunks/quick-search-srzz83k2.js +45 -0
- package/dist/chunks/references-n553f0e1.js +26 -0
- package/dist/chunks/right-panel-rrgx2dn3.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-18avnhjp.js +2430 -0
- package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
- package/dist/chunks/{studio-hbtp0eh1.js → studio-25hkdrkw.js} +356 -85
- package/dist/chunks/studio-26d7myd1.js +258 -0
- package/dist/chunks/{studio-p8j86wag.js → studio-38emantv.js} +22 -5
- package/dist/chunks/studio-3gxv60tn.js +422 -0
- package/dist/chunks/{studio-8swrjbny.js → studio-3hxkd92t.js} +275 -163
- package/dist/chunks/studio-4m0haseg.js +185 -0
- package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
- package/dist/chunks/{studio-gv8vvshc.js → studio-5523bpzt.js} +11 -11
- package/dist/chunks/{studio-5q69gfag.js → studio-57mf66w2.js} +1753 -2484
- package/dist/chunks/studio-5jy81t3s.js +17463 -0
- package/dist/chunks/studio-5rt7sqa0.js +1168 -0
- package/dist/chunks/studio-5te5tqng.js +81 -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-eenfkt4e.js → studio-79y5sz51.js} +52 -38
- package/dist/chunks/{studio-4q0wznzf.js → studio-7e11jpa9.js} +461 -145
- package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
- package/dist/chunks/studio-7xptrg0j.js +954 -0
- package/dist/chunks/{studio-cft9r4r7.js → studio-81390n6f.js} +22 -22
- package/dist/chunks/{studio-q43a5y9h.js → studio-8jn5yhyn.js} +16 -16
- package/dist/chunks/studio-8qtrpzr3.js +839 -0
- package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
- package/dist/chunks/studio-9xxz1q69.js +1356 -0
- package/dist/chunks/studio-akbww0j5.js +13615 -0
- package/dist/chunks/studio-arfpe389.js +195 -0
- package/dist/chunks/{studio-2zkz8evn.js → studio-az3zd49t.js} +473 -281
- package/dist/chunks/studio-cpvb2ed1.js +1171 -0
- package/dist/chunks/{studio-9r6j5ev1.js → studio-d0300636.js} +5078 -19
- package/dist/chunks/{studio-bgxt93ga.js → studio-d055c37e.js} +13 -13
- package/dist/chunks/studio-d1ja2x9r.js +362 -0
- package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
- package/dist/chunks/{studio-4pqqxbrt.js → studio-em9nw8eh.js} +301 -112
- package/dist/chunks/studio-erdatzvp.js +1190 -0
- package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
- package/dist/chunks/studio-fabxk6r9.js +2811 -0
- package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
- package/dist/chunks/studio-hhvs4sdg.js +195 -0
- package/dist/chunks/{studio-68n67094.js → studio-kcgff4r0.js} +15 -18
- package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
- package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
- package/dist/chunks/studio-pm6hgy7r.js +4763 -0
- package/dist/chunks/studio-q0a3yk4n.js +33 -0
- package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
- package/dist/chunks/studio-qahxvnan.js +111 -0
- package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
- package/dist/chunks/{studio-kjjsjak4.js → studio-rkstz940.js} +3661 -6136
- package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
- package/dist/chunks/studio-rpyah2ew.js +2805 -0
- package/dist/chunks/studio-rs76k67r.js +12 -0
- package/dist/chunks/{studio-yxrkyv8a.js → studio-s6z853aq.js} +12108 -11766
- package/dist/chunks/{studio-sf7zjgv1.js → studio-sgdc5pfc.js} +8 -8
- package/dist/chunks/studio-tb3ev01j.js +763 -0
- package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
- package/dist/chunks/studio-vhv5tgxm.js +51 -0
- package/dist/chunks/{studio-htsf0w6m.js → studio-vz68yn9e.js} +31 -154
- package/dist/chunks/studio-wqpngpsk.js +174 -0
- package/dist/chunks/{studio-eesa1myv.js → studio-x3rty6tr.js} +58 -58
- package/dist/chunks/studio-xsykpvsh.js +8448 -0
- package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
- package/dist/chunks/studio-yxa81f45.js +12 -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-wrew8zk4.js +69 -0
- package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
- package/dist/iframe-entry.js +1812 -698
- package/dist/manifest.json +7 -0
- package/dist/studio.js +52900 -36573
- 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/favicon.ico +0 -0
- package/index.html +2 -0
- package/package.json +22 -55
- package/src/about/about-modal.ts +73 -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 +310 -117
- 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 +369 -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 +165 -8
- 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 +65 -26
- package/src/editor/slash-menu.ts +150 -157
- package/src/files/file-ops.ts +117 -11
- package/src/files/files.ts +949 -664
- package/src/files/json-layout.ts +474 -0
- package/src/files/media-paths.ts +13 -42
- package/src/files/media-usage.ts +41 -131
- 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/document.ts +2 -0
- package/src/hosting/layout.ts +10 -0
- package/src/i18n/i18n-commands.ts +127 -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 +201 -250
- package/src/new-project/location-fields.ts +101 -165
- package/src/new-project/new-project-modal.ts +376 -367
- package/src/packages/jxsuite-update.ts +76 -18
- 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 -153
- package/src/panels/ai-chat/sessions-view.ts +31 -62
- package/src/panels/ai-panel.ts +210 -185
- package/src/panels/block-action-bar.ts +437 -643
- 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 +153 -133
- package/src/panels/imports-panel.ts +388 -414
- package/src/panels/jump-bar.ts +174 -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 +177 -99
- package/src/panels/properties-panel.ts +1525 -966
- package/src/panels/provenance.ts +31 -113
- package/src/panels/quick-search.ts +217 -172
- package/src/panels/right-panel.ts +135 -169
- package/src/panels/seo-modal.ts +346 -167
- package/src/panels/settings-menu.ts +109 -646
- 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 +385 -287
- package/src/platforms/cloud.ts +347 -86
- 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 +165 -299
- package/src/services/a11y-report.ts +100 -43
- package/src/services/ai-command-tools.ts +468 -0
- package/src/services/ai-import-tools.ts +50 -12
- package/src/services/ai-models.ts +108 -1
- package/src/services/ai-session-store.ts +6 -0
- package/src/services/ai-system-prompt.ts +110 -18
- package/src/services/ai-tools.ts +28 -143
- package/src/services/ai-write-report.ts +174 -0
- package/src/services/context-manager.ts +12 -1
- package/src/services/document-assistant.ts +50 -2
- 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 +17 -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 +193 -12
- package/src/settings/preferences-dialog.ts +384 -307
- 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 +90 -67
- 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 +984 -0
- package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +414 -389
- 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 +163 -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 +71 -15
- package/src/tabs/tab.ts +52 -1
- package/src/types.ts +49 -3
- package/src/ui/ai-credentials-form.ts +104 -100
- package/src/ui/ai-managed-connect.ts +116 -49
- package/src/ui/ai-model-picker.ts +102 -47
- package/src/ui/cf-account-picker.ts +135 -0
- 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 +293 -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 +15 -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 -1532
- package/styles/tokens.css +65 -136
- package/styles/tokens.json +84 -0
- package/dist/chunks/Overlay.dev-723bv0df.js +0 -23
- package/dist/chunks/adapter-jkcyhgtr.js +0 -14
- package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
- package/dist/chunks/components-zmx10t62.js +0 -21
- package/dist/chunks/content-source-t88vb2dr.js +0 -49
- package/dist/chunks/convert-to-repeater-dhw1nrz9.js +0 -268
- package/dist/chunks/editor-cptq5jp1.js +0 -37
- package/dist/chunks/entry-commands-6z6bhxg0.js +0 -46
- package/dist/chunks/extension-sections-3ydgjbdy.js +0 -311
- package/dist/chunks/file-ops-rskmhxyq.js +0 -48
- package/dist/chunks/files-0cratsr0.js +0 -92
- package/dist/chunks/flow-qbfgrpeh.js +0 -634
- package/dist/chunks/focus-trap.esm-ggawf1hy.js +0 -1024
- package/dist/chunks/focus-visible-6eg70z18.js +0 -167
- package/dist/chunks/format-host-tgcmfs4p.js +0 -43
- package/dist/chunks/fs-events-hrrg328g.js +0 -21
- package/dist/chunks/git-panel-0yywyk76.js +0 -58
- package/dist/chunks/index-zqxmqxmh.js +0 -109
- package/dist/chunks/jx-validate-8q2g05x1.js +0 -19
- package/dist/chunks/layers-panel-z3tqe5cd.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-54jvhskq.js +0 -28
- package/dist/chunks/quick-search-cgfmjwq5.js +0 -65
- package/dist/chunks/references-3qx8fkyp.js +0 -29
- package/dist/chunks/right-panel-cqp8bc4v.js +0 -46
- package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
- package/dist/chunks/sp-overlay.dev-yztmtrs1.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-xcvpnqr0.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-18j3bmcz.js +0 -14
- package/dist/chunks/studio-1hbqnt19.js +0 -1823
- package/dist/chunks/studio-4rzyrtjz.js +0 -426
- package/dist/chunks/studio-5rywrkxz.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-9c4k4vhv.js +0 -357
- package/dist/chunks/studio-9n4mrmnb.js +0 -184
- package/dist/chunks/studio-a0tswy0w.js +0 -58
- package/dist/chunks/studio-ahjfdy6e.js +0 -387
- package/dist/chunks/studio-ahnzd9rg.js +0 -23
- package/dist/chunks/studio-bw5dz6km.js +0 -608
- package/dist/chunks/studio-cb12yz9w.js +0 -15055
- package/dist/chunks/studio-d1ks410h.js +0 -175
- package/dist/chunks/studio-eqq1w638.js +0 -113
- package/dist/chunks/studio-ex8zyp98.js +0 -1813
- package/dist/chunks/studio-h4rxscfc.js +0 -10
- package/dist/chunks/studio-kyh9avvv.js +0 -28
- package/dist/chunks/studio-kyk2v92a.js +0 -659
- package/dist/chunks/studio-m3hwn7y1.js +0 -120
- package/dist/chunks/studio-mmv72a27.js +0 -4344
- package/dist/chunks/studio-n8b9wqwy.js +0 -291
- package/dist/chunks/studio-pdfjntbk.js +0 -6939
- package/dist/chunks/studio-qq6jym04.js +0 -53
- package/dist/chunks/studio-r1r7afxx.js +0 -1066
- 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-txwkm6p9.js +0 -12
- package/dist/chunks/studio-v38hmvx1.js +0 -390
- package/dist/chunks/studio-vadzgkrz.js +0 -318
- package/dist/chunks/studio-wx5609xd.js +0 -341
- package/dist/chunks/studio-z6nw2ek2.js +0 -18
- package/dist/chunks/studio-zczps70q.js +0 -378
- package/dist/chunks/workspace-xpres40v.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
|
-
computed,
|
|
6
|
-
effect,
|
|
7
2
|
effectScope,
|
|
8
|
-
notify,
|
|
9
3
|
onScopeDispose,
|
|
4
|
+
effect,
|
|
10
5
|
reactive,
|
|
11
|
-
toRaw
|
|
12
|
-
|
|
6
|
+
toRaw,
|
|
7
|
+
computed,
|
|
8
|
+
notify2
|
|
9
|
+
} from "./studio-p1dw8wfw.js";
|
|
13
10
|
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
cloneValue
|
|
17
|
-
} from "./studio-5ehhackm.js";
|
|
11
|
+
commitTabBuffers2
|
|
12
|
+
} from "./studio-q3x06vmj.js";
|
|
18
13
|
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
} from "./studio-p4ngc046.js";
|
|
14
|
+
getPlatform2
|
|
15
|
+
} from "./studio-6nzaktvy.js";
|
|
16
|
+
import {
|
|
17
|
+
formatByName2,
|
|
18
|
+
formatForPath2,
|
|
19
|
+
defaultContentFormat2
|
|
20
|
+
} from "./studio-79y5sz51.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"
|
|
@@ -2437,7 +2438,7 @@ function booleanArg(commandId, args, key) {
|
|
|
2437
2438
|
function enumArg(commandId, args, key, declared) {
|
|
2438
2439
|
const value = args[key];
|
|
2439
2440
|
if (typeof value !== "string" || !declared.includes(value)) {
|
|
2440
|
-
throw refuse(commandId, key, `${describe(value)} is not declared — declared: ${declared.join(", ")}`);
|
|
2441
|
+
throw refuse(commandId, key, `${describe(value)} is not declared — declared: ${declared.join(", ") || "none"}`);
|
|
2441
2442
|
}
|
|
2442
2443
|
return value;
|
|
2443
2444
|
}
|
|
@@ -2509,14 +2510,222 @@ function pathListProperty(description) {
|
|
|
2509
2510
|
function stringProperty(description) {
|
|
2510
2511
|
return { description, type: "string" };
|
|
2511
2512
|
}
|
|
2513
|
+
function isPathSegmentTypes(types) {
|
|
2514
|
+
return types.length === 2 && types.includes("string") && types.includes("number");
|
|
2515
|
+
}
|
|
2516
|
+
function typesOf(type) {
|
|
2517
|
+
return Array.isArray(type) ? type : [type];
|
|
2518
|
+
}
|
|
2519
|
+
function describeShape(property) {
|
|
2520
|
+
const p = property;
|
|
2521
|
+
if ("enum" in p) {
|
|
2522
|
+
return "enum";
|
|
2523
|
+
}
|
|
2524
|
+
if ("const" in p) {
|
|
2525
|
+
return "const";
|
|
2526
|
+
}
|
|
2527
|
+
if (Array.isArray(p.oneOf)) {
|
|
2528
|
+
return "one-of";
|
|
2529
|
+
}
|
|
2530
|
+
if (Array.isArray(p.type)) {
|
|
2531
|
+
return "typed";
|
|
2532
|
+
}
|
|
2533
|
+
switch (p.type) {
|
|
2534
|
+
case "boolean": {
|
|
2535
|
+
return "boolean";
|
|
2536
|
+
}
|
|
2537
|
+
case "number":
|
|
2538
|
+
case "integer": {
|
|
2539
|
+
return p.minimum !== undefined && p.maximum !== undefined ? "bounded-number" : "number";
|
|
2540
|
+
}
|
|
2541
|
+
case "string": {
|
|
2542
|
+
return "string";
|
|
2543
|
+
}
|
|
2544
|
+
case "array": {
|
|
2545
|
+
const items = p.items?.type;
|
|
2546
|
+
if (Array.isArray(items)) {
|
|
2547
|
+
return isPathSegmentTypes(items) ? "path" : "pass-through";
|
|
2548
|
+
}
|
|
2549
|
+
return items === "array" ? "path-list" : "pass-through";
|
|
2550
|
+
}
|
|
2551
|
+
case "null":
|
|
2552
|
+
case "object": {
|
|
2553
|
+
return "typed";
|
|
2554
|
+
}
|
|
2555
|
+
default: {
|
|
2556
|
+
break;
|
|
2557
|
+
}
|
|
2558
|
+
}
|
|
2559
|
+
return "pass-through";
|
|
2560
|
+
}
|
|
2561
|
+
function isJsonType(type, value) {
|
|
2562
|
+
switch (type) {
|
|
2563
|
+
case "null": {
|
|
2564
|
+
return value === null;
|
|
2565
|
+
}
|
|
2566
|
+
case "boolean": {
|
|
2567
|
+
return typeof value === "boolean";
|
|
2568
|
+
}
|
|
2569
|
+
case "string": {
|
|
2570
|
+
return typeof value === "string";
|
|
2571
|
+
}
|
|
2572
|
+
case "number": {
|
|
2573
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
2574
|
+
}
|
|
2575
|
+
case "integer": {
|
|
2576
|
+
return typeof value === "number" && Number.isInteger(value);
|
|
2577
|
+
}
|
|
2578
|
+
case "array": {
|
|
2579
|
+
return Array.isArray(value);
|
|
2580
|
+
}
|
|
2581
|
+
case "object": {
|
|
2582
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2583
|
+
}
|
|
2584
|
+
default: {
|
|
2585
|
+
break;
|
|
2586
|
+
}
|
|
2587
|
+
}
|
|
2588
|
+
return false;
|
|
2589
|
+
}
|
|
2590
|
+
function listTypes(types) {
|
|
2591
|
+
if (types.length <= 1) {
|
|
2592
|
+
return types.join("");
|
|
2593
|
+
}
|
|
2594
|
+
return `${types.slice(0, -1).join(", ")} or ${types.at(-1)}`;
|
|
2595
|
+
}
|
|
2596
|
+
function typedArg(commandId, args, key, types) {
|
|
2597
|
+
const value = args[key];
|
|
2598
|
+
if (!types.some((type) => isJsonType(type, value))) {
|
|
2599
|
+
throw refuse(commandId, key, `expected ${listTypes(types)}, got ${describe(value)}`);
|
|
2600
|
+
}
|
|
2601
|
+
return value;
|
|
2602
|
+
}
|
|
2603
|
+
function shapeOf(property) {
|
|
2604
|
+
switch (describeShape(property)) {
|
|
2605
|
+
case "enum": {
|
|
2606
|
+
return `one of ${(property.enum ?? []).map((v) => describe(v)).join(" | ")}`;
|
|
2607
|
+
}
|
|
2608
|
+
case "const": {
|
|
2609
|
+
return `the constant ${describe(property.const)}`;
|
|
2610
|
+
}
|
|
2611
|
+
case "one-of": {
|
|
2612
|
+
return (property.oneOf ?? []).map((branch) => shapeOf(branch)).join(" or ");
|
|
2613
|
+
}
|
|
2614
|
+
case "typed": {
|
|
2615
|
+
return listTypes(typesOf(property.type ?? []));
|
|
2616
|
+
}
|
|
2617
|
+
case "boolean": {
|
|
2618
|
+
return "a boolean";
|
|
2619
|
+
}
|
|
2620
|
+
case "bounded-number": {
|
|
2621
|
+
return `a number from ${property.minimum} to ${property.maximum}`;
|
|
2622
|
+
}
|
|
2623
|
+
case "number": {
|
|
2624
|
+
return "a finite number";
|
|
2625
|
+
}
|
|
2626
|
+
case "string": {
|
|
2627
|
+
return "a non-empty string";
|
|
2628
|
+
}
|
|
2629
|
+
case "path": {
|
|
2630
|
+
return "a document path";
|
|
2631
|
+
}
|
|
2632
|
+
case "path-list": {
|
|
2633
|
+
return "a list of document paths";
|
|
2634
|
+
}
|
|
2635
|
+
default: {
|
|
2636
|
+
return "anything";
|
|
2637
|
+
}
|
|
2638
|
+
}
|
|
2639
|
+
}
|
|
2640
|
+
function oneOfArg(commandId, args, key, branches) {
|
|
2641
|
+
const value = args[key];
|
|
2642
|
+
const refusals = [];
|
|
2643
|
+
for (const branch of branches) {
|
|
2644
|
+
if (branch.type !== undefined && !typesOf(branch.type).some((type) => isJsonType(type, value))) {
|
|
2645
|
+
continue;
|
|
2646
|
+
}
|
|
2647
|
+
try {
|
|
2648
|
+
return coerceProperty(commandId, args, key, branch);
|
|
2649
|
+
} catch (error) {
|
|
2650
|
+
refusals.push(error);
|
|
2651
|
+
}
|
|
2652
|
+
}
|
|
2653
|
+
if (refusals.length === 1) {
|
|
2654
|
+
throw refusals[0];
|
|
2655
|
+
}
|
|
2656
|
+
throw refuse(commandId, key, `expected ${branches.map((branch) => shapeOf(branch)).join(" or ")}, got ${describe(value)}`);
|
|
2657
|
+
}
|
|
2658
|
+
function coerceProperty(commandId, args, key, property) {
|
|
2659
|
+
switch (describeShape(property)) {
|
|
2660
|
+
case "enum": {
|
|
2661
|
+
return enumArg(commandId, args, key, property.enum ?? []);
|
|
2662
|
+
}
|
|
2663
|
+
case "const": {
|
|
2664
|
+
const value = args[key];
|
|
2665
|
+
if (value !== property.const) {
|
|
2666
|
+
throw refuse(commandId, key, `expected the constant ${describe(property.const)}, got ${describe(value)}`);
|
|
2667
|
+
}
|
|
2668
|
+
return value;
|
|
2669
|
+
}
|
|
2670
|
+
case "one-of": {
|
|
2671
|
+
return oneOfArg(commandId, args, key, property.oneOf ?? []);
|
|
2672
|
+
}
|
|
2673
|
+
case "typed": {
|
|
2674
|
+
return typedArg(commandId, args, key, typesOf(property.type ?? []));
|
|
2675
|
+
}
|
|
2676
|
+
case "boolean": {
|
|
2677
|
+
return booleanArg(commandId, args, key);
|
|
2678
|
+
}
|
|
2679
|
+
case "bounded-number": {
|
|
2680
|
+
return boundedNumberArg(commandId, args, key, property.minimum, property.maximum);
|
|
2681
|
+
}
|
|
2682
|
+
case "number": {
|
|
2683
|
+
return numberArg(commandId, args, key);
|
|
2684
|
+
}
|
|
2685
|
+
case "string": {
|
|
2686
|
+
return stringArg(commandId, args, key);
|
|
2687
|
+
}
|
|
2688
|
+
case "path": {
|
|
2689
|
+
return pathArg(commandId, args, key);
|
|
2690
|
+
}
|
|
2691
|
+
case "path-list": {
|
|
2692
|
+
return pathListArg(commandId, args, key);
|
|
2693
|
+
}
|
|
2694
|
+
default: {
|
|
2695
|
+
return args[key];
|
|
2696
|
+
}
|
|
2697
|
+
}
|
|
2698
|
+
}
|
|
2699
|
+
function coerceArgs(commandId, schema, args) {
|
|
2700
|
+
const spec = schema;
|
|
2701
|
+
const properties = spec.properties ?? {};
|
|
2702
|
+
const declared = Object.keys(properties);
|
|
2703
|
+
const required = spec.required ?? [];
|
|
2704
|
+
const coerced = {};
|
|
2705
|
+
for (const [key, value] of Object.entries(args)) {
|
|
2706
|
+
if (value === undefined || Object.hasOwn(properties, key)) {
|
|
2707
|
+
continue;
|
|
2708
|
+
}
|
|
2709
|
+
if (spec.additionalProperties === false) {
|
|
2710
|
+
throw refuse(commandId, key, `not declared — declared: ${declared.join(", ") || "none"}`);
|
|
2711
|
+
}
|
|
2712
|
+
coerced[key] = value;
|
|
2713
|
+
}
|
|
2714
|
+
for (const key of declared) {
|
|
2715
|
+
if (args[key] === undefined && !required.includes(key)) {
|
|
2716
|
+
continue;
|
|
2717
|
+
}
|
|
2718
|
+
coerced[key] = coerceProperty(commandId, args, key, properties[key]);
|
|
2719
|
+
}
|
|
2720
|
+
return coerced;
|
|
2721
|
+
}
|
|
2512
2722
|
|
|
2513
2723
|
// src/workspace/workspace.ts
|
|
2514
2724
|
var CLOSED_TAB_LIMIT = 20;
|
|
2515
|
-
var
|
|
2516
|
-
var
|
|
2517
|
-
var
|
|
2518
|
-
|
|
2519
|
-
activePaneId: PRIMARY_PANE,
|
|
2725
|
+
var PRIMARY_PANE2 = "primary";
|
|
2726
|
+
var SECONDARY_PANE2 = "secondary";
|
|
2727
|
+
var workspace2 = reactive({
|
|
2728
|
+
activePaneId: PRIMARY_PANE2,
|
|
2520
2729
|
clipboard: null,
|
|
2521
2730
|
closedTabs: [],
|
|
2522
2731
|
componentRegistry: [],
|
|
@@ -2531,7 +2740,7 @@ var workspace = reactive({
|
|
|
2531
2740
|
{
|
|
2532
2741
|
activeTabId: null,
|
|
2533
2742
|
derived: null,
|
|
2534
|
-
id:
|
|
2743
|
+
id: PRIMARY_PANE2,
|
|
2535
2744
|
tabOrder: []
|
|
2536
2745
|
}
|
|
2537
2746
|
],
|
|
@@ -2543,83 +2752,77 @@ var workspace = reactive({
|
|
|
2543
2752
|
activityBar: "files"
|
|
2544
2753
|
},
|
|
2545
2754
|
get activeTabId() {
|
|
2546
|
-
const pane =
|
|
2547
|
-
return pane.derived?.kind === "lens" ?
|
|
2755
|
+
const pane = activePane2();
|
|
2756
|
+
return pane.derived?.kind === "lens" ? paneById2(pane.derived.sourcePaneId)?.activeTabId ?? null : pane.activeTabId;
|
|
2548
2757
|
},
|
|
2549
2758
|
get tabOrder() {
|
|
2550
|
-
return
|
|
2759
|
+
return activePane2().tabOrder;
|
|
2551
2760
|
}
|
|
2552
2761
|
});
|
|
2553
|
-
var
|
|
2554
|
-
function
|
|
2555
|
-
const { panes } =
|
|
2556
|
-
return panes.find((pane) => pane.id ===
|
|
2762
|
+
var activeTab2 = computed(() => workspace2.activeTabId ? workspace2.tabs.get(workspace2.activeTabId) ?? null : null);
|
|
2763
|
+
function activePane2() {
|
|
2764
|
+
const { panes } = workspace2;
|
|
2765
|
+
return panes.find((pane) => pane.id === workspace2.activePaneId) ?? panes[0];
|
|
2557
2766
|
}
|
|
2558
|
-
function
|
|
2559
|
-
return
|
|
2767
|
+
function paneById2(paneId) {
|
|
2768
|
+
return workspace2.panes.find((pane) => pane.id === paneId);
|
|
2560
2769
|
}
|
|
2561
|
-
function
|
|
2562
|
-
return
|
|
2770
|
+
function paneOfTab2(tabId) {
|
|
2771
|
+
return workspace2.panes.find((pane) => pane.tabOrder.includes(tabId));
|
|
2563
2772
|
}
|
|
2564
|
-
function
|
|
2565
|
-
const pane =
|
|
2566
|
-
if (!pane || pane.id ===
|
|
2773
|
+
function focusPane2(paneId) {
|
|
2774
|
+
const pane = paneById2(paneId);
|
|
2775
|
+
if (!pane || pane.id === workspace2.activePaneId) {
|
|
2567
2776
|
return;
|
|
2568
2777
|
}
|
|
2569
|
-
|
|
2778
|
+
workspace2.activePaneId = pane.id;
|
|
2570
2779
|
resetTabCycle();
|
|
2571
2780
|
const { activeTabId } = pane;
|
|
2572
2781
|
if (activeTabId) {
|
|
2573
2782
|
promoteMru(activeTabId);
|
|
2574
|
-
const tab =
|
|
2783
|
+
const tab = workspace2.tabs.get(activeTabId);
|
|
2575
2784
|
if (tab) {
|
|
2576
2785
|
syncTreeSelection(tab);
|
|
2577
2786
|
}
|
|
2578
2787
|
}
|
|
2579
2788
|
}
|
|
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
|
-
}
|
|
2789
|
+
function isPaneFocused2(paneId) {
|
|
2790
|
+
return workspace2.activePaneId === paneId;
|
|
2588
2791
|
}
|
|
2589
2792
|
function splitRight() {
|
|
2590
|
-
const source =
|
|
2793
|
+
const source = activePane2();
|
|
2591
2794
|
const tabId = source.activeTabId;
|
|
2592
|
-
const tab = tabId ?
|
|
2795
|
+
const tab = tabId ? workspace2.tabs.get(tabId) : null;
|
|
2593
2796
|
if (!tabId || !tab) {
|
|
2594
2797
|
return null;
|
|
2595
2798
|
}
|
|
2596
|
-
const target =
|
|
2597
|
-
|
|
2598
|
-
|
|
2799
|
+
const target = receivingPane2();
|
|
2800
|
+
detachTab2(tabId);
|
|
2801
|
+
insertIntoPane2(target, tabId);
|
|
2599
2802
|
target.activeTabId = tabId;
|
|
2600
|
-
|
|
2803
|
+
workspace2.activePaneId = target.id;
|
|
2601
2804
|
resetTabCycle();
|
|
2602
2805
|
promoteMru(tabId);
|
|
2603
2806
|
return target;
|
|
2604
2807
|
}
|
|
2605
|
-
function
|
|
2606
|
-
const source =
|
|
2607
|
-
return
|
|
2808
|
+
function sidePane2() {
|
|
2809
|
+
const source = activePane2();
|
|
2810
|
+
return workspace2.panes.find((pane) => pane.id !== source.id) ?? addPane(SECONDARY_PANE2);
|
|
2608
2811
|
}
|
|
2609
|
-
function
|
|
2610
|
-
const target =
|
|
2812
|
+
function receivingPane2() {
|
|
2813
|
+
const target = sidePane2();
|
|
2611
2814
|
if (target.derived) {
|
|
2612
2815
|
target.derived = null;
|
|
2613
2816
|
}
|
|
2614
2817
|
return target;
|
|
2615
2818
|
}
|
|
2616
2819
|
function addPane(paneId) {
|
|
2617
|
-
const existing =
|
|
2820
|
+
const existing = paneById2(paneId);
|
|
2618
2821
|
if (existing) {
|
|
2619
2822
|
return existing;
|
|
2620
2823
|
}
|
|
2621
|
-
|
|
2622
|
-
...
|
|
2824
|
+
workspace2.panes = [
|
|
2825
|
+
...workspace2.panes,
|
|
2623
2826
|
{
|
|
2624
2827
|
activeTabId: null,
|
|
2625
2828
|
derived: null,
|
|
@@ -2627,35 +2830,35 @@ function addPane(paneId) {
|
|
|
2627
2830
|
tabOrder: []
|
|
2628
2831
|
}
|
|
2629
2832
|
];
|
|
2630
|
-
return
|
|
2833
|
+
return paneById2(paneId);
|
|
2631
2834
|
}
|
|
2632
2835
|
function closePane(paneId) {
|
|
2633
|
-
if (
|
|
2836
|
+
if (workspace2.panes.length < 2) {
|
|
2634
2837
|
return;
|
|
2635
2838
|
}
|
|
2636
|
-
const closingId = paneId ===
|
|
2637
|
-
const pane = closingId === undefined ? undefined :
|
|
2638
|
-
const survivor =
|
|
2839
|
+
const closingId = paneId === PRIMARY_PANE2 ? workspace2.panes.find((candidate) => candidate.id !== PRIMARY_PANE2)?.id : paneId;
|
|
2840
|
+
const pane = closingId === undefined ? undefined : paneById2(closingId);
|
|
2841
|
+
const survivor = workspace2.panes.find((candidate) => candidate.id !== closingId);
|
|
2639
2842
|
if (!pane || !survivor) {
|
|
2640
2843
|
return;
|
|
2641
2844
|
}
|
|
2642
2845
|
for (const tabId of pane.tabOrder) {
|
|
2643
|
-
|
|
2846
|
+
insertIntoPane2(survivor, tabId);
|
|
2644
2847
|
}
|
|
2645
|
-
survivor.activeTabId =
|
|
2646
|
-
|
|
2848
|
+
survivor.activeTabId = workspace2.activePaneId === pane.id ? pane.activeTabId ?? survivor.activeTabId : survivor.activeTabId ?? pane.activeTabId;
|
|
2849
|
+
workspace2.activePaneId = survivor.id;
|
|
2647
2850
|
if (survivor.derived?.sourcePaneId === pane.id) {
|
|
2648
2851
|
survivor.derived = null;
|
|
2649
2852
|
}
|
|
2650
|
-
|
|
2853
|
+
workspace2.panes = workspace2.panes.filter((candidate) => candidate.id !== pane.id);
|
|
2651
2854
|
resetTabCycle();
|
|
2652
2855
|
}
|
|
2653
2856
|
function paneIsEmpty(pane) {
|
|
2654
2857
|
return pane.tabOrder.length === 0 && pane.derived === null;
|
|
2655
2858
|
}
|
|
2656
|
-
function
|
|
2859
|
+
function detachTab2(tabId) {
|
|
2657
2860
|
const emptied = [];
|
|
2658
|
-
for (const pane of
|
|
2861
|
+
for (const pane of workspace2.panes) {
|
|
2659
2862
|
if (!pane.tabOrder.includes(tabId)) {
|
|
2660
2863
|
continue;
|
|
2661
2864
|
}
|
|
@@ -2663,7 +2866,7 @@ function detachTab(tabId) {
|
|
|
2663
2866
|
if (pane.activeTabId === tabId) {
|
|
2664
2867
|
pane.activeTabId = pane.tabOrder.at(-1) ?? null;
|
|
2665
2868
|
}
|
|
2666
|
-
if (pane.id !==
|
|
2869
|
+
if (pane.id !== PRIMARY_PANE2 && paneIsEmpty(pane)) {
|
|
2667
2870
|
emptied.push(pane.id);
|
|
2668
2871
|
}
|
|
2669
2872
|
}
|
|
@@ -2671,7 +2874,7 @@ function detachTab(tabId) {
|
|
|
2671
2874
|
closePane(paneId);
|
|
2672
2875
|
}
|
|
2673
2876
|
}
|
|
2674
|
-
function
|
|
2877
|
+
function insertIntoPane2(pane, tabId, index) {
|
|
2675
2878
|
if (pane.tabOrder.includes(tabId)) {
|
|
2676
2879
|
return;
|
|
2677
2880
|
}
|
|
@@ -2681,7 +2884,7 @@ function insertIntoPane(pane, tabId, index) {
|
|
|
2681
2884
|
function pinnedCount(pane) {
|
|
2682
2885
|
let count = 0;
|
|
2683
2886
|
for (const id of pane.tabOrder) {
|
|
2684
|
-
if (
|
|
2887
|
+
if (workspace2.tabs.get(id)?.pinned !== true) {
|
|
2685
2888
|
break;
|
|
2686
2889
|
}
|
|
2687
2890
|
count += 1;
|
|
@@ -2689,25 +2892,25 @@ function pinnedCount(pane) {
|
|
|
2689
2892
|
return count;
|
|
2690
2893
|
}
|
|
2691
2894
|
function defaultSlot(pane, tabId) {
|
|
2692
|
-
return
|
|
2895
|
+
return workspace2.tabs.get(tabId)?.pinned === true ? pinnedCount(pane) : pane.tabOrder.length;
|
|
2693
2896
|
}
|
|
2694
|
-
function
|
|
2695
|
-
|
|
2696
|
-
|
|
2897
|
+
function setWorkspaceProject2(root, config = null) {
|
|
2898
|
+
workspace2.projectRoot = root;
|
|
2899
|
+
workspace2.projectConfig = config;
|
|
2697
2900
|
}
|
|
2698
|
-
function
|
|
2699
|
-
const active =
|
|
2901
|
+
function isTabActive2(tab) {
|
|
2902
|
+
const active = activeTab2.value;
|
|
2700
2903
|
return tab !== null && active !== null && toRaw(active) === toRaw(tab);
|
|
2701
2904
|
}
|
|
2702
|
-
function
|
|
2905
|
+
function tabIsLive2(tab) {
|
|
2703
2906
|
if (!tab) {
|
|
2704
2907
|
return false;
|
|
2705
2908
|
}
|
|
2706
|
-
const held =
|
|
2909
|
+
const held = workspace2.tabs.get(tab.id);
|
|
2707
2910
|
return held !== undefined && toRaw(held) === toRaw(tab);
|
|
2708
2911
|
}
|
|
2709
2912
|
function promoteMru(tabId) {
|
|
2710
|
-
|
|
2913
|
+
workspace2.mruOrder = [tabId, ...workspace2.mruOrder.filter((id) => id !== tabId)];
|
|
2711
2914
|
}
|
|
2712
2915
|
var _cycleList = null;
|
|
2713
2916
|
var _cycleIndex = 0;
|
|
@@ -2721,8 +2924,8 @@ function syncTreeSelection(tab) {
|
|
|
2721
2924
|
}
|
|
2722
2925
|
}
|
|
2723
2926
|
function setActiveTab(tabId, opts = {}) {
|
|
2724
|
-
const tab =
|
|
2725
|
-
const pane =
|
|
2927
|
+
const tab = workspace2.tabs.get(tabId);
|
|
2928
|
+
const pane = paneOfTab2(tabId);
|
|
2726
2929
|
if (!tab || !pane) {
|
|
2727
2930
|
return;
|
|
2728
2931
|
}
|
|
@@ -2730,18 +2933,18 @@ function setActiveTab(tabId, opts = {}) {
|
|
|
2730
2933
|
if (opts.focus === false) {
|
|
2731
2934
|
return;
|
|
2732
2935
|
}
|
|
2733
|
-
|
|
2936
|
+
workspace2.activePaneId = pane.id;
|
|
2734
2937
|
if (!opts.cycling) {
|
|
2735
2938
|
resetTabCycle();
|
|
2736
2939
|
promoteMru(tabId);
|
|
2737
2940
|
}
|
|
2738
2941
|
syncTreeSelection(tab);
|
|
2739
2942
|
}
|
|
2740
|
-
function
|
|
2741
|
-
const previous =
|
|
2943
|
+
function openTab2(opts) {
|
|
2944
|
+
const previous = workspace2.tabs.get(opts.id);
|
|
2742
2945
|
const preview = opts.preview === true && previous?.pinned !== true;
|
|
2743
2946
|
const tab = createTab({ ...opts, preview });
|
|
2744
|
-
const pane = (opts.paneId === undefined ? undefined :
|
|
2947
|
+
const pane = (opts.paneId === undefined ? undefined : paneById2(opts.paneId)) ?? activePane2();
|
|
2745
2948
|
let slot;
|
|
2746
2949
|
if (previous) {
|
|
2747
2950
|
tab.pinned = previous.pinned;
|
|
@@ -2749,43 +2952,43 @@ function openTab(opts) {
|
|
|
2749
2952
|
} else {
|
|
2750
2953
|
if (preview) {
|
|
2751
2954
|
const sitting = previewTabIn(pane);
|
|
2752
|
-
const sittingTab = sitting ?
|
|
2955
|
+
const sittingTab = sitting ? workspace2.tabs.get(sitting) : null;
|
|
2753
2956
|
if (sittingTab) {
|
|
2754
|
-
|
|
2957
|
+
commitTabBuffers2(sittingTab);
|
|
2755
2958
|
}
|
|
2756
|
-
|
|
2959
|
+
promoteDirtyPreviewTabs2();
|
|
2757
2960
|
}
|
|
2758
2961
|
const replaced = preview ? previewTabIn(pane) : null;
|
|
2759
2962
|
if (replaced) {
|
|
2760
2963
|
slot = pane.tabOrder.indexOf(replaced);
|
|
2761
|
-
|
|
2964
|
+
closeTab2(replaced);
|
|
2762
2965
|
}
|
|
2763
|
-
|
|
2966
|
+
insertIntoPane2(pane, tab.id, slot);
|
|
2764
2967
|
}
|
|
2765
|
-
|
|
2968
|
+
workspace2.tabs.set(tab.id, tab);
|
|
2766
2969
|
setActiveTab(tab.id, { focus: opts.focus !== false });
|
|
2767
2970
|
ensureCollab(tab);
|
|
2768
2971
|
return tab;
|
|
2769
2972
|
}
|
|
2770
2973
|
function previewTabIn(pane) {
|
|
2771
|
-
return pane.tabOrder.find((id) =>
|
|
2974
|
+
return pane.tabOrder.find((id) => workspace2.tabs.get(id)?.preview === true) ?? null;
|
|
2772
2975
|
}
|
|
2773
|
-
function
|
|
2774
|
-
const tab =
|
|
2976
|
+
function promoteTab2(tabId) {
|
|
2977
|
+
const tab = workspace2.tabs.get(tabId);
|
|
2775
2978
|
if (tab?.preview === true) {
|
|
2776
2979
|
tab.preview = false;
|
|
2777
2980
|
}
|
|
2778
2981
|
}
|
|
2779
|
-
function
|
|
2780
|
-
for (const [id, tab] of
|
|
2982
|
+
function promoteDirtyPreviewTabs2() {
|
|
2983
|
+
for (const [id, tab] of workspace2.tabs) {
|
|
2781
2984
|
if (tab.preview && tab.doc.dirty) {
|
|
2782
|
-
|
|
2985
|
+
promoteTab2(id);
|
|
2783
2986
|
}
|
|
2784
2987
|
}
|
|
2785
2988
|
}
|
|
2786
|
-
function
|
|
2787
|
-
const tab =
|
|
2788
|
-
const pane =
|
|
2989
|
+
function setTabPinned2(tabId, pinned) {
|
|
2990
|
+
const tab = workspace2.tabs.get(tabId);
|
|
2991
|
+
const pane = paneOfTab2(tabId);
|
|
2789
2992
|
if (!tab || !pane) {
|
|
2790
2993
|
return;
|
|
2791
2994
|
}
|
|
@@ -2794,34 +2997,34 @@ function setTabPinned(tabId, pinned) {
|
|
|
2794
2997
|
tab.preview = false;
|
|
2795
2998
|
}
|
|
2796
2999
|
const without = pane.tabOrder.filter((id) => id !== tabId);
|
|
2797
|
-
const boundary = without.filter((id) =>
|
|
3000
|
+
const boundary = without.filter((id) => workspace2.tabs.get(id)?.pinned === true).length;
|
|
2798
3001
|
pane.tabOrder = [...without.slice(0, boundary), tabId, ...without.slice(boundary)];
|
|
2799
3002
|
}
|
|
2800
|
-
function
|
|
2801
|
-
const tab =
|
|
2802
|
-
const pane =
|
|
3003
|
+
function moveTab2(tabId, toIndex) {
|
|
3004
|
+
const tab = workspace2.tabs.get(tabId);
|
|
3005
|
+
const pane = paneOfTab2(tabId);
|
|
2803
3006
|
if (!tab || !pane) {
|
|
2804
3007
|
return;
|
|
2805
3008
|
}
|
|
2806
3009
|
const without = pane.tabOrder.filter((id) => id !== tabId);
|
|
2807
|
-
const boundary = without.filter((id) =>
|
|
3010
|
+
const boundary = without.filter((id) => workspace2.tabs.get(id)?.pinned === true).length;
|
|
2808
3011
|
const lower = tab.pinned ? 0 : boundary;
|
|
2809
3012
|
const upper = tab.pinned ? boundary : without.length;
|
|
2810
3013
|
const at = Math.min(Math.max(toIndex, lower), upper);
|
|
2811
3014
|
pane.tabOrder = [...without.slice(0, at), tabId, ...without.slice(at)];
|
|
2812
3015
|
}
|
|
2813
|
-
function
|
|
2814
|
-
const tab =
|
|
3016
|
+
function closeTab2(tabId) {
|
|
3017
|
+
const tab = workspace2.tabs.get(tabId);
|
|
2815
3018
|
if (!tab) {
|
|
2816
3019
|
return;
|
|
2817
3020
|
}
|
|
2818
|
-
const pane =
|
|
3021
|
+
const pane = paneOfTab2(tabId);
|
|
2819
3022
|
const wasActive = pane?.activeTabId === tabId;
|
|
2820
3023
|
rememberClosedTab(tab);
|
|
2821
3024
|
disposeTab(tab);
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
3025
|
+
workspace2.tabs.delete(tabId);
|
|
3026
|
+
detachTab2(tabId);
|
|
3027
|
+
workspace2.mruOrder = workspace2.mruOrder.filter((id) => id !== tabId);
|
|
2825
3028
|
resetTabCycle();
|
|
2826
3029
|
if (pane && paneIsEmpty(pane)) {
|
|
2827
3030
|
closePane(pane.id);
|
|
@@ -2829,47 +3032,47 @@ function closeTab(tabId) {
|
|
|
2829
3032
|
if (!wasActive) {
|
|
2830
3033
|
return;
|
|
2831
3034
|
}
|
|
2832
|
-
const survivor =
|
|
2833
|
-
const next =
|
|
3035
|
+
const survivor = activePane2();
|
|
3036
|
+
const next = workspace2.mruOrder.find((id) => survivor.tabOrder.includes(id)) ?? survivor.tabOrder.at(-1) ?? null;
|
|
2834
3037
|
if (next) {
|
|
2835
3038
|
setActiveTab(next);
|
|
2836
3039
|
}
|
|
2837
3040
|
}
|
|
2838
|
-
function
|
|
2839
|
-
const tabs = [...
|
|
2840
|
-
|
|
3041
|
+
function closeAllTabs2() {
|
|
3042
|
+
const tabs = [...workspace2.tabs.values()];
|
|
3043
|
+
workspace2.tabs.clear();
|
|
2841
3044
|
resetPanes();
|
|
2842
|
-
|
|
3045
|
+
workspace2.mruOrder = [];
|
|
2843
3046
|
resetTabCycle();
|
|
2844
3047
|
for (const tab of tabs) {
|
|
2845
3048
|
disposeTab(tab);
|
|
2846
3049
|
}
|
|
2847
3050
|
}
|
|
2848
3051
|
function resetPanes() {
|
|
2849
|
-
|
|
2850
|
-
|
|
3052
|
+
workspace2.panes = [{ activeTabId: null, derived: null, id: PRIMARY_PANE2, tabOrder: [] }];
|
|
3053
|
+
workspace2.activePaneId = PRIMARY_PANE2;
|
|
2851
3054
|
}
|
|
2852
3055
|
function rememberClosedTab(tab) {
|
|
2853
3056
|
if (!tab.documentPath) {
|
|
2854
3057
|
return;
|
|
2855
3058
|
}
|
|
2856
3059
|
const path = tab.documentPath;
|
|
2857
|
-
|
|
3060
|
+
workspace2.closedTabs = [
|
|
2858
3061
|
{ documentPath: path },
|
|
2859
|
-
...
|
|
3062
|
+
...workspace2.closedTabs.filter((entry) => entry.documentPath !== path)
|
|
2860
3063
|
].slice(0, CLOSED_TAB_LIMIT);
|
|
2861
3064
|
}
|
|
2862
3065
|
function takeClosedTabPath() {
|
|
2863
|
-
const [entry] =
|
|
3066
|
+
const [entry] = workspace2.closedTabs;
|
|
2864
3067
|
if (!entry) {
|
|
2865
3068
|
return;
|
|
2866
3069
|
}
|
|
2867
|
-
|
|
3070
|
+
workspace2.closedTabs = workspace2.closedTabs.slice(1);
|
|
2868
3071
|
return entry.documentPath;
|
|
2869
3072
|
}
|
|
2870
3073
|
function cycleTab(step) {
|
|
2871
3074
|
if (!_cycleList) {
|
|
2872
|
-
_cycleList =
|
|
3075
|
+
_cycleList = workspace2.mruOrder.filter((id) => workspace2.tabs.has(id));
|
|
2873
3076
|
_cycleIndex = 0;
|
|
2874
3077
|
}
|
|
2875
3078
|
const list = _cycleList;
|
|
@@ -2881,21 +3084,14 @@ function cycleTab(step) {
|
|
|
2881
3084
|
setActiveTab(id, { cycling: true });
|
|
2882
3085
|
return id;
|
|
2883
3086
|
}
|
|
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()];
|
|
3087
|
+
function replaceAllTabs2(newTabOpts) {
|
|
3088
|
+
const oldIds = [...workspace2.tabs.keys()];
|
|
3089
|
+
const oldTabs = [...workspace2.tabs.values()];
|
|
2894
3090
|
const newTab = createTab(newTabOpts);
|
|
2895
|
-
|
|
3091
|
+
workspace2.tabs.set(newTab.id, newTab);
|
|
2896
3092
|
resetPanes();
|
|
2897
|
-
|
|
2898
|
-
|
|
3093
|
+
workspace2.panes[0].tabOrder = [newTab.id];
|
|
3094
|
+
workspace2.mruOrder = [];
|
|
2899
3095
|
resetTabCycle();
|
|
2900
3096
|
setActiveTab(newTab.id);
|
|
2901
3097
|
ensureCollab(newTab);
|
|
@@ -2903,52 +3099,52 @@ function replaceAllTabs(newTabOpts) {
|
|
|
2903
3099
|
if (id === newTab.id) {
|
|
2904
3100
|
continue;
|
|
2905
3101
|
}
|
|
2906
|
-
|
|
3102
|
+
workspace2.tabs.delete(id);
|
|
2907
3103
|
}
|
|
2908
3104
|
for (const tab of oldTabs) {
|
|
2909
3105
|
disposeTab(tab);
|
|
2910
3106
|
}
|
|
2911
3107
|
return newTab;
|
|
2912
3108
|
}
|
|
2913
|
-
function
|
|
3109
|
+
function activateTab2(tabId, opts = {}) {
|
|
2914
3110
|
setActiveTab(tabId, opts);
|
|
2915
3111
|
}
|
|
2916
|
-
function
|
|
2917
|
-
const pane =
|
|
2918
|
-
if (!pane || !
|
|
3112
|
+
function moveTabToPane2(tabId, paneId) {
|
|
3113
|
+
const pane = paneById2(paneId);
|
|
3114
|
+
if (!pane || !workspace2.tabs.has(tabId)) {
|
|
2919
3115
|
return null;
|
|
2920
3116
|
}
|
|
2921
3117
|
if (pane.tabOrder.includes(tabId)) {
|
|
2922
3118
|
return pane;
|
|
2923
3119
|
}
|
|
2924
|
-
|
|
2925
|
-
|
|
3120
|
+
detachTab2(tabId);
|
|
3121
|
+
insertIntoPane2(pane, tabId);
|
|
2926
3122
|
return pane;
|
|
2927
3123
|
}
|
|
2928
|
-
function
|
|
2929
|
-
const tab =
|
|
3124
|
+
function renameTab2(oldId, newId, newDocumentPath) {
|
|
3125
|
+
const tab = workspace2.tabs.get(oldId);
|
|
2930
3126
|
if (!tab) {
|
|
2931
3127
|
return;
|
|
2932
3128
|
}
|
|
2933
3129
|
tab.id = newId;
|
|
2934
3130
|
tab.documentPath = newDocumentPath;
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
for (const pane of
|
|
3131
|
+
workspace2.tabs.delete(oldId);
|
|
3132
|
+
workspace2.tabs.set(newId, tab);
|
|
3133
|
+
for (const pane of workspace2.panes) {
|
|
2938
3134
|
pane.tabOrder = pane.tabOrder.map((id) => id === oldId ? newId : id);
|
|
2939
3135
|
if (pane.activeTabId === oldId) {
|
|
2940
3136
|
pane.activeTabId = newId;
|
|
2941
3137
|
}
|
|
2942
3138
|
}
|
|
2943
|
-
|
|
3139
|
+
workspace2.mruOrder = workspace2.mruOrder.map((id) => id === oldId ? newId : id);
|
|
2944
3140
|
resetTabCycle();
|
|
2945
3141
|
rekeyCollab(tab);
|
|
2946
3142
|
}
|
|
2947
|
-
function
|
|
3143
|
+
function registerTabCommands2(registry, deps) {
|
|
2948
3144
|
registry.registerAll([...tabCommands(deps), ...paneCommands(deps)]);
|
|
2949
3145
|
}
|
|
2950
3146
|
function tabCommands(deps) {
|
|
2951
|
-
const twoOrMoreTabs = () =>
|
|
3147
|
+
const twoOrMoreTabs = () => workspace2.tabs.size > 1;
|
|
2952
3148
|
return [
|
|
2953
3149
|
{
|
|
2954
3150
|
id: "document.nextTab",
|
|
@@ -2988,7 +3184,7 @@ function tabCommands(deps) {
|
|
|
2988
3184
|
keybinding: "mod+shift+t",
|
|
2989
3185
|
menus: ["context/tab", "palette"],
|
|
2990
3186
|
group: "1_file",
|
|
2991
|
-
enablement: () =>
|
|
3187
|
+
enablement: () => workspace2.closedTabs.length > 0,
|
|
2992
3188
|
requires: "a document closed in this session",
|
|
2993
3189
|
run: async () => {
|
|
2994
3190
|
const path = takeClosedTabPath();
|
|
@@ -3007,10 +3203,10 @@ function tabCommands(deps) {
|
|
|
3007
3203
|
when: (ctx) => ctx.document.open,
|
|
3008
3204
|
requires: "an open document",
|
|
3009
3205
|
run: () => {
|
|
3010
|
-
const id =
|
|
3011
|
-
const tab = id ?
|
|
3206
|
+
const id = workspace2.activeTabId;
|
|
3207
|
+
const tab = id ? workspace2.tabs.get(id) : null;
|
|
3012
3208
|
if (id && tab) {
|
|
3013
|
-
|
|
3209
|
+
setTabPinned2(id, !tab.pinned);
|
|
3014
3210
|
}
|
|
3015
3211
|
}
|
|
3016
3212
|
},
|
|
@@ -3027,9 +3223,9 @@ function tabCommands(deps) {
|
|
|
3027
3223
|
when: (ctx) => ctx.document.open,
|
|
3028
3224
|
requires: "an open document",
|
|
3029
3225
|
run: (_ctx, args) => {
|
|
3030
|
-
const id =
|
|
3031
|
-
if (id &&
|
|
3032
|
-
|
|
3226
|
+
const id = workspace2.activeTabId;
|
|
3227
|
+
if (id && workspace2.tabs.get(id)) {
|
|
3228
|
+
setTabPinned2(id, booleanArg("document.setPinned", args, "pinned"));
|
|
3033
3229
|
}
|
|
3034
3230
|
}
|
|
3035
3231
|
},
|
|
@@ -3042,21 +3238,21 @@ function tabCommands(deps) {
|
|
|
3042
3238
|
group: "1_file",
|
|
3043
3239
|
when: (ctx) => ctx.document.open,
|
|
3044
3240
|
enablement: () => {
|
|
3045
|
-
const id =
|
|
3046
|
-
return id !== null &&
|
|
3241
|
+
const id = workspace2.activeTabId;
|
|
3242
|
+
return id !== null && workspace2.tabs.get(id)?.preview === true;
|
|
3047
3243
|
},
|
|
3048
3244
|
requires: "a preview document — one opened by a single click",
|
|
3049
3245
|
run: () => {
|
|
3050
|
-
const id =
|
|
3246
|
+
const id = workspace2.activeTabId;
|
|
3051
3247
|
if (id) {
|
|
3052
|
-
|
|
3248
|
+
promoteTab2(id);
|
|
3053
3249
|
}
|
|
3054
3250
|
}
|
|
3055
3251
|
}
|
|
3056
3252
|
];
|
|
3057
3253
|
}
|
|
3058
3254
|
function paneCommands(deps) {
|
|
3059
|
-
const twoPanes = () =>
|
|
3255
|
+
const twoPanes = () => workspace2.panes.length > 1;
|
|
3060
3256
|
return [
|
|
3061
3257
|
{
|
|
3062
3258
|
id: "pane.splitRight",
|
|
@@ -3067,7 +3263,7 @@ function paneCommands(deps) {
|
|
|
3067
3263
|
menus: ["context/pane", "context/tab", "palette"],
|
|
3068
3264
|
group: "5_pane",
|
|
3069
3265
|
when: (ctx) => ctx.document.open,
|
|
3070
|
-
enablement: () =>
|
|
3266
|
+
enablement: () => workspace2.activeTabId !== null,
|
|
3071
3267
|
requires: "an open document",
|
|
3072
3268
|
undo: "none",
|
|
3073
3269
|
run: () => {
|
|
@@ -3085,21 +3281,17 @@ function paneCommands(deps) {
|
|
|
3085
3281
|
menus: ["context/pane", "context/tab", "palette"],
|
|
3086
3282
|
group: "5_pane",
|
|
3087
3283
|
when: (ctx) => ctx.document.open,
|
|
3088
|
-
enablement: () =>
|
|
3284
|
+
enablement: () => workspace2.activeTabId !== null,
|
|
3089
3285
|
requires: "an open document",
|
|
3090
3286
|
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
3287
|
run: async (_ctx, args) => {
|
|
3096
3288
|
const path = stringArg("pane.compareWith", args, "path");
|
|
3097
|
-
const here =
|
|
3098
|
-
const held = here.activeTabId ?
|
|
3289
|
+
const here = activePane2();
|
|
3290
|
+
const held = here.activeTabId ? workspace2.tabs.get(here.activeTabId) : null;
|
|
3099
3291
|
if (held?.documentPath === path) {
|
|
3100
3292
|
throw new RangeError(`command "pane.compareWith" argument "path": "${path}" is the document this pane is ` + `already showing — name a different one`);
|
|
3101
3293
|
}
|
|
3102
|
-
await deps.openFileInPane(
|
|
3294
|
+
await deps.openFileInPane(receivingPane2().id, path);
|
|
3103
3295
|
}
|
|
3104
3296
|
},
|
|
3105
3297
|
{
|
|
@@ -3114,7 +3306,7 @@ function paneCommands(deps) {
|
|
|
3114
3306
|
requires: "a split pane grid",
|
|
3115
3307
|
undo: "none",
|
|
3116
3308
|
run: () => {
|
|
3117
|
-
|
|
3309
|
+
focusPane2(PRIMARY_PANE2);
|
|
3118
3310
|
}
|
|
3119
3311
|
},
|
|
3120
3312
|
{
|
|
@@ -3129,7 +3321,7 @@ function paneCommands(deps) {
|
|
|
3129
3321
|
requires: "a split pane grid",
|
|
3130
3322
|
undo: "none",
|
|
3131
3323
|
run: () => {
|
|
3132
|
-
|
|
3324
|
+
focusPane2(SECONDARY_PANE2);
|
|
3133
3325
|
}
|
|
3134
3326
|
},
|
|
3135
3327
|
{
|
|
@@ -3147,17 +3339,17 @@ function paneCommands(deps) {
|
|
|
3147
3339
|
];
|
|
3148
3340
|
}
|
|
3149
3341
|
function runUnsplit() {
|
|
3150
|
-
const derived =
|
|
3151
|
-
if (derived?.id ===
|
|
3342
|
+
const derived = workspace2.panes.find((pane) => pane.derived !== null);
|
|
3343
|
+
if (derived?.id === PRIMARY_PANE2) {
|
|
3152
3344
|
derived.derived = null;
|
|
3153
3345
|
if (!paneIsEmpty(derived)) {
|
|
3154
3346
|
return;
|
|
3155
3347
|
}
|
|
3156
3348
|
}
|
|
3157
|
-
closePane(derived?.id ??
|
|
3349
|
+
closePane(derived?.id ?? SECONDARY_PANE2);
|
|
3158
3350
|
}
|
|
3159
3351
|
|
|
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,
|
|
3352
|
+
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
3353
|
|
|
3162
|
-
//# debugId=
|
|
3163
|
-
//# sourceMappingURL=studio-
|
|
3354
|
+
//# debugId=AC037B153E4B837864756E2164756E21
|
|
3355
|
+
//# sourceMappingURL=studio-az3zd49t.js.map
|