@jxsuite/studio 4.1.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/data/elements-meta.json +5 -15
- package/data/html-meta.json +51 -6
- package/dist/chunks/{2020-n6tfwnda.js → 2020-g79n01v9.js} +14 -14
- package/dist/chunks/action-group-sp6tna8v.js +118 -0
- package/dist/chunks/adapter-nj7tnjfn.js +13 -0
- package/dist/chunks/cf-account-picker-qwkm9zrf.js +495 -0
- package/dist/chunks/cf-settings-71bv5zn9.js +20 -0
- package/dist/chunks/color-area-v17df7b8.js +154 -0
- package/dist/chunks/color-field-anwybnkn.js +208 -0
- package/dist/chunks/color-slider-44ez96fc.js +79 -0
- package/dist/chunks/color-xgg3kfw7.js +35 -0
- package/dist/chunks/combobox-5e7jev23.js +236 -0
- package/dist/chunks/components-vj72gqtq.js +20 -0
- package/dist/chunks/content-source-5mex4x1h.js +46 -0
- package/dist/chunks/convert-to-repeater-n64h8znc.js +639 -0
- package/dist/chunks/dialog-s890b918.js +85 -0
- package/dist/chunks/editor-3qhbg51x.js +35 -0
- package/dist/chunks/entry-commands-234hjnqw.js +42 -0
- package/dist/chunks/extension-sections-3hpcambp.js +651 -0
- package/dist/chunks/file-ops-8yhd83xr.js +47 -0
- package/dist/chunks/files-hnxqxtsg.js +72 -0
- package/dist/chunks/format-host-779sfp2n.js +40 -0
- package/dist/chunks/fs-events-b88z7g4h.js +18 -0
- package/dist/chunks/git-panel-xwj8fpab.js +49 -0
- package/dist/chunks/icons-yy10wk9r.js +402 -0
- package/dist/chunks/iframe-entry-15g3n6xv.js +114 -0
- package/dist/chunks/iframe-entry-b27vq81n.js +203 -0
- package/dist/chunks/iframe-entry-nbyxee1y.js +154 -0
- package/dist/chunks/iframe-host-syr0f9sb.js +115 -0
- package/dist/chunks/{index-wcnt3r9g.js → index-mdmyx6s2.js} +11 -11
- package/dist/chunks/index-n4j7qxyr.js +109 -0
- package/dist/chunks/{javascript-q8kpmfah.js → javascript-xvrfrpkb.js} +8 -9
- package/dist/chunks/{jsonMode-dkr040ga.js → jsonMode-tyx2kj6p.js} +526 -527
- package/dist/chunks/jx-validate-j0wxk72w.js +15 -0
- package/dist/chunks/layers-ff81wthn.js +30 -0
- package/dist/chunks/layers-panel-pnnghw12.js +40 -0
- package/dist/chunks/listbox-6v2ac08j.js +44 -0
- package/dist/chunks/lit-html-m244w9nh.js +17 -0
- package/dist/chunks/media-picker-cqhhxhhe.js +33 -0
- package/dist/chunks/menu-9p2w46gj.js +15 -0
- package/dist/chunks/menu-q99sy9rf.js +285 -0
- package/dist/chunks/{monaco-binding-rj6xpx9y.js → monaco-binding-sw6en4dw.js} +12 -15
- package/dist/chunks/monaco-buffer-bhy3hb6m.js +24 -0
- package/dist/chunks/{monaco-setup-vx9bhp1d.js → monaco-setup-8r62fj6y.js} +27 -37
- package/dist/chunks/notify-628t0anh.js +21 -0
- package/dist/chunks/number-field-5cndyft8.js +72 -0
- package/dist/chunks/parse-0zx14y15.js +10 -0
- package/dist/chunks/platform-ts9cg1a4.js +15 -0
- package/dist/chunks/popover-47z3ytva.js +25 -0
- package/dist/chunks/publish-panel-5zt840sy.js +27 -0
- package/dist/chunks/quick-search-3748564r.js +45 -0
- package/dist/chunks/references-qvvxej7h.js +26 -0
- package/dist/chunks/right-panel-eccz92qt.js +45 -0
- package/dist/chunks/section-registry-5pq32t0q.js +25 -0
- package/dist/chunks/select-2r16ez41.js +49 -0
- package/dist/chunks/split-g7nm1rgb.js +191 -0
- package/dist/chunks/studio-0hqbpbd0.js +62 -0
- package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
- package/dist/chunks/{studio-b55y6ewx.js → studio-1knfqgy7.js} +58 -58
- package/dist/chunks/{studio-2b946z26.js → studio-1z1kcjv4.js} +3628 -6095
- package/dist/chunks/studio-3773086z.js +111 -0
- package/dist/chunks/{studio-4r1pv6zf.js → studio-38emantv.js} +22 -5
- package/dist/chunks/{studio-x813zp48.js → studio-3rz5md06.js} +30 -30
- package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
- package/dist/chunks/studio-5te5tqng.js +81 -0
- package/dist/chunks/studio-5wt9nvhd.js +4763 -0
- package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
- package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
- package/dist/chunks/studio-6xa21ej9.js +28 -0
- package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
- package/dist/chunks/{studio-gcye7qka.js → studio-7e11jpa9.js} +21 -21
- package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
- package/dist/chunks/studio-7xnmgv66.js +13615 -0
- package/dist/chunks/studio-8scdew0e.js +258 -0
- package/dist/chunks/{studio-fbf92ckf.js → studio-93zafjcm.js} +275 -163
- package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
- package/dist/chunks/studio-a79k90n9.js +1162 -0
- package/dist/chunks/studio-aj37eer3.js +422 -0
- package/dist/chunks/studio-b0k5tqgp.js +2432 -0
- package/dist/chunks/studio-b4s9eykd.js +2811 -0
- package/dist/chunks/{studio-f3wqjtk5.js → studio-d0300636.js} +5076 -18
- package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
- package/dist/chunks/studio-e1pgga3k.js +839 -0
- package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
- package/dist/chunks/{studio-q43a5y9h.js → studio-g3jevyjt.js} +16 -16
- package/dist/chunks/studio-gb13095a.js +2806 -0
- package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
- package/dist/chunks/{studio-dm19q43r.js → studio-hhvs4sdg.js} +10 -10
- package/dist/chunks/{studio-x4qkdat5.js → studio-js8nv53n.js} +1749 -2481
- package/dist/chunks/{studio-qjy2z9bv.js → studio-jxp12rnj.js} +32 -137
- package/dist/chunks/{studio-trxrabqf.js → studio-k75n7vhp.js} +527 -283
- package/dist/chunks/{studio-q9jd1a60.js → studio-kcgff4r0.js} +15 -18
- package/dist/chunks/studio-kkqkcp3d.js +17668 -0
- package/dist/chunks/studio-mhhyamxf.js +763 -0
- package/dist/chunks/{studio-cft9r4r7.js → studio-nq5yf5mp.js} +22 -22
- package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
- package/dist/chunks/studio-nzzpvzx9.js +185 -0
- package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
- package/dist/chunks/{studio-3bqpr0zh.js → studio-pxbgypmg.js} +299 -110
- package/dist/chunks/studio-q0a3yk4n.js +33 -0
- package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
- package/dist/chunks/{studio-6yw4y3my.js → studio-qhhm6hbt.js} +8 -8
- package/dist/chunks/studio-qk4bfsq2.js +362 -0
- package/dist/chunks/{studio-msd847zn.js → studio-qk90fgqm.js} +361 -90
- package/dist/chunks/{studio-jkftxyvz.js → studio-r6nvacqs.js} +5861 -2154
- package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
- package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
- package/dist/chunks/studio-rs76k67r.js +12 -0
- package/dist/chunks/studio-sbjyc8bt.js +954 -0
- package/dist/chunks/{studio-1wagb550.js → studio-syg2tadj.js} +11 -11
- package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
- package/dist/chunks/studio-tqgryxwg.js +1171 -0
- package/dist/chunks/studio-try13h8c.js +8448 -0
- package/dist/chunks/studio-vfq8qpjt.js +1219 -0
- package/dist/chunks/studio-vhv5tgxm.js +51 -0
- package/dist/chunks/{studio-ahn3pdgx.js → studio-vw7mzp6z.js} +52 -38
- package/dist/chunks/studio-wqpngpsk.js +174 -0
- package/dist/chunks/studio-wqz6dggm.js +1356 -0
- package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
- package/dist/chunks/studio-yxa81f45.js +12 -0
- package/dist/chunks/studio-zdn2g6dt.js +148 -0
- package/dist/chunks/swatch-group-t0n6h2rn.js +139 -0
- package/dist/chunks/tabs-wbp1cdws.js +156 -0
- package/dist/chunks/textfield-abk6qyee.js +73 -0
- package/dist/chunks/toast-780pvfbv.js +27 -0
- package/dist/chunks/toast-host-3sqv46sn.js +116 -0
- package/dist/chunks/toolbar-xbh5bhtr.js +194 -0
- package/dist/chunks/tooltip-eptb614w.js +369 -0
- package/dist/chunks/tree-a73p0pqm.js +367 -0
- package/dist/chunks/{tsMode-76kr53q0.js → tsMode-jy4m86rv.js} +83 -85
- package/dist/chunks/workspace-t55jdjbx.js +69 -0
- package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
- package/dist/iframe-entry.js +1873 -673
- package/dist/studio.js +52757 -36535
- package/dist/workers/editor.worker.js +1040 -1085
- package/dist/workers/json.worker.js +1946 -1991
- package/dist/workers/ts.worker.js +4960 -5005
- package/index.html +1 -0
- package/package.json +18 -52
- package/src/about/about-modal.ts +72 -123
- package/src/browse/library-commands.ts +20 -49
- package/src/browse/library-layouts.ts +87 -218
- package/src/browse/library-pane.ts +406 -438
- package/src/canvas/canvas-helpers.ts +0 -49
- package/src/canvas/canvas-live-render.ts +25 -2
- package/src/canvas/canvas-render.ts +666 -231
- package/src/canvas/canvas-surface.ts +0 -1
- package/src/canvas/canvas-utils.ts +333 -113
- package/src/canvas/dialog-path.ts +76 -0
- package/src/canvas/dialog-state.ts +67 -0
- package/src/canvas/diff-marks.ts +252 -0
- package/src/canvas/diff-toolbar.ts +349 -0
- package/src/canvas/diff-view.ts +123 -0
- package/src/canvas/edit-width-drag.ts +187 -0
- package/src/canvas/edit-width.ts +150 -0
- package/src/canvas/iframe-entry.ts +125 -8
- package/src/canvas/iframe-host.ts +271 -15
- package/src/canvas/iframe-interaction.ts +133 -13
- package/src/canvas/iframe-patch.ts +7 -1
- package/src/canvas/iframe-position.ts +5 -6
- package/src/canvas/iframe-protocol.ts +106 -5
- package/src/canvas/iframe-render.ts +373 -5
- package/src/canvas/iframe-slash.ts +2 -2
- package/src/canvas/iframe-subtree.ts +5 -8
- package/src/canvas/path-mapping.ts +25 -3
- package/src/canvas/popover-path.ts +106 -0
- package/src/canvas/popover-state.ts +155 -0
- package/src/canvas/surface-registry.ts +21 -10
- package/src/collab/presence-chips.ts +51 -73
- package/src/commands/app-commands.ts +10 -0
- package/src/commands/budget.ts +12 -0
- package/src/commands/command-args.ts +404 -6
- package/src/commands/defaults.ts +44 -14
- package/src/commands/live-context.ts +11 -5
- package/src/commands/reference.ts +12 -2
- package/src/commands/registry.ts +177 -10
- package/src/commands/run-reported.ts +120 -0
- package/src/content/entry-commands.ts +16 -23
- package/src/content/entry-editor.ts +144 -101
- package/src/editor/canvas-slash-bridge.ts +2 -2
- package/src/editor/context-menu.ts +49 -200
- package/src/editor/convert-to-component.ts +42 -82
- package/src/editor/convert-to-repeater.ts +132 -173
- package/src/editor/inline-edit.ts +11 -0
- package/src/editor/shortcuts.ts +76 -49
- package/src/editor/slash-menu.ts +150 -157
- package/src/files/components.ts +39 -0
- package/src/files/file-ops.ts +117 -11
- package/src/files/files.ts +944 -660
- package/src/files/json-layout.ts +474 -0
- package/src/files/serialize-document.ts +8 -1
- package/src/format/convert-file.ts +16 -10
- package/src/format/format-host.ts +50 -1
- package/src/github/github-auth.ts +71 -29
- package/src/github/github-publish.ts +57 -65
- package/src/grid/cell-editors.ts +46 -4
- package/src/grid/cell-popovers.ts +65 -62
- package/src/grid/grid-open.ts +86 -64
- package/src/grid/grid-panel.ts +390 -469
- package/src/grid/redirects-grid.ts +40 -44
- package/src/hosting/layout.ts +2 -0
- package/src/i18n/i18n-commands.ts +137 -62
- package/src/media/media-pane.ts +83 -133
- package/src/new-project/add-repo-modal.ts +125 -176
- package/src/new-project/import-tab.ts +181 -252
- package/src/new-project/location-fields.ts +93 -160
- package/src/new-project/new-project-modal.ts +376 -367
- package/src/packages/jxsuite-update.ts +76 -18
- package/src/packages/pull-package-sync.ts +5 -1
- package/src/panels/activity-panel.ts +137 -104
- package/src/panels/ai-chat/chat-markdown.ts +15 -13
- package/src/panels/ai-chat/chat-view.ts +307 -472
- package/src/panels/ai-chat/composer.ts +175 -163
- package/src/panels/ai-chat/sessions-view.ts +31 -62
- package/src/panels/ai-panel.ts +213 -185
- package/src/panels/block-action-bar.ts +444 -645
- package/src/panels/bottom-dock.ts +112 -47
- package/src/panels/chat-panel.ts +19 -14
- package/src/panels/data-explorer.ts +141 -102
- package/src/panels/data-grid.ts +183 -150
- package/src/panels/dnd.ts +75 -20
- package/src/panels/editors.ts +26 -19
- package/src/panels/elements-panel.ts +243 -186
- package/src/panels/empty-state.ts +26 -42
- package/src/panels/events-panel.ts +950 -729
- package/src/panels/formula-workspace.ts +434 -207
- package/src/panels/frontmatter-fields.ts +185 -153
- package/src/panels/frontmatter-panel.ts +411 -187
- package/src/panels/git-diff-open.ts +148 -0
- package/src/panels/git-panel.ts +679 -605
- package/src/panels/head-panel.ts +617 -435
- package/src/panels/i18n-panel.ts +148 -135
- package/src/panels/imports-panel.ts +388 -414
- package/src/panels/jump-bar.ts +175 -147
- package/src/panels/layers-panel.ts +785 -671
- package/src/panels/left-panel.ts +166 -94
- package/src/panels/navigator-panels.ts +1 -1
- package/src/panels/pane-context.ts +529 -677
- package/src/panels/pane-grid.ts +265 -241
- package/src/panels/panel-registry.ts +15 -4
- package/src/panels/problems-panel.ts +181 -99
- package/src/panels/properties-panel.ts +1525 -966
- package/src/panels/provenance.ts +31 -113
- package/src/panels/quick-search.ts +223 -184
- package/src/panels/right-panel.ts +135 -169
- package/src/panels/seo-modal.ts +346 -167
- package/src/panels/settings-menu.ts +114 -661
- package/src/panels/settings-pane.ts +102 -86
- package/src/panels/signals-panel.ts +1318 -1172
- package/src/panels/statement-editor.ts +556 -428
- package/src/panels/style-panel.ts +1367 -630
- package/src/panels/style-utils.ts +36 -32
- package/src/panels/stylebook-doc.ts +30 -73
- package/src/panels/stylebook-layers-panel.ts +202 -109
- package/src/panels/stylebook-panel.ts +124 -88
- package/src/panels/tab-strip.ts +386 -288
- package/src/platforms/cloud.ts +106 -16
- package/src/platforms/devserver.ts +13 -0
- package/src/publish/deploy-checklist.ts +124 -78
- package/src/publish/publish-commands.ts +4 -12
- package/src/publish/publish-panel.ts +134 -328
- package/src/services/a11y-report.ts +100 -43
- package/src/services/ai-command-tools.ts +538 -0
- package/src/services/ai-project-tools.ts +8 -2
- package/src/services/ai-session-store.ts +6 -0
- package/src/services/ai-system-prompt.ts +112 -24
- package/src/services/ai-tools.ts +36 -212
- package/src/services/ai-write-report.ts +174 -0
- package/src/services/document-assistant.ts +59 -8
- package/src/services/idle.ts +16 -14
- package/src/services/live-surfaces.ts +237 -0
- package/src/services/model-uri.ts +75 -0
- package/src/services/notify.ts +63 -6
- package/src/services/popover-report.ts +325 -0
- package/src/services/surface-registry.ts +56 -0
- package/src/services/tool-executor.ts +6 -0
- package/src/settings/contexts-section.ts +301 -299
- package/src/settings/contributed-section.ts +361 -222
- package/src/settings/css-vars-editor.ts +320 -325
- package/src/settings/defs-editor.ts +572 -535
- package/src/settings/dependencies-editor.ts +79 -107
- package/src/settings/extension-commands.ts +379 -0
- package/src/settings/extension-rows.ts +113 -0
- package/src/settings/extensions-section.ts +287 -0
- package/src/settings/general-settings.ts +130 -181
- package/src/settings/head-editor.ts +10 -305
- package/src/settings/locales-section.ts +146 -196
- package/src/settings/preferences-accounts.ts +1 -1
- package/src/settings/preferences-dialog.ts +350 -330
- package/src/settings/project-sections.ts +108 -181
- package/src/settings/schema-field-ui.ts +11 -399
- package/src/settings/section-registry.ts +8 -1
- package/src/settings/settings-document.ts +31 -29
- package/src/shell/tree.ts +42 -87
- package/src/shell.ts +48 -36
- package/src/studio.ts +104 -69
- package/src/style/token-ref.ts +0 -39
- package/src/surfaces/about.json +263 -0
- package/src/surfaces/about.ts +163 -0
- package/src/surfaces/add-repo.json +486 -0
- package/src/surfaces/add-repo.ts +236 -0
- package/src/surfaces/ai-chat.json +2185 -0
- package/src/surfaces/ai-chat.ts +549 -0
- package/src/surfaces/ai-credentials-form.json +332 -0
- package/src/surfaces/ai-credentials-form.ts +151 -0
- package/src/surfaces/ai-managed-connect.json +108 -0
- package/src/surfaces/ai-managed-connect.ts +123 -0
- package/src/surfaces/ai-model-picker.json +114 -0
- package/src/surfaces/ai-model-picker.ts +139 -0
- package/src/surfaces/block-action-bar.json +640 -0
- package/src/surfaces/block-action-bar.ts +368 -0
- package/src/surfaces/bottom-dock.json +154 -0
- package/src/surfaces/bottom-dock.ts +125 -0
- package/src/surfaces/canvas-stage.json +444 -0
- package/src/surfaces/canvas-stage.ts +253 -0
- package/src/surfaces/cf-account-picker.json +300 -0
- package/src/surfaces/cf-account-picker.ts +214 -0
- package/src/surfaces/commandbar.json +985 -0
- package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +417 -391
- package/src/surfaces/convert-repeater.json +309 -0
- package/src/surfaces/convert-repeater.ts +276 -0
- package/src/surfaces/data-actions.json +157 -0
- package/src/surfaces/data-actions.ts +115 -0
- package/src/surfaces/dialog.json +289 -0
- package/src/surfaces/dialog.ts +343 -0
- package/src/surfaces/diff-toolbar.json +266 -0
- package/src/surfaces/diff-toolbar.ts +139 -0
- package/src/surfaces/doc-header.json +739 -0
- package/src/surfaces/doc-header.ts +223 -0
- package/src/surfaces/empty-state.json +152 -0
- package/src/surfaces/empty-state.ts +173 -0
- package/src/surfaces/entry-editor.json +281 -0
- package/src/surfaces/entry-editor.ts +191 -0
- package/src/surfaces/expression-editor.json +977 -0
- package/src/surfaces/expression-editor.ts +266 -0
- package/src/surfaces/files-panel.json +592 -0
- package/src/surfaces/files-panel.ts +301 -0
- package/src/surfaces/formula-palette.json +364 -0
- package/src/surfaces/formula-palette.ts +340 -0
- package/src/surfaces/git-panel.json +1822 -0
- package/src/surfaces/git-panel.ts +272 -0
- package/src/surfaces/github-auth.json +112 -0
- package/src/surfaces/github-auth.ts +139 -0
- package/src/surfaces/github-publish.json +206 -0
- package/src/surfaces/github-publish.ts +169 -0
- package/src/surfaces/grid-cell.json +218 -0
- package/src/surfaces/grid-cell.ts +120 -0
- package/src/surfaces/grid-open.json +147 -0
- package/src/surfaces/grid-open.ts +87 -0
- package/src/surfaces/grid-panel.json +706 -0
- package/src/surfaces/grid-panel.ts +206 -0
- package/src/surfaces/grid-replace.json +179 -0
- package/src/surfaces/grid-replace.ts +89 -0
- package/src/surfaces/grid-views.json +446 -0
- package/src/surfaces/grid-views.ts +172 -0
- package/src/surfaces/inspector-dock.json +187 -0
- package/src/surfaces/inspector-dock.ts +161 -0
- package/src/surfaces/jump-bar.json +243 -0
- package/src/surfaces/jump-bar.ts +129 -0
- package/src/surfaces/jxsuite-update.json +146 -0
- package/src/surfaces/jxsuite-update.ts +149 -0
- package/src/surfaces/library-pane.json +1509 -0
- package/src/surfaces/library-pane.ts +363 -0
- package/src/surfaces/logic-panel.json +1949 -0
- package/src/surfaces/logic-panel.ts +369 -0
- package/src/surfaces/logic-workspace.json +685 -0
- package/src/surfaces/logic-workspace.ts +238 -0
- package/src/surfaces/media-browser.json +303 -0
- package/src/surfaces/media-browser.ts +145 -0
- package/src/surfaces/media-field.json +163 -0
- package/src/surfaces/media-field.ts +116 -0
- package/src/surfaces/media-pane.json +513 -0
- package/src/surfaces/media-pane.ts +197 -0
- package/src/surfaces/menu.json +232 -0
- package/src/surfaces/menu.ts +375 -0
- package/src/surfaces/navigator-dock.json +113 -0
- package/src/surfaces/navigator-dock.ts +130 -0
- package/src/surfaces/new-project.json +1654 -0
- package/src/surfaces/new-project.ts +411 -0
- package/src/surfaces/palette.json +535 -0
- package/src/surfaces/pane-context.json +1497 -0
- package/src/surfaces/pane-context.ts +513 -0
- package/src/surfaces/pane-grid.json +188 -0
- package/src/surfaces/pane-grid.ts +250 -0
- package/src/surfaces/panel-activity.json +563 -0
- package/src/surfaces/panel-activity.ts +187 -0
- package/src/surfaces/panel-data.json +141 -0
- package/src/surfaces/panel-data.ts +156 -0
- package/src/surfaces/panel-deploy-checklist.json +283 -0
- package/src/surfaces/panel-deploy-checklist.ts +175 -0
- package/src/surfaces/panel-elements.json +367 -0
- package/src/surfaces/panel-elements.ts +175 -0
- package/src/surfaces/panel-i18n.json +569 -0
- package/src/surfaces/panel-i18n.ts +212 -0
- package/src/surfaces/panel-imports.json +780 -0
- package/src/surfaces/panel-imports.ts +209 -0
- package/src/surfaces/panel-outline.json +734 -0
- package/src/surfaces/panel-outline.ts +326 -0
- package/src/surfaces/panel-page.json +1017 -0
- package/src/surfaces/panel-page.ts +240 -0
- package/src/surfaces/panel-problems.json +497 -0
- package/src/surfaces/panel-problems.ts +157 -0
- package/src/surfaces/panel-signals.json +1973 -0
- package/src/surfaces/panel-signals.ts +436 -0
- package/src/surfaces/panel-stylebook-layers.json +317 -0
- package/src/surfaces/panel-stylebook-layers.ts +155 -0
- package/src/surfaces/preferences.json +850 -0
- package/src/surfaces/preferences.ts +332 -0
- package/src/surfaces/progress-modal.json +110 -0
- package/src/surfaces/progress-modal.ts +150 -0
- package/src/surfaces/properties-panel.json +1578 -0
- package/src/surfaces/properties-panel.ts +337 -0
- package/src/surfaces/publish.json +945 -0
- package/src/surfaces/publish.ts +392 -0
- package/src/surfaces/push-plan.json +110 -0
- package/src/surfaces/push-plan.ts +87 -0
- package/src/surfaces/rail.json +255 -0
- package/src/surfaces/rail.ts +206 -0
- package/src/surfaces/reference-field.json +191 -0
- package/src/surfaces/reference-field.ts +168 -0
- package/src/surfaces/schema-builder.json +1011 -0
- package/src/surfaces/schema-builder.ts +181 -0
- package/src/surfaces/schema-form.json +1013 -0
- package/src/surfaces/schema-form.ts +287 -0
- package/src/surfaces/secret-field.json +60 -0
- package/src/surfaces/secret-field.ts +146 -0
- package/src/surfaces/seo.json +932 -0
- package/src/surfaces/seo.ts +334 -0
- package/src/surfaces/settings-contexts.json +538 -0
- package/src/surfaces/settings-contexts.ts +196 -0
- package/src/surfaces/settings-contributed.json +489 -0
- package/src/surfaces/settings-contributed.ts +199 -0
- package/src/surfaces/settings-css-vars.json +820 -0
- package/src/surfaces/settings-css-vars.ts +199 -0
- package/src/surfaces/settings-defs.json +1363 -0
- package/src/surfaces/settings-defs.ts +232 -0
- package/src/surfaces/settings-deploy.json +108 -0
- package/src/surfaces/settings-deploy.ts +135 -0
- package/src/surfaces/settings-extensions.json +486 -0
- package/src/surfaces/settings-extensions.ts +201 -0
- package/src/surfaces/settings-head.json +779 -0
- package/src/surfaces/settings-head.ts +397 -0
- package/src/surfaces/settings-locales.json +420 -0
- package/src/surfaces/settings-locales.ts +137 -0
- package/src/surfaces/settings-overview.json +423 -0
- package/src/surfaces/settings-overview.ts +218 -0
- package/src/surfaces/settings-packages.json +549 -0
- package/src/surfaces/settings-packages.ts +158 -0
- package/src/surfaces/settings-pane.json +147 -0
- package/src/surfaces/settings-pane.ts +150 -0
- package/src/surfaces/settings-rawjson.json +104 -0
- package/src/surfaces/settings-rawjson.ts +107 -0
- package/src/surfaces/shell.json +99 -0
- package/src/surfaces/shell.ts +30 -0
- package/src/surfaces/slash-menu.json +180 -0
- package/src/surfaces/slash-menu.ts +272 -0
- package/src/surfaces/statements.json +607 -0
- package/src/surfaces/statements.ts +238 -0
- package/src/surfaces/statusbar.json +94 -0
- package/src/{panels → surfaces}/statusbar.ts +164 -90
- package/src/surfaces/style-panel.json +1643 -0
- package/src/surfaces/style-panel.ts +338 -0
- package/src/surfaces/stylebook-chrome.json +122 -0
- package/src/surfaces/stylebook-chrome.ts +122 -0
- package/src/surfaces/tab-strip.json +448 -0
- package/src/surfaces/tab-strip.ts +200 -0
- package/src/surfaces/target-line.json +419 -0
- package/src/surfaces/target-line.ts +349 -0
- package/src/surfaces/toasts.json +189 -0
- package/src/surfaces/welcome.json +571 -0
- package/src/surfaces/welcome.ts +338 -0
- package/src/tabs/project-config.ts +111 -21
- package/src/tabs/tab.ts +52 -1
- package/src/types.ts +22 -0
- package/src/ui/ai-credentials-form.ts +104 -100
- package/src/ui/ai-managed-connect.ts +54 -36
- package/src/ui/ai-model-picker.ts +75 -47
- package/src/ui/cf-account-picker.ts +76 -141
- package/src/ui/color-selector.ts +80 -301
- package/src/ui/dynamic-slot.ts +43 -283
- package/src/ui/expression-editor.ts +797 -576
- package/src/ui/field-input.ts +8 -181
- package/src/ui/form-controls.ts +838 -366
- package/src/ui/formula-chips.ts +80 -85
- package/src/ui/kit.ts +33 -0
- package/src/ui/layers.ts +296 -593
- package/src/ui/media-picker.ts +203 -284
- package/src/ui/panel-resize.ts +251 -64
- package/src/ui/popover-surface.ts +153 -0
- package/src/ui/progress-modal.ts +22 -60
- package/src/ui/regions.ts +13 -7
- package/src/ui/schema-form.ts +906 -440
- package/src/ui/surface.ts +122 -0
- package/src/ui/unit-selector.ts +15 -131
- package/src/ui/value-source.ts +14 -0
- package/src/ui/virtual-window.ts +88 -9
- package/src/utils/canvas-media.ts +72 -0
- package/src/utils/edit-display.ts +7 -2
- package/src/utils/element-selectors.ts +69 -0
- package/src/utils/link-target.ts +2 -2
- package/src/utils/studio-utils.ts +0 -10
- package/src/view.ts +15 -0
- package/src/workspace/pane-derive.ts +36 -14
- package/src/workspace/workspace.ts +75 -6
- package/styles/canvas.css +72 -467
- package/styles/forced-colors.css +48 -82
- package/styles/forced-colors.json +41 -0
- package/styles/inspector.css +2 -1301
- package/styles/overlays.css +96 -2823
- package/styles/panels.css +6 -1423
- package/styles/shell-frame.css +272 -0
- package/styles/shell-frame.json +227 -0
- package/styles/shell.css +0 -1568
- package/styles/tokens.css +65 -136
- package/styles/tokens.json +84 -0
- package/dist/chunks/Overlay.dev-etqjwyf9.js +0 -23
- package/dist/chunks/adapter-jkcyhgtr.js +0 -14
- package/dist/chunks/cf-account-picker-en86v7x7.js +0 -163
- package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
- package/dist/chunks/components-zmx10t62.js +0 -21
- package/dist/chunks/content-source-48xg86wj.js +0 -49
- package/dist/chunks/convert-to-repeater-43tfn7cs.js +0 -268
- package/dist/chunks/editor-cptq5jp1.js +0 -37
- package/dist/chunks/entry-commands-e63f1xc0.js +0 -46
- package/dist/chunks/extension-sections-txv08xxg.js +0 -311
- package/dist/chunks/file-ops-wbh4hhsx.js +0 -48
- package/dist/chunks/files-3kfkwhk4.js +0 -93
- package/dist/chunks/flow-qbfgrpeh.js +0 -634
- package/dist/chunks/focus-trap.esm-9t2drp0g.js +0 -1025
- package/dist/chunks/focus-visible-6eg70z18.js +0 -167
- package/dist/chunks/format-host-w16q81tf.js +0 -43
- package/dist/chunks/fs-events-hrrg328g.js +0 -21
- package/dist/chunks/git-panel-532whr1y.js +0 -59
- package/dist/chunks/index-zqxmqxmh.js +0 -109
- package/dist/chunks/jx-validate-8er6gbxy.js +0 -19
- package/dist/chunks/layers-panel-07hm7g5j.js +0 -67
- package/dist/chunks/layers-q75tj2mf.js +0 -45
- package/dist/chunks/lit-html-j055mkh8.js +0 -22
- package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
- package/dist/chunks/notify-yjm79n4s.js +0 -30
- package/dist/chunks/parse-24d0gay3.js +0 -19
- package/dist/chunks/platform-ba1j1gbh.js +0 -16
- package/dist/chunks/publish-panel-v9st96ja.js +0 -29
- package/dist/chunks/quick-search-zccjp6gv.js +0 -66
- package/dist/chunks/references-3qx8fkyp.js +0 -29
- package/dist/chunks/right-panel-vm3b6kwy.js +0 -46
- package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
- package/dist/chunks/sp-overlay.dev-qgvhnxf4.js +0 -18
- package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
- package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
- package/dist/chunks/sp-tooltip.dev-4sastdnw.js +0 -15
- package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
- package/dist/chunks/studio-0a5qrh01.js +0 -3
- package/dist/chunks/studio-0bq6eh7v.js +0 -12
- package/dist/chunks/studio-18j3bmcz.js +0 -14
- package/dist/chunks/studio-1ngbejft.js +0 -181
- package/dist/chunks/studio-4b5z1x43.js +0 -424
- package/dist/chunks/studio-4n2b5gzb.js +0 -357
- package/dist/chunks/studio-4rzyrtjz.js +0 -426
- package/dist/chunks/studio-5fx3g9jg.js +0 -4325
- package/dist/chunks/studio-5myknm0a.js +0 -1903
- package/dist/chunks/studio-7afd21nw.js +0 -67
- package/dist/chunks/studio-7nte2hj4.js +0 -613
- package/dist/chunks/studio-8jpzqk5s.js +0 -128
- package/dist/chunks/studio-8q517dfr.js +0 -24
- package/dist/chunks/studio-950k0dx6.js +0 -6939
- package/dist/chunks/studio-9n4mrmnb.js +0 -184
- package/dist/chunks/studio-a0tswy0w.js +0 -58
- package/dist/chunks/studio-ahnzd9rg.js +0 -23
- package/dist/chunks/studio-bgxt93ga.js +0 -62
- package/dist/chunks/studio-cmb03bg5.js +0 -13890
- package/dist/chunks/studio-d1ks410h.js +0 -175
- package/dist/chunks/studio-ef49pnzx.js +0 -387
- package/dist/chunks/studio-eqq1w638.js +0 -113
- package/dist/chunks/studio-ew0djmhg.js +0 -341
- package/dist/chunks/studio-gfgb8pe6.js +0 -1652
- package/dist/chunks/studio-h4rxscfc.js +0 -10
- package/dist/chunks/studio-jc994dnr.js +0 -1066
- package/dist/chunks/studio-kyh9avvv.js +0 -28
- package/dist/chunks/studio-m3hwn7y1.js +0 -120
- package/dist/chunks/studio-mtfnaqs9.js +0 -659
- package/dist/chunks/studio-n6j9t10q.js +0 -318
- package/dist/chunks/studio-n8b9wqwy.js +0 -291
- package/dist/chunks/studio-qcy05dp8.js +0 -1743
- package/dist/chunks/studio-qq6jym04.js +0 -53
- package/dist/chunks/studio-rdx8jcxy.js +0 -83
- package/dist/chunks/studio-rn9ta2mz.js +0 -111
- package/dist/chunks/studio-t7qb9db8.js +0 -665
- package/dist/chunks/studio-tmc5emrw.js +0 -8
- package/dist/chunks/studio-z6nw2ek2.js +0 -18
- package/dist/chunks/studio-zczps70q.js +0 -378
- package/dist/chunks/studio-zqazsct2.js +0 -1823
- package/dist/chunks/workspace-fjx52ryv.js +0 -89
- package/src/panels/activity-bar.ts +0 -251
- package/src/panels/panel-scheduler.ts +0 -219
- package/src/panels/style-inputs.ts +0 -237
- package/src/panels/target-line.ts +0 -274
- package/src/panels/welcome-screen.ts +0 -346
- package/src/ui/button-group.ts +0 -102
- package/src/ui/choice-field.ts +0 -72
- package/src/ui/field-row.ts +0 -249
- package/src/ui/formula-palette.ts +0 -213
- package/src/ui/icons.ts +0 -52
- package/src/ui/jx-theme.ts +0 -130
- package/src/ui/spectrum.ts +0 -340
- package/src/ui/value-selector.ts +0 -174
- package/src/ui/widgets.ts +0 -172
- /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
- /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
- /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
- /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
package/src/panels/jump-bar.ts
CHANGED
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
* is the SAME basename for a `$map` template, so it read `index.json › index.json`), and knew
|
|
12
12
|
* nothing about the project above it or the selection below it. It is deleted, and so is the
|
|
13
13
|
* stack it walked: nothing ever pushed a frame, so it could only ever draw its empty branch.
|
|
14
|
-
* 2. `
|
|
15
|
-
* It appeared ONLY while something was selected, and knew nothing about the document it
|
|
16
|
-
* inside.
|
|
14
|
+
* 2. `surfaces/statusbar.ts`'s selection field — a clickable ancestor trail, `selection.set` per
|
|
15
|
+
* crumb. It appeared ONLY while something was selected, and knew nothing about the document it
|
|
16
|
+
* was inside.
|
|
17
17
|
*
|
|
18
18
|
* Between them they never rendered at the same time as each other and never rendered the whole
|
|
19
19
|
* address, so neither one was a place to look. **This bar is the whole chain**, always:
|
|
@@ -41,9 +41,15 @@
|
|
|
41
41
|
* That is the one place this bar deliberately differs from the status bar, where an unavailable
|
|
42
42
|
* item vanishes. An address with a hole in it is a lie about containment; a readout is merely a
|
|
43
43
|
* step you cannot take.
|
|
44
|
+
*
|
|
45
|
+
* **This file is the FLOW; the markup is a document.** `surfaces/jump-bar.json` owns the bar's
|
|
46
|
+
* structure, its ARIA and every value in its style, and `surfaces/jump-bar.ts` mounts one per pane
|
|
47
|
+
* (studio-ui-guidelines.md §6, §9.3). What stays here is the part that is a decision: which pane
|
|
48
|
+
* this bar is about, what its address is, which of its steps the registry can run, and what a
|
|
49
|
+
* chevron opens — and the chevron opens the KIT MENU, `surfaces/menu.ts`, because a list of
|
|
50
|
+
* commands is what that surface already is (§12.5).
|
|
44
51
|
*/
|
|
45
52
|
|
|
46
|
-
import { html, render as litRender, nothing } from "lit-html";
|
|
47
53
|
import { displayTagName } from "@jxsuite/schema/guards";
|
|
48
54
|
import { childList, getNodeAtPath, nodeLabel, pathsEqual, projectState } from "../store";
|
|
49
55
|
import { effect, effectScope } from "../reactivity";
|
|
@@ -52,20 +58,23 @@ import { derivationOfPane, tabOfPane } from "../canvas/canvas-surface";
|
|
|
52
58
|
import { paneRegion } from "../ui/regions";
|
|
53
59
|
import { primarySelection } from "../tabs/selection";
|
|
54
60
|
import { activeRegistry } from "../commands/active-registry";
|
|
55
|
-
import {
|
|
56
|
-
import {
|
|
61
|
+
import { runReported } from "../commands/run-reported";
|
|
62
|
+
import { openMenu } from "../surfaces/menu";
|
|
63
|
+
import { mountJumpBarSurface } from "../surfaces/jump-bar";
|
|
64
|
+
import { PANE_SELECTOR } from "../surfaces/pane-grid";
|
|
57
65
|
import type { CommandArgs, CommandRegistry } from "../commands/registry";
|
|
58
66
|
import type { FormulaEditDef, FunctionEditDef } from "../types";
|
|
59
67
|
import type { JxPath } from "../state";
|
|
68
|
+
import type { MenuHandle, MenuRowProjection } from "../surfaces/menu";
|
|
69
|
+
import type { JumpBarSurface, ProjectedStep } from "../surfaces/jump-bar";
|
|
60
70
|
import type { Tab } from "../tabs/tab";
|
|
61
71
|
import type { PaneDerivation } from "../workspace/workspace";
|
|
62
72
|
import type { EffectScope } from "@vue/reactivity";
|
|
63
|
-
import type { TemplateResult } from "lit-html";
|
|
64
73
|
|
|
65
74
|
/** The CSS variable the stage is offset by while the jump bar is on screen. */
|
|
66
75
|
export const JUMP_BAR_VAR = "--jump-bar-h";
|
|
67
76
|
|
|
68
|
-
/** The bar's height. Declared here because the offset projection and the
|
|
77
|
+
/** The bar's height. Declared here because the offset projection and the document must agree. */
|
|
69
78
|
const JUMP_BAR_HEIGHT = 24;
|
|
70
79
|
|
|
71
80
|
// ─── The model ───────────────────────────────────────────────────────────────
|
|
@@ -105,7 +114,7 @@ export interface JumpSegment {
|
|
|
105
114
|
*
|
|
106
115
|
* Lives here rather than in `statusbar.ts`, where it started: the jump bar is the surface whose
|
|
107
116
|
* whole job is naming the containment chain, and the status bar's DOCUMENT field is a second reader
|
|
108
|
-
* of the same fact. Having the reader own it also kept `mock.module("
|
|
117
|
+
* of the same fact. Having the reader own it also kept `mock.module("surfaces/statusbar")` — which
|
|
109
118
|
* six bootstrap tests do — from deciding whether the jump bar can name a file.
|
|
110
119
|
*/
|
|
111
120
|
export function documentLabel(path: string | null): string {
|
|
@@ -211,11 +220,12 @@ function choiceFor(document: unknown, path: JxPath, fallback: string, own: JxPat
|
|
|
211
220
|
// ─── Building the address ────────────────────────────────────────────────────
|
|
212
221
|
|
|
213
222
|
/**
|
|
214
|
-
* The whole address, as data. Pure: no registry, no DOM — the
|
|
223
|
+
* The whole address, as data. Pure: no registry, no DOM — the projection decides what is
|
|
224
|
+
* renderable.
|
|
215
225
|
*
|
|
216
226
|
* Order is containment order, outermost first, which is the same left-to-right order the status bar
|
|
217
227
|
* puts its three fields in. Nothing here reads the registry, so a segment is produced whether or
|
|
218
|
-
* not its command happens to be registered; {@link
|
|
228
|
+
* not its command happens to be registered; {@link projectStep} is where that difference shows.
|
|
219
229
|
*/
|
|
220
230
|
export function jumpSegments(
|
|
221
231
|
tab: Tab | null,
|
|
@@ -244,7 +254,7 @@ export function jumpSegments(
|
|
|
244
254
|
The address is still the document — a lens draws the source pane's, a companion its own — but
|
|
245
255
|
the question an author has about a pane that is following something is "can I stop it
|
|
246
256
|
following and just keep this open". `pane.pin` answers it, and answers it with a REFUSAL for a
|
|
247
|
-
lens: `
|
|
257
|
+
lens: `projectStep` already renders a step whose command is disabled as a disabled button with
|
|
248
258
|
`disabledReason` in the tooltip, so the sentence explaining why Code, Diff and breakpoint views
|
|
249
259
|
cannot be pinned arrives for free. */
|
|
250
260
|
segments.push({
|
|
@@ -301,26 +311,20 @@ function editorSegment(sigil: string, def: FunctionEditDef | FormulaEditDef): Ju
|
|
|
301
311
|
};
|
|
302
312
|
}
|
|
303
313
|
|
|
304
|
-
// ───
|
|
314
|
+
// ─── The projection ──────────────────────────────────────────────────────────
|
|
305
315
|
|
|
306
316
|
/**
|
|
307
|
-
*
|
|
317
|
+
* A step's identity across repaints — the repeater's key, and what `run` and `choose` are given.
|
|
308
318
|
*
|
|
309
|
-
* A
|
|
310
|
-
*
|
|
311
|
-
*
|
|
312
|
-
* hand-over `panels/frontmatter-panel.ts` takes from the stage.
|
|
319
|
+
* A NODE step is named by its path, so moving the selection one level up keeps every ancestor's
|
|
320
|
+
* node (and the chevron the reader is aiming at) exactly where it was. Every other kind is a
|
|
321
|
+
* singleton in the address, so its kind is name enough.
|
|
313
322
|
*/
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
/** Close the open segment menu, if any. Idempotent. */
|
|
321
|
-
export function dismissJumpMenu(): void {
|
|
322
|
-
_menu?.dismiss();
|
|
323
|
-
_menu = null;
|
|
323
|
+
function stepKey(segment: JumpSegment): string {
|
|
324
|
+
const path = segment.args?.path;
|
|
325
|
+
return segment.kind === "node" && Array.isArray(path)
|
|
326
|
+
? `node:${(path as JxPath).join("/")}`
|
|
327
|
+
: segment.kind;
|
|
324
328
|
}
|
|
325
329
|
|
|
326
330
|
/** Whether the registry can actually run this id right now. */
|
|
@@ -342,117 +346,104 @@ function segmentTitle(registry: CommandRegistry, segment: JumpSegment, id: strin
|
|
|
342
346
|
}
|
|
343
347
|
|
|
344
348
|
/**
|
|
345
|
-
*
|
|
349
|
+
* One step, as the document reads it.
|
|
346
350
|
*
|
|
347
|
-
*
|
|
348
|
-
*
|
|
351
|
+
* An unregistered or invisible command makes the step a READOUT rather than removing it, and more
|
|
352
|
+
* than one alternative is what earns a chevron: one is not a choice, and a control that cannot move
|
|
353
|
+
* is chrome (§2 principle 9).
|
|
349
354
|
*/
|
|
350
|
-
function
|
|
351
|
-
event.preventDefault();
|
|
352
|
-
event.stopPropagation();
|
|
353
|
-
dismissJumpMenu();
|
|
354
|
-
const anchor = rectOf(event.currentTarget as HTMLElement);
|
|
355
|
-
const left = Math.round(Math.min(anchor.left, window.innerWidth - 4));
|
|
356
|
-
const top = Math.round(anchor.bottom);
|
|
357
|
-
_menu = renderPopover(
|
|
358
|
-
html`<sp-popover open style="position:fixed;z-index:10000;left:${left}px;top:${top}px">
|
|
359
|
-
<sp-menu role="menu" aria-label=${`Go to a sibling of ${segment.label}`}>
|
|
360
|
-
${segment.choices.map(
|
|
361
|
-
(choice) => html`<sp-menu-item
|
|
362
|
-
role="menuitem"
|
|
363
|
-
aria-current=${choice.current === true ? "true" : nothing}
|
|
364
|
-
@click=${() => {
|
|
365
|
-
dismissJumpMenu();
|
|
366
|
-
void registry.run(choice.command, choice.args);
|
|
367
|
-
}}
|
|
368
|
-
>${choice.label}</sp-menu-item
|
|
369
|
-
>`,
|
|
370
|
-
)}
|
|
371
|
-
</sp-menu>
|
|
372
|
-
</sp-popover>`,
|
|
373
|
-
{
|
|
374
|
-
dismissOnOutsideClick: true,
|
|
375
|
-
onDismiss: () => {
|
|
376
|
-
_menu = null;
|
|
377
|
-
},
|
|
378
|
-
region: "jump-bar",
|
|
379
|
-
},
|
|
380
|
-
);
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
/** One step of the address, plus its alternatives control when it has any. */
|
|
384
|
-
function segmentTpl(
|
|
355
|
+
function projectStep(
|
|
385
356
|
registry: CommandRegistry | null,
|
|
386
357
|
segment: JumpSegment,
|
|
358
|
+
first: boolean,
|
|
387
359
|
last: boolean,
|
|
388
|
-
):
|
|
360
|
+
): ProjectedStep {
|
|
389
361
|
const id = segment.command;
|
|
390
362
|
const live = runnable(registry, id);
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
? html`<button
|
|
414
|
-
class="jb-alts"
|
|
415
|
-
aria-haspopup="menu"
|
|
416
|
-
aria-label=${`Siblings of ${segment.label}`}
|
|
417
|
-
title=${`Siblings of ${segment.label}`}
|
|
418
|
-
@click=${(event: MouseEvent) => {
|
|
419
|
-
openChoices(event, registry, segment);
|
|
420
|
-
}}
|
|
421
|
-
>
|
|
422
|
-
⌄
|
|
423
|
-
</button>`
|
|
424
|
-
: nothing;
|
|
425
|
-
return html`<span class="jb-seg" data-jump-kind=${segment.kind}>${crumb}${alternatives}</span>`;
|
|
363
|
+
return {
|
|
364
|
+
altsLabel: `Siblings of ${segment.label}`,
|
|
365
|
+
control: live ? "button" : "readout",
|
|
366
|
+
current: last,
|
|
367
|
+
disabled: live && registry!.disabledReason(id!) !== undefined,
|
|
368
|
+
hasChoices: registry !== null && segment.choices.length > 1,
|
|
369
|
+
key: stepKey(segment),
|
|
370
|
+
kind: segment.kind,
|
|
371
|
+
label: segment.label,
|
|
372
|
+
leading: first,
|
|
373
|
+
title: live ? segmentTitle(registry!, segment, id!) : (segment.title ?? segment.label),
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// ─── Rendering ───────────────────────────────────────────────────────────────
|
|
378
|
+
|
|
379
|
+
/** One pane's bar: the document mounted in its cell, and the address it last drew. */
|
|
380
|
+
interface PaneBar {
|
|
381
|
+
host: HTMLElement;
|
|
382
|
+
surface: JumpBarSurface;
|
|
383
|
+
/** The segments behind the projection, by key — what `run` and `choose` resolve against. */
|
|
384
|
+
segments: Map<string, JumpSegment>;
|
|
426
385
|
}
|
|
427
386
|
|
|
428
387
|
/**
|
|
429
|
-
*
|
|
388
|
+
* Where each pane's bar is mounted. One entry per drawn cell.
|
|
430
389
|
*
|
|
431
|
-
*
|
|
432
|
-
*
|
|
390
|
+
* A Map rather than a `let _host`, because the bar addresses a PANE: it prints where you are, and
|
|
391
|
+
* with two panes on screen there are two answers. `panels/pane-grid.ts` attaches a cell's
|
|
392
|
+
* `.pane-jump` as the cell is built and detaches it as the cell is disposed, which is the same
|
|
393
|
+
* hand-over `panels/frontmatter-panel.ts` takes from the stage.
|
|
433
394
|
*/
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
395
|
+
const _bars = new Map<string, PaneBar>();
|
|
396
|
+
|
|
397
|
+
let _scope: EffectScope | null = null;
|
|
398
|
+
|
|
399
|
+
let _menu: MenuHandle | null = null;
|
|
400
|
+
|
|
401
|
+
/** Close the open segment menu, if any. Idempotent. */
|
|
402
|
+
export function dismissJumpMenu(): void {
|
|
403
|
+
const menu = _menu;
|
|
404
|
+
_menu = null;
|
|
405
|
+
menu?.close();
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Open a segment's alternatives, as the kit menu.
|
|
410
|
+
*
|
|
411
|
+
* The rows are built from the segment's choices, and every row runs a command — the same command
|
|
412
|
+
* the segment itself names, with a different path. Nothing here decides what selecting means, and
|
|
413
|
+
* nothing here draws a panel: `surfaces/menu.ts` owns the roving caret, typeahead, Escape and light
|
|
414
|
+
* dismissal, because a list of commands is what that surface already is (§12.5).
|
|
415
|
+
*/
|
|
416
|
+
function openChoices(segment: JumpSegment, anchor: HTMLElement | null): void {
|
|
441
417
|
const registry = activeRegistry();
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
)
|
|
455
|
-
|
|
418
|
+
if (!registry) {
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
dismissJumpMenu();
|
|
422
|
+
const rows: MenuRowProjection[] = segment.choices.map((choice, i) => ({
|
|
423
|
+
// The choice you are already on is MARKED rather than removed: a menu that omits your place
|
|
424
|
+
// Loses it. `checked` is the element's own spelling of that, so the row announces itself.
|
|
425
|
+
checked: choice.current === true ? "true" : "false",
|
|
426
|
+
destructive: false,
|
|
427
|
+
disabled: false,
|
|
428
|
+
dividerAbove: false,
|
|
429
|
+
id: String(i),
|
|
430
|
+
run: () => {
|
|
431
|
+
void runReported(registry, choice.command, choice.args, "Jump Bar");
|
|
432
|
+
},
|
|
433
|
+
title: choice.label,
|
|
434
|
+
}));
|
|
435
|
+
const handle = openMenu({
|
|
436
|
+
label: `Go to a sibling of ${segment.label}`,
|
|
437
|
+
onClosed: (closed) => {
|
|
438
|
+
if (_menu === closed) {
|
|
439
|
+
_menu = null;
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
opener: anchor,
|
|
443
|
+
region: "jump-bar",
|
|
444
|
+
rows,
|
|
445
|
+
});
|
|
446
|
+
_menu = handle;
|
|
456
447
|
}
|
|
457
448
|
|
|
458
449
|
/**
|
|
@@ -473,10 +464,26 @@ export function jumpBarTemplate(
|
|
|
473
464
|
* @param {HTMLElement | null} [host] The bar's host. Its cell takes the variable when it has one.
|
|
474
465
|
*/
|
|
475
466
|
export function applyJumpBarOffset(height: number, host?: HTMLElement | null): void {
|
|
476
|
-
const target = host?.closest<HTMLElement>(
|
|
467
|
+
const target = host?.closest<HTMLElement>(PANE_SELECTOR) ?? document.documentElement;
|
|
477
468
|
target.style.setProperty(JUMP_BAR_VAR, `${height}px`);
|
|
478
469
|
}
|
|
479
470
|
|
|
471
|
+
/**
|
|
472
|
+
* The address one pane's document should be showing, and the segments behind it.
|
|
473
|
+
*
|
|
474
|
+
* @param {string} paneId
|
|
475
|
+
*/
|
|
476
|
+
function projectPane(paneId: string): { steps: ProjectedStep[]; segments: JumpSegment[] } {
|
|
477
|
+
const segments = jumpSegments(tabOfPane(paneId), derivationOfPane(paneId));
|
|
478
|
+
const registry = activeRegistry();
|
|
479
|
+
return {
|
|
480
|
+
segments,
|
|
481
|
+
steps: segments.map((segment, i) =>
|
|
482
|
+
projectStep(registry, segment, i === 0, i === segments.length - 1),
|
|
483
|
+
),
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
|
|
480
487
|
/**
|
|
481
488
|
* Paint one pane's bar. Exported because the bootstrap paints once before mounting the effect.
|
|
482
489
|
*
|
|
@@ -484,47 +491,67 @@ export function applyJumpBarOffset(height: number, host?: HTMLElement | null): v
|
|
|
484
491
|
* the caller is a lifecycle rather than a pane.
|
|
485
492
|
*/
|
|
486
493
|
export function renderJumpBar(paneId?: string): void {
|
|
487
|
-
if (
|
|
494
|
+
if (_bars.size === 0) {
|
|
488
495
|
return;
|
|
489
496
|
}
|
|
490
497
|
// The address changed, so an open menu is describing a place that may no longer be on the bar.
|
|
491
498
|
// Repaints happen only when tracked state moves, so this cannot close a menu you are reading.
|
|
492
499
|
dismissJumpMenu();
|
|
493
|
-
for (const [id,
|
|
500
|
+
for (const [id, bar] of _bars) {
|
|
494
501
|
if (paneId !== undefined && id !== paneId) {
|
|
495
502
|
continue;
|
|
496
503
|
}
|
|
497
|
-
const
|
|
498
|
-
|
|
499
|
-
|
|
504
|
+
const { segments, steps } = projectPane(id);
|
|
505
|
+
bar.segments = new Map(steps.map((step, i) => [step.key, segments[i]!]));
|
|
506
|
+
bar.surface.update(steps);
|
|
507
|
+
applyJumpBarOffset(steps.length === 0 ? 0 : JUMP_BAR_HEIGHT, bar.host);
|
|
500
508
|
}
|
|
501
509
|
}
|
|
502
510
|
|
|
503
511
|
/**
|
|
504
512
|
* Give a pane's bar somewhere to paint, or take it away.
|
|
505
513
|
*
|
|
506
|
-
* Called by `panels/pane-grid.ts` as a cell is built and as it is disposed. Detaching
|
|
507
|
-
*
|
|
508
|
-
* DOM is about to be unreachable.
|
|
514
|
+
* Called by `panels/pane-grid.ts` as a cell is built and as it is disposed. Detaching disposes the
|
|
515
|
+
* mount first: a cell being removed still has this bar's document in it, and the runtime that owns
|
|
516
|
+
* that DOM is about to be unreachable.
|
|
509
517
|
*
|
|
510
518
|
* @param {string} paneId
|
|
511
519
|
* @param {HTMLElement | null} host
|
|
512
520
|
*/
|
|
513
521
|
export function attachJumpBarHost(paneId: string, host: HTMLElement | null): void {
|
|
514
|
-
const previous =
|
|
515
|
-
if (previous === host) {
|
|
522
|
+
const previous = _bars.get(paneId);
|
|
523
|
+
if (previous?.host === host) {
|
|
516
524
|
return;
|
|
517
525
|
}
|
|
518
526
|
if (previous) {
|
|
519
|
-
|
|
520
|
-
applyJumpBarOffset(0, previous);
|
|
527
|
+
previous.surface.dispose();
|
|
528
|
+
applyJumpBarOffset(0, previous.host);
|
|
529
|
+
_bars.delete(paneId);
|
|
521
530
|
}
|
|
522
|
-
if (host) {
|
|
523
|
-
|
|
524
|
-
renderJumpBar(paneId);
|
|
525
|
-
} else {
|
|
526
|
-
_hosts.delete(paneId);
|
|
531
|
+
if (!host) {
|
|
532
|
+
return;
|
|
527
533
|
}
|
|
534
|
+
const bar: PaneBar = {
|
|
535
|
+
host,
|
|
536
|
+
segments: new Map(),
|
|
537
|
+
surface: mountJumpBarSurface(host, paneRegion(paneId, "jump"), {
|
|
538
|
+
choose: (key, anchor) => {
|
|
539
|
+
const segment = _bars.get(paneId)?.segments.get(key);
|
|
540
|
+
if (segment) {
|
|
541
|
+
openChoices(segment, anchor);
|
|
542
|
+
}
|
|
543
|
+
},
|
|
544
|
+
run: (key) => {
|
|
545
|
+
const segment = _bars.get(paneId)?.segments.get(key);
|
|
546
|
+
const registry = activeRegistry();
|
|
547
|
+
if (segment?.command && registry) {
|
|
548
|
+
void runReported(registry, segment.command, segment.args, "Jump Bar");
|
|
549
|
+
}
|
|
550
|
+
},
|
|
551
|
+
}),
|
|
552
|
+
};
|
|
553
|
+
_bars.set(paneId, bar);
|
|
554
|
+
renderJumpBar(paneId);
|
|
528
555
|
}
|
|
529
556
|
|
|
530
557
|
/**
|
|
@@ -569,10 +596,11 @@ export function unmountJumpBar(): void {
|
|
|
569
596
|
dismissJumpMenu();
|
|
570
597
|
_scope?.stop();
|
|
571
598
|
_scope = null;
|
|
572
|
-
for (const
|
|
573
|
-
|
|
599
|
+
for (const bar of _bars.values()) {
|
|
600
|
+
bar.surface.dispose();
|
|
601
|
+
applyJumpBarOffset(0, bar.host);
|
|
574
602
|
}
|
|
575
|
-
|
|
603
|
+
_bars.clear();
|
|
576
604
|
applyJumpBarOffset(0);
|
|
577
605
|
}
|
|
578
606
|
|