@jxsuite/studio 6.1.1 → 6.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{2020-va2wwra4.js → 2020-f2gkpy8d.js} +3 -3
- package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
- package/dist/chunks/adapter-4912g339.js +4 -0
- package/dist/chunks/cf-account-picker-wccaenh6.js +4 -0
- package/dist/chunks/cf-settings-br6105tr.js +4 -0
- package/dist/chunks/color-28ksk2qm.js +4 -0
- package/dist/chunks/color-area-0fj8a4ga.js +4 -0
- package/dist/chunks/color-field-xch8kx2g.js +4 -0
- package/dist/chunks/color-slider-jxd8v350.js +4 -0
- package/dist/chunks/combobox-p0efwjke.js +4 -0
- package/dist/chunks/components-db68vsn7.js +4 -0
- package/dist/chunks/content-source-1449qesq.js +4 -0
- package/dist/chunks/convert-to-repeater-5h457egj.js +4 -0
- package/dist/chunks/dialog-c4x05vyx.js +4 -0
- package/dist/chunks/editor-x9jn86a7.js +4 -0
- package/dist/chunks/entry-commands-may24cpt.js +4 -0
- package/dist/chunks/extension-sections-pvr14vxr.js +4 -0
- package/dist/chunks/file-ops-x9v54pcj.js +4 -0
- package/dist/chunks/files-j3knqf0s.js +4 -0
- package/dist/chunks/format-host-tyre2trb.js +4 -0
- package/dist/chunks/fs-events-64ma9htc.js +4 -0
- package/dist/chunks/git-panel-84ps5dex.js +4 -0
- package/dist/chunks/grid-view-d2wq9ezg.js +51 -0
- package/dist/chunks/icons-pnfz478q.js +4 -0
- package/dist/chunks/iframe-entry-fvbk89gm.js +5 -0
- package/dist/chunks/iframe-entry-jdcktez8.js +5 -0
- package/dist/chunks/iframe-entry-x0ygf2yr.js +5 -0
- package/dist/chunks/iframe-entry-zap785cw.js +5 -0
- package/dist/chunks/iframe-host-ck6vejt5.js +4 -0
- package/dist/chunks/index-b8xw3vy9.js +4 -0
- package/dist/chunks/{index-2veqmnhr.js → index-zpjmzqfk.js} +3 -3
- package/dist/chunks/{javascript-8nbvs12s.js → javascript-m54mnwp6.js} +3 -3
- package/dist/chunks/{jsonMode-s8kt9dsj.js → jsonMode-w15cmrcm.js} +8 -8
- package/dist/chunks/jx-validate-at3zn8wa.js +4 -0
- package/dist/chunks/layers-h4xp1pss.js +4 -0
- package/dist/chunks/layers-panel-m5hw1d7g.js +4 -0
- package/dist/chunks/listbox-e74qjyq6.js +4 -0
- package/dist/chunks/lit-html-8t8t3dnr.js +4 -0
- package/dist/chunks/media-picker-2cweexc5.js +4 -0
- package/dist/chunks/menu-n6yzswmy.js +4 -0
- package/dist/chunks/menu-ynw13y0s.js +4 -0
- package/dist/chunks/monaco-binding-7gx83x3r.js +4 -0
- package/dist/chunks/monaco-buffer-qzxn567r.js +4 -0
- package/dist/chunks/monaco-setup-gxf6656g.js +4 -0
- package/dist/chunks/notify-cj5zbrs2.js +4 -0
- package/dist/chunks/number-field-y62xq0ty.js +4 -0
- package/dist/chunks/parse-b7ddhr8m.js +4 -0
- package/dist/chunks/platform-3dfws9js.js +4 -0
- package/dist/chunks/popover-jt2gxmzs.js +4 -0
- package/dist/chunks/publish-panel-1gvxbj21.js +4 -0
- package/dist/chunks/quick-search-0dajrwqg.js +4 -0
- package/dist/chunks/references-49qgt404.js +4 -0
- package/dist/chunks/right-panel-jm1bwe53.js +4 -0
- package/dist/chunks/section-registry-6kwc4fky.js +4 -0
- package/dist/chunks/select-rzds841e.js +4 -0
- package/dist/chunks/split-n2gfpm5m.js +4 -0
- package/dist/chunks/{studio-1q1sh2ax.js → studio-0q988f9w.js} +3 -3
- package/dist/chunks/studio-0rt52vpq.js +5 -0
- package/dist/chunks/studio-18vgbhs5.js +5 -0
- package/dist/chunks/{studio-h46vtzk8.js → studio-1fxkaaea.js} +4 -4
- package/dist/chunks/studio-24mccdrj.js +5 -0
- package/dist/chunks/studio-2eh507zk.js +9 -0
- package/dist/chunks/studio-2hcbccfv.js +5 -0
- package/dist/chunks/studio-2j1cb95x.js +5 -0
- package/dist/chunks/studio-2jbs3rxv.js +5 -0
- package/dist/chunks/{studio-rv11kfwa.js → studio-485046te.js} +7 -7
- package/dist/chunks/studio-4h8k4dw9.js +5 -0
- package/dist/chunks/studio-5f6n18kx.js +5 -0
- package/dist/chunks/studio-5gthpky6.js +5 -0
- package/dist/chunks/studio-5ve6bbep.js +5 -0
- package/dist/chunks/studio-6ep3js6b.js +9 -0
- package/dist/chunks/studio-6wkmf3wz.js +9 -0
- package/dist/chunks/studio-841rf3cg.js +5 -0
- package/dist/chunks/studio-8gmwgheg.js +5 -0
- package/dist/chunks/studio-8qm0ep50.js +5 -0
- package/dist/chunks/{studio-8grwxtqk.js → studio-90pq9km1.js} +4 -4
- package/dist/chunks/studio-924p1tm1.js +6 -0
- package/dist/chunks/{studio-pre0skq6.js → studio-a3g98wjr.js} +4 -4
- package/dist/chunks/studio-a3shpz9y.js +5 -0
- package/dist/chunks/studio-amsbaaar.js +6 -0
- package/dist/chunks/studio-at5spjbc.js +7 -0
- package/dist/chunks/studio-b2xv945e.js +5 -0
- package/dist/chunks/studio-bn5nkafw.js +5 -0
- package/dist/chunks/studio-bw6q5xjf.js +9 -0
- package/dist/chunks/studio-c7q0t9x1.js +5 -0
- package/dist/chunks/studio-camnhc96.js +6 -0
- package/dist/chunks/studio-cffqvnzd.js +5 -0
- package/dist/chunks/studio-d81xfh1g.js +5 -0
- package/dist/chunks/studio-dgz8d0c1.js +5 -0
- package/dist/chunks/studio-efvfrsf8.js +5 -0
- package/dist/chunks/studio-er30bpcx.js +5 -0
- package/dist/chunks/studio-ezscgr64.js +5 -0
- package/dist/chunks/studio-ffrrncvz.js +5 -0
- package/dist/chunks/studio-fpphgn8y.js +10 -0
- package/dist/chunks/studio-j1kvhdjk.js +4 -0
- package/dist/chunks/{studio-vrmcjf9g.js → studio-j430n16g.js} +5 -5
- package/dist/chunks/studio-jjkg84nj.js +5 -0
- package/dist/chunks/studio-m0q32ars.js +4 -0
- package/dist/chunks/studio-m6bdst11.js +5 -0
- package/dist/chunks/studio-nv2cptd4.js +64 -0
- package/dist/chunks/studio-nwfrc98n.js +5 -0
- package/dist/chunks/studio-p1wgvp7r.js +5 -0
- package/dist/chunks/studio-pag2wncm.js +5 -0
- package/dist/chunks/studio-qvanvzfd.js +5 -0
- package/dist/chunks/studio-qwa64kt7.js +5 -0
- package/dist/chunks/studio-rk1zc4x3.js +928 -0
- package/dist/chunks/studio-se2r3ptc.js +5 -0
- package/dist/chunks/studio-sg2a0dh0.js +5 -0
- package/dist/chunks/studio-tjzjhe68.js +5 -0
- package/dist/chunks/{studio-wszjyh0j.js → studio-tq0rtfwj.js} +4 -4
- package/dist/chunks/{studio-kggey1jt.js → studio-v0jzqdjm.js} +4 -4
- package/dist/chunks/studio-v2w7q8r1.js +7 -0
- package/dist/chunks/studio-v5vjq1h0.js +4 -0
- package/dist/chunks/studio-v8aga3vp.js +14 -0
- package/dist/chunks/studio-vfcdrfmv.js +5 -0
- package/dist/chunks/studio-vmfkgdjf.js +5 -0
- package/dist/chunks/studio-wt1816jj.js +5 -0
- package/dist/chunks/studio-wz73q5kq.js +4 -0
- package/dist/chunks/studio-y04qtxvp.js +7 -0
- package/dist/chunks/studio-y21g8zzg.js +5 -0
- package/dist/chunks/{studio-zey7zsdw.js → studio-y64hrt8p.js} +7 -7
- package/dist/chunks/studio-ynn90f58.js +16 -0
- package/dist/chunks/studio-yxz682sx.js +5 -0
- package/dist/chunks/studio-zp7snvkq.js +5 -0
- package/dist/chunks/studio-zq4z6tm6.js +5 -0
- package/dist/chunks/swatch-group-ewh24n1f.js +4 -0
- package/dist/chunks/tabs-f5cw3tgp.js +4 -0
- package/dist/chunks/textfield-wewc8rq2.js +4 -0
- package/dist/chunks/toast-c9fn075p.js +4 -0
- package/dist/chunks/toast-host-ke5z4ng7.js +4 -0
- package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
- package/dist/chunks/tooltip-5v8ngwj2.js +4 -0
- package/dist/chunks/tree-mdq3v5cw.js +4 -0
- package/dist/chunks/{tsMode-2frah6h1.js → tsMode-sf49ee9x.js} +7 -7
- package/dist/chunks/workspace-jtfahpee.js +4 -0
- package/dist/chunks/ws-client-nze0k6mv.js +4 -0
- package/dist/iframe-entry.js +16 -16
- package/dist/manifest.json +63 -63
- package/dist/studio.js +97 -97
- package/package.json +6 -6
- package/src/about/about-modal.ts +4 -3
- package/src/account/action-flow.ts +45 -38
- package/src/account-status.ts +7 -2
- package/src/browse/library-layouts.ts +8 -5
- package/src/browse/library-model.ts +18 -6
- package/src/browse/library-pane.ts +37 -21
- package/src/browse/library-preview.ts +14 -9
- package/src/browse/library-source.ts +1 -1
- package/src/canvas/asset-refs.ts +24 -9
- package/src/canvas/asset-resolve.ts +19 -23
- package/src/canvas/canvas-helpers.ts +7 -6
- package/src/canvas/canvas-live-render.ts +44 -53
- package/src/canvas/canvas-patcher.ts +30 -30
- package/src/canvas/canvas-perf.ts +11 -5
- package/src/canvas/canvas-render.ts +62 -41
- package/src/canvas/canvas-surface.ts +5 -3
- package/src/canvas/canvas-utils.ts +90 -49
- package/src/canvas/dialog-path.ts +9 -4
- package/src/canvas/dialog-state.ts +1 -2
- package/src/canvas/diff-marks.ts +9 -16
- package/src/canvas/diff-toolbar.ts +8 -7
- package/src/canvas/edit-width-drag.ts +4 -1
- package/src/canvas/edit-width.ts +1 -3
- package/src/canvas/iframe-channel.ts +27 -13
- package/src/canvas/iframe-drop.ts +13 -12
- package/src/canvas/iframe-editable-root.ts +29 -16
- package/src/canvas/iframe-entry.ts +80 -63
- package/src/canvas/iframe-eval.ts +73 -49
- package/src/canvas/iframe-host.ts +135 -96
- package/src/canvas/iframe-inline-edit.ts +49 -30
- package/src/canvas/iframe-insert.ts +5 -4
- package/src/canvas/iframe-interaction.ts +30 -25
- package/src/canvas/iframe-overlay.ts +1 -1
- package/src/canvas/iframe-patch.ts +18 -15
- package/src/canvas/iframe-position.ts +12 -6
- package/src/canvas/iframe-protocol.ts +12 -16
- package/src/canvas/iframe-render.ts +36 -34
- package/src/canvas/iframe-slash.ts +24 -11
- package/src/canvas/iframe-subtree.ts +6 -2
- package/src/canvas/path-mapping.ts +19 -12
- package/src/canvas/popover-path.ts +7 -3
- package/src/canvas/popover-state.ts +1 -2
- package/src/canvas/serialize-scope.ts +13 -5
- package/src/canvas/stage-scrollbar.ts +2 -1
- package/src/canvas/surface-registry.ts +21 -3
- package/src/collab/collab-commands.ts +7 -2
- package/src/collab/collab-session.ts +84 -45
- package/src/collab/collab-state.ts +4 -3
- package/src/collab/monaco-binding.ts +16 -13
- package/src/collab/monaco-cursors.ts +5 -2
- package/src/commands/budget.ts +3 -3
- package/src/commands/command-args.ts +103 -71
- package/src/commands/context.ts +22 -20
- package/src/commands/keymap.ts +47 -43
- package/src/commands/levels.ts +3 -3
- package/src/commands/live-context.ts +7 -7
- package/src/commands/reference.ts +2 -1
- package/src/commands/registry.ts +12 -10
- package/src/commands/run-reported.ts +15 -10
- package/src/component-props.ts +46 -30
- package/src/content/collection-match.ts +5 -4
- package/src/content/draft-state.ts +4 -3
- package/src/content/entry-commands.ts +3 -2
- package/src/content/entry-editor.ts +29 -17
- package/src/content/entry-fields.ts +12 -7
- package/src/content/entry-model.ts +21 -12
- package/src/editor/canvas-context-menu.ts +1 -2
- package/src/editor/canvas-slash-bridge.ts +3 -6
- package/src/editor/content-slice.ts +16 -14
- package/src/editor/context-menu.ts +35 -22
- package/src/editor/convert-targets.ts +30 -35
- package/src/editor/convert-to-component.ts +11 -5
- package/src/editor/convert-to-repeater.ts +34 -22
- package/src/editor/editable-tags.ts +17 -2
- package/src/editor/file-drop-action.ts +21 -22
- package/src/editor/inline-edit-apply.ts +35 -17
- package/src/editor/inline-edit.ts +66 -50
- package/src/editor/inline-format.ts +59 -56
- package/src/editor/inline-link.ts +40 -15
- package/src/editor/insert-zone-action.ts +1 -1
- package/src/editor/merge-tags.ts +58 -19
- package/src/editor/repeater-scope.ts +39 -28
- package/src/editor/shortcuts.ts +32 -20
- package/src/editor/slash-menu.ts +1 -6
- package/src/files/asset-versions.ts +4 -4
- package/src/files/components.ts +15 -10
- package/src/files/elements.ts +5 -6
- package/src/files/file-ops.ts +77 -36
- package/src/files/files.ts +90 -95
- package/src/files/media-meta.ts +2 -1
- package/src/files/media-paths.ts +3 -0
- package/src/files/serialize-document.ts +2 -2
- package/src/format/constraints.ts +1 -1
- package/src/format/convert-file.ts +27 -13
- package/src/format/format-choices.ts +2 -1
- package/src/format/format-host.ts +76 -50
- package/src/github/github-auth-status.ts +27 -3
- package/src/github/github-auth.ts +19 -9
- package/src/github/github-publish.ts +24 -20
- package/src/grid/cell-editors.ts +46 -31
- package/src/grid/cell-popovers.ts +5 -3
- package/src/grid/edit-buffer.ts +10 -9
- package/src/grid/grid-controller.ts +20 -22
- package/src/grid/grid-layout.ts +21 -5
- package/src/grid/grid-open.ts +3 -6
- package/src/grid/grid-panel.ts +11 -4
- package/src/grid/grid-source.ts +8 -8
- package/src/grid/grid-view.ts +14 -17
- package/src/grid/redirects-grid.ts +14 -5
- package/src/grid/redirects.ts +16 -14
- package/src/grid/schema-columns.ts +25 -19
- package/src/grid/sources/connector-source.ts +47 -20
- package/src/grid/sources/content-source.ts +25 -24
- package/src/grid/sources/csv-file-source.ts +2 -2
- package/src/grid/tabulator-tables.d.ts +55 -34
- package/src/hosting/stage.ts +7 -7
- package/src/i18n/i18n-commands.ts +1 -2
- package/src/media/media-pane.ts +4 -1
- package/src/new-project/add-repo-modal.ts +20 -19
- package/src/new-project/import-tab.ts +10 -14
- package/src/new-project/location-fields.ts +2 -1
- package/src/new-project/new-project-modal.ts +12 -9
- package/src/packages/jxsuite-update.ts +4 -3
- package/src/packages/pull-package-sync.ts +26 -25
- package/src/page-params.ts +97 -68
- package/src/panels/activity-panel.ts +17 -9
- package/src/panels/ai-chat/attached-context.ts +13 -7
- package/src/panels/ai-chat/chat-view.ts +80 -73
- package/src/panels/ai-chat/composer.ts +30 -33
- package/src/panels/ai-chat/sessions-view.ts +1 -2
- package/src/panels/ai-panel.ts +23 -20
- package/src/panels/block-action-bar.ts +46 -35
- package/src/panels/bottom-dock.ts +5 -3
- package/src/panels/canvas-dnd-bridge.ts +31 -24
- package/src/panels/data-explorer.ts +62 -25
- package/src/panels/data-grid.ts +14 -11
- package/src/panels/dnd.ts +108 -118
- package/src/panels/editors.ts +52 -21
- package/src/panels/elements-panel.ts +10 -3
- package/src/panels/events-panel.ts +84 -69
- package/src/panels/formula-workspace.ts +76 -51
- package/src/panels/frontmatter-fields.ts +24 -19
- package/src/panels/frontmatter-panel.ts +44 -34
- package/src/panels/git-diff-open.ts +4 -4
- package/src/panels/git-panel.ts +49 -61
- package/src/panels/head-panel.ts +131 -111
- package/src/panels/i18n-panel.ts +10 -3
- package/src/panels/imports-panel.ts +23 -47
- package/src/panels/jump-bar.ts +48 -29
- package/src/panels/layers-panel.ts +97 -74
- package/src/panels/left-panel.ts +3 -3
- package/src/panels/pane-context.ts +31 -22
- package/src/panels/pane-grid.ts +49 -20
- package/src/panels/panel-registry.ts +22 -37
- package/src/panels/properties-panel.ts +175 -121
- package/src/panels/quick-search.ts +53 -31
- package/src/panels/right-panel.ts +3 -3
- package/src/panels/seo-modal.ts +13 -17
- package/src/panels/settings-menu.ts +15 -15
- package/src/panels/signals-panel.ts +153 -131
- package/src/panels/statement-editor.ts +230 -140
- package/src/panels/style-panel.ts +218 -205
- package/src/panels/style-utils.ts +114 -51
- package/src/panels/stylebook-doc.ts +57 -54
- package/src/panels/stylebook-layers-panel.ts +9 -9
- package/src/panels/stylebook-panel.ts +13 -17
- package/src/panels/tab-drop.ts +27 -11
- package/src/panels/tab-strip.ts +36 -26
- package/src/platform-errors.ts +57 -43
- package/src/platform.ts +58 -30
- package/src/platforms/cloud.ts +345 -175
- package/src/platforms/default-platform.ts +10 -4
- package/src/platforms/devserver.ts +129 -117
- package/src/platforms/read-batcher.ts +16 -8
- package/src/project-list.ts +2 -1
- package/src/publish/deploy-checklist.ts +8 -2
- package/src/publish/pages-service.ts +28 -13
- package/src/publish/publish-commands.ts +5 -4
- package/src/publish/publish-panel.ts +10 -6
- package/src/recent-projects.ts +15 -8
- package/src/resize-edges.ts +26 -36
- package/src/services/a11y-report.ts +26 -19
- package/src/services/agent-seed.ts +23 -11
- package/src/services/ai-ask.ts +9 -12
- package/src/services/ai-command-tools.ts +68 -62
- package/src/services/ai-import-tools.ts +80 -67
- package/src/services/ai-models.ts +17 -13
- package/src/services/ai-project-tools.ts +68 -32
- package/src/services/ai-session-store.ts +19 -10
- package/src/services/ai-system-prompt.ts +46 -20
- package/src/services/ai-tools.ts +71 -27
- package/src/services/ai-write-report.ts +20 -12
- package/src/services/ai-writes.ts +4 -4
- package/src/services/automation.ts +58 -31
- package/src/services/cem-export.ts +149 -58
- package/src/services/clock.ts +6 -1
- package/src/services/code-services.ts +37 -31
- package/src/services/context-manager.ts +14 -10
- package/src/services/context-resolver.ts +20 -8
- package/src/services/data-service.ts +19 -15
- package/src/services/directory-picker.ts +18 -12
- package/src/services/document-assistant.ts +39 -19
- package/src/services/gated-registry.ts +10 -6
- package/src/services/harness/chat-reducer.ts +23 -1
- package/src/services/import-client.ts +91 -38
- package/src/services/import-seed.ts +8 -2
- package/src/services/jx-validate.ts +28 -31
- package/src/services/live-preview.ts +0 -0
- package/src/services/live-surfaces.ts +6 -3
- package/src/services/model-uri.ts +10 -2
- package/src/services/module-preloads.ts +12 -8
- package/src/services/monaco-buffer.ts +43 -24
- package/src/services/monaco-lazy.ts +7 -8
- package/src/services/monaco-setup.ts +23 -16
- package/src/services/notify.ts +44 -17
- package/src/services/popover-report.ts +25 -10
- package/src/services/preview-eval.ts +20 -8
- package/src/services/profile.ts +13 -6
- package/src/services/project-path.ts +13 -10
- package/src/services/references.ts +0 -0
- package/src/services/render-critic.ts +8 -7
- package/src/services/settings/kernel.ts +13 -4
- package/src/services/settings/write-queue.ts +9 -9
- package/src/services/token-lint.ts +12 -10
- package/src/services/tool-executor.ts +17 -5
- package/src/services/tool-outcomes.ts +44 -24
- package/src/services/trusted-types.ts +24 -7
- package/src/settings/contexts-section.ts +11 -8
- package/src/settings/contributed-section.ts +79 -60
- package/src/settings/css-vars-editor.ts +37 -16
- package/src/settings/defs-editor.ts +38 -35
- package/src/settings/extension-rows.ts +16 -8
- package/src/settings/extension-sections.ts +23 -13
- package/src/settings/extensions-section.ts +4 -1
- package/src/settings/general-settings.ts +11 -8
- package/src/settings/locales-section.ts +20 -12
- package/src/settings/preferences-dialog.ts +9 -6
- package/src/settings/preferences-keymap.ts +7 -5
- package/src/settings/preferences-sections.ts +11 -5
- package/src/settings/project-sections.ts +1 -1
- package/src/settings/schema-field-ui.ts +9 -0
- package/src/settings/settings-document.ts +5 -5
- package/src/shell/tree.ts +6 -5
- package/src/shell.ts +104 -81
- package/src/site-context.ts +37 -22
- package/src/state.ts +41 -49
- package/src/store.ts +54 -34
- package/src/studio.ts +25 -75
- package/src/style/live-preview.ts +1 -1
- package/src/style/project-styles.ts +6 -7
- package/src/style/token-ref.ts +5 -4
- package/src/surfaces/about.ts +18 -19
- package/src/surfaces/add-repo.ts +17 -19
- package/src/surfaces/ai-chat.ts +31 -36
- package/src/surfaces/ai-credentials-form.ts +6 -16
- package/src/surfaces/ai-managed-connect.ts +3 -4
- package/src/surfaces/ai-model-picker.ts +3 -5
- package/src/surfaces/block-action-bar.ts +22 -11
- package/src/surfaces/boot-failure.ts +4 -5
- package/src/surfaces/bottom-dock.ts +9 -18
- package/src/surfaces/canvas-stage.ts +12 -11
- package/src/surfaces/cf-account-picker.ts +17 -18
- package/src/surfaces/commandbar.ts +14 -9
- package/src/surfaces/convert-repeater.ts +17 -19
- package/src/surfaces/data-actions.ts +9 -7
- package/src/surfaces/dialog.ts +26 -28
- package/src/surfaces/diff-toolbar.ts +9 -7
- package/src/surfaces/doc-header.ts +10 -19
- package/src/surfaces/empty-state.ts +7 -10
- package/src/surfaces/entry-editor.ts +14 -11
- package/src/surfaces/expression-editor.ts +11 -25
- package/src/surfaces/files-panel.ts +27 -14
- package/src/surfaces/formula-palette.ts +4 -5
- package/src/surfaces/git-panel.ts +7 -15
- package/src/surfaces/github-auth.ts +16 -20
- package/src/surfaces/github-publish.ts +17 -22
- package/src/surfaces/grid-cell.ts +30 -31
- package/src/surfaces/grid-open.ts +10 -14
- package/src/surfaces/grid-panel.ts +13 -9
- package/src/surfaces/grid-replace.ts +13 -13
- package/src/surfaces/grid-views.ts +15 -18
- package/src/surfaces/inspector-dock.ts +13 -12
- package/src/surfaces/jump-bar.ts +5 -6
- package/src/surfaces/jxsuite-update.ts +16 -22
- package/src/surfaces/library-pane.ts +19 -20
- package/src/surfaces/logic-panel.ts +17 -30
- package/src/surfaces/logic-workspace.ts +13 -15
- package/src/surfaces/media-browser.ts +11 -10
- package/src/surfaces/media-field.ts +4 -5
- package/src/surfaces/media-pane.ts +8 -7
- package/src/surfaces/menu.ts +29 -23
- package/src/surfaces/navigator-dock.ts +11 -12
- package/src/surfaces/new-project.ts +27 -26
- package/src/surfaces/pane-context.ts +20 -25
- package/src/surfaces/pane-grid.ts +15 -10
- package/src/surfaces/panel-activity.ts +5 -6
- package/src/surfaces/panel-data.ts +3 -4
- package/src/surfaces/panel-deploy-checklist.ts +5 -6
- package/src/surfaces/panel-elements.ts +5 -7
- package/src/surfaces/panel-i18n.ts +5 -7
- package/src/surfaces/panel-imports.ts +6 -13
- package/src/surfaces/panel-outline.ts +25 -19
- package/src/surfaces/panel-page.ts +11 -18
- package/src/surfaces/panel-problems.ts +5 -7
- package/src/surfaces/panel-signals.ts +20 -34
- package/src/surfaces/panel-stylebook-layers.ts +5 -8
- package/src/surfaces/preferences.ts +21 -11
- package/src/surfaces/progress-modal.ts +15 -9
- package/src/surfaces/properties-panel.json +1 -1
- package/src/surfaces/properties-panel.ts +20 -42
- package/src/surfaces/publish.ts +18 -18
- package/src/surfaces/push-plan.ts +7 -8
- package/src/surfaces/rail.ts +13 -13
- package/src/surfaces/reference-field.ts +11 -15
- package/src/surfaces/schema-builder.ts +16 -22
- package/src/surfaces/schema-form.ts +15 -25
- package/src/surfaces/secret-field.ts +9 -6
- package/src/surfaces/seo.ts +21 -15
- package/src/surfaces/settings-contexts.ts +9 -7
- package/src/surfaces/settings-contributed.ts +14 -10
- package/src/surfaces/settings-css-vars.ts +5 -12
- package/src/surfaces/settings-defs.json +2 -2
- package/src/surfaces/settings-defs.ts +17 -21
- package/src/surfaces/settings-deploy.ts +8 -15
- package/src/surfaces/settings-extensions.ts +5 -6
- package/src/surfaces/settings-head.ts +33 -39
- package/src/surfaces/settings-locales.ts +8 -20
- package/src/surfaces/settings-overview.ts +5 -6
- package/src/surfaces/settings-packages.ts +8 -7
- package/src/surfaces/settings-pane.ts +9 -18
- package/src/surfaces/settings-rawjson.ts +5 -6
- package/src/surfaces/shell.ts +1 -2
- package/src/surfaces/slash-menu.ts +19 -9
- package/src/surfaces/statements.ts +13 -18
- package/src/surfaces/statusbar.ts +17 -14
- package/src/surfaces/style-panel.ts +18 -31
- package/src/surfaces/stylebook-chrome.ts +3 -5
- package/src/surfaces/tab-strip.ts +14 -13
- package/src/surfaces/target-line.ts +6 -7
- package/src/surfaces/welcome.ts +5 -7
- package/src/tabs/patch-ops.ts +4 -3
- package/src/tabs/project-config.ts +32 -21
- package/src/tabs/selection.ts +36 -8
- package/src/tabs/tab.ts +52 -41
- package/src/tabs/transact.ts +98 -53
- package/src/types.ts +32 -17
- package/src/ui/ai-credentials-form.ts +10 -13
- package/src/ui/ai-model-picker.ts +3 -3
- package/src/ui/cf-account-picker.ts +7 -9
- package/src/ui/color-selector.ts +9 -5
- package/src/ui/dynamic-slot.ts +7 -8
- package/src/ui/expression-editor.ts +112 -105
- package/src/ui/form-controls.ts +57 -48
- package/src/ui/formula-catalog.ts +239 -230
- package/src/ui/formula-chips.ts +33 -18
- package/src/ui/layers.ts +44 -31
- package/src/ui/media-picker.ts +18 -9
- package/src/ui/popover-surface.ts +20 -12
- package/src/ui/progress-modal.ts +13 -8
- package/src/ui/regions.ts +7 -6
- package/src/ui/schema-form.ts +113 -70
- package/src/ui/surface.ts +71 -8
- package/src/ui/timing.ts +9 -0
- package/src/ui/value-source.ts +44 -31
- package/src/ui/virtual-window.ts +3 -2
- package/src/utils/base64.ts +3 -1
- package/src/utils/edit-display.ts +73 -73
- package/src/utils/element-selectors.ts +3 -2
- package/src/utils/google-fonts.ts +15 -14
- package/src/utils/inherited-style.ts +18 -20
- package/src/utils/link-target.ts +1 -1
- package/src/utils/preview-format.ts +25 -3
- package/src/utils/strip-events.ts +49 -22
- package/src/utils/studio-utils.ts +29 -14
- package/src/view.ts +2 -3
- package/src/workspace/pane-derive.ts +10 -12
- package/src/workspace/session.ts +53 -43
- package/src/workspace/workspace.ts +40 -36
- package/dist/chunks/adapter-f93pafd7.js +0 -4
- package/dist/chunks/cf-account-picker-af1h381v.js +0 -4
- package/dist/chunks/cf-settings-125tdm0w.js +0 -4
- package/dist/chunks/color-area-jqhna8zy.js +0 -4
- package/dist/chunks/color-field-embq5ctg.js +0 -4
- package/dist/chunks/color-fpezvnkt.js +0 -4
- package/dist/chunks/color-slider-1qmw7wqy.js +0 -4
- package/dist/chunks/combobox-773hdzyj.js +0 -4
- package/dist/chunks/components-ax2f1fnn.js +0 -4
- package/dist/chunks/content-source-108aqtk1.js +0 -4
- package/dist/chunks/convert-to-repeater-ry5rmppr.js +0 -4
- package/dist/chunks/dialog-mtm9fq5t.js +0 -4
- package/dist/chunks/editor-pfgdmkb0.js +0 -4
- package/dist/chunks/entry-commands-t0k1q0kx.js +0 -4
- package/dist/chunks/extension-sections-6mwh2hf8.js +0 -4
- package/dist/chunks/file-ops-meej5mqf.js +0 -4
- package/dist/chunks/files-44vp8a2s.js +0 -4
- package/dist/chunks/format-host-7q1petb9.js +0 -4
- package/dist/chunks/fs-events-h2mwnxaz.js +0 -4
- package/dist/chunks/git-panel-zngbymvd.js +0 -4
- package/dist/chunks/grid-view-sx9vynsp.js +0 -51
- package/dist/chunks/icons-p44xhjf0.js +0 -4
- package/dist/chunks/iframe-entry-f7mqjwpm.js +0 -5
- package/dist/chunks/iframe-entry-haw7jkvz.js +0 -5
- package/dist/chunks/iframe-entry-z6qrytv3.js +0 -5
- package/dist/chunks/iframe-host-qk3ycq87.js +0 -4
- package/dist/chunks/index-wkyfjeqz.js +0 -4
- package/dist/chunks/jx-validate-psgd7vsx.js +0 -4
- package/dist/chunks/layers-panel-1kq2jyfk.js +0 -4
- package/dist/chunks/layers-xd92fg8d.js +0 -4
- package/dist/chunks/listbox-s8fkmnq8.js +0 -4
- package/dist/chunks/lit-html-ac4cwwr4.js +0 -4
- package/dist/chunks/media-picker-0svzkdyb.js +0 -4
- package/dist/chunks/menu-37d07z9m.js +0 -4
- package/dist/chunks/menu-5c55ea3d.js +0 -4
- package/dist/chunks/monaco-binding-z6r70pdt.js +0 -4
- package/dist/chunks/monaco-buffer-fz6gq5y7.js +0 -4
- package/dist/chunks/monaco-setup-q4axkgj7.js +0 -4
- package/dist/chunks/notify-0xgtn8q1.js +0 -4
- package/dist/chunks/number-field-gw7sq8rn.js +0 -4
- package/dist/chunks/parse-897fvqah.js +0 -4
- package/dist/chunks/platform-v1qctbe6.js +0 -4
- package/dist/chunks/popover-8htra4er.js +0 -4
- package/dist/chunks/publish-panel-ym1fmgq5.js +0 -4
- package/dist/chunks/quick-search-a54e6t5n.js +0 -4
- package/dist/chunks/references-gmqp82fs.js +0 -4
- package/dist/chunks/right-panel-v7t9awbk.js +0 -4
- package/dist/chunks/section-registry-vhyf3zsr.js +0 -4
- package/dist/chunks/select-n3v7gwas.js +0 -4
- package/dist/chunks/split-pff8f3ze.js +0 -4
- package/dist/chunks/studio-0bhx5hz6.js +0 -5
- package/dist/chunks/studio-0k1ddnyy.js +0 -6
- package/dist/chunks/studio-1b04pd0j.js +0 -64
- package/dist/chunks/studio-4dwbj6gb.js +0 -5
- package/dist/chunks/studio-4tanh828.js +0 -5
- package/dist/chunks/studio-55h4mstj.js +0 -4
- package/dist/chunks/studio-5tnvjkz4.js +0 -5
- package/dist/chunks/studio-60dqgb0c.js +0 -5
- package/dist/chunks/studio-61dp09qg.js +0 -9
- package/dist/chunks/studio-63epcrj2.js +0 -5
- package/dist/chunks/studio-74k29dy9.js +0 -5
- package/dist/chunks/studio-7vg6jcd3.js +0 -5
- package/dist/chunks/studio-7zx31knw.js +0 -9
- package/dist/chunks/studio-8bxk97km.js +0 -5
- package/dist/chunks/studio-933e30n4.js +0 -5
- package/dist/chunks/studio-98wnwhbg.js +0 -5
- package/dist/chunks/studio-9mccjwjh.js +0 -14
- package/dist/chunks/studio-a2ke1e4t.js +0 -5
- package/dist/chunks/studio-e3a2a6v3.js +0 -4
- package/dist/chunks/studio-e81q1vb9.js +0 -5
- package/dist/chunks/studio-epgrmqqm.js +0 -5
- package/dist/chunks/studio-ery42sqr.js +0 -4
- package/dist/chunks/studio-g1shz58g.js +0 -5
- package/dist/chunks/studio-gf0fz03c.js +0 -5
- package/dist/chunks/studio-gjtpe62q.js +0 -6
- package/dist/chunks/studio-gkskhg7m.js +0 -5
- package/dist/chunks/studio-gx4dnjzd.js +0 -5
- package/dist/chunks/studio-j03zga3y.js +0 -9
- package/dist/chunks/studio-jhpxeckz.js +0 -5
- package/dist/chunks/studio-k01r7ykp.js +0 -5
- package/dist/chunks/studio-kk7h30ne.js +0 -7
- package/dist/chunks/studio-kt1zqney.js +0 -5
- package/dist/chunks/studio-m3cwhvye.js +0 -5
- package/dist/chunks/studio-mcayt6hz.js +0 -5
- package/dist/chunks/studio-myjcghv3.js +0 -5
- package/dist/chunks/studio-n8bxwc3y.js +0 -4
- package/dist/chunks/studio-ngm8gvpb.js +0 -5
- package/dist/chunks/studio-nj5a01jy.js +0 -928
- package/dist/chunks/studio-pcgz8heb.js +0 -5
- package/dist/chunks/studio-qcsq0t15.js +0 -5
- package/dist/chunks/studio-qkstvve9.js +0 -5
- package/dist/chunks/studio-qv1pwd3c.js +0 -5
- package/dist/chunks/studio-rc6dvxjb.js +0 -7
- package/dist/chunks/studio-s8dmmz66.js +0 -5
- package/dist/chunks/studio-sp5xzbj4.js +0 -6
- package/dist/chunks/studio-szsjbj0g.js +0 -5
- package/dist/chunks/studio-t1xzawhr.js +0 -16
- package/dist/chunks/studio-t6b6qe31.js +0 -5
- package/dist/chunks/studio-tdcprbqb.js +0 -5
- package/dist/chunks/studio-vyc0b4he.js +0 -10
- package/dist/chunks/studio-w0cgf6jg.js +0 -5
- package/dist/chunks/studio-w3hskzqk.js +0 -5
- package/dist/chunks/studio-xgrgcdyh.js +0 -9
- package/dist/chunks/studio-xz2yxfcb.js +0 -5
- package/dist/chunks/studio-y6n42tgs.js +0 -5
- package/dist/chunks/studio-yb560vxr.js +0 -5
- package/dist/chunks/studio-yn9f8vtx.js +0 -5
- package/dist/chunks/studio-yw05w8f0.js +0 -7
- package/dist/chunks/studio-z16sgavc.js +0 -5
- package/dist/chunks/studio-zyqn40w4.js +0 -5
- package/dist/chunks/swatch-group-8qh9a3bm.js +0 -4
- package/dist/chunks/tabs-jwthg40w.js +0 -4
- package/dist/chunks/textfield-spy3hc77.js +0 -4
- package/dist/chunks/toast-4d35zd64.js +0 -4
- package/dist/chunks/toast-host-8sjmfed3.js +0 -4
- package/dist/chunks/tooltip-fd6g9xy3.js +0 -4
- package/dist/chunks/tree-h19v1jfz.js +0 -4
- package/dist/chunks/workspace-zt81g1ms.js +0 -4
- package/dist/chunks/ws-client-n2bh4hkf.js +0 -4
|
@@ -27,16 +27,9 @@
|
|
|
27
27
|
import { reactive } from "../reactivity";
|
|
28
28
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
29
29
|
import docHeaderDoc from "./doc-header.json";
|
|
30
|
-
import type {
|
|
31
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
30
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
32
31
|
|
|
33
|
-
registerSurface("doc-header", docHeaderDoc
|
|
34
|
-
|
|
35
|
-
/** One choice in a row's picker. The shape `jx-select` reads. */
|
|
36
|
-
export interface DocHeaderChoice {
|
|
37
|
-
value: string;
|
|
38
|
-
label: string;
|
|
39
|
-
}
|
|
32
|
+
registerSurface("doc-header", docHeaderDoc);
|
|
40
33
|
|
|
41
34
|
/**
|
|
42
35
|
* One row of the card, as the document reads it.
|
|
@@ -45,7 +38,7 @@ export interface DocHeaderChoice {
|
|
|
45
38
|
* `$switch` chooses on one: a row that omitted `options` would leave the picker case reading an
|
|
46
39
|
* absent path.
|
|
47
40
|
*/
|
|
48
|
-
export interface DocHeaderRow
|
|
41
|
+
export interface DocHeaderRow {
|
|
49
42
|
/** The row's identity: the repeater's key, and the argument every action is given. */
|
|
50
43
|
key: string;
|
|
51
44
|
/** The name on `data-prop` — what a reader, a screenshot region and the inspector call it. */
|
|
@@ -68,7 +61,7 @@ export interface DocHeaderRow extends Record<string, unknown> {
|
|
|
68
61
|
/** A text row's placeholder. Empty draws none. */
|
|
69
62
|
placeholder: string;
|
|
70
63
|
/** A picker's rows, in the order they are offered. Empty on every other kind. */
|
|
71
|
-
options:
|
|
64
|
+
options: SurfaceOption[];
|
|
72
65
|
/** A sentence under the control — an empty collection, or a listing that failed. */
|
|
73
66
|
note: string;
|
|
74
67
|
/** Whether {@link DocHeaderRow.note} has anything in it; `$switch` is the document's conditional. */
|
|
@@ -80,7 +73,7 @@ export interface DocHeaderRow extends Record<string, unknown> {
|
|
|
80
73
|
}
|
|
81
74
|
|
|
82
75
|
/** One `$head` entry the disclosure lists, read-only. */
|
|
83
|
-
export interface DocHeaderRawEntry
|
|
76
|
+
export interface DocHeaderRawEntry {
|
|
84
77
|
/** Unique within one document — the repeater's key. */
|
|
85
78
|
key: string;
|
|
86
79
|
/** The entry as markup, e.g. `<meta name="author">`. */
|
|
@@ -134,7 +127,7 @@ export interface DocHeaderActions {
|
|
|
134
127
|
/** Open the OS file picker for a media row and assign what comes back. */
|
|
135
128
|
upload: (key: string) => void;
|
|
136
129
|
/** Open the media browser under the button that was pressed. */
|
|
137
|
-
browse: (key: string, anchor:
|
|
130
|
+
browse: (key: string, anchor: EventTarget | null) => void;
|
|
138
131
|
/** Run the `document.openSeo` command — the door to Search appearance. */
|
|
139
132
|
openSeo: () => void;
|
|
140
133
|
/** Remember that the Raw head tags disclosure was opened or closed. */
|
|
@@ -153,7 +146,7 @@ export interface DocHeaderSurface {
|
|
|
153
146
|
}
|
|
154
147
|
|
|
155
148
|
/** The scope the document reads: the view plus the actions, flat. */
|
|
156
|
-
interface DocHeaderScope extends
|
|
149
|
+
interface DocHeaderScope extends DocHeaderView, DocHeaderActions {}
|
|
157
150
|
|
|
158
151
|
/** Write a whole view into the scope. Assignment only — the mount is never rebuilt for a repaint. */
|
|
159
152
|
function project(scope: DocHeaderScope, view: DocHeaderView): void {
|
|
@@ -184,7 +177,7 @@ export function mountDocHeaderSurface(
|
|
|
184
177
|
view: DocHeaderView,
|
|
185
178
|
actions: DocHeaderActions,
|
|
186
179
|
): DocHeaderSurface {
|
|
187
|
-
const scope = reactive<DocHeaderScope>({
|
|
180
|
+
const scope: DocHeaderScope = reactive<DocHeaderScope>({
|
|
188
181
|
...actions,
|
|
189
182
|
collection: "Document",
|
|
190
183
|
expanded: true,
|
|
@@ -195,7 +188,7 @@ export function mountDocHeaderSurface(
|
|
|
195
188
|
region: "",
|
|
196
189
|
route: "",
|
|
197
190
|
rows: [],
|
|
198
|
-
})
|
|
191
|
+
});
|
|
199
192
|
project(scope, view);
|
|
200
193
|
|
|
201
194
|
host.replaceChildren();
|
|
@@ -218,9 +211,7 @@ export function mountDocHeaderSurface(
|
|
|
218
211
|
stage that redrew took the card's root away without telling anyone. */
|
|
219
212
|
connected: () =>
|
|
220
213
|
!disposed &&
|
|
221
|
-
(mounted === null
|
|
222
|
-
? host.childNodes.length === 0
|
|
223
|
-
: (mounted.root as Node).parentNode === host),
|
|
214
|
+
(mounted === null ? host.childNodes.length === 0 : mounted.root.parentNode === host),
|
|
224
215
|
dispose() {
|
|
225
216
|
disposed = true;
|
|
226
217
|
mounted?.dispose();
|
|
@@ -28,13 +28,12 @@ import { reactive } from "../reactivity";
|
|
|
28
28
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
29
29
|
import emptyStateDoc from "./empty-state.json";
|
|
30
30
|
import type { EmptyStateSpec } from "../panels/empty-state";
|
|
31
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
32
31
|
import type { SurfaceHandle } from "../ui/surface";
|
|
33
32
|
|
|
34
|
-
registerSurface("empty-state", emptyStateDoc
|
|
33
|
+
registerSurface("empty-state", emptyStateDoc);
|
|
35
34
|
|
|
36
35
|
/** One button, as the document draws it: a key, a word, and whether it can act. */
|
|
37
|
-
interface EmptyStateActionRow
|
|
36
|
+
interface EmptyStateActionRow {
|
|
38
37
|
/** The repeater's key and what a press is addressed with — this action's slot in the list. */
|
|
39
38
|
id: string;
|
|
40
39
|
label: string;
|
|
@@ -44,10 +43,8 @@ interface EmptyStateActionRow extends Record<string, unknown> {
|
|
|
44
43
|
/**
|
|
45
44
|
* What the document draws, with every branch already decided.
|
|
46
45
|
*
|
|
47
|
-
* Named apart from the scope
|
|
48
|
-
*
|
|
49
|
-
* and drops every named property — so the projection below would have type-checked against
|
|
50
|
-
* anything.
|
|
46
|
+
* Named apart from the scope, which adds the one callback, so the projection below is checked
|
|
47
|
+
* against exactly the fields the document draws.
|
|
51
48
|
*/
|
|
52
49
|
interface EmptyStateView {
|
|
53
50
|
message: string;
|
|
@@ -59,7 +56,7 @@ interface EmptyStateView {
|
|
|
59
56
|
}
|
|
60
57
|
|
|
61
58
|
/** The scope `empty-state.json` reads. Every field is a value; the document asks no question. */
|
|
62
|
-
interface EmptyStateScope extends
|
|
59
|
+
interface EmptyStateScope extends EmptyStateView {
|
|
63
60
|
runAction: (id: string) => void;
|
|
64
61
|
}
|
|
65
62
|
|
|
@@ -89,12 +86,12 @@ export function createEmptyStateSurface(spec: EmptyStateSpec): EmptyStateSurface
|
|
|
89
86
|
|
|
90
87
|
/** The handlers, held apart from the scope so `runAction` never has to be reassigned. */
|
|
91
88
|
let handlers: (() => void)[] = [];
|
|
92
|
-
const scope = reactive<EmptyStateScope>({
|
|
89
|
+
const scope: EmptyStateScope = reactive<EmptyStateScope>({
|
|
93
90
|
...project(spec),
|
|
94
91
|
runAction: (id: string) => {
|
|
95
92
|
handlers[Number(id)]?.();
|
|
96
93
|
},
|
|
97
|
-
})
|
|
94
|
+
});
|
|
98
95
|
handlers = handlersOf(spec);
|
|
99
96
|
|
|
100
97
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -27,13 +27,14 @@
|
|
|
27
27
|
* @docs studio/projects/content-types
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
30
31
|
import { reactive } from "../reactivity";
|
|
31
32
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
32
33
|
import entryEditorDoc from "./entry-editor.json";
|
|
33
|
-
import type {
|
|
34
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
34
35
|
import type { SurfaceHandle } from "../ui/surface";
|
|
35
36
|
|
|
36
|
-
registerSurface("entry-editor", entryEditorDoc
|
|
37
|
+
registerSurface("entry-editor", entryEditorDoc);
|
|
37
38
|
|
|
38
39
|
/** Everything the document draws, as one value. */
|
|
39
40
|
export interface EntryEditorView {
|
|
@@ -89,7 +90,7 @@ export interface EntryEditorSurfaceHandle {
|
|
|
89
90
|
}
|
|
90
91
|
|
|
91
92
|
/** The scope the document reads: the view plus the actions, flat. */
|
|
92
|
-
interface EntryEditorScope extends
|
|
93
|
+
interface EntryEditorScope extends EntryEditorView, EntryEditorActions {}
|
|
93
94
|
|
|
94
95
|
/** Write a whole view into the scope. Assignment only — the mount is never rebuilt for a repaint. */
|
|
95
96
|
function project(scope: EntryEditorScope, view: EntryEditorView): void {
|
|
@@ -107,10 +108,9 @@ function project(scope: EntryEditorScope, view: EntryEditorView): void {
|
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
/** The `part` a node was authored with, or `""` — the only thing this adapter asks about a node. */
|
|
110
|
-
function partOf(def:
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
return typeof part === "string" ? part : "";
|
|
111
|
+
function partOf(def: JxElement | string): string {
|
|
112
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
113
|
+
return isString(part) ? part : "";
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
/**
|
|
@@ -133,7 +133,7 @@ export function mountEntryEditorSurface(
|
|
|
133
133
|
islands: EntryEditorIslands,
|
|
134
134
|
): EntryEditorSurfaceHandle {
|
|
135
135
|
host.replaceChildren();
|
|
136
|
-
const scope = reactive<EntryEditorScope>({
|
|
136
|
+
const scope: EntryEditorScope = reactive<EntryEditorScope>({
|
|
137
137
|
collection: "",
|
|
138
138
|
draft: false,
|
|
139
139
|
draftAxis: "hidden",
|
|
@@ -147,7 +147,7 @@ export function mountEntryEditorSurface(
|
|
|
147
147
|
region: "",
|
|
148
148
|
setDraft: actions.setDraft,
|
|
149
149
|
stage: "empty",
|
|
150
|
-
})
|
|
150
|
+
});
|
|
151
151
|
project(scope, view);
|
|
152
152
|
|
|
153
153
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -163,12 +163,15 @@ export function mountEntryEditorSurface(
|
|
|
163
163
|
}
|
|
164
164
|
},
|
|
165
165
|
}).then((surface) => {
|
|
166
|
+
/* SAFETY: `entry-editor.json`'s root definition is a `div` element, so the runtime mounts an
|
|
167
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
168
|
+
const root = surface.root as HTMLElement;
|
|
166
169
|
if (disposed) {
|
|
167
170
|
surface.dispose();
|
|
168
|
-
return
|
|
171
|
+
return root;
|
|
169
172
|
}
|
|
170
173
|
mounted = surface;
|
|
171
|
-
return
|
|
174
|
+
return root;
|
|
172
175
|
});
|
|
173
176
|
|
|
174
177
|
return {
|
|
@@ -31,26 +31,12 @@
|
|
|
31
31
|
import { reactive } from "../reactivity";
|
|
32
32
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
33
33
|
import expressionEditorDoc from "./expression-editor.json";
|
|
34
|
-
import type {
|
|
35
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
34
|
+
import type { SurfaceHandle, SurfaceOption, SurfaceOptionGroup } from "../ui/surface";
|
|
36
35
|
|
|
37
|
-
registerSurface("expression-editor", expressionEditorDoc
|
|
38
|
-
|
|
39
|
-
/** A closed list of choices, in the shape the kit's select reads. */
|
|
40
|
-
export interface ExprOption {
|
|
41
|
-
value: string;
|
|
42
|
-
label: string;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/** A delimited run of choices — the kit's own `optgroup`, which draws both halves of the rule. */
|
|
46
|
-
export interface ExprSelectGroup {
|
|
47
|
-
id: string;
|
|
48
|
-
label: string;
|
|
49
|
-
rows: ExprOption[];
|
|
50
|
-
}
|
|
36
|
+
registerSurface("expression-editor", expressionEditorDoc);
|
|
51
37
|
|
|
52
38
|
/** One chip of the pipeline, as the document draws it. */
|
|
53
|
-
export interface ExprChipView
|
|
39
|
+
export interface ExprChipView {
|
|
54
40
|
/** The joined node path: the repeater's key, and what a click reports back to the flow. */
|
|
55
41
|
key: string;
|
|
56
42
|
label: string;
|
|
@@ -83,7 +69,7 @@ export type ExprLead = "none" | "arg" | "case" | "default";
|
|
|
83
69
|
* Every field is a string, a flag or a list: the document asks no question about an expression, and
|
|
84
70
|
* there is no branch in it that the walk has not already taken.
|
|
85
71
|
*/
|
|
86
|
-
export interface ExprRowView
|
|
72
|
+
export interface ExprRowView {
|
|
87
73
|
/**
|
|
88
74
|
* Unique within one editor, and the repeater's key. It is the node's own path plus the slot it
|
|
89
75
|
* fills, so a row that survives an edit keeps its node — which is what stops a keystroke in one
|
|
@@ -111,19 +97,19 @@ export interface ExprRowView extends Record<string, unknown> {
|
|
|
111
97
|
/** The accessible name of the row's icon-only control. */
|
|
112
98
|
title: string;
|
|
113
99
|
/** An `operator` row's grouped operator list. */
|
|
114
|
-
groups:
|
|
100
|
+
groups: SurfaceOptionGroup[];
|
|
115
101
|
/** An `operator` row offers the catalog beside its picker; a nested one does not. */
|
|
116
102
|
catalog: boolean;
|
|
117
103
|
/** Which rung an `operand` row shows. */
|
|
118
104
|
source: ExprSource;
|
|
119
105
|
/** The rungs on offer. Empty means the slot admits one shape, so there is nothing to choose. */
|
|
120
|
-
sourceOptions:
|
|
106
|
+
sourceOptions: SurfaceOption[];
|
|
121
107
|
/** Whether the rung picker is drawn at all — `sourceOptions` non-empty, said as a flag. */
|
|
122
108
|
chooser: boolean;
|
|
123
109
|
/** `string`, `number`, `boolean` or `null` — what the literal type picker holds. */
|
|
124
110
|
literalType: string;
|
|
125
111
|
/** The literal types on offer. A separate list from {@link sourceOptions}: two questions. */
|
|
126
|
-
typeOptions:
|
|
112
|
+
typeOptions: SurfaceOption[];
|
|
127
113
|
/** Which literal control follows the type picker: `text`, `number`, `bool` or `null`. */
|
|
128
114
|
literal: string;
|
|
129
115
|
/** What a text literal, a number literal or a ref picker holds. */
|
|
@@ -131,9 +117,9 @@ export interface ExprRowView extends Record<string, unknown> {
|
|
|
131
117
|
/** What a boolean literal holds. */
|
|
132
118
|
checked: boolean;
|
|
133
119
|
/** The signals this slot may bind to. */
|
|
134
|
-
refOptions:
|
|
120
|
+
refOptions: SurfaceOption[];
|
|
135
121
|
/** The event refs, as their own named run. Empty where the position admits none. */
|
|
136
|
-
refGroups:
|
|
122
|
+
refGroups: SurfaceOptionGroup[];
|
|
137
123
|
/** Which leading cell the row carries. */
|
|
138
124
|
lead: ExprLead;
|
|
139
125
|
/** An arg's positional name, or the `default` case's word. */
|
|
@@ -181,7 +167,7 @@ export interface ExpressionActions {
|
|
|
181
167
|
pickChip: (key: string) => void;
|
|
182
168
|
}
|
|
183
169
|
|
|
184
|
-
interface ExpressionScope extends
|
|
170
|
+
interface ExpressionScope extends ExpressionActions {
|
|
185
171
|
rows: ExprRowView[];
|
|
186
172
|
}
|
|
187
173
|
|
|
@@ -225,7 +211,7 @@ export function renderExpressionEditorSurface(
|
|
|
225
211
|
}
|
|
226
212
|
takeDown(host, existing);
|
|
227
213
|
host.textContent = "";
|
|
228
|
-
const scope = reactive({ ...actions, rows })
|
|
214
|
+
const scope: ExpressionScope = reactive<ExpressionScope>({ ...actions, rows });
|
|
229
215
|
const record: Mounted = { disposed: false, handle: null, scope };
|
|
230
216
|
mounts.set(host, record);
|
|
231
217
|
/* No race to arbitrate: a repaint arriving while this is in flight takes the branch above — a
|
|
@@ -37,14 +37,15 @@
|
|
|
37
37
|
* @docs studio/interface
|
|
38
38
|
*/
|
|
39
39
|
|
|
40
|
+
import { isNonNullObject, isString } from "@jxsuite/schema/guards";
|
|
40
41
|
import { reactive } from "../reactivity";
|
|
41
42
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
42
43
|
import filesPanelDoc from "./files-panel.json";
|
|
43
|
-
import type {
|
|
44
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
44
45
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
45
46
|
import type { SurfaceHandle } from "../ui/surface";
|
|
46
47
|
|
|
47
|
-
registerSurface("files-panel", filesPanelDoc
|
|
48
|
+
registerSurface("files-panel", filesPanelDoc);
|
|
48
49
|
|
|
49
50
|
/**
|
|
50
51
|
* One row the tree draws, with every field already a string.
|
|
@@ -170,7 +171,7 @@ export interface FilesPanelSurfaceHandle {
|
|
|
170
171
|
}
|
|
171
172
|
|
|
172
173
|
/** The scope the document reads: the projection, plus everything a control can ask for. */
|
|
173
|
-
interface FilesPanelScope extends
|
|
174
|
+
interface FilesPanelScope extends FilesPanelValues, FilesPanelActions {}
|
|
174
175
|
|
|
175
176
|
/** Write a projection into the scope. Assignment by assignment, so an unchanged field is inert. */
|
|
176
177
|
function project(scope: FilesPanelScope, values: FilesPanelValues): void {
|
|
@@ -214,15 +215,28 @@ export function emptyFilesPanelValues(): FilesPanelValues {
|
|
|
214
215
|
|
|
215
216
|
/** The `part` a node's definition carries, or `""` for a text node or an unmarked element. */
|
|
216
217
|
function partOf(def: JxElement | string): string {
|
|
217
|
-
const part =
|
|
218
|
-
return
|
|
218
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
219
|
+
return isString(part) ? part : "";
|
|
219
220
|
}
|
|
220
221
|
|
|
221
|
-
/**
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
222
|
+
/**
|
|
223
|
+
* The path and type of the mapped row a node was rendered inside, or null when it was not in one.
|
|
224
|
+
* The only mapped array in `files-panel.json` is `#/state/rows`, which `project()` fills from
|
|
225
|
+
* `FilesPanelValues.rows: FileRowView[]`, so a row's item carries both as strings.
|
|
226
|
+
*/
|
|
227
|
+
function mappedRow(state: JxScope | undefined): Pick<FileRowView, "path" | "type"> | null {
|
|
228
|
+
const map = state?.["$map"];
|
|
229
|
+
const item = isNonNullObject(map) && "item" in map ? map.item : undefined;
|
|
230
|
+
if (
|
|
231
|
+
!isNonNullObject(item) ||
|
|
232
|
+
!("path" in item) ||
|
|
233
|
+
!isString(item.path) ||
|
|
234
|
+
!("type" in item) ||
|
|
235
|
+
!isString(item.type)
|
|
236
|
+
) {
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
return { path: item.path, type: item.type };
|
|
226
240
|
}
|
|
227
241
|
|
|
228
242
|
/**
|
|
@@ -237,10 +251,10 @@ export function mountFilesPanelSurface(
|
|
|
237
251
|
values: FilesPanelValues,
|
|
238
252
|
actions: FilesPanelActions,
|
|
239
253
|
): FilesPanelSurfaceHandle {
|
|
240
|
-
const scope = reactive<FilesPanelScope>({
|
|
254
|
+
const scope: FilesPanelScope = reactive<FilesPanelScope>({
|
|
241
255
|
...emptyFilesPanelValues(),
|
|
242
256
|
...actions,
|
|
243
|
-
})
|
|
257
|
+
});
|
|
244
258
|
project(scope, values);
|
|
245
259
|
|
|
246
260
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -286,8 +300,7 @@ export function mountFilesPanelSurface(
|
|
|
286
300
|
answer is simply whether this handle is still wanted — answering no would start a second
|
|
287
301
|
mount racing the first. Once mounted, the question is whether the root is still where it was
|
|
288
302
|
put: a Navigator that painted another panel cleared this document out from under it. */
|
|
289
|
-
connected: () =>
|
|
290
|
-
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
303
|
+
connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
|
|
291
304
|
dispose() {
|
|
292
305
|
disposed = true;
|
|
293
306
|
mounted?.dispose();
|
|
@@ -39,9 +39,8 @@ import formulaPaletteDoc from "./formula-palette.json";
|
|
|
39
39
|
|
|
40
40
|
import type { FormulaCatalogEntry } from "../ui/formula-catalog";
|
|
41
41
|
import type { SurfaceHandle } from "../ui/surface";
|
|
42
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
43
42
|
|
|
44
|
-
registerSurface("formula-palette", formulaPaletteDoc
|
|
43
|
+
registerSurface("formula-palette", formulaPaletteDoc);
|
|
45
44
|
|
|
46
45
|
/** The popover slot id, and so the `overlay.popover:formula-palette` region the shots address. */
|
|
47
46
|
const SLOT = "formula-palette";
|
|
@@ -81,7 +80,7 @@ interface GroupProjection {
|
|
|
81
80
|
}
|
|
82
81
|
|
|
83
82
|
/** The scope `formula-palette.json` reads, and the six things a gesture asks of this module. */
|
|
84
|
-
interface FormulaPaletteScope
|
|
83
|
+
interface FormulaPaletteScope {
|
|
85
84
|
open: boolean;
|
|
86
85
|
query: string;
|
|
87
86
|
groups: GroupProjection[];
|
|
@@ -106,7 +105,7 @@ interface FormulaPaletteScope extends Record<string, unknown> {
|
|
|
106
105
|
move: (delta: number) => void;
|
|
107
106
|
activate: () => void;
|
|
108
107
|
hover: (index: number) => void;
|
|
109
|
-
activateRow: (value:
|
|
108
|
+
activateRow: (value: string) => void;
|
|
110
109
|
}
|
|
111
110
|
|
|
112
111
|
let _open = false;
|
|
@@ -228,7 +227,7 @@ function scope(): FormulaPaletteScope {
|
|
|
228
227
|
},
|
|
229
228
|
open: false,
|
|
230
229
|
query: "",
|
|
231
|
-
})
|
|
230
|
+
});
|
|
232
231
|
return _scope;
|
|
233
232
|
}
|
|
234
233
|
|
|
@@ -26,10 +26,9 @@
|
|
|
26
26
|
import { reactive } from "../reactivity";
|
|
27
27
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
28
28
|
import gitPanelDoc from "./git-panel.json";
|
|
29
|
-
import type {
|
|
30
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
29
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
31
30
|
|
|
32
|
-
registerSurface("git-panel", gitPanelDoc
|
|
31
|
+
registerSurface("git-panel", gitPanelDoc);
|
|
33
32
|
|
|
34
33
|
/** One changed file, as the document draws it. Every field is a value: no records, no closures. */
|
|
35
34
|
export interface GitFileRowView {
|
|
@@ -72,12 +71,6 @@ export interface GitCommitView {
|
|
|
72
71
|
meta: string;
|
|
73
72
|
}
|
|
74
73
|
|
|
75
|
-
/** One row of the branch picker. `__new__` is a row like any other; the flow knows what it means. */
|
|
76
|
-
export interface GitBranchOption {
|
|
77
|
-
value: string;
|
|
78
|
-
label: string;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
74
|
/** What the panel says the surface should be showing right now. */
|
|
82
75
|
export interface GitPanelValues {
|
|
83
76
|
/**
|
|
@@ -104,7 +97,7 @@ export interface GitPanelValues {
|
|
|
104
97
|
branchName: string;
|
|
105
98
|
/** What the picker currently holds. Not always {@link branchName} — see the adapter's note. */
|
|
106
99
|
branchValue: string;
|
|
107
|
-
branchOptions:
|
|
100
|
+
branchOptions: SurfaceOption[];
|
|
108
101
|
/** `changes` or `history` — `shell.git.subTab`, which names the `$switch` case. */
|
|
109
102
|
subTab: string;
|
|
110
103
|
/** "Local Changes (6)" — the count is part of the tab's label, not a badge of its own. */
|
|
@@ -159,7 +152,7 @@ export interface GitPanelSurfaceHandle {
|
|
|
159
152
|
}
|
|
160
153
|
|
|
161
154
|
/** The scope the document reads: the projection, plus everything a control can ask for. */
|
|
162
|
-
interface GitPanelScope extends
|
|
155
|
+
interface GitPanelScope extends GitPanelValues, GitPanelActions {}
|
|
163
156
|
|
|
164
157
|
/** Write a projection into the scope. Assignment by assignment, so an unchanged field is inert. */
|
|
165
158
|
function project(scope: GitPanelScope, values: GitPanelValues): void {
|
|
@@ -237,10 +230,10 @@ export function mountGitPanelSurface(
|
|
|
237
230
|
values: GitPanelValues,
|
|
238
231
|
actions: GitPanelActions,
|
|
239
232
|
): GitPanelSurfaceHandle {
|
|
240
|
-
const scope = reactive<GitPanelScope>({
|
|
233
|
+
const scope: GitPanelScope = reactive<GitPanelScope>({
|
|
241
234
|
...emptyValues(),
|
|
242
235
|
...actions,
|
|
243
|
-
})
|
|
236
|
+
});
|
|
244
237
|
project(scope, values);
|
|
245
238
|
|
|
246
239
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -258,8 +251,7 @@ export function mountGitPanelSurface(
|
|
|
258
251
|
answer is simply whether this handle is still wanted — answering no would start a second
|
|
259
252
|
mount racing the first. Once mounted, the question is whether the root is still where it was
|
|
260
253
|
put: a Navigator that painted another panel cleared this document out from under it. */
|
|
261
|
-
connected: () =>
|
|
262
|
-
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
254
|
+
connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
|
|
263
255
|
dispose() {
|
|
264
256
|
disposed = true;
|
|
265
257
|
mounted?.dispose();
|
|
@@ -27,13 +27,12 @@
|
|
|
27
27
|
import { reactive } from "../reactivity";
|
|
28
28
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
29
29
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
30
|
-
import { close
|
|
30
|
+
import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
31
31
|
import { whenReady } from "./dialog";
|
|
32
32
|
import githubAuthDoc from "./github-auth.json";
|
|
33
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
34
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
33
|
+
import type { DialogLayerHandle, SurfaceHandle } from "../ui/surface";
|
|
35
34
|
|
|
36
|
-
registerSurface("github-auth", githubAuthDoc
|
|
35
|
+
registerSurface("github-auth", githubAuthDoc);
|
|
37
36
|
|
|
38
37
|
export interface GithubAuthSurfaceOptions {
|
|
39
38
|
/** Where the dialog is mounted — the dialog layer, handed in so this never reaches back. */
|
|
@@ -48,16 +47,7 @@ export interface GithubAuthSurfaceOptions {
|
|
|
48
47
|
onClosed: () => void;
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
/** The slot in the dialog layer that carries the region. */
|
|
53
|
-
host: HTMLElement;
|
|
54
|
-
/** Resolves with the `jx-dialog` element once it has rendered and been opened. */
|
|
55
|
-
ready: Promise<HTMLElement>;
|
|
56
|
-
/** Close the dialog (the platform restores focus) and dispose the document. Idempotent. */
|
|
57
|
-
close: () => void;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
interface GithubAuthScope extends Record<string, unknown> {
|
|
50
|
+
interface GithubAuthScope {
|
|
61
51
|
userCode: string;
|
|
62
52
|
verificationUri: string;
|
|
63
53
|
cancel: () => void;
|
|
@@ -65,7 +55,7 @@ interface GithubAuthScope extends Record<string, unknown> {
|
|
|
65
55
|
}
|
|
66
56
|
|
|
67
57
|
/** Put the code up. The handle's `ready` resolves once the dialog is showing. */
|
|
68
|
-
export function openGithubAuthSurface(options: GithubAuthSurfaceOptions):
|
|
58
|
+
export function openGithubAuthSurface(options: GithubAuthSurfaceOptions): DialogLayerHandle {
|
|
69
59
|
const slot = document.createElement("div");
|
|
70
60
|
/* The layer is `pointer-events: none` so a click passes through it when nothing is up, and every
|
|
71
61
|
slot in it turns them back on for its own content. `pointer-events` INHERITS, and the top layer
|
|
@@ -90,26 +80,32 @@ export function openGithubAuthSurface(options: GithubAuthSurfaceOptions): Github
|
|
|
90
80
|
closed = true;
|
|
91
81
|
options.onClosed();
|
|
92
82
|
};
|
|
83
|
+
/* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
|
|
84
|
+
element, and a direct `closed` test after that `await` would be narrowed to the value the test
|
|
85
|
+
before it saw. */
|
|
86
|
+
const isClosed = (): boolean => closed;
|
|
93
87
|
|
|
94
|
-
const scope = reactive<GithubAuthScope>({
|
|
88
|
+
const scope: GithubAuthScope = reactive<GithubAuthScope>({
|
|
95
89
|
cancel: () => {
|
|
96
90
|
options.onCancel();
|
|
97
91
|
},
|
|
98
92
|
closed: finish,
|
|
99
93
|
userCode: options.userCode,
|
|
100
94
|
verificationUri: options.verificationUri,
|
|
101
|
-
})
|
|
95
|
+
});
|
|
102
96
|
|
|
103
97
|
let mounted: SurfaceHandle | null = null;
|
|
104
98
|
const ready = mountSurface("github-auth", scope, slot).then(async (surface) => {
|
|
105
99
|
mounted = surface;
|
|
100
|
+
/* SAFETY: `github-auth.json`'s root definition is a `jx-dialog` element, so the runtime
|
|
101
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
106
102
|
const element = surface.root as HTMLElement;
|
|
107
|
-
if (
|
|
103
|
+
if (isClosed()) {
|
|
108
104
|
surface.dispose();
|
|
109
105
|
return element;
|
|
110
106
|
}
|
|
111
107
|
await whenReady(element);
|
|
112
|
-
if (
|
|
108
|
+
if (isClosed()) {
|
|
113
109
|
return element;
|
|
114
110
|
}
|
|
115
111
|
showModal(element);
|
|
@@ -125,7 +121,7 @@ export function openGithubAuthSurface(options: GithubAuthSurfaceOptions): Github
|
|
|
125
121
|
const element = mounted?.root;
|
|
126
122
|
if (element instanceof HTMLElement) {
|
|
127
123
|
// The platform's close first, so focus goes back where it came from; then the document.
|
|
128
|
-
|
|
124
|
+
close(element);
|
|
129
125
|
}
|
|
130
126
|
// A mount that has not landed yet is disposed by `ready` when it does — `finish` tells it so.
|
|
131
127
|
mounted?.dispose();
|