@jxsuite/studio 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/data/elements-meta.json +5 -15
- package/data/html-meta.json +51 -6
- package/dist/chunks/{2020-n6tfwnda.js → 2020-g79n01v9.js} +14 -14
- package/dist/chunks/action-group-sp6tna8v.js +118 -0
- package/dist/chunks/adapter-nj7tnjfn.js +13 -0
- package/dist/chunks/cf-account-picker-fyf63pmy.js +495 -0
- package/dist/chunks/cf-settings-71bv5zn9.js +20 -0
- package/dist/chunks/color-area-v17df7b8.js +154 -0
- package/dist/chunks/color-field-anwybnkn.js +208 -0
- package/dist/chunks/color-slider-44ez96fc.js +79 -0
- package/dist/chunks/color-xgg3kfw7.js +35 -0
- package/dist/chunks/combobox-5e7jev23.js +236 -0
- package/dist/chunks/components-2w1f35qs.js +18 -0
- package/dist/chunks/content-source-3wqeas45.js +46 -0
- package/dist/chunks/convert-to-repeater-d0cgnb6d.js +639 -0
- package/dist/chunks/dialog-s890b918.js +85 -0
- package/dist/chunks/editor-3qhbg51x.js +35 -0
- package/dist/chunks/entry-commands-d6g50j7s.js +42 -0
- package/dist/chunks/extension-sections-fy7q4fe9.js +651 -0
- package/dist/chunks/file-ops-3btj6st0.js +47 -0
- package/dist/chunks/files-ef8fgs3w.js +72 -0
- package/dist/chunks/format-host-3c33nwr8.js +40 -0
- package/dist/chunks/fs-events-13tj6sex.js +18 -0
- package/dist/chunks/git-panel-4wp2rn9b.js +49 -0
- package/dist/chunks/icons-yy10wk9r.js +402 -0
- package/dist/chunks/iframe-entry-15g3n6xv.js +114 -0
- package/dist/chunks/iframe-entry-b27vq81n.js +203 -0
- package/dist/chunks/iframe-entry-nbyxee1y.js +154 -0
- package/dist/chunks/iframe-host-jgesd924.js +115 -0
- package/dist/chunks/{index-wcnt3r9g.js → index-mdmyx6s2.js} +11 -11
- package/dist/chunks/index-n4j7qxyr.js +109 -0
- package/dist/chunks/{javascript-q8kpmfah.js → javascript-xvrfrpkb.js} +8 -9
- package/dist/chunks/{jsonMode-dkr040ga.js → jsonMode-tyx2kj6p.js} +526 -527
- package/dist/chunks/jx-validate-j0wxk72w.js +15 -0
- package/dist/chunks/layers-1nq5evsh.js +29 -0
- package/dist/chunks/layers-panel-ar2gh90g.js +40 -0
- package/dist/chunks/listbox-6v2ac08j.js +44 -0
- package/dist/chunks/lit-html-m244w9nh.js +17 -0
- package/dist/chunks/media-picker-2qbetq73.js +33 -0
- package/dist/chunks/menu-q99sy9rf.js +285 -0
- package/dist/chunks/menu-rf7n72mf.js +14 -0
- package/dist/chunks/{monaco-binding-rj6xpx9y.js → monaco-binding-sw6en4dw.js} +12 -15
- package/dist/chunks/monaco-buffer-bhy3hb6m.js +24 -0
- package/dist/chunks/{monaco-setup-vx9bhp1d.js → monaco-setup-8r62fj6y.js} +27 -37
- package/dist/chunks/notify-628t0anh.js +21 -0
- package/dist/chunks/number-field-5cndyft8.js +72 -0
- package/dist/chunks/parse-0zx14y15.js +10 -0
- package/dist/chunks/platform-ts9cg1a4.js +15 -0
- package/dist/chunks/popover-47z3ytva.js +25 -0
- package/dist/chunks/publish-panel-98f7sr3g.js +27 -0
- package/dist/chunks/quick-search-srzz83k2.js +45 -0
- package/dist/chunks/references-n553f0e1.js +26 -0
- package/dist/chunks/right-panel-rrgx2dn3.js +45 -0
- package/dist/chunks/section-registry-5pq32t0q.js +25 -0
- package/dist/chunks/select-2r16ez41.js +49 -0
- package/dist/chunks/split-g7nm1rgb.js +191 -0
- package/dist/chunks/studio-0hqbpbd0.js +62 -0
- package/dist/chunks/studio-18avnhjp.js +2430 -0
- package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
- package/dist/chunks/{studio-msd847zn.js → studio-25hkdrkw.js} +357 -86
- package/dist/chunks/studio-26d7myd1.js +258 -0
- package/dist/chunks/{studio-4r1pv6zf.js → studio-38emantv.js} +22 -5
- package/dist/chunks/studio-3gxv60tn.js +422 -0
- package/dist/chunks/{studio-fbf92ckf.js → studio-3hxkd92t.js} +275 -163
- package/dist/chunks/studio-4m0haseg.js +185 -0
- package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
- package/dist/chunks/{studio-1wagb550.js → studio-5523bpzt.js} +11 -11
- package/dist/chunks/{studio-x4qkdat5.js → studio-57mf66w2.js} +1749 -2481
- package/dist/chunks/studio-5jy81t3s.js +17463 -0
- package/dist/chunks/studio-5rt7sqa0.js +1168 -0
- package/dist/chunks/studio-5te5tqng.js +81 -0
- package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
- package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
- package/dist/chunks/studio-6xa21ej9.js +28 -0
- package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
- package/dist/chunks/{studio-ahn3pdgx.js → studio-79y5sz51.js} +52 -38
- package/dist/chunks/{studio-gcye7qka.js → studio-7e11jpa9.js} +21 -21
- package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
- package/dist/chunks/studio-7xptrg0j.js +954 -0
- package/dist/chunks/{studio-cft9r4r7.js → studio-81390n6f.js} +22 -22
- package/dist/chunks/{studio-q43a5y9h.js → studio-8jn5yhyn.js} +16 -16
- package/dist/chunks/studio-8qtrpzr3.js +839 -0
- package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
- package/dist/chunks/studio-9xxz1q69.js +1356 -0
- package/dist/chunks/studio-akbww0j5.js +13615 -0
- package/dist/chunks/{studio-x813zp48.js → studio-arfpe389.js} +30 -30
- package/dist/chunks/{studio-trxrabqf.js → studio-az3zd49t.js} +475 -283
- package/dist/chunks/studio-cpvb2ed1.js +1171 -0
- package/dist/chunks/{studio-f3wqjtk5.js → studio-d0300636.js} +5076 -18
- package/dist/chunks/{studio-bgxt93ga.js → studio-d055c37e.js} +13 -13
- package/dist/chunks/studio-d1ja2x9r.js +362 -0
- package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
- package/dist/chunks/{studio-3bqpr0zh.js → studio-em9nw8eh.js} +299 -110
- package/dist/chunks/studio-erdatzvp.js +1190 -0
- package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
- package/dist/chunks/studio-fabxk6r9.js +2811 -0
- package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
- package/dist/chunks/{studio-dm19q43r.js → studio-hhvs4sdg.js} +10 -10
- package/dist/chunks/{studio-q9jd1a60.js → studio-kcgff4r0.js} +15 -18
- package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
- package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
- package/dist/chunks/studio-pm6hgy7r.js +4763 -0
- package/dist/chunks/studio-q0a3yk4n.js +33 -0
- package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
- package/dist/chunks/studio-qahxvnan.js +111 -0
- package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
- package/dist/chunks/{studio-2b946z26.js → studio-rkstz940.js} +3658 -6134
- package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
- package/dist/chunks/studio-rpyah2ew.js +2805 -0
- package/dist/chunks/studio-rs76k67r.js +12 -0
- package/dist/chunks/{studio-jkftxyvz.js → studio-s6z853aq.js} +5858 -2152
- package/dist/chunks/{studio-6yw4y3my.js → studio-sgdc5pfc.js} +8 -8
- package/dist/chunks/studio-tb3ev01j.js +763 -0
- package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
- package/dist/chunks/studio-vhv5tgxm.js +51 -0
- package/dist/chunks/{studio-qjy2z9bv.js → studio-vz68yn9e.js} +32 -137
- package/dist/chunks/studio-wqpngpsk.js +174 -0
- package/dist/chunks/{studio-b55y6ewx.js → studio-x3rty6tr.js} +58 -58
- package/dist/chunks/studio-xsykpvsh.js +8448 -0
- package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
- package/dist/chunks/studio-yxa81f45.js +12 -0
- package/dist/chunks/swatch-group-t0n6h2rn.js +139 -0
- package/dist/chunks/tabs-wbp1cdws.js +156 -0
- package/dist/chunks/textfield-abk6qyee.js +73 -0
- package/dist/chunks/toast-780pvfbv.js +27 -0
- package/dist/chunks/toast-host-3sqv46sn.js +116 -0
- package/dist/chunks/toolbar-xbh5bhtr.js +194 -0
- package/dist/chunks/tooltip-eptb614w.js +369 -0
- package/dist/chunks/tree-a73p0pqm.js +367 -0
- package/dist/chunks/{tsMode-76kr53q0.js → tsMode-jy4m86rv.js} +83 -85
- package/dist/chunks/workspace-wrew8zk4.js +69 -0
- package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
- package/dist/iframe-entry.js +1780 -667
- package/dist/studio.js +52819 -36480
- package/dist/workers/editor.worker.js +1040 -1085
- package/dist/workers/json.worker.js +1946 -1991
- package/dist/workers/ts.worker.js +4960 -5005
- package/index.html +1 -0
- package/package.json +18 -52
- package/src/about/about-modal.ts +72 -123
- package/src/browse/library-commands.ts +20 -49
- package/src/browse/library-layouts.ts +87 -218
- package/src/browse/library-pane.ts +406 -438
- package/src/canvas/canvas-helpers.ts +0 -49
- package/src/canvas/canvas-live-render.ts +25 -2
- package/src/canvas/canvas-render.ts +666 -231
- package/src/canvas/canvas-surface.ts +0 -1
- package/src/canvas/canvas-utils.ts +310 -117
- package/src/canvas/dialog-path.ts +76 -0
- package/src/canvas/dialog-state.ts +67 -0
- package/src/canvas/diff-marks.ts +252 -0
- package/src/canvas/diff-toolbar.ts +349 -0
- package/src/canvas/diff-view.ts +123 -0
- package/src/canvas/edit-width-drag.ts +187 -0
- package/src/canvas/edit-width.ts +150 -0
- package/src/canvas/iframe-entry.ts +125 -8
- package/src/canvas/iframe-host.ts +271 -15
- package/src/canvas/iframe-interaction.ts +133 -13
- package/src/canvas/iframe-patch.ts +7 -1
- package/src/canvas/iframe-position.ts +5 -6
- package/src/canvas/iframe-protocol.ts +106 -5
- package/src/canvas/iframe-render.ts +373 -5
- package/src/canvas/iframe-slash.ts +2 -2
- package/src/canvas/iframe-subtree.ts +5 -8
- package/src/canvas/path-mapping.ts +25 -3
- package/src/canvas/popover-path.ts +106 -0
- package/src/canvas/popover-state.ts +155 -0
- package/src/canvas/surface-registry.ts +21 -10
- package/src/collab/presence-chips.ts +51 -73
- package/src/commands/app-commands.ts +10 -0
- package/src/commands/budget.ts +12 -0
- package/src/commands/command-args.ts +369 -6
- package/src/commands/defaults.ts +44 -14
- package/src/commands/live-context.ts +11 -5
- package/src/commands/reference.ts +12 -2
- package/src/commands/registry.ts +165 -8
- package/src/content/entry-commands.ts +16 -23
- package/src/content/entry-editor.ts +144 -101
- package/src/editor/canvas-slash-bridge.ts +2 -2
- package/src/editor/context-menu.ts +49 -200
- package/src/editor/convert-to-component.ts +42 -82
- package/src/editor/convert-to-repeater.ts +132 -173
- package/src/editor/inline-edit.ts +11 -0
- package/src/editor/shortcuts.ts +65 -26
- package/src/editor/slash-menu.ts +150 -157
- package/src/files/file-ops.ts +117 -11
- package/src/files/files.ts +943 -660
- package/src/files/json-layout.ts +474 -0
- package/src/files/serialize-document.ts +8 -1
- package/src/format/convert-file.ts +16 -10
- package/src/format/format-host.ts +50 -1
- package/src/github/github-auth.ts +71 -29
- package/src/github/github-publish.ts +57 -65
- package/src/grid/cell-editors.ts +46 -4
- package/src/grid/cell-popovers.ts +65 -62
- package/src/grid/grid-open.ts +86 -64
- package/src/grid/grid-panel.ts +390 -469
- package/src/grid/redirects-grid.ts +40 -44
- package/src/hosting/layout.ts +2 -0
- package/src/i18n/i18n-commands.ts +127 -62
- package/src/media/media-pane.ts +83 -133
- package/src/new-project/add-repo-modal.ts +125 -176
- package/src/new-project/import-tab.ts +181 -252
- package/src/new-project/location-fields.ts +93 -160
- package/src/new-project/new-project-modal.ts +376 -367
- package/src/packages/jxsuite-update.ts +76 -18
- package/src/panels/activity-panel.ts +137 -104
- package/src/panels/ai-chat/chat-markdown.ts +15 -13
- package/src/panels/ai-chat/chat-view.ts +307 -472
- package/src/panels/ai-chat/composer.ts +175 -163
- package/src/panels/ai-chat/sessions-view.ts +31 -62
- package/src/panels/ai-panel.ts +210 -185
- package/src/panels/block-action-bar.ts +437 -643
- package/src/panels/bottom-dock.ts +112 -47
- package/src/panels/chat-panel.ts +19 -14
- package/src/panels/data-explorer.ts +141 -102
- package/src/panels/data-grid.ts +183 -150
- package/src/panels/dnd.ts +75 -20
- package/src/panels/editors.ts +26 -19
- package/src/panels/elements-panel.ts +243 -186
- package/src/panels/empty-state.ts +26 -42
- package/src/panels/events-panel.ts +950 -729
- package/src/panels/formula-workspace.ts +434 -207
- package/src/panels/frontmatter-fields.ts +185 -153
- package/src/panels/frontmatter-panel.ts +411 -187
- package/src/panels/git-diff-open.ts +148 -0
- package/src/panels/git-panel.ts +679 -605
- package/src/panels/head-panel.ts +617 -435
- package/src/panels/i18n-panel.ts +153 -133
- package/src/panels/imports-panel.ts +388 -414
- package/src/panels/jump-bar.ts +174 -147
- package/src/panels/layers-panel.ts +785 -671
- package/src/panels/left-panel.ts +166 -94
- package/src/panels/navigator-panels.ts +1 -1
- package/src/panels/pane-context.ts +529 -677
- package/src/panels/pane-grid.ts +265 -241
- package/src/panels/panel-registry.ts +15 -4
- package/src/panels/problems-panel.ts +177 -99
- package/src/panels/properties-panel.ts +1525 -966
- package/src/panels/provenance.ts +31 -113
- package/src/panels/quick-search.ts +217 -172
- package/src/panels/right-panel.ts +135 -169
- package/src/panels/seo-modal.ts +346 -167
- package/src/panels/settings-menu.ts +109 -646
- package/src/panels/settings-pane.ts +102 -86
- package/src/panels/signals-panel.ts +1318 -1172
- package/src/panels/statement-editor.ts +556 -428
- package/src/panels/style-panel.ts +1367 -630
- package/src/panels/style-utils.ts +36 -32
- package/src/panels/stylebook-doc.ts +30 -73
- package/src/panels/stylebook-layers-panel.ts +202 -109
- package/src/panels/stylebook-panel.ts +124 -88
- package/src/panels/tab-strip.ts +385 -287
- package/src/platforms/cloud.ts +106 -16
- package/src/platforms/devserver.ts +13 -0
- package/src/publish/deploy-checklist.ts +124 -78
- package/src/publish/publish-commands.ts +4 -12
- package/src/publish/publish-panel.ts +134 -328
- package/src/services/a11y-report.ts +100 -43
- package/src/services/ai-command-tools.ts +468 -0
- package/src/services/ai-session-store.ts +6 -0
- package/src/services/ai-system-prompt.ts +110 -18
- package/src/services/ai-tools.ts +28 -143
- package/src/services/ai-write-report.ts +174 -0
- package/src/services/document-assistant.ts +50 -2
- package/src/services/idle.ts +16 -14
- package/src/services/live-surfaces.ts +237 -0
- package/src/services/model-uri.ts +75 -0
- package/src/services/notify.ts +63 -6
- package/src/services/popover-report.ts +325 -0
- package/src/services/surface-registry.ts +56 -0
- package/src/services/tool-executor.ts +6 -0
- package/src/settings/contexts-section.ts +301 -299
- package/src/settings/contributed-section.ts +361 -222
- package/src/settings/css-vars-editor.ts +320 -325
- package/src/settings/defs-editor.ts +572 -535
- package/src/settings/dependencies-editor.ts +79 -107
- package/src/settings/extension-commands.ts +379 -0
- package/src/settings/extension-rows.ts +113 -0
- package/src/settings/extensions-section.ts +287 -0
- package/src/settings/general-settings.ts +130 -181
- package/src/settings/head-editor.ts +10 -305
- package/src/settings/locales-section.ts +146 -196
- package/src/settings/preferences-accounts.ts +1 -1
- package/src/settings/preferences-dialog.ts +350 -330
- package/src/settings/project-sections.ts +108 -181
- package/src/settings/schema-field-ui.ts +11 -399
- package/src/settings/section-registry.ts +8 -1
- package/src/settings/settings-document.ts +31 -29
- package/src/shell/tree.ts +42 -87
- package/src/shell.ts +48 -36
- package/src/studio.ts +90 -67
- package/src/style/token-ref.ts +0 -39
- package/src/surfaces/about.json +263 -0
- package/src/surfaces/about.ts +163 -0
- package/src/surfaces/add-repo.json +486 -0
- package/src/surfaces/add-repo.ts +236 -0
- package/src/surfaces/ai-chat.json +2185 -0
- package/src/surfaces/ai-chat.ts +549 -0
- package/src/surfaces/ai-credentials-form.json +332 -0
- package/src/surfaces/ai-credentials-form.ts +151 -0
- package/src/surfaces/ai-managed-connect.json +108 -0
- package/src/surfaces/ai-managed-connect.ts +123 -0
- package/src/surfaces/ai-model-picker.json +114 -0
- package/src/surfaces/ai-model-picker.ts +139 -0
- package/src/surfaces/block-action-bar.json +640 -0
- package/src/surfaces/block-action-bar.ts +368 -0
- package/src/surfaces/bottom-dock.json +154 -0
- package/src/surfaces/bottom-dock.ts +125 -0
- package/src/surfaces/canvas-stage.json +444 -0
- package/src/surfaces/canvas-stage.ts +253 -0
- package/src/surfaces/cf-account-picker.json +300 -0
- package/src/surfaces/cf-account-picker.ts +214 -0
- package/src/surfaces/commandbar.json +984 -0
- package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +414 -389
- package/src/surfaces/convert-repeater.json +309 -0
- package/src/surfaces/convert-repeater.ts +276 -0
- package/src/surfaces/data-actions.json +157 -0
- package/src/surfaces/data-actions.ts +115 -0
- package/src/surfaces/dialog.json +289 -0
- package/src/surfaces/dialog.ts +343 -0
- package/src/surfaces/diff-toolbar.json +266 -0
- package/src/surfaces/diff-toolbar.ts +139 -0
- package/src/surfaces/doc-header.json +739 -0
- package/src/surfaces/doc-header.ts +223 -0
- package/src/surfaces/empty-state.json +152 -0
- package/src/surfaces/empty-state.ts +173 -0
- package/src/surfaces/entry-editor.json +281 -0
- package/src/surfaces/entry-editor.ts +191 -0
- package/src/surfaces/expression-editor.json +977 -0
- package/src/surfaces/expression-editor.ts +266 -0
- package/src/surfaces/files-panel.json +592 -0
- package/src/surfaces/files-panel.ts +301 -0
- package/src/surfaces/formula-palette.json +364 -0
- package/src/surfaces/formula-palette.ts +340 -0
- package/src/surfaces/git-panel.json +1822 -0
- package/src/surfaces/git-panel.ts +272 -0
- package/src/surfaces/github-auth.json +112 -0
- package/src/surfaces/github-auth.ts +139 -0
- package/src/surfaces/github-publish.json +206 -0
- package/src/surfaces/github-publish.ts +169 -0
- package/src/surfaces/grid-cell.json +218 -0
- package/src/surfaces/grid-cell.ts +120 -0
- package/src/surfaces/grid-open.json +147 -0
- package/src/surfaces/grid-open.ts +87 -0
- package/src/surfaces/grid-panel.json +706 -0
- package/src/surfaces/grid-panel.ts +206 -0
- package/src/surfaces/grid-replace.json +179 -0
- package/src/surfaces/grid-replace.ts +89 -0
- package/src/surfaces/grid-views.json +446 -0
- package/src/surfaces/grid-views.ts +172 -0
- package/src/surfaces/inspector-dock.json +187 -0
- package/src/surfaces/inspector-dock.ts +161 -0
- package/src/surfaces/jump-bar.json +243 -0
- package/src/surfaces/jump-bar.ts +129 -0
- package/src/surfaces/jxsuite-update.json +146 -0
- package/src/surfaces/jxsuite-update.ts +149 -0
- package/src/surfaces/library-pane.json +1509 -0
- package/src/surfaces/library-pane.ts +363 -0
- package/src/surfaces/logic-panel.json +1949 -0
- package/src/surfaces/logic-panel.ts +369 -0
- package/src/surfaces/logic-workspace.json +685 -0
- package/src/surfaces/logic-workspace.ts +238 -0
- package/src/surfaces/media-browser.json +303 -0
- package/src/surfaces/media-browser.ts +145 -0
- package/src/surfaces/media-field.json +163 -0
- package/src/surfaces/media-field.ts +116 -0
- package/src/surfaces/media-pane.json +513 -0
- package/src/surfaces/media-pane.ts +197 -0
- package/src/surfaces/menu.json +232 -0
- package/src/surfaces/menu.ts +375 -0
- package/src/surfaces/navigator-dock.json +113 -0
- package/src/surfaces/navigator-dock.ts +130 -0
- package/src/surfaces/new-project.json +1654 -0
- package/src/surfaces/new-project.ts +411 -0
- package/src/surfaces/palette.json +535 -0
- package/src/surfaces/pane-context.json +1497 -0
- package/src/surfaces/pane-context.ts +513 -0
- package/src/surfaces/pane-grid.json +188 -0
- package/src/surfaces/pane-grid.ts +250 -0
- package/src/surfaces/panel-activity.json +563 -0
- package/src/surfaces/panel-activity.ts +187 -0
- package/src/surfaces/panel-data.json +141 -0
- package/src/surfaces/panel-data.ts +156 -0
- package/src/surfaces/panel-deploy-checklist.json +283 -0
- package/src/surfaces/panel-deploy-checklist.ts +175 -0
- package/src/surfaces/panel-elements.json +367 -0
- package/src/surfaces/panel-elements.ts +175 -0
- package/src/surfaces/panel-i18n.json +569 -0
- package/src/surfaces/panel-i18n.ts +212 -0
- package/src/surfaces/panel-imports.json +780 -0
- package/src/surfaces/panel-imports.ts +209 -0
- package/src/surfaces/panel-outline.json +734 -0
- package/src/surfaces/panel-outline.ts +326 -0
- package/src/surfaces/panel-page.json +1017 -0
- package/src/surfaces/panel-page.ts +240 -0
- package/src/surfaces/panel-problems.json +497 -0
- package/src/surfaces/panel-problems.ts +157 -0
- package/src/surfaces/panel-signals.json +1973 -0
- package/src/surfaces/panel-signals.ts +436 -0
- package/src/surfaces/panel-stylebook-layers.json +317 -0
- package/src/surfaces/panel-stylebook-layers.ts +155 -0
- package/src/surfaces/preferences.json +850 -0
- package/src/surfaces/preferences.ts +332 -0
- package/src/surfaces/progress-modal.json +110 -0
- package/src/surfaces/progress-modal.ts +150 -0
- package/src/surfaces/properties-panel.json +1578 -0
- package/src/surfaces/properties-panel.ts +337 -0
- package/src/surfaces/publish.json +945 -0
- package/src/surfaces/publish.ts +392 -0
- package/src/surfaces/push-plan.json +110 -0
- package/src/surfaces/push-plan.ts +87 -0
- package/src/surfaces/rail.json +255 -0
- package/src/surfaces/rail.ts +206 -0
- package/src/surfaces/reference-field.json +191 -0
- package/src/surfaces/reference-field.ts +168 -0
- package/src/surfaces/schema-builder.json +1011 -0
- package/src/surfaces/schema-builder.ts +181 -0
- package/src/surfaces/schema-form.json +1013 -0
- package/src/surfaces/schema-form.ts +287 -0
- package/src/surfaces/secret-field.json +60 -0
- package/src/surfaces/secret-field.ts +146 -0
- package/src/surfaces/seo.json +932 -0
- package/src/surfaces/seo.ts +334 -0
- package/src/surfaces/settings-contexts.json +538 -0
- package/src/surfaces/settings-contexts.ts +196 -0
- package/src/surfaces/settings-contributed.json +489 -0
- package/src/surfaces/settings-contributed.ts +199 -0
- package/src/surfaces/settings-css-vars.json +820 -0
- package/src/surfaces/settings-css-vars.ts +199 -0
- package/src/surfaces/settings-defs.json +1363 -0
- package/src/surfaces/settings-defs.ts +232 -0
- package/src/surfaces/settings-deploy.json +108 -0
- package/src/surfaces/settings-deploy.ts +135 -0
- package/src/surfaces/settings-extensions.json +486 -0
- package/src/surfaces/settings-extensions.ts +201 -0
- package/src/surfaces/settings-head.json +779 -0
- package/src/surfaces/settings-head.ts +397 -0
- package/src/surfaces/settings-locales.json +420 -0
- package/src/surfaces/settings-locales.ts +137 -0
- package/src/surfaces/settings-overview.json +423 -0
- package/src/surfaces/settings-overview.ts +218 -0
- package/src/surfaces/settings-packages.json +549 -0
- package/src/surfaces/settings-packages.ts +158 -0
- package/src/surfaces/settings-pane.json +147 -0
- package/src/surfaces/settings-pane.ts +150 -0
- package/src/surfaces/settings-rawjson.json +104 -0
- package/src/surfaces/settings-rawjson.ts +107 -0
- package/src/surfaces/shell.json +99 -0
- package/src/surfaces/shell.ts +30 -0
- package/src/surfaces/slash-menu.json +180 -0
- package/src/surfaces/slash-menu.ts +272 -0
- package/src/surfaces/statements.json +607 -0
- package/src/surfaces/statements.ts +238 -0
- package/src/surfaces/statusbar.json +94 -0
- package/src/{panels → surfaces}/statusbar.ts +163 -90
- package/src/surfaces/style-panel.json +1643 -0
- package/src/surfaces/style-panel.ts +338 -0
- package/src/surfaces/stylebook-chrome.json +122 -0
- package/src/surfaces/stylebook-chrome.ts +122 -0
- package/src/surfaces/tab-strip.json +448 -0
- package/src/surfaces/tab-strip.ts +200 -0
- package/src/surfaces/target-line.json +419 -0
- package/src/surfaces/target-line.ts +349 -0
- package/src/surfaces/toasts.json +189 -0
- package/src/surfaces/welcome.json +571 -0
- package/src/surfaces/welcome.ts +338 -0
- package/src/tabs/project-config.ts +71 -15
- package/src/tabs/tab.ts +52 -1
- package/src/types.ts +22 -0
- package/src/ui/ai-credentials-form.ts +104 -100
- package/src/ui/ai-managed-connect.ts +54 -36
- package/src/ui/ai-model-picker.ts +75 -47
- package/src/ui/cf-account-picker.ts +76 -141
- package/src/ui/color-selector.ts +80 -301
- package/src/ui/dynamic-slot.ts +43 -283
- package/src/ui/expression-editor.ts +797 -576
- package/src/ui/field-input.ts +8 -181
- package/src/ui/form-controls.ts +838 -366
- package/src/ui/formula-chips.ts +80 -85
- package/src/ui/kit.ts +33 -0
- package/src/ui/layers.ts +293 -593
- package/src/ui/media-picker.ts +203 -284
- package/src/ui/panel-resize.ts +251 -64
- package/src/ui/popover-surface.ts +153 -0
- package/src/ui/progress-modal.ts +22 -60
- package/src/ui/regions.ts +13 -7
- package/src/ui/schema-form.ts +906 -440
- package/src/ui/surface.ts +122 -0
- package/src/ui/unit-selector.ts +15 -131
- package/src/ui/value-source.ts +14 -0
- package/src/ui/virtual-window.ts +88 -9
- package/src/utils/canvas-media.ts +72 -0
- package/src/utils/edit-display.ts +7 -2
- package/src/utils/element-selectors.ts +69 -0
- package/src/utils/link-target.ts +2 -2
- package/src/utils/studio-utils.ts +0 -10
- package/src/view.ts +15 -0
- package/src/workspace/pane-derive.ts +36 -14
- package/src/workspace/workspace.ts +15 -6
- package/styles/canvas.css +72 -467
- package/styles/forced-colors.css +48 -82
- package/styles/forced-colors.json +41 -0
- package/styles/inspector.css +2 -1301
- package/styles/overlays.css +96 -2823
- package/styles/panels.css +6 -1423
- package/styles/shell-frame.css +272 -0
- package/styles/shell-frame.json +227 -0
- package/styles/shell.css +0 -1568
- package/styles/tokens.css +65 -136
- package/styles/tokens.json +84 -0
- package/dist/chunks/Overlay.dev-etqjwyf9.js +0 -23
- package/dist/chunks/adapter-jkcyhgtr.js +0 -14
- package/dist/chunks/cf-account-picker-en86v7x7.js +0 -163
- package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
- package/dist/chunks/components-zmx10t62.js +0 -21
- package/dist/chunks/content-source-48xg86wj.js +0 -49
- package/dist/chunks/convert-to-repeater-43tfn7cs.js +0 -268
- package/dist/chunks/editor-cptq5jp1.js +0 -37
- package/dist/chunks/entry-commands-e63f1xc0.js +0 -46
- package/dist/chunks/extension-sections-txv08xxg.js +0 -311
- package/dist/chunks/file-ops-wbh4hhsx.js +0 -48
- package/dist/chunks/files-3kfkwhk4.js +0 -93
- package/dist/chunks/flow-qbfgrpeh.js +0 -634
- package/dist/chunks/focus-trap.esm-9t2drp0g.js +0 -1025
- package/dist/chunks/focus-visible-6eg70z18.js +0 -167
- package/dist/chunks/format-host-w16q81tf.js +0 -43
- package/dist/chunks/fs-events-hrrg328g.js +0 -21
- package/dist/chunks/git-panel-532whr1y.js +0 -59
- package/dist/chunks/index-zqxmqxmh.js +0 -109
- package/dist/chunks/jx-validate-8er6gbxy.js +0 -19
- package/dist/chunks/layers-panel-07hm7g5j.js +0 -67
- package/dist/chunks/layers-q75tj2mf.js +0 -45
- package/dist/chunks/lit-html-j055mkh8.js +0 -22
- package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
- package/dist/chunks/notify-yjm79n4s.js +0 -30
- package/dist/chunks/parse-24d0gay3.js +0 -19
- package/dist/chunks/platform-ba1j1gbh.js +0 -16
- package/dist/chunks/publish-panel-v9st96ja.js +0 -29
- package/dist/chunks/quick-search-zccjp6gv.js +0 -66
- package/dist/chunks/references-3qx8fkyp.js +0 -29
- package/dist/chunks/right-panel-vm3b6kwy.js +0 -46
- package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
- package/dist/chunks/sp-overlay.dev-qgvhnxf4.js +0 -18
- package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
- package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
- package/dist/chunks/sp-tooltip.dev-4sastdnw.js +0 -15
- package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
- package/dist/chunks/studio-0a5qrh01.js +0 -3
- package/dist/chunks/studio-0bq6eh7v.js +0 -12
- package/dist/chunks/studio-18j3bmcz.js +0 -14
- package/dist/chunks/studio-1ngbejft.js +0 -181
- package/dist/chunks/studio-4b5z1x43.js +0 -424
- package/dist/chunks/studio-4n2b5gzb.js +0 -357
- package/dist/chunks/studio-4rzyrtjz.js +0 -426
- package/dist/chunks/studio-5fx3g9jg.js +0 -4325
- package/dist/chunks/studio-5myknm0a.js +0 -1903
- package/dist/chunks/studio-7afd21nw.js +0 -67
- package/dist/chunks/studio-7nte2hj4.js +0 -613
- package/dist/chunks/studio-8jpzqk5s.js +0 -128
- package/dist/chunks/studio-8q517dfr.js +0 -24
- package/dist/chunks/studio-950k0dx6.js +0 -6939
- package/dist/chunks/studio-9n4mrmnb.js +0 -184
- package/dist/chunks/studio-a0tswy0w.js +0 -58
- package/dist/chunks/studio-ahnzd9rg.js +0 -23
- package/dist/chunks/studio-cmb03bg5.js +0 -13890
- package/dist/chunks/studio-d1ks410h.js +0 -175
- package/dist/chunks/studio-ef49pnzx.js +0 -387
- package/dist/chunks/studio-eqq1w638.js +0 -113
- package/dist/chunks/studio-ew0djmhg.js +0 -341
- package/dist/chunks/studio-gfgb8pe6.js +0 -1652
- package/dist/chunks/studio-h4rxscfc.js +0 -10
- package/dist/chunks/studio-jc994dnr.js +0 -1066
- package/dist/chunks/studio-kyh9avvv.js +0 -28
- package/dist/chunks/studio-m3hwn7y1.js +0 -120
- package/dist/chunks/studio-mtfnaqs9.js +0 -659
- package/dist/chunks/studio-n6j9t10q.js +0 -318
- package/dist/chunks/studio-n8b9wqwy.js +0 -291
- package/dist/chunks/studio-qcy05dp8.js +0 -1743
- package/dist/chunks/studio-qq6jym04.js +0 -53
- package/dist/chunks/studio-rdx8jcxy.js +0 -83
- package/dist/chunks/studio-rn9ta2mz.js +0 -111
- package/dist/chunks/studio-t7qb9db8.js +0 -665
- package/dist/chunks/studio-tmc5emrw.js +0 -8
- package/dist/chunks/studio-z6nw2ek2.js +0 -18
- package/dist/chunks/studio-zczps70q.js +0 -378
- package/dist/chunks/studio-zqazsct2.js +0 -1823
- package/dist/chunks/workspace-fjx52ryv.js +0 -89
- package/src/panels/activity-bar.ts +0 -251
- package/src/panels/panel-scheduler.ts +0 -219
- package/src/panels/style-inputs.ts +0 -237
- package/src/panels/target-line.ts +0 -274
- package/src/panels/welcome-screen.ts +0 -346
- package/src/ui/button-group.ts +0 -102
- package/src/ui/choice-field.ts +0 -72
- package/src/ui/field-row.ts +0 -249
- package/src/ui/formula-palette.ts +0 -213
- package/src/ui/icons.ts +0 -52
- package/src/ui/jx-theme.ts +0 -130
- package/src/ui/spectrum.ts +0 -340
- package/src/ui/value-selector.ts +0 -174
- package/src/ui/widgets.ts +0 -172
- /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
- /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
- /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
- /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The keyless "Connect Cloudflare" offer, as a mounted document.
|
|
4
|
+
*
|
|
5
|
+
* `ui/ai-managed-connect.ts` is the flow — it decides whether a managed platform can broker Workers
|
|
6
|
+
* AI at all, what a finished OAuth round trip meant, and which words a fresh grant and a lapsed one
|
|
7
|
+
* get — and this is the surface it draws into.
|
|
8
|
+
*
|
|
9
|
+
* **The host element belongs to this module, not to the gate.** Every credentials gate is still a
|
|
10
|
+
* lit template that interpolates the offer beside the key form, so there is no container in the
|
|
11
|
+
* host to mount into and no way to make one without editing three surfaces this conversion does not
|
|
12
|
+
* own. So the surface carries its own: one `<div>` per controller, mounted once and handed to lit
|
|
13
|
+
* as a child value. lit inserts a Node it is given rather than cloning it, and re-inserting the
|
|
14
|
+
* same node is a no-op, so the document survives every repaint of the gate around it — and when the
|
|
15
|
+
* offer is withdrawn lit merely `remove()`s the node, which leaves the mount inside it intact for
|
|
16
|
+
* the next time it is offered.
|
|
17
|
+
*
|
|
18
|
+
* The host is `display: contents` for the same reason: the gates lay their children out in a flex
|
|
19
|
+
* column (`.prefs-assistant` centres them, `.new-project-creds` stretches them), and a wrapper box
|
|
20
|
+
* would become the flex item in the document root's place and take the `width: 100%` below it with
|
|
21
|
+
* it.
|
|
22
|
+
*
|
|
23
|
+
* @docs studio/ai
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { reactive } from "../reactivity";
|
|
27
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
28
|
+
import connectDoc from "./ai-managed-connect.json";
|
|
29
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
30
|
+
import type { JxDocument } from "@jxsuite/schema/types";
|
|
31
|
+
|
|
32
|
+
registerSurface("ai-managed-connect", connectDoc as unknown as JxDocument);
|
|
33
|
+
|
|
34
|
+
/** What the offer says right now. Every field is the flow's wording, never a state it derives. */
|
|
35
|
+
export interface ManagedConnectView {
|
|
36
|
+
/** The recommendation, or the explanation a lapsed grant gets instead. */
|
|
37
|
+
intro: string;
|
|
38
|
+
/** What the button reads — including while it is working. */
|
|
39
|
+
buttonLabel: string;
|
|
40
|
+
/** A flow already in flight: the button says so and refuses a second one. */
|
|
41
|
+
busy: boolean;
|
|
42
|
+
/** Why the last attempt did not finish. Empty draws nothing. */
|
|
43
|
+
error: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** The one thing the reader can do here. */
|
|
47
|
+
export interface ManagedConnectActions {
|
|
48
|
+
/** Run the hosted OAuth flow. Read once, when the surface is created. */
|
|
49
|
+
connect: () => void;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface ManagedConnectSurface {
|
|
53
|
+
/** The element the document lives in — handed to a gate's lit template as a child value. */
|
|
54
|
+
readonly host: HTMLElement;
|
|
55
|
+
/** Bring the standing surface up to date, remounting only if its root has been taken away. */
|
|
56
|
+
update: (view: ManagedConnectView) => void;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** What the document discriminates on, derived here so the flow never has to spell it. */
|
|
60
|
+
interface ManagedConnectFlags {
|
|
61
|
+
/** Whether there is a refusal to draw. The `$switch` reads it, so `true` names the case. */
|
|
62
|
+
hasError: boolean;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
interface ManagedConnectScope
|
|
66
|
+
extends Record<string, unknown>, ManagedConnectView, ManagedConnectActions, ManagedConnectFlags {}
|
|
67
|
+
|
|
68
|
+
/** The view plus the flag the document switches on. */
|
|
69
|
+
function derive(view: ManagedConnectView): ManagedConnectView & ManagedConnectFlags {
|
|
70
|
+
return { ...view, hasError: view.error !== "" };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Create the offer's surface, mounted into a host of its own.
|
|
75
|
+
*
|
|
76
|
+
* There is no teardown, deliberately: a controller lives as long as the gate that made it, and the
|
|
77
|
+
* host it owns is the thing lit takes in and out of the page. Withdrawing the offer is a `remove()`
|
|
78
|
+
* of that node, which leaves the document inside it intact and ready to be inserted again.
|
|
79
|
+
*
|
|
80
|
+
* @param {ManagedConnectView} view What the offer says to begin with.
|
|
81
|
+
* @param {ManagedConnectActions} actions What the button does.
|
|
82
|
+
* @returns {ManagedConnectSurface}
|
|
83
|
+
*/
|
|
84
|
+
export function createManagedConnectSurface(
|
|
85
|
+
view: ManagedConnectView,
|
|
86
|
+
actions: ManagedConnectActions,
|
|
87
|
+
): ManagedConnectSurface {
|
|
88
|
+
const host = document.createElement("div");
|
|
89
|
+
host.style.display = "contents";
|
|
90
|
+
const scope = reactive({ ...derive(view), ...actions }) as ManagedConnectScope;
|
|
91
|
+
|
|
92
|
+
/** `null` while a mount is in flight — which is a standing surface, not a missing one. */
|
|
93
|
+
let handle: SurfaceHandle | null = null;
|
|
94
|
+
let mounting = false;
|
|
95
|
+
|
|
96
|
+
function mount(): void {
|
|
97
|
+
mounting = true;
|
|
98
|
+
void mountSurface("ai-managed-connect", scope, host).then((mounted) => {
|
|
99
|
+
mounting = false;
|
|
100
|
+
handle = mounted;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
mount();
|
|
105
|
+
|
|
106
|
+
return {
|
|
107
|
+
host,
|
|
108
|
+
update(next) {
|
|
109
|
+
Object.assign(scope, derive(next));
|
|
110
|
+
/* A standing mount is only ASSIGNED to: rebuilding it on every repaint of the gate around it
|
|
111
|
+
would take the button out from under a reader mid-press. The remount below answers the one
|
|
112
|
+
case assignment cannot — a host the document has been taken out of — and it cannot fire
|
|
113
|
+
while a mount is in flight, because a record with no handle yet IS the standing one. */
|
|
114
|
+
if (mounting || (handle !== null && host.contains(handle.root))) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
handle?.dispose();
|
|
118
|
+
handle = null;
|
|
119
|
+
host.textContent = "";
|
|
120
|
+
mount();
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
|
+
"$id": "StudioAiModelPicker",
|
|
4
|
+
"$description": "The provider's model catalogue as one control, for every surface that chooses a model — the assistant's composer and the New Project Import source. Everything here is a projection: `ui/ai-model-picker.ts` decides which credentials the catalogue was listed under, which rows it holds, which of them is selected and what a failed listing said. This document never fetches anything and never learns what a credential is.",
|
|
5
|
+
"tagName": "div",
|
|
6
|
+
"attributes": {
|
|
7
|
+
"part": "model-picker",
|
|
8
|
+
"data-width": "${state.width}"
|
|
9
|
+
},
|
|
10
|
+
"style": {
|
|
11
|
+
"$description": "`.ai-model-picker` (shell.css) and `.new-project-import-model` (overlays.css) were the same control at two widths, so the two rules become one attribute the host sets. The wrapper is the flex item now rather than the control, which is what lets the retry button sit beside the picker without the host laying it out.",
|
|
12
|
+
"display": "flex",
|
|
13
|
+
"alignItems": "center",
|
|
14
|
+
"gap": "var(--jx-space-2)",
|
|
15
|
+
"minWidth": "0",
|
|
16
|
+
"&[data-width=\"compact\"]": {
|
|
17
|
+
"$description": "The composer's row: the picker may not push the send button off the end, so it is capped and allowed to shrink.",
|
|
18
|
+
"maxWidth": "140px"
|
|
19
|
+
},
|
|
20
|
+
"&[data-width=\"fill\"]": {
|
|
21
|
+
"$description": "A field in a form column, where the control takes the column's width.",
|
|
22
|
+
"width": "100%"
|
|
23
|
+
},
|
|
24
|
+
"& [part=\"select\"]": {
|
|
25
|
+
"minWidth": "0",
|
|
26
|
+
"flex": "1 1 auto"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"children": [
|
|
30
|
+
{
|
|
31
|
+
"tagName": "jx-select",
|
|
32
|
+
"attributes": {
|
|
33
|
+
"part": "select",
|
|
34
|
+
"title": "${state.hint}"
|
|
35
|
+
},
|
|
36
|
+
"$props": {
|
|
37
|
+
"label": "Model",
|
|
38
|
+
"size": {
|
|
39
|
+
"$ref": "#/state/size"
|
|
40
|
+
},
|
|
41
|
+
"options": {
|
|
42
|
+
"$ref": "#/state/options"
|
|
43
|
+
},
|
|
44
|
+
"value": {
|
|
45
|
+
"$ref": "#/state/value"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"onchange": {
|
|
49
|
+
"$prototype": "Function",
|
|
50
|
+
"body": [
|
|
51
|
+
{
|
|
52
|
+
"operator": "call",
|
|
53
|
+
"target": {
|
|
54
|
+
"$ref": "#/state/choose"
|
|
55
|
+
},
|
|
56
|
+
"value": [
|
|
57
|
+
{
|
|
58
|
+
"$ref": "event#/target/value"
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"description": "The change bubbles out of the inner control, so the picked id is read off the event rather than off the element."
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"tagName": "div",
|
|
68
|
+
"attributes": {
|
|
69
|
+
"part": "retry-slot",
|
|
70
|
+
"role": "none"
|
|
71
|
+
},
|
|
72
|
+
"style": {
|
|
73
|
+
"display": "contents"
|
|
74
|
+
},
|
|
75
|
+
"$switch": {
|
|
76
|
+
"$ref": "#/state/hasFailure"
|
|
77
|
+
},
|
|
78
|
+
"cases": {
|
|
79
|
+
"true": {
|
|
80
|
+
"$description": "Retry is a BUTTON beside the picker, not a row inside it. As a row it was a value the select could hold and did not mean — one press left the control reporting `__retry_models__` as the chosen model, and the write that would have corrected it is exactly the write a document's bindings skip when the scope never moved. A button says the same thing and holds no value at all.",
|
|
81
|
+
"tagName": "jx-button",
|
|
82
|
+
"attributes": {
|
|
83
|
+
"part": "retry"
|
|
84
|
+
},
|
|
85
|
+
"$props": {
|
|
86
|
+
"size": {
|
|
87
|
+
"$ref": "#/state/size"
|
|
88
|
+
},
|
|
89
|
+
"quiet": true,
|
|
90
|
+
"label": "Retry loading models"
|
|
91
|
+
},
|
|
92
|
+
"onclick": {
|
|
93
|
+
"$prototype": "Function",
|
|
94
|
+
"body": [
|
|
95
|
+
{
|
|
96
|
+
"operator": "call",
|
|
97
|
+
"target": {
|
|
98
|
+
"$ref": "#/state/retry"
|
|
99
|
+
},
|
|
100
|
+
"value": []
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
"children": [
|
|
105
|
+
{
|
|
106
|
+
"tagName": "span",
|
|
107
|
+
"textContent": "Retry"
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The model catalogue as a mounted document.
|
|
4
|
+
*
|
|
5
|
+
* `ui/ai-model-picker.ts` is the flow — it decides which credentials a catalogue may be shown for,
|
|
6
|
+
* when to list, what a failed listing said and where a choice goes — and this is the surface it
|
|
7
|
+
* draws into.
|
|
8
|
+
*
|
|
9
|
+
* **The host element belongs to this module, not to the host surface.** Both callers are still lit
|
|
10
|
+
* templates that interpolate the picker into a row of their own (`panels/ai-chat/composer.ts`'s
|
|
11
|
+
* button row, `new-project/import-tab.ts`'s field column), so there is no container in either to
|
|
12
|
+
* mount into. So the surface carries its own: one `<div>` per controller, mounted once and handed
|
|
13
|
+
* to lit as a child value. lit inserts a Node it is given rather than cloning it, and re-inserting
|
|
14
|
+
* the same node is a no-op, so the document survives every repaint of the row around it. This is
|
|
15
|
+
* the seam `surfaces/ai-managed-connect.ts` established; nothing here is new but the contents.
|
|
16
|
+
*
|
|
17
|
+
* The host is `display: contents` for the same reason it is there: both rows lay their children out
|
|
18
|
+
* themselves (a flex row and a flex column), and a wrapper box would become the flex item in the
|
|
19
|
+
* document root's place and take the width rule below it with it.
|
|
20
|
+
*
|
|
21
|
+
* @docs studio/ai
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { reactive } from "../reactivity";
|
|
25
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
|
+
import pickerDoc from "./ai-model-picker.json";
|
|
27
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
28
|
+
import type { JxDocument } from "@jxsuite/schema/types";
|
|
29
|
+
|
|
30
|
+
registerSurface("ai-model-picker", pickerDoc as unknown as JxDocument);
|
|
31
|
+
|
|
32
|
+
/** One row the control offers. Already a label — the flow decides what a row is called. */
|
|
33
|
+
export interface ModelPickerRow {
|
|
34
|
+
/** The model id, which is both the row's key and what a choice reports. */
|
|
35
|
+
value: string;
|
|
36
|
+
/** What the row reads, including any note the flow attached to it. */
|
|
37
|
+
label: string;
|
|
38
|
+
/** A row that stands for a state rather than a model, and so may not be chosen. */
|
|
39
|
+
disabled?: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** How wide the control is drawn. Two hosts, two shapes, and no class between them. */
|
|
43
|
+
export type ModelPickerWidth = "compact" | "fill";
|
|
44
|
+
|
|
45
|
+
/** What the picker says right now. Every field is the flow's, never a state it derives. */
|
|
46
|
+
export interface ModelPickerView {
|
|
47
|
+
/** The rows to offer, in order, already including any placeholder the flow wants shown. */
|
|
48
|
+
options: ModelPickerRow[];
|
|
49
|
+
/** The id shown as chosen. The flow guarantees the rows contain it. */
|
|
50
|
+
value: string;
|
|
51
|
+
/** The control's tooltip: "Model", or what the last listing refused with. */
|
|
52
|
+
hint: string;
|
|
53
|
+
/** Why the last listing did not finish. Empty draws no retry button. */
|
|
54
|
+
failure: string;
|
|
55
|
+
/** The kit control size, `"sm"` or `"md"` — the host's to set. */
|
|
56
|
+
size: "sm" | "md";
|
|
57
|
+
/** Which of the two shapes to draw. */
|
|
58
|
+
width: ModelPickerWidth;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** The two things the reader can do here. */
|
|
62
|
+
export interface ModelPickerActions {
|
|
63
|
+
/** A row was picked. Read once, when the surface is created. */
|
|
64
|
+
choose: (id: string) => void;
|
|
65
|
+
/** List again after a failure. */
|
|
66
|
+
retry: () => void;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface ModelPickerSurface {
|
|
70
|
+
/** The element the document lives in — handed to a host's lit template as a child value. */
|
|
71
|
+
readonly host: HTMLElement;
|
|
72
|
+
/** Bring the standing surface up to date, remounting only if its root has been taken away. */
|
|
73
|
+
update: (view: ModelPickerView) => void;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** What the document discriminates on, derived here so the flow never has to spell it. */
|
|
77
|
+
interface ModelPickerFlags {
|
|
78
|
+
/** Whether there is a refusal, and so a retry button. The `$switch` reads it. */
|
|
79
|
+
hasFailure: boolean;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
interface ModelPickerScope
|
|
83
|
+
extends Record<string, unknown>, ModelPickerView, ModelPickerActions, ModelPickerFlags {}
|
|
84
|
+
|
|
85
|
+
/** The view plus the flag the document switches on. */
|
|
86
|
+
function derive(view: ModelPickerView): ModelPickerView & ModelPickerFlags {
|
|
87
|
+
return { ...view, hasFailure: view.failure !== "" };
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Create the picker's surface, mounted into a host of its own.
|
|
92
|
+
*
|
|
93
|
+
* There is no teardown, deliberately: a controller lives as long as the surface that made it, and
|
|
94
|
+
* the host it owns is the thing lit takes in and out of the page.
|
|
95
|
+
*
|
|
96
|
+
* @param {ModelPickerView} view What the picker offers to begin with.
|
|
97
|
+
* @param {ModelPickerActions} actions What a pick and a retry do.
|
|
98
|
+
* @returns {ModelPickerSurface}
|
|
99
|
+
*/
|
|
100
|
+
export function createModelPickerSurface(
|
|
101
|
+
view: ModelPickerView,
|
|
102
|
+
actions: ModelPickerActions,
|
|
103
|
+
): ModelPickerSurface {
|
|
104
|
+
const host = document.createElement("div");
|
|
105
|
+
host.style.display = "contents";
|
|
106
|
+
const scope = reactive({ ...derive(view), ...actions }) as ModelPickerScope;
|
|
107
|
+
|
|
108
|
+
/** `null` while a mount is in flight — which is a standing surface, not a missing one. */
|
|
109
|
+
let handle: SurfaceHandle | null = null;
|
|
110
|
+
let mounting = false;
|
|
111
|
+
|
|
112
|
+
function mount(): void {
|
|
113
|
+
mounting = true;
|
|
114
|
+
void mountSurface("ai-model-picker", scope, host).then((mounted) => {
|
|
115
|
+
mounting = false;
|
|
116
|
+
handle = mounted;
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
mount();
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
host,
|
|
124
|
+
update(next) {
|
|
125
|
+
Object.assign(scope, derive(next));
|
|
126
|
+
/* A standing mount is only ASSIGNED to: rebuilding it on every repaint of the row around it
|
|
127
|
+
would take the control out from under a reader who has it open. The remount below answers
|
|
128
|
+
the one case assignment cannot — a host the document has been taken out of — and it cannot
|
|
129
|
+
fire while a mount is in flight, because a record with no handle yet IS the standing one. */
|
|
130
|
+
if (mounting || (handle !== null && host.contains(handle.root))) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
handle?.dispose();
|
|
134
|
+
handle = null;
|
|
135
|
+
host.textContent = "";
|
|
136
|
+
mount();
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|