@jxsuite/studio 6.1.1 → 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-va2wwra4.js → 2020-f2gkpy8d.js} +3 -3
- 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-2veqmnhr.js → index-zpjmzqfk.js} +3 -3
- package/dist/chunks/{javascript-8nbvs12s.js → javascript-m54mnwp6.js} +3 -3
- package/dist/chunks/{jsonMode-s8kt9dsj.js → jsonMode-w15cmrcm.js} +8 -8
- 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-1q1sh2ax.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-h46vtzk8.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-rv11kfwa.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-8grwxtqk.js → studio-90pq9km1.js} +4 -4
- package/dist/chunks/studio-924p1tm1.js +6 -0
- package/dist/chunks/{studio-pre0skq6.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-vrmcjf9g.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-wszjyh0j.js → studio-tq0rtfwj.js} +4 -4
- package/dist/chunks/{studio-kggey1jt.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-zey7zsdw.js → studio-y64hrt8p.js} +7 -7
- 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-2frah6h1.js → tsMode-sf49ee9x.js} +7 -7
- 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 +97 -97
- package/package.json +6 -6
- 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 +62 -41
- package/src/canvas/canvas-surface.ts +5 -3
- package/src/canvas/canvas-utils.ts +90 -49
- 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 +135 -96
- package/src/canvas/iframe-inline-edit.ts +49 -30
- package/src/canvas/iframe-insert.ts +5 -4
- package/src/canvas/iframe-interaction.ts +30 -25
- 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 +12 -16
- package/src/canvas/iframe-render.ts +36 -34
- 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/keymap.ts +47 -43
- package/src/commands/levels.ts +3 -3
- package/src/commands/live-context.ts +7 -7
- 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 +32 -20
- 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 +3 -0
- 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 +52 -21
- 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 +218 -205
- 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 +129 -117
- 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 +25 -75
- 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 +19 -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.ts +13 -13
- 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/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 +73 -73
- 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 +40 -36
- package/dist/chunks/adapter-f93pafd7.js +0 -4
- package/dist/chunks/cf-account-picker-af1h381v.js +0 -4
- package/dist/chunks/cf-settings-125tdm0w.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-ax2f1fnn.js +0 -4
- package/dist/chunks/content-source-108aqtk1.js +0 -4
- package/dist/chunks/convert-to-repeater-ry5rmppr.js +0 -4
- package/dist/chunks/dialog-mtm9fq5t.js +0 -4
- package/dist/chunks/editor-pfgdmkb0.js +0 -4
- package/dist/chunks/entry-commands-t0k1q0kx.js +0 -4
- package/dist/chunks/extension-sections-6mwh2hf8.js +0 -4
- package/dist/chunks/file-ops-meej5mqf.js +0 -4
- package/dist/chunks/files-44vp8a2s.js +0 -4
- package/dist/chunks/format-host-7q1petb9.js +0 -4
- package/dist/chunks/fs-events-h2mwnxaz.js +0 -4
- package/dist/chunks/git-panel-zngbymvd.js +0 -4
- package/dist/chunks/grid-view-sx9vynsp.js +0 -51
- package/dist/chunks/icons-p44xhjf0.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-qk3ycq87.js +0 -4
- package/dist/chunks/index-wkyfjeqz.js +0 -4
- package/dist/chunks/jx-validate-psgd7vsx.js +0 -4
- package/dist/chunks/layers-panel-1kq2jyfk.js +0 -4
- package/dist/chunks/layers-xd92fg8d.js +0 -4
- package/dist/chunks/listbox-s8fkmnq8.js +0 -4
- package/dist/chunks/lit-html-ac4cwwr4.js +0 -4
- package/dist/chunks/media-picker-0svzkdyb.js +0 -4
- package/dist/chunks/menu-37d07z9m.js +0 -4
- package/dist/chunks/menu-5c55ea3d.js +0 -4
- package/dist/chunks/monaco-binding-z6r70pdt.js +0 -4
- package/dist/chunks/monaco-buffer-fz6gq5y7.js +0 -4
- package/dist/chunks/monaco-setup-q4axkgj7.js +0 -4
- package/dist/chunks/notify-0xgtn8q1.js +0 -4
- package/dist/chunks/number-field-gw7sq8rn.js +0 -4
- package/dist/chunks/parse-897fvqah.js +0 -4
- package/dist/chunks/platform-v1qctbe6.js +0 -4
- package/dist/chunks/popover-8htra4er.js +0 -4
- package/dist/chunks/publish-panel-ym1fmgq5.js +0 -4
- package/dist/chunks/quick-search-a54e6t5n.js +0 -4
- package/dist/chunks/references-gmqp82fs.js +0 -4
- package/dist/chunks/right-panel-v7t9awbk.js +0 -4
- package/dist/chunks/section-registry-vhyf3zsr.js +0 -4
- package/dist/chunks/select-n3v7gwas.js +0 -4
- package/dist/chunks/split-pff8f3ze.js +0 -4
- package/dist/chunks/studio-0bhx5hz6.js +0 -5
- package/dist/chunks/studio-0k1ddnyy.js +0 -6
- package/dist/chunks/studio-1b04pd0j.js +0 -64
- package/dist/chunks/studio-4dwbj6gb.js +0 -5
- package/dist/chunks/studio-4tanh828.js +0 -5
- package/dist/chunks/studio-55h4mstj.js +0 -4
- package/dist/chunks/studio-5tnvjkz4.js +0 -5
- package/dist/chunks/studio-60dqgb0c.js +0 -5
- package/dist/chunks/studio-61dp09qg.js +0 -9
- package/dist/chunks/studio-63epcrj2.js +0 -5
- package/dist/chunks/studio-74k29dy9.js +0 -5
- package/dist/chunks/studio-7vg6jcd3.js +0 -5
- package/dist/chunks/studio-7zx31knw.js +0 -9
- package/dist/chunks/studio-8bxk97km.js +0 -5
- package/dist/chunks/studio-933e30n4.js +0 -5
- package/dist/chunks/studio-98wnwhbg.js +0 -5
- package/dist/chunks/studio-9mccjwjh.js +0 -14
- package/dist/chunks/studio-a2ke1e4t.js +0 -5
- package/dist/chunks/studio-e3a2a6v3.js +0 -4
- package/dist/chunks/studio-e81q1vb9.js +0 -5
- package/dist/chunks/studio-epgrmqqm.js +0 -5
- package/dist/chunks/studio-ery42sqr.js +0 -4
- package/dist/chunks/studio-g1shz58g.js +0 -5
- package/dist/chunks/studio-gf0fz03c.js +0 -5
- package/dist/chunks/studio-gjtpe62q.js +0 -6
- package/dist/chunks/studio-gkskhg7m.js +0 -5
- package/dist/chunks/studio-gx4dnjzd.js +0 -5
- package/dist/chunks/studio-j03zga3y.js +0 -9
- package/dist/chunks/studio-jhpxeckz.js +0 -5
- package/dist/chunks/studio-k01r7ykp.js +0 -5
- package/dist/chunks/studio-kk7h30ne.js +0 -7
- package/dist/chunks/studio-kt1zqney.js +0 -5
- package/dist/chunks/studio-m3cwhvye.js +0 -5
- package/dist/chunks/studio-mcayt6hz.js +0 -5
- package/dist/chunks/studio-myjcghv3.js +0 -5
- package/dist/chunks/studio-n8bxwc3y.js +0 -4
- package/dist/chunks/studio-ngm8gvpb.js +0 -5
- package/dist/chunks/studio-nj5a01jy.js +0 -928
- package/dist/chunks/studio-pcgz8heb.js +0 -5
- package/dist/chunks/studio-qcsq0t15.js +0 -5
- package/dist/chunks/studio-qkstvve9.js +0 -5
- package/dist/chunks/studio-qv1pwd3c.js +0 -5
- package/dist/chunks/studio-rc6dvxjb.js +0 -7
- package/dist/chunks/studio-s8dmmz66.js +0 -5
- package/dist/chunks/studio-sp5xzbj4.js +0 -6
- package/dist/chunks/studio-szsjbj0g.js +0 -5
- package/dist/chunks/studio-t1xzawhr.js +0 -16
- package/dist/chunks/studio-t6b6qe31.js +0 -5
- package/dist/chunks/studio-tdcprbqb.js +0 -5
- package/dist/chunks/studio-vyc0b4he.js +0 -10
- package/dist/chunks/studio-w0cgf6jg.js +0 -5
- package/dist/chunks/studio-w3hskzqk.js +0 -5
- package/dist/chunks/studio-xgrgcdyh.js +0 -9
- package/dist/chunks/studio-xz2yxfcb.js +0 -5
- package/dist/chunks/studio-y6n42tgs.js +0 -5
- package/dist/chunks/studio-yb560vxr.js +0 -5
- package/dist/chunks/studio-yn9f8vtx.js +0 -5
- package/dist/chunks/studio-yw05w8f0.js +0 -7
- package/dist/chunks/studio-z16sgavc.js +0 -5
- package/dist/chunks/studio-zyqn40w4.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/workspace-zt81g1ms.js +0 -4
- package/dist/chunks/ws-client-n2bh4hkf.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
|
|
package/src/surfaces/rail.ts
CHANGED
|
@@ -46,11 +46,10 @@ import { activeTab } from "../workspace/workspace";
|
|
|
46
46
|
import railDoc from "./rail.json";
|
|
47
47
|
|
|
48
48
|
import type { EffectScope } from "@vue/reactivity";
|
|
49
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
50
49
|
import type { PanelRecord } from "../panels/panel-registry";
|
|
51
50
|
import type { SurfaceHandle } from "../ui/surface";
|
|
52
51
|
|
|
53
|
-
registerSurface("rail", railDoc
|
|
52
|
+
registerSurface("rail", railDoc);
|
|
54
53
|
|
|
55
54
|
/** One rail button, as the surface reads it. */
|
|
56
55
|
interface RailButton {
|
|
@@ -72,7 +71,13 @@ interface RailGroupProjection {
|
|
|
72
71
|
panels: RailButton[];
|
|
73
72
|
}
|
|
74
73
|
|
|
75
|
-
|
|
74
|
+
/** The parts of the rail's scope recomputed from the registry and the shell on every render. */
|
|
75
|
+
type RailProjection = Pick<
|
|
76
|
+
RailScope,
|
|
77
|
+
"groups" | "libraryOpen" | "libraryVisible" | "settingsVisible"
|
|
78
|
+
>;
|
|
79
|
+
|
|
80
|
+
interface RailScope {
|
|
76
81
|
groups: RailGroupProjection[];
|
|
77
82
|
settingsVisible: boolean;
|
|
78
83
|
settingsOpen: boolean;
|
|
@@ -80,7 +85,7 @@ interface RailScope extends Record<string, unknown> {
|
|
|
80
85
|
libraryOpen: boolean;
|
|
81
86
|
openLibrary: () => void;
|
|
82
87
|
toggle: (id: string) => void;
|
|
83
|
-
openSettings: (anchor:
|
|
88
|
+
openSettings: (anchor: EventTarget | null) => void;
|
|
84
89
|
}
|
|
85
90
|
|
|
86
91
|
let _scope: EffectScope | null = null;
|
|
@@ -112,12 +117,7 @@ export function toggleRailPanel(panel: PanelRecord): void {
|
|
|
112
117
|
}
|
|
113
118
|
|
|
114
119
|
/** The rail, as the surface reads it, from the registry and the shell as they stand now. */
|
|
115
|
-
function project(): {
|
|
116
|
-
groups: RailGroupProjection[];
|
|
117
|
-
settingsVisible: boolean;
|
|
118
|
-
libraryVisible: boolean;
|
|
119
|
-
libraryOpen: boolean;
|
|
120
|
-
} {
|
|
120
|
+
function project(): RailProjection {
|
|
121
121
|
const ctx = panelContext();
|
|
122
122
|
const groups = railGroups(ctx).map((group, index) => ({
|
|
123
123
|
dividerAbove: index > 0,
|
|
@@ -146,14 +146,14 @@ const LIBRARY_COMMAND = "library.open";
|
|
|
146
146
|
|
|
147
147
|
/** The reactive scope the surface reads, made once. */
|
|
148
148
|
function state(): RailScope {
|
|
149
|
-
_state ??= reactive({
|
|
149
|
+
_state ??= reactive<RailScope>({
|
|
150
150
|
groups: [],
|
|
151
151
|
libraryOpen: false,
|
|
152
152
|
libraryVisible: false,
|
|
153
153
|
openLibrary: () => {
|
|
154
154
|
void runActiveReported(LIBRARY_COMMAND, undefined, "Navigator rail");
|
|
155
155
|
},
|
|
156
|
-
openSettings: (anchor:
|
|
156
|
+
openSettings: (anchor: EventTarget | null) => {
|
|
157
157
|
if (!(anchor instanceof HTMLElement)) {
|
|
158
158
|
return;
|
|
159
159
|
}
|
|
@@ -175,7 +175,7 @@ function state(): RailScope {
|
|
|
175
175
|
toggleRailPanel(panel);
|
|
176
176
|
}
|
|
177
177
|
},
|
|
178
|
-
})
|
|
178
|
+
});
|
|
179
179
|
return _state;
|
|
180
180
|
}
|
|
181
181
|
|
|
@@ -25,16 +25,9 @@ import { reactive } from "../reactivity";
|
|
|
25
25
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
26
|
import referenceDoc from "./reference-field.json";
|
|
27
27
|
|
|
28
|
-
import type {
|
|
29
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
28
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
30
29
|
|
|
31
|
-
registerSurface("reference-field", referenceDoc
|
|
32
|
-
|
|
33
|
-
/** One row of the picker: an entry id, the empty row, or the value that is not on disk. */
|
|
34
|
-
export interface ReferenceChoice {
|
|
35
|
-
value: string;
|
|
36
|
-
label: string;
|
|
37
|
-
}
|
|
30
|
+
registerSurface("reference-field", referenceDoc);
|
|
38
31
|
|
|
39
32
|
/** What the field says right now. Every field is the flow's, never a state it derives. */
|
|
40
33
|
export interface ReferenceFieldView {
|
|
@@ -50,7 +43,7 @@ export interface ReferenceFieldView {
|
|
|
50
43
|
/** The entry id the field holds, as a string. */
|
|
51
44
|
value: string;
|
|
52
45
|
/** The picker's rows, in the order they are offered. Empty on a text field. */
|
|
53
|
-
options:
|
|
46
|
+
options: SurfaceOption[];
|
|
54
47
|
/** True while the read is in flight: the picker is inert and says so in its one row. */
|
|
55
48
|
disabled: boolean;
|
|
56
49
|
/** A sentence under the control. Empty draws none. */
|
|
@@ -82,8 +75,7 @@ export interface ReferenceFieldSurfaceHandle {
|
|
|
82
75
|
dispose: () => void;
|
|
83
76
|
}
|
|
84
77
|
|
|
85
|
-
interface ReferenceScope
|
|
86
|
-
extends Record<string, unknown>, ReferenceFieldView, ReferenceFieldActions {}
|
|
78
|
+
interface ReferenceScope extends ReferenceFieldView, ReferenceFieldActions {}
|
|
87
79
|
|
|
88
80
|
/** The view a freshly mounted surface starts on: a picker that has not been told anything. */
|
|
89
81
|
function emptyView(): ReferenceFieldView {
|
|
@@ -112,7 +104,7 @@ export function mountReferenceFieldSurface(
|
|
|
112
104
|
actions: ReferenceFieldActions,
|
|
113
105
|
): ReferenceFieldSurfaceHandle {
|
|
114
106
|
host.textContent = "";
|
|
115
|
-
const scope = reactive<ReferenceScope>({ ...emptyView(), ...actions })
|
|
107
|
+
const scope: ReferenceScope = reactive<ReferenceScope>({ ...emptyView(), ...actions });
|
|
116
108
|
|
|
117
109
|
/** `null` while a mount is in flight — which is a standing surface, not a missing one. */
|
|
118
110
|
let handle: SurfaceHandle | null = null;
|
|
@@ -121,13 +113,17 @@ export function mountReferenceFieldSurface(
|
|
|
121
113
|
|
|
122
114
|
const mount = (): Promise<HTMLElement> =>
|
|
123
115
|
mountSurface("reference-field", scope, host).then((mounted) => {
|
|
116
|
+
/* SAFETY: `reference-field.json`'s root definition carries `tagName: "div"`, so the runtime
|
|
117
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare
|
|
118
|
+
string. */
|
|
119
|
+
const root = mounted.root as HTMLElement;
|
|
124
120
|
mounting = false;
|
|
125
121
|
if (disposed) {
|
|
126
122
|
mounted.dispose();
|
|
127
|
-
return
|
|
123
|
+
return root;
|
|
128
124
|
}
|
|
129
125
|
handle = mounted;
|
|
130
|
-
return
|
|
126
|
+
return root;
|
|
131
127
|
});
|
|
132
128
|
|
|
133
129
|
const ready = mount();
|