@jxsuite/studio 6.1.0 → 6.1.2
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/dist/chunks/2020-f2gkpy8d.js +4 -0
- package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
- package/dist/chunks/adapter-4912g339.js +4 -0
- package/dist/chunks/cf-account-picker-wccaenh6.js +4 -0
- package/dist/chunks/cf-settings-br6105tr.js +4 -0
- package/dist/chunks/color-28ksk2qm.js +4 -0
- package/dist/chunks/color-area-0fj8a4ga.js +4 -0
- package/dist/chunks/color-field-xch8kx2g.js +4 -0
- package/dist/chunks/color-slider-jxd8v350.js +4 -0
- package/dist/chunks/combobox-p0efwjke.js +4 -0
- package/dist/chunks/components-db68vsn7.js +4 -0
- package/dist/chunks/content-source-1449qesq.js +4 -0
- package/dist/chunks/convert-to-repeater-5h457egj.js +4 -0
- package/dist/chunks/dialog-c4x05vyx.js +4 -0
- package/dist/chunks/editor-x9jn86a7.js +4 -0
- package/dist/chunks/entry-commands-may24cpt.js +4 -0
- package/dist/chunks/extension-sections-pvr14vxr.js +4 -0
- package/dist/chunks/file-ops-x9v54pcj.js +4 -0
- package/dist/chunks/files-j3knqf0s.js +4 -0
- package/dist/chunks/format-host-tyre2trb.js +4 -0
- package/dist/chunks/fs-events-64ma9htc.js +4 -0
- package/dist/chunks/git-panel-84ps5dex.js +4 -0
- package/dist/chunks/grid-view-d2wq9ezg.js +51 -0
- package/dist/chunks/icons-pnfz478q.js +4 -0
- package/dist/chunks/iframe-entry-fvbk89gm.js +5 -0
- package/dist/chunks/iframe-entry-jdcktez8.js +5 -0
- package/dist/chunks/iframe-entry-x0ygf2yr.js +5 -0
- package/dist/chunks/iframe-entry-zap785cw.js +5 -0
- package/dist/chunks/iframe-host-ck6vejt5.js +4 -0
- package/dist/chunks/index-b8xw3vy9.js +4 -0
- package/dist/chunks/{index-gybvv7a6.js → index-zpjmzqfk.js} +3 -3
- package/dist/chunks/{javascript-rnvdp3k4.js → javascript-m54mnwp6.js} +3 -3
- package/dist/chunks/jsonMode-w15cmrcm.js +13 -0
- package/dist/chunks/jx-validate-at3zn8wa.js +4 -0
- package/dist/chunks/layers-h4xp1pss.js +4 -0
- package/dist/chunks/layers-panel-m5hw1d7g.js +4 -0
- package/dist/chunks/listbox-e74qjyq6.js +4 -0
- package/dist/chunks/lit-html-8t8t3dnr.js +4 -0
- package/dist/chunks/media-picker-2cweexc5.js +4 -0
- package/dist/chunks/menu-n6yzswmy.js +4 -0
- package/dist/chunks/menu-ynw13y0s.js +4 -0
- package/dist/chunks/monaco-binding-7gx83x3r.js +4 -0
- package/dist/chunks/monaco-buffer-qzxn567r.js +4 -0
- package/dist/chunks/monaco-setup-gxf6656g.js +4 -0
- package/dist/chunks/notify-cj5zbrs2.js +4 -0
- package/dist/chunks/number-field-y62xq0ty.js +4 -0
- package/dist/chunks/parse-b7ddhr8m.js +4 -0
- package/dist/chunks/platform-3dfws9js.js +4 -0
- package/dist/chunks/popover-jt2gxmzs.js +4 -0
- package/dist/chunks/publish-panel-1gvxbj21.js +4 -0
- package/dist/chunks/quick-search-0dajrwqg.js +4 -0
- package/dist/chunks/references-49qgt404.js +4 -0
- package/dist/chunks/right-panel-jm1bwe53.js +4 -0
- package/dist/chunks/section-registry-6kwc4fky.js +4 -0
- package/dist/chunks/select-rzds841e.js +4 -0
- package/dist/chunks/split-n2gfpm5m.js +4 -0
- package/dist/chunks/{studio-5g0ag7c0.js → studio-0q988f9w.js} +3 -3
- package/dist/chunks/studio-0rt52vpq.js +5 -0
- package/dist/chunks/studio-18vgbhs5.js +5 -0
- package/dist/chunks/{studio-pxg4ap1e.js → studio-1fxkaaea.js} +4 -4
- package/dist/chunks/studio-24mccdrj.js +5 -0
- package/dist/chunks/studio-2eh507zk.js +9 -0
- package/dist/chunks/studio-2hcbccfv.js +5 -0
- package/dist/chunks/studio-2j1cb95x.js +5 -0
- package/dist/chunks/studio-2jbs3rxv.js +5 -0
- package/dist/chunks/{studio-qbj760tx.js → studio-485046te.js} +7 -7
- package/dist/chunks/studio-4h8k4dw9.js +5 -0
- package/dist/chunks/studio-5f6n18kx.js +5 -0
- package/dist/chunks/studio-5gthpky6.js +5 -0
- package/dist/chunks/studio-5ve6bbep.js +5 -0
- package/dist/chunks/studio-6ep3js6b.js +9 -0
- package/dist/chunks/studio-6wkmf3wz.js +9 -0
- package/dist/chunks/studio-841rf3cg.js +5 -0
- package/dist/chunks/studio-8gmwgheg.js +5 -0
- package/dist/chunks/studio-8qm0ep50.js +5 -0
- package/dist/chunks/{studio-anyrgzvb.js → studio-90pq9km1.js} +4 -4
- package/dist/chunks/studio-924p1tm1.js +6 -0
- package/dist/chunks/{studio-v2bvmbjj.js → studio-a3g98wjr.js} +4 -4
- package/dist/chunks/studio-a3shpz9y.js +5 -0
- package/dist/chunks/studio-amsbaaar.js +6 -0
- package/dist/chunks/studio-at5spjbc.js +7 -0
- package/dist/chunks/studio-b2xv945e.js +5 -0
- package/dist/chunks/studio-bn5nkafw.js +5 -0
- package/dist/chunks/studio-bw6q5xjf.js +9 -0
- package/dist/chunks/studio-c7q0t9x1.js +5 -0
- package/dist/chunks/studio-camnhc96.js +6 -0
- package/dist/chunks/studio-cffqvnzd.js +5 -0
- package/dist/chunks/studio-d81xfh1g.js +5 -0
- package/dist/chunks/studio-dgz8d0c1.js +5 -0
- package/dist/chunks/studio-efvfrsf8.js +5 -0
- package/dist/chunks/studio-er30bpcx.js +5 -0
- package/dist/chunks/studio-ezscgr64.js +5 -0
- package/dist/chunks/studio-ffrrncvz.js +5 -0
- package/dist/chunks/studio-fpphgn8y.js +10 -0
- package/dist/chunks/studio-j1kvhdjk.js +4 -0
- package/dist/chunks/{studio-txjjzrsm.js → studio-j430n16g.js} +5 -5
- package/dist/chunks/studio-jjkg84nj.js +5 -0
- package/dist/chunks/studio-m0q32ars.js +4 -0
- package/dist/chunks/studio-m6bdst11.js +5 -0
- package/dist/chunks/studio-nv2cptd4.js +64 -0
- package/dist/chunks/studio-nwfrc98n.js +5 -0
- package/dist/chunks/studio-p1wgvp7r.js +5 -0
- package/dist/chunks/studio-pag2wncm.js +5 -0
- package/dist/chunks/studio-qvanvzfd.js +5 -0
- package/dist/chunks/studio-qwa64kt7.js +5 -0
- package/dist/chunks/studio-rk1zc4x3.js +928 -0
- package/dist/chunks/studio-se2r3ptc.js +5 -0
- package/dist/chunks/studio-sg2a0dh0.js +5 -0
- package/dist/chunks/studio-tjzjhe68.js +5 -0
- package/dist/chunks/{studio-0x3jyb8r.js → studio-tq0rtfwj.js} +4 -4
- package/dist/chunks/{studio-cpxkgjrj.js → studio-v0jzqdjm.js} +4 -4
- package/dist/chunks/studio-v2w7q8r1.js +7 -0
- package/dist/chunks/studio-v5vjq1h0.js +4 -0
- package/dist/chunks/studio-v8aga3vp.js +14 -0
- package/dist/chunks/studio-vfcdrfmv.js +5 -0
- package/dist/chunks/studio-vmfkgdjf.js +5 -0
- package/dist/chunks/studio-wt1816jj.js +5 -0
- package/dist/chunks/studio-wz73q5kq.js +4 -0
- package/dist/chunks/studio-y04qtxvp.js +7 -0
- package/dist/chunks/studio-y21g8zzg.js +5 -0
- package/dist/chunks/studio-y64hrt8p.js +12 -0
- package/dist/chunks/studio-ynn90f58.js +16 -0
- package/dist/chunks/studio-yxz682sx.js +5 -0
- package/dist/chunks/studio-zp7snvkq.js +5 -0
- package/dist/chunks/studio-zq4z6tm6.js +5 -0
- package/dist/chunks/swatch-group-ewh24n1f.js +4 -0
- package/dist/chunks/tabs-f5cw3tgp.js +4 -0
- package/dist/chunks/textfield-wewc8rq2.js +4 -0
- package/dist/chunks/toast-c9fn075p.js +4 -0
- package/dist/chunks/toast-host-ke5z4ng7.js +4 -0
- package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
- package/dist/chunks/tooltip-5v8ngwj2.js +4 -0
- package/dist/chunks/tree-mdq3v5cw.js +4 -0
- package/dist/chunks/tsMode-sf49ee9x.js +14 -0
- package/dist/chunks/workspace-jtfahpee.js +4 -0
- package/dist/chunks/ws-client-nze0k6mv.js +4 -0
- package/dist/iframe-entry.js +16 -16
- package/dist/manifest.json +63 -63
- package/dist/studio.js +98 -98
- package/dist/workers/ts.worker.js +3 -3
- package/package.json +11 -11
- package/src/about/about-modal.ts +4 -3
- package/src/account/action-flow.ts +45 -38
- package/src/account-status.ts +7 -2
- package/src/browse/library-layouts.ts +8 -5
- package/src/browse/library-model.ts +18 -6
- package/src/browse/library-pane.ts +37 -21
- package/src/browse/library-preview.ts +14 -9
- package/src/browse/library-source.ts +1 -1
- package/src/canvas/asset-refs.ts +24 -9
- package/src/canvas/asset-resolve.ts +19 -23
- package/src/canvas/canvas-helpers.ts +7 -6
- package/src/canvas/canvas-live-render.ts +44 -53
- package/src/canvas/canvas-patcher.ts +30 -30
- package/src/canvas/canvas-perf.ts +11 -5
- package/src/canvas/canvas-render.ts +66 -42
- package/src/canvas/canvas-surface.ts +5 -3
- package/src/canvas/canvas-utils.ts +163 -64
- package/src/canvas/dialog-path.ts +9 -4
- package/src/canvas/dialog-state.ts +1 -2
- package/src/canvas/diff-marks.ts +9 -16
- package/src/canvas/diff-toolbar.ts +8 -7
- package/src/canvas/edit-width-drag.ts +4 -1
- package/src/canvas/edit-width.ts +1 -3
- package/src/canvas/iframe-channel.ts +27 -13
- package/src/canvas/iframe-drop.ts +13 -12
- package/src/canvas/iframe-editable-root.ts +29 -16
- package/src/canvas/iframe-entry.ts +80 -63
- package/src/canvas/iframe-eval.ts +73 -49
- package/src/canvas/iframe-host.ts +203 -118
- package/src/canvas/iframe-inline-edit.ts +69 -32
- package/src/canvas/iframe-insert.ts +5 -4
- package/src/canvas/iframe-interaction.ts +37 -26
- package/src/canvas/iframe-overlay.ts +1 -1
- package/src/canvas/iframe-patch.ts +18 -15
- package/src/canvas/iframe-position.ts +12 -6
- package/src/canvas/iframe-protocol.ts +15 -16
- package/src/canvas/iframe-render.ts +41 -36
- package/src/canvas/iframe-slash.ts +24 -11
- package/src/canvas/iframe-subtree.ts +6 -2
- package/src/canvas/path-mapping.ts +19 -12
- package/src/canvas/popover-path.ts +7 -3
- package/src/canvas/popover-state.ts +1 -2
- package/src/canvas/serialize-scope.ts +13 -5
- package/src/canvas/stage-scrollbar.ts +2 -1
- package/src/canvas/surface-registry.ts +21 -3
- package/src/collab/collab-commands.ts +7 -2
- package/src/collab/collab-session.ts +84 -45
- package/src/collab/collab-state.ts +4 -3
- package/src/collab/monaco-binding.ts +16 -13
- package/src/collab/monaco-cursors.ts +5 -2
- package/src/commands/budget.ts +3 -3
- package/src/commands/command-args.ts +103 -71
- package/src/commands/context.ts +22 -20
- package/src/commands/defaults.ts +4 -1
- package/src/commands/keymap.ts +47 -43
- package/src/commands/levels.ts +3 -3
- package/src/commands/live-context.ts +10 -8
- package/src/commands/reference.ts +2 -1
- package/src/commands/registry.ts +12 -10
- package/src/commands/run-reported.ts +15 -10
- package/src/component-props.ts +46 -30
- package/src/content/collection-match.ts +5 -4
- package/src/content/draft-state.ts +4 -3
- package/src/content/entry-commands.ts +3 -2
- package/src/content/entry-editor.ts +29 -17
- package/src/content/entry-fields.ts +12 -7
- package/src/content/entry-model.ts +21 -12
- package/src/editor/canvas-context-menu.ts +1 -2
- package/src/editor/canvas-slash-bridge.ts +3 -6
- package/src/editor/content-slice.ts +16 -14
- package/src/editor/context-menu.ts +35 -22
- package/src/editor/convert-targets.ts +30 -35
- package/src/editor/convert-to-component.ts +11 -5
- package/src/editor/convert-to-repeater.ts +34 -22
- package/src/editor/editable-tags.ts +17 -2
- package/src/editor/file-drop-action.ts +21 -22
- package/src/editor/inline-edit-apply.ts +35 -17
- package/src/editor/inline-edit.ts +66 -50
- package/src/editor/inline-format.ts +59 -56
- package/src/editor/inline-link.ts +40 -15
- package/src/editor/insert-zone-action.ts +1 -1
- package/src/editor/merge-tags.ts +58 -19
- package/src/editor/repeater-scope.ts +39 -28
- package/src/editor/shortcuts.ts +87 -47
- package/src/editor/slash-menu.ts +1 -6
- package/src/files/asset-versions.ts +4 -4
- package/src/files/components.ts +15 -10
- package/src/files/elements.ts +5 -6
- package/src/files/file-ops.ts +77 -36
- package/src/files/files.ts +90 -95
- package/src/files/media-meta.ts +2 -1
- package/src/files/media-paths.ts +6 -1
- package/src/files/serialize-document.ts +2 -2
- package/src/format/constraints.ts +1 -1
- package/src/format/convert-file.ts +27 -13
- package/src/format/format-choices.ts +2 -1
- package/src/format/format-host.ts +76 -50
- package/src/github/github-auth-status.ts +27 -3
- package/src/github/github-auth.ts +19 -9
- package/src/github/github-publish.ts +24 -20
- package/src/grid/cell-editors.ts +46 -31
- package/src/grid/cell-popovers.ts +5 -3
- package/src/grid/edit-buffer.ts +10 -9
- package/src/grid/grid-controller.ts +20 -22
- package/src/grid/grid-layout.ts +21 -5
- package/src/grid/grid-open.ts +3 -6
- package/src/grid/grid-panel.ts +11 -4
- package/src/grid/grid-source.ts +8 -8
- package/src/grid/grid-view.ts +14 -17
- package/src/grid/redirects-grid.ts +14 -5
- package/src/grid/redirects.ts +16 -14
- package/src/grid/schema-columns.ts +25 -19
- package/src/grid/sources/connector-source.ts +47 -20
- package/src/grid/sources/content-source.ts +25 -24
- package/src/grid/sources/csv-file-source.ts +2 -2
- package/src/grid/tabulator-tables.d.ts +55 -34
- package/src/hosting/stage.ts +7 -7
- package/src/i18n/i18n-commands.ts +1 -2
- package/src/media/media-pane.ts +4 -1
- package/src/new-project/add-repo-modal.ts +20 -19
- package/src/new-project/import-tab.ts +10 -14
- package/src/new-project/location-fields.ts +2 -1
- package/src/new-project/new-project-modal.ts +12 -9
- package/src/packages/jxsuite-update.ts +4 -3
- package/src/packages/pull-package-sync.ts +26 -25
- package/src/page-params.ts +97 -68
- package/src/panels/activity-panel.ts +17 -9
- package/src/panels/ai-chat/attached-context.ts +13 -7
- package/src/panels/ai-chat/chat-view.ts +80 -73
- package/src/panels/ai-chat/composer.ts +30 -33
- package/src/panels/ai-chat/sessions-view.ts +1 -2
- package/src/panels/ai-panel.ts +23 -20
- package/src/panels/block-action-bar.ts +46 -35
- package/src/panels/bottom-dock.ts +5 -3
- package/src/panels/canvas-dnd-bridge.ts +31 -24
- package/src/panels/data-explorer.ts +62 -25
- package/src/panels/data-grid.ts +14 -11
- package/src/panels/dnd.ts +108 -118
- package/src/panels/editors.ts +55 -22
- package/src/panels/elements-panel.ts +10 -3
- package/src/panels/events-panel.ts +84 -69
- package/src/panels/formula-workspace.ts +76 -51
- package/src/panels/frontmatter-fields.ts +24 -19
- package/src/panels/frontmatter-panel.ts +44 -34
- package/src/panels/git-diff-open.ts +4 -4
- package/src/panels/git-panel.ts +49 -61
- package/src/panels/head-panel.ts +131 -111
- package/src/panels/i18n-panel.ts +10 -3
- package/src/panels/imports-panel.ts +23 -47
- package/src/panels/jump-bar.ts +48 -29
- package/src/panels/layers-panel.ts +97 -74
- package/src/panels/left-panel.ts +3 -3
- package/src/panels/pane-context.ts +31 -22
- package/src/panels/pane-grid.ts +49 -20
- package/src/panels/panel-registry.ts +22 -37
- package/src/panels/properties-panel.ts +175 -121
- package/src/panels/quick-search.ts +53 -31
- package/src/panels/right-panel.ts +3 -3
- package/src/panels/seo-modal.ts +13 -17
- package/src/panels/settings-menu.ts +15 -15
- package/src/panels/signals-panel.ts +153 -131
- package/src/panels/statement-editor.ts +230 -140
- package/src/panels/style-panel.ts +254 -216
- package/src/panels/style-utils.ts +114 -51
- package/src/panels/stylebook-doc.ts +57 -54
- package/src/panels/stylebook-layers-panel.ts +9 -9
- package/src/panels/stylebook-panel.ts +13 -17
- package/src/panels/tab-drop.ts +27 -11
- package/src/panels/tab-strip.ts +36 -26
- package/src/platform-errors.ts +57 -43
- package/src/platform.ts +58 -30
- package/src/platforms/cloud.ts +345 -175
- package/src/platforms/default-platform.ts +10 -4
- package/src/platforms/devserver.ts +174 -127
- package/src/platforms/read-batcher.ts +16 -8
- package/src/project-list.ts +2 -1
- package/src/publish/deploy-checklist.ts +8 -2
- package/src/publish/pages-service.ts +28 -13
- package/src/publish/publish-commands.ts +5 -4
- package/src/publish/publish-panel.ts +10 -6
- package/src/recent-projects.ts +15 -8
- package/src/resize-edges.ts +26 -36
- package/src/services/a11y-report.ts +26 -19
- package/src/services/agent-seed.ts +23 -11
- package/src/services/ai-ask.ts +9 -12
- package/src/services/ai-command-tools.ts +68 -62
- package/src/services/ai-import-tools.ts +80 -67
- package/src/services/ai-models.ts +17 -13
- package/src/services/ai-project-tools.ts +68 -32
- package/src/services/ai-session-store.ts +19 -10
- package/src/services/ai-system-prompt.ts +46 -20
- package/src/services/ai-tools.ts +71 -27
- package/src/services/ai-write-report.ts +20 -12
- package/src/services/ai-writes.ts +4 -4
- package/src/services/automation.ts +58 -31
- package/src/services/cem-export.ts +149 -58
- package/src/services/clock.ts +6 -1
- package/src/services/code-services.ts +37 -31
- package/src/services/context-manager.ts +14 -10
- package/src/services/context-resolver.ts +20 -8
- package/src/services/data-service.ts +19 -15
- package/src/services/directory-picker.ts +18 -12
- package/src/services/document-assistant.ts +39 -19
- package/src/services/gated-registry.ts +10 -6
- package/src/services/harness/chat-reducer.ts +23 -1
- package/src/services/import-client.ts +91 -38
- package/src/services/import-seed.ts +8 -2
- package/src/services/jx-validate.ts +28 -31
- package/src/services/live-preview.ts +0 -0
- package/src/services/live-surfaces.ts +6 -3
- package/src/services/model-uri.ts +10 -2
- package/src/services/module-preloads.ts +12 -8
- package/src/services/monaco-buffer.ts +43 -24
- package/src/services/monaco-lazy.ts +7 -8
- package/src/services/monaco-setup.ts +23 -16
- package/src/services/notify.ts +44 -17
- package/src/services/popover-report.ts +25 -10
- package/src/services/preview-eval.ts +20 -8
- package/src/services/profile.ts +13 -6
- package/src/services/project-path.ts +13 -10
- package/src/services/references.ts +0 -0
- package/src/services/render-critic.ts +8 -7
- package/src/services/settings/kernel.ts +13 -4
- package/src/services/settings/write-queue.ts +9 -9
- package/src/services/token-lint.ts +12 -10
- package/src/services/tool-executor.ts +17 -5
- package/src/services/tool-outcomes.ts +44 -24
- package/src/services/trusted-types.ts +24 -7
- package/src/settings/contexts-section.ts +11 -8
- package/src/settings/contributed-section.ts +79 -60
- package/src/settings/css-vars-editor.ts +37 -16
- package/src/settings/defs-editor.ts +38 -35
- package/src/settings/extension-rows.ts +16 -8
- package/src/settings/extension-sections.ts +23 -13
- package/src/settings/extensions-section.ts +4 -1
- package/src/settings/general-settings.ts +11 -8
- package/src/settings/locales-section.ts +20 -12
- package/src/settings/preferences-dialog.ts +9 -6
- package/src/settings/preferences-keymap.ts +7 -5
- package/src/settings/preferences-sections.ts +11 -5
- package/src/settings/project-sections.ts +1 -1
- package/src/settings/schema-field-ui.ts +9 -0
- package/src/settings/settings-document.ts +5 -5
- package/src/shell/tree.ts +6 -5
- package/src/shell.ts +104 -81
- package/src/site-context.ts +37 -22
- package/src/state.ts +41 -49
- package/src/store.ts +54 -34
- package/src/studio.ts +39 -77
- package/src/style/live-preview.ts +1 -1
- package/src/style/project-styles.ts +6 -7
- package/src/style/token-ref.ts +5 -4
- package/src/surfaces/about.ts +18 -19
- package/src/surfaces/add-repo.ts +17 -19
- package/src/surfaces/ai-chat.ts +31 -36
- package/src/surfaces/ai-credentials-form.ts +6 -16
- package/src/surfaces/ai-managed-connect.ts +3 -4
- package/src/surfaces/ai-model-picker.ts +3 -5
- package/src/surfaces/block-action-bar.ts +22 -11
- package/src/surfaces/boot-failure.ts +4 -5
- package/src/surfaces/bottom-dock.ts +9 -18
- package/src/surfaces/canvas-stage.ts +12 -11
- package/src/surfaces/cf-account-picker.ts +17 -18
- package/src/surfaces/commandbar.ts +14 -9
- package/src/surfaces/convert-repeater.ts +17 -19
- package/src/surfaces/data-actions.ts +9 -7
- package/src/surfaces/dialog.ts +26 -28
- package/src/surfaces/diff-toolbar.ts +9 -7
- package/src/surfaces/doc-header.ts +10 -19
- package/src/surfaces/empty-state.ts +7 -10
- package/src/surfaces/entry-editor.ts +14 -11
- package/src/surfaces/expression-editor.ts +11 -25
- package/src/surfaces/files-panel.ts +27 -14
- package/src/surfaces/formula-palette.ts +4 -5
- package/src/surfaces/git-panel.ts +7 -15
- package/src/surfaces/github-auth.ts +16 -20
- package/src/surfaces/github-publish.ts +17 -22
- package/src/surfaces/grid-cell.ts +30 -31
- package/src/surfaces/grid-open.ts +10 -14
- package/src/surfaces/grid-panel.ts +13 -9
- package/src/surfaces/grid-replace.ts +13 -13
- package/src/surfaces/grid-views.ts +15 -18
- package/src/surfaces/inspector-dock.ts +13 -12
- package/src/surfaces/jump-bar.ts +5 -6
- package/src/surfaces/jxsuite-update.ts +16 -22
- package/src/surfaces/library-pane.ts +25 -20
- package/src/surfaces/logic-panel.ts +17 -30
- package/src/surfaces/logic-workspace.ts +13 -15
- package/src/surfaces/media-browser.ts +11 -10
- package/src/surfaces/media-field.ts +4 -5
- package/src/surfaces/media-pane.ts +8 -7
- package/src/surfaces/menu.ts +29 -23
- package/src/surfaces/navigator-dock.ts +11 -12
- package/src/surfaces/new-project.ts +27 -26
- package/src/surfaces/pane-context.ts +20 -25
- package/src/surfaces/pane-grid.ts +15 -10
- package/src/surfaces/panel-activity.ts +5 -6
- package/src/surfaces/panel-data.ts +3 -4
- package/src/surfaces/panel-deploy-checklist.ts +5 -6
- package/src/surfaces/panel-elements.ts +5 -7
- package/src/surfaces/panel-i18n.ts +5 -7
- package/src/surfaces/panel-imports.ts +6 -13
- package/src/surfaces/panel-outline.ts +25 -19
- package/src/surfaces/panel-page.ts +11 -18
- package/src/surfaces/panel-problems.ts +5 -7
- package/src/surfaces/panel-signals.ts +20 -34
- package/src/surfaces/panel-stylebook-layers.ts +5 -8
- package/src/surfaces/preferences.ts +21 -11
- package/src/surfaces/progress-modal.ts +15 -9
- package/src/surfaces/properties-panel.json +1 -1
- package/src/surfaces/properties-panel.ts +20 -42
- package/src/surfaces/publish.ts +18 -18
- package/src/surfaces/push-plan.ts +7 -8
- package/src/surfaces/rail.json +126 -73
- package/src/surfaces/rail.ts +38 -12
- package/src/surfaces/reference-field.ts +11 -15
- package/src/surfaces/schema-builder.ts +16 -22
- package/src/surfaces/schema-form.ts +15 -25
- package/src/surfaces/secret-field.ts +9 -6
- package/src/surfaces/seo.ts +21 -15
- package/src/surfaces/settings-contexts.ts +9 -7
- package/src/surfaces/settings-contributed.ts +14 -10
- package/src/surfaces/settings-css-vars.ts +5 -12
- package/src/surfaces/settings-defs.json +2 -2
- package/src/surfaces/settings-defs.ts +17 -21
- package/src/surfaces/settings-deploy.ts +8 -15
- package/src/surfaces/settings-extensions.ts +5 -6
- package/src/surfaces/settings-head.ts +33 -39
- package/src/surfaces/settings-locales.ts +8 -20
- package/src/surfaces/settings-overview.ts +5 -6
- package/src/surfaces/settings-packages.ts +8 -7
- package/src/surfaces/settings-pane.ts +9 -18
- package/src/surfaces/settings-rawjson.ts +5 -6
- package/src/surfaces/shell.ts +1 -2
- package/src/surfaces/slash-menu.ts +19 -9
- package/src/surfaces/statements.ts +13 -18
- package/src/surfaces/statusbar.ts +17 -14
- package/src/surfaces/style-panel.ts +18 -31
- package/src/surfaces/stylebook-chrome.ts +3 -5
- package/src/surfaces/tab-strip.ts +14 -13
- package/src/surfaces/target-line.ts +6 -7
- package/src/surfaces/welcome.ts +5 -7
- package/src/tabs/patch-ops.ts +4 -3
- package/src/tabs/project-config.ts +32 -21
- package/src/tabs/selection.ts +36 -8
- package/src/tabs/tab.ts +52 -41
- package/src/tabs/transact.ts +98 -53
- package/src/tabs/typing.ts +31 -0
- package/src/types.ts +32 -17
- package/src/ui/ai-credentials-form.ts +10 -13
- package/src/ui/ai-model-picker.ts +3 -3
- package/src/ui/cf-account-picker.ts +7 -9
- package/src/ui/color-selector.ts +9 -5
- package/src/ui/dynamic-slot.ts +7 -8
- package/src/ui/expression-editor.ts +112 -105
- package/src/ui/form-controls.ts +57 -48
- package/src/ui/formula-catalog.ts +239 -230
- package/src/ui/formula-chips.ts +33 -18
- package/src/ui/layers.ts +44 -31
- package/src/ui/media-picker.ts +18 -9
- package/src/ui/popover-surface.ts +20 -12
- package/src/ui/progress-modal.ts +13 -8
- package/src/ui/regions.ts +7 -6
- package/src/ui/schema-form.ts +113 -70
- package/src/ui/surface.ts +71 -8
- package/src/ui/timing.ts +9 -0
- package/src/ui/value-source.ts +44 -31
- package/src/ui/virtual-window.ts +3 -2
- package/src/utils/base64.ts +3 -1
- package/src/utils/edit-display.ts +103 -74
- package/src/utils/element-selectors.ts +3 -2
- package/src/utils/google-fonts.ts +15 -14
- package/src/utils/inherited-style.ts +18 -20
- package/src/utils/link-target.ts +1 -1
- package/src/utils/preview-format.ts +25 -3
- package/src/utils/strip-events.ts +49 -22
- package/src/utils/studio-utils.ts +29 -14
- package/src/view.ts +2 -3
- package/src/workspace/pane-derive.ts +10 -12
- package/src/workspace/session.ts +53 -43
- package/src/workspace/workspace.ts +47 -36
- package/dist/chunks/2020-nkxms0ay.js +0 -4
- package/dist/chunks/adapter-m948ab5f.js +0 -4
- package/dist/chunks/cf-account-picker-n8hr38v7.js +0 -4
- package/dist/chunks/cf-settings-356xdtne.js +0 -4
- package/dist/chunks/color-area-jqhna8zy.js +0 -4
- package/dist/chunks/color-field-embq5ctg.js +0 -4
- package/dist/chunks/color-fpezvnkt.js +0 -4
- package/dist/chunks/color-slider-1qmw7wqy.js +0 -4
- package/dist/chunks/combobox-773hdzyj.js +0 -4
- package/dist/chunks/components-yk3t844e.js +0 -4
- package/dist/chunks/content-source-bawmyc09.js +0 -4
- package/dist/chunks/convert-to-repeater-7wns8kf1.js +0 -4
- package/dist/chunks/dialog-mtm9fq5t.js +0 -4
- package/dist/chunks/editor-6sc8nacq.js +0 -4
- package/dist/chunks/entry-commands-8ay9fh81.js +0 -4
- package/dist/chunks/extension-sections-na7rj3nr.js +0 -4
- package/dist/chunks/file-ops-gye0qw56.js +0 -4
- package/dist/chunks/files-dmc2xvcq.js +0 -4
- package/dist/chunks/format-host-t76b53f8.js +0 -4
- package/dist/chunks/fs-events-cg4tpz06.js +0 -4
- package/dist/chunks/git-panel-yef7bshy.js +0 -4
- package/dist/chunks/grid-view-7tt4bxw1.js +0 -51
- package/dist/chunks/icons-qbh8akb1.js +0 -4
- package/dist/chunks/iframe-entry-f7mqjwpm.js +0 -5
- package/dist/chunks/iframe-entry-haw7jkvz.js +0 -5
- package/dist/chunks/iframe-entry-z6qrytv3.js +0 -5
- package/dist/chunks/iframe-host-tmz30gfp.js +0 -4
- package/dist/chunks/index-nag78a9h.js +0 -4
- package/dist/chunks/jsonMode-zhwsprqk.js +0 -13
- package/dist/chunks/jx-validate-3gbp5nkn.js +0 -4
- package/dist/chunks/layers-fvz99859.js +0 -4
- package/dist/chunks/layers-panel-gchmbf9p.js +0 -4
- package/dist/chunks/listbox-s8fkmnq8.js +0 -4
- package/dist/chunks/lit-html-9agdspkt.js +0 -4
- package/dist/chunks/media-picker-rhjvyy00.js +0 -4
- package/dist/chunks/menu-2e4y9j7b.js +0 -4
- package/dist/chunks/menu-37d07z9m.js +0 -4
- package/dist/chunks/monaco-binding-2jnhjjvr.js +0 -4
- package/dist/chunks/monaco-buffer-rp21359g.js +0 -4
- package/dist/chunks/monaco-setup-vhh7gayr.js +0 -4
- package/dist/chunks/notify-h3www560.js +0 -4
- package/dist/chunks/number-field-gw7sq8rn.js +0 -4
- package/dist/chunks/parse-897fvqah.js +0 -4
- package/dist/chunks/platform-hz34wcd7.js +0 -4
- package/dist/chunks/popover-8htra4er.js +0 -4
- package/dist/chunks/publish-panel-exsmjzyj.js +0 -4
- package/dist/chunks/quick-search-pgaqeh0m.js +0 -4
- package/dist/chunks/references-2cgdxnb8.js +0 -4
- package/dist/chunks/right-panel-jf856w5w.js +0 -4
- package/dist/chunks/section-registry-jnf8r5gy.js +0 -4
- package/dist/chunks/select-n3v7gwas.js +0 -4
- package/dist/chunks/split-pff8f3ze.js +0 -4
- package/dist/chunks/studio-0f55h9ye.js +0 -5
- package/dist/chunks/studio-0sqdhnew.js +0 -12
- package/dist/chunks/studio-19x1c75w.js +0 -5
- package/dist/chunks/studio-2sqcndak.js +0 -5
- package/dist/chunks/studio-3aey7dd3.js +0 -5
- package/dist/chunks/studio-3bpdkq2s.js +0 -5
- package/dist/chunks/studio-47y6fbpf.js +0 -5
- package/dist/chunks/studio-4m3826v2.js +0 -5
- package/dist/chunks/studio-4nx2dj1g.js +0 -4
- package/dist/chunks/studio-4xv5s47r.js +0 -9
- package/dist/chunks/studio-5g4t8v6w.js +0 -5
- package/dist/chunks/studio-5py436sf.js +0 -5
- package/dist/chunks/studio-77kt594t.js +0 -5
- package/dist/chunks/studio-8f87n763.js +0 -10
- package/dist/chunks/studio-8mb00b84.js +0 -5
- package/dist/chunks/studio-8p51gq2h.js +0 -6
- package/dist/chunks/studio-954ds834.js +0 -5
- package/dist/chunks/studio-9ft45c83.js +0 -9
- package/dist/chunks/studio-a2138x5k.js +0 -7
- package/dist/chunks/studio-a9yzstqj.js +0 -5
- package/dist/chunks/studio-acdksxx6.js +0 -5
- package/dist/chunks/studio-ar8jcf2y.js +0 -5
- package/dist/chunks/studio-bmn4mn9j.js +0 -7
- package/dist/chunks/studio-e7xxa0sj.js +0 -5
- package/dist/chunks/studio-ecaz25vk.js +0 -5
- package/dist/chunks/studio-ery42sqr.js +0 -4
- package/dist/chunks/studio-fzdywr6p.js +0 -9
- package/dist/chunks/studio-g5fmf0c1.js +0 -5
- package/dist/chunks/studio-g7nse7zb.js +0 -5
- package/dist/chunks/studio-geq1ea6k.js +0 -14
- package/dist/chunks/studio-ghkb32r8.js +0 -5
- package/dist/chunks/studio-ghrhy2y7.js +0 -5
- package/dist/chunks/studio-grawhey1.js +0 -5
- package/dist/chunks/studio-h0xgswew.js +0 -5
- package/dist/chunks/studio-h9c4p2tx.js +0 -5
- package/dist/chunks/studio-jyzj5cxs.js +0 -5
- package/dist/chunks/studio-mgx8yhnz.js +0 -64
- package/dist/chunks/studio-mpb04y1d.js +0 -6
- package/dist/chunks/studio-n17mty64.js +0 -5
- package/dist/chunks/studio-nwh2eqsk.js +0 -6
- package/dist/chunks/studio-q1h883bt.js +0 -16
- package/dist/chunks/studio-q4tv82h7.js +0 -9
- package/dist/chunks/studio-qpqa7vk3.js +0 -5
- package/dist/chunks/studio-qqz8e5gk.js +0 -5
- package/dist/chunks/studio-qvasen3f.js +0 -5
- package/dist/chunks/studio-rggdb3hm.js +0 -5
- package/dist/chunks/studio-sghy936h.js +0 -4
- package/dist/chunks/studio-skprc6ef.js +0 -5
- package/dist/chunks/studio-tt2nactf.js +0 -5
- package/dist/chunks/studio-tyasmc39.js +0 -5
- package/dist/chunks/studio-vk9ezads.js +0 -5
- package/dist/chunks/studio-vzacdfsc.js +0 -4
- package/dist/chunks/studio-w4c0xmrw.js +0 -5
- package/dist/chunks/studio-wfjqhhbk.js +0 -5
- package/dist/chunks/studio-wgh5kxpj.js +0 -5
- package/dist/chunks/studio-xasj0796.js +0 -5
- package/dist/chunks/studio-y78s8r2n.js +0 -5
- package/dist/chunks/studio-z8w183sh.js +0 -5
- package/dist/chunks/studio-zscd9ty4.js +0 -928
- package/dist/chunks/studio-zxp13sss.js +0 -7
- package/dist/chunks/studio-zygnmm01.js +0 -5
- package/dist/chunks/swatch-group-8qh9a3bm.js +0 -4
- package/dist/chunks/tabs-jwthg40w.js +0 -4
- package/dist/chunks/textfield-spy3hc77.js +0 -4
- package/dist/chunks/toast-4d35zd64.js +0 -4
- package/dist/chunks/toast-host-8sjmfed3.js +0 -4
- package/dist/chunks/tooltip-fd6g9xy3.js +0 -4
- package/dist/chunks/tree-h19v1jfz.js +0 -4
- package/dist/chunks/tsMode-gr0m4dzr.js +0 -14
- package/dist/chunks/workspace-m15qtcqp.js +0 -4
- package/dist/chunks/ws-client-nf61frr1.js +0 -4
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which tabs hold typing in a source buffer that no save has kept yet.
|
|
3
|
+
*
|
|
4
|
+
* A Monaco buffer reaches its document on a debounce, and a buffer whose text does not parse never
|
|
5
|
+
* reaches it at all. `tab.doc.dirty` deliberately says nothing about either: it is the DOCUMENT's
|
|
6
|
+
* flag, and the close and quit gates ask the buffers themselves (`tabBufferUnsaved`). Save's
|
|
7
|
+
* enablement needs the union, and needs it REACTIVELY, so the Command Bar's Save lights up on the
|
|
8
|
+
* first keystroke rather than when the commit lands. The buffers' own flag is a closure variable no
|
|
9
|
+
* effect can track, so the keystroke handlers note the tab here as well.
|
|
10
|
+
*
|
|
11
|
+
* Kept out of `services/monaco-buffer.ts` because `commands/live-context.ts` reads it, and
|
|
12
|
+
* everything that module reaches has to load in a bare Bun process with no DOM.
|
|
13
|
+
*/
|
|
14
|
+
import { reactive } from "../reactivity";
|
|
15
|
+
|
|
16
|
+
const typing = reactive(new Set<string>());
|
|
17
|
+
|
|
18
|
+
/** A keystroke in one of `tabId`'s source buffers. */
|
|
19
|
+
export function noteTyping(tabId: string): void {
|
|
20
|
+
typing.add(tabId);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** A save kept everything the buffers held, or the tab is gone. */
|
|
24
|
+
export function clearTyping(tabId: string): void {
|
|
25
|
+
typing.delete(tabId);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Whether `tabId` holds typing no save has kept. Tracked by effects. */
|
|
29
|
+
export function hasTyping(tabId: string): boolean {
|
|
30
|
+
return typing.has(tabId);
|
|
31
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import type { CollabHandle } from "@jxsuite/collab/provider";
|
|
3
3
|
import type {
|
|
4
4
|
ContentTypeSchema,
|
|
5
|
+
JsonObject,
|
|
5
6
|
JxMutableNode,
|
|
6
7
|
JxPath,
|
|
7
8
|
ProjectConfig,
|
|
@@ -39,6 +40,7 @@ import type {
|
|
|
39
40
|
ImportReadyEvent,
|
|
40
41
|
ImportSiteOptions,
|
|
41
42
|
ImportSiteSummary,
|
|
43
|
+
JsonValue,
|
|
42
44
|
PackageInfo,
|
|
43
45
|
PackageOpResult,
|
|
44
46
|
PackageVersionInfo,
|
|
@@ -47,9 +49,8 @@ import type {
|
|
|
47
49
|
RecentProjectEntry,
|
|
48
50
|
ReferencesResult,
|
|
49
51
|
RenameResult,
|
|
50
|
-
|
|
52
|
+
KeyValuePatch,
|
|
51
53
|
SecretsSetResponse,
|
|
52
|
-
SettingsPatch,
|
|
53
54
|
StarterInfo,
|
|
54
55
|
UploadResult,
|
|
55
56
|
} from "@jxsuite/protocol";
|
|
@@ -80,7 +81,6 @@ export type {
|
|
|
80
81
|
DataRowsResult,
|
|
81
82
|
DataRowUpdate,
|
|
82
83
|
DirEntry,
|
|
83
|
-
ErrorBody,
|
|
84
84
|
ExtensionCatalogEntry,
|
|
85
85
|
ExtensionContributionInfo,
|
|
86
86
|
ExtensionProjectBlock,
|
|
@@ -109,9 +109,8 @@ export type {
|
|
|
109
109
|
ReferencesResult,
|
|
110
110
|
RenameResult,
|
|
111
111
|
SecretsListResponse,
|
|
112
|
-
|
|
112
|
+
KeyValuePatch,
|
|
113
113
|
SecretsSetResponse,
|
|
114
|
-
SettingsPatch,
|
|
115
114
|
StarterInfo,
|
|
116
115
|
} from "@jxsuite/protocol";
|
|
117
116
|
|
|
@@ -291,6 +290,21 @@ export interface SitePreviewResult extends SiteBuildResult {
|
|
|
291
290
|
*/
|
|
292
291
|
export type FsResyncReason = "reconnect" | "commit" | "open";
|
|
293
292
|
|
|
293
|
+
/**
|
|
294
|
+
* One request to a format class's capability (`POST /__studio/format`, or the desktop RPC of the
|
|
295
|
+
* same name): `parse` reads `source` into a Jx document, `serialize` writes `doc` back out as text,
|
|
296
|
+
* and the answer is that document or that text. The backend refuses an action the format does not
|
|
297
|
+
* declare, so `action` stays an open name.
|
|
298
|
+
*/
|
|
299
|
+
export interface FormatActionRequest {
|
|
300
|
+
action: string;
|
|
301
|
+
format: string;
|
|
302
|
+
source?: string | undefined;
|
|
303
|
+
/** The document to serialize, merged with its frontmatter. */
|
|
304
|
+
doc?: JxMutableNode | undefined;
|
|
305
|
+
options?: { mode?: string | undefined; frontmatter?: boolean | undefined } | undefined;
|
|
306
|
+
}
|
|
307
|
+
|
|
294
308
|
export interface StudioPlatform {
|
|
295
309
|
id: string;
|
|
296
310
|
projectRoot: string;
|
|
@@ -464,8 +478,10 @@ export interface StudioPlatform {
|
|
|
464
478
|
options?: { onResync?: (reason: FsResyncReason) => void },
|
|
465
479
|
) => () => void;
|
|
466
480
|
discoverComponents: (dir?: string) => Promise<ComponentMeta[]>;
|
|
467
|
-
|
|
468
|
-
|
|
481
|
+
/* Resolves once the dependency is added (or removed) and rejects when it could not be. No caller
|
|
482
|
+
reads an answer, and the desktop RPC carries none. */
|
|
483
|
+
addPackage: (name: string) => Promise<void>;
|
|
484
|
+
removePackage: (name: string) => Promise<void>;
|
|
469
485
|
listPackages: () => Promise<PackageInfo[]>;
|
|
470
486
|
/**
|
|
471
487
|
* Run `bun install` in the project root. Optional: platforms without a Bun-capable backend omit
|
|
@@ -493,7 +509,7 @@ export interface StudioPlatform {
|
|
|
493
509
|
* section.
|
|
494
510
|
*/
|
|
495
511
|
getAppInfo?: () => Promise<AppInfo>;
|
|
496
|
-
codeService: (action: string, payload:
|
|
512
|
+
codeService: (action: string, payload: JsonValue) => Promise<CodeServiceResult | null>;
|
|
497
513
|
resolveSiteContext: (filePath: string) => Promise<{
|
|
498
514
|
sitePath: string | null;
|
|
499
515
|
projectConfig?: ProjectConfig;
|
|
@@ -535,7 +551,7 @@ export interface StudioPlatform {
|
|
|
535
551
|
*/
|
|
536
552
|
fetchProjectSchemas?: () => Promise<ProjectSchemasResponse>;
|
|
537
553
|
/** Invoke a format capability (parse/serialize) — { format, action, source?, doc?, options? }. */
|
|
538
|
-
formatAction?: (payload:
|
|
554
|
+
formatAction?: (payload: FormatActionRequest) => Promise<JxMutableNode | string>;
|
|
539
555
|
// ─── Data surface + secrets (owner console; specs/extensions.md §13) ────────
|
|
540
556
|
// Optional as a family: backends without the connector data routes omit them all, and Studio
|
|
541
557
|
// Hides the data grid and connection/push/test actions. Row CRUD is the ADMIN path — it
|
|
@@ -548,21 +564,21 @@ export interface StudioPlatform {
|
|
|
548
564
|
dataPush?: (opts?: { connection?: string; dryRun?: boolean }) => Promise<DataPushResult>;
|
|
549
565
|
/** Page a table's rows with introspected column metadata. */
|
|
550
566
|
dataRows?: (query: DataRowsQuery) => Promise<DataRowsResult>;
|
|
551
|
-
dataInsertRow?: (req: DataRowInsert) => Promise<{ row:
|
|
552
|
-
dataUpdateRow?: (req: DataRowUpdate) => Promise<{ row:
|
|
567
|
+
dataInsertRow?: (req: DataRowInsert) => Promise<{ row: JsonObject }>;
|
|
568
|
+
dataUpdateRow?: (req: DataRowUpdate) => Promise<{ row: JsonObject }>;
|
|
553
569
|
dataDeleteRow?: (req: DataRowDelete) => Promise<{ ok: boolean }>;
|
|
554
570
|
/** Configured secret env-var NAMES — never values. */
|
|
555
571
|
listSecrets?: () => Promise<string[]>;
|
|
556
572
|
/** Write/remove secrets in the backend store (.dev.vars locally); names-only response. */
|
|
557
|
-
setSecrets?: (req:
|
|
558
|
-
fetchPluginSchema: (src: string, prototype?: string, base?: string) => Promise<
|
|
573
|
+
setSecrets?: (req: KeyValuePatch) => Promise<SecretsSetResponse>;
|
|
574
|
+
fetchPluginSchema: (src: string, prototype?: string, base?: string) => Promise<JsonValue>;
|
|
559
575
|
/**
|
|
560
576
|
* Resolve a class-prototype config through the backend's `/__jx_resolve__` pipeline (with the
|
|
561
577
|
* project's content types loaded) and return the parsed result. Used by the tab-bar's dynamic
|
|
562
578
|
* route-param picker to enumerate ContentCollection entries. Optional: platforms without a
|
|
563
579
|
* resolve backend omit it and the picker falls back to a plain fetch.
|
|
564
580
|
*/
|
|
565
|
-
resolveClass?: (body:
|
|
581
|
+
resolveClass?: (body: JsonObject) => Promise<JsonValue>;
|
|
566
582
|
gitStatus: () => Promise<GitStatusResult>;
|
|
567
583
|
gitBranches: () => Promise<GitBranchesResult>;
|
|
568
584
|
gitLog: (limit?: number) => Promise<GitLogEntry[]>;
|
|
@@ -816,7 +832,7 @@ export interface StudioPlatform {
|
|
|
816
832
|
* injects credentials — an OAuth token on the cloud platform, the user's pasted API token locally
|
|
817
833
|
* — so no secret ever rides in the request body.
|
|
818
834
|
*/
|
|
819
|
-
cfApi?: (path: string, init?: { method?: string; body?: unknown }) => Promise<
|
|
835
|
+
cfApi?: (path: string, init?: { method?: string; body?: unknown }) => Promise<JsonValue>;
|
|
820
836
|
// ─── User settings (backend-persisted; undefined on dev-server) ─────────────
|
|
821
837
|
/**
|
|
822
838
|
* Read the user-level settings map (e.g. the AI connection parameters) from a backend store
|
|
@@ -834,7 +850,7 @@ export interface StudioPlatform {
|
|
|
834
850
|
* held no settings could, and did, clear the credentials another window had just stored. It also
|
|
835
851
|
* preserves keys this build does not know: one written by a newer version, or by hand.
|
|
836
852
|
*/
|
|
837
|
-
patchSettings?: (patch:
|
|
853
|
+
patchSettings?: (patch: KeyValuePatch) => Promise<Record<string, string>>;
|
|
838
854
|
/**
|
|
839
855
|
* Be told when the backend store changes — by another window, or by hand. Returns the
|
|
840
856
|
* unsubscribe.
|
|
@@ -937,5 +953,4 @@ export interface ProjectState {
|
|
|
937
953
|
selectedPath: string | null;
|
|
938
954
|
searchQuery: string;
|
|
939
955
|
projectDirs?: string[];
|
|
940
|
-
[key: string]: unknown;
|
|
941
956
|
}
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Ai-credentials-form.ts — reusable AI provider credentials form (key / model / endpoint).
|
|
4
4
|
*
|
|
5
|
-
* Embedded by every host that needs a provider configured — **Preferences › Assistant** (⌘,) and
|
|
6
|
-
* New Project modal's Import/Agent gates. All draft/model-list state lives inside the closure,
|
|
7
|
-
* multiple instances never share state. Persists via src/services/ai-settings.ts on Save.
|
|
5
|
+
* Embedded by every host that needs a provider configured — **Preferences › Assistant** (⌘,) and
|
|
6
|
+
* the New Project modal's Import/Agent gates. All draft/model-list state lives inside the closure,
|
|
7
|
+
* so multiple instances never share state. Persists via src/services/ai-settings.ts on Save.
|
|
8
8
|
*
|
|
9
9
|
* The interim `Assistant: Settings…` dialog that used to host it is deleted: a provider key is an
|
|
10
10
|
* application setting, and the surface that owns application settings is also the one that can list
|
|
11
|
-
* it and revoke it (§15). Nothing about this form changed for the move, which is the argument
|
|
12
|
-
*
|
|
11
|
+
* it and revoke it (§15). Nothing about this form changed for the move, which is the argument for
|
|
12
|
+
* it having been a reusable form rather than a section of a dialog.
|
|
13
13
|
*
|
|
14
14
|
* This module is the FLOW; `surfaces/ai-credentials-form.json` is what it draws. It keeps the three
|
|
15
15
|
* drafts, decides which credentials a listing is sent with, what Save persists and re-reads, and
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
* `surfaces/ai-credentials-form.ts` for why that element is the mount point and why re-rendering
|
|
20
20
|
* the gate cannot disturb it.
|
|
21
21
|
*
|
|
22
|
-
* @docs studio/ai
|
|
23
22
|
* @license MIT
|
|
23
|
+
* @docs studio/ai
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
26
|
import { fetchAvailableModels, proxyModelsErrorMessage } from "../services/ai-models";
|
|
@@ -35,11 +35,8 @@ import {
|
|
|
35
35
|
import { SETTINGS } from "../services/settings/definitions";
|
|
36
36
|
import type { AiProvider } from "../services/ai-settings";
|
|
37
37
|
import { createAiCredentialsSurface } from "../surfaces/ai-credentials-form";
|
|
38
|
-
import type {
|
|
39
|
-
|
|
40
|
-
AiCredentialsView,
|
|
41
|
-
CredentialsModelRow,
|
|
42
|
-
} from "../surfaces/ai-credentials-form";
|
|
38
|
+
import type { AiCredentialsSurface, AiCredentialsView } from "../surfaces/ai-credentials-form";
|
|
39
|
+
import type { SurfaceOption } from "./surface";
|
|
43
40
|
|
|
44
41
|
/** The blurb a host that says nothing gets. */
|
|
45
42
|
const DEFAULT_INTRO =
|
|
@@ -231,7 +228,7 @@ export function createAiCredentialsForm(opts: AiCredentialsFormOptions): AiCrede
|
|
|
231
228
|
modelsError = `${upstreamMessage} — type the model ID directly instead.`;
|
|
232
229
|
}
|
|
233
230
|
} catch (error: unknown) {
|
|
234
|
-
modelsError = (error
|
|
231
|
+
modelsError = (error instanceof Error && error.message) || "Failed to fetch models";
|
|
235
232
|
} finally {
|
|
236
233
|
modelsLoading = false;
|
|
237
234
|
opts.requestRender();
|
|
@@ -242,7 +239,7 @@ export function createAiCredentialsForm(opts: AiCredentialsFormOptions): AiCrede
|
|
|
242
239
|
* The catalogue as rows — the list the combobox will draw, never a corpus it matches against. A
|
|
243
240
|
* model with no name of its own is called by its id.
|
|
244
241
|
*/
|
|
245
|
-
function rows():
|
|
242
|
+
function rows(): SurfaceOption[] {
|
|
246
243
|
return availableModels.map((model) => ({ label: model.name, value: model.id }));
|
|
247
244
|
}
|
|
248
245
|
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
* A closure factory (precedent: `createComposer`, `createAiCredentialsForm`) so two hosts never
|
|
23
23
|
* share a loading flag or a failed-fetch record.
|
|
24
24
|
*
|
|
25
|
-
* @docs studio/ai
|
|
26
25
|
* @license MIT
|
|
26
|
+
* @docs studio/ai
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
29
|
import {
|
|
@@ -146,8 +146,8 @@ export function createModelPicker(opts: ModelPickerOptions): ModelPicker {
|
|
|
146
146
|
failure = "";
|
|
147
147
|
attempted = credentials;
|
|
148
148
|
fetchAvailableModels({ credentials, force })
|
|
149
|
-
.catch((error
|
|
150
|
-
failure = (error
|
|
149
|
+
.catch((error) => {
|
|
150
|
+
failure = (error instanceof Error && error.message) || "Failed to fetch models";
|
|
151
151
|
})
|
|
152
152
|
.finally(() => {
|
|
153
153
|
loading = false;
|
|
@@ -19,12 +19,15 @@
|
|
|
19
19
|
* The dialog itself is `src/surfaces/cf-account-picker.json`, a `jx-dialog`; this module is the
|
|
20
20
|
* flow around it. It used to be a lit template rendered through `showDialog`, with its own
|
|
21
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
|
|
22
|
+
* surface is reactive now, so a listing that arrives late, or a refusal, changes only what it
|
|
23
|
+
* names.
|
|
23
24
|
*
|
|
24
|
-
* @docs studio/ai
|
|
25
25
|
* @license MIT
|
|
26
|
+
* @docs studio/ai
|
|
26
27
|
*/
|
|
27
28
|
|
|
29
|
+
import { errorMessage } from "@jxsuite/schema/parse";
|
|
30
|
+
|
|
28
31
|
import { getPlatform, hasPlatform } from "../platform";
|
|
29
32
|
import { notifyCredentialsChanged } from "../settings/preferences-accounts";
|
|
30
33
|
import { openCfAccountPickerSurface } from "../surfaces/cf-account-picker";
|
|
@@ -40,11 +43,6 @@ function canPick(): boolean {
|
|
|
40
43
|
return Boolean(platform.cfAccounts && platform.cfSelectAccount);
|
|
41
44
|
}
|
|
42
45
|
|
|
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
|
-
|
|
48
46
|
/**
|
|
49
47
|
* Ask which Cloudflare account this connection should use, and store the answer.
|
|
50
48
|
*
|
|
@@ -83,7 +81,7 @@ export function openCfAccountPicker(): Promise<CfAccountSummary | null> {
|
|
|
83
81
|
accounts = (await getPlatform().cfAccounts?.()) ?? [];
|
|
84
82
|
} catch (error) {
|
|
85
83
|
accounts = [];
|
|
86
|
-
failure =
|
|
84
|
+
failure = errorMessage(error);
|
|
87
85
|
}
|
|
88
86
|
/* `done` released the slot, so a late listing landing after a dismissal would otherwise be a
|
|
89
87
|
write into a disposed surface. The lit version guarded the same moment by resolving its
|
|
@@ -108,7 +106,7 @@ export function openCfAccountPicker(): Promise<CfAccountSummary | null> {
|
|
|
108
106
|
if (!settled) {
|
|
109
107
|
/* The list survives a refusal, and the reason sits above it: listing again is not what
|
|
110
108
|
would fix an account the broker will not accept, so this state offers no retry. */
|
|
111
|
-
handle.update({ choosing: "", failure:
|
|
109
|
+
handle.update({ choosing: "", failure: errorMessage(error) });
|
|
112
110
|
}
|
|
113
111
|
return;
|
|
114
112
|
}
|
package/src/ui/color-selector.ts
CHANGED
|
@@ -25,18 +25,22 @@
|
|
|
25
25
|
* @docs studio/design/style-inspector
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
+
import { isNumber, isString } from "@jxsuite/schema/guards";
|
|
29
|
+
|
|
28
30
|
import { activeTab } from "../workspace/workspace";
|
|
29
31
|
import { getEffectiveStyle } from "../site-context";
|
|
30
32
|
import { resolveTokenValue, tokenRefName } from "../style/token-ref";
|
|
31
33
|
import { kebabToLabel } from "../utils/studio-utils";
|
|
32
34
|
|
|
33
35
|
/**
|
|
34
|
-
* One colour the project has named, as a swatch reads it
|
|
36
|
+
* One colour the project has named, as a swatch reads it — the palette a Style or Content `color`
|
|
37
|
+
* row offers inside its picker.
|
|
35
38
|
*
|
|
36
|
-
* `
|
|
37
|
-
*
|
|
39
|
+
* `value` and `color` are two fields because they are two things: choosing a swatch commits
|
|
40
|
+
* `var(--color-accent)`, while the chip is only how that reads on screen. A swatch is a `$map`
|
|
41
|
+
* item, read through `$map/item/...` by member name, so every member is a value a scope can hold.
|
|
38
42
|
*/
|
|
39
|
-
export interface ColorTokenView
|
|
43
|
+
export interface ColorTokenView {
|
|
40
44
|
/** What choosing this swatch commits — the reference, never the literal behind it. */
|
|
41
45
|
value: string;
|
|
42
46
|
/** The chip's colour: how the token looks, which is not what it means. */
|
|
@@ -76,7 +80,7 @@ export function colorTokens(): ColorTokenView[] {
|
|
|
76
80
|
const style = getEffectiveStyle(activeTab.value?.doc.document?.style);
|
|
77
81
|
const tokens: ColorTokenView[] = [];
|
|
78
82
|
for (const [name, value] of Object.entries(style)) {
|
|
79
|
-
if (name.startsWith("--color") && (
|
|
83
|
+
if (name.startsWith("--color") && (isString(value) || isNumber(value))) {
|
|
80
84
|
tokens.push({ color: String(value), label: varToLabel(name), value: `var(${name})` });
|
|
81
85
|
}
|
|
82
86
|
}
|
package/src/ui/dynamic-slot.ts
CHANGED
|
@@ -23,8 +23,10 @@ import { cloneValue } from "../tabs/doc-op-apply";
|
|
|
23
23
|
import { activeTab } from "../workspace/workspace";
|
|
24
24
|
import { slotMode } from "./value-source";
|
|
25
25
|
|
|
26
|
+
import type { JxDocumentValue } from "@jxsuite/schema/types";
|
|
26
27
|
import type { JsonValue } from "../types";
|
|
27
28
|
import type { SlotMode } from "./value-source";
|
|
29
|
+
import type { SurfaceOption } from "./surface";
|
|
28
30
|
|
|
29
31
|
export type { SlotCapsSource, SlotMode, SlotPosition } from "./value-source";
|
|
30
32
|
export { slotCaps, slotMode } from "./value-source";
|
|
@@ -96,7 +98,10 @@ function isTextEditRung(mode: SlotMode): boolean {
|
|
|
96
98
|
* The rung to render this field at: the one it is already being edited at when a text edit could
|
|
97
99
|
* explain the difference, otherwise whatever the document value says. Records its answer.
|
|
98
100
|
*/
|
|
99
|
-
export function effectiveSlotMode(
|
|
101
|
+
export function effectiveSlotMode(
|
|
102
|
+
fieldKey: string,
|
|
103
|
+
value: JxDocumentValue | JsonValue | undefined,
|
|
104
|
+
): SlotMode {
|
|
100
105
|
const key = fieldScopeKey(fieldKey);
|
|
101
106
|
const sniffed = slotMode(value);
|
|
102
107
|
const previous = slotModeRendered.get(key);
|
|
@@ -108,18 +113,12 @@ export function effectiveSlotMode(fieldKey: string, value: unknown): SlotMode {
|
|
|
108
113
|
return mode;
|
|
109
114
|
}
|
|
110
115
|
|
|
111
|
-
/** One pointer the From data… rung may offer, as a picker option. */
|
|
112
|
-
export interface SignalOption {
|
|
113
|
-
value: string;
|
|
114
|
-
label: string;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
116
|
/** Where a rung's seed value comes from — the subset of a slot's options that decides one. */
|
|
118
117
|
export interface SlotSeedSources {
|
|
119
118
|
/** State keys the position may point at; the first is what a fresh binding lands on. */
|
|
120
119
|
stateDefs: readonly string[];
|
|
121
120
|
/** Extra pointers beyond `#/state/*` — route params, `$map/item`. */
|
|
122
|
-
extraSignals?: readonly
|
|
121
|
+
extraSignals?: readonly SurfaceOption[] | null;
|
|
123
122
|
/** What Fixed value restores to. */
|
|
124
123
|
literalDefault?: JsonValue | undefined;
|
|
125
124
|
}
|