@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
|
@@ -37,25 +37,37 @@
|
|
|
37
37
|
* is the pane context bar ⑦; a second mode picker in 24px would be the chrome duplication §2
|
|
38
38
|
* principle 9 exists to prevent), the save wording once a document IS saved, and the stylebook
|
|
39
39
|
* selector.
|
|
40
|
+
*
|
|
41
|
+
* The bar is the `statusbar` surface (`surfaces/statusbar.json`): this module is the projection —
|
|
42
|
+
* three fields of items, each item a button with a command or a readout without — and the surface
|
|
43
|
+
* draws it. The scope is reactive, so one effect recomputes the projection from the state the bar
|
|
44
|
+
* renders; nothing repaints.
|
|
45
|
+
*
|
|
46
|
+
* @docs studio/interface
|
|
40
47
|
*/
|
|
41
48
|
|
|
42
|
-
import { html, render as litRender, nothing } from "lit-html";
|
|
43
49
|
import { projectState, statusbarEl } from "../store";
|
|
44
|
-
import { documentLabel } from "
|
|
50
|
+
import { documentLabel } from "../panels/jump-bar";
|
|
45
51
|
import { shell } from "../shell";
|
|
46
|
-
import { effect, effectScope } from "../reactivity";
|
|
52
|
+
import { effect, effectScope, reactive } from "../reactivity";
|
|
47
53
|
import { activeTab } from "../workspace/workspace";
|
|
48
54
|
import { EDITOR_KIND_LABELS } from "../commands/context";
|
|
49
55
|
import { activeRegistry } from "../commands/active-registry";
|
|
56
|
+
import { runReported } from "../commands/run-reported";
|
|
50
57
|
import { deployStatusItem } from "../publish/deploy-checklist";
|
|
51
58
|
import { collabState } from "../collab/collab-state";
|
|
52
59
|
import { problemCount, problems } from "../services/notify";
|
|
53
60
|
import { now } from "../services/clock";
|
|
54
|
-
import { relativeTime } from "
|
|
61
|
+
import { relativeTime } from "../panels/ai-chat/sessions-view";
|
|
62
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
63
|
+
import statusbarDoc from "./statusbar.json";
|
|
55
64
|
import type { CommandRegistry } from "../commands/registry";
|
|
56
65
|
import type { EditorKind } from "../commands/context";
|
|
57
66
|
import type { EffectScope } from "@vue/reactivity";
|
|
58
|
-
import type {
|
|
67
|
+
import type { JxDocument } from "@jxsuite/schema/types";
|
|
68
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
69
|
+
|
|
70
|
+
registerSurface("statusbar", statusbarDoc as unknown as JxDocument);
|
|
59
71
|
|
|
60
72
|
let _scope: EffectScope | null = null;
|
|
61
73
|
|
|
@@ -93,22 +105,51 @@ interface StatusItem {
|
|
|
93
105
|
args?: Record<string, unknown>;
|
|
94
106
|
}
|
|
95
107
|
|
|
108
|
+
/** One item as the surface reads it: a button that runs a command through `run`, or a readout. */
|
|
109
|
+
interface ProjectedItem {
|
|
110
|
+
/** Unique within the bar; the row's identity and what `run` receives. */
|
|
111
|
+
key: string;
|
|
112
|
+
kind: "button" | "state";
|
|
113
|
+
label: string;
|
|
114
|
+
title: string;
|
|
115
|
+
disabled: boolean;
|
|
116
|
+
/** For a button: what `run` runs. */
|
|
117
|
+
command: string | null;
|
|
118
|
+
args: Record<string, unknown> | undefined;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
interface ProjectedField {
|
|
122
|
+
id: string;
|
|
123
|
+
region: string;
|
|
124
|
+
items: ProjectedItem[];
|
|
125
|
+
}
|
|
126
|
+
|
|
96
127
|
/**
|
|
97
|
-
*
|
|
128
|
+
* Project one item.
|
|
98
129
|
*
|
|
99
|
-
* A named command that the registry does not have, or whose `when` is false,
|
|
100
|
-
* item disappears rather than becoming a dead label. That is the whole mechanism by which the
|
|
101
|
-
* stays a rendering of the registry instead of a second place capabilities are decided.
|
|
130
|
+
* A named command that the registry does not have, or whose `when` is false, projects to NOTHING —
|
|
131
|
+
* the item disappears rather than becoming a dead label. That is the whole mechanism by which the
|
|
132
|
+
* bar stays a rendering of the registry instead of a second place capabilities are decided.
|
|
102
133
|
*/
|
|
103
|
-
function
|
|
134
|
+
function projectItem(
|
|
135
|
+
registry: CommandRegistry | null,
|
|
136
|
+
region: string,
|
|
137
|
+
item: StatusItem,
|
|
138
|
+
): ProjectedItem | null {
|
|
104
139
|
if (item.command === null) {
|
|
105
|
-
return
|
|
106
|
-
|
|
107
|
-
|
|
140
|
+
return {
|
|
141
|
+
args: undefined,
|
|
142
|
+
command: null,
|
|
143
|
+
disabled: false,
|
|
144
|
+
key: `${region}:${item.label}`,
|
|
145
|
+
kind: "state",
|
|
146
|
+
label: item.label,
|
|
147
|
+
title: item.title ?? item.label,
|
|
148
|
+
};
|
|
108
149
|
}
|
|
109
150
|
const id = item.command;
|
|
110
151
|
if (!registry?.get(id) || !registry.isVisible(id)) {
|
|
111
|
-
return
|
|
152
|
+
return null;
|
|
112
153
|
}
|
|
113
154
|
const command = registry.get(id)!;
|
|
114
155
|
const reason = registry.disabledReason(id);
|
|
@@ -118,28 +159,31 @@ function itemTpl(registry: CommandRegistry | null, item: StatusItem) {
|
|
|
118
159
|
: chord
|
|
119
160
|
? `${command.title} (${chord})`
|
|
120
161
|
: command.title;
|
|
121
|
-
return
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
</button>`;
|
|
162
|
+
return {
|
|
163
|
+
args: item.args,
|
|
164
|
+
command: id,
|
|
165
|
+
disabled: reason !== undefined,
|
|
166
|
+
key: `${region}:${id}`,
|
|
167
|
+
kind: "button",
|
|
168
|
+
label: item.label,
|
|
169
|
+
title: item.title ? `${item.title} · ${suffix}` : suffix,
|
|
170
|
+
};
|
|
131
171
|
}
|
|
132
172
|
|
|
133
|
-
/**
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
173
|
+
/** A field, with its region. Absent when it has no items. */
|
|
174
|
+
function projectField(
|
|
175
|
+
registry: CommandRegistry | null,
|
|
176
|
+
id: string,
|
|
177
|
+
items: readonly (StatusItem | null)[],
|
|
178
|
+
): ProjectedField | null {
|
|
179
|
+
const region = `statusbar/${id}`;
|
|
180
|
+
const live = items
|
|
181
|
+
.map((item) => (item === null ? null : projectItem(registry, region, item)))
|
|
182
|
+
.filter((item): item is ProjectedItem => item !== null);
|
|
139
183
|
if (live.length === 0) {
|
|
140
|
-
return
|
|
184
|
+
return null;
|
|
141
185
|
}
|
|
142
|
-
return
|
|
186
|
+
return { id, items: live, region };
|
|
143
187
|
}
|
|
144
188
|
|
|
145
189
|
// ─── ⑫a PROJECT ──────────────────────────────────────────────────────────────
|
|
@@ -149,16 +193,16 @@ export function aheadBehindLabel(ahead: number, behind: number): string {
|
|
|
149
193
|
return `${ahead > 0 ? ` ↑${ahead}` : ""}${behind > 0 ? ` ↓${behind}` : ""}`;
|
|
150
194
|
}
|
|
151
195
|
|
|
152
|
-
function
|
|
196
|
+
function projectField_(registry: CommandRegistry | null): ProjectedField | null {
|
|
153
197
|
const project = projectState;
|
|
154
198
|
const { status } = shell.git;
|
|
155
199
|
const count = problemCount();
|
|
156
200
|
const deploy = deployStatusItem();
|
|
157
201
|
const peers = activeTab.value ? collabState(activeTab.value).peers.length : 0;
|
|
158
|
-
return
|
|
202
|
+
return projectField(registry, "project", [
|
|
159
203
|
project
|
|
160
|
-
?
|
|
161
|
-
:
|
|
204
|
+
? { command: "project.openRecent", label: project.name }
|
|
205
|
+
: { command: "project.open", label: "No project" },
|
|
162
206
|
/* WHICH branch, when there is one — and deliberately no "not tracked" twin, though plan §12 P1
|
|
163
207
|
workstream 9's "repo state becomes a persistent status-bar field" reads like a request for
|
|
164
208
|
one. An untracked project already states itself in this field, one item along:
|
|
@@ -169,50 +213,38 @@ function projectFieldTpl(registry: CommandRegistry | null) {
|
|
|
169
213
|
pins the pairing from both ends, so deleting the checklist's repo step fails there rather
|
|
170
214
|
than quietly taking the state off the bar. */
|
|
171
215
|
status?.isRepo === true && status.branch
|
|
172
|
-
?
|
|
216
|
+
? {
|
|
173
217
|
command: "panel.focus.git",
|
|
174
218
|
label: `⑂ ${status.branch}${aheadBehindLabel(status.ahead, status.behind)}`,
|
|
175
219
|
title: `${status.files.length} changed file(s)`,
|
|
176
|
-
}
|
|
177
|
-
:
|
|
220
|
+
}
|
|
221
|
+
: null,
|
|
178
222
|
// Where the project stands with shipping — ambient state, so it belongs beside the branch and
|
|
179
223
|
// The problem count rather than in a toast. `deployStatusItem` names the NEXT missing step
|
|
180
224
|
// While anything is missing, and the deployment itself once nothing is.
|
|
181
|
-
deploy
|
|
182
|
-
? itemTpl(registry, {
|
|
183
|
-
command: deploy.command,
|
|
184
|
-
label: deploy.label,
|
|
185
|
-
title: deploy.title,
|
|
186
|
-
})
|
|
187
|
-
: nothing,
|
|
225
|
+
deploy ? { command: deploy.command, label: deploy.label, title: deploy.title } : null,
|
|
188
226
|
// `view.setBottomTab`, not `panel.focus.problems`: the latter is generated from the rail
|
|
189
227
|
// Roster, and Problems left the rail. That is the same verb Diff, Logic and Activity are
|
|
190
228
|
// Addressed by — one door per bottom tab — and it is what keeps this readout the ONLY standing
|
|
191
229
|
// Mention of problems in the chrome, which is the point of taking the rail button away.
|
|
192
230
|
count > 0
|
|
193
|
-
?
|
|
231
|
+
? {
|
|
194
232
|
args: { tab: "problems" },
|
|
195
233
|
command: "view.setBottomTab",
|
|
196
234
|
label: `⚠ ${count}`,
|
|
197
235
|
title: `${count} problem(s)`,
|
|
198
|
-
}
|
|
199
|
-
:
|
|
236
|
+
}
|
|
237
|
+
: null,
|
|
200
238
|
/* `collab.showStatus` — "what is happening in this document?" — because that is the question a
|
|
201
|
-
peer count raises.
|
|
202
|
-
|
|
203
|
-
This said `collab.share` and carried a comment promising the item would "appear the day the
|
|
204
|
-
`Collaborate:` family lands, with no edit to this file". The family landed, under five ids,
|
|
205
|
-
and `share` was renamed `collab.setEnabled` on the way (the set*-not-toggle* rule). `itemTpl`
|
|
206
|
-
renders `nothing` for an id the registry does not have, so the readout was permanently blank
|
|
207
|
-
and the comment said it was fine. An id is not a stable interface between two files unless
|
|
208
|
-
something checks it, which is what `tests/statusbar.test.ts` now does. */
|
|
239
|
+
peer count raises. An id is not a stable interface between two files unless something checks
|
|
240
|
+
it, which is what `tests/statusbar.test.ts` does. */
|
|
209
241
|
peers > 0
|
|
210
|
-
?
|
|
242
|
+
? {
|
|
211
243
|
command: "collab.showStatus",
|
|
212
244
|
label: `${peers} peer${peers === 1 ? "" : "s"}`,
|
|
213
245
|
title: `${peers} peer${peers === 1 ? "" : "s"} in this document`,
|
|
214
|
-
}
|
|
215
|
-
:
|
|
246
|
+
}
|
|
247
|
+
: null,
|
|
216
248
|
]);
|
|
217
249
|
}
|
|
218
250
|
|
|
@@ -253,29 +285,25 @@ function saveItem(dirty: boolean, readOnly: boolean, savedAt: number | undefined
|
|
|
253
285
|
: { command: null, label: `Saved ${relativeTime(savedAt)}` };
|
|
254
286
|
}
|
|
255
287
|
|
|
256
|
-
function
|
|
288
|
+
function documentField(registry: CommandRegistry | null): ProjectedField | null {
|
|
257
289
|
const tab = activeTab.value;
|
|
258
290
|
if (!tab) {
|
|
259
|
-
return
|
|
291
|
+
return null;
|
|
260
292
|
}
|
|
261
293
|
const ctx = registry?.context() ?? null;
|
|
262
294
|
const view = ctx ? viewLabel(ctx.editor.kind, ctx.canvas.view) : "";
|
|
263
295
|
const collab = collabState(tab);
|
|
264
296
|
const savedAt = tab.documentPath === null ? undefined : _savedAt.get(tab.documentPath);
|
|
265
|
-
return
|
|
266
|
-
|
|
297
|
+
return projectField(registry, "document", [
|
|
298
|
+
{
|
|
267
299
|
command: "palette.openFiles",
|
|
268
300
|
label: documentLabel(tab.documentPath),
|
|
269
301
|
title: tab.documentPath ?? "Not saved to disk yet",
|
|
270
|
-
}
|
|
302
|
+
},
|
|
271
303
|
view
|
|
272
|
-
?
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
title: "The pane's view — change it on the pane context bar",
|
|
276
|
-
})
|
|
277
|
-
: nothing,
|
|
278
|
-
itemTpl(registry, saveItem(tab.doc.dirty, collab.readOnly, savedAt)),
|
|
304
|
+
? { command: null, label: view, title: "The pane's view — change it on the pane context bar" }
|
|
305
|
+
: null,
|
|
306
|
+
saveItem(tab.doc.dirty, collab.readOnly, savedAt),
|
|
279
307
|
]);
|
|
280
308
|
}
|
|
281
309
|
|
|
@@ -296,49 +324,86 @@ function documentFieldTpl(registry: CommandRegistry | null) {
|
|
|
296
324
|
* A single selection therefore leaves this field empty. That is deliberate — the jump bar's leaf
|
|
297
325
|
* segment states it permanently, with its ancestors, and a second copy at 11px says nothing new.
|
|
298
326
|
*/
|
|
299
|
-
function
|
|
327
|
+
function selectionField(registry: CommandRegistry | null): ProjectedField | null {
|
|
300
328
|
const paths = activeTab.value?.session.selection ?? [];
|
|
301
329
|
if (paths.length > 0) {
|
|
302
330
|
// A document selection owns the field even when it prints nothing: the Stylebook's selector
|
|
303
331
|
// Below would otherwise appear while an element is picked, which is two answers to one question.
|
|
304
332
|
return paths.length > 1
|
|
305
|
-
?
|
|
306
|
-
|
|
333
|
+
? projectField(registry, "selection", [
|
|
334
|
+
{
|
|
307
335
|
command: null,
|
|
308
336
|
label: `${paths.length} selected`,
|
|
309
337
|
title: `${paths.length} elements are selected; the jump bar names the primary`,
|
|
310
|
-
}
|
|
338
|
+
},
|
|
311
339
|
])
|
|
312
|
-
:
|
|
340
|
+
: null;
|
|
313
341
|
}
|
|
314
342
|
// The stylebook's own selection is a selection: it is what the Style panel is editing, and it is
|
|
315
343
|
// The only thing in this field when no document node is picked.
|
|
316
344
|
return shell.stylebook.selection
|
|
317
|
-
?
|
|
318
|
-
|
|
345
|
+
? projectField(registry, "selection", [
|
|
346
|
+
{
|
|
319
347
|
command: null,
|
|
320
348
|
label: shell.stylebook.selection.replaceAll(" ", " › "),
|
|
321
349
|
title: "The style rule being edited",
|
|
322
|
-
}
|
|
350
|
+
},
|
|
323
351
|
])
|
|
324
|
-
:
|
|
352
|
+
: null;
|
|
325
353
|
}
|
|
326
354
|
|
|
327
355
|
// ─── The bar ─────────────────────────────────────────────────────────────────
|
|
328
356
|
|
|
329
|
-
/** The whole bar, as
|
|
330
|
-
|
|
357
|
+
/** The whole bar, as data. There is no second variant for the empty states. */
|
|
358
|
+
function projectBar(): ProjectedField[] {
|
|
331
359
|
const registry = activeRegistry();
|
|
332
|
-
return
|
|
333
|
-
|
|
334
|
-
)
|
|
360
|
+
return [projectField_(registry), documentField(registry), selectionField(registry)].filter(
|
|
361
|
+
(field): field is ProjectedField => field !== null,
|
|
362
|
+
);
|
|
335
363
|
}
|
|
336
364
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
365
|
+
interface StatusbarScope extends Record<string, unknown> {
|
|
366
|
+
fields: ProjectedField[];
|
|
367
|
+
run: (key: string) => void;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
let _state: StatusbarScope | null = null;
|
|
371
|
+
let _mount: Promise<SurfaceHandle> | null = null;
|
|
372
|
+
let _handle: SurfaceHandle | null = null;
|
|
373
|
+
|
|
374
|
+
/** The reactive scope the surface reads, made once. */
|
|
375
|
+
function state(): StatusbarScope {
|
|
376
|
+
_state ??= reactive({
|
|
377
|
+
fields: [],
|
|
378
|
+
run: (key: string) => {
|
|
379
|
+
const item = _state?.fields.flatMap((field) => field.items).find((i) => i.key === key);
|
|
380
|
+
const registry = activeRegistry();
|
|
381
|
+
if (item?.command && registry) {
|
|
382
|
+
void runReported(registry, item.command, item.args as never, "Status Bar");
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
}) as StatusbarScope;
|
|
386
|
+
return _state;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/** Mount the surface into the bar's host, once. */
|
|
390
|
+
function ensureMounted(): void {
|
|
391
|
+
if (_mount || !statusbarEl) {
|
|
392
|
+
return;
|
|
341
393
|
}
|
|
394
|
+
_mount = mountSurface("statusbar", state(), statusbarEl);
|
|
395
|
+
void _mount.then((handle) => {
|
|
396
|
+
_handle = handle;
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* Recompute the projection; the surface follows. Exported because the bootstrap paints once before
|
|
402
|
+
* mounting the effect.
|
|
403
|
+
*/
|
|
404
|
+
export function renderStatusbar(): void {
|
|
405
|
+
state().fields = projectBar();
|
|
406
|
+
ensureMounted();
|
|
342
407
|
}
|
|
343
408
|
|
|
344
409
|
/** Subscribe the bar to the state it renders. Idempotent. */
|
|
@@ -373,4 +438,13 @@ export function mountStatusbar(): void {
|
|
|
373
438
|
export function unmountStatusbar(): void {
|
|
374
439
|
_scope?.stop();
|
|
375
440
|
_scope = null;
|
|
441
|
+
const pending = _mount;
|
|
442
|
+
_mount = null;
|
|
443
|
+
if (_handle) {
|
|
444
|
+
_handle.dispose();
|
|
445
|
+
_handle = null;
|
|
446
|
+
} else if (pending) {
|
|
447
|
+
void pending.then((handle) => handle.dispose());
|
|
448
|
+
}
|
|
449
|
+
_state = null;
|
|
376
450
|
}
|