@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,281 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
|
+
"$id": "StudioEntryEditor",
|
|
4
|
+
"$description": "The Entry editor (§7.4) — one content entry's fields, in a pane, as a Jx document over the kit. The adapter (`surfaces/entry-editor.ts`) hands in a projection; `content/entry-editor.ts` decides everything in it — which collection the file belongs to, which record its fields live in, which required keys are absent and what a draft flag commits into. The FORM is an island: a schema is `ui/schema-form.ts`'s subject, so this document renders an empty `fields` node and the flow places the element that engine hands back (studio-ui-guidelines.md §9.3, §9.4). That is the whole of the difference between this and the card the lit version drew, and it is why the engine converting in batch 7 is what unblocked this one.",
|
|
5
|
+
"tagName": "div",
|
|
6
|
+
"attributes": {
|
|
7
|
+
"part": "entry",
|
|
8
|
+
"data-jx-region": "${state.region}"
|
|
9
|
+
},
|
|
10
|
+
"style": {
|
|
11
|
+
"$description": "What `.entry-editor`, `.entry-editor-header`, `.entry-editor-collection`, `.entry-draft-switch`, `.entry-editor-fields`, `.entry-editor-note` and `.entry-editor-empty` said in `styles/overlays.css`, keyed on `part` and re-pointed at the studio token layer. This editor was the only emitter of all seven, so those rules are dead in the stylesheet from here; a central sweep removes them rather than this change, which owns no stylesheet. Every `--spectrum-font-size-*` reference is gone rather than renamed: those names resolve only inside `<sp-theme>`, and a pane editor is mounted outside it, so each would silently have taken its hard-coded fallback.",
|
|
12
|
+
"height": "100%",
|
|
13
|
+
"padding": "var(--jx-space-5)",
|
|
14
|
+
"overflowY": "auto",
|
|
15
|
+
"background": "var(--bg-panel)",
|
|
16
|
+
"& [part=\"header\"]": {
|
|
17
|
+
"display": "flex",
|
|
18
|
+
"alignItems": "center",
|
|
19
|
+
"gap": "var(--jx-space-4)",
|
|
20
|
+
"marginBottom": "var(--jx-space-5)"
|
|
21
|
+
},
|
|
22
|
+
"& [part=\"name\"]": {
|
|
23
|
+
"margin": "0",
|
|
24
|
+
"fontSize": "var(--jx-text-lg)",
|
|
25
|
+
"fontWeight": "600",
|
|
26
|
+
"color": "var(--fg)"
|
|
27
|
+
},
|
|
28
|
+
"& [part=\"collection\"]": {
|
|
29
|
+
"padding": "1px var(--jx-space-3)",
|
|
30
|
+
"borderRadius": "var(--radius)",
|
|
31
|
+
"background": "var(--bg)",
|
|
32
|
+
"color": "var(--fg-dim)",
|
|
33
|
+
"fontSize": "var(--jx-text-sm)"
|
|
34
|
+
},
|
|
35
|
+
"& [part=\"draft\"]": {
|
|
36
|
+
"$description": "Pushed to the far end of the header rather than placed there: the heading and the collection chip are both content-width, so `margin-left: auto` is what keeps the switch on the right edge whatever the entry is called.",
|
|
37
|
+
"marginLeft": "auto"
|
|
38
|
+
},
|
|
39
|
+
"& [part=\"fields\"]": {
|
|
40
|
+
"$description": "The schema form's host is `display: contents`, so its rows are the flex items of THIS box — which is why the column lives here and not inside the engine.",
|
|
41
|
+
"display": "flex",
|
|
42
|
+
"flexDirection": "column"
|
|
43
|
+
},
|
|
44
|
+
"& [part=\"note\"]": {
|
|
45
|
+
"margin": "0 0 var(--jx-space-4)",
|
|
46
|
+
"color": "var(--fg-dim)",
|
|
47
|
+
"fontSize": "var(--jx-text-md)",
|
|
48
|
+
"lineHeight": "1.5"
|
|
49
|
+
},
|
|
50
|
+
"& [part=\"empty\"]": {
|
|
51
|
+
"display": "flex",
|
|
52
|
+
"maxWidth": "46ch",
|
|
53
|
+
"flexDirection": "column",
|
|
54
|
+
"alignItems": "flex-start",
|
|
55
|
+
"gap": "var(--jx-space-3)",
|
|
56
|
+
"color": "var(--fg-dim)",
|
|
57
|
+
"fontSize": "var(--jx-text-md)",
|
|
58
|
+
"lineHeight": "1.5"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"children": [
|
|
62
|
+
{
|
|
63
|
+
"tagName": "div",
|
|
64
|
+
"attributes": {
|
|
65
|
+
"part": "stage-slot",
|
|
66
|
+
"role": "none"
|
|
67
|
+
},
|
|
68
|
+
"style": {
|
|
69
|
+
"display": "contents"
|
|
70
|
+
},
|
|
71
|
+
"$switch": {
|
|
72
|
+
"$ref": "#/state/stage"
|
|
73
|
+
},
|
|
74
|
+
"cases": {
|
|
75
|
+
"entry": {
|
|
76
|
+
"tagName": "div",
|
|
77
|
+
"attributes": {
|
|
78
|
+
"part": "body",
|
|
79
|
+
"role": "none"
|
|
80
|
+
},
|
|
81
|
+
"style": {
|
|
82
|
+
"display": "contents"
|
|
83
|
+
},
|
|
84
|
+
"children": [
|
|
85
|
+
{
|
|
86
|
+
"tagName": "div",
|
|
87
|
+
"attributes": {
|
|
88
|
+
"part": "header"
|
|
89
|
+
},
|
|
90
|
+
"children": [
|
|
91
|
+
{
|
|
92
|
+
"tagName": "h3",
|
|
93
|
+
"attributes": {
|
|
94
|
+
"part": "name"
|
|
95
|
+
},
|
|
96
|
+
"textContent": "${state.name}"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"tagName": "span",
|
|
100
|
+
"attributes": {
|
|
101
|
+
"part": "collection"
|
|
102
|
+
},
|
|
103
|
+
"textContent": "${state.collection}"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"tagName": "div",
|
|
107
|
+
"attributes": {
|
|
108
|
+
"part": "draft-slot",
|
|
109
|
+
"role": "none"
|
|
110
|
+
},
|
|
111
|
+
"style": {
|
|
112
|
+
"display": "contents"
|
|
113
|
+
},
|
|
114
|
+
"$switch": {
|
|
115
|
+
"$ref": "#/state/draftAxis"
|
|
116
|
+
},
|
|
117
|
+
"cases": {
|
|
118
|
+
"shown": {
|
|
119
|
+
"$description": "No `label`: the slotted word is on screen and carries the name, so an aria-label would be read twice. The tooltip is `hint`, which is what DRAFT_MEANING has always been.",
|
|
120
|
+
"tagName": "jx-switch",
|
|
121
|
+
"attributes": {
|
|
122
|
+
"part": "draft"
|
|
123
|
+
},
|
|
124
|
+
"$props": {
|
|
125
|
+
"checked": {
|
|
126
|
+
"$ref": "#/state/draft"
|
|
127
|
+
},
|
|
128
|
+
"hint": "${state.draftHint}",
|
|
129
|
+
"size": "sm"
|
|
130
|
+
},
|
|
131
|
+
"onchange": {
|
|
132
|
+
"$prototype": "Function",
|
|
133
|
+
"body": [
|
|
134
|
+
{
|
|
135
|
+
"operator": "call",
|
|
136
|
+
"target": {
|
|
137
|
+
"$ref": "#/state/setDraft"
|
|
138
|
+
},
|
|
139
|
+
"value": [
|
|
140
|
+
{
|
|
141
|
+
"$ref": "event#/target/checked"
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
]
|
|
146
|
+
},
|
|
147
|
+
"children": [
|
|
148
|
+
{
|
|
149
|
+
"tagName": "span",
|
|
150
|
+
"textContent": "Draft"
|
|
151
|
+
}
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"tagName": "div",
|
|
160
|
+
"attributes": {
|
|
161
|
+
"part": "note-slot",
|
|
162
|
+
"role": "none"
|
|
163
|
+
},
|
|
164
|
+
"style": {
|
|
165
|
+
"display": "contents"
|
|
166
|
+
},
|
|
167
|
+
"$switch": {
|
|
168
|
+
"$ref": "#/state/noteState"
|
|
169
|
+
},
|
|
170
|
+
"cases": {
|
|
171
|
+
"shown": {
|
|
172
|
+
"tagName": "p",
|
|
173
|
+
"attributes": {
|
|
174
|
+
"part": "note"
|
|
175
|
+
},
|
|
176
|
+
"textContent": "${state.note}"
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"$description": "An island: `ui/schema-form.ts` draws this entry's fields into this node, and nothing in this document knows what a schema is.",
|
|
182
|
+
"tagName": "div",
|
|
183
|
+
"attributes": {
|
|
184
|
+
"part": "fields",
|
|
185
|
+
"data-jx-region": "${state.fieldsRegion}"
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
"empty": {
|
|
191
|
+
"$description": "The mode is reachable from the palette and from `__jxAutomation` on any tab, so this state is real: it names the reason and the fix rather than drawing an empty form.",
|
|
192
|
+
"tagName": "div",
|
|
193
|
+
"attributes": {
|
|
194
|
+
"part": "empty"
|
|
195
|
+
},
|
|
196
|
+
"children": [
|
|
197
|
+
{
|
|
198
|
+
"tagName": "p",
|
|
199
|
+
"attributes": {
|
|
200
|
+
"part": "empty-line"
|
|
201
|
+
},
|
|
202
|
+
"textContent": "${state.emptyLine}"
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"tagName": "p",
|
|
206
|
+
"attributes": {
|
|
207
|
+
"part": "note"
|
|
208
|
+
},
|
|
209
|
+
"children": [
|
|
210
|
+
{
|
|
211
|
+
"tagName": "span",
|
|
212
|
+
"textContent": "A collection is a "
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"tagName": "code",
|
|
216
|
+
"textContent": "content"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"tagName": "span",
|
|
220
|
+
"textContent": " entry in "
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"tagName": "code",
|
|
224
|
+
"textContent": "project.json"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"tagName": "span",
|
|
228
|
+
"textContent": " whose "
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"tagName": "code",
|
|
232
|
+
"textContent": "source"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"tagName": "span",
|
|
236
|
+
"textContent": " directory contains this file and which declares a "
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"tagName": "code",
|
|
240
|
+
"textContent": "schema"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"tagName": "span",
|
|
244
|
+
"textContent": "."
|
|
245
|
+
}
|
|
246
|
+
]
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"tagName": "jx-action-button",
|
|
250
|
+
"attributes": {
|
|
251
|
+
"part": "content-types"
|
|
252
|
+
},
|
|
253
|
+
"$props": {
|
|
254
|
+
"label": "Content types",
|
|
255
|
+
"size": "sm"
|
|
256
|
+
},
|
|
257
|
+
"onclick": {
|
|
258
|
+
"$prototype": "Function",
|
|
259
|
+
"body": [
|
|
260
|
+
{
|
|
261
|
+
"operator": "call",
|
|
262
|
+
"target": {
|
|
263
|
+
"$ref": "#/state/openContentTypes"
|
|
264
|
+
},
|
|
265
|
+
"value": []
|
|
266
|
+
}
|
|
267
|
+
]
|
|
268
|
+
},
|
|
269
|
+
"children": [
|
|
270
|
+
{
|
|
271
|
+
"tagName": "span",
|
|
272
|
+
"textContent": "Content types…"
|
|
273
|
+
}
|
|
274
|
+
]
|
|
275
|
+
}
|
|
276
|
+
]
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
]
|
|
281
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The Entry editor surface: one content entry's fields, in a pane, as a Jx document over the kit.
|
|
4
|
+
*
|
|
5
|
+
* This is the adapter. `content/entry-editor.ts` keeps the editor — which pane holds which tab,
|
|
6
|
+
* which collection a path belongs to, which record the fields live in, which required keys the
|
|
7
|
+
* entry does not HAVE, and what the draft switch commits into — and hands this module one
|
|
8
|
+
* projection whose every field is already a string or a flag. The document draws it and decides
|
|
9
|
+
* nothing.
|
|
10
|
+
*
|
|
11
|
+
* **The form is an ISLAND, and that is the whole shape of this conversion.** A form built from a
|
|
12
|
+
* JSON Schema is `ui/schema-form.ts`'s surface rather than this one's, and that engine hands back a
|
|
13
|
+
* host ELEMENT rather than a template. So the document renders an empty `fields` node, announces it
|
|
14
|
+
* through `onNodeCreated` — the one seam for an island (specs/studio-ui-guidelines.md §9.4) — and
|
|
15
|
+
* the flow puts the engine's element in it. Nothing here knows what a schema is.
|
|
16
|
+
*
|
|
17
|
+
* **Announced, never queried.** The `fields` node lives inside a `$switch` case, so a document that
|
|
18
|
+
* moves from "this file is in no collection" to "this file is an entry" builds a NEW one; a handle
|
|
19
|
+
* found once by selector would be detached DOM the moment the discriminant moved. `onNodeCreated`
|
|
20
|
+
* fires on every creation, including the reconciler's, which is what makes the handle keep up.
|
|
21
|
+
*
|
|
22
|
+
* **The card is mounted once per PANE.** `entry` is one of the kinds the side pane may host, so two
|
|
23
|
+
* stages can each be drawing one: this module hands back a handle and the flow holds one per pane.
|
|
24
|
+
* A repaint only ASSIGNS to the standing scope — rebuilding the mount would take a field out from
|
|
25
|
+
* under a reader mid-edit.
|
|
26
|
+
*
|
|
27
|
+
* @docs studio/projects/content-types
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { reactive } from "../reactivity";
|
|
31
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
32
|
+
import entryEditorDoc from "./entry-editor.json";
|
|
33
|
+
import type { JxDocument } from "@jxsuite/schema/types";
|
|
34
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
35
|
+
|
|
36
|
+
registerSurface("entry-editor", entryEditorDoc as unknown as JxDocument);
|
|
37
|
+
|
|
38
|
+
/** Everything the document draws, as one value. */
|
|
39
|
+
export interface EntryEditorView {
|
|
40
|
+
/** The region id stamped on the root — `pane.<id>/entry`. */
|
|
41
|
+
region: string;
|
|
42
|
+
/** The region id on the field list — `pane.<id>/entry/fields`. */
|
|
43
|
+
fieldsRegion: string;
|
|
44
|
+
/**
|
|
45
|
+
* Which of the two stages to draw.
|
|
46
|
+
*
|
|
47
|
+
* `empty` is not an error state: the mode is reachable from the palette and from `__jxAutomation`
|
|
48
|
+
* on any tab, so a document that belongs to no collection has to say the reason and the fix.
|
|
49
|
+
*/
|
|
50
|
+
stage: "entry" | "empty";
|
|
51
|
+
/** The entry's file name — the heading. */
|
|
52
|
+
name: string;
|
|
53
|
+
/** The collection's name, in the chip beside it. */
|
|
54
|
+
collection: string;
|
|
55
|
+
/** Whether this collection has a draft workflow at all; with none, neither state is drawn. */
|
|
56
|
+
draftAxis: "hidden" | "shown";
|
|
57
|
+
/** Whether the entry is marked a draft. */
|
|
58
|
+
draft: boolean;
|
|
59
|
+
/** The switch's tooltip: what a draft IS, in `content/draft-state.ts`'s one sentence. */
|
|
60
|
+
draftHint: string;
|
|
61
|
+
/** Whether the sentence under the header is drawn — only while the entry IS a draft. */
|
|
62
|
+
noteState: "hidden" | "shown";
|
|
63
|
+
note: string;
|
|
64
|
+
/** The `empty` stage's first sentence, naming the document it is about. */
|
|
65
|
+
emptyLine: string;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** What the reader can do here. Both are decisions the editor owns. */
|
|
69
|
+
export interface EntryEditorActions {
|
|
70
|
+
/** The draft switch moved. A setter, never a toggle. */
|
|
71
|
+
setDraft: (draft: boolean) => void;
|
|
72
|
+
/** Open Project Settings › Content types — the door out of the `empty` stage. */
|
|
73
|
+
openContentTypes: () => void;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** The node the document renders empty for somebody else to fill. */
|
|
77
|
+
export interface EntryEditorIslands {
|
|
78
|
+
/** The schema form's host, whenever the document has just created one. */
|
|
79
|
+
fieldsSlot: (host: HTMLElement) => void;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface EntryEditorSurfaceHandle {
|
|
83
|
+
/** Resolves with the document's root once it has rendered. */
|
|
84
|
+
ready: Promise<HTMLElement>;
|
|
85
|
+
/** Whether what was mounted is still inside the host. */
|
|
86
|
+
attached: () => boolean;
|
|
87
|
+
update: (view: EntryEditorView) => void;
|
|
88
|
+
dispose: () => void;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** The scope the document reads: the view plus the actions, flat. */
|
|
92
|
+
interface EntryEditorScope extends Record<string, unknown>, EntryEditorView, EntryEditorActions {}
|
|
93
|
+
|
|
94
|
+
/** Write a whole view into the scope. Assignment only — the mount is never rebuilt for a repaint. */
|
|
95
|
+
function project(scope: EntryEditorScope, view: EntryEditorView): void {
|
|
96
|
+
scope.region = view.region;
|
|
97
|
+
scope.fieldsRegion = view.fieldsRegion;
|
|
98
|
+
scope.stage = view.stage;
|
|
99
|
+
scope.name = view.name;
|
|
100
|
+
scope.collection = view.collection;
|
|
101
|
+
scope.draftAxis = view.draftAxis;
|
|
102
|
+
scope.draft = view.draft;
|
|
103
|
+
scope.draftHint = view.draftHint;
|
|
104
|
+
scope.noteState = view.noteState;
|
|
105
|
+
scope.note = view.note;
|
|
106
|
+
scope.emptyLine = view.emptyLine;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** The `part` a node was authored with, or `""` — the only thing this adapter asks about a node. */
|
|
110
|
+
function partOf(def: unknown): string {
|
|
111
|
+
const attributes = (def as { attributes?: Record<string, unknown> } | null)?.attributes;
|
|
112
|
+
const part = attributes?.["part"];
|
|
113
|
+
return typeof part === "string" ? part : "";
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Mount the Entry editor document into `host` — the pane's canvas stage.
|
|
118
|
+
*
|
|
119
|
+
* The host is CLEARED first, for the reason `surfaces/media-pane.ts` gives: the stage is handed to
|
|
120
|
+
* whichever mode owns it whole, and emptying it is what stops two editors stacking when a second
|
|
121
|
+
* file opens into the same pane before the first mount has settled.
|
|
122
|
+
*
|
|
123
|
+
* @param {HTMLElement} host - The pane's canvas stage
|
|
124
|
+
* @param {EntryEditorView} view - What to draw right now
|
|
125
|
+
* @param {EntryEditorActions} actions - What each control does
|
|
126
|
+
* @param {EntryEditorIslands} islands - Where the schema form lands
|
|
127
|
+
* @returns {EntryEditorSurfaceHandle}
|
|
128
|
+
*/
|
|
129
|
+
export function mountEntryEditorSurface(
|
|
130
|
+
host: HTMLElement,
|
|
131
|
+
view: EntryEditorView,
|
|
132
|
+
actions: EntryEditorActions,
|
|
133
|
+
islands: EntryEditorIslands,
|
|
134
|
+
): EntryEditorSurfaceHandle {
|
|
135
|
+
host.replaceChildren();
|
|
136
|
+
const scope = reactive<EntryEditorScope>({
|
|
137
|
+
collection: "",
|
|
138
|
+
draft: false,
|
|
139
|
+
draftAxis: "hidden",
|
|
140
|
+
draftHint: "",
|
|
141
|
+
emptyLine: "",
|
|
142
|
+
fieldsRegion: "",
|
|
143
|
+
name: "",
|
|
144
|
+
note: "",
|
|
145
|
+
noteState: "hidden",
|
|
146
|
+
openContentTypes: actions.openContentTypes,
|
|
147
|
+
region: "",
|
|
148
|
+
setDraft: actions.setDraft,
|
|
149
|
+
stage: "empty",
|
|
150
|
+
}) as EntryEditorScope;
|
|
151
|
+
project(scope, view);
|
|
152
|
+
|
|
153
|
+
let mounted: SurfaceHandle | null = null;
|
|
154
|
+
let disposed = false;
|
|
155
|
+
/* Nothing is called on an element here, so the mount is all there is to wait for: the island
|
|
156
|
+
announces itself through `onNodeCreated` as it is created, which is one `connectedCallback`
|
|
157
|
+
earlier than awaiting the element would be (§1.1, "await the element"). */
|
|
158
|
+
const ready = mountSurface("entry-editor", scope, host, {
|
|
159
|
+
onNodeCreated: (element, _path, def) => {
|
|
160
|
+
if (element instanceof HTMLElement && partOf(def) === "fields") {
|
|
161
|
+
islands.fieldsSlot(element);
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
}).then((surface) => {
|
|
165
|
+
if (disposed) {
|
|
166
|
+
surface.dispose();
|
|
167
|
+
return surface.root as HTMLElement;
|
|
168
|
+
}
|
|
169
|
+
mounted = surface;
|
|
170
|
+
return surface.root as HTMLElement;
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
return {
|
|
174
|
+
attached: () => {
|
|
175
|
+
if (disposed) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
const root = mounted?.root;
|
|
179
|
+
/* A mount still in flight has nothing in the host yet, and answering "no" to that would make
|
|
180
|
+
the next canvas repaint tear down the mount it is waiting for and start another. */
|
|
181
|
+
return root === undefined ? true : root instanceof HTMLElement && host.contains(root);
|
|
182
|
+
},
|
|
183
|
+
dispose() {
|
|
184
|
+
disposed = true;
|
|
185
|
+
mounted?.dispose();
|
|
186
|
+
mounted = null;
|
|
187
|
+
},
|
|
188
|
+
ready,
|
|
189
|
+
update: (next) => project(scope, next),
|
|
190
|
+
};
|
|
191
|
+
}
|