@cardstack/boxel-cli 0.12.0 → 0.13.0-unstable.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 (178) hide show
  1. package/bundled-realms/pretui/components/chip.gts +47 -2
  2. package/bundled-realms/pretui/components/chip.md +5 -2
  3. package/bundled-realms/pretui/components/chip.usage.gts +37 -2
  4. package/bundled-realms/pretui/components/status-chip.gts +12 -2
  5. package/bundled-realms/pretui/components/status-chip.md +2 -1
  6. package/bundled-realms/pretui/components/status-chip.usage.gts +2 -0
  7. package/bundled-test-harness/assets/{ai-module-creation-test-B9lSKNq1.js → ai-module-creation-test-Czsh1MyP.js} +1 -1
  8. package/bundled-test-harness/assets/{aibot-message-LXV0UlzI.js → aibot-message-Dg5nzE1b.js} +1 -1
  9. package/bundled-test-harness/assets/{app-BIQcKrVT.js → app-hXF_bqWy.js} +6 -6
  10. package/bundled-test-harness/assets/{assistant-transcript-test-CG_2-bog.js → assistant-transcript-test-kILRv_pf.js} +1 -1
  11. package/bundled-test-harness/assets/{binary-upload-dedupe-test-Q7e6bzl1.js → binary-upload-dedupe-test-Bt5RqtEk.js} +1 -1
  12. package/bundled-test-harness/assets/{bundled-base-DldokUSJ.js → bundled-base-DtxlKFXx.js} +3 -3
  13. package/bundled-test-harness/assets/{bundled-base-modules-test-VAlRx4t3.js → bundled-base-modules-test-D1fXHMTE.js} +1 -1
  14. package/bundled-test-harness/assets/{can-invoke-test-BGmUJHxo.js → can-invoke-test-DqBuecdl.js} +1 -1
  15. package/bundled-test-harness/assets/{card-chooser-paging-test-CzooKL4I.js → card-chooser-paging-test-Cf8r032c.js} +1 -1
  16. package/bundled-test-harness/assets/{card-chooser-test-C3fjaDYi.js → card-chooser-test-q_qnUKxi.js} +1 -1
  17. package/bundled-test-harness/assets/{card-def-field-def-relationships-test-yqv8ir8Y.js → card-def-field-def-relationships-test-C5xkWMZi.js} +1 -1
  18. package/bundled-test-harness/assets/{card-delete-test-BtjqrqKO.js → card-delete-test-KB4aJuv_.js} +1 -1
  19. package/bundled-test-harness/assets/{chip-D6Xffhjx.css → chip-B2Ns53A6.css} +35 -9
  20. package/bundled-test-harness/assets/{chip-BydgljDL.js → chip-DVJE_YDh.js} +11 -3
  21. package/bundled-test-harness/assets/{choreo-D7dLCdGB.js → choreo-CIrop3HM.js} +16 -35
  22. package/bundled-test-harness/assets/choreo-Ca2Y2sF3.js +2 -0
  23. package/bundled-test-harness/assets/{choreo-feature-reel-test--x-L3ZKc.js → choreo-feature-reel-test-CJHms7Sf.js} +2 -2
  24. package/bundled-test-harness/assets/{choreo-gallery-ZO9vXOxd.js → choreo-gallery-DZm1KZ20.js} +3 -3
  25. package/bundled-test-harness/assets/{choreo-gallery-build-order-test-DG5UTyc9.js → choreo-gallery-build-order-test-QKyMWELN.js} +4 -4
  26. package/bundled-test-harness/assets/{choreo-gallery-compositor-test-DJP80SNj.js → choreo-gallery-compositor-test-BQDptxfE.js} +1 -1
  27. package/bundled-test-harness/assets/{choreo-gallery-cover-test-CHYz7sM4.js → choreo-gallery-cover-test-Do-HYF96.js} +1 -1
  28. package/bundled-test-harness/assets/{choreo-gallery-crossing-stage-test-BuinlINr.js → choreo-gallery-crossing-stage-test-yJVXghRc.js} +10 -10
  29. package/bundled-test-harness/assets/{choreo-gallery-demos-alive-test-BjNCGfH9.js → choreo-gallery-demos-alive-test-BCeaaZye.js} +1 -1
  30. package/bundled-test-harness/assets/{choreo-gallery-drift-test-BJ17f3yv.js → choreo-gallery-drift-test-CJ1yq6R0.js} +1 -1
  31. package/bundled-test-harness/assets/{choreo-gallery-escort-test-Dadih8-S.js → choreo-gallery-escort-test-DypqSgvs.js} +1 -1
  32. package/bundled-test-harness/assets/{choreo-gallery-films-test-CCXty_WI.js → choreo-gallery-films-test-ClMy5M_p.js} +2 -2
  33. package/bundled-test-harness/assets/{choreo-gallery-filter-test-BozCoT_M.js → choreo-gallery-filter-test-CzOmgqgl.js} +1 -1
  34. package/bundled-test-harness/assets/{choreo-gallery-fold-test-Kez2P3_Y.js → choreo-gallery-fold-test-qNnH6wtC.js} +2 -2
  35. package/bundled-test-harness/assets/{choreo-gallery-guide-pages-test-BV5oxrYA.js → choreo-gallery-guide-pages-test-BtKWMkTv.js} +1 -1
  36. package/bundled-test-harness/assets/{choreo-gallery-guides-test-DwYBDgKi.js → choreo-gallery-guides-test-CXMsuDYi.js} +4 -3
  37. package/bundled-test-harness/assets/{choreo-gallery-hang-test-B-5u7cGJ.js → choreo-gallery-hang-test-BD4JQ04e.js} +2 -2
  38. package/bundled-test-harness/assets/{choreo-gallery-highlight-test-BZ5Lg8V6.js → choreo-gallery-highlight-test-BK280K2W.js} +2 -2
  39. package/bundled-test-harness/assets/{choreo-gallery-inline-edit-test-wSlSI-VM.js → choreo-gallery-inline-edit-test-DAgUcaaw.js} +2 -2
  40. package/bundled-test-harness/assets/{choreo-gallery-interruption-test-DBpCEiro.js → choreo-gallery-interruption-test-DY5KUilC.js} +4 -4
  41. package/bundled-test-harness/assets/{choreo-gallery-lone-stack-test-aMLrHsns.js → choreo-gallery-lone-stack-test-Dxd_Nb0-.js} +4 -4
  42. package/bundled-test-harness/assets/{choreo-gallery-navigation-test-B8b-2ZTz.js → choreo-gallery-navigation-test-DWJq12PN.js} +1 -1
  43. package/bundled-test-harness/assets/{choreo-gallery-playhead-transport-test-B95CYBh7.js → choreo-gallery-playhead-transport-test-DlQ6yTKW.js} +1 -1
  44. package/bundled-test-harness/assets/{choreo-gallery-poplayout-subtree-test-jZAAICV6.js → choreo-gallery-poplayout-subtree-test-D59W8gYt.js} +5 -5
  45. package/bundled-test-harness/assets/{choreo-gallery-presence-modes-test-BawIKB-a.js → choreo-gallery-presence-modes-test-BAU-dggP.js} +2 -2
  46. package/bundled-test-harness/assets/{choreo-gallery-presentation-test-CYIb-8ML.js → choreo-gallery-presentation-test-BqGsinE0.js} +2 -2
  47. package/bundled-test-harness/assets/{choreo-gallery-reduced-motion-test-C6Vi1WYr.js → choreo-gallery-reduced-motion-test-By0rb2Ai.js} +4 -3
  48. package/bundled-test-harness/assets/{choreo-gallery-sheet-standalone-test-_e4T5KDI.js → choreo-gallery-sheet-standalone-test-Cfw-4ULF.js} +2 -2
  49. package/bundled-test-harness/assets/{choreo-gallery-sheet-test-Cv51Te3G.js → choreo-gallery-sheet-test-dm53Pdzb.js} +2 -2
  50. package/bundled-test-harness/assets/{choreo-gallery-site-test-Cm35kHu_.js → choreo-gallery-site-test-SAlqtZgL.js} +3 -2
  51. package/bundled-test-harness/assets/{choreo-gallery-stage-Bp6QVqlI.js → choreo-gallery-stage-CU8LvQqX.js} +2 -2
  52. package/bundled-test-harness/assets/{choreo-gallery-stage-keyboard-test-DDX2cuMa.js → choreo-gallery-stage-keyboard-test-DQ4v5qA4.js} +2 -2
  53. package/bundled-test-harness/assets/{choreo-gallery-stages-test-Dfa_33_4.js → choreo-gallery-stages-test-CRvaS6w6.js} +2 -2
  54. package/bundled-test-harness/assets/{choreo-gallery-subdivision-test-CgR3WdcT.js → choreo-gallery-subdivision-test-CtOm-U35.js} +3 -3
  55. package/bundled-test-harness/assets/{choreo-gallery-table-plan-test-DF-cE3J9.js → choreo-gallery-table-plan-test-_0koIm2u.js} +1 -1
  56. package/bundled-test-harness/assets/{choreo-gallery-theater-test-BuIyb2ke.js → choreo-gallery-theater-test-yedwQVyP.js} +4 -4
  57. package/bundled-test-harness/assets/{choreo-gallery-tuning-test-BdZ45YBK.js → choreo-gallery-tuning-test-CmMtfJ5a.js} +1 -1
  58. package/bundled-test-harness/assets/{choreo-gallery-widget-room-test-HcPX75Dg.js → choreo-gallery-widget-room-test-jnYOas5x.js} +2 -2
  59. package/bundled-test-harness/assets/{choreo-gallery-wires-test-BhFCIjB1.js → choreo-gallery-wires-test-CSyqjVnm.js} +2 -2
  60. package/bundled-test-harness/assets/clip--wioup_3.js +2 -0
  61. package/bundled-test-harness/assets/{clip-BmBVqUyU.js → clip-Cm32sLyn.js} +3 -3
  62. package/bundled-test-harness/assets/{codeblocks-test-DbZYlmG_.js → codeblocks-test-DLVRpBAl.js} +1 -1
  63. package/bundled-test-harness/assets/{compaction-test-D1G3KCSe.js → compaction-test-zX01t57K.js} +1 -1
  64. package/bundled-test-harness/assets/{container-XSX5809v.js → container-CXZoEvul.js} +10 -9
  65. package/bundled-test-harness/assets/{create-listing-modal-test--oGT9P_F.js → create-listing-modal-test-DPgVovcL.js} +1 -1
  66. package/bundled-test-harness/assets/{debug-message-test-C8UZUtCt.js → debug-message-test-CWl-ido2.js} +1 -1
  67. package/bundled-test-harness/assets/{externals--YMzwHwd.js → externals-Ddhtv753.js} +37 -37
  68. package/bundled-test-harness/assets/{fallback-banner-live-delete-test-DPK_coJY.js → fallback-banner-live-delete-test-CFbMEFHo.js} +1 -1
  69. package/bundled-test-harness/assets/{fallback-banner-test-C2wi6Lu6.js → fallback-banner-test-3O0imkxJ.js} +1 -1
  70. package/bundled-test-harness/assets/{fallback-models-test-SqdXWB1Z.js → fallback-models-test-hyQfQLuM.js} +1 -1
  71. package/bundled-test-harness/assets/{file-attachment-test-DT0HK6yS.js → file-attachment-test-C63Ttyaj.js} +1 -1
  72. package/bundled-test-harness/assets/{film-Zt2YoVoG.js → film-9V69qBWw.js} +6 -6
  73. package/bundled-test-harness/assets/{film-77OfTGL7.js → film-Z87hSVo_.js} +8 -8
  74. package/bundled-test-harness/assets/film-h1N8vUjG.js +2 -0
  75. package/bundled-test-harness/assets/{formatted-aibot-message-test-B6i0k9wW.js → formatted-aibot-message-test-DH3WPvU1.js} +1 -1
  76. package/bundled-test-harness/assets/{general-test-C0Xb2Idr.js → general-test-wrSeNkrm.js} +1 -1
  77. package/bundled-test-harness/assets/{glimmer-motion-and-choreo-in-cards-test-DFlkZtek.js → glimmer-motion-and-choreo-in-cards-test-Byg3fSOY.js} +32 -32
  78. package/bundled-test-harness/assets/{glimmer-motion-and-choreo-test-B2ustNm9.js → glimmer-motion-and-choreo-test-BM7uX8k4.js} +10 -10
  79. package/bundled-test-harness/assets/group-Cgg5RLul.js +2 -0
  80. package/bundled-test-harness/assets/{group-BNxp6qON.js → group-DL-b_Hzj.js} +2 -2
  81. package/bundled-test-harness/assets/{index-query-engine-test-BKOqgBMv.js → index-query-engine-test-DvfKgn6s.js} +1 -1
  82. package/bundled-test-harness/assets/{instance-filter-matcher-test-CNIzKZvP.js → instance-filter-matcher-test-KqGi-K79.js} +1 -1
  83. package/bundled-test-harness/assets/item-Bu9hhPf2.js +2 -0
  84. package/bundled-test-harness/assets/{item-BDyVqxdA.js → item-CBEoTOyj.js} +2 -2
  85. package/bundled-test-harness/assets/{main-BiI-FhMc.js → main-CoUo04VF.js} +1 -1
  86. package/bundled-test-harness/assets/{markdown-preview-BItI_AEl.js → markdown-preview-D_QssEOi.js} +1 -1
  87. package/bundled-test-harness/assets/{markdown-preview-test-Bntyikh1.js → markdown-preview-test-nljzB8o_.js} +1 -1
  88. package/bundled-test-harness/assets/memory-B73-H_Rp.js +223 -0
  89. package/bundled-test-harness/assets/{model-cost-tier-test-Hu2-LpEw.js → model-cost-tier-test-B5ByLtAP.js} +1 -1
  90. package/bundled-test-harness/assets/{motion-DeM7UCtd.js → motion-BiMvMS08.js} +1 -1
  91. package/bundled-test-harness/assets/{node-BAM535H5.js → node-BWOLCOMI.js} +95 -6
  92. package/bundled-test-harness/assets/{operation-lowering-test-CG1gatuH.js → operation-lowering-test-Bz81V0Gt.js} +1 -1
  93. package/bundled-test-harness/assets/{operator-mode-card-chooser-test-Bo5ZnF_x.js → operator-mode-card-chooser-test-DNOnplV8.js} +1 -1
  94. package/bundled-test-harness/assets/{operator-mode-links-test-DVx_LQOU.js → operator-mode-links-test-BeXsOYMU.js} +1 -1
  95. package/bundled-test-harness/assets/{operator-mode-test-CCbFrYgN.js → operator-mode-test-jdeCXqhV.js} +1 -1
  96. package/bundled-test-harness/assets/{operator-mode-ui-test-Dm2Bf6Vn.js → operator-mode-ui-test-DdiFZylM.js} +1 -1
  97. package/bundled-test-harness/assets/{overlay-menu-items-test-Bk5AidFD.js → overlay-menu-items-test-C_Q4sJlC.js} +1 -1
  98. package/bundled-test-harness/assets/{overlays-CY7IgeOl.js → overlays-DZXjQykn.js} +3 -3
  99. package/bundled-test-harness/assets/{overlays-DhVKmSP-.js → overlays-hrAO43jG.js} +1 -1
  100. package/bundled-test-harness/assets/{panel-t9QyU1lY.js → panel-CXmB6GMs.js} +15 -75
  101. package/bundled-test-harness/assets/{panel-CUYJ8oHS.css → panel-D2zkZoIr.css} +39 -31
  102. package/bundled-test-harness/assets/{past-sessions-test-Dq-Y9T6W.js → past-sessions-test-Bm1UiLD0.js} +1 -1
  103. package/bundled-test-harness/assets/{permission-checking-realm-test-CuImx8ie.js → permission-checking-realm-test-Jq7R-yRT.js} +1 -1
  104. package/bundled-test-harness/assets/pill-menu-Ctn3JNqG.js +154 -0
  105. package/bundled-test-harness/assets/{pill-menu-test-kpWBGrX5.js → pill-menu-test-Cf2xO2w6.js} +1 -1
  106. package/bundled-test-harness/assets/plate-CnatwP3n.js +2 -0
  107. package/bundled-test-harness/assets/{plate-B4Lz2Ulo.js → plate-Cu5EnXQZ.js} +3 -3
  108. package/bundled-test-harness/assets/player-Bwn5tEsh.js +2 -0
  109. package/bundled-test-harness/assets/{player-B965XH82.js → player-CVdsx7Ng.js} +3 -3
  110. package/bundled-test-harness/assets/presence-BKkR2au7.js +553 -0
  111. package/bundled-test-harness/assets/presence-CcEXVges.js +2 -0
  112. package/bundled-test-harness/assets/{quick-look-test-VW5_W7dm.js → quick-look-test-BrnxRRsq.js} +1 -1
  113. package/bundled-test-harness/assets/{realm-api-keys-sg--fohv.js → realm-api-keys-CHPnfcko.js} +1 -1
  114. package/bundled-test-harness/assets/realm-api-keys-GLBmvu4U.js +2 -0
  115. package/bundled-test-harness/assets/{realm-api-keys-test-Cy7qSoAd.js → realm-api-keys-test-CHBGOFcx.js} +1 -1
  116. package/bundled-test-harness/assets/{realm-config-DvpP1xf-.js → realm-config-C7c3B2er.js} +1 -1
  117. package/bundled-test-harness/assets/{realm-config-policy-standing-test-DJk-ftgH.js → realm-config-policy-standing-test-C8aNeb6_.js} +1 -1
  118. package/bundled-test-harness/assets/{realm-config-routing-rule-edit-test-CTPiJrAL.js → realm-config-routing-rule-edit-test-Dmnw-VQz.js} +1 -1
  119. package/bundled-test-harness/assets/{realm-config-settings-test-CUa-PjMC.js → realm-config-settings-test-C6V0Mx35.js} +1 -1
  120. package/bundled-test-harness/assets/{reasoning-test-CeeGGwvf.js → reasoning-test-Dn0Xb42V.js} +1 -1
  121. package/bundled-test-harness/assets/{rendered-markdown-B8TH0yN4.js → rendered-markdown-DPEXS7MQ.js} +1 -1
  122. package/bundled-test-harness/assets/{rendered-markdown-test-CBRsIBqW.js → rendered-markdown-test-DxbJ1nFX.js} +1 -1
  123. package/bundled-test-harness/assets/{room-message-test-BTxZ_W74.js → room-message-test-BBE8UIPX.js} +1 -1
  124. package/bundled-test-harness/assets/{run-BSEzn_PH.js → run-CfyzhBXb.js} +2 -2
  125. package/bundled-test-harness/assets/{scrolling-test-C7R0UASi.js → scrolling-test-sLBz7Gxv.js} +2 -2
  126. package/bundled-test-harness/assets/{searchable-option-test-BiOqxIIs.js → searchable-option-test-Ix9_H5QV.js} +1 -1
  127. package/bundled-test-harness/assets/{sending-test-DOXQ0Tvx.js → sending-test-_Pqzq1bN.js} +1 -1
  128. package/bundled-test-harness/assets/{skills-test-BjCYI4Z_.js → skills-test-DUHRQGiC.js} +1 -1
  129. package/bundled-test-harness/assets/src-CEw1V0fi.js +11 -0
  130. package/bundled-test-harness/assets/{src-Bhefkhqj.js → src-CbBcj3xm.js} +11 -5
  131. package/bundled-test-harness/assets/{src-BDDYD1rs.js → src-D8bpj2tb.js} +2 -2
  132. package/bundled-test-harness/assets/{src-DySBAkac.js → src-Df4Vutrk.js} +3 -3
  133. package/bundled-test-harness/assets/{stick-to-bottom-resize-test-hN0AjdXP.js → stick-to-bottom-resize-test-Du4B3w2x.js} +4 -4
  134. package/bundled-test-harness/assets/{store-test-BD99H9dQ.js → store-test-9C-s0-H6.js} +1 -1
  135. package/bundled-test-harness/assets/{test-support-BcjhIHQa.js → test-support-BOFeeYuE.js} +25 -2
  136. package/bundled-test-harness/assets/test-support-CXESl4Wf.js +3 -0
  137. package/bundled-test-harness/assets/test-support-CgWmpebE.js +3 -0
  138. package/bundled-test-harness/assets/{test-support-Dl6FChlV.js → test-support-xTaMuaOA.js} +4 -27
  139. package/bundled-test-harness/assets/{tests-BqLDuQog.js → tests-CVpu0hZj.js} +437 -437
  140. package/bundled-test-harness/assets/{text-input-validator-test-CW6Ay7bo.js → text-input-validator-test-CcVh-MFa.js} +1 -1
  141. package/bundled-test-harness/assets/{titles-CFt3dEls.js → titles-BUbpcMoe.js} +3 -3
  142. package/bundled-test-harness/assets/titles-D80DwOQU.js +2 -0
  143. package/bundled-test-harness/assets/{to-device-streaming-test-DRxNCi7Z.js → to-device-streaming-test-RFHD62PN.js} +1 -1
  144. package/bundled-test-harness/assets/{token-usage-test-Ck9rB3Ie.js → token-usage-test-B2iJC-UX.js} +1 -1
  145. package/bundled-test-harness/assets/{tools-test-B3zniq10.js → tools-test-BZOWfXML.js} +1 -1
  146. package/bundled-test-harness/assets/{turn-settling-test-C0X6hL7x.js → turn-settling-test-Cvu2rvzM.js} +1 -1
  147. package/bundled-test-harness/assets/{turn-summary-0XOoAv3j.js → turn-summary-CAZVdcBd.js} +1 -1
  148. package/bundled-test-harness/index.html +26 -25
  149. package/bundled-test-harness/tests/index.html +26 -25
  150. package/bundled-types/choreo/choreo.gts +21 -42
  151. package/bundled-types/choreo/test-support/index.ts +9 -30
  152. package/bundled-types/glimmer-motion/index.ts +11 -3
  153. package/bundled-types/glimmer-motion/memory.ts +302 -0
  154. package/bundled-types/glimmer-motion/node.ts +125 -14
  155. package/bundled-types/glimmer-motion/presence-types.ts +13 -5
  156. package/bundled-types/glimmer-motion/presence.gts +199 -11
  157. package/bundled-types/glimmer-motion/snapshot.ts +280 -0
  158. package/bundled-types/glimmer-motion/test-support/index.ts +36 -4
  159. package/bundled-types/host-app/components/ai-assistant/llm-select.gts +3 -0
  160. package/bundled-types/host-app/components/ai-assistant/skill-menu/index.gts +3 -0
  161. package/bundled-types/host-app/components/matrix/room.gts +15 -3
  162. package/bundled-types/host-app/components/pill-menu/index.gts +74 -23
  163. package/package.json +1 -1
  164. package/bundled-test-harness/assets/choreo-Cd9yKlEK.js +0 -2
  165. package/bundled-test-harness/assets/clip-DnEy6oK5.js +0 -2
  166. package/bundled-test-harness/assets/film-C4NJTl9U.js +0 -2
  167. package/bundled-test-harness/assets/group-CPQojb-T.js +0 -2
  168. package/bundled-test-harness/assets/item-DGzMAZ9K.js +0 -2
  169. package/bundled-test-harness/assets/pill-menu-DaRpDMUm.js +0 -68
  170. package/bundled-test-harness/assets/plate-B7JjCVMj.js +0 -2
  171. package/bundled-test-harness/assets/player-DpGXST02.js +0 -2
  172. package/bundled-test-harness/assets/presence-CmLmFwhO.js +0 -2
  173. package/bundled-test-harness/assets/presence-Sv4y4tQy.js +0 -230
  174. package/bundled-test-harness/assets/realm-api-keys-DkdlXgAg.js +0 -2
  175. package/bundled-test-harness/assets/src-BpmcuCfH.js +0 -10
  176. package/bundled-test-harness/assets/test-support-CB3auo8h.js +0 -2
  177. package/bundled-test-harness/assets/test-support-DfGKwg35.js +0 -3
  178. package/bundled-test-harness/assets/titles-DVhrJZzS.js +0 -2
@@ -397,9 +397,12 @@ export default class Room extends Component<Signature> {
397
397
  {{/if}}
398
398
 
399
399
  <div class='chat-input-area__bottom-actions'>
400
+ {{! the composer holds its bottom edge and grows upward, so
401
+ a collapsing menu's fading copy is pinned to the bottom }}
400
402
  {{#if this.displayLLMSelect}}
401
403
  <LLMSelect
402
404
  class='llm-select'
405
+ @anchorY='bottom'
403
406
  @selected={{@roomResource.activeLLM}}
404
407
  @onChange={{perform @roomResource.activateLLMTask}}
405
408
  @options={{this.llmsForSelectMenu}}
@@ -441,6 +444,7 @@ export default class Room extends Component<Signature> {
441
444
  {{#if this.displaySkillMenu}}
442
445
  <AiAssistantSkillMenu
443
446
  class='skill-menu'
447
+ @anchorY='bottom'
444
448
  @skills={{this.sortedSkills}}
445
449
  @onChooseCard={{perform this.attachSkillTask}}
446
450
  @onChooseSkillMarkdown={{perform this.attachSkillTask}}
@@ -625,11 +629,17 @@ export default class Room extends Component<Signature> {
625
629
  flex-shrink: 1;
626
630
  }
627
631
 
628
- .chat-input-area__bottom-actions:not(:has(.menu-content)) {
632
+ /* an open menu, not the fading copy of one that has closed: the row
633
+ takes its closed layout in the render that closes the menu */
634
+ .chat-input-area__bottom-actions:not(
635
+ :has(.menu-content:not([data-motion-memory] *))
636
+ ) {
629
637
  height: 40px;
630
638
  }
631
639
 
632
- .chat-input-area__bottom-actions:has(.menu-content) {
640
+ .chat-input-area__bottom-actions:has(
641
+ .menu-content:not([data-motion-memory] *)
642
+ ) {
633
643
  padding: 0;
634
644
  }
635
645
 
@@ -674,7 +684,9 @@ export default class Room extends Component<Signature> {
674
684
 
675
685
  /* the bottom row answers its own width, so the context ring can step
676
686
  aside before it squeezes the model's name out */
677
- .chat-input-area__bottom-actions:not(:has(.menu-content)) {
687
+ .chat-input-area__bottom-actions:not(
688
+ :has(.menu-content:not([data-motion-memory] *))
689
+ ) {
678
690
  container: composer / inline-size;
679
691
  }
680
692
  /* how full the model's context window is, beside the model it
@@ -3,10 +3,18 @@ import { action } from '@ember/object';
3
3
  import Component from '@glimmer/component';
4
4
  import { tracked } from '@glimmer/tracking';
5
5
 
6
+ import { motion, Presence, to, tween } from 'glimmer-motion';
7
+
6
8
  import { Button, Header } from '@cardstack/boxel-ui/components';
7
9
 
8
10
  import { DropdownArrowFilled } from '@cardstack/boxel-ui/icons';
9
11
 
12
+ import {
13
+ DURATION,
14
+ EASE_IN,
15
+ motionEnabled,
16
+ } from '../ai-assistant/motion/tokens';
17
+
10
18
  export type PillMenuItem = {
11
19
  cardId: string;
12
20
  realmURL: string | undefined;
@@ -16,6 +24,13 @@ export type PillMenuItem = {
16
24
  interface Signature {
17
25
  Element: HTMLDivElement | HTMLButtonElement;
18
26
  Args: {
27
+ /**
28
+ * The edge of the menu's containing block that holds still when the menu
29
+ * collapses: the menu's fading copy is pinned to it. `bottom` in a
30
+ * container that is anchored at its bottom and grows upward, such as the
31
+ * AI assistant's composer. Default `top`.
32
+ */
33
+ anchorY?: 'top' | 'bottom';
19
34
  title?: string;
20
35
  onExpand?: () => void;
21
36
  onCollapse?: () => void;
@@ -28,6 +43,22 @@ interface Signature {
28
43
  };
29
44
  }
30
45
 
46
+ // The expanded menu is the one item of a <Presence>, so its exit can play
47
+ // after `isExpanded` has already flipped. One stable array per state: the
48
+ // presence diffs its items by identity.
49
+ type MenuFace = { id: 'menu' };
50
+ const MENU_PRESENT: MenuFace[] = [{ id: 'menu' }];
51
+ const MENU_ABSENT: MenuFace[] = [];
52
+ const faceKey = (face: MenuFace) => face.id;
53
+
54
+ // Leaving eases in (ADR 007 §1.5). Opacity only: a fade cannot deform the
55
+ // menu's text, and under reduced motion it is the short fade §1.5 asks for.
56
+ const MENU_EXIT = to({ opacity: 0 });
57
+ const MENU_EXIT_TRANSITION = tween({
58
+ duration: DURATION.exit,
59
+ ease: [...EASE_IN],
60
+ });
61
+
31
62
  /**
32
63
  * A pill that expands into a menu and collapses back to the pill.
33
64
  *
@@ -36,19 +67,44 @@ interface Signature {
36
67
  * other face renders in the same pass. The expand animation is CSS on the
37
68
  * menu root, so no state tracks whether it is playing.
38
69
  *
39
- * The menu has no exit animation. Its header and content are the caller's
40
- * blocks, rendered from the caller's own state, which `@onCollapse` has
41
- * already moved on: a copy of the menu kept in the DOM while it fades would
42
- * re-render as the collapsed face, and would carry the caller's
43
- * `...attributes` and test hooks beside the live pill. A faithful exit needs
44
- * a snapshot the motion engine owns (ADR 007 §1.2), not a live block.
70
+ * The menu's exit belongs to the motion engine (ADR 007 §1.2). Its header and
71
+ * content are the caller's blocks, rendered from state that `@onCollapse` has
72
+ * already moved on, so the live menu cannot stay on screen to fade: it would
73
+ * re-render as the collapsed face, beside the pill, and stay focusable and
74
+ * clickable while it faded. The menu is the one item of a
75
+ * `<Presence @mode="snapshot">` instead: the live menu leaves with the render
76
+ * that collapses it, and the engine fades a static, inert copy of its last
77
+ * frame over the pill. With motion off nothing is copied.
45
78
  */
46
79
  export default class PillMenu extends Component<Signature> {
47
80
  <template>
48
- {{#if this.isExpanded}}
81
+ {{#unless this.isExpanded}}
82
+ <Button
83
+ @kind='secondary'
84
+ @size='extra-small'
85
+ @pill={{true}}
86
+ {{on 'click' this.expandMenu}}
87
+ class='pill-menu-button'
88
+ data-test-pill-menu-button
89
+ data-test-pill-menu-collapsed
90
+ ...attributes
91
+ >
92
+ {{yield to='headerIcon'}}
93
+ {{yield to='headerDetail'}}
94
+ <DropdownArrowFilled class='minimized-arrow' width='8px' height='8px' />
95
+ </Button>
96
+ {{/unless}}
97
+ <Presence
98
+ @items={{this.menuFaces}}
99
+ @key={{faceKey}}
100
+ @mode='snapshot'
101
+ @anchorY={{@anchorY}}
102
+ as |_face h|
103
+ >
49
104
  <div
50
105
  class='pill-menu
51
106
  {{if (has-block "contentActions") "has-content-actions"}}'
107
+ {{motion presence=h exit=this.menuExit transition=MENU_EXIT_TRANSITION}}
52
108
  ...attributes
53
109
  >
54
110
  <Header class='menu-header' data-test-pill-menu-header>
@@ -90,22 +146,7 @@ export default class PillMenu extends Component<Signature> {
90
146
  </div>
91
147
  </div>
92
148
  </div>
93
- {{else}}
94
- <Button
95
- @kind='secondary'
96
- @size='extra-small'
97
- @pill={{true}}
98
- {{on 'click' this.expandMenu}}
99
- class='pill-menu-button'
100
- data-test-pill-menu-button
101
- data-test-pill-menu-collapsed
102
- ...attributes
103
- >
104
- {{yield to='headerIcon'}}
105
- {{yield to='headerDetail'}}
106
- <DropdownArrowFilled class='minimized-arrow' width='8px' height='8px' />
107
- </Button>
108
- {{/if}}
149
+ </Presence>
109
150
  <style scoped>
110
151
  .pill-menu {
111
152
  --boxel-header-gap: var(--boxel-sp-4xs);
@@ -336,6 +377,16 @@ export default class PillMenu extends Component<Signature> {
336
377
  </template>
337
378
 
338
379
  @tracked isExpanded = false;
380
+ private motion = motionEnabled();
381
+
382
+ private get menuFaces(): MenuFace[] {
383
+ return this.isExpanded ? MENU_PRESENT : MENU_ABSENT;
384
+ }
385
+
386
+ /** With motion off the menu has no exit to play, and nothing is copied. */
387
+ private get menuExit() {
388
+ return this.motion ? MENU_EXIT : undefined;
389
+ }
339
390
 
340
391
  @action expandMenu() {
341
392
  if (this.isExpanded) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cardstack/boxel-cli",
3
- "version": "0.12.0",
3
+ "version": "0.13.0-unstable.0",
4
4
  "license": "MIT",
5
5
  "description": "CLI tools for Boxel workspace management",
6
6
  "main": "./dist/index.js",
@@ -1,2 +0,0 @@
1
- import { t as Choreo } from "./choreo-D7dLCdGB.js";
2
- export { Choreo, Choreo as default };
@@ -1,2 +0,0 @@
1
- import { t as Clip } from "./clip-BmBVqUyU.js";
2
- export { Clip };
@@ -1,2 +0,0 @@
1
- import { r as TICK, t as Film } from "./film-77OfTGL7.js";
2
- export { Film, TICK };
@@ -1,2 +0,0 @@
1
- import { t as ReorderGroup } from "./group-BNxp6qON.js";
2
- export { ReorderGroup, ReorderGroup as default };
@@ -1,2 +0,0 @@
1
- import { t as ReorderItem } from "./item-BDyVqxdA.js";
2
- export { ReorderItem, ReorderItem as default };
@@ -1,68 +0,0 @@
1
- import "./chunk-Rp0pCe6z.js";
2
- import { n as decorateMethodV2, r as initializeDeferredDecorator, t as decorateFieldV2 } from "./runtime--fcdnjmJ-BoCBNIsz.js";
3
- import { wt as setComponentTemplate } from "./cache-DtDz7X5V-Wn8jRDfL.js";
4
- import { d as action } from "./service-LFpJ8EEP.js";
5
- import { H as templateFactory, S as on } from "./index-DaCZcoCY-CgzbilMy.js";
6
- import "./modifier-D0EP-FQ7.js";
7
- import "./component-BJO47HTh.js";
8
- import { t as Component } from "./dist-CkA1rgqO.js";
9
- import { n as tracked } from "./tracking-800VJb8b.js";
10
- import "./template-factory-ds9s0u8l.js";
11
- import { O as Header, dt as ButtonComponent } from "./components-BDPSqiPt.js";
12
- import { q as IconComponent } from "./icons-B3SAtRoj.js";
13
- //#region app/components/pill-menu/index.gts
14
- /**
15
- * A pill that expands into a menu and collapses back to the pill.
16
- *
17
- * Expanding and collapsing are state changes (ADR 007 §1.1): `isExpanded`
18
- * flips and `@onExpand` / `@onCollapse` fire in the click handler, and the
19
- * other face renders in the same pass. The expand animation is CSS on the
20
- * menu root, so no state tracks whether it is playing.
21
- *
22
- * The menu has no exit animation. Its header and content are the caller's
23
- * blocks, rendered from the caller's own state, which `@onCollapse` has
24
- * already moved on: a copy of the menu kept in the DOM while it fades would
25
- * re-render as the collapsed face, and would carry the caller's
26
- * `...attributes` and test hooks beside the live pill. A faithful exit needs
27
- * a snapshot the motion engine owns (ADR 007 §1.2), not a live block.
28
- */
29
- var PillMenu = class extends Component {
30
- static {
31
- setComponentTemplate(templateFactory({
32
- "id": "WYcPf6Ue",
33
- "block": "[[[41,[30,0,[\"isExpanded\"]],[[[1,\" \"],[11,0],[16,0,[29,[\"pill-menu\\n \",[52,[48,[30,2]],\"has-content-actions\"]]]],[17,1],[24,\"data-scopedcss-a60d4c9c1a-c2d824bb39\",\"\"],[12],[1,\"\\n \"],[8,[32,0],[[24,0,\"menu-header\"],[24,\"data-test-pill-menu-header\",\"\"],[24,\"data-scopedcss-a60d4c9c1a-c2d824bb39\",\"\"]],null,[[\"icon\",\"default\",\"detail\"],[[[[1,\"\\n \"],[18,3,null],[1,\"\\n \"]],[]],[[[1,\"\\n \"],[11,\"button\"],[24,0,\"detail-close-button\"],[24,\"data-test-pill-menu-detail-close\",\"\"],[24,\"data-scopedcss-a60d4c9c1a-c2d824bb39\",\"\"],[4,[32,1],[\"click\",[30,0,[\"collapseMenu\"]]],null],[12],[1,\"\\n \"],[18,4,null],[1,\"\\n \"],[13],[1,\"\\n \"]],[]],[[[1,\"\\n \"],[11,\"button\"],[24,0,\"header-button\"],[24,\"data-test-pill-menu-button\",\"\"],[24,\"data-scopedcss-a60d4c9c1a-c2d824bb39\",\"\"],[4,[32,1],[\"click\",[30,0,[\"collapseMenu\"]]],null],[12],[1,\"\\n \"],[8,[32,2],[[24,0,\"collapse-icon\"],[24,\"width\",\"8px\"],[24,\"height\",\"8px\"],[24,\"data-scopedcss-a60d4c9c1a-c2d824bb39\",\"\"]],null,null],[1,\"\\n \"],[13],[1,\"\\n \"]],[]]]]],[1,\"\\n \"],[10,0],[14,0,\"menu-content\"],[14,\"data-scopedcss-a60d4c9c1a-c2d824bb39\",\"\"],[12],[1,\"\\n \"],[10,0],[14,0,\"menu-content-scroll\"],[14,\"data-scopedcss-a60d4c9c1a-c2d824bb39\",\"\"],[12],[1,\"\\n \"],[18,5,[[30,0,[\"collapseMenu\"]]]],[1,\"\\n\\n\"],[41,[48,[30,2]],[[[1,\" \"],[10,0],[14,0,\"menu-content-actions\"],[14,\"data-scopedcss-a60d4c9c1a-c2d824bb39\",\"\"],[12],[1,\"\\n \"],[18,2,null],[1,\"\\n \"],[13],[1,\"\\n\"]],[]],null],[1,\" \"],[13],[1,\"\\n \"],[13],[1,\"\\n \"],[13],[1,\"\\n\"]],[]],[[[1,\" \"],[8,[32,3],[[24,0,\"pill-menu-button\"],[24,\"data-test-pill-menu-button\",\"\"],[24,\"data-test-pill-menu-collapsed\",\"\"],[17,1],[24,\"data-scopedcss-a60d4c9c1a-c2d824bb39\",\"\"],[4,[32,1],[\"click\",[30,0,[\"expandMenu\"]]],null]],[[\"@kind\",\"@size\",\"@pill\"],[\"secondary\",\"extra-small\",true]],[[\"default\"],[[[[1,\"\\n \"],[18,3,null],[1,\"\\n \"],[18,4,null],[1,\"\\n \"],[8,[32,2],[[24,0,\"minimized-arrow\"],[24,\"width\",\"8px\"],[24,\"height\",\"8px\"],[24,\"data-scopedcss-a60d4c9c1a-c2d824bb39\",\"\"]],null,null],[1,\"\\n \"]],[]]]]],[1,\"\\n\"]],[]]]],[\"&attrs\",\"&contentActions\",\"&headerIcon\",\"&headerDetail\",\"&content\"],[\"if\",\"has-block\",\"yield\"]]",
34
- "moduleName": "/home/runner/work/boxel/boxel/packages/host/app/components/pill-menu/index.gts",
35
- "scope": () => [
36
- Header,
37
- on,
38
- IconComponent,
39
- ButtonComponent
40
- ],
41
- "isStrictMode": true
42
- }), this);
43
- }
44
- static {
45
- decorateFieldV2(this.prototype, "isExpanded", [tracked], function() {
46
- return false;
47
- });
48
- }
49
- #isExpanded = (initializeDeferredDecorator(this, "isExpanded"), void 0);
50
- expandMenu() {
51
- if (this.isExpanded) return;
52
- this.isExpanded = true;
53
- this.args.onExpand?.();
54
- }
55
- static {
56
- decorateMethodV2(this.prototype, "expandMenu", [action]);
57
- }
58
- collapseMenu() {
59
- if (!this.isExpanded) return;
60
- this.isExpanded = false;
61
- this.args.onCollapse?.();
62
- }
63
- static {
64
- decorateMethodV2(this.prototype, "collapseMenu", [action]);
65
- }
66
- };
67
- //#endregion
68
- export { PillMenu as t };
@@ -1,2 +0,0 @@
1
- import { t as Plate } from "./plate-B4Lz2Ulo.js";
2
- export { Plate };
@@ -1,2 +0,0 @@
1
- import { n as Menu, r as Player, t as Burst } from "./player-B965XH82.js";
2
- export { Burst, Menu, Player };
@@ -1,2 +0,0 @@
1
- import { t as Presence } from "./presence-Sv4y4tQy.js";
2
- export { Presence, Presence as default };
@@ -1,230 +0,0 @@
1
- import { r as __exportAll } from "./chunk-Rp0pCe6z.js";
2
- import { r as initializeDeferredDecorator, t as decorateFieldV2 } from "./runtime--fcdnjmJ-BoCBNIsz.js";
3
- import { et as tracked, wt as setComponentTemplate } from "./cache-DtDz7X5V-Wn8jRDfL.js";
4
- import { H as templateFactory } from "./index-DaCZcoCY-CgzbilMy.js";
5
- import { n as registerDestructor } from "./destroyable-mdLYRn_o.js";
6
- import "./tracking-CNiq91Pk.js";
7
- import "./component-BJO47HTh.js";
8
- import { t as Component } from "./dist-CkA1rgqO.js";
9
- import "./template-factory-ds9s0u8l.js";
10
- import { o as snapshotOnRender, v as postRender } from "./layout-group-BS0gklZp.js";
11
- import { n as flushPendingMounts } from "./node-BAM535H5.js";
12
- //#region ../glimmer-motion/src/presence.gts
13
- /**
14
- * AnimatePresence for Glimmer — the same algorithm as Motion's
15
- * components/AnimatePresence (diff present vs rendered, keep leavers until
16
- * every exit inside them completes, `exitComplete` map, mode="wait", custom,
17
- * onExitComplete, propagate).
18
- *
19
- * <Presence @items={{this.crumbs}} @key={{this.keyOf}} @mode="popLayout" as |crumb p|>
20
- * <span {{motion presence=p initial=… animate=… exit=…}}>…</span>
21
- * </Presence>
22
- *
23
- * Motion elements nested deeper inside a child inherit its presence through
24
- * their parent VisualElement, as React's PresenceContext would provide it.
25
- */
26
- var presence_exports = /* @__PURE__ */ __exportAll({
27
- Presence: () => Presence,
28
- default: () => Presence
29
- });
30
- var presenceId = 0;
31
- /** PresenceChild: one context per rendered child, tracking the motion elements registered inside it */
32
- var Entry = class {
33
- static {
34
- decorateFieldV2(this.prototype, "item", [tracked]);
35
- }
36
- #item = (initializeDeferredDecorator(this, "item"), void 0);
37
- /** last presence seen by the diff — plain state, never read during render tracking */ wasPresent = true;
38
- id = `presence-${presenceId++}`;
39
- children = /* @__PURE__ */ new Map();
40
- subscribers = /* @__PURE__ */ new Set();
41
- /** popLayout: the direct children, so they can be measured before the DOM changes */
42
- popCandidates = /* @__PURE__ */ new Set();
43
- subscribe(refresh) {
44
- this.subscribers.add(refresh);
45
- return () => this.subscribers.delete(refresh);
46
- }
47
- popCandidate(node) {
48
- this.popCandidates.add(node);
49
- return () => {
50
- this.popCandidates.delete(node);
51
- };
52
- }
53
- key;
54
- owner;
55
- initialBlocked;
56
- constructor(key, item, owner, initialBlocked) {
57
- this.key = key;
58
- this.item = item;
59
- this.owner = owner;
60
- this.initialBlocked = initialBlocked;
61
- }
62
- /** derived from @items (and the parent handle) — nothing is mutated during render */
63
- get isPresent() {
64
- return this.owner.isKeyPresent(this.key);
65
- }
66
- get mode() {
67
- return this.owner.args.mode ?? "sync";
68
- }
69
- get anchorX() {
70
- return this.owner.args.anchorX ?? "left";
71
- }
72
- get anchorY() {
73
- return this.owner.args.anchorY ?? "top";
74
- }
75
- get context() {
76
- return {
77
- id: this.id,
78
- isPresent: this.isPresent,
79
- initial: this.initialBlocked ? false : void 0,
80
- custom: this.owner.args.custom,
81
- register: (childId) => {
82
- const leaving = !this.isPresent;
83
- this.children.set(childId, leaving);
84
- if (leaving) postRender(() => this.checkComplete());
85
- return () => {
86
- this.children.delete(childId);
87
- if (!this.isPresent && !this.children.size) this.owner.onExit(this.key);
88
- };
89
- },
90
- onExitComplete: (childId) => {
91
- this.children.set(childId, true);
92
- this.checkComplete();
93
- }
94
- };
95
- }
96
- /** presence flipped (PresenceChild's isPresent effects): children report again; no children → done at once */
97
- presenceChanged(present) {
98
- if (!present && this.mode === "popLayout") this.popCandidates.forEach((node) => node.measureForPop());
99
- this.children.forEach((_, k) => this.children.set(k, false));
100
- postRender(() => this.notify());
101
- if (!present) postRender(() => this.checkImmediateExit());
102
- }
103
- notify() {
104
- flushPendingMounts();
105
- this.subscribers.forEach((fn) => fn());
106
- }
107
- /** every registered child has reported: the leaver is done */
108
- checkComplete() {
109
- if (this.isPresent) return;
110
- for (const done of this.children.values()) if (!done) return;
111
- this.owner.onExit(this.key);
112
- }
113
- checkImmediateExit() {
114
- flushPendingMounts();
115
- if (!this.isPresent && !this.children.size) this.owner.onExit(this.key);
116
- }
117
- };
118
- var Presence = class extends Component {
119
- entries = /* @__PURE__ */ new Map();
120
- order = [];
121
- lastItems;
122
- firstRender = true;
123
- /** React's exitComplete map + exitingComponents set */
124
- exitComplete = /* @__PURE__ */ new Map();
125
- exiting = /* @__PURE__ */ new Set();
126
- pendingItems = [];
127
- registeredWithParent;
128
- selfId = `presence:${presenceId++}`;
129
- static {
130
- decorateFieldV2(this.prototype, "version", [tracked], function() {
131
- return 0;
132
- });
133
- }
134
- #version = (initializeDeferredDecorator(this, "version"), void 0);
135
- constructor(owner, args) {
136
- super(owner, args);
137
- registerDestructor(this, () => this.registeredWithParent?.());
138
- }
139
- get parentPresent() {
140
- const { propagate, parent } = this.args;
141
- return !propagate || !parent || parent.isPresent;
142
- }
143
- /** the keys @items currently asks for (empty while a propagating parent is leaving) */
144
- get presentKeys() {
145
- return this.parentPresent ? this.args.items.map(this.args.key) : [];
146
- }
147
- isKeyPresent(key) {
148
- return this.presentKeys.includes(key);
149
- }
150
- get rendered() {
151
- this.version;
152
- const items = this.args.items;
153
- const parentPresent = this.parentPresent;
154
- if (this.args.propagate && this.args.parent && !this.registeredWithParent) this.registeredWithParent = this.args.parent.context.register(this.selfId);
155
- if (items !== this.lastItems || this.lastParentPresent !== parentPresent) {
156
- snapshotOnRender();
157
- this.lastItems = items;
158
- this.lastParentPresent = parentPresent;
159
- this.pendingItems = items;
160
- const presentKeys = this.presentKeys;
161
- const blockInitial = this.firstRender && this.args.initial === false;
162
- items.forEach((item) => {
163
- const k = this.args.key(item);
164
- const e = this.entries.get(k);
165
- if (e) e.item = item;
166
- else this.entries.set(k, new Entry(k, item, this, blockInitial));
167
- });
168
- const exitingKeys = [];
169
- let next = parentPresent ? [...presentKeys] : [];
170
- let insertionIndex = 0;
171
- for (const k of this.order) {
172
- const presentIndex = presentKeys.indexOf(k);
173
- if (presentIndex === -1) {
174
- next.splice(insertionIndex++, 0, k);
175
- exitingKeys.push(k);
176
- } else insertionIndex = presentIndex + exitingKeys.length + 1;
177
- }
178
- if ((this.args.mode ?? "sync") === "wait" && exitingKeys.length) next = exitingKeys;
179
- this.order = next.filter((k, i) => next.indexOf(k) === i);
180
- for (const k of this.order) {
181
- const e = this.entries.get(k);
182
- const present = presentKeys.includes(k);
183
- if (!present) {
184
- if (this.exitComplete.get(k) !== true) this.exitComplete.set(k, false);
185
- } else {
186
- this.exitComplete.delete(k);
187
- this.exiting.delete(k);
188
- }
189
- if (e.wasPresent !== present) {
190
- e.wasPresent = present;
191
- e.presenceChanged(present);
192
- }
193
- }
194
- this.firstRender = false;
195
- if (this.args.propagate && !parentPresent && !this.order.length) postRender(() => this.safeToRemove());
196
- }
197
- return this.order.map((k) => this.entries.get(k));
198
- }
199
- lastParentPresent;
200
- /** AnimatePresence's onExit for one child: once every exiting child is done, show what's pending */
201
- onExit(key) {
202
- if (this.exiting.has(key)) return;
203
- if (!this.exitComplete.has(key)) return;
204
- this.exiting.add(key);
205
- this.exitComplete.set(key, true);
206
- for (const done of this.exitComplete.values()) if (!done) return;
207
- const presentKeys = this.parentPresent ? this.pendingItems.map(this.args.key) : [];
208
- for (const k of this.order) if (!presentKeys.includes(k)) this.entries.delete(k);
209
- this.lastItems = void 0;
210
- this.exitComplete.clear();
211
- this.exiting.clear();
212
- this.order = presentKeys;
213
- this.version++;
214
- if (this.args.propagate) this.safeToRemove();
215
- this.args.onExitComplete?.();
216
- }
217
- safeToRemove() {
218
- this.args.parent?.context.onExitComplete?.(this.selfId);
219
- }
220
- static {
221
- setComponentTemplate(templateFactory({
222
- "id": "beA1G5yY",
223
- "block": "[[[42,[28,[31,1],[[28,[31,1],[[30,0,[\"rendered\"]]],null]],null],\"key\",[[[1,\" \"],[18,2,[[30,1,[\"item\"]],[30,1]]],[1,\"\\n\"]],[1]],null]],[\"e\",\"&default\"],[\"each\",\"-track-array\",\"yield\"]]",
224
- "moduleName": "/home/runner/work/boxel/boxel/packages/glimmer-motion/src/presence.gts",
225
- "isStrictMode": true
226
- }), this);
227
- }
228
- };
229
- //#endregion
230
- export { presence_exports as n, Presence as t };
@@ -1,2 +0,0 @@
1
- import { t as RealmApiKeys } from "./realm-api-keys-sg--fohv.js";
2
- export { RealmApiKeys as default };
@@ -1,10 +0,0 @@
1
- import { U as motionValue, _ as snapshotAll, c as afterSettle, d as layoutChange, f as layoutLoopDetected, h as resetLayoutLoopGuard, m as requestSettle, n as RENDER_DETECTOR_ATTRIBUTE, nn as registerBusyProbe, o as snapshotOnRender, r as closestLayoutGroup, t as LayoutGroup, u as instantLayoutTransition, v as postRender, y as setPostRender, yt as frame } from "./layout-group-BS0gklZp.js";
2
- import { a as closestParticipantHost, c as DragControls, i as PARTICIPANT_HOST_ATTRIBUTE, n as flushPendingMounts, o as defineParticipantArg, r as retime, s as setParticipantHost, t as MotionNode } from "./node-BAM535H5.js";
3
- import { C as styleEffect, S as stagger, _ as to, a as scrollProgress, b as transformViewBoxPoint, c as inView, d as animate, f as ease, g as styles, h as spring, i as InView, l as scroll, m as perValue, n as animateView, o as useInView, p as inertia, r as viewTransition, s as useScroll, u as scrollInfo, v as tween, x as createDragControls, y as correctParentTransform } from "./src-Bhefkhqj.js";
4
- import { r as transformValue, t as ReorderItem } from "./item-BDyVqxdA.js";
5
- import { n as closestMotionConfig, t as MotionConfig } from "./motion-config-BbHByW3a.js";
6
- import { i as setMotionSpeed, n as onMotionSpeed, r as scaleTransition, t as motionSpeed } from "./speed-bIo0tyrM.js";
7
- import { t as MotionModifier } from "./motion-DeM7UCtd.js";
8
- import { t as Presence } from "./presence-Sv4y4tQy.js";
9
- import { t as ReorderGroup } from "./group-BNxp6qON.js";
10
- export { DragControls, InView, LayoutGroup, MotionConfig, MotionModifier, MotionModifier as motion, MotionNode, PARTICIPANT_HOST_ATTRIBUTE, Presence, RENDER_DETECTOR_ATTRIBUTE, ReorderGroup, ReorderItem, afterSettle, animate, animateView, closestLayoutGroup, closestMotionConfig, closestParticipantHost, correctParentTransform, createDragControls, defineParticipantArg, ease, flushPendingMounts, frame, inView, inertia, instantLayoutTransition, layoutChange, layoutLoopDetected, motionSpeed, motionValue, onMotionSpeed, perValue, postRender, registerBusyProbe, requestSettle, resetLayoutLoopGuard, retime, scaleTransition, scroll, scrollInfo, scrollProgress, setMotionSpeed, setParticipantHost, setPostRender, snapshotAll, snapshotOnRender, spring, stagger, styleEffect, styles, to, transformValue, transformViewBoxPoint, tween, useInView, useScroll, viewTransition };
@@ -1,2 +0,0 @@
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-Dl6FChlV.js";
2
- export { advanceGate, live, liveAll, orphanCount, seekTo, setupChoreo, strandedTransforms };
@@ -1,3 +0,0 @@
1
- import { rn as whatIsBusy, tn as isMotionIdle } from "./layout-group-BS0gklZp.js";
2
- import { a as resetMotion, c as velocityOf, i as registerMotionReset, n as bounds, o as setupMotion, r as boundsAndShape, s as shape, t as animationsSettled } from "./test-support-BcjhIHQa.js";
3
- export { animationsSettled, bounds, boundsAndShape, isMotionIdle, registerMotionReset, resetMotion, setupMotion, shape, velocityOf, whatIsBusy };
@@ -1,2 +0,0 @@
1
- import { n as Gate, t as EndCard } from "./titles-CFt3dEls.js";
2
- export { EndCard, Gate };