@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference lib="dom" />
|
|
2
2
|
/**
|
|
3
|
-
* Ai-model-picker.ts — the provider's model catalogue as one
|
|
3
|
+
* Ai-model-picker.ts — the provider's model catalogue as one control, for every surface that
|
|
4
4
|
* chooses a model.
|
|
5
5
|
*
|
|
6
6
|
* It was private to `panels/ai-chat/composer.ts`, which was correct while the chat composer was the
|
|
@@ -14,14 +14,18 @@
|
|
|
14
14
|
* and the catalogue becomes UNAVAILABLE rather than stale. Holding it in a closure is what once let
|
|
15
15
|
* the picker offer one provider's models while another was configured.
|
|
16
16
|
*
|
|
17
|
+
* This module is the FLOW; `surfaces/ai-model-picker.json` is what it draws. `render()` hands back
|
|
18
|
+
* the surface's own host element rather than a template, because both hosts are still lit templates
|
|
19
|
+
* that interpolate the picker into a row of their own — see `surfaces/ai-model-picker.ts` for why
|
|
20
|
+
* that element is the mount point and why re-rendering the row cannot disturb it.
|
|
21
|
+
*
|
|
17
22
|
* A closure factory (precedent: `createComposer`, `createAiCredentialsForm`) so two hosts never
|
|
18
23
|
* share a loading flag or a failed-fetch record.
|
|
19
24
|
*
|
|
25
|
+
* @docs studio/ai
|
|
20
26
|
* @license MIT
|
|
21
27
|
*/
|
|
22
28
|
|
|
23
|
-
import { html, nothing } from "lit-html";
|
|
24
|
-
import { live } from "lit-html/directives/live.js";
|
|
25
29
|
import {
|
|
26
30
|
aiConnection,
|
|
27
31
|
cachedModels,
|
|
@@ -30,14 +34,17 @@ import {
|
|
|
30
34
|
preferredModel,
|
|
31
35
|
} from "../services/ai-models";
|
|
32
36
|
import { setModel } from "../services/ai-settings";
|
|
37
|
+
import { createModelPickerSurface } from "../surfaces/ai-model-picker";
|
|
33
38
|
|
|
34
|
-
import type { TemplateResult } from "lit-html";
|
|
35
39
|
import type { AiCredentials } from "../services/ai-models";
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
import type {
|
|
41
|
+
ModelPickerRow,
|
|
42
|
+
ModelPickerSurface,
|
|
43
|
+
ModelPickerView,
|
|
44
|
+
ModelPickerWidth,
|
|
45
|
+
} from "../surfaces/ai-model-picker";
|
|
46
|
+
|
|
47
|
+
/** The row value of the disabled placeholder shown during the first listing. */
|
|
41
48
|
export const LOADING_MODELS = "__loading__";
|
|
42
49
|
|
|
43
50
|
/** What a listed model's row says when the backend reported it cannot call tools. */
|
|
@@ -70,14 +77,26 @@ export interface ModelPickerOptions {
|
|
|
70
77
|
* the assistant.
|
|
71
78
|
*/
|
|
72
79
|
onChange?: (id: string) => void;
|
|
73
|
-
/**
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Which of the surface's two shapes to draw. `"compact"` (the composer's) by default; the Import
|
|
82
|
+
* form's field column asks for `"fill"`.
|
|
83
|
+
*
|
|
84
|
+
* This replaced a `className`. A document styles through `part` rather than through a class
|
|
85
|
+
* (`ui.md` §3.1), so the two rules the hosts used to supply are one attribute the document
|
|
86
|
+
* branches on — and a host can no longer reach in and restyle a control it does not own.
|
|
87
|
+
*/
|
|
88
|
+
width?: ModelPickerWidth;
|
|
89
|
+
/** Control size; `"sm"` (the composer's) by default. */
|
|
90
|
+
size?: "sm" | "md";
|
|
77
91
|
}
|
|
78
92
|
|
|
79
93
|
export interface ModelPicker {
|
|
80
|
-
|
|
94
|
+
/**
|
|
95
|
+
* The picker's host element.
|
|
96
|
+
*
|
|
97
|
+
* A host interpolates it into its own lit template, which inserts a Node it is handed as-is.
|
|
98
|
+
*/
|
|
99
|
+
render: () => HTMLElement;
|
|
81
100
|
/** Whether a fetch is in flight — for a host that wants to disable a submit button. */
|
|
82
101
|
isLoading: () => boolean;
|
|
83
102
|
/** The last fetch's failure, or `""`. */
|
|
@@ -110,6 +129,9 @@ export function createModelPicker(opts: ModelPickerOptions): ModelPicker {
|
|
|
110
129
|
*/
|
|
111
130
|
let attempted: AiCredentials | null = null;
|
|
112
131
|
|
|
132
|
+
/** Made on the first render, and kept for the life of the controller. */
|
|
133
|
+
let surface: ModelPickerSurface | null = null;
|
|
134
|
+
|
|
113
135
|
function sameConnection(a: AiCredentials | null, b: AiCredentials): boolean {
|
|
114
136
|
return a !== null && a.apiKey === b.apiKey && a.baseUrl === b.baseUrl;
|
|
115
137
|
}
|
|
@@ -133,22 +155,23 @@ export function createModelPicker(opts: ModelPickerOptions): ModelPicker {
|
|
|
133
155
|
});
|
|
134
156
|
}
|
|
135
157
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
158
|
+
/** List again, from the beginning: a refusal is forgotten so the same credentials are re-asked. */
|
|
159
|
+
function retry() {
|
|
160
|
+
attempted = null;
|
|
161
|
+
ensureModels(true);
|
|
162
|
+
opts.requestRender();
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function choose(value: string) {
|
|
166
|
+
/* The placeholder is disabled, so a reader cannot land on it; a host driving the control
|
|
167
|
+
directly still can, and a state is not a model. */
|
|
145
168
|
if (value && value !== LOADING_MODELS) {
|
|
146
169
|
onChange(value);
|
|
147
170
|
}
|
|
148
171
|
}
|
|
149
172
|
|
|
150
|
-
|
|
151
|
-
|
|
173
|
+
/** The rows to offer — what the catalogue holds, plus the one state that is worth a row. */
|
|
174
|
+
function rows(): ModelPickerRow[] {
|
|
152
175
|
const current = getModel();
|
|
153
176
|
const listed = cachedModels(aiConnection()) ?? [];
|
|
154
177
|
/* A catalogue that does not contain the current model still has to show it selected — an
|
|
@@ -156,28 +179,33 @@ export function createModelPicker(opts: ModelPickerOptions): ModelPicker {
|
|
|
156
179
|
const items = listed.some((m) => m.id === current)
|
|
157
180
|
? listed
|
|
158
181
|
: [{ id: current, name: current }, ...listed];
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
182
|
+
const offered: ModelPickerRow[] = items.map((m) => ({ label: itemLabel(m), value: m.id }));
|
|
183
|
+
if (loading) {
|
|
184
|
+
offered.push({ disabled: true, label: "Loading models…", value: LOADING_MODELS });
|
|
185
|
+
}
|
|
186
|
+
return offered;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** What the picker says right now — the whole of what the surface is told. */
|
|
190
|
+
function view(): ModelPickerView {
|
|
191
|
+
return {
|
|
192
|
+
failure,
|
|
193
|
+
hint: failure ? `Couldn't load models: ${failure}` : "Model",
|
|
194
|
+
options: rows(),
|
|
195
|
+
size: opts.size ?? "sm",
|
|
196
|
+
value: getModel(),
|
|
197
|
+
width: opts.width ?? "compact",
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function render(): HTMLElement {
|
|
202
|
+
ensureModels();
|
|
203
|
+
if (surface) {
|
|
204
|
+
surface.update(view());
|
|
205
|
+
} else {
|
|
206
|
+
surface = createModelPickerSurface(view(), { choose, retry });
|
|
207
|
+
}
|
|
208
|
+
return surface.host;
|
|
181
209
|
}
|
|
182
210
|
|
|
183
211
|
return {
|
|
@@ -16,17 +16,19 @@
|
|
|
16
16
|
* holding a pasted API token (desktop, dev server) keeps its own local account field and this
|
|
17
17
|
* resolves null without opening anything.
|
|
18
18
|
*
|
|
19
|
+
* The dialog itself is `src/surfaces/cf-account-picker.json`, a `jx-dialog`; this module is the
|
|
20
|
+
* flow around it. It used to be a lit template rendered through `showDialog`, with its own
|
|
21
|
+
* `repaint()` re-rendering the whole body into the slot's parent whenever anything landed — the
|
|
22
|
+
* surface is reactive now, so a listing that arrives late, or a refusal, changes only what it names.
|
|
23
|
+
*
|
|
19
24
|
* @docs studio/ai
|
|
20
25
|
* @license MIT
|
|
21
26
|
*/
|
|
22
27
|
|
|
23
|
-
import { html, render as litRender, nothing } from "lit-html";
|
|
24
|
-
import { ref } from "lit-html/directives/ref.js";
|
|
25
|
-
import type { TemplateResult } from "lit-html";
|
|
26
28
|
import { getPlatform, hasPlatform } from "../platform";
|
|
27
29
|
import { notifyCredentialsChanged } from "../settings/preferences-accounts";
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
+
import { openCfAccountPickerSurface } from "../surfaces/cf-account-picker";
|
|
31
|
+
import { layerHost } from "./layers";
|
|
30
32
|
import type { CfAccountSummary } from "../types";
|
|
31
33
|
|
|
32
34
|
/** Whether this platform brokers the connection, and so can be asked which accounts it reaches. */
|
|
@@ -38,6 +40,11 @@ function canPick(): boolean {
|
|
|
38
40
|
return Boolean(platform.cfAccounts && platform.cfSelectAccount);
|
|
39
41
|
}
|
|
40
42
|
|
|
43
|
+
/** What a thrown thing says, for a line the reader has to act on. */
|
|
44
|
+
function reasonOf(error: unknown): string {
|
|
45
|
+
return error instanceof Error ? error.message : String(error);
|
|
46
|
+
}
|
|
47
|
+
|
|
41
48
|
/**
|
|
42
49
|
* Ask which Cloudflare account this connection should use, and store the answer.
|
|
43
50
|
*
|
|
@@ -51,150 +58,78 @@ export function openCfAccountPicker(): Promise<CfAccountSummary | null> {
|
|
|
51
58
|
if (!canPick()) {
|
|
52
59
|
return Promise.resolve(null);
|
|
53
60
|
}
|
|
54
|
-
return
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
let failure = "";
|
|
60
|
-
/** The id being committed, so its own row can say so rather than the whole list going grey. */
|
|
61
|
-
let choosing = "";
|
|
62
|
-
let settled = false;
|
|
63
|
-
let wrapperEl: HTMLElement | null = null;
|
|
61
|
+
return new Promise<CfAccountSummary | null>((resolve) => {
|
|
62
|
+
let accounts: CfAccountSummary[] = [];
|
|
63
|
+
/** The id being committed. Held here as well as in the scope: it is what guards a second press. */
|
|
64
|
+
let choosing = "";
|
|
65
|
+
let settled = false;
|
|
64
66
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
67
|
+
/* Resolve once, and take the dialog down with it. `close()` provokes the platform's own
|
|
68
|
+
`close`, which comes back as `onClosed` — so the guard is what keeps a chosen account from
|
|
69
|
+
being overwritten by the dismissal its own commit caused. */
|
|
70
|
+
const finish = (account: CfAccountSummary | null): void => {
|
|
71
|
+
if (settled) {
|
|
72
|
+
return;
|
|
68
73
|
}
|
|
74
|
+
settled = true;
|
|
75
|
+
handle.close();
|
|
76
|
+
resolve(account);
|
|
77
|
+
};
|
|
69
78
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
79
|
+
async function load(): Promise<void> {
|
|
80
|
+
handle.update({ failure: "", loading: true });
|
|
81
|
+
let failure = "";
|
|
82
|
+
try {
|
|
83
|
+
accounts = (await getPlatform().cfAccounts?.()) ?? [];
|
|
84
|
+
} catch (error) {
|
|
85
|
+
accounts = [];
|
|
86
|
+
failure = reasonOf(error);
|
|
77
87
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
try {
|
|
84
|
-
accounts = (await getPlatform().cfAccounts?.()) ?? [];
|
|
85
|
-
} catch (error) {
|
|
86
|
-
failure = error instanceof Error ? error.message : String(error);
|
|
87
|
-
}
|
|
88
|
-
loading = false;
|
|
89
|
-
repaint();
|
|
88
|
+
/* `done` released the slot, so a late listing landing after a dismissal would otherwise be a
|
|
89
|
+
write into a disposed surface. The lit version guarded the same moment by resolving its
|
|
90
|
+
host lazily and finding none. */
|
|
91
|
+
if (settled) {
|
|
92
|
+
return;
|
|
90
93
|
}
|
|
94
|
+
handle.update({ accounts, failure, loading: false });
|
|
95
|
+
}
|
|
91
96
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
try {
|
|
97
|
-
await getPlatform().cfSelectAccount?.({ id: account.id, name: account.name });
|
|
98
|
-
} catch (error) {
|
|
99
|
-
failure = error instanceof Error ? error.message : String(error);
|
|
100
|
-
choosing = "";
|
|
101
|
-
repaint();
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
/* The stored account is a credential like any other: the assistant's gate, the publish
|
|
105
|
-
panel and the Preferences row all re-read from the same announcement. */
|
|
106
|
-
notifyCredentialsChanged();
|
|
107
|
-
finish(account);
|
|
97
|
+
async function choose(id: string): Promise<void> {
|
|
98
|
+
const account = accounts.find((candidate) => candidate.id === id);
|
|
99
|
+
if (!account || choosing !== "") {
|
|
100
|
+
return;
|
|
108
101
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
102
|
+
choosing = id;
|
|
103
|
+
handle.update({ choosing: id, failure: "" });
|
|
104
|
+
try {
|
|
105
|
+
await getPlatform().cfSelectAccount?.({ id: account.id, name: account.name });
|
|
106
|
+
} catch (error) {
|
|
107
|
+
choosing = "";
|
|
108
|
+
if (!settled) {
|
|
109
|
+
/* The list survives a refusal, and the reason sits above it: listing again is not what
|
|
110
|
+
would fix an account the broker will not accept, so this state offers no retry. */
|
|
111
|
+
handle.update({ choosing: "", failure: reasonOf(error) });
|
|
113
112
|
}
|
|
114
|
-
|
|
115
|
-
refused (below) keeps the list, because listing again is not what would fix it. */
|
|
116
|
-
if (accounts.length === 0) {
|
|
117
|
-
return html`
|
|
118
|
-
<p class="cf-account-picker-empty">
|
|
119
|
-
${
|
|
120
|
-
failure
|
|
121
|
-
? `Cloudflare could not be reached: ${failure}`
|
|
122
|
-
: "This Cloudflare login reaches no accounts. Create one at dash.cloudflare.com, then try again."
|
|
123
|
-
}
|
|
124
|
-
</p>
|
|
125
|
-
${
|
|
126
|
-
failure
|
|
127
|
-
? html`<sp-button
|
|
128
|
-
size="s"
|
|
129
|
-
treatment="outline"
|
|
130
|
-
@click=${() => {
|
|
131
|
-
void load();
|
|
132
|
-
}}
|
|
133
|
-
>
|
|
134
|
-
Try again
|
|
135
|
-
</sp-button>`
|
|
136
|
-
: nothing
|
|
137
|
-
}
|
|
138
|
-
`;
|
|
139
|
-
}
|
|
140
|
-
/* The row shape is Preferences › Accounts', deliberately reused: this IS an account list,
|
|
141
|
-
and a second stylesheet entry for the same shape is how two lists drift apart. */
|
|
142
|
-
return html`
|
|
143
|
-
${failure ? html`<p class="cf-account-picker-error">${failure}</p>` : nothing}
|
|
144
|
-
<div class="prefs-accounts">
|
|
145
|
-
${accounts.map(
|
|
146
|
-
(account) => html`
|
|
147
|
-
<div class="prefs-account" data-account=${account.id}>
|
|
148
|
-
<div class="prefs-account-text">
|
|
149
|
-
<span class="prefs-account-label">${account.name}</span>
|
|
150
|
-
<span class="prefs-account-detail">${account.id}</span>
|
|
151
|
-
</div>
|
|
152
|
-
<sp-button
|
|
153
|
-
size="s"
|
|
154
|
-
variant="accent"
|
|
155
|
-
?disabled=${choosing !== ""}
|
|
156
|
-
@click=${() => {
|
|
157
|
-
void choose(account);
|
|
158
|
-
}}
|
|
159
|
-
>
|
|
160
|
-
${choosing === account.id ? "Selecting…" : "Use this account"}
|
|
161
|
-
</sp-button>
|
|
162
|
-
</div>
|
|
163
|
-
`,
|
|
164
|
-
)}
|
|
165
|
-
</div>
|
|
166
|
-
`;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
function build(): TemplateResult {
|
|
170
|
-
return html`
|
|
171
|
-
<sp-dialog-wrapper
|
|
172
|
-
open
|
|
173
|
-
underlay
|
|
174
|
-
headline="Choose a Cloudflare account"
|
|
175
|
-
cancel-label="Cancel"
|
|
176
|
-
@cancel=${() => finish(null)}
|
|
177
|
-
@close=${() => finish(null)}
|
|
178
|
-
${ref((el?: Element) => {
|
|
179
|
-
if (el) {
|
|
180
|
-
wrapperEl = el as HTMLElement;
|
|
181
|
-
}
|
|
182
|
-
})}
|
|
183
|
-
>
|
|
184
|
-
<div class="cf-account-picker">
|
|
185
|
-
<p class="cf-account-picker-lede">
|
|
186
|
-
Your Cloudflare login reaches more than one account. Publishing and the assistant
|
|
187
|
-
both run against the one you pick; you can change it in Preferences › Accounts.
|
|
188
|
-
</p>
|
|
189
|
-
${listTpl()}
|
|
190
|
-
</div>
|
|
191
|
-
</sp-dialog-wrapper>
|
|
192
|
-
`;
|
|
113
|
+
return;
|
|
193
114
|
}
|
|
115
|
+
/* The stored account is a credential like any other: the assistant's gate, the publish
|
|
116
|
+
panel and the Preferences row all re-read from the same announcement. */
|
|
117
|
+
notifyCredentialsChanged();
|
|
118
|
+
finish(account);
|
|
119
|
+
}
|
|
194
120
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
121
|
+
const handle = openCfAccountPickerSurface({
|
|
122
|
+
layer: layerHost("dialog"),
|
|
123
|
+
onChoose: (id) => {
|
|
124
|
+
void choose(id);
|
|
125
|
+
},
|
|
126
|
+
onClosed: () => {
|
|
127
|
+
finish(null);
|
|
128
|
+
},
|
|
129
|
+
onRetry: () => {
|
|
130
|
+
void load();
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
void load();
|
|
134
|
+
});
|
|
200
135
|
}
|