@agent-native/core-corpus 0.214.0 → 0.216.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.
Files changed (1096) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/actions/references/action-fields.md +1 -1
  3. package/corpus/templates/analytics/CHANGELOG.md +1 -0
  4. package/corpus/templates/analytics/changelog/2026-10-21-session-replay-quotas-count-the-compressed-size-analytics-st.md +6 -0
  5. package/corpus/templates/analytics/server/lib/session-replay.ts +40 -9
  6. package/corpus/templates/assets/.agents/skills/actions/references/action-fields.md +1 -1
  7. package/corpus/templates/brain/.agents/skills/actions/references/action-fields.md +1 -1
  8. package/corpus/templates/calendar/.agents/skills/actions/references/action-fields.md +1 -1
  9. package/corpus/templates/chat/.agents/skills/actions/references/action-fields.md +1 -1
  10. package/corpus/templates/clips/.agents/skills/actions/references/action-fields.md +1 -1
  11. package/corpus/templates/community/qr/package.json +1 -1
  12. package/corpus/templates/content/.agents/skills/actions/references/action-fields.md +1 -1
  13. package/corpus/templates/content/.agents/skills/content-product-development/references/verification.md +36 -0
  14. package/corpus/templates/content/.agents/skills/document-editing/SKILL.md +10 -0
  15. package/corpus/templates/content/.agents/skills/document-editing/references/databases.md +11 -0
  16. package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +4 -2
  17. package/corpus/templates/content/CHANGELOG.md +46 -0
  18. package/corpus/templates/content/acceptance/_writers.ts +604 -0
  19. package/corpus/templates/content/acceptance/generate-action-registry.ts +10 -0
  20. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/create-document.json +75 -0
  21. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/duplicate-page.json +75 -0
  22. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/edit-document-find-and-replace-without-a-revision.json +75 -0
  23. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/edit-document-find-and-replace.json +75 -0
  24. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/edit-document-initializecontent.json +75 -0
  25. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/import-content.json +75 -0
  26. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/local-files-import-content-source-existing-page.json +75 -0
  27. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/local-files-import-content-source-new-page.json +75 -0
  28. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/local-files-sync-local-folder-source-changed-file.json +75 -0
  29. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/local-files-sync-local-folder-source-new-file.json +75 -0
  30. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/restore-document-version.json +75 -0
  31. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/set-document-property-primary-blocks-field.json +75 -0
  32. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/set-image-alt-text.json +75 -0
  33. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/undo-content-import.json +75 -0
  34. package/corpus/templates/content/acceptance/golden/gate-off-stored-bytes/update-document-browser-full-rewrite.json +75 -0
  35. package/corpus/templates/content/acceptance/known-loss.ts +69 -0
  36. package/corpus/templates/content/acceptance/round-trip-corpus.ts +1397 -0
  37. package/corpus/templates/content/actions/_blocks-field-identity.ts +35 -1
  38. package/corpus/templates/content/actions/_content-database-lifecycle.ts +11 -11
  39. package/corpus/templates/content/actions/_content-database-personal-view.ts +2 -0
  40. package/corpus/templates/content/actions/_content-favorites.ts +37 -0
  41. package/corpus/templates/content/actions/_database-membership-lock.ts +39 -8
  42. package/corpus/templates/content/actions/_database-navigation.ts +19 -21
  43. package/corpus/templates/content/actions/_database-row-batch.ts +41 -18
  44. package/corpus/templates/content/actions/_database-row-mutation.ts +17 -28
  45. package/corpus/templates/content/actions/_database-source-utils.ts +18 -1
  46. package/corpus/templates/content/actions/_database-utils.ts +3 -0
  47. package/corpus/templates/content/actions/_database-view-setup.ts +16 -0
  48. package/corpus/templates/content/actions/_document-edit-mutation.ts +33 -32
  49. package/corpus/templates/content/actions/_document-flush.ts +593 -171
  50. package/corpus/templates/content/actions/_document-save-locks.ts +54 -0
  51. package/corpus/templates/content/actions/_document-save-row.ts +133 -0
  52. package/corpus/templates/content/actions/_github-source.ts +18 -8
  53. package/corpus/templates/content/actions/_move-page-to-space.ts +189 -25
  54. package/corpus/templates/content/actions/_nfm-syntax.ts +2 -0
  55. package/corpus/templates/content/actions/_row-lock-order.ts +115 -0
  56. package/corpus/templates/content/actions/create-content-database.ts +11 -0
  57. package/corpus/templates/content/actions/create-document.ts +13 -1
  58. package/corpus/templates/content/actions/delete-content-database.ts +17 -14
  59. package/corpus/templates/content/actions/delete-document-property.ts +5 -0
  60. package/corpus/templates/content/actions/delete-document.ts +270 -97
  61. package/corpus/templates/content/actions/edit-document.ts +18 -5
  62. package/corpus/templates/content/actions/export-document.ts +3 -0
  63. package/corpus/templates/content/actions/get-blocks-field-word-count.ts +22 -5
  64. package/corpus/templates/content/actions/import-content-source.ts +170 -54
  65. package/corpus/templates/content/actions/move-document.ts +191 -73
  66. package/corpus/templates/content/actions/pull-document.ts +8 -2
  67. package/corpus/templates/content/actions/remove-database-items.ts +23 -4
  68. package/corpus/templates/content/actions/restore-content-database.ts +76 -55
  69. package/corpus/templates/content/actions/restore-document-version.ts +19 -35
  70. package/corpus/templates/content/actions/restore-document.ts +65 -53
  71. package/corpus/templates/content/actions/rollback-created-slash-document.ts +11 -16
  72. package/corpus/templates/content/actions/set-document-property.ts +15 -1
  73. package/corpus/templates/content/actions/share-local-file-document.ts +18 -14
  74. package/corpus/templates/content/actions/suggest-document-edit.ts +2 -3
  75. package/corpus/templates/content/actions/sync-local-folder-source.ts +35 -1
  76. package/corpus/templates/content/actions/undo-content-import.ts +16 -12
  77. package/corpus/templates/content/actions/update-content-database-view.ts +2 -0
  78. package/corpus/templates/content/actions/update-document.ts +19 -14
  79. package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +1 -6
  80. package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +49 -3
  81. package/corpus/templates/content/app/components/editor/ContentImportDialog.tsx +2 -0
  82. package/corpus/templates/content/app/components/editor/DocumentBlockFields.tsx +53 -11
  83. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +608 -353
  84. package/corpus/templates/content/app/components/editor/StaticDocumentBody.tsx +765 -0
  85. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +233 -80
  86. package/corpus/templates/content/app/components/editor/blockFieldSaveController.ts +32 -3
  87. package/corpus/templates/content/app/components/editor/blockFieldSaveRegistry.ts +88 -23
  88. package/corpus/templates/content/app/components/editor/comment-anchors.ts +19 -0
  89. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +205 -71
  90. package/corpus/templates/content/app/components/editor/document-flush-participant.ts +253 -0
  91. package/corpus/templates/content/app/components/editor/editor-transaction-meta.ts +28 -0
  92. package/corpus/templates/content/app/components/editor/extensions/AudioBlock.tsx +2 -1
  93. package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +27 -6
  94. package/corpus/templates/content/app/components/editor/extensions/LocalMdxComponentNode.tsx +0 -1
  95. package/corpus/templates/content/app/components/editor/extensions/NotionExtensions.tsx +4 -4
  96. package/corpus/templates/content/app/components/editor/extensions/SuggestionHighlight.ts +24 -2
  97. package/corpus/templates/content/app/components/editor/extensions/VideoBlock.tsx +25 -6
  98. package/corpus/templates/content/app/components/editor/pending-document-persistence.ts +59 -1
  99. package/corpus/templates/content/app/components/editor/stored-body-images.ts +27 -0
  100. package/corpus/templates/content/app/components/editor/suggestions/presentation-rebase.ts +17 -0
  101. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +11 -4
  102. package/corpus/templates/content/app/components/trash/TrashBrowser.tsx +4 -1
  103. package/corpus/templates/content/app/global.css +21 -0
  104. package/corpus/templates/content/app/hooks/use-content-trash.ts +8 -0
  105. package/corpus/templates/content/app/import-messages.ts +25 -0
  106. package/corpus/templates/content/app/trash-messages.ts +16 -0
  107. package/corpus/templates/content/changelog/2026-10-16-a-page-open-in-a-tab-that-shows-it-s-in-the-trash-reopens-wi.md +6 -0
  108. package/corpus/templates/content/changelog/2026-10-16-a-page-restored-from-trash-returns-to-its-place-in-its-colle.md +6 -0
  109. package/corpus/templates/content/changelog/2026-10-16-agent-written-markdown-keeps-nested-lists-indented-with-spac.md +6 -0
  110. package/corpus/templates/content/changelog/2026-10-16-opening-a-page-you-can-edit-no-longer-rebuilds-its-editor-on.md +6 -0
  111. package/corpus/templates/content/changelog/2026-10-16-pages-moved-or-imported-at-the-same-time-can-no-longer-end-u.md +6 -0
  112. package/corpus/templates/content/changelog/2026-10-16-re-importing-a-markdown-export-of-a-page-no-longer-reports-t.md +6 -0
  113. package/corpus/templates/content/changelog/2026-10-16-saving-a-page-or-restoring-one-of-its-versions-no-longer-fai.md +6 -0
  114. package/corpus/templates/content/changelog/2026-10-17-agents-reading-a-page-you-have-open-no-longer-wait-or-fail-w.md +6 -0
  115. package/corpus/templates/content/changelog/2026-10-19-fresh-document-reads-require-confirmation-from-every-open-ed.md +6 -0
  116. package/corpus/templates/content/changelog/2026-10-20-html-table-cells-preserve-a-trailing-backslash-when-opening-.md +6 -0
  117. package/corpus/templates/content/changelog/2026-10-20-preserve-empty-paragraph-colors-and-refuse-unsupported-inlin.md +6 -0
  118. package/corpus/templates/content/changelog/2026-10-20-the-advanced-filter-and-each-filter-group-inside-it-have-the.md +6 -0
  119. package/corpus/templates/content/changelog/2026-10-21-blocks-fields-keep-unconfirmed-saves-visible-and-agent-reads.md +6 -0
  120. package/corpus/templates/content/changelog/2026-10-21-preserve-compact-table-row-groups-and-report-invalid-block-colors.md +6 -0
  121. package/corpus/templates/content/changelog/2026-10-21-suggested-edits-show-an-agent-s-whole-reason-open-a-group-to.md +6 -0
  122. package/corpus/templates/content/changelog/2026-10-21-suggestions-keep-refusing-unmatched-emphasis-in-stored-markd.md +6 -0
  123. package/corpus/templates/content/changelog/2026-10-22-accept-remaining-and-reject-remaining-show-the-result-for-ev.md +6 -0
  124. package/corpus/templates/content/changelog/2026-10-22-accepting-a-group-of-suggested-edits-saves-faster-and-adds-o.md +6 -0
  125. package/corpus/templates/content/changelog/2026-10-22-agents-read-saved-page-text-after-failed-icon-change.md +6 -0
  126. package/corpus/templates/content/changelog/2026-10-22-changes-made-from-a-menu-or-popover-such-as-an-image-s-alt-t.md +6 -0
  127. package/corpus/templates/content/changelog/2026-10-22-text-an-agent-writes-inside-a-callout-column-or-synced-block.md +6 -0
  128. package/corpus/templates/content/e2e/auth-files.ts +28 -0
  129. package/corpus/templates/content/e2e/convergence-summary.ts +84 -29
  130. package/corpus/templates/content/e2e/gate-arm.ts +15 -0
  131. package/corpus/templates/content/e2e/global-setup.ts +43 -75
  132. package/corpus/templates/content/e2e/global-teardown.ts +34 -0
  133. package/corpus/templates/content/e2e/helpers.ts +598 -92
  134. package/corpus/templates/content/e2e/live-body-gate.ts +188 -0
  135. package/corpus/templates/content/e2e/playwright.config.ts +12 -3
  136. package/corpus/templates/content/e2e/server-identity.ts +47 -0
  137. package/corpus/templates/content/e2e/stored-form/collab-blocks.ts +123 -0
  138. package/corpus/templates/content/package.json +1 -1
  139. package/corpus/templates/content/scripts/_stored-form-census-kinds.ts +30 -2
  140. package/corpus/templates/content/scripts/historical-icon-apply.ts +9 -1
  141. package/corpus/templates/content/scripts/trace-startup.mjs +460 -133
  142. package/corpus/templates/content/server/db/exec.ts +58 -0
  143. package/corpus/templates/content/server/db/schema.ts +1 -0
  144. package/corpus/templates/content/server/lib/content-trash-purge.ts +208 -144
  145. package/corpus/templates/content/server/lib/document-metadata-updated-at.ts +43 -1
  146. package/corpus/templates/content/server/lib/document-revision.ts +23 -0
  147. package/corpus/templates/content/server/lib/live-body-writer.ts +199 -0
  148. package/corpus/templates/content/server/lib/notion-sync.ts +63 -29
  149. package/corpus/templates/content/server/lib/notion.ts +5 -5
  150. package/corpus/templates/content/server/lib/suggested-edits.ts +357 -230
  151. package/corpus/templates/content/server/plugins/db.ts +5 -0
  152. package/corpus/templates/content/server/routes/api/documents/[id]/move.patch.ts +50 -168
  153. package/corpus/templates/content/shared/api.ts +2 -0
  154. package/corpus/templates/content/shared/blocks-fields-manifest.ts +106 -0
  155. package/corpus/templates/content/shared/database-query.ts +192 -30
  156. package/corpus/templates/content/shared/document-export.ts +12 -14
  157. package/corpus/templates/content/shared/document-flush-protocol.ts +88 -0
  158. package/corpus/templates/content/shared/editor-save-state.ts +97 -0
  159. package/corpus/templates/content/shared/feature-flags.ts +10 -0
  160. package/corpus/templates/content/shared/import/markdown.ts +91 -7
  161. package/corpus/templates/content/shared/import/types.ts +2 -0
  162. package/corpus/templates/content/shared/inline-math.ts +6 -4
  163. package/corpus/templates/content/shared/nfm-fidelity.ts +247 -0
  164. package/corpus/templates/content/shared/nfm.ts +1933 -340
  165. package/corpus/templates/content/shared/suggestion-diff.ts +13 -0
  166. package/corpus/templates/content/shared/suggestion-formatting.ts +143 -20
  167. package/corpus/templates/content/shared/suggestion-text.ts +39 -0
  168. package/corpus/templates/content/vitest.config.ts +10 -0
  169. package/corpus/templates/crm/.agents/skills/actions/references/action-fields.md +1 -1
  170. package/corpus/templates/design/.agents/skills/actions/references/action-fields.md +1 -1
  171. package/corpus/templates/design/.agents/skills/native-effects/SKILL.md +9 -2
  172. package/corpus/templates/design/.generated/bridge/shader-fill-preview.generated.ts +3 -249
  173. package/corpus/templates/design/.generated/bridge/shader-runtime.generated.ts +5 -88
  174. package/corpus/templates/design/AGENTS.md +1 -3
  175. package/corpus/templates/design/CHANGELOG.md +32 -0
  176. package/corpus/templates/design/CODE_NATIVE_DESIGN_STUDIO_IMPLEMENTATION_PLAN.md +1 -6
  177. package/corpus/templates/design/DESIGN-STUDIO-PLAN.md +5 -7
  178. package/corpus/templates/design/actions/_native-local-export-server.ts +44 -31
  179. package/corpus/templates/design/actions/_native-render-contexts.ts +76 -21
  180. package/corpus/templates/design/actions/claim-native-local-export.ts +5 -0
  181. package/corpus/templates/design/actions/finish-native-local-export.ts +13 -2
  182. package/corpus/templates/design/actions/get-native-shader-approvals.ts +35 -0
  183. package/corpus/templates/design/actions/get-shader.ts +134 -219
  184. package/corpus/templates/design/actions/list-design-extensions.ts +3 -58
  185. package/corpus/templates/design/actions/request-native-local-export.ts +32 -6
  186. package/corpus/templates/design/actions/run-design-extension-action.ts +0 -29
  187. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +131 -108
  188. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +0 -218
  189. package/corpus/templates/design/app/components/design/DesignThumbnail.tsx +59 -3
  190. package/corpus/templates/design/app/components/design/EditPanel.tsx +35 -47
  191. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +242 -62
  192. package/corpus/templates/design/app/components/design/NativePreviewErrorBoundary.tsx +53 -0
  193. package/corpus/templates/design/app/components/design/bridge/codegen.ts +18 -3
  194. package/corpus/templates/design/app/components/design/bridge/native-composition-clock.ts +5 -4
  195. package/corpus/templates/design/app/components/design/bridge/native-dom.ts +37 -0
  196. package/corpus/templates/design/app/components/design/bridge/native-intrinsic-image.ts +2 -1
  197. package/corpus/templates/design/app/components/design/bridge/native-mesh-grid.ts +90 -0
  198. package/corpus/templates/design/app/components/design/bridge/native-opaque-public-asset.ts +363 -0
  199. package/corpus/templates/design/app/components/design/bridge/native-opaque-worker-lease.ts +179 -0
  200. package/corpus/templates/design/app/components/design/bridge/native-preview-geometry.ts +132 -7
  201. package/corpus/templates/design/app/components/design/bridge/native-preview-policy.ts +4 -0
  202. package/corpus/templates/design/app/components/design/bridge/native-preview-viewport-transport.ts +378 -0
  203. package/corpus/templates/design/app/components/design/bridge/native-scene-body-transform.ts +62 -0
  204. package/corpus/templates/design/app/components/design/bridge/native-scene-presentation-element.ts +10 -0
  205. package/corpus/templates/design/app/components/design/bridge/native-shader-runtime.bridge.ts +646 -167
  206. package/corpus/templates/design/app/components/design/bridge/native-source-provider.ts +246 -192
  207. package/corpus/templates/design/app/components/design/bridge/native-stateful-resource.ts +2 -2
  208. package/corpus/templates/design/app/components/design/bridge/native-stateless-compute.ts +5 -2
  209. package/corpus/templates/design/app/components/design/bridge/native-svg-source.ts +11 -1
  210. package/corpus/templates/design/app/components/design/bridge/native-worker-broker.ts +6 -0
  211. package/corpus/templates/design/app/components/design/bridge/native-worker-entry.ts +761 -303
  212. package/corpus/templates/design/app/components/design/bridge/native-worker-fill.ts +16 -6
  213. package/corpus/templates/design/app/components/design/bridge/native-worker-gpu.ts +854 -91
  214. package/corpus/templates/design/app/components/design/bridge/native-worker-host.ts +15 -1
  215. package/corpus/templates/design/app/components/design/bridge/native-worker-input-assets.ts +200 -0
  216. package/corpus/templates/design/app/components/design/bridge/native-worker-protocol.ts +40 -1
  217. package/corpus/templates/design/app/components/design/bridge/native-worker-scene-host.ts +425 -126
  218. package/corpus/templates/design/app/components/design/bridge/native-worker-source-snapshot.ts +21 -0
  219. package/corpus/templates/design/app/components/design/bridge/shader-fill-preview.bridge.ts +5 -371
  220. package/corpus/templates/design/app/components/design/bridge/shader-runtime.bridge.ts +4 -146
  221. package/corpus/templates/design/app/components/design/design-canvas/interact-document.ts +5 -9
  222. package/corpus/templates/design/app/components/design/design-canvas/native-preview-surface.ts +150 -0
  223. package/corpus/templates/design/app/components/design/design-canvas/native-public-asset-preview.ts +409 -0
  224. package/corpus/templates/design/app/components/design/design-canvas/native-public-worker-preview.ts +1086 -0
  225. package/corpus/templates/design/app/components/design/design-canvas/private-replay-screenshot-preview.ts +2 -2
  226. package/corpus/templates/design/app/components/design/edit-panel/effects-properties.tsx +15 -26
  227. package/corpus/templates/design/app/components/design/edit-panel/fill-properties.tsx +74 -67
  228. package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +7 -19
  229. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +39 -30
  230. package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +4 -0
  231. package/corpus/templates/design/app/components/design/inspector/NativeShaderColorControls.tsx +3 -7
  232. package/corpus/templates/design/app/components/design/inspector/NativeShaderPaintControls.tsx +12 -5
  233. package/corpus/templates/design/app/components/design/inspector/NativeShaderPanel.tsx +705 -190
  234. package/corpus/templates/design/app/components/design/inspector/fill-field-reading.ts +1 -2
  235. package/corpus/templates/design/app/components/design/inspector/index.ts +0 -6
  236. package/corpus/templates/design/app/components/design/inspector/native-catalog-display.ts +26 -5
  237. package/corpus/templates/design/app/components/design/inspector/native-shader-catalog-fixture.ts +42 -0
  238. package/corpus/templates/design/app/components/design/inspector/native-shader-catalog-preview.ts +51 -33
  239. package/corpus/templates/design/app/components/design/inspector/native-shader-paint.ts +1 -0
  240. package/corpus/templates/design/app/components/design/inspector/native-shader-property-draft.ts +89 -23
  241. package/corpus/templates/design/app/components/design/inspector/saved-glsl-shader.tsx +243 -0
  242. package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +54 -5
  243. package/corpus/templates/design/app/components/design/shader-source-coordination.ts +66 -0
  244. package/corpus/templates/design/app/components/design/use-native-shader-approvals.ts +36 -8
  245. package/corpus/templates/design/app/components/templates/TemplatePreview.tsx +60 -3
  246. package/corpus/templates/design/app/i18n/en-US.ts +78 -2
  247. package/corpus/templates/design/app/pages/Present.tsx +36 -1
  248. package/corpus/templates/design/app/pages/design-editor/commands/apply-file-content-update.ts +1 -1
  249. package/corpus/templates/design/app/pages/design-editor/commands/apply-local-content-update.ts +1 -1
  250. package/corpus/templates/design/app/pages/design-editor/commands/commit-visual-styles.ts +2 -3
  251. package/corpus/templates/design/app/pages/design-editor/commands/cross-screen-element-drop.ts +1 -1
  252. package/corpus/templates/design/app/pages/design-editor/commands/layer-move-to-screen.ts +1 -1
  253. package/corpus/templates/design/app/pages/design-editor/commands/paste-selection.ts +1 -1
  254. package/corpus/templates/design/app/pages/design-editor/commands/paste-svg-layer.ts +1 -1
  255. package/corpus/templates/design/app/pages/design-editor/commands/prepare-content-history-replay.ts +1 -1
  256. package/corpus/templates/design/app/pages/design-editor/commands/redo.ts +1 -1
  257. package/corpus/templates/design/app/pages/design-editor/commands/render-png-blob.ts +84 -41
  258. package/corpus/templates/design/app/pages/design-editor/commands/shader-source-edit.ts +1 -1
  259. package/corpus/templates/design/app/pages/design-editor/commands/undo.ts +1 -1
  260. package/corpus/templates/design/app/pages/design-editor/design-editor-view.tsx +0 -2
  261. package/corpus/templates/design/app/pages/design-editor/domains/use-editor-content-and-components.ts +4 -33
  262. package/corpus/templates/design/app/pages/design-editor/domains/use-editor-export-and-handoff.ts +2 -2
  263. package/corpus/templates/design/app/pages/design-editor/domains/use-editor-history.ts +0 -11
  264. package/corpus/templates/design/app/pages/design-editor/domains/use-editor-layer-models.ts +2 -55
  265. package/corpus/templates/design/app/pages/design-editor/domains/use-editor-screen-rendering.tsx +0 -3
  266. package/corpus/templates/design/app/pages/design-editor/domains/use-editor-selection-and-styles.ts +0 -24
  267. package/corpus/templates/design/app/pages/design-editor/text-edit-utils.ts +0 -16
  268. package/corpus/templates/design/app/pages/design-editor/use-native-local-export-requests.ts +70 -11
  269. package/corpus/templates/design/app/pages/design-editor/view/single-screen-canvas.tsx +0 -2
  270. package/corpus/templates/design/changelog/2026-10-20-folded-mesh-adds-an-animated-sculpted-fill-with-editable-col.md +6 -0
  271. package/corpus/templates/design/changelog/2026-10-20-read-only-design-views-render-native-shader-previews-in-nest.md +6 -0
  272. package/corpus/templates/design/changelog/2026-10-20-selected-screens-with-shader-effects-can-be-exported-togethe.md +6 -0
  273. package/corpus/templates/design/changelog/2026-10-20-shader-previews-reuse-validated-scene-data-while-panning-inc.md +6 -0
  274. package/corpus/templates/design/changelog/2026-10-20-shader-previews-stay-aligned-while-you-zoom.md +6 -0
  275. package/corpus/templates/design/changelog/2026-10-20-signed-out-sessions-no-longer-watch-for-private-png-export-r.md +6 -0
  276. package/corpus/templates/design/changelog/2026-10-21-effect-thumbnails-show-richer-previews.md +6 -0
  277. package/corpus/templates/design/changelog/2026-10-21-native-effects-render-across-previews.md +6 -0
  278. package/corpus/templates/design/changelog/2026-10-21-native-shader-previews-use-less-gpu-memory-when-many-mesh-ef.md +6 -0
  279. package/corpus/templates/design/changelog/2026-10-21-opening-design-no-longer-shows-png-export-errors-when-no-exp.md +6 -0
  280. package/corpus/templates/design/changelog/2026-10-21-pulsing-border-controls-grouped.md +6 -0
  281. package/corpus/templates/design/changelog/2026-10-21-pulsing-border-follows-element-outlines.md +6 -0
  282. package/corpus/templates/design/changelog/2026-10-21-remove-obsolete-shader-fills.md +6 -0
  283. package/corpus/templates/design/changelog/2026-10-21-shader-previews-recover-from-temporary-gpu-and-image-failure.md +6 -0
  284. package/corpus/templates/design/changelog/2026-10-22-shader-fills-and-effects-render-correctly-on-canvas-elements.md +6 -0
  285. package/corpus/templates/design/package.json +0 -1
  286. package/corpus/templates/design/playwright.config.ts +1 -1
  287. package/corpus/templates/design/scripts/runtime-budget-zoom.ts +9 -21
  288. package/corpus/templates/design/scripts/runtime-budget.ts +10 -24
  289. package/corpus/templates/design/server/plugins/agent-chat.ts +0 -2
  290. package/corpus/templates/design/shared/effect-graph.ts +46 -1
  291. package/corpus/templates/design/shared/generation-output-receipt.ts +0 -1
  292. package/corpus/templates/design/shared/native-effect-animation-capability.ts +6 -0
  293. package/corpus/templates/design/shared/native-effect-folded-mesh-v1.ts +268 -0
  294. package/corpus/templates/design/shared/native-effect-folded-mesh-v2.ts +310 -0
  295. package/corpus/templates/design/shared/native-effect-folded-mesh.ts +489 -0
  296. package/corpus/templates/design/shared/native-effect-gallery-additions.ts +2 -2
  297. package/corpus/templates/design/shared/native-effect-paint.ts +8 -0
  298. package/corpus/templates/design/shared/native-effect-parameter-constraints.ts +8 -1
  299. package/corpus/templates/design/shared/native-effect-presets.ts +18 -1
  300. package/corpus/templates/design/shared/native-effect-property-presentation.ts +81 -0
  301. package/corpus/templates/design/shared/native-effect-pulsing-border-v3.ts +281 -0
  302. package/corpus/templates/design/shared/native-effect-pulsing-border-v4.ts +284 -0
  303. package/corpus/templates/design/shared/native-effect-pulsing-border.ts +300 -0
  304. package/corpus/templates/design/shared/native-effect-trust.ts +6 -0
  305. package/corpus/templates/design/shared/native-effect-wgsl.ts +12 -0
  306. package/corpus/templates/design/shared/native-effects.ts +528 -15
  307. package/corpus/templates/design/shared/native-input-resources.ts +36 -0
  308. package/corpus/templates/design/shared/native-local-export.ts +14 -0
  309. package/corpus/templates/design/shared/native-parameter-animation.ts +1 -0
  310. package/corpus/templates/design/shared/native-pointer-input.ts +9 -11
  311. package/corpus/templates/design/shared/shader-fills.ts +0 -513
  312. package/corpus/templates/design/vitest.setup.ts +7 -1
  313. package/corpus/templates/dispatch/.agents/skills/actions/references/action-fields.md +1 -1
  314. package/corpus/templates/dispatch/.agents/skills/turn-into-app/SKILL.md +20 -18
  315. package/corpus/templates/factory/.agents/skills/actions/references/action-fields.md +1 -1
  316. package/corpus/templates/factory/.agents/skills/review-latest-feedback/SKILL.md +36 -80
  317. package/corpus/templates/factory/.agents/skills/review-latest-feedback/references/channel-inventory.md +54 -16
  318. package/corpus/templates/factory/.agents/skills/review-latest-feedback/references/slack-reaction-replies.md +50 -73
  319. package/corpus/templates/factory/.agents/skills/turn-into-app/SKILL.md +20 -18
  320. package/corpus/templates/forms/.agents/skills/actions/references/action-fields.md +1 -1
  321. package/corpus/templates/mail/.agents/skills/actions/references/action-fields.md +1 -1
  322. package/corpus/templates/plan/.agents/skills/actions/references/action-fields.md +1 -1
  323. package/corpus/templates/slides/.agents/skills/actions/references/action-fields.md +1 -1
  324. package/corpus/templates/slides-2/.agents/skills/actions/SKILL.md +199 -0
  325. package/corpus/templates/slides-2/.agents/skills/actions/references/action-fields.md +145 -0
  326. package/corpus/templates/slides-2/.agents/skills/actions/references/examples.md +96 -0
  327. package/corpus/templates/slides-2/.agents/skills/actions/references/provider-apis.md +95 -0
  328. package/corpus/templates/slides-2/.agents/skills/adding-a-feature/SKILL.md +235 -0
  329. package/corpus/templates/slides-2/.agents/skills/agent-native-docs/SKILL.md +161 -0
  330. package/corpus/templates/slides-2/.agents/skills/agent-native-toolkit/SKILL.md +314 -0
  331. package/corpus/templates/slides-2/.agents/skills/analytics-data-for-decks/SKILL.md +44 -0
  332. package/corpus/templates/slides-2/.agents/skills/apply-slide-comments/SKILL.md +63 -0
  333. package/corpus/templates/slides-2/.agents/skills/client-side-routing/SKILL.md +87 -0
  334. package/corpus/templates/slides-2/.agents/skills/context-awareness/SKILL.md +282 -0
  335. package/corpus/templates/slides-2/.agents/skills/create-deck/SKILL.md +263 -0
  336. package/corpus/templates/slides-2/.agents/skills/create-deck/references/reference-inputs.md +72 -0
  337. package/corpus/templates/slides-2/.agents/skills/create-deck/references/slide-templates.md +93 -0
  338. package/corpus/templates/slides-2/.agents/skills/create-deck/references/source-material.md +16 -0
  339. package/corpus/templates/slides-2/.agents/skills/creative-context/SKILL.md +134 -0
  340. package/corpus/templates/slides-2/.agents/skills/customizing-agent-native/SKILL.md +219 -0
  341. package/corpus/templates/slides-2/.agents/skills/deck-management/SKILL.md +182 -0
  342. package/corpus/templates/slides-2/.agents/skills/delegate-to-agent/SKILL.md +62 -0
  343. package/corpus/templates/slides-2/.agents/skills/design-systems/SKILL.md +233 -0
  344. package/corpus/templates/slides-2/.agents/skills/external-agents/SKILL.md +549 -0
  345. package/corpus/templates/slides-2/.agents/skills/external-agents/references/mcp-apps-embedding.md +169 -0
  346. package/corpus/templates/slides-2/.agents/skills/frontend-design/SKILL.md +102 -0
  347. package/corpus/templates/slides-2/.agents/skills/frontend-design/references/visual-direction.md +102 -0
  348. package/corpus/templates/slides-2/.agents/skills/image-generation-via-a2a/SKILL.md +134 -0
  349. package/corpus/templates/slides-2/.agents/skills/performance/SKILL.md +79 -0
  350. package/corpus/templates/slides-2/.agents/skills/portability/SKILL.md +108 -0
  351. package/corpus/templates/slides-2/.agents/skills/real-time-sync/SKILL.md +146 -0
  352. package/corpus/templates/slides-2/.agents/skills/reliable-mutations/SKILL.md +72 -0
  353. package/corpus/templates/slides-2/.agents/skills/secrets/SKILL.md +82 -0
  354. package/corpus/templates/slides-2/.agents/skills/security/SKILL.md +80 -0
  355. package/corpus/templates/slides-2/.agents/skills/self-modifying-code/SKILL.md +123 -0
  356. package/corpus/templates/slides-2/.agents/skills/shadcn-ui/SKILL.md +71 -0
  357. package/corpus/templates/slides-2/.agents/skills/sharing/SKILL.md +286 -0
  358. package/corpus/templates/slides-2/.agents/skills/slide-design/SKILL.md +144 -0
  359. package/corpus/templates/slides-2/.agents/skills/slide-editing/SKILL.md +284 -0
  360. package/corpus/templates/slides-2/.agents/skills/slide-editing/references/animations.md +33 -0
  361. package/corpus/templates/slides-2/.agents/skills/slide-editing/references/freeform-objects.md +22 -0
  362. package/corpus/templates/slides-2/.agents/skills/slide-editing/references/restyling.md +69 -0
  363. package/corpus/templates/slides-2/.agents/skills/slide-editing/references/transitions.md +26 -0
  364. package/corpus/templates/slides-2/.agents/skills/slide-editing/references/video.md +45 -0
  365. package/corpus/templates/slides-2/.agents/skills/slide-images/SKILL.md +136 -0
  366. package/corpus/templates/slides-2/.agents/skills/storing-data/SKILL.md +234 -0
  367. package/corpus/templates/slides-2/.agents/skills/turn-into-skill/SKILL.md +112 -0
  368. package/corpus/templates/slides-2/.agents/skills/turn-into-skill/agents/openai.yaml +4 -0
  369. package/corpus/templates/slides-2/.agents/skills/workspace-conventions/SKILL.md +103 -0
  370. package/corpus/templates/slides-2/.builder/rules/deploy-app.mdc +22 -0
  371. package/corpus/templates/slides-2/.builder/rules/organize-ui.mdc +9 -0
  372. package/corpus/templates/slides-2/.dockerignore +61 -0
  373. package/corpus/templates/slides-2/.env.example +23 -0
  374. package/corpus/templates/slides-2/.ignore +3 -0
  375. package/corpus/templates/slides-2/.mcp.json +8 -0
  376. package/corpus/templates/slides-2/.oxfmtrc.json +8 -0
  377. package/corpus/templates/slides-2/AGENTS.md +66 -0
  378. package/corpus/templates/slides-2/CHANGELOG.md +76 -0
  379. package/corpus/templates/slides-2/DEVELOPING.md +157 -0
  380. package/corpus/templates/slides-2/README.md +58 -0
  381. package/corpus/templates/slides-2/THIRD_PARTY_NOTICES.md +33 -0
  382. package/corpus/templates/slides-2/_gitignore +38 -0
  383. package/corpus/templates/slides-2/actions/_agent-presence.ts +29 -0
  384. package/corpus/templates/slides-2/actions/_app-url.ts +37 -0
  385. package/corpus/templates/slides-2/actions/_deck-app-scope.ts +30 -0
  386. package/corpus/templates/slides-2/actions/_deck-tracking.ts +260 -0
  387. package/corpus/templates/slides-2/actions/_deck-write.ts +206 -0
  388. package/corpus/templates/slides-2/actions/_imported-slide-source.ts +162 -0
  389. package/corpus/templates/slides-2/actions/_inline-image-storage.ts +1013 -0
  390. package/corpus/templates/slides-2/actions/_linked-design-system.ts +83 -0
  391. package/corpus/templates/slides-2/actions/_presenter-notes.ts +83 -0
  392. package/corpus/templates/slides-2/actions/_render-artifacts.ts +111 -0
  393. package/corpus/templates/slides-2/actions/_slide-source.ts +344 -0
  394. package/corpus/templates/slides-2/actions/_tab-state.ts +51 -0
  395. package/corpus/templates/slides-2/actions/_test-brandfetch.ts +31 -0
  396. package/corpus/templates/slides-2/actions/_uploaded-files.ts +114 -0
  397. package/corpus/templates/slides-2/actions/add-deck.ts +123 -0
  398. package/corpus/templates/slides-2/actions/add-slide-comment.ts +267 -0
  399. package/corpus/templates/slides-2/actions/add-slide.ts +888 -0
  400. package/corpus/templates/slides-2/actions/analyze-brand-assets.ts +66 -0
  401. package/corpus/templates/slides-2/actions/apply-design-system.ts +111 -0
  402. package/corpus/templates/slides-2/actions/approve-deck-access-request.ts +287 -0
  403. package/corpus/templates/slides-2/actions/audit-contrast.ts +143 -0
  404. package/corpus/templates/slides-2/actions/check-image-gen.ts +17 -0
  405. package/corpus/templates/slides-2/actions/clone-context-slide.ts +340 -0
  406. package/corpus/templates/slides-2/actions/clone-creative-context-deck.ts +143 -0
  407. package/corpus/templates/slides-2/actions/control-deck-history.ts +186 -0
  408. package/corpus/templates/slides-2/actions/control-presenter.ts +117 -0
  409. package/corpus/templates/slides-2/actions/control-slide-editor.ts +267 -0
  410. package/corpus/templates/slides-2/actions/create-deck-from-template.ts +274 -0
  411. package/corpus/templates/slides-2/actions/create-deck.ts +1243 -0
  412. package/corpus/templates/slides-2/actions/create-design-system.ts +131 -0
  413. package/corpus/templates/slides-2/actions/create-share-link.ts +127 -0
  414. package/corpus/templates/slides-2/actions/db-health.ts +22 -0
  415. package/corpus/templates/slides-2/actions/delete-asset.ts +154 -0
  416. package/corpus/templates/slides-2/actions/delete-deck.ts +427 -0
  417. package/corpus/templates/slides-2/actions/delete-design-system.ts +167 -0
  418. package/corpus/templates/slides-2/actions/delete-slide-comment.ts +143 -0
  419. package/corpus/templates/slides-2/actions/delete-staged-dataset.ts +30 -0
  420. package/corpus/templates/slides-2/actions/duplicate-deck.ts +299 -0
  421. package/corpus/templates/slides-2/actions/export-google-slides.ts +41 -0
  422. package/corpus/templates/slides-2/actions/export-html.ts +770 -0
  423. package/corpus/templates/slides-2/actions/export-pptx.ts +2203 -0
  424. package/corpus/templates/slides-2/actions/extract-pdf.ts +49 -0
  425. package/corpus/templates/slides-2/actions/generate-image-api.ts +671 -0
  426. package/corpus/templates/slides-2/actions/generate-image.ts +492 -0
  427. package/corpus/templates/slides-2/actions/get-agent-access-deck.ts +52 -0
  428. package/corpus/templates/slides-2/actions/get-deck-access-status.ts +130 -0
  429. package/corpus/templates/slides-2/actions/get-deck-design-tokens.ts +62 -0
  430. package/corpus/templates/slides-2/actions/get-deck-reference-context.ts +232 -0
  431. package/corpus/templates/slides-2/actions/get-deck-template.ts +38 -0
  432. package/corpus/templates/slides-2/actions/get-deck-version.ts +85 -0
  433. package/corpus/templates/slides-2/actions/get-deck.ts +562 -0
  434. package/corpus/templates/slides-2/actions/get-design-system-decode-job-status.ts +57 -0
  435. package/corpus/templates/slides-2/actions/get-design-system-tier-limit.ts +12 -0
  436. package/corpus/templates/slides-2/actions/get-design-system.ts +453 -0
  437. package/corpus/templates/slides-2/actions/get-google-docs-status.ts +106 -0
  438. package/corpus/templates/slides-2/actions/get-google-picker-token.ts +84 -0
  439. package/corpus/templates/slides-2/actions/get-home-suggestions.ts +52 -0
  440. package/corpus/templates/slides-2/actions/get-layout-overflows.ts +192 -0
  441. package/corpus/templates/slides-2/actions/get-slide-render.ts +125 -0
  442. package/corpus/templates/slides-2/actions/get-slide-source.ts +115 -0
  443. package/corpus/templates/slides-2/actions/get-slide-theme-preview.ts +64 -0
  444. package/corpus/templates/slides-2/actions/get-slide-theme.ts +44 -0
  445. package/corpus/templates/slides-2/actions/get-slides-2-upload-storage-status.ts +17 -0
  446. package/corpus/templates/slides-2/actions/get-slides-notification-prefs.ts +37 -0
  447. package/corpus/templates/slides-2/actions/get-workspace-defaults.ts +51 -0
  448. package/corpus/templates/slides-2/actions/image-gen-status.ts +35 -0
  449. package/corpus/templates/slides-2/actions/import-code.ts +26 -0
  450. package/corpus/templates/slides-2/actions/import-design-project.ts +49 -0
  451. package/corpus/templates/slides-2/actions/import-document.ts +125 -0
  452. package/corpus/templates/slides-2/actions/import-docx.ts +57 -0
  453. package/corpus/templates/slides-2/actions/import-file.ts +1273 -0
  454. package/corpus/templates/slides-2/actions/import-from-url.ts +25 -0
  455. package/corpus/templates/slides-2/actions/import-google-doc.ts +208 -0
  456. package/corpus/templates/slides-2/actions/import-google-font.ts +110 -0
  457. package/corpus/templates/slides-2/actions/import-google-slides-reference.ts +667 -0
  458. package/corpus/templates/slides-2/actions/import-pptx.ts +564 -0
  459. package/corpus/templates/slides-2/actions/import-svgl-logo.ts +115 -0
  460. package/corpus/templates/slides-2/actions/index-design-system-with-builder.ts +181 -0
  461. package/corpus/templates/slides-2/actions/index-uploaded-design-system-files.ts +77 -0
  462. package/corpus/templates/slides-2/actions/list-assets.ts +286 -0
  463. package/corpus/templates/slides-2/actions/list-deck-templates.ts +83 -0
  464. package/corpus/templates/slides-2/actions/list-deck-versions.ts +185 -0
  465. package/corpus/templates/slides-2/actions/list-decks.ts +591 -0
  466. package/corpus/templates/slides-2/actions/list-design-systems.ts +180 -0
  467. package/corpus/templates/slides-2/actions/list-slide-comments.ts +128 -0
  468. package/corpus/templates/slides-2/actions/list-slide-themes.ts +17 -0
  469. package/corpus/templates/slides-2/actions/list-staged-datasets.ts +14 -0
  470. package/corpus/templates/slides-2/actions/logo-config.ts +13 -0
  471. package/corpus/templates/slides-2/actions/navigate.ts +158 -0
  472. package/corpus/templates/slides-2/actions/patch-deck.ts +2378 -0
  473. package/corpus/templates/slides-2/actions/provider-api-catalog.ts +25 -0
  474. package/corpus/templates/slides-2/actions/provider-api-docs.ts +83 -0
  475. package/corpus/templates/slides-2/actions/provider-api-request.ts +222 -0
  476. package/corpus/templates/slides-2/actions/query-staged-dataset.ts +83 -0
  477. package/corpus/templates/slides-2/actions/read-composer-source.ts +108 -0
  478. package/corpus/templates/slides-2/actions/request-deck-access.ts +803 -0
  479. package/corpus/templates/slides-2/actions/restore-deck-version.ts +203 -0
  480. package/corpus/templates/slides-2/actions/run.ts +2 -0
  481. package/corpus/templates/slides-2/actions/save-deck.ts +313 -0
  482. package/corpus/templates/slides-2/actions/search-google-fonts.ts +61 -0
  483. package/corpus/templates/slides-2/actions/search-images.ts +30 -0
  484. package/corpus/templates/slides-2/actions/search-logos.ts +23 -0
  485. package/corpus/templates/slides-2/actions/search-svgl-logos.ts +42 -0
  486. package/corpus/templates/slides-2/actions/set-default-design-system.ts +88 -0
  487. package/corpus/templates/slides-2/actions/set-workspace-defaults.ts +61 -0
  488. package/corpus/templates/slides-2/actions/start-design-system-upload.ts +80 -0
  489. package/corpus/templates/slides-2/actions/sync-design-system-with-builder.ts +84 -0
  490. package/corpus/templates/slides-2/actions/toggle-slide-comment-reaction.ts +150 -0
  491. package/corpus/templates/slides-2/actions/transform-slide-objects.ts +1528 -0
  492. package/corpus/templates/slides-2/actions/update-asset.ts +499 -0
  493. package/corpus/templates/slides-2/actions/update-deck-aspect-ratio.ts +95 -0
  494. package/corpus/templates/slides-2/actions/update-deck-design-tokens.ts +175 -0
  495. package/corpus/templates/slides-2/actions/update-design-system.ts +95 -0
  496. package/corpus/templates/slides-2/actions/update-slide-comment.ts +213 -0
  497. package/corpus/templates/slides-2/actions/update-slide-source.ts +353 -0
  498. package/corpus/templates/slides-2/actions/update-slide.ts +850 -0
  499. package/corpus/templates/slides-2/actions/update-slides-notification-prefs.ts +55 -0
  500. package/corpus/templates/slides-2/actions/view-screen.ts +1098 -0
  501. package/corpus/templates/slides-2/agent-native.app-skill.json +165 -0
  502. package/corpus/templates/slides-2/agent-native.config.ts +20 -0
  503. package/corpus/templates/slides-2/agent-native.json +18 -0
  504. package/corpus/templates/slides-2/app/components/ThemeToggle.tsx +47 -0
  505. package/corpus/templates/slides-2/app/components/comments/SlideCommentPins.tsx +781 -0
  506. package/corpus/templates/slides-2/app/components/comments/SlideCommentsPanel.tsx +1075 -0
  507. package/corpus/templates/slides-2/app/components/deck/DeckCard.tsx +304 -0
  508. package/corpus/templates/slides-2/app/components/deck/DeckFilterMenu.tsx +83 -0
  509. package/corpus/templates/slides-2/app/components/deck/ExcalidrawSlide.tsx +183 -0
  510. package/corpus/templates/slides-2/app/components/deck/MermaidRenderer.tsx +126 -0
  511. package/corpus/templates/slides-2/app/components/deck/SlideRenderer.tsx +1553 -0
  512. package/corpus/templates/slides-2/app/components/design-system/DesignSystemCard.tsx +235 -0
  513. package/corpus/templates/slides-2/app/components/design-system/DesignSystemSetup.tsx +2021 -0
  514. package/corpus/templates/slides-2/app/components/design-system/builder-design-system-upload.ts +200 -0
  515. package/corpus/templates/slides-2/app/components/design-system/builder-index-response.ts +104 -0
  516. package/corpus/templates/slides-2/app/components/editor/AddSlidePopover.tsx +461 -0
  517. package/corpus/templates/slides-2/app/components/editor/AiEditingMarker.tsx +24 -0
  518. package/corpus/templates/slides-2/app/components/editor/AlignmentGuides.tsx +82 -0
  519. package/corpus/templates/slides-2/app/components/editor/AnimationsPanel.tsx +698 -0
  520. package/corpus/templates/slides-2/app/components/editor/AppMenu.tsx +356 -0
  521. package/corpus/templates/slides-2/app/components/editor/AssetLibraryPanel.tsx +508 -0
  522. package/corpus/templates/slides-2/app/components/editor/BlockBubbleMenu.tsx +548 -0
  523. package/corpus/templates/slides-2/app/components/editor/DeckAccessDeniedPage.tsx +173 -0
  524. package/corpus/templates/slides-2/app/components/editor/DeckEditorSkeleton.tsx +35 -0
  525. package/corpus/templates/slides-2/app/components/editor/DeferredPopoverFallback.tsx +148 -0
  526. package/corpus/templates/slides-2/app/components/editor/EditorActionCluster.tsx +217 -0
  527. package/corpus/templates/slides-2/app/components/editor/EditorSidebar.tsx +1047 -0
  528. package/corpus/templates/slides-2/app/components/editor/EditorToolbar.tsx +1285 -0
  529. package/corpus/templates/slides-2/app/components/editor/ExportMenu.tsx +579 -0
  530. package/corpus/templates/slides-2/app/components/editor/GeneratingOverlay.tsx +21 -0
  531. package/corpus/templates/slides-2/app/components/editor/GeneratingSlidePreview.tsx +73 -0
  532. package/corpus/templates/slides-2/app/components/editor/GoogleDocImportHint.tsx +378 -0
  533. package/corpus/templates/slides-2/app/components/editor/GoogleDriveConnectionCta.tsx +154 -0
  534. package/corpus/templates/slides-2/app/components/editor/GoogleSlidesReferenceImport.tsx +299 -0
  535. package/corpus/templates/slides-2/app/components/editor/HistoryPanel.tsx +354 -0
  536. package/corpus/templates/slides-2/app/components/editor/HomeQuickStartDialog.tsx +202 -0
  537. package/corpus/templates/slides-2/app/components/editor/ImageCropOverlay.tsx +820 -0
  538. package/corpus/templates/slides-2/app/components/editor/ImageDropPromptPopover.tsx +280 -0
  539. package/corpus/templates/slides-2/app/components/editor/ImageGenPanel.tsx +244 -0
  540. package/corpus/templates/slides-2/app/components/editor/ImageOverlay.tsx +280 -0
  541. package/corpus/templates/slides-2/app/components/editor/ImageSearchPanel.tsx +183 -0
  542. package/corpus/templates/slides-2/app/components/editor/ImportDeckButton.tsx +247 -0
  543. package/corpus/templates/slides-2/app/components/editor/LogoSearchPanel.tsx +366 -0
  544. package/corpus/templates/slides-2/app/components/editor/MermaidToExcalidrawPanel.tsx +99 -0
  545. package/corpus/templates/slides-2/app/components/editor/MissingDeckAccessPane.tsx +219 -0
  546. package/corpus/templates/slides-2/app/components/editor/NewDeckReferenceStep.tsx +812 -0
  547. package/corpus/templates/slides-2/app/components/editor/PromptDialog.tsx +963 -0
  548. package/corpus/templates/slides-2/app/components/editor/QuestionFlow.tsx +119 -0
  549. package/corpus/templates/slides-2/app/components/editor/RequestDeckAccessDialog.tsx +101 -0
  550. package/corpus/templates/slides-2/app/components/editor/ShareDialog.tsx +126 -0
  551. package/corpus/templates/slides-2/app/components/editor/SlideContextToolbar.tsx +1471 -0
  552. package/corpus/templates/slides-2/app/components/editor/SlideEditor.tsx +11183 -0
  553. package/corpus/templates/slides-2/app/components/editor/SlideOverflowWarning.tsx +82 -0
  554. package/corpus/templates/slides-2/app/components/editor/SlideScrollStack.tsx +307 -0
  555. package/corpus/templates/slides-2/app/components/editor/SlideSlashCommandMenu.tsx +692 -0
  556. package/corpus/templates/slides-2/app/components/editor/SlideThumbnailContextMenu.tsx +52 -0
  557. package/corpus/templates/slides-2/app/components/editor/SlideTransitionControl.tsx +184 -0
  558. package/corpus/templates/slides-2/app/components/editor/SlidesComposerContext.tsx +789 -0
  559. package/corpus/templates/slides-2/app/components/editor/SlidesComposerContextProvider.tsx +74 -0
  560. package/corpus/templates/slides-2/app/components/editor/SlidesLayersPanel.tsx +377 -0
  561. package/corpus/templates/slides-2/app/components/editor/SpeakerNotesPanel.tsx +119 -0
  562. package/corpus/templates/slides-2/app/components/editor/TweaksPanel.tsx +77 -0
  563. package/corpus/templates/slides-2/app/components/editor/UploadStorageGate.tsx +37 -0
  564. package/corpus/templates/slides-2/app/components/editor/bullet-editing.ts +880 -0
  565. package/corpus/templates/slides-2/app/components/editor/canvas-interactions/index.ts +12 -0
  566. package/corpus/templates/slides-2/app/components/editor/canvas-interactions/slides-canvas-adapter.ts +119 -0
  567. package/corpus/templates/slides-2/app/components/editor/commit-active-edit.ts +14 -0
  568. package/corpus/templates/slides-2/app/components/editor/editor-command-model.ts +35 -0
  569. package/corpus/templates/slides-2/app/components/editor/fit-text-object.ts +31 -0
  570. package/corpus/templates/slides-2/app/components/editor/in-place-text-session.browser-cases.json +983 -0
  571. package/corpus/templates/slides-2/app/components/editor/in-place-text-session.browser-host.ts +747 -0
  572. package/corpus/templates/slides-2/app/components/editor/in-place-text-session.ts +6891 -0
  573. package/corpus/templates/slides-2/app/components/editor/inline-edit-session.ts +26 -0
  574. package/corpus/templates/slides-2/app/components/editor/list-editing.ts +501 -0
  575. package/corpus/templates/slides-2/app/components/editor/rich-text-selection.ts +975 -0
  576. package/corpus/templates/slides-2/app/components/editor/rte-test-utils.ts +265 -0
  577. package/corpus/templates/slides-2/app/components/editor/selection-overlay-measurement.ts +191 -0
  578. package/corpus/templates/slides-2/app/components/editor/slide-escape-arbiter.ts +34 -0
  579. package/corpus/templates/slides-2/app/components/editor/slide-object-interactions.ts +6362 -0
  580. package/corpus/templates/slides-2/app/components/editor/slide-object-transform.browser-host.ts +19 -0
  581. package/corpus/templates/slides-2/app/components/editor/slide-pointer-target.ts +432 -0
  582. package/corpus/templates/slides-2/app/components/editor/slide-presence.ts +13 -0
  583. package/corpus/templates/slides-2/app/components/editor/slide-style.ts +243 -0
  584. package/corpus/templates/slides-2/app/components/editor/slide-text-targets.ts +540 -0
  585. package/corpus/templates/slides-2/app/components/editor/style-clipboard.ts +102 -0
  586. package/corpus/templates/slides-2/app/components/editor/use-prompt-import.ts +159 -0
  587. package/corpus/templates/slides-2/app/components/home/SlidesHomeLibrary.tsx +79 -0
  588. package/corpus/templates/slides-2/app/components/layout/AgentWorkIndicator.tsx +193 -0
  589. package/corpus/templates/slides-2/app/components/layout/Header.tsx +110 -0
  590. package/corpus/templates/slides-2/app/components/layout/Layout.tsx +492 -0
  591. package/corpus/templates/slides-2/app/components/layout/Sidebar.tsx +109 -0
  592. package/corpus/templates/slides-2/app/components/layout/layout-route-policy.ts +28 -0
  593. package/corpus/templates/slides-2/app/components/presentation/PresentationView.tsx +1116 -0
  594. package/corpus/templates/slides-2/app/components/presentation/PresenterView.tsx +526 -0
  595. package/corpus/templates/slides-2/app/components/presentation/SlideTransitionStage.tsx +297 -0
  596. package/corpus/templates/slides-2/app/components/presentation/present-channel.ts +31 -0
  597. package/corpus/templates/slides-2/app/components/presentation/slide-build-steps.ts +231 -0
  598. package/corpus/templates/slides-2/app/components/presentation/slide-navigation.ts +273 -0
  599. package/corpus/templates/slides-2/app/components/presentation/slide-transition-motion.ts +258 -0
  600. package/corpus/templates/slides-2/app/components/presentation/voice-navigation.ts +61 -0
  601. package/corpus/templates/slides-2/app/components/settings/notification-settings.tsx +93 -0
  602. package/corpus/templates/slides-2/app/components/slides-2-editor/Slides2AssetBrowser.tsx +726 -0
  603. package/corpus/templates/slides-2/app/components/slides-2-editor/Slides2CommandMenu.tsx +453 -0
  604. package/corpus/templates/slides-2/app/components/slides-2-editor/Slides2Comments.tsx +571 -0
  605. package/corpus/templates/slides-2/app/components/slides-2-editor/Slides2DesignTokens.tsx +345 -0
  606. package/corpus/templates/slides-2/app/components/slides-2-editor/Slides2Editor.tsx +4804 -0
  607. package/corpus/templates/slides-2/app/components/slides-2-editor/Slides2ExportMenu.tsx +671 -0
  608. package/corpus/templates/slides-2/app/components/slides-2-editor/Slides2FontBrowser.tsx +342 -0
  609. package/corpus/templates/slides-2/app/components/slides-2-editor/Slides2ImageCropControls.tsx +487 -0
  610. package/corpus/templates/slides-2/app/components/slides-2-editor/Slides2Inspector.tsx +950 -0
  611. package/corpus/templates/slides-2/app/components/slides-2-editor/Slides2SvglLogoSearchDialog.tsx +332 -0
  612. package/corpus/templates/slides-2/app/components/slides-2-editor/cross-slide-edit-history.ts +151 -0
  613. package/corpus/templates/slides-2/app/components/slides-2-editor/design-token-presets.ts +140 -0
  614. package/corpus/templates/slides-2/app/components/slides-2-editor/editor-action-errors.ts +47 -0
  615. package/corpus/templates/slides-2/app/components/slides-2-editor/editor-export-errors.ts +60 -0
  616. package/corpus/templates/slides-2/app/components/slides-2-editor/geometry.ts +275 -0
  617. package/corpus/templates/slides-2/app/components/slides-2-editor/image-crop-style.ts +82 -0
  618. package/corpus/templates/slides-2/app/components/slides-2-editor/inline-text-editor.tsx +631 -0
  619. package/corpus/templates/slides-2/app/components/slides-2-editor/keyboard-shortcuts.ts +104 -0
  620. package/corpus/templates/slides-2/app/components/slides-2-editor/object-insertion.ts +13 -0
  621. package/corpus/templates/slides-2/app/components/slides-2-editor/preview-patches.ts +54 -0
  622. package/corpus/templates/slides-2/app/components/slides-2-editor/sandbox-render-errors.ts +23 -0
  623. package/corpus/templates/slides-2/app/components/slides-2-editor/source-structure.ts +634 -0
  624. package/corpus/templates/slides-2/app/components/slides-2-editor/types.ts +85 -0
  625. package/corpus/templates/slides-2/app/components/slides-2-presenter/Slides2BlackoutOverlay.tsx +13 -0
  626. package/corpus/templates/slides-2/app/components/slides-2-presenter/Slides2ControlBar.tsx +285 -0
  627. package/corpus/templates/slides-2/app/components/slides-2-presenter/Slides2HelpDialog.tsx +72 -0
  628. package/corpus/templates/slides-2/app/components/slides-2-presenter/Slides2JumpInput.tsx +38 -0
  629. package/corpus/templates/slides-2/app/components/slides-2-presenter/Slides2LaserPointer.tsx +67 -0
  630. package/corpus/templates/slides-2/app/components/slides-2-presenter/Slides2Overview.tsx +161 -0
  631. package/corpus/templates/slides-2/app/components/slides-2-presenter/Slides2Player.tsx +839 -0
  632. package/corpus/templates/slides-2/app/components/slides-2-presenter/Slides2ProgressBar.tsx +23 -0
  633. package/corpus/templates/slides-2/app/components/slides-2-presenter/keyboard.ts +36 -0
  634. package/corpus/templates/slides-2/app/components/slides-2-presenter/presenter-channel.ts +131 -0
  635. package/corpus/templates/slides-2/app/components/slides-2-presenter/use-presenter-action-bridge.ts +296 -0
  636. package/corpus/templates/slides-2/app/components/slides-2-presenter/useSlides2TouchSwipe.ts +80 -0
  637. package/corpus/templates/slides-2/app/components/slides-2-runtime/SandboxedSlide.tsx +724 -0
  638. package/corpus/templates/slides-2/app/components/slides-2-runtime/SlideContentRenderer.tsx +137 -0
  639. package/corpus/templates/slides-2/app/components/slides-2-runtime/Slides2Canvas.tsx +99 -0
  640. package/corpus/templates/slides-2/app/components/slides-2-runtime/constants.ts +4 -0
  641. package/corpus/templates/slides-2/app/components/slides-2-runtime/protocol.ts +1400 -0
  642. package/corpus/templates/slides-2/app/components/slides-2-runtime/transition-frame.ts +439 -0
  643. package/corpus/templates/slides-2/app/components/templates/DeckTemplateLibrary.tsx +314 -0
  644. package/corpus/templates/slides-2/app/components/templates/DeckTemplatePreview.tsx +60 -0
  645. package/corpus/templates/slides-2/app/components/templates/DeckTemplateStage.tsx +45 -0
  646. package/corpus/templates/slides-2/app/components/ui/alert-dialog.tsx +1 -0
  647. package/corpus/templates/slides-2/app/components/ui/avatar.tsx +1 -0
  648. package/corpus/templates/slides-2/app/components/ui/button-group.tsx +1 -0
  649. package/corpus/templates/slides-2/app/components/ui/button.tsx +1 -0
  650. package/corpus/templates/slides-2/app/components/ui/card.tsx +1 -0
  651. package/corpus/templates/slides-2/app/components/ui/command.tsx +1 -0
  652. package/corpus/templates/slides-2/app/components/ui/context-menu.tsx +32 -0
  653. package/corpus/templates/slides-2/app/components/ui/dialog.tsx +1 -0
  654. package/corpus/templates/slides-2/app/components/ui/dropdown-menu.tsx +1 -0
  655. package/corpus/templates/slides-2/app/components/ui/filter-trigger.tsx +1 -0
  656. package/corpus/templates/slides-2/app/components/ui/input.tsx +1 -0
  657. package/corpus/templates/slides-2/app/components/ui/label.tsx +1 -0
  658. package/corpus/templates/slides-2/app/components/ui/popover.tsx +1 -0
  659. package/corpus/templates/slides-2/app/components/ui/progress.tsx +1 -0
  660. package/corpus/templates/slides-2/app/components/ui/scroll-area.tsx +1 -0
  661. package/corpus/templates/slides-2/app/components/ui/select.tsx +1 -0
  662. package/corpus/templates/slides-2/app/components/ui/separator.tsx +1 -0
  663. package/corpus/templates/slides-2/app/components/ui/sheet.tsx +1 -0
  664. package/corpus/templates/slides-2/app/components/ui/skeleton.tsx +1 -0
  665. package/corpus/templates/slides-2/app/components/ui/slider.tsx +1 -0
  666. package/corpus/templates/slides-2/app/components/ui/spinner.tsx +1 -0
  667. package/corpus/templates/slides-2/app/components/ui/switch.tsx +1 -0
  668. package/corpus/templates/slides-2/app/components/ui/tabs.tsx +59 -0
  669. package/corpus/templates/slides-2/app/components/ui/textarea.tsx +1 -0
  670. package/corpus/templates/slides-2/app/components/ui/toggle-group.tsx +1 -0
  671. package/corpus/templates/slides-2/app/components/ui/toolkit-provider.tsx +17 -0
  672. package/corpus/templates/slides-2/app/components/ui/tooltip.tsx +1 -0
  673. package/corpus/templates/slides-2/app/components/visual-editor/CanvasCommentPins.tsx +46 -0
  674. package/corpus/templates/slides-2/app/components/visual-editor/DrawOverlay.tsx +27 -0
  675. package/corpus/templates/slides-2/app/components/visual-editor/MultiSelectChip.tsx +97 -0
  676. package/corpus/templates/slides-2/app/components/visual-editor/SaveStatusIndicator.tsx +273 -0
  677. package/corpus/templates/slides-2/app/components/visual-editor/index.ts +4 -0
  678. package/corpus/templates/slides-2/app/context/DeckContext.tsx +7486 -0
  679. package/corpus/templates/slides-2/app/design-system.ts +3 -0
  680. package/corpus/templates/slides-2/app/entry.client.tsx +10 -0
  681. package/corpus/templates/slides-2/app/entry.server.tsx +10 -0
  682. package/corpus/templates/slides-2/app/global.css +1626 -0
  683. package/corpus/templates/slides-2/app/hooks/use-agent-generating.ts +517 -0
  684. package/corpus/templates/slides-2/app/hooks/use-compact-editor-layout.ts +26 -0
  685. package/corpus/templates/slides-2/app/hooks/use-contrast-audit-bridge.ts +49 -0
  686. package/corpus/templates/slides-2/app/hooks/use-deck-access-reload.ts +70 -0
  687. package/corpus/templates/slides-2/app/hooks/use-deck-access.ts +50 -0
  688. package/corpus/templates/slides-2/app/hooks/use-deck-design-system.ts +146 -0
  689. package/corpus/templates/slides-2/app/hooks/use-deck-history-action-bridge.ts +266 -0
  690. package/corpus/templates/slides-2/app/hooks/use-deck-presence.ts +89 -0
  691. package/corpus/templates/slides-2/app/hooks/use-deck-role.ts +46 -0
  692. package/corpus/templates/slides-2/app/hooks/use-deck-versions.ts +43 -0
  693. package/corpus/templates/slides-2/app/hooks/use-design-system-workflows.ts +11 -0
  694. package/corpus/templates/slides-2/app/hooks/use-design-systems.ts +31 -0
  695. package/corpus/templates/slides-2/app/hooks/use-generating-slide-preview.ts +115 -0
  696. package/corpus/templates/slides-2/app/hooks/use-navigation-state.ts +229 -0
  697. package/corpus/templates/slides-2/app/hooks/use-new-deck-generation-signal.ts +46 -0
  698. package/corpus/templates/slides-2/app/hooks/use-new-deck-generation.ts +710 -0
  699. package/corpus/templates/slides-2/app/hooks/use-sidebar-collapsed.ts +95 -0
  700. package/corpus/templates/slides-2/app/hooks/use-slide-comments.ts +202 -0
  701. package/corpus/templates/slides-2/app/hooks/use-slide-file-storage-status.ts +55 -0
  702. package/corpus/templates/slides-2/app/hooks/use-undo-selection.ts +66 -0
  703. package/corpus/templates/slides-2/app/hooks/use-workspace-defaults.ts +31 -0
  704. package/corpus/templates/slides-2/app/i18n/en-US.ts +1507 -0
  705. package/corpus/templates/slides-2/app/i18n/index.ts +19 -0
  706. package/corpus/templates/slides-2/app/lib/agent-visible-message.ts +21 -0
  707. package/corpus/templates/slides-2/app/lib/aspect-ratios.ts +7 -0
  708. package/corpus/templates/slides-2/app/lib/asset-error-copy.ts +59 -0
  709. package/corpus/templates/slides-2/app/lib/canvas-zoom.ts +47 -0
  710. package/corpus/templates/slides-2/app/lib/composer-context.ts +152 -0
  711. package/corpus/templates/slides-2/app/lib/composer-draft.ts +34 -0
  712. package/corpus/templates/slides-2/app/lib/contrast-audit.ts +390 -0
  713. package/corpus/templates/slides-2/app/lib/contrast-resolve.ts +240 -0
  714. package/corpus/templates/slides-2/app/lib/create-deck-generation.ts +938 -0
  715. package/corpus/templates/slides-2/app/lib/deck-access-lost.ts +4 -0
  716. package/corpus/templates/slides-2/app/lib/deck-backup.ts +186 -0
  717. package/corpus/templates/slides-2/app/lib/deck-editor-loading.ts +91 -0
  718. package/corpus/templates/slides-2/app/lib/deck-export-file-client.ts +77 -0
  719. package/corpus/templates/slides-2/app/lib/deck-filter.ts +52 -0
  720. package/corpus/templates/slides-2/app/lib/deck-list-loading.ts +16 -0
  721. package/corpus/templates/slides-2/app/lib/deck-preview-frame.ts +15 -0
  722. package/corpus/templates/slides-2/app/lib/deck-share-links.ts +9 -0
  723. package/corpus/templates/slides-2/app/lib/deck-sorting.ts +19 -0
  724. package/corpus/templates/slides-2/app/lib/deferred-editor-surfaces.ts +24 -0
  725. package/corpus/templates/slides-2/app/lib/design-system-selection.ts +11 -0
  726. package/corpus/templates/slides-2/app/lib/design-systems.ts +231 -0
  727. package/corpus/templates/slides-2/app/lib/dynamic-import.ts +50 -0
  728. package/corpus/templates/slides-2/app/lib/editor-agent-handoff.ts +92 -0
  729. package/corpus/templates/slides-2/app/lib/editor-shortcuts.ts +153 -0
  730. package/corpus/templates/slides-2/app/lib/export-google-slides-client.ts +168 -0
  731. package/corpus/templates/slides-2/app/lib/export-pdf-client.ts +684 -0
  732. package/corpus/templates/slides-2/app/lib/export-pptx-client.ts +2420 -0
  733. package/corpus/templates/slides-2/app/lib/generation-lifecycle.ts +24 -0
  734. package/corpus/templates/slides-2/app/lib/generation-state.ts +247 -0
  735. package/corpus/templates/slides-2/app/lib/google-docs-client.ts +110 -0
  736. package/corpus/templates/slides-2/app/lib/google-slides-export-availability-client.ts +53 -0
  737. package/corpus/templates/slides-2/app/lib/google-slides-reference-source.ts +18 -0
  738. package/corpus/templates/slides-2/app/lib/image-download.ts +85 -0
  739. package/corpus/templates/slides-2/app/lib/image-drop-to-agent.ts +210 -0
  740. package/corpus/templates/slides-2/app/lib/import-uploaded-deck.ts +132 -0
  741. package/corpus/templates/slides-2/app/lib/inline-edit-remote.ts +55 -0
  742. package/corpus/templates/slides-2/app/lib/localize-slides-changelog.ts +47 -0
  743. package/corpus/templates/slides-2/app/lib/mermaid-blocks.ts +18 -0
  744. package/corpus/templates/slides-2/app/lib/new-deck-reference-selection.ts +174 -0
  745. package/corpus/templates/slides-2/app/lib/normalize-slide-padding.ts +74 -0
  746. package/corpus/templates/slides-2/app/lib/pending-deck-changes.ts +33 -0
  747. package/corpus/templates/slides-2/app/lib/portaled-layer.ts +7 -0
  748. package/corpus/templates/slides-2/app/lib/pptx-google-slides.ts +204 -0
  749. package/corpus/templates/slides-2/app/lib/prompt-attachment-adapter.ts +37 -0
  750. package/corpus/templates/slides-2/app/lib/prompt-file-uploads.ts +557 -0
  751. package/corpus/templates/slides-2/app/lib/recent-references.ts +106 -0
  752. package/corpus/templates/slides-2/app/lib/reference-document-hydration.ts +406 -0
  753. package/corpus/templates/slides-2/app/lib/register-chat-renderers.tsx +645 -0
  754. package/corpus/templates/slides-2/app/lib/reveal-after-delete.ts +55 -0
  755. package/corpus/templates/slides-2/app/lib/sanitize-slide-html.ts +752 -0
  756. package/corpus/templates/slides-2/app/lib/slide-agent-context.ts +148 -0
  757. package/corpus/templates/slides-2/app/lib/slide-animation-elements.ts +900 -0
  758. package/corpus/templates/slides-2/app/lib/slide-clipboard.ts +534 -0
  759. package/corpus/templates/slides-2/app/lib/slide-comment-anchor.ts +286 -0
  760. package/corpus/templates/slides-2/app/lib/slide-content-merge.ts +295 -0
  761. package/corpus/templates/slides-2/app/lib/slide-image-replacement.ts +1919 -0
  762. package/corpus/templates/slides-2/app/lib/slide-live-remote.ts +215 -0
  763. package/corpus/templates/slides-2/app/lib/slide-scroll.ts +56 -0
  764. package/corpus/templates/slides-2/app/lib/slide-source-map.ts +1099 -0
  765. package/corpus/templates/slides-2/app/lib/slide-video.ts +390 -0
  766. package/corpus/templates/slides-2/app/lib/slides-relay-tracking.ts +114 -0
  767. package/corpus/templates/slides-2/app/lib/streaming-slide-html.ts +77 -0
  768. package/corpus/templates/slides-2/app/lib/tab-id.ts +3 -0
  769. package/corpus/templates/slides-2/app/lib/template-navigation.ts +15 -0
  770. package/corpus/templates/slides-2/app/lib/text-tool-shortcut.ts +75 -0
  771. package/corpus/templates/slides-2/app/lib/undo-reveal.ts +332 -0
  772. package/corpus/templates/slides-2/app/lib/upload-response.ts +107 -0
  773. package/corpus/templates/slides-2/app/lib/utils.ts +38 -0
  774. package/corpus/templates/slides-2/app/lib/validate-native-slide-html.ts +177 -0
  775. package/corpus/templates/slides-2/app/lib/video-upload.ts +354 -0
  776. package/corpus/templates/slides-2/app/pages/DeckEditor.tsx +6158 -0
  777. package/corpus/templates/slides-2/app/pages/DesignSystems.tsx +363 -0
  778. package/corpus/templates/slides-2/app/pages/Index.tsx +3254 -0
  779. package/corpus/templates/slides-2/app/pages/NotFound.tsx +33 -0
  780. package/corpus/templates/slides-2/app/pages/Presentation.tsx +120 -0
  781. package/corpus/templates/slides-2/app/pages/SharedPresentation.tsx +174 -0
  782. package/corpus/templates/slides-2/app/pages/SlideThemeDetail.tsx +227 -0
  783. package/corpus/templates/slides-2/app/pages/SlideThemes.tsx +155 -0
  784. package/corpus/templates/slides-2/app/pages/Slides2EditorPage.tsx +1618 -0
  785. package/corpus/templates/slides-2/app/pages/Slides2PresenterConsolePage.tsx +937 -0
  786. package/corpus/templates/slides-2/app/pages/Slides2PresenterPage.tsx +979 -0
  787. package/corpus/templates/slides-2/app/pages/Templates.tsx +32 -0
  788. package/corpus/templates/slides-2/app/root.tsx +391 -0
  789. package/corpus/templates/slides-2/app/routes/$.tsx +10 -0
  790. package/corpus/templates/slides-2/app/routes/_index.tsx +1 -0
  791. package/corpus/templates/slides-2/app/routes/access-request.approve.tsx +276 -0
  792. package/corpus/templates/slides-2/app/routes/agent.tsx +19 -0
  793. package/corpus/templates/slides-2/app/routes/chat.$threadId.tsx +1 -0
  794. package/corpus/templates/slides-2/app/routes/chat.tsx +190 -0
  795. package/corpus/templates/slides-2/app/routes/deck.$id.tsx +10 -0
  796. package/corpus/templates/slides-2/app/routes/deck.$id_.present.tsx +10 -0
  797. package/corpus/templates/slides-2/app/routes/design-systems.tsx +10 -0
  798. package/corpus/templates/slides-2/app/routes/extensions.$id.$slug.tsx +2 -0
  799. package/corpus/templates/slides-2/app/routes/extensions.$id.tsx +5 -0
  800. package/corpus/templates/slides-2/app/routes/extensions._index.tsx +5 -0
  801. package/corpus/templates/slides-2/app/routes/extensions.tsx +5 -0
  802. package/corpus/templates/slides-2/app/routes/home-layout.tsx +31 -0
  803. package/corpus/templates/slides-2/app/routes/home.tsx +22 -0
  804. package/corpus/templates/slides-2/app/routes/p.$id.tsx +195 -0
  805. package/corpus/templates/slides-2/app/routes/settings.$.tsx +1 -0
  806. package/corpus/templates/slides-2/app/routes/settings.tsx +131 -0
  807. package/corpus/templates/slides-2/app/routes/share.$token.tsx +137 -0
  808. package/corpus/templates/slides-2/app/routes/slide.tsx +209 -0
  809. package/corpus/templates/slides-2/app/routes/team.tsx +11 -0
  810. package/corpus/templates/slides-2/app/routes/templates.tsx +1 -0
  811. package/corpus/templates/slides-2/app/routes/themes.$id.tsx +1 -0
  812. package/corpus/templates/slides-2/app/routes/themes.tsx +1 -0
  813. package/corpus/templates/slides-2/app/routes.ts +24 -0
  814. package/corpus/templates/slides-2/app/vite-env.d.ts +24 -0
  815. package/corpus/templates/slides-2/changelog/2026-10-17-find-and-switch-decks-from-the-presenter-console.md +6 -0
  816. package/corpus/templates/slides-2/changelog/2026-10-17-meet-slides-2-create-and-refine-editable-slide-decks-with-an.md +6 -0
  817. package/corpus/templates/slides-2/changelog/2026-10-17-pptx-image-export.md +6 -0
  818. package/corpus/templates/slides-2/changelog/2026-10-17-visual-editor.md +6 -0
  819. package/corpus/templates/slides-2/changelog/2026-10-18-apply-an-accessible-design-system-to-an-existing-deck-before.md +6 -0
  820. package/corpus/templates/slides-2/changelog/2026-10-18-choose-a-template-or-start-a-new-presentation-from-the-slide.md +6 -0
  821. package/corpus/templates/slides-2/changelog/2026-10-18-generate-decks-from-a-prompt-then-edit-slide-elements-direct.md +6 -0
  822. package/corpus/templates/slides-2/changelog/2026-10-18-generate-presentation-decks-from-a-prompt-and-edit-every-sli.md +6 -0
  823. package/corpus/templates/slides-2/changelog/2026-10-18-new-presentation-drafts-save-before-generation-starts-so-you.md +6 -0
  824. package/corpus/templates/slides-2/changelog/2026-10-18-the-assistant-can-undo-redo-and-save-pending-edits-in-the-vi.md +6 -0
  825. package/corpus/templates/slides-2/changelog/2026-10-19-agents-can-insert-duplicate-and-delete-canvas-objects-in-sou.md +6 -0
  826. package/corpus/templates/slides-2/changelog/2026-10-19-browse-slide-themes.md +6 -0
  827. package/corpus/templates/slides-2/changelog/2026-10-19-clicking-a-slide-preview-in-overview-selects-that-slide.md +6 -0
  828. package/corpus/templates/slides-2/changelog/2026-10-19-create-decks-from-a-prompt-and-edit-slides-directly-on-the-c.md +6 -0
  829. package/corpus/templates/slides-2/changelog/2026-10-19-creating-and-editing-decks-now-starts-with-the-tools-most-re.md +6 -0
  830. package/corpus/templates/slides-2/changelog/2026-10-19-deleting-decks-revokes-public-links.md +7 -0
  831. package/corpus/templates/slides-2/changelog/2026-10-19-escape-cancels-an-in-progress-slide-drag-without-losing-earl.md +6 -0
  832. package/corpus/templates/slides-2/changelog/2026-10-19-import-failures-now-show-clear-localized-descriptions-instea.md +6 -0
  833. package/corpus/templates/slides-2/changelog/2026-10-19-presenter-controls-stay-responsive-when-moving-over-the-slid.md +6 -0
  834. package/corpus/templates/slides-2/changelog/2026-10-19-presenter-notes-stay-private-from-viewers-and-commenters.md +6 -0
  835. package/corpus/templates/slides-2/changelog/2026-10-19-preview-generated-slides-in-chat.md +6 -0
  836. package/corpus/templates/slides-2/changelog/2026-10-19-remote-image-previews-accept-supported-raster-formats.md +6 -0
  837. package/corpus/templates/slides-2/changelog/2026-10-19-search-the-svgl-catalog-and-add-svg-logos-to-a-deck-or-the-g.md +6 -0
  838. package/corpus/templates/slides-2/changelog/2026-10-19-slide-generation-explains-when-react-effect-hooks-cannot-run.md +6 -0
  839. package/corpus/templates/slides-2/changelog/2026-10-19-the-editor-highlights-hovered-objects-and-keeps-image-replac.md +6 -0
  840. package/corpus/templates/slides-2/changelog/2026-10-19-the-slide-editor-uses-the-shared-agent-native-controls.md +6 -0
  841. package/corpus/templates/slides-2/changelog/2026-10-20-deck-editing-controls-match-the-workspace.md +6 -0
  842. package/corpus/templates/slides-2/changelog/2026-10-20-google-slides-imports-now-report-missing-image-data-instead-.md +6 -0
  843. package/corpus/templates/slides-2/changelog/2026-10-20-imports-and-previews-handle-large-content-safely.md +6 -0
  844. package/corpus/templates/slides-2/changelog/2026-10-20-public-deck-pages-can-export-source-backed-slides-to-pdf.md +6 -0
  845. package/corpus/templates/slides-2/changelog/2026-10-20-saved-slide-images-stay-available.md +6 -0
  846. package/corpus/templates/slides-2/changelog/2026-10-20-scope-global-media-picks-to-assets-the-current-deck-can-reso.md +6 -0
  847. package/corpus/templates/slides-2/components.json +20 -0
  848. package/corpus/templates/slides-2/drizzle.config.ts +3 -0
  849. package/corpus/templates/slides-2/learnings.defaults.md +5 -0
  850. package/corpus/templates/slides-2/netlify.toml +24 -0
  851. package/corpus/templates/slides-2/package.json +147 -0
  852. package/corpus/templates/slides-2/public/agent-native-icon-dark.svg +10 -0
  853. package/corpus/templates/slides-2/public/agent-native-icon-light.svg +10 -0
  854. package/corpus/templates/slides-2/public/agent-native-logo-dark.svg +21 -0
  855. package/corpus/templates/slides-2/public/agent-native-logo-light.svg +21 -0
  856. package/corpus/templates/slides-2/public/assets/builder-logo-white.svg +15 -0
  857. package/corpus/templates/slides-2/public/assets/generated/preview.html +61 -0
  858. package/corpus/templates/slides-2/public/assets/intuit-logo-white.svg +6 -0
  859. package/corpus/templates/slides-2/public/assets/walmart-logo-white.svg +6 -0
  860. package/corpus/templates/slides-2/public/chatgpt-plugin-icon.svg +7 -0
  861. package/corpus/templates/slides-2/public/favicon.svg +1 -0
  862. package/corpus/templates/slides-2/public/icon-180.svg +1 -0
  863. package/corpus/templates/slides-2/public/icon-192.svg +1 -0
  864. package/corpus/templates/slides-2/public/icon-512.svg +1 -0
  865. package/corpus/templates/slides-2/public/manifest.json +20 -0
  866. package/corpus/templates/slides-2/public/placeholder.svg +1 -0
  867. package/corpus/templates/slides-2/public/robots.txt +14 -0
  868. package/corpus/templates/slides-2/public/visual-edit-structure-proof.html +99 -0
  869. package/corpus/templates/slides-2/react-router.config.ts +7 -0
  870. package/corpus/templates/slides-2/scripts/edit-fidelity/README.md +499 -0
  871. package/corpus/templates/slides-2/scripts/edit-fidelity/authoring-fuzz.ts +9517 -0
  872. package/corpus/templates/slides-2/scripts/edit-fidelity/baseline.json +16427 -0
  873. package/corpus/templates/slides-2/scripts/edit-fidelity/dev-server-url.ts +10 -0
  874. package/corpus/templates/slides-2/scripts/edit-fidelity/lib/in-page.ts +1975 -0
  875. package/corpus/templates/slides-2/scripts/edit-fidelity/lib/metrics.ts +1401 -0
  876. package/corpus/templates/slides-2/scripts/edit-fidelity/retry-infra.ts +7 -0
  877. package/corpus/templates/slides-2/scripts/edit-fidelity/run-options.ts +21 -0
  878. package/corpus/templates/slides-2/scripts/edit-fidelity/run-outcomes.ts +127 -0
  879. package/corpus/templates/slides-2/scripts/edit-fidelity/run.ts +8451 -0
  880. package/corpus/templates/slides-2/scripts/export-fidelity/README.md +116 -0
  881. package/corpus/templates/slides-2/scripts/export-fidelity/compare-layout-lib.ts +241 -0
  882. package/corpus/templates/slides-2/scripts/export-fidelity/compare-layout.ts +30 -0
  883. package/corpus/templates/slides-2/scripts/export-fidelity/diff.ts +222 -0
  884. package/corpus/templates/slides-2/scripts/export-fidelity/export.ts +765 -0
  885. package/corpus/templates/slides-2/scripts/export-fidelity/fixtures/agent-dark-deck.json +48 -0
  886. package/corpus/templates/slides-2/scripts/export-fidelity/generate-calibration.ts +765 -0
  887. package/corpus/templates/slides-2/scripts/export-fidelity/google-export.ts +137 -0
  888. package/corpus/templates/slides-2/scripts/export-fidelity/google-layout.ts +82 -0
  889. package/corpus/templates/slides-2/scripts/export-fidelity/resolve-pkg.ts +29 -0
  890. package/corpus/templates/slides-2/scripts/migrate-production.ts +22 -0
  891. package/corpus/templates/slides-2/server/db/index.ts +73 -0
  892. package/corpus/templates/slides-2/server/db/schema.ts +189 -0
  893. package/corpus/templates/slides-2/server/handlers/assets-url.ts +13 -0
  894. package/corpus/templates/slides-2/server/handlers/assets.ts +3217 -0
  895. package/corpus/templates/slides-2/server/handlers/decks.ts +185 -0
  896. package/corpus/templates/slides-2/server/handlers/demo.ts +9 -0
  897. package/corpus/templates/slides-2/server/handlers/design-systems.ts +219 -0
  898. package/corpus/templates/slides-2/server/handlers/google-docs-auth.ts +165 -0
  899. package/corpus/templates/slides-2/server/handlers/image-gen.ts +153 -0
  900. package/corpus/templates/slides-2/server/handlers/image-providers/gemini.ts +209 -0
  901. package/corpus/templates/slides-2/server/handlers/image-providers/index.ts +61 -0
  902. package/corpus/templates/slides-2/server/handlers/image-providers/openai.ts +288 -0
  903. package/corpus/templates/slides-2/server/handlers/image-providers/types.ts +35 -0
  904. package/corpus/templates/slides-2/server/handlers/import/docx-parser.ts +31 -0
  905. package/corpus/templates/slides-2/server/handlers/import/html-converter.ts +1534 -0
  906. package/corpus/templates/slides-2/server/handlers/import/pdf-fidelity-parser.ts +1039 -0
  907. package/corpus/templates/slides-2/server/handlers/import/pdf-sidecar-reader.ts +81 -0
  908. package/corpus/templates/slides-2/server/handlers/import/pdf-style-digest.ts +187 -0
  909. package/corpus/templates/slides-2/server/handlers/import/pptx-assets.ts +155 -0
  910. package/corpus/templates/slides-2/server/handlers/import/pptx-parser.ts +57 -0
  911. package/corpus/templates/slides-2/server/handlers/request-auth-context.ts +108 -0
  912. package/corpus/templates/slides-2/server/handlers/share.ts +52 -0
  913. package/corpus/templates/slides-2/server/handlers/uploads-chunked.ts +1066 -0
  914. package/corpus/templates/slides-2/server/handlers/uploads.ts +457 -0
  915. package/corpus/templates/slides-2/server/lib/access-request-email.ts +66 -0
  916. package/corpus/templates/slides-2/server/lib/assets-image-delegation.ts +331 -0
  917. package/corpus/templates/slides-2/server/lib/bounded-multipart.ts +49 -0
  918. package/corpus/templates/slides-2/server/lib/builder-design-system-proxy.ts +122 -0
  919. package/corpus/templates/slides-2/server/lib/chat-attachments.ts +425 -0
  920. package/corpus/templates/slides-2/server/lib/chatgpt-directory-tools.ts +246 -0
  921. package/corpus/templates/slides-2/server/lib/chunked-upload-session.ts +195 -0
  922. package/corpus/templates/slides-2/server/lib/comment-notifications.ts +184 -0
  923. package/corpus/templates/slides-2/server/lib/deck-access-requests.ts +102 -0
  924. package/corpus/templates/slides-2/server/lib/deck-asset-scope.ts +150 -0
  925. package/corpus/templates/slides-2/server/lib/deck-export-tracking.ts +119 -0
  926. package/corpus/templates/slides-2/server/lib/deck-templates/a-case-study.ts +154 -0
  927. package/corpus/templates/slides-2/server/lib/deck-templates/a-company.ts +160 -0
  928. package/corpus/templates/slides-2/server/lib/deck-templates/a-pitch.ts +151 -0
  929. package/corpus/templates/slides-2/server/lib/deck-templates/a-quarterly.ts +264 -0
  930. package/corpus/templates/slides-2/server/lib/deck-templates/a-shared.ts +35 -0
  931. package/corpus/templates/slides-2/server/lib/deck-templates/a-update.ts +188 -0
  932. package/corpus/templates/slides-2/server/lib/deck-templates/a-workshop.ts +196 -0
  933. package/corpus/templates/slides-2/server/lib/deck-templates/b-keynote.ts +131 -0
  934. package/corpus/templates/slides-2/server/lib/deck-templates/b-lesson.ts +209 -0
  935. package/corpus/templates/slides-2/server/lib/deck-templates/b-manifesto.ts +149 -0
  936. package/corpus/templates/slides-2/server/lib/deck-templates/b-portfolio.ts +144 -0
  937. package/corpus/templates/slides-2/server/lib/deck-templates/b-research.ts +221 -0
  938. package/corpus/templates/slides-2/server/lib/deck-templates/b-roadmap.ts +264 -0
  939. package/corpus/templates/slides-2/server/lib/deck-templates/b-shared.ts +44 -0
  940. package/corpus/templates/slides-2/server/lib/deck-templates/group-a.ts +16 -0
  941. package/corpus/templates/slides-2/server/lib/deck-templates/group-b.ts +16 -0
  942. package/corpus/templates/slides-2/server/lib/deck-templates/legacy.ts +567 -0
  943. package/corpus/templates/slides-2/server/lib/deck-templates.ts +60 -0
  944. package/corpus/templates/slides-2/server/lib/deck-versions.ts +233 -0
  945. package/corpus/templates/slides-2/server/lib/design-system-workflows.ts +22 -0
  946. package/corpus/templates/slides-2/server/lib/emails.ts +84 -0
  947. package/corpus/templates/slides-2/server/lib/env-config.ts +15 -0
  948. package/corpus/templates/slides-2/server/lib/fetch-remote-image.ts +245 -0
  949. package/corpus/templates/slides-2/server/lib/generation-completion.ts +278 -0
  950. package/corpus/templates/slides-2/server/lib/google-docs-access.ts +51 -0
  951. package/corpus/templates/slides-2/server/lib/google-docs-error.ts +54 -0
  952. package/corpus/templates/slides-2/server/lib/google-docs-oauth.ts +422 -0
  953. package/corpus/templates/slides-2/server/lib/google-fonts.ts +509 -0
  954. package/corpus/templates/slides-2/server/lib/google-oauth-preflight.ts +119 -0
  955. package/corpus/templates/slides-2/server/lib/google-slides-export-availability.ts +55 -0
  956. package/corpus/templates/slides-2/server/lib/image-proxy-response.ts +16 -0
  957. package/corpus/templates/slides-2/server/lib/image-proxy-url.ts +155 -0
  958. package/corpus/templates/slides-2/server/lib/import-asset-storage.ts +214 -0
  959. package/corpus/templates/slides-2/server/lib/imported-asset-batch.ts +218 -0
  960. package/corpus/templates/slides-2/server/lib/legacy-slide-source.ts +692 -0
  961. package/corpus/templates/slides-2/server/lib/media-search-providers.ts +216 -0
  962. package/corpus/templates/slides-2/server/lib/native-creative-context.ts +295 -0
  963. package/corpus/templates/slides-2/server/lib/pdf-parse-setup.ts +115 -0
  964. package/corpus/templates/slides-2/server/lib/provider-api.ts +57 -0
  965. package/corpus/templates/slides-2/server/lib/request-wait-until.ts +30 -0
  966. package/corpus/templates/slides-2/server/lib/shared-deck.ts +29 -0
  967. package/corpus/templates/slides-2/server/lib/slide-asset-references.ts +309 -0
  968. package/corpus/templates/slides-2/server/lib/slide-content-patch.ts +1004 -0
  969. package/corpus/templates/slides-2/server/lib/slide-hygiene.ts +731 -0
  970. package/corpus/templates/slides-2/server/lib/slide-image-insertion.ts +136 -0
  971. package/corpus/templates/slides-2/server/lib/slide-reveal-issues.ts +41 -0
  972. package/corpus/templates/slides-2/server/lib/slide-source-editing/babel-walk.ts +117 -0
  973. package/corpus/templates/slides-2/server/lib/slide-source-editing/batch-edit.ts +152 -0
  974. package/corpus/templates/slides-2/server/lib/slide-source-editing/edit-ops.ts +1478 -0
  975. package/corpus/templates/slides-2/server/lib/slide-source-editing/image-target.ts +128 -0
  976. package/corpus/templates/slides-2/server/lib/slide-source-editing/text-diff.ts +23 -0
  977. package/corpus/templates/slides-2/server/lib/slide-source-limits.ts +9 -0
  978. package/corpus/templates/slides-2/server/lib/slide-source.ts +1786 -0
  979. package/corpus/templates/slides-2/server/lib/slide-theme-demo-sources.ts +2106 -0
  980. package/corpus/templates/slides-2/server/lib/slide-themes.ts +2174 -0
  981. package/corpus/templates/slides-2/server/lib/slide-worker-runtime.ts +1995 -0
  982. package/corpus/templates/slides-2/server/lib/slides-tracking.ts +73 -0
  983. package/corpus/templates/slides-2/server/lib/source-import.ts +213 -0
  984. package/corpus/templates/slides-2/server/lib/svgl.ts +364 -0
  985. package/corpus/templates/slides-2/server/lib/tenant-files.ts +179 -0
  986. package/corpus/templates/slides-2/server/lib/upload-storage-status.ts +9 -0
  987. package/corpus/templates/slides-2/server/lib/uploaded-asset-cleanup-outbox.ts +521 -0
  988. package/corpus/templates/slides-2/server/lib/uploaded-asset-object-lifecycle.ts +404 -0
  989. package/corpus/templates/slides-2/server/lib/uploaded-fonts.ts +696 -0
  990. package/corpus/templates/slides-2/server/lib/uploaded-reference-storage.ts +77 -0
  991. package/corpus/templates/slides-2/server/lib/validate-slide-animations.ts +341 -0
  992. package/corpus/templates/slides-2/server/middleware/auth.ts +6 -0
  993. package/corpus/templates/slides-2/server/plugins/_dev-upload-stub.ts +6 -0
  994. package/corpus/templates/slides-2/server/plugins/agent-chat.ts +402 -0
  995. package/corpus/templates/slides-2/server/plugins/auth.ts +31 -0
  996. package/corpus/templates/slides-2/server/plugins/collab.ts +30 -0
  997. package/corpus/templates/slides-2/server/plugins/config.ts +6 -0
  998. package/corpus/templates/slides-2/server/plugins/core-routes.ts +30 -0
  999. package/corpus/templates/slides-2/server/plugins/creative-context.ts +187 -0
  1000. package/corpus/templates/slides-2/server/plugins/db.ts +462 -0
  1001. package/corpus/templates/slides-2/server/plugins/feature-flags.ts +5 -0
  1002. package/corpus/templates/slides-2/server/plugins/labs.ts +8 -0
  1003. package/corpus/templates/slides-2/server/plugins/orphaned-asset-cleanup.ts +17 -0
  1004. package/corpus/templates/slides-2/server/plugins/otel.ts +6 -0
  1005. package/corpus/templates/slides-2/server/plugins/transactional-emails.ts +5 -0
  1006. package/corpus/templates/slides-2/server/register-secrets.ts +209 -0
  1007. package/corpus/templates/slides-2/server/routes/[...page].get.ts +5 -0
  1008. package/corpus/templates/slides-2/server/routes/[...page].head.ts +1 -0
  1009. package/corpus/templates/slides-2/server/routes/[base]/_agent-native/google-docs/auth-url.get.ts +1 -0
  1010. package/corpus/templates/slides-2/server/routes/[base]/_agent-native/google-docs/callback.get.ts +1 -0
  1011. package/corpus/templates/slides-2/server/routes/_agent-native/google-docs/auth-url.get.ts +1 -0
  1012. package/corpus/templates/slides-2/server/routes/_agent-native/google-docs/callback.get.ts +1 -0
  1013. package/corpus/templates/slides-2/server/routes/api/assets/upload-video.post.ts +1 -0
  1014. package/corpus/templates/slides-2/server/routes/api/assets/upload.post.ts +1 -0
  1015. package/corpus/templates/slides-2/server/routes/api/assets/video-uploads.delete.ts +1 -0
  1016. package/corpus/templates/slides-2/server/routes/api/deck-agent-context.json.get.ts +105 -0
  1017. package/corpus/templates/slides-2/server/routes/api/decks/events.get.ts +1 -0
  1018. package/corpus/templates/slides-2/server/routes/api/demo.get.ts +1 -0
  1019. package/corpus/templates/slides-2/server/routes/api/exports/[filename].get.ts +221 -0
  1020. package/corpus/templates/slides-2/server/routes/api/exports/google-slides.post.ts +240 -0
  1021. package/corpus/templates/slides-2/server/routes/api/exports/html.post.ts +67 -0
  1022. package/corpus/templates/slides-2/server/routes/api/exports/pptx.post.ts +100 -0
  1023. package/corpus/templates/slides-2/server/routes/api/gen-preview/[...].get.ts +24 -0
  1024. package/corpus/templates/slides-2/server/routes/api/generated/[...].get.ts +24 -0
  1025. package/corpus/templates/slides-2/server/routes/api/image-proxy.get.ts +518 -0
  1026. package/corpus/templates/slides-2/server/routes/api/import-assets/[token].get.ts +70 -0
  1027. package/corpus/templates/slides-2/server/routes/api/preview-images.get.ts +20 -0
  1028. package/corpus/templates/slides-2/server/routes/api/share/[token].get.ts +1 -0
  1029. package/corpus/templates/slides-2/server/routes/api/uploads-chunked/[sessionId]/chunk.post.ts +1 -0
  1030. package/corpus/templates/slides-2/server/routes/api/uploads-chunked/[sessionId]/status.get.ts +1 -0
  1031. package/corpus/templates/slides-2/server/routes/api/uploads-chunked/[sessionId].delete.ts +1 -0
  1032. package/corpus/templates/slides-2/server/routes/api/uploads-chunked/start.post.ts +1 -0
  1033. package/corpus/templates/slides-2/server/routes/api/uploads.delete.ts +1 -0
  1034. package/corpus/templates/slides-2/server/routes/api/uploads.post.ts +1 -0
  1035. package/corpus/templates/slides-2/server/workspace-defaults.ts +196 -0
  1036. package/corpus/templates/slides-2/shared/action-ui.ts +147 -0
  1037. package/corpus/templates/slides-2/shared/agent-readable.ts +2 -0
  1038. package/corpus/templates/slides-2/shared/api.ts +406 -0
  1039. package/corpus/templates/slides-2/shared/app-state-tabs.ts +30 -0
  1040. package/corpus/templates/slides-2/shared/app-storage.ts +9 -0
  1041. package/corpus/templates/slides-2/shared/aspect-ratios.ts +49 -0
  1042. package/corpus/templates/slides-2/shared/blank-slide.ts +179 -0
  1043. package/corpus/templates/slides-2/shared/client-compatibility.ts +2 -0
  1044. package/corpus/templates/slides-2/shared/contrast-audit.ts +255 -0
  1045. package/corpus/templates/slides-2/shared/deck-access.ts +26 -0
  1046. package/corpus/templates/slides-2/shared/deck-app-scope.ts +14 -0
  1047. package/corpus/templates/slides-2/shared/deck-content.ts +37 -0
  1048. package/corpus/templates/slides-2/shared/deck-history-control.ts +79 -0
  1049. package/corpus/templates/slides-2/shared/deck-scope.ts +5 -0
  1050. package/corpus/templates/slides-2/shared/deck-title.ts +199 -0
  1051. package/corpus/templates/slides-2/shared/deck-write.ts +61 -0
  1052. package/corpus/templates/slides-2/shared/design-flags.ts +7 -0
  1053. package/corpus/templates/slides-2/shared/design-system-validation.ts +88 -0
  1054. package/corpus/templates/slides-2/shared/editor-control.ts +120 -0
  1055. package/corpus/templates/slides-2/shared/generation-timing.ts +19 -0
  1056. package/corpus/templates/slides-2/shared/google-docs.ts +69 -0
  1057. package/corpus/templates/slides-2/shared/labs.ts +10 -0
  1058. package/corpus/templates/slides-2/shared/overview-navigation.ts +34 -0
  1059. package/corpus/templates/slides-2/shared/ownership.ts +6 -0
  1060. package/corpus/templates/slides-2/shared/pdf-sidecar.ts +130 -0
  1061. package/corpus/templates/slides-2/shared/presenter-control.ts +111 -0
  1062. package/corpus/templates/slides-2/shared/representative-slide.ts +89 -0
  1063. package/corpus/templates/slides-2/shared/slide-background.ts +30 -0
  1064. package/corpus/templates/slides-2/shared/slide-comment-anchor.ts +117 -0
  1065. package/corpus/templates/slides-2/shared/slide-comment-reactions.ts +47 -0
  1066. package/corpus/templates/slides-2/shared/slide-design-tokens.ts +92 -0
  1067. package/corpus/templates/slides-2/shared/slide-fit.ts +78 -0
  1068. package/corpus/templates/slides-2/shared/slide-ids.ts +133 -0
  1069. package/corpus/templates/slides-2/shared/slide-number.ts +124 -0
  1070. package/corpus/templates/slides-2/shared/slide-object-structure.ts +790 -0
  1071. package/corpus/templates/slides-2/shared/slide-text-range-selection.ts +50 -0
  1072. package/corpus/templates/slides-2/shared/slide-transitions.ts +70 -0
  1073. package/corpus/templates/slides-2/shared/slides-2-transition.ts +194 -0
  1074. package/corpus/templates/slides-2/shared/slides-user-prefs.ts +22 -0
  1075. package/corpus/templates/slides-2/shared/source-import-errors.ts +12 -0
  1076. package/corpus/templates/slides-2/shared/source-runtime-export.ts +76 -0
  1077. package/corpus/templates/slides-2/shared/upload-types.ts +41 -0
  1078. package/corpus/templates/slides-2/ssr-entry.ts +11 -0
  1079. package/corpus/templates/slides-2/tsconfig.json +27 -0
  1080. package/corpus/templates/slides-2/vite.config.ts +77 -0
  1081. package/corpus/templates/slides-2/vitest.config.ts +28 -0
  1082. package/corpus/templates/tasks/.agents/skills/actions/references/action-fields.md +1 -1
  1083. package/package.json +1 -1
  1084. package/corpus/templates/design/.agents/skills/shader-fills/SKILL.md +0 -182
  1085. package/corpus/templates/design/actions/apply-shader-fill.ts +0 -450
  1086. package/corpus/templates/design/actions/apply-shader.ts +0 -257
  1087. package/corpus/templates/design/actions/preview-shader-fill.ts +0 -157
  1088. package/corpus/templates/design/app/components/design/inspector/GlslShaderPanel.tsx +0 -1144
  1089. package/corpus/templates/design/app/components/design/inspector/SHADER_INTEGRATION.md +0 -450
  1090. package/corpus/templates/design/app/components/design/inspector/ShaderControls.stories.tsx +0 -71
  1091. package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +0 -555
  1092. package/corpus/templates/design/app/components/design/inspector/ShaderEffectRow.tsx +0 -105
  1093. package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +0 -433
  1094. package/corpus/templates/design/app/components/design/inspector/color-picker-shader-pane.tsx +0 -648
  1095. package/corpus/templates/design/shared/shader-fill.ts +0 -174
  1096. package/corpus/templates/design/shared/shader-presets.ts +0 -1523
@@ -0,0 +1,499 @@
1
+ # Edit fidelity harness
2
+
3
+ Drives the real Slides editor in a real browser and checks one rule: clicking into
4
+ text, typing, pressing Enter, or just leaving an edit must not change any
5
+ styling or layout on the slide. Unit tests have repeatedly missed breaks on
6
+ this path. The clicked element becomes the editor in place, the save
7
+ serializes the rendered DOM, and only a real browser rendering real CSS shows
8
+ what the user sees.
9
+
10
+ ## Run
11
+
12
+ Run the script from `templates/slides`:
13
+
14
+ ```bash
15
+ pnpm exec tsx scripts/edit-fidelity/run.ts [case-filter] [options]
16
+ ```
17
+
18
+ Run the focused selection-direction and chat caret regressions in Chromium,
19
+ including typing while a synthetic slide text edit session is open:
20
+
21
+ ```bash
22
+ pnpm exec tsx scripts/edit-fidelity/run.ts --typing-chat
23
+ ```
24
+
25
+ The Slides chat E2E job in `ci.yml` runs this check for pull requests that
26
+ change Slides, Core, or Toolkit files.
27
+
28
+ Run the job's focused line-edge caret check for in-place slide text editing:
29
+
30
+ ```bash
31
+ pnpm exec tsx scripts/edit-fidelity/run.ts --caret-qa
32
+ pnpm exec tsx scripts/edit-fidelity/run.ts --caret-qa --browser webkit
33
+ pnpm exec tsx scripts/edit-fidelity/run.ts --caret-qa --browser firefox
34
+ ```
35
+
36
+ Run the Chromium IME Escape regression in an in-place slide text session:
37
+
38
+ ```bash
39
+ pnpm exec tsx scripts/edit-fidelity/run.ts --ime-escape
40
+ ```
41
+
42
+ Run the Chromium mobile PowerPoint import status check. It holds the local file
43
+ upload while checking the real mobile stylesheet, then verifies that a
44
+ successful import opens its deck:
45
+
46
+ ```bash
47
+ pnpm exec tsx scripts/edit-fidelity/run.ts --mobile-import-status
48
+ ```
49
+
50
+ Run the synthetic Slides text-surface typing, clipboard, undo/redo, and
51
+ slide-switching round in Chromium (the default), WebKit, or Firefox. Chromium's
52
+ `--ime-escape` gate uses trusted CDP IME input. WebKit and Firefox receive
53
+ synthetic composition events around ordinary CJK key input; this checks the
54
+ editor's composition guards, but does not simulate a native OS IME:
55
+
56
+ ```bash
57
+ pnpm exec tsx scripts/edit-fidelity/run.ts --text-surface-qa
58
+ pnpm exec tsx scripts/edit-fidelity/run.ts --text-surface-qa --browser webkit
59
+ pnpm exec tsx scripts/edit-fidelity/run.ts --text-surface-qa --browser firefox
60
+ ```
61
+
62
+ Run the in-place rich-text authoring parity round in Chromium (the default),
63
+ WebKit, or Firefox. It types every
64
+ Content StarterKit Markdown shortcut at a block start and after Enter, runs all
65
+ eight enabled slash commands, and exercises styled bullet rows plus semantic
66
+ UL/OL Enter, indentation, staged Backspace, list exit, keyboard formatting,
67
+ soft breaks, Markdown paste, undo-to-literal, and vertical caret navigation.
68
+ Divider input rules cover `--- `, `___ `, and `*** `:
69
+
70
+ ```bash
71
+ pnpm exec tsx scripts/edit-fidelity/run.ts --authoring
72
+ pnpm exec tsx scripts/edit-fidelity/run.ts --authoring --browser webkit
73
+ pnpm exec tsx scripts/edit-fidelity/run.ts --authoring --browser firefox
74
+ ```
75
+
76
+ Rerun one authoring parity case while debugging it by matching a substring of
77
+ its case ID:
78
+
79
+ ```bash
80
+ pnpm exec tsx scripts/edit-fidelity/run.ts --authoring --authoring-case paragraph-bullet-delete
81
+ ```
82
+
83
+ Run slash, Markdown, list, and Docs-shaped paste with undo/redo against
84
+ representative source slides from the selected corpus. The gate requires
85
+ absolute positioning, flex/grid, styled list rows, and a viewport-scaled slide.
86
+ It also checks fractional-height lists inside transformed, bottom-anchored
87
+ absolute wrappers and roots, so subpixel size reservation cannot move the
88
+ surrounding layout; the wrapper rect is checked within one 1/64 CSS-pixel step
89
+ after each flow. Styled bullet-row markers keep a separate style check when the
90
+ surrounding row is treated as the edited visual block. Imported PPTX paragraphs
91
+ may reflow within their fixed text object when authoring inserts a block; the
92
+ gate allows only the measured downstream flow while keeping the object, its
93
+ styles, and every other slide object fixed. It saves and reloads each result and
94
+ compares canonical markup plus outside-block style/geometry. On the largest
95
+ corpus slide, it reports Event Timing keydown-to-paint p95 and warns
96
+ when it exceeds 16 ms. Since Event Timing
97
+ omits entries below 16 ms, the report uses all keydowns and shows a `<=16 ms`
98
+ bound when the p95 is below that threshold. It gates the p95 time from keydown
99
+ through the first animation frame and forced layout at 16 ms only when Event
100
+ Timing is unavailable; that measurement is a proxy, not paint. When Event
101
+ Timing is available, the first-frame proxy does not force layout, and the gate
102
+ reports beforeinput/input handler time separately. The Event Timing
103
+ keydown-to-paint measurement remains the latency flag. Slides with `data:` URLs
104
+ are excluded from the authoring rounds; the largest-slide latency copy replaces
105
+ those URLs with `about:blank` while preserving source geometry, so embedded
106
+ image bytes are never copied into the scratch database:
107
+
108
+ ```bash
109
+ pnpm exec tsx scripts/edit-fidelity/run.ts --authoring-corpus
110
+ pnpm exec tsx scripts/edit-fidelity/run.ts --authoring-corpus --browser webkit
111
+ pnpm exec tsx scripts/edit-fidelity/run.ts --authoring-corpus --authoring-source largest --browser firefox
112
+ pnpm exec tsx scripts/edit-fidelity/run.ts --corpus ../../.tmp/private/corpus --authoring-corpus --browser firefox
113
+ ```
114
+
115
+ Run seeded authoring soak checks. Each seed performs 500 mixed editing steps by
116
+ default, checks caret, typing, layout, exception, undo/redo, and persistence
117
+ invariants, and prints the seed plus a bounded operation log on failure. For the
118
+ manual cross-browser soak, use `--seeds 20`; seeds rotate through
119
+ synthetic, absolute, flex/grid, semantic-list, imported flex bullet-row, imported
120
+ paragraph bullet-row, and scaled committed-corpus text targets:
121
+
122
+ Random operations use Playwright keyboard input. The full undo/redo drain starts
123
+ with a Playwright shortcut in each direction, then dispatches the editor's same
124
+ keydown handler in-page and checks caret and markup after every history step.
125
+
126
+ ```bash
127
+ pnpm exec tsx scripts/edit-fidelity/run.ts --authoring-fuzz --seeds 20
128
+ pnpm exec tsx scripts/edit-fidelity/run.ts --authoring-fuzz --seeds 20 --browser webkit
129
+ pnpm exec tsx scripts/edit-fidelity/run.ts --authoring-fuzz --seeds 20 --browser firefox
130
+ ```
131
+
132
+ The `slides-authoring-fuzz-soak.yml` workflow is manual (`workflow_dispatch`). It
133
+ runs 20 seeds of 500 steps for each browser, with one seed per job and at most
134
+ four jobs at a time. PR CI runs a bounded 80-step smoke with seed 16 in each
135
+ browser, plus an 80-step seed 2 absolute-layout smoke in Chromium. It does not
136
+ run the full soak.
137
+
138
+ ## Authoring parity checklist
139
+
140
+ Before #5916, Slides used the shared Content editor with tasks, code blocks,
141
+ tables, and the Markdown serializer disabled. Its eight slash commands were
142
+ Text, Heading 1–3, Bulleted list, Numbered list, Quote, and Divider. StarterKit
143
+ still supplied its normal inline marks, headings 1–4, lists, blockquote, and
144
+ horizontal-rule input rules.
145
+
146
+ | Behavior | Shared editor before #5916 | In-place editor before this fix | Restored behavior and gate |
147
+ | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
148
+ | Slash menu | Paragraph, Heading 1–3, Bulleted list, Numbered list, Quote, Divider | No menu or command dispatch | Caret-anchored menu filters live, wraps arrows, accepts Enter/Tab, keeps focus, closes on slash removal/outside click, and flips at viewport edges; all 8 commands are gated |
149
+ | Markdown shortcuts | `- `, `* `, `+ `, `1. `, `# ` through `#### `, `> `, `---` / `___` / `***`, `**bold**`, `__bold__`, `*italic*`, `_italic_`, `~~strike~~`, and `` `code` `` | Only a subset worked at the root; line starts and child blocks were inconsistent | Every shortcut is checked at a block start and after Enter; one undo restores literal input |
150
+ | Lists | Enter split and exited list items; Tab and Shift-Tab changed nesting | Enter / indentation mostly worked, but edge deletion could merge too early or lose a row | Enter, Tab, Shift-Tab, empty-item exit, and two-stage Backspace demotion/merge are checked for real UL/OL and styled rows |
151
+ | Block edges | Heading Enter creates a paragraph; Backspace demotes heading, quote, or list item before a second press merges | Heading Enter cloned the heading; block/list edges had no staged demotion | Heading-end Enter, staged Backspace, and Shift+Enter soft break are covered in unit and browser gates |
152
+ | Toolbar | Bold, italic, underline, strike, inline code, Heading 1–3, and Link | Inline formatting and links remained; keyboard shortcut handling varied by browser | Cmd/Ctrl+B/I/U, Shift+S, E, and K call style-safe commands; selection formatting stays inside the edited element |
153
+ | Links | Add and remove links on the selection; paste a URL over selected text makes a link | Toolbar links were available; URL paste replaced the selected text | Keyboard link input and URL-over-selection paste preserve selected text and use safe URL schemes |
154
+ | Undo / redo | Typing bursts group by word/pause; commands undo to their literal input | Custom in-place history grouped edits but conversion restoration and word grouping were not gated | Shortcut/slash undo-to-literal, typing groups, and undo-all/redo-all are checked |
155
+ | Paste | Rich HTML, plain text, and Markdown block paste | Rich paste had a custom sanitizer; plain Markdown stayed literal text | Sanitized rich paste preserves supported headings, quotes, lists, and inline styles; plain Markdown creates blocks |
156
+ | Arrow navigation | Up/Down between blocks preserves the preferred horizontal caret position | Native browser movement was not checked across block layouts | Real-browser checks preserve caret x-position across adjacent blocks |
157
+
158
+ By default the harness starts its own scratch dev server with this command,
159
+ run from the repo root:
160
+
161
+ ```
162
+ pnpm exec tsx scripts/claude-launch.ts --name slides-edit-fidelity --dir templates/slides \
163
+ --env AUTH_MODE=local --env AUTH_DISABLED=true -- dev --port <free port>
164
+ ```
165
+
166
+ That server uses a throwaway PGlite database, which is wiped when the harness
167
+ exits. If the requested port is taken before the server binds, it moves to the
168
+ next free one; the harness polls the URL from the server's
169
+ `[agent-native] … listening on` line in `server.log`.
170
+
171
+ To reuse a server that is already running, set
172
+ `SLIDES_BASE_URL=http://localhost:<port>`. The harness refuses any other host,
173
+ because it creates and rewrites decks.
174
+
175
+ | Option | Meaning |
176
+ | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
177
+ | `case-filter` | Substring of the corpus file name |
178
+ | `--corpus <dir>` | Corpus directory. Default: `corpus/` next to this file |
179
+ | `--baseline <file>` | Ratchet file. Default: `<corpus>/../baseline.json` |
180
+ | `--update` | Rewrite the baseline entries for everything that ran. Entries that did not run are kept |
181
+ | `--accept-failing` | With `--update`, also record `fail`/`no-edit` results as accepted ceilings (never `error`) |
182
+ | `--scenarios a,b` | A subset of `noop,typedelete,append,enter3,clickout` |
183
+ | `--max-slides N` | Run the first N slides of each case, after `--slides` |
184
+ | `--slides 1,3` | 1-based slide numbers |
185
+ | `--max-targets-per-slide N` | Default 4. A case's `targets` entry overrides this per slide |
186
+ | `--targets 0,2` | Target indexes, from the slide's `targets.json` |
187
+ | `--concurrency N` | Runs N cases in parallel, each in its own page against the same server |
188
+ | `--out <dir>` / `--run <name>` | Output directory. Default: `<repo>/.tmp/slides-edit-fidelity/<run>/` |
189
+ | `--resume <run>` | Reuse `<run>`'s output and keep every result that did not error |
190
+ | `--cpu-throttle N` | Slow each editor page's CPU N times, to reproduce timing-dependent saves |
191
+ | `--headed` | Show the browser |
192
+ | `--typing-chat` | Check selection direction on edit entry and Agent chat typing with slide editing left open |
193
+ | `--caret-qa` | Check Home/End or macOS line-edge caret navigation in a synthetic slide text edit |
194
+ | `--ime-escape` | Verify composing Escape does not exit an in-place slide text edit session |
195
+ | `--mobile-import-status` | Check the real mobile import status while a local PowerPoint upload is pending |
196
+ | `--text-surface-qa` | Exercise Slides text fields, IME, paste, undo/redo, and slide switching in synthetic decks; defaults to Chromium |
197
+ | `--authoring` | Exercise slash commands, Markdown shortcuts, and list authoring in synthetic decks; defaults to Chromium |
198
+ | `--authoring-case <id>` | With `--authoring`, run only cases whose ID contains `<id>` |
199
+ | `--authoring-corpus` | Exercise slash, Markdown, and list authoring against corpus layouts; checks save/reload, outside-block fidelity, and input latency |
200
+ | `--authoring-source <id>` | Focus `--authoring-corpus` on one selected layout source |
201
+ | `--authoring-flow <flow>` | Focus `--authoring-corpus` on `slash`, `shortcut`, `list`, or `paste` |
202
+ | `--authoring-fuzz` | Run deterministic mixed-operation authoring soak; `--seed`, `--steps` (default 500), and `--seeds` select the run |
203
+ | `--line-key-platform <os>` | Emulate an OS and use its caret keys for reproduction; choices are `darwin`, `linux`, and `win32` |
204
+ | `--browser` | Browser for authoring, fuzz, or text-surface QA; choices are `chromium`, `webkit`, `firefox`, with Chromium as default |
205
+
206
+ Exit codes:
207
+
208
+ - **0**: every result is within its baseline ceiling.
209
+ - **1**: a regression, a missing baseline entry, a baselined scenario that did
210
+ not run, or a slide that errored.
211
+ - **2**: the harness could not run. Causes include a bad corpus, a non-localhost
212
+ URL, a server that never started, a run where no scenario ran, or a browser
213
+ that closed before every case ran.
214
+
215
+ An error from the dev server or the browser (a navigation or selector
216
+ timeout, a page reload, a closed page) is retried once on a fresh page. If it
217
+ repeats, the result is marked `infra` and counted as `infra-error`, apart from
218
+ editor failures. A run cut short, by a reboot for example, continues with
219
+ `--resume <run>`: it skips every scenario whose `result.json` exists with a
220
+ status other than `error`, and every slide whose scenarios all have one.
221
+
222
+ A run that exercised nothing never exits 0.
223
+
224
+ A full run of the committed corpus takes about 10 s per scenario. For example,
225
+ 56 slides × 4 targets × 5 scenarios takes about 3 hours serially. Use
226
+ `--concurrency 4` together with `--max-targets-per-slide` or `--scenarios` for
227
+ quicker loops.
228
+
229
+ ## Private corpus
230
+
231
+ Customer and internal decks must never be committed. Put them under the
232
+ gitignored `.tmp/` and point the harness at them:
233
+
234
+ ```bash
235
+ pnpm exec tsx scripts/edit-fidelity/run.ts --corpus ../../.tmp/my-decks/corpus --update
236
+ pnpm exec tsx scripts/edit-fidelity/run.ts --corpus ../../.tmp/my-decks/corpus
237
+ ```
238
+
239
+ The baseline defaults to `../../.tmp/my-decks/baseline.json`, so it stays
240
+ private as well. Committed fixtures in `corpus/` must be synthetic and
241
+ anonymized: no real company, person or deal names.
242
+
243
+ ## Corpus format
244
+
245
+ Each case is one file, `corpus/<case-id>.json`:
246
+
247
+ ```jsonc
248
+ {
249
+ "title": "Account review", // required
250
+ "notes": "what this case covers", // optional, ignored by the runner
251
+ "aspectRatio": "16:9", // optional, passed to create-deck
252
+ "slides": [
253
+ // required, non-empty
254
+ {
255
+ "id": "slide-1", // optional; defaults to slide-<n>
256
+ "content": "<div class=\"fmd-slide\">…</div>", // raw slide HTML or markdown, exactly as stored
257
+ "layout": "blank", // optional create-deck layout
258
+ "notes": "speaker notes", // optional
259
+ },
260
+ ],
261
+ "targets": { "0": 6 }, // optional: max text targets per slide, keyed by 0-based slide index
262
+ "expectStyles": [
263
+ // optional: computed styles that must hold on a fresh load and after reload
264
+ {
265
+ "slide": 0,
266
+ "selector": ".card .value",
267
+ "property": "font-size",
268
+ "value": "28px",
269
+ },
270
+ ],
271
+ }
272
+ ```
273
+
274
+ Corpus files are strict JSON. The comments and trailing commas above are
275
+ annotation only.
276
+
277
+ The harness creates the deck with `create-deck`. It then reads the slides back
278
+ with `get-deck` and uses that stored copy as the baseline, not the fixture,
279
+ because `create-deck` normalizes padding.
280
+
281
+ ## What one scenario does
282
+
283
+ The harness enumerates **targets**: each `[data-slide-text-block]` inside the
284
+ main canvas, skipping `<style>` and zero-size elements. `targets.json` records
285
+ them per slide. For each target and scenario:
286
+
287
+ 1. **Restore.** Write the stored slide back through `patch-deck`, then load
288
+ `/deck/<id>?slide=N` fresh, with chrome masked, caret and transitions off,
289
+ and two animation frames waited once every stylesheet has loaded and
290
+ `document.fonts` reports `loaded`. The renderer injects a webfont
291
+ stylesheet per slide font, so `fonts.ready` alone can resolve before the
292
+ slide's font is requested. Scenarios never contaminate each other: a
293
+ `pagehide` keepalive write from the previous page that carries other
294
+ content for this slide could land after the restore. The harness retains
295
+ those request bodies, waits for the restored content to settle when one
296
+ could overwrite it, and errors if the fixture did not survive.
297
+ 2. **View.** Capture `view.png` and a style snapshot of the slide.
298
+ 3. **Enter edit.** Try click, then a second click, then double-click. The
299
+ gesture that worked is recorded. A click must leave a caret within one
300
+ non-space grapheme of the click point (`caretPositionFromPoint`, compared
301
+ in rendered characters, a whitespace run counting as one), and a
302
+ double-click a selection of the whole word under it, across inline
303
+ elements, plus at most one trailing space; either way it must be in the
304
+ point's row (nearest block, or the row of a bullet marker, where either
305
+ gesture must leave a caret up to the start of the row's text). Anything else is a violation. The double-click
306
+ selection is then collapsed to a caret before any keys. If none enters
307
+ edit, the status is `no-edit`; the scenario fails and is never skipped. The clicks must still change nothing: a `no-edit` result also
308
+ gets a violation for any write, any change to the stored slide (both
309
+ skipped when opening the slide rewrites it anyway), and a view→after
310
+ pixel diff above tolerance.
311
+ 4. **Editing.** Capture `editing.png` and a snapshot before typing.
312
+ 5. **Keys.**
313
+ - `noop`: none.
314
+ - `typedelete`: `x`, then Backspace.
315
+ - `append`: End, then ` ok`.
316
+ - `enter3`: End, then Enter three times, then `new line`. After each Enter
317
+ (the first measured from the entry caret, since a caret End left at a
318
+ soft wrap measures as the next line; from the caret End left only when
319
+ entry left none) it records `enter-N.png`, the edited element's height,
320
+ the canvas change, and the caret's line, measured from the top of the
321
+ element's rendered text so that centred and bottom-anchored text, or a
322
+ label beside a taller icon, still shows a full line per Enter. The caret must
323
+ be collapsed inside the edited element and move to another line, or
324
+ into another block box (a list laid out as a grid puts the new row
325
+ beside the old one; flex items count as their row's line, not boxes of
326
+ their own); a caret that cannot be measured is its own violation.
327
+ - `clickout`: like `typedelete`.
328
+
329
+ Once the keys are in, it captures `typed.png`: the slide as the live
330
+ editor shows it, caret hidden.
331
+
332
+ 6. **Exit.** Escape, except `clickout`, which clicks the empty editor
333
+ background beside the slide. The harness then polls `get-deck` until the
334
+ stored content stops changing, and captures `after.png` and `saved.html`.
335
+ A save still in flight after 75 s errors the scenario.
336
+ 7. **Reload.** Capture `reload.png`, then read the stored slide again: a
337
+ write that lands after the edit settled (a `pagehide` flush, say) is a
338
+ violation, unless opening the slide rewrites it anyway. Playwright does
339
+ not report the keepalive writes Slides sends on `pagehide`, so the page
340
+ keeps their bodies in `sessionStorage`. Any slide content one carried that
341
+ differs from `saved.html`, and any that deletes the slide or replaces the
342
+ deck without it, is a violation whether or not it has landed yet
343
+ (`keepalive-N.html`). When one was sent, the harness also observes the
344
+ reopened slide for up to 15 s and polls until the stored slide settles,
345
+ since a keepalive write can land after the reload.
346
+ 8. **Idempotence (`typedelete` only).** A second identical edit must save
347
+ exactly what the first one did.
348
+
349
+ Each scenario writes this directory:
350
+
351
+ ```
352
+ <out>/<case>/sNN/tNN-<scenario>/{view,editing,enter-1..3,typed,after,reload}.png
353
+ <out>/<case>/sNN/tNN-<scenario>/diff-{editing,after,reload,typed}.png
354
+ <out>/<case>/sNN/tNN-<scenario>/{stored,saved,saved2,reloaded}.html
355
+ <out>/<case>/sNN/tNN-<scenario>/write-N.html, keepalive-N.html
356
+ <out>/<case>/sNN/tNN-<scenario>/html.diff, html-outside.diff
357
+ <out>/<case>/sNN/tNN-<scenario>/result.json, sheet.png
358
+ ```
359
+
360
+ Each slide directory also holds `view.png`, `noise-diff.png` and
361
+ `targets.json`. The run root holds `summary.json` and `server.log`. The console
362
+ prints one row per scenario, with pixel % for editing/after/reload, style
363
+ deltas for editing/after, the html diff, and the violation count.
364
+
365
+ ## Metrics and invariants
366
+
367
+ - **Noise floor.** Each slide is loaded twice with no edit and the two loads
368
+ are diffed. The tolerance used below is `max(0.02%, 2 × noise)`.
369
+ - **Pixels.** pixelmatch runs at threshold 0.1 on view→editing, view→after,
370
+ after→reload and typed→after. Each pair is measured over the whole slide and again
371
+ "outside" the edited element: the element's old and new rects, padded 4px,
372
+ are blanked and left out of the denominator. A rect covers the element's
373
+ content as well as its box, because text that overflows a fixed-size box
374
+ (a freeform object, an imported text frame) is still the edited element.
375
+ - Every scenario: view→editing outside must be ~0, and after→reload whole
376
+ must be ~0.
377
+ - Every scenario that edits without resizing the edited element:
378
+ typed→after whole must be exactly 0 px. Both shots come from one page load,
379
+ so no noise floor applies. A resized element triggers the renderer's saved-
380
+ content fit pass on exit; its persistent output must still match after
381
+ reload, with no stored-content or computed-style changes outside the edit.
382
+ - `noop` / `typedelete` / `clickout`: view→editing and view→after whole
383
+ must be ~0.
384
+ - `append` / `enter3`: view→after outside must be ~0 while the edited
385
+ element keeps its size. Once it grows or shrinks, the content after it
386
+ legitimately moves, and the outside style and stored-bytes checks below
387
+ carry the rule instead.
388
+ - **Computed styles.** Every element with its own text yields a text record.
389
+ It carries these longhands: font family, size, weight and style;
390
+ line-height; letter-spacing and word-spacing; text-transform; color and
391
+ `-webkit-text-fill-color`; text-shadow; text-decoration-line; font feature
392
+ and variation settings; text-align; white-space; opacity; visibility. The
393
+ record is keyed by the text, so a run that moves into an editor `<p>` still
394
+ pairs up. Records pair by document order first: the unchanged head and tail
395
+ by position, ignoring the `#n` ordinal, so untouched copies of a repeated
396
+ text still pair when the edited copy's text changes; the rest by key.
397
+ - Every element that paints yields a box record: background, border,
398
+ box-shadow, or an svg/img/hr, including `::before`/`::after`. It carries
399
+ display, margins, paddings, border width/style/color per side, radii,
400
+ background color/image, box-shadow, opacity and visibility. An `auto`
401
+ margin is recorded as `auto`, not as the length it resolves to, because
402
+ that length moves whenever a flex sibling grows.
403
+ - Geometry (x/y/width/height, 1px tolerance) is counted separately.
404
+ - Editing must add 0 style deltas and lose 0 styled elements.
405
+ - `noop` / `typedelete` / `clickout` must add 0 style or geometry deltas, 0
406
+ missing or added elements, and must not change the visible text.
407
+ - `append` / `enter3` must add 0 style deltas outside the edited element.
408
+ - **Writes.** Every `patch-deck`, `save-deck` or `update-slide` request from
409
+ entering edit to the end of the scenario (the `typedelete` rerun included)
410
+ is recorded in `result.json`: `writeDetails` has each request's slides,
411
+ fields, phase (`edit` or the `rerun`), and whether its content equals the
412
+ stored string, and `writeStacks` has the client call stack of each. Each
413
+ edited-slide content that differs from stored is kept as `write-N.html`.
414
+ `noop` / `typedelete` / `clickout` must send none, except that a phase of
415
+ `typedelete` / `clickout` may send exactly the editor's draft then revert
416
+ (keys far enough apart for the typed `x` to autosave): two `patch-deck`
417
+ writes that each set only the edited slide's content, the first byte equal
418
+ to stored outside the edited element (the rule below) with one `x` added
419
+ to that element's visible text, the second byte equal to stored. Accepted
420
+ phases are listed in `draftReverts`.
421
+ - **Saved bytes.** For `append` / `enter3`, the edited element is located in
422
+ the stored source by tag, exact full text and occurrence (the same rule
423
+ for every lookup), and the saved string must
424
+ start with every stored byte before it and end with every stored byte after
425
+ it. `bytes-outside.txt` shows the first difference.
426
+ - **Saved text.** For `append` / `enter3`, text is read as lines: a `<br>` or
427
+ a block box breaks a line; zero-width spaces and blank lines are dropped,
428
+ and `text-transform` is not applied. The saved
429
+ content must differ from the stored content; the editor's text must be the
430
+ element's text with the token (` ok` / `new line`) inserted exactly once,
431
+ with whitespace runs compared as one space, so a lost space fails (beside
432
+ the token, only marker glyphs such as a cloned `●`); for `enter3`,
433
+ `new line` must start a line; and the reloaded slide must have an element
434
+ with exactly those lines, so a dropped line break fails. Typed text that
435
+ lands in a new text node on the reloaded slide must share its computed
436
+ text style with some text the element had before the edit. The ratchet
437
+ only bounds numbers from above, so lost text has to fail here.
438
+ - **Saved HTML.** Both versions are parsed in the page and canonicalized:
439
+ attributes and classes sorted, style declarations parsed by the CSSOM (which
440
+ normalizes colors and units) and sorted, whitespace collapsed.
441
+ - `noop` / `typedelete` / `clickout`: either nothing is saved, or the saved
442
+ canonical form equals the stored one.
443
+ - `append` / `enter3`: the edited element (plus any list items the edit
444
+ added after it) is replaced by a placeholder on both sides, and the rest
445
+ must match. When the element cannot be located, only that is reported:
446
+ the outside checks stay unknown (`null`), never "changed outside".
447
+ - **Hard failures** in the saved HTML, counted against the stored HTML:
448
+ - `data-slide-content-scope`, `visibility:hidden`, `data-editing-block`,
449
+ `contenteditable`, `data-builder-id`, `ProseMirror` or `data-src-i`
450
+ appearing more often;
451
+ - changed `<style>` text;
452
+ - fewer `<svg>` or `<img>`.
453
+ - **Inventory.** Counts of elements, visible and hidden styled elements, svg,
454
+ img and style, with deltas for editing/after/reload.
455
+
456
+ A scenario is `pass` when it has no violations. Otherwise it is `fail`,
457
+ `no-edit` or `error`, and `result.json` lists every violation.
458
+
459
+ ## Baseline ratchet
460
+
461
+ `baseline.json` maps `case/sNN/tNN/scenario` to a status and to ceilings.
462
+
463
+ - **Pixel ceilings:** `ceilingFor(d) = d + max(0.1, 15% of d)`, the same as the
464
+ Design harness. An entry recorded before a pixel field existed is held
465
+ to `ceilingFor(0)` for it.
466
+ - **Count ceilings:** style deltas, missing elements, html diff lines, hard
467
+ failures and violations are exact.
468
+
469
+ A regression is any of:
470
+
471
+ - a worse status (`pass < fail < no-edit < error`);
472
+ - a number above its ceiling;
473
+ - a result with no baseline entry;
474
+ - a baselined scenario inside the run's filters and limits that did not run;
475
+ - in a run over the whole corpus (no case filter, `--slides`, `--targets`,
476
+ `--max-slides`, scenario subset, or `--max-targets-per-slide` below 4), a
477
+ baselined case or slide that is no longer in the corpus. `--update` refuses
478
+ to write until those entries are pruned.
479
+
480
+ `--update` records only passing results: a ratchet seeded from a failing run
481
+ would accept the failure as its ceiling. Record a known failure deliberately
482
+ with `--accept-failing`; an `error` is never recorded. `--update` keeps the
483
+ stricter of the old and new value, so ceilings only go down, and it refuses to
484
+ write while a slide errored or a baselined scenario did not run. With no
485
+ baseline file the run cannot gate and exits 2.
486
+
487
+ ## Limitations
488
+
489
+ - Targets are matched by index plus text after each fresh load, and the
490
+ editor's `data-builder-id` is re-stamped after every commit. A slide whose
491
+ target list changes when it is opened will error the affected scenario
492
+ loudly rather than test a different element.
493
+ - Text records are keyed by their own text. Duplicate strings on one slide
494
+ pair up in document order.
495
+ - `append` and `enter3` press End, which moves to the end of the visual line.
496
+ In a wrapped paragraph the text lands mid-block, so the saved-text check
497
+ accepts the token at any point.
498
+ - Needs `playwright@1.63.x`, `pixelmatch@7.2.x` and `pngjs@7.x` in the root
499
+ pnpm store. They are resolved by `../export-fidelity/resolve-pkg.ts`.