@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
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The Styles panel — the Styles workspace's Navigator panel (`specs/studio.md` §7.1).
|
|
4
|
+
*
|
|
5
|
+
* The Styles workspace edits the project's styles in `project.json`, and this panel is the map of
|
|
6
|
+
* them, in the order a visit usually needs it:
|
|
7
|
+
*
|
|
8
|
+
* - **Variables.** Every CSS custom property in the root style block, by its real name, grouped as
|
|
9
|
+
* the Variables view groups them (`style/project-styles.ts` `groupTokens`: Colors, Fonts, Sizes &
|
|
10
|
+
* Spacing, and Other only when something is in it), each group with its count and each colour
|
|
11
|
+
* with a swatch of what it resolves to. A group heading or a property switches the pane to the
|
|
12
|
+
* Variables view and brings it on screen there (`style/variables-focus.ts`); **Add variable**
|
|
13
|
+
* focuses the view's own add row, so a variable is added the one way the editor adds one.
|
|
14
|
+
* - **Elements.** The element defaults, by tag name: the specimen catalogue's tags
|
|
15
|
+
* (`data/stylebook-meta.json`) and the project's components, a dot on each tag project.json
|
|
16
|
+
* already styles. A row switches the pane to the Elements view and selects the tag there
|
|
17
|
+
* (`selectStylebookTag`), with the Inspector open on Element › Style.
|
|
18
|
+
* - **Color schemes.** The schemes `$media` declares (`listTokenContexts`), and **Manage color
|
|
19
|
+
* schemes…**, which opens Project Settings › Contexts, where they are defined.
|
|
20
|
+
*
|
|
21
|
+
* It replaces the Outline as the Styles workspace's Navigator. The Outline still lists the element
|
|
22
|
+
* catalogue beside a document's Elements view (`panels/stylebook-layers-panel.ts`), which is how a
|
|
23
|
+
* page or a component styles its own element defaults in Design; the variables list it drew beside
|
|
24
|
+
* the Variables view moved here, beside the variables' groups, counts and swatches.
|
|
25
|
+
*
|
|
26
|
+
* Nothing here writes a style. Every edit happens in the view the row leads to, under that view's
|
|
27
|
+
* own save rule (`style/variables-view.ts` `VARIABLES_SAVING`).
|
|
28
|
+
*
|
|
29
|
+
* @docs studio/design/tokens
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
import { nothing } from "lit-html";
|
|
33
|
+
import { effect, effectScope } from "../reactivity";
|
|
34
|
+
import { projectState } from "../store";
|
|
35
|
+
import { setDockCollapsed, shell } from "../shell";
|
|
36
|
+
import { workspace } from "../workspace/workspace";
|
|
37
|
+
import { PROJECT_CONFIG_PATH } from "../tabs/tab";
|
|
38
|
+
import { componentRegistry } from "../files/components";
|
|
39
|
+
import { runActiveReported } from "../commands/run-reported";
|
|
40
|
+
import { showSettingsDocument } from "../settings/settings-document";
|
|
41
|
+
import { groupIdOfToken, groupTokens, listTokenContexts } from "../style/project-styles";
|
|
42
|
+
import { resolveTokenValue } from "../style/token-ref";
|
|
43
|
+
import { requestVariablesFocus } from "../style/variables-focus";
|
|
44
|
+
import { catalogueRows, hasTagStyle } from "./stylebook-doc";
|
|
45
|
+
import { selectStylebookTag, stylebookMeta } from "./stylebook-panel";
|
|
46
|
+
import { INDENT_BASE, INDENT_STEP } from "./stylebook-layers-panel";
|
|
47
|
+
import { mountStylesPanelSurface } from "../surfaces/styles-panel";
|
|
48
|
+
import { registerPanel } from "./panel-registry";
|
|
49
|
+
import { isNonNullObject, isString } from "@jxsuite/schema/guards";
|
|
50
|
+
import type { EffectScope } from "@vue/reactivity";
|
|
51
|
+
import type { JxStyle } from "@jxsuite/schema/types";
|
|
52
|
+
import type { StylebookEntry } from "./stylebook-panel";
|
|
53
|
+
import type { TokenGroupId } from "../style/project-styles";
|
|
54
|
+
import type {
|
|
55
|
+
StylesElementGroup,
|
|
56
|
+
StylesElementRow,
|
|
57
|
+
StylesPanelActions,
|
|
58
|
+
StylesPanelSurfaceHandle,
|
|
59
|
+
StylesPanelValues,
|
|
60
|
+
StylesSchemeRow,
|
|
61
|
+
StylesVariableGroup,
|
|
62
|
+
} from "../surfaces/styles-panel";
|
|
63
|
+
|
|
64
|
+
/** The `source` every command run from here reports under. */
|
|
65
|
+
const SOURCE = "Styles";
|
|
66
|
+
|
|
67
|
+
/** The catalogue the Elements section lists: the specimen sections. */
|
|
68
|
+
export interface StylesCatalogue {
|
|
69
|
+
$sections: { label: string; elements: StylebookEntry[] }[];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** What the panel is projected from. Injected so a test can hand in its own catalogue. */
|
|
73
|
+
export interface StylesPanelInput {
|
|
74
|
+
/** `project.json` as the panel reads it, or `null` with no project open. */
|
|
75
|
+
config: { style?: JxStyle; $media?: Record<string, string> } | null;
|
|
76
|
+
catalogue: StylesCatalogue;
|
|
77
|
+
/** The project's components, by tag name. */
|
|
78
|
+
components: readonly { tagName: string }[];
|
|
79
|
+
/** The tag the Elements view has selected (`shell.stylebook.selection`). */
|
|
80
|
+
selection: string | null;
|
|
81
|
+
/** The custom property the Variables view is pointed at (`shell.stylebook.variable`). */
|
|
82
|
+
variable: string | null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* `project.json` as the panel reads it: the open tab's document when the tab is open (so an edit
|
|
87
|
+
* that has not been saved yet is what the panel lists), else the configuration the project was
|
|
88
|
+
* opened with.
|
|
89
|
+
*/
|
|
90
|
+
export function stylesConfig(): StylesPanelInput["config"] {
|
|
91
|
+
const tab = workspace.tabs.get(PROJECT_CONFIG_PATH);
|
|
92
|
+
return (tab ? tab.doc.document : projectState?.projectConfig) ?? null;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** The input the live panel is drawn from. */
|
|
96
|
+
function liveInput(): StylesPanelInput {
|
|
97
|
+
return {
|
|
98
|
+
catalogue: stylebookMeta,
|
|
99
|
+
components: componentRegistry,
|
|
100
|
+
config: projectState ? stylesConfig() : null,
|
|
101
|
+
selection: shell.stylebook.selection,
|
|
102
|
+
variable: shell.stylebook.variable,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** "1 variable", "6 variables". */
|
|
107
|
+
function counted(count: number, noun: string): string {
|
|
108
|
+
return `${count} ${noun}${count === 1 ? "" : "s"}`;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** The variable groups, in the Variables view's order, the empty Other left out as it is there. */
|
|
112
|
+
function variableGroups(style: JxStyle, current: string | null): StylesVariableGroup[] {
|
|
113
|
+
return groupTokens(style)
|
|
114
|
+
.filter(({ group, tokens }) => group.id !== "other" || tokens.length > 0)
|
|
115
|
+
.map(({ group, tokens }) => ({
|
|
116
|
+
count: String(tokens.length),
|
|
117
|
+
countLabel: counted(tokens.length, "variable"),
|
|
118
|
+
id: group.id,
|
|
119
|
+
title: group.title,
|
|
120
|
+
variables: tokens.map((token) => {
|
|
121
|
+
const resolved = group.id === "color" ? resolveTokenValue(style, token.value) : undefined;
|
|
122
|
+
return {
|
|
123
|
+
name: token.name,
|
|
124
|
+
selected: token.name === current,
|
|
125
|
+
swatch: resolved === undefined ? "" : String(resolved),
|
|
126
|
+
swatchState: group.id === "color" ? ("swatch" as const) : ("none" as const),
|
|
127
|
+
value: String(token.value),
|
|
128
|
+
};
|
|
129
|
+
}),
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* The Elements section: one group per catalogue section, then the project's components. The rows
|
|
135
|
+
* are the stylebook's own walk (`stylebook-doc.ts` `catalogueRows`, which the Outline's catalogue
|
|
136
|
+
* draws from too); the dot reads the nested tag paths Stylebook edits write.
|
|
137
|
+
*/
|
|
138
|
+
function elementGroups(input: StylesPanelInput, style: JxStyle): StylesElementGroup[] {
|
|
139
|
+
const groups: StylesElementGroup[] = input.catalogue.$sections.map((section) => ({
|
|
140
|
+
key: section.label,
|
|
141
|
+
label: section.label,
|
|
142
|
+
rows: catalogueRows(section.elements, input.selection).map((row): StylesElementRow => ({
|
|
143
|
+
customized: hasTagStyle(style, row.path),
|
|
144
|
+
indent: `${INDENT_BASE + row.depth * INDENT_STEP}px`,
|
|
145
|
+
key: row.path,
|
|
146
|
+
selected: row.selected,
|
|
147
|
+
tag: row.tag,
|
|
148
|
+
})),
|
|
149
|
+
}));
|
|
150
|
+
if (input.components.length > 0) {
|
|
151
|
+
groups.push({
|
|
152
|
+
key: "components",
|
|
153
|
+
label: "Components",
|
|
154
|
+
rows: input.components.map((component) => ({
|
|
155
|
+
customized: hasTagStyle(style, component.tagName),
|
|
156
|
+
indent: `${INDENT_BASE}px`,
|
|
157
|
+
key: component.tagName,
|
|
158
|
+
selected: component.tagName === input.selection,
|
|
159
|
+
tag: component.tagName,
|
|
160
|
+
})),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return groups;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** The color schemes `$media` declares, by name and by the query that selects each. */
|
|
167
|
+
function schemeRows(media: Record<string, string> | undefined): StylesSchemeRow[] {
|
|
168
|
+
return listTokenContexts(media)
|
|
169
|
+
.filter((context) => context.kind === "scheme")
|
|
170
|
+
.map((context) => {
|
|
171
|
+
const query = media?.[context.name];
|
|
172
|
+
return { key: context.name, label: context.label, query: isString(query) ? query : "" };
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* What the panel shows. Pure over its input: the configuration, the catalogue, the components and
|
|
178
|
+
* the two current rows.
|
|
179
|
+
*
|
|
180
|
+
* @param {StylesPanelInput} [input] Defaults to the live project.
|
|
181
|
+
* @returns {StylesPanelValues}
|
|
182
|
+
*/
|
|
183
|
+
export function stylesPanelValues(input: StylesPanelInput = liveInput()): StylesPanelValues {
|
|
184
|
+
if (!input.config) {
|
|
185
|
+
return {
|
|
186
|
+
body: "none",
|
|
187
|
+
customizedCount: "0",
|
|
188
|
+
customizedLabel: "",
|
|
189
|
+
elementGroups: [],
|
|
190
|
+
groups: [],
|
|
191
|
+
schemes: [],
|
|
192
|
+
schemesState: "empty",
|
|
193
|
+
variableCount: "0",
|
|
194
|
+
variablesState: "empty",
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
const style: JxStyle = isNonNullObject(input.config.style) ? input.config.style : {};
|
|
198
|
+
const groups = variableGroups(style, input.variable);
|
|
199
|
+
const variableCount = groups.reduce((sum, group) => sum + group.variables.length, 0);
|
|
200
|
+
const elements = elementGroups(input, style);
|
|
201
|
+
const customized = elements.reduce(
|
|
202
|
+
(sum, group) => sum + group.rows.filter((row) => row.customized).length,
|
|
203
|
+
0,
|
|
204
|
+
);
|
|
205
|
+
const schemes = schemeRows(input.config.$media);
|
|
206
|
+
return {
|
|
207
|
+
body: "styles",
|
|
208
|
+
customizedCount: `${customized} styled`,
|
|
209
|
+
customizedLabel: `${counted(customized, "tag")} styled`,
|
|
210
|
+
elementGroups: elements,
|
|
211
|
+
groups,
|
|
212
|
+
schemes,
|
|
213
|
+
schemesState: schemes.length > 0 ? "listed" : "empty",
|
|
214
|
+
variableCount: String(variableCount),
|
|
215
|
+
variablesState: variableCount > 0 ? "listed" : "empty",
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// ─── Actions ─────────────────────────────────────────────────────────────────
|
|
220
|
+
|
|
221
|
+
/** Whether a string is a token group id. */
|
|
222
|
+
function isTokenGroupId(value: string): value is TokenGroupId {
|
|
223
|
+
return value === "color" || value === "font" || value === "size" || value === "other";
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/** The group "Add variable" adds to: the current property's, or Colors. */
|
|
227
|
+
export function addTargetGroup(current: string | null = shell.stylebook.variable): TokenGroupId {
|
|
228
|
+
return current === null ? "color" : groupIdOfToken(current);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* What the panel's controls do. Each one shows the view it leads to first, then asks that view to
|
|
233
|
+
* bring the row on screen, so a request made from Elements is served when Variables mounts.
|
|
234
|
+
*/
|
|
235
|
+
export const STYLES_PANEL_ACTIONS: StylesPanelActions = {
|
|
236
|
+
addVariable: () => {
|
|
237
|
+
showSettingsDocument("tokens");
|
|
238
|
+
requestVariablesFocus({ add: true, group: addTargetGroup(), kind: "group" });
|
|
239
|
+
},
|
|
240
|
+
manageSchemes: () => {
|
|
241
|
+
void runActiveReported("settings.open", { section: "contexts" }, SOURCE);
|
|
242
|
+
},
|
|
243
|
+
selectElement: (path) => {
|
|
244
|
+
showSettingsDocument("stylebook");
|
|
245
|
+
selectStylebookTag(path, undefined, { panCanvas: true });
|
|
246
|
+
// `selectStylebookTag` puts the Inspector on Element › Style; the Inspector has to be open.
|
|
247
|
+
setDockCollapsed("right", false);
|
|
248
|
+
},
|
|
249
|
+
selectVariable: (name) => {
|
|
250
|
+
showSettingsDocument("tokens");
|
|
251
|
+
requestVariablesFocus({ kind: "variable", name });
|
|
252
|
+
},
|
|
253
|
+
showGroup: (group) => {
|
|
254
|
+
if (!isTokenGroupId(group)) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
showSettingsDocument("tokens");
|
|
258
|
+
requestVariablesFocus({ add: false, group, kind: "group" });
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
// ─── Mounting ────────────────────────────────────────────────────────────────
|
|
263
|
+
|
|
264
|
+
interface StandingPanel {
|
|
265
|
+
host: HTMLElement;
|
|
266
|
+
handle: StylesPanelSurfaceHandle;
|
|
267
|
+
scope: EffectScope;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
let _standing: StandingPanel | null = null;
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Mount the surface into `host`, or bring the one already there up to date.
|
|
274
|
+
*
|
|
275
|
+
* The projection runs in an effect of its own, because the Navigator repaints on a document's
|
|
276
|
+
* IDENTITY and a variable's value is a write deep inside it: an edit in the Variables view, an undo
|
|
277
|
+
* or a Code edit re-projects the panel through what the effect read.
|
|
278
|
+
*/
|
|
279
|
+
function mountInto(host: HTMLElement): void {
|
|
280
|
+
if (_standing && (_standing.host !== host || !_standing.handle.connected())) {
|
|
281
|
+
resetStylesPanel();
|
|
282
|
+
}
|
|
283
|
+
if (_standing) {
|
|
284
|
+
// A repaint of the Navigator: the component registry is not reactive, so it is read here.
|
|
285
|
+
_standing.handle.update(stylesPanelValues());
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
const handle = mountStylesPanelSurface(host, stylesPanelValues(), STYLES_PANEL_ACTIONS);
|
|
289
|
+
const scope = effectScope();
|
|
290
|
+
scope.run(() => {
|
|
291
|
+
effect(() => {
|
|
292
|
+
handle.update(stylesPanelValues());
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
_standing = { handle, host, scope };
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/** The Navigator's content area inside a panel body (`panels/collections-panel.ts` gives why). */
|
|
299
|
+
function contentArea(body: HTMLElement): HTMLElement {
|
|
300
|
+
return body.querySelector<HTMLElement>(".panel-content") ?? body;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Contribute the Styles panel: project level (it lists the project's styles), no rail button
|
|
305
|
+
* (Styles has no rail), the Styles workspace's Navigator.
|
|
306
|
+
*/
|
|
307
|
+
export function registerStylesPanel(): void {
|
|
308
|
+
registerPanel({
|
|
309
|
+
id: "styles",
|
|
310
|
+
title: "Styles",
|
|
311
|
+
level: "project",
|
|
312
|
+
dock: "navigator",
|
|
313
|
+
icon: "paint-brush",
|
|
314
|
+
rail: false,
|
|
315
|
+
render: () => nothing,
|
|
316
|
+
afterRender: (_ctx, host) => {
|
|
317
|
+
mountInto(contentArea(host));
|
|
318
|
+
},
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/** Forget the mounted panel: tests, a project switch, and a host the Navigator replaced. */
|
|
323
|
+
export function resetStylesPanel(): void {
|
|
324
|
+
_standing?.scope.stop();
|
|
325
|
+
_standing?.handle.dispose();
|
|
326
|
+
_standing = null;
|
|
327
|
+
}
|
package/src/panels/tab-drop.ts
CHANGED
|
@@ -18,7 +18,10 @@
|
|
|
18
18
|
|
|
19
19
|
import { extractClosestEdge } from "@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge";
|
|
20
20
|
import { getReorderDestinationIndex } from "@atlaskit/pragmatic-drag-and-drop-hitbox/util/get-reorder-destination-index";
|
|
21
|
-
import type { Edge } from "@atlaskit/pragmatic-drag-and-drop-hitbox/
|
|
21
|
+
import type { Edge } from "@atlaskit/pragmatic-drag-and-drop-hitbox/types";
|
|
22
|
+
import type { ElementDragPayload } from "@atlaskit/pragmatic-drag-and-drop/adapter/element-adapter";
|
|
23
|
+
import type { DropTargetRecord } from "@atlaskit/pragmatic-drag-and-drop/types";
|
|
24
|
+
import { isJsonObject } from "@jxsuite/schema/guards";
|
|
22
25
|
import {
|
|
23
26
|
activateTab,
|
|
24
27
|
closePane,
|
|
@@ -54,8 +57,13 @@ export interface FileDragData extends Record<string, unknown> {
|
|
|
54
57
|
|
|
55
58
|
export type TabDropSourceData = TabDragData | FileDragData;
|
|
56
59
|
|
|
57
|
-
/**
|
|
58
|
-
|
|
60
|
+
/**
|
|
61
|
+
* A slot in a strip — a chip's edge, or the strip's own empty tail when `tabId` is absent.
|
|
62
|
+
*
|
|
63
|
+
* Target records are keyed by symbols as well as strings (pragmatic-dnd's `DropTargetRecord`), and
|
|
64
|
+
* a chip's carries one: `attachClosestEdge` stores the edge under a symbol key.
|
|
65
|
+
*/
|
|
66
|
+
export interface TabSlotTarget extends Record<string | symbol, unknown> {
|
|
59
67
|
type: "tab-slot";
|
|
60
68
|
paneId: string;
|
|
61
69
|
tabId?: string;
|
|
@@ -63,17 +71,17 @@ export interface TabSlotTarget extends Record<string, unknown> {
|
|
|
63
71
|
index: number;
|
|
64
72
|
}
|
|
65
73
|
|
|
66
|
-
export interface TabSlotRefusedTarget extends Record<string, unknown> {
|
|
74
|
+
export interface TabSlotRefusedTarget extends Record<string | symbol, unknown> {
|
|
67
75
|
type: "tab-slot-refused";
|
|
68
76
|
}
|
|
69
77
|
|
|
70
78
|
/** The right band of the last pane's stage, armed only while the grid is under {@link MAX_PANES}. */
|
|
71
|
-
export interface PaneEdgeTarget extends Record<string, unknown> {
|
|
79
|
+
export interface PaneEdgeTarget extends Record<string | symbol, unknown> {
|
|
72
80
|
type: "pane-edge";
|
|
73
81
|
paneId: string;
|
|
74
82
|
}
|
|
75
83
|
|
|
76
|
-
export interface PaneEdgeRefusedTarget extends Record<string, unknown> {
|
|
84
|
+
export interface PaneEdgeRefusedTarget extends Record<string | symbol, unknown> {
|
|
77
85
|
type: "pane-edge-refused";
|
|
78
86
|
}
|
|
79
87
|
|
|
@@ -93,8 +101,11 @@ export type TabDropTarget =
|
|
|
93
101
|
* anything else this module has no branch for) is refused at the SOURCE and never reaches a target
|
|
94
102
|
* closure at all.
|
|
95
103
|
*/
|
|
96
|
-
export function isTabDropSource(data:
|
|
97
|
-
return
|
|
104
|
+
export function isTabDropSource(data: unknown): data is TabDropSourceData {
|
|
105
|
+
return (
|
|
106
|
+
isJsonObject(data) &&
|
|
107
|
+
(data.type === "tab" || (data.type === "file-tree" && data.entryType === "file"))
|
|
108
|
+
);
|
|
98
109
|
}
|
|
99
110
|
|
|
100
111
|
/**
|
|
@@ -142,7 +153,7 @@ function edgeIndex(target: TabSlotTarget, edge: Edge | null): number {
|
|
|
142
153
|
}
|
|
143
154
|
|
|
144
155
|
async function resolveTabSlotDrop(source: TabDropSourceData, target: TabSlotTarget): Promise<void> {
|
|
145
|
-
const edge = extractClosestEdge(target
|
|
156
|
+
const edge = extractClosestEdge(target);
|
|
146
157
|
if (source.type === "tab") {
|
|
147
158
|
if (source.paneId === target.paneId) {
|
|
148
159
|
const pane = paneById(target.paneId);
|
|
@@ -202,18 +213,23 @@ async function resolvePaneEdgeDrop(
|
|
|
202
213
|
* `undefined` for a drag cancelled off every target — both are legal and both mean nothing landed.
|
|
203
214
|
*/
|
|
204
215
|
export async function resolveTabDrop(
|
|
205
|
-
source:
|
|
206
|
-
target:
|
|
216
|
+
source: Pick<ElementDragPayload, "data">,
|
|
217
|
+
target: Pick<DropTargetRecord, "data"> | undefined,
|
|
207
218
|
): Promise<void> {
|
|
208
219
|
if (!target || !isTabDropSource(source.data)) {
|
|
209
220
|
return;
|
|
210
221
|
}
|
|
211
222
|
const sourceData = source.data;
|
|
212
223
|
if (target.data.type === "tab-slot") {
|
|
224
|
+
/* SAFETY: a `tab-slot` record is only ever produced by `tab-strip.ts`'s two `getData`
|
|
225
|
+
closures (a chip's and a strip tail's), and both write a string `paneId` and a numeric
|
|
226
|
+
`index` beside the type, with `tabId` only on a chip's. */
|
|
213
227
|
await resolveTabSlotDrop(sourceData, target.data as TabSlotTarget);
|
|
214
228
|
return;
|
|
215
229
|
}
|
|
216
230
|
if (target.data.type === "pane-edge") {
|
|
231
|
+
/* SAFETY: a `pane-edge` record is only ever produced by `pane-grid.ts`'s edge-zone `getData`,
|
|
232
|
+
whose `PaneEdgeData` pairs that type with a string `paneId`. */
|
|
217
233
|
await resolvePaneEdgeDrop(sourceData, target.data as PaneEdgeTarget);
|
|
218
234
|
}
|
|
219
235
|
// `tab-slot-refused` / `pane-edge-refused` / anything else: nothing.
|