@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
|
@@ -29,15 +29,16 @@
|
|
|
29
29
|
* @docs studio/editing/writing
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
32
33
|
import { reactive } from "../reactivity";
|
|
33
34
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
34
35
|
import blockActionBarDoc from "./block-action-bar.json";
|
|
35
36
|
|
|
36
37
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
37
|
-
import type {
|
|
38
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
38
39
|
import { rectOf } from "../utils/geometry";
|
|
39
40
|
|
|
40
|
-
registerSurface("block-action-bar", blockActionBarDoc
|
|
41
|
+
registerSurface("block-action-bar", blockActionBarDoc);
|
|
41
42
|
|
|
42
43
|
/** One button, already decided: what it is called, what it draws, and why it cannot act. */
|
|
43
44
|
export interface BlockBarTool {
|
|
@@ -116,7 +117,7 @@ export interface BlockBarActions {
|
|
|
116
117
|
}
|
|
117
118
|
|
|
118
119
|
/** The scope `block-action-bar.json` reads. */
|
|
119
|
-
interface BlockBarScope extends BlockBarView
|
|
120
|
+
interface BlockBarScope extends BlockBarView {
|
|
120
121
|
linkValue: string;
|
|
121
122
|
linkExisting: boolean;
|
|
122
123
|
linkApplyLabel: string;
|
|
@@ -167,8 +168,8 @@ export function emptyBlockBarView(): BlockBarView {
|
|
|
167
168
|
|
|
168
169
|
/** A node definition's `part`, as written in the document. */
|
|
169
170
|
function partOf(def: JxElement | string): string {
|
|
170
|
-
const part =
|
|
171
|
-
return
|
|
171
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
172
|
+
return isString(part) ? part : "";
|
|
172
173
|
}
|
|
173
174
|
|
|
174
175
|
/**
|
|
@@ -180,9 +181,10 @@ function partOf(def: JxElement | string): string {
|
|
|
180
181
|
* same shape `surfaces/schema-form.ts` and `surfaces/properties-panel.ts` use.
|
|
181
182
|
*/
|
|
182
183
|
function commandIdOf(state: JxScope | undefined): string {
|
|
183
|
-
const
|
|
184
|
-
const
|
|
185
|
-
|
|
184
|
+
const map = state?.["$map"];
|
|
185
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
186
|
+
const id = isJsonObject(item) ? item["id"] : undefined;
|
|
187
|
+
return isString(id) ? id : "";
|
|
186
188
|
}
|
|
187
189
|
|
|
188
190
|
/** The bar's mounted surface, and every handle the flow is allowed to reach back through. */
|
|
@@ -250,22 +252,29 @@ export function mountBlockActionBar(host: HTMLElement, actions: BlockBarActions)
|
|
|
250
252
|
linkApplyLabel: "Apply",
|
|
251
253
|
linkExisting: false,
|
|
252
254
|
linkInput: (_scope: JxScope, event: Event) => {
|
|
253
|
-
const
|
|
254
|
-
|
|
255
|
+
const { target } = event;
|
|
256
|
+
const value = target !== null && "value" in target ? target.value : undefined;
|
|
257
|
+
scope.linkValue = isString(value) ? value : "";
|
|
255
258
|
},
|
|
256
259
|
linkValue: "",
|
|
257
260
|
linkX: 0,
|
|
258
261
|
linkY: 0,
|
|
259
262
|
openMergeTags: (_scope: JxScope, event: Event) => {
|
|
260
263
|
event.stopPropagation();
|
|
264
|
+
// SAFETY: Only the merge-tags `jx-action-button`'s `onclick` binds this handler, and during
|
|
265
|
+
// Dispatch `currentTarget` is the element the listener sits on.
|
|
261
266
|
actions.openMergeTags(event.currentTarget as HTMLElement);
|
|
262
267
|
},
|
|
263
268
|
openOverflow: (_scope: JxScope, event: Event) => {
|
|
264
269
|
event.stopPropagation();
|
|
270
|
+
// SAFETY: Only the overflow `jx-action-button`'s `onclick` binds this handler, and during
|
|
271
|
+
// Dispatch `currentTarget` is the element the listener sits on.
|
|
265
272
|
actions.openOverflow(event.currentTarget as HTMLElement);
|
|
266
273
|
},
|
|
267
274
|
openTagMenu: (_scope: JxScope, event: Event) => {
|
|
268
275
|
event.stopPropagation();
|
|
276
|
+
// SAFETY: Only the tag `jx-action-button`'s `onclick` binds this handler, and during
|
|
277
|
+
// Dispatch `currentTarget` is the element the listener sits on.
|
|
269
278
|
actions.openTagMenu(event.currentTarget as HTMLElement);
|
|
270
279
|
},
|
|
271
280
|
removeLink: () => {
|
|
@@ -274,7 +283,7 @@ export function mountBlockActionBar(host: HTMLElement, actions: BlockBarActions)
|
|
|
274
283
|
},
|
|
275
284
|
run: (id: string) => actions.run(id),
|
|
276
285
|
selectParent: () => actions.selectParent(),
|
|
277
|
-
})
|
|
286
|
+
});
|
|
278
287
|
|
|
279
288
|
/* One mount for the life of the window, and no teardown to write. The bar is chrome the app
|
|
280
289
|
never takes down: `dismissBlockActionBar` hides it through `visible`, and its layer slot is
|
|
@@ -295,6 +304,8 @@ export function mountBlockActionBar(host: HTMLElement, actions: BlockBarActions)
|
|
|
295
304
|
return;
|
|
296
305
|
}
|
|
297
306
|
if (part === "link") {
|
|
307
|
+
// SAFETY: `part: "link"` is the document's `jx-popover`, whose class carries `open` and the
|
|
308
|
+
// `showPopover({ source })` overload that PopoverElement names.
|
|
298
309
|
linkEl = element as PopoverElement;
|
|
299
310
|
return;
|
|
300
311
|
}
|
|
@@ -28,9 +28,8 @@ import { APP_NAME, GIT_COMMIT, VERSION } from "../version";
|
|
|
28
28
|
import bootFailureDoc from "./boot-failure.json";
|
|
29
29
|
import type { BootRefusal } from "../platforms/default-platform";
|
|
30
30
|
import type { SurfaceHandle } from "../ui/surface";
|
|
31
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
32
31
|
|
|
33
|
-
registerSurface("boot-failure", bootFailureDoc
|
|
32
|
+
registerSurface("boot-failure", bootFailureDoc);
|
|
34
33
|
|
|
35
34
|
/** The page the failure happened on — `location`, or a stand-in with the one field read. */
|
|
36
35
|
export interface BootFailurePage {
|
|
@@ -49,7 +48,7 @@ export interface BootFailureView {
|
|
|
49
48
|
}
|
|
50
49
|
|
|
51
50
|
/** The scope `boot-failure.json` reads. */
|
|
52
|
-
interface BootFailureScope extends
|
|
51
|
+
interface BootFailureScope extends BootFailureView {
|
|
53
52
|
/** The last Copy landed on the clipboard; the button says so. */
|
|
54
53
|
copied: boolean;
|
|
55
54
|
reload: () => void;
|
|
@@ -135,7 +134,7 @@ export function mountBootFailureSurface(
|
|
|
135
134
|
page: BootFailurePage = location,
|
|
136
135
|
): Promise<SurfaceHandle> {
|
|
137
136
|
const view = bootFailureView(refusal, page);
|
|
138
|
-
const scope = reactive<BootFailureScope>({
|
|
137
|
+
const scope: BootFailureScope = reactive<BootFailureScope>({
|
|
139
138
|
...view,
|
|
140
139
|
copied: false,
|
|
141
140
|
async copy() {
|
|
@@ -151,6 +150,6 @@ export function mountBootFailureSurface(
|
|
|
151
150
|
reload() {
|
|
152
151
|
location.reload();
|
|
153
152
|
},
|
|
154
|
-
})
|
|
153
|
+
});
|
|
155
154
|
return mountSurface("boot-failure", scope, host);
|
|
156
155
|
}
|
|
@@ -15,23 +15,14 @@
|
|
|
15
15
|
* @docs studio/interface
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
18
19
|
import { reactive } from "../reactivity";
|
|
19
20
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
20
21
|
import bottomDockDoc from "./bottom-dock.json";
|
|
21
|
-
import type {
|
|
22
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
22
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
23
|
+
import type { SurfaceHandle, SurfaceTab } from "../ui/surface";
|
|
23
24
|
|
|
24
|
-
registerSurface("bottom-dock", bottomDockDoc
|
|
25
|
-
|
|
26
|
-
/** One tab of the strip, as the document draws it. */
|
|
27
|
-
export interface BottomTabView {
|
|
28
|
-
/** The panel id — the row's identity, the strip's `selected` value, and `data-tab`. */
|
|
29
|
-
key: string;
|
|
30
|
-
/** The record's title with its badge already appended ("Problems 2"). */
|
|
31
|
-
label: string;
|
|
32
|
-
/** The tab element's own id, which the one panel names as its `aria-labelledby`. */
|
|
33
|
-
tabId: string;
|
|
34
|
-
}
|
|
25
|
+
registerSurface("bottom-dock", bottomDockDoc);
|
|
35
26
|
|
|
36
27
|
/** What the dock says right now. */
|
|
37
28
|
export interface BottomDockValues {
|
|
@@ -41,7 +32,7 @@ export interface BottomDockValues {
|
|
|
41
32
|
tabId: string;
|
|
42
33
|
/** `dock.bottom/panel:<id>`, or empty when no tab is showing and the body has no identity. */
|
|
43
34
|
bodyRegion: string;
|
|
44
|
-
tabs:
|
|
35
|
+
tabs: SurfaceTab[];
|
|
45
36
|
}
|
|
46
37
|
|
|
47
38
|
export interface BottomDockActions {
|
|
@@ -62,7 +53,7 @@ export interface BottomDockHandle {
|
|
|
62
53
|
dispose: () => void;
|
|
63
54
|
}
|
|
64
55
|
|
|
65
|
-
interface BottomDockScope extends
|
|
56
|
+
interface BottomDockScope extends BottomDockValues, BottomDockActions {}
|
|
66
57
|
|
|
67
58
|
function project(scope: BottomDockScope, values: BottomDockValues): void {
|
|
68
59
|
scope.tab = values.tab;
|
|
@@ -73,8 +64,8 @@ function project(scope: BottomDockScope, values: BottomDockValues): void {
|
|
|
73
64
|
|
|
74
65
|
/** The `part` a node was declared with, or the empty string. */
|
|
75
66
|
function partOf(def: JxElement | string): string {
|
|
76
|
-
const part =
|
|
77
|
-
return
|
|
67
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
68
|
+
return isString(part) ? part : "";
|
|
78
69
|
}
|
|
79
70
|
|
|
80
71
|
/**
|
|
@@ -90,7 +81,7 @@ export function mountBottomDockSurface(
|
|
|
90
81
|
actions: BottomDockActions,
|
|
91
82
|
options: BottomDockOptions,
|
|
92
83
|
): BottomDockHandle {
|
|
93
|
-
const scope = reactive<BottomDockScope>({ ...values, ...actions })
|
|
84
|
+
const scope: BottomDockScope = reactive<BottomDockScope>({ ...values, ...actions });
|
|
94
85
|
|
|
95
86
|
container.textContent = "";
|
|
96
87
|
// @ts-expect-error -- _$litPart$ is lit's private render-part marker, not in the DOM types
|
|
@@ -29,14 +29,15 @@
|
|
|
29
29
|
* @docs studio/interface/canvas
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
32
33
|
import { reactive } from "../reactivity";
|
|
33
34
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
34
35
|
import canvasStageDoc from "./canvas-stage.json";
|
|
35
|
-
import type {
|
|
36
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
36
37
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
37
38
|
import type { SurfaceHandle } from "../ui/surface";
|
|
38
39
|
|
|
39
|
-
registerSurface("canvas-stage", canvasStageDoc
|
|
40
|
+
registerSurface("canvas-stage", canvasStageDoc);
|
|
40
41
|
|
|
41
42
|
/** One artboard, as the document reads it. Every field is already a string or a boolean. */
|
|
42
43
|
export interface CanvasStagePanelItem {
|
|
@@ -104,7 +105,7 @@ export interface CanvasStageHandle {
|
|
|
104
105
|
}
|
|
105
106
|
|
|
106
107
|
/** The scope the document reads: {@link CanvasStageView} plus the one control it draws. */
|
|
107
|
-
interface CanvasStageScope extends
|
|
108
|
+
interface CanvasStageScope extends CanvasStageView {
|
|
108
109
|
pickPanel: (key: string) => void;
|
|
109
110
|
}
|
|
110
111
|
|
|
@@ -117,16 +118,16 @@ interface CanvasStageScope extends Record<string, unknown>, CanvasStageView {
|
|
|
117
118
|
* `data-side` tells the two width handles apart — the one part the document draws twice.
|
|
118
119
|
*/
|
|
119
120
|
function attrOf(def: JxElement | string, name: string): string {
|
|
120
|
-
const value =
|
|
121
|
-
return
|
|
121
|
+
const value = isString(def) ? undefined : def.attributes?.[name];
|
|
122
|
+
return isString(value) ? value : "";
|
|
122
123
|
}
|
|
123
124
|
|
|
124
125
|
/** The `key` of the `$map` item a node was rendered inside, or "". */
|
|
125
126
|
function itemKey(state: JxScope | undefined): string {
|
|
126
|
-
const
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
return
|
|
127
|
+
const map = state?.["$map"];
|
|
128
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
129
|
+
const key = isJsonObject(item) ? item["key"] : "";
|
|
130
|
+
return isString(key) ? key : "";
|
|
130
131
|
}
|
|
131
132
|
|
|
132
133
|
/** The three parts an artboard is made of; everything else is a singleton host. */
|
|
@@ -180,7 +181,7 @@ export function mountCanvasStage(
|
|
|
180
181
|
"the iframe survives" means — so the record a fresh render builds is filled from here rather
|
|
181
182
|
than from a callback that will not fire again. */
|
|
182
183
|
const boards = new Map<string, Map<string, HTMLElement>>();
|
|
183
|
-
const scope = reactive<CanvasStageScope>({
|
|
184
|
+
const scope: CanvasStageScope = reactive<CanvasStageScope>({
|
|
184
185
|
frame: "boards",
|
|
185
186
|
framePart: "panzoom",
|
|
186
187
|
frameVars: "",
|
|
@@ -190,7 +191,7 @@ export function mountCanvasStage(
|
|
|
190
191
|
lead: "none",
|
|
191
192
|
panels: [],
|
|
192
193
|
pickPanel: actions.pickPanel,
|
|
193
|
-
})
|
|
194
|
+
});
|
|
194
195
|
project(scope, view);
|
|
195
196
|
|
|
196
197
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -25,25 +25,19 @@
|
|
|
25
25
|
import { reactive } from "../reactivity";
|
|
26
26
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
27
27
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
28
|
-
import { close
|
|
28
|
+
import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
29
29
|
import { whenReady } from "./dialog";
|
|
30
30
|
import pickerDoc from "./cf-account-picker.json";
|
|
31
31
|
import type { SurfaceHandle } from "../ui/surface";
|
|
32
|
-
import type {
|
|
32
|
+
import type { CfAccount } from "../publish/pages-service";
|
|
33
33
|
|
|
34
|
-
registerSurface("cf-account-picker", pickerDoc
|
|
35
|
-
|
|
36
|
-
/** One account the grant reaches, as the list draws it. */
|
|
37
|
-
export interface CfAccountPickerRow {
|
|
38
|
-
id: string;
|
|
39
|
-
name: string;
|
|
40
|
-
}
|
|
34
|
+
registerSurface("cf-account-picker", pickerDoc);
|
|
41
35
|
|
|
42
36
|
/** What the flow knows. Every one of these may change while the dialog is up. */
|
|
43
37
|
export interface CfAccountPickerView {
|
|
44
38
|
/** The listing is in flight. Its own state, because "not yet asked" is not "reaches nothing". */
|
|
45
39
|
loading: boolean;
|
|
46
|
-
accounts:
|
|
40
|
+
accounts: CfAccount[];
|
|
47
41
|
/** The last refusal — a listing that failed, or an account the broker would not accept. */
|
|
48
42
|
failure: string;
|
|
49
43
|
/** The id being committed, so its own row can say so rather than the whole list going grey. */
|
|
@@ -88,15 +82,14 @@ interface CfAccountPickerFlags {
|
|
|
88
82
|
}
|
|
89
83
|
|
|
90
84
|
/** One row, as the document reads it: what it says, and whether it may be pressed. */
|
|
91
|
-
interface CfAccountPickerScopeRow extends
|
|
85
|
+
interface CfAccountPickerScopeRow extends CfAccount {
|
|
92
86
|
/** This row's own button text — "Selecting…" while it is the one being committed. */
|
|
93
87
|
label: string;
|
|
94
88
|
/** Every row is disabled while any commit is in flight: one answer at a time. */
|
|
95
89
|
busy: boolean;
|
|
96
90
|
}
|
|
97
91
|
|
|
98
|
-
interface CfAccountPickerScope
|
|
99
|
-
extends Record<string, unknown>, CfAccountPickerView, CfAccountPickerFlags {
|
|
92
|
+
interface CfAccountPickerScope extends CfAccountPickerView, CfAccountPickerFlags {
|
|
100
93
|
choose: (id: string) => void;
|
|
101
94
|
retry: () => void;
|
|
102
95
|
closed: () => void;
|
|
@@ -150,8 +143,12 @@ export function openCfAccountPickerSurface(options: CfAccountPickerOptions): CfA
|
|
|
150
143
|
closed = true;
|
|
151
144
|
options.onClosed();
|
|
152
145
|
};
|
|
146
|
+
/* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
|
|
147
|
+
element, and a direct `closed` test after that `await` would be narrowed to the value the test
|
|
148
|
+
before it saw. */
|
|
149
|
+
const isClosed = (): boolean => closed;
|
|
153
150
|
|
|
154
|
-
const scope = reactive({
|
|
151
|
+
const scope: CfAccountPickerScope = reactive<CfAccountPickerScope>({
|
|
155
152
|
...derive({ accounts: [], choosing: "", failure: "", loading: true }),
|
|
156
153
|
choose: (id: string) => {
|
|
157
154
|
options.onChoose(id);
|
|
@@ -160,18 +157,20 @@ export function openCfAccountPickerSurface(options: CfAccountPickerOptions): CfA
|
|
|
160
157
|
retry: () => {
|
|
161
158
|
options.onRetry();
|
|
162
159
|
},
|
|
163
|
-
})
|
|
160
|
+
});
|
|
164
161
|
|
|
165
162
|
let mounted: SurfaceHandle | null = null;
|
|
166
163
|
const ready = mountSurface("cf-account-picker", scope, slot).then(async (surface) => {
|
|
167
164
|
mounted = surface;
|
|
165
|
+
/* SAFETY: `cf-account-picker.json`'s root definition is a `jx-dialog` element, so the runtime
|
|
166
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
168
167
|
const element = surface.root as HTMLElement;
|
|
169
|
-
if (
|
|
168
|
+
if (isClosed()) {
|
|
170
169
|
surface.dispose();
|
|
171
170
|
return element;
|
|
172
171
|
}
|
|
173
172
|
await whenReady(element);
|
|
174
|
-
if (
|
|
173
|
+
if (isClosed()) {
|
|
175
174
|
return element;
|
|
176
175
|
}
|
|
177
176
|
showModal(element);
|
|
@@ -186,7 +185,7 @@ export function openCfAccountPickerSurface(options: CfAccountPickerOptions): CfA
|
|
|
186
185
|
const element = mounted?.root;
|
|
187
186
|
if (element instanceof HTMLElement) {
|
|
188
187
|
// The platform's close first, so focus goes back where it came from; then the document.
|
|
189
|
-
|
|
188
|
+
close(element);
|
|
190
189
|
}
|
|
191
190
|
mounted?.dispose();
|
|
192
191
|
mounted = null;
|
|
@@ -57,9 +57,8 @@ import type { Tab } from "../tabs/tab";
|
|
|
57
57
|
import type { SiteBuildResult, SitePreviewResult, StudioPlatform } from "../types";
|
|
58
58
|
import type { CommandRegistry } from "../commands/registry";
|
|
59
59
|
import type { EffectScope } from "@vue/reactivity";
|
|
60
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
61
60
|
|
|
62
|
-
registerSurface("commandbar", commandbarDoc
|
|
61
|
+
registerSurface("commandbar", commandbarDoc);
|
|
63
62
|
|
|
64
63
|
/**
|
|
65
64
|
* What the Command Bar is handed at mount.
|
|
@@ -146,7 +145,7 @@ export interface SegmentProjection {
|
|
|
146
145
|
export type WindowControlLayout = "none" | "mac" | "other";
|
|
147
146
|
|
|
148
147
|
/** The document's scope: the projections, and the host functions its handlers `call`. */
|
|
149
|
-
interface CommandBarScope
|
|
148
|
+
interface CommandBarScope {
|
|
150
149
|
csd: WindowControlLayout;
|
|
151
150
|
menuVisible: boolean;
|
|
152
151
|
menuOpen: boolean;
|
|
@@ -262,7 +261,7 @@ export function openInBrowserTarget(tab: Tab | null): BrowserTarget {
|
|
|
262
261
|
}
|
|
263
262
|
const params = dynamicRouteParams(documentPath);
|
|
264
263
|
if (params.length > 0) {
|
|
265
|
-
const chosen =
|
|
264
|
+
const chosen: Record<string, string> = tab?.session.ui.previewParams ?? {};
|
|
266
265
|
const missing = params.filter((name) => !chosen[name]);
|
|
267
266
|
if (missing.length > 0) {
|
|
268
267
|
const names = missing.map((name) => `:${name}`).join(", ");
|
|
@@ -482,8 +481,8 @@ const BUILD_SITE = "project.buildSite";
|
|
|
482
481
|
const OPEN_IN_BROWSER = "view.openInBrowser";
|
|
483
482
|
|
|
484
483
|
/** The sentence in an unknown thrown value. */
|
|
485
|
-
function errorText(
|
|
486
|
-
return
|
|
484
|
+
function errorText(cause: unknown): string {
|
|
485
|
+
return cause instanceof Error ? cause.message : String(cause);
|
|
487
486
|
}
|
|
488
487
|
|
|
489
488
|
/** The document's label: its path without the project root, which is already segment one. */
|
|
@@ -546,8 +545,14 @@ interface WindowControls {
|
|
|
546
545
|
}
|
|
547
546
|
|
|
548
547
|
function windowControls(): WindowControls | undefined {
|
|
549
|
-
|
|
550
|
-
|
|
548
|
+
const platform = globalThis.__jxPlatform;
|
|
549
|
+
if (platform == null || !("windowControls" in platform)) {
|
|
550
|
+
return undefined;
|
|
551
|
+
}
|
|
552
|
+
/* SAFETY: the PAL interface deliberately leaves `windowControls` undeclared; the one adapter that
|
|
553
|
+
adds it is the desktop launcher's (`packages/desktop/src/platform.ts`), whose object carries the
|
|
554
|
+
`close`, `maximize` and `minimize` functions this bar calls. */
|
|
555
|
+
return platform.windowControls as WindowControls | undefined;
|
|
551
556
|
}
|
|
552
557
|
|
|
553
558
|
// ─── The Command Center pill, the layout tabs and the docks, projected ───────
|
|
@@ -769,7 +774,7 @@ function state(): CommandBarScope {
|
|
|
769
774
|
windowControl: (action) => {
|
|
770
775
|
windowControls()?.[action]();
|
|
771
776
|
},
|
|
772
|
-
})
|
|
777
|
+
});
|
|
773
778
|
return _state;
|
|
774
779
|
}
|
|
775
780
|
|
|
@@ -25,14 +25,13 @@
|
|
|
25
25
|
import { reactive } from "../reactivity";
|
|
26
26
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
27
27
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
28
|
-
import { close
|
|
28
|
+
import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
29
29
|
import { selectValue } from "@jxsuite/ui/behaviors/textfield";
|
|
30
30
|
import { whenReady } from "./dialog";
|
|
31
31
|
import convertRepeaterDoc from "./convert-repeater.json";
|
|
32
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
33
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
32
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
34
33
|
|
|
35
|
-
registerSurface("convert-repeater", convertRepeaterDoc
|
|
34
|
+
registerSurface("convert-repeater", convertRepeaterDoc);
|
|
36
35
|
|
|
37
36
|
/**
|
|
38
37
|
* The items-source row that is not a definition: pick it and the dialog asks for a name instead.
|
|
@@ -42,12 +41,6 @@ registerSurface("convert-repeater", convertRepeaterDoc as unknown as JxDocument)
|
|
|
42
41
|
*/
|
|
43
42
|
export const CREATE_NEW_SOURCE = "__new__";
|
|
44
43
|
|
|
45
|
-
/** One row of either picker. */
|
|
46
|
-
export interface ConvertRepeaterOption {
|
|
47
|
-
value: string;
|
|
48
|
-
label: string;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
44
|
/** What the flow knows. Every one of these may change while the dialog is up. */
|
|
52
45
|
export interface ConvertRepeaterView {
|
|
53
46
|
/** State definitions that hold an array, in the order they were found. */
|
|
@@ -97,9 +90,9 @@ export interface ConvertRepeaterSurfaceHandle {
|
|
|
97
90
|
/** What the document discriminates on, and the rows it maps. Derived, never handed in. */
|
|
98
91
|
interface ConvertRepeaterFlags {
|
|
99
92
|
/** The source picker's rows: every array definition, then `Create new…`. */
|
|
100
|
-
sourceOptions:
|
|
93
|
+
sourceOptions: SurfaceOption[];
|
|
101
94
|
/** The filter and sort pickers' rows: `None`, then every function definition. */
|
|
102
|
-
functionOptions:
|
|
95
|
+
functionOptions: SurfaceOption[];
|
|
103
96
|
/** The chosen source is the sentinel, so the name field is drawn. */
|
|
104
97
|
creating: boolean;
|
|
105
98
|
/** There is at least one function to offer, so the two optional rows are drawn. */
|
|
@@ -108,8 +101,7 @@ interface ConvertRepeaterFlags {
|
|
|
108
101
|
invalid: boolean;
|
|
109
102
|
}
|
|
110
103
|
|
|
111
|
-
interface ConvertRepeaterScope
|
|
112
|
-
extends Record<string, unknown>, ConvertRepeaterView, ConvertRepeaterFlags {
|
|
104
|
+
interface ConvertRepeaterScope extends ConvertRepeaterView, ConvertRepeaterFlags {
|
|
113
105
|
pickSource: (value: string) => void;
|
|
114
106
|
setName: (value: string) => void;
|
|
115
107
|
pickFilter: (value: string) => void;
|
|
@@ -163,8 +155,12 @@ export function openConvertRepeaterSurface(
|
|
|
163
155
|
closed = true;
|
|
164
156
|
options.onClosed();
|
|
165
157
|
};
|
|
158
|
+
/* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
|
|
159
|
+
element, and a direct `closed` test after that `await` would be narrowed to the value the test
|
|
160
|
+
before it saw. */
|
|
161
|
+
const isClosed = (): boolean => closed;
|
|
166
162
|
|
|
167
|
-
const scope = reactive({
|
|
163
|
+
const scope: ConvertRepeaterScope = reactive<ConvertRepeaterScope>({
|
|
168
164
|
...derive(options.view),
|
|
169
165
|
closed: finish,
|
|
170
166
|
confirm: () => {
|
|
@@ -191,7 +187,7 @@ export function openConvertRepeaterSurface(
|
|
|
191
187
|
scope.newName = value;
|
|
192
188
|
options.onName(value);
|
|
193
189
|
},
|
|
194
|
-
})
|
|
190
|
+
});
|
|
195
191
|
|
|
196
192
|
let mounted: SurfaceHandle | null = null;
|
|
197
193
|
|
|
@@ -218,13 +214,15 @@ export function openConvertRepeaterSurface(
|
|
|
218
214
|
|
|
219
215
|
const ready = mountSurface("convert-repeater", scope, slot).then(async (surface) => {
|
|
220
216
|
mounted = surface;
|
|
217
|
+
/* SAFETY: `convert-repeater.json`'s root definition is a `jx-dialog` element, so the runtime
|
|
218
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
221
219
|
const element = surface.root as HTMLElement;
|
|
222
|
-
if (
|
|
220
|
+
if (isClosed()) {
|
|
223
221
|
surface.dispose();
|
|
224
222
|
return element;
|
|
225
223
|
}
|
|
226
224
|
await whenReady(element);
|
|
227
|
-
if (
|
|
225
|
+
if (isClosed()) {
|
|
228
226
|
return element;
|
|
229
227
|
}
|
|
230
228
|
showModal(element);
|
|
@@ -243,7 +241,7 @@ export function openConvertRepeaterSurface(
|
|
|
243
241
|
const element = mounted?.root;
|
|
244
242
|
if (element instanceof HTMLElement) {
|
|
245
243
|
// The platform's close first, so focus goes back where it came from; then the document.
|
|
246
|
-
|
|
244
|
+
close(element);
|
|
247
245
|
}
|
|
248
246
|
// A mount that has not landed yet is disposed by `ready` when it does — `finish` tells it so.
|
|
249
247
|
mounted?.dispose();
|
|
@@ -18,10 +18,9 @@
|
|
|
18
18
|
import { reactive } from "../reactivity";
|
|
19
19
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
20
20
|
import dataActionsDoc from "./data-actions.json";
|
|
21
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
22
21
|
import type { SurfaceHandle } from "../ui/surface";
|
|
23
22
|
|
|
24
|
-
registerSurface("data-actions", dataActionsDoc
|
|
23
|
+
registerSurface("data-actions", dataActionsDoc);
|
|
25
24
|
|
|
26
25
|
/** Everything the row draws. */
|
|
27
26
|
export interface DataActionsView {
|
|
@@ -52,7 +51,7 @@ export interface DataActionsSurfaceHandle {
|
|
|
52
51
|
dispose: () => void;
|
|
53
52
|
}
|
|
54
53
|
|
|
55
|
-
interface DataActionsScope extends
|
|
54
|
+
interface DataActionsScope extends DataActionsView, DataActionsCallbacks {}
|
|
56
55
|
|
|
57
56
|
/** Write a projection into the scope. */
|
|
58
57
|
function project(scope: DataActionsScope, view: DataActionsView): void {
|
|
@@ -78,7 +77,7 @@ export function mountDataActionsSurface(
|
|
|
78
77
|
view: DataActionsView,
|
|
79
78
|
actions: DataActionsCallbacks,
|
|
80
79
|
): DataActionsSurfaceHandle {
|
|
81
|
-
const scope = reactive<DataActionsScope>({
|
|
80
|
+
const scope: DataActionsScope = reactive<DataActionsScope>({
|
|
82
81
|
openGrid: actions.openGrid,
|
|
83
82
|
push: actions.push,
|
|
84
83
|
resultOk: "false",
|
|
@@ -89,18 +88,21 @@ export function mountDataActionsSurface(
|
|
|
89
88
|
testDisabled: false,
|
|
90
89
|
testLabel: "Test Connection",
|
|
91
90
|
testState: "hidden",
|
|
92
|
-
})
|
|
91
|
+
});
|
|
93
92
|
project(scope, view);
|
|
94
93
|
|
|
95
94
|
let mounted: SurfaceHandle | null = null;
|
|
96
95
|
let disposed = false;
|
|
97
96
|
const ready = mountSurface("data-actions", scope, host).then((surface) => {
|
|
97
|
+
/* SAFETY: `data-actions.json`'s root definition is a `div` element, so the runtime mounts an
|
|
98
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
99
|
+
const root = surface.root as HTMLElement;
|
|
98
100
|
if (disposed) {
|
|
99
101
|
surface.dispose();
|
|
100
|
-
return
|
|
102
|
+
return root;
|
|
101
103
|
}
|
|
102
104
|
mounted = surface;
|
|
103
|
-
return
|
|
105
|
+
return root;
|
|
104
106
|
});
|
|
105
107
|
|
|
106
108
|
return {
|