@jxsuite/studio 2.0.0 → 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-0hzentwq.js → components-2bpqp4mq.js} +5 -7
- package/dist/chunks/{components-0hzentwq.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-2c188n41.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-97qcgvdn.js → studio-adn0z1k3.js} +14 -8
- package/dist/chunks/{studio-97qcgvdn.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-hhj92gcr.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-ygzav7z5.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-n9zmpxjg.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 +23711 -35185
- 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 +34 -9
- package/src/new-project/location-fields.ts +9 -1
- package/src/new-project/new-project-modal.ts +270 -262
- 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 -120
- 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 +75 -2
- 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 +113 -0
- 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-qct0gt8f.js +0 -531
- package/dist/chunks/extension-sections-qct0gt8f.js.map +0 -12
- package/dist/chunks/files-02zn5y24.js +0 -50
- package/dist/chunks/files-02zn5y24.js.map +0 -9
- package/dist/chunks/git-panel-mbb0y0hz.js +0 -28
- package/dist/chunks/git-panel-mbb0y0hz.js.map +0 -9
- package/dist/chunks/layers-panel-9qekmqk1.js +0 -26
- package/dist/chunks/layers-panel-9qekmqk1.js.map +0 -9
- package/dist/chunks/settings-modal-gj0hrah4.js +0 -29
- package/dist/chunks/settings-modal-gj0hrah4.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-4k0m4fmp.js.map +0 -13
- package/dist/chunks/studio-568nx4t5.js +0 -469
- package/dist/chunks/studio-568nx4t5.js.map +0 -14
- package/dist/chunks/studio-9smfzqhc.js +0 -19
- package/dist/chunks/studio-9smfzqhc.js.map +0 -10
- package/dist/chunks/studio-asvf0j9e.js +0 -429
- package/dist/chunks/studio-asvf0j9e.js.map +0 -13
- package/dist/chunks/studio-d77qm3pk.js +0 -3427
- package/dist/chunks/studio-d77qm3pk.js.map +0 -26
- package/dist/chunks/studio-j6gqyjf4.js +0 -1854
- package/dist/chunks/studio-j6gqyjf4.js.map +0 -18
- package/dist/chunks/studio-n9zmpxjg.js.map +0 -115
- package/dist/chunks/studio-qkvt37c0.js.map +0 -9
- package/dist/chunks/studio-rq0vxb19.js +0 -3744
- package/dist/chunks/studio-rq0vxb19.js.map +0 -22
- package/dist/chunks/studio-wd6ewdvd.js +0 -853
- package/dist/chunks/studio-wd6ewdvd.js.map +0 -12
- 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-ygzav7z5.js.map +0 -46
- package/dist/chunks/studio-zmy7241e.js +0 -399
- package/dist/chunks/studio-zmy7241e.js.map +0 -12
- 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-2c188n41.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-hhj92gcr.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
|
@@ -1,90 +1,235 @@
|
|
|
1
1
|
/// <reference lib="dom" />
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Overview — the project's identity: name, description, production URL, favicon, global styles.
|
|
4
|
+
*
|
|
5
|
+
* It has lost a field twice for the same reason. Breakpoints were one of **four** places `$media`
|
|
6
|
+
* could be defined (plan §4.2) and this was the only one that named them; they live in Contexts
|
|
7
|
+
* now, beside the colour schemes and feature queries they share a map with. The platform adapter
|
|
8
|
+
* has moved to Deploy in P6.2, because §2 principle 5 says a definition site is a LEVEL, not a
|
|
9
|
+
* field on some other level's form — and "what this site is" and "where it ships" are two levels.
|
|
10
|
+
*/
|
|
3
11
|
|
|
4
12
|
import { html, render as litRender, nothing } from "lit-html";
|
|
5
|
-
import {
|
|
13
|
+
import { live } from "lit-html/directives/live.js";
|
|
14
|
+
import { errorMessage } from "@jxsuite/schema/parse";
|
|
15
|
+
import { projectState, updateUi } from "../store";
|
|
6
16
|
import { updateSiteConfig } from "../site-context";
|
|
17
|
+
import { tabOfContainer } from "../canvas/canvas-surface";
|
|
7
18
|
import { getPlatform } from "../platform";
|
|
8
|
-
import { openFileInTab } from "../files/files";
|
|
9
19
|
|
|
10
|
-
import type { ProjectConfig } from "@jxsuite/schema/types";
|
|
20
|
+
import type { JxHeadEntry, ProjectConfig } from "@jxsuite/schema/types";
|
|
21
|
+
|
|
22
|
+
/** Which control an error belongs under. `"section"` puts it at the top of the section. */
|
|
23
|
+
type ErrorField = "name" | "description" | "url" | "favicon" | "section";
|
|
24
|
+
|
|
25
|
+
interface GeneralError {
|
|
26
|
+
field: ErrorField;
|
|
27
|
+
message: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The last failed write, per rendered section.
|
|
32
|
+
*
|
|
33
|
+
* A `project.json` write can fail — the disk is full, the file is read-only, the desktop RPC is
|
|
34
|
+
* gone — and every other settings editor in the tree drops that rejection on the floor with a bare
|
|
35
|
+
* `void updateSiteConfig(...)`, so the field silently snaps back to its old value. Every write in
|
|
36
|
+
* this section goes through {@link persist} instead, which parks the failure here and re-renders so
|
|
37
|
+
* the user sees it. Keyed by container so two mounted copies (and two tests) never share a
|
|
38
|
+
* message.
|
|
39
|
+
*/
|
|
40
|
+
const errors = new WeakMap<HTMLElement, GeneralError>();
|
|
41
|
+
|
|
42
|
+
// ─── Site description ($head meta) ───────────────────────────────────────────
|
|
43
|
+
|
|
44
|
+
/** True for the `<meta name="description">` entry the site description lives in. */
|
|
45
|
+
function isDescriptionMeta(entry: JxHeadEntry): boolean {
|
|
46
|
+
return entry.tagName === "meta" && entry.attributes?.name === "description";
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The site description. It is not a top-level `project.json` key — the composed project schema is
|
|
51
|
+
* closed (`unevaluatedProperties: false`) — so it lives where `@jxsuite/create` writes it and where
|
|
52
|
+
* the browser reads it: the `<meta name="description">` entry of `$head`.
|
|
53
|
+
*/
|
|
54
|
+
function readDescription(config: ProjectConfig): string {
|
|
55
|
+
const entry = (config.$head ?? []).find((e) => isDescriptionMeta(e));
|
|
56
|
+
return typeof entry?.attributes?.content === "string" ? entry.attributes.content : "";
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** `$head` with the description meta upserted (or dropped, when cleared). */
|
|
60
|
+
function headWithDescription(head: JxHeadEntry[], text: string): JxHeadEntry[] {
|
|
61
|
+
const trimmed = text.trim();
|
|
62
|
+
if (!head.some((e) => isDescriptionMeta(e))) {
|
|
63
|
+
return trimmed
|
|
64
|
+
? [...head, { attributes: { content: trimmed, name: "description" }, tagName: "meta" }]
|
|
65
|
+
: [...head];
|
|
66
|
+
}
|
|
67
|
+
if (!trimmed) {
|
|
68
|
+
return head.filter((entry) => !isDescriptionMeta(entry));
|
|
69
|
+
}
|
|
70
|
+
return head.map((entry) =>
|
|
71
|
+
isDescriptionMeta(entry)
|
|
72
|
+
? { ...entry, attributes: { ...entry.attributes, content: trimmed } }
|
|
73
|
+
: entry,
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The patch that _removes_ `url`. `undefined` survives the object spread inside `updateSiteConfig`
|
|
79
|
+
* and `JSON.stringify` then drops the key, so clearing the field clears the setting instead of
|
|
80
|
+
* persisting an empty string the build would have to special-case (`site-build.ts` gates the
|
|
81
|
+
* sitemap on `Boolean(url)` but still forwards `""` into the render context). The cast is the price
|
|
82
|
+
* of `exactOptionalPropertyTypes` — `ProjectConfig["url"]` is `string`, never `string |
|
|
83
|
+
* undefined`.
|
|
84
|
+
*/
|
|
85
|
+
const CLEAR_URL = { url: undefined } as unknown as Partial<ProjectConfig>;
|
|
86
|
+
|
|
87
|
+
// ─── Render ──────────────────────────────────────────────────────────────────
|
|
11
88
|
|
|
12
89
|
/** @param {HTMLElement} container */
|
|
13
90
|
export function renderGeneralSettings(container: HTMLElement) {
|
|
14
91
|
const config = (projectState?.projectConfig || {}) as ProjectConfig;
|
|
92
|
+
const shown = errors.get(container);
|
|
15
93
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
renderGeneralSettings(container);
|
|
29
|
-
});
|
|
30
|
-
input.click();
|
|
94
|
+
/** Persist a patch, surfacing the rejection instead of swallowing it. */
|
|
95
|
+
const persist = async (patch: Partial<ProjectConfig>, field: ErrorField = "section") => {
|
|
96
|
+
try {
|
|
97
|
+
await updateSiteConfig(patch);
|
|
98
|
+
errors.delete(container);
|
|
99
|
+
} catch (error) {
|
|
100
|
+
errors.set(container, {
|
|
101
|
+
field,
|
|
102
|
+
message: `Could not save project.json — ${errorMessage(error)}`,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
renderGeneralSettings(container);
|
|
31
106
|
};
|
|
32
107
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
108
|
+
/** Park a validation failure under `field` without writing anything. */
|
|
109
|
+
const reject = (field: ErrorField, message: string) => {
|
|
110
|
+
errors.set(container, { field, message });
|
|
111
|
+
renderGeneralSettings(container);
|
|
37
112
|
};
|
|
38
113
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
};
|
|
114
|
+
/** The error line for one control, if that is where the current failure belongs. */
|
|
115
|
+
const errorFor = (field: ErrorField) =>
|
|
116
|
+
shown?.field === field
|
|
117
|
+
? html`<p class="settings-field-error" role="alert">${shown.message}</p>`
|
|
118
|
+
: nothing;
|
|
45
119
|
|
|
46
|
-
// ───
|
|
120
|
+
// ─── Site identity ─────────────────────────────────────────────────────────
|
|
47
121
|
|
|
48
|
-
const
|
|
49
|
-
|
|
122
|
+
const onNameChange = (e: Event) => {
|
|
123
|
+
const name = (e.target as HTMLInputElement).value.trim();
|
|
124
|
+
if (!name) {
|
|
125
|
+
reject("name", "A project name is required.");
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
void persist({ name }, "name");
|
|
129
|
+
};
|
|
50
130
|
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
void
|
|
131
|
+
const onDescriptionChange = (e: Event) => {
|
|
132
|
+
const text = (e.target as HTMLInputElement).value;
|
|
133
|
+
void persist({ $head: headWithDescription(config.$head ?? [], text) }, "description");
|
|
54
134
|
};
|
|
55
135
|
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
136
|
+
const onUrlChange = (e: Event) => {
|
|
137
|
+
const url = (e.target as HTMLInputElement).value.trim();
|
|
138
|
+
if (url && !/^https?:\/\/\S+$/.test(url)) {
|
|
139
|
+
reject("url", "Enter a full address starting with http:// or https://");
|
|
60
140
|
return;
|
|
61
141
|
}
|
|
62
|
-
|
|
63
|
-
for (const [k, v] of Object.entries(media)) {
|
|
64
|
-
updated[k === oldKey ? newKey : k] = v;
|
|
65
|
-
}
|
|
66
|
-
void updateSiteConfig({ $media: updated });
|
|
67
|
-
renderGeneralSettings(container);
|
|
142
|
+
void persist(url ? { url } : CLEAR_URL, "url");
|
|
68
143
|
};
|
|
69
144
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
145
|
+
// ─── Favicon ───────────────────────────────────────────────────────────────
|
|
146
|
+
|
|
147
|
+
const onFaviconUpload = () => {
|
|
148
|
+
const input = document.createElement("input");
|
|
149
|
+
input.type = "file";
|
|
150
|
+
input.accept = "image/*,.ico,.svg";
|
|
151
|
+
input.addEventListener("change", async () => {
|
|
152
|
+
const file = input.files?.[0];
|
|
153
|
+
if (!file) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
await getPlatform().uploadFile("public/favicon.ico", file);
|
|
158
|
+
} catch (error) {
|
|
159
|
+
reject("favicon", `Could not upload the favicon — ${errorMessage(error)}`);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
await persist({ favicon: "/favicon.ico" }, "favicon");
|
|
163
|
+
});
|
|
164
|
+
input.click();
|
|
75
165
|
};
|
|
76
166
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
167
|
+
/*
|
|
168
|
+
* Project Styles is the SAME document in a different editor, so this is a mode switch rather
|
|
169
|
+
* than a navigation. The predecessor closed the settings modal and opened `project.json` in a
|
|
170
|
+
* tab — the configuration IA jumping into the document IA, plan §9.3's own example of the split
|
|
171
|
+
* P6 removes. Nothing closes now, because nothing was covering anything.
|
|
172
|
+
*/
|
|
173
|
+
const onEditGlobalStyles = () => {
|
|
174
|
+
// THIS pane's tab. The Project Settings editor is stage content, so a settings document
|
|
175
|
+
// Open in the side pane used to send the PRIMARY into the Stylebook.
|
|
176
|
+
updateUi(tabOfContainer(container), "canvasMode", "stylebook");
|
|
81
177
|
};
|
|
82
178
|
|
|
83
179
|
const currentFavicon = config.favicon;
|
|
84
180
|
|
|
85
181
|
const tpl = html`
|
|
86
182
|
<div class="settings-section">
|
|
87
|
-
<h3 class="settings-section-title">
|
|
183
|
+
<h3 class="settings-section-title">Overview</h3>
|
|
184
|
+
${errorFor("section")}
|
|
185
|
+
|
|
186
|
+
<div class="settings-field">
|
|
187
|
+
<label class="settings-field-label">Site Name</label>
|
|
188
|
+
<p class="settings-field-desc">
|
|
189
|
+
What this site is called — used in page titles and the project list.
|
|
190
|
+
</p>
|
|
191
|
+
<sp-textfield
|
|
192
|
+
size="s"
|
|
193
|
+
class="settings-site-name"
|
|
194
|
+
placeholder="My Site"
|
|
195
|
+
.value=${live(config.name ?? "")}
|
|
196
|
+
?invalid=${shown?.field === "name"}
|
|
197
|
+
@change=${onNameChange}
|
|
198
|
+
></sp-textfield>
|
|
199
|
+
${errorFor("name")}
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
<div class="settings-field">
|
|
203
|
+
<label class="settings-field-label">Description</label>
|
|
204
|
+
<p class="settings-field-desc">
|
|
205
|
+
One or two sentences about the site. Search engines and link previews show this.
|
|
206
|
+
</p>
|
|
207
|
+
<sp-textfield
|
|
208
|
+
multiline
|
|
209
|
+
size="s"
|
|
210
|
+
class="settings-site-description"
|
|
211
|
+
placeholder="A short description of the site"
|
|
212
|
+
.value=${live(readDescription(config))}
|
|
213
|
+
@change=${onDescriptionChange}
|
|
214
|
+
></sp-textfield>
|
|
215
|
+
${errorFor("description")}
|
|
216
|
+
</div>
|
|
217
|
+
|
|
218
|
+
<div class="settings-field">
|
|
219
|
+
<label class="settings-field-label">Production URL</label>
|
|
220
|
+
<p class="settings-field-desc">
|
|
221
|
+
Where the published site lives. Sitemaps and absolute links are built from it.
|
|
222
|
+
</p>
|
|
223
|
+
<sp-textfield
|
|
224
|
+
size="s"
|
|
225
|
+
class="settings-site-url"
|
|
226
|
+
placeholder="https://example.com"
|
|
227
|
+
.value=${live(config.url ?? "")}
|
|
228
|
+
?invalid=${shown?.field === "url"}
|
|
229
|
+
@change=${onUrlChange}
|
|
230
|
+
></sp-textfield>
|
|
231
|
+
${errorFor("url")}
|
|
232
|
+
</div>
|
|
88
233
|
|
|
89
234
|
<div class="settings-field">
|
|
90
235
|
<label class="settings-field-label">Favicon</label>
|
|
@@ -112,77 +257,15 @@ export function renderGeneralSettings(container: HTMLElement) {
|
|
|
112
257
|
: nothing
|
|
113
258
|
}
|
|
114
259
|
</div>
|
|
260
|
+
${errorFor("favicon")}
|
|
115
261
|
</div>
|
|
116
262
|
|
|
117
263
|
<div class="settings-field">
|
|
118
|
-
<label class="settings-field-label">
|
|
119
|
-
<p class="settings-field-desc">Build adapter for deployment target.</p>
|
|
120
|
-
<sp-picker
|
|
121
|
-
size="s"
|
|
122
|
-
label="Platform Adapter"
|
|
123
|
-
.value=${config.build?.adapter || "static"}
|
|
124
|
-
@change=${onAdapterChange}
|
|
125
|
-
>
|
|
126
|
-
<sp-menu-item value="static">Static</sp-menu-item>
|
|
127
|
-
<sp-menu-item value="bun">Bun</sp-menu-item>
|
|
128
|
-
<sp-menu-item value="node">Node</sp-menu-item>
|
|
129
|
-
<sp-menu-item value="cloudflare-workers">Cloudflare Workers</sp-menu-item>
|
|
130
|
-
<sp-menu-item value="cloudflare-pages">Cloudflare Pages</sp-menu-item>
|
|
131
|
-
</sp-picker>
|
|
132
|
-
</div>
|
|
133
|
-
|
|
134
|
-
<div class="settings-field">
|
|
135
|
-
<label class="settings-field-label">Breakpoints</label>
|
|
264
|
+
<label class="settings-field-label">Global Styles</label>
|
|
136
265
|
<p class="settings-field-desc">
|
|
137
|
-
|
|
266
|
+
Design tokens and the default element styles that apply across every page. Opens Project
|
|
267
|
+
Styles over this same document.
|
|
138
268
|
</p>
|
|
139
|
-
<div class="settings-media-list">
|
|
140
|
-
${mediaEntries.map(([key, value]) => {
|
|
141
|
-
const isBase = key === "--";
|
|
142
|
-
return html`
|
|
143
|
-
<div class="settings-media-row">
|
|
144
|
-
${
|
|
145
|
-
isBase
|
|
146
|
-
? html`<span class="settings-media-name-fixed">Base</span>`
|
|
147
|
-
: html`<sp-textfield
|
|
148
|
-
size="s"
|
|
149
|
-
class="settings-media-name"
|
|
150
|
-
.value=${key.replace(/^--/, "")}
|
|
151
|
-
placeholder="name"
|
|
152
|
-
@change=${onMediaNameChange(key)}
|
|
153
|
-
></sp-textfield>`
|
|
154
|
-
}
|
|
155
|
-
<sp-textfield
|
|
156
|
-
size="s"
|
|
157
|
-
class="settings-media-value"
|
|
158
|
-
.value=${value}
|
|
159
|
-
placeholder=${isBase ? "1280px" : "(max-width: 768px)"}
|
|
160
|
-
@change=${onMediaValueChange(key)}
|
|
161
|
-
></sp-textfield>
|
|
162
|
-
${
|
|
163
|
-
isBase
|
|
164
|
-
? nothing
|
|
165
|
-
: html`<sp-action-button
|
|
166
|
-
size="s"
|
|
167
|
-
quiet
|
|
168
|
-
title="Remove breakpoint"
|
|
169
|
-
@click=${onRemoveBreakpoint(key)}
|
|
170
|
-
>
|
|
171
|
-
×
|
|
172
|
-
</sp-action-button>`
|
|
173
|
-
}
|
|
174
|
-
</div>
|
|
175
|
-
`;
|
|
176
|
-
})}
|
|
177
|
-
</div>
|
|
178
|
-
<sp-action-button size="s" style="margin-top:8px" @click=${onAddBreakpoint}>
|
|
179
|
-
+ Add Breakpoint
|
|
180
|
-
</sp-action-button>
|
|
181
|
-
</div>
|
|
182
|
-
|
|
183
|
-
<div class="settings-field">
|
|
184
|
-
<label class="settings-field-label">Global Styles</label>
|
|
185
|
-
<p class="settings-field-desc">Edit default element styles that apply across all pages.</p>
|
|
186
269
|
<sp-action-button size="s" @click=${onEditGlobalStyles}>
|
|
187
270
|
Edit Global Styles
|
|
188
271
|
</sp-action-button>
|