@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
|
@@ -11,31 +11,45 @@
|
|
|
11
11
|
* Patching is only attempted in design/edit canvas modes, where the canvas renders through
|
|
12
12
|
* prepareForEditMode: runtime reactive bindings are inert there, so the patcher is the only writer
|
|
13
13
|
* to the patched DOM.
|
|
14
|
+
*
|
|
15
|
+
* Every question here is asked of ONE PANE — the one showing the edited tab (`canvas-surface.ts`).
|
|
16
|
+
* The mode, the panel list, the readiness test and the render an escalation schedules are all
|
|
17
|
+
* properties of a stage, and reading them globally is how a second pane mid-mount would refuse an
|
|
18
|
+
* edit typed into the first, and how one failed patch would rebuild both.
|
|
14
19
|
*/
|
|
15
20
|
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { view } from "../view";
|
|
21
|
+
import { getNodeAtPath, parentElementPath } from "../store";
|
|
22
|
+
import { canvasModeOfPane, surfacesShowingTab } from "./canvas-surface";
|
|
19
23
|
import { toRaw } from "../reactivity";
|
|
20
24
|
import { postPatchToHosts } from "./iframe-host";
|
|
21
25
|
import { canvasPerf, recordEscalation, SPAN_PATCH_BATCH, timeSpan } from "./canvas-perf";
|
|
22
26
|
import { setPatchConsumer } from "../tabs/patch-ops";
|
|
23
27
|
|
|
28
|
+
import type { CanvasSurface } from "./surface-registry";
|
|
24
29
|
import type { JxPatchOp, TransactionRecord } from "../tabs/patch-ops";
|
|
25
30
|
import type { Tab } from "../tabs/tab.js";
|
|
26
31
|
import type { JxPath } from "../state";
|
|
27
32
|
|
|
28
33
|
/** Render-side callbacks injected at init so this module stays free of heavy canvas imports. */
|
|
29
34
|
interface CanvasPatcherCtx {
|
|
30
|
-
|
|
31
|
-
scheduleCanvasRender: () => void;
|
|
35
|
+
/** Schedule ONE pane's full render — never "the canvas". See {@link escalateToFullRender}. */
|
|
36
|
+
scheduleCanvasRender: (paneId: string) => void;
|
|
32
37
|
renderOverlays: () => void;
|
|
33
38
|
}
|
|
34
39
|
|
|
35
40
|
let _ctx: CanvasPatcherCtx | null = null;
|
|
36
41
|
|
|
37
|
-
/**
|
|
38
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Document root references whose change was applied surgically, and the PANES it reached.
|
|
44
|
+
*
|
|
45
|
+
* A `WeakSet` of references, until one document could be displayed in two panes. Each pane runs its
|
|
46
|
+
* own doc-effect, both fire on the same root-reference swap, and the first to arrive consumed the
|
|
47
|
+
* one mark — so the second pane full-rendered every surgically patched edit while
|
|
48
|
+
* `skippedFullRenders` reported a single skip. That inverts workstream 1's whole result in exactly
|
|
49
|
+
* the configuration workstream 3 introduces, and reports it as a win. The mark is per pane now, and
|
|
50
|
+
* each pane deletes only its own.
|
|
51
|
+
*/
|
|
52
|
+
const _consumed = new WeakMap<object, Set<string>>();
|
|
39
53
|
|
|
40
54
|
/**
|
|
41
55
|
* Initialize the canvas patcher and register it as the transactDoc patch consumer.
|
|
@@ -48,33 +62,101 @@ export function initCanvasPatcher(ctx: CanvasPatcherCtx) {
|
|
|
48
62
|
apply: applyPatchBatch,
|
|
49
63
|
classify: classifyOps,
|
|
50
64
|
escalate: escalateToFullRender,
|
|
51
|
-
markConsumed: (docRef: object) => {
|
|
52
|
-
|
|
65
|
+
markConsumed: (docRef: object, tab: Tab) => {
|
|
66
|
+
markConsumed(
|
|
67
|
+
docRef,
|
|
68
|
+
patchableSurfaces(tab).map((surface) => surface.paneId),
|
|
69
|
+
);
|
|
53
70
|
},
|
|
54
71
|
});
|
|
55
72
|
}
|
|
56
73
|
|
|
57
74
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
75
|
+
* The stages that can actually TAKE a patch: showing the tab, and drawing an editable canvas.
|
|
76
|
+
*
|
|
77
|
+
* **One function, because two of them disagreed and the disagreement lost edits.**
|
|
78
|
+
* {@link classifyOps} SKIPS a showing stage that cannot patch — that is what lets a Code lens open
|
|
79
|
+
* beside a page without killing surgical patching for the page. `markConsumed` marked every stage
|
|
80
|
+
* DISPLAYING the tab. So opening Code beside a page and typing marked the lens as patched, its
|
|
81
|
+
* doc-effect returned before `scheduleCanvasRender`, and `canvas-render.ts`'s source fast path —
|
|
82
|
+
* the only thing that refreshes a source-mode Monaco — never ran. The Code view sat frozen while
|
|
83
|
+
* `skippedFullRenders` counted it as a win.
|
|
84
|
+
*
|
|
85
|
+
* The panel/readiness half of `classifyOps`' gate is deliberately NOT repeated here: a batch only
|
|
86
|
+
* reaches `markConsumed` after that gate passed, so every surface this returns had ready panels
|
|
87
|
+
* when the verdict was taken.
|
|
88
|
+
*
|
|
89
|
+
* @param {Tab | null} tab
|
|
90
|
+
* @returns {CanvasSurface[]}
|
|
91
|
+
*/
|
|
92
|
+
function patchableSurfaces(tab: Tab | null): CanvasSurface[] {
|
|
93
|
+
return surfacesShowingTab(tab).filter((candidate) => {
|
|
94
|
+
const mode = canvasModeOfPane(candidate.paneId);
|
|
95
|
+
return mode === "design" || mode === "edit";
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Record that `docRef`'s change has been applied surgically in each of `paneIds`.
|
|
101
|
+
*
|
|
102
|
+
* No empty-list guard, because the list cannot be empty here: `transactDoc` marks only a batch
|
|
103
|
+
* {@link classifyOps} called patchable, and that function rejects `patchableSurfaces(tab).length
|
|
104
|
+
* === 0` before it can say so. A guard on an unreachable value is a branch no test can enter — the
|
|
105
|
+
* gate's own rule — and `_consumed` is a `WeakMap` keyed on a reference `transactDoc` mints fresh
|
|
106
|
+
* per transaction, so there is nothing for one to protect either.
|
|
107
|
+
*
|
|
108
|
+
* @param {object} docRef
|
|
109
|
+
* @param {readonly string[]} paneIds
|
|
110
|
+
*/
|
|
111
|
+
function markConsumed(docRef: object, paneIds: readonly string[]) {
|
|
112
|
+
_consumed.set(toRaw(docRef) as object, new Set(paneIds));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* One-shot check used by ONE PANE's canvas doc-effect: returns true (and clears that pane's mark)
|
|
117
|
+
* when the given document reference was already applied to that pane's stage surgically, so its
|
|
118
|
+
* full render can be skipped. One-shot so tab switches and repeat triggers still render fully.
|
|
61
119
|
*
|
|
62
120
|
* @param {object} doc
|
|
121
|
+
* @param {string} paneId
|
|
63
122
|
*/
|
|
64
|
-
export function consumePatchedDocument(doc: object): boolean {
|
|
123
|
+
export function consumePatchedDocument(doc: object, paneId: string): boolean {
|
|
65
124
|
const raw = toRaw(doc) as object;
|
|
66
|
-
|
|
125
|
+
const panes = _consumed.get(raw);
|
|
126
|
+
if (!panes?.has(paneId)) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
panes.delete(paneId);
|
|
130
|
+
if (panes.size === 0) {
|
|
67
131
|
_consumed.delete(raw);
|
|
68
|
-
canvasPerf.skippedFullRenders += 1;
|
|
69
|
-
return true;
|
|
70
132
|
}
|
|
71
|
-
|
|
133
|
+
canvasPerf.skippedFullRenders += 1;
|
|
134
|
+
return true;
|
|
72
135
|
}
|
|
73
136
|
|
|
74
|
-
/**
|
|
75
|
-
|
|
137
|
+
/**
|
|
138
|
+
* Schedule the fallback full render of every pane showing `tab`, and record why.
|
|
139
|
+
*
|
|
140
|
+
* An escalation is a statement about a stage whose DOM no longer matches its document, and only a
|
|
141
|
+
* stage that was handed the patch can be in that state — a global schedule would rebuild the other
|
|
142
|
+
* pane's iframes (reloading them, losing their scroll and any live edit) because a document it is
|
|
143
|
+
* not showing failed to patch. That is why this resolves stages from the tab rather than scheduling
|
|
144
|
+
* "the canvas"; it is now PLURAL for the other half of the same reason: a document displayed in two
|
|
145
|
+
* panes was handed the patch in both, so both are out of date when it fails.
|
|
146
|
+
*
|
|
147
|
+
* With no pane showing the tab (a `patchError` arriving after the pane's tab changed, or an apply
|
|
148
|
+
* failure on a tab no pane is showing) there is nothing to re-render, so nothing is scheduled — the
|
|
149
|
+
* reason is still recorded, because a swallowed escalation that no counter saw is exactly the class
|
|
150
|
+
* of bug `__jxCanvasPerf` exists to make visible.
|
|
151
|
+
*
|
|
152
|
+
* @param {string} reason
|
|
153
|
+
* @param {Tab | null} tab
|
|
154
|
+
*/
|
|
155
|
+
export function escalateToFullRender(reason: string, tab: Tab | null = null) {
|
|
76
156
|
recordEscalation(reason);
|
|
77
|
-
|
|
157
|
+
for (const surface of surfacesShowingTab(tab)) {
|
|
158
|
+
_ctx?.scheduleCanvasRender(surface.paneId);
|
|
159
|
+
}
|
|
78
160
|
}
|
|
79
161
|
|
|
80
162
|
// ─── Classification ──────────────────────────────────────────────────────────
|
|
@@ -271,20 +353,42 @@ export function classifyOps(tab: Tab, ops: JxPatchOp[]): { patchable: boolean; r
|
|
|
271
353
|
return { patchable: false, reason };
|
|
272
354
|
};
|
|
273
355
|
|
|
274
|
-
|
|
356
|
+
/*
|
|
357
|
+
* Every gate below is asked of the PANES showing this tab — not of the app.
|
|
358
|
+
*
|
|
359
|
+
* A tab is OWNED by one pane and may be DISPLAYED by two (a derived pane projects the pane it
|
|
360
|
+
* derives from), so the stages that could apply the patch are exactly those, and their readiness,
|
|
361
|
+
* their modes and their panel lists are the only ones that can decide the question. Read
|
|
362
|
+
* globally, the readiness test made the other pane's mid-mount canvas refuse an edit typed into
|
|
363
|
+
* this one, and the mode test asked what the FOCUSED pane was doing about a document it may not
|
|
364
|
+
* even be showing.
|
|
365
|
+
*/
|
|
366
|
+
const showing = surfacesShowingTab(tab);
|
|
367
|
+
if (showing.length === 0) {
|
|
275
368
|
return reject("inactive-tab");
|
|
276
369
|
}
|
|
277
|
-
|
|
278
|
-
|
|
370
|
+
/* A stage not drawing an editable canvas is SKIPPED, not counted as a rejection — and that is the
|
|
371
|
+
difference between opening a Code lens beside a page and killing surgical patching for the page
|
|
372
|
+
itself. A Code lens has no artboards and is in no patchable mode; folding it into `every` would
|
|
373
|
+
have rejected the batch as `mode-source`/`no-panels` and full-rendered both stages on every
|
|
374
|
+
keystroke. Only when NO showing stage can take the patch is the mode a rejection.
|
|
375
|
+
The SAME predicate decides what `markConsumed` marks — see {@link patchableSurfaces} for what
|
|
376
|
+
it cost when these were two filters that had drifted apart. */
|
|
377
|
+
const patchable = patchableSurfaces(tab);
|
|
378
|
+
if (patchable.length === 0) {
|
|
379
|
+
const canvasMode = canvasModeOfPane(showing[0]!.paneId);
|
|
279
380
|
return reject(`mode-${canvasMode || "unknown"}`);
|
|
280
381
|
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
382
|
+
for (const surface of patchable) {
|
|
383
|
+
const { panels } = surface;
|
|
384
|
+
if (panels.length === 0) {
|
|
385
|
+
return reject("no-panels");
|
|
386
|
+
}
|
|
387
|
+
// The iframe canvas keeps its render context inside the iframe, so a panel is patchable as soon
|
|
388
|
+
// As it has rendered (`ready`) — there is no parent-side `liveCtx`.
|
|
389
|
+
if (!panels.every((p) => p.ready)) {
|
|
390
|
+
return reject("panels-not-ready");
|
|
391
|
+
}
|
|
288
392
|
}
|
|
289
393
|
// A `set-text` on a node whose CHILDREN are replaced in the same batch is subsumed by that
|
|
290
394
|
// Subtree re-render (the iframe folds every forward op into the shadow doc first, then the
|
|
@@ -335,8 +439,24 @@ export function applyPatchBatch(tab: Tab, _ops: JxPatchOp[], record?: Transactio
|
|
|
335
439
|
// Render then runs), so an edit is never dropped.
|
|
336
440
|
timeSpan(SPAN_PATCH_BATCH, () => {
|
|
337
441
|
const forwardOps = (record?.docOps ?? []).map((pair) => pair.forward);
|
|
338
|
-
|
|
442
|
+
/* ONE call, and no generation. Each host checks the patch against the generation of the stage
|
|
443
|
+
it is mounted on, resolved inside `postPatchToHosts` — see the note there on why a single
|
|
444
|
+
number for a multi-pane fan-out is the bug rather than a parameter needing a better value.
|
|
445
|
+
Posting once per showing surface would post the same patch to the same host twice, because
|
|
446
|
+
that loop spans stages by design.
|
|
447
|
+
And no `surfacesShowingTab(tab).length > 0` guard in front of it. There was one, and it was
|
|
448
|
+
a condition with no false branch: `tabs/transact.ts` calls `apply` only when `classify`
|
|
449
|
+
returned patchable in the statement above it, and {@link classifyOps} rejects
|
|
450
|
+
`inactive-tab` for exactly the case the guard was checking. A tab no pane is showing posts
|
|
451
|
+
to no host anyway, `hosts` falls to 0, and the throw below escalates the batch. */
|
|
452
|
+
const hosts = postPatchToHosts(forwardOps, tab.id);
|
|
453
|
+
if (hosts === 0) {
|
|
339
454
|
throw new Error("no-ready-iframe-host");
|
|
340
455
|
}
|
|
456
|
+
// The counter the escalation count is read against: `patchedOps` versus `escalations` is how
|
|
457
|
+
// Much of an authoring session avoided a render at all. It is the OPS, not ops×hosts — one
|
|
458
|
+
// Mutation posted to six artboards is one mutation, and counting the fan-out here would make
|
|
459
|
+
// A wide canvas look like it was doing more work than a narrow one.
|
|
460
|
+
canvasPerf.patchedOps += forwardOps.length;
|
|
341
461
|
});
|
|
342
462
|
}
|
|
@@ -17,10 +17,13 @@ const SAMPLE_LIMIT = 128;
|
|
|
17
17
|
|
|
18
18
|
/** Span names, so producers and the profiling gate agree on the keys. */
|
|
19
19
|
export const SPAN_FULL_RENDER = "fullRender";
|
|
20
|
-
export const SPAN_PANEL_RENDER = "panelRender";
|
|
21
20
|
export const SPAN_MOUNT_CANVAS = "mountCanvas";
|
|
22
21
|
export const SPAN_PATCH_BATCH = "patchBatch";
|
|
23
|
-
|
|
22
|
+
/**
|
|
23
|
+
* The parent-side render payload — resolve the document, then serialize it for the wire. Built ONCE
|
|
24
|
+
* per render pass and shared by every host in it, so this span's `count` is passes, not panels.
|
|
25
|
+
*/
|
|
26
|
+
export const SPAN_PREPARE_RENDER = "prepareRender";
|
|
24
27
|
|
|
25
28
|
export interface SpanStats {
|
|
26
29
|
/** Completed spans recorded under this name. */
|
|
@@ -40,14 +43,44 @@ export interface CanvasPerf {
|
|
|
40
43
|
fullRenders: number;
|
|
41
44
|
/** Individual panel renders (one per breakpoint panel per full render). */
|
|
42
45
|
panelRenders: number;
|
|
46
|
+
/**
|
|
47
|
+
* Parent-side render payloads built — one document resolution plus one wire serialization.
|
|
48
|
+
*
|
|
49
|
+
* This is the fan-out denominator. Divide {@link CanvasPerf.hostRenderPosts} by it: the quotient
|
|
50
|
+
* is how many canvas iframes one render pass fed from a single resolution, and a quotient of 1
|
|
51
|
+
* when more than one host is live means the fan-out is not happening.
|
|
52
|
+
*/
|
|
53
|
+
renderPreparations: number;
|
|
54
|
+
/** Render messages posted to canvas iframe hosts (the fan-out numerator). */
|
|
55
|
+
hostRenderPosts: number;
|
|
43
56
|
/** Doc-effect triggers skipped because the change was consumed by the patcher. */
|
|
44
57
|
skippedFullRenders: number;
|
|
45
|
-
/** Patch ops
|
|
58
|
+
/** Patch ops posted to the live canvas hosts instead of escalating to a render. */
|
|
46
59
|
patchedOps: number;
|
|
47
|
-
/** Isolated subtree re-renders (structural patches). */
|
|
48
|
-
subtreeRenders: number;
|
|
49
60
|
/** Patch batches that escalated to a full render. */
|
|
50
61
|
escalations: number;
|
|
62
|
+
/**
|
|
63
|
+
* Times a FOLLOWING pane re-resolved to a different document (§18.4's companion presets).
|
|
64
|
+
*
|
|
65
|
+
* The tripwire for the one way the follow ships slow. The `component` follow observes the
|
|
66
|
+
* selection, and the selection moves on every click — so it memoises on its ANSWER: twenty clicks
|
|
67
|
+
* inside one `<my-card>` resolve to the same definition and must cost nothing. A number that
|
|
68
|
+
* climbs with keystrokes or with clicks inside one component means the memo is being defeated,
|
|
69
|
+
* usually by traversing the reactive document instead of `toRaw`'s.
|
|
70
|
+
*/
|
|
71
|
+
derivedRetargets: number;
|
|
72
|
+
/**
|
|
73
|
+
* Times a following pane RE-RESOLVED — ran `derivedTarget` and reconciled, whether or not the
|
|
74
|
+
* answer changed.
|
|
75
|
+
*
|
|
76
|
+
* The other half of the follow's cost, and the half {@link CanvasPerf.derivedRetargets} cannot
|
|
77
|
+
* see: the memo makes a repeated answer free to ACT on, and says nothing about how often the
|
|
78
|
+
* question is asked. It is asked once per effect run, and the effect's tracked inputs are meant
|
|
79
|
+
* to be the source tab's identity and its selection — nothing else. A number that climbs with
|
|
80
|
+
* keystrokes means the document was read through the reactive proxy instead of `toRaw`'s, which
|
|
81
|
+
* makes every character typed in the source pane re-walk the tree.
|
|
82
|
+
*/
|
|
83
|
+
derivedResolves: number;
|
|
51
84
|
lastEscalationReason: string;
|
|
52
85
|
/** Duration of the most recent full canvas render, in ms (0 before the first render). */
|
|
53
86
|
lastFullRenderMs: number;
|
|
@@ -58,15 +91,18 @@ export interface CanvasPerf {
|
|
|
58
91
|
}
|
|
59
92
|
|
|
60
93
|
export const canvasPerf: CanvasPerf = {
|
|
94
|
+
derivedResolves: 0,
|
|
95
|
+
derivedRetargets: 0,
|
|
61
96
|
escalations: 0,
|
|
62
97
|
fullRenders: 0,
|
|
98
|
+
hostRenderPosts: 0,
|
|
63
99
|
lastEscalationReason: "",
|
|
64
100
|
lastFullRenderMs: 0,
|
|
65
101
|
p95FullRenderMs: 0,
|
|
66
102
|
panelRenders: 0,
|
|
67
103
|
patchedOps: 0,
|
|
104
|
+
renderPreparations: 0,
|
|
68
105
|
skippedFullRenders: 0,
|
|
69
|
-
subtreeRenders: 0,
|
|
70
106
|
timings: {},
|
|
71
107
|
};
|
|
72
108
|
|
|
@@ -206,10 +242,13 @@ export async function timeSpanAsync<T>(name: string, body: () => Promise<T>): Pr
|
|
|
206
242
|
export function resetCanvasPerf() {
|
|
207
243
|
canvasPerf.fullRenders = 0;
|
|
208
244
|
canvasPerf.panelRenders = 0;
|
|
245
|
+
canvasPerf.renderPreparations = 0;
|
|
246
|
+
canvasPerf.hostRenderPosts = 0;
|
|
209
247
|
canvasPerf.skippedFullRenders = 0;
|
|
210
248
|
canvasPerf.patchedOps = 0;
|
|
211
|
-
canvasPerf.subtreeRenders = 0;
|
|
212
249
|
canvasPerf.escalations = 0;
|
|
250
|
+
canvasPerf.derivedRetargets = 0;
|
|
251
|
+
canvasPerf.derivedResolves = 0;
|
|
213
252
|
canvasPerf.lastEscalationReason = "";
|
|
214
253
|
canvasPerf.lastFullRenderMs = 0;
|
|
215
254
|
canvasPerf.p95FullRenderMs = 0;
|