@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
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
* find-replace in those two call sites.
|
|
32
32
|
*/
|
|
33
33
|
|
|
34
|
+
import { isJsonPrimitive, isString } from "@jxsuite/schema/guards";
|
|
34
35
|
import { getPlatform } from "../platform";
|
|
35
36
|
import { flattenTree, nodeLabel, projectState } from "../store";
|
|
36
37
|
import { documentExtensions, formatByExtension, loadFormats } from "../format/format-host";
|
|
@@ -45,7 +46,7 @@ import { activeRegistry } from "../commands/active-registry";
|
|
|
45
46
|
import { runActiveReported, runReported } from "../commands/run-reported";
|
|
46
47
|
import type { PaletteMode } from "../commands/defaults";
|
|
47
48
|
import type { AnyCommand, CommandRegistry } from "../commands/registry";
|
|
48
|
-
import type {
|
|
49
|
+
import type { CommandArgValues } from "../commands/command-args";
|
|
49
50
|
import type { SurfaceHandle } from "../ui/surface";
|
|
50
51
|
import type { JxPath } from "../state";
|
|
51
52
|
|
|
@@ -123,6 +124,12 @@ export function modeSpec(mode: PaletteMode): PaletteModeSpec {
|
|
|
123
124
|
return MODE_SPEC.get(mode) ?? PALETTE_MODES[0]!;
|
|
124
125
|
}
|
|
125
126
|
|
|
127
|
+
/** The mode an input resolves to, and the query left once a prefix has moved into the chip. */
|
|
128
|
+
export interface ResolvedPaletteMode {
|
|
129
|
+
mode: PaletteMode;
|
|
130
|
+
query: string;
|
|
131
|
+
}
|
|
132
|
+
|
|
126
133
|
/**
|
|
127
134
|
* The mode a raw input actually addresses.
|
|
128
135
|
*
|
|
@@ -139,7 +146,7 @@ export function resolvePaletteMode(
|
|
|
139
146
|
requested: PaletteMode,
|
|
140
147
|
raw: string,
|
|
141
148
|
projectOpen: boolean,
|
|
142
|
-
):
|
|
149
|
+
): ResolvedPaletteMode {
|
|
143
150
|
const prefixed = PREFIXED_MODES.find((spec) => raw.startsWith(spec.prefix));
|
|
144
151
|
if (prefixed) {
|
|
145
152
|
return resolvePaletteMode(prefixed.mode, raw.slice(1), projectOpen);
|
|
@@ -220,7 +227,7 @@ export function rankBy<T>(items: readonly T[], query: string, key: (item: T) =>
|
|
|
220
227
|
|
|
221
228
|
/** One offered value for a command's single argument. */
|
|
222
229
|
export interface PaletteArgChoice {
|
|
223
|
-
value:
|
|
230
|
+
value: string | boolean;
|
|
224
231
|
label: string;
|
|
225
232
|
}
|
|
226
233
|
|
|
@@ -230,11 +237,6 @@ export type PaletteArgs =
|
|
|
230
237
|
| { kind: "choice"; name: string; choices: PaletteArgChoice[] }
|
|
231
238
|
| { kind: "unsupported" };
|
|
232
239
|
|
|
233
|
-
interface ArgsSchemaShape {
|
|
234
|
-
properties?: Record<string, { type?: string; enum?: readonly unknown[]; description?: string }>;
|
|
235
|
-
required?: readonly string[];
|
|
236
|
-
}
|
|
237
|
-
|
|
238
240
|
/**
|
|
239
241
|
* How a command's arguments are asked for.
|
|
240
242
|
*
|
|
@@ -246,7 +248,7 @@ interface ArgsSchemaShape {
|
|
|
246
248
|
* a command that gains an enum argument becomes promptable without anyone editing this file.
|
|
247
249
|
*/
|
|
248
250
|
export function paletteArgs(command: AnyCommand): PaletteArgs {
|
|
249
|
-
const schema = command.args
|
|
251
|
+
const schema = command.args;
|
|
250
252
|
const properties = schema?.properties;
|
|
251
253
|
if (!schema || !properties) {
|
|
252
254
|
return { kind: "none" };
|
|
@@ -308,7 +310,7 @@ const RECENT_COMMANDS_MAX = 6;
|
|
|
308
310
|
export function getRecentCommands(): string[] {
|
|
309
311
|
try {
|
|
310
312
|
const raw: unknown = JSON.parse(localStorage.getItem(RECENT_COMMANDS_KEY) || "[]");
|
|
311
|
-
return Array.isArray(raw) ? raw.filter((id) =>
|
|
313
|
+
return Array.isArray(raw) ? raw.filter((id) => isString(id)) : [];
|
|
312
314
|
} catch {
|
|
313
315
|
return [];
|
|
314
316
|
}
|
|
@@ -370,7 +372,7 @@ interface ArgRow {
|
|
|
370
372
|
kind: "arg";
|
|
371
373
|
commandId: string;
|
|
372
374
|
argName: string;
|
|
373
|
-
value:
|
|
375
|
+
value: string | boolean;
|
|
374
376
|
name: string;
|
|
375
377
|
detail: string;
|
|
376
378
|
}
|
|
@@ -437,7 +439,7 @@ export function isQuickSearchOpen(): boolean {
|
|
|
437
439
|
|
|
438
440
|
/** The project root scoping the palette, or null when no project is open. */
|
|
439
441
|
function scopeRoot(): string | null {
|
|
440
|
-
return projectState ?
|
|
442
|
+
return projectState ? projectState.projectRoot : null;
|
|
441
443
|
}
|
|
442
444
|
|
|
443
445
|
function hasProject(): boolean {
|
|
@@ -445,7 +447,7 @@ function hasProject(): boolean {
|
|
|
445
447
|
}
|
|
446
448
|
|
|
447
449
|
/** The mode and query the current input resolves to. */
|
|
448
|
-
function current():
|
|
450
|
+
function current(): ResolvedPaletteMode {
|
|
449
451
|
return resolvePaletteMode(_requested, _query, hasProject());
|
|
450
452
|
}
|
|
451
453
|
|
|
@@ -465,6 +467,15 @@ function shortenPath(path: string) {
|
|
|
465
467
|
return path;
|
|
466
468
|
}
|
|
467
469
|
|
|
470
|
+
/**
|
|
471
|
+
* What a file row reads from a search hit. `name` is optional because the cloud adapter hands back
|
|
472
|
+
* its response body unvalidated, so a hit without one falls back to the path's last segment.
|
|
473
|
+
*/
|
|
474
|
+
interface SearchHit {
|
|
475
|
+
path: string;
|
|
476
|
+
name?: string;
|
|
477
|
+
}
|
|
478
|
+
|
|
468
479
|
/**
|
|
469
480
|
* Fetch the project's document set once per open.
|
|
470
481
|
*
|
|
@@ -480,7 +491,7 @@ async function ensureFiles(): Promise<void> {
|
|
|
480
491
|
renderOverlay();
|
|
481
492
|
try {
|
|
482
493
|
await loadFormats();
|
|
483
|
-
const hits = await getPlatform().searchFiles("", documentExtensions());
|
|
494
|
+
const hits: readonly SearchHit[] = await getPlatform().searchFiles("", documentExtensions());
|
|
484
495
|
_files = hits.map((hit) => ({
|
|
485
496
|
kind: "file" as const,
|
|
486
497
|
path: hit.path,
|
|
@@ -566,23 +577,27 @@ function nodeRows(query: string): NodeRow[] {
|
|
|
566
577
|
const rows: NodeRow[] = flattenTree(tab.doc.document).map((row) => ({
|
|
567
578
|
kind: "node" as const,
|
|
568
579
|
path: row.path,
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
? String(row.node).slice(0, 60)
|
|
572
|
-
: nodeLabel(row.node as JxMutableNode),
|
|
580
|
+
// A primitive is exactly what `flattenTree` emits as a "text" row; every other row is a node.
|
|
581
|
+
name: isJsonPrimitive(row.node) ? String(row.node).slice(0, 60) : nodeLabel(row.node),
|
|
573
582
|
detail: row.nodeType,
|
|
574
583
|
}));
|
|
575
584
|
return rankBy(rows, query.trim(), (row) => row.name);
|
|
576
585
|
}
|
|
577
586
|
|
|
578
587
|
function modeRows(): ModeRow[] {
|
|
579
|
-
return PALETTE_MODES.
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
588
|
+
return PALETTE_MODES.flatMap((spec) =>
|
|
589
|
+
spec.mode === "picker"
|
|
590
|
+
? []
|
|
591
|
+
: [
|
|
592
|
+
{
|
|
593
|
+
kind: "mode" as const,
|
|
594
|
+
mode: spec.mode,
|
|
595
|
+
name: spec.chip,
|
|
596
|
+
detail: spec.description,
|
|
597
|
+
chord: spec.prefix,
|
|
598
|
+
},
|
|
599
|
+
],
|
|
600
|
+
);
|
|
586
601
|
}
|
|
587
602
|
|
|
588
603
|
function argRows(query: string): ArgRow[] {
|
|
@@ -598,8 +613,14 @@ function argRows(query: string): ArgRow[] {
|
|
|
598
613
|
return rankBy(rows, query.trim(), (row) => row.name);
|
|
599
614
|
}
|
|
600
615
|
|
|
616
|
+
/** What the list draws: its rows, and whether they are a "recent" listing rather than a search. */
|
|
617
|
+
interface CurrentRows {
|
|
618
|
+
rows: PaletteRow[];
|
|
619
|
+
showingRecent: boolean;
|
|
620
|
+
}
|
|
621
|
+
|
|
601
622
|
/** The rows for the current input, and whether they are a "recent" listing rather than a search. */
|
|
602
|
-
function currentRows():
|
|
623
|
+
function currentRows(): CurrentRows {
|
|
603
624
|
const { mode, query } = current();
|
|
604
625
|
if (_pending) {
|
|
605
626
|
return { rows: argRows(query), showingRecent: false };
|
|
@@ -669,7 +690,7 @@ function enterMode(mode: PaletteMode) {
|
|
|
669
690
|
void ensureFiles();
|
|
670
691
|
}
|
|
671
692
|
|
|
672
|
-
function runCommand(command: AnyCommand, args?:
|
|
693
|
+
function runCommand(command: AnyCommand, args?: CommandArgValues) {
|
|
673
694
|
const registry = activeRegistry();
|
|
674
695
|
if (!registry) {
|
|
675
696
|
return;
|
|
@@ -838,7 +859,7 @@ export interface PaletteRowProjection {
|
|
|
838
859
|
chord: string;
|
|
839
860
|
}
|
|
840
861
|
|
|
841
|
-
interface PaletteScope
|
|
862
|
+
interface PaletteScope {
|
|
842
863
|
open: boolean;
|
|
843
864
|
hasChip: boolean;
|
|
844
865
|
chipLabel: string;
|
|
@@ -863,10 +884,11 @@ interface PaletteScope extends Record<string, unknown> {
|
|
|
863
884
|
activate: () => void;
|
|
864
885
|
clearMode: () => void;
|
|
865
886
|
hover: (index: number) => void;
|
|
866
|
-
|
|
887
|
+
/** The `select` detail of the picked `jx-option`: its `value` attribute, a string. */
|
|
888
|
+
activateRow: (value: string) => void;
|
|
867
889
|
}
|
|
868
890
|
|
|
869
|
-
registerSurface("palette", paletteDoc
|
|
891
|
+
registerSurface("palette", paletteDoc);
|
|
870
892
|
|
|
871
893
|
let _scope: PaletteScope | null = null;
|
|
872
894
|
let _mount: Promise<SurfaceHandle> | null = null;
|
|
@@ -924,7 +946,7 @@ function scope(): PaletteScope {
|
|
|
924
946
|
rows: [],
|
|
925
947
|
sectionLabel: "",
|
|
926
948
|
showSection: false,
|
|
927
|
-
})
|
|
949
|
+
});
|
|
928
950
|
return _scope;
|
|
929
951
|
}
|
|
930
952
|
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* already holds, so there is nothing to withhold.
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
-
import { getNodeAtPath, nodeLabel, rightPanel } from "../store";
|
|
30
|
+
import { getNodeAtPath, nodeLabel, requireShellRef, rightPanel } from "../store";
|
|
31
31
|
import { effect, effectScope, reactive } from "../reactivity";
|
|
32
32
|
import { activeTab } from "../workspace/workspace";
|
|
33
33
|
import { primarySelection } from "../tabs/selection";
|
|
@@ -74,7 +74,7 @@ let _dock: InspectorDockHandle | null = null;
|
|
|
74
74
|
* reports whether the assistant is showing, and a plain field would leave that button lying on the
|
|
75
75
|
* welcome screen — which is the whole class of bug `shell.ts` was split out to end.
|
|
76
76
|
*/
|
|
77
|
-
const _detached = reactive({ tab: DEFAULT_INSPECTOR_TAB
|
|
77
|
+
const _detached = reactive({ tab: DEFAULT_INSPECTOR_TAB });
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
80
|
* Hand one tab's body host to its owner, once, and never let that stop the dock.
|
|
@@ -158,7 +158,7 @@ function tabViews(selected: InspectorTabId): InspectorTabView[] {
|
|
|
158
158
|
*/
|
|
159
159
|
export function mount(ctx: RightPanelCtx) {
|
|
160
160
|
_dock = mountInspectorDock(
|
|
161
|
-
rightPanel,
|
|
161
|
+
requireShellRef(rightPanel, "right-panel"),
|
|
162
162
|
values(),
|
|
163
163
|
{ selectTab: (id) => selectFromStrip(id) },
|
|
164
164
|
{ onBody: (tabId, host) => bindBody(ctx, tabId, host) },
|
package/src/panels/seo-modal.ts
CHANGED
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
*/
|
|
33
33
|
|
|
34
34
|
import { activeRegistry } from "../commands/active-registry";
|
|
35
|
+
import { HEAD_EDIT_DEBOUNCE } from "../ui/timing";
|
|
35
36
|
import { previewAssetSrc } from "../canvas/asset-refs";
|
|
36
37
|
import { getPlatform } from "../platform";
|
|
37
38
|
import { layerHost } from "../ui/layers";
|
|
@@ -232,15 +233,6 @@ function writeField(
|
|
|
232
233
|
applyMutation((doc: JxMutableNode) => upsertMeta(doc, field.attr, field.key, trimmed));
|
|
233
234
|
}
|
|
234
235
|
|
|
235
|
-
/**
|
|
236
|
-
* How long a keystroke waits before it is written.
|
|
237
|
-
*
|
|
238
|
-
* Every commit is a document mutation, and the previews repaint from it, so a write per keystroke
|
|
239
|
-
* would redraw the picture mid-word. A `change` — the control losing focus, or its clear button —
|
|
240
|
-
* cancels the timer and commits immediately, which is why nothing is ever lost to the debounce.
|
|
241
|
-
*/
|
|
242
|
-
const EDIT_DEBOUNCE_MS = 300;
|
|
243
|
-
|
|
244
236
|
/** One timer per field key, so editing Description then Title does not cancel the first write. */
|
|
245
237
|
const _pending = new Map<string, ReturnType<typeof setTimeout>>();
|
|
246
238
|
|
|
@@ -300,20 +292,24 @@ let _tab: Tab | null = null;
|
|
|
300
292
|
/** Where each chip that leads somewhere goes, rebuilt with the view it was drawn from. */
|
|
301
293
|
let _donors = new Map<string, () => void>();
|
|
302
294
|
|
|
295
|
+
/** What the SEO body reads and writes for one tab: its merged head, and how an edit lands. */
|
|
296
|
+
interface SeoContext {
|
|
297
|
+
headDoc: JxMutableNode;
|
|
298
|
+
head: JxHeadEntry[];
|
|
299
|
+
applyMutation: (fn: (doc: JxMutableNode) => void) => void;
|
|
300
|
+
}
|
|
301
|
+
|
|
303
302
|
/**
|
|
304
303
|
* What the SEO body needs from a tab, resolved once.
|
|
305
304
|
*
|
|
306
305
|
* Both realms in one place: a markdown page keeps its head material in frontmatter and a JSON one
|
|
307
306
|
* in root properties, and `buildHeadDoc` is the card's own view of that difference.
|
|
308
307
|
*/
|
|
309
|
-
function seoContextFor(tab: Tab): {
|
|
310
|
-
headDoc: JxMutableNode;
|
|
311
|
-
head: JxHeadEntry[];
|
|
312
|
-
applyMutation: (fn: (doc: JxMutableNode) => void) => void;
|
|
313
|
-
} {
|
|
308
|
+
function seoContextFor(tab: Tab): SeoContext {
|
|
314
309
|
const isContent = tab.doc.mode === "content";
|
|
315
|
-
const
|
|
316
|
-
|
|
310
|
+
const headDoc = isContent
|
|
311
|
+
? buildHeadDoc(tab.doc.document, tab.doc.content.frontmatter)
|
|
312
|
+
: tab.doc.document;
|
|
317
313
|
return {
|
|
318
314
|
applyMutation: isContent
|
|
319
315
|
? (fn: (doc: JxMutableNode) => void) => applyContentMutation(tab, renderSeoModal, fn)
|
|
@@ -495,7 +491,7 @@ export function openSeoModal(tab: Tab): void {
|
|
|
495
491
|
setTimeout(() => {
|
|
496
492
|
_pending.delete(key);
|
|
497
493
|
commitField(key, value);
|
|
498
|
-
},
|
|
494
|
+
}, HEAD_EDIT_DEBOUNCE),
|
|
499
495
|
);
|
|
500
496
|
},
|
|
501
497
|
onOpenDonor: (key: string) => {
|
|
@@ -45,19 +45,15 @@ import { openMenu } from "../surfaces/menu";
|
|
|
45
45
|
import { REGION_ATTR } from "../ui/regions";
|
|
46
46
|
import { rectOf } from "../utils/geometry";
|
|
47
47
|
|
|
48
|
+
import type { CommandArgValues } from "../commands/command-args";
|
|
48
49
|
import type { CommandRegistry } from "../commands/registry";
|
|
49
50
|
import type { Level } from "../commands/levels";
|
|
50
51
|
import type { MenuHandle, MenuRowProjection } from "../surfaces/menu";
|
|
52
|
+
import type { KeyedLabel } from "../ui/surface";
|
|
51
53
|
|
|
52
54
|
/** The placement the rail's gear renders. One definition site for the string. */
|
|
53
55
|
export const SETTINGS_MENU_PLACEMENT = "settings/menu" as const;
|
|
54
56
|
|
|
55
|
-
/** One value a parent command's `section` argument accepts. */
|
|
56
|
-
interface MenuSection {
|
|
57
|
-
key: string;
|
|
58
|
-
label: string;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
57
|
let _menu: MenuHandle | null = null;
|
|
62
58
|
let _unsubscribe: (() => void) | null = null;
|
|
63
59
|
let _rerender: (() => void) | null = null;
|
|
@@ -73,16 +69,20 @@ let _rerender: (() => void) | null = null;
|
|
|
73
69
|
* `settings.open` refuses anything absent from `settingsSectionKeys()` — so a submenu row can never
|
|
74
70
|
* name a value its own command would refuse.
|
|
75
71
|
*/
|
|
76
|
-
const SECTION_SOURCES:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
const SECTION_SOURCES: ReadonlyMap<string, () => readonly KeyedLabel[]> = new Map([
|
|
73
|
+
[
|
|
74
|
+
"app.preferences",
|
|
75
|
+
() => PREFERENCES_SECTIONS.map((section) => ({ key: section.id, label: section.title })),
|
|
76
|
+
],
|
|
77
|
+
[
|
|
78
|
+
"settings.open",
|
|
79
|
+
() => sortedSettingsSections().map((section) => ({ key: section.key, label: section.label })),
|
|
80
|
+
],
|
|
81
|
+
]);
|
|
82
82
|
|
|
83
83
|
/** The sections a row offers, or none. */
|
|
84
|
-
function menuSectionsFor(id: string): readonly
|
|
85
|
-
return SECTION_SOURCES
|
|
84
|
+
function menuSectionsFor(id: string): readonly KeyedLabel[] {
|
|
85
|
+
return SECTION_SOURCES.get(id)?.() ?? [];
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
// ─── Running ──────────────────────────────────────────────────────────────────
|
|
@@ -95,7 +95,7 @@ function menuSectionsFor(id: string): readonly MenuSection[] {
|
|
|
95
95
|
* click throws BEFORE `run`, synchronously. `commands/run-reported.ts` catches both and files the
|
|
96
96
|
* sentence in Problems, under this menu's name.
|
|
97
97
|
*/
|
|
98
|
-
function runRow(id: string, args?:
|
|
98
|
+
function runRow(id: string, args?: CommandArgValues): void {
|
|
99
99
|
const registry = activeRegistry();
|
|
100
100
|
if (!registry) {
|
|
101
101
|
return;
|