@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
|
@@ -24,13 +24,12 @@
|
|
|
24
24
|
import { reactive } from "../reactivity";
|
|
25
25
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
26
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
27
|
-
import { close
|
|
27
|
+
import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
28
28
|
import { whenReady } from "./dialog";
|
|
29
29
|
import jxsuiteUpdateDoc from "./jxsuite-update.json";
|
|
30
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
31
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
30
|
+
import type { DialogLayerHandle, SurfaceHandle } from "../ui/surface";
|
|
32
31
|
|
|
33
|
-
registerSurface("jxsuite-update", jxsuiteUpdateDoc
|
|
32
|
+
registerSurface("jxsuite-update", jxsuiteUpdateDoc);
|
|
34
33
|
|
|
35
34
|
/** One package the offer would move. Every field is already the string the row prints. */
|
|
36
35
|
export interface JxsuiteUpdateRow {
|
|
@@ -55,16 +54,7 @@ export interface JxsuiteUpdateSurfaceOptions {
|
|
|
55
54
|
onClosed: () => void;
|
|
56
55
|
}
|
|
57
56
|
|
|
58
|
-
|
|
59
|
-
/** The slot in the dialog layer that carries the region. */
|
|
60
|
-
host: HTMLElement;
|
|
61
|
-
/** Resolves with the `jx-dialog` element once it has rendered and been opened. */
|
|
62
|
-
ready: Promise<HTMLElement>;
|
|
63
|
-
/** Close the dialog (the platform restores focus) and dispose the document. Idempotent. */
|
|
64
|
-
close: () => void;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
interface JxsuiteUpdateScope extends Record<string, unknown> {
|
|
57
|
+
interface JxsuiteUpdateScope {
|
|
68
58
|
packages: JxsuiteUpdateRow[];
|
|
69
59
|
confirm: () => void;
|
|
70
60
|
cancel: () => void;
|
|
@@ -72,9 +62,7 @@ interface JxsuiteUpdateScope extends Record<string, unknown> {
|
|
|
72
62
|
}
|
|
73
63
|
|
|
74
64
|
/** Open the offer. The handle's `ready` resolves once the dialog is showing. */
|
|
75
|
-
export function openJxsuiteUpdateSurface(
|
|
76
|
-
options: JxsuiteUpdateSurfaceOptions,
|
|
77
|
-
): JxsuiteUpdateSurfaceHandle {
|
|
65
|
+
export function openJxsuiteUpdateSurface(options: JxsuiteUpdateSurfaceOptions): DialogLayerHandle {
|
|
78
66
|
const slot = document.createElement("div");
|
|
79
67
|
/* The layer is `pointer-events: none` so a click passes through it when nothing is up, and every
|
|
80
68
|
slot in it turns them back on for its own content. `pointer-events` INHERITS, and the top layer
|
|
@@ -98,8 +86,12 @@ export function openJxsuiteUpdateSurface(
|
|
|
98
86
|
closed = true;
|
|
99
87
|
options.onClosed();
|
|
100
88
|
};
|
|
89
|
+
/* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
|
|
90
|
+
element, and a direct `closed` test after that `await` would be narrowed to the value the test
|
|
91
|
+
before it saw. */
|
|
92
|
+
const isClosed = (): boolean => closed;
|
|
101
93
|
|
|
102
|
-
const scope = reactive<JxsuiteUpdateScope>({
|
|
94
|
+
const scope: JxsuiteUpdateScope = reactive<JxsuiteUpdateScope>({
|
|
103
95
|
cancel: () => {
|
|
104
96
|
options.onCancel();
|
|
105
97
|
},
|
|
@@ -108,18 +100,20 @@ export function openJxsuiteUpdateSurface(
|
|
|
108
100
|
options.onConfirm();
|
|
109
101
|
},
|
|
110
102
|
packages: options.packages,
|
|
111
|
-
})
|
|
103
|
+
});
|
|
112
104
|
|
|
113
105
|
let mounted: SurfaceHandle | null = null;
|
|
114
106
|
const ready = mountSurface("jxsuite-update", scope, slot).then(async (surface) => {
|
|
115
107
|
mounted = surface;
|
|
108
|
+
/* SAFETY: `jxsuite-update.json`'s root definition is a `jx-dialog` element, so the runtime
|
|
109
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
116
110
|
const element = surface.root as HTMLElement;
|
|
117
|
-
if (
|
|
111
|
+
if (isClosed()) {
|
|
118
112
|
surface.dispose();
|
|
119
113
|
return element;
|
|
120
114
|
}
|
|
121
115
|
await whenReady(element);
|
|
122
|
-
if (
|
|
116
|
+
if (isClosed()) {
|
|
123
117
|
return element;
|
|
124
118
|
}
|
|
125
119
|
showModal(element);
|
|
@@ -135,7 +129,7 @@ export function openJxsuiteUpdateSurface(
|
|
|
135
129
|
const element = mounted?.root;
|
|
136
130
|
if (element instanceof HTMLElement) {
|
|
137
131
|
// The platform's close first, so focus goes back where it came from; then the document.
|
|
138
|
-
|
|
132
|
+
close(element);
|
|
139
133
|
}
|
|
140
134
|
// A mount that has not landed yet is disposed by `ready` when it does — `finish` tells it so.
|
|
141
135
|
mounted?.dispose();
|
|
@@ -28,15 +28,16 @@
|
|
|
28
28
|
* @docs studio/projects/browse
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
31
32
|
import { reactive } from "../reactivity";
|
|
32
33
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
33
34
|
import { placeholderBrokenImages } from "../utils/edit-display";
|
|
34
35
|
import libraryDoc from "./library-pane.json";
|
|
35
|
-
import type {
|
|
36
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
36
37
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
37
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
38
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
38
39
|
|
|
39
|
-
registerSurface("library-pane", libraryDoc
|
|
40
|
+
registerSurface("library-pane", libraryDoc);
|
|
40
41
|
|
|
41
42
|
/**
|
|
42
43
|
* Which of nine things the body draws.
|
|
@@ -118,12 +119,6 @@ export interface LibraryChip {
|
|
|
118
119
|
checked: "true" | "false";
|
|
119
120
|
}
|
|
120
121
|
|
|
121
|
-
/** One row of the language facet. */
|
|
122
|
-
export interface LibraryOption {
|
|
123
|
-
value: string;
|
|
124
|
-
label: string;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
122
|
/** Everything the document draws, as one value. */
|
|
128
123
|
export interface LibraryView {
|
|
129
124
|
/** The region id stamped on the root, so the screenshot pipeline can address the Library. */
|
|
@@ -140,7 +135,7 @@ export interface LibraryView {
|
|
|
140
135
|
* chrome that says nothing.
|
|
141
136
|
*/
|
|
142
137
|
localeState: "hidden" | "shown";
|
|
143
|
-
localeOptions:
|
|
138
|
+
localeOptions: SurfaceOption[];
|
|
144
139
|
localeValue: string;
|
|
145
140
|
query: string;
|
|
146
141
|
/** Where an upload lands, as the label's tooltip says it — before the files are chosen. */
|
|
@@ -211,7 +206,7 @@ export interface LibrarySurfaceHandle {
|
|
|
211
206
|
}
|
|
212
207
|
|
|
213
208
|
/** The scope the document reads: {@link LibraryView} plus the actions its controls call. */
|
|
214
|
-
interface LibraryScope extends
|
|
209
|
+
interface LibraryScope extends LibraryView, LibraryActions {}
|
|
215
210
|
|
|
216
211
|
/** Write a projection into the scope. */
|
|
217
212
|
function project(scope: LibraryScope, view: LibraryView): void {
|
|
@@ -243,15 +238,16 @@ function project(scope: LibraryScope, view: LibraryView): void {
|
|
|
243
238
|
|
|
244
239
|
/** The `part` a node's definition carries, or "" for a text node or an unmarked element. */
|
|
245
240
|
function partOf(def: JxElement | string): string {
|
|
246
|
-
const part =
|
|
247
|
-
return
|
|
241
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
242
|
+
return isString(part) ? part : "";
|
|
248
243
|
}
|
|
249
244
|
|
|
250
245
|
/** The path of the mapped row a node was rendered inside, or "" when it was not in one. */
|
|
251
246
|
function rowPath(state: JxScope | undefined): string {
|
|
252
|
-
const map = state?.["$map"]
|
|
253
|
-
const
|
|
254
|
-
|
|
247
|
+
const map = state?.["$map"];
|
|
248
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
249
|
+
const path = isJsonObject(item) ? item["path"] : undefined;
|
|
250
|
+
return isString(path) ? path : "";
|
|
255
251
|
}
|
|
256
252
|
|
|
257
253
|
/**
|
|
@@ -272,7 +268,7 @@ export function mountLibrarySurface(
|
|
|
272
268
|
// Than the browser's broken-image glyph.
|
|
273
269
|
const listening = new AbortController();
|
|
274
270
|
placeholderBrokenImages(host, listening.signal);
|
|
275
|
-
const scope = reactive<LibraryScope>({
|
|
271
|
+
const scope: LibraryScope = reactive<LibraryScope>({
|
|
276
272
|
bannerState: "hidden",
|
|
277
273
|
bannerText: "",
|
|
278
274
|
categories: [],
|
|
@@ -313,7 +309,7 @@ export function mountLibrarySurface(
|
|
|
313
309
|
uploadAccept: "",
|
|
314
310
|
uploadHint: "",
|
|
315
311
|
view: "loading",
|
|
316
|
-
})
|
|
312
|
+
});
|
|
317
313
|
project(scope, view);
|
|
318
314
|
|
|
319
315
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -340,12 +336,15 @@ export function mountLibrarySurface(
|
|
|
340
336
|
}
|
|
341
337
|
},
|
|
342
338
|
}).then((surface) => {
|
|
339
|
+
/* SAFETY: `library-pane.json`'s root definition is a `div` element, so the runtime mounts an
|
|
340
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
341
|
+
const root = surface.root as HTMLElement;
|
|
343
342
|
if (disposed) {
|
|
344
343
|
surface.dispose();
|
|
345
|
-
return
|
|
344
|
+
return root;
|
|
346
345
|
}
|
|
347
346
|
mounted = surface;
|
|
348
|
-
return
|
|
347
|
+
return root;
|
|
349
348
|
});
|
|
350
349
|
|
|
351
350
|
return {
|
|
@@ -21,20 +21,15 @@
|
|
|
21
21
|
* @docs studio/logic/events
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
24
25
|
import { reactive } from "../reactivity";
|
|
25
26
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
27
|
import logicPanelDoc from "./logic-panel.json";
|
|
27
|
-
import type {
|
|
28
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
28
29
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
29
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
30
|
+
import type { SurfaceAction, SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
30
31
|
|
|
31
|
-
registerSurface("logic-panel", logicPanelDoc
|
|
32
|
-
|
|
33
|
-
/** A closed list of choices, in the shape the kit's select reads. */
|
|
34
|
-
export interface LogicOption {
|
|
35
|
-
value: string;
|
|
36
|
-
label: string;
|
|
37
|
-
}
|
|
32
|
+
registerSurface("logic-panel", logicPanelDoc);
|
|
38
33
|
|
|
39
34
|
/** Which control a bindable row draws. The flow picks it; the document switches on it. */
|
|
40
35
|
export type LogicFieldKind = "control" | "text" | "select";
|
|
@@ -55,7 +50,7 @@ export interface LogicFieldView {
|
|
|
55
50
|
/** What a `text` or `select` control holds. Empty for a control host. */
|
|
56
51
|
value: string;
|
|
57
52
|
placeholder: string;
|
|
58
|
-
options:
|
|
53
|
+
options: SurfaceOption[];
|
|
59
54
|
/** Draw the text control monospaced — a pointer or a template string. */
|
|
60
55
|
mono: boolean;
|
|
61
56
|
/** The rung's own id, for `data-source`. */
|
|
@@ -131,7 +126,7 @@ export interface LogicBindingView {
|
|
|
131
126
|
/** The code body's text. Empty for every other body. */
|
|
132
127
|
code: string;
|
|
133
128
|
refValue: string;
|
|
134
|
-
refOptions:
|
|
129
|
+
refOptions: SurfaceOption[];
|
|
135
130
|
/** The escape hatch's accessible name — the code editor, or the formula workspace. */
|
|
136
131
|
openTitle: string;
|
|
137
132
|
}
|
|
@@ -149,12 +144,6 @@ export interface LogicKvView {
|
|
|
149
144
|
tags: string;
|
|
150
145
|
}
|
|
151
146
|
|
|
152
|
-
/** One button of an empty state — an id the flow knows, and the words on it. */
|
|
153
|
-
export interface LogicEmptyAction {
|
|
154
|
-
id: string;
|
|
155
|
-
label: string;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
147
|
/** Everything the Logic tab shows, already decided. */
|
|
159
148
|
export interface LogicView {
|
|
160
149
|
/** `empty` or `ready` — no document, no selection and a stale one are all the first. */
|
|
@@ -164,7 +153,7 @@ export interface LogicView {
|
|
|
164
153
|
* What the reader can do about it. An empty state that teaches nothing offers none
|
|
165
154
|
* (studio-ui-guidelines.md §11.1).
|
|
166
155
|
*/
|
|
167
|
-
emptyActions:
|
|
156
|
+
emptyActions: SurfaceAction[];
|
|
168
157
|
hasEmptyActions: boolean;
|
|
169
158
|
|
|
170
159
|
hasRepeater: boolean;
|
|
@@ -233,7 +222,7 @@ export interface LogicIslands {
|
|
|
233
222
|
statementsSlot: (key: string, host: HTMLElement) => void;
|
|
234
223
|
}
|
|
235
224
|
|
|
236
|
-
interface LogicScope extends
|
|
225
|
+
interface LogicScope extends LogicView, LogicActions {}
|
|
237
226
|
|
|
238
227
|
export interface LogicSurface {
|
|
239
228
|
/** Re-project. The document's bindings skip every value that did not move. */
|
|
@@ -279,23 +268,21 @@ export function emptyLogicView(): LogicView {
|
|
|
279
268
|
|
|
280
269
|
/** Assign the projection field by field: the runtime writes only the bindings that moved. */
|
|
281
270
|
function project(scope: LogicScope, view: LogicView): void {
|
|
282
|
-
|
|
283
|
-
(scope as Record<string, unknown>)[key] = value;
|
|
284
|
-
}
|
|
271
|
+
Object.assign(scope, view);
|
|
285
272
|
}
|
|
286
273
|
|
|
287
274
|
/** The `part` a node was rendered with, or "". */
|
|
288
275
|
function partOf(def: JxElement | string): string {
|
|
289
|
-
const part =
|
|
290
|
-
return
|
|
276
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
277
|
+
return isString(part) ? part : "";
|
|
291
278
|
}
|
|
292
279
|
|
|
293
280
|
/** The `key` of the `$map` item a node was rendered inside, or "". */
|
|
294
281
|
function itemKey(state: JxScope | undefined): string {
|
|
295
|
-
const
|
|
296
|
-
const
|
|
297
|
-
|
|
298
|
-
return
|
|
282
|
+
const map = state?.["$map"];
|
|
283
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
284
|
+
const key = isJsonObject(item) ? item["key"] : "";
|
|
285
|
+
return isString(key) ? key : "";
|
|
299
286
|
}
|
|
300
287
|
|
|
301
288
|
/**
|
|
@@ -316,10 +303,10 @@ export function mountLogicSurface(
|
|
|
316
303
|
actions: LogicActions,
|
|
317
304
|
islands: LogicIslands,
|
|
318
305
|
): LogicSurface {
|
|
319
|
-
const scope = reactive<LogicScope>({
|
|
306
|
+
const scope: LogicScope = reactive<LogicScope>({
|
|
320
307
|
...emptyLogicView(),
|
|
321
308
|
...actions,
|
|
322
|
-
}
|
|
309
|
+
});
|
|
323
310
|
project(scope, view);
|
|
324
311
|
|
|
325
312
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -29,14 +29,15 @@
|
|
|
29
29
|
* @docs studio/logic/formula-workspace
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
32
33
|
import { reactive } from "../reactivity";
|
|
33
34
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
34
35
|
import logicWorkspaceDoc from "./logic-workspace.json";
|
|
35
|
-
import type {
|
|
36
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
36
37
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
37
38
|
import type { SurfaceHandle } from "../ui/surface";
|
|
38
39
|
|
|
39
|
-
registerSurface("logic-workspace", logicWorkspaceDoc
|
|
40
|
+
registerSurface("logic-workspace", logicWorkspaceDoc);
|
|
40
41
|
|
|
41
42
|
/** One chip of the pipeline, as the document draws it. */
|
|
42
43
|
export interface LogicChipView {
|
|
@@ -112,8 +113,7 @@ export interface LogicWorkspaceIslands {
|
|
|
112
113
|
treeSlot: (key: string, host: HTMLElement) => void;
|
|
113
114
|
}
|
|
114
115
|
|
|
115
|
-
interface LogicWorkspaceScope
|
|
116
|
-
extends Record<string, unknown>, LogicWorkspaceView, LogicWorkspaceActions {}
|
|
116
|
+
interface LogicWorkspaceScope extends LogicWorkspaceView, LogicWorkspaceActions {}
|
|
117
117
|
|
|
118
118
|
export interface LogicWorkspaceSurface {
|
|
119
119
|
/** Re-project. The document's bindings skip every value that did not move. */
|
|
@@ -151,23 +151,21 @@ export function emptyLogicWorkspaceView(): LogicWorkspaceView {
|
|
|
151
151
|
|
|
152
152
|
/** Assign the projection field by field: the runtime writes only the bindings that moved. */
|
|
153
153
|
function project(scope: LogicWorkspaceScope, view: LogicWorkspaceView): void {
|
|
154
|
-
|
|
155
|
-
(scope as Record<string, unknown>)[key] = value;
|
|
156
|
-
}
|
|
154
|
+
Object.assign(scope, view);
|
|
157
155
|
}
|
|
158
156
|
|
|
159
157
|
/** The `part` a node was rendered with, or "". */
|
|
160
158
|
function partOf(def: JxElement | string): string {
|
|
161
|
-
const part =
|
|
162
|
-
return
|
|
159
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
160
|
+
return isString(part) ? part : "";
|
|
163
161
|
}
|
|
164
162
|
|
|
165
163
|
/** The `key` of the `$map` item a node was rendered inside, or "". */
|
|
166
164
|
function itemKey(state: JxScope | undefined): string {
|
|
167
|
-
const
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
return
|
|
165
|
+
const map = state?.["$map"];
|
|
166
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
167
|
+
const key = isJsonObject(item) ? item["key"] : "";
|
|
168
|
+
return isString(key) ? key : "";
|
|
171
169
|
}
|
|
172
170
|
|
|
173
171
|
/**
|
|
@@ -187,10 +185,10 @@ export function mountLogicWorkspace(
|
|
|
187
185
|
actions: LogicWorkspaceActions,
|
|
188
186
|
islands: LogicWorkspaceIslands,
|
|
189
187
|
): LogicWorkspaceSurface {
|
|
190
|
-
const scope = reactive<LogicWorkspaceScope>({
|
|
188
|
+
const scope: LogicWorkspaceScope = reactive<LogicWorkspaceScope>({
|
|
191
189
|
...emptyLogicWorkspaceView(),
|
|
192
190
|
...actions,
|
|
193
|
-
}
|
|
191
|
+
});
|
|
194
192
|
project(scope, view);
|
|
195
193
|
|
|
196
194
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -26,10 +26,9 @@ import { openPopoverSurface } from "../ui/popover-surface";
|
|
|
26
26
|
import { reactive } from "../reactivity";
|
|
27
27
|
import { registerSurface } from "../ui/surface";
|
|
28
28
|
import mediaBrowserDoc from "./media-browser.json";
|
|
29
|
-
import type {
|
|
30
|
-
import type { PopoverSurfaceHandle } from "../ui/popover-surface";
|
|
29
|
+
import type { OpenPopoverSurfaceOptions, PopoverSurfaceHandle } from "../ui/popover-surface";
|
|
31
30
|
|
|
32
|
-
registerSurface("media-browser", mediaBrowserDoc
|
|
31
|
+
registerSurface("media-browser", mediaBrowserDoc);
|
|
33
32
|
|
|
34
33
|
/** The slot id, and so the panel's region: `overlay.menu:media-picker`. */
|
|
35
34
|
const SLOT = "media-picker";
|
|
@@ -79,8 +78,7 @@ export interface MediaBrowserSurfaceHandle extends PopoverSurfaceHandle {
|
|
|
79
78
|
update: (view: MediaBrowserView) => void;
|
|
80
79
|
}
|
|
81
80
|
|
|
82
|
-
interface MediaBrowserScope
|
|
83
|
-
extends Record<string, unknown>, MediaBrowserView, Omit<MediaBrowserActions, "dismissed"> {}
|
|
81
|
+
interface MediaBrowserScope extends MediaBrowserView, Omit<MediaBrowserActions, "dismissed"> {}
|
|
84
82
|
|
|
85
83
|
/** Write a projection into the scope. */
|
|
86
84
|
function project(scope: MediaBrowserScope, view: MediaBrowserView): void {
|
|
@@ -107,7 +105,7 @@ export function openMediaBrowserSurface(
|
|
|
107
105
|
actions: MediaBrowserActions,
|
|
108
106
|
anchor: HTMLElement | null,
|
|
109
107
|
): MediaBrowserSurfaceHandle {
|
|
110
|
-
const scope = reactive<MediaBrowserScope>({
|
|
108
|
+
const scope: MediaBrowserScope = reactive<MediaBrowserScope>({
|
|
111
109
|
emptyLabel: view.emptyLabel,
|
|
112
110
|
filter: view.filter,
|
|
113
111
|
measure: actions.measure,
|
|
@@ -119,15 +117,18 @@ export function openMediaBrowserSurface(
|
|
|
119
117
|
setFilter: actions.setFilter,
|
|
120
118
|
x: view.x,
|
|
121
119
|
y: view.y,
|
|
122
|
-
})
|
|
120
|
+
});
|
|
123
121
|
|
|
124
|
-
const
|
|
122
|
+
const options: OpenPopoverSurfaceOptions<MediaBrowserScope> = {
|
|
125
123
|
anchor,
|
|
126
124
|
name: "media-browser",
|
|
127
125
|
scope,
|
|
128
126
|
slot: SLOT,
|
|
129
|
-
|
|
130
|
-
|
|
127
|
+
};
|
|
128
|
+
if (actions.dismissed) {
|
|
129
|
+
options.onDismissed = actions.dismissed;
|
|
130
|
+
}
|
|
131
|
+
const handle = openPopoverSurface(options);
|
|
131
132
|
|
|
132
133
|
void handle.ready.then(() => {
|
|
133
134
|
if (handle.isOpen()) {
|
|
@@ -22,10 +22,9 @@
|
|
|
22
22
|
import { reactive } from "../reactivity";
|
|
23
23
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
24
24
|
import mediaFieldDoc from "./media-field.json";
|
|
25
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
26
25
|
import type { SurfaceHandle } from "../ui/surface";
|
|
27
26
|
|
|
28
|
-
registerSurface("media-field", mediaFieldDoc
|
|
27
|
+
registerSurface("media-field", mediaFieldDoc);
|
|
29
28
|
|
|
30
29
|
/** Everything the control draws, as one value. */
|
|
31
30
|
export interface MediaFieldView {
|
|
@@ -58,7 +57,7 @@ export interface MediaFieldHandle {
|
|
|
58
57
|
}
|
|
59
58
|
|
|
60
59
|
/** The scope the document reads. */
|
|
61
|
-
interface MediaFieldScope extends
|
|
60
|
+
interface MediaFieldScope extends MediaFieldView, MediaFieldActions {}
|
|
62
61
|
|
|
63
62
|
/** Write a projection into the scope. */
|
|
64
63
|
function project(scope: MediaFieldScope, view: MediaFieldView): void {
|
|
@@ -81,7 +80,7 @@ export function mountMediaFieldSurface(
|
|
|
81
80
|
view: MediaFieldView,
|
|
82
81
|
actions: MediaFieldActions,
|
|
83
82
|
): MediaFieldHandle {
|
|
84
|
-
const scope = reactive<MediaFieldScope>({
|
|
83
|
+
const scope: MediaFieldScope = reactive<MediaFieldScope>({
|
|
85
84
|
browse: actions.browse,
|
|
86
85
|
edit: actions.edit,
|
|
87
86
|
label: view.label,
|
|
@@ -90,7 +89,7 @@ export function mountMediaFieldSurface(
|
|
|
90
89
|
upload: actions.upload,
|
|
91
90
|
value: view.value,
|
|
92
91
|
warm: actions.warm,
|
|
93
|
-
})
|
|
92
|
+
});
|
|
94
93
|
|
|
95
94
|
let mounted: SurfaceHandle | null = null;
|
|
96
95
|
let disposed = false;
|
|
@@ -24,10 +24,9 @@
|
|
|
24
24
|
import { reactive } from "../reactivity";
|
|
25
25
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
26
|
import mediaDoc from "./media-pane.json";
|
|
27
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
28
27
|
import type { SurfaceHandle } from "../ui/surface";
|
|
29
28
|
|
|
30
|
-
registerSurface("media-pane", mediaDoc
|
|
29
|
+
registerSurface("media-pane", mediaDoc);
|
|
31
30
|
|
|
32
31
|
/**
|
|
33
32
|
* Which element the stage draws the file in.
|
|
@@ -105,7 +104,7 @@ export interface MediaSurfaceHandle {
|
|
|
105
104
|
* `$switch` discriminant derived here — "is there a list" is a restatement of the list, and a view
|
|
106
105
|
* that had to keep the two in step would be a second place to get it wrong.
|
|
107
106
|
*/
|
|
108
|
-
interface MediaScope extends
|
|
107
|
+
interface MediaScope extends MediaView, MediaActions {
|
|
109
108
|
hasUsageFiles: boolean;
|
|
110
109
|
}
|
|
111
110
|
|
|
@@ -141,7 +140,7 @@ export function mountMediaSurface(
|
|
|
141
140
|
actions: MediaActions,
|
|
142
141
|
): MediaSurfaceHandle {
|
|
143
142
|
host.replaceChildren();
|
|
144
|
-
const scope = reactive<MediaScope>({
|
|
143
|
+
const scope: MediaScope = reactive<MediaScope>({
|
|
145
144
|
copyRef: actions.copyRef,
|
|
146
145
|
extLabel: "",
|
|
147
146
|
facts: "",
|
|
@@ -159,7 +158,7 @@ export function mountMediaSurface(
|
|
|
159
158
|
usageFiles: [],
|
|
160
159
|
usageHeadline: "",
|
|
161
160
|
usageState: "hidden",
|
|
162
|
-
})
|
|
161
|
+
});
|
|
163
162
|
project(scope, view);
|
|
164
163
|
|
|
165
164
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -171,9 +170,11 @@ export function mountMediaSurface(
|
|
|
171
170
|
const ready = mountSurface("media-pane", scope, host).then((surface) => {
|
|
172
171
|
if (disposed) {
|
|
173
172
|
surface.dispose();
|
|
174
|
-
|
|
173
|
+
} else {
|
|
174
|
+
mounted = surface;
|
|
175
175
|
}
|
|
176
|
-
|
|
176
|
+
/* SAFETY: `media-pane.json`'s root definition is a `div` element, so the runtime mounts an
|
|
177
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
177
178
|
return surface.root as HTMLElement;
|
|
178
179
|
});
|
|
179
180
|
|