@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
|
@@ -71,7 +71,9 @@ import { diffShowsCode } from "../canvas/diff-view";
|
|
|
71
71
|
import { canRenderComparison } from "./git-diff-open";
|
|
72
72
|
import { shell } from "../shell";
|
|
73
73
|
import { paneRegion } from "../ui/regions";
|
|
74
|
+
import { isNumber, isString } from "@jxsuite/schema/guards";
|
|
74
75
|
import {
|
|
76
|
+
CANVAS_VIEWS,
|
|
75
77
|
fitToScreen,
|
|
76
78
|
getFit,
|
|
77
79
|
resetZoom,
|
|
@@ -95,8 +97,8 @@ import { componentPropEntries, isComponentDoc } from "../component-props";
|
|
|
95
97
|
import { mediaDisplayName } from "./shared";
|
|
96
98
|
import type { CanvasView, FitMode } from "../canvas/canvas-utils";
|
|
97
99
|
import { EDITOR_KIND_LABELS } from "../commands/context";
|
|
98
|
-
import type { EditorKind } from "../commands/context";
|
|
99
100
|
import type { ParamValues } from "../page-params";
|
|
101
|
+
import type { CommandArgValues } from "../commands/command-args";
|
|
100
102
|
import type { Tab } from "../tabs/tab";
|
|
101
103
|
import type { ResolvedI18n } from "@jxsuite/schema/locale";
|
|
102
104
|
import type { JsonValue } from "../types";
|
|
@@ -257,7 +259,7 @@ export function mount(host: HTMLElement, ctx: PaneContextCtx) {
|
|
|
257
259
|
}
|
|
258
260
|
// Read reactive properties to establish tracking — mirrors the toolbar's subset.
|
|
259
261
|
void tab.doc.document;
|
|
260
|
-
void tab.doc.document
|
|
262
|
+
void tab.doc.document.$layout;
|
|
261
263
|
void tab.doc.mode;
|
|
262
264
|
void tab.documentPath;
|
|
263
265
|
void tab.capabilities.modes;
|
|
@@ -360,13 +362,13 @@ function renderPane(paneId: string, host: HTMLElement) {
|
|
|
360
362
|
}
|
|
361
363
|
try {
|
|
362
364
|
const tab = tabOfPane(paneId);
|
|
363
|
-
const show =
|
|
365
|
+
const show = tab !== null && wantsContextBar(tab);
|
|
364
366
|
if (!show) {
|
|
365
367
|
disposePane(paneId);
|
|
366
368
|
applyPaneContextOffset(0, host);
|
|
367
369
|
return;
|
|
368
370
|
}
|
|
369
|
-
const view = viewFor(tab
|
|
371
|
+
const view = viewFor(tab, paneId, _ctx);
|
|
370
372
|
let surface = _surfaces.get(paneId);
|
|
371
373
|
if (!surface || !surface.connected()) {
|
|
372
374
|
disposePane(paneId);
|
|
@@ -458,12 +460,11 @@ function openPresetMenu(paneId: string, anchor: HTMLElement): void {
|
|
|
458
460
|
* `check-lens-mutants.ts` said so, by surviving.
|
|
459
461
|
*/
|
|
460
462
|
function menuRow(row: PresetRow): MenuRowProjection {
|
|
461
|
-
|
|
463
|
+
const projection: MenuRowProjection = {
|
|
462
464
|
destructive: false,
|
|
463
465
|
disabled: row.disabled !== null,
|
|
464
466
|
dividerAbove: false,
|
|
465
467
|
id: rowId(row),
|
|
466
|
-
...(row.disabled === null ? {} : { requires: row.disabled }),
|
|
467
468
|
run: () => {
|
|
468
469
|
/* THE PANE THE MENU IS ABOUT, before the verb that resolves the focus runs.
|
|
469
470
|
See {@link PresetRow.pane}: all three of these commands take the focused pane as their
|
|
@@ -476,6 +477,10 @@ function menuRow(row: PresetRow): MenuRowProjection {
|
|
|
476
477
|
},
|
|
477
478
|
title: row.label,
|
|
478
479
|
};
|
|
480
|
+
if (row.disabled !== null) {
|
|
481
|
+
projection.requires = row.disabled;
|
|
482
|
+
}
|
|
483
|
+
return projection;
|
|
479
484
|
}
|
|
480
485
|
|
|
481
486
|
/**
|
|
@@ -487,7 +492,7 @@ function rowId(row: PresetRow): string {
|
|
|
487
492
|
const parts = [row.command];
|
|
488
493
|
for (const key of ["preset", "media", "locale"] as const) {
|
|
489
494
|
const value = row.args[key];
|
|
490
|
-
if (
|
|
495
|
+
if (isString(value)) {
|
|
491
496
|
parts.push(value);
|
|
492
497
|
}
|
|
493
498
|
}
|
|
@@ -498,7 +503,7 @@ function rowId(row: PresetRow): string {
|
|
|
498
503
|
export interface PresetRow {
|
|
499
504
|
label: string;
|
|
500
505
|
command: string;
|
|
501
|
-
args:
|
|
506
|
+
args: CommandArgValues;
|
|
502
507
|
/**
|
|
503
508
|
* The pane this row is ABOUT — the one whose ⟲ opened the menu.
|
|
504
509
|
*
|
|
@@ -824,12 +829,12 @@ function localeOf(tab: Tab | null): PaneLocale | null {
|
|
|
824
829
|
function contextAxis(tab: Tab, paneId: string, ctx: PaneContextCtx): Partial<PaneContextView> {
|
|
825
830
|
const { ui } = tab.session;
|
|
826
831
|
const { featureQueries, sizeBreakpoints } = ctx.parseMediaEntries(
|
|
827
|
-
getEffectiveMedia(tab.doc.document
|
|
832
|
+
getEffectiveMedia(tab.doc.document.$media),
|
|
828
833
|
);
|
|
829
834
|
const schemeQueries = featureQueries.filter(({ query }) => isSchemeQuery(query));
|
|
830
835
|
const plainQueries = featureQueries.filter(({ query }) => !isSchemeQuery(query));
|
|
831
|
-
const scheme =
|
|
832
|
-
const activeMedia =
|
|
836
|
+
const scheme = ui.previewColorScheme;
|
|
837
|
+
const { activeMedia } = ui;
|
|
833
838
|
const sizeLabel = activeMedia ? mediaDisplayName(activeMedia) : "Base";
|
|
834
839
|
const schemeLabel = SCHEMES.find(([value]) => value === scheme)?.[1] ?? "Auto";
|
|
835
840
|
const locale = localeOf(tab);
|
|
@@ -843,7 +848,7 @@ function contextAxis(tab: Tab, paneId: string, ctx: PaneContextCtx): Partial<Pan
|
|
|
843
848
|
]
|
|
844
849
|
.filter((part) => part !== null)
|
|
845
850
|
.join(" · ");
|
|
846
|
-
const hasLayout = isPageDoc(tab) && Boolean(getEffectiveLayoutPath(tab.doc.document
|
|
851
|
+
const hasLayout = isPageDoc(tab) && Boolean(getEffectiveLayoutPath(tab.doc.document.$layout));
|
|
847
852
|
const page = isPageDoc(tab);
|
|
848
853
|
const params = page ? paramRows(tab) : [];
|
|
849
854
|
const props = page ? [] : propRows(tab, paneId);
|
|
@@ -851,7 +856,7 @@ function contextAxis(tab: Tab, paneId: string, ctx: PaneContextCtx): Partial<Pan
|
|
|
851
856
|
way the Context trigger says `Base · Auto` — a chevron with no reading is a control you have to
|
|
852
857
|
open in order to learn whether it was worth opening. */
|
|
853
858
|
const resolvingSet = page
|
|
854
|
-
? Object.values(ui.previewParams
|
|
859
|
+
? Object.values(ui.previewParams).filter((v) => v !== "").length
|
|
855
860
|
: Object.keys(ui.previewProps ?? {}).length;
|
|
856
861
|
const hasResolving = page ? params.length > 0 : props.length > 0;
|
|
857
862
|
|
|
@@ -965,7 +970,7 @@ const FIT_CHOICES: readonly { value: string; fit: FitMode; label: string }[] = [
|
|
|
965
970
|
|
|
966
971
|
/** Which entry the pod shows as chosen — a numeric fit reads as "actual size" only at 1. */
|
|
967
972
|
function fitChoiceValue(fit: FitMode): string {
|
|
968
|
-
if (
|
|
973
|
+
if (isNumber(fit)) {
|
|
969
974
|
return fit === 1 ? "actual" : "";
|
|
970
975
|
}
|
|
971
976
|
return fit;
|
|
@@ -1006,7 +1011,7 @@ function podFor(tab: Tab, paneId: string): Partial<PaneContextView> {
|
|
|
1006
1011
|
computed from the side pane's own zoom, and its "100%" button reset the primary. */
|
|
1007
1012
|
const surface = surfaceForPane(paneId);
|
|
1008
1013
|
if (mode === "edit") {
|
|
1009
|
-
const editZoom = tab.session.ui
|
|
1014
|
+
const { editZoom } = tab.session.ui;
|
|
1010
1015
|
return { podState: "shown", zoomLabel: `${Math.round(editZoom * 100)}%` };
|
|
1011
1016
|
}
|
|
1012
1017
|
if (!STAGE_ZOOM_MODES.has(mode)) {
|
|
@@ -1041,7 +1046,7 @@ function podFor(tab: Tab, paneId: string): Partial<PaneContextView> {
|
|
|
1041
1046
|
* `__jxAutomation` had no name for it. Going through the registry makes the control and the verb
|
|
1042
1047
|
* one thing (one definition site per action, §13) and gets the breakpoint refusal for free.
|
|
1043
1048
|
*/
|
|
1044
|
-
function runContextCommand(paneId: string, id: string, args:
|
|
1049
|
+
function runContextCommand(paneId: string, id: string, args: CommandArgValues): void {
|
|
1045
1050
|
// THIS pane, named. The bar is drawn once per pane and the side bar's controls write the side
|
|
1046
1051
|
// Pane's tab; a verb defaulting to the focused pane would have made the side bar edit the
|
|
1047
1052
|
// Foreground document the moment its control became a command.
|
|
@@ -1063,7 +1068,8 @@ function actionsFor(paneId: string, ctx: PaneContextCtx): PaneContextActions {
|
|
|
1063
1068
|
if (!tab) {
|
|
1064
1069
|
return;
|
|
1065
1070
|
}
|
|
1066
|
-
const
|
|
1071
|
+
const editorKind = editorKindsOf(tab).find((candidate) => candidate === kind);
|
|
1072
|
+
const mode = editorKind && modeForEditorKind(tab, editorKind);
|
|
1067
1073
|
if (!mode) {
|
|
1068
1074
|
return;
|
|
1069
1075
|
}
|
|
@@ -1086,8 +1092,9 @@ function actionsFor(paneId: string, ctx: PaneContextCtx): PaneContextActions {
|
|
|
1086
1092
|
},
|
|
1087
1093
|
chooseView: (value) => {
|
|
1088
1094
|
const tab = tabNow();
|
|
1089
|
-
|
|
1090
|
-
|
|
1095
|
+
const view = CANVAS_VIEWS.find((candidate) => candidate === value);
|
|
1096
|
+
if (tab && view) {
|
|
1097
|
+
setCanvasView(tab, view, ctx.setCanvasMode);
|
|
1091
1098
|
}
|
|
1092
1099
|
},
|
|
1093
1100
|
exportFile: ctx.exportFile,
|
|
@@ -1285,7 +1292,7 @@ function paramValuesFor(tab: Tab): ParamValues | null {
|
|
|
1285
1292
|
* @param {ParamValues} values
|
|
1286
1293
|
*/
|
|
1287
1294
|
function autoSelectParams(tab: Tab, values: ParamValues) {
|
|
1288
|
-
const current = tab.session.ui.previewParams
|
|
1295
|
+
const current = tab.session.ui.previewParams;
|
|
1289
1296
|
const additions: Record<string, string> = {};
|
|
1290
1297
|
for (const [name, list] of Object.entries(values)) {
|
|
1291
1298
|
if (!current[name] && list.length > 0) {
|
|
@@ -1314,7 +1321,7 @@ function paramRows(tab: Tab): PaneContextView["params"] {
|
|
|
1314
1321
|
label: `Preview value for [${name}]`,
|
|
1315
1322
|
name,
|
|
1316
1323
|
options: (values?.[name] ?? []).map((value: string) => ({ label: value, value })),
|
|
1317
|
-
value: previewParams
|
|
1324
|
+
value: previewParams[name] ?? "",
|
|
1318
1325
|
}));
|
|
1319
1326
|
}
|
|
1320
1327
|
|
|
@@ -1330,6 +1337,8 @@ function paramRows(tab: Tab): PaneContextView["params"] {
|
|
|
1330
1337
|
*/
|
|
1331
1338
|
function parsePropValue(raw: string): JsonValue {
|
|
1332
1339
|
try {
|
|
1340
|
+
// SAFETY: JSON.parse only ever yields null, a boolean, a number, a string, an array or a plain
|
|
1341
|
+
// Object of those, which is exactly the JsonValue union.
|
|
1333
1342
|
return JSON.parse(raw) as JsonValue;
|
|
1334
1343
|
} catch {
|
|
1335
1344
|
return raw;
|
|
@@ -1347,7 +1356,7 @@ function propRows(tab: Tab, paneId: string): PaneContextView["props"] {
|
|
|
1347
1356
|
}
|
|
1348
1357
|
const { previewProps } = tab.session.ui;
|
|
1349
1358
|
const display = (v: JsonValue | undefined) =>
|
|
1350
|
-
v === undefined ? "" :
|
|
1359
|
+
v === undefined ? "" : isString(v) ? v : JSON.stringify(v);
|
|
1351
1360
|
return componentPropEntries(doc).map(({ name }) => ({
|
|
1352
1361
|
key: name,
|
|
1353
1362
|
label: `Test value for ${name}`,
|
package/src/panels/pane-grid.ts
CHANGED
|
@@ -62,6 +62,7 @@ import {
|
|
|
62
62
|
dropTargetForElements,
|
|
63
63
|
monitorForElements,
|
|
64
64
|
} from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
65
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
65
66
|
import { isTabDropSource } from "./tab-drop";
|
|
66
67
|
import { rectOf } from "../utils/geometry";
|
|
67
68
|
import {
|
|
@@ -100,8 +101,22 @@ export interface PaneCell {
|
|
|
100
101
|
surface: CanvasSurface;
|
|
101
102
|
}
|
|
102
103
|
|
|
103
|
-
/**
|
|
104
|
-
|
|
104
|
+
/**
|
|
105
|
+
* A cell's record while the runtime fills it in, plus the disposers its stage gestures and its drop
|
|
106
|
+
* zone live behind.
|
|
107
|
+
*
|
|
108
|
+
* Every element field starts null and is written once, when the runtime creates that box (see
|
|
109
|
+
* {@link cellPart}). The runtime creates a row's nodes depth-first inside one synchronous render
|
|
110
|
+
* pass, so by the time anything outside that pass asks, {@link isDrawnCell} holds.
|
|
111
|
+
*/
|
|
112
|
+
interface CellState {
|
|
113
|
+
paneId: string;
|
|
114
|
+
root: HTMLElement | null;
|
|
115
|
+
strip: HTMLElement | null;
|
|
116
|
+
chrome: HTMLElement | null;
|
|
117
|
+
stage: HTMLElement | null;
|
|
118
|
+
dropZone: HTMLElement | null;
|
|
119
|
+
surface: CanvasSurface | null;
|
|
105
120
|
/** Stage-gesture disposer, live between the stage's creation and the cell's disposal. */
|
|
106
121
|
releaseGestures: (() => void) | null;
|
|
107
122
|
/** The drop zone's pragmatic registration, live between its creation and the cell's disposal. */
|
|
@@ -128,9 +143,22 @@ let _scope: EffectScope | null = null;
|
|
|
128
143
|
*/
|
|
129
144
|
let _dragMonitor: (() => void) | null = null;
|
|
130
145
|
|
|
146
|
+
/** Whether every box of a cell has been created, which is what makes it a {@link PaneCell}. */
|
|
147
|
+
function isDrawnCell(cell: CellState): cell is CellState & PaneCell {
|
|
148
|
+
return (
|
|
149
|
+
cell.root !== null &&
|
|
150
|
+
cell.strip !== null &&
|
|
151
|
+
cell.chrome !== null &&
|
|
152
|
+
cell.stage !== null &&
|
|
153
|
+
cell.dropZone !== null &&
|
|
154
|
+
cell.surface !== null
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
|
|
131
158
|
/** The cell a pane is drawn in, or null. Test-visible, and the bootstrap's handle on the primary. */
|
|
132
159
|
export function cellForPane(paneId: string): PaneCell | null {
|
|
133
|
-
|
|
160
|
+
const cell = _cells.get(paneId);
|
|
161
|
+
return cell !== undefined && isDrawnCell(cell) ? cell : null;
|
|
134
162
|
}
|
|
135
163
|
|
|
136
164
|
/**
|
|
@@ -149,9 +177,9 @@ export function paneGridReady(): Promise<void> {
|
|
|
149
177
|
* The record for a pane, created when its cell's outermost box is, and reused for the life of the
|
|
150
178
|
* cell.
|
|
151
179
|
*
|
|
152
|
-
* Every element field
|
|
153
|
-
*
|
|
154
|
-
*
|
|
180
|
+
* Every element field starts null: the runtime creates a row's nodes depth-first inside one
|
|
181
|
+
* synchronous render pass, so the record is complete before anything outside that pass can hold it
|
|
182
|
+
* through {@link cellForPane}.
|
|
155
183
|
*/
|
|
156
184
|
function cellState(paneId: string): CellState {
|
|
157
185
|
const existing = _cells.get(paneId);
|
|
@@ -159,15 +187,15 @@ function cellState(paneId: string): CellState {
|
|
|
159
187
|
return existing;
|
|
160
188
|
}
|
|
161
189
|
const cell: CellState = {
|
|
162
|
-
chrome: null
|
|
163
|
-
dropZone: null
|
|
190
|
+
chrome: null,
|
|
191
|
+
dropZone: null,
|
|
164
192
|
paneId,
|
|
165
193
|
releaseDropZone: null,
|
|
166
194
|
releaseGestures: null,
|
|
167
|
-
root: null
|
|
168
|
-
stage: null
|
|
169
|
-
strip: null
|
|
170
|
-
surface: null
|
|
195
|
+
root: null,
|
|
196
|
+
stage: null,
|
|
197
|
+
strip: null,
|
|
198
|
+
surface: null,
|
|
171
199
|
};
|
|
172
200
|
_cells.set(paneId, cell);
|
|
173
201
|
return cell;
|
|
@@ -229,12 +257,16 @@ function watchPaneFocus(paneId: string, root: HTMLElement): void {
|
|
|
229
257
|
*/
|
|
230
258
|
function attachStage(cell: CellState, stage: HTMLElement): void {
|
|
231
259
|
cell.stage = stage;
|
|
232
|
-
|
|
260
|
+
const surface = createPaneSurface(cell.paneId);
|
|
261
|
+
cell.surface = surface;
|
|
233
262
|
registerCanvasSurface(cell.paneId, stage);
|
|
234
|
-
cell.releaseGestures = installStageGestures(
|
|
263
|
+
cell.releaseGestures = installStageGestures(surface);
|
|
235
264
|
scheduleCanvasRender(cell.paneId);
|
|
236
265
|
}
|
|
237
266
|
|
|
267
|
+
/** What a cell's drop zone reports to a drag: refused, or the pane a drop would split beside. */
|
|
268
|
+
type PaneEdgeData = { type: "pane-edge-refused" } | { paneId: string; type: "pane-edge" };
|
|
269
|
+
|
|
238
270
|
/**
|
|
239
271
|
* The RIGHT BAND of `paneId`'s cell, and only while it is legal to drop there: the grid is still
|
|
240
272
|
* under {@link MAX_PANES}, and `paneId` names the LAST pane — the one a second pane would sit
|
|
@@ -245,11 +277,7 @@ function attachStage(cell: CellState, stage: HTMLElement): void {
|
|
|
245
277
|
* that the rest of the stage keeps ordinary canvas gestures — a drag never reaches this at all
|
|
246
278
|
* unless `canDrop` already accepted it, so the band only ever competes with itself.
|
|
247
279
|
*/
|
|
248
|
-
function edgeData(
|
|
249
|
-
paneId: string,
|
|
250
|
-
input: { clientX: number },
|
|
251
|
-
element: HTMLElement,
|
|
252
|
-
): Record<string, unknown> {
|
|
280
|
+
function edgeData(paneId: string, input: { clientX: number }, element: HTMLElement): PaneEdgeData {
|
|
253
281
|
if (workspace.panes.length >= MAX_PANES || workspace.panes.at(-1)?.id !== paneId) {
|
|
254
282
|
return { type: "pane-edge-refused" };
|
|
255
283
|
}
|
|
@@ -467,7 +495,8 @@ export function mount(): void {
|
|
|
467
495
|
},
|
|
468
496
|
onDrag({ location }) {
|
|
469
497
|
const [target] = location.current.dropTargets;
|
|
470
|
-
const
|
|
498
|
+
const paneId = target?.data.paneId;
|
|
499
|
+
const edgePane = target?.data.type === "pane-edge" && isString(paneId) ? paneId : "";
|
|
471
500
|
_surface?.drag({ armed: true, edgePane });
|
|
472
501
|
},
|
|
473
502
|
onDragStart() {
|
|
@@ -35,15 +35,13 @@ import { activeTab } from "../workspace/workspace";
|
|
|
35
35
|
import type { Level } from "../commands/levels";
|
|
36
36
|
import type { CommandContext } from "../commands/context";
|
|
37
37
|
import type { GitDiffState } from "../types";
|
|
38
|
-
import type { JxMutableNode } from "@jxsuite/schema/types";
|
|
38
|
+
import type { JxMutableNode, JxStateDefinition } from "@jxsuite/schema/types";
|
|
39
39
|
import type { JxPath } from "../state";
|
|
40
40
|
import type { Tab, TabUi } from "../tabs/tab";
|
|
41
41
|
import type { nothing, TemplateResult } from "lit-html";
|
|
42
|
-
import type { renderFilesTemplate } from "../files/files";
|
|
43
|
-
import type { renderGitPanel } from "./git-panel";
|
|
44
|
-
import type { renderHeadTemplate } from "./head-panel";
|
|
45
|
-
import type { renderImportsTemplate } from "./imports-panel";
|
|
46
42
|
import type { mountSignalsPanel } from "./signals-panel";
|
|
43
|
+
import type webdataJson from "../../data/webdata.json";
|
|
44
|
+
import type { DockDeclaration } from "../commands/budget";
|
|
47
45
|
|
|
48
46
|
/**
|
|
49
47
|
* The three docks that host panels.
|
|
@@ -61,16 +59,12 @@ export type PanelDock = "navigator" | "inspector" | "bottom";
|
|
|
61
59
|
*
|
|
62
60
|
* This is `left-panel.ts`'s old `LeftPanelCtx`, moved to the registry because it is now the panel
|
|
63
61
|
* CONTRACT rather than one orchestrator's private argument list. `studio.ts` still builds it: the
|
|
64
|
-
*
|
|
65
|
-
*
|
|
62
|
+
* hooks it injects close over bootstrap state, and injecting them is what keeps `panels/*` free of
|
|
63
|
+
* an import cycle back through `studio.ts`.
|
|
66
64
|
*/
|
|
67
65
|
export interface NavigatorPanelDeps {
|
|
68
66
|
getCanvasMode: () => string;
|
|
69
67
|
setCanvasMode: (tab: Tab | null, mode: string) => void;
|
|
70
|
-
// Typed against their implementations so every call site stays checked. These are type-only
|
|
71
|
-
// Imports, so they are erased — the modules themselves are never pulled in through this file.
|
|
72
|
-
renderImportsTemplate: typeof renderImportsTemplate;
|
|
73
|
-
renderFilesTemplate: typeof renderFilesTemplate;
|
|
74
68
|
/**
|
|
75
69
|
* Draw the Data panel into the painted host.
|
|
76
70
|
*
|
|
@@ -79,20 +73,18 @@ export interface NavigatorPanelDeps {
|
|
|
79
73
|
* import would close a cycle through `formula-workspace.ts`. A type-only import erases.
|
|
80
74
|
*/
|
|
81
75
|
mountSignalsPanel: typeof mountSignalsPanel;
|
|
82
|
-
renderHeadTemplate: typeof renderHeadTemplate;
|
|
83
|
-
renderGitPanel: typeof renderGitPanel;
|
|
84
76
|
renderCanvas: () => void;
|
|
85
77
|
/** Canvas re-render that also lets automatic `Request` entries fetch (Data panel Refresh). */
|
|
86
78
|
refreshData: () => void;
|
|
87
|
-
defCategory: (def:
|
|
88
|
-
defBadgeLabel: (def:
|
|
79
|
+
defCategory: (def: JxStateDefinition) => string;
|
|
80
|
+
defBadgeLabel: (def: JxStateDefinition) => string;
|
|
89
81
|
navigateToComponent: (path: string) => void;
|
|
90
|
-
webdata
|
|
91
|
-
|
|
82
|
+
/** The bundled `data/webdata.json`, which the Elements palette builds its blocks from. */
|
|
83
|
+
webdata: typeof webdataJson;
|
|
84
|
+
defaultDef: (tag: string) => JxMutableNode;
|
|
92
85
|
registerLayersDnD: () => void;
|
|
93
86
|
registerElementsDnD: () => void;
|
|
94
87
|
registerComponentsDnD: () => void;
|
|
95
|
-
registerFileTreeDnD: (ctx: { renderLeftPanel: () => void }) => void;
|
|
96
88
|
setGitDiffState: (state: GitDiffState | null) => void;
|
|
97
89
|
cloneRepository?: () => void;
|
|
98
90
|
}
|
|
@@ -111,8 +103,8 @@ export interface NavigatorDocument {
|
|
|
111
103
|
mode: string;
|
|
112
104
|
/** The whole selection SET the navigator/inspector panels render against (§6.7). */
|
|
113
105
|
selection: JxPath[];
|
|
114
|
-
canvas:
|
|
115
|
-
content?: { frontmatter?:
|
|
106
|
+
canvas: Tab["session"]["canvas"] | null;
|
|
107
|
+
content?: { frontmatter?: Tab["doc"]["content"]["frontmatter"] } | undefined;
|
|
116
108
|
documentPath?: string | null | undefined;
|
|
117
109
|
ui: TabUi;
|
|
118
110
|
}
|
|
@@ -215,7 +207,7 @@ export function panelContext(): CommandContext {
|
|
|
215
207
|
ctx.project.open = projectState !== null;
|
|
216
208
|
ctx.project.isMultilingual =
|
|
217
209
|
(resolveI18n(projectState?.projectConfig ?? {}).i18n?.locales.length ?? 0) > 1;
|
|
218
|
-
ctx.git.dirtyCount = shell.git.status?.files
|
|
210
|
+
ctx.git.dirtyCount = shell.git.status?.files.length ?? 0;
|
|
219
211
|
ctx.document.open = activeTab.value !== null;
|
|
220
212
|
return ctx;
|
|
221
213
|
}
|
|
@@ -333,11 +325,10 @@ function railablePanels(): readonly PanelRecord[] {
|
|
|
333
325
|
*/
|
|
334
326
|
export function railGroups(ctx: CommandContext): RailGroup[] {
|
|
335
327
|
const railable = railablePanels();
|
|
336
|
-
return RAIL_GROUP_LEVELS.
|
|
337
|
-
level,
|
|
338
|
-
label,
|
|
339
|
-
|
|
340
|
-
})).filter((group) => group.panels.length > 0);
|
|
328
|
+
return RAIL_GROUP_LEVELS.flatMap(({ level, label }) => {
|
|
329
|
+
const panels = railable.filter((panel) => panel.level === level && isPanelVisible(panel, ctx));
|
|
330
|
+
return panels.length > 0 ? [{ level, label, panels }] : [];
|
|
331
|
+
});
|
|
341
332
|
}
|
|
342
333
|
|
|
343
334
|
/**
|
|
@@ -355,12 +346,6 @@ export function railPanelSet(): PanelRecord[] {
|
|
|
355
346
|
);
|
|
356
347
|
}
|
|
357
348
|
|
|
358
|
-
/** One tabbed region and what it declares, in `commands/budget.ts`'s shape. */
|
|
359
|
-
export interface PanelDockDeclaration {
|
|
360
|
-
dock: string;
|
|
361
|
-
tabs: readonly string[];
|
|
362
|
-
}
|
|
363
|
-
|
|
364
349
|
/**
|
|
365
350
|
* The rail's two groups as budget declarations — the `rail/*` rows `scripts/check-chrome-budget.ts`
|
|
366
351
|
* counts, observed rather than written down. `commands/budget.ts` no longer carries a copy.
|
|
@@ -369,10 +354,10 @@ export interface PanelDockDeclaration {
|
|
|
369
354
|
* to be visible in one context. Search is registered and hidden today, and it still spends its rail
|
|
370
355
|
* slot — which is the point, because its arrival must not silently push the rail to five.
|
|
371
356
|
*/
|
|
372
|
-
export function railDeclarations():
|
|
357
|
+
export function railDeclarations(): DockDeclaration[] {
|
|
373
358
|
const railable = railablePanels();
|
|
374
|
-
return RAIL_GROUP_LEVELS.
|
|
375
|
-
|
|
376
|
-
tabs
|
|
377
|
-
})
|
|
359
|
+
return RAIL_GROUP_LEVELS.flatMap(({ level }) => {
|
|
360
|
+
const tabs = railable.filter((panel) => panel.level === level).map((panel) => panel.title);
|
|
361
|
+
return tabs.length > 0 ? [{ dock: `rail/${level}`, tabs }] : [];
|
|
362
|
+
});
|
|
378
363
|
}
|