@jxsuite/studio 6.1.1 → 8.0.0
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/README.md +5 -5
- package/dist/chunks/2020-5wtzce5g.js +4 -0
- package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
- package/dist/chunks/adapter-5tphg7xe.js +4 -0
- package/dist/chunks/add-new-flow-psym14sn.js +4 -0
- package/dist/chunks/cf-account-picker-haqazq5r.js +4 -0
- package/dist/chunks/cf-settings-h2wrh6hq.js +4 -0
- package/dist/chunks/color-area-6rbra5dy.js +4 -0
- package/dist/chunks/color-field-gy56c94g.js +4 -0
- package/dist/chunks/color-m7r1vk54.js +4 -0
- package/dist/chunks/color-slider-sqqdyf6c.js +4 -0
- package/dist/chunks/combobox-72h32ejk.js +4 -0
- package/dist/chunks/components-r22xca09.js +4 -0
- package/dist/chunks/content-source-mmppmcyg.js +4 -0
- package/dist/chunks/convert-to-repeater-he70fc2b.js +4 -0
- package/dist/chunks/dialog-c4x05vyx.js +4 -0
- package/dist/chunks/editor-ccd9jwsa.js +4 -0
- package/dist/chunks/entry-commands-6qxz9e8p.js +4 -0
- package/dist/chunks/extension-sections-0egb88dm.js +4 -0
- package/dist/chunks/file-ops-qnab36ek.js +4 -0
- package/dist/chunks/files-rcn56qvm.js +4 -0
- package/dist/chunks/format-host-yxz0kjjs.js +4 -0
- package/dist/chunks/fs-events-d1qxq4z4.js +4 -0
- package/dist/chunks/grid-open-4z1g062t.js +4 -0
- package/dist/chunks/grid-view-qg1b5eqx.js +51 -0
- package/dist/chunks/icons-63bjtbs7.js +4 -0
- package/dist/chunks/iframe-entry-2zggzajv.js +5 -0
- package/dist/chunks/iframe-entry-76j8vwwx.js +5 -0
- package/dist/chunks/iframe-entry-99nr5zfb.js +5 -0
- package/dist/chunks/iframe-entry-pkgmcgp0.js +5 -0
- package/dist/chunks/iframe-host-ssv7kyj0.js +4 -0
- package/dist/chunks/{index-2veqmnhr.js → index-32eqzv1k.js} +3 -3
- package/dist/chunks/index-f0jn7nnp.js +4 -0
- package/dist/chunks/{javascript-8nbvs12s.js → javascript-pjp734q4.js} +3 -3
- package/dist/chunks/jsonMode-njkvsa02.js +13 -0
- package/dist/chunks/jx-validate-ttasrbh7.js +4 -0
- package/dist/chunks/layers-bgyr11tr.js +4 -0
- package/dist/chunks/layers-panel-7ez66zeq.js +4 -0
- package/dist/chunks/listbox-c421cf8c.js +4 -0
- package/dist/chunks/lit-html-v9gh687x.js +4 -0
- package/dist/chunks/media-library-sq468wts.js +4 -0
- package/dist/chunks/media-picker-shfe59pt.js +4 -0
- package/dist/chunks/menu-bdpzbfvs.js +4 -0
- package/dist/chunks/monaco-binding-vq1hgnn0.js +4 -0
- package/dist/chunks/monaco-buffer-3afgwvbp.js +4 -0
- package/dist/chunks/monaco-setup-xrd2cbkp.js +4 -0
- package/dist/chunks/notify-kzrjr3fv.js +4 -0
- package/dist/chunks/number-field-y62xq0ty.js +4 -0
- package/dist/chunks/parse-v77xtwv7.js +4 -0
- package/dist/chunks/platform-7v4rtd7m.js +4 -0
- package/dist/chunks/popover-b89sfej7.js +4 -0
- package/dist/chunks/publish-panel-2z9gw8ee.js +4 -0
- package/dist/chunks/publish-quick-qx2455cj.js +4 -0
- package/dist/chunks/publish-workspace-wrc1dgwx.js +4 -0
- package/dist/chunks/quick-search-n0t0eqxb.js +4 -0
- package/dist/chunks/references-9547rg5s.js +4 -0
- package/dist/chunks/right-panel-wsgnr9pn.js +4 -0
- package/dist/chunks/select-rzds841e.js +4 -0
- package/dist/chunks/source-control-kwktr9y6.js +4 -0
- package/dist/chunks/split-c9zfdgxf.js +4 -0
- package/dist/chunks/studio-03ct6yfv.js +9 -0
- package/dist/chunks/studio-07rcfje3.js +5 -0
- package/dist/chunks/studio-3e54qh39.js +7 -0
- package/dist/chunks/studio-3exxhz5g.js +5 -0
- package/dist/chunks/studio-3q40e3rj.js +5 -0
- package/dist/chunks/studio-3qeh9t0h.js +6 -0
- package/dist/chunks/studio-3qqjeep5.js +6 -0
- package/dist/chunks/studio-43sd2mam.js +4 -0
- package/dist/chunks/studio-4hp8pkyt.js +5 -0
- package/dist/chunks/studio-58xg6j2q.js +9 -0
- package/dist/chunks/studio-5g0rprdt.js +7 -0
- package/dist/chunks/studio-6m380wp7.js +5 -0
- package/dist/chunks/studio-80jyh1xh.js +4 -0
- package/dist/chunks/studio-83mk4bgg.js +9 -0
- package/dist/chunks/{studio-kggey1jt.js → studio-881z1xrx.js} +4 -4
- package/dist/chunks/studio-8m0y2qe7.js +5 -0
- package/dist/chunks/studio-8tr6cfrc.js +5 -0
- package/dist/chunks/studio-8vcvfs7r.js +6 -0
- package/dist/chunks/studio-9tmebf0s.js +5 -0
- package/dist/chunks/studio-a2bvaptz.js +5 -0
- package/dist/chunks/studio-b7y5mr30.js +5 -0
- package/dist/chunks/studio-bavb31r0.js +5 -0
- package/dist/chunks/studio-bbe4c90a.js +5 -0
- package/dist/chunks/studio-c05wdnt3.js +5 -0
- package/dist/chunks/studio-ccv2svc6.js +5 -0
- package/dist/chunks/studio-d5grtb9e.js +16 -0
- package/dist/chunks/studio-df0baea9.js +5 -0
- package/dist/chunks/studio-dgk4dqtx.js +7 -0
- package/dist/chunks/studio-e1g64q43.js +5 -0
- package/dist/chunks/studio-ed1hp6zf.js +6 -0
- package/dist/chunks/studio-ed3xx40h.js +7 -0
- package/dist/chunks/studio-f14e1zdj.js +5 -0
- package/dist/chunks/studio-fbhxxc5f.js +5 -0
- package/dist/chunks/studio-fyh0jc96.js +5 -0
- package/dist/chunks/studio-gcxk20n7.js +5 -0
- package/dist/chunks/studio-jaaz8ce9.js +5 -0
- package/dist/chunks/{studio-8grwxtqk.js → studio-jcnsdaep.js} +4 -4
- package/dist/chunks/studio-jsgf2q5k.js +7 -0
- package/dist/chunks/{studio-1q1sh2ax.js → studio-k3xxbagr.js} +3 -3
- package/dist/chunks/studio-k7evxqh4.js +5 -0
- package/dist/chunks/studio-kt3pjkwd.js +5 -0
- package/dist/chunks/studio-m8g16bgz.js +5 -0
- package/dist/chunks/studio-mn0476ag.js +5 -0
- package/dist/chunks/studio-mx1smyq0.js +5 -0
- package/dist/chunks/studio-n0c5h6mf.js +5 -0
- package/dist/chunks/{studio-rv11kfwa.js → studio-nh6d342n.js} +7 -7
- package/dist/chunks/studio-nqxqf8p2.js +4 -0
- package/dist/chunks/studio-p4nrkvqr.js +5 -0
- package/dist/chunks/{studio-h46vtzk8.js → studio-pbxa5fpc.js} +4 -4
- package/dist/chunks/studio-pgmvdv7z.js +7 -0
- package/dist/chunks/studio-ph84avkf.js +5 -0
- package/dist/chunks/{studio-wszjyh0j.js → studio-q0mvbaq6.js} +4 -4
- package/dist/chunks/studio-q0tccd43.js +5 -0
- package/dist/chunks/studio-q7rtx6zq.js +14 -0
- package/dist/chunks/{studio-pre0skq6.js → studio-qgh13jtz.js} +4 -4
- package/dist/chunks/studio-qmn1xc24.js +5 -0
- package/dist/chunks/studio-qwdqwkj0.js +5 -0
- package/dist/chunks/{studio-t6b6qe31.js → studio-r5qy30vx.js} +4 -4
- package/dist/chunks/studio-rj9eamf8.js +5 -0
- package/dist/chunks/studio-rptgsk96.js +5 -0
- package/dist/chunks/studio-rthyg42z.js +928 -0
- package/dist/chunks/studio-s19tp1xr.js +5 -0
- package/dist/chunks/studio-s32578pn.js +5 -0
- package/dist/chunks/studio-svb7yyve.js +5 -0
- package/dist/chunks/studio-syreb644.js +5 -0
- package/dist/chunks/studio-tf9jryb1.js +10 -0
- package/dist/chunks/studio-tfkznv39.js +5 -0
- package/dist/chunks/studio-tft6r105.js +5 -0
- package/dist/chunks/studio-txf2kysx.js +5 -0
- package/dist/chunks/studio-v8867ddv.js +12 -0
- package/dist/chunks/studio-vxq7fcvv.js +5 -0
- package/dist/chunks/studio-w4rz9hdk.js +5 -0
- package/dist/chunks/studio-wbcjbhy1.js +9 -0
- package/dist/chunks/studio-wc649wss.js +5 -0
- package/dist/chunks/studio-wys23mxz.js +5 -0
- package/dist/chunks/studio-x1x167jh.js +5 -0
- package/dist/chunks/studio-x9hsze61.js +5 -0
- package/dist/chunks/studio-y0n7yxea.js +9 -0
- package/dist/chunks/studio-y3ahhdpx.js +5 -0
- package/dist/chunks/studio-z97c48fk.js +5 -0
- package/dist/chunks/studio-zat62m0c.js +5 -0
- package/dist/chunks/studio-zcd2e7yz.js +5 -0
- package/dist/chunks/studio-zz9qe3rw.js +64 -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-1gv0h53h.js +4 -0
- package/dist/chunks/toast-host-1yg5ar8d.js +4 -0
- package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
- package/dist/chunks/tooltip-yypz28gq.js +4 -0
- package/dist/chunks/tree-9xa4hm7n.js +4 -0
- package/dist/chunks/tsMode-epyfz1hv.js +14 -0
- package/dist/chunks/workspace-dz7nxfhv.js +4 -0
- package/dist/chunks/workspace-home-xsd7hkjw.js +4 -0
- package/dist/chunks/ws-client-bv552sfx.js +4 -0
- package/dist/iframe-entry.js +20 -16
- package/dist/manifest.json +77 -63
- package/dist/studio.js +106 -107
- package/dist/workers/ts.worker.js +3 -3
- package/package.json +17 -16
- 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/component-examples.ts +272 -0
- package/src/browse/library-commands.ts +64 -104
- package/src/browse/library-layouts.ts +270 -53
- package/src/browse/library-model.ts +194 -134
- package/src/browse/library-pane.ts +748 -440
- package/src/browse/library-preview.ts +161 -26
- package/src/browse/library-source.ts +308 -41
- package/src/browse/preview-root.ts +78 -0
- package/src/browse/preview-style.ts +155 -0
- package/src/canvas/asset-refs.ts +40 -10
- package/src/canvas/asset-resolve.ts +19 -23
- package/src/canvas/canvas-helpers.ts +7 -6
- package/src/canvas/canvas-live-render.ts +260 -77
- package/src/canvas/canvas-origin.ts +37 -12
- package/src/canvas/canvas-page-context.ts +112 -0
- package/src/canvas/canvas-patcher.ts +30 -30
- package/src/canvas/canvas-perf.ts +11 -5
- package/src/canvas/canvas-render.ts +175 -148
- package/src/canvas/canvas-surface.ts +5 -3
- package/src/canvas/canvas-utils.ts +147 -61
- 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 +120 -12
- package/src/canvas/iframe-editable-root.ts +29 -16
- package/src/canvas/iframe-entry.ts +104 -75
- package/src/canvas/iframe-eval.ts +73 -49
- package/src/canvas/iframe-host.ts +269 -158
- 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-keys.ts +11 -0
- package/src/canvas/iframe-overlay.ts +1 -1
- package/src/canvas/iframe-patch.ts +25 -21
- package/src/canvas/iframe-position.ts +12 -6
- package/src/canvas/iframe-protocol.ts +36 -21
- package/src/canvas/iframe-render.ts +84 -35
- package/src/canvas/iframe-slash.ts +24 -11
- package/src/canvas/iframe-subtree.ts +10 -3
- package/src/canvas/npm-modules.ts +22 -0
- 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/preview-navigate.ts +16 -0
- package/src/canvas/repeater-sources.ts +200 -0
- package/src/canvas/serialize-scope.ts +13 -5
- package/src/canvas/stage-scrollbar.ts +7 -2
- package/src/canvas/surface-registry.ts +27 -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/app-commands.ts +16 -6
- package/src/commands/budget.ts +13 -11
- package/src/commands/command-args.ts +103 -71
- package/src/commands/context.ts +55 -28
- package/src/commands/defaults.ts +69 -45
- package/src/commands/keymap.ts +56 -43
- package/src/commands/levels.ts +14 -8
- package/src/commands/live-context.ts +9 -7
- package/src/commands/reference.ts +2 -1
- package/src/commands/registry.ts +22 -11
- package/src/commands/run-reported.ts +15 -10
- package/src/component-props.ts +46 -30
- package/src/content/collection-match.ts +11 -9
- package/src/content/collection-pages.ts +412 -0
- package/src/content/content-collections.ts +270 -0
- package/src/content/draft-state.ts +4 -3
- package/src/content/entry-commands.ts +54 -62
- package/src/content/entry-editor.ts +137 -32
- package/src/content/entry-fields.ts +25 -8
- package/src/content/entry-inspector.ts +225 -0
- package/src/content/entry-model.ts +38 -15
- package/src/content/entry-open.ts +80 -0
- package/src/content/entry-summaries.ts +440 -0
- package/src/content/file-record-ids.ts +80 -0
- package/src/content/file-records.ts +125 -0
- package/src/content/page-summaries.ts +129 -0
- package/src/content/record-entry.ts +201 -0
- package/src/content/writing-banner.ts +177 -0
- package/src/create/add-new-commands.ts +185 -0
- package/src/create/add-new-flow.ts +1116 -0
- package/src/create/add-new.ts +1014 -0
- package/src/create/element-name.ts +121 -0
- 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 +78 -48
- package/src/editor/convert-to-repeater.ts +34 -22
- package/src/editor/editable-tags.ts +17 -2
- package/src/editor/file-drop-action.ts +29 -22
- package/src/editor/inline-edit-apply.ts +79 -17
- package/src/editor/inline-edit.ts +76 -50
- package/src/editor/inline-format.ts +59 -56
- package/src/editor/inline-link.ts +40 -15
- package/src/editor/insert-component.ts +91 -0
- package/src/editor/insert-zone-action.ts +14 -5
- package/src/editor/merge-tags.ts +58 -19
- package/src/editor/repeater-scope.ts +39 -28
- package/src/editor/shortcuts.ts +76 -42
- package/src/editor/slash-menu.ts +52 -14
- package/src/files/asset-versions.ts +4 -4
- package/src/files/components.ts +89 -20
- package/src/files/elements.ts +5 -6
- package/src/files/file-ops.ts +92 -41
- package/src/files/files.ts +248 -239
- package/src/files/fs-events.ts +18 -7
- package/src/files/media-meta.ts +97 -2
- package/src/files/media-paths.ts +3 -0
- package/src/files/media-types.ts +55 -0
- package/src/files/media-upload.ts +209 -52
- package/src/files/new-file-name.ts +156 -0
- package/src/files/serialize-document.ts +15 -5
- 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 +91 -50
- package/src/github/github-auth-status.ts +27 -3
- package/src/github/github-auth.ts +21 -11
- package/src/github/github-publish.ts +28 -23
- 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 +25 -23
- package/src/grid/grid-layout.ts +21 -5
- package/src/grid/grid-open.ts +3 -33
- package/src/grid/grid-panel.ts +65 -6
- package/src/grid/grid-reveal.ts +34 -0
- package/src/grid/grid-source.ts +9 -31
- package/src/grid/grid-view.ts +45 -23
- 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 +100 -31
- package/src/grid/sources/csv-file-source.ts +2 -2
- package/src/grid/tabulator-tables.d.ts +61 -34
- package/src/hosting/document.ts +2 -2
- package/src/hosting/stage.ts +7 -7
- package/src/i18n/i18n-commands.ts +3 -3
- package/src/media/media-commands.ts +181 -0
- package/src/media/media-library-model.ts +232 -0
- package/src/media/media-library.ts +1283 -0
- package/src/media/media-pane.ts +51 -20
- 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 +38 -14
- package/src/panels/ai-chat/attached-context.ts +13 -7
- package/src/panels/ai-chat/chat-markdown.ts +8 -8
- 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 +57 -46
- package/src/panels/bottom-dock.ts +5 -3
- package/src/panels/canvas-dnd-bridge.ts +36 -26
- package/src/panels/chat-panel.ts +6 -6
- package/src/panels/collections-panel.ts +306 -0
- package/src/panels/component-preview.ts +35 -13
- package/src/panels/data-explorer.ts +63 -26
- package/src/panels/data-grid.ts +18 -11
- package/src/panels/dnd.ts +115 -138
- package/src/panels/editors.ts +52 -21
- package/src/panels/elements-panel.ts +19 -5
- package/src/panels/empty-state.ts +2 -2
- package/src/panels/events-panel.ts +84 -69
- package/src/panels/formula-workspace.ts +78 -54
- package/src/panels/frontmatter-fields.ts +33 -28
- package/src/panels/git-diff-open.ts +10 -6
- package/src/panels/head-panel.ts +488 -202
- package/src/panels/i18n-panel.ts +20 -12
- package/src/panels/imports-panel.ts +25 -47
- package/src/panels/jump-bar.ts +75 -31
- package/src/panels/layers-panel.ts +130 -101
- package/src/panels/left-panel.ts +25 -11
- package/src/panels/navigator-panels.ts +23 -11
- package/src/panels/pane-context.ts +140 -49
- package/src/panels/pane-grid.ts +55 -26
- package/src/panels/panel-registry.ts +36 -46
- package/src/panels/properties-panel.ts +182 -124
- package/src/panels/quick-search.ts +53 -31
- package/src/panels/right-panel.ts +201 -45
- package/src/panels/seo-modal.ts +54 -125
- package/src/panels/settings-menu.ts +63 -61
- package/src/panels/settings-pane.ts +268 -162
- package/src/panels/signals-panel.ts +156 -135
- package/src/panels/site-model.ts +367 -0
- package/src/panels/site-panel.ts +638 -0
- package/src/panels/statement-editor.ts +230 -140
- package/src/panels/style-panel.ts +253 -206
- package/src/panels/style-utils.ts +114 -51
- package/src/panels/stylebook-doc.ts +195 -60
- package/src/panels/stylebook-layers-panel.ts +48 -89
- package/src/panels/stylebook-panel.ts +60 -27
- package/src/panels/styles-panel.ts +327 -0
- package/src/panels/tab-drop.ts +27 -11
- package/src/panels/tab-strip.ts +143 -49
- package/src/platform-errors.ts +57 -43
- package/src/platform.ts +59 -31
- package/src/platforms/cloud.ts +373 -176
- package/src/platforms/default-platform.ts +14 -8
- package/src/platforms/devserver.ts +180 -142
- package/src/platforms/read-batcher.ts +16 -8
- package/src/project-list.ts +2 -1
- package/src/publish/deploy-checklist.ts +20 -9
- package/src/publish/pages-service.ts +66 -27
- package/src/publish/publish-changes.ts +491 -0
- package/src/publish/publish-commands.ts +88 -22
- package/src/publish/publish-ids.ts +49 -0
- package/src/publish/publish-panel.ts +10 -6
- package/src/publish/publish-quick.ts +148 -0
- package/src/publish/publish-workspace.ts +926 -0
- package/src/publish/source-control.ts +907 -0
- 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 +74 -51
- package/src/services/cem-export.ts +149 -58
- package/src/services/cf-settings.ts +4 -4
- package/src/services/clock.ts +6 -1
- package/src/services/code-services.ts +37 -31
- package/src/services/connection.ts +2 -2
- 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 +20 -14
- 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 +29 -9
- package/src/services/settings/definitions.ts +25 -14
- 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 +128 -70
- package/src/settings/css-vars-editor.ts +119 -32
- package/src/settings/defs-editor.ts +38 -35
- package/src/settings/developer-panels.ts +43 -0
- package/src/settings/extension-rows.ts +16 -8
- package/src/settings/extension-sections.ts +42 -14
- package/src/settings/extensions-section.ts +4 -1
- package/src/settings/general-settings.ts +101 -28
- package/src/settings/locales-section.ts +20 -12
- package/src/settings/preferences-dialog.ts +17 -7
- package/src/settings/preferences-keymap.ts +7 -5
- package/src/settings/preferences-sections.ts +11 -5
- package/src/settings/project-sections.ts +28 -11
- package/src/settings/schema-field-ui.ts +12 -1
- package/src/settings/section-registry.ts +116 -11
- package/src/settings/settings-dialog.ts +192 -0
- package/src/settings/settings-document.ts +186 -166
- package/src/shell/tree.ts +6 -5
- package/src/shell.ts +536 -477
- package/src/site-context.ts +101 -32
- package/src/state.ts +68 -57
- package/src/store.ts +54 -34
- package/src/studio.ts +219 -116
- package/src/style/live-preview.ts +1 -1
- package/src/style/project-styles.ts +40 -7
- package/src/style/stylebook-specimens.ts +89 -0
- package/src/style/stylebook-target.ts +26 -0
- package/src/style/tag-inheritance.ts +105 -0
- package/src/style/token-ref.ts +5 -4
- package/src/style/variables-focus.ts +61 -0
- package/src/style/variables-view.ts +235 -0
- package/src/surfaces/about.ts +18 -19
- package/src/surfaces/add-new.json +1482 -0
- package/src/surfaces/add-new.ts +325 -0
- package/src/surfaces/add-repo.ts +17 -19
- package/src/surfaces/ai-chat.ts +33 -38
- 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.json +4 -3
- package/src/surfaces/boot-failure.ts +4 -5
- package/src/surfaces/bottom-dock.json +1 -1
- package/src/surfaces/bottom-dock.ts +9 -18
- package/src/surfaces/canvas-stage.json +30 -19
- package/src/surfaces/canvas-stage.ts +17 -16
- package/src/surfaces/cf-account-picker.ts +17 -18
- package/src/surfaces/collections-panel.json +615 -0
- package/src/surfaces/collections-panel.ts +168 -0
- package/src/surfaces/commandbar.json +241 -96
- package/src/surfaces/commandbar.ts +145 -105
- 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/empty-state.json +1 -1
- package/src/surfaces/empty-state.ts +7 -10
- package/src/surfaces/entry-editor.json +136 -0
- package/src/surfaces/entry-editor.ts +35 -11
- package/src/surfaces/entry-inspector.json +371 -0
- package/src/surfaces/entry-inspector.ts +143 -0
- 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/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.json +162 -14
- package/src/surfaces/inspector-dock.ts +59 -31
- package/src/surfaces/jump-bar.ts +5 -6
- package/src/surfaces/jxsuite-update.ts +16 -22
- package/src/surfaces/library-pane.json +670 -437
- package/src/surfaces/library-pane.ts +111 -77
- package/src/surfaces/logic-panel.ts +17 -30
- package/src/surfaces/logic-workspace.ts +13 -15
- package/src/surfaces/media-browser.json +62 -6
- package/src/surfaces/media-browser.ts +26 -11
- package/src/surfaces/media-field.json +1 -1
- package/src/surfaces/media-field.ts +4 -5
- package/src/surfaces/media-library.json +1586 -0
- package/src/surfaces/media-library.ts +282 -0
- package/src/surfaces/media-pane.ts +8 -7
- package/src/surfaces/media-pick-dialog.json +71 -0
- package/src/surfaces/media-pick-dialog.ts +132 -0
- package/src/surfaces/menu.ts +47 -23
- package/src/surfaces/navigator-dock.ts +11 -12
- package/src/surfaces/new-project.ts +27 -26
- package/src/surfaces/pane-context.json +144 -77
- package/src/surfaces/pane-context.ts +44 -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.json +12 -6
- package/src/surfaces/panel-deploy-checklist.ts +8 -7
- 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.json +72 -2
- package/src/surfaces/panel-page.ts +49 -25
- package/src/surfaces/panel-problems.ts +5 -7
- package/src/surfaces/panel-signals.json +1 -1
- package/src/surfaces/panel-signals.ts +25 -39
- package/src/surfaces/panel-stylebook-layers.json +71 -204
- package/src/surfaces/panel-stylebook-layers.ts +5 -29
- package/src/surfaces/preferences.json +120 -48
- package/src/surfaces/preferences.ts +29 -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-quick.json +428 -0
- package/src/surfaces/publish-quick.ts +165 -0
- package/src/surfaces/publish-workspace.json +2892 -0
- package/src/surfaces/publish-workspace.ts +391 -0
- package/src/surfaces/publish.ts +18 -18
- package/src/surfaces/push-plan.ts +7 -8
- package/src/surfaces/rail.json +1 -159
- package/src/surfaces/rail.ts +22 -79
- package/src/surfaces/reference-field.ts +11 -15
- package/src/surfaces/schema-builder.ts +16 -22
- package/src/surfaces/schema-form.json +10 -2
- package/src/surfaces/schema-form.ts +17 -25
- package/src/surfaces/secret-field.ts +9 -6
- package/src/surfaces/seo.json +1 -1
- package/src/surfaces/seo.ts +21 -15
- package/src/surfaces/settings-contexts.ts +9 -7
- package/src/surfaces/settings-contributed.json +5 -5
- package/src/surfaces/settings-contributed.ts +32 -12
- package/src/surfaces/settings-css-vars.json +44 -36
- package/src/surfaces/settings-css-vars.ts +82 -16
- package/src/surfaces/settings-defs.json +2 -2
- package/src/surfaces/settings-defs.ts +17 -21
- package/src/surfaces/settings-deploy.json +2 -15
- package/src/surfaces/settings-deploy.ts +9 -16
- package/src/surfaces/settings-dialog.json +51 -0
- package/src/surfaces/settings-dialog.ts +169 -0
- 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.json +3 -3
- package/src/surfaces/settings-overview.ts +14 -8
- package/src/surfaces/settings-packages.ts +8 -7
- package/src/surfaces/settings-pane.json +269 -46
- package/src/surfaces/settings-pane.ts +88 -36
- package/src/surfaces/settings-rawjson.ts +5 -6
- package/src/surfaces/shell.json +2 -1
- package/src/surfaces/shell.ts +1 -2
- package/src/surfaces/site-panel.json +1029 -0
- package/src/surfaces/site-panel.ts +233 -0
- package/src/surfaces/slash-menu.json +63 -21
- package/src/surfaces/slash-menu.ts +42 -9
- package/src/surfaces/statements.ts +13 -18
- package/src/surfaces/statusbar.ts +56 -29
- package/src/surfaces/style-panel.ts +18 -31
- package/src/surfaces/stylebook-chrome.ts +3 -5
- package/src/surfaces/styles-panel.json +735 -0
- package/src/surfaces/styles-panel.ts +195 -0
- package/src/surfaces/styles-variables.json +149 -0
- package/src/surfaces/styles-variables.ts +145 -0
- package/src/surfaces/tab-strip.json +4 -4
- package/src/surfaces/tab-strip.ts +14 -13
- package/src/surfaces/target-line.ts +6 -7
- package/src/surfaces/welcome.ts +6 -8
- package/src/surfaces/writing-banner.json +94 -0
- package/src/surfaces/writing-banner.ts +80 -0
- package/src/tabs/bare-repeaters.ts +101 -0
- 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 +99 -48
- package/src/tabs/transact.ts +98 -53
- package/src/types.ts +53 -43
- 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 +104 -56
- package/src/ui/formula-catalog.ts +239 -230
- package/src/ui/formula-chips.ts +33 -18
- package/src/ui/layers.ts +57 -31
- package/src/ui/media-picker.ts +300 -47
- package/src/ui/popover-surface.ts +20 -12
- package/src/ui/progress-modal.ts +13 -8
- package/src/ui/regions.ts +14 -12
- package/src/ui/schema-form.ts +372 -97
- 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 +29 -3
- package/src/utils/base64.ts +6 -4
- package/src/utils/edit-display.ts +366 -111
- 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/local-day.ts +18 -0
- 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 +14 -16
- package/src/workspace/session.ts +81 -50
- package/src/workspace/tab-workspace.ts +137 -0
- package/src/workspace/workspace-back.ts +189 -0
- package/src/workspace/workspace-home.ts +133 -0
- package/src/workspace/workspace-ids.ts +129 -0
- package/src/workspace/workspace-switch.ts +372 -0
- package/src/workspace/workspace.ts +165 -47
- package/styles/shell-frame.css +30 -7
- package/styles/shell-frame.json +15 -3
- package/dist/chunks/2020-va2wwra4.js +0 -4
- 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/jsonMode-s8kt9dsj.js +0 -13
- 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-tdcprbqb.js +0 -5
- package/dist/chunks/studio-vrmcjf9g.js +0 -7
- 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-zey7zsdw.js +0 -12
- 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/tsMode-2frah6h1.js +0 -14
- package/dist/chunks/workspace-zt81g1ms.js +0 -4
- package/dist/chunks/ws-client-n2bh4hkf.js +0 -4
- package/src/panels/frontmatter-panel.ts +0 -701
- package/src/panels/git-panel.ts +0 -1120
- package/src/surfaces/doc-header.json +0 -776
- package/src/surfaces/doc-header.ts +0 -231
- package/src/surfaces/git-panel.json +0 -1880
- package/src/surfaces/git-panel.ts +0 -272
package/src/ui/surface.ts
CHANGED
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
* @docs extending/ui-kit
|
|
12
12
|
*/
|
|
13
13
|
import { mount, preloadDocument } from "@jxsuite/runtime";
|
|
14
|
-
import type { JxMountOptions, JxScope } from "@jxsuite/runtime/types";
|
|
14
|
+
import type { JxHostScope, JxMountOptions, JxScope } from "@jxsuite/runtime/types";
|
|
15
15
|
import type { JxDocument } from "@jxsuite/schema/types";
|
|
16
|
+
import type { SelectRow } from "@jxsuite/ui/behaviors/select";
|
|
16
17
|
import { registerMount, unregisterMount } from "../services/surface-registry";
|
|
17
18
|
import { kitReady } from "./kit";
|
|
18
19
|
import { REGION_ATTR } from "./regions";
|
|
@@ -49,6 +50,61 @@ export function surfaceResolver(url: string): JxDocument | undefined {
|
|
|
49
50
|
return surfaces.get(url.slice(SURFACES_BASE.length, -".json".length));
|
|
50
51
|
}
|
|
51
52
|
|
|
53
|
+
/**
|
|
54
|
+
* One row a surface document draws in a picker (a `jx-select` option, a radio, a segmented button):
|
|
55
|
+
* the value the control reports back, and the label the reader sees. The kit's own row, the one
|
|
56
|
+
* `jx-select` draws.
|
|
57
|
+
*/
|
|
58
|
+
export type { SelectRow as SurfaceOption } from "@jxsuite/ui/behaviors/select";
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* One thing a surface document draws for the reader to act on (an empty state's button, an openable
|
|
62
|
+
* source): an id only the flow knows the meaning of, and the words on it.
|
|
63
|
+
*/
|
|
64
|
+
export interface SurfaceAction {
|
|
65
|
+
id: string;
|
|
66
|
+
label: string;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** A delimited, labelled run of picker rows: the kit's `optgroup`, which draws both halves of it. */
|
|
70
|
+
export interface SurfaceOptionGroup {
|
|
71
|
+
id: string;
|
|
72
|
+
label: string;
|
|
73
|
+
rows: SelectRow[];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** A dialog document mounted into the dialog layer, as the flow that opened it holds it. */
|
|
77
|
+
export interface DialogLayerHandle {
|
|
78
|
+
/** The slot in the dialog layer that carries the region. */
|
|
79
|
+
host: HTMLElement;
|
|
80
|
+
/** Resolves with the `jx-dialog` element once it has rendered and been opened. */
|
|
81
|
+
ready: Promise<HTMLElement>;
|
|
82
|
+
/** Close the dialog (the platform restores focus) and dispose the document. Idempotent. */
|
|
83
|
+
close: () => void;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** A label, and the key that identifies what it names (a chip, a section, a menu choice). */
|
|
87
|
+
export interface KeyedLabel {
|
|
88
|
+
key: string;
|
|
89
|
+
label: string;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** A label, and the tag it stands for (a declared language, an element a button adds). */
|
|
93
|
+
export interface TaggedLabel {
|
|
94
|
+
tag: string;
|
|
95
|
+
label: string;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** One tab a surface document draws in a tablist strip. */
|
|
99
|
+
export interface SurfaceTab {
|
|
100
|
+
/** The tab's identity: the row key, the strip's `selected` value, and `data-tab`. */
|
|
101
|
+
key: string;
|
|
102
|
+
/** What the tab reads, badge included ("Problems 2"). */
|
|
103
|
+
label: string;
|
|
104
|
+
/** The tab element's own id, which the one panel names as its `aria-labelledby`. */
|
|
105
|
+
tabId: string;
|
|
106
|
+
}
|
|
107
|
+
|
|
52
108
|
export interface SurfaceHandle {
|
|
53
109
|
readonly scope: JxScope;
|
|
54
110
|
readonly root: HTMLElement | Text;
|
|
@@ -69,9 +125,9 @@ export interface MountSurfaceOptions {
|
|
|
69
125
|
*
|
|
70
126
|
* @throws {Error} When no document is registered under `name`
|
|
71
127
|
*/
|
|
72
|
-
export async function mountSurface(
|
|
128
|
+
export async function mountSurface<S extends JxHostScope<S>>(
|
|
73
129
|
name: string,
|
|
74
|
-
hostScope:
|
|
130
|
+
hostScope: S,
|
|
75
131
|
host: HTMLElement,
|
|
76
132
|
options: MountSurfaceOptions = {},
|
|
77
133
|
): Promise<SurfaceHandle> {
|
|
@@ -83,14 +139,21 @@ export async function mountSurface(
|
|
|
83
139
|
if (options.region) {
|
|
84
140
|
host.setAttribute(REGION_ATTR, options.region);
|
|
85
141
|
}
|
|
86
|
-
const
|
|
142
|
+
const mountOptions: JxMountOptions<S> = {
|
|
87
143
|
scope: hostScope,
|
|
88
144
|
base: SURFACES_BASE,
|
|
89
145
|
resolver: surfaceResolver,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
146
|
+
};
|
|
147
|
+
if (options.onNodeCreated) {
|
|
148
|
+
mountOptions.onNodeCreated = options.onNodeCreated;
|
|
149
|
+
}
|
|
150
|
+
if (options.onNodeMoved) {
|
|
151
|
+
mountOptions.onNodeMoved = options.onNodeMoved;
|
|
152
|
+
}
|
|
153
|
+
if (options.signal) {
|
|
154
|
+
mountOptions.signal = options.signal;
|
|
155
|
+
}
|
|
156
|
+
const handle = await mount(doc, host, mountOptions);
|
|
94
157
|
|
|
95
158
|
const surfaceHandle = (dispose: () => void): SurfaceHandle => ({
|
|
96
159
|
dispose,
|
package/src/ui/timing.ts
CHANGED
|
@@ -35,6 +35,15 @@ export const CODE_DEBOUNCE = 500;
|
|
|
35
35
|
*/
|
|
36
36
|
export const LIVE_PREVIEW = 350;
|
|
37
37
|
|
|
38
|
+
/**
|
|
39
|
+
* How long a keystroke in a `<head>` field waits before it is written: the Search-appearance
|
|
40
|
+
* dialog's fields (a document mutation the previews repaint from) and Project Settings' `$head`
|
|
41
|
+
* rows (a `project.json` write). Both time each field separately, so editing one field and then
|
|
42
|
+
* another inside the window lands both, and a `change` (blur, or a clear button) commits at once,
|
|
43
|
+
* so nothing is lost to the wait.
|
|
44
|
+
*/
|
|
45
|
+
export const HEAD_EDIT_DEBOUNCE = 300;
|
|
46
|
+
|
|
38
47
|
/*
|
|
39
48
|
* `STATUS_MESSAGE = 3000` used to live here: how long a transient message stayed in the status bar
|
|
40
49
|
* before it erased itself. It had one reader, `statusMessage`, which is deleted — the bar carries
|
package/src/ui/value-source.ts
CHANGED
|
@@ -43,7 +43,16 @@ import {
|
|
|
43
43
|
tagExpressionSchema,
|
|
44
44
|
tagNameSchema,
|
|
45
45
|
} from "@jxsuite/schema/defs";
|
|
46
|
-
import {
|
|
46
|
+
import {
|
|
47
|
+
isFunctionDef,
|
|
48
|
+
isJsonObject,
|
|
49
|
+
isNonNullObject,
|
|
50
|
+
isRef,
|
|
51
|
+
isString,
|
|
52
|
+
isTemplateString,
|
|
53
|
+
} from "@jxsuite/schema/guards";
|
|
54
|
+
import type { ReadonlyJsonObject, ReadonlyJsonValue } from "@jxsuite/schema/project-schemas";
|
|
55
|
+
import type { JsonValue, JxDocumentValue } from "@jxsuite/schema/types";
|
|
47
56
|
|
|
48
57
|
/** A rung of the value ladder — one way a document position can produce its value. */
|
|
49
58
|
export type SlotMode = "literal" | "ref" | "template" | "expression" | "function";
|
|
@@ -73,7 +82,7 @@ export const VALUE_SOURCE_HINTS: Record<SlotMode, string> = {
|
|
|
73
82
|
};
|
|
74
83
|
|
|
75
84
|
/** Detect which rung of the ladder a raw document value occupies. */
|
|
76
|
-
export function slotMode(value:
|
|
85
|
+
export function slotMode(value: JxDocumentValue | JsonValue | undefined): SlotMode {
|
|
77
86
|
if (isRef(value)) {
|
|
78
87
|
return "ref";
|
|
79
88
|
}
|
|
@@ -83,7 +92,7 @@ export function slotMode(value: unknown): SlotMode {
|
|
|
83
92
|
if (isTemplateString(value)) {
|
|
84
93
|
return "template";
|
|
85
94
|
}
|
|
86
|
-
if (value &&
|
|
95
|
+
if (isNonNullObject(value) && "$expression" in value) {
|
|
87
96
|
return "expression";
|
|
88
97
|
}
|
|
89
98
|
return "literal";
|
|
@@ -91,8 +100,6 @@ export function slotMode(value: unknown): SlotMode {
|
|
|
91
100
|
|
|
92
101
|
// ─── Schema walk ────────────────────────────────────────────────────────────
|
|
93
102
|
|
|
94
|
-
type SchemaNode = Record<string, unknown>;
|
|
95
|
-
|
|
96
103
|
/**
|
|
97
104
|
* The `on*` property shape that `@jxsuite/schema`'s generator synthesises for every EventHandler
|
|
98
105
|
* IDL attribute (`buildEventHandlerProperties`). It is the only slot position with no declared
|
|
@@ -107,40 +114,45 @@ export const EVENT_HANDLER_SCHEMA = {
|
|
|
107
114
|
} as const;
|
|
108
115
|
|
|
109
116
|
/** The `$defs` a slot position can actually reach. Anything else is a bug, not a silent no-rung. */
|
|
110
|
-
const REACHABLE_DEFS
|
|
111
|
-
ExpressionEntry
|
|
112
|
-
FunctionDef
|
|
113
|
-
RefObject
|
|
114
|
-
StyleObject
|
|
115
|
-
|
|
117
|
+
const REACHABLE_DEFS = new Map<string, ReadonlyJsonObject>([
|
|
118
|
+
["ExpressionEntry", expressionEntrySchema],
|
|
119
|
+
["FunctionDef", functionDefSchema],
|
|
120
|
+
["RefObject", refObjectSchema],
|
|
121
|
+
["StyleObject", styleObjectSchema],
|
|
122
|
+
]);
|
|
116
123
|
|
|
117
124
|
/** A `{ $ref: … }` binding object: `required: ["$ref"]` with a `$ref` property. */
|
|
118
|
-
function isRefObjectSchema(node:
|
|
119
|
-
const { required } = node;
|
|
125
|
+
function isRefObjectSchema(node: ReadonlyJsonObject): boolean {
|
|
126
|
+
const { properties, required } = node;
|
|
120
127
|
return (
|
|
121
128
|
Array.isArray(required) &&
|
|
122
129
|
required.includes("$ref") &&
|
|
123
|
-
|
|
130
|
+
isJsonObject(properties) &&
|
|
131
|
+
Boolean(properties.$ref)
|
|
124
132
|
);
|
|
125
133
|
}
|
|
126
134
|
|
|
127
135
|
/** A `{ $expression: … }` entry. */
|
|
128
|
-
function isExpressionEntrySchema(node:
|
|
136
|
+
function isExpressionEntrySchema(node: ReadonlyJsonObject): boolean {
|
|
129
137
|
const { required } = node;
|
|
130
138
|
return Array.isArray(required) && required.includes("$expression");
|
|
131
139
|
}
|
|
132
140
|
|
|
133
141
|
/** A `$prototype: "Function"` declaration. */
|
|
134
|
-
function isFunctionDefSchema(node:
|
|
135
|
-
const
|
|
136
|
-
return
|
|
142
|
+
function isFunctionDefSchema(node: ReadonlyJsonObject): boolean {
|
|
143
|
+
const { properties } = node;
|
|
144
|
+
return (
|
|
145
|
+
isJsonObject(properties) &&
|
|
146
|
+
isJsonObject(properties.$prototype) &&
|
|
147
|
+
properties.$prototype.const === "Function"
|
|
148
|
+
);
|
|
137
149
|
}
|
|
138
150
|
|
|
139
151
|
/**
|
|
140
152
|
* A string branch that will accept `${…}`. A pattern/enum/const-constrained string will not — a
|
|
141
153
|
* `TagName` or a `#/state/…` pointer is a string, but not a place a template may be typed.
|
|
142
154
|
*/
|
|
143
|
-
function isFreeStringSchema(node:
|
|
155
|
+
function isFreeStringSchema(node: ReadonlyJsonObject): boolean {
|
|
144
156
|
return (
|
|
145
157
|
node.type === "string" &&
|
|
146
158
|
node.pattern === undefined &&
|
|
@@ -155,23 +167,24 @@ interface WalkState {
|
|
|
155
167
|
found: Set<SlotMode>;
|
|
156
168
|
/** Pointers the walk could not resolve — surfaced so a schema move fails loudly. */
|
|
157
169
|
unresolved: Set<string>;
|
|
158
|
-
seen: Set<
|
|
170
|
+
seen: Set<ReadonlyJsonObject>;
|
|
159
171
|
}
|
|
160
172
|
|
|
161
|
-
function walk(
|
|
162
|
-
|
|
173
|
+
function walk(schema: ReadonlyJsonValue | undefined, state: WalkState): void {
|
|
174
|
+
/* An array is an object too, but it names no keyword: the walk below found nothing in one, so
|
|
175
|
+
refusing it here is the same answer reached sooner. */
|
|
176
|
+
if (!isJsonObject(schema)) {
|
|
163
177
|
return;
|
|
164
178
|
}
|
|
165
|
-
const schema = node as SchemaNode;
|
|
166
179
|
if (state.seen.has(schema)) {
|
|
167
180
|
return;
|
|
168
181
|
}
|
|
169
182
|
state.seen.add(schema);
|
|
170
183
|
|
|
171
|
-
const pointer =
|
|
184
|
+
const pointer = isString(schema.$ref) ? schema.$ref : undefined;
|
|
172
185
|
if (pointer !== undefined && Object.keys(schema).length === 1) {
|
|
173
186
|
const name = pointer.startsWith("#/$defs/") ? pointer.slice("#/$defs/".length) : pointer;
|
|
174
|
-
const target = REACHABLE_DEFS
|
|
187
|
+
const target = REACHABLE_DEFS.get(name);
|
|
175
188
|
if (target) {
|
|
176
189
|
walk(target, state);
|
|
177
190
|
} else {
|
|
@@ -218,7 +231,7 @@ function walk(node: unknown, state: WalkState): void {
|
|
|
218
231
|
state.found.add("literal");
|
|
219
232
|
return;
|
|
220
233
|
}
|
|
221
|
-
if (
|
|
234
|
+
if (isString(schema.type) && SCALAR_TYPES.has(schema.type)) {
|
|
222
235
|
state.found.add("literal");
|
|
223
236
|
}
|
|
224
237
|
}
|
|
@@ -230,7 +243,7 @@ export interface DerivedCaps {
|
|
|
230
243
|
}
|
|
231
244
|
|
|
232
245
|
/** Derive the rungs a subschema permits, and report any pointer the walk could not follow. */
|
|
233
|
-
export function deriveSlotCapsDetailed(schema:
|
|
246
|
+
export function deriveSlotCapsDetailed(schema: ReadonlyJsonValue | undefined): DerivedCaps {
|
|
234
247
|
const state: WalkState = { found: new Set(), seen: new Set(), unresolved: new Set() };
|
|
235
248
|
walk(schema, state);
|
|
236
249
|
return {
|
|
@@ -240,7 +253,7 @@ export function deriveSlotCapsDetailed(schema: unknown): DerivedCaps {
|
|
|
240
253
|
}
|
|
241
254
|
|
|
242
255
|
/** Derive the rungs a subschema permits, in ladder order. */
|
|
243
|
-
export function deriveSlotCaps(schema:
|
|
256
|
+
export function deriveSlotCaps(schema: ReadonlyJsonValue | undefined): SlotMode[] {
|
|
244
257
|
return deriveSlotCapsDetailed(schema).caps;
|
|
245
258
|
}
|
|
246
259
|
|
|
@@ -322,7 +335,7 @@ export type SlotPosition = keyof typeof SLOT_POSITION_SCHEMAS;
|
|
|
322
335
|
* There is deliberately no third form. A caller may not state which rungs it wants: the rungs are
|
|
323
336
|
* derived from a schema or they are not derived at all.
|
|
324
337
|
*/
|
|
325
|
-
export type SlotCapsSource = SlotPosition | { schema:
|
|
338
|
+
export type SlotCapsSource = SlotPosition | { schema: ReadonlyJsonValue };
|
|
326
339
|
|
|
327
340
|
const capsCache = new Map<SlotPosition, SlotMode[]>();
|
|
328
341
|
|
|
@@ -339,7 +352,7 @@ export function capsForPosition(position: SlotPosition): SlotMode[] {
|
|
|
339
352
|
|
|
340
353
|
/** The rungs on offer for a {@link SlotCapsSource} — a named position, or a schema handed in. */
|
|
341
354
|
export function slotCaps(source: SlotCapsSource): SlotMode[] {
|
|
342
|
-
return
|
|
355
|
+
return isString(source) ? capsForPosition(source) : deriveSlotCaps(source.schema);
|
|
343
356
|
}
|
|
344
357
|
|
|
345
358
|
/**
|
|
@@ -351,7 +364,7 @@ export function slotCaps(source: SlotCapsSource): SlotMode[] {
|
|
|
351
364
|
* own config at runtime — which no plugin schema declares because it is not the plugin's to
|
|
352
365
|
* declare. Both are stated here, once, rather than assumed at each form.
|
|
353
366
|
*/
|
|
354
|
-
export function configFieldSchema(field:
|
|
367
|
+
export function configFieldSchema(field: ReadonlyJsonValue): ReadonlyJsonObject {
|
|
355
368
|
const declared = deriveSlotCaps(field).length > 0 ? field : { type: "string" };
|
|
356
369
|
return { anyOf: [declared, { $ref: "#/$defs/RefObject" }] };
|
|
357
370
|
}
|
package/src/ui/virtual-window.ts
CHANGED
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
/// <reference lib="dom" />
|
|
30
30
|
|
|
31
|
+
import { isFunction } from "@jxsuite/schema/guards";
|
|
31
32
|
import { rectOf } from "../utils/geometry";
|
|
32
33
|
|
|
33
34
|
/** The measurement a window is computed from. Everything is in CSS pixels. */
|
|
@@ -244,7 +245,7 @@ export function createVirtualWindow(options: VirtualWindowOptions): VirtualWindo
|
|
|
244
245
|
};
|
|
245
246
|
|
|
246
247
|
let resizeObserver: ResizeObserver | null = null;
|
|
247
|
-
if (
|
|
248
|
+
if (isFunction(globalThis.ResizeObserver)) {
|
|
248
249
|
resizeObserver = new ResizeObserver(measureNextFrame);
|
|
249
250
|
resizeObserver.observe(scroller);
|
|
250
251
|
if (list) {
|
|
@@ -329,7 +330,7 @@ export function scrollerFor(list: HTMLElement): HTMLElement | null {
|
|
|
329
330
|
if (cached && cached.isConnected && list.isConnected && cached.contains(list)) {
|
|
330
331
|
return cached;
|
|
331
332
|
}
|
|
332
|
-
const found = nearestScroller(list);
|
|
333
|
+
const found = declaredScroller(list) ?? nearestScroller(list);
|
|
333
334
|
if (found) {
|
|
334
335
|
scrollerCache.set(list, found);
|
|
335
336
|
} else {
|
|
@@ -338,6 +339,31 @@ export function scrollerFor(list: HTMLElement): HTMLElement | null {
|
|
|
338
339
|
return found;
|
|
339
340
|
}
|
|
340
341
|
|
|
342
|
+
/**
|
|
343
|
+
* The attribute a host stamps on the element it KNOWS scrolls the lists drawn inside it.
|
|
344
|
+
*
|
|
345
|
+
* `#left-panel` is the one scroller every Navigator panel draws in (its dock's root is `display:
|
|
346
|
+
* contents`), and the shell says so in `surfaces/shell.json`.
|
|
347
|
+
*/
|
|
348
|
+
export const SCROLLER_ATTR = "data-jx-scroller";
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* The scroller a host declared for `list`, found by a node walk that reads no layout, or null.
|
|
352
|
+
*
|
|
353
|
+
* {@link nearestScroller}'s walk reads `scrollHeight`, `clientHeight` and computed overflow on every
|
|
354
|
+
* ancestor, and the moment a list is bound is the moment its panel has just been drawn, so the
|
|
355
|
+
* first read pays a style recalculation of the whole half-written document. The cache cannot help
|
|
356
|
+
* there: the Files tree and the Outline are new elements each time their panel is shown again, so
|
|
357
|
+
* every show of either one walked (12 to 32 ms a show in the perf trace). A declared scroller
|
|
358
|
+
* answers by identity. It carries the memoized answer's one residue: it is the scroller whether or
|
|
359
|
+
* not its content overflows right now, and a list that fits is windowed to the whole list, which is
|
|
360
|
+
* what {@link computeWindow} answers for it anyway. Only a CONNECTED list asks: a list still being
|
|
361
|
+
* built is not inside its scroller yet.
|
|
362
|
+
*/
|
|
363
|
+
function declaredScroller(list: HTMLElement): HTMLElement | null {
|
|
364
|
+
return list.isConnected ? list.closest<HTMLElement>(`[${SCROLLER_ATTR}]`) : null;
|
|
365
|
+
}
|
|
366
|
+
|
|
341
367
|
/**
|
|
342
368
|
* How far `list`'s first row has scrolled above the top of `scroller`'s viewport.
|
|
343
369
|
*
|
|
@@ -373,7 +399,7 @@ export function listWindow(
|
|
|
373
399
|
return computeWindow({
|
|
374
400
|
columns: spec.columns ?? 1,
|
|
375
401
|
count: spec.count,
|
|
376
|
-
|
|
402
|
+
overscanRows: spec.overscanRows ?? DEFAULT_OVERSCAN_ROWS,
|
|
377
403
|
rowHeight: spec.rowHeight,
|
|
378
404
|
scrollTop: listScrollTop(scroller, list),
|
|
379
405
|
viewportHeight: scroller.clientHeight,
|
package/src/utils/base64.ts
CHANGED
|
@@ -3,14 +3,16 @@
|
|
|
3
3
|
* Base64 encoding for binary payloads that cross an RPC boundary.
|
|
4
4
|
*
|
|
5
5
|
* `StudioPlatform.uploadFile` accepts `string | File | Blob | ArrayBuffer`, but the RPC platforms
|
|
6
|
-
* (
|
|
7
|
-
* Those platforms encode here before the call; the HTTP platforms (dev server, cloud) post
|
|
8
|
-
* binary body directly and must NOT use this.
|
|
6
|
+
* (the chromium desktop shell) JSON-serialize their params — a `File`/`Blob` becomes `{}` on the
|
|
7
|
+
* wire. Those platforms encode here before the call; the HTTP platforms (dev server, cloud) post
|
|
8
|
+
* the binary body directly and must NOT use this.
|
|
9
9
|
*
|
|
10
10
|
* {@link base64ToBytes} is the same boundary in the other direction, for `readFileBytes`: the RPC
|
|
11
11
|
* backends answer a base64 string for the same reason they accept one, and the caller wants bytes.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
15
|
+
|
|
14
16
|
/** Bytes per `String.fromCodePoint` call — spreading a whole large file blows the call stack. */
|
|
15
17
|
const CHUNK = 32_768;
|
|
16
18
|
|
|
@@ -28,7 +30,7 @@ export function bytesToBase64(bytes: Uint8Array): string {
|
|
|
28
30
|
* have always received base64 strings, so existing callers keep working.
|
|
29
31
|
*/
|
|
30
32
|
export async function toBase64(data: string | File | Blob | ArrayBuffer): Promise<string> {
|
|
31
|
-
if (
|
|
33
|
+
if (isString(data)) {
|
|
32
34
|
return data;
|
|
33
35
|
}
|
|
34
36
|
const buffer = data instanceof ArrayBuffer ? data : await data.arrayBuffer();
|