@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
|
@@ -19,7 +19,8 @@ import type { JsonLayout } from "@jxsuite/schema/json-layout";
|
|
|
19
19
|
import type { ComponentEntry } from "../files/components";
|
|
20
20
|
import type { AnyCommand, CommandRegistry } from "../commands/registry";
|
|
21
21
|
import type { GitDiffState } from "../types";
|
|
22
|
-
import type { JxMutableNode, JxStyle } from "@jxsuite/schema/types";
|
|
22
|
+
import type { JxMutableNode, JxStyle, ProjectConfig } from "@jxsuite/schema/types";
|
|
23
|
+
import type { FormatFrontmatter } from "../format/format-host";
|
|
23
24
|
import type { ComputedRef } from "@vue/reactivity";
|
|
24
25
|
|
|
25
26
|
interface FileEntry {
|
|
@@ -169,7 +170,7 @@ export const MAX_PANES = 2;
|
|
|
169
170
|
|
|
170
171
|
export interface Workspace {
|
|
171
172
|
projectRoot: string | null;
|
|
172
|
-
projectConfig:
|
|
173
|
+
projectConfig: ProjectConfig | null;
|
|
173
174
|
componentRegistry: ComponentEntry[];
|
|
174
175
|
clipboard: JxMutableNode | null;
|
|
175
176
|
styleClipboard: JxStyle | null;
|
|
@@ -205,31 +206,36 @@ export interface Workspace {
|
|
|
205
206
|
readonly activeTabId: string | null;
|
|
206
207
|
}
|
|
207
208
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
209
|
+
/*
|
|
210
|
+
* SAFETY: `reactive()` returns a deep proxy carrying its target's own members (the two getters
|
|
211
|
+
* included, read through the proxy as receiver), and the literal is checked against Workspace by
|
|
212
|
+
* `satisfies` and holds no refs for `UnwrapNestedRefs` to unwrap, so the proxy IS a Workspace. The
|
|
213
|
+
* type argument is pinned to `object` because `UnwrapNestedRefs<Workspace>` recurses through the
|
|
214
|
+
* document types deeply enough for tsc to give up (TS2589); the proxy is deep either way.
|
|
215
|
+
*/
|
|
216
|
+
export const workspace = reactive<object>({
|
|
211
217
|
activePaneId: PRIMARY_PANE,
|
|
212
|
-
clipboard: null
|
|
213
|
-
closedTabs: []
|
|
214
|
-
componentRegistry: []
|
|
215
|
-
mruOrder: []
|
|
218
|
+
clipboard: null,
|
|
219
|
+
closedTabs: [],
|
|
220
|
+
componentRegistry: [],
|
|
221
|
+
mruOrder: [],
|
|
216
222
|
fileTree: {
|
|
217
223
|
dirs: new Map<string, FileEntry[]>(),
|
|
218
224
|
expanded: new Set<string>(),
|
|
219
225
|
searchQuery: "",
|
|
220
|
-
selectedPath: null
|
|
226
|
+
selectedPath: null,
|
|
221
227
|
},
|
|
222
228
|
panes: [
|
|
223
229
|
{
|
|
224
|
-
activeTabId: null
|
|
225
|
-
derived: null
|
|
230
|
+
activeTabId: null,
|
|
231
|
+
derived: null,
|
|
226
232
|
id: PRIMARY_PANE,
|
|
227
|
-
tabOrder: []
|
|
233
|
+
tabOrder: [],
|
|
228
234
|
},
|
|
229
235
|
],
|
|
230
|
-
projectConfig: null
|
|
231
|
-
projectRoot: null
|
|
232
|
-
styleClipboard: null
|
|
236
|
+
projectConfig: null,
|
|
237
|
+
projectRoot: null,
|
|
238
|
+
styleClipboard: null,
|
|
233
239
|
tabs: new Map<string, Tab>(),
|
|
234
240
|
ui: {
|
|
235
241
|
activityBar: "files",
|
|
@@ -255,11 +261,11 @@ export const workspace: Workspace = reactive({
|
|
|
255
261
|
get tabOrder(): readonly string[] {
|
|
256
262
|
return activePane().tabOrder;
|
|
257
263
|
},
|
|
258
|
-
}
|
|
264
|
+
} satisfies Workspace) as Workspace;
|
|
259
265
|
|
|
260
|
-
export const activeTab = computed(() =>
|
|
266
|
+
export const activeTab: ComputedRef<Tab | null> = computed(() =>
|
|
261
267
|
workspace.activeTabId ? (workspace.tabs.get(workspace.activeTabId) ?? null) : null,
|
|
262
|
-
)
|
|
268
|
+
);
|
|
263
269
|
|
|
264
270
|
// ─── Panes ────────────────────────────────────────────────────────────────────
|
|
265
271
|
|
|
@@ -514,10 +520,10 @@ function addPane(paneId: string): Pane {
|
|
|
514
520
|
workspace.panes = [
|
|
515
521
|
...workspace.panes,
|
|
516
522
|
{
|
|
517
|
-
activeTabId: null
|
|
518
|
-
derived: null
|
|
523
|
+
activeTabId: null,
|
|
524
|
+
derived: null,
|
|
519
525
|
id: paneId,
|
|
520
|
-
tabOrder: []
|
|
526
|
+
tabOrder: [],
|
|
521
527
|
},
|
|
522
528
|
];
|
|
523
529
|
return paneById(paneId)!;
|
|
@@ -572,9 +578,15 @@ export function closePane(paneId: string) {
|
|
|
572
578
|
for the side pane's: focused=primary showing=a became focused=primary showing=b, and the only
|
|
573
579
|
way back was the tab strip. Nothing is lost either way, because the closing pane's tabs have
|
|
574
580
|
just been moved into the survivor above; this only decides which of them is on screen. */
|
|
581
|
+
/* …unless it belongs to another workspace than the one on screen. A derived pane follows the
|
|
582
|
+
author into every workspace, still showing its source's document, so Close Side Pane run from
|
|
583
|
+
its own menu in Media would hand the survivor a Design document and carry the author off to
|
|
584
|
+
Design. The survivor's own tab of the workspace stays in front instead. */
|
|
585
|
+
const closingShows =
|
|
586
|
+
pane.activeTabId !== null && _tabScope(pane.activeTabId) ? pane.activeTabId : null;
|
|
575
587
|
survivor.activeTabId =
|
|
576
588
|
workspace.activePaneId === pane.id
|
|
577
|
-
? (
|
|
589
|
+
? (closingShows ?? survivor.activeTabId ?? pane.activeTabId)
|
|
578
590
|
: (survivor.activeTabId ?? pane.activeTabId);
|
|
579
591
|
workspace.activePaneId = survivor.id;
|
|
580
592
|
/* Invariant D4, and it goes HERE — after the survivor has inherited the tabs and the focus, and
|
|
@@ -615,6 +627,72 @@ export function paneIsEmpty(pane: Pane): boolean {
|
|
|
615
627
|
live panes now (§18.3), so a zoom is buildable, but no section of studio.md asks for one; it
|
|
616
628
|
comes back with the section that does, and not one release earlier. */
|
|
617
629
|
|
|
630
|
+
/**
|
|
631
|
+
* Which tabs a fallback may land on: the tabs of the workspace on screen.
|
|
632
|
+
*
|
|
633
|
+
* When the active tab leaves a pane (closed, or moved), the pane falls back to another of its tabs.
|
|
634
|
+
* A fallback onto a tab of a DIFFERENT workspace would switch the workspace under the author, who
|
|
635
|
+
* closed a tab and did not ask to go anywhere — so the fallback is scoped, and a pane with no tab
|
|
636
|
+
* of the workspace left shows none. The predicate is INJECTED by `workspace/workspace-switch.ts`,
|
|
637
|
+
* because the rule that says which workspace a tab is in reads the project's collections, and this
|
|
638
|
+
* module sits below all of that. Unset, every tab qualifies, which is the model before workspaces.
|
|
639
|
+
*/
|
|
640
|
+
let _tabScope: (tabId: string) => boolean = () => true;
|
|
641
|
+
|
|
642
|
+
/** Install the fallback scope. `workspace/workspace-switch.ts` calls it once at boot. */
|
|
643
|
+
export function setTabScope(scope: ((tabId: string) => boolean) | null): void {
|
|
644
|
+
_tabScope = scope ?? (() => true);
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
/**
|
|
648
|
+
* What a pane shows when a close leaves it no tab in scope, or nothing (the stage stays empty).
|
|
649
|
+
*
|
|
650
|
+
* Injected by `workspace/workspace-switch.ts` for the same reason {@link setTabScope} is: the answer
|
|
651
|
+
* (a Navigator-less workspace falls back to its home) is a workspace rule, and this module sits
|
|
652
|
+
* below the workspaces. Only {@link closeTab} asks, because only a close is the author emptying a
|
|
653
|
+
* pane; a project switch's {@link closeAllTabs} empties every pane on its way to a new project and
|
|
654
|
+
* must not plant a home in it.
|
|
655
|
+
*/
|
|
656
|
+
let _emptyFallback: ((paneId: string) => void) | null = null;
|
|
657
|
+
|
|
658
|
+
/** Install the empty-pane fallback. `workspace/workspace-switch.ts` calls it once at boot. */
|
|
659
|
+
export function setEmptyPaneFallback(fallback: ((paneId: string) => void) | null): void {
|
|
660
|
+
_emptyFallback = fallback;
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
/**
|
|
664
|
+
* Where a close of the ACTIVE tab lands in a pane, ahead of the most recently used tab: a tab id,
|
|
665
|
+
* or `null` for no preference.
|
|
666
|
+
*
|
|
667
|
+
* Injected by `workspace/workspace-switch.ts`, for the reason {@link setTabScope} is. A workspace
|
|
668
|
+
* that draws no tab strip (Media, Publish) shows its home and one view opened beside it, and
|
|
669
|
+
* closing that view is the author going back to the home: the most recently used tab could be
|
|
670
|
+
* another view the strip-less pane is not drawing, which would put the author somewhere they did
|
|
671
|
+
* not ask to go and cannot see the way out of.
|
|
672
|
+
*/
|
|
673
|
+
let _closeLanding: ((paneId: string) => string | null) | null = null;
|
|
674
|
+
|
|
675
|
+
/** Install the close landing. `workspace/workspace-switch.ts` calls it once at boot. */
|
|
676
|
+
export function setCloseLanding(landing: ((paneId: string) => string | null) | null): void {
|
|
677
|
+
_closeLanding = landing;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
/** How many open tabs are in scope: the workspace on screen's, which is what ⌃Tab walks. */
|
|
681
|
+
export function scopedTabCount(): number {
|
|
682
|
+
let count = 0;
|
|
683
|
+
for (const id of workspace.tabs.keys()) {
|
|
684
|
+
if (_tabScope(id)) {
|
|
685
|
+
count += 1;
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
return count;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
/** The rightmost tab of a pane that is in scope: the safe default when its active tab leaves. */
|
|
692
|
+
function rightmostInScope(pane: Pane): string | null {
|
|
693
|
+
return pane.tabOrder.findLast((id) => _tabScope(id)) ?? null;
|
|
694
|
+
}
|
|
695
|
+
|
|
618
696
|
/**
|
|
619
697
|
* Remove a tab id from whichever pane holds it, without touching the tab itself.
|
|
620
698
|
*
|
|
@@ -630,7 +708,7 @@ export function detachTab(tabId: string) {
|
|
|
630
708
|
}
|
|
631
709
|
pane.tabOrder = pane.tabOrder.filter((id) => id !== tabId);
|
|
632
710
|
if (pane.activeTabId === tabId) {
|
|
633
|
-
pane.activeTabId = pane
|
|
711
|
+
pane.activeTabId = rightmostInScope(pane);
|
|
634
712
|
}
|
|
635
713
|
/* The PRIMARY is exempt HERE and only here. `splitRight` moves the tab out of the source pane
|
|
636
714
|
through this function, so a lone document split from the primary empties it — and that state
|
|
@@ -695,9 +773,9 @@ function defaultSlot(pane: Pane, tabId: string): number {
|
|
|
695
773
|
* project context, and the chat panel's pending-prompt effect.
|
|
696
774
|
*
|
|
697
775
|
* @param {string | null} root
|
|
698
|
-
* @param {
|
|
776
|
+
* @param {ProjectConfig | null} [config]
|
|
699
777
|
*/
|
|
700
|
-
export function setWorkspaceProject(root: string | null, config:
|
|
778
|
+
export function setWorkspaceProject(root: string | null, config: ProjectConfig | null = null) {
|
|
701
779
|
/* Leaving a project drops the assistant's record of what each turn changed (ai.md §3.2). It
|
|
702
780
|
names project-relative paths, and its Restore undoes the active tab, so carried into another
|
|
703
781
|
project it would list files that are not there and undo a document the turn never touched.
|
|
@@ -717,9 +795,7 @@ export function setWorkspaceProject(root: string | null, config: object | null =
|
|
|
717
795
|
*/
|
|
718
796
|
export function isTabActive(tab: Tab | null): boolean {
|
|
719
797
|
const active = activeTab.value;
|
|
720
|
-
return (
|
|
721
|
-
tab !== null && active !== null && toRaw(active as object) === toRaw(tab as unknown as object)
|
|
722
|
-
);
|
|
798
|
+
return tab !== null && active !== null && toRaw(active) === toRaw(tab);
|
|
723
799
|
}
|
|
724
800
|
|
|
725
801
|
/**
|
|
@@ -741,7 +817,7 @@ export function tabIsLive(tab: Tab | null | undefined): boolean {
|
|
|
741
817
|
return false;
|
|
742
818
|
}
|
|
743
819
|
const held = workspace.tabs.get(tab.id);
|
|
744
|
-
return held !== undefined && toRaw(held
|
|
820
|
+
return held !== undefined && toRaw(held) === toRaw(tab);
|
|
745
821
|
}
|
|
746
822
|
|
|
747
823
|
/**
|
|
@@ -785,6 +861,22 @@ function syncTreeSelection(tab: Tab) {
|
|
|
785
861
|
}
|
|
786
862
|
}
|
|
787
863
|
|
|
864
|
+
/**
|
|
865
|
+
* Show no tab in a pane, leaving its strip exactly as it is.
|
|
866
|
+
*
|
|
867
|
+
* What a pane shows when the workspace on screen has no tab in it: its other tabs are another
|
|
868
|
+
* workspace's, and they come back when that workspace does. Written only by
|
|
869
|
+
* `workspace/workspace-switch.ts`; nothing about the tabs, the MRU order or the focus changes.
|
|
870
|
+
*
|
|
871
|
+
* @param {string} paneId
|
|
872
|
+
*/
|
|
873
|
+
export function clearPaneActiveTab(paneId: string) {
|
|
874
|
+
const pane = paneById(paneId);
|
|
875
|
+
if (pane) {
|
|
876
|
+
pane.activeTabId = null;
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
|
|
788
880
|
/**
|
|
789
881
|
* Make `tabId` the active tab OF ITS OWN PANE. The one place activation happens.
|
|
790
882
|
*
|
|
@@ -849,8 +941,8 @@ function setActiveTab(tabId: string, opts: { cycling?: boolean; focus?: boolean
|
|
|
849
941
|
* id: string;
|
|
850
942
|
* documentPath?: string | null;
|
|
851
943
|
* fileHandle?: FileSystemFileHandle | null;
|
|
852
|
-
* document:
|
|
853
|
-
* frontmatter?:
|
|
944
|
+
* document: JxMutableNode;
|
|
945
|
+
* frontmatter?: FormatFrontmatter;
|
|
854
946
|
* sourceFormat?: string | null;
|
|
855
947
|
* capabilities?: { modes?: string[] };
|
|
856
948
|
* openedFrom?: TabOrigin | null;
|
|
@@ -865,8 +957,8 @@ export function openTab(opts: {
|
|
|
865
957
|
id: string;
|
|
866
958
|
documentPath?: string | null;
|
|
867
959
|
fileHandle?: FileSystemFileHandle | null;
|
|
868
|
-
document:
|
|
869
|
-
frontmatter?:
|
|
960
|
+
document: JxMutableNode;
|
|
961
|
+
frontmatter?: FormatFrontmatter;
|
|
870
962
|
sourceFormat?: string | null;
|
|
871
963
|
capabilities?: { modes?: string[] };
|
|
872
964
|
openedFrom?: TabOrigin | null;
|
|
@@ -874,7 +966,28 @@ export function openTab(opts: {
|
|
|
874
966
|
paneId?: string;
|
|
875
967
|
focus?: boolean;
|
|
876
968
|
layout?: JsonLayout | null;
|
|
969
|
+
/** The text a format-class file was read as (`createTab`'s `source`). */
|
|
970
|
+
source?: string | null;
|
|
971
|
+
/** The mode it opens in, when not its first declared one (`createTab`). */
|
|
972
|
+
canvasMode?: string;
|
|
973
|
+
/**
|
|
974
|
+
* Put a NEW tab in the pane's strip without activating it; a tab already open is left exactly as
|
|
975
|
+
* it is. For a tab that belongs beside the one on screen rather than in front of it: a
|
|
976
|
+
* workspace's home kept within reach of a document of that workspace.
|
|
977
|
+
*/
|
|
978
|
+
background?: boolean;
|
|
877
979
|
}) {
|
|
980
|
+
if (opts.background === true) {
|
|
981
|
+
const open = workspace.tabs.get(opts.id);
|
|
982
|
+
if (open) {
|
|
983
|
+
return open;
|
|
984
|
+
}
|
|
985
|
+
const tab = createTab({ ...opts, preview: false });
|
|
986
|
+
const pane = (opts.paneId === undefined ? undefined : paneById(opts.paneId)) ?? activePane();
|
|
987
|
+
insertIntoPane(pane, tab.id);
|
|
988
|
+
workspace.tabs.set(tab.id, tab);
|
|
989
|
+
return tab;
|
|
990
|
+
}
|
|
878
991
|
const previous = workspace.tabs.get(opts.id);
|
|
879
992
|
const preview = opts.preview === true && previous?.pinned !== true;
|
|
880
993
|
const tab = createTab({ ...opts, preview });
|
|
@@ -1054,12 +1167,15 @@ export function closeTab(tabId: string) {
|
|
|
1054
1167
|
// It, which is almost never the rightmost tab in the strip. `detachTab` has already put the
|
|
1055
1168
|
// Rightmost there as the safe default, so this only ever improves on it.
|
|
1056
1169
|
const survivor = activePane();
|
|
1170
|
+
const landing = _closeLanding?.(survivor.id) ?? null;
|
|
1057
1171
|
const next =
|
|
1058
|
-
|
|
1059
|
-
survivor.tabOrder.
|
|
1060
|
-
|
|
1172
|
+
(landing !== null && survivor.tabOrder.includes(landing) ? landing : null) ??
|
|
1173
|
+
workspace.mruOrder.find((id) => survivor.tabOrder.includes(id) && _tabScope(id)) ??
|
|
1174
|
+
rightmostInScope(survivor);
|
|
1061
1175
|
if (next) {
|
|
1062
1176
|
setActiveTab(next);
|
|
1177
|
+
} else {
|
|
1178
|
+
_emptyFallback?.(survivor.id);
|
|
1063
1179
|
}
|
|
1064
1180
|
}
|
|
1065
1181
|
|
|
@@ -1140,7 +1256,8 @@ export function takeClosedTabPath(): string | undefined {
|
|
|
1140
1256
|
*/
|
|
1141
1257
|
export function cycleTab(step: number): string | undefined {
|
|
1142
1258
|
if (!_cycleList) {
|
|
1143
|
-
|
|
1259
|
+
// The workspace on screen's tabs: ⌃Tab walks what the strips draw, never into another workspace.
|
|
1260
|
+
_cycleList = workspace.mruOrder.filter((id) => workspace.tabs.has(id) && _tabScope(id));
|
|
1144
1261
|
_cycleIndex = 0;
|
|
1145
1262
|
}
|
|
1146
1263
|
const list = _cycleList;
|
|
@@ -1169,8 +1286,8 @@ export function endTabCycle() {
|
|
|
1169
1286
|
* @param {{
|
|
1170
1287
|
* id: string;
|
|
1171
1288
|
* documentPath?: string | null;
|
|
1172
|
-
* document:
|
|
1173
|
-
* frontmatter?:
|
|
1289
|
+
* document: JxMutableNode;
|
|
1290
|
+
* frontmatter?: FormatFrontmatter;
|
|
1174
1291
|
* sourceFormat?: string | null;
|
|
1175
1292
|
* }} newTabOpts
|
|
1176
1293
|
* @returns {import("../tabs/tab.js").Tab}
|
|
@@ -1178,8 +1295,8 @@ export function endTabCycle() {
|
|
|
1178
1295
|
export function replaceAllTabs(newTabOpts: {
|
|
1179
1296
|
id: string;
|
|
1180
1297
|
documentPath?: string | null;
|
|
1181
|
-
document:
|
|
1182
|
-
frontmatter?:
|
|
1298
|
+
document: JxMutableNode;
|
|
1299
|
+
frontmatter?: FormatFrontmatter;
|
|
1183
1300
|
sourceFormat?: string | null;
|
|
1184
1301
|
}) {
|
|
1185
1302
|
const oldIds = [...workspace.tabs.keys()];
|
|
@@ -1340,9 +1457,10 @@ export function registerTabCommands(registry: CommandRegistry, deps: TabCommandD
|
|
|
1340
1457
|
* @returns {AnyCommand[]}
|
|
1341
1458
|
*/
|
|
1342
1459
|
export function tabCommands(deps: TabCommandDeps): AnyCommand[] {
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1460
|
+
/* Cycling walks the workspace on screen's tabs, in either pane, not just the focused one's strip
|
|
1461
|
+
(`cycleTab`), so it is available when that workspace has a second tab open. In a workspace
|
|
1462
|
+
with no strip that is its home and a view opened beside it: ⌃Tab moves between the two. */
|
|
1463
|
+
const twoOrMoreTabs = () => scopedTabCount() > 1;
|
|
1346
1464
|
return [
|
|
1347
1465
|
{
|
|
1348
1466
|
id: "document.nextTab",
|
|
@@ -1354,7 +1472,7 @@ export function tabCommands(deps: TabCommandDeps): AnyCommand[] {
|
|
|
1354
1472
|
group: "2_navigate",
|
|
1355
1473
|
when: (ctx) => ctx.document.open,
|
|
1356
1474
|
enablement: twoOrMoreTabs,
|
|
1357
|
-
requires: "a second open document",
|
|
1475
|
+
requires: "a second open document in this workspace",
|
|
1358
1476
|
run: () => {
|
|
1359
1477
|
cycleTab(1);
|
|
1360
1478
|
},
|
|
@@ -1369,7 +1487,7 @@ export function tabCommands(deps: TabCommandDeps): AnyCommand[] {
|
|
|
1369
1487
|
group: "2_navigate",
|
|
1370
1488
|
when: (ctx) => ctx.document.open,
|
|
1371
1489
|
enablement: twoOrMoreTabs,
|
|
1372
|
-
requires: "a second open document",
|
|
1490
|
+
requires: "a second open document in this workspace",
|
|
1373
1491
|
run: () => {
|
|
1374
1492
|
cycleTab(-1);
|
|
1375
1493
|
},
|
package/styles/shell-frame.css
CHANGED
|
@@ -51,15 +51,17 @@
|
|
|
51
51
|
container-type: inline-size;
|
|
52
52
|
container-name: toolbar;
|
|
53
53
|
}
|
|
54
|
-
#toolbar
|
|
54
|
+
/* A window handle under the frameless desktop window: the Command Bar (#toolbar) and the
|
|
55
|
+
boot-failure strip carry it, and the Electron shell drags the window by any area it covers.
|
|
56
|
+
Unscoped because the class name is self-describing. A no-op in a browser tab. */
|
|
57
|
+
.app-region-drag {
|
|
55
58
|
-webkit-app-region: drag;
|
|
56
59
|
}
|
|
57
|
-
/* The mirror of
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
.electrobun-webkit-app-region-no-drag {
|
|
60
|
+
/* The mirror of the drag class above: it marks an interactive control inside a drag region
|
|
61
|
+
(commandbar.json) so a press on the button reaches the button instead of dragging the window.
|
|
62
|
+
Unscoped, like .resize-edge below, because the class name is self-describing. A no-op outside a
|
|
63
|
+
frameless desktop window. */
|
|
64
|
+
.app-region-no-drag {
|
|
63
65
|
-webkit-app-region: no-drag;
|
|
64
66
|
}
|
|
65
67
|
/* Resize edge zones */
|
|
@@ -201,6 +203,27 @@
|
|
|
201
203
|
#app.bottom-collapsed #resize-bottom {
|
|
202
204
|
display: none;
|
|
203
205
|
}
|
|
206
|
+
/* The rail column, out of the grid. `src/shell.ts`'s applyDockLayout() stamps the class from the
|
|
207
|
+
active workspace's preset: the rail is Design's, and every other workspace gives its 56px to the
|
|
208
|
+
pane. The column is zero rather than removed so every named line below keeps its place. */
|
|
209
|
+
#app.rail-hidden {
|
|
210
|
+
grid-template-columns: [rail] 0px [nav] var(--panel-w-left) [pane] 1fr [insp] var(--panel-w-right);
|
|
211
|
+
}
|
|
212
|
+
#app.rail-hidden #activity-bar {
|
|
213
|
+
display: none;
|
|
214
|
+
}
|
|
215
|
+
/* Every pane's document tab strip, out of the cell. `src/shell.ts`'s applyDockLayout() stamps the
|
|
216
|
+
class from the active workspace's preset (`tabStrip`): Design and Content draw strips, and
|
|
217
|
+
Media, Styles and Publish draw their home surface alone, with the pane context bar's Back
|
|
218
|
+
control leading out of anything opened beside it. The strip stays mounted underneath, so
|
|
219
|
+
returning to a workspace with strips repaints nothing. A DERIVED pane's strip is the exception,
|
|
220
|
+
whenever it draws the derivation chip: the chip says what the side pane is a projection of, and
|
|
221
|
+
its trailing ✕ (Close Side Pane) is a lens's only visible exit, since a lens's context bar draws
|
|
222
|
+
neither the preset menu nor a Back control. Derived panes follow the author into every
|
|
223
|
+
workspace, so hiding that row would leave a pane nobody can name or close. */
|
|
224
|
+
#app.tabs-hidden #pane-grid [data-pane-id] > [part="strip"]:not(:has([part="derivation"])) {
|
|
225
|
+
display: none;
|
|
226
|
+
}
|
|
204
227
|
/* ⑫ Status bar Three fields in the shell's own level order, separated by a rule rather than by a
|
|
205
228
|
run of "|" characters: the boundary between PROJECT, DOCUMENT and SELECTION is structural, and
|
|
206
229
|
the eye should be able to find it without reading. */
|
package/styles/shell-frame.json
CHANGED
|
@@ -32,11 +32,12 @@
|
|
|
32
32
|
"container-type": "inline-size",
|
|
33
33
|
"container-name": "toolbar"
|
|
34
34
|
},
|
|
35
|
-
"
|
|
35
|
+
".app-region-drag": {
|
|
36
|
+
"$description": "A window handle under the frameless desktop window: the Command Bar (#toolbar) and the boot-failure strip carry it, and the Electron shell drags the window by any area it covers. Unscoped because the class name is self-describing. A no-op in a browser tab.",
|
|
36
37
|
"-webkit-app-region": "drag"
|
|
37
38
|
},
|
|
38
|
-
".
|
|
39
|
-
"$description": "The mirror of
|
|
39
|
+
".app-region-no-drag": {
|
|
40
|
+
"$description": "The mirror of the drag class above: it marks an interactive control inside a drag region (commandbar.json) so a press on the button reaches the button instead of dragging the window. Unscoped, like .resize-edge below, because the class name is self-describing. A no-op outside a frameless desktop window.",
|
|
40
41
|
"-webkit-app-region": "no-drag"
|
|
41
42
|
},
|
|
42
43
|
".resize-edge": {
|
|
@@ -169,6 +170,17 @@
|
|
|
169
170
|
"#app.bottom-collapsed #bottom-dock, #app.bottom-collapsed #resize-bottom": {
|
|
170
171
|
"display": "none"
|
|
171
172
|
},
|
|
173
|
+
"#app.rail-hidden": {
|
|
174
|
+
"$description": "The rail column, out of the grid. `src/shell.ts`'s applyDockLayout() stamps the class from the active workspace's preset: the rail is Design's, and every other workspace gives its 56px to the pane. The column is zero rather than removed so every named line below keeps its place.",
|
|
175
|
+
"grid-template-columns": "[rail] 0px [nav] var(--panel-w-left) [pane] 1fr [insp] var(--panel-w-right)"
|
|
176
|
+
},
|
|
177
|
+
"#app.rail-hidden #activity-bar": {
|
|
178
|
+
"display": "none"
|
|
179
|
+
},
|
|
180
|
+
"#app.tabs-hidden #pane-grid [data-pane-id] > [part=\"strip\"]:not(:has([part=\"derivation\"]))": {
|
|
181
|
+
"$description": "Every pane's document tab strip, out of the cell. `src/shell.ts`'s applyDockLayout() stamps the class from the active workspace's preset (`tabStrip`): Design and Content draw strips, and Media, Styles and Publish draw their home surface alone, with the pane context bar's Back control leading out of anything opened beside it. The strip stays mounted underneath, so returning to a workspace with strips repaints nothing. A DERIVED pane's strip is the exception, whenever it draws the derivation chip: the chip says what the side pane is a projection of, and its trailing ✕ (Close Side Pane) is a lens's only visible exit, since a lens's context bar draws neither the preset menu nor a Back control. Derived panes follow the author into every workspace, so hiding that row would leave a pane nobody can name or close.",
|
|
182
|
+
"display": "none"
|
|
183
|
+
},
|
|
172
184
|
"#statusbar": {
|
|
173
185
|
"$description": "\u246b Status bar Three fields in the shell's own level order, separated by a rule rather than by a run of \"|\" characters: the boundary between PROJECT, DOCUMENT and SELECTION is structural, and the eye should be able to find it without reading.",
|
|
174
186
|
"grid-row": "4",
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Dt,on,Pl,Mf,Yg,Ff,iw,_0,S0,C0,k0,E0,T0,L0,R0,$0}from"./studio-zey7zsdw.js";import{ae}from"./studio-pre0skq6.js";var O=ae(function(k){Object.defineProperty(k,"__esModule",{value:!0});k.dynamicAnchor=void 0;var y=Dt(),Pe=Pl(),g=iw(),N=S0(),Re={keyword:"$dynamicAnchor",schemaType:"string",code:(e)=>T(e,e.schema)};function T(e,t){let{gen:r,it:o}=e;o.schemaEnv.root.dynamicAnchors[t]=!0;let n=y._`${Pe.default.dynamicAnchors}${y.getProperty(t)}`,s=o.errSchemaPath==="#"?o.validateName:Ae(e);r.if(y._`!${n}`,()=>r.assign(n,s))}k.dynamicAnchor=T;function Ae(e){let{schemaEnv:t,schema:r,self:o}=e.it,{root:n,baseId:s,localRefs:l,meta:d}=t.root,{schemaId:a}=o.opts,f=new g.SchemaEnv({schema:r,schemaId:a,root:n,baseId:s,localRefs:l,meta:d});return g.compileSchema.call(o,f),N.getValidate(e,f)}k.default=Re});var M=ae(function(V){Object.defineProperty(V,"__esModule",{value:!0});V.dynamicRef=void 0;var v=Dt(),Me=Pl(),_=S0(),Se={keyword:"$dynamicRef",schemaType:"string",code:(e)=>C(e,e.schema)};function C(e,t){let{gen:r,keyword:o,it:n}=e;if(t[0]!=="#")throw Error(`"${o}" only supports hash fragment reference`);let s=t.slice(1);if(n.allErrors)l();else{let a=r.let("valid",!1);l(a),e.ok(a)}function l(a){if(n.schemaEnv.root.dynamicAnchors[s]){let f=r.let("_v",v._`${Me.default.dynamicAnchors}${v.getProperty(s)}`);r.if(f,d(f,a),d(n.validateName,a))}else d(n.validateName,a)()}function d(a,f){return f?()=>r.block(()=>{_.callRef(e,a),r.let(f,!0)}):()=>_.callRef(e,a)}}V.dynamicRef=C;V.default=Se});var L=ae(function(z){Object.defineProperty(z,"__esModule",{value:!0});var K=O(),G=on(),Ie={keyword:"$recursiveAnchor",schemaType:"boolean",code(e){if(e.schema)K.dynamicAnchor(e,"");else G.checkStrictMode(e.it,"$recursiveAnchor: false is ignored")}};z.default=Ie});var F=ae(function(Z){Object.defineProperty(Z,"__esModule",{value:!0});var U=M(),Ne={keyword:"$recursiveRef",schemaType:"string",code:(e)=>U.dynamicRef(e,e.schema)};Z.default=Ne});var B=ae(function(H){Object.defineProperty(H,"__esModule",{value:!0});var ke=O(),Ee=M(),Ce=L(),Ve=F(),De=[ke.default,Ee.default,Ce.default,Ve.default];H.default=De});var Q=ae(function(J){Object.defineProperty(J,"__esModule",{value:!0});var j=E0(),Ge={keyword:"dependentRequired",type:"object",schemaType:"object",error:j.error,code:(e)=>j.validatePropertyDeps(e)};J.default=Ge});var Y=ae(function(X){Object.defineProperty(X,"__esModule",{value:!0});var W=E0(),Le={keyword:"dependentSchemas",type:"object",schemaType:"object",code:(e)=>W.validateSchemaDeps(e)};X.default=Le});var re=ae(function(te){Object.defineProperty(te,"__esModule",{value:!0});var ee=on(),Ze={keyword:["maxContains","minContains"],type:"array",schemaType:"number",code({keyword:e,parentSchema:t,it:r}){if(t.contains===void 0)ee.checkStrictMode(r,`"${e}" without "contains" is ignored`)}};te.default=Ze});var oe=ae(function(ne){Object.defineProperty(ne,"__esModule",{value:!0});var He=Q(),Be=Y(),Je=re(),Qe=[He.default,Be.default,Je.default];ne.default=Qe});var ie=ae(function(se){Object.defineProperty(se,"__esModule",{value:!0});var i=Dt(),q=on(),Xe=Pl(),Ye={message:"must NOT have unevaluated properties",params:({params:e})=>i._`{unevaluatedProperty: ${e.unevaluatedProperty}}`},et={keyword:"unevaluatedProperties",type:"object",schemaType:["boolean","object"],trackErrors:!0,error:Ye,code(e){let{gen:t,schema:r,data:o,errsCount:n,it:s}=e;if(!n)throw Error("ajv implementation error");let{allErrors:l,props:d}=s;if(d instanceof i.Name)t.if(i._`${d} !== true`,()=>t.forIn("key",o,(c)=>t.if(f(d,c),()=>a(c))));else if(d!==!0)t.forIn("key",o,(c)=>d===void 0?a(c):t.if(A(d,c),()=>a(c)));s.props=!0,e.ok(i._`${n} === ${Xe.default.errors}`);function a(c){if(r===!1){if(e.setParams({unevaluatedProperty:c}),e.error(),!l)t.break();return}if(!q.alwaysValidSchema(s,r)){let p=t.name("valid");if(e.subschema({keyword:"unevaluatedProperties",dataProp:c,dataPropType:q.Type.Str},p),!l)t.if(i.not(p),()=>t.break())}}function f(c,p){return i._`!${c} || !${c}[${p}]`}function A(c,p){let I=[];for(let w in c)if(c[w]===!0)I.push(i._`${p} !== ${w}`);return i.and(...I)}}};se.default=et});var de=ae(function(ce){Object.defineProperty(ce,"__esModule",{value:!0});var u=Dt(),P=on(),rt={message:({params:{len:e}})=>u.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>u._`{limit: ${e}}`},at={keyword:"unevaluatedItems",type:"array",schemaType:["boolean","object"],error:rt,code(e){let{gen:t,schema:r,data:o,it:n}=e,s=n.items||0;if(s===!0)return;let l=t.const("len",u._`${o}.length`);if(r===!1)e.setParams({len:s}),e.fail(u._`${l} > ${s}`);else if(typeof r=="object"&&!P.alwaysValidSchema(n,r)){let a=t.var("valid",u._`${l} <= ${s}`);t.if(u.not(a),()=>d(a,s)),e.ok(a)}n.items=!0;function d(a,f){t.forRange("i",f,l,(A)=>{if(e.subschema({keyword:"unevaluatedItems",dataProp:A,dataPropType:P.Type.Num},a),!n.allErrors)t.if(u.not(a),()=>t.break())})}}};ce.default=at});var me=ae(function(ue){Object.defineProperty(ue,"__esModule",{value:!0});var ot=ie(),st=de(),it=[ot.default,st.default];ue.default=it});var le=ae(function(fe){Object.defineProperty(fe,"__esModule",{value:!0});var dt=C0(),ut=k0(),mt=T0(),ft=B(),lt=oe(),pt=me(),yt=L0(),R=R0(),ht=[ft.default,dt.default,ut.default,(0,mt.default)(!0),yt.default,R.metadataVocabulary,R.contentVocabulary,lt.default,pt.default];fe.default=ht});var pe=ae(function(ir,bt){bt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/schema",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0,"https://json-schema.org/draft/2020-12/vocab/applicator":!0,"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0,"https://json-schema.org/draft/2020-12/vocab/validation":!0,"https://json-schema.org/draft/2020-12/vocab/meta-data":!0,"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0,"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Core and Validation specifications meta-schema",allOf:[{$ref:"meta/core"},{$ref:"meta/applicator"},{$ref:"meta/unevaluated"},{$ref:"meta/validation"},{$ref:"meta/meta-data"},{$ref:"meta/format-annotation"},{$ref:"meta/content"}],type:["object","boolean"],$comment:"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.",properties:{definitions:{$comment:'"definitions" has been replaced by "$defs".',type:"object",additionalProperties:{$dynamicRef:"#meta"},deprecated:!0,default:{}},dependencies:{$comment:'"dependencies" has been split and replaced by "dependentSchemas" and "dependentRequired" in order to serve their differing semantics.',type:"object",additionalProperties:{anyOf:[{$dynamicRef:"#meta"},{$ref:"meta/validation#/$defs/stringArray"}]},deprecated:!0,default:{}},$recursiveAnchor:{$comment:'"$recursiveAnchor" has been replaced by "$dynamicAnchor".',$ref:"meta/core#/$defs/anchorString",deprecated:!0},$recursiveRef:{$comment:'"$recursiveRef" has been replaced by "$dynamicRef".',$ref:"meta/core#/$defs/uriReferenceString",deprecated:!0}}}});var ye=ae(function(cr,gt){gt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/applicator",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/applicator":!0},$dynamicAnchor:"meta",title:"Applicator vocabulary meta-schema",type:["object","boolean"],properties:{prefixItems:{$ref:"#/$defs/schemaArray"},items:{$dynamicRef:"#meta"},contains:{$dynamicRef:"#meta"},additionalProperties:{$dynamicRef:"#meta"},properties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},patternProperties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},propertyNames:{format:"regex"},default:{}},dependentSchemas:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},propertyNames:{$dynamicRef:"#meta"},if:{$dynamicRef:"#meta"},then:{$dynamicRef:"#meta"},else:{$dynamicRef:"#meta"},allOf:{$ref:"#/$defs/schemaArray"},anyOf:{$ref:"#/$defs/schemaArray"},oneOf:{$ref:"#/$defs/schemaArray"},not:{$dynamicRef:"#meta"}},$defs:{schemaArray:{type:"array",minItems:1,items:{$dynamicRef:"#meta"}}}}});var he=ae(function(dr,vt){vt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/unevaluated",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0},$dynamicAnchor:"meta",title:"Unevaluated applicator vocabulary meta-schema",type:["object","boolean"],properties:{unevaluatedItems:{$dynamicRef:"#meta"},unevaluatedProperties:{$dynamicRef:"#meta"}}}});var $e=ae(function(ur,_t){_t.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/content",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Content vocabulary meta-schema",type:["object","boolean"],properties:{contentEncoding:{type:"string"},contentMediaType:{type:"string"},contentSchema:{$dynamicRef:"#meta"}}}});var be=ae(function(mr,jt){jt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/core",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0},$dynamicAnchor:"meta",title:"Core vocabulary meta-schema",type:["object","boolean"],properties:{$id:{$ref:"#/$defs/uriReferenceString",$comment:"Non-empty fragments not allowed.",pattern:"^[^#]*#?$"},$schema:{$ref:"#/$defs/uriString"},$ref:{$ref:"#/$defs/uriReferenceString"},$anchor:{$ref:"#/$defs/anchorString"},$dynamicRef:{$ref:"#/$defs/uriReferenceString"},$dynamicAnchor:{$ref:"#/$defs/anchorString"},$vocabulary:{type:"object",propertyNames:{$ref:"#/$defs/uriString"},additionalProperties:{type:"boolean"}},$comment:{type:"string"},$defs:{type:"object",additionalProperties:{$dynamicRef:"#meta"}}},$defs:{anchorString:{type:"string",pattern:"^[A-Za-z_][-A-Za-z0-9._]*$"},uriString:{type:"string",format:"uri"},uriReferenceString:{type:"string",format:"uri-reference"}}}});var ge=ae(function(fr,qt){qt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/format-annotation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0},$dynamicAnchor:"meta",title:"Format vocabulary meta-schema for annotation results",type:["object","boolean"],properties:{format:{type:"string"}}}});var ve=ae(function(lr,Pt){Pt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/meta-data",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/meta-data":!0},$dynamicAnchor:"meta",title:"Meta-data vocabulary meta-schema",type:["object","boolean"],properties:{title:{type:"string"},description:{type:"string"},default:!0,deprecated:{type:"boolean",default:!1},readOnly:{type:"boolean",default:!1},writeOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0}}}});var _e=ae(function(pr,Rt){Rt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/validation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/validation":!0},$dynamicAnchor:"meta",title:"Validation vocabulary meta-schema",type:["object","boolean"],properties:{type:{anyOf:[{$ref:"#/$defs/simpleTypes"},{type:"array",items:{$ref:"#/$defs/simpleTypes"},minItems:1,uniqueItems:!0}]},const:!0,enum:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/$defs/nonNegativeInteger"},minLength:{$ref:"#/$defs/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},maxItems:{$ref:"#/$defs/nonNegativeInteger"},minItems:{$ref:"#/$defs/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},maxContains:{$ref:"#/$defs/nonNegativeInteger"},minContains:{$ref:"#/$defs/nonNegativeInteger",default:1},maxProperties:{$ref:"#/$defs/nonNegativeInteger"},minProperties:{$ref:"#/$defs/nonNegativeIntegerDefault0"},required:{$ref:"#/$defs/stringArray"},dependentRequired:{type:"object",additionalProperties:{$ref:"#/$defs/stringArray"}}},$defs:{nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{$ref:"#/$defs/nonNegativeInteger",default:0},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}}}});var qe=ae(function(je){Object.defineProperty(je,"__esModule",{value:!0});var At=pe(),Ot=ye(),Mt=he(),St=$e(),xt=be(),It=ge(),wt=ve(),Nt=_e(),Tt=["/properties"];function kt(e){return[At,Ot,Mt,St,xt,t(this,It),wt,t(this,Nt)].forEach((r)=>this.addMetaSchema(r,void 0,!1)),this;function t(r,o){return e?r.$dataMetaSchema(o,Tt):o}}je.default=kt});var Ht=ae(function(m,x){Object.defineProperty(m,"__esModule",{value:!0});m.MissingRefError=m.ValidationError=m.CodeGen=m.Name=m.nil=m.stringify=m.str=m._=m.KeywordCxt=m.Ajv2020=void 0;var Ct=_0(),Vt=le(),Kt=$0(),Gt=qe(),S="https://json-schema.org/draft/2020-12/schema";class b extends Ct.default{constructor(e={}){super({...e,dynamicRef:!0,next:!0,unevaluated:!0})}_addVocabularies(){if(super._addVocabularies(),Vt.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(Kt.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema();let{$data:e,meta:t}=this.opts;if(!t)return;Gt.default.call(this,e),this.refs["http://json-schema.org/schema"]=S}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(S)?S:void 0)}}m.Ajv2020=b;x.exports=m=b;x.exports.Ajv2020=b;Object.defineProperty(m,"__esModule",{value:!0});m.default=b;var zt=Mf();Object.defineProperty(m,"KeywordCxt",{enumerable:!0,get:function(){return zt.KeywordCxt}});var h=Dt();Object.defineProperty(m,"_",{enumerable:!0,get:function(){return h._}});Object.defineProperty(m,"str",{enumerable:!0,get:function(){return h.str}});Object.defineProperty(m,"stringify",{enumerable:!0,get:function(){return h.stringify}});Object.defineProperty(m,"nil",{enumerable:!0,get:function(){return h.nil}});Object.defineProperty(m,"Name",{enumerable:!0,get:function(){return h.Name}});Object.defineProperty(m,"CodeGen",{enumerable:!0,get:function(){return h.CodeGen}});var Lt=Yg();Object.defineProperty(m,"ValidationError",{enumerable:!0,get:function(){return Lt.default}});var Ut=Ff();Object.defineProperty(m,"MissingRefError",{enumerable:!0,get:function(){return Ut.default}})});export default Ht();
|
|
2
|
-
|
|
3
|
-
//# debugId=2587383F203A979264756E2164756E21
|
|
4
|
-
//# sourceMappingURL=2020-va2wwra4.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{p,Ve}from"./studio-xz2yxfcb.js";import"./studio-ery42sqr.js";import{y}from"./studio-55h4mstj.js";import"./studio-1q1sh2ax.js";import{pn,an}from"./studio-9mccjwjh.js";import"./studio-zyqn40w4.js";import{ot,zt,T,I,An,Ct}from"./studio-g1shz58g.js";import"./studio-vrmcjf9g.js";import"./studio-w0cgf6jg.js";import"./studio-933e30n4.js";import"./studio-tdcprbqb.js";import{sp}from"./studio-8bxk97km.js";var d={$schema:"https://jxsuite.com/schema/v1",$id:"StudioCfAccountPicker",$description:"The Cloudflare account picker: which of the accounts this grant reaches should publishing and the assistant run against. A `jx-dialog`, so the platform owns modality, Escape, focus restoration and the backdrop — which is what retired the `sp-dialog-wrapper` this surface used to open by hand, along with the focus trap and the `aria-modal` slot `showDialog` wrapped around it. There is no confirming button: each row commits itself, because a picker whose answer is one of N rows has N answers rather than one. The adapter (`surfaces/cf-account-picker.ts`) hands in rows that are already strings and booleans — nothing here knows what `cf_account_required` is, which call refused, or whether the list came back empty because the grant reaches nothing or because Cloudflare could not be reached.",tagName:"jx-dialog",$props:{headline:"Choose a Cloudflare account",confirmLabel:"",cancelLabel:"Cancel",size:"sm"},attributes:{part:"cf-accounts"},oncancel:{$prototype:"Function",body:[{operator:"call",target:{$ref:"#/state/closed"},value:[]}]},onclose:{$prototype:"Function",body:[{operator:"call",target:{$ref:"#/state/closed"},value:[]}]},style:{$description:"The picker's own look. Four `.cf-account-picker*` rules in `styles/shell.css` become the parts below and one of them does not come with them: `min-width: 320px` was this surface sizing its own box, and `jx-dialog` is what sizes a dialog now — `sm` is `min(90vw, 24rem)`, which is wider than the 320px it asked for. The row shape came from `.prefs-account`, which the lit template BORROWED from Preferences › Accounts; it is copied here rather than shared, because a class in a stylesheet is a thing two surfaces can drift apart on and `preferences-dialog.ts` still draws its own rows from it. Three token repairs travel with them: `--spectrum-font-size-75` and `--spectrum-font-size-50` resolve only inside `<sp-theme>`, and a document mounted in the dialog layer is outside it, so every one of them would silently have taken its hard-coded fallback.",'& [part="picker"]':{display:"flex",flexDirection:"column",gap:"var(--jx-space-4)"},'& [part="intro"], & [part="empty"]':{$description:"The lede and the two absences read as the same secondary line, so they are one rule: the sentence over the list and the sentence drawn instead of it are the same voice.",margin:"0",fontSize:"var(--jx-text-md)",color:"var(--fg-dim)"},'& [part="failure"]':{$description:'A commit the broker refused, said above the list the reader is still looking at. It is not an announcement of the same thing twice: the list survives a refusal, because listing again is not what would fix an account Cloudflare will not accept, so the reason has to sit beside the rows that are still on offer. It is `failure` rather than `error` because every kit field draws a permanent, empty `[part="error"]` of its own, and the kit is light DOM: a rule on that name here would reach any field this dialog ever holds.',margin:"0",fontSize:"var(--jx-text-md)",color:"var(--danger)"},'& [part="fail"]':{$description:"The one state that offers a verb of its own. Retrying is right for a listing that never landed and wrong for a grant that genuinely reaches nothing, so the button lives in this branch rather than under both.",display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"var(--jx-space-3)"},'& [part="list"]':{display:"flex",flexDirection:"column",gap:"var(--jx-space-2)"},'& [part="row"]':{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"var(--jx-space-4)",padding:"var(--jx-space-3)",border:"1px solid var(--border)",borderRadius:"var(--radius)"},'& [part="text"]':{$description:"`min-width: 0` lets the column shrink below its content, so the name and id reflow inside the row instead of pushing its own button off the end of it; what lets them reflow is their own `overflow-wrap`. Nothing here ellipsizes. Unlike Preferences › Accounts, the row does not wrap its button onto a line of its own: in an `sm` dialog the arithmetic (a 120px basis, the gap and a 105px button against a 236px row) would wrap every row at rest.",display:"flex",flexDirection:"column",gap:"var(--jx-space-1)",minWidth:"0"},'& [part="name"]':{$description:"`overflow-wrap: anywhere` because Cloudflare names a new account after the email that opened it (`name@example.com's Account`), and an address has no break opportunity in it.",color:"var(--fg)",overflowWrap:"anywhere"},'& [part="detail"]':{$description:"The account id under the name. Two Cloudflare accounts may carry the same name and the id is what is stored, so the row shows both rather than the half a reader would have to guess from. `overflow-wrap: anywhere` because the id is 32 hex digits with no break opportunity: it measured 203px in a 119px column and ran under the row's own button. It reflows rather than ellipsizing, because the id is the half that tells two same-named accounts apart.",fontSize:"var(--jx-text-sm)",color:"var(--fg-dim)",overflowWrap:"anywhere"}},children:[{tagName:"div",attributes:{part:"picker"},children:[{tagName:"p",attributes:{part:"intro"},textContent:"Your Cloudflare login reaches more than one account. Publishing and the assistant both run against the one you pick; you can change it in Preferences › Accounts."},{tagName:"div",attributes:{part:"body-slot",role:"none"},style:{display:"contents"},$switch:{$ref:"#/state/listState"},cases:{loading:{tagName:"p",attributes:{part:"empty"},textContent:"Reading your Cloudflare accounts…"},empty:{tagName:"p",attributes:{part:"empty"},textContent:"This Cloudflare login reaches no accounts. Create one at dash.cloudflare.com, then try again."},failed:{tagName:"div",attributes:{part:"fail"},children:[{tagName:"p",attributes:{part:"empty"},textContent:"${state.failureMessage}"},{tagName:"jx-button",attributes:{part:"retry"},$props:{size:"sm"},onclick:{$prototype:"Function",body:[{operator:"call",target:{$ref:"#/state/retry"},value:[]}]},children:[{tagName:"span",textContent:"Try again"}]}]},listed:{tagName:"div",attributes:{part:"listed",role:"none"},style:{display:"contents"},children:[{tagName:"div",attributes:{part:"failure-slot",role:"none"},style:{display:"contents"},$switch:{$ref:"#/state/hasFailure"},cases:{true:{tagName:"p",attributes:{part:"failure"},textContent:"${state.failure}"}}},{tagName:"div",attributes:{part:"list"},children:[{$prototype:"Array",items:{$ref:"#/state/rows"},key:{$ref:"$map/item/id"},map:{tagName:"div",attributes:{part:"row","data-account":"${$map.item.id}"},children:[{tagName:"div",attributes:{part:"text"},children:[{tagName:"span",attributes:{part:"name"},textContent:"${$map.item.name}"},{tagName:"span",attributes:{part:"detail"},textContent:"${$map.item.id}"}]},{tagName:"jx-button",attributes:{part:"choose"},$props:{size:"sm",variant:"accent",disabled:{$ref:"$map/item/busy"}},onclick:{$prototype:"Function",body:[{operator:"call",target:{$ref:"#/state/choose"},value:[{$ref:"$map/item/id"}]}]},children:[{tagName:"span",textContent:"${$map.item.label}"}]}]}}]}]}}}]}]};T("cf-account-picker",d);function h(t){let a=t.choosing!=="";return{...t,failureMessage:`Cloudflare could not be reached: ${t.failure}`,hasFailure:t.failure!=="",listState:t.loading?"loading":t.accounts.length>0?"listed":t.failure!==""?"failed":"empty",rows:t.accounts.map((o)=>({busy:a,id:o.id,label:t.choosing===o.id?"Selecting…":"Use this account",name:o.name}))}}function f(t){let a=document.createElement("div");a.style.pointerEvents="auto",a.setAttribute(ot,zt("dialog","cf-accounts")),t.layer.append(a);let o=!1,i=()=>{if(o)return;o=!0,t.onClosed()},n=y({...h({accounts:[],choosing:"",failure:"",loading:!0}),choose:(e)=>{t.onChoose(e)},closed:i,retry:()=>{t.onRetry()}}),s=null,l=I("cf-account-picker",n,a).then(async(e)=>{s=e;let r=e.root;if(o)return e.dispose(),r;if(await An(r),o)return r;return pn(r),r});return{close(){if(o)return;let e=s?.root;if(e instanceof HTMLElement)an(e);s?.dispose(),s=null,a.remove(),i()},host:a,ready:l,update(e){Object.assign(n,h({accounts:e.accounts??n.accounts,choosing:e.choosing??n.choosing,failure:e.failure??n.failure,loading:e.loading??n.loading}))}}}function w(){if(!Ve())return!1;let t=p();return Boolean(t.cfAccounts&&t.cfSelectAccount)}function m(t){return t instanceof Error?t.message:String(t)}function D(){if(!w())return Promise.resolve(null);return new Promise((t)=>{let a=[],o="",i=!1,n=(e)=>{if(i)return;i=!0,c.close(),t(e)};async function s(){c.update({failure:"",loading:!0});let e="";try{a=await p().cfAccounts?.()??[]}catch(r){a=[],e=m(r)}if(i)return;c.update({accounts:a,failure:e,loading:!1})}async function l(e){let r=a.find((u)=>u.id===e);if(!r||o!=="")return;o=e,c.update({choosing:e,failure:""});try{await p().cfSelectAccount?.({id:r.id,name:r.name})}catch(u){if(o="",!i)c.update({choosing:"",failure:m(u)});return}sp(),n(r)}let c=f({layer:Ct("dialog"),onChoose:(e)=>{l(e)},onClosed:()=>{n(null)},onRetry:()=>{s()}});s()})}export{D as openCfAccountPicker};
|
|
2
|
-
|
|
3
|
-
//# debugId=1DE7924CC26B33BE64756E2164756E21
|
|
4
|
-
//# sourceMappingURL=cf-account-picker-af1h381v.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Uf,K0,J0,RI,Y0}from"./studio-933e30n4.js";import"./studio-w0cgf6jg.js";import"./studio-xz2yxfcb.js";import"./studio-55h4mstj.js";export{Y0 as clearCfConnection,J0 as getCfAccountId,Uf as getCfToken,RI as setCfAccountId,K0 as setCfToken};
|
|
2
|
-
|
|
3
|
-
//# debugId=9C1935A9C04FF1C964756E2164756E21
|
|
4
|
-
//# sourceMappingURL=cf-settings-125tdm0w.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{i}from"./iframe-entry-z6qrytv3.js";var h="jx-color-area",d={x:"saturation",y:"brightness"},x={ArrowDown:"y",ArrowLeft:"x",ArrowRight:"x",ArrowUp:"y"},b={ArrowDown:-1,ArrowLeft:-1,ArrowRight:1,ArrowUp:1},l=new WeakSet;function a(e){let t=e.currentTarget;return t instanceof HTMLElement&&t.localName===h?t:null}function f(e){return e.querySelector('[part="track"]')}function p(e){if(!(e instanceof Element))return null;let t=e.getAttribute("part");return t==="x"||t==="y"?t:null}function g(e){let t=Number(e.step);return Number.isFinite(t)&&t>0?t:1}function u(e,...t){for(let r of t)e.dispatchEvent(new Event(r,{bubbles:!0}))}function s(e,t,r){let n=d[t],o=i(r,g(e),0,100);if(e[n]===o)return!1;return e[n]=o,!0}function y(e,t){let r=a(t),n=p(t.target);if(!r||!n)return;t.stopPropagation(),s(e,n,Number(t.target.value)),u(r,"input")}function w(e,t){let r=a(t),n=p(t.target);if(!r||!n)return;t.stopPropagation(),s(e,n,Number(t.target.value)),u(r,"change")}function S(e,t){let r=a(t),n=p(t.target);if(!r||!n||e.disabled===!0)return;let o=x[t.key];if(!o)return;if(o===n&&!t.shiftKey)return;t.preventDefault(),t.stopPropagation();let c=g(e)*(t.shiftKey?10:1)*(b[t.key]??0);if(s(e,o,Number(e[d[o]])+c))u(r,"input","change")}function A(e,t,r){let n=f(t);if(!n)return!1;let o=n.getBoundingClientRect();if(o.width<=0||o.height<=0)return!1;let c=s(e,"x",(r.clientX-o.left)/o.width*100),m=s(e,"y",(1-(r.clientY-o.top)/o.height)*100);return c||m}function C(e,t){let r=a(t);if(!r||e.disabled===!0)return;t.preventDefault(),l.add(r);let n=f(r);if(n&&typeof n.setPointerCapture==="function")try{n.setPointerCapture(t.pointerId)}catch{}if(r.querySelector('[part="x"]')?.focus(),A(e,r,t))u(r,"input")}function P(e,t){let r=a(t);if(!r||!l.has(r))return;if(A(e,r,t))u(r,"input")}function T(e,t){let r=a(t);if(!r||!l.delete(r))return;let n=f(r);if(n&&typeof n.releasePointerCapture==="function"&&n.hasPointerCapture?.(t.pointerId))n.releasePointerCapture(t.pointerId);u(r,"change")}export{w as onAreaAxisChange,y as onAreaAxisInput,S as onAreaKeydown,C as onAreaPointerDown,P as onAreaPointerMove,T as onAreaPointerUp};
|
|
2
|
-
|
|
3
|
-
//# debugId=D348F4E0A5F6C62464756E2164756E21
|
|
4
|
-
//# sourceMappingURL=color-area-jqhna8zy.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{r,s,u,h,g,b,f}from"./iframe-entry-z6qrytv3.js";import{t,n}from"./iframe-entry-f7mqjwpm.js";var F="jx-color-field",x=0,L=new WeakMap;function T(e){let o=e.currentTarget;return o instanceof HTMLElement&&o.localName===F?o:null}function S(e){let o=e.currentTarget??e.target;return o instanceof Element?o.closest(F):null}function H(e){return e.querySelector('[part="picker"]')}function M(e){return h({a:e.alpha===!0?Number(e.opacity)/100:1,h:Number(e.hue),s:Number(e.saturation),v:Number(e.brightness)})}function d(e,...o){for(let i of o)e.dispatchEvent(new Event(i,{bubbles:!0}))}function N(e,o){let i={...o,a:1};e.solid=s(i),e.ink=f(i)}function m(e){let o=M(e);e.value=e.format==="oklch"?b(g(o)):s(o),e.text=e.value,e.invalid=!1,N(e,o)}function y(e){let o=r(String(e.value??""))??r(String(e.resolved??""));if(e.invalid=!1,e.text=String(e.value??""),!o)return;if(N(e,o),s(o)===s(M(e)))return;let i=u(o);if(e.saturation=Number(i.s.toFixed(2)),e.brightness=Number(i.v.toFixed(2)),e.opacity=Number((i.a*100).toFixed(2)),i.s>0&&i.v>0)e.hue=Number(i.h.toFixed(2))}var k="[data-jx-channel]";function w(e){let{target:o}=e;return o instanceof Element?o.closest(k):null}function C(e,o,i){let l=T(o);if(!l||o.target===l)return;let a=w(o),c=a?.dataset.jxChannel;if(!a||!c)return;if(o.stopPropagation(),c==="text"){let p=String(o.target.value??"");e.text=p;let E=r(p);if(i==="input"){e.invalid=!1;return}if(!E){e.invalid=p!=="";return}v(e,E),m(e),d(l,"input","change");return}if(c==="system"||c==="palette"){let p=r(String(o.target.value??""));if(!p)return;v(e,{...p,a:e.alpha===!0?Number(e.opacity)/100:1})}else if(c==="area")e.saturation=Number(a.saturation),e.brightness=Number(a.brightness);else if(c==="hue")e.hue=Number(a.value);else if(c==="opacity")e.opacity=Number(a.value);else return;m(e),d(l,i)}function v(e,o){let i=u(o);if(e.saturation=Number(i.s.toFixed(2)),e.brightness=Number(i.v.toFixed(2)),e.alpha===!0)e.opacity=Number((i.a*100).toFixed(2));if(i.s>0&&i.v>0)e.hue=Number(i.h.toFixed(2))}function D(e,o){C(e,o,"input")}function A(e,o){C(e,o,"change")}function j(e,o){let i=S(o),l=i?H(i):null;if(!i||!l||e.disabled===!0)return;if(e.expanded===!0){n(l);return}let a=i.getBoundingClientRect();l.x=Math.round(a.left),l.y=Math.round(a.bottom),t(l,o.currentTarget instanceof Element?o.currentTarget:i)}function P(e){return e===!0&&typeof globalThis.EyeDropper==="function"}function I(e,o){let i=S(o),l=globalThis.EyeDropper;if(!i||!l||e.disabled===!0)return Promise.resolve();return new l().open().then((a)=>{let c=r(String(a?.sRGBHex??""));if(!c)return;v(e,c),m(e),d(i,"input","change")}).catch(()=>{})}function B(e,o){let i=T(o);if(!i)return;L.set(e,i),x+=1,e.uid=`jx-color-field-${x}`,y(e),new MutationObserver(()=>{y(e)}).observe(i,{attributeFilter:["data-resolved","data-value"],attributes:!0});let a=H(i);if(a)a.addEventListener("toggle",(c)=>{e.expanded=c.newState==="open"})}export{P as eyeDropperAvailable,I as onEyeDropper,A as onFieldChange,D as onFieldInput,B as onFieldMount,j as onOpenPicker,y as syncFromValue};
|
|
2
|
-
|
|
3
|
-
//# debugId=9CC9B36A50642F1464756E2164756E21
|
|
4
|
-
//# sourceMappingURL=color-field-embq5ctg.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{e,i,E,r,s,u,h,g,v,b,x,y,f,C}from"./iframe-entry-z6qrytv3.js";export{e as clamp,y as contrastRatio,s as formatHex,b as formatOklch,h as hsvToRgb,C as inkOn,v as oklchToSrgb,r as parseColor,E as parseHex,f as preferredInk,x as relativeLuminance,u as rgbToHsv,i as snapToStep,g as srgbToOklch};
|
|
2
|
-
|
|
3
|
-
//# debugId=47ECE90DEF1147ED64756E2164756E21
|
|
4
|
-
//# sourceMappingURL=color-fpezvnkt.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{i}from"./iframe-entry-z6qrytv3.js";var p="jx-color-slider",b={ArrowDown:-1,ArrowLeft:-1,ArrowRight:1,ArrowUp:1};function u(e){let n=e.currentTarget;return n instanceof HTMLElement&&n.localName===p?n:null}function d(e){return e.querySelector('input[part="input"]')}function l(e,...n){for(let t of n)e.dispatchEvent(new Event(t,{bubbles:!0}))}function f(e){let n=Number.isFinite(Number(e.min))?Number(e.min):0,t=Number(e.maxValue),r=Number(e.step);return{max:Number.isFinite(t)&&t>n?t:360,min:n,step:Number.isFinite(r)&&r>0?r:1}}function g(e,n){let t=u(n);if(!t||n.target===t)return;n.stopPropagation(),e.value=Number(n.target.value),l(t,"input")}function E(e,n){let t=u(n);if(!t||n.target===t)return;n.stopPropagation(),e.value=Number(n.target.value),l(t,"change")}function N(e,n){let t=u(n),r=b[n.key];if(!t||!r||!n.shiftKey||e.disabled===!0)return;n.preventDefault();let{max:s,min:c,step:a}=f(e),o=i(Number(e.value)+r*a*10,a,c,s);if(o===Number(e.value))return;e.value=o;let m=d(t);if(m)m.value=String(o);l(t,"input","change")}export{E as onSliderChange,g as onSliderInput,N as onSliderKeydown};
|
|
2
|
-
|
|
3
|
-
//# debugId=628A064C8111904B64756E2164756E21
|
|
4
|
-
//# sourceMappingURL=color-slider-1qmw7wqy.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{t,n}from"./iframe-entry-f7mqjwpm.js";var E="jx-combobox",p=0;function b(o){let e=o.currentTarget;return e instanceof Element?e.closest(E):null}function g(o){return o.querySelector('input[part="input"]')}function v(o){return o.querySelector('[part="popup"]')}function a(o){return Array.isArray(o.options)?o.options:[]}function C(o,...e){for(let r of e)o.dispatchEvent(new Event(r,{bubbles:!0}))}function f(o){return o.disabled!==!0&&o.readonly!==!0}function S(o){let e=v(o);if(!e)return;let r=o.getBoundingClientRect(),i=e;i.x=Math.round(r.left),i.y=Math.round(r.bottom),t(e,o)}function c(o){let e=v(o);if(e)n(e)}function x(o,e){if(!f(o)||a(o).length===0)return!1;return S(e),!0}function w(o){let e=a(o),r=s(e,String(o.value??""));return r&&r.disabled!==!0?e.indexOf(r):-1}function m(o,e,r){let i=e<0?r>0?-1:0:e;for(let u of o.keys()){let l=((i+r*(u+1))%o.length+o.length)%o.length;if(o[l]?.disabled!==!0)return l}return-1}function s(o,e){let r=e.toLowerCase();return o.find((i)=>String(i.value).toLowerCase()===r)??null}function d(o,e,r){let i=String(r.value);o.value=i,o.committed=i,o.activeIndex=-1,c(e),g(e)?.focus(),C(e,"input","change")}function T(o,e){p+=1,o.uid=`jx-combobox-${p}`,o.committed=String(o.value??"")}function M(o,e){let r=b(e),i=e.target;if(!r||!(i instanceof HTMLInputElement))return;o.value=i.value,o.activeIndex=-1,x(o,r)}function y(o,e){let r=e.newState==="open";if(o.open=r,!r)o.activeIndex=-1}function H(o,e){let r=b(e);if(!r||!f(o))return;if(o.open===!0){c(r);return}if(x(o,r))o.activeIndex=w(o);g(r)?.focus()}function I(o,e){let r=b(e),i=String(e.detail??""),u=s(a(o),i);if(!r||!u)return;d(o,r,u)}function h(o,e){let r=b(e);if(!r)return;let i=e.target instanceof HTMLInputElement?e.target:null,u=i?i.value:String(o.value??""),l=s(a(o),u);if(o.allowsCustomValue===!0||u===""||l){o.value=l?String(l.value):u,o.committed=String(o.value),c(r);return}e.stopPropagation(),o.value=String(o.committed??""),C(r,"change")}function k(o,e){let r=b(e);if(!r||e.ctrlKey||e.metaKey)return;let i=a(o),u=Number(o.activeIndex??-1);switch(e.key){case"ArrowDown":{if(!f(o))return;if(o.open!==!0){if(!x(o,r))return;o.activeIndex=e.altKey?w(o):m(i,-1,1)}else if(!e.altKey)o.activeIndex=m(i,u,1);break}case"ArrowUp":{if(!f(o))return;if(e.altKey){c(r);break}if(o.open!==!0){if(!x(o,r))return;o.activeIndex=m(i,-1,-1)}else o.activeIndex=m(i,u,-1);break}case"Enter":{let l=o.open===!0&&u>=0?i[u]:void 0;if(!l){if(o.open===!0)c(r);return}d(o,r,l);break}case"Tab":{let l=o.open===!0&&u>=0?i[u]:void 0;if(l)d(o,r,l);else c(r);return}case"Escape":{if(o.open!==!0)return;c(r),e.stopPropagation();break}default:return}e.preventDefault()}export{c as closeList,g as inputOf,w as landingIndex,T as mountCombobox,m as nextIndex,H as onComboboxButton,h as onComboboxCommit,M as onComboboxInput,k as onComboboxKeydown,I as onComboboxPick,y as onComboboxToggle,S as openList,s as rowFor};
|
|
2
|
-
|
|
3
|
-
//# debugId=207D4B954005839664756E2164756E21
|
|
4
|
-
//# sourceMappingURL=combobox-773hdzyj.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{st,zl,QC,Em,Nc}from"./studio-e81q1vb9.js";import"./studio-xz2yxfcb.js";export{Em as buildComponentInstance,st as componentRegistry,Nc as computeRelativePath,zl as loadComponentRegistry,QC as noteComponentSaved};
|
|
2
|
-
|
|
3
|
-
//# debugId=D267E1B337DA9C3964756E2164756E21
|
|
4
|
-
//# sourceMappingURL=components-ax2f1fnn.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Db,ex,US,qS,GS,KS}from"./studio-qkstvve9.js";import"./studio-7vg6jcd3.js";import"./studio-t6b6qe31.js";import"./studio-gjtpe62q.js";import"./studio-7zx31knw.js";import"./studio-yw05w8f0.js";import"./studio-tdcprbqb.js";import"./studio-rc6dvxjb.js";import"./studio-yb560vxr.js";import"./studio-gf0fz03c.js";import"./studio-t1xzawhr.js";import"./studio-e81q1vb9.js";import"./studio-w0cgf6jg.js";import"./studio-gx4dnjzd.js";import"./studio-74k29dy9.js";import"./studio-pcgz8heb.js";import"./studio-a2ke1e4t.js";import"./studio-epgrmqqm.js";import"./studio-rv11kfwa.js";import"./studio-5tnvjkz4.js";import"./studio-xz2yxfcb.js";import"./studio-g1shz58g.js";import"./studio-1q1sh2ax.js";import"./studio-9mccjwjh.js";import"./studio-zyqn40w4.js";import"./studio-ery42sqr.js";import"./studio-55h4mstj.js";export{ex as collectionDirs,Db as collectionInfo,GS as createCollectionSource,KS as createPagesSource,US as listCollectionEntryIds,qS as reloadDraftAwareGrids};
|
|
2
|
-
|
|
3
|
-
//# debugId=18170DCAAFA17CE364756E2164756E21
|
|
4
|
-
//# sourceMappingURL=content-source-108aqtk1.js.map
|