@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
package/canvas.html
CHANGED
|
@@ -39,6 +39,27 @@
|
|
|
39
39
|
#jx-canvas-root:has(> [data-jx-definition-root]) {
|
|
40
40
|
min-height: 0;
|
|
41
41
|
}
|
|
42
|
+
/* PREVIEW is the exception to all three rules above, and it is the point of the mode.
|
|
43
|
+
The host keeps the iframe at the pane's height there (a real viewport) so `position:sticky`,
|
|
44
|
+
scroll-driven animation and IntersectionObserver reveals fire exactly as they will in
|
|
45
|
+
production. A real viewport that cannot scroll shows only its first screenful — and that is
|
|
46
|
+
what this document did: `overflow:hidden` clipped every page at the fold with no scrollbar
|
|
47
|
+
and no way down. So preview scrolls the DOCUMENT, and sizes the query container to the real
|
|
48
|
+
viewport (`100vh` inside the iframe IS the iframe) so a `100vh` section means the screenful
|
|
49
|
+
the reader actually has rather than a fixed 800px design box.
|
|
50
|
+
|
|
51
|
+
Set by `syncPreviewShell` on every render, because one iframe is reused across modes. */
|
|
52
|
+
html[data-jx-preview] {
|
|
53
|
+
overflow: auto;
|
|
54
|
+
}
|
|
55
|
+
html[data-jx-preview] body {
|
|
56
|
+
height: auto;
|
|
57
|
+
min-height: 100%;
|
|
58
|
+
overflow: visible;
|
|
59
|
+
}
|
|
60
|
+
html[data-jx-preview] #jx-canvas-viewport {
|
|
61
|
+
height: 100vh;
|
|
62
|
+
}
|
|
42
63
|
</style>
|
|
43
64
|
</head>
|
|
44
65
|
<body>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LONGPRESS_INSTRUCTIONS,
|
|
3
|
+
Overlay
|
|
4
|
+
} from "./studio-2sj1jj3v.js";
|
|
5
|
+
import"./studio-ahnzd9rg.js";
|
|
6
|
+
import"./studio-rgwcpast.js";
|
|
7
|
+
import"./studio-z6nw2ek2.js";
|
|
8
|
+
import"./studio-8q517dfr.js";
|
|
9
|
+
import"./studio-xm3dbxvn.js";
|
|
10
|
+
import"./studio-0rqqhrdy.js";
|
|
11
|
+
import"./studio-xmvbhg31.js";
|
|
12
|
+
import"./studio-6f0am8f2.js";
|
|
13
|
+
import"./studio-ckwz4d3x.js";
|
|
14
|
+
import"./studio-p471gg5n.js";
|
|
15
|
+
import"./studio-5x5774ak.js";
|
|
16
|
+
import"./studio-md4gps17.js";
|
|
17
|
+
export {
|
|
18
|
+
Overlay,
|
|
19
|
+
LONGPRESS_INSTRUCTIONS
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
//# debugId=23E26906A2D7964A64756E2164756E21
|
|
23
|
+
//# sourceMappingURL=Overlay.dev-qfjzkms8.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
draggable,
|
|
3
3
|
dropTargetForElements,
|
|
4
4
|
monitorForElements
|
|
5
|
-
} from "./studio-
|
|
5
|
+
} from "./studio-bsxxx3x2.js";
|
|
6
6
|
import"./studio-md4gps17.js";
|
|
7
7
|
export {
|
|
8
8
|
monitorForElements,
|
|
@@ -11,4 +11,4 @@ export {
|
|
|
11
11
|
};
|
|
12
12
|
|
|
13
13
|
//# debugId=C3878728ACD6E77A64756E2164756E21
|
|
14
|
-
//# sourceMappingURL=adapter-
|
|
14
|
+
//# sourceMappingURL=adapter-qfnesn5v.js.map
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
getCfToken,
|
|
4
4
|
setCfAccountId,
|
|
5
5
|
setCfToken
|
|
6
|
-
} from "./studio-
|
|
7
|
-
import"./studio-
|
|
6
|
+
} from "./studio-a7pzveq1.js";
|
|
7
|
+
import"./studio-sas7mt3k.js";
|
|
8
8
|
import"./studio-md4gps17.js";
|
|
9
9
|
export {
|
|
10
10
|
setCfToken,
|
|
@@ -14,4 +14,4 @@ export {
|
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
//# debugId=26D8DF66EE01B1FC64756E2164756E21
|
|
17
|
-
//# sourceMappingURL=cf-settings-
|
|
17
|
+
//# sourceMappingURL=cf-settings-73sh5z4p.js.map
|
|
@@ -4,11 +4,9 @@ import {
|
|
|
4
4
|
componentRegistry,
|
|
5
5
|
computeRelativePath,
|
|
6
6
|
loadComponentRegistry
|
|
7
|
-
} from "./studio-
|
|
8
|
-
import"./studio-
|
|
9
|
-
import"./studio-
|
|
10
|
-
import"./studio-9smfzqhc.js";
|
|
11
|
-
import"./studio-5ehhackm.js";
|
|
7
|
+
} from "./studio-s519zc99.js";
|
|
8
|
+
import"./studio-cjm7fdjf.js";
|
|
9
|
+
import"./studio-sas7mt3k.js";
|
|
12
10
|
import"./studio-md4gps17.js";
|
|
13
11
|
export {
|
|
14
12
|
loadComponentRegistry,
|
|
@@ -18,5 +16,5 @@ export {
|
|
|
18
16
|
_componentRegistryLoaded
|
|
19
17
|
};
|
|
20
18
|
|
|
21
|
-
//# debugId=
|
|
22
|
-
//# sourceMappingURL=components-
|
|
19
|
+
//# debugId=D16586D443AA23A664756E2164756E21
|
|
20
|
+
//# sourceMappingURL=components-2bpqp4mq.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PATH_FIELD,
|
|
3
|
+
collectionDirs,
|
|
4
|
+
collectionInfo,
|
|
5
|
+
createCollectionSource,
|
|
6
|
+
createPagesSource,
|
|
7
|
+
listCollectionEntryIds,
|
|
8
|
+
reloadDraftAwareGrids
|
|
9
|
+
} from "./studio-k2sxjph5.js";
|
|
10
|
+
import"./studio-6f0am8f2.js";
|
|
11
|
+
import"./studio-bw5dz6km.js";
|
|
12
|
+
import"./studio-f12h6177.js";
|
|
13
|
+
import"./studio-na6rwzhw.js";
|
|
14
|
+
import"./studio-myje51t3.js";
|
|
15
|
+
import"./studio-v96qfnww.js";
|
|
16
|
+
import"./studio-41exgzhq.js";
|
|
17
|
+
import"./studio-ckwz4d3x.js";
|
|
18
|
+
import"./studio-p471gg5n.js";
|
|
19
|
+
import"./studio-5x5774ak.js";
|
|
20
|
+
import"./studio-bsxxx3x2.js";
|
|
21
|
+
import"./studio-s519zc99.js";
|
|
22
|
+
import"./studio-cjm7fdjf.js";
|
|
23
|
+
import"./studio-adn0z1k3.js";
|
|
24
|
+
import"./studio-sas7mt3k.js";
|
|
25
|
+
import"./studio-5ehhackm.js";
|
|
26
|
+
import"./studio-md4gps17.js";
|
|
27
|
+
export {
|
|
28
|
+
reloadDraftAwareGrids,
|
|
29
|
+
listCollectionEntryIds,
|
|
30
|
+
createPagesSource,
|
|
31
|
+
createCollectionSource,
|
|
32
|
+
collectionInfo,
|
|
33
|
+
collectionDirs,
|
|
34
|
+
PATH_FIELD
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
//# debugId=6E82942DE44C7AFB64756E2164756E21
|
|
38
|
+
//# sourceMappingURL=content-source-34gnkbnn.js.map
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defCategory
|
|
3
|
+
} from "./studio-6nmjc5qk.js";
|
|
4
|
+
import"./studio-0rqqhrdy.js";
|
|
5
|
+
import"./studio-c6s5getc.js";
|
|
6
|
+
import"./studio-xmvbhg31.js";
|
|
7
|
+
import {
|
|
8
|
+
fetchPluginSchema
|
|
9
|
+
} from "./studio-f12h6177.js";
|
|
10
|
+
import"./studio-v96qfnww.js";
|
|
11
|
+
import {
|
|
12
|
+
activeTab,
|
|
13
|
+
primarySelection,
|
|
14
|
+
showDialog,
|
|
15
|
+
transactDoc
|
|
16
|
+
} from "./studio-41exgzhq.js";
|
|
17
|
+
import"./studio-ckwz4d3x.js";
|
|
18
|
+
import {
|
|
19
|
+
ref
|
|
20
|
+
} from "./studio-p471gg5n.js";
|
|
21
|
+
import {
|
|
22
|
+
html,
|
|
23
|
+
nothing,
|
|
24
|
+
render
|
|
25
|
+
} from "./studio-5x5774ak.js";
|
|
26
|
+
import"./studio-bsxxx3x2.js";
|
|
27
|
+
import"./studio-s519zc99.js";
|
|
28
|
+
import {
|
|
29
|
+
childIndex,
|
|
30
|
+
childList,
|
|
31
|
+
getNodeAtPath,
|
|
32
|
+
parentElementPath
|
|
33
|
+
} from "./studio-cjm7fdjf.js";
|
|
34
|
+
import"./studio-adn0z1k3.js";
|
|
35
|
+
import"./studio-sas7mt3k.js";
|
|
36
|
+
import"./studio-5ehhackm.js";
|
|
37
|
+
import"./studio-t5wqwzdh.js";
|
|
38
|
+
import"./studio-md4gps17.js";
|
|
39
|
+
|
|
40
|
+
// src/editor/convert-to-repeater.ts
|
|
41
|
+
async function convertToRepeater() {
|
|
42
|
+
const tab = activeTab.value;
|
|
43
|
+
const path = primarySelection(tab?.session.selection);
|
|
44
|
+
if (!tab || !path || path.length < 2) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const node = getNodeAtPath(tab.doc.document, path);
|
|
48
|
+
if (!node) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const defs = tab.doc.document.state || {};
|
|
52
|
+
const config = await promptRepeaterConfig(defs);
|
|
53
|
+
if (!config) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
transactDoc(tab, (t) => {
|
|
57
|
+
const doc = t.doc.document;
|
|
58
|
+
if (config.newDef) {
|
|
59
|
+
if (!doc.state) {
|
|
60
|
+
doc.state = {};
|
|
61
|
+
}
|
|
62
|
+
doc.state[config.newDef.name] = { default: [], type: "array" };
|
|
63
|
+
}
|
|
64
|
+
const pp = parentElementPath(path);
|
|
65
|
+
if (!pp) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const idx = childIndex(path);
|
|
69
|
+
const parent = getNodeAtPath(doc, pp);
|
|
70
|
+
if (!parent?.children) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const element = childList(parent)[idx];
|
|
74
|
+
const repeater = {
|
|
75
|
+
$prototype: "Array",
|
|
76
|
+
items: config.items,
|
|
77
|
+
map: element
|
|
78
|
+
};
|
|
79
|
+
if (config.filter) {
|
|
80
|
+
repeater.filter = config.filter;
|
|
81
|
+
}
|
|
82
|
+
if (config.sort) {
|
|
83
|
+
repeater.sort = config.sort;
|
|
84
|
+
}
|
|
85
|
+
parent.children[idx] = repeater;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
async function promptRepeaterConfig(defs) {
|
|
89
|
+
const arrayDefs = Object.entries(defs).filter(([, d]) => d?.type === "array" || Array.isArray(d?.default) || d?.$prototype === "Array");
|
|
90
|
+
const tab = activeTab.value;
|
|
91
|
+
const docPath = tab?.documentPath;
|
|
92
|
+
for (const [name, d] of Object.entries(defs)) {
|
|
93
|
+
const def = d;
|
|
94
|
+
if (!def?.$prototype || def.$prototype === "Function" || def.$prototype === "Array") {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (arrayDefs.some(([n]) => n === name)) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const schema = await fetchPluginSchema({
|
|
101
|
+
...def.$src != null && { $src: def.$src },
|
|
102
|
+
$prototype: def.$prototype
|
|
103
|
+
}, { ...docPath != null && { documentPath: docPath } });
|
|
104
|
+
if (schema?.returns?.type === "array") {
|
|
105
|
+
arrayDefs.push([name, d]);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const fnDefs = Object.entries(defs).filter(([, d]) => defCategory(d) === "function");
|
|
109
|
+
let source = arrayDefs.length > 0 ? arrayDefs[0][0] : "__new__";
|
|
110
|
+
let newDefName = "";
|
|
111
|
+
let filterDef = "";
|
|
112
|
+
let sortDef = "";
|
|
113
|
+
let error = "";
|
|
114
|
+
return showDialog((done) => {
|
|
115
|
+
function confirm() {
|
|
116
|
+
if (source === "__new__") {
|
|
117
|
+
const name = newDefName.trim();
|
|
118
|
+
if (!name) {
|
|
119
|
+
error = "Enter a name for the new state definition.";
|
|
120
|
+
rerender();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (defs[name]) {
|
|
124
|
+
error = `"${name}" already exists.`;
|
|
125
|
+
rerender();
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name)) {
|
|
129
|
+
error = "Invalid identifier name.";
|
|
130
|
+
rerender();
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
done({
|
|
134
|
+
items: { $ref: `#/state/${name}` },
|
|
135
|
+
...filterDef && { filter: { $ref: `#/state/${filterDef}` } },
|
|
136
|
+
...sortDef && { sort: { $ref: `#/state/${sortDef}` } },
|
|
137
|
+
newDef: { name }
|
|
138
|
+
});
|
|
139
|
+
} else {
|
|
140
|
+
done({
|
|
141
|
+
items: { $ref: `#/state/${source}` },
|
|
142
|
+
...filterDef && { filter: { $ref: `#/state/${filterDef}` } },
|
|
143
|
+
...sortDef && { sort: { $ref: `#/state/${sortDef}` } }
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function rerender() {
|
|
148
|
+
const layer = document.querySelector("#layer-dialog");
|
|
149
|
+
const slot = layer?.lastElementChild;
|
|
150
|
+
if (slot) {
|
|
151
|
+
render(buildTpl(), slot);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function buildTpl() {
|
|
155
|
+
return html`
|
|
156
|
+
<sp-dialog-wrapper
|
|
157
|
+
open
|
|
158
|
+
underlay
|
|
159
|
+
headline="Repeat..."
|
|
160
|
+
confirm-label="Create Repeater"
|
|
161
|
+
cancel-label="Cancel"
|
|
162
|
+
size="s"
|
|
163
|
+
@confirm=${confirm}
|
|
164
|
+
@cancel=${() => done(null)}
|
|
165
|
+
@close=${() => done(null)}
|
|
166
|
+
>
|
|
167
|
+
<div style="display:flex;flex-direction:column;gap:12px">
|
|
168
|
+
<label>
|
|
169
|
+
<sp-field-label size="s">Items source</sp-field-label>
|
|
170
|
+
<sp-picker
|
|
171
|
+
label="Items source"
|
|
172
|
+
size="s"
|
|
173
|
+
.value=${source}
|
|
174
|
+
@change=${(e) => {
|
|
175
|
+
source = e.target.value;
|
|
176
|
+
error = "";
|
|
177
|
+
rerender();
|
|
178
|
+
}}
|
|
179
|
+
>
|
|
180
|
+
${arrayDefs.map(([name]) => html`<sp-menu-item value=${name}>${name}</sp-menu-item>`)}
|
|
181
|
+
<sp-menu-divider></sp-menu-divider>
|
|
182
|
+
<sp-menu-item value="__new__">Create new...</sp-menu-item>
|
|
183
|
+
</sp-picker>
|
|
184
|
+
</label>
|
|
185
|
+
|
|
186
|
+
${source === "__new__" ? html`
|
|
187
|
+
<label>
|
|
188
|
+
<sp-field-label size="s">New definition name</sp-field-label>
|
|
189
|
+
<sp-textfield
|
|
190
|
+
size="s"
|
|
191
|
+
placeholder="myItems"
|
|
192
|
+
.value=${newDefName}
|
|
193
|
+
?invalid=${Boolean(error)}
|
|
194
|
+
@input=${(e) => {
|
|
195
|
+
newDefName = e.target.value || "";
|
|
196
|
+
error = "";
|
|
197
|
+
rerender();
|
|
198
|
+
}}
|
|
199
|
+
@keydown=${(e) => {
|
|
200
|
+
if (e.key === "Enter") {
|
|
201
|
+
confirm();
|
|
202
|
+
}
|
|
203
|
+
}}
|
|
204
|
+
${ref((el) => {
|
|
205
|
+
if (el && source === "__new__") {
|
|
206
|
+
requestAnimationFrame(() => el.focus());
|
|
207
|
+
}
|
|
208
|
+
})}
|
|
209
|
+
>
|
|
210
|
+
<sp-help-text slot="negative-help-text">${error}</sp-help-text>
|
|
211
|
+
</sp-textfield>
|
|
212
|
+
</label>
|
|
213
|
+
` : nothing}
|
|
214
|
+
${fnDefs.length > 0 ? html`
|
|
215
|
+
<label>
|
|
216
|
+
<sp-field-label size="s">Filter (optional)</sp-field-label>
|
|
217
|
+
<sp-picker
|
|
218
|
+
label="Filter"
|
|
219
|
+
size="s"
|
|
220
|
+
.value=${filterDef}
|
|
221
|
+
@change=${(e) => {
|
|
222
|
+
filterDef = e.target.value;
|
|
223
|
+
rerender();
|
|
224
|
+
}}
|
|
225
|
+
>
|
|
226
|
+
<sp-menu-item value="">None</sp-menu-item>
|
|
227
|
+
${fnDefs.map(([name]) => html`<sp-menu-item value=${name}>${name}</sp-menu-item>`)}
|
|
228
|
+
</sp-picker>
|
|
229
|
+
</label>
|
|
230
|
+
<label>
|
|
231
|
+
<sp-field-label size="s">Sort (optional)</sp-field-label>
|
|
232
|
+
<sp-picker
|
|
233
|
+
label="Sort"
|
|
234
|
+
size="s"
|
|
235
|
+
.value=${sortDef}
|
|
236
|
+
@change=${(e) => {
|
|
237
|
+
sortDef = e.target.value;
|
|
238
|
+
rerender();
|
|
239
|
+
}}
|
|
240
|
+
>
|
|
241
|
+
<sp-menu-item value="">None</sp-menu-item>
|
|
242
|
+
${fnDefs.map(([name]) => html`<sp-menu-item value=${name}>${name}</sp-menu-item>`)}
|
|
243
|
+
</sp-picker>
|
|
244
|
+
</label>
|
|
245
|
+
` : nothing}
|
|
246
|
+
</div>
|
|
247
|
+
</sp-dialog-wrapper>
|
|
248
|
+
`;
|
|
249
|
+
}
|
|
250
|
+
return buildTpl();
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
export {
|
|
254
|
+
convertToRepeater
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
//# debugId=87EFEC12CDD8956F64756E2164756E21
|
|
258
|
+
//# sourceMappingURL=convert-to-repeater-t8kxre5s.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/editor/convert-to-repeater.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/// <reference lib=\"dom\" />\n// ─── Convert to Repeater ──────────────────────────────────────────────────────\nimport { html, render as litRender, nothing } from \"lit-html\";\nimport { ref } from \"lit-html/directives/ref.js\";\nimport { childIndex, childList, getNodeAtPath, parentElementPath } from \"../store\";\nimport { primarySelection } from \"../tabs/selection\";\nimport { activeTab } from \"../workspace/workspace\";\nimport { transactDoc } from \"../tabs/transact\";\nimport { showDialog } from \"../ui/layers\";\nimport { defCategory } from \"../panels/signals-panel\";\nimport { fetchPluginSchema } from \"../services/code-services\";\n\nimport type { JxMutableNode } from \"@jxsuite/schema/types\";\n\ninterface RepeaterConfig {\n items: { $ref: string } | unknown[];\n filter?: { $ref: string };\n sort?: { $ref: string };\n newDef?: { name: string };\n}\n\n/** Convert the currently selected element into a repeater template. */\nexport async function convertToRepeater() {\n const tab = activeTab.value;\n const path = primarySelection(tab?.session.selection);\n if (!tab || !path || path.length < 2) {\n return;\n }\n\n const node = getNodeAtPath(tab.doc.document, path);\n if (!node) {\n return;\n }\n\n const defs = tab.doc.document.state || {};\n const config = await promptRepeaterConfig(defs);\n if (!config) {\n return;\n }\n\n transactDoc(tab, (t) => {\n const doc = t.doc.document;\n if (config.newDef) {\n if (!doc.state) {\n doc.state = {};\n }\n doc.state[config.newDef.name] = { default: [], type: \"array\" };\n }\n const pp = parentElementPath(path);\n if (!pp) {\n return;\n }\n const idx = childIndex(path) as number;\n const parent = getNodeAtPath(doc, pp);\n if (!parent?.children) {\n return;\n }\n const element = childList(parent)[idx];\n\n const repeater: Record<string, unknown> = {\n $prototype: \"Array\",\n items: config.items,\n map: element,\n };\n if (config.filter) {\n repeater.filter = config.filter;\n }\n if (config.sort) {\n repeater.sort = config.sort;\n }\n\n // Replace the selected element in place with the array pseudo-element — no wrapper div. The\n // Repeated items render directly among the original parent's children.\n (parent.children as (string | JxMutableNode)[])[idx] = repeater as unknown as JxMutableNode;\n });\n}\n\n/**\n * @param {Record<string, unknown>} defs\n * @returns {Promise<RepeaterConfig | null>}\n */\nasync function promptRepeaterConfig(defs: Record<string, unknown>) {\n const arrayDefs = Object.entries(defs).filter(\n ([, d]) =>\n (d as Record<string, unknown> | null)?.type === \"array\" ||\n Array.isArray((d as Record<string, unknown> | null)?.default) ||\n (d as Record<string, unknown> | null)?.$prototype === \"Array\",\n );\n\n const tab = activeTab.value;\n const docPath = tab?.documentPath;\n for (const [name, d] of Object.entries(defs)) {\n const def = d as Record<string, unknown> | null;\n if (!def?.$prototype || def.$prototype === \"Function\" || def.$prototype === \"Array\") {\n continue;\n }\n if (arrayDefs.some(([n]) => n === name)) {\n continue;\n }\n const schema = await fetchPluginSchema(\n {\n ...(def.$src != null && { $src: def.$src as string }),\n $prototype: def.$prototype as string,\n },\n { ...(docPath != null && { documentPath: docPath }) },\n );\n if (schema?.returns?.type === \"array\") {\n arrayDefs.push([name, d]);\n }\n }\n\n const fnDefs = Object.entries(defs).filter(([, d]) => defCategory(d) === \"function\");\n\n let source = arrayDefs.length > 0 ? arrayDefs[0]![0] : \"__new__\";\n let newDefName = \"\";\n let filterDef = \"\";\n let sortDef = \"\";\n let error = \"\";\n\n return showDialog<RepeaterConfig | null>((done) => {\n function confirm() {\n if (source === \"__new__\") {\n const name = newDefName.trim();\n if (!name) {\n error = \"Enter a name for the new state definition.\";\n rerender();\n return;\n }\n if (defs[name]) {\n error = `\"${name}\" already exists.`;\n rerender();\n return;\n }\n if (!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name)) {\n error = \"Invalid identifier name.\";\n rerender();\n return;\n }\n done({\n items: { $ref: `#/state/${name}` },\n ...(filterDef && { filter: { $ref: `#/state/${filterDef}` } }),\n ...(sortDef && { sort: { $ref: `#/state/${sortDef}` } }),\n newDef: { name },\n });\n } else {\n done({\n items: { $ref: `#/state/${source}` },\n ...(filterDef && { filter: { $ref: `#/state/${filterDef}` } }),\n ...(sortDef && { sort: { $ref: `#/state/${sortDef}` } }),\n });\n }\n }\n\n function rerender() {\n const layer = document.querySelector(\"#layer-dialog\");\n const slot = layer?.lastElementChild;\n if (slot) {\n litRender(buildTpl(), slot as HTMLElement);\n }\n }\n\n function buildTpl() {\n return html`\n <sp-dialog-wrapper\n open\n underlay\n headline=\"Repeat...\"\n confirm-label=\"Create Repeater\"\n cancel-label=\"Cancel\"\n size=\"s\"\n @confirm=${confirm}\n @cancel=${() => done(null)}\n @close=${() => done(null)}\n >\n <div style=\"display:flex;flex-direction:column;gap:12px\">\n <label>\n <sp-field-label size=\"s\">Items source</sp-field-label>\n <sp-picker\n label=\"Items source\"\n size=\"s\"\n .value=${source}\n @change=${(e: Event) => {\n source = (e.target as HTMLInputElement).value;\n error = \"\";\n rerender();\n }}\n >\n ${arrayDefs.map(\n ([name]) => html`<sp-menu-item value=${name}>${name}</sp-menu-item>`,\n )}\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item value=\"__new__\">Create new...</sp-menu-item>\n </sp-picker>\n </label>\n\n ${\n source === \"__new__\"\n ? html`\n <label>\n <sp-field-label size=\"s\">New definition name</sp-field-label>\n <sp-textfield\n size=\"s\"\n placeholder=\"myItems\"\n .value=${newDefName}\n ?invalid=${Boolean(error)}\n @input=${(e: Event) => {\n newDefName = (e.target as HTMLInputElement).value || \"\";\n error = \"\";\n rerender();\n }}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n confirm();\n }\n }}\n ${ref((el) => {\n if (el && source === \"__new__\") {\n requestAnimationFrame(() => (el as HTMLElement).focus());\n }\n })}\n >\n <sp-help-text slot=\"negative-help-text\">${error}</sp-help-text>\n </sp-textfield>\n </label>\n `\n : nothing\n }\n ${\n fnDefs.length > 0\n ? html`\n <label>\n <sp-field-label size=\"s\">Filter (optional)</sp-field-label>\n <sp-picker\n label=\"Filter\"\n size=\"s\"\n .value=${filterDef}\n @change=${(e: Event) => {\n filterDef = (e.target as HTMLInputElement).value;\n rerender();\n }}\n >\n <sp-menu-item value=\"\">None</sp-menu-item>\n ${fnDefs.map(\n ([name]) => html`<sp-menu-item value=${name}>${name}</sp-menu-item>`,\n )}\n </sp-picker>\n </label>\n <label>\n <sp-field-label size=\"s\">Sort (optional)</sp-field-label>\n <sp-picker\n label=\"Sort\"\n size=\"s\"\n .value=${sortDef}\n @change=${(e: Event) => {\n sortDef = (e.target as HTMLInputElement).value;\n rerender();\n }}\n >\n <sp-menu-item value=\"\">None</sp-menu-item>\n ${fnDefs.map(\n ([name]) => html`<sp-menu-item value=${name}>${name}</sp-menu-item>`,\n )}\n </sp-picker>\n </label>\n `\n : nothing\n }\n </div>\n </sp-dialog-wrapper>\n `;\n }\n\n return buildTpl();\n });\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "87EFEC12CDD8956F64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|