@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
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The Navigator's Outline — the open document's element tree, as a Jx document over the kit.
|
|
4
|
+
*
|
|
5
|
+
* This is the adapter. `panels/layers-panel.ts` keeps the Outline — which rows exist and in what
|
|
6
|
+
* order, what a row is called, which of them a collapsed ancestor removes, what the window onto
|
|
7
|
+
* them is, which verbs the registry places on a row, and the whole of the keyboard model — and
|
|
8
|
+
* hands this module one flat projection: a word saying whether there is a tree at all, two spacer
|
|
9
|
+
* heights, and one row object per line whose every field is already a string.
|
|
10
|
+
*
|
|
11
|
+
* **The rows are ONE vocabulary, discriminated.** A text node's line and an element's line are the
|
|
12
|
+
* same `part="row"` with a different `data-kind`, so the drag island, the window arithmetic and the
|
|
13
|
+
* stylesheet each address rows once rather than twice — and the projection is what decides which of
|
|
14
|
+
* the two a line is, exactly as `panel-data.json`'s rows do. Only the element line is a
|
|
15
|
+
* `jx-tree-item`: a text node cannot be moved, renamed, duplicated or deleted on its own, so a row
|
|
16
|
+
* the caret could land on would be a stop in the walk with no verb behind it.
|
|
17
|
+
*
|
|
18
|
+
* **The keyboard and the ARIA are the kit's.** `jx-tree` writes the role, the name, the roving tab
|
|
19
|
+
* stop and each row's level and set counts, and owns the walk; what a row VIEW says is what is TRUE
|
|
20
|
+
* of it, never what a reader may do to it. The projection therefore carries no `tabindex`, no
|
|
21
|
+
* `role`, no `aria-*` and no key names — those were written out here and written out again in
|
|
22
|
+
* `files-panel.ts`, one contract in two copies with nothing keeping them in agreement.
|
|
23
|
+
*
|
|
24
|
+
* **Three things reach the host through `onNodeCreated`** (guidelines §9.4), because each is a fact
|
|
25
|
+
* about a node that only exists once it has been created:
|
|
26
|
+
*
|
|
27
|
+
* - The tree element, which is what the virtual window is measured against and what the scroll watch
|
|
28
|
+
* binds to. Nothing about the window can be computed before it.
|
|
29
|
+
* - The rename input, which has to be focused and selected the moment it appears. A document says
|
|
30
|
+
* what is drawn; where the caret goes is not a value it can hold.
|
|
31
|
+
* - The drag rows, indirectly: the panel re-registers pragmatic-dnd once the mount has settled, which
|
|
32
|
+
* is why {@link OutlineSurfaceHandle.ready} is a promise rather than a boolean.
|
|
33
|
+
*
|
|
34
|
+
* **The container is not cleared**, which is the one line where a panel differs from a pane. A pane
|
|
35
|
+
* is handed the canvas stage whole; a panel body is a node lit renders `nothing` into, and its
|
|
36
|
+
* comment markers are how lit finds its own content again. So the document is APPENDED, and
|
|
37
|
+
* {@link OutlineSurfaceHandle.connected} is how the panel finds out that something else has since
|
|
38
|
+
* been painted over the top of it.
|
|
39
|
+
*
|
|
40
|
+
* @docs studio/design/layers
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
import { reactive } from "../reactivity";
|
|
44
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
45
|
+
import outlineDoc from "./panel-outline.json";
|
|
46
|
+
import type { JxDocument, JxElement } from "@jxsuite/schema/types";
|
|
47
|
+
import type { JxScope } from "@jxsuite/runtime/types";
|
|
48
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
49
|
+
|
|
50
|
+
registerSurface("panel-outline", outlineDoc as unknown as JxDocument);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* One verb on a row, already resolved against THAT ROW'S node.
|
|
54
|
+
*
|
|
55
|
+
* `PLACEMENT_MATRIX["outline/row"]` says a row action acts on the row's node rather than on the
|
|
56
|
+
* selection, and the hovered row is not the selected one — so `disabled` and `tooltip` are answers
|
|
57
|
+
* the panel computed under `withCommandTarget`, not questions the document could ask.
|
|
58
|
+
*/
|
|
59
|
+
export interface OutlineCommandView {
|
|
60
|
+
/** The record's id: the reconcile key, and what a click runs. */
|
|
61
|
+
id: string;
|
|
62
|
+
/** The row this verb belongs to, because a nested `$map` cannot see the outer item. */
|
|
63
|
+
row: string;
|
|
64
|
+
/** The accessible name — the record's own `title`, never a surface's word for it. */
|
|
65
|
+
title: string;
|
|
66
|
+
/** The tooltip: the chord when it can act, the `requires` sentence when it cannot. */
|
|
67
|
+
tooltip: string;
|
|
68
|
+
/** The glyph by its name in the kit's manifest; empty draws the label instead. */
|
|
69
|
+
icon: string;
|
|
70
|
+
disabled: boolean;
|
|
71
|
+
/** `"true"` for a `destructive: true` record, which is drawn in the danger colour. */
|
|
72
|
+
destructive: string;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* One line of the Outline, as the document draws it. Every field is a value: no paths, no nodes, no
|
|
77
|
+
* closures, and nothing the document has to compute.
|
|
78
|
+
*/
|
|
79
|
+
export interface OutlineRowView {
|
|
80
|
+
/** `pathKey(path)` — the reconcile key, the drag key and the roving-focus key. */
|
|
81
|
+
key: string;
|
|
82
|
+
/** `element` or `text`: which of the two row drawings this line gets. */
|
|
83
|
+
kind: string;
|
|
84
|
+
/** The row's `JxPath`, verbatim as JSON — node IDENTITY, which `pathKey` is not. */
|
|
85
|
+
jxPath: string;
|
|
86
|
+
/** The row's own left padding at this depth, as a CSS length. */
|
|
87
|
+
indent: string;
|
|
88
|
+
/** The row's depth, 1-based. `jx-tree-item` writes `aria-level` and the indent from it. */
|
|
89
|
+
level: string;
|
|
90
|
+
/** The row's place in the DOCUMENT, not in the window — `aria-posinset` / `aria-setsize`. */
|
|
91
|
+
posInSet: string;
|
|
92
|
+
setSize: string;
|
|
93
|
+
selected: string;
|
|
94
|
+
/**
|
|
95
|
+
* `"true"`, `"false"`, or `""` on a row with nothing under it.
|
|
96
|
+
*
|
|
97
|
+
* Three values and not a boolean, because "closed" and "cannot open" are different things to a
|
|
98
|
+
* reader and to the keyboard: a leaf owns no `aria-expanded`, draws no chevron, and `ArrowRight`
|
|
99
|
+
* on it does nothing rather than descending into children it has not got. It is also the whole of
|
|
100
|
+
* what a chevron used to be said twice for.
|
|
101
|
+
*/
|
|
102
|
+
expanded: string;
|
|
103
|
+
/** The badge's text, and which of the six badge drawings it gets. */
|
|
104
|
+
badge: string;
|
|
105
|
+
badgeKind: string;
|
|
106
|
+
/** The badge's tooltip, or `null` where the badge speaks for itself. */
|
|
107
|
+
badgeTitle: string | null;
|
|
108
|
+
label: string;
|
|
109
|
+
labelItalic: string;
|
|
110
|
+
/** `"true"` while this row is the one being renamed. */
|
|
111
|
+
editing: string;
|
|
112
|
+
/** What the rename input opens with, and what it shows when the title is empty. */
|
|
113
|
+
editValue: string;
|
|
114
|
+
placeholder: string;
|
|
115
|
+
/** `"true"` where the row offers the grab handle — `jx-tree-item`'s `grip`. */
|
|
116
|
+
draggable: string;
|
|
117
|
+
/** The four `data-dnd-*` attributes the drag island reads, or `null` on a row it may not move. */
|
|
118
|
+
dndRow: string | null;
|
|
119
|
+
dndDepth: string | null;
|
|
120
|
+
dndVoid: string | null;
|
|
121
|
+
dndExpanded: string | null;
|
|
122
|
+
/** `shown` gives the cluster its backing plate; `hidden` leaves it invisible and empty. */
|
|
123
|
+
actions: string;
|
|
124
|
+
/** Empty on every row but the selected one and the hovered one. */
|
|
125
|
+
commands: OutlineCommandView[];
|
|
126
|
+
/** `"true"` when there are more verbs than the row's budget, so `⋮` is drawn. */
|
|
127
|
+
overflow: string;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** Everything the document draws, as one value. */
|
|
131
|
+
export interface OutlineValues {
|
|
132
|
+
/** `rows` or `empty` — whether this document has anything in it at all. */
|
|
133
|
+
view: string;
|
|
134
|
+
rows: OutlineRowView[];
|
|
135
|
+
/** The windowed list's two spacers, in pixels. */
|
|
136
|
+
padTop: number;
|
|
137
|
+
padBottom: number;
|
|
138
|
+
/**
|
|
139
|
+
* The row the caret is on.
|
|
140
|
+
*
|
|
141
|
+
* A row the window did not draw is allowed: `jx-tree` falls back to the first drawn row for the
|
|
142
|
+
* TAB STOP and leaves `current` exactly as it was given, so a reader whose row has scrolled away
|
|
143
|
+
* keeps their place and still has a way back in with Tab.
|
|
144
|
+
*/
|
|
145
|
+
current: string;
|
|
146
|
+
/** The empty state's sentence, and the label on the one action that answers it. */
|
|
147
|
+
emptyMessage: string;
|
|
148
|
+
emptyLabel: string;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** What a control can ask the Outline to do. Every one of them is a decision the panel owns. */
|
|
152
|
+
export interface OutlineActions {
|
|
153
|
+
/** A row was clicked: bring the node it stands for into view on the canvas, and nothing else. */
|
|
154
|
+
reveal: (key: string) => void;
|
|
155
|
+
/**
|
|
156
|
+
* The reader meant that row, and `mode` says what by: `replace`, `toggle` or `range`.
|
|
157
|
+
*
|
|
158
|
+
* An INTENT rather than a set. Resolving a range means naming every row between two of them, and
|
|
159
|
+
* under windowing those are exactly the rows the DOM does not have — so the panel resolves it
|
|
160
|
+
* against the row MODEL, which is also where the shift-anchor already lived.
|
|
161
|
+
*/
|
|
162
|
+
select: (key: string, mode: string) => void;
|
|
163
|
+
/** A row should be put into `expanded` — the twisty, `ArrowRight` or `ArrowLeft`. */
|
|
164
|
+
expand: (key: string, expanded: boolean) => void;
|
|
165
|
+
/**
|
|
166
|
+
* The caret has to reach a row the window did not draw.
|
|
167
|
+
*
|
|
168
|
+
* The element knows only that the pad on that side is not zero; which row `keyName` means is a
|
|
169
|
+
* question about the MODEL — ← climbs to a row's recorded parent, which may be a hundred rows and
|
|
170
|
+
* three levels up — and so is answered by the panel.
|
|
171
|
+
*/
|
|
172
|
+
move: (from: string, keyName: string) => void;
|
|
173
|
+
/**
|
|
174
|
+
* A letter has to be resolved against a model the window did not draw.
|
|
175
|
+
*
|
|
176
|
+
* Dispatched for every printable character while the tree is windowed — not only when the drawn
|
|
177
|
+
* rows hold no match, because a search over a slice always answers and the answer is the wrong
|
|
178
|
+
* row. Which row the model's next `char` after `from` is, is the panel's question, and so is
|
|
179
|
+
* whether the row is a tree item at all.
|
|
180
|
+
*/
|
|
181
|
+
typeahead: (from: string, char: string) => void;
|
|
182
|
+
/** The pointer entered a row, and left the tree. */
|
|
183
|
+
hover: (key: string) => void;
|
|
184
|
+
hoverOut: () => void;
|
|
185
|
+
/** Start renaming a row: `Enter`, a double-click, or the F2 the element leaves alone. */
|
|
186
|
+
rename: (key: string) => void;
|
|
187
|
+
/**
|
|
188
|
+
* A right-click.
|
|
189
|
+
*
|
|
190
|
+
* Named by `$ref` in handler position, so it arrives as `(scope, event)`: `showContextMenu` takes
|
|
191
|
+
* the event itself — it calls `preventDefault` and places the menu at the pointer — and the row
|
|
192
|
+
* comes back off the event's own target through `outlineRowPath`, which is what that
|
|
193
|
+
* `data-jx-path` is for.
|
|
194
|
+
*/
|
|
195
|
+
contextMenu: (scope: JxScope, event: Event) => void;
|
|
196
|
+
/** Run one of the row's verbs, against the row rather than against the selection. */
|
|
197
|
+
runRow: (id: string, row: string, control: unknown) => void;
|
|
198
|
+
/** Open the `⋮` menu under its own button. */
|
|
199
|
+
overflowRow: (key: string, opener: unknown) => void;
|
|
200
|
+
/** The rename input's three moments. */
|
|
201
|
+
editInput: (value: string) => void;
|
|
202
|
+
editCommit: () => void;
|
|
203
|
+
editCancel: () => void;
|
|
204
|
+
/** The one thing an empty page offers. */
|
|
205
|
+
emptyAction: () => void;
|
|
206
|
+
/** The tree element exists: the window is measured against it and the scroll watch binds to it. */
|
|
207
|
+
treeReady: (element: HTMLElement) => void;
|
|
208
|
+
/** The rename input exists, detached and empty. Where the caret goes is the host's decision. */
|
|
209
|
+
editReady: (element: HTMLElement) => void;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export interface OutlineSurfaceHandle {
|
|
213
|
+
/** Resolves once the document has rendered — the first moment its rows are in the DOM. */
|
|
214
|
+
ready: Promise<void>;
|
|
215
|
+
/** Whether the document this mounted is still standing in the container it was given. */
|
|
216
|
+
connected: () => boolean;
|
|
217
|
+
/** Bring the mounted document up to date with a whole projection. */
|
|
218
|
+
update: (values: OutlineValues) => void;
|
|
219
|
+
/** Take the document down. Idempotent. */
|
|
220
|
+
dispose: () => void;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/** The scope the document reads: the projection, plus everything its controls can call. */
|
|
224
|
+
interface OutlineScope extends Record<string, unknown>, OutlineValues, OutlineActions {}
|
|
225
|
+
|
|
226
|
+
/** Write a projection into the scope. */
|
|
227
|
+
function project(scope: OutlineScope, values: OutlineValues): void {
|
|
228
|
+
scope.view = values.view;
|
|
229
|
+
scope.rows = values.rows;
|
|
230
|
+
scope.padTop = values.padTop;
|
|
231
|
+
scope.padBottom = values.padBottom;
|
|
232
|
+
scope.current = values.current;
|
|
233
|
+
scope.emptyMessage = values.emptyMessage;
|
|
234
|
+
scope.emptyLabel = values.emptyLabel;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/** The `part` a node's definition carries, or "" for a text node or an unmarked element. */
|
|
238
|
+
function partOf(def: JxElement | string): string {
|
|
239
|
+
const part = typeof def === "string" ? undefined : def.attributes?.["part"];
|
|
240
|
+
return typeof part === "string" ? part : "";
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Mount the Outline into `container`, which is the `.panel-content` the Navigator just painted.
|
|
245
|
+
*
|
|
246
|
+
* @param {HTMLElement} container - The node lit rendered this panel's (empty) body into
|
|
247
|
+
* @param {OutlineValues} values - What to draw right now
|
|
248
|
+
* @param {OutlineActions} actions - What each control does
|
|
249
|
+
* @returns {OutlineSurfaceHandle}
|
|
250
|
+
*/
|
|
251
|
+
export function mountOutlineSurface(
|
|
252
|
+
container: HTMLElement,
|
|
253
|
+
values: OutlineValues,
|
|
254
|
+
actions: OutlineActions,
|
|
255
|
+
): OutlineSurfaceHandle {
|
|
256
|
+
const scope = reactive<OutlineScope>({
|
|
257
|
+
contextMenu: actions.contextMenu,
|
|
258
|
+
current: "",
|
|
259
|
+
editCancel: actions.editCancel,
|
|
260
|
+
editCommit: actions.editCommit,
|
|
261
|
+
editInput: actions.editInput,
|
|
262
|
+
editReady: actions.editReady,
|
|
263
|
+
emptyAction: actions.emptyAction,
|
|
264
|
+
emptyLabel: "",
|
|
265
|
+
emptyMessage: "",
|
|
266
|
+
expand: actions.expand,
|
|
267
|
+
hover: actions.hover,
|
|
268
|
+
hoverOut: actions.hoverOut,
|
|
269
|
+
move: actions.move,
|
|
270
|
+
overflowRow: actions.overflowRow,
|
|
271
|
+
padBottom: 0,
|
|
272
|
+
padTop: 0,
|
|
273
|
+
rename: actions.rename,
|
|
274
|
+
reveal: actions.reveal,
|
|
275
|
+
rows: [],
|
|
276
|
+
runRow: actions.runRow,
|
|
277
|
+
select: actions.select,
|
|
278
|
+
treeReady: actions.treeReady,
|
|
279
|
+
typeahead: actions.typeahead,
|
|
280
|
+
view: "empty",
|
|
281
|
+
}) as OutlineScope;
|
|
282
|
+
project(scope, values);
|
|
283
|
+
|
|
284
|
+
let mounted: SurfaceHandle | null = null;
|
|
285
|
+
let disposed = false;
|
|
286
|
+
/* Nothing is called on an element here, so the mount is all there is to wait for: the two islands
|
|
287
|
+
announce themselves through `onNodeCreated` as they are created, which is one
|
|
288
|
+
`connectedCallback` EARLIER than awaiting the element would be (guidelines §1.1). */
|
|
289
|
+
const ready = mountSurface("panel-outline", scope, container, {
|
|
290
|
+
onNodeCreated: (element, _path, def) => {
|
|
291
|
+
/* A text node carries no `part`, so narrowing and asking are the same question — asked once,
|
|
292
|
+
rather than as a guard clause whose only reachable answer is the one below. */
|
|
293
|
+
const part = element instanceof HTMLElement ? partOf(def) : "";
|
|
294
|
+
if (part === "tree") {
|
|
295
|
+
actions.treeReady(element as HTMLElement);
|
|
296
|
+
} else if (part === "title-input") {
|
|
297
|
+
actions.editReady(element as HTMLElement);
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
}).then((surface) => {
|
|
301
|
+
if (disposed) {
|
|
302
|
+
surface.dispose();
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
mounted = surface;
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
return {
|
|
309
|
+
/* While the mount is still in flight there is nothing in the container to ask about, so the
|
|
310
|
+
answer is simply whether this handle is still wanted — answering no would start a second
|
|
311
|
+
mount racing the first. Once mounted, the question is whether the root is still where it was
|
|
312
|
+
put: a Navigator that painted another panel, or the stylebook's own catalogue, cleared this
|
|
313
|
+
document out from under it. */
|
|
314
|
+
connected: () =>
|
|
315
|
+
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
316
|
+
dispose() {
|
|
317
|
+
disposed = true;
|
|
318
|
+
mounted?.dispose();
|
|
319
|
+
mounted = null;
|
|
320
|
+
},
|
|
321
|
+
ready,
|
|
322
|
+
update: (next) => {
|
|
323
|
+
project(scope, next);
|
|
324
|
+
},
|
|
325
|
+
};
|
|
326
|
+
}
|