@jxsuite/studio 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/data/elements-meta.json +5 -15
- package/data/html-meta.json +51 -6
- package/dist/chunks/{2020-n6tfwnda.js → 2020-g79n01v9.js} +14 -14
- package/dist/chunks/action-group-sp6tna8v.js +118 -0
- package/dist/chunks/adapter-nj7tnjfn.js +13 -0
- package/dist/chunks/cf-account-picker-fyf63pmy.js +495 -0
- package/dist/chunks/cf-settings-71bv5zn9.js +20 -0
- package/dist/chunks/color-area-v17df7b8.js +154 -0
- package/dist/chunks/color-field-anwybnkn.js +208 -0
- package/dist/chunks/color-slider-44ez96fc.js +79 -0
- package/dist/chunks/color-xgg3kfw7.js +35 -0
- package/dist/chunks/combobox-5e7jev23.js +236 -0
- package/dist/chunks/components-2w1f35qs.js +18 -0
- package/dist/chunks/content-source-3wqeas45.js +46 -0
- package/dist/chunks/convert-to-repeater-d0cgnb6d.js +639 -0
- package/dist/chunks/dialog-s890b918.js +85 -0
- package/dist/chunks/editor-3qhbg51x.js +35 -0
- package/dist/chunks/entry-commands-d6g50j7s.js +42 -0
- package/dist/chunks/extension-sections-fy7q4fe9.js +651 -0
- package/dist/chunks/file-ops-3btj6st0.js +47 -0
- package/dist/chunks/files-ef8fgs3w.js +72 -0
- package/dist/chunks/format-host-3c33nwr8.js +40 -0
- package/dist/chunks/fs-events-13tj6sex.js +18 -0
- package/dist/chunks/git-panel-4wp2rn9b.js +49 -0
- package/dist/chunks/icons-yy10wk9r.js +402 -0
- package/dist/chunks/iframe-entry-15g3n6xv.js +114 -0
- package/dist/chunks/iframe-entry-b27vq81n.js +203 -0
- package/dist/chunks/iframe-entry-nbyxee1y.js +154 -0
- package/dist/chunks/iframe-host-jgesd924.js +115 -0
- package/dist/chunks/{index-wcnt3r9g.js → index-mdmyx6s2.js} +11 -11
- package/dist/chunks/index-n4j7qxyr.js +109 -0
- package/dist/chunks/{javascript-q8kpmfah.js → javascript-xvrfrpkb.js} +8 -9
- package/dist/chunks/{jsonMode-dkr040ga.js → jsonMode-tyx2kj6p.js} +526 -527
- package/dist/chunks/jx-validate-j0wxk72w.js +15 -0
- package/dist/chunks/layers-1nq5evsh.js +29 -0
- package/dist/chunks/layers-panel-ar2gh90g.js +40 -0
- package/dist/chunks/listbox-6v2ac08j.js +44 -0
- package/dist/chunks/lit-html-m244w9nh.js +17 -0
- package/dist/chunks/media-picker-2qbetq73.js +33 -0
- package/dist/chunks/menu-q99sy9rf.js +285 -0
- package/dist/chunks/menu-rf7n72mf.js +14 -0
- package/dist/chunks/{monaco-binding-rj6xpx9y.js → monaco-binding-sw6en4dw.js} +12 -15
- package/dist/chunks/monaco-buffer-bhy3hb6m.js +24 -0
- package/dist/chunks/{monaco-setup-vx9bhp1d.js → monaco-setup-8r62fj6y.js} +27 -37
- package/dist/chunks/notify-628t0anh.js +21 -0
- package/dist/chunks/number-field-5cndyft8.js +72 -0
- package/dist/chunks/parse-0zx14y15.js +10 -0
- package/dist/chunks/platform-ts9cg1a4.js +15 -0
- package/dist/chunks/popover-47z3ytva.js +25 -0
- package/dist/chunks/publish-panel-98f7sr3g.js +27 -0
- package/dist/chunks/quick-search-srzz83k2.js +45 -0
- package/dist/chunks/references-n553f0e1.js +26 -0
- package/dist/chunks/right-panel-rrgx2dn3.js +45 -0
- package/dist/chunks/section-registry-5pq32t0q.js +25 -0
- package/dist/chunks/select-2r16ez41.js +49 -0
- package/dist/chunks/split-g7nm1rgb.js +191 -0
- package/dist/chunks/studio-0hqbpbd0.js +62 -0
- package/dist/chunks/studio-18avnhjp.js +2430 -0
- package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
- package/dist/chunks/{studio-msd847zn.js → studio-25hkdrkw.js} +357 -86
- package/dist/chunks/studio-26d7myd1.js +258 -0
- package/dist/chunks/{studio-4r1pv6zf.js → studio-38emantv.js} +22 -5
- package/dist/chunks/studio-3gxv60tn.js +422 -0
- package/dist/chunks/{studio-fbf92ckf.js → studio-3hxkd92t.js} +275 -163
- package/dist/chunks/studio-4m0haseg.js +185 -0
- package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
- package/dist/chunks/{studio-1wagb550.js → studio-5523bpzt.js} +11 -11
- package/dist/chunks/{studio-x4qkdat5.js → studio-57mf66w2.js} +1749 -2481
- package/dist/chunks/studio-5jy81t3s.js +17463 -0
- package/dist/chunks/studio-5rt7sqa0.js +1168 -0
- package/dist/chunks/studio-5te5tqng.js +81 -0
- package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
- package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
- package/dist/chunks/studio-6xa21ej9.js +28 -0
- package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
- package/dist/chunks/{studio-ahn3pdgx.js → studio-79y5sz51.js} +52 -38
- package/dist/chunks/{studio-gcye7qka.js → studio-7e11jpa9.js} +21 -21
- package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
- package/dist/chunks/studio-7xptrg0j.js +954 -0
- package/dist/chunks/{studio-cft9r4r7.js → studio-81390n6f.js} +22 -22
- package/dist/chunks/{studio-q43a5y9h.js → studio-8jn5yhyn.js} +16 -16
- package/dist/chunks/studio-8qtrpzr3.js +839 -0
- package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
- package/dist/chunks/studio-9xxz1q69.js +1356 -0
- package/dist/chunks/studio-akbww0j5.js +13615 -0
- package/dist/chunks/{studio-x813zp48.js → studio-arfpe389.js} +30 -30
- package/dist/chunks/{studio-trxrabqf.js → studio-az3zd49t.js} +475 -283
- package/dist/chunks/studio-cpvb2ed1.js +1171 -0
- package/dist/chunks/{studio-f3wqjtk5.js → studio-d0300636.js} +5076 -18
- package/dist/chunks/{studio-bgxt93ga.js → studio-d055c37e.js} +13 -13
- package/dist/chunks/studio-d1ja2x9r.js +362 -0
- package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
- package/dist/chunks/{studio-3bqpr0zh.js → studio-em9nw8eh.js} +299 -110
- package/dist/chunks/studio-erdatzvp.js +1190 -0
- package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
- package/dist/chunks/studio-fabxk6r9.js +2811 -0
- package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
- package/dist/chunks/{studio-dm19q43r.js → studio-hhvs4sdg.js} +10 -10
- package/dist/chunks/{studio-q9jd1a60.js → studio-kcgff4r0.js} +15 -18
- package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
- package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
- package/dist/chunks/studio-pm6hgy7r.js +4763 -0
- package/dist/chunks/studio-q0a3yk4n.js +33 -0
- package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
- package/dist/chunks/studio-qahxvnan.js +111 -0
- package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
- package/dist/chunks/{studio-2b946z26.js → studio-rkstz940.js} +3658 -6134
- package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
- package/dist/chunks/studio-rpyah2ew.js +2805 -0
- package/dist/chunks/studio-rs76k67r.js +12 -0
- package/dist/chunks/{studio-jkftxyvz.js → studio-s6z853aq.js} +5858 -2152
- package/dist/chunks/{studio-6yw4y3my.js → studio-sgdc5pfc.js} +8 -8
- package/dist/chunks/studio-tb3ev01j.js +763 -0
- package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
- package/dist/chunks/studio-vhv5tgxm.js +51 -0
- package/dist/chunks/{studio-qjy2z9bv.js → studio-vz68yn9e.js} +32 -137
- package/dist/chunks/studio-wqpngpsk.js +174 -0
- package/dist/chunks/{studio-b55y6ewx.js → studio-x3rty6tr.js} +58 -58
- package/dist/chunks/studio-xsykpvsh.js +8448 -0
- package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
- package/dist/chunks/studio-yxa81f45.js +12 -0
- package/dist/chunks/swatch-group-t0n6h2rn.js +139 -0
- package/dist/chunks/tabs-wbp1cdws.js +156 -0
- package/dist/chunks/textfield-abk6qyee.js +73 -0
- package/dist/chunks/toast-780pvfbv.js +27 -0
- package/dist/chunks/toast-host-3sqv46sn.js +116 -0
- package/dist/chunks/toolbar-xbh5bhtr.js +194 -0
- package/dist/chunks/tooltip-eptb614w.js +369 -0
- package/dist/chunks/tree-a73p0pqm.js +367 -0
- package/dist/chunks/{tsMode-76kr53q0.js → tsMode-jy4m86rv.js} +83 -85
- package/dist/chunks/workspace-wrew8zk4.js +69 -0
- package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
- package/dist/iframe-entry.js +1780 -667
- package/dist/studio.js +52819 -36480
- package/dist/workers/editor.worker.js +1040 -1085
- package/dist/workers/json.worker.js +1946 -1991
- package/dist/workers/ts.worker.js +4960 -5005
- package/index.html +1 -0
- package/package.json +18 -52
- package/src/about/about-modal.ts +72 -123
- package/src/browse/library-commands.ts +20 -49
- package/src/browse/library-layouts.ts +87 -218
- package/src/browse/library-pane.ts +406 -438
- package/src/canvas/canvas-helpers.ts +0 -49
- package/src/canvas/canvas-live-render.ts +25 -2
- package/src/canvas/canvas-render.ts +666 -231
- package/src/canvas/canvas-surface.ts +0 -1
- package/src/canvas/canvas-utils.ts +310 -117
- package/src/canvas/dialog-path.ts +76 -0
- package/src/canvas/dialog-state.ts +67 -0
- package/src/canvas/diff-marks.ts +252 -0
- package/src/canvas/diff-toolbar.ts +349 -0
- package/src/canvas/diff-view.ts +123 -0
- package/src/canvas/edit-width-drag.ts +187 -0
- package/src/canvas/edit-width.ts +150 -0
- package/src/canvas/iframe-entry.ts +125 -8
- package/src/canvas/iframe-host.ts +271 -15
- package/src/canvas/iframe-interaction.ts +133 -13
- package/src/canvas/iframe-patch.ts +7 -1
- package/src/canvas/iframe-position.ts +5 -6
- package/src/canvas/iframe-protocol.ts +106 -5
- package/src/canvas/iframe-render.ts +373 -5
- package/src/canvas/iframe-slash.ts +2 -2
- package/src/canvas/iframe-subtree.ts +5 -8
- package/src/canvas/path-mapping.ts +25 -3
- package/src/canvas/popover-path.ts +106 -0
- package/src/canvas/popover-state.ts +155 -0
- package/src/canvas/surface-registry.ts +21 -10
- package/src/collab/presence-chips.ts +51 -73
- package/src/commands/app-commands.ts +10 -0
- package/src/commands/budget.ts +12 -0
- package/src/commands/command-args.ts +369 -6
- package/src/commands/defaults.ts +44 -14
- package/src/commands/live-context.ts +11 -5
- package/src/commands/reference.ts +12 -2
- package/src/commands/registry.ts +165 -8
- package/src/content/entry-commands.ts +16 -23
- package/src/content/entry-editor.ts +144 -101
- package/src/editor/canvas-slash-bridge.ts +2 -2
- package/src/editor/context-menu.ts +49 -200
- package/src/editor/convert-to-component.ts +42 -82
- package/src/editor/convert-to-repeater.ts +132 -173
- package/src/editor/inline-edit.ts +11 -0
- package/src/editor/shortcuts.ts +65 -26
- package/src/editor/slash-menu.ts +150 -157
- package/src/files/file-ops.ts +117 -11
- package/src/files/files.ts +943 -660
- package/src/files/json-layout.ts +474 -0
- package/src/files/serialize-document.ts +8 -1
- package/src/format/convert-file.ts +16 -10
- package/src/format/format-host.ts +50 -1
- package/src/github/github-auth.ts +71 -29
- package/src/github/github-publish.ts +57 -65
- package/src/grid/cell-editors.ts +46 -4
- package/src/grid/cell-popovers.ts +65 -62
- package/src/grid/grid-open.ts +86 -64
- package/src/grid/grid-panel.ts +390 -469
- package/src/grid/redirects-grid.ts +40 -44
- package/src/hosting/layout.ts +2 -0
- package/src/i18n/i18n-commands.ts +127 -62
- package/src/media/media-pane.ts +83 -133
- package/src/new-project/add-repo-modal.ts +125 -176
- package/src/new-project/import-tab.ts +181 -252
- package/src/new-project/location-fields.ts +93 -160
- package/src/new-project/new-project-modal.ts +376 -367
- package/src/packages/jxsuite-update.ts +76 -18
- package/src/panels/activity-panel.ts +137 -104
- package/src/panels/ai-chat/chat-markdown.ts +15 -13
- package/src/panels/ai-chat/chat-view.ts +307 -472
- package/src/panels/ai-chat/composer.ts +175 -163
- package/src/panels/ai-chat/sessions-view.ts +31 -62
- package/src/panels/ai-panel.ts +210 -185
- package/src/panels/block-action-bar.ts +437 -643
- package/src/panels/bottom-dock.ts +112 -47
- package/src/panels/chat-panel.ts +19 -14
- package/src/panels/data-explorer.ts +141 -102
- package/src/panels/data-grid.ts +183 -150
- package/src/panels/dnd.ts +75 -20
- package/src/panels/editors.ts +26 -19
- package/src/panels/elements-panel.ts +243 -186
- package/src/panels/empty-state.ts +26 -42
- package/src/panels/events-panel.ts +950 -729
- package/src/panels/formula-workspace.ts +434 -207
- package/src/panels/frontmatter-fields.ts +185 -153
- package/src/panels/frontmatter-panel.ts +411 -187
- package/src/panels/git-diff-open.ts +148 -0
- package/src/panels/git-panel.ts +679 -605
- package/src/panels/head-panel.ts +617 -435
- package/src/panels/i18n-panel.ts +153 -133
- package/src/panels/imports-panel.ts +388 -414
- package/src/panels/jump-bar.ts +174 -147
- package/src/panels/layers-panel.ts +785 -671
- package/src/panels/left-panel.ts +166 -94
- package/src/panels/navigator-panels.ts +1 -1
- package/src/panels/pane-context.ts +529 -677
- package/src/panels/pane-grid.ts +265 -241
- package/src/panels/panel-registry.ts +15 -4
- package/src/panels/problems-panel.ts +177 -99
- package/src/panels/properties-panel.ts +1525 -966
- package/src/panels/provenance.ts +31 -113
- package/src/panels/quick-search.ts +217 -172
- package/src/panels/right-panel.ts +135 -169
- package/src/panels/seo-modal.ts +346 -167
- package/src/panels/settings-menu.ts +109 -646
- package/src/panels/settings-pane.ts +102 -86
- package/src/panels/signals-panel.ts +1318 -1172
- package/src/panels/statement-editor.ts +556 -428
- package/src/panels/style-panel.ts +1367 -630
- package/src/panels/style-utils.ts +36 -32
- package/src/panels/stylebook-doc.ts +30 -73
- package/src/panels/stylebook-layers-panel.ts +202 -109
- package/src/panels/stylebook-panel.ts +124 -88
- package/src/panels/tab-strip.ts +385 -287
- package/src/platforms/cloud.ts +106 -16
- package/src/platforms/devserver.ts +13 -0
- package/src/publish/deploy-checklist.ts +124 -78
- package/src/publish/publish-commands.ts +4 -12
- package/src/publish/publish-panel.ts +134 -328
- package/src/services/a11y-report.ts +100 -43
- package/src/services/ai-command-tools.ts +468 -0
- package/src/services/ai-session-store.ts +6 -0
- package/src/services/ai-system-prompt.ts +110 -18
- package/src/services/ai-tools.ts +28 -143
- package/src/services/ai-write-report.ts +174 -0
- package/src/services/document-assistant.ts +50 -2
- package/src/services/idle.ts +16 -14
- package/src/services/live-surfaces.ts +237 -0
- package/src/services/model-uri.ts +75 -0
- package/src/services/notify.ts +63 -6
- package/src/services/popover-report.ts +325 -0
- package/src/services/surface-registry.ts +56 -0
- package/src/services/tool-executor.ts +6 -0
- package/src/settings/contexts-section.ts +301 -299
- package/src/settings/contributed-section.ts +361 -222
- package/src/settings/css-vars-editor.ts +320 -325
- package/src/settings/defs-editor.ts +572 -535
- package/src/settings/dependencies-editor.ts +79 -107
- package/src/settings/extension-commands.ts +379 -0
- package/src/settings/extension-rows.ts +113 -0
- package/src/settings/extensions-section.ts +287 -0
- package/src/settings/general-settings.ts +130 -181
- package/src/settings/head-editor.ts +10 -305
- package/src/settings/locales-section.ts +146 -196
- package/src/settings/preferences-accounts.ts +1 -1
- package/src/settings/preferences-dialog.ts +350 -330
- package/src/settings/project-sections.ts +108 -181
- package/src/settings/schema-field-ui.ts +11 -399
- package/src/settings/section-registry.ts +8 -1
- package/src/settings/settings-document.ts +31 -29
- package/src/shell/tree.ts +42 -87
- package/src/shell.ts +48 -36
- package/src/studio.ts +90 -67
- package/src/style/token-ref.ts +0 -39
- package/src/surfaces/about.json +263 -0
- package/src/surfaces/about.ts +163 -0
- package/src/surfaces/add-repo.json +486 -0
- package/src/surfaces/add-repo.ts +236 -0
- package/src/surfaces/ai-chat.json +2185 -0
- package/src/surfaces/ai-chat.ts +549 -0
- package/src/surfaces/ai-credentials-form.json +332 -0
- package/src/surfaces/ai-credentials-form.ts +151 -0
- package/src/surfaces/ai-managed-connect.json +108 -0
- package/src/surfaces/ai-managed-connect.ts +123 -0
- package/src/surfaces/ai-model-picker.json +114 -0
- package/src/surfaces/ai-model-picker.ts +139 -0
- package/src/surfaces/block-action-bar.json +640 -0
- package/src/surfaces/block-action-bar.ts +368 -0
- package/src/surfaces/bottom-dock.json +154 -0
- package/src/surfaces/bottom-dock.ts +125 -0
- package/src/surfaces/canvas-stage.json +444 -0
- package/src/surfaces/canvas-stage.ts +253 -0
- package/src/surfaces/cf-account-picker.json +300 -0
- package/src/surfaces/cf-account-picker.ts +214 -0
- package/src/surfaces/commandbar.json +984 -0
- package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +414 -389
- package/src/surfaces/convert-repeater.json +309 -0
- package/src/surfaces/convert-repeater.ts +276 -0
- package/src/surfaces/data-actions.json +157 -0
- package/src/surfaces/data-actions.ts +115 -0
- package/src/surfaces/dialog.json +289 -0
- package/src/surfaces/dialog.ts +343 -0
- package/src/surfaces/diff-toolbar.json +266 -0
- package/src/surfaces/diff-toolbar.ts +139 -0
- package/src/surfaces/doc-header.json +739 -0
- package/src/surfaces/doc-header.ts +223 -0
- package/src/surfaces/empty-state.json +152 -0
- package/src/surfaces/empty-state.ts +173 -0
- package/src/surfaces/entry-editor.json +281 -0
- package/src/surfaces/entry-editor.ts +191 -0
- package/src/surfaces/expression-editor.json +977 -0
- package/src/surfaces/expression-editor.ts +266 -0
- package/src/surfaces/files-panel.json +592 -0
- package/src/surfaces/files-panel.ts +301 -0
- package/src/surfaces/formula-palette.json +364 -0
- package/src/surfaces/formula-palette.ts +340 -0
- package/src/surfaces/git-panel.json +1822 -0
- package/src/surfaces/git-panel.ts +272 -0
- package/src/surfaces/github-auth.json +112 -0
- package/src/surfaces/github-auth.ts +139 -0
- package/src/surfaces/github-publish.json +206 -0
- package/src/surfaces/github-publish.ts +169 -0
- package/src/surfaces/grid-cell.json +218 -0
- package/src/surfaces/grid-cell.ts +120 -0
- package/src/surfaces/grid-open.json +147 -0
- package/src/surfaces/grid-open.ts +87 -0
- package/src/surfaces/grid-panel.json +706 -0
- package/src/surfaces/grid-panel.ts +206 -0
- package/src/surfaces/grid-replace.json +179 -0
- package/src/surfaces/grid-replace.ts +89 -0
- package/src/surfaces/grid-views.json +446 -0
- package/src/surfaces/grid-views.ts +172 -0
- package/src/surfaces/inspector-dock.json +187 -0
- package/src/surfaces/inspector-dock.ts +161 -0
- package/src/surfaces/jump-bar.json +243 -0
- package/src/surfaces/jump-bar.ts +129 -0
- package/src/surfaces/jxsuite-update.json +146 -0
- package/src/surfaces/jxsuite-update.ts +149 -0
- package/src/surfaces/library-pane.json +1509 -0
- package/src/surfaces/library-pane.ts +363 -0
- package/src/surfaces/logic-panel.json +1949 -0
- package/src/surfaces/logic-panel.ts +369 -0
- package/src/surfaces/logic-workspace.json +685 -0
- package/src/surfaces/logic-workspace.ts +238 -0
- package/src/surfaces/media-browser.json +303 -0
- package/src/surfaces/media-browser.ts +145 -0
- package/src/surfaces/media-field.json +163 -0
- package/src/surfaces/media-field.ts +116 -0
- package/src/surfaces/media-pane.json +513 -0
- package/src/surfaces/media-pane.ts +197 -0
- package/src/surfaces/menu.json +232 -0
- package/src/surfaces/menu.ts +375 -0
- package/src/surfaces/navigator-dock.json +113 -0
- package/src/surfaces/navigator-dock.ts +130 -0
- package/src/surfaces/new-project.json +1654 -0
- package/src/surfaces/new-project.ts +411 -0
- package/src/surfaces/palette.json +535 -0
- package/src/surfaces/pane-context.json +1497 -0
- package/src/surfaces/pane-context.ts +513 -0
- package/src/surfaces/pane-grid.json +188 -0
- package/src/surfaces/pane-grid.ts +250 -0
- package/src/surfaces/panel-activity.json +563 -0
- package/src/surfaces/panel-activity.ts +187 -0
- package/src/surfaces/panel-data.json +141 -0
- package/src/surfaces/panel-data.ts +156 -0
- package/src/surfaces/panel-deploy-checklist.json +283 -0
- package/src/surfaces/panel-deploy-checklist.ts +175 -0
- package/src/surfaces/panel-elements.json +367 -0
- package/src/surfaces/panel-elements.ts +175 -0
- package/src/surfaces/panel-i18n.json +569 -0
- package/src/surfaces/panel-i18n.ts +212 -0
- package/src/surfaces/panel-imports.json +780 -0
- package/src/surfaces/panel-imports.ts +209 -0
- package/src/surfaces/panel-outline.json +734 -0
- package/src/surfaces/panel-outline.ts +326 -0
- package/src/surfaces/panel-page.json +1017 -0
- package/src/surfaces/panel-page.ts +240 -0
- package/src/surfaces/panel-problems.json +497 -0
- package/src/surfaces/panel-problems.ts +157 -0
- package/src/surfaces/panel-signals.json +1973 -0
- package/src/surfaces/panel-signals.ts +436 -0
- package/src/surfaces/panel-stylebook-layers.json +317 -0
- package/src/surfaces/panel-stylebook-layers.ts +155 -0
- package/src/surfaces/preferences.json +850 -0
- package/src/surfaces/preferences.ts +332 -0
- package/src/surfaces/progress-modal.json +110 -0
- package/src/surfaces/progress-modal.ts +150 -0
- package/src/surfaces/properties-panel.json +1578 -0
- package/src/surfaces/properties-panel.ts +337 -0
- package/src/surfaces/publish.json +945 -0
- package/src/surfaces/publish.ts +392 -0
- package/src/surfaces/push-plan.json +110 -0
- package/src/surfaces/push-plan.ts +87 -0
- package/src/surfaces/rail.json +255 -0
- package/src/surfaces/rail.ts +206 -0
- package/src/surfaces/reference-field.json +191 -0
- package/src/surfaces/reference-field.ts +168 -0
- package/src/surfaces/schema-builder.json +1011 -0
- package/src/surfaces/schema-builder.ts +181 -0
- package/src/surfaces/schema-form.json +1013 -0
- package/src/surfaces/schema-form.ts +287 -0
- package/src/surfaces/secret-field.json +60 -0
- package/src/surfaces/secret-field.ts +146 -0
- package/src/surfaces/seo.json +932 -0
- package/src/surfaces/seo.ts +334 -0
- package/src/surfaces/settings-contexts.json +538 -0
- package/src/surfaces/settings-contexts.ts +196 -0
- package/src/surfaces/settings-contributed.json +489 -0
- package/src/surfaces/settings-contributed.ts +199 -0
- package/src/surfaces/settings-css-vars.json +820 -0
- package/src/surfaces/settings-css-vars.ts +199 -0
- package/src/surfaces/settings-defs.json +1363 -0
- package/src/surfaces/settings-defs.ts +232 -0
- package/src/surfaces/settings-deploy.json +108 -0
- package/src/surfaces/settings-deploy.ts +135 -0
- package/src/surfaces/settings-extensions.json +486 -0
- package/src/surfaces/settings-extensions.ts +201 -0
- package/src/surfaces/settings-head.json +779 -0
- package/src/surfaces/settings-head.ts +397 -0
- package/src/surfaces/settings-locales.json +420 -0
- package/src/surfaces/settings-locales.ts +137 -0
- package/src/surfaces/settings-overview.json +423 -0
- package/src/surfaces/settings-overview.ts +218 -0
- package/src/surfaces/settings-packages.json +549 -0
- package/src/surfaces/settings-packages.ts +158 -0
- package/src/surfaces/settings-pane.json +147 -0
- package/src/surfaces/settings-pane.ts +150 -0
- package/src/surfaces/settings-rawjson.json +104 -0
- package/src/surfaces/settings-rawjson.ts +107 -0
- package/src/surfaces/shell.json +99 -0
- package/src/surfaces/shell.ts +30 -0
- package/src/surfaces/slash-menu.json +180 -0
- package/src/surfaces/slash-menu.ts +272 -0
- package/src/surfaces/statements.json +607 -0
- package/src/surfaces/statements.ts +238 -0
- package/src/surfaces/statusbar.json +94 -0
- package/src/{panels → surfaces}/statusbar.ts +163 -90
- package/src/surfaces/style-panel.json +1643 -0
- package/src/surfaces/style-panel.ts +338 -0
- package/src/surfaces/stylebook-chrome.json +122 -0
- package/src/surfaces/stylebook-chrome.ts +122 -0
- package/src/surfaces/tab-strip.json +448 -0
- package/src/surfaces/tab-strip.ts +200 -0
- package/src/surfaces/target-line.json +419 -0
- package/src/surfaces/target-line.ts +349 -0
- package/src/surfaces/toasts.json +189 -0
- package/src/surfaces/welcome.json +571 -0
- package/src/surfaces/welcome.ts +338 -0
- package/src/tabs/project-config.ts +71 -15
- package/src/tabs/tab.ts +52 -1
- package/src/types.ts +22 -0
- package/src/ui/ai-credentials-form.ts +104 -100
- package/src/ui/ai-managed-connect.ts +54 -36
- package/src/ui/ai-model-picker.ts +75 -47
- package/src/ui/cf-account-picker.ts +76 -141
- package/src/ui/color-selector.ts +80 -301
- package/src/ui/dynamic-slot.ts +43 -283
- package/src/ui/expression-editor.ts +797 -576
- package/src/ui/field-input.ts +8 -181
- package/src/ui/form-controls.ts +838 -366
- package/src/ui/formula-chips.ts +80 -85
- package/src/ui/kit.ts +33 -0
- package/src/ui/layers.ts +293 -593
- package/src/ui/media-picker.ts +203 -284
- package/src/ui/panel-resize.ts +251 -64
- package/src/ui/popover-surface.ts +153 -0
- package/src/ui/progress-modal.ts +22 -60
- package/src/ui/regions.ts +13 -7
- package/src/ui/schema-form.ts +906 -440
- package/src/ui/surface.ts +122 -0
- package/src/ui/unit-selector.ts +15 -131
- package/src/ui/value-source.ts +14 -0
- package/src/ui/virtual-window.ts +88 -9
- package/src/utils/canvas-media.ts +72 -0
- package/src/utils/edit-display.ts +7 -2
- package/src/utils/element-selectors.ts +69 -0
- package/src/utils/link-target.ts +2 -2
- package/src/utils/studio-utils.ts +0 -10
- package/src/view.ts +15 -0
- package/src/workspace/pane-derive.ts +36 -14
- package/src/workspace/workspace.ts +15 -6
- package/styles/canvas.css +72 -467
- package/styles/forced-colors.css +48 -82
- package/styles/forced-colors.json +41 -0
- package/styles/inspector.css +2 -1301
- package/styles/overlays.css +96 -2823
- package/styles/panels.css +6 -1423
- package/styles/shell-frame.css +272 -0
- package/styles/shell-frame.json +227 -0
- package/styles/shell.css +0 -1568
- package/styles/tokens.css +65 -136
- package/styles/tokens.json +84 -0
- package/dist/chunks/Overlay.dev-etqjwyf9.js +0 -23
- package/dist/chunks/adapter-jkcyhgtr.js +0 -14
- package/dist/chunks/cf-account-picker-en86v7x7.js +0 -163
- package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
- package/dist/chunks/components-zmx10t62.js +0 -21
- package/dist/chunks/content-source-48xg86wj.js +0 -49
- package/dist/chunks/convert-to-repeater-43tfn7cs.js +0 -268
- package/dist/chunks/editor-cptq5jp1.js +0 -37
- package/dist/chunks/entry-commands-e63f1xc0.js +0 -46
- package/dist/chunks/extension-sections-txv08xxg.js +0 -311
- package/dist/chunks/file-ops-wbh4hhsx.js +0 -48
- package/dist/chunks/files-3kfkwhk4.js +0 -93
- package/dist/chunks/flow-qbfgrpeh.js +0 -634
- package/dist/chunks/focus-trap.esm-9t2drp0g.js +0 -1025
- package/dist/chunks/focus-visible-6eg70z18.js +0 -167
- package/dist/chunks/format-host-w16q81tf.js +0 -43
- package/dist/chunks/fs-events-hrrg328g.js +0 -21
- package/dist/chunks/git-panel-532whr1y.js +0 -59
- package/dist/chunks/index-zqxmqxmh.js +0 -109
- package/dist/chunks/jx-validate-8er6gbxy.js +0 -19
- package/dist/chunks/layers-panel-07hm7g5j.js +0 -67
- package/dist/chunks/layers-q75tj2mf.js +0 -45
- package/dist/chunks/lit-html-j055mkh8.js +0 -22
- package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
- package/dist/chunks/notify-yjm79n4s.js +0 -30
- package/dist/chunks/parse-24d0gay3.js +0 -19
- package/dist/chunks/platform-ba1j1gbh.js +0 -16
- package/dist/chunks/publish-panel-v9st96ja.js +0 -29
- package/dist/chunks/quick-search-zccjp6gv.js +0 -66
- package/dist/chunks/references-3qx8fkyp.js +0 -29
- package/dist/chunks/right-panel-vm3b6kwy.js +0 -46
- package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
- package/dist/chunks/sp-overlay.dev-qgvhnxf4.js +0 -18
- package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
- package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
- package/dist/chunks/sp-tooltip.dev-4sastdnw.js +0 -15
- package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
- package/dist/chunks/studio-0a5qrh01.js +0 -3
- package/dist/chunks/studio-0bq6eh7v.js +0 -12
- package/dist/chunks/studio-18j3bmcz.js +0 -14
- package/dist/chunks/studio-1ngbejft.js +0 -181
- package/dist/chunks/studio-4b5z1x43.js +0 -424
- package/dist/chunks/studio-4n2b5gzb.js +0 -357
- package/dist/chunks/studio-4rzyrtjz.js +0 -426
- package/dist/chunks/studio-5fx3g9jg.js +0 -4325
- package/dist/chunks/studio-5myknm0a.js +0 -1903
- package/dist/chunks/studio-7afd21nw.js +0 -67
- package/dist/chunks/studio-7nte2hj4.js +0 -613
- package/dist/chunks/studio-8jpzqk5s.js +0 -128
- package/dist/chunks/studio-8q517dfr.js +0 -24
- package/dist/chunks/studio-950k0dx6.js +0 -6939
- package/dist/chunks/studio-9n4mrmnb.js +0 -184
- package/dist/chunks/studio-a0tswy0w.js +0 -58
- package/dist/chunks/studio-ahnzd9rg.js +0 -23
- package/dist/chunks/studio-cmb03bg5.js +0 -13890
- package/dist/chunks/studio-d1ks410h.js +0 -175
- package/dist/chunks/studio-ef49pnzx.js +0 -387
- package/dist/chunks/studio-eqq1w638.js +0 -113
- package/dist/chunks/studio-ew0djmhg.js +0 -341
- package/dist/chunks/studio-gfgb8pe6.js +0 -1652
- package/dist/chunks/studio-h4rxscfc.js +0 -10
- package/dist/chunks/studio-jc994dnr.js +0 -1066
- package/dist/chunks/studio-kyh9avvv.js +0 -28
- package/dist/chunks/studio-m3hwn7y1.js +0 -120
- package/dist/chunks/studio-mtfnaqs9.js +0 -659
- package/dist/chunks/studio-n6j9t10q.js +0 -318
- package/dist/chunks/studio-n8b9wqwy.js +0 -291
- package/dist/chunks/studio-qcy05dp8.js +0 -1743
- package/dist/chunks/studio-qq6jym04.js +0 -53
- package/dist/chunks/studio-rdx8jcxy.js +0 -83
- package/dist/chunks/studio-rn9ta2mz.js +0 -111
- package/dist/chunks/studio-t7qb9db8.js +0 -665
- package/dist/chunks/studio-tmc5emrw.js +0 -8
- package/dist/chunks/studio-z6nw2ek2.js +0 -18
- package/dist/chunks/studio-zczps70q.js +0 -378
- package/dist/chunks/studio-zqazsct2.js +0 -1823
- package/dist/chunks/workspace-fjx52ryv.js +0 -89
- package/src/panels/activity-bar.ts +0 -251
- package/src/panels/panel-scheduler.ts +0 -219
- package/src/panels/style-inputs.ts +0 -237
- package/src/panels/target-line.ts +0 -274
- package/src/panels/welcome-screen.ts +0 -346
- package/src/ui/button-group.ts +0 -102
- package/src/ui/choice-field.ts +0 -72
- package/src/ui/field-row.ts +0 -249
- package/src/ui/formula-palette.ts +0 -213
- package/src/ui/icons.ts +0 -52
- package/src/ui/jx-theme.ts +0 -130
- package/src/ui/spectrum.ts +0 -340
- package/src/ui/value-selector.ts +0 -174
- package/src/ui/widgets.ts +0 -172
- /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
- /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
- /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
- /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
|
+
"$id": "StudioSettingsLocales",
|
|
4
|
+
"$description": "Project Settings → Locales: the languages this site is written in, which of them a page is written in when its file carries no locale directory, and how a locale is spelled in a URL. The adapter (`surfaces/settings-locales.ts`) hands in the declared list AS THE AUTHOR WROTE IT, the two option lists, what the pending tag refuses to be and whatever the last write left to say; the document draws them and hands every edit straight back. Nothing here reads `project.json` — a section that re-read the config while drawing would be a second opinion about a file one module already owns.",
|
|
5
|
+
"tagName": "section",
|
|
6
|
+
"attributes": {
|
|
7
|
+
"part": "locales"
|
|
8
|
+
},
|
|
9
|
+
"style": {
|
|
10
|
+
"$description": "The Locales section's own look. Three of the rules it used to borrow are gone rather than moved: `.settings-field-label` and `.settings-field-desc` are what `jx-field` draws for a labelled row (and it also names the control the label belongs to, which a bare `<label class=…>` never did), and the refusal under the tag field is `jx-textfield`'s own `error` sentence, whose region is permanent so the FIRST refusal is announced rather than only a later one.",
|
|
11
|
+
"display": "block",
|
|
12
|
+
"& [part=\"title\"]": {
|
|
13
|
+
"margin": "0 0 16px",
|
|
14
|
+
"fontSize": "16px",
|
|
15
|
+
"fontWeight": "600",
|
|
16
|
+
"color": "var(--fg)"
|
|
17
|
+
},
|
|
18
|
+
"& [part=\"intro\"]": {
|
|
19
|
+
"margin": "0 0 16px",
|
|
20
|
+
"fontSize": "var(--jx-text-md)",
|
|
21
|
+
"color": "var(--fg-dim)"
|
|
22
|
+
},
|
|
23
|
+
"& [part=\"error\"]": {
|
|
24
|
+
"$description": "A write that failed, said under the section title rather than pinned to a control: settings save on change, so a silent rejection would read as \"my edit just vanished\", and the whole file failed rather than one field.",
|
|
25
|
+
"margin": "6px 0 0",
|
|
26
|
+
"fontSize": "var(--jx-text-md)",
|
|
27
|
+
"color": "var(--danger)"
|
|
28
|
+
},
|
|
29
|
+
"& [part=\"field\"]": {
|
|
30
|
+
"marginBottom": "20px"
|
|
31
|
+
},
|
|
32
|
+
"& [part=\"panel\"]": {
|
|
33
|
+
"$description": "The language list. It used to borrow `.settings-list-panel`, whose `width: 200px` is the LEFT NAV of the two-column editors that class was written for — a fixed 200px column is not what a list of languages under a 320px picker wants, so the width it takes here is the one that lines up with the two controls below it. Its `overflow-y: auto` went the same way: nothing constrains this panel's height, so the declaration could never do anything.",
|
|
34
|
+
"display": "flex",
|
|
35
|
+
"flexDirection": "column",
|
|
36
|
+
"gap": "4px",
|
|
37
|
+
"padding": "12px",
|
|
38
|
+
"maxWidth": "320px",
|
|
39
|
+
"background": "var(--bg-panel)",
|
|
40
|
+
"borderRadius": "var(--radius)"
|
|
41
|
+
},
|
|
42
|
+
"& [part=\"row\"]": {
|
|
43
|
+
"display": "flex",
|
|
44
|
+
"alignItems": "center",
|
|
45
|
+
"justifyContent": "space-between",
|
|
46
|
+
"gap": "8px",
|
|
47
|
+
"padding": "4px 8px"
|
|
48
|
+
},
|
|
49
|
+
"& [part=\"name\"]": {
|
|
50
|
+
"fontSize": "var(--jx-text-md)",
|
|
51
|
+
"color": "var(--fg)",
|
|
52
|
+
"overflowWrap": "anywhere"
|
|
53
|
+
},
|
|
54
|
+
"& [part=\"tag\"]": {
|
|
55
|
+
"$description": "The raw BCP 47 tag beside the language's own name. Both are shown because they answer different questions — \"which language is this\" is the autonym, \"what do I type in a path\" is the tag — and a row showing only one of them sends the author to the docs to find the other.",
|
|
56
|
+
"marginInlineStart": "auto",
|
|
57
|
+
"fontFamily": "var(--font-mono)",
|
|
58
|
+
"fontSize": "var(--jx-text-md)",
|
|
59
|
+
"color": "var(--fg-dim)"
|
|
60
|
+
},
|
|
61
|
+
"& [part=\"empty\"]": {
|
|
62
|
+
"$description": "Drawn as a row rather than as a centred panel: `.settings-empty-state` centres itself because in a two-column editor it fills the whole right pane, and this one is a line where the first language will be.",
|
|
63
|
+
"padding": "4px 8px",
|
|
64
|
+
"fontSize": "var(--jx-text-md)",
|
|
65
|
+
"color": "var(--fg-dim)"
|
|
66
|
+
},
|
|
67
|
+
"& [part=\"add\"]": {
|
|
68
|
+
"display": "flex",
|
|
69
|
+
"alignItems": "center",
|
|
70
|
+
"gap": "6px"
|
|
71
|
+
},
|
|
72
|
+
"& [part=\"add-field\"]": {
|
|
73
|
+
"flex": "1",
|
|
74
|
+
"minWidth": "0"
|
|
75
|
+
},
|
|
76
|
+
"& [part=\"default\"], & [part=\"routing\"]": {
|
|
77
|
+
"maxWidth": "320px"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"children": [
|
|
81
|
+
{
|
|
82
|
+
"tagName": "h3",
|
|
83
|
+
"attributes": {
|
|
84
|
+
"part": "title"
|
|
85
|
+
},
|
|
86
|
+
"textContent": "Locales"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"tagName": "p",
|
|
90
|
+
"attributes": {
|
|
91
|
+
"part": "intro"
|
|
92
|
+
},
|
|
93
|
+
"textContent": "The languages this site is written in. A translation is a file under the locale's directory — pages/fr/about.json beside pages/about.json — so declaring a language here is what makes that directory mean something to the build and to Studio."
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"tagName": "div",
|
|
97
|
+
"attributes": {
|
|
98
|
+
"part": "error-slot",
|
|
99
|
+
"role": "none"
|
|
100
|
+
},
|
|
101
|
+
"$switch": {
|
|
102
|
+
"$ref": "#/state/hasError"
|
|
103
|
+
},
|
|
104
|
+
"cases": {
|
|
105
|
+
"true": {
|
|
106
|
+
"tagName": "p",
|
|
107
|
+
"attributes": {
|
|
108
|
+
"part": "error",
|
|
109
|
+
"role": "alert"
|
|
110
|
+
},
|
|
111
|
+
"textContent": "${state.error}"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"tagName": "jx-field",
|
|
117
|
+
"attributes": {
|
|
118
|
+
"part": "field"
|
|
119
|
+
},
|
|
120
|
+
"$props": {
|
|
121
|
+
"label": "Languages",
|
|
122
|
+
"span": true
|
|
123
|
+
},
|
|
124
|
+
"children": [
|
|
125
|
+
{
|
|
126
|
+
"tagName": "div",
|
|
127
|
+
"attributes": {
|
|
128
|
+
"part": "panel"
|
|
129
|
+
},
|
|
130
|
+
"children": [
|
|
131
|
+
{
|
|
132
|
+
"tagName": "div",
|
|
133
|
+
"attributes": {
|
|
134
|
+
"part": "list",
|
|
135
|
+
"role": "none"
|
|
136
|
+
},
|
|
137
|
+
"style": {
|
|
138
|
+
"display": "contents"
|
|
139
|
+
},
|
|
140
|
+
"$switch": {
|
|
141
|
+
"$ref": "#/state/listState"
|
|
142
|
+
},
|
|
143
|
+
"cases": {
|
|
144
|
+
"empty": {
|
|
145
|
+
"tagName": "div",
|
|
146
|
+
"attributes": {
|
|
147
|
+
"part": "empty"
|
|
148
|
+
},
|
|
149
|
+
"textContent": "No languages declared."
|
|
150
|
+
},
|
|
151
|
+
"listed": {
|
|
152
|
+
"tagName": "div",
|
|
153
|
+
"attributes": {
|
|
154
|
+
"part": "rows",
|
|
155
|
+
"role": "none"
|
|
156
|
+
},
|
|
157
|
+
"style": {
|
|
158
|
+
"display": "contents"
|
|
159
|
+
},
|
|
160
|
+
"children": [
|
|
161
|
+
{
|
|
162
|
+
"$prototype": "Array",
|
|
163
|
+
"items": {
|
|
164
|
+
"$ref": "#/state/locales"
|
|
165
|
+
},
|
|
166
|
+
"key": {
|
|
167
|
+
"$ref": "$map/item/tag"
|
|
168
|
+
},
|
|
169
|
+
"map": {
|
|
170
|
+
"tagName": "div",
|
|
171
|
+
"attributes": {
|
|
172
|
+
"part": "row"
|
|
173
|
+
},
|
|
174
|
+
"children": [
|
|
175
|
+
{
|
|
176
|
+
"tagName": "span",
|
|
177
|
+
"attributes": {
|
|
178
|
+
"part": "name"
|
|
179
|
+
},
|
|
180
|
+
"textContent": "${$map.item.label}"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"tagName": "span",
|
|
184
|
+
"attributes": {
|
|
185
|
+
"part": "tag"
|
|
186
|
+
},
|
|
187
|
+
"textContent": "${$map.item.tag}"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"tagName": "jx-action-button",
|
|
191
|
+
"attributes": {
|
|
192
|
+
"part": "remove"
|
|
193
|
+
},
|
|
194
|
+
"$props": {
|
|
195
|
+
"icon": "trash",
|
|
196
|
+
"size": "sm",
|
|
197
|
+
"label": "Remove ${$map.item.tag}",
|
|
198
|
+
"hint": "Remove ${$map.item.tag}"
|
|
199
|
+
},
|
|
200
|
+
"onclick": {
|
|
201
|
+
"$prototype": "Function",
|
|
202
|
+
"body": [
|
|
203
|
+
{
|
|
204
|
+
"operator": "call",
|
|
205
|
+
"target": {
|
|
206
|
+
"$ref": "#/state/remove"
|
|
207
|
+
},
|
|
208
|
+
"value": [
|
|
209
|
+
{
|
|
210
|
+
"$ref": "$map/item/tag"
|
|
211
|
+
}
|
|
212
|
+
]
|
|
213
|
+
}
|
|
214
|
+
]
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
]
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"tagName": "div",
|
|
226
|
+
"attributes": {
|
|
227
|
+
"part": "add"
|
|
228
|
+
},
|
|
229
|
+
"children": [
|
|
230
|
+
{
|
|
231
|
+
"tagName": "jx-textfield",
|
|
232
|
+
"attributes": {
|
|
233
|
+
"part": "add-field"
|
|
234
|
+
},
|
|
235
|
+
"$props": {
|
|
236
|
+
"label": "Language tag",
|
|
237
|
+
"placeholder": "fr-CA",
|
|
238
|
+
"size": "sm",
|
|
239
|
+
"value": {
|
|
240
|
+
"$ref": "#/state/pending"
|
|
241
|
+
},
|
|
242
|
+
"invalid": {
|
|
243
|
+
"$ref": "#/state/invalid"
|
|
244
|
+
},
|
|
245
|
+
"error": {
|
|
246
|
+
"$ref": "#/state/refusal"
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
"oninput": {
|
|
250
|
+
"$prototype": "Function",
|
|
251
|
+
"body": [
|
|
252
|
+
{
|
|
253
|
+
"operator": "call",
|
|
254
|
+
"target": {
|
|
255
|
+
"$ref": "#/state/edit"
|
|
256
|
+
},
|
|
257
|
+
"value": [
|
|
258
|
+
{
|
|
259
|
+
"$ref": "event#/target/value"
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
]
|
|
264
|
+
},
|
|
265
|
+
"onkeydown": {
|
|
266
|
+
"$prototype": "Function",
|
|
267
|
+
"body": [
|
|
268
|
+
{
|
|
269
|
+
"$switch": {
|
|
270
|
+
"$ref": "event#/key"
|
|
271
|
+
},
|
|
272
|
+
"cases": {
|
|
273
|
+
"Enter": [
|
|
274
|
+
{
|
|
275
|
+
"preventDefault": true
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"operator": "call",
|
|
279
|
+
"target": {
|
|
280
|
+
"$ref": "#/state/add"
|
|
281
|
+
},
|
|
282
|
+
"value": []
|
|
283
|
+
}
|
|
284
|
+
]
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
]
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"tagName": "jx-button",
|
|
292
|
+
"attributes": {
|
|
293
|
+
"part": "add-button"
|
|
294
|
+
},
|
|
295
|
+
"$props": {
|
|
296
|
+
"size": "sm"
|
|
297
|
+
},
|
|
298
|
+
"onclick": {
|
|
299
|
+
"$prototype": "Function",
|
|
300
|
+
"body": [
|
|
301
|
+
{
|
|
302
|
+
"operator": "call",
|
|
303
|
+
"target": {
|
|
304
|
+
"$ref": "#/state/add"
|
|
305
|
+
},
|
|
306
|
+
"value": []
|
|
307
|
+
}
|
|
308
|
+
]
|
|
309
|
+
},
|
|
310
|
+
"children": [
|
|
311
|
+
{
|
|
312
|
+
"tagName": "span",
|
|
313
|
+
"textContent": "Add"
|
|
314
|
+
}
|
|
315
|
+
]
|
|
316
|
+
}
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
]
|
|
320
|
+
}
|
|
321
|
+
]
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"tagName": "jx-field",
|
|
325
|
+
"attributes": {
|
|
326
|
+
"part": "field"
|
|
327
|
+
},
|
|
328
|
+
"$props": {
|
|
329
|
+
"label": "Default Language",
|
|
330
|
+
"description": "The language a page is written in when its file carries no locale directory.",
|
|
331
|
+
"span": true
|
|
332
|
+
},
|
|
333
|
+
"children": [
|
|
334
|
+
{
|
|
335
|
+
"tagName": "jx-select",
|
|
336
|
+
"attributes": {
|
|
337
|
+
"part": "default"
|
|
338
|
+
},
|
|
339
|
+
"$props": {
|
|
340
|
+
"label": "Default Language",
|
|
341
|
+
"size": "sm",
|
|
342
|
+
"options": {
|
|
343
|
+
"$ref": "#/state/localeOptions"
|
|
344
|
+
},
|
|
345
|
+
"value": {
|
|
346
|
+
"$ref": "#/state/defaultLocale"
|
|
347
|
+
},
|
|
348
|
+
"disabled": {
|
|
349
|
+
"$ref": "#/state/noLocales"
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
"onchange": {
|
|
353
|
+
"$prototype": "Function",
|
|
354
|
+
"body": [
|
|
355
|
+
{
|
|
356
|
+
"operator": "call",
|
|
357
|
+
"target": {
|
|
358
|
+
"$ref": "#/state/chooseDefault"
|
|
359
|
+
},
|
|
360
|
+
"value": [
|
|
361
|
+
{
|
|
362
|
+
"$ref": "event#/target/value"
|
|
363
|
+
}
|
|
364
|
+
]
|
|
365
|
+
}
|
|
366
|
+
]
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
]
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
"tagName": "jx-field",
|
|
373
|
+
"attributes": {
|
|
374
|
+
"part": "field"
|
|
375
|
+
},
|
|
376
|
+
"$props": {
|
|
377
|
+
"label": "URL Routing",
|
|
378
|
+
"description": "Whether the default language owns the unprefixed URLs, or every language is named in its own.",
|
|
379
|
+
"span": true
|
|
380
|
+
},
|
|
381
|
+
"children": [
|
|
382
|
+
{
|
|
383
|
+
"tagName": "jx-select",
|
|
384
|
+
"attributes": {
|
|
385
|
+
"part": "routing"
|
|
386
|
+
},
|
|
387
|
+
"$props": {
|
|
388
|
+
"label": "URL Routing",
|
|
389
|
+
"size": "sm",
|
|
390
|
+
"options": {
|
|
391
|
+
"$ref": "#/state/routings"
|
|
392
|
+
},
|
|
393
|
+
"value": {
|
|
394
|
+
"$ref": "#/state/routing"
|
|
395
|
+
},
|
|
396
|
+
"disabled": {
|
|
397
|
+
"$ref": "#/state/noLocales"
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
"onchange": {
|
|
401
|
+
"$prototype": "Function",
|
|
402
|
+
"body": [
|
|
403
|
+
{
|
|
404
|
+
"operator": "call",
|
|
405
|
+
"target": {
|
|
406
|
+
"$ref": "#/state/chooseRouting"
|
|
407
|
+
},
|
|
408
|
+
"value": [
|
|
409
|
+
{
|
|
410
|
+
"$ref": "event#/target/value"
|
|
411
|
+
}
|
|
412
|
+
]
|
|
413
|
+
}
|
|
414
|
+
]
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
]
|
|
418
|
+
}
|
|
419
|
+
]
|
|
420
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The Locales settings section, as a mounted document.
|
|
4
|
+
*
|
|
5
|
+
* `settings/locales-section.ts` is the flow — it reads `project.json`, decides what a tag may be
|
|
6
|
+
* and writes the `i18n` block — and this is the surface it draws into: the reactive scope the
|
|
7
|
+
* document reads, the flags it discriminates on, and the mount that stays put while the section is
|
|
8
|
+
* redrawn around it.
|
|
9
|
+
*
|
|
10
|
+
* **The scope is the whole re-render.** The lit version rebuilt its template on every keystroke
|
|
11
|
+
* that changed the verdict, and had to say so: "redrawing on every character would push `.value`
|
|
12
|
+
* back into a field the author is typing in". A reactive scope has no such trade — `jx-textfield`
|
|
13
|
+
* never moves the caret for a write equal to what is already there — so the caller refreshes on
|
|
14
|
+
* every edit and the rule that used to guard it is gone rather than transcribed.
|
|
15
|
+
*
|
|
16
|
+
* **Keyed by host, not by module.** Project Settings is a pane document and a pane can be split, so
|
|
17
|
+
* two containers may be showing this section at once; a single module-level mount would take the
|
|
18
|
+
* first one's surface away from it the moment the second drew. That is the same reason the flow
|
|
19
|
+
* keeps its pending tag and its parked error per container.
|
|
20
|
+
*
|
|
21
|
+
* @docs studio/projects/settings
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { reactive } from "../reactivity";
|
|
25
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
|
+
import localesDoc from "./settings-locales.json";
|
|
27
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
28
|
+
import type { JxDocument } from "@jxsuite/schema/types";
|
|
29
|
+
|
|
30
|
+
registerSurface("settings-locales", localesDoc as unknown as JxDocument);
|
|
31
|
+
|
|
32
|
+
/** One declared language: the tag as the author wrote it, and the name that language calls itself. */
|
|
33
|
+
export interface LocaleRow {
|
|
34
|
+
tag: string;
|
|
35
|
+
label: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** One row of a picker. */
|
|
39
|
+
export interface LocaleChoice {
|
|
40
|
+
value: string;
|
|
41
|
+
label: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** What the section shows — the flow's projection of `project.json` and of the form beside it. */
|
|
45
|
+
export interface LocalesView {
|
|
46
|
+
locales: LocaleRow[];
|
|
47
|
+
localeOptions: LocaleChoice[];
|
|
48
|
+
routings: LocaleChoice[];
|
|
49
|
+
defaultLocale: string;
|
|
50
|
+
routing: string;
|
|
51
|
+
/** The tag being typed, kept so an outside redraw does not take it away. */
|
|
52
|
+
pending: string;
|
|
53
|
+
/** Why the pending tag cannot be added, or `""` when it can. */
|
|
54
|
+
refusal: string;
|
|
55
|
+
/** What the last write failed with, or `""`. */
|
|
56
|
+
error: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Everything the reader can do here. Each one is a write the flow decides and makes. */
|
|
60
|
+
export interface LocalesActions {
|
|
61
|
+
add: () => void;
|
|
62
|
+
remove: (tag: string) => void;
|
|
63
|
+
edit: (value: string) => void;
|
|
64
|
+
chooseDefault: (value: string) => void;
|
|
65
|
+
chooseRouting: (value: string) => void;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** What the document discriminates on. Derived here, so the flow never has to spell it. */
|
|
69
|
+
interface LocalesFlags {
|
|
70
|
+
/**
|
|
71
|
+
* Which list to draw, as a `$switch` discriminant: the rows, or the sentence saying there are
|
|
72
|
+
* none. A list that simply rendered empty says nothing, and this is the one section where "no
|
|
73
|
+
* languages" is the ordinary state of a monolingual project rather than a failure.
|
|
74
|
+
*/
|
|
75
|
+
listState: "empty" | "listed";
|
|
76
|
+
/** Both pickers are disabled with nothing to pick — the empty case, said to the controls. */
|
|
77
|
+
noLocales: boolean;
|
|
78
|
+
/** The tag field's own refusal state, beside the sentence it draws under itself. */
|
|
79
|
+
invalid: boolean;
|
|
80
|
+
hasError: boolean;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
interface LocalesScope extends Record<string, unknown>, LocalesView, LocalesActions, LocalesFlags {}
|
|
84
|
+
|
|
85
|
+
interface Mounted {
|
|
86
|
+
scope: LocalesScope;
|
|
87
|
+
/** `null` while the mount is still in flight — which is a standing surface, not a missing one. */
|
|
88
|
+
handle: SurfaceHandle | null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const mounts = new WeakMap<HTMLElement, Mounted>();
|
|
92
|
+
|
|
93
|
+
/** The view plus the flags the document switches on. */
|
|
94
|
+
function derive(view: LocalesView): LocalesView & LocalesFlags {
|
|
95
|
+
return {
|
|
96
|
+
...view,
|
|
97
|
+
hasError: view.error !== "",
|
|
98
|
+
invalid: view.refusal !== "",
|
|
99
|
+
listState: view.locales.length === 0 ? "empty" : "listed",
|
|
100
|
+
noLocales: view.locales.length === 0,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Draw the section into `host`, or bring the one already there up to date.
|
|
106
|
+
*
|
|
107
|
+
* A mount whose root has left the document is remade; one still standing is only assigned to, which
|
|
108
|
+
* is what makes an edit reconcile the row that changed instead of rebuilding the form under the
|
|
109
|
+
* reader's caret.
|
|
110
|
+
*
|
|
111
|
+
* @param {HTMLElement} host The section container the registry handed the renderer.
|
|
112
|
+
* @param {LocalesView} view What to show.
|
|
113
|
+
* @param {LocalesActions} actions What the reader may do — read once, when the surface is mounted.
|
|
114
|
+
*/
|
|
115
|
+
export function renderLocalesSurface(
|
|
116
|
+
host: HTMLElement,
|
|
117
|
+
view: LocalesView,
|
|
118
|
+
actions: LocalesActions,
|
|
119
|
+
): void {
|
|
120
|
+
const existing = mounts.get(host);
|
|
121
|
+
if (existing && (existing.handle === null || existing.handle.root.isConnected)) {
|
|
122
|
+
Object.assign(existing.scope, derive(view));
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
existing?.handle?.dispose();
|
|
126
|
+
host.textContent = "";
|
|
127
|
+
const scope = reactive({ ...derive(view), ...actions }) as LocalesScope;
|
|
128
|
+
const record: Mounted = { handle: null, scope };
|
|
129
|
+
mounts.set(host, record);
|
|
130
|
+
/* No race to arbitrate: a redraw arriving while this is in flight takes the branch above — a
|
|
131
|
+
record with no handle yet IS the standing one — so a second mount into the same host cannot
|
|
132
|
+
start before this settles. The previous handle, when there was one, was disposed a few lines
|
|
133
|
+
up; that is the only mount this surface ever has to take down. */
|
|
134
|
+
void mountSurface("settings-locales", scope, host).then((handle) => {
|
|
135
|
+
record.handle = handle;
|
|
136
|
+
});
|
|
137
|
+
}
|