@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
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
/// <reference lib="dom" />
|
|
2
2
|
// ─── Convert to Component ─────────────────────────────────────────────────────
|
|
3
3
|
import { html, render as litRender } from "lit-html";
|
|
4
|
+
import { displayTagName } from "@jxsuite/schema/guards";
|
|
4
5
|
import { errorMessage } from "@jxsuite/schema/parse";
|
|
5
6
|
import { ref } from "lit-html/directives/ref.js";
|
|
6
7
|
import { childIndex, getNodeAtPath, parentElementPath } from "../store";
|
|
8
|
+
import { primarySelection } from "../tabs/selection";
|
|
7
9
|
import { activeTab } from "../workspace/workspace";
|
|
8
10
|
import { transact } from "../tabs/transact";
|
|
9
11
|
import { componentRegistry, computeRelativePath, loadComponentRegistry } from "../files/components";
|
|
10
12
|
import { getPlatform } from "../platform";
|
|
11
13
|
import { jsonClone } from "../utils/studio-utils";
|
|
12
|
-
import {
|
|
14
|
+
import { notify } from "../services/notify";
|
|
13
15
|
import { showDialog } from "../ui/layers";
|
|
14
16
|
import { validateComponentSlots } from "../services/cem-export";
|
|
15
17
|
|
|
@@ -20,11 +22,12 @@ const VALID_NAME = /^[a-z][a-z0-9]*(-[a-z0-9]+)+$/;
|
|
|
20
22
|
/** Convert the currently selected element into a reusable component. */
|
|
21
23
|
export async function convertToComponent() {
|
|
22
24
|
const tab = activeTab.value;
|
|
23
|
-
|
|
25
|
+
const selected = primarySelection(tab?.session.selection);
|
|
26
|
+
if (!tab || !selected || selected.length < 2) {
|
|
24
27
|
return;
|
|
25
28
|
}
|
|
26
29
|
|
|
27
|
-
const node = getNodeAtPath(tab.doc.document,
|
|
30
|
+
const node = getNodeAtPath(tab.doc.document, selected);
|
|
28
31
|
if (!node || !node.tagName) {
|
|
29
32
|
return;
|
|
30
33
|
}
|
|
@@ -44,8 +47,8 @@ export async function convertToComponent() {
|
|
|
44
47
|
const refPath = computeRelativePath(tab.documentPath, componentFile);
|
|
45
48
|
|
|
46
49
|
// Single atomic mutation: replace node + add $elements ref
|
|
47
|
-
const selectionPath =
|
|
48
|
-
transact(tab, (doc) => {
|
|
50
|
+
const selectionPath = selected;
|
|
51
|
+
const converted = transact(tab, (doc) => {
|
|
49
52
|
// Navigate to parent's children array and replace the node
|
|
50
53
|
const pp = parentElementPath(selectionPath) ?? [];
|
|
51
54
|
const idx = childIndex(selectionPath) as number;
|
|
@@ -71,6 +74,15 @@ export async function convertToComponent() {
|
|
|
71
74
|
doc.$elements.push({ $ref: refPath });
|
|
72
75
|
}
|
|
73
76
|
});
|
|
77
|
+
/* THE FILE IS WRITTEN ONLY IF THE DOCUMENT TOOK THE REFERENCE.
|
|
78
|
+
`transact` consults the collab gate, which pauses structural editing while source is canonical.
|
|
79
|
+
A refusal used to be invisible here: the extraction still wrote `components/<name>.json` to
|
|
80
|
+
disk and still said "Converted to <name>" — leaving a component file nothing references, in a
|
|
81
|
+
document the author was told had been changed. The gate raises its own toast saying why the
|
|
82
|
+
edit is paused; the honest thing to add to it is nothing at all. */
|
|
83
|
+
if (!converted) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
74
86
|
|
|
75
87
|
// Write component file and refresh registry
|
|
76
88
|
try {
|
|
@@ -78,13 +90,22 @@ export async function convertToComponent() {
|
|
|
78
90
|
await platform.writeFile(componentFile, JSON.stringify(componentDef, null, 2));
|
|
79
91
|
await loadComponentRegistry();
|
|
80
92
|
const warning = validateComponentSlots(componentDef);
|
|
93
|
+
notify.success(`Converted to <${name}>`);
|
|
81
94
|
if (warning) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
95
|
+
// A slot warning is a thing to FIX, not a thing to read once: the component is written and
|
|
96
|
+
// Usable, and the defect stays listed until somebody edits it.
|
|
97
|
+
notify.warn(`<${name}> has a slot problem: ${warning}`, {
|
|
98
|
+
path: componentFile,
|
|
99
|
+
source: "Components",
|
|
100
|
+
tier: "problem",
|
|
101
|
+
});
|
|
85
102
|
}
|
|
86
103
|
} catch (error) {
|
|
87
|
-
|
|
104
|
+
notify.error(`Could not save the <${name}> component.`, {
|
|
105
|
+
detail: errorMessage(error),
|
|
106
|
+
path: componentFile,
|
|
107
|
+
source: "Components",
|
|
108
|
+
});
|
|
88
109
|
}
|
|
89
110
|
}
|
|
90
111
|
|
|
@@ -98,7 +119,7 @@ function deriveDefaultName(node: JxMutableNode) {
|
|
|
98
119
|
if (node.$id && node.$id.includes("-")) {
|
|
99
120
|
return node.$id.toLowerCase();
|
|
100
121
|
}
|
|
101
|
-
const tag = (node.tagName
|
|
122
|
+
const tag = (displayTagName(node.tagName) || "div").toLowerCase();
|
|
102
123
|
return tag.includes("-") ? tag : `jx-${tag}`;
|
|
103
124
|
}
|
|
104
125
|
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { html, render as litRender, nothing } from "lit-html";
|
|
4
4
|
import { ref } from "lit-html/directives/ref.js";
|
|
5
5
|
import { childIndex, childList, getNodeAtPath, parentElementPath } from "../store";
|
|
6
|
+
import { primarySelection } from "../tabs/selection";
|
|
6
7
|
import { activeTab } from "../workspace/workspace";
|
|
7
8
|
import { transactDoc } from "../tabs/transact";
|
|
8
9
|
import { showDialog } from "../ui/layers";
|
|
@@ -21,11 +22,11 @@ interface RepeaterConfig {
|
|
|
21
22
|
/** Convert the currently selected element into a repeater template. */
|
|
22
23
|
export async function convertToRepeater() {
|
|
23
24
|
const tab = activeTab.value;
|
|
24
|
-
|
|
25
|
+
const path = primarySelection(tab?.session.selection);
|
|
26
|
+
if (!tab || !path || path.length < 2) {
|
|
25
27
|
return;
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
const path = tab.session.selection;
|
|
29
30
|
const node = getNodeAtPath(tab.doc.document, path);
|
|
30
31
|
if (!node) {
|
|
31
32
|
return;
|
|
@@ -182,7 +182,7 @@ export function applyBlockMerge(
|
|
|
182
182
|
// Linger as invisible structure that still occupies layout and shows up in the layers panel.
|
|
183
183
|
pruneEmptyAncestors(t, parentElementPath(fromPath) as JxPath);
|
|
184
184
|
if (isTabActive(tab)) {
|
|
185
|
-
t.session.selection = intoPath;
|
|
185
|
+
t.session.selection = [intoPath];
|
|
186
186
|
}
|
|
187
187
|
});
|
|
188
188
|
|
|
@@ -248,7 +248,7 @@ export function applyInlineSplit(
|
|
|
248
248
|
// A background tab's selection stays exactly as the user left it — only the visible tab's
|
|
249
249
|
// Selection follows the split.
|
|
250
250
|
if (isTabActive(tab)) {
|
|
251
|
-
t.session.selection = newPath;
|
|
251
|
+
t.session.selection = [newPath];
|
|
252
252
|
}
|
|
253
253
|
});
|
|
254
254
|
return newPath;
|
|
@@ -279,7 +279,7 @@ export function applyInlineInsert(
|
|
|
279
279
|
mutateUpdateProperty(t, path, "textContent");
|
|
280
280
|
}
|
|
281
281
|
if (isTabActive(tab)) {
|
|
282
|
-
t.session.selection = path;
|
|
282
|
+
t.session.selection = [path];
|
|
283
283
|
}
|
|
284
284
|
});
|
|
285
285
|
return path;
|
|
@@ -303,7 +303,7 @@ export function applyInlineInsert(
|
|
|
303
303
|
}
|
|
304
304
|
mutateInsertNode(t, parentPath, idx + 1, structuredClone(elementDef));
|
|
305
305
|
if (isTabActive(tab)) {
|
|
306
|
-
t.session.selection = newPath;
|
|
306
|
+
t.session.selection = [newPath];
|
|
307
307
|
}
|
|
308
308
|
});
|
|
309
309
|
return newPath;
|
|
@@ -364,7 +364,7 @@ export function applyRangeReplace(
|
|
|
364
364
|
}
|
|
365
365
|
}
|
|
366
366
|
if (isTabActive(tab)) {
|
|
367
|
-
t.session.selection = from.path;
|
|
367
|
+
t.session.selection = [from.path];
|
|
368
368
|
}
|
|
369
369
|
});
|
|
370
370
|
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import elementsMeta from "../../data/elements-meta.json";
|
|
11
|
-
import {
|
|
11
|
+
import { displayTagName } from "@jxsuite/schema/guards";
|
|
12
|
+
import { normalizeInlineContent } from "./inline-format";
|
|
12
13
|
import { isEditableTag } from "./editable-tags";
|
|
13
14
|
import type { EditableVerdicts } from "./editable-tags";
|
|
14
15
|
import type { JxPath } from "../state";
|
|
@@ -51,6 +52,14 @@ export interface InlineAction {
|
|
|
51
52
|
label: string;
|
|
52
53
|
icon?: string;
|
|
53
54
|
command?: string;
|
|
55
|
+
/**
|
|
56
|
+
* REMOVED from the data, and the field stays only so an older `elements-meta.json` still parses.
|
|
57
|
+
*
|
|
58
|
+
* It held `"Cmd+B"` — a mac spelling, printed verbatim into every tooltip on every platform,
|
|
59
|
+
* which is the hardcoded-chord defect plan §5.3 exists to kill. The chord now lives on the
|
|
60
|
+
* `format.*` record (`panels/block-action-bar.ts`) and is formatted by the keymap's one
|
|
61
|
+
* formatter. Nothing reads this.
|
|
62
|
+
*/
|
|
54
63
|
shortcut?: string;
|
|
55
64
|
}
|
|
56
65
|
|
|
@@ -213,9 +222,9 @@ export function isInlineElement(node: JxMutableNode, parentNode?: JxMutableNode)
|
|
|
213
222
|
if (!node || typeof node !== "object") {
|
|
214
223
|
return false;
|
|
215
224
|
}
|
|
216
|
-
const childTag = (node.tagName
|
|
225
|
+
const childTag = (displayTagName(node.tagName) || "div").toLowerCase();
|
|
217
226
|
if (parentNode) {
|
|
218
|
-
const parentTag = (parentNode.tagName
|
|
227
|
+
const parentTag = (displayTagName(parentNode.tagName) || "div").toLowerCase();
|
|
219
228
|
return isInlineInContext(childTag, parentTag);
|
|
220
229
|
}
|
|
221
230
|
return INLINE_TAGS.has(childTag);
|
|
@@ -423,57 +432,25 @@ function handleKeydown(e: KeyboardEvent) {
|
|
|
423
432
|
if ((e.ctrlKey || e.metaKey) && ["b", "i", "u", "`"].includes(e.key)) {
|
|
424
433
|
e.preventDefault();
|
|
425
434
|
}
|
|
426
|
-
return;
|
|
427
435
|
}
|
|
428
436
|
|
|
429
437
|
// Escape and Enter are NOT handled here. Enter arrives as a `beforeinput` (`insertParagraph`),
|
|
430
438
|
// Which is the one place structural intent is classified; Escape belongs to the editing host,
|
|
431
439
|
// Which owns dismissing the caret. See {@link file://../canvas/iframe-editable-root.ts}.
|
|
432
|
-
|
|
433
|
-
//
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
if (textBefore === "" || textBefore.endsWith(" ") || textBefore.endsWith("\n")) {
|
|
441
|
-
// Let the / character be typed, then show menu on next input
|
|
442
|
-
requestAnimationFrame(() => openSlashMenu());
|
|
443
|
-
return;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
// Rich text shortcuts
|
|
449
|
-
if (e.ctrlKey || e.metaKey) {
|
|
450
|
-
switch (e.key) {
|
|
451
|
-
case "b": {
|
|
452
|
-
e.preventDefault();
|
|
453
|
-
toggleInlineFormat("strong", activeEl);
|
|
454
|
-
break;
|
|
455
|
-
}
|
|
456
|
-
case "i": {
|
|
457
|
-
e.preventDefault();
|
|
458
|
-
toggleInlineFormat("em", activeEl);
|
|
459
|
-
break;
|
|
460
|
-
}
|
|
461
|
-
case "`": {
|
|
462
|
-
e.preventDefault();
|
|
463
|
-
toggleInlineFormat("code", activeEl);
|
|
464
|
-
break;
|
|
465
|
-
}
|
|
466
|
-
default: {
|
|
467
|
-
break;
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
}
|
|
440
|
+
//
|
|
441
|
+
// Neither is the "/" gesture, and neither are the format chords. Both used to be here, and
|
|
442
|
+
// Both were DEAD: this listener is attached to the BLOCK, and for an ordinary block the editing
|
|
443
|
+
// Host is the canvas container (see {@link startEditing}), so the focused element — and every
|
|
444
|
+
// Keydown's target — is the container, never a descendant of it. The "/" trigger is
|
|
445
|
+
// {@link handleSlashTrigger}, driven from the host; the format chords are `format.*` records
|
|
446
|
+
// Whose chords the frame forwards (`canvas/iframe-keys.ts`). A revived copy here would have
|
|
447
|
+
// Toggled bold twice per press.
|
|
471
448
|
}
|
|
472
449
|
|
|
473
450
|
function handleInput() {
|
|
474
451
|
// Check if slash menu should update or dismiss
|
|
475
452
|
if (slash.isOpen()) {
|
|
476
|
-
|
|
453
|
+
refreshSlashMenu();
|
|
477
454
|
}
|
|
478
455
|
}
|
|
479
456
|
|
|
@@ -773,7 +750,28 @@ function getTextBeforeCursor(range: Range) {
|
|
|
773
750
|
/** Track the character offset where "/" was typed so we can detect backspace-past-slash */
|
|
774
751
|
let _slashFilterStart = 0;
|
|
775
752
|
|
|
776
|
-
|
|
753
|
+
/**
|
|
754
|
+
* Whether a literal "/" in the block anchors the open menu.
|
|
755
|
+
*
|
|
756
|
+
* False when the menu was opened BY NAME — `insert.openSlashMenu`, the palette, the automation
|
|
757
|
+
* runner — where there is no slash in the text at all. Two behaviours hang off it, and both are
|
|
758
|
+
* wrong without it: the filter would be re-derived from the text before the caret and dismiss the
|
|
759
|
+
* menu on the very next keystroke, and selecting a block would delete everything from the previous
|
|
760
|
+
* slash in the line ("and/or…") back to the caret. A command-opened menu filters in its own field
|
|
761
|
+
* and deletes nothing.
|
|
762
|
+
*/
|
|
763
|
+
let _slashAnchored = true;
|
|
764
|
+
|
|
765
|
+
/**
|
|
766
|
+
* Open the slash menu at the caret.
|
|
767
|
+
*
|
|
768
|
+
* Exported because the block-level `keydown` listener that used to call it never fires: for an
|
|
769
|
+
* ordinary block the editing host is the canvas container, so the "/" gesture is recognised at the
|
|
770
|
+
* host ({@link handleSlashTrigger}) and a command opens it from the other realm entirely.
|
|
771
|
+
*
|
|
772
|
+
* @param opts.anchored Whether a literal "/" precedes the caret. See {@link _slashAnchored}.
|
|
773
|
+
*/
|
|
774
|
+
export function openSlashMenu(opts?: { anchored?: boolean }): void {
|
|
777
775
|
if (!activeEl || !insertFn || !activePath) {
|
|
778
776
|
return;
|
|
779
777
|
}
|
|
@@ -783,13 +781,48 @@ function openSlashMenu() {
|
|
|
783
781
|
return;
|
|
784
782
|
}
|
|
785
783
|
const range = sel.getRangeAt(0);
|
|
784
|
+
_slashAnchored = opts?.anchored !== false;
|
|
786
785
|
_slashFilterStart = getTextBeforeCursor(range).length;
|
|
787
786
|
|
|
788
|
-
|
|
787
|
+
// An unanchored menu carries its own filter field: there is no "/…" run in the document for the
|
|
788
|
+
// Author to type into, so without one the list could only ever be filtered by scrolling it.
|
|
789
|
+
slash.show(activeEl, "", {
|
|
790
|
+
onSelect: handleSlashSelect,
|
|
791
|
+
...(_slashAnchored ? {} : { showFilter: true }),
|
|
792
|
+
});
|
|
789
793
|
}
|
|
790
794
|
|
|
791
|
-
|
|
792
|
-
|
|
795
|
+
/**
|
|
796
|
+
* The "/" gesture, driven from the EDITING HOST.
|
|
797
|
+
*
|
|
798
|
+
* A slash opens the menu at the start of a block or after a space — anywhere else it is punctuation
|
|
799
|
+
* ("and/or"), and a menu there would be an ambush. The character is allowed to land first, so the
|
|
800
|
+
* document holds what the author typed whether or not they pick anything from the list.
|
|
801
|
+
*/
|
|
802
|
+
export function handleSlashTrigger(e: KeyboardEvent): void {
|
|
803
|
+
if (e.key !== "/" || e.ctrlKey || e.metaKey || !activeEl) {
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
const sel = window.getSelection();
|
|
807
|
+
if (!sel || sel.rangeCount === 0) {
|
|
808
|
+
return;
|
|
809
|
+
}
|
|
810
|
+
const textBefore = getTextBeforeCursor(sel.getRangeAt(0));
|
|
811
|
+
if (textBefore === "" || textBefore.endsWith(" ") || textBefore.endsWith("\n")) {
|
|
812
|
+
requestAnimationFrame(() => openSlashMenu());
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
/**
|
|
817
|
+
* Re-filter an open menu from the text the author has typed after the "/".
|
|
818
|
+
*
|
|
819
|
+
* Exported for the same reason {@link openSlashMenu} is: the `input` listener that called it is on
|
|
820
|
+
* the block, and a contenteditable's `input` targets the editing HOST.
|
|
821
|
+
*/
|
|
822
|
+
export function refreshSlashMenu(): void {
|
|
823
|
+
if (!activeEl || !_slashAnchored) {
|
|
824
|
+
// The menu owns its own filter field; the document has no "/…" run to derive one from, and
|
|
825
|
+
// Deriving one would dismiss the menu on the first character.
|
|
793
826
|
return;
|
|
794
827
|
}
|
|
795
828
|
|
|
@@ -818,8 +851,11 @@ function handleSlashSelect(cmd: SlashCommand) {
|
|
|
818
851
|
return;
|
|
819
852
|
}
|
|
820
853
|
|
|
821
|
-
|
|
822
|
-
|
|
854
|
+
/* Remove the "/command" run the author typed — but ONLY when a "/" is what opened the menu.
|
|
855
|
+
An unanchored menu (opened by name, from the palette or `insert.openSlashMenu`) has no such
|
|
856
|
+
run, and this walk would delete from the last slash ANYWHERE earlier in the block back to the
|
|
857
|
+
caret: type "and/or" and pick Heading, and "or" goes with it. */
|
|
858
|
+
const sel = _slashAnchored ? window.getSelection() : null;
|
|
823
859
|
if (sel && sel.rangeCount) {
|
|
824
860
|
const range = sel.getRangeAt(0);
|
|
825
861
|
const fullText = getTextBeforeCursor(range);
|
|
@@ -27,7 +27,7 @@ export function runInsertZoneAction(btn: HTMLElement, zone: InsertZone): void {
|
|
|
27
27
|
const newPath = [...insertPath, "children", idx];
|
|
28
28
|
transactDoc(activeTab.value, (t) => {
|
|
29
29
|
mutateInsertNode(t, insertPath, idx, def);
|
|
30
|
-
t.session.selection = newPath;
|
|
30
|
+
t.session.selection = [newPath];
|
|
31
31
|
});
|
|
32
32
|
},
|
|
33
33
|
showFilter: true,
|