@jxsuite/studio 4.1.0 → 5.1.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-qwkm9zrf.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-vj72gqtq.js +20 -0
- package/dist/chunks/content-source-5mex4x1h.js +46 -0
- package/dist/chunks/convert-to-repeater-n64h8znc.js +639 -0
- package/dist/chunks/dialog-s890b918.js +85 -0
- package/dist/chunks/editor-3qhbg51x.js +35 -0
- package/dist/chunks/entry-commands-234hjnqw.js +42 -0
- package/dist/chunks/extension-sections-3hpcambp.js +651 -0
- package/dist/chunks/file-ops-8yhd83xr.js +47 -0
- package/dist/chunks/files-hnxqxtsg.js +72 -0
- package/dist/chunks/format-host-779sfp2n.js +40 -0
- package/dist/chunks/fs-events-b88z7g4h.js +18 -0
- package/dist/chunks/git-panel-xwj8fpab.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-syr0f9sb.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-ff81wthn.js +30 -0
- package/dist/chunks/layers-panel-pnnghw12.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-cqhhxhhe.js +33 -0
- package/dist/chunks/menu-9p2w46gj.js +15 -0
- package/dist/chunks/menu-q99sy9rf.js +285 -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-5zt840sy.js +27 -0
- package/dist/chunks/quick-search-3748564r.js +45 -0
- package/dist/chunks/references-qvvxej7h.js +26 -0
- package/dist/chunks/right-panel-eccz92qt.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-kryvsw6j.js → studio-1k325pwf.js} +48 -48
- package/dist/chunks/{studio-b55y6ewx.js → studio-1knfqgy7.js} +58 -58
- package/dist/chunks/{studio-2b946z26.js → studio-1z1kcjv4.js} +3628 -6095
- package/dist/chunks/studio-3773086z.js +111 -0
- package/dist/chunks/{studio-4r1pv6zf.js → studio-38emantv.js} +22 -5
- package/dist/chunks/{studio-x813zp48.js → studio-3rz5md06.js} +30 -30
- package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
- package/dist/chunks/studio-5te5tqng.js +81 -0
- package/dist/chunks/studio-5wt9nvhd.js +4763 -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-gcye7qka.js → studio-7e11jpa9.js} +21 -21
- package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
- package/dist/chunks/studio-7xnmgv66.js +13615 -0
- package/dist/chunks/studio-8scdew0e.js +258 -0
- package/dist/chunks/{studio-fbf92ckf.js → studio-93zafjcm.js} +275 -163
- package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
- package/dist/chunks/studio-a79k90n9.js +1162 -0
- package/dist/chunks/studio-aj37eer3.js +422 -0
- package/dist/chunks/studio-b0k5tqgp.js +2432 -0
- package/dist/chunks/studio-b4s9eykd.js +2811 -0
- package/dist/chunks/{studio-f3wqjtk5.js → studio-d0300636.js} +5076 -18
- package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
- package/dist/chunks/studio-e1pgga3k.js +839 -0
- package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
- package/dist/chunks/{studio-q43a5y9h.js → studio-g3jevyjt.js} +16 -16
- package/dist/chunks/studio-gb13095a.js +2806 -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-x4qkdat5.js → studio-js8nv53n.js} +1749 -2481
- package/dist/chunks/{studio-qjy2z9bv.js → studio-jxp12rnj.js} +32 -137
- package/dist/chunks/{studio-trxrabqf.js → studio-k75n7vhp.js} +527 -283
- package/dist/chunks/{studio-q9jd1a60.js → studio-kcgff4r0.js} +15 -18
- package/dist/chunks/studio-kkqkcp3d.js +17668 -0
- package/dist/chunks/studio-mhhyamxf.js +763 -0
- package/dist/chunks/{studio-cft9r4r7.js → studio-nq5yf5mp.js} +22 -22
- package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
- package/dist/chunks/studio-nzzpvzx9.js +185 -0
- package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
- package/dist/chunks/{studio-3bqpr0zh.js → studio-pxbgypmg.js} +299 -110
- package/dist/chunks/studio-q0a3yk4n.js +33 -0
- package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
- package/dist/chunks/{studio-6yw4y3my.js → studio-qhhm6hbt.js} +8 -8
- package/dist/chunks/studio-qk4bfsq2.js +362 -0
- package/dist/chunks/{studio-msd847zn.js → studio-qk90fgqm.js} +361 -90
- package/dist/chunks/{studio-jkftxyvz.js → studio-r6nvacqs.js} +5861 -2154
- package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
- package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
- package/dist/chunks/studio-rs76k67r.js +12 -0
- package/dist/chunks/studio-sbjyc8bt.js +954 -0
- package/dist/chunks/{studio-1wagb550.js → studio-syg2tadj.js} +11 -11
- package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
- package/dist/chunks/studio-tqgryxwg.js +1171 -0
- package/dist/chunks/studio-try13h8c.js +8448 -0
- package/dist/chunks/studio-vfq8qpjt.js +1219 -0
- package/dist/chunks/studio-vhv5tgxm.js +51 -0
- package/dist/chunks/{studio-ahn3pdgx.js → studio-vw7mzp6z.js} +52 -38
- package/dist/chunks/studio-wqpngpsk.js +174 -0
- package/dist/chunks/studio-wqz6dggm.js +1356 -0
- package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
- package/dist/chunks/studio-yxa81f45.js +12 -0
- package/dist/chunks/studio-zdn2g6dt.js +148 -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-t55jdjbx.js +69 -0
- package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
- package/dist/iframe-entry.js +1873 -673
- package/dist/studio.js +52757 -36535
- 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 +333 -113
- 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 +404 -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 +177 -10
- package/src/commands/run-reported.ts +120 -0
- 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 +76 -49
- package/src/editor/slash-menu.ts +150 -157
- package/src/files/components.ts +39 -0
- package/src/files/file-ops.ts +117 -11
- package/src/files/files.ts +944 -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 +137 -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/packages/pull-package-sync.ts +5 -1
- 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 +213 -185
- package/src/panels/block-action-bar.ts +444 -645
- 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 +148 -135
- package/src/panels/imports-panel.ts +388 -414
- package/src/panels/jump-bar.ts +175 -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 +181 -99
- package/src/panels/properties-panel.ts +1525 -966
- package/src/panels/provenance.ts +31 -113
- package/src/panels/quick-search.ts +223 -184
- package/src/panels/right-panel.ts +135 -169
- package/src/panels/seo-modal.ts +346 -167
- package/src/panels/settings-menu.ts +114 -661
- 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 +386 -288
- 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 +538 -0
- package/src/services/ai-project-tools.ts +8 -2
- package/src/services/ai-session-store.ts +6 -0
- package/src/services/ai-system-prompt.ts +112 -24
- package/src/services/ai-tools.ts +36 -212
- package/src/services/ai-write-report.ts +174 -0
- package/src/services/document-assistant.ts +59 -8
- 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 +104 -69
- 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 +985 -0
- package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +417 -391
- 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 +164 -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 +111 -21
- 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 +296 -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 +75 -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-bgxt93ga.js +0 -62
- 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
|
@@ -7,26 +7,30 @@
|
|
|
7
7
|
* now, beside the colour schemes and feature queries they share a map with. The platform adapter
|
|
8
8
|
* has moved to Deploy in P6.2, because §2 principle 5 says a definition site is a LEVEL, not a
|
|
9
9
|
* field on some other level's form — and "what this site is" and "where it ships" are two levels.
|
|
10
|
+
*
|
|
11
|
+
* **The markup left too.** The section is the `settings-overview` surface
|
|
12
|
+
* (`surfaces/settings-overview.json`), mounted by `surfaces/settings-overview.ts`; what is here is
|
|
13
|
+
* the section itself — what a value means, what is refused, what reaches `project.json`, and what a
|
|
14
|
+
* failed write says. `renderGeneralSettings` is unchanged as a contract: the registry hands a
|
|
15
|
+
* container to a `render`, and this one mounts a document into it instead of rendering lit.
|
|
10
16
|
*/
|
|
11
17
|
|
|
12
|
-
import { html, render as litRender, nothing } from "lit-html";
|
|
13
|
-
import { live } from "lit-html/directives/live.js";
|
|
14
18
|
import { errorMessage } from "@jxsuite/schema/parse";
|
|
15
19
|
import { projectState } from "../store";
|
|
16
20
|
import { updateSiteConfig } from "../site-context";
|
|
17
21
|
import { activeRegistry } from "../commands/active-registry";
|
|
18
22
|
import { getPlatform } from "../platform";
|
|
19
|
-
|
|
23
|
+
import { mountOverviewSurface } from "../surfaces/settings-overview";
|
|
24
|
+
|
|
25
|
+
import type {
|
|
26
|
+
OverviewActions,
|
|
27
|
+
OverviewError,
|
|
28
|
+
OverviewErrorField,
|
|
29
|
+
OverviewSurfaceHandle,
|
|
30
|
+
OverviewValues,
|
|
31
|
+
} from "../surfaces/settings-overview";
|
|
20
32
|
import type { JxHeadEntry, ProjectConfig } from "@jxsuite/schema/types";
|
|
21
33
|
|
|
22
|
-
/** Which control an error belongs under. `"section"` puts it at the top of the section. */
|
|
23
|
-
type ErrorField = "name" | "description" | "url" | "favicon" | "section";
|
|
24
|
-
|
|
25
|
-
interface GeneralError {
|
|
26
|
-
field: ErrorField;
|
|
27
|
-
message: string;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
34
|
/**
|
|
31
35
|
* The last failed write, per rendered section.
|
|
32
36
|
*
|
|
@@ -37,7 +41,15 @@ interface GeneralError {
|
|
|
37
41
|
* the user sees it. Keyed by container so two mounted copies (and two tests) never share a
|
|
38
42
|
* message.
|
|
39
43
|
*/
|
|
40
|
-
const errors = new WeakMap<HTMLElement,
|
|
44
|
+
const errors = new WeakMap<HTMLElement, OverviewError>();
|
|
45
|
+
|
|
46
|
+
/** The surface mounted in each container, so a redraw updates one rather than making another. */
|
|
47
|
+
const mounted = new WeakMap<HTMLElement, OverviewSurfaceHandle>();
|
|
48
|
+
|
|
49
|
+
/** The live project configuration, read at the moment it is needed rather than at render time. */
|
|
50
|
+
function config(): ProjectConfig {
|
|
51
|
+
return (projectState?.projectConfig || {}) as ProjectConfig;
|
|
52
|
+
}
|
|
41
53
|
|
|
42
54
|
// ─── Site description ($head meta) ───────────────────────────────────────────
|
|
43
55
|
|
|
@@ -51,8 +63,8 @@ function isDescriptionMeta(entry: JxHeadEntry): boolean {
|
|
|
51
63
|
* closed (`unevaluatedProperties: false`) — so it lives where `@jxsuite/create` writes it and where
|
|
52
64
|
* the browser reads it: the `<meta name="description">` entry of `$head`.
|
|
53
65
|
*/
|
|
54
|
-
function readDescription(
|
|
55
|
-
const entry = (
|
|
66
|
+
function readDescription(cfg: ProjectConfig): string {
|
|
67
|
+
const entry = (cfg.$head ?? []).find((e) => isDescriptionMeta(e));
|
|
56
68
|
return typeof entry?.attributes?.content === "string" ? entry.attributes.content : "";
|
|
57
69
|
}
|
|
58
70
|
|
|
@@ -84,15 +96,56 @@ function headWithDescription(head: JxHeadEntry[], text: string): JxHeadEntry[] {
|
|
|
84
96
|
*/
|
|
85
97
|
const CLEAR_URL = { url: undefined } as unknown as Partial<ProjectConfig>;
|
|
86
98
|
|
|
87
|
-
// ───
|
|
99
|
+
// ─── Projection ──────────────────────────────────────────────────────────────
|
|
88
100
|
|
|
89
|
-
/**
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
101
|
+
/**
|
|
102
|
+
* What the surface should be showing, from the configuration and the registry as they stand now.
|
|
103
|
+
*
|
|
104
|
+
* The Project Styles button is rendered FROM the `styles.open` record, so it is disabled rather
|
|
105
|
+
* than absent when it cannot act (§12.3) and it cannot drift from the palette row or the gear menu.
|
|
106
|
+
* The record's TITLE, and nothing else off the registry: `disabledReason` would be the §12.3 shape
|
|
107
|
+
* for a control that can be inapplicable, but this one cannot be — `styles.open` is gated on
|
|
108
|
+
* `ctx.project.open` and Overview is a section of the project's own configuration document, so by
|
|
109
|
+
* the time this renders the answer is always yes. Asking anyway would also be a FOCUS read inside a
|
|
110
|
+
* function that was handed a container, which is what `scripts/check-pane-singletons.ts` rule 4
|
|
111
|
+
* forbids: a pane-scoped surface must not report the focused pane's state. A project-level verb
|
|
112
|
+
* happens to read the same in every pane, but the way to be right about that is not to ask. The one
|
|
113
|
+
* thing that can genuinely be missing is the registry itself (bootstrap order, a test), and that is
|
|
114
|
+
* an existence check, not a state read.
|
|
115
|
+
*/
|
|
116
|
+
function values(container: HTMLElement): OverviewValues {
|
|
117
|
+
const cfg = config();
|
|
118
|
+
const command = activeRegistry()?.get("styles.open");
|
|
119
|
+
return {
|
|
120
|
+
description: readDescription(cfg),
|
|
121
|
+
error: errors.get(container) ?? null,
|
|
122
|
+
favicon: typeof cfg.favicon === "string" ? cfg.favicon : "",
|
|
123
|
+
name: cfg.name ?? "",
|
|
124
|
+
stylesDisabled: command === undefined,
|
|
125
|
+
stylesTitle: command?.title ?? "",
|
|
126
|
+
url: cfg.url ?? "",
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/** The decisions, bound to one container's surface. Made once, when that surface is mounted. */
|
|
131
|
+
function actions(container: HTMLElement): OverviewActions {
|
|
132
|
+
/**
|
|
133
|
+
* What the control now holds, told to the scope before anything is decided about it.
|
|
134
|
+
*
|
|
135
|
+
* Without this a refusal leaves the refused text in the field: the binding writes the value the
|
|
136
|
+
* scope names, and the scope never said anything but the value on disk — so re-stating it is not
|
|
137
|
+
* a change and nothing is written back. Echoing first makes the snap-back a real move, which is
|
|
138
|
+
* the job `live()` did in the template this replaced.
|
|
139
|
+
*/
|
|
140
|
+
const echo = (patch: Partial<OverviewValues>): void => {
|
|
141
|
+
mounted.get(container)?.update(patch);
|
|
142
|
+
};
|
|
93
143
|
|
|
94
144
|
/** Persist a patch, surfacing the rejection instead of swallowing it. */
|
|
95
|
-
const persist = async (
|
|
145
|
+
const persist = async (
|
|
146
|
+
patch: Partial<ProjectConfig>,
|
|
147
|
+
field: OverviewErrorField = "section",
|
|
148
|
+
): Promise<void> => {
|
|
96
149
|
try {
|
|
97
150
|
await updateSiteConfig(patch);
|
|
98
151
|
errors.delete(container);
|
|
@@ -106,45 +159,12 @@ export function renderGeneralSettings(container: HTMLElement) {
|
|
|
106
159
|
};
|
|
107
160
|
|
|
108
161
|
/** Park a validation failure under `field` without writing anything. */
|
|
109
|
-
const reject = (field:
|
|
162
|
+
const reject = (field: OverviewErrorField, message: string): void => {
|
|
110
163
|
errors.set(container, { field, message });
|
|
111
164
|
renderGeneralSettings(container);
|
|
112
165
|
};
|
|
113
166
|
|
|
114
|
-
|
|
115
|
-
const errorFor = (field: ErrorField) =>
|
|
116
|
-
shown?.field === field
|
|
117
|
-
? html`<p class="settings-field-error" role="alert">${shown.message}</p>`
|
|
118
|
-
: nothing;
|
|
119
|
-
|
|
120
|
-
// ─── Site identity ─────────────────────────────────────────────────────────
|
|
121
|
-
|
|
122
|
-
const onNameChange = (e: Event) => {
|
|
123
|
-
const name = (e.target as HTMLInputElement).value.trim();
|
|
124
|
-
if (!name) {
|
|
125
|
-
reject("name", "A project name is required.");
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
void persist({ name }, "name");
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
const onDescriptionChange = (e: Event) => {
|
|
132
|
-
const text = (e.target as HTMLInputElement).value;
|
|
133
|
-
void persist({ $head: headWithDescription(config.$head ?? [], text) }, "description");
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
const onUrlChange = (e: Event) => {
|
|
137
|
-
const url = (e.target as HTMLInputElement).value.trim();
|
|
138
|
-
if (url && !/^https?:\/\/\S+$/.test(url)) {
|
|
139
|
-
reject("url", "Enter a full address starting with http:// or https://");
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
void persist(url ? { url } : CLEAR_URL, "url");
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
// ─── Favicon ───────────────────────────────────────────────────────────────
|
|
146
|
-
|
|
147
|
-
const onFaviconUpload = () => {
|
|
167
|
+
const uploadFavicon = (): void => {
|
|
148
168
|
const input = document.createElement("input");
|
|
149
169
|
input.type = "file";
|
|
150
170
|
input.accept = "image/*,.ico,.svg";
|
|
@@ -164,132 +184,61 @@ export function renderGeneralSettings(container: HTMLElement) {
|
|
|
164
184
|
input.click();
|
|
165
185
|
};
|
|
166
186
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
class="settings-site-name"
|
|
205
|
-
placeholder="My Site"
|
|
206
|
-
.value=${live(config.name ?? "")}
|
|
207
|
-
?invalid=${shown?.field === "name"}
|
|
208
|
-
@change=${onNameChange}
|
|
209
|
-
></sp-textfield>
|
|
210
|
-
${errorFor("name")}
|
|
211
|
-
</div>
|
|
212
|
-
|
|
213
|
-
<div class="settings-field">
|
|
214
|
-
<label class="settings-field-label">Description</label>
|
|
215
|
-
<p class="settings-field-desc">
|
|
216
|
-
One or two sentences about the site. Search engines and link previews show this.
|
|
217
|
-
</p>
|
|
218
|
-
<sp-textfield
|
|
219
|
-
multiline
|
|
220
|
-
size="s"
|
|
221
|
-
class="settings-site-description"
|
|
222
|
-
placeholder="A short description of the site"
|
|
223
|
-
.value=${live(readDescription(config))}
|
|
224
|
-
@change=${onDescriptionChange}
|
|
225
|
-
></sp-textfield>
|
|
226
|
-
${errorFor("description")}
|
|
227
|
-
</div>
|
|
228
|
-
|
|
229
|
-
<div class="settings-field">
|
|
230
|
-
<label class="settings-field-label">Production URL</label>
|
|
231
|
-
<p class="settings-field-desc">
|
|
232
|
-
Where the published site lives. Sitemaps and absolute links are built from it.
|
|
233
|
-
</p>
|
|
234
|
-
<sp-textfield
|
|
235
|
-
size="s"
|
|
236
|
-
class="settings-site-url"
|
|
237
|
-
placeholder="https://example.com"
|
|
238
|
-
.value=${live(config.url ?? "")}
|
|
239
|
-
?invalid=${shown?.field === "url"}
|
|
240
|
-
@change=${onUrlChange}
|
|
241
|
-
></sp-textfield>
|
|
242
|
-
${errorFor("url")}
|
|
243
|
-
</div>
|
|
244
|
-
|
|
245
|
-
<div class="settings-field">
|
|
246
|
-
<label class="settings-field-label">Favicon</label>
|
|
247
|
-
<p class="settings-field-desc">Upload an image to use as the site favicon.</p>
|
|
248
|
-
<div style="display:flex;align-items:center;gap:12px">
|
|
249
|
-
${
|
|
250
|
-
currentFavicon
|
|
251
|
-
? html`<img
|
|
252
|
-
src=${currentFavicon}
|
|
253
|
-
alt="Current favicon"
|
|
254
|
-
style="width:32px;height:32px;object-fit:contain;border:1px solid var(--border);border-radius:var(--radius);padding:2px"
|
|
255
|
-
/>`
|
|
256
|
-
: html`<div
|
|
257
|
-
style="width:32px;height:32px;border:1px dashed var(--border);border-radius:var(--radius);display:flex;align-items:center;justify-content:center;color:var(--fg-dim);font-size:var(--spectrum-font-size-50, 11px)"
|
|
258
|
-
>
|
|
259
|
-
—
|
|
260
|
-
</div>`
|
|
261
|
-
}
|
|
262
|
-
<sp-action-button size="s" @click=${onFaviconUpload}> Upload Favicon </sp-action-button>
|
|
263
|
-
${
|
|
264
|
-
currentFavicon
|
|
265
|
-
? html`<span style="font-size:var(--spectrum-font-size-50, 11px);color:var(--fg-dim)"
|
|
266
|
-
>${currentFavicon}</span
|
|
267
|
-
>`
|
|
268
|
-
: nothing
|
|
269
|
-
}
|
|
270
|
-
</div>
|
|
271
|
-
${errorFor("favicon")}
|
|
272
|
-
</div>
|
|
187
|
+
return {
|
|
188
|
+
/*
|
|
189
|
+
* Project Styles is the SAME document in a different editor, and `styles.open` is the one place
|
|
190
|
+
* that says so. This used to write `session.ui.canvasMode` here directly — a second
|
|
191
|
+
* implementation of a capability, §12.5's defect in miniature: the button and the command could
|
|
192
|
+
* disagree about what "open Project Styles" means, and only one of them was reachable by name.
|
|
193
|
+
* The mode is still a fact about the TAB, and there is exactly one `project.json` tab, so
|
|
194
|
+
* `revealTab`'s `focusPane` puts the keyboard on whichever pane holds it.
|
|
195
|
+
*/
|
|
196
|
+
openStyles: () => {
|
|
197
|
+
void activeRegistry()?.run("styles.open");
|
|
198
|
+
},
|
|
199
|
+
setDescription: (value: string) => {
|
|
200
|
+
echo({ description: value });
|
|
201
|
+
void persist({ $head: headWithDescription(config().$head ?? [], value) }, "description");
|
|
202
|
+
},
|
|
203
|
+
setName: (value: string) => {
|
|
204
|
+
echo({ name: value });
|
|
205
|
+
const name = value.trim();
|
|
206
|
+
if (!name) {
|
|
207
|
+
reject("name", "A project name is required.");
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
void persist({ name }, "name");
|
|
211
|
+
},
|
|
212
|
+
setUrl: (value: string) => {
|
|
213
|
+
echo({ url: value });
|
|
214
|
+
const url = value.trim();
|
|
215
|
+
if (url && !/^https?:\/\/\S+$/.test(url)) {
|
|
216
|
+
reject("url", "Enter a full address starting with http:// or https://");
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
void persist(url ? { url } : CLEAR_URL, "url");
|
|
220
|
+
},
|
|
221
|
+
uploadFavicon,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
273
224
|
|
|
274
|
-
|
|
275
|
-
<label class="settings-field-label">Global Styles</label>
|
|
276
|
-
<p class="settings-field-desc">
|
|
277
|
-
Design tokens and the default element styles that apply across every page. Opens Project
|
|
278
|
-
Styles over this same document.
|
|
279
|
-
</p>
|
|
280
|
-
<sp-action-button
|
|
281
|
-
size="s"
|
|
282
|
-
?disabled=${!stylesCommand}
|
|
283
|
-
title=${stylesCommand?.title ?? ""}
|
|
284
|
-
@click=${() => {
|
|
285
|
-
void registry?.run("styles.open");
|
|
286
|
-
}}
|
|
287
|
-
>
|
|
288
|
-
Edit Global Styles
|
|
289
|
-
</sp-action-button>
|
|
290
|
-
</div>
|
|
291
|
-
</div>
|
|
292
|
-
`;
|
|
225
|
+
// ─── Render ──────────────────────────────────────────────────────────────────
|
|
293
226
|
|
|
294
|
-
|
|
227
|
+
/**
|
|
228
|
+
* Draw the section into `container`, or bring the surface already there up to date.
|
|
229
|
+
*
|
|
230
|
+
* The pane calls this again whenever something it cannot see may have changed, and a remount would
|
|
231
|
+
* take the caret out of whatever field the reader is in — so a standing surface is updated and only
|
|
232
|
+
* a container the document has left is mounted into again.
|
|
233
|
+
*
|
|
234
|
+
* @param {HTMLElement} container
|
|
235
|
+
*/
|
|
236
|
+
export function renderGeneralSettings(container: HTMLElement): void {
|
|
237
|
+
const standing = mounted.get(container);
|
|
238
|
+
if (standing?.connected()) {
|
|
239
|
+
standing.update(values(container));
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
standing?.dispose();
|
|
243
|
+
mounted.set(container, mountOverviewSurface(container, values(container), actions(container)));
|
|
295
244
|
}
|