@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
|
@@ -11,8 +11,16 @@
|
|
|
11
11
|
* **The markup left.** The section is the `settings-css-vars` surface
|
|
12
12
|
* (`surfaces/settings-css-vars.json`), mounted by `surfaces/settings-css-vars.ts`; what is here is
|
|
13
13
|
* the part that was always this module's — what a row shows, what an edit writes, and what a failed
|
|
14
|
-
* write says. `renderCssVarsEditor` is unchanged as a contract:
|
|
15
|
-
*
|
|
14
|
+
* write says. `renderCssVarsEditor` is unchanged as a contract: it is handed a container and mounts
|
|
15
|
+
* a document into it instead of rendering lit.
|
|
16
|
+
*
|
|
17
|
+
* **Its host is the Styles workspace's Variables view** (`style/variables-view.ts`, §7.1), the
|
|
18
|
+
* `tokens` editor of the `project.json` tab. It was Project Settings › CSS Variables, and its
|
|
19
|
+
* persistence did not change with the move: an edit is committed through the configuration
|
|
20
|
+
* chokepoint (`updateSiteConfig` → `commitProjectConfig`) as it is made, which writes the whole
|
|
21
|
+
* document, so an element style edit the Elements view left unsaved on the same tab is written too
|
|
22
|
+
* and the tab comes back clean. The view says so in as many words, rather than letting the Save
|
|
23
|
+
* button's state be the first the author hears of it.
|
|
16
24
|
*
|
|
17
25
|
* Three things it does NOT do, each on purpose:
|
|
18
26
|
*
|
|
@@ -26,8 +34,9 @@
|
|
|
26
34
|
* change" true of the specimen canvas as well as the page one.
|
|
27
35
|
*/
|
|
28
36
|
|
|
37
|
+
import { isNumber, isString } from "@jxsuite/schema/guards";
|
|
29
38
|
import { errorMessage } from "@jxsuite/schema/parse";
|
|
30
|
-
import {
|
|
39
|
+
import { runActiveReported } from "../commands/run-reported";
|
|
31
40
|
import { projectState } from "../store";
|
|
32
41
|
import { getEffectiveMedia, updateSiteConfig } from "../site-context";
|
|
33
42
|
import {
|
|
@@ -36,12 +45,15 @@ import {
|
|
|
36
45
|
groupTokens,
|
|
37
46
|
listTokenContexts,
|
|
38
47
|
readTokenOverride,
|
|
39
|
-
tokenLabel,
|
|
40
48
|
writeTokenOverride,
|
|
41
49
|
} from "../style/project-styles";
|
|
42
50
|
import { resolveTokenValue, toTokenRef, tokenRefName } from "../style/token-ref";
|
|
43
51
|
import { pushProjectStylesToCanvas } from "../style/live-preview";
|
|
44
|
-
import {
|
|
52
|
+
import {
|
|
53
|
+
renderCssVarsSurface,
|
|
54
|
+
revealCssVarsGroup,
|
|
55
|
+
revealCssVarsToken,
|
|
56
|
+
} from "../surfaces/settings-css-vars";
|
|
45
57
|
import { friendlyNameToVar } from "../utils/studio-utils";
|
|
46
58
|
|
|
47
59
|
import type { JxStyle, ProjectConfig } from "@jxsuite/schema/types";
|
|
@@ -88,6 +100,8 @@ const ADD_OVERRIDE_ROW = { label: "Add override…", value: "" };
|
|
|
88
100
|
interface Form {
|
|
89
101
|
add: Partial<Record<TokenGroupId, { name: string; value: string }>>;
|
|
90
102
|
error: string;
|
|
103
|
+
/** The token the Outline pointed this editor at ({@link focusCssVar}), or `null`. */
|
|
104
|
+
current: string | null;
|
|
91
105
|
}
|
|
92
106
|
|
|
93
107
|
const forms = new WeakMap<HTMLElement, Form>();
|
|
@@ -96,7 +110,7 @@ const forms = new WeakMap<HTMLElement, Form>();
|
|
|
96
110
|
function form(container: HTMLElement): Form {
|
|
97
111
|
let state = forms.get(container);
|
|
98
112
|
if (!state) {
|
|
99
|
-
state = { add: {}, error: "" };
|
|
113
|
+
state = { add: {}, current: null, error: "" };
|
|
100
114
|
forms.set(container, state);
|
|
101
115
|
}
|
|
102
116
|
return state;
|
|
@@ -110,7 +124,7 @@ function pending(container: HTMLElement, group: TokenGroupId): { name: string; v
|
|
|
110
124
|
|
|
111
125
|
/** The live project configuration, or an empty one before a project is open. */
|
|
112
126
|
function config(): ProjectConfig {
|
|
113
|
-
return
|
|
127
|
+
return projectState?.projectConfig || {};
|
|
114
128
|
}
|
|
115
129
|
|
|
116
130
|
/**
|
|
@@ -121,7 +135,7 @@ function config(): ProjectConfig {
|
|
|
121
135
|
* write, because there is no object here for it to have been written into.
|
|
122
136
|
*/
|
|
123
137
|
function style(): JxStyle {
|
|
124
|
-
return
|
|
138
|
+
return config().style || {};
|
|
125
139
|
}
|
|
126
140
|
|
|
127
141
|
/** Every rendering context this project declares, schemes first. */
|
|
@@ -159,10 +173,18 @@ async function persist(container: HTMLElement): Promise<void> {
|
|
|
159
173
|
// ─── Projection ──────────────────────────────────────────────────────────────
|
|
160
174
|
|
|
161
175
|
/** The colour a well is painted, and the colour the native input under it opens on. */
|
|
162
|
-
|
|
163
|
-
resolved
|
|
164
|
-
|
|
165
|
-
|
|
176
|
+
interface SwatchWell {
|
|
177
|
+
/** The resolved value as a CSS background, or `transparent` when the token resolves to nothing. */
|
|
178
|
+
swatchBg: string;
|
|
179
|
+
/**
|
|
180
|
+
* What the native colour input opens on: the background when it is a hex colour, else the
|
|
181
|
+
* fallback.
|
|
182
|
+
*/
|
|
183
|
+
swatchInput: string;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/** Paint one well from what the token resolves to. */
|
|
187
|
+
function well(resolved: string | number | undefined, fallback: string): SwatchWell {
|
|
166
188
|
const swatchBg = resolved === undefined ? "transparent" : String(resolved);
|
|
167
189
|
return { swatchBg, swatchInput: swatchBg.startsWith("#") ? swatchBg : fallback };
|
|
168
190
|
}
|
|
@@ -188,11 +210,11 @@ function overrideRow(
|
|
|
188
210
|
const current = readTokenOverride(rootStyle, context, token.name);
|
|
189
211
|
return {
|
|
190
212
|
ctx: context.name,
|
|
191
|
-
fieldLabel: `${token.
|
|
213
|
+
fieldLabel: `${token.name} in ${context.label}`,
|
|
192
214
|
id: `${token.name} ${context.name}`,
|
|
193
215
|
kind: context.kind,
|
|
194
216
|
label: context.label,
|
|
195
|
-
swatchLabel: `${token.
|
|
217
|
+
swatchLabel: `${token.name} in ${context.label}`,
|
|
196
218
|
swatchState: isColor ? "swatch" : "none",
|
|
197
219
|
token: token.name,
|
|
198
220
|
value: current === undefined ? "" : String(current),
|
|
@@ -208,6 +230,10 @@ function overrideRow(
|
|
|
208
230
|
* in dark mode" is a question a palette is always answering. A token with no value is offered no
|
|
209
231
|
* picker: writing an empty override is how one is CLEARED, so the affordance would be inert.
|
|
210
232
|
*
|
|
233
|
+
* A row is NAMED by its custom property, `--color-accent`, never by a friendly rewording of it: the
|
|
234
|
+
* Outline beside the view lists the same `--name`, a `var()` reference spells it, and it is what
|
|
235
|
+
* CSS reads. The same goes for a reference chip, which names the property the value follows.
|
|
236
|
+
*
|
|
211
237
|
* @param {ProjectToken} token
|
|
212
238
|
* @param {TokenGroup} group
|
|
213
239
|
* @param {JxStyle} rootStyle
|
|
@@ -219,6 +245,7 @@ function tokenRow(
|
|
|
219
245
|
group: TokenGroup,
|
|
220
246
|
rootStyle: JxStyle,
|
|
221
247
|
declared: TokenContext[],
|
|
248
|
+
current: string | null,
|
|
222
249
|
): TokenRowView {
|
|
223
250
|
const isColor = group.id === "color";
|
|
224
251
|
const value = String(token.value);
|
|
@@ -231,25 +258,26 @@ function tokenRow(
|
|
|
231
258
|
);
|
|
232
259
|
const addable = value === "" ? [] : addableContexts(rootStyle, declared, token.name, shown);
|
|
233
260
|
return {
|
|
234
|
-
addLabel: `Add an override for ${token.
|
|
261
|
+
addLabel: `Add an override for ${token.name}`,
|
|
235
262
|
addOptions: [ADD_OVERRIDE_ROW, ...addable.map((c) => ({ label: c.label, value: c.name }))],
|
|
236
263
|
addPick: "",
|
|
237
264
|
addState: addable.length === 0 ? "none" : "shown",
|
|
238
|
-
chipLabel: refName
|
|
265
|
+
chipLabel: refName ?? "",
|
|
239
266
|
chipState: refName === null ? "none" : isColor && resolved !== undefined ? "swatch" : "plain",
|
|
240
267
|
chipSwatch: resolved === undefined ? "" : String(resolved),
|
|
241
268
|
chipTitle:
|
|
242
269
|
refName === null
|
|
243
270
|
? ""
|
|
244
271
|
: `${toTokenRef(refName)} → ${resolved === undefined ? "unresolved" : String(resolved)}`,
|
|
245
|
-
|
|
272
|
+
current: token.name === current,
|
|
273
|
+
label: token.name,
|
|
246
274
|
name: token.name,
|
|
247
275
|
overrides: shown.map((context) => overrideRow(token, context, isColor, rootStyle)),
|
|
248
276
|
overrideState: shown.length === 0 && addable.length === 0 ? "none" : "shown",
|
|
249
277
|
previewFont: group.id === "font" ? value : "",
|
|
250
278
|
previewState: group.id === "font" ? "font" : "none",
|
|
251
|
-
removeLabel: `Delete ${token.
|
|
252
|
-
swatchLabel: `${token.
|
|
279
|
+
removeLabel: `Delete ${token.name}`,
|
|
280
|
+
swatchLabel: `${token.name} color`,
|
|
253
281
|
swatchState: isColor ? "swatch" : "none",
|
|
254
282
|
value,
|
|
255
283
|
...well(isColor ? resolved : undefined, COLOR_INPUT_FALLBACK),
|
|
@@ -288,7 +316,9 @@ function view(container: HTMLElement): CssVarsView {
|
|
|
288
316
|
nameLabel: `New ${group.title} name`,
|
|
289
317
|
noticeState: group.id === "color" && !hasScheme ? "shown" : "none",
|
|
290
318
|
title: group.title,
|
|
291
|
-
tokens: tokens.map((token) =>
|
|
319
|
+
tokens: tokens.map((token) =>
|
|
320
|
+
tokenRow(token, group, rootStyle, declared, form(container).current),
|
|
321
|
+
),
|
|
292
322
|
valueHint: ADD_ROW_HINTS[group.id].value,
|
|
293
323
|
valueLabel: `New ${group.title} value`,
|
|
294
324
|
});
|
|
@@ -344,13 +374,26 @@ function addOverride(container: HTMLElement, token: string, ctx: string): void {
|
|
|
344
374
|
return;
|
|
345
375
|
}
|
|
346
376
|
const base = rootStyle[token];
|
|
347
|
-
if (
|
|
377
|
+
if (!isString(base) && !isNumber(base)) {
|
|
348
378
|
return;
|
|
349
379
|
}
|
|
350
380
|
writeTokenOverride(rootStyle, context, token, String(base));
|
|
351
381
|
commit(container);
|
|
352
382
|
}
|
|
353
383
|
|
|
384
|
+
/**
|
|
385
|
+
* Open Project Settings on Contexts, where the color schemes and breakpoints this editor overrides
|
|
386
|
+
* per token are defined.
|
|
387
|
+
*
|
|
388
|
+
* Through the command rather than by writing the registry's section: the editor is hosted outside
|
|
389
|
+
* Settings (the Styles workspace's Variables view), so selecting a section of a dialog that is not
|
|
390
|
+
* open would change nothing the reader can see. A refusal is filed under "Styles", the workspace
|
|
391
|
+
* the editor lives in, as the Variables view's own button files it.
|
|
392
|
+
*/
|
|
393
|
+
function openContextsSection(): void {
|
|
394
|
+
void runActiveReported("settings.open", { section: "contexts" }, "Styles");
|
|
395
|
+
}
|
|
396
|
+
|
|
354
397
|
/**
|
|
355
398
|
* What the reader may do, bound to one container.
|
|
356
399
|
*
|
|
@@ -374,17 +417,11 @@ function actions(container: HTMLElement): CssVarsActions {
|
|
|
374
417
|
* point at the place a scheme is DEFINED. It used to define one itself — a button here
|
|
375
418
|
* appended `'--dark': '(prefers-color-scheme: dark)'` to `$media` without ever using the word
|
|
376
419
|
* breakpoint, which made this form the fourth and least discoverable definition site for a
|
|
377
|
-
* map whose other three lived in the wizard, Overview and Properties › Media.
|
|
378
|
-
*
|
|
420
|
+
* map whose other three lived in the wizard, Overview and Properties › Media. It goes there
|
|
421
|
+
* through `settings.open`, so the dialog opens on Contexts however this editor is hosted.
|
|
379
422
|
*/
|
|
380
423
|
manageContexts: () => {
|
|
381
|
-
|
|
382
|
-
.then(({ setSettingsSection }) => setSettingsSection("contexts"))
|
|
383
|
-
.catch((error: unknown) => {
|
|
384
|
-
notify.error(`Could not open Settings › Contexts — ${errorMessage(error)}`, {
|
|
385
|
-
source: "Settings",
|
|
386
|
-
});
|
|
387
|
-
});
|
|
424
|
+
openContextsSection();
|
|
388
425
|
},
|
|
389
426
|
removeToken: (name: string) => {
|
|
390
427
|
delete style()[name];
|
|
@@ -399,10 +436,16 @@ function actions(container: HTMLElement): CssVarsActions {
|
|
|
399
436
|
* predecessor's `ref()` into the DOM could never do.
|
|
400
437
|
*/
|
|
401
438
|
setAddName: (groupId: string, value: string) => {
|
|
402
|
-
|
|
439
|
+
const group = groupOf(groupId);
|
|
440
|
+
if (group) {
|
|
441
|
+
pending(container, group.id).name = value;
|
|
442
|
+
}
|
|
403
443
|
},
|
|
404
444
|
setAddValue: (groupId: string, value: string) => {
|
|
405
|
-
|
|
445
|
+
const group = groupOf(groupId);
|
|
446
|
+
if (group) {
|
|
447
|
+
pending(container, group.id).value = value;
|
|
448
|
+
}
|
|
406
449
|
},
|
|
407
450
|
setOverride: (token: string, ctx: string, value: string) => {
|
|
408
451
|
const context = contexts().find((c) => c.name === ctx);
|
|
@@ -432,3 +475,47 @@ function actions(container: HTMLElement): CssVarsActions {
|
|
|
432
475
|
export function renderCssVarsEditor(container: HTMLElement): void {
|
|
433
476
|
refresh(container);
|
|
434
477
|
}
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* Point the editor at one token: mark its row, scroll it into view and put the keyboard on its
|
|
481
|
+
* value. What a variable row in the Styles workspace's Outline asks for.
|
|
482
|
+
*
|
|
483
|
+
* A name this project does not declare is still recorded (it may be about to be added, or the
|
|
484
|
+
* Outline may be ahead of a write), and simply marks nothing. The flow only marks the row; bringing
|
|
485
|
+
* it on screen is the surface's (`revealCssVarsToken`), because only the adapter knows where the
|
|
486
|
+
* row it draws is.
|
|
487
|
+
*
|
|
488
|
+
* @param {HTMLElement} container
|
|
489
|
+
* @param {string | null} name A custom property, `--accent`, or `null` to mark none
|
|
490
|
+
* @param {{ reveal?: boolean }} [options] `reveal: false` marks the row without moving the keyboard
|
|
491
|
+
* or the scroll position
|
|
492
|
+
*/
|
|
493
|
+
export function focusCssVar(
|
|
494
|
+
container: HTMLElement,
|
|
495
|
+
name: string | null,
|
|
496
|
+
options: { reveal?: boolean } = {},
|
|
497
|
+
): void {
|
|
498
|
+
form(container).current = name;
|
|
499
|
+
refresh(container);
|
|
500
|
+
if (name === null || options.reveal === false) {
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
revealCssVarsToken(container, name);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/**
|
|
507
|
+
* Point the editor at one group: bring its heading on screen, and with `add` put the keyboard on
|
|
508
|
+
* its Add row, the editor's own way of adding a variable. What a group heading and "Add variable"
|
|
509
|
+
* in the Styles workspace's Styles panel ask for.
|
|
510
|
+
*
|
|
511
|
+
* @param {HTMLElement} container
|
|
512
|
+
* @param {TokenGroupId} group
|
|
513
|
+
* @param {{ add?: boolean }} [options] `add: true` focuses the Add row's name field
|
|
514
|
+
*/
|
|
515
|
+
export function focusCssVarGroup(
|
|
516
|
+
container: HTMLElement,
|
|
517
|
+
group: TokenGroupId,
|
|
518
|
+
options: { add?: boolean } = {},
|
|
519
|
+
): void {
|
|
520
|
+
revealCssVarsGroup(container, group, options.add === true);
|
|
521
|
+
}
|
|
@@ -40,10 +40,12 @@
|
|
|
40
40
|
* @docs studio/projects/settings
|
|
41
41
|
*/
|
|
42
42
|
|
|
43
|
+
import { isBoolean, isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
43
44
|
import { projectState } from "../store";
|
|
44
45
|
import { commitProjectConfig } from "../tabs/project-config";
|
|
45
46
|
import { camelToLabel } from "../utils/studio-utils";
|
|
46
47
|
import {
|
|
48
|
+
BLANK_FIELD,
|
|
47
49
|
FIELD_TYPES,
|
|
48
50
|
FORMAT_OPTIONS,
|
|
49
51
|
detectFieldFormat,
|
|
@@ -52,39 +54,30 @@ import {
|
|
|
52
54
|
} from "./schema-field-ui";
|
|
53
55
|
import { mountDefsSurface } from "../surfaces/settings-defs";
|
|
54
56
|
|
|
55
|
-
import type { SchemaProperty } from "./schema-field-ui";
|
|
57
|
+
import type { NestedFieldDraft, SchemaProperty } from "./schema-field-ui";
|
|
56
58
|
import type {
|
|
57
59
|
DefsActions,
|
|
58
|
-
DefsChoice,
|
|
59
60
|
DefsFieldView,
|
|
60
61
|
DefsSurfaceHandle,
|
|
61
62
|
DefsView,
|
|
62
63
|
NestedFieldView,
|
|
63
64
|
} from "../surfaces/settings-defs";
|
|
64
|
-
import type { ContentTypeSchema
|
|
65
|
+
import type { ContentTypeSchema } from "@jxsuite/schema/types";
|
|
66
|
+
import type { SurfaceOption } from "../ui/surface";
|
|
65
67
|
|
|
66
68
|
// ─── The pickers ──────────────────────────────────────────────────────────────
|
|
67
69
|
|
|
68
70
|
/** The field types, as picker rows. One array, made once: an equal write re-runs no binding. */
|
|
69
|
-
const TYPE_ROWS:
|
|
71
|
+
const TYPE_ROWS: SurfaceOption[] = FIELD_TYPES.map((type) => ({ label: type, value: type }));
|
|
70
72
|
|
|
71
73
|
/** The formats, with the empty one named: a blank row says nothing about what choosing it does. */
|
|
72
|
-
const FORMAT_ROWS:
|
|
74
|
+
const FORMAT_ROWS: SurfaceOption[] = FORMAT_OPTIONS.map((format) => ({
|
|
73
75
|
label: format || "(none)",
|
|
74
76
|
value: format,
|
|
75
77
|
}));
|
|
76
78
|
|
|
77
|
-
/** What a new field starts as. */
|
|
78
|
-
const BLANK_FIELD = { format: "", name: "", required: false, type: "string" };
|
|
79
|
-
|
|
80
79
|
// ─── Per-container state ──────────────────────────────────────────────────────
|
|
81
80
|
|
|
82
|
-
/** One object field's unsubmitted nested field. */
|
|
83
|
-
interface Draft {
|
|
84
|
-
name: string;
|
|
85
|
-
type: string;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
81
|
/**
|
|
89
82
|
* What the reader is part-way through, per rendered container.
|
|
90
83
|
*
|
|
@@ -100,7 +93,7 @@ interface DefsUi {
|
|
|
100
93
|
addOpen: boolean;
|
|
101
94
|
add: { format: string; name: string; required: boolean; type: string };
|
|
102
95
|
/** Each object field's nested add row, by the field's name on disk. */
|
|
103
|
-
drafts: Map<string,
|
|
96
|
+
drafts: Map<string, NestedFieldDraft>;
|
|
104
97
|
/**
|
|
105
98
|
* The ONE control whose value has parted from what is on disk, and what it holds.
|
|
106
99
|
*
|
|
@@ -166,9 +159,19 @@ function hush(container: HTMLElement): void {
|
|
|
166
159
|
uiFor(container).echo = null;
|
|
167
160
|
}
|
|
168
161
|
|
|
169
|
-
/**
|
|
170
|
-
|
|
171
|
-
|
|
162
|
+
/**
|
|
163
|
+
* What a text control shows: what it was last told it holds, or what is on disk.
|
|
164
|
+
*
|
|
165
|
+
* The echo's value is a string whenever its id is a {@link nameId}, because only the rename setters
|
|
166
|
+
* echo under one; the check states that rather than assuming it.
|
|
167
|
+
*/
|
|
168
|
+
function shownText(ui: DefsUi, id: string, disk: string): string {
|
|
169
|
+
return ui.echo?.id === id && isString(ui.echo.value) ? ui.echo.value : disk;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** What a checkbox shows: what it was last told it holds, or what is on disk. */
|
|
173
|
+
function shownFlag(ui: DefsUi, id: string, disk: boolean): boolean {
|
|
174
|
+
return ui.echo?.id === id && isBoolean(ui.echo.value) ? ui.echo.value : disk;
|
|
172
175
|
}
|
|
173
176
|
|
|
174
177
|
// ─── Persistence ──────────────────────────────────────────────────────────────
|
|
@@ -200,6 +203,9 @@ function persist(): void {
|
|
|
200
203
|
* outlive a projection, which makes reading through to the store the thing that keeps them honest.
|
|
201
204
|
*/
|
|
202
205
|
function currentDefs(): Record<string, ContentTypeSchema> | undefined {
|
|
206
|
+
/* SAFETY: project `$defs` holds JSON Schema type definitions (project-schema.json, "Global type
|
|
207
|
+
definitions") and this editor is their writer; ContentTypeSchema is that schema object's view,
|
|
208
|
+
every member optional, and each read below falls back (`?? {}`, `?? []`) when one is absent. */
|
|
203
209
|
return projectState?.projectConfig?.$defs as Record<string, ContentTypeSchema> | undefined;
|
|
204
210
|
}
|
|
205
211
|
|
|
@@ -213,19 +219,16 @@ function selectedDef(ui: DefsUi): ContentTypeSchema | undefined {
|
|
|
213
219
|
* resolves through `#/$context/content`, read here without a schema-form context to go through.
|
|
214
220
|
*/
|
|
215
221
|
function contentTypeNames(): string[] {
|
|
216
|
-
const content =
|
|
217
|
-
|
|
218
|
-
return content && typeof content === "object" && !Array.isArray(content)
|
|
219
|
-
? Object.keys(content)
|
|
220
|
-
: [];
|
|
222
|
+
const content = projectState?.projectConfig?.content;
|
|
223
|
+
return isJsonObject(content) ? Object.keys(content) : [];
|
|
221
224
|
}
|
|
222
225
|
|
|
223
226
|
/** The last target list, so an unchanged one is the same array and re-runs no binding. */
|
|
224
|
-
let targetRows:
|
|
227
|
+
let targetRows: SurfaceOption[] = [];
|
|
225
228
|
let targetNames = " ";
|
|
226
229
|
|
|
227
230
|
/** The reference targets, as picker rows. */
|
|
228
|
-
function targets():
|
|
231
|
+
function targets(): SurfaceOption[] {
|
|
229
232
|
const names = contentTypeNames();
|
|
230
233
|
const id = names.join(" ");
|
|
231
234
|
if (id !== targetNames) {
|
|
@@ -256,9 +259,9 @@ function nestedView(
|
|
|
256
259
|
format: detectFieldFormat(schema),
|
|
257
260
|
hasFormat: takesFormat(type),
|
|
258
261
|
key,
|
|
259
|
-
name:
|
|
262
|
+
name: shownText(ui, nameId(id), key),
|
|
260
263
|
parent,
|
|
261
|
-
required:
|
|
264
|
+
required: shownFlag(ui, requiredId(id), required),
|
|
262
265
|
type,
|
|
263
266
|
};
|
|
264
267
|
}
|
|
@@ -290,9 +293,9 @@ function fieldView(
|
|
|
290
293
|
hasFormat: takesFormat(type),
|
|
291
294
|
key,
|
|
292
295
|
label: camelToLabel(key),
|
|
293
|
-
name:
|
|
296
|
+
name: shownText(ui, nameId(key), key),
|
|
294
297
|
refTarget: schema.$ref ? schema.$ref.replace(/^#\/[^/]+\//, "") : "",
|
|
295
|
-
required:
|
|
298
|
+
required: shownFlag(ui, requiredId(key), required),
|
|
296
299
|
type,
|
|
297
300
|
};
|
|
298
301
|
}
|
|
@@ -312,15 +315,15 @@ function project(container: HTMLElement): DefsView {
|
|
|
312
315
|
addRequired: ui.add.required,
|
|
313
316
|
addState: ui.addOpen && def ? "open" : "closed",
|
|
314
317
|
addType: ui.add.type,
|
|
318
|
+
defs: Object.keys(defs).map((name) => ({ name, selected: name === ui.selected })),
|
|
315
319
|
editorState: def ? "editing" : "empty",
|
|
316
320
|
fields: Object.entries(properties).map(([key, schema]) =>
|
|
317
|
-
fieldView(ui, key, schema
|
|
321
|
+
fieldView(ui, key, schema, required.includes(key), rows.length > 0),
|
|
318
322
|
),
|
|
319
323
|
formatOptions: FORMAT_ROWS,
|
|
320
324
|
newName: ui.newName,
|
|
321
325
|
newState: ui.newOpen ? "open" : "closed",
|
|
322
326
|
selected: def && ui.selected !== null ? ui.selected : "",
|
|
323
|
-
shapes: Object.keys(defs).map((name) => ({ name, selected: name === ui.selected })),
|
|
324
327
|
targets: rows,
|
|
325
328
|
typeOptions: TYPE_ROWS,
|
|
326
329
|
};
|
|
@@ -338,10 +341,10 @@ function actionsFor(container: HTMLElement): DefsActions {
|
|
|
338
341
|
|
|
339
342
|
/** The parent object a nested edit is about, or `undefined` when it has gone underneath. */
|
|
340
343
|
const parentOf = (parent: string): SchemaProperty | undefined =>
|
|
341
|
-
selectedDef(ui)?.properties?.[parent]
|
|
344
|
+
selectedDef(ui)?.properties?.[parent];
|
|
342
345
|
|
|
343
346
|
/** One object field's add-row draft, made on first use. */
|
|
344
|
-
const draftOf = (parent: string):
|
|
347
|
+
const draftOf = (parent: string): NestedFieldDraft => {
|
|
345
348
|
let draft = ui.drafts.get(parent);
|
|
346
349
|
if (!draft) {
|
|
347
350
|
draft = { name: "", type: "string" };
|
|
@@ -513,7 +516,7 @@ function actionsFor(container: HTMLElement): DefsActions {
|
|
|
513
516
|
}
|
|
514
517
|
done();
|
|
515
518
|
},
|
|
516
|
-
|
|
519
|
+
removeSelected() {
|
|
517
520
|
const defs = currentDefs();
|
|
518
521
|
if (ui.selected === null || !defs?.[ui.selected]) {
|
|
519
522
|
return;
|
|
@@ -613,7 +616,7 @@ function actionsFor(container: HTMLElement): DefsActions {
|
|
|
613
616
|
}
|
|
614
617
|
/* The pointer form is `#/content/<type>` — the same one `ui/form-controls.ts` writes, so a
|
|
615
618
|
reference authored here and one authored in the content-types builder are the same value. */
|
|
616
|
-
def.properties[key] = { $ref: `#/content/${value}` }
|
|
619
|
+
def.properties[key] = { $ref: `#/content/${value}` };
|
|
617
620
|
done();
|
|
618
621
|
},
|
|
619
622
|
setType(key, value) {
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The **Show developer panels** preference (`specs/studio.md` §5.1, §15).
|
|
3
|
+
*
|
|
4
|
+
* Off by default. A site author works in pages, templates, components and media, and the Site panel
|
|
5
|
+
* lists those by what they are; the Files tree and the Packages list are where a developer looks,
|
|
6
|
+
* so they are off the Design rail until the author asks for them. With the switch off both panels
|
|
7
|
+
* are still reachable by `view.setActivity` and the palette: the switch hides two rail buttons, not
|
|
8
|
+
* two capabilities.
|
|
9
|
+
*
|
|
10
|
+
* The value roams like the theme does (`SETTINGS.developerPanels`, scope `user`), and it is read
|
|
11
|
+
* through a REACTIVE mirror rather than straight from the kernel: the rail derives its groups
|
|
12
|
+
* inside an effect, and a kernel read is not tracked, so a flip in Preferences (or in another
|
|
13
|
+
* window) would otherwise leave the rail drawing the old answer until something unrelated repainted
|
|
14
|
+
* it.
|
|
15
|
+
*
|
|
16
|
+
* @docs studio/interface
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { reactive } from "../reactivity";
|
|
20
|
+
import { SETTINGS } from "../services/settings/definitions";
|
|
21
|
+
import { onSettingsChanged, readStoredSetting, setSetting } from "../services/settings/kernel";
|
|
22
|
+
|
|
23
|
+
/** The stored spelling of "on". Anything else, including unset, is off. */
|
|
24
|
+
const ON = "true";
|
|
25
|
+
|
|
26
|
+
const _state = reactive({ on: readStoredSetting(SETTINGS.developerPanels) === ON });
|
|
27
|
+
|
|
28
|
+
onSettingsChanged((keys) => {
|
|
29
|
+
if (keys.includes(SETTINGS.developerPanels.key)) {
|
|
30
|
+
_state.on = readStoredSetting(SETTINGS.developerPanels) === ON;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
/** Whether the developer panels (Files, Packages) are on the rail. Tracked when read in an effect. */
|
|
35
|
+
export function developerPanelsShown(): boolean {
|
|
36
|
+
return _state.on;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Put the developer panels on the rail, or take them off. Persisted and roaming. */
|
|
40
|
+
export function setDeveloperPanelsShown(show: boolean): void {
|
|
41
|
+
_state.on = show;
|
|
42
|
+
setSetting(SETTINGS.developerPanels, show ? ON : "");
|
|
43
|
+
}
|
|
@@ -42,7 +42,7 @@ export interface ExtensionRow {
|
|
|
42
42
|
|
|
43
43
|
/** The live project configuration, or an empty one before a project is open. */
|
|
44
44
|
export function projectConfig(): ProjectConfig {
|
|
45
|
-
return
|
|
45
|
+
return projectState?.projectConfig ?? {};
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
/** The specifiers `project.json` currently enables. */
|
|
@@ -71,7 +71,7 @@ export function buildRows(packages: PackageInfo[] | null = null): ExtensionRow[]
|
|
|
71
71
|
const here = entry.installed ?? installed.has(entry.name);
|
|
72
72
|
const bundled = entry.bundled ?? false;
|
|
73
73
|
const info = resolved.get(entry.name);
|
|
74
|
-
|
|
74
|
+
const row: ExtensionRow = {
|
|
75
75
|
broken: enabled.has(specifier) && !here && !bundled,
|
|
76
76
|
bundled,
|
|
77
77
|
enabled: enabled.has(specifier),
|
|
@@ -83,9 +83,14 @@ export function buildRows(packages: PackageInfo[] | null = null): ExtensionRow[]
|
|
|
83
83
|
: entry.sections.map((s) => s.key),
|
|
84
84
|
specifier,
|
|
85
85
|
title: entry.title ?? entry.name,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
};
|
|
87
|
+
if (entry.description !== undefined) {
|
|
88
|
+
row.description = entry.description;
|
|
89
|
+
}
|
|
90
|
+
if (entry.problem !== undefined) {
|
|
91
|
+
row.unavailable = entry.problem;
|
|
92
|
+
}
|
|
93
|
+
rows.push(row);
|
|
89
94
|
}
|
|
90
95
|
|
|
91
96
|
// Anything project.json names that the backend did not describe. It can still be turned OFF,
|
|
@@ -95,7 +100,7 @@ export function buildRows(packages: PackageInfo[] | null = null): ExtensionRow[]
|
|
|
95
100
|
continue;
|
|
96
101
|
}
|
|
97
102
|
const info = resolved.get(specifier);
|
|
98
|
-
|
|
103
|
+
const row: ExtensionRow = {
|
|
99
104
|
broken: !installed.has(specifier) && info === undefined,
|
|
100
105
|
bundled: false,
|
|
101
106
|
enabled: true,
|
|
@@ -105,8 +110,11 @@ export function buildRows(packages: PackageInfo[] | null = null): ExtensionRow[]
|
|
|
105
110
|
sections: info ? info.contributions.map((c) => c.project.key) : [],
|
|
106
111
|
specifier,
|
|
107
112
|
title: info?.title ?? specifier,
|
|
108
|
-
|
|
109
|
-
|
|
113
|
+
};
|
|
114
|
+
if (info?.description !== undefined) {
|
|
115
|
+
row.description = info.description;
|
|
116
|
+
}
|
|
117
|
+
rows.push(row);
|
|
110
118
|
}
|
|
111
119
|
|
|
112
120
|
return rows;
|