@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
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Value Source — the one vocabulary for "how is this value produced", and the derivation that says
|
|
3
|
+
* which productions a given document position actually permits (plan §6.3).
|
|
4
|
+
*
|
|
5
|
+
* Six controls used to answer that question in six dialects: `abc / $ref / ${} / fx` on the dynamic
|
|
6
|
+
* slot, `inline / $expression / ref` on the Events tab, `lit / $ref / expr` on every expression
|
|
7
|
+
* operand, and `Static value / route param / Custom…` in the schema-driven forms. They are the same
|
|
8
|
+
* four rungs of the Rule of Least Power ladder (spec §2.2) wearing four costumes, and a user who
|
|
9
|
+
* learned one learned none of the others. {@link VALUE_SOURCE_LABELS} is the single vocabulary;
|
|
10
|
+
* every surface that offers the choice spells it the same way.
|
|
11
|
+
*
|
|
12
|
+
* **The rungs are derived, not declared.** Each call site used to hand-write the array of rungs it
|
|
13
|
+
* believed legal — four arrays, none of which included `expression`, so the `fx` rung the UI drew
|
|
14
|
+
* was unreachable from every Properties and Style field. {@link deriveSlotCaps} walks the real
|
|
15
|
+
* subschema from `@jxsuite/schema/defs` instead, so the rungs on offer are exactly the shapes the
|
|
16
|
+
* document schema (and therefore `jx validate` and the compiler) accepts at that position:
|
|
17
|
+
*
|
|
18
|
+
* - An attribute, a component prop or an element property → fixed / from-data / mixed-text;
|
|
19
|
+
* - A CSS declaration → fixed / mixed-text, because `JxStyle` has no `$ref` branch at all;
|
|
20
|
+
* - An event handler → from-data / formula / inline-function, and never a fixed value;
|
|
21
|
+
* - A repeater's filter or sort, and a `$switch` discriminant → from-data and nothing else, because
|
|
22
|
+
* `ArrayNamespace` and `SwitchDef` declare a `RefObject` there and no other branch.
|
|
23
|
+
*
|
|
24
|
+
* The walker imports the _source_ def modules rather than the generated `schema.json`, which is
|
|
25
|
+
* half a megabyte of webref data that `services/monaco-lazy.ts` deliberately keeps out of the cold
|
|
26
|
+
* start. The one position the generator synthesises rather than declares — the `on*` handler
|
|
27
|
+
* property — is mirrored here as {@link EVENT_HANDLER_SCHEMA} and pinned to the generated schema by
|
|
28
|
+
* a test, so the mirror cannot drift in silence.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
import {
|
|
32
|
+
arrayNamespaceSchema,
|
|
33
|
+
attributesObjectSchema,
|
|
34
|
+
elementPropertyValueSchema,
|
|
35
|
+
elementTagNameSchema,
|
|
36
|
+
expressionEntrySchema,
|
|
37
|
+
functionDefSchema,
|
|
38
|
+
propsObjectSchema,
|
|
39
|
+
refObjectSchema,
|
|
40
|
+
stringOrRefSchema,
|
|
41
|
+
styleObjectSchema,
|
|
42
|
+
switchDefSchema,
|
|
43
|
+
tagNameSchema,
|
|
44
|
+
} from "@jxsuite/schema/defs";
|
|
45
|
+
import { isFunctionDef, isRef, isTemplateString } from "@jxsuite/schema/guards";
|
|
46
|
+
|
|
47
|
+
/** A rung of the value ladder — one way a document position can produce its value. */
|
|
48
|
+
export type SlotMode = "literal" | "ref" | "template" | "expression" | "function";
|
|
49
|
+
|
|
50
|
+
/** Ladder order, least powerful first (spec §2.2). Every rung list is sorted by this. */
|
|
51
|
+
export const SLOT_MODE_ORDER: SlotMode[] = ["literal", "ref", "template", "expression", "function"];
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The user-facing name of each rung — the whole point of §6.3. `ref` keeps its ellipsis because
|
|
55
|
+
* choosing it opens a picker rather than committing a value.
|
|
56
|
+
*/
|
|
57
|
+
export const VALUE_SOURCE_LABELS: Record<SlotMode, string> = {
|
|
58
|
+
expression: "Formula",
|
|
59
|
+
function: "Inline function",
|
|
60
|
+
literal: "Fixed value",
|
|
61
|
+
ref: "From data…",
|
|
62
|
+
template: "Mixed text",
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/** One line of plain language per rung, shown beside its name in the picker. */
|
|
66
|
+
export const VALUE_SOURCE_HINTS: Record<SlotMode, string> = {
|
|
67
|
+
expression: "Computed from other values, built up operator by operator.",
|
|
68
|
+
function: "Code that runs when this fires.",
|
|
69
|
+
literal: "A value you type here, the same every time.",
|
|
70
|
+
ref: "The current value of a signal, picked from a list.",
|
|
71
|
+
template: "Text with ${…} placeholders that fill in from signals.",
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/** Detect which rung of the ladder a raw document value occupies. */
|
|
75
|
+
export function slotMode(value: unknown): SlotMode {
|
|
76
|
+
if (isRef(value)) {
|
|
77
|
+
return "ref";
|
|
78
|
+
}
|
|
79
|
+
if (isFunctionDef(value)) {
|
|
80
|
+
return "function";
|
|
81
|
+
}
|
|
82
|
+
if (isTemplateString(value)) {
|
|
83
|
+
return "template";
|
|
84
|
+
}
|
|
85
|
+
if (value && typeof value === "object" && "$expression" in value) {
|
|
86
|
+
return "expression";
|
|
87
|
+
}
|
|
88
|
+
return "literal";
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// ─── Schema walk ────────────────────────────────────────────────────────────
|
|
92
|
+
|
|
93
|
+
type SchemaNode = Record<string, unknown>;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* The `on*` property shape that `@jxsuite/schema`'s generator synthesises for every EventHandler
|
|
97
|
+
* IDL attribute (`buildEventHandlerProperties`). It is the only slot position with no declared
|
|
98
|
+
* module in `defs/`; `tests/value-source.test.ts` asserts it still equals the generated one.
|
|
99
|
+
*/
|
|
100
|
+
export const EVENT_HANDLER_SCHEMA = {
|
|
101
|
+
oneOf: [
|
|
102
|
+
{ $ref: "#/$defs/RefObject" },
|
|
103
|
+
{ $ref: "#/$defs/ExpressionEntry" },
|
|
104
|
+
{ $ref: "#/$defs/FunctionDef" },
|
|
105
|
+
],
|
|
106
|
+
} as const;
|
|
107
|
+
|
|
108
|
+
/** The `$defs` a slot position can actually reach. Anything else is a bug, not a silent no-rung. */
|
|
109
|
+
const REACHABLE_DEFS: Record<string, SchemaNode> = {
|
|
110
|
+
ExpressionEntry: expressionEntrySchema as unknown as SchemaNode,
|
|
111
|
+
FunctionDef: functionDefSchema as unknown as SchemaNode,
|
|
112
|
+
RefObject: refObjectSchema as unknown as SchemaNode,
|
|
113
|
+
StyleObject: styleObjectSchema as unknown as SchemaNode,
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/** A `{ $ref: … }` binding object: `required: ["$ref"]` with a `$ref` property. */
|
|
117
|
+
function isRefObjectSchema(node: SchemaNode): boolean {
|
|
118
|
+
const { required } = node;
|
|
119
|
+
return (
|
|
120
|
+
Array.isArray(required) &&
|
|
121
|
+
required.includes("$ref") &&
|
|
122
|
+
Boolean((node.properties as SchemaNode | undefined)?.$ref)
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** A `{ $expression: … }` entry. */
|
|
127
|
+
function isExpressionEntrySchema(node: SchemaNode): boolean {
|
|
128
|
+
const { required } = node;
|
|
129
|
+
return Array.isArray(required) && required.includes("$expression");
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** A `$prototype: "Function"` declaration. */
|
|
133
|
+
function isFunctionDefSchema(node: SchemaNode): boolean {
|
|
134
|
+
const proto = (node.properties as SchemaNode | undefined)?.$prototype as SchemaNode | undefined;
|
|
135
|
+
return proto?.const === "Function";
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* A string branch that will accept `${…}`. A pattern/enum/const-constrained string will not — a
|
|
140
|
+
* `TagName` or a `#/state/…` pointer is a string, but not a place a template may be typed.
|
|
141
|
+
*/
|
|
142
|
+
function isFreeStringSchema(node: SchemaNode): boolean {
|
|
143
|
+
return (
|
|
144
|
+
node.type === "string" &&
|
|
145
|
+
node.pattern === undefined &&
|
|
146
|
+
node.enum === undefined &&
|
|
147
|
+
node.const === undefined
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const SCALAR_TYPES = new Set(["array", "boolean", "integer", "null", "number", "object", "string"]);
|
|
152
|
+
|
|
153
|
+
interface WalkState {
|
|
154
|
+
found: Set<SlotMode>;
|
|
155
|
+
/** Pointers the walk could not resolve — surfaced so a schema move fails loudly. */
|
|
156
|
+
unresolved: Set<string>;
|
|
157
|
+
seen: Set<SchemaNode>;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function walk(node: unknown, state: WalkState): void {
|
|
161
|
+
if (!node || typeof node !== "object") {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const schema = node as SchemaNode;
|
|
165
|
+
if (state.seen.has(schema)) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
state.seen.add(schema);
|
|
169
|
+
|
|
170
|
+
const pointer = typeof schema.$ref === "string" ? schema.$ref : undefined;
|
|
171
|
+
if (pointer !== undefined && Object.keys(schema).length === 1) {
|
|
172
|
+
const name = pointer.startsWith("#/$defs/") ? pointer.slice("#/$defs/".length) : pointer;
|
|
173
|
+
const target = REACHABLE_DEFS[name];
|
|
174
|
+
if (target) {
|
|
175
|
+
walk(target, state);
|
|
176
|
+
} else {
|
|
177
|
+
state.unresolved.add(pointer);
|
|
178
|
+
}
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* Recognise a rung BEFORE descending: a RefObject's own `$ref` property is a pointer string,
|
|
183
|
+
not another rung, and an ExpressionEntry's body is the expression grammar, not a ladder. */
|
|
184
|
+
if (isRefObjectSchema(schema)) {
|
|
185
|
+
state.found.add("ref");
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (isExpressionEntrySchema(schema)) {
|
|
189
|
+
state.found.add("expression");
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (isFunctionDefSchema(schema)) {
|
|
193
|
+
state.found.add("function");
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
let composed = false;
|
|
198
|
+
for (const key of ["oneOf", "anyOf", "allOf"]) {
|
|
199
|
+
const branches = schema[key];
|
|
200
|
+
if (Array.isArray(branches)) {
|
|
201
|
+
composed = true;
|
|
202
|
+
for (const branch of branches) {
|
|
203
|
+
walk(branch, state);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (composed) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if (isFreeStringSchema(schema)) {
|
|
212
|
+
state.found.add("literal");
|
|
213
|
+
state.found.add("template");
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (schema.enum !== undefined || schema.const !== undefined) {
|
|
217
|
+
state.found.add("literal");
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (typeof schema.type === "string" && SCALAR_TYPES.has(schema.type)) {
|
|
221
|
+
state.found.add("literal");
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/** Result of a derivation, including the pointers it could not follow. */
|
|
226
|
+
export interface DerivedCaps {
|
|
227
|
+
caps: SlotMode[];
|
|
228
|
+
unresolved: string[];
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/** Derive the rungs a subschema permits, and report any pointer the walk could not follow. */
|
|
232
|
+
export function deriveSlotCapsDetailed(schema: unknown): DerivedCaps {
|
|
233
|
+
const state: WalkState = { found: new Set(), seen: new Set(), unresolved: new Set() };
|
|
234
|
+
walk(schema, state);
|
|
235
|
+
return {
|
|
236
|
+
caps: SLOT_MODE_ORDER.filter((m) => state.found.has(m)),
|
|
237
|
+
unresolved: [...state.unresolved].toSorted(),
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/** Derive the rungs a subschema permits, in ladder order. */
|
|
242
|
+
export function deriveSlotCaps(schema: unknown): SlotMode[] {
|
|
243
|
+
return deriveSlotCapsDetailed(schema).caps;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// ─── Named positions ────────────────────────────────────────────────────────
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* `ElementTagName`, with `TagName` INLINED so the walk can see it.
|
|
250
|
+
*
|
|
251
|
+
* The shipped def points at `#/$defs/TagName`, and this walker resolves no pointer into the core
|
|
252
|
+
* schema — `deriveSlotCapsDetailed` reports it as unresolved, and the position derived to Formula
|
|
253
|
+
* alone, silently losing the Fixed-value rung. Substituting the def keeps one source of truth for
|
|
254
|
+
* the branches while giving the derivation something it can actually walk.
|
|
255
|
+
*
|
|
256
|
+
* Note what the pattern buys here for free: `isFreeStringSchema` refuses a constrained string, so
|
|
257
|
+
* no `template` rung is offered — and a `${…}` in tag position is exactly what that pattern exists
|
|
258
|
+
* to reject.
|
|
259
|
+
*/
|
|
260
|
+
const ELEMENT_TAG_SCHEMA = {
|
|
261
|
+
anyOf: [tagNameSchema, ...elementTagNameSchema.anyOf.slice(1)],
|
|
262
|
+
} as const;
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* The document positions a bindable slot can occupy. A panel names the position it is editing; the
|
|
266
|
+
* rungs follow from the schema, so a panel can no longer offer a rung the compiler would reject —
|
|
267
|
+
* nor withhold one it would accept.
|
|
268
|
+
*/
|
|
269
|
+
export const SLOT_POSITION_SCHEMAS = {
|
|
270
|
+
/** `attributes: { … }` — `AttributesObject.additionalProperties`. */
|
|
271
|
+
attribute: attributesObjectSchema.additionalProperties,
|
|
272
|
+
/** `$props: { … }` — `PropsObject.additionalProperties`. */
|
|
273
|
+
componentProp: propsObjectSchema.additionalProperties,
|
|
274
|
+
/** An unlisted element property — `ElementDef.additionalProperties`. */
|
|
275
|
+
elementProperty: elementPropertyValueSchema,
|
|
276
|
+
/** An `on*` handler — the generator's synthesised property shape. */
|
|
277
|
+
eventHandler: EVENT_HANDLER_SCHEMA,
|
|
278
|
+
/** A repeater's `filter` — `ArrayNamespace.properties.filter`. */
|
|
279
|
+
repeaterFilter: arrayNamespaceSchema.properties.filter,
|
|
280
|
+
/** A repeater's `items` — `ArrayNamespace.properties.items`. */
|
|
281
|
+
repeaterItems: arrayNamespaceSchema.properties.items,
|
|
282
|
+
/** A repeater's `sort` — `ArrayNamespace.properties.sort`. */
|
|
283
|
+
repeaterSort: arrayNamespaceSchema.properties.sort,
|
|
284
|
+
/** A declaration inside `style: { … }` — `StyleObject.additionalProperties`. */
|
|
285
|
+
styleProperty: styleObjectSchema.additionalProperties,
|
|
286
|
+
/** A `$switch` discriminant — `SwitchDef`, which is a `$ref` and nothing else. */
|
|
287
|
+
switchDiscriminant: switchDefSchema,
|
|
288
|
+
/**
|
|
289
|
+
* An element's `tagName` — `ElementTagName`: a literal name, or a `TagExpression` choosing
|
|
290
|
+
* between names. The rungs derive to Fixed value + Formula, which is the whole point of naming
|
|
291
|
+
* the position rather than hand-rolling a control: the `TagName` branch carries a `pattern`, so
|
|
292
|
+
* `isFreeStringSchema` correctly refuses to offer a template rung here — a `${…}` in tag position
|
|
293
|
+
* is exactly what the pattern exists to reject.
|
|
294
|
+
*/
|
|
295
|
+
elementTag: ELEMENT_TAG_SCHEMA,
|
|
296
|
+
/** A declared string-valued element property (`textContent`, `href`, …) — `StringOrRef`. */
|
|
297
|
+
textProperty: stringOrRefSchema,
|
|
298
|
+
} as const;
|
|
299
|
+
|
|
300
|
+
/** Name of a document position a bindable slot can occupy. */
|
|
301
|
+
export type SlotPosition = keyof typeof SLOT_POSITION_SCHEMAS;
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Where a slot's rungs come from. A named {@link SlotPosition} for every position the document
|
|
305
|
+
* schema declares; a schema handed in directly for the one that cannot be named ahead of time — a
|
|
306
|
+
* field in an extension's own config form, whose schema arrives at runtime from the extension.
|
|
307
|
+
*
|
|
308
|
+
* There is deliberately no third form. A caller may not state which rungs it wants: the rungs are
|
|
309
|
+
* derived from a schema or they are not derived at all.
|
|
310
|
+
*/
|
|
311
|
+
export type SlotCapsSource = SlotPosition | { schema: unknown };
|
|
312
|
+
|
|
313
|
+
const capsCache = new Map<SlotPosition, SlotMode[]>();
|
|
314
|
+
|
|
315
|
+
/** The rungs legal at a named document position, derived once and cached. */
|
|
316
|
+
export function capsForPosition(position: SlotPosition): SlotMode[] {
|
|
317
|
+
const hit = capsCache.get(position);
|
|
318
|
+
if (hit) {
|
|
319
|
+
return hit;
|
|
320
|
+
}
|
|
321
|
+
const derived = deriveSlotCaps(SLOT_POSITION_SCHEMAS[position]);
|
|
322
|
+
capsCache.set(position, derived);
|
|
323
|
+
return derived;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/** The rungs on offer for a {@link SlotCapsSource} — a named position, or a schema handed in. */
|
|
327
|
+
export function slotCaps(source: SlotCapsSource): SlotMode[] {
|
|
328
|
+
return typeof source === "string" ? capsForPosition(source) : deriveSlotCaps(source.schema);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* The schema of one field in an extension's config form, as something the derivation can walk.
|
|
333
|
+
*
|
|
334
|
+
* Two things a plugin's own fragment does not say, and the form must. An untyped field accepts
|
|
335
|
+
* anything, which for a form control means the free string its widget already draws. And every
|
|
336
|
+
* config value additionally accepts a reactive `$ref` — a data source resolves the pointers in its
|
|
337
|
+
* own config at runtime — which no plugin schema declares because it is not the plugin's to
|
|
338
|
+
* declare. Both are stated here, once, rather than assumed at each form.
|
|
339
|
+
*/
|
|
340
|
+
export function configFieldSchema(field: unknown): { anyOf: unknown[] } {
|
|
341
|
+
const declared = deriveSlotCaps(field).length > 0 ? field : { type: "string" };
|
|
342
|
+
return { anyOf: [declared, { $ref: "#/$defs/RefObject" }] };
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/** Test hook: drop the derivation cache. */
|
|
346
|
+
export function resetCapsCache(): void {
|
|
347
|
+
capsCache.clear();
|
|
348
|
+
}
|