@jxsuite/studio 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/data/elements-meta.json +5 -15
- package/data/html-meta.json +51 -6
- package/dist/chunks/{2020-n6tfwnda.js → 2020-g79n01v9.js} +14 -14
- package/dist/chunks/action-group-sp6tna8v.js +118 -0
- package/dist/chunks/adapter-nj7tnjfn.js +13 -0
- package/dist/chunks/cf-account-picker-fyf63pmy.js +495 -0
- package/dist/chunks/cf-settings-71bv5zn9.js +20 -0
- package/dist/chunks/color-area-v17df7b8.js +154 -0
- package/dist/chunks/color-field-anwybnkn.js +208 -0
- package/dist/chunks/color-slider-44ez96fc.js +79 -0
- package/dist/chunks/color-xgg3kfw7.js +35 -0
- package/dist/chunks/combobox-5e7jev23.js +236 -0
- package/dist/chunks/components-2w1f35qs.js +18 -0
- package/dist/chunks/content-source-3wqeas45.js +46 -0
- package/dist/chunks/convert-to-repeater-d0cgnb6d.js +639 -0
- package/dist/chunks/dialog-s890b918.js +85 -0
- package/dist/chunks/editor-3qhbg51x.js +35 -0
- package/dist/chunks/entry-commands-d6g50j7s.js +42 -0
- package/dist/chunks/extension-sections-fy7q4fe9.js +651 -0
- package/dist/chunks/file-ops-3btj6st0.js +47 -0
- package/dist/chunks/files-ef8fgs3w.js +72 -0
- package/dist/chunks/format-host-3c33nwr8.js +40 -0
- package/dist/chunks/fs-events-13tj6sex.js +18 -0
- package/dist/chunks/git-panel-4wp2rn9b.js +49 -0
- package/dist/chunks/icons-yy10wk9r.js +402 -0
- package/dist/chunks/iframe-entry-15g3n6xv.js +114 -0
- package/dist/chunks/iframe-entry-b27vq81n.js +203 -0
- package/dist/chunks/iframe-entry-nbyxee1y.js +154 -0
- package/dist/chunks/iframe-host-jgesd924.js +115 -0
- package/dist/chunks/{index-wcnt3r9g.js → index-mdmyx6s2.js} +11 -11
- package/dist/chunks/index-n4j7qxyr.js +109 -0
- package/dist/chunks/{javascript-q8kpmfah.js → javascript-xvrfrpkb.js} +8 -9
- package/dist/chunks/{jsonMode-dkr040ga.js → jsonMode-tyx2kj6p.js} +526 -527
- package/dist/chunks/jx-validate-j0wxk72w.js +15 -0
- package/dist/chunks/layers-1nq5evsh.js +29 -0
- package/dist/chunks/layers-panel-ar2gh90g.js +40 -0
- package/dist/chunks/listbox-6v2ac08j.js +44 -0
- package/dist/chunks/lit-html-m244w9nh.js +17 -0
- package/dist/chunks/media-picker-2qbetq73.js +33 -0
- package/dist/chunks/menu-q99sy9rf.js +285 -0
- package/dist/chunks/menu-rf7n72mf.js +14 -0
- package/dist/chunks/{monaco-binding-rj6xpx9y.js → monaco-binding-sw6en4dw.js} +12 -15
- package/dist/chunks/monaco-buffer-bhy3hb6m.js +24 -0
- package/dist/chunks/{monaco-setup-vx9bhp1d.js → monaco-setup-8r62fj6y.js} +27 -37
- package/dist/chunks/notify-628t0anh.js +21 -0
- package/dist/chunks/number-field-5cndyft8.js +72 -0
- package/dist/chunks/parse-0zx14y15.js +10 -0
- package/dist/chunks/platform-ts9cg1a4.js +15 -0
- package/dist/chunks/popover-47z3ytva.js +25 -0
- package/dist/chunks/publish-panel-98f7sr3g.js +27 -0
- package/dist/chunks/quick-search-srzz83k2.js +45 -0
- package/dist/chunks/references-n553f0e1.js +26 -0
- package/dist/chunks/right-panel-rrgx2dn3.js +45 -0
- package/dist/chunks/section-registry-5pq32t0q.js +25 -0
- package/dist/chunks/select-2r16ez41.js +49 -0
- package/dist/chunks/split-g7nm1rgb.js +191 -0
- package/dist/chunks/studio-0hqbpbd0.js +62 -0
- package/dist/chunks/studio-18avnhjp.js +2430 -0
- package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
- package/dist/chunks/{studio-msd847zn.js → studio-25hkdrkw.js} +357 -86
- package/dist/chunks/studio-26d7myd1.js +258 -0
- package/dist/chunks/{studio-4r1pv6zf.js → studio-38emantv.js} +22 -5
- package/dist/chunks/studio-3gxv60tn.js +422 -0
- package/dist/chunks/{studio-fbf92ckf.js → studio-3hxkd92t.js} +275 -163
- package/dist/chunks/studio-4m0haseg.js +185 -0
- package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
- package/dist/chunks/{studio-1wagb550.js → studio-5523bpzt.js} +11 -11
- package/dist/chunks/{studio-x4qkdat5.js → studio-57mf66w2.js} +1749 -2481
- package/dist/chunks/studio-5jy81t3s.js +17463 -0
- package/dist/chunks/studio-5rt7sqa0.js +1168 -0
- package/dist/chunks/studio-5te5tqng.js +81 -0
- package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
- package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
- package/dist/chunks/studio-6xa21ej9.js +28 -0
- package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
- package/dist/chunks/{studio-ahn3pdgx.js → studio-79y5sz51.js} +52 -38
- package/dist/chunks/{studio-gcye7qka.js → studio-7e11jpa9.js} +21 -21
- package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
- package/dist/chunks/studio-7xptrg0j.js +954 -0
- package/dist/chunks/{studio-cft9r4r7.js → studio-81390n6f.js} +22 -22
- package/dist/chunks/{studio-q43a5y9h.js → studio-8jn5yhyn.js} +16 -16
- package/dist/chunks/studio-8qtrpzr3.js +839 -0
- package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
- package/dist/chunks/studio-9xxz1q69.js +1356 -0
- package/dist/chunks/studio-akbww0j5.js +13615 -0
- package/dist/chunks/{studio-x813zp48.js → studio-arfpe389.js} +30 -30
- package/dist/chunks/{studio-trxrabqf.js → studio-az3zd49t.js} +475 -283
- package/dist/chunks/studio-cpvb2ed1.js +1171 -0
- package/dist/chunks/{studio-f3wqjtk5.js → studio-d0300636.js} +5076 -18
- package/dist/chunks/{studio-bgxt93ga.js → studio-d055c37e.js} +13 -13
- package/dist/chunks/studio-d1ja2x9r.js +362 -0
- package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
- package/dist/chunks/{studio-3bqpr0zh.js → studio-em9nw8eh.js} +299 -110
- package/dist/chunks/studio-erdatzvp.js +1190 -0
- package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
- package/dist/chunks/studio-fabxk6r9.js +2811 -0
- package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
- package/dist/chunks/{studio-dm19q43r.js → studio-hhvs4sdg.js} +10 -10
- package/dist/chunks/{studio-q9jd1a60.js → studio-kcgff4r0.js} +15 -18
- package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
- package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
- package/dist/chunks/studio-pm6hgy7r.js +4763 -0
- package/dist/chunks/studio-q0a3yk4n.js +33 -0
- package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
- package/dist/chunks/studio-qahxvnan.js +111 -0
- package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
- package/dist/chunks/{studio-2b946z26.js → studio-rkstz940.js} +3658 -6134
- package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
- package/dist/chunks/studio-rpyah2ew.js +2805 -0
- package/dist/chunks/studio-rs76k67r.js +12 -0
- package/dist/chunks/{studio-jkftxyvz.js → studio-s6z853aq.js} +5858 -2152
- package/dist/chunks/{studio-6yw4y3my.js → studio-sgdc5pfc.js} +8 -8
- package/dist/chunks/studio-tb3ev01j.js +763 -0
- package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
- package/dist/chunks/studio-vhv5tgxm.js +51 -0
- package/dist/chunks/{studio-qjy2z9bv.js → studio-vz68yn9e.js} +32 -137
- package/dist/chunks/studio-wqpngpsk.js +174 -0
- package/dist/chunks/{studio-b55y6ewx.js → studio-x3rty6tr.js} +58 -58
- package/dist/chunks/studio-xsykpvsh.js +8448 -0
- package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
- package/dist/chunks/studio-yxa81f45.js +12 -0
- package/dist/chunks/swatch-group-t0n6h2rn.js +139 -0
- package/dist/chunks/tabs-wbp1cdws.js +156 -0
- package/dist/chunks/textfield-abk6qyee.js +73 -0
- package/dist/chunks/toast-780pvfbv.js +27 -0
- package/dist/chunks/toast-host-3sqv46sn.js +116 -0
- package/dist/chunks/toolbar-xbh5bhtr.js +194 -0
- package/dist/chunks/tooltip-eptb614w.js +369 -0
- package/dist/chunks/tree-a73p0pqm.js +367 -0
- package/dist/chunks/{tsMode-76kr53q0.js → tsMode-jy4m86rv.js} +83 -85
- package/dist/chunks/workspace-wrew8zk4.js +69 -0
- package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
- package/dist/iframe-entry.js +1780 -667
- package/dist/studio.js +52819 -36480
- package/dist/workers/editor.worker.js +1040 -1085
- package/dist/workers/json.worker.js +1946 -1991
- package/dist/workers/ts.worker.js +4960 -5005
- package/index.html +1 -0
- package/package.json +18 -52
- package/src/about/about-modal.ts +72 -123
- package/src/browse/library-commands.ts +20 -49
- package/src/browse/library-layouts.ts +87 -218
- package/src/browse/library-pane.ts +406 -438
- package/src/canvas/canvas-helpers.ts +0 -49
- package/src/canvas/canvas-live-render.ts +25 -2
- package/src/canvas/canvas-render.ts +666 -231
- package/src/canvas/canvas-surface.ts +0 -1
- package/src/canvas/canvas-utils.ts +310 -117
- package/src/canvas/dialog-path.ts +76 -0
- package/src/canvas/dialog-state.ts +67 -0
- package/src/canvas/diff-marks.ts +252 -0
- package/src/canvas/diff-toolbar.ts +349 -0
- package/src/canvas/diff-view.ts +123 -0
- package/src/canvas/edit-width-drag.ts +187 -0
- package/src/canvas/edit-width.ts +150 -0
- package/src/canvas/iframe-entry.ts +125 -8
- package/src/canvas/iframe-host.ts +271 -15
- package/src/canvas/iframe-interaction.ts +133 -13
- package/src/canvas/iframe-patch.ts +7 -1
- package/src/canvas/iframe-position.ts +5 -6
- package/src/canvas/iframe-protocol.ts +106 -5
- package/src/canvas/iframe-render.ts +373 -5
- package/src/canvas/iframe-slash.ts +2 -2
- package/src/canvas/iframe-subtree.ts +5 -8
- package/src/canvas/path-mapping.ts +25 -3
- package/src/canvas/popover-path.ts +106 -0
- package/src/canvas/popover-state.ts +155 -0
- package/src/canvas/surface-registry.ts +21 -10
- package/src/collab/presence-chips.ts +51 -73
- package/src/commands/app-commands.ts +10 -0
- package/src/commands/budget.ts +12 -0
- package/src/commands/command-args.ts +369 -6
- package/src/commands/defaults.ts +44 -14
- package/src/commands/live-context.ts +11 -5
- package/src/commands/reference.ts +12 -2
- package/src/commands/registry.ts +165 -8
- package/src/content/entry-commands.ts +16 -23
- package/src/content/entry-editor.ts +144 -101
- package/src/editor/canvas-slash-bridge.ts +2 -2
- package/src/editor/context-menu.ts +49 -200
- package/src/editor/convert-to-component.ts +42 -82
- package/src/editor/convert-to-repeater.ts +132 -173
- package/src/editor/inline-edit.ts +11 -0
- package/src/editor/shortcuts.ts +65 -26
- package/src/editor/slash-menu.ts +150 -157
- package/src/files/file-ops.ts +117 -11
- package/src/files/files.ts +943 -660
- package/src/files/json-layout.ts +474 -0
- package/src/files/serialize-document.ts +8 -1
- package/src/format/convert-file.ts +16 -10
- package/src/format/format-host.ts +50 -1
- package/src/github/github-auth.ts +71 -29
- package/src/github/github-publish.ts +57 -65
- package/src/grid/cell-editors.ts +46 -4
- package/src/grid/cell-popovers.ts +65 -62
- package/src/grid/grid-open.ts +86 -64
- package/src/grid/grid-panel.ts +390 -469
- package/src/grid/redirects-grid.ts +40 -44
- package/src/hosting/layout.ts +2 -0
- package/src/i18n/i18n-commands.ts +127 -62
- package/src/media/media-pane.ts +83 -133
- package/src/new-project/add-repo-modal.ts +125 -176
- package/src/new-project/import-tab.ts +181 -252
- package/src/new-project/location-fields.ts +93 -160
- package/src/new-project/new-project-modal.ts +376 -367
- package/src/packages/jxsuite-update.ts +76 -18
- package/src/panels/activity-panel.ts +137 -104
- package/src/panels/ai-chat/chat-markdown.ts +15 -13
- package/src/panels/ai-chat/chat-view.ts +307 -472
- package/src/panels/ai-chat/composer.ts +175 -163
- package/src/panels/ai-chat/sessions-view.ts +31 -62
- package/src/panels/ai-panel.ts +210 -185
- package/src/panels/block-action-bar.ts +437 -643
- package/src/panels/bottom-dock.ts +112 -47
- package/src/panels/chat-panel.ts +19 -14
- package/src/panels/data-explorer.ts +141 -102
- package/src/panels/data-grid.ts +183 -150
- package/src/panels/dnd.ts +75 -20
- package/src/panels/editors.ts +26 -19
- package/src/panels/elements-panel.ts +243 -186
- package/src/panels/empty-state.ts +26 -42
- package/src/panels/events-panel.ts +950 -729
- package/src/panels/formula-workspace.ts +434 -207
- package/src/panels/frontmatter-fields.ts +185 -153
- package/src/panels/frontmatter-panel.ts +411 -187
- package/src/panels/git-diff-open.ts +148 -0
- package/src/panels/git-panel.ts +679 -605
- package/src/panels/head-panel.ts +617 -435
- package/src/panels/i18n-panel.ts +153 -133
- package/src/panels/imports-panel.ts +388 -414
- package/src/panels/jump-bar.ts +174 -147
- package/src/panels/layers-panel.ts +785 -671
- package/src/panels/left-panel.ts +166 -94
- package/src/panels/navigator-panels.ts +1 -1
- package/src/panels/pane-context.ts +529 -677
- package/src/panels/pane-grid.ts +265 -241
- package/src/panels/panel-registry.ts +15 -4
- package/src/panels/problems-panel.ts +177 -99
- package/src/panels/properties-panel.ts +1525 -966
- package/src/panels/provenance.ts +31 -113
- package/src/panels/quick-search.ts +217 -172
- package/src/panels/right-panel.ts +135 -169
- package/src/panels/seo-modal.ts +346 -167
- package/src/panels/settings-menu.ts +109 -646
- package/src/panels/settings-pane.ts +102 -86
- package/src/panels/signals-panel.ts +1318 -1172
- package/src/panels/statement-editor.ts +556 -428
- package/src/panels/style-panel.ts +1367 -630
- package/src/panels/style-utils.ts +36 -32
- package/src/panels/stylebook-doc.ts +30 -73
- package/src/panels/stylebook-layers-panel.ts +202 -109
- package/src/panels/stylebook-panel.ts +124 -88
- package/src/panels/tab-strip.ts +385 -287
- package/src/platforms/cloud.ts +106 -16
- package/src/platforms/devserver.ts +13 -0
- package/src/publish/deploy-checklist.ts +124 -78
- package/src/publish/publish-commands.ts +4 -12
- package/src/publish/publish-panel.ts +134 -328
- package/src/services/a11y-report.ts +100 -43
- package/src/services/ai-command-tools.ts +468 -0
- package/src/services/ai-session-store.ts +6 -0
- package/src/services/ai-system-prompt.ts +110 -18
- package/src/services/ai-tools.ts +28 -143
- package/src/services/ai-write-report.ts +174 -0
- package/src/services/document-assistant.ts +50 -2
- package/src/services/idle.ts +16 -14
- package/src/services/live-surfaces.ts +237 -0
- package/src/services/model-uri.ts +75 -0
- package/src/services/notify.ts +63 -6
- package/src/services/popover-report.ts +325 -0
- package/src/services/surface-registry.ts +56 -0
- package/src/services/tool-executor.ts +6 -0
- package/src/settings/contexts-section.ts +301 -299
- package/src/settings/contributed-section.ts +361 -222
- package/src/settings/css-vars-editor.ts +320 -325
- package/src/settings/defs-editor.ts +572 -535
- package/src/settings/dependencies-editor.ts +79 -107
- package/src/settings/extension-commands.ts +379 -0
- package/src/settings/extension-rows.ts +113 -0
- package/src/settings/extensions-section.ts +287 -0
- package/src/settings/general-settings.ts +130 -181
- package/src/settings/head-editor.ts +10 -305
- package/src/settings/locales-section.ts +146 -196
- package/src/settings/preferences-accounts.ts +1 -1
- package/src/settings/preferences-dialog.ts +350 -330
- package/src/settings/project-sections.ts +108 -181
- package/src/settings/schema-field-ui.ts +11 -399
- package/src/settings/section-registry.ts +8 -1
- package/src/settings/settings-document.ts +31 -29
- package/src/shell/tree.ts +42 -87
- package/src/shell.ts +48 -36
- package/src/studio.ts +90 -67
- package/src/style/token-ref.ts +0 -39
- package/src/surfaces/about.json +263 -0
- package/src/surfaces/about.ts +163 -0
- package/src/surfaces/add-repo.json +486 -0
- package/src/surfaces/add-repo.ts +236 -0
- package/src/surfaces/ai-chat.json +2185 -0
- package/src/surfaces/ai-chat.ts +549 -0
- package/src/surfaces/ai-credentials-form.json +332 -0
- package/src/surfaces/ai-credentials-form.ts +151 -0
- package/src/surfaces/ai-managed-connect.json +108 -0
- package/src/surfaces/ai-managed-connect.ts +123 -0
- package/src/surfaces/ai-model-picker.json +114 -0
- package/src/surfaces/ai-model-picker.ts +139 -0
- package/src/surfaces/block-action-bar.json +640 -0
- package/src/surfaces/block-action-bar.ts +368 -0
- package/src/surfaces/bottom-dock.json +154 -0
- package/src/surfaces/bottom-dock.ts +125 -0
- package/src/surfaces/canvas-stage.json +444 -0
- package/src/surfaces/canvas-stage.ts +253 -0
- package/src/surfaces/cf-account-picker.json +300 -0
- package/src/surfaces/cf-account-picker.ts +214 -0
- package/src/surfaces/commandbar.json +984 -0
- package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +414 -389
- package/src/surfaces/convert-repeater.json +309 -0
- package/src/surfaces/convert-repeater.ts +276 -0
- package/src/surfaces/data-actions.json +157 -0
- package/src/surfaces/data-actions.ts +115 -0
- package/src/surfaces/dialog.json +289 -0
- package/src/surfaces/dialog.ts +343 -0
- package/src/surfaces/diff-toolbar.json +266 -0
- package/src/surfaces/diff-toolbar.ts +139 -0
- package/src/surfaces/doc-header.json +739 -0
- package/src/surfaces/doc-header.ts +223 -0
- package/src/surfaces/empty-state.json +152 -0
- package/src/surfaces/empty-state.ts +173 -0
- package/src/surfaces/entry-editor.json +281 -0
- package/src/surfaces/entry-editor.ts +191 -0
- package/src/surfaces/expression-editor.json +977 -0
- package/src/surfaces/expression-editor.ts +266 -0
- package/src/surfaces/files-panel.json +592 -0
- package/src/surfaces/files-panel.ts +301 -0
- package/src/surfaces/formula-palette.json +364 -0
- package/src/surfaces/formula-palette.ts +340 -0
- package/src/surfaces/git-panel.json +1822 -0
- package/src/surfaces/git-panel.ts +272 -0
- package/src/surfaces/github-auth.json +112 -0
- package/src/surfaces/github-auth.ts +139 -0
- package/src/surfaces/github-publish.json +206 -0
- package/src/surfaces/github-publish.ts +169 -0
- package/src/surfaces/grid-cell.json +218 -0
- package/src/surfaces/grid-cell.ts +120 -0
- package/src/surfaces/grid-open.json +147 -0
- package/src/surfaces/grid-open.ts +87 -0
- package/src/surfaces/grid-panel.json +706 -0
- package/src/surfaces/grid-panel.ts +206 -0
- package/src/surfaces/grid-replace.json +179 -0
- package/src/surfaces/grid-replace.ts +89 -0
- package/src/surfaces/grid-views.json +446 -0
- package/src/surfaces/grid-views.ts +172 -0
- package/src/surfaces/inspector-dock.json +187 -0
- package/src/surfaces/inspector-dock.ts +161 -0
- package/src/surfaces/jump-bar.json +243 -0
- package/src/surfaces/jump-bar.ts +129 -0
- package/src/surfaces/jxsuite-update.json +146 -0
- package/src/surfaces/jxsuite-update.ts +149 -0
- package/src/surfaces/library-pane.json +1509 -0
- package/src/surfaces/library-pane.ts +363 -0
- package/src/surfaces/logic-panel.json +1949 -0
- package/src/surfaces/logic-panel.ts +369 -0
- package/src/surfaces/logic-workspace.json +685 -0
- package/src/surfaces/logic-workspace.ts +238 -0
- package/src/surfaces/media-browser.json +303 -0
- package/src/surfaces/media-browser.ts +145 -0
- package/src/surfaces/media-field.json +163 -0
- package/src/surfaces/media-field.ts +116 -0
- package/src/surfaces/media-pane.json +513 -0
- package/src/surfaces/media-pane.ts +197 -0
- package/src/surfaces/menu.json +232 -0
- package/src/surfaces/menu.ts +375 -0
- package/src/surfaces/navigator-dock.json +113 -0
- package/src/surfaces/navigator-dock.ts +130 -0
- package/src/surfaces/new-project.json +1654 -0
- package/src/surfaces/new-project.ts +411 -0
- package/src/surfaces/palette.json +535 -0
- package/src/surfaces/pane-context.json +1497 -0
- package/src/surfaces/pane-context.ts +513 -0
- package/src/surfaces/pane-grid.json +188 -0
- package/src/surfaces/pane-grid.ts +250 -0
- package/src/surfaces/panel-activity.json +563 -0
- package/src/surfaces/panel-activity.ts +187 -0
- package/src/surfaces/panel-data.json +141 -0
- package/src/surfaces/panel-data.ts +156 -0
- package/src/surfaces/panel-deploy-checklist.json +283 -0
- package/src/surfaces/panel-deploy-checklist.ts +175 -0
- package/src/surfaces/panel-elements.json +367 -0
- package/src/surfaces/panel-elements.ts +175 -0
- package/src/surfaces/panel-i18n.json +569 -0
- package/src/surfaces/panel-i18n.ts +212 -0
- package/src/surfaces/panel-imports.json +780 -0
- package/src/surfaces/panel-imports.ts +209 -0
- package/src/surfaces/panel-outline.json +734 -0
- package/src/surfaces/panel-outline.ts +326 -0
- package/src/surfaces/panel-page.json +1017 -0
- package/src/surfaces/panel-page.ts +240 -0
- package/src/surfaces/panel-problems.json +497 -0
- package/src/surfaces/panel-problems.ts +157 -0
- package/src/surfaces/panel-signals.json +1973 -0
- package/src/surfaces/panel-signals.ts +436 -0
- package/src/surfaces/panel-stylebook-layers.json +317 -0
- package/src/surfaces/panel-stylebook-layers.ts +155 -0
- package/src/surfaces/preferences.json +850 -0
- package/src/surfaces/preferences.ts +332 -0
- package/src/surfaces/progress-modal.json +110 -0
- package/src/surfaces/progress-modal.ts +150 -0
- package/src/surfaces/properties-panel.json +1578 -0
- package/src/surfaces/properties-panel.ts +337 -0
- package/src/surfaces/publish.json +945 -0
- package/src/surfaces/publish.ts +392 -0
- package/src/surfaces/push-plan.json +110 -0
- package/src/surfaces/push-plan.ts +87 -0
- package/src/surfaces/rail.json +255 -0
- package/src/surfaces/rail.ts +206 -0
- package/src/surfaces/reference-field.json +191 -0
- package/src/surfaces/reference-field.ts +168 -0
- package/src/surfaces/schema-builder.json +1011 -0
- package/src/surfaces/schema-builder.ts +181 -0
- package/src/surfaces/schema-form.json +1013 -0
- package/src/surfaces/schema-form.ts +287 -0
- package/src/surfaces/secret-field.json +60 -0
- package/src/surfaces/secret-field.ts +146 -0
- package/src/surfaces/seo.json +932 -0
- package/src/surfaces/seo.ts +334 -0
- package/src/surfaces/settings-contexts.json +538 -0
- package/src/surfaces/settings-contexts.ts +196 -0
- package/src/surfaces/settings-contributed.json +489 -0
- package/src/surfaces/settings-contributed.ts +199 -0
- package/src/surfaces/settings-css-vars.json +820 -0
- package/src/surfaces/settings-css-vars.ts +199 -0
- package/src/surfaces/settings-defs.json +1363 -0
- package/src/surfaces/settings-defs.ts +232 -0
- package/src/surfaces/settings-deploy.json +108 -0
- package/src/surfaces/settings-deploy.ts +135 -0
- package/src/surfaces/settings-extensions.json +486 -0
- package/src/surfaces/settings-extensions.ts +201 -0
- package/src/surfaces/settings-head.json +779 -0
- package/src/surfaces/settings-head.ts +397 -0
- package/src/surfaces/settings-locales.json +420 -0
- package/src/surfaces/settings-locales.ts +137 -0
- package/src/surfaces/settings-overview.json +423 -0
- package/src/surfaces/settings-overview.ts +218 -0
- package/src/surfaces/settings-packages.json +549 -0
- package/src/surfaces/settings-packages.ts +158 -0
- package/src/surfaces/settings-pane.json +147 -0
- package/src/surfaces/settings-pane.ts +150 -0
- package/src/surfaces/settings-rawjson.json +104 -0
- package/src/surfaces/settings-rawjson.ts +107 -0
- package/src/surfaces/shell.json +99 -0
- package/src/surfaces/shell.ts +30 -0
- package/src/surfaces/slash-menu.json +180 -0
- package/src/surfaces/slash-menu.ts +272 -0
- package/src/surfaces/statements.json +607 -0
- package/src/surfaces/statements.ts +238 -0
- package/src/surfaces/statusbar.json +94 -0
- package/src/{panels → surfaces}/statusbar.ts +163 -90
- package/src/surfaces/style-panel.json +1643 -0
- package/src/surfaces/style-panel.ts +338 -0
- package/src/surfaces/stylebook-chrome.json +122 -0
- package/src/surfaces/stylebook-chrome.ts +122 -0
- package/src/surfaces/tab-strip.json +448 -0
- package/src/surfaces/tab-strip.ts +200 -0
- package/src/surfaces/target-line.json +419 -0
- package/src/surfaces/target-line.ts +349 -0
- package/src/surfaces/toasts.json +189 -0
- package/src/surfaces/welcome.json +571 -0
- package/src/surfaces/welcome.ts +338 -0
- package/src/tabs/project-config.ts +71 -15
- package/src/tabs/tab.ts +52 -1
- package/src/types.ts +22 -0
- package/src/ui/ai-credentials-form.ts +104 -100
- package/src/ui/ai-managed-connect.ts +54 -36
- package/src/ui/ai-model-picker.ts +75 -47
- package/src/ui/cf-account-picker.ts +76 -141
- package/src/ui/color-selector.ts +80 -301
- package/src/ui/dynamic-slot.ts +43 -283
- package/src/ui/expression-editor.ts +797 -576
- package/src/ui/field-input.ts +8 -181
- package/src/ui/form-controls.ts +838 -366
- package/src/ui/formula-chips.ts +80 -85
- package/src/ui/kit.ts +33 -0
- package/src/ui/layers.ts +293 -593
- package/src/ui/media-picker.ts +203 -284
- package/src/ui/panel-resize.ts +251 -64
- package/src/ui/popover-surface.ts +153 -0
- package/src/ui/progress-modal.ts +22 -60
- package/src/ui/regions.ts +13 -7
- package/src/ui/schema-form.ts +906 -440
- package/src/ui/surface.ts +122 -0
- package/src/ui/unit-selector.ts +15 -131
- package/src/ui/value-source.ts +14 -0
- package/src/ui/virtual-window.ts +88 -9
- package/src/utils/canvas-media.ts +72 -0
- package/src/utils/edit-display.ts +7 -2
- package/src/utils/element-selectors.ts +69 -0
- package/src/utils/link-target.ts +2 -2
- package/src/utils/studio-utils.ts +0 -10
- package/src/view.ts +15 -0
- package/src/workspace/pane-derive.ts +36 -14
- package/src/workspace/workspace.ts +15 -6
- package/styles/canvas.css +72 -467
- package/styles/forced-colors.css +48 -82
- package/styles/forced-colors.json +41 -0
- package/styles/inspector.css +2 -1301
- package/styles/overlays.css +96 -2823
- package/styles/panels.css +6 -1423
- package/styles/shell-frame.css +272 -0
- package/styles/shell-frame.json +227 -0
- package/styles/shell.css +0 -1568
- package/styles/tokens.css +65 -136
- package/styles/tokens.json +84 -0
- package/dist/chunks/Overlay.dev-etqjwyf9.js +0 -23
- package/dist/chunks/adapter-jkcyhgtr.js +0 -14
- package/dist/chunks/cf-account-picker-en86v7x7.js +0 -163
- package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
- package/dist/chunks/components-zmx10t62.js +0 -21
- package/dist/chunks/content-source-48xg86wj.js +0 -49
- package/dist/chunks/convert-to-repeater-43tfn7cs.js +0 -268
- package/dist/chunks/editor-cptq5jp1.js +0 -37
- package/dist/chunks/entry-commands-e63f1xc0.js +0 -46
- package/dist/chunks/extension-sections-txv08xxg.js +0 -311
- package/dist/chunks/file-ops-wbh4hhsx.js +0 -48
- package/dist/chunks/files-3kfkwhk4.js +0 -93
- package/dist/chunks/flow-qbfgrpeh.js +0 -634
- package/dist/chunks/focus-trap.esm-9t2drp0g.js +0 -1025
- package/dist/chunks/focus-visible-6eg70z18.js +0 -167
- package/dist/chunks/format-host-w16q81tf.js +0 -43
- package/dist/chunks/fs-events-hrrg328g.js +0 -21
- package/dist/chunks/git-panel-532whr1y.js +0 -59
- package/dist/chunks/index-zqxmqxmh.js +0 -109
- package/dist/chunks/jx-validate-8er6gbxy.js +0 -19
- package/dist/chunks/layers-panel-07hm7g5j.js +0 -67
- package/dist/chunks/layers-q75tj2mf.js +0 -45
- package/dist/chunks/lit-html-j055mkh8.js +0 -22
- package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
- package/dist/chunks/notify-yjm79n4s.js +0 -30
- package/dist/chunks/parse-24d0gay3.js +0 -19
- package/dist/chunks/platform-ba1j1gbh.js +0 -16
- package/dist/chunks/publish-panel-v9st96ja.js +0 -29
- package/dist/chunks/quick-search-zccjp6gv.js +0 -66
- package/dist/chunks/references-3qx8fkyp.js +0 -29
- package/dist/chunks/right-panel-vm3b6kwy.js +0 -46
- package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
- package/dist/chunks/sp-overlay.dev-qgvhnxf4.js +0 -18
- package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
- package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
- package/dist/chunks/sp-tooltip.dev-4sastdnw.js +0 -15
- package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
- package/dist/chunks/studio-0a5qrh01.js +0 -3
- package/dist/chunks/studio-0bq6eh7v.js +0 -12
- package/dist/chunks/studio-18j3bmcz.js +0 -14
- package/dist/chunks/studio-1ngbejft.js +0 -181
- package/dist/chunks/studio-4b5z1x43.js +0 -424
- package/dist/chunks/studio-4n2b5gzb.js +0 -357
- package/dist/chunks/studio-4rzyrtjz.js +0 -426
- package/dist/chunks/studio-5fx3g9jg.js +0 -4325
- package/dist/chunks/studio-5myknm0a.js +0 -1903
- package/dist/chunks/studio-7afd21nw.js +0 -67
- package/dist/chunks/studio-7nte2hj4.js +0 -613
- package/dist/chunks/studio-8jpzqk5s.js +0 -128
- package/dist/chunks/studio-8q517dfr.js +0 -24
- package/dist/chunks/studio-950k0dx6.js +0 -6939
- package/dist/chunks/studio-9n4mrmnb.js +0 -184
- package/dist/chunks/studio-a0tswy0w.js +0 -58
- package/dist/chunks/studio-ahnzd9rg.js +0 -23
- package/dist/chunks/studio-cmb03bg5.js +0 -13890
- package/dist/chunks/studio-d1ks410h.js +0 -175
- package/dist/chunks/studio-ef49pnzx.js +0 -387
- package/dist/chunks/studio-eqq1w638.js +0 -113
- package/dist/chunks/studio-ew0djmhg.js +0 -341
- package/dist/chunks/studio-gfgb8pe6.js +0 -1652
- package/dist/chunks/studio-h4rxscfc.js +0 -10
- package/dist/chunks/studio-jc994dnr.js +0 -1066
- package/dist/chunks/studio-kyh9avvv.js +0 -28
- package/dist/chunks/studio-m3hwn7y1.js +0 -120
- package/dist/chunks/studio-mtfnaqs9.js +0 -659
- package/dist/chunks/studio-n6j9t10q.js +0 -318
- package/dist/chunks/studio-n8b9wqwy.js +0 -291
- package/dist/chunks/studio-qcy05dp8.js +0 -1743
- package/dist/chunks/studio-qq6jym04.js +0 -53
- package/dist/chunks/studio-rdx8jcxy.js +0 -83
- package/dist/chunks/studio-rn9ta2mz.js +0 -111
- package/dist/chunks/studio-t7qb9db8.js +0 -665
- package/dist/chunks/studio-tmc5emrw.js +0 -8
- package/dist/chunks/studio-z6nw2ek2.js +0 -18
- package/dist/chunks/studio-zczps70q.js +0 -378
- package/dist/chunks/studio-zqazsct2.js +0 -1823
- package/dist/chunks/workspace-fjx52ryv.js +0 -89
- package/src/panels/activity-bar.ts +0 -251
- package/src/panels/panel-scheduler.ts +0 -219
- package/src/panels/style-inputs.ts +0 -237
- package/src/panels/target-line.ts +0 -274
- package/src/panels/welcome-screen.ts +0 -346
- package/src/ui/button-group.ts +0 -102
- package/src/ui/choice-field.ts +0 -72
- package/src/ui/field-row.ts +0 -249
- package/src/ui/formula-palette.ts +0 -213
- package/src/ui/icons.ts +0 -52
- package/src/ui/jx-theme.ts +0 -130
- package/src/ui/spectrum.ts +0 -340
- package/src/ui/value-selector.ts +0 -174
- package/src/ui/widgets.ts +0 -172
- /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
- /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
- /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
- /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
/// <reference lib="dom" />
|
|
2
1
|
/**
|
|
3
|
-
* Schema field
|
|
4
|
-
*
|
|
2
|
+
* Schema field semantics — what a studio field type IS, in JSON Schema terms, for every surface
|
|
3
|
+
* that edits one.
|
|
4
|
+
*
|
|
5
|
+
* There is no markup here any more, and that is the point. This module was the shared FIELD CARD
|
|
6
|
+
* for the content-types builder and the `$defs` editor, in lit over Spectrum; both draw the same
|
|
7
|
+
* card as a Jx document now (`surfaces/schema-builder.json` and `surfaces/settings-defs.json`, one
|
|
8
|
+
* vocabulary), and what neither of them could take with it is the dispatch below — which type a
|
|
9
|
+
* property has, which format it carries, and what a chosen type writes back. Three surfaces agree
|
|
10
|
+
* on that by importing it rather than by each reading `type`, `items.format` and `$ref` their own
|
|
11
|
+
* way; `grid/schema-columns.ts` says so at its own door.
|
|
5
12
|
*/
|
|
6
13
|
|
|
7
|
-
import {
|
|
8
|
-
import { camelToLabel, isMediaFormat } from "../utils/studio-utils";
|
|
14
|
+
import { isMediaFormat } from "../utils/studio-utils";
|
|
9
15
|
|
|
10
16
|
export interface SchemaProperty {
|
|
11
17
|
type?: string;
|
|
@@ -16,24 +22,6 @@ export interface SchemaProperty {
|
|
|
16
22
|
$ref?: string;
|
|
17
23
|
}
|
|
18
24
|
|
|
19
|
-
export interface FieldHandlers {
|
|
20
|
-
onDelete: (name: string) => void;
|
|
21
|
-
onToggleRequired: (name: string) => void;
|
|
22
|
-
onRename: (oldName: string, newName: string) => void;
|
|
23
|
-
onChangeType: (name: string, newType: string) => void;
|
|
24
|
-
onChangeFormat?: (name: string, format: string) => void;
|
|
25
|
-
onChangeRefTarget?: (name: string, target: string) => void;
|
|
26
|
-
onAddNestedField?: (
|
|
27
|
-
parentName: string,
|
|
28
|
-
state: { name: string; type: string; required: boolean },
|
|
29
|
-
) => void;
|
|
30
|
-
onDeleteNested?: (parentName: string, childName: string) => void;
|
|
31
|
-
onToggleNestedRequired?: (parentName: string, childName: string) => void;
|
|
32
|
-
onRenameNested?: (parentName: string, oldChild: string, newChild: string) => void;
|
|
33
|
-
onChangeNestedType?: (parentName: string, childName: string, newType: string) => void;
|
|
34
|
-
onChangeNestedFormat?: (parentName: string, childName: string, format: string) => void;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
25
|
export const FIELD_TYPES = ["string", "number", "boolean", "array", "object", "reference"];
|
|
38
26
|
|
|
39
27
|
export const FORMAT_OPTIONS = ["", "image", "date", "color"];
|
|
@@ -64,382 +52,6 @@ export function detectFieldFormat(schema: SchemaProperty) {
|
|
|
64
52
|
return schema.format || "";
|
|
65
53
|
}
|
|
66
54
|
|
|
67
|
-
/**
|
|
68
|
-
* Render a single schema field as an inline-editable form row.
|
|
69
|
-
*
|
|
70
|
-
* @param {string} fieldName
|
|
71
|
-
* @param {SchemaProperty} fieldSchema — JSON Schema property definition
|
|
72
|
-
* @param {boolean} isRequired
|
|
73
|
-
* @param {FieldHandlers} handlers
|
|
74
|
-
* @param {string[]} [contentTypeNames] - Available content type names for reference target picker
|
|
75
|
-
* @returns {import("lit-html").TemplateResult}
|
|
76
|
-
*/
|
|
77
|
-
export function fieldCardTpl(
|
|
78
|
-
fieldName: string,
|
|
79
|
-
fieldSchema: SchemaProperty,
|
|
80
|
-
isRequired: boolean,
|
|
81
|
-
handlers: FieldHandlers,
|
|
82
|
-
contentTypeNames: string[] = [],
|
|
83
|
-
) {
|
|
84
|
-
const type = detectFieldType(fieldSchema);
|
|
85
|
-
const format = detectFieldFormat(fieldSchema);
|
|
86
|
-
const isNested = type === "object";
|
|
87
|
-
const isRef = type === "reference";
|
|
88
|
-
const nestedProps = fieldSchema.properties || {};
|
|
89
|
-
const nestedRequired = fieldSchema.required || [];
|
|
90
|
-
// Reference targets live under a referenceable project section (e.g. `#/content/<type>`); strip
|
|
91
|
-
// The section prefix generically so any section's targets round-trip.
|
|
92
|
-
const refTarget = fieldSchema.$ref ? fieldSchema.$ref.replace(/^#\/[^/]+\//, "") : "";
|
|
93
|
-
|
|
94
|
-
return html`
|
|
95
|
-
<div class="schema-field-card">
|
|
96
|
-
<div class="schema-field-row">
|
|
97
|
-
<sp-field-label size="s" class="schema-field-label"
|
|
98
|
-
>${camelToLabel(fieldName)}</sp-field-label
|
|
99
|
-
>
|
|
100
|
-
<sp-textfield
|
|
101
|
-
size="s"
|
|
102
|
-
quiet
|
|
103
|
-
value=${fieldName}
|
|
104
|
-
class="schema-field-name-input"
|
|
105
|
-
@change=${(e: Event) => {
|
|
106
|
-
const target = e.target as HTMLInputElement;
|
|
107
|
-
const newName = target.value.trim();
|
|
108
|
-
if (newName && newName !== fieldName) {
|
|
109
|
-
handlers.onRename(fieldName, newName);
|
|
110
|
-
} else {
|
|
111
|
-
target.value = fieldName;
|
|
112
|
-
}
|
|
113
|
-
}}
|
|
114
|
-
@keydown=${(e: KeyboardEvent) => {
|
|
115
|
-
const target = e.target as HTMLInputElement;
|
|
116
|
-
if (e.key === "Enter") {
|
|
117
|
-
target.blur();
|
|
118
|
-
}
|
|
119
|
-
if (e.key === "Escape") {
|
|
120
|
-
target.value = fieldName;
|
|
121
|
-
target.blur();
|
|
122
|
-
}
|
|
123
|
-
}}
|
|
124
|
-
></sp-textfield>
|
|
125
|
-
${typePickerTpl(type, (newType) => handlers.onChangeType(fieldName, newType))}
|
|
126
|
-
${
|
|
127
|
-
type === "string" || type === "array"
|
|
128
|
-
? formatPickerTpl(format, (f) => {
|
|
129
|
-
if (handlers.onChangeFormat) {
|
|
130
|
-
handlers.onChangeFormat(fieldName, f);
|
|
131
|
-
}
|
|
132
|
-
})
|
|
133
|
-
: nothing
|
|
134
|
-
}
|
|
135
|
-
<sp-switch
|
|
136
|
-
size="s"
|
|
137
|
-
?checked=${isRequired}
|
|
138
|
-
@change=${() => handlers.onToggleRequired(fieldName)}
|
|
139
|
-
>
|
|
140
|
-
Req
|
|
141
|
-
</sp-switch>
|
|
142
|
-
<sp-action-button
|
|
143
|
-
size="xs"
|
|
144
|
-
quiet
|
|
145
|
-
title="Delete field"
|
|
146
|
-
@click=${() => handlers.onDelete(fieldName)}
|
|
147
|
-
>
|
|
148
|
-
<sp-icon-delete slot="icon"></sp-icon-delete>
|
|
149
|
-
</sp-action-button>
|
|
150
|
-
</div>
|
|
151
|
-
${
|
|
152
|
-
isRef && contentTypeNames.length > 0
|
|
153
|
-
? html`
|
|
154
|
-
<div class="schema-field-ref-target">
|
|
155
|
-
<sp-picker
|
|
156
|
-
size="s"
|
|
157
|
-
label="Target"
|
|
158
|
-
value=${refTarget}
|
|
159
|
-
@change=${(e: Event) => {
|
|
160
|
-
if (handlers.onChangeRefTarget) {
|
|
161
|
-
handlers.onChangeRefTarget(fieldName, (e.target as HTMLInputElement).value);
|
|
162
|
-
}
|
|
163
|
-
}}
|
|
164
|
-
>
|
|
165
|
-
${contentTypeNames.map((n) => html`<sp-menu-item value=${n}>${n}</sp-menu-item>`)}
|
|
166
|
-
</sp-picker>
|
|
167
|
-
</div>
|
|
168
|
-
`
|
|
169
|
-
: nothing
|
|
170
|
-
}
|
|
171
|
-
${
|
|
172
|
-
isNested
|
|
173
|
-
? html`
|
|
174
|
-
<div class="schema-field-nested">
|
|
175
|
-
${Object.entries(nestedProps).map(([name, sub]) =>
|
|
176
|
-
nestedFieldCardTpl(
|
|
177
|
-
fieldName,
|
|
178
|
-
name,
|
|
179
|
-
/** @type {SchemaProperty} */ sub,
|
|
180
|
-
nestedRequired.includes(name),
|
|
181
|
-
handlers,
|
|
182
|
-
),
|
|
183
|
-
)}
|
|
184
|
-
${nestedAddFieldTpl(fieldName, handlers)}
|
|
185
|
-
</div>
|
|
186
|
-
`
|
|
187
|
-
: nothing
|
|
188
|
-
}
|
|
189
|
-
</div>
|
|
190
|
-
`;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* Render a nested (child) field card — same inline-editable pattern but delegates to nested
|
|
195
|
-
* handlers.
|
|
196
|
-
*
|
|
197
|
-
* @param {string} parentName
|
|
198
|
-
* @param {string} childName
|
|
199
|
-
* @param {SchemaProperty} childSchema
|
|
200
|
-
* @param {boolean} isRequired
|
|
201
|
-
* @param {FieldHandlers} handlers
|
|
202
|
-
* @returns {import("lit-html").TemplateResult}
|
|
203
|
-
*/
|
|
204
|
-
function nestedFieldCardTpl(
|
|
205
|
-
parentName: string,
|
|
206
|
-
childName: string,
|
|
207
|
-
childSchema: SchemaProperty,
|
|
208
|
-
isRequired: boolean,
|
|
209
|
-
handlers: FieldHandlers,
|
|
210
|
-
) {
|
|
211
|
-
const type = detectFieldType(childSchema);
|
|
212
|
-
const format = detectFieldFormat(childSchema);
|
|
213
|
-
|
|
214
|
-
return html`
|
|
215
|
-
<div class="schema-field-card schema-field-card--nested">
|
|
216
|
-
<div class="schema-field-row">
|
|
217
|
-
<sp-textfield
|
|
218
|
-
size="s"
|
|
219
|
-
quiet
|
|
220
|
-
value=${childName}
|
|
221
|
-
class="schema-field-name-input"
|
|
222
|
-
@change=${(e: Event) => {
|
|
223
|
-
const target = e.target as HTMLInputElement;
|
|
224
|
-
const newName = target.value.trim();
|
|
225
|
-
if (newName && newName !== childName && handlers.onRenameNested) {
|
|
226
|
-
handlers.onRenameNested(parentName, childName, newName);
|
|
227
|
-
} else {
|
|
228
|
-
target.value = childName;
|
|
229
|
-
}
|
|
230
|
-
}}
|
|
231
|
-
@keydown=${(e: KeyboardEvent) => {
|
|
232
|
-
const target = e.target as HTMLInputElement;
|
|
233
|
-
if (e.key === "Enter") {
|
|
234
|
-
target.blur();
|
|
235
|
-
}
|
|
236
|
-
if (e.key === "Escape") {
|
|
237
|
-
target.value = childName;
|
|
238
|
-
target.blur();
|
|
239
|
-
}
|
|
240
|
-
}}
|
|
241
|
-
></sp-textfield>
|
|
242
|
-
${typePickerTpl(type, (newType) => {
|
|
243
|
-
if (handlers.onChangeNestedType) {
|
|
244
|
-
handlers.onChangeNestedType(parentName, childName, newType);
|
|
245
|
-
}
|
|
246
|
-
})}
|
|
247
|
-
${
|
|
248
|
-
type === "string" || type === "array"
|
|
249
|
-
? formatPickerTpl(format, (f) => {
|
|
250
|
-
if (handlers.onChangeNestedFormat) {
|
|
251
|
-
handlers.onChangeNestedFormat(parentName, childName, f);
|
|
252
|
-
}
|
|
253
|
-
})
|
|
254
|
-
: nothing
|
|
255
|
-
}
|
|
256
|
-
<sp-switch
|
|
257
|
-
size="s"
|
|
258
|
-
?checked=${isRequired}
|
|
259
|
-
@change=${() => {
|
|
260
|
-
if (handlers.onToggleNestedRequired) {
|
|
261
|
-
handlers.onToggleNestedRequired(parentName, childName);
|
|
262
|
-
}
|
|
263
|
-
}}
|
|
264
|
-
>
|
|
265
|
-
Req
|
|
266
|
-
</sp-switch>
|
|
267
|
-
<sp-action-button
|
|
268
|
-
size="xs"
|
|
269
|
-
quiet
|
|
270
|
-
title="Delete field"
|
|
271
|
-
@click=${() => {
|
|
272
|
-
if (handlers.onDeleteNested) {
|
|
273
|
-
handlers.onDeleteNested(parentName, childName);
|
|
274
|
-
}
|
|
275
|
-
}}
|
|
276
|
-
>
|
|
277
|
-
<sp-icon-delete slot="icon"></sp-icon-delete>
|
|
278
|
-
</sp-action-button>
|
|
279
|
-
</div>
|
|
280
|
-
</div>
|
|
281
|
-
`;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
/**
|
|
285
|
-
* Render an inline "Add Field" row for nested objects.
|
|
286
|
-
*
|
|
287
|
-
* @param {string} parentName
|
|
288
|
-
* @param {FieldHandlers} handlers
|
|
289
|
-
* @returns {import("lit-html").TemplateResult}
|
|
290
|
-
*/
|
|
291
|
-
function nestedAddFieldTpl(parentName: string, handlers: FieldHandlers) {
|
|
292
|
-
return html`
|
|
293
|
-
<div class="schema-nested-add">
|
|
294
|
-
<sp-textfield
|
|
295
|
-
size="s"
|
|
296
|
-
placeholder="field name"
|
|
297
|
-
class="schema-nested-add-name"
|
|
298
|
-
@keydown=${(e: KeyboardEvent) => {
|
|
299
|
-
if (e.key === "Enter") {
|
|
300
|
-
const target = e.target as HTMLInputElement;
|
|
301
|
-
const row = target.closest(".schema-nested-add");
|
|
302
|
-
const name = target.value.trim();
|
|
303
|
-
const typePicker = row?.querySelector("sp-picker") as HTMLInputElement | null;
|
|
304
|
-
const type = typePicker?.value || "string";
|
|
305
|
-
if (name && handlers.onAddNestedField) {
|
|
306
|
-
handlers.onAddNestedField(parentName, {
|
|
307
|
-
name,
|
|
308
|
-
required: false,
|
|
309
|
-
type,
|
|
310
|
-
});
|
|
311
|
-
target.value = "";
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
}}
|
|
315
|
-
></sp-textfield>
|
|
316
|
-
${typePickerTpl("string", () => {})}
|
|
317
|
-
<sp-action-button
|
|
318
|
-
size="xs"
|
|
319
|
-
quiet
|
|
320
|
-
title="Add nested field"
|
|
321
|
-
@click=${(e: Event) => {
|
|
322
|
-
const target = e.target as HTMLElement;
|
|
323
|
-
const row = target.closest(".schema-nested-add");
|
|
324
|
-
const nameInput = row?.querySelector(
|
|
325
|
-
".schema-nested-add-name",
|
|
326
|
-
) as HTMLInputElement | null;
|
|
327
|
-
const typePicker = row?.querySelector("sp-picker") as HTMLInputElement | null;
|
|
328
|
-
const name = nameInput?.value?.trim();
|
|
329
|
-
const type = typePicker?.value || "string";
|
|
330
|
-
if (name && handlers.onAddNestedField) {
|
|
331
|
-
handlers.onAddNestedField(parentName, {
|
|
332
|
-
name,
|
|
333
|
-
required: false,
|
|
334
|
-
type,
|
|
335
|
-
});
|
|
336
|
-
if (nameInput) {
|
|
337
|
-
nameInput.value = "";
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
}}
|
|
341
|
-
>
|
|
342
|
-
<sp-icon-add slot="icon"></sp-icon-add>
|
|
343
|
-
</sp-action-button>
|
|
344
|
-
</div>
|
|
345
|
-
`;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
/**
|
|
349
|
-
* Render the type picker as an sp-picker dropdown.
|
|
350
|
-
*
|
|
351
|
-
* @param {string} value
|
|
352
|
-
* @param {(type: string) => void} onChange
|
|
353
|
-
* @returns {import("lit-html").TemplateResult}
|
|
354
|
-
*/
|
|
355
|
-
export function typePickerTpl(value: string, onChange: (type: string) => void) {
|
|
356
|
-
return html`
|
|
357
|
-
<sp-picker
|
|
358
|
-
size="s"
|
|
359
|
-
label="Type"
|
|
360
|
-
value=${value}
|
|
361
|
-
@change=${(e: Event) => onChange((e.target as HTMLInputElement).value)}
|
|
362
|
-
>
|
|
363
|
-
${FIELD_TYPES.map((t) => html`<sp-menu-item value=${t}>${t}</sp-menu-item>`)}
|
|
364
|
-
</sp-picker>
|
|
365
|
-
`;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
/**
|
|
369
|
-
* Render the format picker as an sp-picker dropdown.
|
|
370
|
-
*
|
|
371
|
-
* @param {string} value
|
|
372
|
-
* @param {(format: string) => void} onChange
|
|
373
|
-
* @returns {import("lit-html").TemplateResult}
|
|
374
|
-
*/
|
|
375
|
-
export function formatPickerTpl(value: string, onChange: (format: string) => void) {
|
|
376
|
-
return html`
|
|
377
|
-
<sp-picker
|
|
378
|
-
size="s"
|
|
379
|
-
label="Format"
|
|
380
|
-
value=${value}
|
|
381
|
-
@change=${(e: Event) => onChange((e.target as HTMLInputElement).value)}
|
|
382
|
-
>
|
|
383
|
-
${FORMAT_OPTIONS.map((f) => html`<sp-menu-item value=${f}>${f || "(none)"}</sp-menu-item>`)}
|
|
384
|
-
</sp-picker>
|
|
385
|
-
`;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
/**
|
|
389
|
-
* Render the add-field form (inline, not a dialog).
|
|
390
|
-
*
|
|
391
|
-
* @param {{ name: string; type: string; format: string; required: boolean }} state
|
|
392
|
-
* @param {{
|
|
393
|
-
* onInput: (field: string, value: string | boolean) => void;
|
|
394
|
-
* onConfirm: () => void;
|
|
395
|
-
* onCancel: () => void;
|
|
396
|
-
* }} handlers
|
|
397
|
-
* @returns {import("lit-html").TemplateResult}
|
|
398
|
-
*/
|
|
399
|
-
export function addFieldFormTpl(
|
|
400
|
-
state: { name: string; type: string; format: string; required: boolean },
|
|
401
|
-
handlers: {
|
|
402
|
-
onInput: (field: string, value: string | boolean) => void;
|
|
403
|
-
onConfirm: () => void;
|
|
404
|
-
onCancel: () => void;
|
|
405
|
-
},
|
|
406
|
-
) {
|
|
407
|
-
return html`
|
|
408
|
-
<div class="schema-add-field">
|
|
409
|
-
<sp-textfield
|
|
410
|
-
size="s"
|
|
411
|
-
placeholder="Field name"
|
|
412
|
-
.value=${state.name}
|
|
413
|
-
@input=${(e: Event) => handlers.onInput("name", (e.target as HTMLInputElement).value)}
|
|
414
|
-
@keydown=${(e: KeyboardEvent) => {
|
|
415
|
-
if (e.key === "Enter") {
|
|
416
|
-
handlers.onConfirm();
|
|
417
|
-
}
|
|
418
|
-
if (e.key === "Escape") {
|
|
419
|
-
handlers.onCancel();
|
|
420
|
-
}
|
|
421
|
-
}}
|
|
422
|
-
></sp-textfield>
|
|
423
|
-
${typePickerTpl(state.type, (t) => handlers.onInput("type", t))}
|
|
424
|
-
${
|
|
425
|
-
state.type === "string" || state.type === "array"
|
|
426
|
-
? formatPickerTpl(state.format || "", (f) => handlers.onInput("format", f))
|
|
427
|
-
: nothing
|
|
428
|
-
}
|
|
429
|
-
<sp-switch
|
|
430
|
-
size="s"
|
|
431
|
-
?checked=${state.required}
|
|
432
|
-
@change=${(e: Event) =>
|
|
433
|
-
handlers.onInput("required", (e.target as HTMLInputElement).checked)}
|
|
434
|
-
>
|
|
435
|
-
Required
|
|
436
|
-
</sp-switch>
|
|
437
|
-
<sp-action-button size="s" @click=${handlers.onConfirm}>Add</sp-action-button>
|
|
438
|
-
<sp-action-button size="s" quiet @click=${handlers.onCancel}>Cancel</sp-action-button>
|
|
439
|
-
</div>
|
|
440
|
-
`;
|
|
441
|
-
}
|
|
442
|
-
|
|
443
55
|
/**
|
|
444
56
|
* Build a JSON Schema property definition from a type and optional format.
|
|
445
57
|
*
|
|
@@ -25,7 +25,14 @@
|
|
|
25
25
|
export interface SettingsSection {
|
|
26
26
|
key: string;
|
|
27
27
|
label: string;
|
|
28
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Nav icon name (reserved for future nav treatments).
|
|
30
|
+
*
|
|
31
|
+
* A KEY into the kit's glyph manifest (`@jxsuite/ui/icons`), the same space `PanelRecord.icon`
|
|
32
|
+
* resolves in — never a tag. A key with no row is not a missing element, it is zero nodes
|
|
33
|
+
* (`studio.md` §13.5), so a wrong name here is silent in both directions: silent now because
|
|
34
|
+
* nothing draws it, and silent later because `jx-icon` falls back to nothing.
|
|
35
|
+
*/
|
|
29
36
|
icon?: string | undefined;
|
|
30
37
|
/** Sort position — lower orders render higher in the inner nav. */
|
|
31
38
|
order: number;
|
|
@@ -31,6 +31,7 @@ import { optionalStringArg, stringProperty } from "../commands/command-args";
|
|
|
31
31
|
import { notify } from "../services/notify";
|
|
32
32
|
import { requireProjectState } from "../state";
|
|
33
33
|
import { PROJECT_CONFIG_PATH } from "../tabs/tab";
|
|
34
|
+
import { lendProjectConfigLayout } from "../tabs/project-config";
|
|
34
35
|
import { activeTab, focusPane, openTab, workspace } from "../workspace/workspace";
|
|
35
36
|
import {
|
|
36
37
|
notifySettingsDocument,
|
|
@@ -43,11 +44,8 @@ import { renderContextsSection } from "./contexts-section";
|
|
|
43
44
|
import { renderCssVarsEditor } from "./css-vars-editor";
|
|
44
45
|
import { renderDefsEditor } from "./defs-editor";
|
|
45
46
|
import { renderDependenciesEditor } from "./dependencies-editor";
|
|
46
|
-
import {
|
|
47
|
-
|
|
48
|
-
renderExtensionsSection,
|
|
49
|
-
renderRawJsonSection,
|
|
50
|
-
} from "./project-sections";
|
|
47
|
+
import { renderExtensionsSection } from "./extensions-section";
|
|
48
|
+
import { renderDeploySection, renderRawJsonSection } from "./project-sections";
|
|
51
49
|
import { renderGeneralSettings } from "./general-settings";
|
|
52
50
|
import { renderHeadEditor } from "./head-editor";
|
|
53
51
|
import { renderLocalesSection } from "./locales-section";
|
|
@@ -73,10 +71,18 @@ const SETTINGS_TAB_MODES = [SETTINGS_MODE, "stylebook", "source"];
|
|
|
73
71
|
/* Orders leave gaps so a contribution can land between two built-ins. Content Types is NOT here —
|
|
74
72
|
the parser extension contributes it (order 50) through its Content class descriptor's
|
|
75
73
|
`$studio.settings` block, registered via ./extension-sections, which is the same path any
|
|
76
|
-
extension's section takes.
|
|
74
|
+
extension's section takes.
|
|
75
|
+
|
|
76
|
+
`icon` is a KEY into the kit's glyph manifest (`@jxsuite/ui/icons`), not a tag — `studio.md`
|
|
77
|
+
§13.5 is about exactly this distinction, and a key with no row draws nothing and says nothing.
|
|
78
|
+
These were `sp-icon-*` names, which is the OTHER key space: they named Spectrum elements, so
|
|
79
|
+
every one of them resolved to nothing the moment the nav was ready to draw one. The field is
|
|
80
|
+
still documented as reserved (`section-registry.ts`), so nothing here draws today; the names are
|
|
81
|
+
held to the kit's manifest by `settings-document.test.ts` so that a name is right when the inner
|
|
82
|
+
nav does draw it, rather than discovered wrong then. */
|
|
77
83
|
|
|
78
84
|
registerSettingsSection({
|
|
79
|
-
icon: "
|
|
85
|
+
icon: "sliders-horizontal",
|
|
80
86
|
key: "overview",
|
|
81
87
|
label: "Overview",
|
|
82
88
|
order: 10,
|
|
@@ -90,14 +96,14 @@ registerSettingsSection({
|
|
|
90
96
|
* registry and moves into the document's inner nav without its renderer being touched.
|
|
91
97
|
*/
|
|
92
98
|
registerSettingsSection({
|
|
93
|
-
icon: "
|
|
99
|
+
icon: "browser",
|
|
94
100
|
key: "contexts",
|
|
95
101
|
label: "Contexts",
|
|
96
102
|
order: 15,
|
|
97
103
|
render: renderContextsSection,
|
|
98
104
|
});
|
|
99
105
|
registerSettingsSection({
|
|
100
|
-
icon: "
|
|
106
|
+
icon: "file-code",
|
|
101
107
|
key: "head",
|
|
102
108
|
label: "Site head",
|
|
103
109
|
order: 20,
|
|
@@ -111,7 +117,7 @@ registerSettingsSection({
|
|
|
111
117
|
* is the form over it.
|
|
112
118
|
*/
|
|
113
119
|
registerSettingsSection({
|
|
114
|
-
icon: "
|
|
120
|
+
icon: "globe",
|
|
115
121
|
key: "locales",
|
|
116
122
|
label: "Locales",
|
|
117
123
|
order: 25,
|
|
@@ -124,42 +130,42 @@ registerSettingsSection({
|
|
|
124
130
|
* key by name.
|
|
125
131
|
*/
|
|
126
132
|
registerSettingsSection({
|
|
127
|
-
icon: "
|
|
133
|
+
icon: "paint-brush",
|
|
128
134
|
key: "cssVars",
|
|
129
135
|
label: "CSS Variables",
|
|
130
136
|
order: 30,
|
|
131
137
|
render: renderCssVarsEditor,
|
|
132
138
|
});
|
|
133
139
|
registerSettingsSection({
|
|
134
|
-
icon: "
|
|
140
|
+
icon: "brackets-curly",
|
|
135
141
|
key: "definitions",
|
|
136
142
|
label: "Data Shapes",
|
|
137
143
|
order: 40,
|
|
138
144
|
render: renderDefsEditor,
|
|
139
145
|
});
|
|
140
146
|
registerSettingsSection({
|
|
141
|
-
icon: "
|
|
147
|
+
icon: "cube",
|
|
142
148
|
key: "dependencies",
|
|
143
149
|
label: "Packages",
|
|
144
150
|
order: 60,
|
|
145
151
|
render: renderDependenciesEditor,
|
|
146
152
|
});
|
|
147
153
|
registerSettingsSection({
|
|
148
|
-
icon: "
|
|
154
|
+
icon: "share-network",
|
|
149
155
|
key: "extensions",
|
|
150
156
|
label: "Extensions",
|
|
151
157
|
order: 70,
|
|
152
158
|
render: renderExtensionsSection,
|
|
153
159
|
});
|
|
154
160
|
registerSettingsSection({
|
|
155
|
-
icon: "
|
|
161
|
+
icon: "upload-simple",
|
|
156
162
|
key: "deploy",
|
|
157
163
|
label: "Deploy",
|
|
158
164
|
order: 80,
|
|
159
165
|
render: renderDeploySection,
|
|
160
166
|
});
|
|
161
167
|
registerSettingsSection({
|
|
162
|
-
icon: "
|
|
168
|
+
icon: "code",
|
|
163
169
|
key: "rawJson",
|
|
164
170
|
label: "Raw JSON",
|
|
165
171
|
order: 900,
|
|
@@ -224,6 +230,12 @@ export function showSettingsDocument(mode: string = SETTINGS_MODE): Tab | null {
|
|
|
224
230
|
Editor control offers the modes in that order. */
|
|
225
231
|
tab.session.ui.canvasMode = mode;
|
|
226
232
|
tab.session.ui.preview = false;
|
|
233
|
+
/* The tab was opened over the configuration OBJECT — the platform parsed it, so there is no text
|
|
234
|
+
here to read a layout from, and `doc.layout` is null. A ⌘S on it would then write the
|
|
235
|
+
formatter's layout for fresh output while a settings commit on the same document wrote the
|
|
236
|
+
file's (`tabs/project-config.ts`, issue 308). The chokepoint reads the file once anyway; it
|
|
237
|
+
lends the tab that record, and the Code view re-renders when it lands (`doc` is reactive). */
|
|
238
|
+
void lendProjectConfigLayout(tab);
|
|
227
239
|
return tab;
|
|
228
240
|
}
|
|
229
241
|
|
|
@@ -350,13 +362,8 @@ export function settingsCommands(): AnyCommand[] {
|
|
|
350
362
|
unchanged — `enabledWith` still refuses, so `registry.run` and the assistant's tool still
|
|
351
363
|
throw `CommandUnavailableError` exactly as before. */
|
|
352
364
|
enablement: (ctx) => ctx.project.open,
|
|
353
|
-
aiTool:
|
|
354
|
-
|
|
355
|
-
"Open the project's Settings, optionally on a named section (overview, contexts, head, " +
|
|
356
|
-
"locales, cssVars, definitions, dependencies, extensions, deploy, rawJson, or a section " +
|
|
357
|
-
"an extension contributes) and optionally at a named entry within it.",
|
|
358
|
-
name: "open_settings",
|
|
359
|
-
},
|
|
365
|
+
/* No `aiTool`, by §12.4's first deletion rule: this opens a surface for a person; the model
|
|
366
|
+
writes `project.json` through `write_file` and the extension verbs. */
|
|
360
367
|
run: async (_commandCtx, args) => {
|
|
361
368
|
const section = optionalStringArg("settings.open", args, "section");
|
|
362
369
|
const entry = optionalStringArg("settings.open", args, "entry");
|
|
@@ -415,12 +422,7 @@ export function settingsCommands(): AnyCommand[] {
|
|
|
415
422
|
requires: "an open project",
|
|
416
423
|
// §12.4: two verbs over ONE document declare ONE availability rule, byte-identical.
|
|
417
424
|
enablement: (ctx) => ctx.project.open,
|
|
418
|
-
aiTool:
|
|
419
|
-
description:
|
|
420
|
-
"Open the project's configuration document in its Project Styles editor — the design " +
|
|
421
|
-
"tokens and the default element styles that apply across every page.",
|
|
422
|
-
name: "open_project_styles",
|
|
423
|
-
},
|
|
425
|
+
/* No `aiTool`, by §12.4's first deletion rule: this opens a surface for a person. */
|
|
424
426
|
run: () => {
|
|
425
427
|
showSettingsDocument(PROJECT_STYLES_VIEW);
|
|
426
428
|
},
|