@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,195 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The Styles panel surface: the Styles workspace's Navigator, as a Jx document over the kit
|
|
4
|
+
* (`specs/studio.md` §7.1).
|
|
5
|
+
*
|
|
6
|
+
* This is the adapter. `panels/styles-panel.ts` keeps every decision (which custom properties the
|
|
7
|
+
* project declares and how they group, what each colour resolves to, which tags the catalogue holds
|
|
8
|
+
* and which of them project.json already styles, which color schemes `$media` declares, and which
|
|
9
|
+
* row is current) and hands this module one projection whose every field is already a string. The
|
|
10
|
+
* document draws three sections and decides nothing.
|
|
11
|
+
*
|
|
12
|
+
* @docs studio/design/tokens
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { reactive } from "../reactivity";
|
|
16
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
17
|
+
import stylesPanelDoc from "./styles-panel.json";
|
|
18
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
19
|
+
|
|
20
|
+
registerSurface("styles-panel", stylesPanelDoc);
|
|
21
|
+
|
|
22
|
+
/** One custom property under its group. */
|
|
23
|
+
export interface StylesVariableRow {
|
|
24
|
+
/** The property, by its real name: `--accent`. Also the row's key. */
|
|
25
|
+
name: string;
|
|
26
|
+
/** What it is declared as, as text. */
|
|
27
|
+
value: string;
|
|
28
|
+
/** `swatch` for a colour, whose chip is drawn; `none` for every other group. */
|
|
29
|
+
swatchState: "swatch" | "none";
|
|
30
|
+
/** The colour the chip is painted, already resolved through any `var()` chain; "" for none. */
|
|
31
|
+
swatch: string;
|
|
32
|
+
/** Whether this is the property the Variables view is pointed at. */
|
|
33
|
+
selected: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** One group of custom properties: Colors, Fonts, Sizes & Spacing, Other. */
|
|
37
|
+
export interface StylesVariableGroup {
|
|
38
|
+
/** The token group id, `color`; the key, and what a heading click shows. */
|
|
39
|
+
id: string;
|
|
40
|
+
title: string;
|
|
41
|
+
/** How many the group holds, as text: "6". */
|
|
42
|
+
count: string;
|
|
43
|
+
/** The count, said in words for a screen reader: "6 variables". */
|
|
44
|
+
countLabel: string;
|
|
45
|
+
variables: StylesVariableRow[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** One element default, by tag name. */
|
|
49
|
+
export interface StylesElementRow {
|
|
50
|
+
/** What a click selects: the compound path (`ul li`), or a component's tag. Also the key. */
|
|
51
|
+
key: string;
|
|
52
|
+
/** The tag name the row shows: `h1`, `li`, `site-card`. */
|
|
53
|
+
tag: string;
|
|
54
|
+
/** How deep the row sits, as a CSS length, read through `--row-indent`. */
|
|
55
|
+
indent: string;
|
|
56
|
+
/** Whether project.json already styles this tag: the dot. */
|
|
57
|
+
customized: boolean;
|
|
58
|
+
/** Whether this is the tag the Elements view has selected. */
|
|
59
|
+
selected: boolean;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** One block of the catalogue: Headings, Lists, Components. */
|
|
63
|
+
export interface StylesElementGroup {
|
|
64
|
+
key: string;
|
|
65
|
+
label: string;
|
|
66
|
+
rows: StylesElementRow[];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** One color scheme the project declares. */
|
|
70
|
+
export interface StylesSchemeRow {
|
|
71
|
+
/** The `$media` entry, `--dark`. */
|
|
72
|
+
key: string;
|
|
73
|
+
/** "Light" or "Dark". */
|
|
74
|
+
label: string;
|
|
75
|
+
/** The media query that selects it: "(prefers-color-scheme: dark)". */
|
|
76
|
+
query: string;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Everything the document draws. */
|
|
80
|
+
export interface StylesPanelValues {
|
|
81
|
+
/** `none` asks for a project; `styles` draws the three sections. */
|
|
82
|
+
body: "none" | "styles";
|
|
83
|
+
/** Every custom property in the root style block, as text. */
|
|
84
|
+
variableCount: string;
|
|
85
|
+
variablesState: "empty" | "listed";
|
|
86
|
+
groups: StylesVariableGroup[];
|
|
87
|
+
elementGroups: StylesElementGroup[];
|
|
88
|
+
/** How many tags project.json styles, as the on-screen count ("3 styled"), and in full words. */
|
|
89
|
+
customizedCount: string;
|
|
90
|
+
customizedLabel: string;
|
|
91
|
+
schemesState: "empty" | "listed";
|
|
92
|
+
schemes: StylesSchemeRow[];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** What a control can ask the panel to do. Every one is a decision the flow owns. */
|
|
96
|
+
export interface StylesPanelActions {
|
|
97
|
+
/** A group heading: the Variables view, at that group. */
|
|
98
|
+
showGroup: (group: string) => void;
|
|
99
|
+
/** A variable row: the Variables view, at that property. */
|
|
100
|
+
selectVariable: (name: string) => void;
|
|
101
|
+
/** **Add variable**: the Variables view's add row. */
|
|
102
|
+
addVariable: () => void;
|
|
103
|
+
/** An element row: the Elements view, with that tag selected. */
|
|
104
|
+
selectElement: (path: string) => void;
|
|
105
|
+
/** **Manage color schemes…**: Project Settings › Contexts. */
|
|
106
|
+
manageSchemes: () => void;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export interface StylesPanelSurfaceHandle {
|
|
110
|
+
readonly ready: Promise<unknown>;
|
|
111
|
+
/** Whether the mounted root is still where it was put. */
|
|
112
|
+
connected: () => boolean;
|
|
113
|
+
update: (values: StylesPanelValues) => void;
|
|
114
|
+
dispose: () => void;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
interface StylesPanelScope extends StylesPanelValues, StylesPanelActions {}
|
|
118
|
+
|
|
119
|
+
/** The scope's shape before the first projection lands on it. */
|
|
120
|
+
export function emptyStylesPanelValues(): StylesPanelValues {
|
|
121
|
+
return {
|
|
122
|
+
body: "none",
|
|
123
|
+
customizedCount: "0",
|
|
124
|
+
customizedLabel: "",
|
|
125
|
+
elementGroups: [],
|
|
126
|
+
groups: [],
|
|
127
|
+
schemes: [],
|
|
128
|
+
schemesState: "empty",
|
|
129
|
+
variableCount: "0",
|
|
130
|
+
variablesState: "empty",
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** Write a projection in, field by field, so an unchanged field is inert. */
|
|
135
|
+
function project(scope: StylesPanelScope, values: StylesPanelValues): void {
|
|
136
|
+
scope.body = values.body;
|
|
137
|
+
scope.variableCount = values.variableCount;
|
|
138
|
+
scope.variablesState = values.variablesState;
|
|
139
|
+
scope.groups = values.groups;
|
|
140
|
+
scope.elementGroups = values.elementGroups;
|
|
141
|
+
scope.customizedCount = values.customizedCount;
|
|
142
|
+
scope.customizedLabel = values.customizedLabel;
|
|
143
|
+
scope.schemesState = values.schemesState;
|
|
144
|
+
scope.schemes = values.schemes;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Mount the Styles panel into `container`, the content box the Navigator painted.
|
|
149
|
+
*
|
|
150
|
+
* @param container Where the document goes.
|
|
151
|
+
* @param values What it shows to begin with.
|
|
152
|
+
* @param actions What its controls do.
|
|
153
|
+
*/
|
|
154
|
+
export function mountStylesPanelSurface(
|
|
155
|
+
container: HTMLElement,
|
|
156
|
+
values: StylesPanelValues,
|
|
157
|
+
actions: StylesPanelActions,
|
|
158
|
+
): StylesPanelSurfaceHandle {
|
|
159
|
+
const scope: StylesPanelScope = reactive<StylesPanelScope>({
|
|
160
|
+
...emptyStylesPanelValues(),
|
|
161
|
+
...actions,
|
|
162
|
+
});
|
|
163
|
+
project(scope, values);
|
|
164
|
+
|
|
165
|
+
let mounted: SurfaceHandle | null = null;
|
|
166
|
+
let disposed = false;
|
|
167
|
+
const ready = mountSurface("styles-panel", scope, container).then((surface) => {
|
|
168
|
+
if (disposed) {
|
|
169
|
+
surface.dispose();
|
|
170
|
+
return surface;
|
|
171
|
+
}
|
|
172
|
+
mounted = surface;
|
|
173
|
+
return surface;
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
return {
|
|
177
|
+
connected: () => {
|
|
178
|
+
if (disposed) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
const root = mounted?.root;
|
|
182
|
+
// A mount still in flight is not yet in the container, and is not a reason to remount.
|
|
183
|
+
return root === undefined ? true : container.contains(root);
|
|
184
|
+
},
|
|
185
|
+
dispose() {
|
|
186
|
+
disposed = true;
|
|
187
|
+
mounted?.dispose();
|
|
188
|
+
mounted = null;
|
|
189
|
+
},
|
|
190
|
+
ready,
|
|
191
|
+
update: (next) => {
|
|
192
|
+
project(scope, next);
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
|
+
"$id": "StudioStylesVariables",
|
|
4
|
+
"$description": "The Styles workspace's Variables view (studio.md §7.1): the project's CSS custom properties, the `--` keys of `project.json`'s root style block, edited in the pane over the same tab as the Elements view and the Code view. It draws the view's frame and nothing it edits: a heading, one sentence saying what these are, one saying when an edit reaches the file (a variable is written as it is changed, which also writes any element style edit still waiting for Save, because both live in the one file), the door to Project Settings › Contexts where colour schemes and breakpoints are declared, and an empty `editor` island the CSS Variables editor (`settings/css-vars-editor.ts`) is mounted into (studio-ui-guidelines.md §9.4). `style/variables-view.ts` decides every word.",
|
|
5
|
+
"tagName": "section",
|
|
6
|
+
"attributes": {
|
|
7
|
+
"part": "variables-view",
|
|
8
|
+
"aria-labelledby": "${state.headingId}",
|
|
9
|
+
"data-jx-region": "${state.region}"
|
|
10
|
+
},
|
|
11
|
+
"style": {
|
|
12
|
+
"$description": "Fills the pane's stage by its own geometry, as the workspace home does (`workspace-home.json`): the stage is `position: relative`, so the view takes the whole of it and scrolls itself without the stage being restyled for it. The column is capped so a value field never stretches across a wide pane.",
|
|
13
|
+
"position": "absolute",
|
|
14
|
+
"inset": "0",
|
|
15
|
+
"overflowY": "auto",
|
|
16
|
+
"boxSizing": "border-box",
|
|
17
|
+
"padding": "var(--jx-space-6)",
|
|
18
|
+
"fontFamily": "var(--jx-font-sans)",
|
|
19
|
+
"color": "var(--fg)",
|
|
20
|
+
"background": "var(--bg-panel)",
|
|
21
|
+
"& [part=\"column\"]": {
|
|
22
|
+
"maxWidth": "760px",
|
|
23
|
+
"margin": "0 auto"
|
|
24
|
+
},
|
|
25
|
+
"& [part=\"head\"]": {
|
|
26
|
+
"display": "flex",
|
|
27
|
+
"flexDirection": "column",
|
|
28
|
+
"gap": "var(--jx-space-2)",
|
|
29
|
+
"marginBottom": "var(--jx-space-5)"
|
|
30
|
+
},
|
|
31
|
+
"& [part=\"title\"]": {
|
|
32
|
+
"margin": "0",
|
|
33
|
+
"fontSize": "var(--jx-text-lg)",
|
|
34
|
+
"fontWeight": "600"
|
|
35
|
+
},
|
|
36
|
+
"& [part=\"lede\"], & [part=\"saving\"]": {
|
|
37
|
+
"margin": "0",
|
|
38
|
+
"maxWidth": "68ch",
|
|
39
|
+
"lineHeight": "1.5",
|
|
40
|
+
"fontSize": "var(--jx-text-md)",
|
|
41
|
+
"color": "var(--fg-dim)"
|
|
42
|
+
},
|
|
43
|
+
"& [part=\"saving\"]": {
|
|
44
|
+
"fontSize": "var(--jx-text-sm)"
|
|
45
|
+
},
|
|
46
|
+
"& [part=\"schemes\"]": {
|
|
47
|
+
"display": "flex",
|
|
48
|
+
"alignItems": "center",
|
|
49
|
+
"flexWrap": "wrap",
|
|
50
|
+
"gap": "var(--jx-space-2)",
|
|
51
|
+
"fontSize": "var(--jx-text-sm)",
|
|
52
|
+
"color": "var(--fg-dim)"
|
|
53
|
+
},
|
|
54
|
+
"& [part=\"schemes-text\"]": {
|
|
55
|
+
"margin": "0"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"children": [
|
|
59
|
+
{
|
|
60
|
+
"tagName": "div",
|
|
61
|
+
"attributes": {
|
|
62
|
+
"part": "column"
|
|
63
|
+
},
|
|
64
|
+
"children": [
|
|
65
|
+
{
|
|
66
|
+
"tagName": "header",
|
|
67
|
+
"attributes": {
|
|
68
|
+
"part": "head"
|
|
69
|
+
},
|
|
70
|
+
"children": [
|
|
71
|
+
{
|
|
72
|
+
"tagName": "h2",
|
|
73
|
+
"attributes": {
|
|
74
|
+
"part": "title",
|
|
75
|
+
"id": "${state.headingId}"
|
|
76
|
+
},
|
|
77
|
+
"textContent": "${state.title}"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"tagName": "p",
|
|
81
|
+
"attributes": {
|
|
82
|
+
"part": "lede"
|
|
83
|
+
},
|
|
84
|
+
"textContent": "${state.lede}"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"tagName": "p",
|
|
88
|
+
"attributes": {
|
|
89
|
+
"part": "saving"
|
|
90
|
+
},
|
|
91
|
+
"textContent": "${state.saving}"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"tagName": "div",
|
|
95
|
+
"attributes": {
|
|
96
|
+
"part": "schemes"
|
|
97
|
+
},
|
|
98
|
+
"children": [
|
|
99
|
+
{
|
|
100
|
+
"tagName": "p",
|
|
101
|
+
"attributes": {
|
|
102
|
+
"part": "schemes-text"
|
|
103
|
+
},
|
|
104
|
+
"textContent": "${state.schemes}"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"tagName": "jx-action-button",
|
|
108
|
+
"attributes": {
|
|
109
|
+
"part": "manage-contexts"
|
|
110
|
+
},
|
|
111
|
+
"$props": {
|
|
112
|
+
"size": "sm",
|
|
113
|
+
"quiet": true
|
|
114
|
+
},
|
|
115
|
+
"onclick": {
|
|
116
|
+
"$prototype": "Function",
|
|
117
|
+
"body": [
|
|
118
|
+
{
|
|
119
|
+
"operator": "call",
|
|
120
|
+
"target": {
|
|
121
|
+
"$ref": "#/state/manageContexts"
|
|
122
|
+
},
|
|
123
|
+
"value": []
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
"description": "Opens Project Settings on Contexts, the one place a colour scheme or a breakpoint is declared (studio.md §17.1)."
|
|
127
|
+
},
|
|
128
|
+
"children": [
|
|
129
|
+
{
|
|
130
|
+
"tagName": "span",
|
|
131
|
+
"textContent": "${state.manageLabel}"
|
|
132
|
+
}
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"tagName": "div",
|
|
141
|
+
"attributes": {
|
|
142
|
+
"part": "editor",
|
|
143
|
+
"role": "none"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The Variables view surface: the frame the Styles workspace draws around the CSS Variables editor,
|
|
4
|
+
* as a Jx document over the kit.
|
|
5
|
+
*
|
|
6
|
+
* This is the adapter. `style/variables-view.ts` keeps the flow (which pane holds the view, what
|
|
7
|
+
* the editor island is handed, when the view follows an edit made elsewhere) and hands this module
|
|
8
|
+
* one projection: the heading, the sentences and the region. The document renders that and decides
|
|
9
|
+
* nothing.
|
|
10
|
+
*
|
|
11
|
+
* **The editor is an ISLAND.** The CSS Variables editor is a surface of its own
|
|
12
|
+
* (`surfaces/settings-css-vars.json`), mounted into a container it is handed, so this document
|
|
13
|
+
* renders an empty `editor` node and announces it through `onNodeCreated`, the one seam for an
|
|
14
|
+
* island (studio-ui-guidelines.md §9.4). Nothing here knows what a token is.
|
|
15
|
+
*
|
|
16
|
+
* **The container is CLEARED, because this is a pane and not a panel**, for the reason
|
|
17
|
+
* `surfaces/media-pane.ts` gives: the canvas stage is handed to whichever mode owns it whole.
|
|
18
|
+
*
|
|
19
|
+
* @docs studio/design/tokens
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
23
|
+
import { reactive } from "../reactivity";
|
|
24
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
25
|
+
import variablesDoc from "./styles-variables.json";
|
|
26
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
27
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
28
|
+
|
|
29
|
+
registerSurface("styles-variables", variablesDoc);
|
|
30
|
+
|
|
31
|
+
/** What the view draws, with every word already decided. */
|
|
32
|
+
export interface VariablesView {
|
|
33
|
+
/** The pane region the view answers to (`pane.primary/variables`). */
|
|
34
|
+
region: string;
|
|
35
|
+
title: string;
|
|
36
|
+
/** What these are: the project's CSS custom properties. */
|
|
37
|
+
lede: string;
|
|
38
|
+
/** When an edit reaches the file. */
|
|
39
|
+
saving: string;
|
|
40
|
+
/** Where colour schemes and breakpoints are declared. */
|
|
41
|
+
schemes: string;
|
|
42
|
+
/** The button that goes there. */
|
|
43
|
+
manageLabel: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** What the view's own control does. */
|
|
47
|
+
export interface VariablesActions {
|
|
48
|
+
/** Open Project Settings on Contexts. */
|
|
49
|
+
manageContexts: () => void;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Where the CSS Variables editor lands. */
|
|
53
|
+
export interface VariablesIslands {
|
|
54
|
+
/** Called with the `editor` node every time the document creates one. */
|
|
55
|
+
editorSlot: (host: HTMLElement) => void;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* A mounted view: whether it still stands, and a way to take it down. There is no update: every
|
|
60
|
+
* word the view draws is a constant, and the editor island redraws itself.
|
|
61
|
+
*/
|
|
62
|
+
export interface VariablesSurfaceHandle {
|
|
63
|
+
/** Whether the mount is still in the host it was given (a mount still in flight counts). */
|
|
64
|
+
attached: () => boolean;
|
|
65
|
+
dispose: () => void;
|
|
66
|
+
/** Settles once the document is in the host. */
|
|
67
|
+
ready: Promise<void>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
interface VariablesScope extends VariablesView, VariablesActions {
|
|
71
|
+
headingId: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** The view as the document reads it. */
|
|
75
|
+
function project(scope: VariablesScope, view: VariablesView): void {
|
|
76
|
+
Object.assign(scope, view);
|
|
77
|
+
scope.headingId = `styles-variables-${view.region.replaceAll(/[^\w-]/g, "-")}`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** The `part` a node was authored with, or `""`: the only thing this adapter asks about a node. */
|
|
81
|
+
function partOf(def: JxElement | string): string {
|
|
82
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
83
|
+
return isString(part) ? part : "";
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Mount the Variables view into `host`, the pane's canvas stage.
|
|
88
|
+
*
|
|
89
|
+
* @param {HTMLElement} host The pane's canvas stage, emptied first.
|
|
90
|
+
* @param {VariablesView} view What to draw right now.
|
|
91
|
+
* @param {VariablesActions} actions What the view's control does.
|
|
92
|
+
* @param {VariablesIslands} islands Where the editor lands.
|
|
93
|
+
* @returns {VariablesSurfaceHandle}
|
|
94
|
+
*/
|
|
95
|
+
export function mountVariablesSurface(
|
|
96
|
+
host: HTMLElement,
|
|
97
|
+
view: VariablesView,
|
|
98
|
+
actions: VariablesActions,
|
|
99
|
+
islands: VariablesIslands,
|
|
100
|
+
): VariablesSurfaceHandle {
|
|
101
|
+
host.replaceChildren();
|
|
102
|
+
const scope: VariablesScope = reactive<VariablesScope>({
|
|
103
|
+
headingId: "",
|
|
104
|
+
lede: "",
|
|
105
|
+
manageContexts: actions.manageContexts,
|
|
106
|
+
manageLabel: "",
|
|
107
|
+
region: "",
|
|
108
|
+
saving: "",
|
|
109
|
+
schemes: "",
|
|
110
|
+
title: "",
|
|
111
|
+
});
|
|
112
|
+
project(scope, view);
|
|
113
|
+
|
|
114
|
+
let mounted: SurfaceHandle | null = null;
|
|
115
|
+
let disposed = false;
|
|
116
|
+
const ready = mountSurface("styles-variables", scope, host, {
|
|
117
|
+
onNodeCreated: (element, _path, def) => {
|
|
118
|
+
if (element instanceof HTMLElement && partOf(def) === "editor") {
|
|
119
|
+
islands.editorSlot(element);
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
}).then((surface) => {
|
|
123
|
+
if (disposed) {
|
|
124
|
+
surface.dispose();
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
mounted = surface;
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
return {
|
|
131
|
+
attached: () => {
|
|
132
|
+
if (disposed) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
const root = mounted?.root;
|
|
136
|
+
return root === undefined ? true : host.contains(root);
|
|
137
|
+
},
|
|
138
|
+
dispose() {
|
|
139
|
+
disposed = true;
|
|
140
|
+
mounted?.dispose();
|
|
141
|
+
mounted = null;
|
|
142
|
+
},
|
|
143
|
+
ready,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"color": "var(--jx-bg)"
|
|
116
116
|
},
|
|
117
117
|
"& [part=\"pin\"]": {
|
|
118
|
-
"$description": "`.tab-strip-pin`, in `jx-tab`'s actions slot. A click on it never also selects the tab, and that is the KIT's doing now rather than a `stopPropagation` this document has to remember: `jx-tab` stops a click inside its actions slot exactly as it stops one on its own close button.",
|
|
118
|
+
"$description": "`.tab-strip-pin`, in `jx-tab`'s actions slot, on the current chip and on a pinned one (the rule below). A click on it never also selects the tab, and that is the KIT's doing now rather than a `stopPropagation` this document has to remember: `jx-tab` stops a click inside its actions slot exactly as it stops one on its own close button.",
|
|
119
119
|
"display": "flex",
|
|
120
120
|
"alignItems": "center",
|
|
121
121
|
"justifyContent": "center",
|
|
@@ -130,7 +130,6 @@
|
|
|
130
130
|
"lineHeight": "1",
|
|
131
131
|
"borderRadius": "var(--radius)",
|
|
132
132
|
"cursor": "pointer",
|
|
133
|
-
"opacity": "0",
|
|
134
133
|
":hover": {
|
|
135
134
|
"background": "var(--hover-bg)",
|
|
136
135
|
"color": "var(--fg)"
|
|
@@ -140,8 +139,9 @@
|
|
|
140
139
|
"outlineOffset": "-1px"
|
|
141
140
|
}
|
|
142
141
|
},
|
|
143
|
-
"& [part=\"tab\"]:
|
|
144
|
-
"
|
|
142
|
+
"& [part=\"tab\"]:not([aria-selected=\"true\"]):not([data-pinned]) [part=\"pin\"]": {
|
|
143
|
+
"$description": "An inactive, unpinned chip draws no pin and keeps no box for one. It was `opacity: 0` here and revealed on hover, so the invisible button still took 16px of the chip and every click on it: the centre of a short chip (the Media home's, beside its viewer tab) was the pin, so the click toggled a pin nobody could see and the tab did not activate. A box that takes clicks is a control, and a control is either shown or absent. The current chip shows its pin, a pinned chip shows its mark, and any chip pins from its context menu (`document.togglePinned`).",
|
|
144
|
+
"display": "none"
|
|
145
145
|
},
|
|
146
146
|
"& [part=\"tab\"][data-pinned] [part=\"pin\"]": {
|
|
147
147
|
"color": "var(--accent)"
|
|
@@ -28,20 +28,21 @@
|
|
|
28
28
|
* @docs studio/interface
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
31
32
|
import { reactive } from "../reactivity";
|
|
32
33
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
33
34
|
import tabStripDoc from "./tab-strip.json";
|
|
34
|
-
import type {
|
|
35
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
35
36
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
36
37
|
import type { SurfaceHandle } from "../ui/surface";
|
|
37
38
|
|
|
38
|
-
registerSurface("tab-strip", tabStripDoc
|
|
39
|
+
registerSurface("tab-strip", tabStripDoc);
|
|
39
40
|
|
|
40
41
|
/**
|
|
41
42
|
* One chip, as the document draws it. Every field is a value: the document asks no question about a
|
|
42
43
|
* tab, and there is no branch in it that a projection has not already decided.
|
|
43
44
|
*/
|
|
44
|
-
export interface TabChipView
|
|
45
|
+
export interface TabChipView {
|
|
45
46
|
/** The tab id: the repeater's key, the tab's `value`, and what every action is addressed with. */
|
|
46
47
|
key: string;
|
|
47
48
|
/** The shortest suffix that tells this document apart, or a page's route. */
|
|
@@ -107,7 +108,7 @@ export interface TabStripActions {
|
|
|
107
108
|
/** The chevron, or a derived pane's ✕. The anchor is the button that was pressed. */
|
|
108
109
|
openTrailing: (anchor: HTMLElement | null) => void;
|
|
109
110
|
/** A wheel over the strip. A host function in handler position, so it takes the event. */
|
|
110
|
-
wheel: (scope:
|
|
111
|
+
wheel: (scope: JxScope, event: WheelEvent) => void;
|
|
111
112
|
/** A chip element exists. `panels/tab-strip.ts` makes it a pragmatic drag source and drop target. */
|
|
112
113
|
chipHost: (element: HTMLElement, id: string) => void;
|
|
113
114
|
/**
|
|
@@ -146,20 +147,20 @@ export interface TabStripSurface {
|
|
|
146
147
|
}
|
|
147
148
|
|
|
148
149
|
/** The scope `tab-strip.json` reads. */
|
|
149
|
-
interface TabStripScope
|
|
150
|
-
extends Record<string, unknown>, TabStripValues, TabStripActions, TabStripDragState {}
|
|
150
|
+
interface TabStripScope extends TabStripValues, TabStripActions, TabStripDragState {}
|
|
151
151
|
|
|
152
152
|
/** The `part` a node's definition carries, or `""` for a text node or an unmarked element. */
|
|
153
153
|
function partOf(def: JxElement | string): string {
|
|
154
|
-
const part =
|
|
155
|
-
return
|
|
154
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
155
|
+
return isString(part) ? part : "";
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
/** The tab id a mapped `jx-tab` node was rendered for, read from the row scope, or `""`. */
|
|
159
159
|
function mappedChipKey(state: JxScope | undefined): string {
|
|
160
|
-
const map = state?.["$map"]
|
|
161
|
-
const
|
|
162
|
-
|
|
160
|
+
const map = state?.["$map"];
|
|
161
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
162
|
+
const key = isJsonObject(item) ? item["key"] : undefined;
|
|
163
|
+
return isString(key) ? key : "";
|
|
163
164
|
}
|
|
164
165
|
|
|
165
166
|
/**
|
|
@@ -178,13 +179,13 @@ export function mountTabStripSurface(
|
|
|
178
179
|
values: TabStripValues,
|
|
179
180
|
actions: TabStripActions,
|
|
180
181
|
): TabStripSurface {
|
|
181
|
-
const scope = reactive<TabStripScope>({
|
|
182
|
+
const scope: TabStripScope = reactive<TabStripScope>({
|
|
182
183
|
...values,
|
|
183
184
|
...actions,
|
|
184
185
|
dragKey: "",
|
|
185
186
|
dropIndex: -1,
|
|
186
187
|
dropTail: false,
|
|
187
|
-
})
|
|
188
|
+
});
|
|
188
189
|
|
|
189
190
|
host.replaceChildren();
|
|
190
191
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -46,11 +46,10 @@ import { reactive } from "../reactivity";
|
|
|
46
46
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
47
47
|
import { openMenu } from "./menu";
|
|
48
48
|
import targetLineDoc from "./target-line.json";
|
|
49
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
50
49
|
import type { MenuHandle, MenuRowProjection } from "./menu";
|
|
51
50
|
import type { SurfaceHandle } from "../ui/surface";
|
|
52
51
|
|
|
53
|
-
registerSurface("target-line", targetLineDoc
|
|
52
|
+
registerSurface("target-line", targetLineDoc);
|
|
54
53
|
|
|
55
54
|
/** The region the line stamps on itself, so a shot can crop it. */
|
|
56
55
|
const REGION = "inspector/target";
|
|
@@ -108,7 +107,7 @@ export const BASE_SELECTOR_LABEL = "base rule";
|
|
|
108
107
|
// ─── The projection ──────────────────────────────────────────────────────────
|
|
109
108
|
|
|
110
109
|
/** One word of the sentence, as the document reads it. */
|
|
111
|
-
interface ProjectedSegment
|
|
110
|
+
interface ProjectedSegment {
|
|
112
111
|
key: string;
|
|
113
112
|
label: string;
|
|
114
113
|
title: string;
|
|
@@ -119,7 +118,7 @@ interface ProjectedSegment extends Record<string, unknown> {
|
|
|
119
118
|
}
|
|
120
119
|
|
|
121
120
|
/** The scope `target-line.json` reads. */
|
|
122
|
-
interface TargetLineScope
|
|
121
|
+
interface TargetLineScope {
|
|
123
122
|
region: string;
|
|
124
123
|
segments: ProjectedSegment[];
|
|
125
124
|
selectorLabel: string;
|
|
@@ -201,7 +200,7 @@ function scope(): TargetLineScope {
|
|
|
201
200
|
toggleLabel: "Show affected",
|
|
202
201
|
warn: false,
|
|
203
202
|
warningText: "",
|
|
204
|
-
})
|
|
203
|
+
});
|
|
205
204
|
return _scope;
|
|
206
205
|
}
|
|
207
206
|
|
|
@@ -311,11 +310,11 @@ export function openSelectorMenu(): void {
|
|
|
311
310
|
},
|
|
312
311
|
title: BASE_SELECTOR_LABEL,
|
|
313
312
|
},
|
|
314
|
-
...selector.options.map((option, index) => ({
|
|
313
|
+
...selector.options.map((option, index): MenuRowProjection => ({
|
|
315
314
|
/* What the ● in the old menu said: this element already DECLARES this rule. Where you are is
|
|
316
315
|
stated once, by the trigger's own label — a row that carried both facts would be two
|
|
317
316
|
answers on one line. */
|
|
318
|
-
checked:
|
|
317
|
+
checked: selector.declared.has(option) ? "true" : "false",
|
|
319
318
|
destructive: false,
|
|
320
319
|
disabled: false,
|
|
321
320
|
dividerAbove: index === 0,
|