@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
|
@@ -22,13 +22,12 @@
|
|
|
22
22
|
import { reactive } from "../reactivity";
|
|
23
23
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
24
24
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
25
|
-
import { close
|
|
25
|
+
import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
26
26
|
import { whenReady } from "./dialog";
|
|
27
27
|
import githubPublishDoc from "./github-publish.json";
|
|
28
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
29
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
28
|
+
import type { DialogLayerHandle, SurfaceHandle } from "../ui/surface";
|
|
30
29
|
|
|
31
|
-
registerSurface("github-publish", githubPublishDoc
|
|
30
|
+
registerSurface("github-publish", githubPublishDoc);
|
|
32
31
|
|
|
33
32
|
/**
|
|
34
33
|
* What the dialog collects.
|
|
@@ -55,15 +54,7 @@ export interface GithubPublishSurfaceOptions {
|
|
|
55
54
|
onClosed: () => void;
|
|
56
55
|
}
|
|
57
56
|
|
|
58
|
-
|
|
59
|
-
host: HTMLElement;
|
|
60
|
-
/** Resolves with the `jx-dialog` element once it has rendered and been opened. */
|
|
61
|
-
ready: Promise<HTMLElement>;
|
|
62
|
-
/** Close the dialog (the platform restores focus) and dispose the document. Idempotent. */
|
|
63
|
-
close: () => void;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
interface GithubPublishScope extends Record<string, unknown> {
|
|
57
|
+
interface GithubPublishScope {
|
|
67
58
|
name: string;
|
|
68
59
|
description: string;
|
|
69
60
|
isPrivate: boolean;
|
|
@@ -76,9 +67,7 @@ interface GithubPublishScope extends Record<string, unknown> {
|
|
|
76
67
|
}
|
|
77
68
|
|
|
78
69
|
/** Open the dialog. The handle's `ready` resolves once it is showing. */
|
|
79
|
-
export function openGithubPublishSurface(
|
|
80
|
-
options: GithubPublishSurfaceOptions,
|
|
81
|
-
): GithubPublishSurfaceHandle {
|
|
70
|
+
export function openGithubPublishSurface(options: GithubPublishSurfaceOptions): DialogLayerHandle {
|
|
82
71
|
const slot = document.createElement("div");
|
|
83
72
|
/* The layer is `pointer-events: none` so a click passes through it when nothing is up, and every
|
|
84
73
|
slot in it turns them back on for its own content. */
|
|
@@ -100,8 +89,12 @@ export function openGithubPublishSurface(
|
|
|
100
89
|
closed = true;
|
|
101
90
|
options.onClosed();
|
|
102
91
|
};
|
|
92
|
+
/* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
|
|
93
|
+
element, and a direct `closed` test after that `await` would be narrowed to the value the test
|
|
94
|
+
before it saw. */
|
|
95
|
+
const isClosed = (): boolean => closed;
|
|
103
96
|
|
|
104
|
-
const scope = reactive<GithubPublishScope>({
|
|
97
|
+
const scope: GithubPublishScope = reactive<GithubPublishScope>({
|
|
105
98
|
cancel: () => {
|
|
106
99
|
options.onCancel();
|
|
107
100
|
},
|
|
@@ -125,13 +118,15 @@ export function openGithubPublishSurface(
|
|
|
125
118
|
setPrivate: (value) => {
|
|
126
119
|
scope.isPrivate = value;
|
|
127
120
|
},
|
|
128
|
-
})
|
|
121
|
+
});
|
|
129
122
|
|
|
130
123
|
let mounted: SurfaceHandle | null = null;
|
|
131
124
|
const ready = mountSurface("github-publish", scope, slot).then(async (surface) => {
|
|
132
125
|
mounted = surface;
|
|
126
|
+
/* SAFETY: `github-publish.json`'s root definition is a `jx-dialog` element, so the runtime
|
|
127
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
133
128
|
const element = surface.root as HTMLElement;
|
|
134
|
-
if (
|
|
129
|
+
if (isClosed()) {
|
|
135
130
|
surface.dispose();
|
|
136
131
|
return element;
|
|
137
132
|
}
|
|
@@ -140,14 +135,14 @@ export function openGithubPublishSurface(
|
|
|
140
135
|
`<dialog>` to open — the body is all there, correctly styled, and never shows. Shared with
|
|
141
136
|
`openDialogSurface` and `openAboutSurface` rather than reimplemented. */
|
|
142
137
|
await whenReady(element);
|
|
143
|
-
if (
|
|
138
|
+
if (isClosed()) {
|
|
144
139
|
return element;
|
|
145
140
|
}
|
|
146
141
|
showModal(element);
|
|
147
142
|
return element;
|
|
148
143
|
});
|
|
149
144
|
|
|
150
|
-
const handle:
|
|
145
|
+
const handle: DialogLayerHandle = {
|
|
151
146
|
close() {
|
|
152
147
|
if (closed) {
|
|
153
148
|
return;
|
|
@@ -155,7 +150,7 @@ export function openGithubPublishSurface(
|
|
|
155
150
|
const element = mounted?.root;
|
|
156
151
|
if (element instanceof HTMLElement) {
|
|
157
152
|
// The platform's close first, so focus goes back where it came from; then the document.
|
|
158
|
-
|
|
153
|
+
close(element);
|
|
159
154
|
}
|
|
160
155
|
mounted?.dispose();
|
|
161
156
|
mounted = null;
|
|
@@ -15,25 +15,21 @@
|
|
|
15
15
|
* @docs studio/editing/grid
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
18
19
|
import { reactive } from "../reactivity";
|
|
19
20
|
import { openPopoverSurface } from "../ui/popover-surface";
|
|
20
21
|
import { registerSurface } from "../ui/surface";
|
|
21
22
|
import gridCellDoc from "./grid-cell.json";
|
|
22
|
-
import type {
|
|
23
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
23
24
|
import type { JxPath } from "@jxsuite/runtime/types";
|
|
24
|
-
import type { PopoverSurfaceHandle } from "../ui/popover-surface";
|
|
25
|
+
import type { OpenPopoverSurfaceOptions, PopoverSurfaceHandle } from "../ui/popover-surface";
|
|
26
|
+
import type { SurfaceOption } from "../ui/surface";
|
|
25
27
|
|
|
26
|
-
registerSurface("grid-cell", gridCellDoc
|
|
28
|
+
registerSurface("grid-cell", gridCellDoc);
|
|
27
29
|
|
|
28
30
|
/** The slot id, and so the panel's region: `overlay.popover:grid/cell`. */
|
|
29
31
|
const SLOT = "grid/cell";
|
|
30
32
|
|
|
31
|
-
/** One row of a relationship column's list. */
|
|
32
|
-
export interface GridCellOption {
|
|
33
|
-
value: string;
|
|
34
|
-
label: string;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
33
|
/** Everything the panel draws. */
|
|
38
34
|
export interface GridCellView {
|
|
39
35
|
x: number;
|
|
@@ -45,7 +41,7 @@ export interface GridCellView {
|
|
|
45
41
|
/** "Entries of “post”", when the column names a target type. */
|
|
46
42
|
hint: string;
|
|
47
43
|
hintState: "hidden" | "shown";
|
|
48
|
-
options:
|
|
44
|
+
options: SurfaceOption[];
|
|
49
45
|
/** What the list holds; empty when the current value is not one of its rows. */
|
|
50
46
|
value: string;
|
|
51
47
|
/** What the free-text field holds: the current value when no row matches it. */
|
|
@@ -62,28 +58,26 @@ export interface GridCellSurfaceOptions {
|
|
|
62
58
|
dismissed?: () => void;
|
|
63
59
|
}
|
|
64
60
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
interface GridCellScope extends Record<string, unknown>, GridCellView {
|
|
61
|
+
interface GridCellScope extends GridCellView {
|
|
68
62
|
pick: (value: string) => void;
|
|
69
63
|
done: () => void;
|
|
70
64
|
}
|
|
71
65
|
|
|
72
66
|
/** The `part` a node's definition carries, or "" for a text node or an unmarked element. */
|
|
73
67
|
function partOf(def: JxElement | string): string {
|
|
74
|
-
const part =
|
|
75
|
-
return
|
|
68
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
69
|
+
return isString(part) ? part : "";
|
|
76
70
|
}
|
|
77
71
|
|
|
78
72
|
/**
|
|
79
73
|
* Open the cell value picker.
|
|
80
74
|
*
|
|
81
75
|
* @param {GridCellSurfaceOptions} options
|
|
82
|
-
* @returns {
|
|
76
|
+
* @returns {PopoverSurfaceHandle}
|
|
83
77
|
*/
|
|
84
|
-
export function openGridCellSurface(options: GridCellSurfaceOptions):
|
|
78
|
+
export function openGridCellSurface(options: GridCellSurfaceOptions): PopoverSurfaceHandle {
|
|
85
79
|
const { view } = options;
|
|
86
|
-
const scope = reactive<GridCellScope>({
|
|
80
|
+
const scope: GridCellScope = reactive<GridCellScope>({
|
|
87
81
|
custom: view.custom,
|
|
88
82
|
done: () => {
|
|
89
83
|
handle.close();
|
|
@@ -98,23 +92,28 @@ export function openGridCellSurface(options: GridCellSurfaceOptions): GridCellSu
|
|
|
98
92
|
value: view.value,
|
|
99
93
|
x: view.x,
|
|
100
94
|
y: view.y,
|
|
101
|
-
})
|
|
95
|
+
});
|
|
102
96
|
|
|
103
|
-
const
|
|
97
|
+
const popover: OpenPopoverSurfaceOptions<GridCellScope> = {
|
|
104
98
|
anchor: null,
|
|
105
99
|
name: "grid-cell",
|
|
106
100
|
scope,
|
|
107
101
|
slot: SLOT,
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
102
|
+
};
|
|
103
|
+
if (options.dismissed) {
|
|
104
|
+
popover.onDismissed = options.dismissed;
|
|
105
|
+
}
|
|
106
|
+
if (options.island) {
|
|
107
|
+
popover.onNodeCreated = (
|
|
108
|
+
element: HTMLElement | Text,
|
|
109
|
+
_path: JxPath,
|
|
110
|
+
def: JxElement | string,
|
|
111
|
+
) => {
|
|
112
|
+
if (partOf(def) === "picker-host" && element instanceof HTMLElement) {
|
|
113
|
+
options.island?.(element);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const handle = openPopoverSurface(popover);
|
|
119
118
|
return handle;
|
|
120
119
|
}
|
|
@@ -19,16 +19,9 @@
|
|
|
19
19
|
import { reactive } from "../reactivity";
|
|
20
20
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
21
21
|
import gridOpenDoc from "./grid-open.json";
|
|
22
|
-
import type {
|
|
23
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
22
|
+
import type { SurfaceAction, SurfaceHandle } from "../ui/surface";
|
|
24
23
|
|
|
25
|
-
registerSurface("grid-open", gridOpenDoc
|
|
26
|
-
|
|
27
|
-
/** One openable source. The id is opaque here: only the flow knows what it names. */
|
|
28
|
-
export interface GridSourceRow {
|
|
29
|
-
id: string;
|
|
30
|
-
label: string;
|
|
31
|
-
}
|
|
24
|
+
registerSurface("grid-open", gridOpenDoc);
|
|
32
25
|
|
|
33
26
|
/** One origin of sources — the project itself, or one connection. */
|
|
34
27
|
export interface GridSourceGroup {
|
|
@@ -36,7 +29,7 @@ export interface GridSourceGroup {
|
|
|
36
29
|
key: string;
|
|
37
30
|
title: string;
|
|
38
31
|
state: "listed" | "empty";
|
|
39
|
-
rows:
|
|
32
|
+
rows: SurfaceAction[];
|
|
40
33
|
/** Why the group is empty, in a sentence. Empty when it is not. */
|
|
41
34
|
emptyMessage: string;
|
|
42
35
|
}
|
|
@@ -47,7 +40,7 @@ export interface GridOpenSurfaceHandle {
|
|
|
47
40
|
dispose: () => void;
|
|
48
41
|
}
|
|
49
42
|
|
|
50
|
-
interface GridOpenScope
|
|
43
|
+
interface GridOpenScope {
|
|
51
44
|
groups: GridSourceGroup[];
|
|
52
45
|
open: (id: string) => void;
|
|
53
46
|
}
|
|
@@ -65,16 +58,19 @@ export function mountGridOpenSurface(
|
|
|
65
58
|
groups: GridSourceGroup[],
|
|
66
59
|
open: (id: string) => void,
|
|
67
60
|
): GridOpenSurfaceHandle {
|
|
68
|
-
const scope = reactive<GridOpenScope>({ groups, open })
|
|
61
|
+
const scope: GridOpenScope = reactive<GridOpenScope>({ groups, open });
|
|
69
62
|
let mounted: SurfaceHandle | null = null;
|
|
70
63
|
let disposed = false;
|
|
71
64
|
const ready = mountSurface("grid-open", scope, host).then((surface) => {
|
|
65
|
+
/* SAFETY: `grid-open.json`'s root definition is a `div` element, so the runtime mounts an
|
|
66
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
67
|
+
const root = surface.root as HTMLElement;
|
|
72
68
|
if (disposed) {
|
|
73
69
|
surface.dispose();
|
|
74
|
-
return
|
|
70
|
+
return root;
|
|
75
71
|
}
|
|
76
72
|
mounted = surface;
|
|
77
|
-
return
|
|
73
|
+
return root;
|
|
78
74
|
});
|
|
79
75
|
return {
|
|
80
76
|
dispose() {
|
|
@@ -25,13 +25,14 @@
|
|
|
25
25
|
* @docs studio/data/grid
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
28
29
|
import { reactive } from "../reactivity";
|
|
29
30
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
30
31
|
import gridPanelDoc from "./grid-panel.json";
|
|
31
|
-
import type {
|
|
32
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
32
33
|
import type { SurfaceHandle } from "../ui/surface";
|
|
33
34
|
|
|
34
|
-
registerSurface("grid-panel", gridPanelDoc
|
|
35
|
+
registerSurface("grid-panel", gridPanelDoc);
|
|
35
36
|
|
|
36
37
|
/** Everything the frame draws, as one value. Every field is already a string or a boolean. */
|
|
37
38
|
export interface GridPanelView {
|
|
@@ -98,7 +99,7 @@ export interface GridPanelSurfaceHandle {
|
|
|
98
99
|
}
|
|
99
100
|
|
|
100
101
|
/** The scope the document reads: {@link GridPanelView} plus the actions its controls call. */
|
|
101
|
-
interface GridPanelScope extends
|
|
102
|
+
interface GridPanelScope extends GridPanelView, GridPanelActions {}
|
|
102
103
|
|
|
103
104
|
/** Write a projection into the scope. */
|
|
104
105
|
function project(scope: GridPanelScope, view: GridPanelView): void {
|
|
@@ -124,8 +125,8 @@ function project(scope: GridPanelScope, view: GridPanelView): void {
|
|
|
124
125
|
|
|
125
126
|
/** The `part` a node's definition carries, or "" for a text node or an unmarked element. */
|
|
126
127
|
function partOf(def: JxElement | string): string {
|
|
127
|
-
const part =
|
|
128
|
-
return
|
|
128
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
129
|
+
return isString(part) ? part : "";
|
|
129
130
|
}
|
|
130
131
|
|
|
131
132
|
/**
|
|
@@ -142,7 +143,7 @@ export function mountGridPanelSurface(
|
|
|
142
143
|
actions: GridPanelActions,
|
|
143
144
|
): GridPanelSurfaceHandle {
|
|
144
145
|
host.replaceChildren();
|
|
145
|
-
const scope = reactive<GridPanelScope>({
|
|
146
|
+
const scope: GridPanelScope = reactive<GridPanelScope>({
|
|
146
147
|
addRow: actions.addRow,
|
|
147
148
|
canDelete: false,
|
|
148
149
|
canInsert: false,
|
|
@@ -172,7 +173,7 @@ export function mountGridPanelSurface(
|
|
|
172
173
|
setFilter: actions.setFilter,
|
|
173
174
|
view: "grid",
|
|
174
175
|
viewLabel: "View",
|
|
175
|
-
})
|
|
176
|
+
});
|
|
176
177
|
project(scope, view);
|
|
177
178
|
|
|
178
179
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -186,12 +187,15 @@ export function mountGridPanelSurface(
|
|
|
186
187
|
}
|
|
187
188
|
},
|
|
188
189
|
}).then((surface) => {
|
|
190
|
+
/* SAFETY: `grid-panel.json`'s root definition is a `div` element, so the runtime mounts an
|
|
191
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
192
|
+
const root = surface.root as HTMLElement;
|
|
189
193
|
if (disposed) {
|
|
190
194
|
surface.dispose();
|
|
191
|
-
return
|
|
195
|
+
return root;
|
|
192
196
|
}
|
|
193
197
|
mounted = surface;
|
|
194
|
-
return
|
|
198
|
+
return root;
|
|
195
199
|
});
|
|
196
200
|
|
|
197
201
|
return {
|
|
@@ -15,10 +15,9 @@ import { reactive } from "../reactivity";
|
|
|
15
15
|
import { openPopoverSurface } from "../ui/popover-surface";
|
|
16
16
|
import { registerSurface } from "../ui/surface";
|
|
17
17
|
import gridReplaceDoc from "./grid-replace.json";
|
|
18
|
-
import type {
|
|
19
|
-
import type { PopoverSurfaceHandle } from "../ui/popover-surface";
|
|
18
|
+
import type { OpenPopoverSurfaceOptions, PopoverSurfaceHandle } from "../ui/popover-surface";
|
|
20
19
|
|
|
21
|
-
registerSurface("grid-replace", gridReplaceDoc
|
|
20
|
+
registerSurface("grid-replace", gridReplaceDoc);
|
|
22
21
|
|
|
23
22
|
/** The slot id, and so the panel's region: `overlay.popover:grid/replace`. */
|
|
24
23
|
const SLOT = "grid/replace";
|
|
@@ -31,9 +30,7 @@ export interface GridReplaceActions {
|
|
|
31
30
|
dismissed?: () => void;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
interface GridReplaceScope extends Record<string, unknown> {
|
|
33
|
+
interface GridReplaceScope {
|
|
37
34
|
x: number;
|
|
38
35
|
y: number;
|
|
39
36
|
find: string;
|
|
@@ -50,14 +47,14 @@ interface GridReplaceScope extends Record<string, unknown> {
|
|
|
50
47
|
* @param {{ x: number; y: number }} at - Where it opens, in viewport pixels
|
|
51
48
|
* @param {GridReplaceActions} actions - What each press does
|
|
52
49
|
* @param {HTMLElement | null} anchor - The toolbar button it hangs from
|
|
53
|
-
* @returns {
|
|
50
|
+
* @returns {PopoverSurfaceHandle}
|
|
54
51
|
*/
|
|
55
52
|
export function openGridReplaceSurface(
|
|
56
53
|
at: { x: number; y: number },
|
|
57
54
|
actions: GridReplaceActions,
|
|
58
55
|
anchor: HTMLElement | null,
|
|
59
|
-
):
|
|
60
|
-
const scope = reactive<GridReplaceScope>({
|
|
56
|
+
): PopoverSurfaceHandle {
|
|
57
|
+
const scope: GridReplaceScope = reactive<GridReplaceScope>({
|
|
61
58
|
cancel: () => {
|
|
62
59
|
handle.close();
|
|
63
60
|
actions.dismissed?.();
|
|
@@ -75,15 +72,18 @@ export function openGridReplaceSurface(
|
|
|
75
72
|
},
|
|
76
73
|
x: at.x,
|
|
77
74
|
y: at.y,
|
|
78
|
-
})
|
|
75
|
+
});
|
|
79
76
|
|
|
80
|
-
const
|
|
77
|
+
const popover: OpenPopoverSurfaceOptions<GridReplaceScope> = {
|
|
81
78
|
anchor,
|
|
82
79
|
name: "grid-replace",
|
|
83
80
|
scope,
|
|
84
81
|
slot: SLOT,
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
};
|
|
83
|
+
if (actions.dismissed) {
|
|
84
|
+
popover.onDismissed = actions.dismissed;
|
|
85
|
+
}
|
|
86
|
+
const handle = openPopoverSurface(popover);
|
|
87
87
|
|
|
88
88
|
return handle;
|
|
89
89
|
}
|
|
@@ -20,10 +20,10 @@ import { reactive } from "../reactivity";
|
|
|
20
20
|
import { openPopoverSurface } from "../ui/popover-surface";
|
|
21
21
|
import { registerSurface } from "../ui/surface";
|
|
22
22
|
import gridViewsDoc from "./grid-views.json";
|
|
23
|
-
import type {
|
|
24
|
-
import type {
|
|
23
|
+
import type { OpenPopoverSurfaceOptions, PopoverSurfaceHandle } from "../ui/popover-surface";
|
|
24
|
+
import type { SurfaceOption } from "../ui/surface";
|
|
25
25
|
|
|
26
|
-
registerSurface("grid-views", gridViewsDoc
|
|
26
|
+
registerSurface("grid-views", gridViewsDoc);
|
|
27
27
|
|
|
28
28
|
/** The slot id, and so the panel's region: `overlay.popover:grid/views`. */
|
|
29
29
|
const SLOT = "grid/views";
|
|
@@ -41,12 +41,6 @@ export interface GridSavedViewRow {
|
|
|
41
41
|
deleteLabel: string;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
/** A closed list of choices, in the shape the kit's select reads. */
|
|
45
|
-
export interface GridSelectOption {
|
|
46
|
-
value: string;
|
|
47
|
-
label: string;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
44
|
/** One column's visibility. */
|
|
51
45
|
export interface GridColumnToggle {
|
|
52
46
|
field: string;
|
|
@@ -65,9 +59,9 @@ export interface GridViewsView {
|
|
|
65
59
|
saveLabel: string;
|
|
66
60
|
columns: GridColumnToggle[];
|
|
67
61
|
/** Every column, plus the "Source order" row that clears the sort. */
|
|
68
|
-
fieldOptions:
|
|
69
|
-
dirOptions:
|
|
70
|
-
groupOptions:
|
|
62
|
+
fieldOptions: SurfaceOption[];
|
|
63
|
+
dirOptions: SurfaceOption[];
|
|
64
|
+
groupOptions: SurfaceOption[];
|
|
71
65
|
sortField: string;
|
|
72
66
|
sortDir: string;
|
|
73
67
|
/** There is no sort to redirect, so the direction control is off rather than lying. */
|
|
@@ -93,7 +87,7 @@ export interface GridViewsSurfaceHandle extends PopoverSurfaceHandle {
|
|
|
93
87
|
update: (view: GridViewsView) => void;
|
|
94
88
|
}
|
|
95
89
|
|
|
96
|
-
interface GridViewsScope extends
|
|
90
|
+
interface GridViewsScope extends GridViewsView, GridViewsActions {}
|
|
97
91
|
|
|
98
92
|
/** Write a projection into the scope. */
|
|
99
93
|
function project(scope: GridViewsScope, view: GridViewsView): void {
|
|
@@ -125,7 +119,7 @@ export function openGridViewsSurface(
|
|
|
125
119
|
actions: GridViewsActions,
|
|
126
120
|
anchor: HTMLElement | null,
|
|
127
121
|
): GridViewsSurfaceHandle {
|
|
128
|
-
const scope = reactive<GridViewsScope>({
|
|
122
|
+
const scope: GridViewsScope = reactive<GridViewsScope>({
|
|
129
123
|
applyView: actions.applyView,
|
|
130
124
|
columns: [],
|
|
131
125
|
deleteView: actions.deleteView,
|
|
@@ -147,16 +141,19 @@ export function openGridViewsSurface(
|
|
|
147
141
|
viewsState: "empty",
|
|
148
142
|
x: 0,
|
|
149
143
|
y: 0,
|
|
150
|
-
})
|
|
144
|
+
});
|
|
151
145
|
project(scope, view);
|
|
152
146
|
|
|
153
|
-
const
|
|
147
|
+
const popover: OpenPopoverSurfaceOptions<GridViewsScope> = {
|
|
154
148
|
anchor,
|
|
155
149
|
name: "grid-views",
|
|
156
150
|
scope,
|
|
157
151
|
slot: SLOT,
|
|
158
|
-
|
|
159
|
-
|
|
152
|
+
};
|
|
153
|
+
if (actions.dismissed) {
|
|
154
|
+
popover.onDismissed = actions.dismissed;
|
|
155
|
+
}
|
|
156
|
+
const handle = openPopoverSurface(popover);
|
|
160
157
|
|
|
161
158
|
return {
|
|
162
159
|
close: handle.close,
|
|
@@ -23,14 +23,15 @@
|
|
|
23
23
|
* @docs studio/interface
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
26
27
|
import { reactive } from "../reactivity";
|
|
27
28
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
28
29
|
import inspectorDockDoc from "./inspector-dock.json";
|
|
29
|
-
import type {
|
|
30
|
+
import type { JsonObject, JxElement } from "@jxsuite/schema/types";
|
|
30
31
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
31
32
|
import type { SurfaceHandle } from "../ui/surface";
|
|
32
33
|
|
|
33
|
-
registerSurface("inspector-dock", inspectorDockDoc
|
|
34
|
+
registerSurface("inspector-dock", inspectorDockDoc);
|
|
34
35
|
|
|
35
36
|
/** One tab of the dock, as the document draws it. Every field is a value. */
|
|
36
37
|
export interface InspectorTabView {
|
|
@@ -81,7 +82,7 @@ export interface InspectorDockHandle {
|
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
/** The scope the document reads. */
|
|
84
|
-
interface InspectorDockScope extends
|
|
85
|
+
interface InspectorDockScope extends InspectorDockValues {
|
|
85
86
|
selectTab: (id: string) => void;
|
|
86
87
|
}
|
|
87
88
|
|
|
@@ -95,15 +96,15 @@ function project(scope: InspectorDockScope, values: InspectorDockValues): void {
|
|
|
95
96
|
|
|
96
97
|
/** The `part` a node was declared with, or the empty string. */
|
|
97
98
|
function partOf(def: JxElement | string): string {
|
|
98
|
-
const part =
|
|
99
|
-
return
|
|
99
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
100
|
+
return isString(part) ? part : "";
|
|
100
101
|
}
|
|
101
102
|
|
|
102
103
|
/** The `$map` item a node was rendered inside, if it was rendered inside one. */
|
|
103
|
-
function mapItem(state: JxScope | undefined):
|
|
104
|
-
const map = state?.["$map"]
|
|
105
|
-
const item = map
|
|
106
|
-
return item
|
|
104
|
+
function mapItem(state: JxScope | undefined): JsonObject | null {
|
|
105
|
+
const map = state?.["$map"];
|
|
106
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
107
|
+
return isJsonObject(item) ? item : null;
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
/**
|
|
@@ -119,10 +120,10 @@ export function mountInspectorDock(
|
|
|
119
120
|
actions: InspectorDockActions,
|
|
120
121
|
options: InspectorDockOptions,
|
|
121
122
|
): InspectorDockHandle {
|
|
122
|
-
const scope = reactive<InspectorDockScope>({
|
|
123
|
+
const scope: InspectorDockScope = reactive<InspectorDockScope>({
|
|
123
124
|
...values,
|
|
124
125
|
selectTab: actions.selectTab,
|
|
125
|
-
})
|
|
126
|
+
});
|
|
126
127
|
|
|
127
128
|
container.textContent = "";
|
|
128
129
|
// @ts-expect-error -- _$litPart$ is lit's private render-part marker, not in the DOM types
|
|
@@ -136,7 +137,7 @@ export function mountInspectorDock(
|
|
|
136
137
|
return;
|
|
137
138
|
}
|
|
138
139
|
const key = mapItem(state)?.["key"];
|
|
139
|
-
if (
|
|
140
|
+
if (isString(key) && key !== "") {
|
|
140
141
|
options.onBody(key, element);
|
|
141
142
|
}
|
|
142
143
|
},
|
package/src/surfaces/jump-bar.ts
CHANGED
|
@@ -23,10 +23,9 @@
|
|
|
23
23
|
import { reactive } from "../reactivity";
|
|
24
24
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
25
25
|
import jumpBarDoc from "./jump-bar.json";
|
|
26
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
27
26
|
import type { SurfaceHandle } from "../ui/surface";
|
|
28
27
|
|
|
29
|
-
registerSurface("jump-bar", jumpBarDoc
|
|
28
|
+
registerSurface("jump-bar", jumpBarDoc);
|
|
30
29
|
|
|
31
30
|
/**
|
|
32
31
|
* One step of the address, as the document reads it.
|
|
@@ -35,7 +34,7 @@ registerSurface("jump-bar", jumpBarDoc as unknown as JxDocument);
|
|
|
35
34
|
* and a `$switch` chooses on one: a step that omitted `title` would leave the readout case reading
|
|
36
35
|
* an absent path.
|
|
37
36
|
*/
|
|
38
|
-
export interface ProjectedStep
|
|
37
|
+
export interface ProjectedStep {
|
|
39
38
|
/** Unique within one bar: the repeater's key, and the argument `run` and `choose` receive. */
|
|
40
39
|
key: string;
|
|
41
40
|
/** `project` | `file` | `editor` | `node` — stamped so a test names a step without its text. */
|
|
@@ -73,7 +72,7 @@ export interface JumpBarSurface {
|
|
|
73
72
|
}
|
|
74
73
|
|
|
75
74
|
/** The scope `jump-bar.json` reads. */
|
|
76
|
-
interface JumpBarScope extends
|
|
75
|
+
interface JumpBarScope extends JumpBarActions {
|
|
77
76
|
region: string;
|
|
78
77
|
segments: ProjectedStep[];
|
|
79
78
|
empty: boolean;
|
|
@@ -95,12 +94,12 @@ export function mountJumpBarSurface(
|
|
|
95
94
|
region: string,
|
|
96
95
|
actions: JumpBarActions,
|
|
97
96
|
): JumpBarSurface {
|
|
98
|
-
const scope = reactive<JumpBarScope>({
|
|
97
|
+
const scope: JumpBarScope = reactive<JumpBarScope>({
|
|
99
98
|
...actions,
|
|
100
99
|
empty: true,
|
|
101
100
|
region,
|
|
102
101
|
segments: [],
|
|
103
|
-
})
|
|
102
|
+
});
|
|
104
103
|
|
|
105
104
|
host.replaceChildren();
|
|
106
105
|
let mounted: SurfaceHandle | null = null;
|