@cardstack/boxel-cli 0.11.0-unstable.1 → 0.11.0-unstable.3

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 (177) hide show
  1. package/bundled-realms/pretui/components/agent-mark.gts +98 -0
  2. package/bundled-realms/pretui/components/agent-question.gts +340 -37
  3. package/bundled-realms/pretui/components/answer-footer.gts +249 -0
  4. package/bundled-realms/pretui/components/card-embed.gts +523 -0
  5. package/bundled-realms/pretui/components/card-pills.gts +725 -0
  6. package/bundled-realms/pretui/components/code-block.gts +87 -45
  7. package/bundled-realms/pretui/components/collapsed-turn.gts +133 -12
  8. package/bundled-realms/pretui/components/compaction-chip.gts +81 -67
  9. package/bundled-realms/pretui/components/composer-cap.gts +516 -0
  10. package/bundled-realms/pretui/components/context-ring.gts +108 -0
  11. package/bundled-realms/pretui/components/diff-block.gts +1002 -31
  12. package/bundled-realms/pretui/components/diff-stat.gts +102 -0
  13. package/bundled-realms/pretui/components/jump-chip.gts +86 -53
  14. package/bundled-realms/pretui/components/markdown-stream.gts +799 -0
  15. package/bundled-realms/pretui/components/markdown-surface.gts +71 -0
  16. package/bundled-realms/pretui/components/plan-mark.gts +147 -0
  17. package/bundled-realms/pretui/components/prose.gts +185 -8
  18. package/bundled-realms/pretui/components/prose.md +6 -8
  19. package/bundled-realms/pretui/components/quick-look.gts +377 -0
  20. package/bundled-realms/pretui/components/reactions.gts +136 -0
  21. package/bundled-realms/pretui/components/recommendation.gts +67 -36
  22. package/bundled-realms/pretui/components/result-card.gts +58 -22
  23. package/bundled-realms/pretui/components/segmented-control.gts +13 -8
  24. package/bundled-realms/pretui/components/session-prep.gts +12 -11
  25. package/bundled-realms/pretui/components/sliding-highlight.gts +8 -3
  26. package/bundled-realms/pretui/components/speaker-label.gts +132 -0
  27. package/bundled-realms/pretui/components/state-glyph.gts +121 -0
  28. package/bundled-realms/pretui/components/step-list.gts +62 -60
  29. package/bundled-realms/pretui/components/stick-to-bottom.gts +1150 -0
  30. package/bundled-realms/pretui/components/system-line.gts +143 -0
  31. package/bundled-realms/pretui/components/task-checklist.gts +184 -0
  32. package/bundled-realms/pretui/components/thinking.gts +63 -94
  33. package/bundled-realms/pretui/components/tool-change-table.gts +285 -0
  34. package/bundled-realms/pretui/components/tool-gate.gts +462 -0
  35. package/bundled-realms/pretui/components/tool-group.gts +920 -0
  36. package/bundled-realms/pretui/components/tool-icon.ts +64 -0
  37. package/bundled-realms/pretui/components/tool-meta.gts +82 -0
  38. package/bundled-realms/pretui/components/tool-plan.gts +197 -0
  39. package/bundled-realms/pretui/components/tool-row.gts +2087 -0
  40. package/bundled-realms/pretui/components/turn-changes.gts +227 -0
  41. package/bundled-realms/pretui/components/user-bubble.gts +575 -0
  42. package/bundled-realms/pretui/components/work-item.gts +185 -48
  43. package/bundled-realms/pretui/docs/scroll-anchoring-protocol.md +136 -0
  44. package/bundled-realms/pretui/internal/markdown-projection.ts +438 -0
  45. package/bundled-realms/pretui/internal/mount-queue.ts +79 -0
  46. package/bundled-realms/pretui/internal/tool-phrases.ts +168 -0
  47. package/bundled-realms/pretui/package.json +2 -1
  48. package/bundled-test-harness/assets/{ai-module-creation-test-beRNwH-e.js → ai-module-creation-test-B6FQKqIl.js} +1 -1
  49. package/bundled-test-harness/assets/{app-QAuw0l8v.js → app-KpPqdyX3.js} +4 -4
  50. package/bundled-test-harness/assets/{binary-upload-dedupe-test-bI8T0QLl.js → binary-upload-dedupe-test-DN00y1tM.js} +1 -1
  51. package/bundled-test-harness/assets/{can-invoke-test-DVaU_yRT.js → can-invoke-test-Bl-EUFM3.js} +1 -1
  52. package/bundled-test-harness/assets/{card-chooser-paging-test-DnxMnXKR.js → card-chooser-paging-test-BNuZRHX3.js} +1 -1
  53. package/bundled-test-harness/assets/{card-chooser-test-DUSnLr-u.js → card-chooser-test-wKfPOOT4.js} +1 -1
  54. package/bundled-test-harness/assets/{card-def-field-def-relationships-test-GBUr3tFK.js → card-def-field-def-relationships-test-CduQ6zan.js} +1 -1
  55. package/bundled-test-harness/assets/{card-delete-test-CQveO1VC.js → card-delete-test-DKxolj5o.js} +1 -1
  56. package/bundled-test-harness/assets/{check-correctness-test-D2M2p66N.js → check-correctness-test-B-kgHztp.js} +1 -1
  57. package/bundled-test-harness/assets/choreo-BEHW-NOc.js +2 -0
  58. package/bundled-test-harness/assets/{choreo-CJfBb_EY.js → choreo-C2cpCfhA.js} +164 -13
  59. package/bundled-test-harness/assets/{choreo-feature-reel-test-D2OrygZv.js → choreo-feature-reel-test-CPI_6nkT.js} +2 -2
  60. package/bundled-test-harness/assets/{choreo-gallery-w07xqtO-.js → choreo-gallery-BxA9cyzF.js} +3 -3
  61. package/bundled-test-harness/assets/{choreo-gallery-build-order-test-yQg4JER6.js → choreo-gallery-build-order-test-CLVoseAJ.js} +1 -1
  62. package/bundled-test-harness/assets/{choreo-gallery-compositor-test-C2THCXJN.js → choreo-gallery-compositor-test-BpT5Ia6B.js} +1 -1
  63. package/bundled-test-harness/assets/{choreo-gallery-cover-test-D4T_Tk4s.js → choreo-gallery-cover-test-DL_fdSsh.js} +1 -1
  64. package/bundled-test-harness/assets/{choreo-gallery-crossing-stage-test-tHUPJ-Hy.js → choreo-gallery-crossing-stage-test-BcKHhpOK.js} +2 -2
  65. package/bundled-test-harness/assets/{choreo-gallery-demos-alive-test-BOtBOnEZ.js → choreo-gallery-demos-alive-test-KufLhXG8.js} +1 -1
  66. package/bundled-test-harness/assets/{choreo-gallery-drift-test-D_6U1Z2c.js → choreo-gallery-drift-test-Cx58rYIA.js} +1 -1
  67. package/bundled-test-harness/assets/{choreo-gallery-escort-test-DDBU0n4C.js → choreo-gallery-escort-test-Wz-emmID.js} +1 -1
  68. package/bundled-test-harness/assets/{choreo-gallery-films-test-CgW1NSdr.js → choreo-gallery-films-test-BFrVs5WW.js} +2 -2
  69. package/bundled-test-harness/assets/{choreo-gallery-filter-test-DUIsNwdO.js → choreo-gallery-filter-test-DCKQkhwe.js} +1 -1
  70. package/bundled-test-harness/assets/{choreo-gallery-fold-test-Chzlxvdr.js → choreo-gallery-fold-test-UtpDgpG9.js} +1 -1
  71. package/bundled-test-harness/assets/{choreo-gallery-guide-pages-test-DOWnqALT.js → choreo-gallery-guide-pages-test-rXDU9JLM.js} +1 -1
  72. package/bundled-test-harness/assets/{choreo-gallery-guides-test-Dra2J4LJ.js → choreo-gallery-guides-test-DfVFdIuU.js} +3 -3
  73. package/bundled-test-harness/assets/{choreo-gallery-hang-test-zzn1eiB-.js → choreo-gallery-hang-test-Cj7MbkFf.js} +1 -1
  74. package/bundled-test-harness/assets/{choreo-gallery-highlight-test-CW99hncQ.js → choreo-gallery-highlight-test-D6CF3IYZ.js} +2 -2
  75. package/bundled-test-harness/assets/{choreo-gallery-inline-edit-test-CYFm1kUz.js → choreo-gallery-inline-edit-test-LfHWsbqc.js} +1 -1
  76. package/bundled-test-harness/assets/{choreo-gallery-interruption-test-CYIBrKV9.js → choreo-gallery-interruption-test-CvQQAgTp.js} +2 -2
  77. package/bundled-test-harness/assets/{choreo-gallery-lone-stack-test-DL8R3SG7.js → choreo-gallery-lone-stack-test-D7Zci7fm.js} +1 -1
  78. package/bundled-test-harness/assets/{choreo-gallery-navigation-test-Dcv04kDx.js → choreo-gallery-navigation-test-DB1EnBEW.js} +1 -1
  79. package/bundled-test-harness/assets/{choreo-gallery-playhead-transport-test-Cfz7GsXl.js → choreo-gallery-playhead-transport-test-CtBlc6AJ.js} +1 -1
  80. package/bundled-test-harness/assets/{choreo-gallery-poplayout-subtree-test-CwoklBkW.js → choreo-gallery-poplayout-subtree-test-BQbmjsvI.js} +1 -1
  81. package/bundled-test-harness/assets/{choreo-gallery-presence-modes-test-BDCIZzJ0.js → choreo-gallery-presence-modes-test-CIdXVG1K.js} +1 -1
  82. package/bundled-test-harness/assets/{choreo-gallery-presentation-test-DlyiHwFf.js → choreo-gallery-presentation-test-C_rPFp29.js} +1 -1
  83. package/bundled-test-harness/assets/{choreo-gallery-reduced-motion-test-DVz5SKNR.js → choreo-gallery-reduced-motion-test-CH5w8Lw-.js} +2 -2
  84. package/bundled-test-harness/assets/{choreo-gallery-sheet-standalone-test-CpD_-BvS.js → choreo-gallery-sheet-standalone-test-CDgI4mGX.js} +1 -1
  85. package/bundled-test-harness/assets/{choreo-gallery-sheet-test-BjvAKHDL.js → choreo-gallery-sheet-test-5lsFX7Rk.js} +1 -1
  86. package/bundled-test-harness/assets/{choreo-gallery-site-test-oq_7y_PN.js → choreo-gallery-site-test-DbMa2xeC.js} +2 -2
  87. package/bundled-test-harness/assets/{choreo-gallery-stage-Bzr4_8Xd.js → choreo-gallery-stage-b3Sk86hp.js} +2 -2
  88. package/bundled-test-harness/assets/{choreo-gallery-stage-keyboard-test-a83d2euJ.js → choreo-gallery-stage-keyboard-test-ds6fT5Eg.js} +1 -1
  89. package/bundled-test-harness/assets/{choreo-gallery-stages-test-C9Sl1kH6.js → choreo-gallery-stages-test-ahioKCct.js} +2 -2
  90. package/bundled-test-harness/assets/{choreo-gallery-subdivision-test-BVVnkOwk.js → choreo-gallery-subdivision-test-g7anTDhT.js} +1 -1
  91. package/bundled-test-harness/assets/{choreo-gallery-table-plan-test-B0YdYEA0.js → choreo-gallery-table-plan-test-Bozc4uUf.js} +1 -1
  92. package/bundled-test-harness/assets/{choreo-gallery-theater-test-BLA147xw.js → choreo-gallery-theater-test-kE535d-b.js} +3 -3
  93. package/bundled-test-harness/assets/{choreo-gallery-tuning-test-DSXiNzCh.js → choreo-gallery-tuning-test-6rHkQBnZ.js} +1 -1
  94. package/bundled-test-harness/assets/{choreo-gallery-widget-room-test-BI574PdO.js → choreo-gallery-widget-room-test-0Vq-uTo1.js} +2 -2
  95. package/bundled-test-harness/assets/{choreo-gallery-wires-test-B6Mz2WZl.js → choreo-gallery-wires-test-CdtnAWYO.js} +1 -1
  96. package/bundled-test-harness/assets/clip-BLfuHi8g.js +2 -0
  97. package/bundled-test-harness/assets/{clip-C_pXjVvY.js → clip-q1QE5f73.js} +1 -1
  98. package/bundled-test-harness/assets/{codeblocks-test-AdolhdCA.js → codeblocks-test-BDD7qK_V.js} +1 -1
  99. package/bundled-test-harness/assets/{compaction-test-DvyAQq56.js → compaction-test-BweolkhG.js} +1 -1
  100. package/bundled-test-harness/assets/{container-DIF_9lZ9.css → container-B5B6u-xm.css} +29 -22
  101. package/bundled-test-harness/assets/{container-DvvqmNpg.js → container-BnJjIM6J.js} +9 -6
  102. package/bundled-test-harness/assets/{create-listing-modal-test-D95JfQab.js → create-listing-modal-test-FvcAKpIa.js} +1 -1
  103. package/bundled-test-harness/assets/{debug-message-test-BcNtj7Wr.js → debug-message-test-CJ18Evt7.js} +1 -1
  104. package/bundled-test-harness/assets/{externals-6ZWftYIb.js → externals-BWjhmCD4.js} +12 -12
  105. package/bundled-test-harness/assets/{fallback-banner-live-delete-test-5lnN1pv2.js → fallback-banner-live-delete-test-C2H3BrT-.js} +1 -1
  106. package/bundled-test-harness/assets/{fallback-banner-test-DFb_m_Kq.js → fallback-banner-test-C10aYjkj.js} +1 -1
  107. package/bundled-test-harness/assets/{fallback-models-test-p3YIwj1L.js → fallback-models-test-BxoPiaGF.js} +1 -1
  108. package/bundled-test-harness/assets/{file-attachment-test-CmyjNWRR.js → file-attachment-test-DeKyzYaz.js} +1 -1
  109. package/bundled-test-harness/assets/film-B68PjRlr.js +2 -0
  110. package/bundled-test-harness/assets/{film-D7vtJO5q.js → film-CeUpnHN_.js} +6 -6
  111. package/bundled-test-harness/assets/{film-DN0A8JHx.js → film-DBZqyqW4.js} +6 -6
  112. package/bundled-test-harness/assets/{general-test-CX-TFDuX.js → general-test-BewzrpoB.js} +1 -1
  113. package/bundled-test-harness/assets/{glimmer-motion-and-choreo-in-cards-test-BHte2t9G.js → glimmer-motion-and-choreo-in-cards-test-HA-INN3d.js} +14 -14
  114. package/bundled-test-harness/assets/{glimmer-motion-and-choreo-test-BPNVeIio.js → glimmer-motion-and-choreo-test-BZ0ZuuAw.js} +3 -3
  115. package/bundled-test-harness/assets/{index-query-engine-test-Dz7Q4Xmk.js → index-query-engine-test-BtI8Y2LR.js} +1 -1
  116. package/bundled-test-harness/assets/{instance-filter-matcher-test-BoLU3bVg.js → instance-filter-matcher-test-BHXHGHjE.js} +1 -1
  117. package/bundled-test-harness/assets/{main-Dlgp8c7v.js → main-CqAHZ2kK.js} +1 -1
  118. package/bundled-test-harness/assets/{message-tool-test-CfjRSJvt.js → message-tool-test-NMaPJFsd.js} +1 -1
  119. package/bundled-test-harness/assets/{model-cost-tier-test-mZG84Uso.js → model-cost-tier-test-BgbfN2LH.js} +1 -1
  120. package/bundled-test-harness/assets/{operation-lowering-test-B0KpI1xu.js → operation-lowering-test-C4IaOjsA.js} +1 -1
  121. package/bundled-test-harness/assets/{operator-mode-card-chooser-test-KWS8lq16.js → operator-mode-card-chooser-test-Bwe47Rn7.js} +1 -1
  122. package/bundled-test-harness/assets/{operator-mode-links-test-CViFt0Ws.js → operator-mode-links-test-BU4jkC-B.js} +1 -1
  123. package/bundled-test-harness/assets/{operator-mode-test-D0gZM2yw.js → operator-mode-test-Bh0rGM9z.js} +1 -1
  124. package/bundled-test-harness/assets/{operator-mode-ui-test-CEvHJ9DS.js → operator-mode-ui-test-whgUw0ju.js} +1 -1
  125. package/bundled-test-harness/assets/{overlay-menu-items-test-Pw80RXsr.js → overlay-menu-items-test-Cwn1vr8q.js} +1 -1
  126. package/bundled-test-harness/assets/{overlays-BnOM360u.js → overlays-BOzLbVDK.js} +1 -1
  127. package/bundled-test-harness/assets/{overlays-kBVfa4i8.js → overlays-C_PuGDGh.js} +1 -1
  128. package/bundled-test-harness/assets/{past-sessions-test-CW0-Bjav.js → past-sessions-test-Bh24N-Kz.js} +1 -1
  129. package/bundled-test-harness/assets/{permission-checking-realm-test-D5uXQypS.js → permission-checking-realm-test-DKnnAy0f.js} +1 -1
  130. package/bundled-test-harness/assets/{plate-CFvCDv2t.js → plate-BL7UtyKE.js} +1 -1
  131. package/bundled-test-harness/assets/plate-CqG3igCJ.js +2 -0
  132. package/bundled-test-harness/assets/player-BJfsgdSI.js +2 -0
  133. package/bundled-test-harness/assets/{player-DzuYjrTU.js → player-Da_CIsp_.js} +1 -1
  134. package/bundled-test-harness/assets/{realm-config-policy-standing-test-Btatheni.js → realm-config-policy-standing-test-DngdYypq.js} +1 -1
  135. package/bundled-test-harness/assets/{realm-config-routing-rule-edit-test-Dh5zW13o.js → realm-config-routing-rule-edit-test-_rkFU8SN.js} +1 -1
  136. package/bundled-test-harness/assets/{realm-config-settings-test-BJa8gv_C.js → realm-config-settings-test-CR9NH0Zn.js} +1 -1
  137. package/bundled-test-harness/assets/{reasoning-test-2Zp37cQB.js → reasoning-test-0lH10kRl.js} +1 -1
  138. package/bundled-test-harness/assets/{room-message-test-BsrON13e.js → room-message-test-C-PddE4Y.js} +1 -1
  139. package/bundled-test-harness/assets/{run-BMyvn_UL.js → run-D4n4LPcK.js} +96 -6
  140. package/bundled-test-harness/assets/{run-realm-code-BxktQf6R.js → run-realm-code-C8N7DtN-.js} +1 -1
  141. package/bundled-test-harness/assets/{run-realm-code-test-7grpTos-.js → run-realm-code-test-DBdp147q.js} +1 -1
  142. package/bundled-test-harness/assets/{schema-generation-test-CM9ggQji.js → schema-generation-test-CB1Hb7GQ.js} +1 -1
  143. package/bundled-test-harness/assets/{scrolling-test-BER00htB.js → scrolling-test-3PhVin8h.js} +1 -1
  144. package/bundled-test-harness/assets/{searchable-option-test-BBr5BPow.js → searchable-option-test-BAdOiL4U.js} +1 -1
  145. package/bundled-test-harness/assets/{sending-test-BJGobs2E.js → sending-test-KSmu1tSJ.js} +1 -1
  146. package/bundled-test-harness/assets/{skills-test-GPOsHRN6.js → skills-test-D-dlcFpd.js} +1 -1
  147. package/bundled-test-harness/assets/{src-Df148w_b.js → src-B_DEhPze.js} +4 -4
  148. package/bundled-test-harness/assets/{src-Cf2wv-Le.js → src-BoTgwqUA.js} +2 -2
  149. package/bundled-test-harness/assets/{store-test-QvvHimzH.js → store-test-CEW7xQjZ.js} +1 -1
  150. package/bundled-test-harness/assets/{test-support-rNHuieEc.js → test-support-FXDPpIl3.js} +1 -1
  151. package/bundled-test-harness/assets/{test-support-C6N_2X-l.js → test-support-VX6ukQNR.js} +1 -1
  152. package/bundled-test-harness/assets/{tests-CmsQ-Z_3.js → tests-QYqqa6nv.js} +84 -84
  153. package/bundled-test-harness/assets/{text-input-validator-test-CYYH2N0L.js → text-input-validator-test-D8iNOWep.js} +1 -1
  154. package/bundled-test-harness/assets/{titles-B1pTaIfP.js → titles-DFJj5O0E.js} +1 -1
  155. package/bundled-test-harness/assets/titles-xGlgu7ys.js +2 -0
  156. package/bundled-test-harness/assets/{to-device-streaming-test-Ctqa0bVp.js → to-device-streaming-test-trCX-505.js} +1 -1
  157. package/bundled-test-harness/assets/{token-usage-test-BQVbK3X0.js → token-usage-test-C6sULooH.js} +1 -1
  158. package/bundled-test-harness/assets/{tools-DU8Rc15s.js → tools-UJfD-_al.js} +1 -1
  159. package/bundled-test-harness/assets/{tools-test-B13yvEKE.js → tools-test-Brav31AV.js} +1 -1
  160. package/bundled-test-harness/assets/{worker-DHBEBihX.js → worker-9ph9_Lpv.js} +31 -26
  161. package/bundled-test-harness/index.html +8 -8
  162. package/bundled-test-harness/tests/index.html +8 -8
  163. package/bundled-types/choreo/beacons.ts +16 -4
  164. package/bundled-types/choreo/changeset.ts +25 -5
  165. package/bundled-types/choreo/choreo.gts +245 -3
  166. package/bundled-types/choreo/far.ts +39 -0
  167. package/bundled-types/choreo/index.ts +2 -0
  168. package/bundled-types/choreo/run.ts +104 -1
  169. package/bundled-types/host-app/lib/realm-runner/worker.ts +8 -51
  170. package/bundled-types/runtime-common/realm-runner-script.d.ts +3 -0
  171. package/package.json +1 -1
  172. package/bundled-test-harness/assets/choreo-B3Z9QhDH.js +0 -2
  173. package/bundled-test-harness/assets/clip-BjcXuTwN.js +0 -2
  174. package/bundled-test-harness/assets/film-DMDPP7ma.js +0 -2
  175. package/bundled-test-harness/assets/plate-66qnQ-M9.js +0 -2
  176. package/bundled-test-harness/assets/player-pygg1PwA.js +0 -2
  177. package/bundled-test-harness/assets/titles-Ccpcl-jq.js +0 -2
@@ -111,15 +111,22 @@ function registerBeacon(name, element) {
111
111
  };
112
112
  }
113
113
  /**
114
- * Measure every live beacon, in the same window the region measures `final`.
114
+ * Measure the live beacons, in the same window the region measures `final`.
115
115
  *
116
116
  * Re-measured every pass, never cached: the trash can move without the list
117
117
  * rendering at all — a header that hides, a column that resizes, a scroll.
118
+ *
119
+ * A region passes the names its score asked for, so a pass measures only
120
+ * those: a page can claim hundreds of beacons (every chip a sheet may open
121
+ * from), and each region measuring every one on every pass would cost a
122
+ * layout read per beacon per region. Without `names`, every claimed beacon
123
+ * is measured.
118
124
  */
119
- function measureBeacons(root) {
125
+ function measureBeacons(root, names) {
120
126
  const out = /* @__PURE__ */ new Map();
121
- for (const [name, el] of registry) {
122
- if (!el.isConnected) continue;
127
+ const wanted = names ? [...names].map((name) => [name, registry.get(name)]) : [...registry];
128
+ for (const [name, el] of wanted) {
129
+ if (!el?.isConnected) continue;
123
130
  out.set(name, measureBounds(el, root));
124
131
  }
125
132
  return out;
@@ -1364,11 +1371,45 @@ var beforeMeasure = () => {};
1364
1371
  function setBeforeMeasure(fn) {
1365
1372
  beforeMeasure = fn;
1366
1373
  }
1374
+ /**
1375
+ * SETTLE: state that the pass implies but that is not markup, settled after
1376
+ * this pass's mounts and before any region measures. A scroll owner (a list
1377
+ * that keeps its scroll at the newest content, or holds a row in place while
1378
+ * rows above it change) holds its anchor here: a scroll position is state,
1379
+ * so it lands in the same pass as the change that moved it, and every region
1380
+ * measures the page as the reader will see it. An element the scroll kept
1381
+ * still then reads as not moved and gets no motion; only what really moved
1382
+ * on screen does.
1383
+ *
1384
+ * A settler only runs inside a barrier, and a barrier runs only when a
1385
+ * region joins a pass: with no region mounted, every region idle, or motion
1386
+ * off, no settler runs. So the owner sets its scroll through its own path as
1387
+ * well (on render or on resize, as it would with no Choreo on the page), and
1388
+ * the settler only makes that happen before regions measure. State never
1389
+ * depends on a settler (ADR 007 §1.1).
1390
+ *
1391
+ * Settlers run in registration order; one that throws is reported and the
1392
+ * pass goes on. Returns the unregister function.
1393
+ */
1394
+ var settlers = /* @__PURE__ */ new Set();
1395
+ function registerSettle(fn) {
1396
+ settlers.add(fn);
1397
+ return () => {
1398
+ settlers.delete(fn);
1399
+ };
1400
+ }
1367
1401
  function runBarrier() {
1368
1402
  booked = false;
1369
1403
  const hosts = [...intents];
1370
1404
  intents.clear();
1371
1405
  beforeMeasure();
1406
+ for (const settle of [...settlers]) try {
1407
+ settle();
1408
+ } catch (e) {
1409
+ queueMicrotask(() => {
1410
+ throw e;
1411
+ });
1412
+ }
1372
1413
  const passes = [];
1373
1414
  for (const host of hosts) {
1374
1415
  const pass = host.measurePass();
@@ -2075,6 +2116,13 @@ function releaseHold(ve, el, held) {
2075
2116
  ve.scheduleRender();
2076
2117
  }
2077
2118
  /** what one cue is doing right now */
2119
+ var warnedPrivateFields = false;
2120
+ /** @maxFrameStep reads motion-dom's private animation fields; say once when they are gone */
2121
+ function warnPrivateFieldsMoved() {
2122
+ if (warnedPrivateFields) return;
2123
+ warnedPrivateFields = true;
2124
+ console.warn("@cardstack/choreo: motion-dom no longer exposes the animation fields @maxFrameStep reads (_animation, startTime, holdTime); a long frame will skip tweens ahead instead of slowing them");
2125
+ }
2078
2126
  var ChoreoRun = class ChoreoRun {
2079
2127
  cues;
2080
2128
  velocities = /* @__PURE__ */ new Map();
@@ -2106,6 +2154,17 @@ var ChoreoRun = class ChoreoRun {
2106
2154
  ended = false;
2107
2155
  resolveFinished;
2108
2156
  ticking = false;
2157
+ /**
2158
+ * The next tick is the first since the clock started (or resumed): it
2159
+ * paints the run where it stands and advances nothing. The frame loop's
2160
+ * delta on that tick is the time since ITS last frame, up to 40 ms, so a
2161
+ * run started by a render pass would otherwise open with that whole step
2162
+ * on its own clock: every cue the clock starts, gates, or drives frame by
2163
+ * frame (a camera, a wire, a later cue's start) would begin that far in.
2164
+ */
2165
+ freshClock = false;
2166
+ /** the frame timestamp holdBack saw last, while a maxFrameStep applies */
2167
+ lastStamp;
2109
2168
  autoTimer;
2110
2169
  constructor(compiled, options) {
2111
2170
  this.options = options;
@@ -2368,20 +2427,51 @@ var ChoreoRun = class ChoreoRun {
2368
2427
  startTicking() {
2369
2428
  if (this.ticking || !this.playing || this.cancelled || this.ended) return;
2370
2429
  this.ticking = true;
2430
+ this.freshClock = true;
2431
+ this.lastStamp = void 0;
2432
+ if (this.options.maxFrameStep) frame.read(this.holdBack, true);
2371
2433
  frame.update(this.tick, true);
2372
2434
  }
2373
2435
  stopTicking() {
2374
2436
  if (this.ticking) {
2375
2437
  this.ticking = false;
2376
2438
  cancelFrame(this.tick);
2439
+ cancelFrame(this.holdBack);
2377
2440
  }
2378
2441
  }
2442
+ /**
2443
+ * maxFrameStep for the animations themselves. The run's own clock is
2444
+ * capped in tick; the tweens and springs it started run on motion-dom's
2445
+ * frame clock, which takes the real time since their start, so a long
2446
+ * frame would still skip that much of them. Before they update, each one
2447
+ * driven on the main thread has its start moved on by the time past the
2448
+ * cap: it resumes from where the last frame left it, plus one step.
2449
+ * Animations on the compositor (WAAPI) kept playing through the long
2450
+ * frame and are left alone.
2451
+ */
2452
+ holdBack = (data) => {
2453
+ const step = this.options.maxFrameStep;
2454
+ const last = this.lastStamp;
2455
+ this.lastStamp = data.timestamp;
2456
+ if (!step) return;
2457
+ for (const t of this.tracks) for (const c of t.controls ?? []) {
2458
+ const inner = c._animation;
2459
+ if (last !== void 0 && (!inner || !("animation" in inner) && !("startTime" in inner && "holdTime" in inner))) warnPrivateFieldsMoved();
2460
+ if (!inner || "animation" in inner || typeof inner.startTime !== "number" || inner.holdTime !== null) continue;
2461
+ if (last === void 0) {
2462
+ if (data.timestamp - inner.startTime > step) inner.startTime = data.timestamp;
2463
+ } else if (data.timestamp - last > step) inner.startTime += data.timestamp - last - step;
2464
+ }
2465
+ };
2379
2466
  tick = (data) => {
2380
2467
  if (!this.playing || this.cancelled || this.ended) {
2381
2468
  this.stopTicking();
2382
2469
  return;
2383
2470
  }
2384
- const next = this.master + data.delta * this.rate;
2471
+ const step = this.options.maxFrameStep;
2472
+ const delta = this.freshClock ? 0 : step ? Math.min(data.delta, step) : data.delta;
2473
+ this.freshClock = false;
2474
+ const next = this.master + delta * this.rate;
2385
2475
  const gate = this.gates.find((g) => !g.opened && g.at >= this.master && g.at <= next);
2386
2476
  if (gate) {
2387
2477
  this.master = gate.at;
@@ -3787,4 +3877,4 @@ function execute(compiled, options) {
3787
3877
  return new ChoreoRun(compiled, options);
3788
3878
  }
3789
3879
  //#endregion
3790
- export { measure as C, boundsOf as S, resetGestures as _, closestChoreo as a, registerBeacon as b, leave as c, setPassScheduler as d, compile as f, GESTURE as g, sameScore as h, choreoHostById as i, resetBarrier as l, fadeOn as m, execute as n, setChoreoHost as o, continuation as p, choreoHostAt as r, join as s, activeRuns as t, setBeforeMeasure as u, trackGestures as v, resetBeacons as x, measureBeacons as y };
3880
+ export { boundsOf as C, resetBeacons as S, GESTURE as _, closestChoreo as a, measureBeacons as b, leave as c, setBeforeMeasure as d, setPassScheduler as f, sameScore as g, fadeOn as h, choreoHostById as i, registerSettle as l, continuation as m, execute as n, setChoreoHost as o, compile as p, choreoHostAt as r, join as s, activeRuns as t, resetBarrier as u, resetGestures as v, measure as w, registerBeacon as x, trackGestures as y };
@@ -185,7 +185,7 @@ function skillIds(method, raw) {
185
185
  var emscripten_module_default = "" + (globalThis.__boxelAssetsURL || "/") + "assets/emscripten-module-NWak2PoB.wasm";
186
186
  //#endregion
187
187
  //#region app/lib/realm-runner/worker.ts?worker&url
188
- var worker_default = "" + (globalThis.__boxelAssetsURL || "/") + "assets/worker-DHBEBihX.js";
188
+ var worker_default = "" + (globalThis.__boxelAssetsURL || "/") + "assets/worker-9ph9_Lpv.js";
189
189
  //#endregion
190
190
  //#region app/lib/realm-runner/runner.ts
191
191
  var BOOT_TIMEOUT_MS = 6e4;
@@ -1,7 +1,7 @@
1
1
  import { s as __toESM } from "./chunk-Rp0pCe6z.js";
2
2
  import { Mn as APP_BOXEL_ACTIVE_LLM, Pr as testRealmURL, Qn as APP_BOXEL_ROOM_SKILLS_EVENT_TYPE, cr as CAPTURE_SOURCE_URL_PREFIX, ho as SupportedMimeType, lr as DEFAULT_FALLBACK_MODELS } from "./runtime-common-CGizQV0A.js";
3
3
  import { M as waitUntil, T as settled } from "./dist-BOAdzfkP.js";
4
- import { r as runRealmCode, t as RunRealmCodeTool } from "./run-realm-code-BxktQf6R.js";
4
+ import { r as runRealmCode, t as RunRealmCodeTool } from "./run-realm-code-C8N7DtN-.js";
5
5
  import { t as require_qunit } from "./qunit-C-Foo4Nd.js";
6
6
  import { Ct as createJWT, F as setupLocalIndexing, L as setupRealmCacheTeardown, P as setupIntegrationTestRealm, R as setupRealmServerEndpoints, Z as withCachedRealmSetup, bt as setCatalogRealmURL, lt as setupRenderingTest, t as setupMockMatrix, wt as testRealmSecretSeed, yt as resetCatalogRealmURL } from "./mock-matrix-rxYRI9xw.js";
7
7
  import { r as getService } from "./dist-CPfIHBla.js";
@@ -1,6 +1,6 @@
1
1
  import { s as __toESM } from "./chunk-Rp0pCe6z.js";
2
2
  import { r as basicMappings } from "./ai-CqDVSGbV.js";
3
- import { t as HostToolClasses } from "./tools-DU8Rc15s.js";
3
+ import { t as HostToolClasses } from "./tools-UJfD-_al.js";
4
4
  import { t as require_qunit } from "./qunit-C-Foo4Nd.js";
5
5
  import { lt as setupRenderingTest } from "./mock-matrix-rxYRI9xw.js";
6
6
  import { r as getService } from "./dist-CPfIHBla.js";
@@ -7,7 +7,7 @@ import "./component-BJO47HTh.js";
7
7
  import { t as Component } from "./dist-CkA1rgqO.js";
8
8
  import "./template-factory-ds9s0u8l.js";
9
9
  import "./panel-BLDiX3k7.js";
10
- import { t as OperatorModeContainer } from "./container-DvvqmNpg.js";
10
+ import { t as OperatorModeContainer } from "./container-BnJjIM6J.js";
11
11
  import { M as waitUntil, T as settled, d as click, l as triggerEvent, o as waitFor } from "./dist-BOAdzfkP.js";
12
12
  import { t as require_qunit } from "./qunit-C-Foo4Nd.js";
13
13
  import { D as realmConfigCardJSON, F as setupLocalIndexing, I as setupOnSave, L as setupRealmCacheTeardown, M as setupCardLogs, P as setupIntegrationTestRealm, Z as withCachedRealmSetup, lt as setupRenderingTest, ot as setupOperatorModeStateCleanup, t as setupMockMatrix } from "./mock-matrix-rxYRI9xw.js";
@@ -3,7 +3,7 @@ import { r as initializeDeferredDecorator, t as decorateFieldV2 } from "./runtim
3
3
  import { Da as maybeHandleScopedCSSRequest, Ia as VirtualNetwork, Io as identifyCard, Ls as Loader, Pr as testRealmURL, Va as fetcher, gs as validateSearchablePaths, ms as getFieldDefinitions, ps as getFieldDef, u as internalKeyFor } from "./runtime-common-CGizQV0A.js";
4
4
  import { D as baseRealm } from "./constants-CqKWhRfY.js";
5
5
  import { t as config } from "./environment-DIUJgBKt.js";
6
- import { t as shimExternals } from "./externals-6ZWftYIb.js";
6
+ import { t as shimExternals } from "./externals-BWjhmCD4.js";
7
7
  import { t as require_qunit } from "./qunit-C-Foo4Nd.js";
8
8
  import "./mock-matrix-rxYRI9xw.js";
9
9
  //#region tests/unit/searchable-option-test.ts
@@ -9,7 +9,7 @@ import { n as Submodes } from "./submode-switcher-B_1LiM5V.js";
9
9
  import "./component-BJO47HTh.js";
10
10
  import { t as Component } from "./dist-CkA1rgqO.js";
11
11
  import "./template-factory-ds9s0u8l.js";
12
- import { t as OperatorModeContainer } from "./container-DvvqmNpg.js";
12
+ import { t as OperatorModeContainer } from "./container-BnJjIM6J.js";
13
13
  import { M as waitUntil, T as settled, d as click, l as triggerEvent, o as waitFor, s as fillIn } from "./dist-BOAdzfkP.js";
14
14
  import { t as require_qunit } from "./qunit-C-Foo4Nd.js";
15
15
  import { D as realmConfigCardJSON, F as setupLocalIndexing, I as setupOnSave, L as setupRealmCacheTeardown, M as setupCardLogs, P as setupIntegrationTestRealm, Tt as percySnapshot, Z as withCachedRealmSetup, lt as setupRenderingTest, ot as setupOperatorModeStateCleanup, t as setupMockMatrix } from "./mock-matrix-rxYRI9xw.js";
@@ -8,7 +8,7 @@ import { H as templateFactory } from "./index-DaCZcoCY-CgzbilMy.js";
8
8
  import "./component-BJO47HTh.js";
9
9
  import { t as Component } from "./dist-CkA1rgqO.js";
10
10
  import "./template-factory-ds9s0u8l.js";
11
- import { t as OperatorModeContainer } from "./container-DvvqmNpg.js";
11
+ import { t as OperatorModeContainer } from "./container-BnJjIM6J.js";
12
12
  import { o as skillsIndexId } from "./utils-BYQCdsBe.js";
13
13
  import { M as waitUntil, T as settled, d as click, o as waitFor, s as fillIn } from "./dist-BOAdzfkP.js";
14
14
  import { t as require_qunit } from "./qunit-C-Foo4Nd.js";
@@ -1,5 +1,5 @@
1
- import { a as closestChoreo, i as choreoHostById, r as choreoHostAt } from "./run-BMyvn_UL.js";
2
- import { t as Choreo } from "./choreo-CJfBb_EY.js";
1
+ import { a as closestChoreo, i as choreoHostById, l as registerSettle, r as choreoHostAt, x as registerBeacon } from "./run-D4n4LPcK.js";
2
+ import { t as Choreo } from "./choreo-C2cpCfhA.js";
3
3
  import { E as at, T as after, w as toMs, y as StepComponent } from "./steps-D0xobKkB.js";
4
- import { a as easeInAndOut, c as createArming, i as easeIn, n as toLocal, o as easeOut, r as toPage, s as beacon, t as appliedCamera } from "./src-Cf2wv-Le.js";
5
- export { Choreo, StepComponent, after, appliedCamera, at, beacon, choreoHostAt, choreoHostById, closestChoreo, createArming, easeIn, easeInAndOut, easeOut, toLocal, toMs, toPage };
4
+ import { a as easeInAndOut, c as createArming, i as easeIn, n as toLocal, o as easeOut, r as toPage, s as beacon, t as appliedCamera } from "./src-BoTgwqUA.js";
5
+ export { Choreo, StepComponent, after, appliedCamera, at, beacon, choreoHostAt, choreoHostById, closestChoreo, createArming, easeIn, easeInAndOut, easeOut, registerBeacon, registerSettle, toLocal, toMs, toPage };
@@ -3,8 +3,8 @@ import { r as initializeDeferredDecorator, t as decorateFieldV2 } from "./runtim
3
3
  import { et as tracked } from "./cache-DtDz7X5V-Wn8jRDfL.js";
4
4
  import "./tracking-CNiq91Pk.js";
5
5
  import { r as modifier } from "./dist-nMt-N14r.js";
6
- import { b as registerBeacon } from "./run-BMyvn_UL.js";
7
- import "./choreo-CJfBb_EY.js";
6
+ import { x as registerBeacon } from "./run-D4n4LPcK.js";
7
+ import "./choreo-C2cpCfhA.js";
8
8
  import "./steps-D0xobKkB.js";
9
9
  //#region ../choreo/src/arming.ts
10
10
  /**
@@ -11,7 +11,7 @@ import { n as tracked, t as cached } from "./tracking-800VJb8b.js";
11
11
  import "./template-factory-ds9s0u8l.js";
12
12
  import { n as getCardCollection } from "./card-collection-BRIq3G88.js";
13
13
  import { n as getCard } from "./card-resource-SMiI6mQe.js";
14
- import { t as OperatorModeContainer } from "./container-DvvqmNpg.js";
14
+ import { t as OperatorModeContainer } from "./container-BnJjIM6J.js";
15
15
  import { M as waitUntil, T as settled, a as find, d as click, o as waitFor, r as typeIn } from "./dist-BOAdzfkP.js";
16
16
  import { t as require_qunit } from "./qunit-C-Foo4Nd.js";
17
17
  import { $ as withSavesHeldOpen, F as setupLocalIndexing, I as setupOnSave, L as setupRealmCacheTeardown, M as setupCardLogs, P as setupIntegrationTestRealm, Z as withCachedRealmSetup, _t as registerDefaultRoutes, et as withSlowSave, lt as setupRenderingTest, ot as setupOperatorModeStateCleanup, t as setupMockMatrix, vt as registerRealmServerRoute } from "./mock-matrix-rxYRI9xw.js";
@@ -1,2 +1,2 @@
1
- import { a as seekTo, i as orphanCount, n as live, o as setupChoreo, r as liveAll, s as strandedTransforms, t as advanceGate } from "./test-support-C6N_2X-l.js";
1
+ import { a as seekTo, i as orphanCount, n as live, o as setupChoreo, r as liveAll, s as strandedTransforms, t as advanceGate } from "./test-support-VX6ukQNR.js";
2
2
  export { advanceGate, live, liveAll, orphanCount, seekTo, setupChoreo, strandedTransforms };
@@ -1,7 +1,7 @@
1
1
  import "./chunk-Rp0pCe6z.js";
2
2
  import { ft as frame } from "./layout-CoHTwtB3.js";
3
3
  import { p as visualElementStore } from "./node-BcaArAHc.js";
4
- import { _ as resetGestures, l as resetBarrier, t as activeRuns, x as resetBeacons } from "./run-BMyvn_UL.js";
4
+ import { S as resetBeacons, t as activeRuns, u as resetBarrier, v as resetGestures } from "./run-D4n4LPcK.js";
5
5
  import { i as registerMotionReset, l as settled, o as setupMotion, t as animationsSettled } from "./test-support-CqqONO2I.js";
6
6
  //#region ../choreo/src/test-support/index.ts
7
7
  /**