@jxsuite/studio 4.0.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/data/elements-meta.json +5 -15
- package/data/html-meta.json +51 -6
- package/dist/chunks/{2020-xp8vnwma.js → 2020-g79n01v9.js} +14 -14
- package/dist/chunks/action-group-sp6tna8v.js +118 -0
- package/dist/chunks/adapter-nj7tnjfn.js +13 -0
- package/dist/chunks/cf-account-picker-fyf63pmy.js +495 -0
- package/dist/chunks/cf-settings-71bv5zn9.js +20 -0
- package/dist/chunks/color-area-v17df7b8.js +154 -0
- package/dist/chunks/color-field-anwybnkn.js +208 -0
- package/dist/chunks/color-slider-44ez96fc.js +79 -0
- package/dist/chunks/color-xgg3kfw7.js +35 -0
- package/dist/chunks/combobox-5e7jev23.js +236 -0
- package/dist/chunks/components-2w1f35qs.js +18 -0
- package/dist/chunks/content-source-3wqeas45.js +46 -0
- package/dist/chunks/convert-to-repeater-d0cgnb6d.js +639 -0
- package/dist/chunks/dialog-s890b918.js +85 -0
- package/dist/chunks/editor-3qhbg51x.js +35 -0
- package/dist/chunks/entry-commands-d6g50j7s.js +42 -0
- package/dist/chunks/extension-sections-fy7q4fe9.js +651 -0
- package/dist/chunks/file-ops-3btj6st0.js +47 -0
- package/dist/chunks/files-ef8fgs3w.js +72 -0
- package/dist/chunks/format-host-3c33nwr8.js +40 -0
- package/dist/chunks/fs-events-13tj6sex.js +18 -0
- package/dist/chunks/git-panel-4wp2rn9b.js +49 -0
- package/dist/chunks/icons-yy10wk9r.js +402 -0
- package/dist/chunks/iframe-entry-15g3n6xv.js +114 -0
- package/dist/chunks/iframe-entry-b27vq81n.js +203 -0
- package/dist/chunks/iframe-entry-nbyxee1y.js +154 -0
- package/dist/chunks/iframe-host-jgesd924.js +115 -0
- package/dist/chunks/{index-nj44jpzj.js → index-mdmyx6s2.js} +11 -11
- package/dist/chunks/index-n4j7qxyr.js +109 -0
- package/dist/chunks/{javascript-q8kpmfah.js → javascript-xvrfrpkb.js} +8 -9
- package/dist/chunks/{jsonMode-dkr040ga.js → jsonMode-tyx2kj6p.js} +526 -527
- package/dist/chunks/jx-validate-j0wxk72w.js +15 -0
- package/dist/chunks/layers-1nq5evsh.js +29 -0
- package/dist/chunks/layers-panel-ar2gh90g.js +40 -0
- package/dist/chunks/listbox-6v2ac08j.js +44 -0
- package/dist/chunks/lit-html-m244w9nh.js +17 -0
- package/dist/chunks/media-picker-2qbetq73.js +33 -0
- package/dist/chunks/menu-q99sy9rf.js +285 -0
- package/dist/chunks/menu-rf7n72mf.js +14 -0
- package/dist/chunks/{monaco-binding-rj6xpx9y.js → monaco-binding-sw6en4dw.js} +12 -15
- package/dist/chunks/monaco-buffer-bhy3hb6m.js +24 -0
- package/dist/chunks/{monaco-setup-rws7k4br.js → monaco-setup-8r62fj6y.js} +27 -37
- package/dist/chunks/notify-628t0anh.js +21 -0
- package/dist/chunks/number-field-5cndyft8.js +72 -0
- package/dist/chunks/parse-0zx14y15.js +10 -0
- package/dist/chunks/platform-ts9cg1a4.js +15 -0
- package/dist/chunks/popover-47z3ytva.js +25 -0
- package/dist/chunks/publish-panel-98f7sr3g.js +27 -0
- package/dist/chunks/quick-search-srzz83k2.js +45 -0
- package/dist/chunks/references-n553f0e1.js +26 -0
- package/dist/chunks/right-panel-rrgx2dn3.js +45 -0
- package/dist/chunks/section-registry-5pq32t0q.js +25 -0
- package/dist/chunks/select-2r16ez41.js +49 -0
- package/dist/chunks/split-g7nm1rgb.js +191 -0
- package/dist/chunks/studio-0hqbpbd0.js +62 -0
- package/dist/chunks/studio-18avnhjp.js +2430 -0
- package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
- package/dist/chunks/{studio-hbtp0eh1.js → studio-25hkdrkw.js} +356 -85
- package/dist/chunks/studio-26d7myd1.js +258 -0
- package/dist/chunks/{studio-p8j86wag.js → studio-38emantv.js} +22 -5
- package/dist/chunks/studio-3gxv60tn.js +422 -0
- package/dist/chunks/{studio-8swrjbny.js → studio-3hxkd92t.js} +275 -163
- package/dist/chunks/studio-4m0haseg.js +185 -0
- package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
- package/dist/chunks/{studio-gv8vvshc.js → studio-5523bpzt.js} +11 -11
- package/dist/chunks/{studio-5q69gfag.js → studio-57mf66w2.js} +1753 -2484
- package/dist/chunks/studio-5jy81t3s.js +17463 -0
- package/dist/chunks/studio-5rt7sqa0.js +1168 -0
- package/dist/chunks/studio-5te5tqng.js +81 -0
- package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
- package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
- package/dist/chunks/studio-6xa21ej9.js +28 -0
- package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
- package/dist/chunks/{studio-eenfkt4e.js → studio-79y5sz51.js} +52 -38
- package/dist/chunks/{studio-4q0wznzf.js → studio-7e11jpa9.js} +461 -145
- package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
- package/dist/chunks/studio-7xptrg0j.js +954 -0
- package/dist/chunks/{studio-cft9r4r7.js → studio-81390n6f.js} +22 -22
- package/dist/chunks/{studio-q43a5y9h.js → studio-8jn5yhyn.js} +16 -16
- package/dist/chunks/studio-8qtrpzr3.js +839 -0
- package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
- package/dist/chunks/studio-9xxz1q69.js +1356 -0
- package/dist/chunks/studio-akbww0j5.js +13615 -0
- package/dist/chunks/studio-arfpe389.js +195 -0
- package/dist/chunks/{studio-2zkz8evn.js → studio-az3zd49t.js} +473 -281
- package/dist/chunks/studio-cpvb2ed1.js +1171 -0
- package/dist/chunks/{studio-9r6j5ev1.js → studio-d0300636.js} +5078 -19
- package/dist/chunks/{studio-bgxt93ga.js → studio-d055c37e.js} +13 -13
- package/dist/chunks/studio-d1ja2x9r.js +362 -0
- package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
- package/dist/chunks/{studio-4pqqxbrt.js → studio-em9nw8eh.js} +301 -112
- package/dist/chunks/studio-erdatzvp.js +1190 -0
- package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
- package/dist/chunks/studio-fabxk6r9.js +2811 -0
- package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
- package/dist/chunks/studio-hhvs4sdg.js +195 -0
- package/dist/chunks/{studio-68n67094.js → studio-kcgff4r0.js} +15 -18
- package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
- package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
- package/dist/chunks/studio-pm6hgy7r.js +4763 -0
- package/dist/chunks/studio-q0a3yk4n.js +33 -0
- package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
- package/dist/chunks/studio-qahxvnan.js +111 -0
- package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
- package/dist/chunks/{studio-kjjsjak4.js → studio-rkstz940.js} +3661 -6136
- package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
- package/dist/chunks/studio-rpyah2ew.js +2805 -0
- package/dist/chunks/studio-rs76k67r.js +12 -0
- package/dist/chunks/{studio-yxrkyv8a.js → studio-s6z853aq.js} +12108 -11766
- package/dist/chunks/{studio-sf7zjgv1.js → studio-sgdc5pfc.js} +8 -8
- package/dist/chunks/studio-tb3ev01j.js +763 -0
- package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
- package/dist/chunks/studio-vhv5tgxm.js +51 -0
- package/dist/chunks/{studio-htsf0w6m.js → studio-vz68yn9e.js} +31 -154
- package/dist/chunks/studio-wqpngpsk.js +174 -0
- package/dist/chunks/{studio-eesa1myv.js → studio-x3rty6tr.js} +58 -58
- package/dist/chunks/studio-xsykpvsh.js +8448 -0
- package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
- package/dist/chunks/studio-yxa81f45.js +12 -0
- package/dist/chunks/swatch-group-t0n6h2rn.js +139 -0
- package/dist/chunks/tabs-wbp1cdws.js +156 -0
- package/dist/chunks/textfield-abk6qyee.js +73 -0
- package/dist/chunks/toast-780pvfbv.js +27 -0
- package/dist/chunks/toast-host-3sqv46sn.js +116 -0
- package/dist/chunks/toolbar-xbh5bhtr.js +194 -0
- package/dist/chunks/tooltip-eptb614w.js +369 -0
- package/dist/chunks/tree-a73p0pqm.js +367 -0
- package/dist/chunks/{tsMode-76kr53q0.js → tsMode-jy4m86rv.js} +83 -85
- package/dist/chunks/workspace-wrew8zk4.js +69 -0
- package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
- package/dist/iframe-entry.js +1812 -698
- package/dist/manifest.json +7 -0
- package/dist/studio.js +52900 -36573
- package/dist/workers/editor.worker.js +1040 -1085
- package/dist/workers/json.worker.js +1946 -1991
- package/dist/workers/ts.worker.js +4960 -5005
- package/favicon.ico +0 -0
- package/index.html +2 -0
- package/package.json +22 -55
- package/src/about/about-modal.ts +73 -123
- package/src/browse/library-commands.ts +20 -49
- package/src/browse/library-layouts.ts +87 -218
- package/src/browse/library-pane.ts +406 -438
- package/src/canvas/canvas-helpers.ts +0 -49
- package/src/canvas/canvas-live-render.ts +25 -2
- package/src/canvas/canvas-render.ts +666 -231
- package/src/canvas/canvas-surface.ts +0 -1
- package/src/canvas/canvas-utils.ts +310 -117
- package/src/canvas/dialog-path.ts +76 -0
- package/src/canvas/dialog-state.ts +67 -0
- package/src/canvas/diff-marks.ts +252 -0
- package/src/canvas/diff-toolbar.ts +349 -0
- package/src/canvas/diff-view.ts +123 -0
- package/src/canvas/edit-width-drag.ts +187 -0
- package/src/canvas/edit-width.ts +150 -0
- package/src/canvas/iframe-entry.ts +125 -8
- package/src/canvas/iframe-host.ts +271 -15
- package/src/canvas/iframe-interaction.ts +133 -13
- package/src/canvas/iframe-patch.ts +7 -1
- package/src/canvas/iframe-position.ts +5 -6
- package/src/canvas/iframe-protocol.ts +106 -5
- package/src/canvas/iframe-render.ts +373 -5
- package/src/canvas/iframe-slash.ts +2 -2
- package/src/canvas/iframe-subtree.ts +5 -8
- package/src/canvas/path-mapping.ts +25 -3
- package/src/canvas/popover-path.ts +106 -0
- package/src/canvas/popover-state.ts +155 -0
- package/src/canvas/surface-registry.ts +21 -10
- package/src/collab/presence-chips.ts +51 -73
- package/src/commands/app-commands.ts +10 -0
- package/src/commands/budget.ts +12 -0
- package/src/commands/command-args.ts +369 -6
- package/src/commands/defaults.ts +44 -14
- package/src/commands/live-context.ts +11 -5
- package/src/commands/reference.ts +12 -2
- package/src/commands/registry.ts +165 -8
- package/src/content/entry-commands.ts +16 -23
- package/src/content/entry-editor.ts +144 -101
- package/src/editor/canvas-slash-bridge.ts +2 -2
- package/src/editor/context-menu.ts +49 -200
- package/src/editor/convert-to-component.ts +42 -82
- package/src/editor/convert-to-repeater.ts +132 -173
- package/src/editor/inline-edit.ts +11 -0
- package/src/editor/shortcuts.ts +65 -26
- package/src/editor/slash-menu.ts +150 -157
- package/src/files/file-ops.ts +117 -11
- package/src/files/files.ts +949 -664
- package/src/files/json-layout.ts +474 -0
- package/src/files/media-paths.ts +13 -42
- package/src/files/media-usage.ts +41 -131
- package/src/files/serialize-document.ts +8 -1
- package/src/format/convert-file.ts +16 -10
- package/src/format/format-host.ts +50 -1
- package/src/github/github-auth.ts +71 -29
- package/src/github/github-publish.ts +57 -65
- package/src/grid/cell-editors.ts +46 -4
- package/src/grid/cell-popovers.ts +65 -62
- package/src/grid/grid-open.ts +86 -64
- package/src/grid/grid-panel.ts +390 -469
- package/src/grid/redirects-grid.ts +40 -44
- package/src/hosting/document.ts +2 -0
- package/src/hosting/layout.ts +10 -0
- package/src/i18n/i18n-commands.ts +127 -62
- package/src/media/media-pane.ts +83 -133
- package/src/new-project/add-repo-modal.ts +125 -176
- package/src/new-project/import-tab.ts +201 -250
- package/src/new-project/location-fields.ts +101 -165
- package/src/new-project/new-project-modal.ts +376 -367
- package/src/packages/jxsuite-update.ts +76 -18
- package/src/panels/activity-panel.ts +137 -104
- package/src/panels/ai-chat/chat-markdown.ts +15 -13
- package/src/panels/ai-chat/chat-view.ts +307 -472
- package/src/panels/ai-chat/composer.ts +175 -153
- package/src/panels/ai-chat/sessions-view.ts +31 -62
- package/src/panels/ai-panel.ts +210 -185
- package/src/panels/block-action-bar.ts +437 -643
- package/src/panels/bottom-dock.ts +112 -47
- package/src/panels/chat-panel.ts +19 -14
- package/src/panels/data-explorer.ts +141 -102
- package/src/panels/data-grid.ts +183 -150
- package/src/panels/dnd.ts +75 -20
- package/src/panels/editors.ts +26 -19
- package/src/panels/elements-panel.ts +243 -186
- package/src/panels/empty-state.ts +26 -42
- package/src/panels/events-panel.ts +950 -729
- package/src/panels/formula-workspace.ts +434 -207
- package/src/panels/frontmatter-fields.ts +185 -153
- package/src/panels/frontmatter-panel.ts +411 -187
- package/src/panels/git-diff-open.ts +148 -0
- package/src/panels/git-panel.ts +679 -605
- package/src/panels/head-panel.ts +617 -435
- package/src/panels/i18n-panel.ts +153 -133
- package/src/panels/imports-panel.ts +388 -414
- package/src/panels/jump-bar.ts +174 -147
- package/src/panels/layers-panel.ts +785 -671
- package/src/panels/left-panel.ts +166 -94
- package/src/panels/navigator-panels.ts +1 -1
- package/src/panels/pane-context.ts +529 -677
- package/src/panels/pane-grid.ts +265 -241
- package/src/panels/panel-registry.ts +15 -4
- package/src/panels/problems-panel.ts +177 -99
- package/src/panels/properties-panel.ts +1525 -966
- package/src/panels/provenance.ts +31 -113
- package/src/panels/quick-search.ts +217 -172
- package/src/panels/right-panel.ts +135 -169
- package/src/panels/seo-modal.ts +346 -167
- package/src/panels/settings-menu.ts +109 -646
- package/src/panels/settings-pane.ts +102 -86
- package/src/panels/signals-panel.ts +1318 -1172
- package/src/panels/statement-editor.ts +556 -428
- package/src/panels/style-panel.ts +1367 -630
- package/src/panels/style-utils.ts +36 -32
- package/src/panels/stylebook-doc.ts +30 -73
- package/src/panels/stylebook-layers-panel.ts +202 -109
- package/src/panels/stylebook-panel.ts +124 -88
- package/src/panels/tab-strip.ts +385 -287
- package/src/platforms/cloud.ts +347 -86
- package/src/platforms/devserver.ts +13 -0
- package/src/publish/deploy-checklist.ts +124 -78
- package/src/publish/publish-commands.ts +4 -12
- package/src/publish/publish-panel.ts +165 -299
- package/src/services/a11y-report.ts +100 -43
- package/src/services/ai-command-tools.ts +468 -0
- package/src/services/ai-import-tools.ts +50 -12
- package/src/services/ai-models.ts +108 -1
- package/src/services/ai-session-store.ts +6 -0
- package/src/services/ai-system-prompt.ts +110 -18
- package/src/services/ai-tools.ts +28 -143
- package/src/services/ai-write-report.ts +174 -0
- package/src/services/context-manager.ts +12 -1
- package/src/services/document-assistant.ts +50 -2
- package/src/services/idle.ts +16 -14
- package/src/services/live-surfaces.ts +237 -0
- package/src/services/model-uri.ts +75 -0
- package/src/services/notify.ts +63 -6
- package/src/services/popover-report.ts +325 -0
- package/src/services/surface-registry.ts +56 -0
- package/src/services/tool-executor.ts +17 -0
- package/src/settings/contexts-section.ts +301 -299
- package/src/settings/contributed-section.ts +361 -222
- package/src/settings/css-vars-editor.ts +320 -325
- package/src/settings/defs-editor.ts +572 -535
- package/src/settings/dependencies-editor.ts +79 -107
- package/src/settings/extension-commands.ts +379 -0
- package/src/settings/extension-rows.ts +113 -0
- package/src/settings/extensions-section.ts +287 -0
- package/src/settings/general-settings.ts +130 -181
- package/src/settings/head-editor.ts +10 -305
- package/src/settings/locales-section.ts +146 -196
- package/src/settings/preferences-accounts.ts +193 -12
- package/src/settings/preferences-dialog.ts +384 -307
- package/src/settings/project-sections.ts +108 -181
- package/src/settings/schema-field-ui.ts +11 -399
- package/src/settings/section-registry.ts +8 -1
- package/src/settings/settings-document.ts +31 -29
- package/src/shell/tree.ts +42 -87
- package/src/shell.ts +48 -36
- package/src/studio.ts +90 -67
- package/src/style/token-ref.ts +0 -39
- package/src/surfaces/about.json +263 -0
- package/src/surfaces/about.ts +163 -0
- package/src/surfaces/add-repo.json +486 -0
- package/src/surfaces/add-repo.ts +236 -0
- package/src/surfaces/ai-chat.json +2185 -0
- package/src/surfaces/ai-chat.ts +549 -0
- package/src/surfaces/ai-credentials-form.json +332 -0
- package/src/surfaces/ai-credentials-form.ts +151 -0
- package/src/surfaces/ai-managed-connect.json +108 -0
- package/src/surfaces/ai-managed-connect.ts +123 -0
- package/src/surfaces/ai-model-picker.json +114 -0
- package/src/surfaces/ai-model-picker.ts +139 -0
- package/src/surfaces/block-action-bar.json +640 -0
- package/src/surfaces/block-action-bar.ts +368 -0
- package/src/surfaces/bottom-dock.json +154 -0
- package/src/surfaces/bottom-dock.ts +125 -0
- package/src/surfaces/canvas-stage.json +444 -0
- package/src/surfaces/canvas-stage.ts +253 -0
- package/src/surfaces/cf-account-picker.json +300 -0
- package/src/surfaces/cf-account-picker.ts +214 -0
- package/src/surfaces/commandbar.json +984 -0
- package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +414 -389
- package/src/surfaces/convert-repeater.json +309 -0
- package/src/surfaces/convert-repeater.ts +276 -0
- package/src/surfaces/data-actions.json +157 -0
- package/src/surfaces/data-actions.ts +115 -0
- package/src/surfaces/dialog.json +289 -0
- package/src/surfaces/dialog.ts +343 -0
- package/src/surfaces/diff-toolbar.json +266 -0
- package/src/surfaces/diff-toolbar.ts +139 -0
- package/src/surfaces/doc-header.json +739 -0
- package/src/surfaces/doc-header.ts +223 -0
- package/src/surfaces/empty-state.json +152 -0
- package/src/surfaces/empty-state.ts +173 -0
- package/src/surfaces/entry-editor.json +281 -0
- package/src/surfaces/entry-editor.ts +191 -0
- package/src/surfaces/expression-editor.json +977 -0
- package/src/surfaces/expression-editor.ts +266 -0
- package/src/surfaces/files-panel.json +592 -0
- package/src/surfaces/files-panel.ts +301 -0
- package/src/surfaces/formula-palette.json +364 -0
- package/src/surfaces/formula-palette.ts +340 -0
- package/src/surfaces/git-panel.json +1822 -0
- package/src/surfaces/git-panel.ts +272 -0
- package/src/surfaces/github-auth.json +112 -0
- package/src/surfaces/github-auth.ts +139 -0
- package/src/surfaces/github-publish.json +206 -0
- package/src/surfaces/github-publish.ts +169 -0
- package/src/surfaces/grid-cell.json +218 -0
- package/src/surfaces/grid-cell.ts +120 -0
- package/src/surfaces/grid-open.json +147 -0
- package/src/surfaces/grid-open.ts +87 -0
- package/src/surfaces/grid-panel.json +706 -0
- package/src/surfaces/grid-panel.ts +206 -0
- package/src/surfaces/grid-replace.json +179 -0
- package/src/surfaces/grid-replace.ts +89 -0
- package/src/surfaces/grid-views.json +446 -0
- package/src/surfaces/grid-views.ts +172 -0
- package/src/surfaces/inspector-dock.json +187 -0
- package/src/surfaces/inspector-dock.ts +161 -0
- package/src/surfaces/jump-bar.json +243 -0
- package/src/surfaces/jump-bar.ts +129 -0
- package/src/surfaces/jxsuite-update.json +146 -0
- package/src/surfaces/jxsuite-update.ts +149 -0
- package/src/surfaces/library-pane.json +1509 -0
- package/src/surfaces/library-pane.ts +363 -0
- package/src/surfaces/logic-panel.json +1949 -0
- package/src/surfaces/logic-panel.ts +369 -0
- package/src/surfaces/logic-workspace.json +685 -0
- package/src/surfaces/logic-workspace.ts +238 -0
- package/src/surfaces/media-browser.json +303 -0
- package/src/surfaces/media-browser.ts +145 -0
- package/src/surfaces/media-field.json +163 -0
- package/src/surfaces/media-field.ts +116 -0
- package/src/surfaces/media-pane.json +513 -0
- package/src/surfaces/media-pane.ts +197 -0
- package/src/surfaces/menu.json +232 -0
- package/src/surfaces/menu.ts +375 -0
- package/src/surfaces/navigator-dock.json +113 -0
- package/src/surfaces/navigator-dock.ts +130 -0
- package/src/surfaces/new-project.json +1654 -0
- package/src/surfaces/new-project.ts +411 -0
- package/src/surfaces/palette.json +535 -0
- package/src/surfaces/pane-context.json +1497 -0
- package/src/surfaces/pane-context.ts +513 -0
- package/src/surfaces/pane-grid.json +188 -0
- package/src/surfaces/pane-grid.ts +250 -0
- package/src/surfaces/panel-activity.json +563 -0
- package/src/surfaces/panel-activity.ts +187 -0
- package/src/surfaces/panel-data.json +141 -0
- package/src/surfaces/panel-data.ts +156 -0
- package/src/surfaces/panel-deploy-checklist.json +283 -0
- package/src/surfaces/panel-deploy-checklist.ts +175 -0
- package/src/surfaces/panel-elements.json +367 -0
- package/src/surfaces/panel-elements.ts +175 -0
- package/src/surfaces/panel-i18n.json +569 -0
- package/src/surfaces/panel-i18n.ts +212 -0
- package/src/surfaces/panel-imports.json +780 -0
- package/src/surfaces/panel-imports.ts +209 -0
- package/src/surfaces/panel-outline.json +734 -0
- package/src/surfaces/panel-outline.ts +326 -0
- package/src/surfaces/panel-page.json +1017 -0
- package/src/surfaces/panel-page.ts +240 -0
- package/src/surfaces/panel-problems.json +497 -0
- package/src/surfaces/panel-problems.ts +157 -0
- package/src/surfaces/panel-signals.json +1973 -0
- package/src/surfaces/panel-signals.ts +436 -0
- package/src/surfaces/panel-stylebook-layers.json +317 -0
- package/src/surfaces/panel-stylebook-layers.ts +155 -0
- package/src/surfaces/preferences.json +850 -0
- package/src/surfaces/preferences.ts +332 -0
- package/src/surfaces/progress-modal.json +110 -0
- package/src/surfaces/progress-modal.ts +150 -0
- package/src/surfaces/properties-panel.json +1578 -0
- package/src/surfaces/properties-panel.ts +337 -0
- package/src/surfaces/publish.json +945 -0
- package/src/surfaces/publish.ts +392 -0
- package/src/surfaces/push-plan.json +110 -0
- package/src/surfaces/push-plan.ts +87 -0
- package/src/surfaces/rail.json +255 -0
- package/src/surfaces/rail.ts +206 -0
- package/src/surfaces/reference-field.json +191 -0
- package/src/surfaces/reference-field.ts +168 -0
- package/src/surfaces/schema-builder.json +1011 -0
- package/src/surfaces/schema-builder.ts +181 -0
- package/src/surfaces/schema-form.json +1013 -0
- package/src/surfaces/schema-form.ts +287 -0
- package/src/surfaces/secret-field.json +60 -0
- package/src/surfaces/secret-field.ts +146 -0
- package/src/surfaces/seo.json +932 -0
- package/src/surfaces/seo.ts +334 -0
- package/src/surfaces/settings-contexts.json +538 -0
- package/src/surfaces/settings-contexts.ts +196 -0
- package/src/surfaces/settings-contributed.json +489 -0
- package/src/surfaces/settings-contributed.ts +199 -0
- package/src/surfaces/settings-css-vars.json +820 -0
- package/src/surfaces/settings-css-vars.ts +199 -0
- package/src/surfaces/settings-defs.json +1363 -0
- package/src/surfaces/settings-defs.ts +232 -0
- package/src/surfaces/settings-deploy.json +108 -0
- package/src/surfaces/settings-deploy.ts +135 -0
- package/src/surfaces/settings-extensions.json +486 -0
- package/src/surfaces/settings-extensions.ts +201 -0
- package/src/surfaces/settings-head.json +779 -0
- package/src/surfaces/settings-head.ts +397 -0
- package/src/surfaces/settings-locales.json +420 -0
- package/src/surfaces/settings-locales.ts +137 -0
- package/src/surfaces/settings-overview.json +423 -0
- package/src/surfaces/settings-overview.ts +218 -0
- package/src/surfaces/settings-packages.json +549 -0
- package/src/surfaces/settings-packages.ts +158 -0
- package/src/surfaces/settings-pane.json +147 -0
- package/src/surfaces/settings-pane.ts +150 -0
- package/src/surfaces/settings-rawjson.json +104 -0
- package/src/surfaces/settings-rawjson.ts +107 -0
- package/src/surfaces/shell.json +99 -0
- package/src/surfaces/shell.ts +30 -0
- package/src/surfaces/slash-menu.json +180 -0
- package/src/surfaces/slash-menu.ts +272 -0
- package/src/surfaces/statements.json +607 -0
- package/src/surfaces/statements.ts +238 -0
- package/src/surfaces/statusbar.json +94 -0
- package/src/{panels → surfaces}/statusbar.ts +163 -90
- package/src/surfaces/style-panel.json +1643 -0
- package/src/surfaces/style-panel.ts +338 -0
- package/src/surfaces/stylebook-chrome.json +122 -0
- package/src/surfaces/stylebook-chrome.ts +122 -0
- package/src/surfaces/tab-strip.json +448 -0
- package/src/surfaces/tab-strip.ts +200 -0
- package/src/surfaces/target-line.json +419 -0
- package/src/surfaces/target-line.ts +349 -0
- package/src/surfaces/toasts.json +189 -0
- package/src/surfaces/welcome.json +571 -0
- package/src/surfaces/welcome.ts +338 -0
- package/src/tabs/project-config.ts +71 -15
- package/src/tabs/tab.ts +52 -1
- package/src/types.ts +49 -3
- package/src/ui/ai-credentials-form.ts +104 -100
- package/src/ui/ai-managed-connect.ts +116 -49
- package/src/ui/ai-model-picker.ts +102 -47
- package/src/ui/cf-account-picker.ts +135 -0
- package/src/ui/color-selector.ts +80 -301
- package/src/ui/dynamic-slot.ts +43 -283
- package/src/ui/expression-editor.ts +797 -576
- package/src/ui/field-input.ts +8 -181
- package/src/ui/form-controls.ts +838 -366
- package/src/ui/formula-chips.ts +80 -85
- package/src/ui/kit.ts +33 -0
- package/src/ui/layers.ts +293 -593
- package/src/ui/media-picker.ts +203 -284
- package/src/ui/panel-resize.ts +251 -64
- package/src/ui/popover-surface.ts +153 -0
- package/src/ui/progress-modal.ts +22 -60
- package/src/ui/regions.ts +13 -7
- package/src/ui/schema-form.ts +906 -440
- package/src/ui/surface.ts +122 -0
- package/src/ui/unit-selector.ts +15 -131
- package/src/ui/value-source.ts +14 -0
- package/src/ui/virtual-window.ts +88 -9
- package/src/utils/canvas-media.ts +72 -0
- package/src/utils/edit-display.ts +7 -2
- package/src/utils/element-selectors.ts +69 -0
- package/src/utils/link-target.ts +2 -2
- package/src/utils/studio-utils.ts +0 -10
- package/src/view.ts +15 -0
- package/src/workspace/pane-derive.ts +36 -14
- package/src/workspace/workspace.ts +15 -6
- package/styles/canvas.css +72 -467
- package/styles/forced-colors.css +48 -82
- package/styles/forced-colors.json +41 -0
- package/styles/inspector.css +2 -1301
- package/styles/overlays.css +96 -2823
- package/styles/panels.css +6 -1423
- package/styles/shell-frame.css +272 -0
- package/styles/shell-frame.json +227 -0
- package/styles/shell.css +0 -1532
- package/styles/tokens.css +65 -136
- package/styles/tokens.json +84 -0
- package/dist/chunks/Overlay.dev-723bv0df.js +0 -23
- package/dist/chunks/adapter-jkcyhgtr.js +0 -14
- package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
- package/dist/chunks/components-zmx10t62.js +0 -21
- package/dist/chunks/content-source-t88vb2dr.js +0 -49
- package/dist/chunks/convert-to-repeater-dhw1nrz9.js +0 -268
- package/dist/chunks/editor-cptq5jp1.js +0 -37
- package/dist/chunks/entry-commands-6z6bhxg0.js +0 -46
- package/dist/chunks/extension-sections-3ydgjbdy.js +0 -311
- package/dist/chunks/file-ops-rskmhxyq.js +0 -48
- package/dist/chunks/files-0cratsr0.js +0 -92
- package/dist/chunks/flow-qbfgrpeh.js +0 -634
- package/dist/chunks/focus-trap.esm-ggawf1hy.js +0 -1024
- package/dist/chunks/focus-visible-6eg70z18.js +0 -167
- package/dist/chunks/format-host-tgcmfs4p.js +0 -43
- package/dist/chunks/fs-events-hrrg328g.js +0 -21
- package/dist/chunks/git-panel-0yywyk76.js +0 -58
- package/dist/chunks/index-zqxmqxmh.js +0 -109
- package/dist/chunks/jx-validate-8q2g05x1.js +0 -19
- package/dist/chunks/layers-panel-z3tqe5cd.js +0 -67
- package/dist/chunks/layers-q75tj2mf.js +0 -45
- package/dist/chunks/lit-html-j055mkh8.js +0 -22
- package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
- package/dist/chunks/notify-yjm79n4s.js +0 -30
- package/dist/chunks/parse-24d0gay3.js +0 -19
- package/dist/chunks/platform-ba1j1gbh.js +0 -16
- package/dist/chunks/publish-panel-54jvhskq.js +0 -28
- package/dist/chunks/quick-search-cgfmjwq5.js +0 -65
- package/dist/chunks/references-3qx8fkyp.js +0 -29
- package/dist/chunks/right-panel-cqp8bc4v.js +0 -46
- package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
- package/dist/chunks/sp-overlay.dev-yztmtrs1.js +0 -18
- package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
- package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
- package/dist/chunks/sp-tooltip.dev-xcvpnqr0.js +0 -15
- package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
- package/dist/chunks/studio-0a5qrh01.js +0 -3
- package/dist/chunks/studio-18j3bmcz.js +0 -14
- package/dist/chunks/studio-1hbqnt19.js +0 -1823
- package/dist/chunks/studio-4rzyrtjz.js +0 -426
- package/dist/chunks/studio-5rywrkxz.js +0 -1903
- package/dist/chunks/studio-7afd21nw.js +0 -67
- package/dist/chunks/studio-7nte2hj4.js +0 -613
- package/dist/chunks/studio-8jpzqk5s.js +0 -128
- package/dist/chunks/studio-8q517dfr.js +0 -24
- package/dist/chunks/studio-9c4k4vhv.js +0 -357
- package/dist/chunks/studio-9n4mrmnb.js +0 -184
- package/dist/chunks/studio-a0tswy0w.js +0 -58
- package/dist/chunks/studio-ahjfdy6e.js +0 -387
- package/dist/chunks/studio-ahnzd9rg.js +0 -23
- package/dist/chunks/studio-bw5dz6km.js +0 -608
- package/dist/chunks/studio-cb12yz9w.js +0 -15055
- package/dist/chunks/studio-d1ks410h.js +0 -175
- package/dist/chunks/studio-eqq1w638.js +0 -113
- package/dist/chunks/studio-ex8zyp98.js +0 -1813
- package/dist/chunks/studio-h4rxscfc.js +0 -10
- package/dist/chunks/studio-kyh9avvv.js +0 -28
- package/dist/chunks/studio-kyk2v92a.js +0 -659
- package/dist/chunks/studio-m3hwn7y1.js +0 -120
- package/dist/chunks/studio-mmv72a27.js +0 -4344
- package/dist/chunks/studio-n8b9wqwy.js +0 -291
- package/dist/chunks/studio-pdfjntbk.js +0 -6939
- package/dist/chunks/studio-qq6jym04.js +0 -53
- package/dist/chunks/studio-r1r7afxx.js +0 -1066
- package/dist/chunks/studio-rdx8jcxy.js +0 -83
- package/dist/chunks/studio-rn9ta2mz.js +0 -111
- package/dist/chunks/studio-t7qb9db8.js +0 -665
- package/dist/chunks/studio-tmc5emrw.js +0 -8
- package/dist/chunks/studio-txwkm6p9.js +0 -12
- package/dist/chunks/studio-v38hmvx1.js +0 -390
- package/dist/chunks/studio-vadzgkrz.js +0 -318
- package/dist/chunks/studio-wx5609xd.js +0 -341
- package/dist/chunks/studio-z6nw2ek2.js +0 -18
- package/dist/chunks/studio-zczps70q.js +0 -378
- package/dist/chunks/workspace-xpres40v.js +0 -89
- package/src/panels/activity-bar.ts +0 -251
- package/src/panels/panel-scheduler.ts +0 -219
- package/src/panels/style-inputs.ts +0 -237
- package/src/panels/target-line.ts +0 -274
- package/src/panels/welcome-screen.ts +0 -346
- package/src/ui/button-group.ts +0 -102
- package/src/ui/choice-field.ts +0 -72
- package/src/ui/field-row.ts +0 -249
- package/src/ui/formula-palette.ts +0 -213
- package/src/ui/icons.ts +0 -52
- package/src/ui/jx-theme.ts +0 -130
- package/src/ui/spectrum.ts +0 -340
- package/src/ui/value-selector.ts +0 -174
- package/src/ui/widgets.ts +0 -172
- /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
- /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
- /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
- /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
package/src/ui/dynamic-slot.ts
CHANGED
|
@@ -1,37 +1,30 @@
|
|
|
1
1
|
/// <reference lib="dom" />
|
|
2
2
|
/**
|
|
3
|
-
* Dynamic-slot — the
|
|
3
|
+
* Dynamic-slot — the per-field memory behind the Value Source ladder.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* the
|
|
9
|
-
* literal` meant passing through `${}`, committing a template to the document on the way past, and
|
|
10
|
-
* the only way to know where the next click would land was the tooltip.
|
|
5
|
+
* A bindable document position may be produced in several ways — Fixed value / From data… / Mixed
|
|
6
|
+
* text / Formula (`ui/value-source.ts` owns the vocabulary, and derives which rungs a position
|
|
7
|
+
* permits from its schema). The surfaces that DRAW that ladder are Jx documents now; what lives
|
|
8
|
+
* here is the state they share, so a field means the same thing wherever it is offered.
|
|
11
9
|
*
|
|
12
|
-
*
|
|
13
|
-
* (plan §6.3): `caps` is a {@link SlotPosition}, or a schema handed in for the one case a position
|
|
14
|
-
* name cannot cover — a field in an extension's config form, whose schema arrives at runtime. There
|
|
15
|
-
* is no way for a caller to state a rung list of its own.
|
|
10
|
+
* Two pieces of memory, both per field and per session:
|
|
16
11
|
*
|
|
17
|
-
* Each mode's last value
|
|
18
|
-
*
|
|
19
|
-
*
|
|
12
|
+
* - Each mode's last value, so switching back to an earlier mode restores what the user had there
|
|
13
|
+
* ({@link stashSlotValue} / {@link recallSlotValue}, and {@link switchSlotMode} over the pair).
|
|
14
|
+
* - The rung a field is CURRENTLY being edited at ({@link effectiveSlotMode}), so typing `${` into a
|
|
15
|
+
* Fixed value field does not swap the widget out from under the cursor mid-keystroke.
|
|
16
|
+
*
|
|
17
|
+
* {@link slotModeSeed} is the third shared thing: the value a field takes when it arrives at a rung
|
|
18
|
+
* with nothing remembered there. A second table of seeds is how a fresh binding ends up meaning two
|
|
19
|
+
* different things in two panels.
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
|
-
import { html, nothing } from "lit-html";
|
|
23
|
-
import { live } from "lit-html/directives/live.js";
|
|
24
|
-
import { isRef } from "@jxsuite/schema/guards";
|
|
25
22
|
import { cloneValue } from "../tabs/doc-op-apply";
|
|
26
23
|
import { activeTab } from "../workspace/workspace";
|
|
27
|
-
import {
|
|
28
|
-
import { VALUE_SOURCE_HINTS, VALUE_SOURCE_LABELS, slotCaps, slotMode } from "./value-source";
|
|
24
|
+
import { slotMode } from "./value-source";
|
|
29
25
|
|
|
30
|
-
import type { TemplateResult } from "lit-html";
|
|
31
|
-
import type { EditorPreview } from "./expression-editor";
|
|
32
|
-
import type { JxStateDefinition } from "@jxsuite/schema/types";
|
|
33
26
|
import type { JsonValue } from "../types";
|
|
34
|
-
import type {
|
|
27
|
+
import type { SlotMode } from "./value-source";
|
|
35
28
|
|
|
36
29
|
export type { SlotCapsSource, SlotMode, SlotPosition } from "./value-source";
|
|
37
30
|
export { slotCaps, slotMode } from "./value-source";
|
|
@@ -115,67 +108,43 @@ export function effectiveSlotMode(fieldKey: string, value: unknown): SlotMode {
|
|
|
115
108
|
return mode;
|
|
116
109
|
}
|
|
117
110
|
|
|
118
|
-
|
|
119
|
-
return opts.stateDefs.length > 0 || Boolean(opts.extraSignals?.length);
|
|
120
|
-
}
|
|
121
|
-
|
|
111
|
+
/** One pointer the From data… rung may offer, as a picker option. */
|
|
122
112
|
export interface SignalOption {
|
|
123
113
|
value: string;
|
|
124
114
|
label: string;
|
|
125
115
|
}
|
|
126
116
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
staticWidget: unknown;
|
|
136
|
-
/** Where this slot's rungs are derived from — a named document position, or a schema. */
|
|
137
|
-
caps: SlotCapsSource;
|
|
138
|
-
/** State keys offered by the ref picker and expression editor. */
|
|
139
|
-
stateDefs: string[];
|
|
140
|
-
/**
|
|
141
|
-
* Let the From data… rung take a pointer that is not in its list.
|
|
142
|
-
*
|
|
143
|
-
* The list is complete wherever it is a component's own signals. It is not complete in an
|
|
144
|
-
* extension's config form, where a value may point at a route param, a signal, or a pointer
|
|
145
|
-
* neither the form nor the panel enumerates — so there the same rung is a combobox whose options
|
|
146
|
-
* are suggestions, which is what `jx-value-selector` is for.
|
|
147
|
-
*/
|
|
148
|
-
allowCustomRef?: boolean;
|
|
149
|
-
/** Full state defs map — lets expression mode resolve named-formula catalog entries. */
|
|
150
|
-
stateEntries?: Record<string, JxStateDefinition> | null;
|
|
151
|
-
/** Extra pointer options beyond #/state/* (e.g. $map/item within repeater templates). */
|
|
152
|
-
extraSignals?: SignalOption[] | null;
|
|
153
|
-
/** Offer event#/ refs inside expression mode (handler positions only). */
|
|
154
|
-
allowEventRef?: boolean;
|
|
155
|
-
/** Live values for expression mode badges (services/preview-eval.ts). */
|
|
156
|
-
preview?: EditorPreview | null;
|
|
157
|
-
/** Static value restored when de-escalating to literal mode. */
|
|
158
|
-
literalDefault?: JsonValue;
|
|
159
|
-
/**
|
|
160
|
-
* A position-specific seed for a rung, overriding the generic one.
|
|
161
|
-
*
|
|
162
|
-
* The generic expression seed is `{ operator: "??" }`, which is a sensible starting point almost
|
|
163
|
-
* everywhere and an INVALID document in a position whose schema narrows which operators it takes.
|
|
164
|
-
* An element's `tagName` is the first such position — a `TagExpression` is `?:` or `switch` and
|
|
165
|
-
* nothing else — so a generic seed would drop a document that fails its own validator the moment
|
|
166
|
-
* the chip is clicked. Return `undefined` to accept the generic seed.
|
|
167
|
-
*/
|
|
168
|
-
seedFor?: (mode: SlotMode) => JsonValue | undefined;
|
|
117
|
+
/** Where a rung's seed value comes from — the subset of a slot's options that decides one. */
|
|
118
|
+
export interface SlotSeedSources {
|
|
119
|
+
/** State keys the position may point at; the first is what a fresh binding lands on. */
|
|
120
|
+
stateDefs: readonly string[];
|
|
121
|
+
/** Extra pointers beyond `#/state/*` — route params, `$map/item`. */
|
|
122
|
+
extraSignals?: readonly SignalOption[] | null;
|
|
123
|
+
/** What Fixed value restores to. */
|
|
124
|
+
literalDefault?: JsonValue | undefined;
|
|
169
125
|
}
|
|
170
126
|
|
|
171
|
-
|
|
127
|
+
/**
|
|
128
|
+
* The value a field takes when it arrives at a rung with nothing remembered there.
|
|
129
|
+
*
|
|
130
|
+
* Exported because several surfaces offer the same rungs — the Inspector's property, style and
|
|
131
|
+
* event ladders, and `ui/schema-form.ts` — and a second table of seeds is how a fresh binding ends
|
|
132
|
+
* up meaning two different things in two panels.
|
|
133
|
+
*
|
|
134
|
+
* @param {SlotMode} mode
|
|
135
|
+
* @param {SlotSeedSources} sources
|
|
136
|
+
* @returns {JsonValue | undefined}
|
|
137
|
+
*/
|
|
138
|
+
export function slotModeSeed(mode: SlotMode, sources: SlotSeedSources): JsonValue | undefined {
|
|
172
139
|
switch (mode) {
|
|
173
140
|
case "ref": {
|
|
174
|
-
const [first] =
|
|
175
|
-
return first
|
|
141
|
+
const [first] = sources.stateDefs;
|
|
142
|
+
return first
|
|
143
|
+
? { $ref: `#/state/${first}` }
|
|
144
|
+
: { $ref: sources.extraSignals?.[0]?.value ?? "" };
|
|
176
145
|
}
|
|
177
146
|
case "template": {
|
|
178
|
-
const [first] =
|
|
147
|
+
const [first] = sources.stateDefs;
|
|
179
148
|
return first ? `\${state.${first}}` : "${}";
|
|
180
149
|
}
|
|
181
150
|
case "expression": {
|
|
@@ -185,95 +154,11 @@ function defaultForSlotMode(mode: SlotMode, opts: DynamicSlotOpts): JsonValue |
|
|
|
185
154
|
return { $prototype: "Function", body: "", parameters: [] };
|
|
186
155
|
}
|
|
187
156
|
default: {
|
|
188
|
-
return
|
|
157
|
+
return sources.literalDefault;
|
|
189
158
|
}
|
|
190
159
|
}
|
|
191
160
|
}
|
|
192
161
|
|
|
193
|
-
/** Every pointer the From data… rung offers, as `{ value, label }` options. */
|
|
194
|
-
function refOptions(opts: DynamicSlotOpts): SignalOption[] {
|
|
195
|
-
return [
|
|
196
|
-
...opts.stateDefs.map((name) => ({ label: name, value: `#/state/${name}` })),
|
|
197
|
-
...(opts.extraSignals ?? []),
|
|
198
|
-
];
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
function renderCustomRefWidget(refVal: string, opts: DynamicSlotOpts) {
|
|
202
|
-
return html`
|
|
203
|
-
<jx-value-selector
|
|
204
|
-
size="s"
|
|
205
|
-
style="flex:1"
|
|
206
|
-
placeholder="#/state/…"
|
|
207
|
-
.value=${refVal}
|
|
208
|
-
.options=${refOptions(opts)}
|
|
209
|
-
@change=${(e: Event & { detail?: { value?: string } }) => {
|
|
210
|
-
const v = (e.detail?.value ?? (e.target as HTMLInputElement).value ?? "").trim();
|
|
211
|
-
if (v) {
|
|
212
|
-
opts.onChange({ $ref: v });
|
|
213
|
-
} else {
|
|
214
|
-
opts.onChange();
|
|
215
|
-
}
|
|
216
|
-
}}
|
|
217
|
-
></jx-value-selector>
|
|
218
|
-
`;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
function renderRefWidget(refVal: string, opts: DynamicSlotOpts) {
|
|
222
|
-
if (opts.allowCustomRef) {
|
|
223
|
-
return renderCustomRefWidget(refVal, opts);
|
|
224
|
-
}
|
|
225
|
-
return html`
|
|
226
|
-
<sp-picker
|
|
227
|
-
size="s"
|
|
228
|
-
quiet
|
|
229
|
-
style="flex:1"
|
|
230
|
-
placeholder="— select signal —"
|
|
231
|
-
value=${refVal || nothing}
|
|
232
|
-
@change=${(e: Event) => {
|
|
233
|
-
const v = (e.target as HTMLInputElement).value;
|
|
234
|
-
if (v) {
|
|
235
|
-
opts.onChange({ $ref: v });
|
|
236
|
-
} else {
|
|
237
|
-
opts.onChange();
|
|
238
|
-
}
|
|
239
|
-
}}
|
|
240
|
-
>
|
|
241
|
-
${opts.stateDefs.map(
|
|
242
|
-
(name) => html`<sp-menu-item value=${`#/state/${name}`}>${name}</sp-menu-item>`,
|
|
243
|
-
)}
|
|
244
|
-
${
|
|
245
|
-
opts.extraSignals?.length
|
|
246
|
-
? html`
|
|
247
|
-
<sp-menu-divider></sp-menu-divider>
|
|
248
|
-
${opts.extraSignals.map(
|
|
249
|
-
(sig) => html`<sp-menu-item value=${sig.value}>${sig.label}</sp-menu-item>`,
|
|
250
|
-
)}
|
|
251
|
-
`
|
|
252
|
-
: nothing
|
|
253
|
-
}
|
|
254
|
-
</sp-picker>
|
|
255
|
-
`;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
function renderTemplateWidget(value: unknown, opts: DynamicSlotOpts) {
|
|
259
|
-
return html`
|
|
260
|
-
<sp-textfield
|
|
261
|
-
size="s"
|
|
262
|
-
style="flex:1;font-family:var(--spectrum-code-font-family, monospace)"
|
|
263
|
-
placeholder="\${state.…}"
|
|
264
|
-
.value=${live(String(value ?? ""))}
|
|
265
|
-
@change=${(e: Event) => opts.onChange((e.target as HTMLInputElement).value)}
|
|
266
|
-
></sp-textfield>
|
|
267
|
-
`;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
export interface DynamicSlotParts {
|
|
271
|
-
/** Label-side Value Source chip and its picker. */
|
|
272
|
-
modeButton: TemplateResult;
|
|
273
|
-
/** Active-mode widget, sized to fill the row's widget column. */
|
|
274
|
-
widget: TemplateResult;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
162
|
/**
|
|
278
163
|
* Switch a field to `next`: stash the outgoing representation, restore the incoming one if this
|
|
279
164
|
* field has been there before, and record the new rung. Shared with the Events tab, which used to
|
|
@@ -290,128 +175,3 @@ export function switchSlotMode(
|
|
|
290
175
|
setSlotMode(fieldKey, to);
|
|
291
176
|
return hasStashedSlotValue(fieldKey, to) ? recallSlotValue(fieldKey, to) : seed;
|
|
292
177
|
}
|
|
293
|
-
|
|
294
|
-
/** A DOM id for the chip, so `sp-overlay` can name it as its trigger. */
|
|
295
|
-
function chipId(fieldKey: string): string {
|
|
296
|
-
return `value-source-${fieldKey.replaceAll(/[^\dA-Za-z]+/g, "-")}`;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* The label-side Value Source chip: the current rung in plain language — quiet while the value is
|
|
301
|
-
* fixed, accent-tinted once it is produced from something else — opening a picker of every rung
|
|
302
|
-
* this position permits.
|
|
303
|
-
*/
|
|
304
|
-
function renderModeChip(mode: SlotMode, caps: SlotMode[], opts: DynamicSlotOpts): TemplateResult {
|
|
305
|
-
const color =
|
|
306
|
-
mode === "literal"
|
|
307
|
-
? "color:var(--spectrum-gray-600, #808080)"
|
|
308
|
-
: "color:var(--spectrum-accent-content-color-default, #5c9dff)";
|
|
309
|
-
// A ref rung with nothing to point at is a dead end — drop it rather than offer an empty picker.
|
|
310
|
-
const offered = caps.filter((m) => m !== "ref" || hasRefOptions(opts));
|
|
311
|
-
const label = VALUE_SOURCE_LABELS[mode];
|
|
312
|
-
/* Disabled only when the rung this value already sits on is the only one there is. A value on a
|
|
313
|
-
rung the position does NOT permit — a fixed string left in a `$switch`, say — is exactly the
|
|
314
|
-
case that needs the chip most, and counting rungs alone used to grey it out. */
|
|
315
|
-
if (!offered.some((m) => m !== mode)) {
|
|
316
|
-
const hint = `Value source: ${label} (no other source available here)`;
|
|
317
|
-
return html`
|
|
318
|
-
<sp-action-button
|
|
319
|
-
size="xs"
|
|
320
|
-
quiet
|
|
321
|
-
disabled
|
|
322
|
-
class="dynamic-slot-mode"
|
|
323
|
-
style=${color}
|
|
324
|
-
title=${hint}
|
|
325
|
-
aria-label=${hint}
|
|
326
|
-
>${label}</sp-action-button
|
|
327
|
-
>
|
|
328
|
-
`;
|
|
329
|
-
}
|
|
330
|
-
const id = chipId(opts.fieldKey);
|
|
331
|
-
const hint = `Value source: ${label} — click to change`;
|
|
332
|
-
const choose = (next: SlotMode) => {
|
|
333
|
-
if (next === mode) {
|
|
334
|
-
return;
|
|
335
|
-
}
|
|
336
|
-
/* Leaving ref seeds an empty literal stash with the signal's declared default, so
|
|
337
|
-
unbind-restores-default survives a detour (ref → mixed text → fixed value). */
|
|
338
|
-
if (
|
|
339
|
-
mode === "ref" &&
|
|
340
|
-
opts.literalDefault !== undefined &&
|
|
341
|
-
!hasStashedSlotValue(opts.fieldKey, "literal")
|
|
342
|
-
) {
|
|
343
|
-
stashSlotValue(opts.fieldKey, "literal", opts.literalDefault);
|
|
344
|
-
}
|
|
345
|
-
opts.onChange(
|
|
346
|
-
switchSlotMode(
|
|
347
|
-
opts.fieldKey,
|
|
348
|
-
mode,
|
|
349
|
-
next,
|
|
350
|
-
cloneValue(opts.value as JsonValue | undefined),
|
|
351
|
-
opts.seedFor?.(next) ?? defaultForSlotMode(next, opts),
|
|
352
|
-
),
|
|
353
|
-
);
|
|
354
|
-
};
|
|
355
|
-
return html`
|
|
356
|
-
<sp-action-button
|
|
357
|
-
id=${id}
|
|
358
|
-
size="xs"
|
|
359
|
-
quiet
|
|
360
|
-
class="dynamic-slot-mode"
|
|
361
|
-
style=${color}
|
|
362
|
-
title=${hint}
|
|
363
|
-
aria-label=${hint}
|
|
364
|
-
>${label}</sp-action-button
|
|
365
|
-
>
|
|
366
|
-
<sp-overlay trigger="${id}@click" placement="bottom-start" type="auto">
|
|
367
|
-
<sp-popover>
|
|
368
|
-
<sp-menu size="s" label="Value source">
|
|
369
|
-
${offered.map(
|
|
370
|
-
(m) => html`
|
|
371
|
-
<sp-menu-item data-mode=${m} ?selected=${m === mode} @click=${() => choose(m)}
|
|
372
|
-
>${VALUE_SOURCE_LABELS[m]}
|
|
373
|
-
<span slot="description">${VALUE_SOURCE_HINTS[m]}</span></sp-menu-item
|
|
374
|
-
>
|
|
375
|
-
`,
|
|
376
|
-
)}
|
|
377
|
-
</sp-menu>
|
|
378
|
-
</sp-popover>
|
|
379
|
-
</sp-overlay>
|
|
380
|
-
`;
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
/**
|
|
384
|
-
* Render a bindable slot as two parts the panel places independently: the active mode's widget for
|
|
385
|
-
* the row's value column, and the Value Source chip for the label side.
|
|
386
|
-
*/
|
|
387
|
-
export function renderDynamicSlot(opts: DynamicSlotOpts): DynamicSlotParts {
|
|
388
|
-
const caps = slotCaps(opts.caps);
|
|
389
|
-
const mode = effectiveSlotMode(opts.fieldKey, opts.value);
|
|
390
|
-
|
|
391
|
-
const widget =
|
|
392
|
-
mode === "ref"
|
|
393
|
-
? renderRefWidget(isRef(opts.value) ? opts.value.$ref : "", opts)
|
|
394
|
-
: mode === "template"
|
|
395
|
-
? renderTemplateWidget(opts.value, opts)
|
|
396
|
-
: mode === "expression"
|
|
397
|
-
? renderExpressionEditor(
|
|
398
|
-
(opts.value as { $expression?: unknown }).$expression,
|
|
399
|
-
(node) => opts.onChange({ $expression: node } as JsonValue),
|
|
400
|
-
{
|
|
401
|
-
allowEventRef: opts.allowEventRef ?? false,
|
|
402
|
-
preview: opts.preview ?? null,
|
|
403
|
-
stateDefs: opts.stateDefs,
|
|
404
|
-
stateEntries: opts.stateEntries ?? null,
|
|
405
|
-
},
|
|
406
|
-
)
|
|
407
|
-
: opts.staticWidget;
|
|
408
|
-
|
|
409
|
-
return {
|
|
410
|
-
modeButton: renderModeChip(mode, caps, opts),
|
|
411
|
-
widget: html`
|
|
412
|
-
<div class="dynamic-slot" style="display:flex;flex:1;min-width:0">
|
|
413
|
-
<div style="flex:1;min-width:0">${widget}</div>
|
|
414
|
-
</div>
|
|
415
|
-
`,
|
|
416
|
-
};
|
|
417
|
-
}
|