@jxsuite/studio 4.1.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-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-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-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-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-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-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-msd847zn.js → studio-25hkdrkw.js} +357 -86
- package/dist/chunks/studio-26d7myd1.js +258 -0
- package/dist/chunks/{studio-4r1pv6zf.js → studio-38emantv.js} +22 -5
- package/dist/chunks/studio-3gxv60tn.js +422 -0
- package/dist/chunks/{studio-fbf92ckf.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-1wagb550.js → studio-5523bpzt.js} +11 -11
- package/dist/chunks/{studio-x4qkdat5.js → studio-57mf66w2.js} +1749 -2481
- 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-ahn3pdgx.js → studio-79y5sz51.js} +52 -38
- 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-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-x813zp48.js → studio-arfpe389.js} +30 -30
- package/dist/chunks/{studio-trxrabqf.js → studio-az3zd49t.js} +475 -283
- package/dist/chunks/studio-cpvb2ed1.js +1171 -0
- package/dist/chunks/{studio-f3wqjtk5.js → studio-d0300636.js} +5076 -18
- 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-3bqpr0zh.js → studio-em9nw8eh.js} +299 -110
- 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-dm19q43r.js → studio-hhvs4sdg.js} +10 -10
- package/dist/chunks/{studio-q9jd1a60.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-2b946z26.js → studio-rkstz940.js} +3658 -6134
- 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-jkftxyvz.js → studio-s6z853aq.js} +5858 -2152
- package/dist/chunks/{studio-6yw4y3my.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-qjy2z9bv.js → studio-vz68yn9e.js} +32 -137
- package/dist/chunks/studio-wqpngpsk.js +174 -0
- package/dist/chunks/{studio-b55y6ewx.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 +1780 -667
- package/dist/studio.js +52819 -36480
- 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 +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 +943 -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 +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 +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/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 +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 +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 +468 -0
- 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/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 +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 +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 +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 +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 -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-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
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The Inspector's Logic tab as a mounted document.
|
|
4
|
+
*
|
|
5
|
+
* This is the adapter. `panels/events-panel.ts` is the flow — it reads the selection, works out
|
|
6
|
+
* which rungs a position permits, decides what a handler currently holds, counts which elements of
|
|
7
|
+
* a multi-selection disagree about a key, and turns every gesture into a transaction — and this is
|
|
8
|
+
* the surface it draws into. Nothing here reads the document.
|
|
9
|
+
*
|
|
10
|
+
* **Two islands, both through `onNodeCreated`** (specs/studio-ui-guidelines.md §9.4).
|
|
11
|
+
* `[part="control-host"]` and `[part="expression-host"]` receive the expression editor, which is a
|
|
12
|
+
* lit surface of its own and another conversion's to move; `[part="statements-host"]` receives the
|
|
13
|
+
* `statements` surface, which is a mounted document of its own. Both are announced as they are
|
|
14
|
+
* CREATED, one reconcile step before they are in the page — so connectedness is deliberately not
|
|
15
|
+
* consulted, because "is it connected" answers no for exactly the node that needs filling.
|
|
16
|
+
*
|
|
17
|
+
* **A host is held, never re-found.** A keyed row keeps its node across an update, so a control
|
|
18
|
+
* host whose statement moved under it would still be showing the previous one's editor; the flow
|
|
19
|
+
* repaints the hosts it holds after every projection rather than querying the tab for them.
|
|
20
|
+
*
|
|
21
|
+
* @docs studio/logic/events
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { reactive } from "../reactivity";
|
|
25
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
|
+
import logicPanelDoc from "./logic-panel.json";
|
|
27
|
+
import type { JxDocument, JxElement } from "@jxsuite/schema/types";
|
|
28
|
+
import type { JxScope } from "@jxsuite/runtime/types";
|
|
29
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
30
|
+
|
|
31
|
+
registerSurface("logic-panel", logicPanelDoc as unknown as JxDocument);
|
|
32
|
+
|
|
33
|
+
/** A closed list of choices, in the shape the kit's select reads. */
|
|
34
|
+
export interface LogicOption {
|
|
35
|
+
value: string;
|
|
36
|
+
label: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Which control a bindable row draws. The flow picks it; the document switches on it. */
|
|
40
|
+
export type LogicFieldKind = "control" | "text" | "select";
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* A bindable value as a first-class field row: a collection, a filter, a sort key, a `$switch`.
|
|
44
|
+
*
|
|
45
|
+
* These were the last second-class rows in the inspector (§12 P5 item 6) — a bare label and a
|
|
46
|
+
* widget, with no set dot, no clear affordance and no error slot. Every field the tab has is one of
|
|
47
|
+
* these now.
|
|
48
|
+
*/
|
|
49
|
+
export interface LogicFieldView {
|
|
50
|
+
/** The slot's field key: the repeater's key, and what every callback names. */
|
|
51
|
+
key: string;
|
|
52
|
+
/** What `inspector/field:<prop>` addresses. */
|
|
53
|
+
prop: string;
|
|
54
|
+
label: string;
|
|
55
|
+
kind: LogicFieldKind;
|
|
56
|
+
/** What a `text` or `select` control holds. Empty for a control host. */
|
|
57
|
+
value: string;
|
|
58
|
+
placeholder: string;
|
|
59
|
+
options: LogicOption[];
|
|
60
|
+
/** Draw the text control monospaced — a pointer or a template string. */
|
|
61
|
+
mono: boolean;
|
|
62
|
+
/** The rung's own id, for `data-source`. */
|
|
63
|
+
source: string;
|
|
64
|
+
/** The rung's name, in the four words every bindable position in Studio uses. */
|
|
65
|
+
sourceLabel: string;
|
|
66
|
+
/** The chip's accessible name, which says whether another rung is even on offer. */
|
|
67
|
+
sourceHint: string;
|
|
68
|
+
/** This position permits exactly one rung, so the chip is a label rather than a control. */
|
|
69
|
+
sourceLocked: boolean;
|
|
70
|
+
/** `set`, `mixed` or `unset` — what the dot reports. */
|
|
71
|
+
dotState: string;
|
|
72
|
+
/** The dot's colour: `warning` where the selection disagrees, neutral otherwise. */
|
|
73
|
+
tone: string;
|
|
74
|
+
/** The clear button's accessible name. */
|
|
75
|
+
clearTitle: string;
|
|
76
|
+
/** The position is mandatory and cannot be cleared. */
|
|
77
|
+
clearLocked: boolean;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** One case of a `$switch`, as a row of the Condition section. */
|
|
81
|
+
export interface LogicCaseView {
|
|
82
|
+
/** The case name; its own identity, and what every callback names. */
|
|
83
|
+
key: string;
|
|
84
|
+
/** `case:<name>` — what `inspector/field:case:<name>` addresses. */
|
|
85
|
+
prop: string;
|
|
86
|
+
name: string;
|
|
87
|
+
openTitle: string;
|
|
88
|
+
removeTitle: string;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** One event a component's own functions declare they emit. */
|
|
92
|
+
export interface LogicDeclaredView {
|
|
93
|
+
/** `<fn>:<name>` — unique even when two functions emit the same event. */
|
|
94
|
+
key: string;
|
|
95
|
+
name: string;
|
|
96
|
+
/** `← handleSave`. */
|
|
97
|
+
source: string;
|
|
98
|
+
/** The event's TypeScript type, when the manifest gives one. Empty draws nothing. */
|
|
99
|
+
type: string;
|
|
100
|
+
title: string;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Which of the four things a handler's body is. */
|
|
104
|
+
export type LogicBodyKind = "statements" | "code" | "expression" | "ref";
|
|
105
|
+
|
|
106
|
+
/** One `on*` key and whatever produces it. */
|
|
107
|
+
export interface LogicBindingView {
|
|
108
|
+
/** The event key; the repeater's identity, and what every callback names. */
|
|
109
|
+
key: string;
|
|
110
|
+
name: string;
|
|
111
|
+
nameTitle: string;
|
|
112
|
+
source: string;
|
|
113
|
+
sourceLabel: string;
|
|
114
|
+
sourceHint: string;
|
|
115
|
+
/** `set` or `mixed` — whether the selected elements agree about this key. */
|
|
116
|
+
dotState: string;
|
|
117
|
+
tone: string;
|
|
118
|
+
clearTitle: string;
|
|
119
|
+
body: LogicBodyKind;
|
|
120
|
+
/** An inline function may be written as statements or as code, so it gets the toggle. */
|
|
121
|
+
showToggle: boolean;
|
|
122
|
+
/**
|
|
123
|
+
* `"true"` / `"false"` — the segmented control's two halves are RADIOS, not toggles.
|
|
124
|
+
*
|
|
125
|
+
* The kit's action button flips its own `selected` on activation when `toggles` is on, which is a
|
|
126
|
+
* second writer for a state this flow owns: the body's representation is a fact about the
|
|
127
|
+
* document, so the button may draw it and must not decide it. `checked` is the channel that says
|
|
128
|
+
* exactly that, and it is what makes the pair announce itself as one choice of two.
|
|
129
|
+
*/
|
|
130
|
+
statementsChecked: string;
|
|
131
|
+
codeChecked: string;
|
|
132
|
+
/** The code body's text. Empty for every other body. */
|
|
133
|
+
code: string;
|
|
134
|
+
refValue: string;
|
|
135
|
+
refOptions: LogicOption[];
|
|
136
|
+
/** The escape hatch's accessible name — the code editor, or the formula workspace. */
|
|
137
|
+
openTitle: string;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** A read-only name and what it maps to: an observed attribute, a custom property, a part. */
|
|
141
|
+
export interface LogicKvView {
|
|
142
|
+
key: string;
|
|
143
|
+
prop: string;
|
|
144
|
+
name: string;
|
|
145
|
+
/** `→ label` or `<jx-card>`. Empty draws nothing. */
|
|
146
|
+
detail: string;
|
|
147
|
+
/** The value or type beside the name. Empty draws nothing. */
|
|
148
|
+
value: string;
|
|
149
|
+
/** `reflects`, and whatever joins it. Empty draws nothing. */
|
|
150
|
+
tags: string;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** One button of an empty state — an id the flow knows, and the words on it. */
|
|
154
|
+
export interface LogicEmptyAction {
|
|
155
|
+
id: string;
|
|
156
|
+
label: string;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/** Everything the Logic tab shows, already decided. */
|
|
160
|
+
export interface LogicView {
|
|
161
|
+
/** `empty` or `ready` — no document, no selection and a stale one are all the first. */
|
|
162
|
+
state: string;
|
|
163
|
+
emptyMessage: string;
|
|
164
|
+
/** What the reader can do about it. An empty state that teaches nothing offers none (§11.1). */
|
|
165
|
+
emptyActions: LogicEmptyAction[];
|
|
166
|
+
hasEmptyActions: boolean;
|
|
167
|
+
|
|
168
|
+
hasRepeater: boolean;
|
|
169
|
+
repeaterOpen: boolean;
|
|
170
|
+
repeaterFields: LogicFieldView[];
|
|
171
|
+
hasTemplate: boolean;
|
|
172
|
+
|
|
173
|
+
hasCondition: boolean;
|
|
174
|
+
conditionOpen: boolean;
|
|
175
|
+
conditionFields: LogicFieldView[];
|
|
176
|
+
cases: LogicCaseView[];
|
|
177
|
+
|
|
178
|
+
hasEvents: boolean;
|
|
179
|
+
eventsOpen: boolean;
|
|
180
|
+
hasDeclared: boolean;
|
|
181
|
+
declared: LogicDeclaredView[];
|
|
182
|
+
hasBindings: boolean;
|
|
183
|
+
bindings: LogicBindingView[];
|
|
184
|
+
|
|
185
|
+
hasObserved: boolean;
|
|
186
|
+
observedOpen: boolean;
|
|
187
|
+
observedEmpty: boolean;
|
|
188
|
+
observed: LogicKvView[];
|
|
189
|
+
|
|
190
|
+
hasCssProps: boolean;
|
|
191
|
+
cssPropsOpen: boolean;
|
|
192
|
+
cssProps: LogicKvView[];
|
|
193
|
+
|
|
194
|
+
hasCssParts: boolean;
|
|
195
|
+
cssPartsOpen: boolean;
|
|
196
|
+
cssParts: LogicKvView[];
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/** What the tab may ask the flow to do. Every one of them names a row by its key. */
|
|
200
|
+
export interface LogicActions {
|
|
201
|
+
/** Open the Value Source ladder for a bindable row, anchored on the chip that asked. */
|
|
202
|
+
pickSource: (key: string, anchor: HTMLElement) => void;
|
|
203
|
+
setField: (key: string, value: string) => void;
|
|
204
|
+
clearField: (key: string) => void;
|
|
205
|
+
editTemplate: () => void;
|
|
206
|
+
openCase: (key: string) => void;
|
|
207
|
+
removeCase: (key: string) => void;
|
|
208
|
+
renameCase: (key: string, value: string) => void;
|
|
209
|
+
addCase: () => void;
|
|
210
|
+
/** Open the event-name menu — this element's own keys, the ten worth suggesting, and Other…. */
|
|
211
|
+
pickEventName: (key: string, anchor: HTMLElement) => void;
|
|
212
|
+
/** Open the handler's Value Source ladder. */
|
|
213
|
+
pickHandler: (key: string, anchor: HTMLElement) => void;
|
|
214
|
+
clearEvent: (key: string) => void;
|
|
215
|
+
setBodyMode: (key: string, mode: string) => void;
|
|
216
|
+
setCode: (key: string, value: string) => void;
|
|
217
|
+
setHandlerRef: (key: string, value: string) => void;
|
|
218
|
+
openEditor: (key: string) => void;
|
|
219
|
+
addEvent: () => void;
|
|
220
|
+
setSection: (id: string, open: boolean) => void;
|
|
221
|
+
runEmptyAction: (id: string) => void;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/** Where the flow's islands land. Each is announced with the key of the row it belongs to. */
|
|
225
|
+
export interface LogicIslands {
|
|
226
|
+
/** A bindable row's expression editor. */
|
|
227
|
+
controlSlot: (key: string, host: HTMLElement) => void;
|
|
228
|
+
/** A handler whose body is a formula. */
|
|
229
|
+
expressionSlot: (key: string, host: HTMLElement) => void;
|
|
230
|
+
/** A handler whose body is structured — the `statements` surface's own host. */
|
|
231
|
+
statementsSlot: (key: string, host: HTMLElement) => void;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
interface LogicScope extends Record<string, unknown>, LogicView, LogicActions {}
|
|
235
|
+
|
|
236
|
+
export interface LogicSurface {
|
|
237
|
+
/** Re-project. The document's bindings skip every value that did not move. */
|
|
238
|
+
update: (view: LogicView) => void;
|
|
239
|
+
/** Whether the mounted root is still where it was put. */
|
|
240
|
+
connected: () => boolean;
|
|
241
|
+
dispose: () => void;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/** The tab with nothing selected — the state it opens in, and the one it returns to. */
|
|
245
|
+
export function emptyLogicView(): LogicView {
|
|
246
|
+
return {
|
|
247
|
+
bindings: [],
|
|
248
|
+
cases: [],
|
|
249
|
+
conditionFields: [],
|
|
250
|
+
conditionOpen: true,
|
|
251
|
+
cssParts: [],
|
|
252
|
+
cssPartsOpen: false,
|
|
253
|
+
cssProps: [],
|
|
254
|
+
cssPropsOpen: false,
|
|
255
|
+
declared: [],
|
|
256
|
+
emptyActions: [],
|
|
257
|
+
emptyMessage: "",
|
|
258
|
+
eventsOpen: true,
|
|
259
|
+
hasBindings: false,
|
|
260
|
+
hasCondition: false,
|
|
261
|
+
hasCssParts: false,
|
|
262
|
+
hasCssProps: false,
|
|
263
|
+
hasDeclared: false,
|
|
264
|
+
hasEmptyActions: false,
|
|
265
|
+
hasEvents: false,
|
|
266
|
+
hasObserved: false,
|
|
267
|
+
hasRepeater: false,
|
|
268
|
+
hasTemplate: false,
|
|
269
|
+
observed: [],
|
|
270
|
+
observedEmpty: false,
|
|
271
|
+
observedOpen: false,
|
|
272
|
+
repeaterFields: [],
|
|
273
|
+
repeaterOpen: true,
|
|
274
|
+
state: "empty",
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/** Assign the projection field by field: the runtime writes only the bindings that moved. */
|
|
279
|
+
function project(scope: LogicScope, view: LogicView): void {
|
|
280
|
+
for (const [key, value] of Object.entries(view)) {
|
|
281
|
+
(scope as Record<string, unknown>)[key] = value;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/** The `part` a node was rendered with, or "". */
|
|
286
|
+
function partOf(def: JxElement | string): string {
|
|
287
|
+
const part = typeof def === "string" ? undefined : def.attributes?.["part"];
|
|
288
|
+
return typeof part === "string" ? part : "";
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/** The `key` of the `$map` item a node was rendered inside, or "". */
|
|
292
|
+
function itemKey(state: JxScope | undefined): string {
|
|
293
|
+
const item = (state?.["$map"] as { item?: unknown } | undefined)?.item;
|
|
294
|
+
const key =
|
|
295
|
+
item !== null && typeof item === "object" ? (item as Record<string, unknown>).key : "";
|
|
296
|
+
return typeof key === "string" ? key : "";
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Mount the Logic tab into `host` — the container the Inspector owns for the life of the window.
|
|
301
|
+
*
|
|
302
|
+
* The host is CLEARED first: this document is the whole of what the tab shows, and whatever was in
|
|
303
|
+
* the container belongs to a render that is over.
|
|
304
|
+
*
|
|
305
|
+
* @param {HTMLElement} host The Inspector's `events` tab container.
|
|
306
|
+
* @param {LogicView} view The first projection.
|
|
307
|
+
* @param {LogicActions} actions What a control does; read once, when the surface is mounted.
|
|
308
|
+
* @param {LogicIslands} islands Where the expression editors and statement editors land.
|
|
309
|
+
* @returns {LogicSurface}
|
|
310
|
+
*/
|
|
311
|
+
export function mountLogicSurface(
|
|
312
|
+
host: HTMLElement,
|
|
313
|
+
view: LogicView,
|
|
314
|
+
actions: LogicActions,
|
|
315
|
+
islands: LogicIslands,
|
|
316
|
+
): LogicSurface {
|
|
317
|
+
const scope = reactive<LogicScope>({
|
|
318
|
+
...emptyLogicView(),
|
|
319
|
+
...actions,
|
|
320
|
+
} as LogicScope) as LogicScope;
|
|
321
|
+
project(scope, view);
|
|
322
|
+
|
|
323
|
+
let mounted: SurfaceHandle | null = null;
|
|
324
|
+
let disposed = false;
|
|
325
|
+
host.replaceChildren();
|
|
326
|
+
void mountSurface("logic-panel", scope, host, {
|
|
327
|
+
onNodeCreated: (element, _path, def, state) => {
|
|
328
|
+
if (!(element instanceof HTMLElement)) {
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
const part = partOf(def);
|
|
332
|
+
if (part !== "control-host" && part !== "expression-host" && part !== "statements-host") {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
/* Read out of the node's own `$map` scope rather than off the element. A node is announced
|
|
336
|
+
when it is BUILT, one append before its attributes are settled, so `dataset` answers ""
|
|
337
|
+
for exactly the host that needs filling. */
|
|
338
|
+
const key = itemKey(state);
|
|
339
|
+
if (part === "control-host") {
|
|
340
|
+
islands.controlSlot(key, element);
|
|
341
|
+
} else if (part === "expression-host") {
|
|
342
|
+
islands.expressionSlot(key, element);
|
|
343
|
+
} else {
|
|
344
|
+
islands.statementsSlot(key, element);
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
}).then((surface) => {
|
|
348
|
+
if (disposed) {
|
|
349
|
+
surface.dispose();
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
mounted = surface;
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
return {
|
|
356
|
+
connected: () => {
|
|
357
|
+
const root = mounted?.root;
|
|
358
|
+
return root instanceof HTMLElement ? root.isConnected : !disposed;
|
|
359
|
+
},
|
|
360
|
+
dispose() {
|
|
361
|
+
disposed = true;
|
|
362
|
+
mounted?.dispose();
|
|
363
|
+
mounted = null;
|
|
364
|
+
},
|
|
365
|
+
update(next) {
|
|
366
|
+
project(scope, next);
|
|
367
|
+
},
|
|
368
|
+
};
|
|
369
|
+
}
|