@jxsuite/studio 4.0.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/data/elements-meta.json +5 -15
- package/data/html-meta.json +51 -6
- package/dist/chunks/{2020-xp8vnwma.js → 2020-g79n01v9.js} +14 -14
- package/dist/chunks/action-group-sp6tna8v.js +118 -0
- package/dist/chunks/adapter-nj7tnjfn.js +13 -0
- package/dist/chunks/cf-account-picker-fyf63pmy.js +495 -0
- package/dist/chunks/cf-settings-71bv5zn9.js +20 -0
- package/dist/chunks/color-area-v17df7b8.js +154 -0
- package/dist/chunks/color-field-anwybnkn.js +208 -0
- package/dist/chunks/color-slider-44ez96fc.js +79 -0
- package/dist/chunks/color-xgg3kfw7.js +35 -0
- package/dist/chunks/combobox-5e7jev23.js +236 -0
- package/dist/chunks/components-2w1f35qs.js +18 -0
- package/dist/chunks/content-source-3wqeas45.js +46 -0
- package/dist/chunks/convert-to-repeater-d0cgnb6d.js +639 -0
- package/dist/chunks/dialog-s890b918.js +85 -0
- package/dist/chunks/editor-3qhbg51x.js +35 -0
- package/dist/chunks/entry-commands-d6g50j7s.js +42 -0
- package/dist/chunks/extension-sections-fy7q4fe9.js +651 -0
- package/dist/chunks/file-ops-3btj6st0.js +47 -0
- package/dist/chunks/files-ef8fgs3w.js +72 -0
- package/dist/chunks/format-host-3c33nwr8.js +40 -0
- package/dist/chunks/fs-events-13tj6sex.js +18 -0
- package/dist/chunks/git-panel-4wp2rn9b.js +49 -0
- package/dist/chunks/icons-yy10wk9r.js +402 -0
- package/dist/chunks/iframe-entry-15g3n6xv.js +114 -0
- package/dist/chunks/iframe-entry-b27vq81n.js +203 -0
- package/dist/chunks/iframe-entry-nbyxee1y.js +154 -0
- package/dist/chunks/iframe-host-jgesd924.js +115 -0
- package/dist/chunks/{index-nj44jpzj.js → index-mdmyx6s2.js} +11 -11
- package/dist/chunks/index-n4j7qxyr.js +109 -0
- package/dist/chunks/{javascript-q8kpmfah.js → javascript-xvrfrpkb.js} +8 -9
- package/dist/chunks/{jsonMode-dkr040ga.js → jsonMode-tyx2kj6p.js} +526 -527
- package/dist/chunks/jx-validate-j0wxk72w.js +15 -0
- package/dist/chunks/layers-1nq5evsh.js +29 -0
- package/dist/chunks/layers-panel-ar2gh90g.js +40 -0
- package/dist/chunks/listbox-6v2ac08j.js +44 -0
- package/dist/chunks/lit-html-m244w9nh.js +17 -0
- package/dist/chunks/media-picker-2qbetq73.js +33 -0
- package/dist/chunks/menu-q99sy9rf.js +285 -0
- package/dist/chunks/menu-rf7n72mf.js +14 -0
- package/dist/chunks/{monaco-binding-rj6xpx9y.js → monaco-binding-sw6en4dw.js} +12 -15
- package/dist/chunks/monaco-buffer-bhy3hb6m.js +24 -0
- package/dist/chunks/{monaco-setup-rws7k4br.js → monaco-setup-8r62fj6y.js} +27 -37
- package/dist/chunks/notify-628t0anh.js +21 -0
- package/dist/chunks/number-field-5cndyft8.js +72 -0
- package/dist/chunks/parse-0zx14y15.js +10 -0
- package/dist/chunks/platform-ts9cg1a4.js +15 -0
- package/dist/chunks/popover-47z3ytva.js +25 -0
- package/dist/chunks/publish-panel-98f7sr3g.js +27 -0
- package/dist/chunks/quick-search-srzz83k2.js +45 -0
- package/dist/chunks/references-n553f0e1.js +26 -0
- package/dist/chunks/right-panel-rrgx2dn3.js +45 -0
- package/dist/chunks/section-registry-5pq32t0q.js +25 -0
- package/dist/chunks/select-2r16ez41.js +49 -0
- package/dist/chunks/split-g7nm1rgb.js +191 -0
- package/dist/chunks/studio-0hqbpbd0.js +62 -0
- package/dist/chunks/studio-18avnhjp.js +2430 -0
- package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
- package/dist/chunks/{studio-hbtp0eh1.js → studio-25hkdrkw.js} +356 -85
- package/dist/chunks/studio-26d7myd1.js +258 -0
- package/dist/chunks/{studio-p8j86wag.js → studio-38emantv.js} +22 -5
- package/dist/chunks/studio-3gxv60tn.js +422 -0
- package/dist/chunks/{studio-8swrjbny.js → studio-3hxkd92t.js} +275 -163
- package/dist/chunks/studio-4m0haseg.js +185 -0
- package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
- package/dist/chunks/{studio-gv8vvshc.js → studio-5523bpzt.js} +11 -11
- package/dist/chunks/{studio-5q69gfag.js → studio-57mf66w2.js} +1753 -2484
- package/dist/chunks/studio-5jy81t3s.js +17463 -0
- package/dist/chunks/studio-5rt7sqa0.js +1168 -0
- package/dist/chunks/studio-5te5tqng.js +81 -0
- package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
- package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
- package/dist/chunks/studio-6xa21ej9.js +28 -0
- package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
- package/dist/chunks/{studio-eenfkt4e.js → studio-79y5sz51.js} +52 -38
- package/dist/chunks/{studio-4q0wznzf.js → studio-7e11jpa9.js} +461 -145
- package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
- package/dist/chunks/studio-7xptrg0j.js +954 -0
- package/dist/chunks/{studio-cft9r4r7.js → studio-81390n6f.js} +22 -22
- package/dist/chunks/{studio-q43a5y9h.js → studio-8jn5yhyn.js} +16 -16
- package/dist/chunks/studio-8qtrpzr3.js +839 -0
- package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
- package/dist/chunks/studio-9xxz1q69.js +1356 -0
- package/dist/chunks/studio-akbww0j5.js +13615 -0
- package/dist/chunks/studio-arfpe389.js +195 -0
- package/dist/chunks/{studio-2zkz8evn.js → studio-az3zd49t.js} +473 -281
- package/dist/chunks/studio-cpvb2ed1.js +1171 -0
- package/dist/chunks/{studio-9r6j5ev1.js → studio-d0300636.js} +5078 -19
- package/dist/chunks/{studio-bgxt93ga.js → studio-d055c37e.js} +13 -13
- package/dist/chunks/studio-d1ja2x9r.js +362 -0
- package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
- package/dist/chunks/{studio-4pqqxbrt.js → studio-em9nw8eh.js} +301 -112
- package/dist/chunks/studio-erdatzvp.js +1190 -0
- package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
- package/dist/chunks/studio-fabxk6r9.js +2811 -0
- package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
- package/dist/chunks/studio-hhvs4sdg.js +195 -0
- package/dist/chunks/{studio-68n67094.js → studio-kcgff4r0.js} +15 -18
- package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
- package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
- package/dist/chunks/studio-pm6hgy7r.js +4763 -0
- package/dist/chunks/studio-q0a3yk4n.js +33 -0
- package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
- package/dist/chunks/studio-qahxvnan.js +111 -0
- package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
- package/dist/chunks/{studio-kjjsjak4.js → studio-rkstz940.js} +3661 -6136
- package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
- package/dist/chunks/studio-rpyah2ew.js +2805 -0
- package/dist/chunks/studio-rs76k67r.js +12 -0
- package/dist/chunks/{studio-yxrkyv8a.js → studio-s6z853aq.js} +12108 -11766
- package/dist/chunks/{studio-sf7zjgv1.js → studio-sgdc5pfc.js} +8 -8
- package/dist/chunks/studio-tb3ev01j.js +763 -0
- package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
- package/dist/chunks/studio-vhv5tgxm.js +51 -0
- package/dist/chunks/{studio-htsf0w6m.js → studio-vz68yn9e.js} +31 -154
- package/dist/chunks/studio-wqpngpsk.js +174 -0
- package/dist/chunks/{studio-eesa1myv.js → studio-x3rty6tr.js} +58 -58
- package/dist/chunks/studio-xsykpvsh.js +8448 -0
- package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
- package/dist/chunks/studio-yxa81f45.js +12 -0
- package/dist/chunks/swatch-group-t0n6h2rn.js +139 -0
- package/dist/chunks/tabs-wbp1cdws.js +156 -0
- package/dist/chunks/textfield-abk6qyee.js +73 -0
- package/dist/chunks/toast-780pvfbv.js +27 -0
- package/dist/chunks/toast-host-3sqv46sn.js +116 -0
- package/dist/chunks/toolbar-xbh5bhtr.js +194 -0
- package/dist/chunks/tooltip-eptb614w.js +369 -0
- package/dist/chunks/tree-a73p0pqm.js +367 -0
- package/dist/chunks/{tsMode-76kr53q0.js → tsMode-jy4m86rv.js} +83 -85
- package/dist/chunks/workspace-wrew8zk4.js +69 -0
- package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
- package/dist/iframe-entry.js +1812 -698
- package/dist/manifest.json +7 -0
- package/dist/studio.js +52900 -36573
- package/dist/workers/editor.worker.js +1040 -1085
- package/dist/workers/json.worker.js +1946 -1991
- package/dist/workers/ts.worker.js +4960 -5005
- package/favicon.ico +0 -0
- package/index.html +2 -0
- package/package.json +22 -55
- package/src/about/about-modal.ts +73 -123
- package/src/browse/library-commands.ts +20 -49
- package/src/browse/library-layouts.ts +87 -218
- package/src/browse/library-pane.ts +406 -438
- package/src/canvas/canvas-helpers.ts +0 -49
- package/src/canvas/canvas-live-render.ts +25 -2
- package/src/canvas/canvas-render.ts +666 -231
- package/src/canvas/canvas-surface.ts +0 -1
- package/src/canvas/canvas-utils.ts +310 -117
- package/src/canvas/dialog-path.ts +76 -0
- package/src/canvas/dialog-state.ts +67 -0
- package/src/canvas/diff-marks.ts +252 -0
- package/src/canvas/diff-toolbar.ts +349 -0
- package/src/canvas/diff-view.ts +123 -0
- package/src/canvas/edit-width-drag.ts +187 -0
- package/src/canvas/edit-width.ts +150 -0
- package/src/canvas/iframe-entry.ts +125 -8
- package/src/canvas/iframe-host.ts +271 -15
- package/src/canvas/iframe-interaction.ts +133 -13
- package/src/canvas/iframe-patch.ts +7 -1
- package/src/canvas/iframe-position.ts +5 -6
- package/src/canvas/iframe-protocol.ts +106 -5
- package/src/canvas/iframe-render.ts +373 -5
- package/src/canvas/iframe-slash.ts +2 -2
- package/src/canvas/iframe-subtree.ts +5 -8
- package/src/canvas/path-mapping.ts +25 -3
- package/src/canvas/popover-path.ts +106 -0
- package/src/canvas/popover-state.ts +155 -0
- package/src/canvas/surface-registry.ts +21 -10
- package/src/collab/presence-chips.ts +51 -73
- package/src/commands/app-commands.ts +10 -0
- package/src/commands/budget.ts +12 -0
- package/src/commands/command-args.ts +369 -6
- package/src/commands/defaults.ts +44 -14
- package/src/commands/live-context.ts +11 -5
- package/src/commands/reference.ts +12 -2
- package/src/commands/registry.ts +165 -8
- package/src/content/entry-commands.ts +16 -23
- package/src/content/entry-editor.ts +144 -101
- package/src/editor/canvas-slash-bridge.ts +2 -2
- package/src/editor/context-menu.ts +49 -200
- package/src/editor/convert-to-component.ts +42 -82
- package/src/editor/convert-to-repeater.ts +132 -173
- package/src/editor/inline-edit.ts +11 -0
- package/src/editor/shortcuts.ts +65 -26
- package/src/editor/slash-menu.ts +150 -157
- package/src/files/file-ops.ts +117 -11
- package/src/files/files.ts +949 -664
- package/src/files/json-layout.ts +474 -0
- package/src/files/media-paths.ts +13 -42
- package/src/files/media-usage.ts +41 -131
- package/src/files/serialize-document.ts +8 -1
- package/src/format/convert-file.ts +16 -10
- package/src/format/format-host.ts +50 -1
- package/src/github/github-auth.ts +71 -29
- package/src/github/github-publish.ts +57 -65
- package/src/grid/cell-editors.ts +46 -4
- package/src/grid/cell-popovers.ts +65 -62
- package/src/grid/grid-open.ts +86 -64
- package/src/grid/grid-panel.ts +390 -469
- package/src/grid/redirects-grid.ts +40 -44
- package/src/hosting/document.ts +2 -0
- package/src/hosting/layout.ts +10 -0
- package/src/i18n/i18n-commands.ts +127 -62
- package/src/media/media-pane.ts +83 -133
- package/src/new-project/add-repo-modal.ts +125 -176
- package/src/new-project/import-tab.ts +201 -250
- package/src/new-project/location-fields.ts +101 -165
- package/src/new-project/new-project-modal.ts +376 -367
- package/src/packages/jxsuite-update.ts +76 -18
- package/src/panels/activity-panel.ts +137 -104
- package/src/panels/ai-chat/chat-markdown.ts +15 -13
- package/src/panels/ai-chat/chat-view.ts +307 -472
- package/src/panels/ai-chat/composer.ts +175 -153
- package/src/panels/ai-chat/sessions-view.ts +31 -62
- package/src/panels/ai-panel.ts +210 -185
- package/src/panels/block-action-bar.ts +437 -643
- package/src/panels/bottom-dock.ts +112 -47
- package/src/panels/chat-panel.ts +19 -14
- package/src/panels/data-explorer.ts +141 -102
- package/src/panels/data-grid.ts +183 -150
- package/src/panels/dnd.ts +75 -20
- package/src/panels/editors.ts +26 -19
- package/src/panels/elements-panel.ts +243 -186
- package/src/panels/empty-state.ts +26 -42
- package/src/panels/events-panel.ts +950 -729
- package/src/panels/formula-workspace.ts +434 -207
- package/src/panels/frontmatter-fields.ts +185 -153
- package/src/panels/frontmatter-panel.ts +411 -187
- package/src/panels/git-diff-open.ts +148 -0
- package/src/panels/git-panel.ts +679 -605
- package/src/panels/head-panel.ts +617 -435
- package/src/panels/i18n-panel.ts +153 -133
- package/src/panels/imports-panel.ts +388 -414
- package/src/panels/jump-bar.ts +174 -147
- package/src/panels/layers-panel.ts +785 -671
- package/src/panels/left-panel.ts +166 -94
- package/src/panels/navigator-panels.ts +1 -1
- package/src/panels/pane-context.ts +529 -677
- package/src/panels/pane-grid.ts +265 -241
- package/src/panels/panel-registry.ts +15 -4
- package/src/panels/problems-panel.ts +177 -99
- package/src/panels/properties-panel.ts +1525 -966
- package/src/panels/provenance.ts +31 -113
- package/src/panels/quick-search.ts +217 -172
- package/src/panels/right-panel.ts +135 -169
- package/src/panels/seo-modal.ts +346 -167
- package/src/panels/settings-menu.ts +109 -646
- package/src/panels/settings-pane.ts +102 -86
- package/src/panels/signals-panel.ts +1318 -1172
- package/src/panels/statement-editor.ts +556 -428
- package/src/panels/style-panel.ts +1367 -630
- package/src/panels/style-utils.ts +36 -32
- package/src/panels/stylebook-doc.ts +30 -73
- package/src/panels/stylebook-layers-panel.ts +202 -109
- package/src/panels/stylebook-panel.ts +124 -88
- package/src/panels/tab-strip.ts +385 -287
- package/src/platforms/cloud.ts +347 -86
- package/src/platforms/devserver.ts +13 -0
- package/src/publish/deploy-checklist.ts +124 -78
- package/src/publish/publish-commands.ts +4 -12
- package/src/publish/publish-panel.ts +165 -299
- package/src/services/a11y-report.ts +100 -43
- package/src/services/ai-command-tools.ts +468 -0
- package/src/services/ai-import-tools.ts +50 -12
- package/src/services/ai-models.ts +108 -1
- package/src/services/ai-session-store.ts +6 -0
- package/src/services/ai-system-prompt.ts +110 -18
- package/src/services/ai-tools.ts +28 -143
- package/src/services/ai-write-report.ts +174 -0
- package/src/services/context-manager.ts +12 -1
- package/src/services/document-assistant.ts +50 -2
- package/src/services/idle.ts +16 -14
- package/src/services/live-surfaces.ts +237 -0
- package/src/services/model-uri.ts +75 -0
- package/src/services/notify.ts +63 -6
- package/src/services/popover-report.ts +325 -0
- package/src/services/surface-registry.ts +56 -0
- package/src/services/tool-executor.ts +17 -0
- package/src/settings/contexts-section.ts +301 -299
- package/src/settings/contributed-section.ts +361 -222
- package/src/settings/css-vars-editor.ts +320 -325
- package/src/settings/defs-editor.ts +572 -535
- package/src/settings/dependencies-editor.ts +79 -107
- package/src/settings/extension-commands.ts +379 -0
- package/src/settings/extension-rows.ts +113 -0
- package/src/settings/extensions-section.ts +287 -0
- package/src/settings/general-settings.ts +130 -181
- package/src/settings/head-editor.ts +10 -305
- package/src/settings/locales-section.ts +146 -196
- package/src/settings/preferences-accounts.ts +193 -12
- package/src/settings/preferences-dialog.ts +384 -307
- package/src/settings/project-sections.ts +108 -181
- package/src/settings/schema-field-ui.ts +11 -399
- package/src/settings/section-registry.ts +8 -1
- package/src/settings/settings-document.ts +31 -29
- package/src/shell/tree.ts +42 -87
- package/src/shell.ts +48 -36
- package/src/studio.ts +90 -67
- package/src/style/token-ref.ts +0 -39
- package/src/surfaces/about.json +263 -0
- package/src/surfaces/about.ts +163 -0
- package/src/surfaces/add-repo.json +486 -0
- package/src/surfaces/add-repo.ts +236 -0
- package/src/surfaces/ai-chat.json +2185 -0
- package/src/surfaces/ai-chat.ts +549 -0
- package/src/surfaces/ai-credentials-form.json +332 -0
- package/src/surfaces/ai-credentials-form.ts +151 -0
- package/src/surfaces/ai-managed-connect.json +108 -0
- package/src/surfaces/ai-managed-connect.ts +123 -0
- package/src/surfaces/ai-model-picker.json +114 -0
- package/src/surfaces/ai-model-picker.ts +139 -0
- package/src/surfaces/block-action-bar.json +640 -0
- package/src/surfaces/block-action-bar.ts +368 -0
- package/src/surfaces/bottom-dock.json +154 -0
- package/src/surfaces/bottom-dock.ts +125 -0
- package/src/surfaces/canvas-stage.json +444 -0
- package/src/surfaces/canvas-stage.ts +253 -0
- package/src/surfaces/cf-account-picker.json +300 -0
- package/src/surfaces/cf-account-picker.ts +214 -0
- package/src/surfaces/commandbar.json +984 -0
- package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +414 -389
- package/src/surfaces/convert-repeater.json +309 -0
- package/src/surfaces/convert-repeater.ts +276 -0
- package/src/surfaces/data-actions.json +157 -0
- package/src/surfaces/data-actions.ts +115 -0
- package/src/surfaces/dialog.json +289 -0
- package/src/surfaces/dialog.ts +343 -0
- package/src/surfaces/diff-toolbar.json +266 -0
- package/src/surfaces/diff-toolbar.ts +139 -0
- package/src/surfaces/doc-header.json +739 -0
- package/src/surfaces/doc-header.ts +223 -0
- package/src/surfaces/empty-state.json +152 -0
- package/src/surfaces/empty-state.ts +173 -0
- package/src/surfaces/entry-editor.json +281 -0
- package/src/surfaces/entry-editor.ts +191 -0
- package/src/surfaces/expression-editor.json +977 -0
- package/src/surfaces/expression-editor.ts +266 -0
- package/src/surfaces/files-panel.json +592 -0
- package/src/surfaces/files-panel.ts +301 -0
- package/src/surfaces/formula-palette.json +364 -0
- package/src/surfaces/formula-palette.ts +340 -0
- package/src/surfaces/git-panel.json +1822 -0
- package/src/surfaces/git-panel.ts +272 -0
- package/src/surfaces/github-auth.json +112 -0
- package/src/surfaces/github-auth.ts +139 -0
- package/src/surfaces/github-publish.json +206 -0
- package/src/surfaces/github-publish.ts +169 -0
- package/src/surfaces/grid-cell.json +218 -0
- package/src/surfaces/grid-cell.ts +120 -0
- package/src/surfaces/grid-open.json +147 -0
- package/src/surfaces/grid-open.ts +87 -0
- package/src/surfaces/grid-panel.json +706 -0
- package/src/surfaces/grid-panel.ts +206 -0
- package/src/surfaces/grid-replace.json +179 -0
- package/src/surfaces/grid-replace.ts +89 -0
- package/src/surfaces/grid-views.json +446 -0
- package/src/surfaces/grid-views.ts +172 -0
- package/src/surfaces/inspector-dock.json +187 -0
- package/src/surfaces/inspector-dock.ts +161 -0
- package/src/surfaces/jump-bar.json +243 -0
- package/src/surfaces/jump-bar.ts +129 -0
- package/src/surfaces/jxsuite-update.json +146 -0
- package/src/surfaces/jxsuite-update.ts +149 -0
- package/src/surfaces/library-pane.json +1509 -0
- package/src/surfaces/library-pane.ts +363 -0
- package/src/surfaces/logic-panel.json +1949 -0
- package/src/surfaces/logic-panel.ts +369 -0
- package/src/surfaces/logic-workspace.json +685 -0
- package/src/surfaces/logic-workspace.ts +238 -0
- package/src/surfaces/media-browser.json +303 -0
- package/src/surfaces/media-browser.ts +145 -0
- package/src/surfaces/media-field.json +163 -0
- package/src/surfaces/media-field.ts +116 -0
- package/src/surfaces/media-pane.json +513 -0
- package/src/surfaces/media-pane.ts +197 -0
- package/src/surfaces/menu.json +232 -0
- package/src/surfaces/menu.ts +375 -0
- package/src/surfaces/navigator-dock.json +113 -0
- package/src/surfaces/navigator-dock.ts +130 -0
- package/src/surfaces/new-project.json +1654 -0
- package/src/surfaces/new-project.ts +411 -0
- package/src/surfaces/palette.json +535 -0
- package/src/surfaces/pane-context.json +1497 -0
- package/src/surfaces/pane-context.ts +513 -0
- package/src/surfaces/pane-grid.json +188 -0
- package/src/surfaces/pane-grid.ts +250 -0
- package/src/surfaces/panel-activity.json +563 -0
- package/src/surfaces/panel-activity.ts +187 -0
- package/src/surfaces/panel-data.json +141 -0
- package/src/surfaces/panel-data.ts +156 -0
- package/src/surfaces/panel-deploy-checklist.json +283 -0
- package/src/surfaces/panel-deploy-checklist.ts +175 -0
- package/src/surfaces/panel-elements.json +367 -0
- package/src/surfaces/panel-elements.ts +175 -0
- package/src/surfaces/panel-i18n.json +569 -0
- package/src/surfaces/panel-i18n.ts +212 -0
- package/src/surfaces/panel-imports.json +780 -0
- package/src/surfaces/panel-imports.ts +209 -0
- package/src/surfaces/panel-outline.json +734 -0
- package/src/surfaces/panel-outline.ts +326 -0
- package/src/surfaces/panel-page.json +1017 -0
- package/src/surfaces/panel-page.ts +240 -0
- package/src/surfaces/panel-problems.json +497 -0
- package/src/surfaces/panel-problems.ts +157 -0
- package/src/surfaces/panel-signals.json +1973 -0
- package/src/surfaces/panel-signals.ts +436 -0
- package/src/surfaces/panel-stylebook-layers.json +317 -0
- package/src/surfaces/panel-stylebook-layers.ts +155 -0
- package/src/surfaces/preferences.json +850 -0
- package/src/surfaces/preferences.ts +332 -0
- package/src/surfaces/progress-modal.json +110 -0
- package/src/surfaces/progress-modal.ts +150 -0
- package/src/surfaces/properties-panel.json +1578 -0
- package/src/surfaces/properties-panel.ts +337 -0
- package/src/surfaces/publish.json +945 -0
- package/src/surfaces/publish.ts +392 -0
- package/src/surfaces/push-plan.json +110 -0
- package/src/surfaces/push-plan.ts +87 -0
- package/src/surfaces/rail.json +255 -0
- package/src/surfaces/rail.ts +206 -0
- package/src/surfaces/reference-field.json +191 -0
- package/src/surfaces/reference-field.ts +168 -0
- package/src/surfaces/schema-builder.json +1011 -0
- package/src/surfaces/schema-builder.ts +181 -0
- package/src/surfaces/schema-form.json +1013 -0
- package/src/surfaces/schema-form.ts +287 -0
- package/src/surfaces/secret-field.json +60 -0
- package/src/surfaces/secret-field.ts +146 -0
- package/src/surfaces/seo.json +932 -0
- package/src/surfaces/seo.ts +334 -0
- package/src/surfaces/settings-contexts.json +538 -0
- package/src/surfaces/settings-contexts.ts +196 -0
- package/src/surfaces/settings-contributed.json +489 -0
- package/src/surfaces/settings-contributed.ts +199 -0
- package/src/surfaces/settings-css-vars.json +820 -0
- package/src/surfaces/settings-css-vars.ts +199 -0
- package/src/surfaces/settings-defs.json +1363 -0
- package/src/surfaces/settings-defs.ts +232 -0
- package/src/surfaces/settings-deploy.json +108 -0
- package/src/surfaces/settings-deploy.ts +135 -0
- package/src/surfaces/settings-extensions.json +486 -0
- package/src/surfaces/settings-extensions.ts +201 -0
- package/src/surfaces/settings-head.json +779 -0
- package/src/surfaces/settings-head.ts +397 -0
- package/src/surfaces/settings-locales.json +420 -0
- package/src/surfaces/settings-locales.ts +137 -0
- package/src/surfaces/settings-overview.json +423 -0
- package/src/surfaces/settings-overview.ts +218 -0
- package/src/surfaces/settings-packages.json +549 -0
- package/src/surfaces/settings-packages.ts +158 -0
- package/src/surfaces/settings-pane.json +147 -0
- package/src/surfaces/settings-pane.ts +150 -0
- package/src/surfaces/settings-rawjson.json +104 -0
- package/src/surfaces/settings-rawjson.ts +107 -0
- package/src/surfaces/shell.json +99 -0
- package/src/surfaces/shell.ts +30 -0
- package/src/surfaces/slash-menu.json +180 -0
- package/src/surfaces/slash-menu.ts +272 -0
- package/src/surfaces/statements.json +607 -0
- package/src/surfaces/statements.ts +238 -0
- package/src/surfaces/statusbar.json +94 -0
- package/src/{panels → surfaces}/statusbar.ts +163 -90
- package/src/surfaces/style-panel.json +1643 -0
- package/src/surfaces/style-panel.ts +338 -0
- package/src/surfaces/stylebook-chrome.json +122 -0
- package/src/surfaces/stylebook-chrome.ts +122 -0
- package/src/surfaces/tab-strip.json +448 -0
- package/src/surfaces/tab-strip.ts +200 -0
- package/src/surfaces/target-line.json +419 -0
- package/src/surfaces/target-line.ts +349 -0
- package/src/surfaces/toasts.json +189 -0
- package/src/surfaces/welcome.json +571 -0
- package/src/surfaces/welcome.ts +338 -0
- package/src/tabs/project-config.ts +71 -15
- package/src/tabs/tab.ts +52 -1
- package/src/types.ts +49 -3
- package/src/ui/ai-credentials-form.ts +104 -100
- package/src/ui/ai-managed-connect.ts +116 -49
- package/src/ui/ai-model-picker.ts +102 -47
- package/src/ui/cf-account-picker.ts +135 -0
- package/src/ui/color-selector.ts +80 -301
- package/src/ui/dynamic-slot.ts +43 -283
- package/src/ui/expression-editor.ts +797 -576
- package/src/ui/field-input.ts +8 -181
- package/src/ui/form-controls.ts +838 -366
- package/src/ui/formula-chips.ts +80 -85
- package/src/ui/kit.ts +33 -0
- package/src/ui/layers.ts +293 -593
- package/src/ui/media-picker.ts +203 -284
- package/src/ui/panel-resize.ts +251 -64
- package/src/ui/popover-surface.ts +153 -0
- package/src/ui/progress-modal.ts +22 -60
- package/src/ui/regions.ts +13 -7
- package/src/ui/schema-form.ts +906 -440
- package/src/ui/surface.ts +122 -0
- package/src/ui/unit-selector.ts +15 -131
- package/src/ui/value-source.ts +14 -0
- package/src/ui/virtual-window.ts +88 -9
- package/src/utils/canvas-media.ts +72 -0
- package/src/utils/edit-display.ts +7 -2
- package/src/utils/element-selectors.ts +69 -0
- package/src/utils/link-target.ts +2 -2
- package/src/utils/studio-utils.ts +0 -10
- package/src/view.ts +15 -0
- package/src/workspace/pane-derive.ts +36 -14
- package/src/workspace/workspace.ts +15 -6
- package/styles/canvas.css +72 -467
- package/styles/forced-colors.css +48 -82
- package/styles/forced-colors.json +41 -0
- package/styles/inspector.css +2 -1301
- package/styles/overlays.css +96 -2823
- package/styles/panels.css +6 -1423
- package/styles/shell-frame.css +272 -0
- package/styles/shell-frame.json +227 -0
- package/styles/shell.css +0 -1532
- package/styles/tokens.css +65 -136
- package/styles/tokens.json +84 -0
- package/dist/chunks/Overlay.dev-723bv0df.js +0 -23
- package/dist/chunks/adapter-jkcyhgtr.js +0 -14
- package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
- package/dist/chunks/components-zmx10t62.js +0 -21
- package/dist/chunks/content-source-t88vb2dr.js +0 -49
- package/dist/chunks/convert-to-repeater-dhw1nrz9.js +0 -268
- package/dist/chunks/editor-cptq5jp1.js +0 -37
- package/dist/chunks/entry-commands-6z6bhxg0.js +0 -46
- package/dist/chunks/extension-sections-3ydgjbdy.js +0 -311
- package/dist/chunks/file-ops-rskmhxyq.js +0 -48
- package/dist/chunks/files-0cratsr0.js +0 -92
- package/dist/chunks/flow-qbfgrpeh.js +0 -634
- package/dist/chunks/focus-trap.esm-ggawf1hy.js +0 -1024
- package/dist/chunks/focus-visible-6eg70z18.js +0 -167
- package/dist/chunks/format-host-tgcmfs4p.js +0 -43
- package/dist/chunks/fs-events-hrrg328g.js +0 -21
- package/dist/chunks/git-panel-0yywyk76.js +0 -58
- package/dist/chunks/index-zqxmqxmh.js +0 -109
- package/dist/chunks/jx-validate-8q2g05x1.js +0 -19
- package/dist/chunks/layers-panel-z3tqe5cd.js +0 -67
- package/dist/chunks/layers-q75tj2mf.js +0 -45
- package/dist/chunks/lit-html-j055mkh8.js +0 -22
- package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
- package/dist/chunks/notify-yjm79n4s.js +0 -30
- package/dist/chunks/parse-24d0gay3.js +0 -19
- package/dist/chunks/platform-ba1j1gbh.js +0 -16
- package/dist/chunks/publish-panel-54jvhskq.js +0 -28
- package/dist/chunks/quick-search-cgfmjwq5.js +0 -65
- package/dist/chunks/references-3qx8fkyp.js +0 -29
- package/dist/chunks/right-panel-cqp8bc4v.js +0 -46
- package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
- package/dist/chunks/sp-overlay.dev-yztmtrs1.js +0 -18
- package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
- package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
- package/dist/chunks/sp-tooltip.dev-xcvpnqr0.js +0 -15
- package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
- package/dist/chunks/studio-0a5qrh01.js +0 -3
- package/dist/chunks/studio-18j3bmcz.js +0 -14
- package/dist/chunks/studio-1hbqnt19.js +0 -1823
- package/dist/chunks/studio-4rzyrtjz.js +0 -426
- package/dist/chunks/studio-5rywrkxz.js +0 -1903
- package/dist/chunks/studio-7afd21nw.js +0 -67
- package/dist/chunks/studio-7nte2hj4.js +0 -613
- package/dist/chunks/studio-8jpzqk5s.js +0 -128
- package/dist/chunks/studio-8q517dfr.js +0 -24
- package/dist/chunks/studio-9c4k4vhv.js +0 -357
- package/dist/chunks/studio-9n4mrmnb.js +0 -184
- package/dist/chunks/studio-a0tswy0w.js +0 -58
- package/dist/chunks/studio-ahjfdy6e.js +0 -387
- package/dist/chunks/studio-ahnzd9rg.js +0 -23
- package/dist/chunks/studio-bw5dz6km.js +0 -608
- package/dist/chunks/studio-cb12yz9w.js +0 -15055
- package/dist/chunks/studio-d1ks410h.js +0 -175
- package/dist/chunks/studio-eqq1w638.js +0 -113
- package/dist/chunks/studio-ex8zyp98.js +0 -1813
- package/dist/chunks/studio-h4rxscfc.js +0 -10
- package/dist/chunks/studio-kyh9avvv.js +0 -28
- package/dist/chunks/studio-kyk2v92a.js +0 -659
- package/dist/chunks/studio-m3hwn7y1.js +0 -120
- package/dist/chunks/studio-mmv72a27.js +0 -4344
- package/dist/chunks/studio-n8b9wqwy.js +0 -291
- package/dist/chunks/studio-pdfjntbk.js +0 -6939
- package/dist/chunks/studio-qq6jym04.js +0 -53
- package/dist/chunks/studio-r1r7afxx.js +0 -1066
- package/dist/chunks/studio-rdx8jcxy.js +0 -83
- package/dist/chunks/studio-rn9ta2mz.js +0 -111
- package/dist/chunks/studio-t7qb9db8.js +0 -665
- package/dist/chunks/studio-tmc5emrw.js +0 -8
- package/dist/chunks/studio-txwkm6p9.js +0 -12
- package/dist/chunks/studio-v38hmvx1.js +0 -390
- package/dist/chunks/studio-vadzgkrz.js +0 -318
- package/dist/chunks/studio-wx5609xd.js +0 -341
- package/dist/chunks/studio-z6nw2ek2.js +0 -18
- package/dist/chunks/studio-zczps70q.js +0 -378
- package/dist/chunks/workspace-xpres40v.js +0 -89
- package/src/panels/activity-bar.ts +0 -251
- package/src/panels/panel-scheduler.ts +0 -219
- package/src/panels/style-inputs.ts +0 -237
- package/src/panels/target-line.ts +0 -274
- package/src/panels/welcome-screen.ts +0 -346
- package/src/ui/button-group.ts +0 -102
- package/src/ui/choice-field.ts +0 -72
- package/src/ui/field-row.ts +0 -249
- package/src/ui/formula-palette.ts +0 -213
- package/src/ui/icons.ts +0 -52
- package/src/ui/jx-theme.ts +0 -130
- package/src/ui/spectrum.ts +0 -340
- package/src/ui/value-selector.ts +0 -174
- package/src/ui/widgets.ts +0 -172
- /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
- /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
- /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
- /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The Inspector's Content tab as a mounted document.
|
|
4
|
+
*
|
|
5
|
+
* `panels/properties-panel.ts` is the flow — which attributes apply to this tag, which cascade a
|
|
6
|
+
* value came from, which rung of the value ladder the position permits, what a keystroke is worth
|
|
7
|
+
* and what a commit writes — and this is the surface it draws into. Nothing here knows what an
|
|
8
|
+
* attribute is, what a component prop is, or that a `$ref` is a binding: the scope is a list of
|
|
9
|
+
* sections whose every row is already decided.
|
|
10
|
+
*
|
|
11
|
+
* **One row vocabulary, five shapes.** A section's body is a single list, and each entry names the
|
|
12
|
+
* shape it is drawn as — a `field` (label, provenance chip, value-source chip, control, error), a
|
|
13
|
+
* `kv` pair, a `note` sentence, an `action` link, or a `file` the Usage list offers to open. The
|
|
14
|
+
* densest surface in the application had five hand-written row templates that differed in their
|
|
15
|
+
* markup and agreed about nothing; they differ now in one string.
|
|
16
|
+
*
|
|
17
|
+
* **`data-prop` is load-bearing and stays exactly as it was.** `ui/regions.ts` resolves
|
|
18
|
+
* `inspector/field:<prop>` by finding `[data-prop]` inside the Inspector, and the screenshot
|
|
19
|
+
* manifest has addressed the `href` row through it since the region grammar landed. A row emits it
|
|
20
|
+
* whatever shape it is drawn as.
|
|
21
|
+
*
|
|
22
|
+
* **A control host is announced, never queried.** Three leaves are drawn by somebody else — the
|
|
23
|
+
* media picker, the colour selector and the expression editor, each of which is its own surface
|
|
24
|
+
* with its own readers elsewhere — so the document draws an empty `[part="control-host"]` for them
|
|
25
|
+
* and the flow fills it, which is the seam `ui/schema-form.ts` established for a registered
|
|
26
|
+
* control. The runtime reports the host through `onNodeCreated` as it is created, so the flow holds
|
|
27
|
+
* the element rather than re-finding it by selector on every repaint. TWO of the three are still
|
|
28
|
+
* lit; the media picker is a document mounted into the same box, which is why the seam hands over
|
|
29
|
+
* the HOST rather than taking a template back.
|
|
30
|
+
*
|
|
31
|
+
* @docs studio/design/properties
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
import { reactive } from "../reactivity";
|
|
35
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
36
|
+
import propertiesPanelDoc from "./properties-panel.json";
|
|
37
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
38
|
+
import type { JxScope } from "@jxsuite/runtime/types";
|
|
39
|
+
import type { JxDocument, JxElement } from "@jxsuite/schema/types";
|
|
40
|
+
|
|
41
|
+
registerSurface("properties-panel", propertiesPanelDoc as unknown as JxDocument);
|
|
42
|
+
|
|
43
|
+
/** Which control a `field` row draws. The flow picks it; the document switches on it. */
|
|
44
|
+
export type ContentFieldKind =
|
|
45
|
+
| "text"
|
|
46
|
+
| "textarea"
|
|
47
|
+
| "checkbox"
|
|
48
|
+
| "number"
|
|
49
|
+
| "select"
|
|
50
|
+
| "link"
|
|
51
|
+
| "color"
|
|
52
|
+
| "control";
|
|
53
|
+
|
|
54
|
+
/** What a row is drawn as. Everything a section body can hold is one of these. */
|
|
55
|
+
export type ContentRowShape = "field" | "kv" | "note" | "action" | "file";
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* One colour the project has named, as a `color` row's palette draws it.
|
|
59
|
+
*
|
|
60
|
+
* The same three fields the Style tab projects, and for the same reason: `value` is the reference a
|
|
61
|
+
* click commits, `color` is only how it reads on screen, and `label` is what a reader hears.
|
|
62
|
+
*/
|
|
63
|
+
export interface ContentTokenView extends Record<string, unknown> {
|
|
64
|
+
value: string;
|
|
65
|
+
color: string;
|
|
66
|
+
label: string;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** A choice a select offers, in the shape the kit's select reads. */
|
|
70
|
+
export interface ContentOption {
|
|
71
|
+
value: string;
|
|
72
|
+
label: string;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* One row of a section — every field already decided, whatever shape it is.
|
|
77
|
+
*
|
|
78
|
+
* Fields that belong to another shape are still present and empty, because a document branches on a
|
|
79
|
+
* flag and never on the presence of a key.
|
|
80
|
+
*/
|
|
81
|
+
export interface ContentRowView {
|
|
82
|
+
/** The row's reconcile identity AND what every callback hands back. */
|
|
83
|
+
key: string;
|
|
84
|
+
shape: ContentRowShape;
|
|
85
|
+
/** `data-prop` — what `inspector/field:<prop>` addresses. Every shape carries one. */
|
|
86
|
+
prop: string;
|
|
87
|
+
/** The visible label of a `field`; the accessible name of a `kv` pair's controls. */
|
|
88
|
+
label: string;
|
|
89
|
+
kind: ContentFieldKind;
|
|
90
|
+
/** The value as the control reads it — a string for every kind but `checkbox`. */
|
|
91
|
+
value: string;
|
|
92
|
+
/**
|
|
93
|
+
* A `color` row whose value is a token reference: the literal behind it, so the field's chip can
|
|
94
|
+
* draw a colour this page cannot resolve. Empty on every other row and for a literal value.
|
|
95
|
+
*/
|
|
96
|
+
resolved: string;
|
|
97
|
+
checked: boolean;
|
|
98
|
+
placeholder: string;
|
|
99
|
+
/** Draw the text control monospaced — a template, a pointer, a code-ish value. */
|
|
100
|
+
mono: boolean;
|
|
101
|
+
/** Choices for `select`; the routes or the popover ids for a `link`'s value half. */
|
|
102
|
+
options: ContentOption[];
|
|
103
|
+
/** The palette a `color` row offers inside its picker, and whether it has one to offer. */
|
|
104
|
+
tokens: ContentTokenView[];
|
|
105
|
+
hasTokens: boolean;
|
|
106
|
+
/**
|
|
107
|
+
* The provenance chip's shape: `""` draws nothing (§6.2's `default` state, where absence IS the
|
|
108
|
+
* ghost), `dot` is the 6px accent dot that clears the value, `text` states a donor without
|
|
109
|
+
* offering to go there, and `press` states one and opens it.
|
|
110
|
+
*/
|
|
111
|
+
chip: "" | "dot" | "text" | "press";
|
|
112
|
+
/** `set` / `inherited` / `bound` / `mixed` — the chip's colour, as an attribute to style on. */
|
|
113
|
+
chipState: string;
|
|
114
|
+
chipText: string;
|
|
115
|
+
chipTitle: string;
|
|
116
|
+
/** Whether the value ladder is on offer at this position at all. */
|
|
117
|
+
hasSource: boolean;
|
|
118
|
+
/** The rung's name in the ladder's own vocabulary — "Fixed value", "From data…". */
|
|
119
|
+
sourceLabel: string;
|
|
120
|
+
/** The chip's accessible name and its tooltip. */
|
|
121
|
+
sourceName: string;
|
|
122
|
+
/** The position permits exactly one rung, so the chip states it and refuses to open. */
|
|
123
|
+
sourceLocked: boolean;
|
|
124
|
+
/** `"bound"` once the value is produced from something else; `"fixed"` while it is typed. */
|
|
125
|
+
source: string;
|
|
126
|
+
/** A `link` row's kind half: the chosen kind, and the five it chooses between. */
|
|
127
|
+
linkKind: string;
|
|
128
|
+
kindOptions: ContentOption[];
|
|
129
|
+
/** `route` draws a picker of the site's own routes; `text` draws a field. */
|
|
130
|
+
linkValueKind: string;
|
|
131
|
+
/** A `kv` pair's key cell, and the remove button's accessible name. */
|
|
132
|
+
name: string;
|
|
133
|
+
removeLabel: string;
|
|
134
|
+
/** A `note`'s sentence, an `action`'s label, a `file`'s path. */
|
|
135
|
+
text: string;
|
|
136
|
+
/** A `file`'s reference count, drawn hard right. */
|
|
137
|
+
detail: string;
|
|
138
|
+
/** A `file`'s tooltip: which references, and how many of each. */
|
|
139
|
+
title: string;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** One accordion section: a heading, a disclosure state, a tally dot, and its rows. */
|
|
143
|
+
export interface ContentSectionView {
|
|
144
|
+
/** The section key — its reconcile identity and what `inspector.setSection` addresses. */
|
|
145
|
+
key: string;
|
|
146
|
+
label: string;
|
|
147
|
+
open: boolean;
|
|
148
|
+
/** Whether anything in this section is set, so a closed section still says so (§6.2). */
|
|
149
|
+
hasDot: boolean;
|
|
150
|
+
dotTitle: string;
|
|
151
|
+
rows: ContentRowView[];
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/** A button an empty state offers — the action that fills the region. */
|
|
155
|
+
export interface ContentEmptyAction {
|
|
156
|
+
id: string;
|
|
157
|
+
label: string;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** Everything the document reads. */
|
|
161
|
+
export interface ContentPanelView {
|
|
162
|
+
/**
|
|
163
|
+
* Which of the three things the tab is showing: nothing it can edit, a layout element it may only
|
|
164
|
+
* describe, or the element's own sections.
|
|
165
|
+
*/
|
|
166
|
+
view: "empty" | "layout" | "content";
|
|
167
|
+
/** The empty state's own words (`panels/empty-state.ts`'s copy rules, drawn here). */
|
|
168
|
+
emptyMessage: string;
|
|
169
|
+
emptyDetail: string;
|
|
170
|
+
hasEmptyDetail: boolean;
|
|
171
|
+
emptyActions: ContentEmptyAction[];
|
|
172
|
+
hasEmptyActions: boolean;
|
|
173
|
+
/** The layout card: the tag clicked, its class, the file it came from. */
|
|
174
|
+
layoutTag: string;
|
|
175
|
+
layoutClass: string;
|
|
176
|
+
layoutHasClass: boolean;
|
|
177
|
+
layoutNote: string;
|
|
178
|
+
/** Whether `pane.derive` can run from the focused pane; a chip that cannot act is not drawn. */
|
|
179
|
+
layoutCanOpen: boolean;
|
|
180
|
+
sections: ContentSectionView[];
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** What a control can ask the panel to do. Every one of them is a decision the flow owns. */
|
|
184
|
+
export interface ContentPanelActions {
|
|
185
|
+
/** A keystroke in a text control: the flow drafts and debounces. */
|
|
186
|
+
edit: (key: string, value: string) => void;
|
|
187
|
+
/** A committed value — a change event, a picked option, a blur. */
|
|
188
|
+
commit: (key: string, value: string) => void;
|
|
189
|
+
commitChecked: (key: string, checked: boolean) => void;
|
|
190
|
+
/** A `link` row's kind half, which reinterprets the current value under the new kind. */
|
|
191
|
+
commitKind: (key: string, kind: string) => void;
|
|
192
|
+
/** Open the value-source picker over the chip that was clicked. */
|
|
193
|
+
pickSource: (key: string, anchor: HTMLElement) => void;
|
|
194
|
+
/** The provenance chip: clear, jump to the donor, or open the source. */
|
|
195
|
+
chipAction: (key: string) => void;
|
|
196
|
+
/** A `kv` pair's two cells and its remove button. */
|
|
197
|
+
editName: (key: string, name: string) => void;
|
|
198
|
+
editValue: (key: string, value: string) => void;
|
|
199
|
+
removeRow: (key: string) => void;
|
|
200
|
+
/** An `action` row, and a `file` row. */
|
|
201
|
+
runAction: (key: string) => void;
|
|
202
|
+
openFile: (key: string) => void;
|
|
203
|
+
/** An empty state's button. */
|
|
204
|
+
runEmptyAction: (id: string) => void;
|
|
205
|
+
/** A section's disclosure, from the accordion's own toggle. */
|
|
206
|
+
setSection: (key: string, open: boolean) => void;
|
|
207
|
+
/** The layout card's one chip. */
|
|
208
|
+
openLayout: () => void;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export interface ContentPanelSurface {
|
|
212
|
+
/** Bring the standing document up to date with a whole projection. */
|
|
213
|
+
readonly update: (view: ContentPanelView) => void;
|
|
214
|
+
/** Take the document down. Idempotent. */
|
|
215
|
+
readonly dispose: () => void;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/** A control host the document drew, reported as the runtime created it. */
|
|
219
|
+
export type ContentControlSink = (key: string, host: HTMLElement) => void;
|
|
220
|
+
|
|
221
|
+
interface ContentPanelScope
|
|
222
|
+
extends Record<string, unknown>, ContentPanelView, ContentPanelActions {}
|
|
223
|
+
|
|
224
|
+
/** The scope's starting shape, before the first projection lands on it. */
|
|
225
|
+
export function emptyContentView(): ContentPanelView {
|
|
226
|
+
return {
|
|
227
|
+
emptyActions: [],
|
|
228
|
+
emptyDetail: "",
|
|
229
|
+
emptyMessage: "",
|
|
230
|
+
hasEmptyActions: false,
|
|
231
|
+
hasEmptyDetail: false,
|
|
232
|
+
layoutCanOpen: false,
|
|
233
|
+
layoutClass: "",
|
|
234
|
+
layoutHasClass: false,
|
|
235
|
+
layoutNote: "",
|
|
236
|
+
layoutTag: "element",
|
|
237
|
+
sections: [],
|
|
238
|
+
view: "empty",
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** Write a projection into the scope. Assignment by assignment, so an unchanged field is inert. */
|
|
243
|
+
function project(scope: ContentPanelScope, values: ContentPanelView): void {
|
|
244
|
+
scope.view = values.view;
|
|
245
|
+
scope.emptyMessage = values.emptyMessage;
|
|
246
|
+
scope.emptyDetail = values.emptyDetail;
|
|
247
|
+
scope.hasEmptyDetail = values.hasEmptyDetail;
|
|
248
|
+
scope.emptyActions = values.emptyActions;
|
|
249
|
+
scope.hasEmptyActions = values.hasEmptyActions;
|
|
250
|
+
scope.layoutTag = values.layoutTag;
|
|
251
|
+
scope.layoutClass = values.layoutClass;
|
|
252
|
+
scope.layoutHasClass = values.layoutHasClass;
|
|
253
|
+
scope.layoutNote = values.layoutNote;
|
|
254
|
+
scope.layoutCanOpen = values.layoutCanOpen;
|
|
255
|
+
scope.sections = values.sections;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* The row a control host belongs to, read out of the node's own `$map` scope.
|
|
260
|
+
*
|
|
261
|
+
* Off the scope rather than off the element, because `onNodeCreated` fires BEFORE the runtime
|
|
262
|
+
* applies attributes — so a node that has just been created carries neither its `part` nor any
|
|
263
|
+
* `data-` of its own yet, and a check on either answers no for exactly the node that needs filling.
|
|
264
|
+
* The same reasoning, and the same shape, as `surfaces/schema-form.ts`.
|
|
265
|
+
*/
|
|
266
|
+
function controlKeyOf(part: string, state: JxScope | undefined): string {
|
|
267
|
+
if (part !== "control-host") {
|
|
268
|
+
return "";
|
|
269
|
+
}
|
|
270
|
+
const item = (state?.["$map"] as { item?: Record<string, unknown> } | undefined)?.item;
|
|
271
|
+
const key = item?.["key"];
|
|
272
|
+
return typeof key === "string" ? key : "";
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/** A node definition's `part`, as written in the document. */
|
|
276
|
+
function partOf(def: JxElement | string): string {
|
|
277
|
+
const part = typeof def === "string" ? undefined : def.attributes?.["part"];
|
|
278
|
+
return typeof part === "string" ? part : "";
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Mount the Content tab's document into the container the Inspector owns.
|
|
283
|
+
*
|
|
284
|
+
* The container is the tab's own body and nothing else renders into it, so the document is free to
|
|
285
|
+
* clear it — which is the difference between this seam and a Navigator panel's, where lit's comment
|
|
286
|
+
* markers have to survive. `panels/right-panel.ts` hands it over once, for the life of the window.
|
|
287
|
+
*
|
|
288
|
+
* @param container The Inspector's `properties` tab body.
|
|
289
|
+
* @param values The projection to begin with.
|
|
290
|
+
* @param actions What each control does.
|
|
291
|
+
* @param onControlHost Called for every lit-owned control host the document draws, as it is drawn.
|
|
292
|
+
*/
|
|
293
|
+
export function mountContentSurface(
|
|
294
|
+
container: HTMLElement,
|
|
295
|
+
values: ContentPanelView,
|
|
296
|
+
actions: ContentPanelActions,
|
|
297
|
+
onControlHost: ContentControlSink,
|
|
298
|
+
): ContentPanelSurface {
|
|
299
|
+
const scope = reactive<ContentPanelScope>({
|
|
300
|
+
...emptyContentView(),
|
|
301
|
+
...actions,
|
|
302
|
+
}) as ContentPanelScope;
|
|
303
|
+
project(scope, values);
|
|
304
|
+
|
|
305
|
+
let mounted: SurfaceHandle | null = null;
|
|
306
|
+
let disposed = false;
|
|
307
|
+
void mountSurface("properties-panel", scope, container, {
|
|
308
|
+
onNodeCreated: (element, _path, def, state) => {
|
|
309
|
+
if (!(element instanceof HTMLElement)) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
const key = controlKeyOf(partOf(def), state);
|
|
313
|
+
if (key !== "") {
|
|
314
|
+
onControlHost(key, element);
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
}).then((surface) => {
|
|
318
|
+
if (disposed) {
|
|
319
|
+
surface.dispose();
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
mounted = surface;
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
return {
|
|
326
|
+
dispose() {
|
|
327
|
+
disposed = true;
|
|
328
|
+
mounted?.dispose();
|
|
329
|
+
mounted = null;
|
|
330
|
+
},
|
|
331
|
+
update(next) {
|
|
332
|
+
if (!disposed) {
|
|
333
|
+
project(scope, next);
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
};
|
|
337
|
+
}
|