@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
|
@@ -27,17 +27,18 @@
|
|
|
27
27
|
* @docs studio/interface/preferences
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
30
31
|
import { reactive } from "../reactivity";
|
|
31
32
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
32
33
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
33
|
-
import { close
|
|
34
|
+
import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
34
35
|
import { whenReady } from "./dialog";
|
|
35
36
|
import preferencesDoc from "./preferences.json";
|
|
36
|
-
import type { JxElement
|
|
37
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
37
38
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
38
39
|
import type { SurfaceHandle } from "../ui/surface";
|
|
39
40
|
|
|
40
|
-
registerSurface("preferences", preferencesDoc
|
|
41
|
+
registerSurface("preferences", preferencesDoc);
|
|
41
42
|
|
|
42
43
|
/** One row of the section list. `current` is the string `aria-current` takes. */
|
|
43
44
|
export interface PreferencesSectionRow {
|
|
@@ -173,7 +174,7 @@ interface PreferencesFlags {
|
|
|
173
174
|
hasConflict: boolean;
|
|
174
175
|
}
|
|
175
176
|
|
|
176
|
-
interface PreferencesScope extends
|
|
177
|
+
interface PreferencesScope extends PreferencesView, PreferencesFlags {
|
|
177
178
|
selectSection: (id: string) => void;
|
|
178
179
|
setTheme: (value: string) => void;
|
|
179
180
|
runAccountAction: (key: string) => void;
|
|
@@ -199,8 +200,8 @@ function derive(view: PreferencesView): PreferencesView & PreferencesFlags {
|
|
|
199
200
|
|
|
200
201
|
/** The `part` a node's definition carries, or `""` for a text node or an unmarked element. */
|
|
201
202
|
function partOf(def: JxElement | string): string {
|
|
202
|
-
const part =
|
|
203
|
-
return
|
|
203
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
204
|
+
return isString(part) ? part : "";
|
|
204
205
|
}
|
|
205
206
|
|
|
206
207
|
/**
|
|
@@ -234,10 +235,16 @@ export function openPreferencesSurface(
|
|
|
234
235
|
closed = true;
|
|
235
236
|
options.onClosed();
|
|
236
237
|
};
|
|
238
|
+
/* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
|
|
239
|
+
element, and a direct `closed` test after that `await` would be narrowed to the value the test
|
|
240
|
+
before it saw. */
|
|
241
|
+
const isClosed = (): boolean => closed;
|
|
237
242
|
|
|
238
|
-
const scope = reactive({
|
|
243
|
+
const scope: PreferencesScope = reactive<PreferencesScope>({
|
|
239
244
|
...derive(options.view),
|
|
240
245
|
capture: (_scope: JxScope, event: Event) => {
|
|
246
|
+
/* SAFETY: `preferences.json` names `capture` in exactly one place, the keys sheet's
|
|
247
|
+
`onkeydown`, so the event the runtime hands it is always the platform's `KeyboardEvent`. */
|
|
241
248
|
options.onCaptureKey(event as KeyboardEvent);
|
|
242
249
|
},
|
|
243
250
|
closed: finish,
|
|
@@ -270,7 +277,7 @@ export function openPreferencesSurface(
|
|
|
270
277
|
toggleRebind: (commandId: string) => {
|
|
271
278
|
options.onToggleRebind(commandId);
|
|
272
279
|
},
|
|
273
|
-
})
|
|
280
|
+
});
|
|
274
281
|
|
|
275
282
|
let mounted: SurfaceHandle | null = null;
|
|
276
283
|
const ready = mountSurface("preferences", scope, slot, {
|
|
@@ -287,13 +294,16 @@ export function openPreferencesSurface(
|
|
|
287
294
|
},
|
|
288
295
|
}).then(async (surface) => {
|
|
289
296
|
mounted = surface;
|
|
297
|
+
/* SAFETY: `preferences.json`'s root definition carries `tagName: "jx-dialog"`, so the runtime
|
|
298
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare
|
|
299
|
+
string. */
|
|
290
300
|
const element = surface.root as HTMLElement;
|
|
291
|
-
if (
|
|
301
|
+
if (isClosed()) {
|
|
292
302
|
surface.dispose();
|
|
293
303
|
return element;
|
|
294
304
|
}
|
|
295
305
|
await whenReady(element);
|
|
296
|
-
if (
|
|
306
|
+
if (isClosed()) {
|
|
297
307
|
return element;
|
|
298
308
|
}
|
|
299
309
|
/* The region goes on the platform's own `<dialog>`, which is the one element here that HAS a
|
|
@@ -323,7 +333,7 @@ export function openPreferencesSurface(
|
|
|
323
333
|
const element = mounted?.root;
|
|
324
334
|
if (element instanceof HTMLElement) {
|
|
325
335
|
// The platform's close first, so focus goes back where it came from; then the document.
|
|
326
|
-
|
|
336
|
+
close(element);
|
|
327
337
|
}
|
|
328
338
|
// A mount that has not landed yet is disposed by `ready` when it does — `finish` tells it so.
|
|
329
339
|
mounted?.dispose();
|
|
@@ -21,13 +21,12 @@
|
|
|
21
21
|
import { reactive } from "../reactivity";
|
|
22
22
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
23
23
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
24
|
-
import { close
|
|
24
|
+
import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
25
25
|
import { whenReady } from "./dialog";
|
|
26
26
|
import progressDoc from "./progress-modal.json";
|
|
27
27
|
import type { SurfaceHandle } from "../ui/surface";
|
|
28
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
29
28
|
|
|
30
|
-
registerSurface("progress-modal", progressDoc
|
|
29
|
+
registerSurface("progress-modal", progressDoc);
|
|
31
30
|
|
|
32
31
|
/** What the flow hands the surface. Everything is a projection; the flow keeps the operation. */
|
|
33
32
|
export interface ProgressSurfaceOptions {
|
|
@@ -64,7 +63,7 @@ export interface ProgressSurfaceHandle {
|
|
|
64
63
|
close: () => void;
|
|
65
64
|
}
|
|
66
65
|
|
|
67
|
-
interface ProgressScope
|
|
66
|
+
interface ProgressScope {
|
|
68
67
|
title: string;
|
|
69
68
|
status: string;
|
|
70
69
|
/**
|
|
@@ -91,7 +90,11 @@ export function openProgressSurface(options: ProgressSurfaceOptions): ProgressSu
|
|
|
91
90
|
options.layer.append(slot);
|
|
92
91
|
|
|
93
92
|
let closed = false;
|
|
94
|
-
|
|
93
|
+
/* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
|
|
94
|
+
element, and a direct `closed` test after that `await` would be narrowed to the value the test
|
|
95
|
+
before it saw. */
|
|
96
|
+
const isClosed = (): boolean => closed;
|
|
97
|
+
const scope: ProgressScope = reactive<ProgressScope>({
|
|
95
98
|
background: () => {
|
|
96
99
|
options.onBackground();
|
|
97
100
|
},
|
|
@@ -104,12 +107,15 @@ export function openProgressSurface(options: ProgressSurfaceOptions): ProgressSu
|
|
|
104
107
|
},
|
|
105
108
|
status: options.status,
|
|
106
109
|
title: options.title,
|
|
107
|
-
})
|
|
110
|
+
});
|
|
108
111
|
|
|
109
112
|
let mounted: SurfaceHandle | null = null;
|
|
110
113
|
const ready = mountSurface("progress-modal", scope, slot).then(async (surface) => {
|
|
114
|
+
/* SAFETY: `progress-modal.json`'s root definition carries `tagName: "jx-dialog"`, so the
|
|
115
|
+
runtime mounts an HTMLElement; a `Text` root only comes from a document whose root is a
|
|
116
|
+
bare string. */
|
|
111
117
|
const element = surface.root as HTMLElement;
|
|
112
|
-
if (
|
|
118
|
+
if (isClosed()) {
|
|
113
119
|
surface.dispose();
|
|
114
120
|
return element;
|
|
115
121
|
}
|
|
@@ -118,7 +124,7 @@ export function openProgressSurface(options: ProgressSurfaceOptions): ProgressSu
|
|
|
118
124
|
DOCUMENT rendered, while the element's OWN template is one `connectedCallback` later.
|
|
119
125
|
`showModal` in between finds no `<dialog>` to open, and the surface never shows. */
|
|
120
126
|
await whenReady(element);
|
|
121
|
-
if (
|
|
127
|
+
if (isClosed()) {
|
|
122
128
|
return element;
|
|
123
129
|
}
|
|
124
130
|
showModal(element);
|
|
@@ -134,7 +140,7 @@ export function openProgressSurface(options: ProgressSurfaceOptions): ProgressSu
|
|
|
134
140
|
const element = mounted?.root;
|
|
135
141
|
if (element instanceof HTMLElement) {
|
|
136
142
|
// The platform's close first, so focus goes back where it came from; then the document.
|
|
137
|
-
|
|
143
|
+
close(element);
|
|
138
144
|
}
|
|
139
145
|
// A mount that has not landed yet is disposed by `ready` when it does.
|
|
140
146
|
mounted?.dispose();
|
|
@@ -31,14 +31,16 @@
|
|
|
31
31
|
* @docs studio/design/properties
|
|
32
32
|
*/
|
|
33
33
|
|
|
34
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
34
35
|
import { reactive } from "../reactivity";
|
|
35
36
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
36
37
|
import propertiesPanelDoc from "./properties-panel.json";
|
|
37
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
38
|
+
import type { SurfaceAction, SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
39
|
+
import type { ColorTokenView } from "../ui/color-selector";
|
|
38
40
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
39
|
-
import type {
|
|
41
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
40
42
|
|
|
41
|
-
registerSurface("properties-panel", propertiesPanelDoc
|
|
43
|
+
registerSurface("properties-panel", propertiesPanelDoc);
|
|
42
44
|
|
|
43
45
|
/** Which control a `field` row draws. The flow picks it; the document switches on it. */
|
|
44
46
|
export type ContentFieldKind =
|
|
@@ -52,25 +54,7 @@ export type ContentFieldKind =
|
|
|
52
54
|
| "control";
|
|
53
55
|
|
|
54
56
|
/** What a row is drawn as. Everything a section body can hold is one of these. */
|
|
55
|
-
export type
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* One colour the project has named, as a `color` row's palette draws it.
|
|
59
|
-
*
|
|
60
|
-
* The same three fields the Style tab projects, and for the same reason: `value` is the reference a
|
|
61
|
-
* click commits, `color` is only how it reads on screen, and `label` is what a reader hears.
|
|
62
|
-
*/
|
|
63
|
-
export interface ContentTokenView extends Record<string, unknown> {
|
|
64
|
-
value: string;
|
|
65
|
-
color: string;
|
|
66
|
-
label: string;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/** A choice a select offers, in the shape the kit's select reads. */
|
|
70
|
-
export interface ContentOption {
|
|
71
|
-
value: string;
|
|
72
|
-
label: string;
|
|
73
|
-
}
|
|
57
|
+
export type ContentRowVariant = "field" | "kv" | "note" | "action" | "file";
|
|
74
58
|
|
|
75
59
|
/**
|
|
76
60
|
* One row of a section — every field already decided, whatever shape it is.
|
|
@@ -81,7 +65,7 @@ export interface ContentOption {
|
|
|
81
65
|
export interface ContentRowView {
|
|
82
66
|
/** The row's reconcile identity AND what every callback hands back. */
|
|
83
67
|
key: string;
|
|
84
|
-
|
|
68
|
+
variant: ContentRowVariant;
|
|
85
69
|
/** `data-prop` — what `inspector/field:<prop>` addresses. Every shape carries one. */
|
|
86
70
|
prop: string;
|
|
87
71
|
/** The visible label of a `field`; the accessible name of a `kv` pair's controls. */
|
|
@@ -99,9 +83,9 @@ export interface ContentRowView {
|
|
|
99
83
|
/** Draw the text control monospaced — a template, a pointer, a code-ish value. */
|
|
100
84
|
mono: boolean;
|
|
101
85
|
/** Choices for `select`; the routes or the popover ids for a `link`'s value half. */
|
|
102
|
-
options:
|
|
86
|
+
options: SurfaceOption[];
|
|
103
87
|
/** The palette a `color` row offers inside its picker, and whether it has one to offer. */
|
|
104
|
-
tokens:
|
|
88
|
+
tokens: ColorTokenView[];
|
|
105
89
|
hasTokens: boolean;
|
|
106
90
|
/**
|
|
107
91
|
* The provenance chip's shape: `""` draws nothing (§6.7's `default` state, where absence IS the
|
|
@@ -125,7 +109,7 @@ export interface ContentRowView {
|
|
|
125
109
|
source: string;
|
|
126
110
|
/** A `link` row's kind half: the chosen kind, and the five it chooses between. */
|
|
127
111
|
linkKind: string;
|
|
128
|
-
kindOptions:
|
|
112
|
+
kindOptions: SurfaceOption[];
|
|
129
113
|
/** `route` draws a picker of the site's own routes; `text` draws a field. */
|
|
130
114
|
linkValueKind: string;
|
|
131
115
|
/** A `kv` pair's key cell, and the remove button's accessible name. */
|
|
@@ -151,12 +135,6 @@ export interface ContentSectionView {
|
|
|
151
135
|
rows: ContentRowView[];
|
|
152
136
|
}
|
|
153
137
|
|
|
154
|
-
/** A button an empty state offers — the action that fills the region. */
|
|
155
|
-
export interface ContentEmptyAction {
|
|
156
|
-
id: string;
|
|
157
|
-
label: string;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
138
|
/** Everything the document reads. */
|
|
161
139
|
export interface ContentPanelView {
|
|
162
140
|
/**
|
|
@@ -168,7 +146,7 @@ export interface ContentPanelView {
|
|
|
168
146
|
emptyMessage: string;
|
|
169
147
|
emptyDetail: string;
|
|
170
148
|
hasEmptyDetail: boolean;
|
|
171
|
-
emptyActions:
|
|
149
|
+
emptyActions: SurfaceAction[];
|
|
172
150
|
hasEmptyActions: boolean;
|
|
173
151
|
/** The layout card: the tag clicked, its class, the file it came from. */
|
|
174
152
|
layoutTag: string;
|
|
@@ -218,8 +196,7 @@ export interface ContentPanelSurface {
|
|
|
218
196
|
/** A control host the document drew, reported as the runtime created it. */
|
|
219
197
|
export type ContentControlSink = (key: string, host: HTMLElement) => void;
|
|
220
198
|
|
|
221
|
-
interface ContentPanelScope
|
|
222
|
-
extends Record<string, unknown>, ContentPanelView, ContentPanelActions {}
|
|
199
|
+
interface ContentPanelScope extends ContentPanelView, ContentPanelActions {}
|
|
223
200
|
|
|
224
201
|
/** The scope's starting shape, before the first projection lands on it. */
|
|
225
202
|
export function emptyContentView(): ContentPanelView {
|
|
@@ -267,15 +244,16 @@ function controlKeyOf(part: string, state: JxScope | undefined): string {
|
|
|
267
244
|
if (part !== "control-host") {
|
|
268
245
|
return "";
|
|
269
246
|
}
|
|
270
|
-
const
|
|
271
|
-
const
|
|
272
|
-
|
|
247
|
+
const map = state?.["$map"];
|
|
248
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
249
|
+
const key = isJsonObject(item) ? item["key"] : undefined;
|
|
250
|
+
return isString(key) ? key : "";
|
|
273
251
|
}
|
|
274
252
|
|
|
275
253
|
/** A node definition's `part`, as written in the document. */
|
|
276
254
|
function partOf(def: JxElement | string): string {
|
|
277
|
-
const part =
|
|
278
|
-
return
|
|
255
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
256
|
+
return isString(part) ? part : "";
|
|
279
257
|
}
|
|
280
258
|
|
|
281
259
|
/**
|
|
@@ -296,10 +274,10 @@ export function mountContentSurface(
|
|
|
296
274
|
actions: ContentPanelActions,
|
|
297
275
|
onControlHost: ContentControlSink,
|
|
298
276
|
): ContentPanelSurface {
|
|
299
|
-
const scope = reactive<ContentPanelScope>({
|
|
277
|
+
const scope: ContentPanelScope = reactive<ContentPanelScope>({
|
|
300
278
|
...emptyContentView(),
|
|
301
279
|
...actions,
|
|
302
|
-
})
|
|
280
|
+
});
|
|
303
281
|
project(scope, values);
|
|
304
282
|
|
|
305
283
|
let mounted: SurfaceHandle | null = null;
|
package/src/surfaces/publish.ts
CHANGED
|
@@ -31,23 +31,16 @@
|
|
|
31
31
|
import { reactive } from "../reactivity";
|
|
32
32
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
33
33
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
34
|
-
import { close
|
|
34
|
+
import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
35
35
|
import { whenReady } from "./dialog";
|
|
36
36
|
import publishDoc from "./publish.json";
|
|
37
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
38
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
37
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
39
38
|
|
|
40
|
-
registerSurface("publish", publishDoc
|
|
39
|
+
registerSurface("publish", publishDoc);
|
|
41
40
|
|
|
42
41
|
/** Where the Cloudflare Pages GitHub App is installed from. */
|
|
43
42
|
const PAGES_APP_INSTALL_URL = "https://github.com/apps/cloudflare-pages/installations/new";
|
|
44
43
|
|
|
45
|
-
/** One Cloudflare account, as the picker draws it. */
|
|
46
|
-
export interface PublishAccountRow {
|
|
47
|
-
value: string;
|
|
48
|
-
label: string;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
44
|
/** The create-and-connect form, as the reader has filled it in so far. */
|
|
52
45
|
export interface PublishForm {
|
|
53
46
|
accountId: string;
|
|
@@ -95,7 +88,7 @@ export interface PublishView {
|
|
|
95
88
|
busy: boolean;
|
|
96
89
|
/** The last refusal, verbatim from whatever raised it. Empty draws nothing. */
|
|
97
90
|
error: string;
|
|
98
|
-
accounts:
|
|
91
|
+
accounts: SurfaceOption[];
|
|
99
92
|
form: PublishForm;
|
|
100
93
|
/** The connected Pages project, or null when this site has none yet. */
|
|
101
94
|
deploy: PublishDeploy | null;
|
|
@@ -164,7 +157,7 @@ interface PublishFlags {
|
|
|
164
157
|
*/
|
|
165
158
|
needsPagesApp: boolean;
|
|
166
159
|
pagesAppUrl: string;
|
|
167
|
-
accountOptions:
|
|
160
|
+
accountOptions: SurfaceOption[];
|
|
168
161
|
accountId: string;
|
|
169
162
|
projectName: string;
|
|
170
163
|
owner: string;
|
|
@@ -181,7 +174,7 @@ interface PublishFlags {
|
|
|
181
174
|
busy: boolean;
|
|
182
175
|
}
|
|
183
176
|
|
|
184
|
-
interface PublishScope extends
|
|
177
|
+
interface PublishScope extends PublishFlags {
|
|
185
178
|
connect: () => void;
|
|
186
179
|
replace: () => void;
|
|
187
180
|
setToken: (value: string) => void;
|
|
@@ -286,8 +279,12 @@ export function openPublishSurface(options: PublishSurfaceOptions): PublishSurfa
|
|
|
286
279
|
closed = true;
|
|
287
280
|
options.onClosed();
|
|
288
281
|
};
|
|
282
|
+
/* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
|
|
283
|
+
element, and a direct `closed` test after that `await` would be narrowed to the value the test
|
|
284
|
+
before it saw. */
|
|
285
|
+
const isClosed = (): boolean => closed;
|
|
289
286
|
|
|
290
|
-
const scope = reactive({
|
|
287
|
+
const scope: PublishScope = reactive<PublishScope>({
|
|
291
288
|
...derive(options.view),
|
|
292
289
|
closed: finish,
|
|
293
290
|
connect: () => {
|
|
@@ -341,18 +338,21 @@ export function openPublishSurface(options: PublishSurfaceOptions): PublishSurfa
|
|
|
341
338
|
tokenDraft = "";
|
|
342
339
|
options.onSaveToken(token);
|
|
343
340
|
},
|
|
344
|
-
})
|
|
341
|
+
});
|
|
345
342
|
|
|
346
343
|
let mounted: SurfaceHandle | null = null;
|
|
347
344
|
const ready = mountSurface("publish", scope, slot).then(async (surface) => {
|
|
348
345
|
mounted = surface;
|
|
346
|
+
/* SAFETY: `publish.json`'s root definition carries `tagName: "jx-dialog"`, so the runtime
|
|
347
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare
|
|
348
|
+
string. */
|
|
349
349
|
const element = surface.root as HTMLElement;
|
|
350
|
-
if (
|
|
350
|
+
if (isClosed()) {
|
|
351
351
|
surface.dispose();
|
|
352
352
|
return element;
|
|
353
353
|
}
|
|
354
354
|
await whenReady(element);
|
|
355
|
-
if (
|
|
355
|
+
if (isClosed()) {
|
|
356
356
|
return element;
|
|
357
357
|
}
|
|
358
358
|
/* The region goes on the platform's own `<dialog>`, which is the one element here that HAS a
|
|
@@ -375,7 +375,7 @@ export function openPublishSurface(options: PublishSurfaceOptions): PublishSurfa
|
|
|
375
375
|
const element = mounted?.root;
|
|
376
376
|
if (element instanceof HTMLElement) {
|
|
377
377
|
// The platform's close first, so focus goes back where it came from; then the document.
|
|
378
|
-
|
|
378
|
+
close(element);
|
|
379
379
|
}
|
|
380
380
|
// A mount that has not landed yet is disposed by `ready` when it does — `finish` tells it so.
|
|
381
381
|
mounted?.dispose();
|
|
@@ -13,10 +13,9 @@
|
|
|
13
13
|
import { reactive } from "../reactivity";
|
|
14
14
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
15
15
|
import pushPlanDoc from "./push-plan.json";
|
|
16
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
17
16
|
import type { SurfaceHandle } from "../ui/surface";
|
|
18
17
|
|
|
19
|
-
registerSurface("push-plan", pushPlanDoc
|
|
18
|
+
registerSurface("push-plan", pushPlanDoc);
|
|
20
19
|
|
|
21
20
|
/** One step of the plan. `kind` colours the rule beside it; nothing here reads it otherwise. */
|
|
22
21
|
export interface PushStepRow {
|
|
@@ -44,8 +43,6 @@ export interface PushPlanSurfaceHandle {
|
|
|
44
43
|
dispose: () => void;
|
|
45
44
|
}
|
|
46
45
|
|
|
47
|
-
interface PushPlanScope extends Record<string, unknown>, PushPlanView {}
|
|
48
|
-
|
|
49
46
|
/**
|
|
50
47
|
* Mount the plan into `host`.
|
|
51
48
|
*
|
|
@@ -54,20 +51,22 @@ interface PushPlanScope extends Record<string, unknown>, PushPlanView {}
|
|
|
54
51
|
* @returns {PushPlanSurfaceHandle}
|
|
55
52
|
*/
|
|
56
53
|
export function mountPushPlanSurface(host: HTMLElement, view: PushPlanView): PushPlanSurfaceHandle {
|
|
57
|
-
const scope = reactive<
|
|
54
|
+
const scope: PushPlanView = reactive<PushPlanView>({
|
|
58
55
|
errors: view.errors,
|
|
59
56
|
steps: view.steps,
|
|
60
57
|
warnings: view.warnings,
|
|
61
|
-
})
|
|
58
|
+
});
|
|
62
59
|
|
|
63
60
|
let mounted: SurfaceHandle | null = null;
|
|
64
61
|
let disposed = false;
|
|
65
62
|
const ready = mountSurface("push-plan", scope, host).then((surface) => {
|
|
66
63
|
if (disposed) {
|
|
67
64
|
surface.dispose();
|
|
68
|
-
|
|
65
|
+
} else {
|
|
66
|
+
mounted = surface;
|
|
69
67
|
}
|
|
70
|
-
|
|
68
|
+
/* SAFETY: `push-plan.json`'s root definition is a `div` element, so the runtime mounts an
|
|
69
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
71
70
|
return surface.root as HTMLElement;
|
|
72
71
|
});
|
|
73
72
|
|