@jxsuite/studio 2.0.1 → 2.1.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/canvas.html +21 -0
- package/dist/chunks/Overlay.dev-qfjzkms8.js +23 -0
- package/dist/chunks/{Overlay.dev-cszx7yn5.js.map → Overlay.dev-qfjzkms8.js.map} +1 -1
- package/dist/chunks/{adapter-z8fkmbmv.js → adapter-qfnesn5v.js} +2 -2
- package/dist/chunks/{cf-settings-mmyv436d.js → cf-settings-73sh5z4p.js} +3 -3
- package/dist/chunks/{components-799jpvhm.js → components-2bpqp4mq.js} +5 -7
- package/dist/chunks/{components-799jpvhm.js.map → components-2bpqp4mq.js.map} +1 -1
- package/dist/chunks/content-source-34gnkbnn.js +38 -0
- package/dist/chunks/content-source-34gnkbnn.js.map +9 -0
- package/dist/chunks/convert-to-repeater-t8kxre5s.js +258 -0
- package/dist/chunks/convert-to-repeater-t8kxre5s.js.map +10 -0
- package/dist/chunks/extension-sections-6mqydz35.js +301 -0
- package/dist/chunks/extension-sections-6mqydz35.js.map +11 -0
- package/dist/chunks/files-8kn321h1.js +70 -0
- package/dist/chunks/files-8kn321h1.js.map +9 -0
- package/dist/chunks/{format-host-8jxwts2p.js → format-host-mkwsmt8d.js} +3 -3
- package/dist/chunks/git-panel-tjbr191d.js +51 -0
- package/dist/chunks/git-panel-tjbr191d.js.map +9 -0
- package/dist/chunks/{index-baeg2x3y.js → index-7pxchcce.js} +4 -3
- package/dist/chunks/{index-baeg2x3y.js.map → index-7pxchcce.js.map} +3 -3
- package/dist/chunks/{jx-validate-qx8degj7.js → jx-validate-v6qgknrs.js} +3 -3
- package/dist/chunks/layers-panel-87pb25km.js +58 -0
- package/dist/chunks/layers-panel-87pb25km.js.map +9 -0
- package/dist/chunks/{monaco-setup-zjdp9zdw.js → monaco-setup-e0yh25j4.js} +4 -75
- package/dist/chunks/{monaco-setup-zjdp9zdw.js.map → monaco-setup-e0yh25j4.js.map} +3 -4
- package/dist/chunks/publish-panel-m0fcgdrt.js +21 -0
- package/dist/chunks/publish-panel-m0fcgdrt.js.map +9 -0
- package/dist/chunks/quick-search-rhs6cbsb.js +53 -0
- package/dist/chunks/quick-search-rhs6cbsb.js.map +9 -0
- package/dist/chunks/right-panel-zpdxd98t.js +37 -0
- package/dist/chunks/right-panel-zpdxd98t.js.map +9 -0
- package/dist/chunks/section-registry-zmckaxf4.js +30 -0
- package/dist/chunks/section-registry-zmckaxf4.js.map +9 -0
- package/dist/chunks/sp-overlay.dev-9ran0sfq.js +18 -0
- package/dist/chunks/sp-overlay.dev-9ran0sfq.js.map +9 -0
- package/dist/chunks/sp-popover.dev-rebmdncr.js +9 -0
- package/dist/chunks/sp-popover.dev-rebmdncr.js.map +9 -0
- package/dist/chunks/sp-progress-circle.dev-5vkppfkt.js +15 -0
- package/dist/chunks/sp-progress-circle.dev-5vkppfkt.js.map +9 -0
- package/dist/chunks/sp-tooltip.dev-ykqrg8h5.js +15 -0
- package/dist/chunks/sp-tooltip.dev-ykqrg8h5.js.map +9 -0
- package/dist/chunks/{sp-tray.dev-pb2fsd65.js → sp-tray.dev-ey59vfh7.js} +10 -8
- package/dist/chunks/{sp-tray.dev-pb2fsd65.js.map → sp-tray.dev-ey59vfh7.js.map} +2 -2
- package/dist/chunks/{studio-9qr6fq7p.js → studio-0rqqhrdy.js} +10 -378
- package/dist/chunks/{studio-9qr6fq7p.js.map → studio-0rqqhrdy.js.map} +4 -14
- package/dist/chunks/{studio-5x6tqqec.js → studio-2sj1jj3v.js} +10 -8
- package/dist/chunks/{studio-5x6tqqec.js.map → studio-2sj1jj3v.js.map} +2 -2
- package/dist/chunks/{studio-h3fw0wn8.js → studio-3fk1ac9z.js} +6 -4
- package/dist/chunks/{studio-h3fw0wn8.js.map → studio-3fk1ac9z.js.map} +2 -2
- package/dist/chunks/studio-41exgzhq.js +6690 -0
- package/dist/chunks/studio-41exgzhq.js.map +38 -0
- package/dist/chunks/{studio-7v2bpweq.js → studio-4mqb9a0j.js} +6 -4
- package/dist/chunks/{studio-7v2bpweq.js.map → studio-4mqb9a0j.js.map} +2 -2
- package/dist/chunks/studio-50k77cca.js +1787 -0
- package/dist/chunks/studio-50k77cca.js.map +18 -0
- package/dist/chunks/{studio-56v3zwk6.js → studio-6a0h7sne.js} +10 -8
- package/dist/chunks/{studio-56v3zwk6.js.map → studio-6a0h7sne.js.map} +2 -2
- package/dist/chunks/studio-6f0am8f2.js +53 -0
- package/dist/chunks/studio-6f0am8f2.js.map +10 -0
- package/dist/chunks/studio-6nmjc5qk.js +7002 -0
- package/dist/chunks/studio-6nmjc5qk.js.map +32 -0
- package/dist/chunks/studio-7afd21nw.js +67 -0
- package/dist/chunks/studio-7afd21nw.js.map +10 -0
- package/dist/chunks/{studio-xze4zrs1.js → studio-7bmdvzne.js} +2 -2
- package/dist/chunks/studio-7bmdvzne.js.map +10 -0
- package/dist/chunks/studio-8jpzqk5s.js +128 -0
- package/dist/chunks/studio-8jpzqk5s.js.map +10 -0
- package/dist/chunks/studio-94m77tgk.js +1482 -0
- package/dist/chunks/studio-94m77tgk.js.map +13 -0
- package/dist/chunks/studio-9je6w5sq.js +1000 -0
- package/dist/chunks/studio-9je6w5sq.js.map +16 -0
- package/dist/chunks/{studio-w7c6kvk7.js → studio-a7pzveq1.js} +2 -2
- package/dist/chunks/{studio-gs6kqdt1.js → studio-adn0z1k3.js} +14 -8
- package/dist/chunks/{studio-gs6kqdt1.js.map → studio-adn0z1k3.js.map} +3 -3
- package/dist/chunks/{studio-kr88ryr7.js → studio-bsxxx3x2.js} +17 -15
- package/dist/chunks/{studio-kr88ryr7.js.map → studio-bsxxx3x2.js.map} +7 -6
- package/dist/chunks/studio-bw5dz6km.js +608 -0
- package/dist/chunks/studio-bw5dz6km.js.map +21 -0
- package/dist/chunks/studio-c6s5getc.js +4232 -0
- package/dist/chunks/studio-c6s5getc.js.map +39 -0
- package/dist/chunks/studio-cjm7fdjf.js +451 -0
- package/dist/chunks/studio-cjm7fdjf.js.map +14 -0
- package/dist/chunks/{studio-cx91mnh8.js → studio-ckwz4d3x.js} +53 -53
- package/dist/chunks/{studio-cx91mnh8.js.map → studio-ckwz4d3x.js.map} +5 -5
- package/dist/chunks/studio-dg7zyt5x.js +28 -0
- package/dist/chunks/studio-dg7zyt5x.js.map +10 -0
- package/dist/chunks/studio-dzcyvvvz.js +166 -0
- package/dist/chunks/studio-dzcyvvvz.js.map +10 -0
- package/dist/chunks/{studio-7kqe41sa.js → studio-evkr5d3b.js} +15 -7
- package/dist/chunks/{studio-7kqe41sa.js.map → studio-evkr5d3b.js.map} +5 -4
- package/dist/chunks/studio-f12h6177.js +411 -0
- package/dist/chunks/studio-f12h6177.js.map +13 -0
- package/dist/chunks/studio-hbp1s8m9.js +1817 -0
- package/dist/chunks/studio-hbp1s8m9.js.map +14 -0
- package/dist/chunks/studio-k2sxjph5.js +15295 -0
- package/dist/chunks/studio-k2sxjph5.js.map +235 -0
- package/dist/chunks/studio-myje51t3.js +385 -0
- package/dist/chunks/studio-myje51t3.js.map +12 -0
- package/dist/chunks/studio-na6rwzhw.js +353 -0
- package/dist/chunks/studio-na6rwzhw.js.map +11 -0
- package/dist/chunks/{studio-4k0m4fmp.js → studio-p471gg5n.js} +126 -3
- package/dist/chunks/studio-p471gg5n.js.map +14 -0
- package/dist/chunks/{studio-9bjwf0d4.js → studio-rgwcpast.js} +5 -46
- package/dist/chunks/{studio-9bjwf0d4.js.map → studio-rgwcpast.js.map} +4 -5
- package/dist/chunks/{studio-esrewxap.js → studio-s519zc99.js} +3 -3
- package/dist/chunks/studio-sas7mt3k.js +75 -0
- package/dist/chunks/studio-sas7mt3k.js.map +10 -0
- package/dist/chunks/studio-t5wqwzdh.js +74 -0
- package/dist/chunks/studio-t5wqwzdh.js.map +10 -0
- package/dist/chunks/{studio-9qpspwfn.js → studio-temv5bw4.js} +5 -5
- package/dist/chunks/{studio-9qpspwfn.js.map → studio-temv5bw4.js.map} +1 -1
- package/dist/chunks/{studio-qkvt37c0.js → studio-tr20m8g8.js} +669 -18
- package/dist/chunks/studio-tr20m8g8.js.map +9 -0
- package/dist/chunks/{studio-v7jkjqng.js → studio-v96qfnww.js} +5514 -4291
- package/dist/chunks/studio-v96qfnww.js.map +54 -0
- package/dist/chunks/studio-vcetc91k.js +659 -0
- package/dist/chunks/studio-vcetc91k.js.map +10 -0
- package/dist/chunks/{studio-jm0z592w.js → studio-vmymjefp.js} +2972 -4937
- package/dist/chunks/studio-vmymjefp.js.map +98 -0
- package/dist/chunks/{studio-bghqfmea.js → studio-wwseqyw0.js} +2 -2
- package/dist/chunks/studio-x9hmy5kr.js +390 -0
- package/dist/chunks/studio-x9hmy5kr.js.map +10 -0
- package/dist/chunks/studio-xa0ce0n7.js +335 -0
- package/dist/chunks/studio-xa0ce0n7.js.map +10 -0
- package/dist/chunks/studio-xm3dbxvn.js +378 -0
- package/dist/chunks/studio-xm3dbxvn.js.map +19 -0
- package/dist/chunks/{studio-nqw433kv.js → studio-xmvbhg31.js} +2 -2
- package/dist/chunks/studio-zv37yrfa.js +1054 -0
- package/dist/chunks/studio-zv37yrfa.js.map +13 -0
- package/dist/chunks/{ws-client-q7hkz3j9.js → ws-client-654ts66j.js} +6 -4
- package/dist/chunks/ws-client-654ts66j.js.map +11 -0
- package/dist/iframe-entry.js +668 -230
- package/dist/studio.js +21080 -32585
- package/index.html +35 -4685
- package/package.json +17 -15
- package/src/about/about-modal.ts +42 -11
- package/src/browse/library-commands.ts +240 -0
- package/src/browse/library-layouts.ts +369 -0
- package/src/browse/library-model.ts +396 -0
- package/src/browse/library-pane.ts +1049 -0
- package/src/browse/library-preview.ts +252 -0
- package/src/browse/library-source.ts +150 -0
- package/src/canvas/canvas-helpers.ts +33 -9
- package/src/canvas/canvas-live-render.ts +45 -29
- package/src/canvas/canvas-patcher.ts +151 -31
- package/src/canvas/canvas-perf.ts +46 -7
- package/src/canvas/canvas-render.ts +1092 -220
- package/src/canvas/canvas-surface.ts +240 -0
- package/src/canvas/canvas-utils.ts +1166 -124
- package/src/canvas/iframe-drop.ts +2 -1
- package/src/canvas/iframe-entry.ts +241 -4
- package/src/canvas/iframe-host.ts +1226 -143
- package/src/canvas/iframe-inline-edit.ts +31 -0
- package/src/canvas/iframe-interaction.ts +76 -16
- package/src/canvas/iframe-keys.ts +107 -45
- package/src/canvas/iframe-overlay.ts +38 -1
- package/src/canvas/iframe-protocol.ts +137 -2
- package/src/canvas/iframe-render.ts +70 -2
- package/src/canvas/iframe-slash.ts +6 -0
- package/src/canvas/path-mapping.ts +56 -6
- package/src/canvas/surface-registry.ts +292 -0
- package/src/collab/collab-commands.ts +244 -0
- package/src/collab/collab-session.ts +198 -32
- package/src/collab/collab-state.ts +28 -2
- package/src/collab/presence-chips.ts +100 -9
- package/src/commands/active-registry.ts +42 -0
- package/src/commands/app-commands.ts +176 -0
- package/src/commands/budget.ts +158 -0
- package/src/commands/command-args.ts +253 -0
- package/src/commands/context.ts +387 -0
- package/src/commands/defaults.ts +580 -0
- package/src/commands/keymap.ts +571 -0
- package/src/commands/levels.ts +345 -0
- package/src/commands/live-context.ts +193 -0
- package/src/commands/reference.ts +227 -0
- package/src/commands/registry.ts +293 -0
- package/src/component-props.ts +3 -2
- package/src/content/draft-state.ts +106 -0
- package/src/content/entry-commands.ts +282 -0
- package/src/content/entry-editor.ts +327 -0
- package/src/content/entry-fields.ts +116 -0
- package/src/content/entry-model.ts +175 -0
- package/src/editor/canvas-context-menu.ts +17 -11
- package/src/editor/canvas-slash-bridge.ts +11 -4
- package/src/editor/context-menu.ts +804 -204
- package/src/editor/convert-to-component.ts +31 -10
- package/src/editor/convert-to-repeater.ts +3 -2
- package/src/editor/inline-edit-apply.ts +5 -5
- package/src/editor/inline-edit.ts +86 -50
- package/src/editor/insert-zone-action.ts +1 -1
- package/src/editor/shortcuts.ts +1043 -329
- package/src/editor/slash-menu.ts +1 -0
- package/src/files/elements.ts +166 -0
- package/src/files/file-ops.ts +178 -31
- package/src/files/files.ts +898 -268
- package/src/files/fs-events.ts +21 -0
- package/src/files/media-meta.ts +203 -0
- package/src/files/media-paths.ts +141 -0
- package/src/files/media-upload.ts +7 -3
- package/src/files/media-usage.ts +189 -0
- package/src/github/github-auth.ts +235 -33
- package/src/github/github-publish.ts +80 -21
- package/src/grid/grid-controller.ts +152 -12
- package/src/grid/grid-layout.ts +225 -20
- package/src/grid/grid-open.ts +120 -0
- package/src/grid/grid-panel.ts +554 -39
- package/src/grid/grid-source.ts +27 -1
- package/src/grid/redirects-grid.ts +599 -0
- package/src/grid/redirects.ts +398 -0
- package/src/grid/sources/content-source.ts +108 -2
- package/src/i18n/i18n-commands.ts +322 -0
- package/src/new-project/add-repo-modal.ts +8 -10
- package/src/new-project/import-tab.ts +7 -0
- package/src/new-project/location-fields.ts +9 -1
- package/src/new-project/new-project-modal.ts +221 -245
- package/src/packages/jxsuite-update.ts +97 -48
- package/src/packages/pull-package-sync.ts +18 -9
- package/src/page-params.ts +2 -1
- package/src/panels/activity-bar.ts +152 -91
- package/src/panels/activity-panel.ts +481 -0
- package/src/panels/ai-chat/chat-markdown.ts +8 -3
- package/src/panels/ai-chat/chat-view.ts +245 -18
- package/src/panels/ai-chat/composer.ts +31 -5
- package/src/panels/ai-chat/sessions-view.ts +17 -10
- package/src/panels/ai-panel.ts +279 -53
- package/src/panels/block-action-bar.ts +1115 -224
- package/src/panels/bottom-dock.ts +337 -0
- package/src/panels/canvas-dnd-bridge.ts +37 -8
- package/src/panels/chat-panel.ts +29 -12
- package/src/panels/data-explorer.ts +254 -112
- package/src/panels/data-grid.ts +10 -4
- package/src/panels/dnd.ts +28 -51
- package/src/panels/editors.ts +434 -107
- package/src/panels/elements-panel.ts +66 -2
- package/src/panels/empty-state.ts +112 -0
- package/src/panels/events-panel.ts +596 -82
- package/src/panels/formula-workspace.ts +408 -218
- package/src/panels/frontmatter-fields.ts +51 -10
- package/src/panels/frontmatter-panel.ts +357 -79
- package/src/panels/git-panel.ts +375 -164
- package/src/panels/head-panel.ts +791 -85
- package/src/panels/i18n-panel.ts +592 -0
- package/src/panels/imports-panel.ts +95 -85
- package/src/panels/jump-bar.ts +584 -0
- package/src/panels/layers-panel.ts +1106 -328
- package/src/panels/left-panel.ts +109 -204
- package/src/panels/navigator-panels.ts +131 -0
- package/src/panels/overlays.ts +7 -2
- package/src/panels/pane-context.ts +1477 -0
- package/src/panels/pane-grid.ts +406 -0
- package/src/panels/panel-registry.ts +340 -0
- package/src/panels/panel-scheduler.ts +75 -0
- package/src/panels/problems-panel.ts +234 -0
- package/src/panels/properties-panel.ts +946 -1139
- package/src/panels/provenance.ts +258 -0
- package/src/panels/quick-search.ts +791 -122
- package/src/panels/right-panel.ts +228 -102
- package/src/panels/seo-modal.ts +395 -0
- package/src/panels/settings-pane.ts +203 -0
- package/src/panels/signals-panel.ts +354 -137
- package/src/panels/statement-editor.ts +41 -25
- package/src/panels/statusbar.ts +342 -106
- package/src/panels/style-panel.ts +974 -463
- package/src/panels/style-utils.ts +3 -3
- package/src/panels/stylebook-doc.ts +4 -2
- package/src/panels/stylebook-layers-panel.ts +3 -2
- package/src/panels/stylebook-panel.ts +51 -26
- package/src/panels/tab-strip.ts +1058 -78
- package/src/panels/target-line.ts +274 -0
- package/src/panels/toolbar.ts +631 -484
- package/src/panels/welcome-screen.ts +301 -198
- package/src/platform-errors.ts +26 -3
- package/src/platform.ts +96 -2
- package/src/platforms/cloud.ts +71 -8
- package/src/platforms/devserver.ts +92 -29
- package/src/publish/deploy-checklist.ts +383 -0
- package/src/publish/pages-service.ts +10 -1
- package/src/publish/publish-commands.ts +218 -0
- package/src/publish/publish-panel.ts +110 -16
- package/src/recent-projects.ts +3 -2
- package/src/services/a11y-report.ts +505 -0
- package/src/services/ai-models.ts +30 -1
- package/src/services/ai-project-tools.ts +29 -10
- package/src/services/ai-system-prompt.ts +53 -14
- package/src/services/ai-tools.ts +39 -3
- package/src/services/ai-writes.ts +154 -0
- package/src/services/announce.ts +97 -0
- package/src/services/automation.ts +424 -175
- package/src/services/cem-export.ts +9 -4
- package/src/services/clock.ts +61 -0
- package/src/services/document-assistant.ts +36 -8
- package/src/services/idle.ts +179 -0
- package/src/services/import-client.ts +26 -0
- package/src/services/monaco-buffer.ts +627 -0
- package/src/services/monaco-lazy.ts +36 -0
- package/src/services/notify.ts +271 -0
- package/src/services/profile.ts +155 -0
- package/src/services/references.ts +0 -0
- package/src/services/token-lint.ts +3 -2
- package/src/services/tool-executor.ts +53 -7
- package/src/services/trusted-types.ts +123 -0
- package/src/settings/contexts-section.ts +427 -0
- package/src/settings/contributed-section.ts +149 -11
- package/src/settings/css-vars-editor.ts +306 -349
- package/src/settings/defs-editor.ts +93 -34
- package/src/settings/dependencies-editor.ts +7 -7
- package/src/settings/extension-sections.ts +37 -5
- package/src/settings/general-settings.ts +204 -121
- package/src/settings/locales-section.ts +347 -0
- package/src/settings/preferences-accounts.ts +140 -0
- package/src/settings/preferences-dialog.ts +620 -0
- package/src/settings/preferences-keymap.ts +270 -0
- package/src/settings/project-sections.ts +260 -0
- package/src/settings/section-registry.ts +169 -0
- package/src/settings/settings-document.ts +385 -0
- package/src/shell.ts +1549 -0
- package/src/site-context.ts +45 -20
- package/src/state.ts +14 -275
- package/src/store.ts +88 -43
- package/src/studio.ts +790 -346
- package/src/style/live-preview.ts +36 -0
- package/src/style/project-styles.ts +349 -0
- package/src/style/token-ref.ts +123 -0
- package/src/tabs/patch-ops.ts +16 -4
- package/src/tabs/project-config.ts +416 -0
- package/src/tabs/selection.ts +323 -0
- package/src/tabs/tab.ts +182 -47
- package/src/tabs/transact.ts +209 -28
- package/src/types.ts +68 -13
- package/src/ui/ai-credentials-form.ts +39 -35
- package/src/ui/ai-managed-connect.ts +7 -1
- package/src/ui/dynamic-slot.ts +224 -81
- package/src/ui/expression-editor.ts +71 -63
- package/src/ui/field-input.ts +4 -6
- package/src/ui/field-row.ts +215 -38
- package/src/ui/form-controls.ts +194 -7
- package/src/ui/layers.ts +492 -69
- package/src/ui/media-picker.ts +115 -25
- package/src/ui/panel-resize.ts +109 -91
- package/src/ui/progress-modal.ts +131 -50
- package/src/ui/regions.ts +462 -0
- package/src/ui/schema-form.ts +229 -45
- package/src/ui/spectrum.ts +24 -8
- package/src/ui/timing.ts +49 -0
- package/src/ui/value-selector.ts +20 -0
- package/src/ui/value-source.ts +348 -0
- package/src/ui/virtual-window.ts +400 -0
- package/src/utils/edit-display.ts +3 -2
- package/src/utils/inherited-style.ts +67 -37
- package/src/view.ts +64 -78
- package/src/workspace/pane-derive.ts +1258 -0
- package/src/workspace/session.ts +317 -0
- package/src/workspace/workspace.ts +1345 -23
- package/styles/canvas.css +653 -0
- package/styles/forced-colors.css +106 -0
- package/styles/inspector.css +1454 -0
- package/styles/overlays.css +2704 -0
- package/styles/panels.css +1701 -0
- package/styles/shell.css +1423 -0
- package/styles/tokens.css +151 -0
- package/dist/chunks/Overlay.dev-cszx7yn5.js +0 -22
- package/dist/chunks/extension-sections-qr3drkkw.js +0 -531
- package/dist/chunks/extension-sections-qr3drkkw.js.map +0 -12
- package/dist/chunks/files-j8a1t06k.js +0 -50
- package/dist/chunks/files-j8a1t06k.js.map +0 -9
- package/dist/chunks/git-panel-xtq5z81x.js +0 -28
- package/dist/chunks/git-panel-xtq5z81x.js.map +0 -9
- package/dist/chunks/layers-panel-ancn2wpq.js +0 -26
- package/dist/chunks/layers-panel-ancn2wpq.js.map +0 -9
- package/dist/chunks/settings-modal-17ttr96g.js +0 -29
- package/dist/chunks/settings-modal-17ttr96g.js.map +0 -9
- package/dist/chunks/sp-overlay.dev-earn5as8.js +0 -17
- package/dist/chunks/sp-overlay.dev-earn5as8.js.map +0 -9
- package/dist/chunks/sp-popover.dev-frxtfejn.js +0 -8
- package/dist/chunks/sp-popover.dev-frxtfejn.js.map +0 -9
- package/dist/chunks/sp-progress-circle.dev-7tvw34h8.js +0 -14
- package/dist/chunks/sp-progress-circle.dev-7tvw34h8.js.map +0 -9
- package/dist/chunks/sp-tooltip.dev-a9fywesm.js +0 -21
- package/dist/chunks/sp-tooltip.dev-a9fywesm.js.map +0 -10
- package/dist/chunks/studio-0xgs7xrs.js +0 -429
- package/dist/chunks/studio-0xgs7xrs.js.map +0 -13
- package/dist/chunks/studio-4d8hzcz5.js +0 -3427
- package/dist/chunks/studio-4d8hzcz5.js.map +0 -26
- package/dist/chunks/studio-4k0m4fmp.js.map +0 -13
- package/dist/chunks/studio-9smfzqhc.js +0 -19
- package/dist/chunks/studio-9smfzqhc.js.map +0 -10
- package/dist/chunks/studio-jm0z592w.js.map +0 -115
- package/dist/chunks/studio-m2t4mdg5.js +0 -1854
- package/dist/chunks/studio-m2t4mdg5.js.map +0 -18
- package/dist/chunks/studio-n4p11dfy.js +0 -853
- package/dist/chunks/studio-n4p11dfy.js.map +0 -12
- package/dist/chunks/studio-qkvt37c0.js.map +0 -9
- package/dist/chunks/studio-sjh1wt1a.js +0 -3744
- package/dist/chunks/studio-sjh1wt1a.js.map +0 -22
- package/dist/chunks/studio-v7jkjqng.js.map +0 -46
- package/dist/chunks/studio-xq0t7n5t.js +0 -140
- package/dist/chunks/studio-xq0t7n5t.js.map +0 -10
- package/dist/chunks/studio-xze4zrs1.js.map +0 -10
- package/dist/chunks/studio-yfcstdzy.js +0 -399
- package/dist/chunks/studio-yfcstdzy.js.map +0 -12
- package/dist/chunks/studio-zp7jncs8.js +0 -469
- package/dist/chunks/studio-zp7jncs8.js.map +0 -14
- package/dist/chunks/ws-client-q7hkz3j9.js.map +0 -11
- package/src/browse/browse-modal.ts +0 -69
- package/src/browse/browse.ts +0 -904
- package/src/canvas/canvas-diff.ts +0 -216
- package/src/canvas/nested-site-style.ts +0 -58
- package/src/new-project/design-fields.ts +0 -264
- package/src/new-project/templates.ts +0 -61
- package/src/panels/tab-bar.ts +0 -548
- package/src/settings/settings-modal.ts +0 -203
- /package/dist/chunks/{adapter-z8fkmbmv.js.map → adapter-qfnesn5v.js.map} +0 -0
- /package/dist/chunks/{cf-settings-mmyv436d.js.map → cf-settings-73sh5z4p.js.map} +0 -0
- /package/dist/chunks/{format-host-8jxwts2p.js.map → format-host-mkwsmt8d.js.map} +0 -0
- /package/dist/chunks/{jx-validate-qx8degj7.js.map → jx-validate-v6qgknrs.js.map} +0 -0
- /package/dist/chunks/{studio-w7c6kvk7.js.map → studio-a7pzveq1.js.map} +0 -0
- /package/dist/chunks/{studio-esrewxap.js.map → studio-s519zc99.js.map} +0 -0
- /package/dist/chunks/{studio-bghqfmea.js.map → studio-wwseqyw0.js.map} +0 -0
- /package/dist/chunks/{studio-nqw433kv.js.map → studio-xmvbhg31.js.map} +0 -0
|
@@ -0,0 +1,653 @@
|
|
|
1
|
+
/* Jx Studio — canvas surface.
|
|
2
|
+
Load after tokens.css, after shell.css.
|
|
3
|
+
|
|
4
|
+
Owns the multi-panel canvas frame (.pane-stage, .panzoom-wrap,
|
|
5
|
+
.canvas-panel*), the pane's context bar and floating zoom pod, the
|
|
6
|
+
content-edit-mode canvas column, the selection/hover/layout overlay
|
|
7
|
+
boxes drawn over the rendered document, and the unified block action
|
|
8
|
+
bar plus its link popover. */
|
|
9
|
+
|
|
10
|
+
/* ─── Canvas (multi-panel) ────────────────────── */
|
|
11
|
+
/* The stage's own axis. `shell.css` places the cell; this says what it does with it. Selected by
|
|
12
|
+
class rather than by `#canvas-wrap`, because there are as many stages as there are panes. */
|
|
13
|
+
.pane-stage {
|
|
14
|
+
display: flex;
|
|
15
|
+
gap: 24px;
|
|
16
|
+
align-items: flex-start;
|
|
17
|
+
}
|
|
18
|
+
.panzoom-wrap {
|
|
19
|
+
display: inline-flex;
|
|
20
|
+
gap: 24px;
|
|
21
|
+
align-items: flex-start;
|
|
22
|
+
transform-origin: 0 0;
|
|
23
|
+
margin-block: auto;
|
|
24
|
+
}
|
|
25
|
+
.canvas-panel {
|
|
26
|
+
flex-shrink: 0;
|
|
27
|
+
}
|
|
28
|
+
.source-wrap {
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
width: 100%;
|
|
32
|
+
height: 100%;
|
|
33
|
+
flex: 1;
|
|
34
|
+
min-width: 0;
|
|
35
|
+
}
|
|
36
|
+
/* ─── ⑦ The pane context bar ───────────────────
|
|
37
|
+
Three separately-LABELLED axes — Editor kind, Canvas view, Rendering context — where five
|
|
38
|
+
unlabelled ones used to sit in a row styled identically to the tab strip above it. The label is
|
|
39
|
+
load-bearing: it is what stops the band re-accreting into an anonymous strip of chips. */
|
|
40
|
+
|
|
41
|
+
/* The pane's top band: the context bar, plus the standing statements that must be readable before
|
|
42
|
+
the first keystroke (today, collab's read-only banner). One element so `pane-context.ts` can
|
|
43
|
+
MEASURE what the stage has to clear — a banner's height is its wrapped text, which only layout
|
|
44
|
+
knows. `min-width: 0` so a long breadcrumb ellipses instead of widening the pane. */
|
|
45
|
+
.pc-band {
|
|
46
|
+
min-width: 0;
|
|
47
|
+
}
|
|
48
|
+
.pane-context {
|
|
49
|
+
display: flex;
|
|
50
|
+
align-items: center;
|
|
51
|
+
gap: 12px;
|
|
52
|
+
height: 28px;
|
|
53
|
+
padding: 0 8px;
|
|
54
|
+
border-bottom: 1px solid var(--border);
|
|
55
|
+
background: var(--bg-panel);
|
|
56
|
+
min-width: 0;
|
|
57
|
+
overflow: hidden;
|
|
58
|
+
}
|
|
59
|
+
.pane-context .pc-spacer {
|
|
60
|
+
flex: 1;
|
|
61
|
+
display: flex;
|
|
62
|
+
align-items: center;
|
|
63
|
+
min-width: 0;
|
|
64
|
+
}
|
|
65
|
+
/* §18.4's preset menu trigger, in the bar's leading slot — the one that was empty padding.
|
|
66
|
+
Sized to the 22px the strip's overflow control uses, so the two rows of pane chrome agree. */
|
|
67
|
+
.pc-derive-trigger {
|
|
68
|
+
flex: 0 0 auto;
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
justify-content: center;
|
|
72
|
+
width: 22px;
|
|
73
|
+
height: 20px;
|
|
74
|
+
padding: 0;
|
|
75
|
+
border: none;
|
|
76
|
+
border-radius: 3px;
|
|
77
|
+
background: none;
|
|
78
|
+
color: var(--fg-dim);
|
|
79
|
+
font-size: var(--spectrum-font-size-75, 12px);
|
|
80
|
+
line-height: 1;
|
|
81
|
+
cursor: pointer;
|
|
82
|
+
}
|
|
83
|
+
.pc-derive-trigger:hover {
|
|
84
|
+
background: var(--hover-bg);
|
|
85
|
+
color: var(--fg);
|
|
86
|
+
}
|
|
87
|
+
.pc-axis {
|
|
88
|
+
display: flex;
|
|
89
|
+
align-items: center;
|
|
90
|
+
gap: 4px;
|
|
91
|
+
min-width: 0;
|
|
92
|
+
}
|
|
93
|
+
.pc-axis-label {
|
|
94
|
+
font-size: var(--spectrum-font-size-50, 11px);
|
|
95
|
+
text-transform: uppercase;
|
|
96
|
+
letter-spacing: 0.04em;
|
|
97
|
+
color: var(--fg-dim);
|
|
98
|
+
white-space: nowrap;
|
|
99
|
+
}
|
|
100
|
+
.pc-static {
|
|
101
|
+
font-size: var(--spectrum-font-size-75, 12px);
|
|
102
|
+
color: var(--fg);
|
|
103
|
+
white-space: nowrap;
|
|
104
|
+
}
|
|
105
|
+
.pc-context-trigger {
|
|
106
|
+
font-variant-numeric: tabular-nums;
|
|
107
|
+
}
|
|
108
|
+
/* The document data a render resolves against, behind its own trigger beside the context one.
|
|
109
|
+
`.pc-resolving` and `.pc-resolving-label` are gone with the inline strip: the phrase "resolving
|
|
110
|
+
with" is the popover's group label now, so `.pc-ctx-label` styles it and there is one place a
|
|
111
|
+
group heading in this bar is described. */
|
|
112
|
+
.pc-resolving-trigger {
|
|
113
|
+
font-variant-numeric: tabular-nums;
|
|
114
|
+
flex-shrink: 0;
|
|
115
|
+
}
|
|
116
|
+
/* The editor-kind dropdown and the view segments both sit on a 28px band: cap them so a long
|
|
117
|
+
document name in the breadcrumb cannot push an axis off the end of the bar. */
|
|
118
|
+
.pc-editor-kind {
|
|
119
|
+
max-width: 140px;
|
|
120
|
+
}
|
|
121
|
+
.pc-view {
|
|
122
|
+
flex-shrink: 0;
|
|
123
|
+
}
|
|
124
|
+
/* The preview toggle is not a third radio, and must not read as one: it says the canvas is inert.
|
|
125
|
+
Pressed, it takes the accent so "editing is off" is legible from across the room; unpressed it is
|
|
126
|
+
as quiet as any other action button. The margin separates the two axes the eye is being asked to
|
|
127
|
+
read as separate. */
|
|
128
|
+
.pc-preview-toggle {
|
|
129
|
+
flex-shrink: 0;
|
|
130
|
+
margin-inline-start: 6px;
|
|
131
|
+
}
|
|
132
|
+
.pc-preview-toggle[selected] {
|
|
133
|
+
--spectrum-actionbutton-background-color-default: var(--accent);
|
|
134
|
+
--spectrum-actionbutton-content-color-default: var(--bg);
|
|
135
|
+
background: var(--accent);
|
|
136
|
+
color: var(--bg);
|
|
137
|
+
}
|
|
138
|
+
.pc-export {
|
|
139
|
+
flex-shrink: 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/* The rendering-context popover: one column of labelled groups over a footer that leaves for the
|
|
143
|
+
definition site. This control only SELECTS (§2 principle 5) — nothing in it defines a
|
|
144
|
+
breakpoint, a scheme or a feature query. */
|
|
145
|
+
.pc-ctx {
|
|
146
|
+
display: flex;
|
|
147
|
+
flex-direction: column;
|
|
148
|
+
gap: 10px;
|
|
149
|
+
padding: 10px 12px;
|
|
150
|
+
min-width: 240px;
|
|
151
|
+
max-width: 340px;
|
|
152
|
+
}
|
|
153
|
+
.pc-ctx-group {
|
|
154
|
+
display: flex;
|
|
155
|
+
flex-direction: column;
|
|
156
|
+
gap: 4px;
|
|
157
|
+
}
|
|
158
|
+
.pc-ctx-label {
|
|
159
|
+
font-size: var(--spectrum-font-size-50, 11px);
|
|
160
|
+
text-transform: uppercase;
|
|
161
|
+
letter-spacing: 0.04em;
|
|
162
|
+
color: var(--fg-dim);
|
|
163
|
+
}
|
|
164
|
+
/* The fields, stacked. They were a row on the bar capped at 140px; in the popover each takes the
|
|
165
|
+
full column so a route value or a JSON test prop is readable while you type it. */
|
|
166
|
+
.pc-ctx-group sp-picker.pc-param,
|
|
167
|
+
.pc-ctx-group sp-textfield.pc-prop {
|
|
168
|
+
display: block;
|
|
169
|
+
width: 100%;
|
|
170
|
+
max-width: 100%;
|
|
171
|
+
}
|
|
172
|
+
.pc-context-popover {
|
|
173
|
+
max-width: 360px;
|
|
174
|
+
}
|
|
175
|
+
.pc-sizes {
|
|
176
|
+
flex-wrap: wrap;
|
|
177
|
+
}
|
|
178
|
+
.pc-layout-switch {
|
|
179
|
+
margin: 0;
|
|
180
|
+
}
|
|
181
|
+
.pc-ctx-manage {
|
|
182
|
+
align-self: flex-start;
|
|
183
|
+
padding: 2px 0;
|
|
184
|
+
border: none;
|
|
185
|
+
background: none;
|
|
186
|
+
color: var(--accent, #3b82f6);
|
|
187
|
+
font-size: var(--spectrum-font-size-75, 12px);
|
|
188
|
+
cursor: pointer;
|
|
189
|
+
}
|
|
190
|
+
.pc-ctx-manage:hover {
|
|
191
|
+
text-decoration: underline;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/* ─── ⑩ The floating zoom pod ──────────────────
|
|
195
|
+
Bottom-right of the pane, over the stage — a viewport control, which is not a document axis and
|
|
196
|
+
so never belonged in a band beside one. */
|
|
197
|
+
.pane-zoom {
|
|
198
|
+
align-self: flex-end;
|
|
199
|
+
margin: 0 12px 12px 0;
|
|
200
|
+
padding: 2px 4px;
|
|
201
|
+
border: 1px solid var(--border);
|
|
202
|
+
border-radius: 6px;
|
|
203
|
+
background: var(--bg);
|
|
204
|
+
box-shadow: 0 2px 8px rgb(0 0 0 / 25%);
|
|
205
|
+
}
|
|
206
|
+
.pane-zoom .pc-zoom-label {
|
|
207
|
+
min-width: 48px;
|
|
208
|
+
font-family: var(--font-mono);
|
|
209
|
+
}
|
|
210
|
+
.pane-zoom .pc-fit {
|
|
211
|
+
max-width: 120px;
|
|
212
|
+
}
|
|
213
|
+
.source-editor {
|
|
214
|
+
flex: 1;
|
|
215
|
+
min-height: 0;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/* ─── Pane tab strips ──────────────────────────
|
|
219
|
+
shell.css owns the base `.tab-strip*` rules; these are the states the pane model adds — a pinned
|
|
220
|
+
head, an italic preview chip, the drag ghost, and the unfocused pane's dimmed strip. */
|
|
221
|
+
.tab-strip-row:not(.focused) .tab-strip-tab.active {
|
|
222
|
+
border-bottom-color: var(--border);
|
|
223
|
+
}
|
|
224
|
+
.tab-strip-tab.preview .tab-strip-label {
|
|
225
|
+
font-style: italic;
|
|
226
|
+
}
|
|
227
|
+
.tab-strip-tab.dragging {
|
|
228
|
+
opacity: 0.4;
|
|
229
|
+
}
|
|
230
|
+
.tab-strip-pin {
|
|
231
|
+
display: flex;
|
|
232
|
+
align-items: center;
|
|
233
|
+
justify-content: center;
|
|
234
|
+
width: 16px;
|
|
235
|
+
height: 16px;
|
|
236
|
+
padding: 0;
|
|
237
|
+
border: none;
|
|
238
|
+
background: none;
|
|
239
|
+
color: var(--fg-dim);
|
|
240
|
+
font-size: var(--spectrum-font-size-75, 12px);
|
|
241
|
+
line-height: 1;
|
|
242
|
+
border-radius: var(--radius);
|
|
243
|
+
cursor: pointer;
|
|
244
|
+
opacity: 0;
|
|
245
|
+
}
|
|
246
|
+
.tab-strip-tab:hover .tab-strip-pin,
|
|
247
|
+
.tab-strip-tab.active .tab-strip-pin,
|
|
248
|
+
.tab-strip-tab.pinned .tab-strip-pin {
|
|
249
|
+
opacity: 1;
|
|
250
|
+
}
|
|
251
|
+
.tab-strip-pin:hover {
|
|
252
|
+
background: var(--hover-bg);
|
|
253
|
+
color: var(--fg);
|
|
254
|
+
}
|
|
255
|
+
.tab-strip-tab.pinned .tab-strip-pin {
|
|
256
|
+
color: var(--accent);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* ─── Document Header card ─────────────────────
|
|
260
|
+
Region ⑧: the artefact's own header, drawn IN the stage. `#frontmatter-panel` — a fourth
|
|
261
|
+
full-width band up to 40vh that appeared and vanished as a side effect of the canvas mode — is
|
|
262
|
+
gone, grid row and all.
|
|
263
|
+
|
|
264
|
+
Two placements, because the stage draws a page two ways. In Edit the card is `in-column`: a block
|
|
265
|
+
of the document's own centered column that scrolls with it, so it is part of the artefact rather
|
|
266
|
+
than a strip above it. In Design the artboards are under a pan/zoom transform, and a form drawn
|
|
267
|
+
at 40% is a picture of a form — so the card is `pinned` above the surface at 1:1, and that is the
|
|
268
|
+
one placement that still needs a cap. */
|
|
269
|
+
.doc-header-host[hidden] {
|
|
270
|
+
display: none;
|
|
271
|
+
}
|
|
272
|
+
.doc-header-host.in-column {
|
|
273
|
+
display: block;
|
|
274
|
+
padding-bottom: 16px;
|
|
275
|
+
}
|
|
276
|
+
.doc-header-host.pinned {
|
|
277
|
+
flex-shrink: 0;
|
|
278
|
+
max-height: 40vh;
|
|
279
|
+
overflow-y: auto;
|
|
280
|
+
}
|
|
281
|
+
.doc-header {
|
|
282
|
+
display: flex;
|
|
283
|
+
flex-direction: column;
|
|
284
|
+
padding: 8px 12px 10px;
|
|
285
|
+
background: var(--bg-panel);
|
|
286
|
+
border: 1px solid var(--border);
|
|
287
|
+
border-radius: var(--radius);
|
|
288
|
+
}
|
|
289
|
+
.doc-header-host.pinned .doc-header {
|
|
290
|
+
border-width: 0 0 1px;
|
|
291
|
+
border-radius: 0;
|
|
292
|
+
}
|
|
293
|
+
.doc-header-bar {
|
|
294
|
+
display: flex;
|
|
295
|
+
align-items: baseline;
|
|
296
|
+
gap: 8px;
|
|
297
|
+
padding-bottom: 6px;
|
|
298
|
+
}
|
|
299
|
+
.doc-header-title {
|
|
300
|
+
font-size: var(--spectrum-font-size-50, 11px);
|
|
301
|
+
font-weight: 700;
|
|
302
|
+
letter-spacing: 0.06em;
|
|
303
|
+
text-transform: uppercase;
|
|
304
|
+
color: var(--fg-dim);
|
|
305
|
+
}
|
|
306
|
+
.doc-header-route {
|
|
307
|
+
font-family: var(--font-mono);
|
|
308
|
+
font-size: var(--spectrum-font-size-50, 11px);
|
|
309
|
+
color: var(--fg-dim);
|
|
310
|
+
}
|
|
311
|
+
.doc-header-body {
|
|
312
|
+
display: flex;
|
|
313
|
+
flex-direction: column;
|
|
314
|
+
gap: 2px;
|
|
315
|
+
}
|
|
316
|
+
/* The card's door to Search appearance. It sits where the SEO disclosure used to, above Raw head
|
|
317
|
+
tags — same place in the reading order, one line instead of a block that could grow taller than
|
|
318
|
+
the document it describes. */
|
|
319
|
+
.doc-header-seo {
|
|
320
|
+
display: flex;
|
|
321
|
+
padding: 2px 0;
|
|
322
|
+
}
|
|
323
|
+
.doc-header-seo-btn {
|
|
324
|
+
font-size: var(--spectrum-font-size-50, 11px);
|
|
325
|
+
}
|
|
326
|
+
.doc-header-disclosure > summary {
|
|
327
|
+
padding: 4px 0;
|
|
328
|
+
font-size: var(--spectrum-font-size-50, 11px);
|
|
329
|
+
color: var(--fg-dim);
|
|
330
|
+
cursor: pointer;
|
|
331
|
+
}
|
|
332
|
+
.doc-header-disclosure > summary:hover {
|
|
333
|
+
color: var(--fg);
|
|
334
|
+
}
|
|
335
|
+
.doc-header-empty {
|
|
336
|
+
margin: 0;
|
|
337
|
+
padding: 4px 0;
|
|
338
|
+
font-size: var(--spectrum-font-size-50, 11px);
|
|
339
|
+
color: var(--fg-dim);
|
|
340
|
+
}
|
|
341
|
+
.doc-header-raw {
|
|
342
|
+
display: flex;
|
|
343
|
+
flex-direction: column;
|
|
344
|
+
gap: 2px;
|
|
345
|
+
margin: 0;
|
|
346
|
+
padding: 0;
|
|
347
|
+
list-style: none;
|
|
348
|
+
}
|
|
349
|
+
.doc-header-raw li {
|
|
350
|
+
display: flex;
|
|
351
|
+
gap: 8px;
|
|
352
|
+
min-width: 0;
|
|
353
|
+
font-size: var(--spectrum-font-size-50, 11px);
|
|
354
|
+
}
|
|
355
|
+
.doc-header-raw li span {
|
|
356
|
+
overflow: hidden;
|
|
357
|
+
text-overflow: ellipsis;
|
|
358
|
+
white-space: nowrap;
|
|
359
|
+
color: var(--fg-dim);
|
|
360
|
+
}
|
|
361
|
+
/* ─── Content edit mode canvas ─────────────── */
|
|
362
|
+
.content-edit-canvas {
|
|
363
|
+
width: 100%;
|
|
364
|
+
height: 100%;
|
|
365
|
+
overflow-y: auto;
|
|
366
|
+
overflow-x: hidden;
|
|
367
|
+
display: flex;
|
|
368
|
+
justify-content: center;
|
|
369
|
+
padding: 32px 0;
|
|
370
|
+
}
|
|
371
|
+
.content-edit-column {
|
|
372
|
+
width: 100%;
|
|
373
|
+
min-height: 100%;
|
|
374
|
+
}
|
|
375
|
+
/* A content PAGE fills the viewport (a document-like surface you can click into below the
|
|
376
|
+
text). A component DEFINITION is a fragment — flooring its column to the viewport and letting
|
|
377
|
+
the flex parent vertical-stretch it leaves dead scrollable space below a short component.
|
|
378
|
+
`is-component` (set by renderCanvas when the doc root is a custom element) makes the column
|
|
379
|
+
hug its iframe and sit at the top instead. */
|
|
380
|
+
.content-edit-column.is-component {
|
|
381
|
+
min-height: 0;
|
|
382
|
+
align-self: flex-start;
|
|
383
|
+
}
|
|
384
|
+
.content-edit-column .canvas-panel.full-width {
|
|
385
|
+
flex: 1;
|
|
386
|
+
min-width: 0;
|
|
387
|
+
}
|
|
388
|
+
.content-edit-column .canvas-panel-viewport {
|
|
389
|
+
border: none;
|
|
390
|
+
background: transparent;
|
|
391
|
+
}
|
|
392
|
+
.function-editor-header {
|
|
393
|
+
display: flex;
|
|
394
|
+
align-items: center;
|
|
395
|
+
justify-content: space-between;
|
|
396
|
+
padding: 4px 8px;
|
|
397
|
+
background: var(--bg-panel);
|
|
398
|
+
border-bottom: 1px solid var(--border);
|
|
399
|
+
font-size: var(--spectrum-font-size-75, 12px);
|
|
400
|
+
color: var(--fg);
|
|
401
|
+
font-family: var(--font-mono);
|
|
402
|
+
}
|
|
403
|
+
.canvas-panel-header {
|
|
404
|
+
padding: 4px 8px;
|
|
405
|
+
font-size: var(--spectrum-font-size-50, 11px);
|
|
406
|
+
color: var(--fg-dim);
|
|
407
|
+
background: var(--bg-panel);
|
|
408
|
+
border: 1px solid var(--border);
|
|
409
|
+
border-bottom: none;
|
|
410
|
+
border-radius: var(--radius) var(--radius) 0 0;
|
|
411
|
+
text-align: center;
|
|
412
|
+
cursor: pointer;
|
|
413
|
+
user-select: none;
|
|
414
|
+
font-family: var(--font-mono);
|
|
415
|
+
}
|
|
416
|
+
.canvas-panel-header.active {
|
|
417
|
+
color: var(--accent);
|
|
418
|
+
border-color: var(--accent);
|
|
419
|
+
}
|
|
420
|
+
.canvas-panel-viewport {
|
|
421
|
+
position: relative;
|
|
422
|
+
background: var(--spectrum-white, #fff);
|
|
423
|
+
border: 1px solid var(--border);
|
|
424
|
+
/* The viewport is a light document surface, so pin a light color-scheme
|
|
425
|
+
for native form controls and scrollbars rendered inside it. */
|
|
426
|
+
color-scheme: light;
|
|
427
|
+
}
|
|
428
|
+
.canvas-panel-header.active + .canvas-panel-viewport {
|
|
429
|
+
border-color: var(--accent);
|
|
430
|
+
}
|
|
431
|
+
.canvas-panel-canvas {
|
|
432
|
+
isolation: isolate;
|
|
433
|
+
}
|
|
434
|
+
.canvas-panel-canvas * {
|
|
435
|
+
cursor: default;
|
|
436
|
+
}
|
|
437
|
+
.canvas-panel-canvas slot:empty {
|
|
438
|
+
display: block;
|
|
439
|
+
min-height: 3rem;
|
|
440
|
+
border: 2px dashed var(--spectrum-gray-400, #999);
|
|
441
|
+
border-radius: var(--radius);
|
|
442
|
+
position: relative;
|
|
443
|
+
background: repeating-linear-gradient(
|
|
444
|
+
45deg,
|
|
445
|
+
transparent,
|
|
446
|
+
transparent 10px,
|
|
447
|
+
rgba(128, 128, 128, 0.03) 10px,
|
|
448
|
+
rgba(128, 128, 128, 0.03) 20px
|
|
449
|
+
);
|
|
450
|
+
}
|
|
451
|
+
.canvas-panel-canvas slot:empty::before {
|
|
452
|
+
content: "slot";
|
|
453
|
+
position: absolute;
|
|
454
|
+
top: 50%;
|
|
455
|
+
left: 50%;
|
|
456
|
+
transform: translate(-50%, -50%);
|
|
457
|
+
font-size: 0.75rem;
|
|
458
|
+
color: var(--spectrum-gray-500, #888);
|
|
459
|
+
font-family: var(--font-mono);
|
|
460
|
+
pointer-events: none;
|
|
461
|
+
}
|
|
462
|
+
/* Single-canvas fallback (no $media) */
|
|
463
|
+
.canvas-panel.full-width {
|
|
464
|
+
min-width: 0;
|
|
465
|
+
}
|
|
466
|
+
/* ─── Preview stage ────────────────────────────
|
|
467
|
+
Preview is the fidelity view: one frame, sized to the pane, scrolling its
|
|
468
|
+
own document so sticky positioning, scroll-driven animation and
|
|
469
|
+
IntersectionObserver reveals behave as they will in production. That means
|
|
470
|
+
no panzoom-wrap and no content-height growth — so every box between the
|
|
471
|
+
stage and the iframe needs a definite height for the frame's `height:100%`
|
|
472
|
+
to resolve against, and the artboard chrome (border, page surface) is
|
|
473
|
+
dropped: this is the page, not a specimen of it. */
|
|
474
|
+
/* Centred, because the stage is now as wide as the chosen breakpoint rather than the pane: a 640px
|
|
475
|
+
preview pinned to the left edge of a 1400px pane reads as a broken layout rather than a phone. */
|
|
476
|
+
.preview-stage {
|
|
477
|
+
display: flex;
|
|
478
|
+
width: 100%;
|
|
479
|
+
height: 100%;
|
|
480
|
+
margin: 0 auto;
|
|
481
|
+
}
|
|
482
|
+
.preview-stage .canvas-panel {
|
|
483
|
+
flex: 1;
|
|
484
|
+
min-width: 0;
|
|
485
|
+
height: 100%;
|
|
486
|
+
}
|
|
487
|
+
.preview-stage .canvas-panel-viewport {
|
|
488
|
+
flex: 1;
|
|
489
|
+
height: 100%;
|
|
490
|
+
border: none;
|
|
491
|
+
}
|
|
492
|
+
.preview-stage .canvas-panel-canvas {
|
|
493
|
+
height: 100%;
|
|
494
|
+
}
|
|
495
|
+
.overlay-box {
|
|
496
|
+
position: absolute;
|
|
497
|
+
pointer-events: none;
|
|
498
|
+
}
|
|
499
|
+
.overlay-selection {
|
|
500
|
+
border: 2px solid var(--accent);
|
|
501
|
+
}
|
|
502
|
+
.overlay-hover {
|
|
503
|
+
border: 1px solid var(--accent-50);
|
|
504
|
+
}
|
|
505
|
+
/* A container only — its children are absolutely positioned against the overlay root, so it must
|
|
506
|
+
not introduce a box of its own between them and it. */
|
|
507
|
+
.overlay-coselection-group {
|
|
508
|
+
display: contents;
|
|
509
|
+
}
|
|
510
|
+
/* The other members of a multi-selection (§6.5). Same accent, thinner: one box is the primary —
|
|
511
|
+
what the Inspector, the block action bar and the status bar address — and the rest are along for
|
|
512
|
+
the batch. A selection of one draws no co-selection boxes at all. */
|
|
513
|
+
.overlay-coselection {
|
|
514
|
+
border-width: 1px;
|
|
515
|
+
border-style: dashed;
|
|
516
|
+
}
|
|
517
|
+
/* Layout-chrome selection: the author clicked a header/footer the LAYOUT file contributes, not
|
|
518
|
+
page content. Purple + dashed says "selected, but not yours to edit here" — it must never read
|
|
519
|
+
as the ordinary accent-solid selection, because Backspace and typing do not apply to it.
|
|
520
|
+
|
|
521
|
+
This is the PARENT half of a two-realm affordance. The always-on treatment — the dimmed region
|
|
522
|
+
and its `LAYOUT · layouts/base.json` chip — cannot live here: layout nodes are inside the
|
|
523
|
+
cross-origin canvas iframe, so their rules ship in the CSS string in `canvas/iframe-render.ts`
|
|
524
|
+
(EDIT_PLACEHOLDER_CSS), a separate document. These two classes style the parent-drawn selection
|
|
525
|
+
overlay, which floats above the iframe in canvas space. */
|
|
526
|
+
.overlay-layout {
|
|
527
|
+
border-style: dashed !important;
|
|
528
|
+
border-color: var(--spectrum-purple-600, #9256d9) !important;
|
|
529
|
+
}
|
|
530
|
+
.overlay-layout-badge {
|
|
531
|
+
position: absolute;
|
|
532
|
+
top: -16px;
|
|
533
|
+
left: 0;
|
|
534
|
+
max-width: 100%;
|
|
535
|
+
overflow: hidden;
|
|
536
|
+
font-size: 9px;
|
|
537
|
+
padding: 1px 5px;
|
|
538
|
+
background: var(--spectrum-purple-600, #9256d9);
|
|
539
|
+
color: white;
|
|
540
|
+
border-radius: var(--radius);
|
|
541
|
+
text-transform: uppercase;
|
|
542
|
+
letter-spacing: 0.5px;
|
|
543
|
+
white-space: nowrap;
|
|
544
|
+
text-overflow: ellipsis;
|
|
545
|
+
pointer-events: none;
|
|
546
|
+
}
|
|
547
|
+
.overlay-label {
|
|
548
|
+
position: absolute;
|
|
549
|
+
top: -20px;
|
|
550
|
+
left: -2px;
|
|
551
|
+
padding: 1px 5px;
|
|
552
|
+
font-size: 10px;
|
|
553
|
+
background: var(--accent);
|
|
554
|
+
color: var(--accent-fg);
|
|
555
|
+
border-radius: var(--spectrum-corner-radius-75) var(--spectrum-corner-radius-75) 0 0;
|
|
556
|
+
white-space: nowrap;
|
|
557
|
+
pointer-events: none;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
/* ─── Unified block action bar ─────────────── */
|
|
561
|
+
.block-action-bar {
|
|
562
|
+
position: fixed;
|
|
563
|
+
pointer-events: auto;
|
|
564
|
+
display: flex;
|
|
565
|
+
align-items: center;
|
|
566
|
+
gap: 2px;
|
|
567
|
+
background: var(--bg-panel);
|
|
568
|
+
border: 1px solid var(--border);
|
|
569
|
+
border-radius: var(--radius);
|
|
570
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
|
|
571
|
+
padding: 2px 4px;
|
|
572
|
+
white-space: nowrap;
|
|
573
|
+
z-index: 100;
|
|
574
|
+
}
|
|
575
|
+
.block-action-bar .bar-tag {
|
|
576
|
+
font-size: 10px;
|
|
577
|
+
padding: 0 4px;
|
|
578
|
+
border-radius: var(--spectrum-corner-radius-75, 2px);
|
|
579
|
+
color: var(--accent-fg);
|
|
580
|
+
background: var(--tag);
|
|
581
|
+
max-width: 140px;
|
|
582
|
+
overflow: hidden;
|
|
583
|
+
text-overflow: ellipsis;
|
|
584
|
+
}
|
|
585
|
+
.block-action-bar .bar-tag--interactive {
|
|
586
|
+
cursor: pointer;
|
|
587
|
+
}
|
|
588
|
+
.block-action-bar .bar-tag--interactive:hover {
|
|
589
|
+
background: var(--accent);
|
|
590
|
+
color: var(--bg);
|
|
591
|
+
}
|
|
592
|
+
.block-action-bar .bar-drag-handle {
|
|
593
|
+
cursor: grab;
|
|
594
|
+
font-size: var(--spectrum-font-size-100, 14px);
|
|
595
|
+
padding: 0 4px;
|
|
596
|
+
opacity: 0.7;
|
|
597
|
+
user-select: none;
|
|
598
|
+
display: inline-flex;
|
|
599
|
+
align-items: center;
|
|
600
|
+
line-height: 1;
|
|
601
|
+
transform: translateY(1px);
|
|
602
|
+
}
|
|
603
|
+
.block-action-bar .bar-drag-handle:hover {
|
|
604
|
+
opacity: 1;
|
|
605
|
+
}
|
|
606
|
+
.block-action-bar .bar-drag-handle:active {
|
|
607
|
+
cursor: grabbing;
|
|
608
|
+
}
|
|
609
|
+
/* ONE shape (studio-ui-guidelines §8.6): the handle is greyed on the document root, never removed —
|
|
610
|
+
a toolbar whose controls move under the cursor is worse than one with a dead affordance. */
|
|
611
|
+
.block-action-bar .bar-drag-handle--disabled {
|
|
612
|
+
cursor: default;
|
|
613
|
+
opacity: 0.3;
|
|
614
|
+
}
|
|
615
|
+
.block-action-bar sp-divider {
|
|
616
|
+
height: 20px;
|
|
617
|
+
margin: 0 2px;
|
|
618
|
+
}
|
|
619
|
+
/* One rule for every registry-rendered verb; `--danger` is the `destructive: true` half. */
|
|
620
|
+
.block-action-bar .bar-cmd,
|
|
621
|
+
.block-action-bar .bar-overflow {
|
|
622
|
+
flex-shrink: 0;
|
|
623
|
+
}
|
|
624
|
+
.block-action-bar .bar-cmd--danger {
|
|
625
|
+
color: var(--danger);
|
|
626
|
+
}
|
|
627
|
+
/* A record with no `icon` draws its title instead of a blank button. */
|
|
628
|
+
.block-action-bar .cmd-label {
|
|
629
|
+
font-size: var(--spectrum-font-size-50, 11px);
|
|
630
|
+
padding: 0 2px;
|
|
631
|
+
}
|
|
632
|
+
.block-action-bar [data-toolbar-item]:focus-visible {
|
|
633
|
+
outline: 2px solid var(--accent);
|
|
634
|
+
outline-offset: 1px;
|
|
635
|
+
}
|
|
636
|
+
/* The `⋮` menu: shared by the bar and the Outline rows, so it lives with the bar that owns it. */
|
|
637
|
+
.bar-overflow-menu .cmd-chord {
|
|
638
|
+
font-family: var(--font-mono);
|
|
639
|
+
font-size: var(--spectrum-font-size-50, 11px);
|
|
640
|
+
color: var(--fg-dim);
|
|
641
|
+
padding-left: 12px;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
.link-popover {
|
|
645
|
+
display: flex;
|
|
646
|
+
gap: 4px;
|
|
647
|
+
align-items: center;
|
|
648
|
+
padding: 8px;
|
|
649
|
+
background: var(--bg-panel);
|
|
650
|
+
border: 1px solid var(--border);
|
|
651
|
+
border-radius: var(--radius);
|
|
652
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
|
|
653
|
+
}
|