@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,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
project_schema_default,
|
|
3
3
|
schema_default
|
|
4
|
-
} from "./studio-
|
|
4
|
+
} from "./studio-tr20m8g8.js";
|
|
5
5
|
import {
|
|
6
6
|
__require,
|
|
7
7
|
__toESM
|
|
@@ -72,4 +72,4 @@ async function validateProjectConfig(config) {
|
|
|
72
72
|
export { applyProjectSchemas, resetProjectSchemas, validateDoc, validateProjectConfig };
|
|
73
73
|
|
|
74
74
|
//# debugId=65EFF2410CACDD1964756E2164756E21
|
|
75
|
-
//# sourceMappingURL=studio-
|
|
75
|
+
//# sourceMappingURL=studio-wwseqyw0.js.map
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getCfToken,
|
|
3
|
+
setCfToken
|
|
4
|
+
} from "./studio-a7pzveq1.js";
|
|
5
|
+
import {
|
|
6
|
+
connectDeploy,
|
|
7
|
+
currentDeploy,
|
|
8
|
+
latestDeployment,
|
|
9
|
+
listAccounts,
|
|
10
|
+
noteDeployment,
|
|
11
|
+
platformSupportsPublish,
|
|
12
|
+
writeDeployConfig
|
|
13
|
+
} from "./studio-myje51t3.js";
|
|
14
|
+
import {
|
|
15
|
+
activeRegistry,
|
|
16
|
+
openModal
|
|
17
|
+
} from "./studio-41exgzhq.js";
|
|
18
|
+
import {
|
|
19
|
+
html
|
|
20
|
+
} from "./studio-5x5774ak.js";
|
|
21
|
+
import {
|
|
22
|
+
projectState
|
|
23
|
+
} from "./studio-cjm7fdjf.js";
|
|
24
|
+
import {
|
|
25
|
+
getPlatform
|
|
26
|
+
} from "./studio-sas7mt3k.js";
|
|
27
|
+
|
|
28
|
+
// src/publish/publish-panel.ts
|
|
29
|
+
var PAGES_APP_INSTALL_URL = "https://github.com/apps/cloudflare-pages/installations/new";
|
|
30
|
+
var _handle = null;
|
|
31
|
+
var _connection = "loading";
|
|
32
|
+
var _accounts = [];
|
|
33
|
+
var _deployment = null;
|
|
34
|
+
var _error = "";
|
|
35
|
+
var _busy = false;
|
|
36
|
+
var _replacing = false;
|
|
37
|
+
var _form = { accountId: "", branch: "main", owner: "", projectName: "", repo: "" };
|
|
38
|
+
function currentConfig() {
|
|
39
|
+
return projectState?.projectConfig ?? null;
|
|
40
|
+
}
|
|
41
|
+
function deriveSlug(name) {
|
|
42
|
+
return name.toLowerCase().replaceAll(/[^a-z0-9]+/g, "-").replaceAll(/^-+|-+$/g, "").slice(0, 58) || "site";
|
|
43
|
+
}
|
|
44
|
+
function prefillRepo() {
|
|
45
|
+
const root = getPlatform().projectRoot;
|
|
46
|
+
const match = /^([\w.-]+)\/([\w.-]+)$/.exec(root);
|
|
47
|
+
return match ? { owner: match[1], repo: match[2] } : { owner: "", repo: "" };
|
|
48
|
+
}
|
|
49
|
+
async function loadConnection() {
|
|
50
|
+
_connection = "loading";
|
|
51
|
+
render();
|
|
52
|
+
try {
|
|
53
|
+
_connection = await getPlatform().cfConnection?.() ?? null;
|
|
54
|
+
if (_connection?.connected) {
|
|
55
|
+
_accounts = await listAccounts();
|
|
56
|
+
_form.accountId = _connection.accountId ?? _accounts[0]?.id ?? "";
|
|
57
|
+
const deploy = currentDeploy();
|
|
58
|
+
if (deploy) {
|
|
59
|
+
_deployment = await latestDeployment(deploy);
|
|
60
|
+
noteDeployment(_deployment);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
} catch (error) {
|
|
64
|
+
_connection = null;
|
|
65
|
+
_error = error instanceof Error ? error.message : String(error);
|
|
66
|
+
}
|
|
67
|
+
render();
|
|
68
|
+
}
|
|
69
|
+
async function saveToken(host) {
|
|
70
|
+
const input = host.querySelector("#cf-token-input");
|
|
71
|
+
const value = (input?.value ?? "").trim();
|
|
72
|
+
if (!value) {
|
|
73
|
+
_error = "Paste a token, or use Preferences › Accounts to forget the stored one.";
|
|
74
|
+
render();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
setCfToken(value);
|
|
78
|
+
if (input) {
|
|
79
|
+
input.value = "";
|
|
80
|
+
}
|
|
81
|
+
_replacing = false;
|
|
82
|
+
_error = "";
|
|
83
|
+
await loadConnection();
|
|
84
|
+
}
|
|
85
|
+
function openAccounts() {
|
|
86
|
+
activeRegistry()?.run("app.preferences", { section: "accounts" });
|
|
87
|
+
}
|
|
88
|
+
async function hostedConnect() {
|
|
89
|
+
_busy = true;
|
|
90
|
+
render();
|
|
91
|
+
try {
|
|
92
|
+
await getPlatform().cfConnect?.();
|
|
93
|
+
} catch (error) {
|
|
94
|
+
_error = error instanceof Error ? error.message : String(error);
|
|
95
|
+
}
|
|
96
|
+
_busy = false;
|
|
97
|
+
await loadConnection();
|
|
98
|
+
}
|
|
99
|
+
async function submitConnect() {
|
|
100
|
+
const config = currentConfig();
|
|
101
|
+
if (!config) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (!_form.projectName || !_form.owner || !_form.repo || !_form.accountId) {
|
|
105
|
+
_error = "Account, project name, and the GitHub owner/repo are all required.";
|
|
106
|
+
render();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
_busy = true;
|
|
110
|
+
_error = "";
|
|
111
|
+
render();
|
|
112
|
+
try {
|
|
113
|
+
const deploy = await connectDeploy(config, {
|
|
114
|
+
accountId: _form.accountId,
|
|
115
|
+
owner: _form.owner,
|
|
116
|
+
productionBranch: _form.branch || "main",
|
|
117
|
+
projectName: _form.projectName,
|
|
118
|
+
repo: _form.repo
|
|
119
|
+
});
|
|
120
|
+
_deployment = await latestDeployment(deploy).catch(() => null);
|
|
121
|
+
} catch (error) {
|
|
122
|
+
_error = error instanceof Error ? error.message : String(error);
|
|
123
|
+
}
|
|
124
|
+
_busy = false;
|
|
125
|
+
render();
|
|
126
|
+
}
|
|
127
|
+
async function disconnect() {
|
|
128
|
+
const config = currentConfig();
|
|
129
|
+
if (!config) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
_busy = true;
|
|
133
|
+
render();
|
|
134
|
+
try {
|
|
135
|
+
await writeDeployConfig(config, null);
|
|
136
|
+
_deployment = null;
|
|
137
|
+
} catch (error) {
|
|
138
|
+
_error = error instanceof Error ? error.message : String(error);
|
|
139
|
+
}
|
|
140
|
+
_busy = false;
|
|
141
|
+
render();
|
|
142
|
+
}
|
|
143
|
+
function close() {
|
|
144
|
+
_handle?.close();
|
|
145
|
+
_handle = null;
|
|
146
|
+
}
|
|
147
|
+
function fieldRow(label, input) {
|
|
148
|
+
return html`
|
|
149
|
+
<label class="publish-field">
|
|
150
|
+
<span>${label}</span>
|
|
151
|
+
${input}
|
|
152
|
+
</label>
|
|
153
|
+
`;
|
|
154
|
+
}
|
|
155
|
+
function credentialTpl() {
|
|
156
|
+
const platform = getPlatform();
|
|
157
|
+
if (platform.cfConnect) {
|
|
158
|
+
return html`
|
|
159
|
+
<p>Connect your Cloudflare account to publish this site.</p>
|
|
160
|
+
<sp-button
|
|
161
|
+
?disabled=${_busy}
|
|
162
|
+
@click=${() => {
|
|
163
|
+
hostedConnect();
|
|
164
|
+
}}
|
|
165
|
+
>
|
|
166
|
+
Connect Cloudflare
|
|
167
|
+
</sp-button>
|
|
168
|
+
`;
|
|
169
|
+
}
|
|
170
|
+
const stored = getCfToken() !== "";
|
|
171
|
+
if (stored && !_replacing) {
|
|
172
|
+
return html`
|
|
173
|
+
<p>
|
|
174
|
+
A Cloudflare API token is stored on this machine, and Cloudflare did not accept it. It may
|
|
175
|
+
have been revoked, or it may be missing the Account Settings Read and Pages Read/Write
|
|
176
|
+
permissions.
|
|
177
|
+
</p>
|
|
178
|
+
<div class="publish-actions">
|
|
179
|
+
<sp-button
|
|
180
|
+
?disabled=${_busy}
|
|
181
|
+
@click=${() => {
|
|
182
|
+
_replacing = true;
|
|
183
|
+
_error = "";
|
|
184
|
+
render();
|
|
185
|
+
}}
|
|
186
|
+
>
|
|
187
|
+
Replace token
|
|
188
|
+
</sp-button>
|
|
189
|
+
<sp-button variant="secondary" @click=${openAccounts}>Preferences › Accounts</sp-button>
|
|
190
|
+
</div>
|
|
191
|
+
`;
|
|
192
|
+
}
|
|
193
|
+
return html`
|
|
194
|
+
<p>
|
|
195
|
+
Paste a Cloudflare API token (permissions: Account Settings Read, Pages Read/Write). It is
|
|
196
|
+
stored on this machine and only sent to the same-origin proxy — Studio never renders it back.
|
|
197
|
+
</p>
|
|
198
|
+
${fieldRow("API token", html`<sp-textfield
|
|
199
|
+
id="cf-token-input"
|
|
200
|
+
type="password"
|
|
201
|
+
value=""
|
|
202
|
+
placeholder="cf_..."
|
|
203
|
+
></sp-textfield>`)}
|
|
204
|
+
<div class="publish-actions">
|
|
205
|
+
<sp-button
|
|
206
|
+
?disabled=${_busy}
|
|
207
|
+
@click=${(e) => {
|
|
208
|
+
saveToken(hostOf(e));
|
|
209
|
+
}}
|
|
210
|
+
>
|
|
211
|
+
Verify & Connect
|
|
212
|
+
</sp-button>
|
|
213
|
+
<sp-button variant="secondary" @click=${openAccounts}>Preferences › Accounts</sp-button>
|
|
214
|
+
</div>
|
|
215
|
+
`;
|
|
216
|
+
}
|
|
217
|
+
function hostOf(e) {
|
|
218
|
+
return e.target.closest(".publish-modal") ?? document.body;
|
|
219
|
+
}
|
|
220
|
+
function connectFormTpl() {
|
|
221
|
+
return html`
|
|
222
|
+
<p>
|
|
223
|
+
Create a Cloudflare Pages project connected to this repository. Every commit then builds and
|
|
224
|
+
publishes automatically (<code>bunx jx build</code>).
|
|
225
|
+
</p>
|
|
226
|
+
${fieldRow("Account", html`
|
|
227
|
+
<sp-picker
|
|
228
|
+
value=${_form.accountId}
|
|
229
|
+
@change=${(e) => {
|
|
230
|
+
_form.accountId = e.target.value;
|
|
231
|
+
}}
|
|
232
|
+
>
|
|
233
|
+
${_accounts.map((a) => html`<sp-menu-item value=${a.id}>${a.name}</sp-menu-item>`)}
|
|
234
|
+
</sp-picker>
|
|
235
|
+
`)}
|
|
236
|
+
${fieldRow("Pages project name", html`<sp-textfield
|
|
237
|
+
value=${_form.projectName}
|
|
238
|
+
@input=${(e) => {
|
|
239
|
+
_form.projectName = e.target.value;
|
|
240
|
+
}}
|
|
241
|
+
></sp-textfield>`)}
|
|
242
|
+
${fieldRow("GitHub owner", html`<sp-textfield
|
|
243
|
+
value=${_form.owner}
|
|
244
|
+
@input=${(e) => {
|
|
245
|
+
_form.owner = e.target.value;
|
|
246
|
+
}}
|
|
247
|
+
></sp-textfield>`)}
|
|
248
|
+
${fieldRow("GitHub repository", html`<sp-textfield
|
|
249
|
+
value=${_form.repo}
|
|
250
|
+
@input=${(e) => {
|
|
251
|
+
_form.repo = e.target.value;
|
|
252
|
+
}}
|
|
253
|
+
></sp-textfield>`)}
|
|
254
|
+
${fieldRow("Production branch", html`<sp-textfield
|
|
255
|
+
value=${_form.branch}
|
|
256
|
+
@input=${(e) => {
|
|
257
|
+
_form.branch = e.target.value;
|
|
258
|
+
}}
|
|
259
|
+
></sp-textfield>`)}
|
|
260
|
+
<sp-button
|
|
261
|
+
?disabled=${_busy}
|
|
262
|
+
@click=${() => {
|
|
263
|
+
submitConnect();
|
|
264
|
+
}}
|
|
265
|
+
>
|
|
266
|
+
${_busy ? "Connecting…" : "Create & Connect"}
|
|
267
|
+
</sp-button>
|
|
268
|
+
`;
|
|
269
|
+
}
|
|
270
|
+
function statusTpl(deploy) {
|
|
271
|
+
return html`
|
|
272
|
+
<p>
|
|
273
|
+
Connected to Pages project <strong>${deploy.projectName}</strong>
|
|
274
|
+
${deploy.productionUrl ? html` —
|
|
275
|
+
<a href=${deploy.productionUrl} target="_blank" rel="noreferrer">
|
|
276
|
+
${deploy.productionUrl}
|
|
277
|
+
</a>` : ""}
|
|
278
|
+
</p>
|
|
279
|
+
${_deployment ? html`
|
|
280
|
+
<p>
|
|
281
|
+
Latest deployment: <strong>${_deployment.stage}: ${_deployment.status}</strong>
|
|
282
|
+
(${_deployment.environment}) —
|
|
283
|
+
<a href=${_deployment.url} target="_blank" rel="noreferrer">preview</a>
|
|
284
|
+
</p>
|
|
285
|
+
` : html`<p>No deployments yet — the first commit after connecting triggers one.</p>`}
|
|
286
|
+
<p class="publish-hint">Publishing happens automatically on every commit.</p>
|
|
287
|
+
<div class="publish-actions">
|
|
288
|
+
<sp-button
|
|
289
|
+
variant="secondary"
|
|
290
|
+
?disabled=${_busy}
|
|
291
|
+
@click=${() => {
|
|
292
|
+
loadConnection();
|
|
293
|
+
}}
|
|
294
|
+
>
|
|
295
|
+
Refresh
|
|
296
|
+
</sp-button>
|
|
297
|
+
<sp-button
|
|
298
|
+
variant="negative"
|
|
299
|
+
?disabled=${_busy}
|
|
300
|
+
@click=${() => {
|
|
301
|
+
disconnect();
|
|
302
|
+
}}
|
|
303
|
+
>
|
|
304
|
+
Disconnect
|
|
305
|
+
</sp-button>
|
|
306
|
+
</div>
|
|
307
|
+
`;
|
|
308
|
+
}
|
|
309
|
+
function bodyTpl() {
|
|
310
|
+
if (!platformSupportsPublish()) {
|
|
311
|
+
return html`
|
|
312
|
+
<p>
|
|
313
|
+
This platform cannot reach the Cloudflare API. Publish by committing and pushing — your host
|
|
314
|
+
builds <code>bunx jx build</code> and serves <code>dist/</code>.
|
|
315
|
+
</p>
|
|
316
|
+
`;
|
|
317
|
+
}
|
|
318
|
+
if (_connection === "loading") {
|
|
319
|
+
return html`<p>Checking Cloudflare connection…</p>`;
|
|
320
|
+
}
|
|
321
|
+
if (!_connection?.connected) {
|
|
322
|
+
return credentialTpl();
|
|
323
|
+
}
|
|
324
|
+
const deploy = currentDeploy();
|
|
325
|
+
return deploy ? statusTpl(deploy) : connectFormTpl();
|
|
326
|
+
}
|
|
327
|
+
function errorTpl() {
|
|
328
|
+
if (!_error) {
|
|
329
|
+
return "";
|
|
330
|
+
}
|
|
331
|
+
const needsPagesApp = /github/i.test(_error) && /app|install|source|repo/i.test(_error);
|
|
332
|
+
return html`
|
|
333
|
+
<p class="publish-error">
|
|
334
|
+
${_error}
|
|
335
|
+
${needsPagesApp ? html` — if the Cloudflare Pages GitHub App is not installed on the repository,
|
|
336
|
+
<a href=${PAGES_APP_INSTALL_URL} target="_blank" rel="noreferrer">install it</a> and
|
|
337
|
+
retry.` : ""}
|
|
338
|
+
</p>
|
|
339
|
+
`;
|
|
340
|
+
}
|
|
341
|
+
function render() {
|
|
342
|
+
const tpl = html`
|
|
343
|
+
<div class="new-project-modal publish-modal" data-jx-region="overlay.dialog:publish">
|
|
344
|
+
<div class="new-project-modal-header">
|
|
345
|
+
<h2 class="new-project-modal-title">Publish</h2>
|
|
346
|
+
<sp-action-button size="s" quiet @click=${close}>✕</sp-action-button>
|
|
347
|
+
</div>
|
|
348
|
+
<div class="new-project-modal-body">${bodyTpl()} ${errorTpl()}</div>
|
|
349
|
+
</div>
|
|
350
|
+
`;
|
|
351
|
+
if (_handle) {
|
|
352
|
+
_handle.update(tpl);
|
|
353
|
+
} else {
|
|
354
|
+
_handle = openModal(tpl, { label: "Publish", onDismiss: close });
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
function seedPublishConnected(options) {
|
|
358
|
+
_connection = { accountId: options.accountId ?? "demo-account", connected: true };
|
|
359
|
+
_accounts = [];
|
|
360
|
+
_deployment = options.deployment;
|
|
361
|
+
noteDeployment(options.deployment);
|
|
362
|
+
_error = "";
|
|
363
|
+
_busy = false;
|
|
364
|
+
_replacing = false;
|
|
365
|
+
render();
|
|
366
|
+
}
|
|
367
|
+
function openPublishPanel() {
|
|
368
|
+
const config = currentConfig();
|
|
369
|
+
const { owner, repo } = prefillRepo();
|
|
370
|
+
_connection = "loading";
|
|
371
|
+
_accounts = [];
|
|
372
|
+
_deployment = null;
|
|
373
|
+
_error = "";
|
|
374
|
+
_busy = false;
|
|
375
|
+
_replacing = false;
|
|
376
|
+
_form = {
|
|
377
|
+
accountId: "",
|
|
378
|
+
branch: "main",
|
|
379
|
+
owner,
|
|
380
|
+
projectName: currentDeploy()?.projectName ?? deriveSlug(config?.name ?? ""),
|
|
381
|
+
repo
|
|
382
|
+
};
|
|
383
|
+
render();
|
|
384
|
+
loadConnection();
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
export { seedPublishConnected, openPublishPanel };
|
|
388
|
+
|
|
389
|
+
//# debugId=32DE20DAF46B08AA64756E2164756E21
|
|
390
|
+
//# sourceMappingURL=studio-x9hmy5kr.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/publish/publish-panel.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/// <reference lib=\"dom\" />\n/**\n * Publish panel — the one-click Cloudflare Pages publish flow, driven by the\n * PAL's cf* members. States: unsupported platform → info; no credential →\n * connect (hosted OAuth via cfConnect, or an API-token form backed by\n * cf-settings); connected without `build.deploy` → create-and-connect form;\n * connected → deployment status (publishing rides every commit).\n *\n * **The token was in the DOM, on every open.** `credentialTpl` rendered\n * `value=${getCfToken()}` into an `sp-textfield` whenever a token was stored and\n * the platform had no hosted broker — a control the reader had not asked to\n * edit, on a surface `scripts/screenshots` photographs. `type=\"password\"` masks\n * pixels and nothing else: the value is in the attribute, in the serialized\n * HTML, in the accessibility tree and in every DOM dump. It is gone. A stored\n * token is now reported as *stored*, the field is only ever drawn empty for a\n * REPLACEMENT the reader asked for, and revoking lives where every other\n * credential's does — Preferences › Accounts (`studio.md` §15 rule 1: a surface\n * never prints the secret it describes).\n *\n * @license MIT\n */\n\nimport { html } from \"lit-html\";\nimport type { DeployConfig, ProjectConfig } from \"@jxsuite/schema/types\";\nimport { activeRegistry } from \"../commands/active-registry\";\nimport { currentDeploy, noteDeployment } from \"./deploy-checklist\";\nimport { getPlatform } from \"../platform\";\nimport { getCfToken, setCfToken } from \"../services/cf-settings\";\nimport { projectState } from \"../store\";\nimport type { CfConnection } from \"../types\";\nimport { openModal } from \"../ui/layers\";\nimport type { CfAccount, PagesDeploymentInfo } from \"./pages-service\";\nimport {\n connectDeploy,\n latestDeployment,\n listAccounts,\n platformSupportsPublish,\n writeDeployConfig,\n} from \"./pages-service\";\n\nconst PAGES_APP_INSTALL_URL = \"https://github.com/apps/cloudflare-pages/installations/new\";\n\nlet _handle: ReturnType<typeof openModal> | null = null;\nlet _connection: CfConnection | null | \"loading\" = \"loading\";\nlet _accounts: CfAccount[] = [];\nlet _deployment: PagesDeploymentInfo | null = null;\nlet _error = \"\";\nlet _busy = false;\n/** Whether the reader has asked to replace a token that is already stored. */\nlet _replacing = false;\nlet _form = { accountId: \"\", branch: \"main\", owner: \"\", projectName: \"\", repo: \"\" };\n\nfunction currentConfig(): ProjectConfig | null {\n return (projectState?.projectConfig as ProjectConfig | undefined) ?? null;\n}\n\nfunction deriveSlug(name: string): string {\n return (\n name\n .toLowerCase()\n .replaceAll(/[^a-z0-9]+/g, \"-\")\n .replaceAll(/^-+|-+$/g, \"\")\n .slice(0, 58) || \"site\"\n );\n}\n\n/** Prefill owner/repo from cloud roots (\"owner/repo\"); blank elsewhere. */\nfunction prefillRepo(): { owner: string; repo: string } {\n const root = getPlatform().projectRoot;\n const match = /^([\\w.-]+)\\/([\\w.-]+)$/.exec(root);\n return match ? { owner: match[1]!, repo: match[2]! } : { owner: \"\", repo: \"\" };\n}\n\nasync function loadConnection(): Promise<void> {\n _connection = \"loading\";\n render();\n try {\n _connection = (await getPlatform().cfConnection?.()) ?? null;\n if (_connection?.connected) {\n _accounts = await listAccounts();\n _form.accountId = _connection.accountId ?? _accounts[0]?.id ?? \"\";\n const deploy = currentDeploy();\n if (deploy) {\n _deployment = await latestDeployment(deploy);\n // We ASKED, so the deploy checklist may stop saying \"unknown\" — including when the answer\n // Was \"none\", which is a fact and not an absence of one.\n noteDeployment(_deployment);\n }\n }\n } catch (error) {\n _connection = null;\n _error = error instanceof Error ? error.message : String(error);\n }\n render();\n}\n\n/**\n * Take the token straight from the live control to storage.\n *\n * It is read from the DOM and never written back to it, which is the whole asymmetry: a secret may\n * pass through a field the user typed it into, and may not be painted into one they did not.\n */\nasync function saveToken(host: HTMLElement): Promise<void> {\n const input = host.querySelector<HTMLInputElement>(\"#cf-token-input\");\n const value = (input?.value ?? \"\").trim();\n if (!value) {\n _error = \"Paste a token, or use Preferences › Accounts to forget the stored one.\";\n render();\n return;\n }\n setCfToken(value);\n if (input) {\n input.value = \"\";\n }\n _replacing = false;\n _error = \"\";\n await loadConnection();\n}\n\n/** Open Preferences on Accounts — the one place a credential is listed and forgotten. */\nfunction openAccounts(): void {\n void activeRegistry()?.run(\"app.preferences\", { section: \"accounts\" });\n}\n\nasync function hostedConnect(): Promise<void> {\n _busy = true;\n render();\n try {\n await getPlatform().cfConnect?.();\n } catch (error) {\n _error = error instanceof Error ? error.message : String(error);\n }\n _busy = false;\n await loadConnection();\n}\n\nasync function submitConnect(): Promise<void> {\n const config = currentConfig();\n if (!config) {\n return;\n }\n if (!_form.projectName || !_form.owner || !_form.repo || !_form.accountId) {\n _error = \"Account, project name, and the GitHub owner/repo are all required.\";\n render();\n return;\n }\n _busy = true;\n _error = \"\";\n render();\n try {\n const deploy = await connectDeploy(config, {\n accountId: _form.accountId,\n owner: _form.owner,\n productionBranch: _form.branch || \"main\",\n projectName: _form.projectName,\n repo: _form.repo,\n });\n _deployment = await latestDeployment(deploy).catch(() => null);\n } catch (error) {\n _error = error instanceof Error ? error.message : String(error);\n }\n _busy = false;\n render();\n}\n\nasync function disconnect(): Promise<void> {\n const config = currentConfig();\n if (!config) {\n return;\n }\n _busy = true;\n render();\n try {\n await writeDeployConfig(config, null);\n _deployment = null;\n } catch (error) {\n _error = error instanceof Error ? error.message : String(error);\n }\n _busy = false;\n render();\n}\n\nfunction close(): void {\n _handle?.close();\n _handle = null;\n}\n\nfunction fieldRow(label: string, input: unknown) {\n return html`\n <label class=\"publish-field\">\n <span>${label}</span>\n ${input}\n </label>\n `;\n}\n\nfunction credentialTpl() {\n const platform = getPlatform();\n if (platform.cfConnect) {\n return html`\n <p>Connect your Cloudflare account to publish this site.</p>\n <sp-button\n ?disabled=${_busy}\n @click=${() => {\n void hostedConnect();\n }}\n >\n Connect Cloudflare\n </sp-button>\n `;\n }\n const stored = getCfToken() !== \"\";\n if (stored && !_replacing) {\n // The token is STORED, and that is the whole of what this says. It was rejected or has expired\n // — otherwise `_connection.connected` would be true and this branch unreachable — so the two\n // Honest moves are to replace it or to forget it, and neither needs to see it.\n return html`\n <p>\n A Cloudflare API token is stored on this machine, and Cloudflare did not accept it. It may\n have been revoked, or it may be missing the Account Settings Read and Pages Read/Write\n permissions.\n </p>\n <div class=\"publish-actions\">\n <sp-button\n ?disabled=${_busy}\n @click=${() => {\n _replacing = true;\n _error = \"\";\n render();\n }}\n >\n Replace token\n </sp-button>\n <sp-button variant=\"secondary\" @click=${openAccounts}>Preferences › Accounts</sp-button>\n </div>\n `;\n }\n return html`\n <p>\n Paste a Cloudflare API token (permissions: Account Settings Read, Pages Read/Write). It is\n stored on this machine and only sent to the same-origin proxy — Studio never renders it back.\n </p>\n ${fieldRow(\n \"API token\",\n html`<sp-textfield\n id=\"cf-token-input\"\n type=\"password\"\n value=\"\"\n placeholder=\"cf_...\"\n ></sp-textfield>`,\n )}\n <div class=\"publish-actions\">\n <sp-button\n ?disabled=${_busy}\n @click=${(e: Event) => {\n void saveToken(hostOf(e));\n }}\n >\n Verify & Connect\n </sp-button>\n <sp-button variant=\"secondary\" @click=${openAccounts}>Preferences › Accounts</sp-button>\n </div>\n `;\n}\n\nfunction hostOf(e: Event): HTMLElement {\n return (e.target as HTMLElement).closest(\".publish-modal\") ?? document.body;\n}\n\nfunction connectFormTpl() {\n return html`\n <p>\n Create a Cloudflare Pages project connected to this repository. Every commit then builds and\n publishes automatically (<code>bunx jx build</code>).\n </p>\n ${fieldRow(\n \"Account\",\n html`\n <sp-picker\n value=${_form.accountId}\n @change=${(e: Event) => {\n _form.accountId = (e.target as HTMLInputElement).value;\n }}\n >\n ${_accounts.map((a) => html`<sp-menu-item value=${a.id}>${a.name}</sp-menu-item>`)}\n </sp-picker>\n `,\n )}\n ${fieldRow(\n \"Pages project name\",\n html`<sp-textfield\n value=${_form.projectName}\n @input=${(e: Event) => {\n _form.projectName = (e.target as HTMLInputElement).value;\n }}\n ></sp-textfield>`,\n )}\n ${fieldRow(\n \"GitHub owner\",\n html`<sp-textfield\n value=${_form.owner}\n @input=${(e: Event) => {\n _form.owner = (e.target as HTMLInputElement).value;\n }}\n ></sp-textfield>`,\n )}\n ${fieldRow(\n \"GitHub repository\",\n html`<sp-textfield\n value=${_form.repo}\n @input=${(e: Event) => {\n _form.repo = (e.target as HTMLInputElement).value;\n }}\n ></sp-textfield>`,\n )}\n ${fieldRow(\n \"Production branch\",\n html`<sp-textfield\n value=${_form.branch}\n @input=${(e: Event) => {\n _form.branch = (e.target as HTMLInputElement).value;\n }}\n ></sp-textfield>`,\n )}\n <sp-button\n ?disabled=${_busy}\n @click=${() => {\n void submitConnect();\n }}\n >\n ${_busy ? \"Connecting…\" : \"Create & Connect\"}\n </sp-button>\n `;\n}\n\nfunction statusTpl(deploy: DeployConfig) {\n return html`\n <p>\n Connected to Pages project <strong>${deploy.projectName}</strong>\n ${\n deploy.productionUrl\n ? html` —\n <a href=${deploy.productionUrl} target=\"_blank\" rel=\"noreferrer\">\n ${deploy.productionUrl}\n </a>`\n : \"\"\n }\n </p>\n ${\n _deployment\n ? html`\n <p>\n Latest deployment: <strong>${_deployment.stage}: ${_deployment.status}</strong>\n (${_deployment.environment}) —\n <a href=${_deployment.url} target=\"_blank\" rel=\"noreferrer\">preview</a>\n </p>\n `\n : html`<p>No deployments yet — the first commit after connecting triggers one.</p>`\n }\n <p class=\"publish-hint\">Publishing happens automatically on every commit.</p>\n <div class=\"publish-actions\">\n <sp-button\n variant=\"secondary\"\n ?disabled=${_busy}\n @click=${() => {\n void loadConnection();\n }}\n >\n Refresh\n </sp-button>\n <sp-button\n variant=\"negative\"\n ?disabled=${_busy}\n @click=${() => {\n void disconnect();\n }}\n >\n Disconnect\n </sp-button>\n </div>\n `;\n}\n\nfunction bodyTpl() {\n if (!platformSupportsPublish()) {\n return html`\n <p>\n This platform cannot reach the Cloudflare API. Publish by committing and pushing — your host\n builds <code>bunx jx build</code> and serves <code>dist/</code>.\n </p>\n `;\n }\n if (_connection === \"loading\") {\n return html`<p>Checking Cloudflare connection…</p>`;\n }\n if (!_connection?.connected) {\n return credentialTpl();\n }\n const deploy = currentDeploy();\n return deploy ? statusTpl(deploy) : connectFormTpl();\n}\n\nfunction errorTpl() {\n if (!_error) {\n return \"\";\n }\n const needsPagesApp = /github/i.test(_error) && /app|install|source|repo/i.test(_error);\n return html`\n <p class=\"publish-error\">\n ${_error}\n ${\n needsPagesApp\n ? html` — if the Cloudflare Pages GitHub App is not installed on the repository,\n <a href=${PAGES_APP_INSTALL_URL} target=\"_blank\" rel=\"noreferrer\">install it</a> and\n retry.`\n : \"\"\n }\n </p>\n `;\n}\n\nfunction render(): void {\n const tpl = html`\n <div class=\"new-project-modal publish-modal\" data-jx-region=\"overlay.dialog:publish\">\n <div class=\"new-project-modal-header\">\n <h2 class=\"new-project-modal-title\">Publish</h2>\n <sp-action-button size=\"s\" quiet @click=${close}>✕</sp-action-button>\n </div>\n <div class=\"new-project-modal-body\">${bodyTpl()} ${errorTpl()}</div>\n </div>\n `;\n if (_handle) {\n _handle.update(tpl);\n } else {\n _handle = openModal(tpl, { label: \"Publish\", onDismiss: close });\n }\n}\n\n/**\n * Automation-only seam (scripts/screenshots): open the modal directly in its connected state with a\n * canned deployment, bypassing {@link loadConnection} so no Cloudflare request ever fires. The\n * active project's `build.deploy` block still supplies the connected project/URL line.\n */\nexport function seedPublishConnected(options: {\n accountId?: string;\n deployment: PagesDeploymentInfo;\n}): void {\n _connection = { accountId: options.accountId ?? \"demo-account\", connected: true };\n _accounts = [];\n _deployment = options.deployment;\n noteDeployment(options.deployment);\n _error = \"\";\n _busy = false;\n _replacing = false;\n render();\n}\n\n/** Open the publish modal for the active project. */\nexport function openPublishPanel(): void {\n const config = currentConfig();\n const { owner, repo } = prefillRepo();\n _connection = \"loading\";\n _accounts = [];\n _deployment = null;\n _error = \"\";\n _busy = false;\n _replacing = false;\n _form = {\n accountId: \"\",\n branch: \"main\",\n owner,\n projectName: currentDeploy()?.projectName ?? deriveSlug(config?.name ?? \"\"),\n repo,\n };\n render();\n void loadConnection();\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "32DE20DAF46B08AA64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|