@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
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/// <reference lib="dom" />
|
|
2
2
|
/**
|
|
3
|
-
* The
|
|
3
|
+
* The Content home surface: one collection, browsed, as a Jx document over the kit (studio.md
|
|
4
|
+
* §22.5).
|
|
4
5
|
*
|
|
5
|
-
* This is the adapter. `browse/library-pane.ts` keeps the
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* This is the adapter. `browse/library-pane.ts` keeps the home — the scan, the collection and its
|
|
7
|
+
* filter, the window, the header line, the per-file menu — and hands this module one projection: a
|
|
8
|
+
* word saying which of eight things to draw, the toolbar's chips already marked, and rows whose
|
|
8
9
|
* every field is already a string. The document renders that and decides nothing.
|
|
9
10
|
*
|
|
10
|
-
* **
|
|
11
|
+
* **Eight cases, one discriminant.** `$switch` over a value is the only conditional a document has,
|
|
11
12
|
* and "is the scan running, did it finish, did the project have anything in it, did the filter keep
|
|
12
13
|
* any of it, and which layout is on" is five questions. The pane answers them once and the surface
|
|
13
14
|
* reads a word — which is also what keeps the four honest empty states from collapsing back into
|
|
@@ -22,28 +23,29 @@
|
|
|
22
23
|
* **The container is CLEARED, because this is a pane and not a panel.** A panel is handed
|
|
23
24
|
* `.panel-content`, a node lit renders `nothing` into, whose comment markers must survive; the
|
|
24
25
|
* canvas stage is handed to whichever mode owns it whole, and `canvas/canvas-render.ts` hands it
|
|
25
|
-
* over by emptying it. So the mount empties it too, which is what stops two
|
|
26
|
-
*
|
|
26
|
+
* over by emptying it. So the mount empties it too, which is what stops two homes stacking when a
|
|
27
|
+
* repaint lands before the first mount has settled.
|
|
27
28
|
*
|
|
28
29
|
* @docs studio/projects/browse
|
|
29
30
|
*/
|
|
30
31
|
|
|
32
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
31
33
|
import { reactive } from "../reactivity";
|
|
32
34
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
33
35
|
import { placeholderBrokenImages } from "../utils/edit-display";
|
|
34
36
|
import libraryDoc from "./library-pane.json";
|
|
35
|
-
import type {
|
|
37
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
36
38
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
37
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
39
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
38
40
|
|
|
39
|
-
registerSurface("library-pane", libraryDoc
|
|
41
|
+
registerSurface("library-pane", libraryDoc);
|
|
40
42
|
|
|
41
43
|
/**
|
|
42
|
-
* Which of
|
|
44
|
+
* Which of eight things the body draws.
|
|
43
45
|
*
|
|
44
46
|
* The first four are the states the Manage view called "No files found" — a scan still running, a
|
|
45
|
-
* scan that could not finish, a
|
|
46
|
-
*
|
|
47
|
+
* scan that could not finish, a collection with nothing in it, and a filter that matched none of it
|
|
48
|
+
* — and the last four are the views. One word, so no two of them can be true at once.
|
|
47
49
|
*/
|
|
48
50
|
export type LibraryViewKind =
|
|
49
51
|
| "loading"
|
|
@@ -51,7 +53,6 @@ export type LibraryViewKind =
|
|
|
51
53
|
| "empty"
|
|
52
54
|
| "nomatch"
|
|
53
55
|
| "cards"
|
|
54
|
-
| "media"
|
|
55
56
|
| "table"
|
|
56
57
|
| "calendar"
|
|
57
58
|
| "board";
|
|
@@ -68,9 +69,7 @@ export interface LibraryRow {
|
|
|
68
69
|
* Which of three things stands in the art box.
|
|
69
70
|
*
|
|
70
71
|
* `image` is the file itself, `doc` is the live-preview island the host fills, and `glyph` is the
|
|
71
|
-
* honest answer for a file nothing here can draw.
|
|
72
|
-
* thumbnail of an asset, and a live document render inside one is the cost the Media layout
|
|
73
|
-
* exists to avoid.
|
|
72
|
+
* honest answer for a file nothing here can draw.
|
|
74
73
|
*/
|
|
75
74
|
art: "image" | "doc" | "glyph";
|
|
76
75
|
/** The URL an `image` loads. Empty for the other two. */
|
|
@@ -98,10 +97,10 @@ export interface LibraryColumn {
|
|
|
98
97
|
* note; only Board prints a count, and only the Calendar's undated section is dimmed.
|
|
99
98
|
*/
|
|
100
99
|
export interface LibraryGroup {
|
|
101
|
-
/** The group's identity across repaints — the date, or the
|
|
100
|
+
/** The group's identity across repaints — the date, or the folder. */
|
|
102
101
|
id: string;
|
|
103
102
|
title: string;
|
|
104
|
-
/** Board's honest total for the
|
|
103
|
+
/** Board's honest total for the folder, already a string. Empty for a Calendar day. */
|
|
105
104
|
count: string;
|
|
106
105
|
/** What this group left out, or the undated section's count. */
|
|
107
106
|
note: string;
|
|
@@ -111,27 +110,53 @@ export interface LibraryGroup {
|
|
|
111
110
|
files: LibraryRow[];
|
|
112
111
|
}
|
|
113
112
|
|
|
114
|
-
/** A toolbar chip: a
|
|
113
|
+
/** A toolbar chip: a view, and whether it is the one in force. */
|
|
115
114
|
export interface LibraryChip {
|
|
116
115
|
key: string;
|
|
117
116
|
label: string;
|
|
118
117
|
checked: "true" | "false";
|
|
119
118
|
}
|
|
120
119
|
|
|
121
|
-
/**
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
120
|
+
/**
|
|
121
|
+
* The header line: where a collection's entries are published (§22.5).
|
|
122
|
+
*
|
|
123
|
+
* `page` reads "Each post has a page at `/blog/:slug` using Post" with **Design the post page**;
|
|
124
|
+
* `none` reads "Entries have no page of their own" with **Add one**; `loading` is the sentence
|
|
125
|
+
* shown while the pages are being read; `hidden` draws nothing (Pages, a file-backed collection).
|
|
126
|
+
*/
|
|
127
|
+
export interface LibraryPageLine {
|
|
128
|
+
state: "hidden" | "loading" | "page" | "none";
|
|
129
|
+
/** The sentence before the pattern, or the whole sentence for `loading` and `none`. */
|
|
130
|
+
text: string;
|
|
131
|
+
/** The URL pattern, drawn as code. */
|
|
132
|
+
pattern: string;
|
|
133
|
+
/** "using Post", or "with no template". */
|
|
134
|
+
template: string;
|
|
135
|
+
/** The button that opens the page in Design. */
|
|
136
|
+
designLabel: string;
|
|
125
137
|
}
|
|
126
138
|
|
|
127
139
|
/** Everything the document draws, as one value. */
|
|
128
140
|
export interface LibraryView {
|
|
129
|
-
/** The region id stamped on the root, so the screenshot pipeline can address the
|
|
141
|
+
/** The region id stamped on the root, so the screenshot pipeline can address the home. */
|
|
130
142
|
region: string;
|
|
131
|
-
/** The region id on the scroller, which is also the drop zone. */
|
|
132
|
-
dropRegion: string;
|
|
133
143
|
view: LibraryViewKind;
|
|
134
|
-
|
|
144
|
+
/** The collection's title: "Pages", "Posts". */
|
|
145
|
+
title: string;
|
|
146
|
+
/** The line under the title, or "" for none. */
|
|
147
|
+
subtitle: string;
|
|
148
|
+
/** The search field's label: "Search posts". */
|
|
149
|
+
searchLabel: string;
|
|
150
|
+
/** The create button's label: "New post". */
|
|
151
|
+
newLabel: string;
|
|
152
|
+
/** Whether **New <item>** is drawn: a file-backed collection (one CSV) gains rows in its file. */
|
|
153
|
+
newState: "hidden" | "shown";
|
|
154
|
+
/**
|
|
155
|
+
* Whether **Fields** and **Edit in grid** are drawn: a declared collection has fields and a grid
|
|
156
|
+
* of its own, Pages does not.
|
|
157
|
+
*/
|
|
158
|
+
fieldsState: "hidden" | "shown";
|
|
159
|
+
page: LibraryPageLine;
|
|
135
160
|
layouts: LibraryChip[];
|
|
136
161
|
/**
|
|
137
162
|
* Whether the language facet is drawn at all.
|
|
@@ -140,17 +165,15 @@ export interface LibraryView {
|
|
|
140
165
|
* chrome that says nothing.
|
|
141
166
|
*/
|
|
142
167
|
localeState: "hidden" | "shown";
|
|
143
|
-
localeOptions:
|
|
168
|
+
localeOptions: SurfaceOption[];
|
|
144
169
|
localeValue: string;
|
|
170
|
+
/** The Filter: drawn when something groups the entries (their status, or the Board's field). */
|
|
171
|
+
filterState: "hidden" | "shown";
|
|
172
|
+
filterOptions: SurfaceOption[];
|
|
173
|
+
filterValue: string;
|
|
145
174
|
query: string;
|
|
146
|
-
/** Where an upload lands, as the label's tooltip says it — before the files are chosen. */
|
|
147
|
-
uploadHint: string;
|
|
148
|
-
/** The picker's `accept`, from the media registry. */
|
|
149
|
-
uploadAccept: string;
|
|
150
175
|
bannerState: "hidden" | "shown";
|
|
151
176
|
bannerText: string;
|
|
152
|
-
/** `"true"` while a drag is over the body. A state the host holds, not a class a handler adds. */
|
|
153
|
-
dropActive: "true" | "false";
|
|
154
177
|
/** The `nomatch` sentence, naming the filters that produced it. */
|
|
155
178
|
emptyMessage: string;
|
|
156
179
|
/** The second line of `incomplete` and `nomatch`. */
|
|
@@ -167,28 +190,25 @@ export interface LibraryView {
|
|
|
167
190
|
truncatedState: "hidden" | "shown";
|
|
168
191
|
}
|
|
169
192
|
|
|
170
|
-
/** What a control can ask the
|
|
193
|
+
/** What a control can ask the home to do. Every one of them is a decision the pane owns. */
|
|
171
194
|
export interface LibraryActions {
|
|
172
|
-
setCategory: (key: string) => void;
|
|
173
195
|
setLayout: (key: string) => void;
|
|
174
196
|
setLocale: (value: string) => void;
|
|
197
|
+
setFilter: (value: string) => void;
|
|
175
198
|
search: (value: string) => void;
|
|
176
199
|
openFile: (path: string) => void;
|
|
177
200
|
/** Right-click on a row, at the pointer. */
|
|
178
201
|
contextMenu: (path: string, x: number, y: number) => void;
|
|
179
|
-
/**
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
dragOver: () => void;
|
|
190
|
-
dragOut: () => void;
|
|
191
|
-
drop: (files: FileList | null) => void;
|
|
202
|
+
/** **New <item>** opens Add new on the collection's kind. */
|
|
203
|
+
openNew: () => void;
|
|
204
|
+
/** **Fields** opens Project Settings › Content types on this collection. */
|
|
205
|
+
openFields: () => void;
|
|
206
|
+
/** **Edit in grid** opens the collection's grid (`collection.editInGrid`). */
|
|
207
|
+
openGrid: () => void;
|
|
208
|
+
/** **Design the <item> page** opens the collection's page in Design. */
|
|
209
|
+
designPage: () => void;
|
|
210
|
+
/** **Add one** writes the collection's page. */
|
|
211
|
+
addPage: () => void;
|
|
192
212
|
scrolled: () => void;
|
|
193
213
|
retry: () => void;
|
|
194
214
|
reset: () => void;
|
|
@@ -211,24 +231,29 @@ export interface LibrarySurfaceHandle {
|
|
|
211
231
|
}
|
|
212
232
|
|
|
213
233
|
/** The scope the document reads: {@link LibraryView} plus the actions its controls call. */
|
|
214
|
-
interface LibraryScope extends
|
|
234
|
+
interface LibraryScope extends LibraryView, LibraryActions {}
|
|
215
235
|
|
|
216
236
|
/** Write a projection into the scope. */
|
|
217
237
|
function project(scope: LibraryScope, view: LibraryView): void {
|
|
218
238
|
scope.region = view.region;
|
|
219
|
-
scope.dropRegion = view.dropRegion;
|
|
220
239
|
scope.view = view.view;
|
|
221
|
-
scope.
|
|
240
|
+
scope.title = view.title;
|
|
241
|
+
scope.subtitle = view.subtitle;
|
|
242
|
+
scope.searchLabel = view.searchLabel;
|
|
243
|
+
scope.newLabel = view.newLabel;
|
|
244
|
+
scope.newState = view.newState;
|
|
245
|
+
scope.fieldsState = view.fieldsState;
|
|
246
|
+
scope.page = view.page;
|
|
222
247
|
scope.layouts = view.layouts;
|
|
248
|
+
scope.filterState = view.filterState;
|
|
249
|
+
scope.filterOptions = view.filterOptions;
|
|
250
|
+
scope.filterValue = view.filterValue;
|
|
223
251
|
scope.localeState = view.localeState;
|
|
224
252
|
scope.localeOptions = view.localeOptions;
|
|
225
253
|
scope.localeValue = view.localeValue;
|
|
226
254
|
scope.query = view.query;
|
|
227
|
-
scope.uploadHint = view.uploadHint;
|
|
228
|
-
scope.uploadAccept = view.uploadAccept;
|
|
229
255
|
scope.bannerState = view.bannerState;
|
|
230
256
|
scope.bannerText = view.bannerText;
|
|
231
|
-
scope.dropActive = view.dropActive;
|
|
232
257
|
scope.emptyMessage = view.emptyMessage;
|
|
233
258
|
scope.emptyDetail = view.emptyDetail;
|
|
234
259
|
scope.pad = view.pad;
|
|
@@ -243,19 +268,20 @@ function project(scope: LibraryScope, view: LibraryView): void {
|
|
|
243
268
|
|
|
244
269
|
/** The `part` a node's definition carries, or "" for a text node or an unmarked element. */
|
|
245
270
|
function partOf(def: JxElement | string): string {
|
|
246
|
-
const part =
|
|
247
|
-
return
|
|
271
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
272
|
+
return isString(part) ? part : "";
|
|
248
273
|
}
|
|
249
274
|
|
|
250
275
|
/** The path of the mapped row a node was rendered inside, or "" when it was not in one. */
|
|
251
276
|
function rowPath(state: JxScope | undefined): string {
|
|
252
|
-
const map = state?.["$map"]
|
|
253
|
-
const
|
|
254
|
-
|
|
277
|
+
const map = state?.["$map"];
|
|
278
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
279
|
+
const path = isJsonObject(item) ? item["path"] : undefined;
|
|
280
|
+
return isString(path) ? path : "";
|
|
255
281
|
}
|
|
256
282
|
|
|
257
283
|
/**
|
|
258
|
-
* Mount the
|
|
284
|
+
* Mount the Content home document into `host`, wired to `actions`.
|
|
259
285
|
*
|
|
260
286
|
* @param {HTMLElement} host - The pane's canvas stage
|
|
261
287
|
* @param {LibraryView} view - What to draw right now
|
|
@@ -272,26 +298,30 @@ export function mountLibrarySurface(
|
|
|
272
298
|
// Than the browser's broken-image glyph.
|
|
273
299
|
const listening = new AbortController();
|
|
274
300
|
placeholderBrokenImages(host, listening.signal);
|
|
275
|
-
const scope = reactive<LibraryScope>({
|
|
301
|
+
const scope: LibraryScope = reactive<LibraryScope>({
|
|
302
|
+
addPage: actions.addPage,
|
|
276
303
|
bannerState: "hidden",
|
|
277
304
|
bannerText: "",
|
|
278
|
-
categories: [],
|
|
279
305
|
columns: [],
|
|
280
306
|
contextMenu: actions.contextMenu,
|
|
281
|
-
|
|
282
|
-
dragOver: actions.dragOver,
|
|
283
|
-
drop: actions.drop,
|
|
284
|
-
dropActive: "false",
|
|
285
|
-
dropRegion: "",
|
|
307
|
+
designPage: actions.designPage,
|
|
286
308
|
emptyDetail: "",
|
|
287
309
|
emptyMessage: "",
|
|
310
|
+
fieldsState: "hidden",
|
|
288
311
|
groups: [],
|
|
289
312
|
layouts: [],
|
|
313
|
+
filterOptions: [],
|
|
314
|
+
filterState: "hidden",
|
|
315
|
+
filterValue: "",
|
|
290
316
|
localeOptions: [],
|
|
291
317
|
localeState: "hidden",
|
|
292
318
|
localeValue: "",
|
|
319
|
+
newLabel: "",
|
|
320
|
+
newState: "hidden",
|
|
321
|
+
openFields: actions.openFields,
|
|
322
|
+
openGrid: actions.openGrid,
|
|
293
323
|
openFile: actions.openFile,
|
|
294
|
-
|
|
324
|
+
openNew: actions.openNew,
|
|
295
325
|
pad: "",
|
|
296
326
|
padBottom: "",
|
|
297
327
|
padTop: "",
|
|
@@ -300,20 +330,21 @@ export function mountLibrarySurface(
|
|
|
300
330
|
region: "",
|
|
301
331
|
reset: actions.reset,
|
|
302
332
|
retry: actions.retry,
|
|
333
|
+
page: { designLabel: "", pattern: "", state: "hidden", template: "", text: "" },
|
|
303
334
|
rows: [],
|
|
304
335
|
scrolled: actions.scrolled,
|
|
305
336
|
scroller: actions.scroller,
|
|
306
337
|
search: actions.search,
|
|
307
|
-
|
|
338
|
+
searchLabel: "",
|
|
308
339
|
setLayout: actions.setLayout,
|
|
340
|
+
setFilter: actions.setFilter,
|
|
309
341
|
setLocale: actions.setLocale,
|
|
342
|
+
subtitle: "",
|
|
343
|
+
title: "",
|
|
310
344
|
truncated: "",
|
|
311
345
|
truncatedState: "hidden",
|
|
312
|
-
upload: actions.upload,
|
|
313
|
-
uploadAccept: "",
|
|
314
|
-
uploadHint: "",
|
|
315
346
|
view: "loading",
|
|
316
|
-
})
|
|
347
|
+
});
|
|
317
348
|
project(scope, view);
|
|
318
349
|
|
|
319
350
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -340,12 +371,15 @@ export function mountLibrarySurface(
|
|
|
340
371
|
}
|
|
341
372
|
},
|
|
342
373
|
}).then((surface) => {
|
|
374
|
+
/* SAFETY: `library-pane.json`'s root definition is a `div` element, so the runtime mounts an
|
|
375
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
376
|
+
const root = surface.root as HTMLElement;
|
|
343
377
|
if (disposed) {
|
|
344
378
|
surface.dispose();
|
|
345
|
-
return
|
|
379
|
+
return root;
|
|
346
380
|
}
|
|
347
381
|
mounted = surface;
|
|
348
|
-
return
|
|
382
|
+
return root;
|
|
349
383
|
});
|
|
350
384
|
|
|
351
385
|
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;
|
|
@@ -87,9 +87,14 @@
|
|
|
87
87
|
"fontSize": "var(--jx-text-xs)"
|
|
88
88
|
},
|
|
89
89
|
"& [part=\"more\"]": {
|
|
90
|
-
"
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
"justifyContent": "flex-start"
|
|
91
|
+
},
|
|
92
|
+
"& [part=\"browse-all\"]": {
|
|
93
|
+
"$description": "The last row, set apart by a rule: it does not pick a file, it opens the picker that shows all of them.",
|
|
94
|
+
"marginTop": "var(--jx-space-1)",
|
|
95
|
+
"paddingTop": "var(--jx-space-2)",
|
|
96
|
+
"borderTop": "1px solid var(--border)",
|
|
97
|
+
"justifyContent": "flex-start"
|
|
93
98
|
}
|
|
94
99
|
},
|
|
95
100
|
"children": [
|
|
@@ -288,14 +293,65 @@
|
|
|
288
293
|
},
|
|
289
294
|
"cases": {
|
|
290
295
|
"shown": {
|
|
291
|
-
"$description": "A truncated list says so
|
|
292
|
-
"tagName": "
|
|
296
|
+
"$description": "A truncated list says so, and the marker is a control (the rule studio.md §5.6 states for every truncation marker): it raises the cap by fifty, so every file the Media workspace lists can be reached from here without a search. Inert \"…21 more\" text was the panel holding the answer and not showing it.",
|
|
297
|
+
"tagName": "jx-button",
|
|
293
298
|
"attributes": {
|
|
294
299
|
"part": "more"
|
|
295
300
|
},
|
|
296
|
-
"
|
|
301
|
+
"$props": {
|
|
302
|
+
"variant": "secondary",
|
|
303
|
+
"size": "sm",
|
|
304
|
+
"quiet": true
|
|
305
|
+
},
|
|
306
|
+
"onclick": {
|
|
307
|
+
"$prototype": "Function",
|
|
308
|
+
"body": [
|
|
309
|
+
{
|
|
310
|
+
"operator": "call",
|
|
311
|
+
"target": {
|
|
312
|
+
"$ref": "#/state/showMore"
|
|
313
|
+
},
|
|
314
|
+
"value": []
|
|
315
|
+
}
|
|
316
|
+
]
|
|
317
|
+
},
|
|
318
|
+
"children": [
|
|
319
|
+
{
|
|
320
|
+
"tagName": "span",
|
|
321
|
+
"textContent": "${state.moreLabel}"
|
|
322
|
+
}
|
|
323
|
+
]
|
|
297
324
|
}
|
|
298
325
|
}
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
"tagName": "jx-button",
|
|
329
|
+
"attributes": {
|
|
330
|
+
"part": "browse-all"
|
|
331
|
+
},
|
|
332
|
+
"$props": {
|
|
333
|
+
"variant": "secondary",
|
|
334
|
+
"size": "sm",
|
|
335
|
+
"quiet": true
|
|
336
|
+
},
|
|
337
|
+
"onclick": {
|
|
338
|
+
"$prototype": "Function",
|
|
339
|
+
"body": [
|
|
340
|
+
{
|
|
341
|
+
"operator": "call",
|
|
342
|
+
"target": {
|
|
343
|
+
"$ref": "#/state/browseAll"
|
|
344
|
+
},
|
|
345
|
+
"value": []
|
|
346
|
+
}
|
|
347
|
+
]
|
|
348
|
+
},
|
|
349
|
+
"children": [
|
|
350
|
+
{
|
|
351
|
+
"tagName": "span",
|
|
352
|
+
"textContent": "${state.browseAllLabel}"
|
|
353
|
+
}
|
|
354
|
+
]
|
|
299
355
|
}
|
|
300
356
|
]
|
|
301
357
|
}
|