@cardstack/boxel-cli 0.12.0 → 0.13.0-unstable.1

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 (196) hide show
  1. package/bundled-realms/base/command.gts +4 -4
  2. package/bundled-realms/base/realm-api-keys.gts +35 -3
  3. package/bundled-realms/pretui/components/chip.gts +47 -2
  4. package/bundled-realms/pretui/components/chip.md +5 -2
  5. package/bundled-realms/pretui/components/chip.usage.gts +37 -2
  6. package/bundled-realms/pretui/components/status-chip.gts +12 -2
  7. package/bundled-realms/pretui/components/status-chip.md +2 -1
  8. package/bundled-realms/pretui/components/status-chip.usage.gts +2 -0
  9. package/bundled-test-harness/assets/{ai-module-creation-test-B9lSKNq1.js → ai-module-creation-test-DxxsXNXe.js} +1 -1
  10. package/bundled-test-harness/assets/{aibot-message-LXV0UlzI.js → aibot-message-Dg5nzE1b.js} +1 -1
  11. package/bundled-test-harness/assets/{app-BIQcKrVT.js → app-BEvPLshl.js} +8 -8
  12. package/bundled-test-harness/assets/{assistant-transcript-test-CG_2-bog.js → assistant-transcript-test-kILRv_pf.js} +1 -1
  13. package/bundled-test-harness/assets/{binary-upload-dedupe-test-Q7e6bzl1.js → binary-upload-dedupe-test-B_gcWqxF.js} +1 -1
  14. package/bundled-test-harness/assets/{bundled-base-DldokUSJ.js → bundled-base-CYD5iFX3.js} +3 -3
  15. package/bundled-test-harness/assets/{bundled-base-modules-test-VAlRx4t3.js → bundled-base-modules-test-bO7yZysu.js} +1 -1
  16. package/bundled-test-harness/assets/{can-invoke-test-BGmUJHxo.js → can-invoke-test-BBTE4_cE.js} +1 -1
  17. package/bundled-test-harness/assets/{card-chooser-paging-test-CzooKL4I.js → card-chooser-paging-test-14IqQei3.js} +1 -1
  18. package/bundled-test-harness/assets/{card-chooser-test-C3fjaDYi.js → card-chooser-test-CRg2JrXQ.js} +1 -1
  19. package/bundled-test-harness/assets/{card-def-field-def-relationships-test-yqv8ir8Y.js → card-def-field-def-relationships-test-BapYGyoB.js} +1 -1
  20. package/bundled-test-harness/assets/{card-delete-test-BtjqrqKO.js → card-delete-test-CvbDQUUE.js} +1 -1
  21. package/bundled-test-harness/assets/{chip-D6Xffhjx.css → chip-B2Ns53A6.css} +35 -9
  22. package/bundled-test-harness/assets/{chip-BydgljDL.js → chip-DVJE_YDh.js} +11 -3
  23. package/bundled-test-harness/assets/{choreo-D7dLCdGB.js → choreo-CIrop3HM.js} +16 -35
  24. package/bundled-test-harness/assets/choreo-Ca2Y2sF3.js +2 -0
  25. package/bundled-test-harness/assets/{choreo-feature-reel-test--x-L3ZKc.js → choreo-feature-reel-test-CJHms7Sf.js} +2 -2
  26. package/bundled-test-harness/assets/{choreo-gallery-ZO9vXOxd.js → choreo-gallery-DZm1KZ20.js} +3 -3
  27. package/bundled-test-harness/assets/{choreo-gallery-build-order-test-DG5UTyc9.js → choreo-gallery-build-order-test-QKyMWELN.js} +4 -4
  28. package/bundled-test-harness/assets/{choreo-gallery-compositor-test-DJP80SNj.js → choreo-gallery-compositor-test-BQDptxfE.js} +1 -1
  29. package/bundled-test-harness/assets/{choreo-gallery-cover-test-CHYz7sM4.js → choreo-gallery-cover-test-Do-HYF96.js} +1 -1
  30. package/bundled-test-harness/assets/{choreo-gallery-crossing-stage-test-BuinlINr.js → choreo-gallery-crossing-stage-test-yJVXghRc.js} +10 -10
  31. package/bundled-test-harness/assets/{choreo-gallery-demos-alive-test-BjNCGfH9.js → choreo-gallery-demos-alive-test-BCeaaZye.js} +1 -1
  32. package/bundled-test-harness/assets/{choreo-gallery-drift-test-BJ17f3yv.js → choreo-gallery-drift-test-CJ1yq6R0.js} +1 -1
  33. package/bundled-test-harness/assets/{choreo-gallery-escort-test-Dadih8-S.js → choreo-gallery-escort-test-DypqSgvs.js} +1 -1
  34. package/bundled-test-harness/assets/{choreo-gallery-films-test-CCXty_WI.js → choreo-gallery-films-test-ClMy5M_p.js} +2 -2
  35. package/bundled-test-harness/assets/{choreo-gallery-filter-test-BozCoT_M.js → choreo-gallery-filter-test-CzOmgqgl.js} +1 -1
  36. package/bundled-test-harness/assets/{choreo-gallery-fold-test-Kez2P3_Y.js → choreo-gallery-fold-test-qNnH6wtC.js} +2 -2
  37. package/bundled-test-harness/assets/{choreo-gallery-guide-pages-test-BV5oxrYA.js → choreo-gallery-guide-pages-test-BtKWMkTv.js} +1 -1
  38. package/bundled-test-harness/assets/{choreo-gallery-guides-test-DwYBDgKi.js → choreo-gallery-guides-test-CXMsuDYi.js} +4 -3
  39. package/bundled-test-harness/assets/{choreo-gallery-hang-test-B-5u7cGJ.js → choreo-gallery-hang-test-BD4JQ04e.js} +2 -2
  40. package/bundled-test-harness/assets/{choreo-gallery-highlight-test-BZ5Lg8V6.js → choreo-gallery-highlight-test-BK280K2W.js} +2 -2
  41. package/bundled-test-harness/assets/{choreo-gallery-inline-edit-test-wSlSI-VM.js → choreo-gallery-inline-edit-test-DAgUcaaw.js} +2 -2
  42. package/bundled-test-harness/assets/{choreo-gallery-interruption-test-DBpCEiro.js → choreo-gallery-interruption-test-DY5KUilC.js} +4 -4
  43. package/bundled-test-harness/assets/{choreo-gallery-lone-stack-test-aMLrHsns.js → choreo-gallery-lone-stack-test-Dxd_Nb0-.js} +4 -4
  44. package/bundled-test-harness/assets/{choreo-gallery-navigation-test-B8b-2ZTz.js → choreo-gallery-navigation-test-DWJq12PN.js} +1 -1
  45. package/bundled-test-harness/assets/{choreo-gallery-playhead-transport-test-B95CYBh7.js → choreo-gallery-playhead-transport-test-DlQ6yTKW.js} +1 -1
  46. package/bundled-test-harness/assets/{choreo-gallery-poplayout-subtree-test-jZAAICV6.js → choreo-gallery-poplayout-subtree-test-D59W8gYt.js} +5 -5
  47. package/bundled-test-harness/assets/{choreo-gallery-presence-modes-test-BawIKB-a.js → choreo-gallery-presence-modes-test-BAU-dggP.js} +2 -2
  48. package/bundled-test-harness/assets/{choreo-gallery-presentation-test-CYIb-8ML.js → choreo-gallery-presentation-test-BqGsinE0.js} +2 -2
  49. package/bundled-test-harness/assets/{choreo-gallery-reduced-motion-test-C6Vi1WYr.js → choreo-gallery-reduced-motion-test-By0rb2Ai.js} +4 -3
  50. package/bundled-test-harness/assets/{choreo-gallery-sheet-standalone-test-_e4T5KDI.js → choreo-gallery-sheet-standalone-test-Cfw-4ULF.js} +2 -2
  51. package/bundled-test-harness/assets/{choreo-gallery-sheet-test-Cv51Te3G.js → choreo-gallery-sheet-test-dm53Pdzb.js} +2 -2
  52. package/bundled-test-harness/assets/{choreo-gallery-site-test-Cm35kHu_.js → choreo-gallery-site-test-SAlqtZgL.js} +3 -2
  53. package/bundled-test-harness/assets/{choreo-gallery-stage-Bp6QVqlI.js → choreo-gallery-stage-CU8LvQqX.js} +2 -2
  54. package/bundled-test-harness/assets/{choreo-gallery-stage-keyboard-test-DDX2cuMa.js → choreo-gallery-stage-keyboard-test-DQ4v5qA4.js} +2 -2
  55. package/bundled-test-harness/assets/{choreo-gallery-stages-test-Dfa_33_4.js → choreo-gallery-stages-test-CRvaS6w6.js} +2 -2
  56. package/bundled-test-harness/assets/{choreo-gallery-subdivision-test-CgR3WdcT.js → choreo-gallery-subdivision-test-CtOm-U35.js} +3 -3
  57. package/bundled-test-harness/assets/{choreo-gallery-table-plan-test-DF-cE3J9.js → choreo-gallery-table-plan-test-_0koIm2u.js} +1 -1
  58. package/bundled-test-harness/assets/{choreo-gallery-theater-test-BuIyb2ke.js → choreo-gallery-theater-test-yedwQVyP.js} +4 -4
  59. package/bundled-test-harness/assets/{choreo-gallery-tuning-test-BdZ45YBK.js → choreo-gallery-tuning-test-CmMtfJ5a.js} +1 -1
  60. package/bundled-test-harness/assets/{choreo-gallery-widget-room-test-HcPX75Dg.js → choreo-gallery-widget-room-test-jnYOas5x.js} +2 -2
  61. package/bundled-test-harness/assets/{choreo-gallery-wires-test-BhFCIjB1.js → choreo-gallery-wires-test-CSyqjVnm.js} +2 -2
  62. package/bundled-test-harness/assets/clip--wioup_3.js +2 -0
  63. package/bundled-test-harness/assets/{clip-BmBVqUyU.js → clip-Cm32sLyn.js} +3 -3
  64. package/bundled-test-harness/assets/{codeblocks-test-DbZYlmG_.js → codeblocks-test-j4ES37-L.js} +1 -1
  65. package/bundled-test-harness/assets/{compaction-test-D1G3KCSe.js → compaction-test-CyhMODxy.js} +1 -1
  66. package/bundled-test-harness/assets/{container-BCOmNUou.css → container-CAEYXGQg.css} +179 -155
  67. package/bundled-test-harness/assets/{container-XSX5809v.js → container-CATqNgYF.js} +20 -19
  68. package/bundled-test-harness/assets/{create-listing-modal-test--oGT9P_F.js → create-listing-modal-test-QmWcm9hl.js} +1 -1
  69. package/bundled-test-harness/assets/{debug-message-test-C8UZUtCt.js → debug-message-test-D-4Dcu8y.js} +1 -1
  70. package/bundled-test-harness/assets/{externals--YMzwHwd.js → externals-Cw0MmkHM.js} +38 -38
  71. package/bundled-test-harness/assets/{fallback-banner-live-delete-test-DPK_coJY.js → fallback-banner-live-delete-test-Bzqw4uMs.js} +1 -1
  72. package/bundled-test-harness/assets/{fallback-banner-test-C2wi6Lu6.js → fallback-banner-test-BMQVK4gy.js} +1 -1
  73. package/bundled-test-harness/assets/{fallback-models-test-SqdXWB1Z.js → fallback-models-test-DkdjPwvA.js} +1 -1
  74. package/bundled-test-harness/assets/{file-attachment-test-DT0HK6yS.js → file-attachment-test-yvR5gw9_.js} +1 -1
  75. package/bundled-test-harness/assets/{film-Zt2YoVoG.js → film-9V69qBWw.js} +6 -6
  76. package/bundled-test-harness/assets/{film-77OfTGL7.js → film-Z87hSVo_.js} +8 -8
  77. package/bundled-test-harness/assets/film-h1N8vUjG.js +2 -0
  78. package/bundled-test-harness/assets/{formatted-aibot-message-test-B6i0k9wW.js → formatted-aibot-message-test-DH3WPvU1.js} +1 -1
  79. package/bundled-test-harness/assets/{general-test-C0Xb2Idr.js → general-test-D2j4JhrD.js} +1 -1
  80. 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
  81. package/bundled-test-harness/assets/{glimmer-motion-and-choreo-test-B2ustNm9.js → glimmer-motion-and-choreo-test-BM7uX8k4.js} +10 -10
  82. package/bundled-test-harness/assets/group-Cgg5RLul.js +2 -0
  83. package/bundled-test-harness/assets/{group-BNxp6qON.js → group-DL-b_Hzj.js} +2 -2
  84. package/bundled-test-harness/assets/{index-query-engine-test-BKOqgBMv.js → index-query-engine-test-DFkm037X.js} +1 -1
  85. package/bundled-test-harness/assets/{instance-filter-matcher-test-CNIzKZvP.js → instance-filter-matcher-test-UqB2Rto8.js} +1 -1
  86. package/bundled-test-harness/assets/item-Bu9hhPf2.js +2 -0
  87. package/bundled-test-harness/assets/{item-BDyVqxdA.js → item-CBEoTOyj.js} +2 -2
  88. package/bundled-test-harness/assets/{main-BiI-FhMc.js → main-CM62YtMN.js} +1 -1
  89. package/bundled-test-harness/assets/{markdown-preview-BItI_AEl.js → markdown-preview-D_QssEOi.js} +1 -1
  90. package/bundled-test-harness/assets/{markdown-preview-test-Bntyikh1.js → markdown-preview-test-nljzB8o_.js} +1 -1
  91. package/bundled-test-harness/assets/memory-B73-H_Rp.js +223 -0
  92. package/bundled-test-harness/assets/{model-cost-tier-test-Hu2-LpEw.js → model-cost-tier-test-CDXxio0B.js} +1 -1
  93. package/bundled-test-harness/assets/{motion-DeM7UCtd.js → motion-BiMvMS08.js} +1 -1
  94. package/bundled-test-harness/assets/{node-BAM535H5.js → node-BWOLCOMI.js} +95 -6
  95. package/bundled-test-harness/assets/{operation-lowering-test-CG1gatuH.js → operation-lowering-test-C_CaTJ0F.js} +1 -1
  96. package/bundled-test-harness/assets/{operator-mode-card-chooser-test-Bo5ZnF_x.js → operator-mode-card-chooser-test-CU5f7q6r.js} +1 -1
  97. package/bundled-test-harness/assets/{operator-mode-links-test-DVx_LQOU.js → operator-mode-links-test-CoeF3prV.js} +1 -1
  98. package/bundled-test-harness/assets/{operator-mode-test-CCbFrYgN.js → operator-mode-test-B9c6N5FF.js} +1 -1
  99. package/bundled-test-harness/assets/{operator-mode-ui-test-Dm2Bf6Vn.js → operator-mode-ui-test-CJQxypf_.js} +1 -1
  100. package/bundled-test-harness/assets/{overlay-menu-items-test-Bk5AidFD.js → overlay-menu-items-test-CFWZ-tzq.js} +1 -1
  101. package/bundled-test-harness/assets/{overlays-CY7IgeOl.js → overlays-DZXjQykn.js} +3 -3
  102. package/bundled-test-harness/assets/{overlays-DhVKmSP-.js → overlays-hrAO43jG.js} +1 -1
  103. package/bundled-test-harness/assets/{panel-t9QyU1lY.js → panel-CXmB6GMs.js} +15 -75
  104. package/bundled-test-harness/assets/{panel-CUYJ8oHS.css → panel-D2zkZoIr.css} +39 -31
  105. package/bundled-test-harness/assets/{past-sessions-test-Dq-Y9T6W.js → past-sessions-test-7FgLJlog.js} +1 -1
  106. package/bundled-test-harness/assets/{permission-checking-realm-test-CuImx8ie.js → permission-checking-realm-test-Cm9eB-hE.js} +1 -1
  107. package/bundled-test-harness/assets/pill-menu-Ctn3JNqG.js +154 -0
  108. package/bundled-test-harness/assets/{pill-menu-test-kpWBGrX5.js → pill-menu-test-Cf2xO2w6.js} +1 -1
  109. package/bundled-test-harness/assets/plate-CnatwP3n.js +2 -0
  110. package/bundled-test-harness/assets/{plate-B4Lz2Ulo.js → plate-Cu5EnXQZ.js} +3 -3
  111. package/bundled-test-harness/assets/player-Bwn5tEsh.js +2 -0
  112. package/bundled-test-harness/assets/{player-B965XH82.js → player-CVdsx7Ng.js} +3 -3
  113. package/bundled-test-harness/assets/presence-BKkR2au7.js +553 -0
  114. package/bundled-test-harness/assets/presence-CcEXVges.js +2 -0
  115. package/bundled-test-harness/assets/{quick-look-test-VW5_W7dm.js → quick-look-test-DrqgCLlM.js} +1 -1
  116. package/bundled-test-harness/assets/{realm-api-keys-Tlj0OK1c.css → realm-api-keys-16eN_yJb.css} +35 -25
  117. package/bundled-test-harness/assets/{realm-api-keys-sg--fohv.js → realm-api-keys-ZJedocgl.js} +11 -5
  118. package/bundled-test-harness/assets/realm-api-keys-m-EOSWuV.js +2 -0
  119. package/bundled-test-harness/assets/{realm-api-keys-test-mrgvnhFJ.js → realm-api-keys-test-Ba_1CKJu.js} +3 -5
  120. package/bundled-test-harness/assets/{realm-api-keys-test-Cy7qSoAd.js → realm-api-keys-test-jXscHLbS.js} +1 -1
  121. package/bundled-test-harness/assets/{realm-config-DvpP1xf-.js → realm-config-DIOozzdQ.js} +1 -1
  122. package/bundled-test-harness/assets/{realm-config-policy-standing-test-DJk-ftgH.js → realm-config-policy-standing-test-DEFQEEvl.js} +1 -1
  123. package/bundled-test-harness/assets/{realm-config-routing-rule-edit-test-CTPiJrAL.js → realm-config-routing-rule-edit-test-CtLYsxzq.js} +1 -1
  124. package/bundled-test-harness/assets/{realm-config-settings-test-CUa-PjMC.js → realm-config-settings-test-Dsatuv-T.js} +1 -1
  125. package/bundled-test-harness/assets/{reasoning-test-CeeGGwvf.js → reasoning-test-3p_PygAV.js} +1 -1
  126. package/bundled-test-harness/assets/{rendered-markdown-B8TH0yN4.js → rendered-markdown-DPEXS7MQ.js} +1 -1
  127. package/bundled-test-harness/assets/{rendered-markdown-test-CBRsIBqW.js → rendered-markdown-test-DxbJ1nFX.js} +1 -1
  128. package/bundled-test-harness/assets/{room-message-test-BTxZ_W74.js → room-message-test-BBE8UIPX.js} +1 -1
  129. package/bundled-test-harness/assets/{run-BSEzn_PH.js → run-CfyzhBXb.js} +2 -2
  130. package/bundled-test-harness/assets/{schema-generation-test-De1eamwr.js → schema-generation-test-hkFzUr7-.js} +1 -1
  131. package/bundled-test-harness/assets/{scrolling-test-C7R0UASi.js → scrolling-test-B8CudFE9.js} +2 -2
  132. package/bundled-test-harness/assets/{searchable-option-test-BiOqxIIs.js → searchable-option-test-B8lZyJij.js} +1 -1
  133. package/bundled-test-harness/assets/{sending-test-DOXQ0Tvx.js → sending-test-BtH1z2uE.js} +1 -1
  134. package/bundled-test-harness/assets/{skills-test-BjCYI4Z_.js → skills-test-DIQvoCLm.js} +1 -1
  135. package/bundled-test-harness/assets/src-CEw1V0fi.js +11 -0
  136. package/bundled-test-harness/assets/{src-Bhefkhqj.js → src-CbBcj3xm.js} +11 -5
  137. package/bundled-test-harness/assets/{src-BDDYD1rs.js → src-D8bpj2tb.js} +2 -2
  138. package/bundled-test-harness/assets/{src-DySBAkac.js → src-Df4Vutrk.js} +3 -3
  139. package/bundled-test-harness/assets/{stick-to-bottom-resize-test-hN0AjdXP.js → stick-to-bottom-resize-test-Du4B3w2x.js} +4 -4
  140. package/bundled-test-harness/assets/{store-test-BD99H9dQ.js → store-test-DoHgyfQA.js} +1 -1
  141. package/bundled-test-harness/assets/{test-support-BcjhIHQa.js → test-support-BOFeeYuE.js} +25 -2
  142. package/bundled-test-harness/assets/test-support-CXESl4Wf.js +3 -0
  143. package/bundled-test-harness/assets/test-support-CgWmpebE.js +3 -0
  144. package/bundled-test-harness/assets/{test-support-Dl6FChlV.js → test-support-xTaMuaOA.js} +4 -27
  145. package/bundled-test-harness/assets/{tests-BqLDuQog.js → tests-DXX9TrgY.js} +759 -750
  146. package/bundled-test-harness/assets/{text-input-validator-test-CW6Ay7bo.js → text-input-validator-test-D56aDP2e.js} +1 -1
  147. package/bundled-test-harness/assets/{titles-CFt3dEls.js → titles-BUbpcMoe.js} +3 -3
  148. package/bundled-test-harness/assets/titles-D80DwOQU.js +2 -0
  149. package/bundled-test-harness/assets/{to-device-streaming-test-DRxNCi7Z.js → to-device-streaming-test-Ug8UnlUl.js} +1 -1
  150. package/bundled-test-harness/assets/{token-usage-test-Ck9rB3Ie.js → token-usage-test-BolKbZVL.js} +1 -1
  151. package/bundled-test-harness/assets/{tools-DRCjAZCp.js → tools-CkouX4wE.js} +1 -1
  152. package/bundled-test-harness/assets/{tools-test-B3zniq10.js → tools-test-CdYgRu5Z.js} +1 -1
  153. package/bundled-test-harness/assets/{turn-settling-test-C0X6hL7x.js → turn-settling-test-CS0PlpTg.js} +1 -1
  154. package/bundled-test-harness/assets/{turn-summary-0XOoAv3j.js → turn-summary-CAZVdcBd.js} +1 -1
  155. package/bundled-test-harness/assets/{unshare-key-Dfy1IK9g.js → unshare-key-W_bNI_MF.js} +0 -1
  156. package/bundled-test-harness/index.html +29 -28
  157. package/bundled-test-harness/tests/index.html +29 -28
  158. package/bundled-types/base/command.d.ts +0 -1
  159. package/bundled-types/choreo/choreo.gts +21 -42
  160. package/bundled-types/choreo/test-support/index.ts +9 -30
  161. package/bundled-types/glimmer-motion/index.ts +11 -3
  162. package/bundled-types/glimmer-motion/memory.ts +302 -0
  163. package/bundled-types/glimmer-motion/node.ts +125 -14
  164. package/bundled-types/glimmer-motion/presence-types.ts +13 -5
  165. package/bundled-types/glimmer-motion/presence.gts +199 -11
  166. package/bundled-types/glimmer-motion/snapshot.ts +280 -0
  167. package/bundled-types/glimmer-motion/test-support/index.ts +36 -4
  168. package/bundled-types/host-app/components/ai-assistant/llm-select.gts +3 -0
  169. package/bundled-types/host-app/components/ai-assistant/skill-menu/index.gts +3 -0
  170. package/bundled-types/host-app/components/matrix/room.gts +15 -3
  171. package/bundled-types/host-app/components/operator-mode/dashboard/add-workspace.gts +5 -3
  172. package/bundled-types/host-app/components/operator-mode/dashboard/archived-workspace.gts +3 -5
  173. package/bundled-types/host-app/components/operator-mode/dashboard/catalog-shelf.gts +24 -7
  174. package/bundled-types/host-app/components/operator-mode/dashboard/workspace.gts +9 -4
  175. package/bundled-types/host-app/components/pill-menu/index.gts +74 -23
  176. package/bundled-types/host-app/lib/key-shares.ts +0 -1
  177. package/bundled-types/host-app/tools/get-key-share-usage.ts +0 -1
  178. package/dist/index.js +161 -161
  179. package/package.json +1 -1
  180. package/src/commands/keys/manage.ts +22 -6
  181. package/src/lib/user-keys.ts +18 -5
  182. package/bundled-test-harness/assets/choreo-Cd9yKlEK.js +0 -2
  183. package/bundled-test-harness/assets/clip-DnEy6oK5.js +0 -2
  184. package/bundled-test-harness/assets/film-C4NJTl9U.js +0 -2
  185. package/bundled-test-harness/assets/group-CPQojb-T.js +0 -2
  186. package/bundled-test-harness/assets/item-DGzMAZ9K.js +0 -2
  187. package/bundled-test-harness/assets/pill-menu-DaRpDMUm.js +0 -68
  188. package/bundled-test-harness/assets/plate-B7JjCVMj.js +0 -2
  189. package/bundled-test-harness/assets/player-DpGXST02.js +0 -2
  190. package/bundled-test-harness/assets/presence-CmLmFwhO.js +0 -2
  191. package/bundled-test-harness/assets/presence-Sv4y4tQy.js +0 -230
  192. package/bundled-test-harness/assets/realm-api-keys-DkdlXgAg.js +0 -2
  193. package/bundled-test-harness/assets/src-BpmcuCfH.js +0 -10
  194. package/bundled-test-harness/assets/test-support-CB3auo8h.js +0 -2
  195. package/bundled-test-harness/assets/test-support-DfGKwg35.js +0 -3
  196. package/bundled-test-harness/assets/titles-DVhrJZzS.js +0 -2
@@ -20,6 +20,8 @@ export interface LLMOption {
20
20
 
21
21
  interface Signature {
22
22
  Args: {
23
+ /** see PillMenu's `anchorY` */
24
+ anchorY?: 'top' | 'bottom';
23
25
  selected: string;
24
26
  options: LLMOption[];
25
27
  onChange: (selectedLLM: string) => void;
@@ -37,6 +39,7 @@ export default class LLMSelect extends Component<Signature> {
37
39
  <template>
38
40
  <PillMenu
39
41
  class='llm-select'
42
+ @anchorY={{@anchorY}}
40
43
  @onExpand={{@onExpand}}
41
44
  @onCollapse={{@onCollapse}}
42
45
  ...attributes
@@ -32,6 +32,8 @@ const markdownDefRef = {
32
32
  interface Signature {
33
33
  Element: HTMLDivElement | HTMLButtonElement;
34
34
  Args: {
35
+ /** see PillMenu's `anchorY` */
36
+ anchorY?: 'top' | 'bottom';
35
37
  skills: RoomSkill[];
36
38
  onExpand?: () => void;
37
39
  onCollapse?: () => void;
@@ -46,6 +48,7 @@ export default class AiAssistantSkillMenu extends Component<Signature> {
46
48
  <template>
47
49
  <PillMenu
48
50
  class='skill-menu'
51
+ @anchorY={{@anchorY}}
49
52
  @onExpand={{fn this.setExpanded true}}
50
53
  @onCollapse={{fn this.setExpanded false}}
51
54
  title={{if this.isExpanded undefined this.headerText}}
@@ -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
@@ -67,12 +67,14 @@ export default class AddWorkspace extends Component<Signature> {
67
67
  justify-content: center;
68
68
  align-items: center;
69
69
  background-color: transparent;
70
- box-shadow: inset 0 0 0 1px var(--boxel-light-10);
70
+ box-shadow: inset 0 0 0 1px var(--boxel-light-25);
71
71
  color: var(--boxel-light);
72
72
  transition: box-shadow var(--boxel-transition);
73
73
  }
74
- .add-workspace:hover {
75
- box-shadow: inset 0 0 0 1px var(--boxel-light-25);
74
+ @media (hover: hover) {
75
+ .add-workspace:hover {
76
+ box-shadow: inset 0 0 0 1px var(--boxel-light-50);
77
+ }
76
78
  }
77
79
  .add-workspace.is-selected,
78
80
  .add-workspace:focus-visible {
@@ -90,14 +90,12 @@ export default class ArchivedWorkspace extends Component<Signature> {
90
90
  @appearance='outlined'
91
91
  @shape='pill'
92
92
  @size='s'
93
+ @icon={{ArchiveRestoreIcon}}
93
94
  @busy={{this.restoreTask.isRunning}}
94
95
  @busyLabel='Restoring'
95
96
  {{on 'click' (perform this.restoreTask)}}
96
97
  data-test-restore-workspace-btn={{@archivedRealm.url}}
97
- >
98
- <ArchiveRestoreIcon width='14' height='14' aria-hidden='true' />
99
- Restore
100
- </Button>
98
+ >Restore</Button>
101
99
  </div>
102
100
  <style scoped>
103
101
  .archived-row {
@@ -110,7 +108,7 @@ export default class ArchivedWorkspace extends Component<Signature> {
110
108
  padding: var(--boxel-sp-xs);
111
109
  border-radius: var(--dashboard-tile-radius);
112
110
  background-color: var(--dashboard-row-tint);
113
- box-shadow: inset 0 0 0 1px var(--boxel-light-10);
111
+ box-shadow: inset 0 0 0 1px var(--boxel-light-25);
114
112
  color: var(--boxel-light);
115
113
  }
116
114
  .thumb {
@@ -315,7 +315,7 @@ export default class CatalogShelf extends Component<Signature> {
315
315
  @appearance='link'
316
316
  {{on 'click' this.openCatalog}}
317
317
  data-test-catalog-see-all
318
- >See the whole catalog <span aria-hidden='true'>→</span></Button>
318
+ >See the full catalog <span aria-hidden='true'>→</span></Button>
319
319
  </div>
320
320
  {{else if this.isPending}}
321
321
  {{! The stories' metrics with nothing in them. }}
@@ -343,7 +343,7 @@ export default class CatalogShelf extends Component<Signature> {
343
343
  class='see-all is-pending'
344
344
  @tone='neutral'
345
345
  @appearance='link'
346
- >See the whole catalog</Button>
346
+ >See the full catalog</Button>
347
347
  </div>
348
348
  {{/if}}
349
349
 
@@ -383,16 +383,33 @@ export default class CatalogShelf extends Component<Signature> {
383
383
  border-radius: var(--boxel-border-radius-2xl);
384
384
  background-color: var(--_story-paper);
385
385
  color: var(--foreground);
386
+ /* Edged like the workspace tiles, just outside the card so the edge
387
+ reads the same against the dashboard on every paper. */
386
388
  box-shadow:
387
- 0 0 0 1px var(--_story-edge),
389
+ 0 0 0 1px var(--boxel-light-25),
388
390
  var(--shadow-md);
389
- transition: transform var(--boxel-transition);
390
391
  }
391
- @media (hover: hover) and (prefers-reduced-motion: no-preference) {
392
- .story:hover {
393
- transform: translateY(-0.125rem);
392
+ /* The hover ring stands 1px off the resting edge. */
393
+ .story::after {
394
+ content: '';
395
+ position: absolute;
396
+ inset: 0;
397
+ border-radius: inherit;
398
+ outline: 1px solid var(--boxel-light-50);
399
+ outline-offset: 1px;
400
+ opacity: 0;
401
+ transition: opacity var(--boxel-transition);
402
+ pointer-events: none;
403
+ }
404
+ @media (hover: hover) {
405
+ .story:not(.is-pending):hover::after {
406
+ opacity: 1;
394
407
  }
395
408
  }
409
+ /* Keeps the hover ring off the keyboard ring. */
410
+ .story:has(.story-open:focus-visible)::after {
411
+ opacity: 0;
412
+ }
396
413
  /* The story draws the keyboard ring around the whole card. */
397
414
  .story:has(.story-open:focus-visible) {
398
415
  box-shadow: var(--dashboard-ring), var(--shadow-md);
@@ -1037,14 +1037,19 @@ export default class Workspace extends Component<Signature> {
1037
1037
  var(--boxel-sp-xs) var(--boxel-sp-xs);
1038
1038
  border-radius: var(--dashboard-tile-radius);
1039
1039
  background-color: var(--dashboard-row-tint);
1040
- box-shadow: inset 0 0 0 1px var(--boxel-light-10);
1041
- transition: background-color var(--boxel-transition);
1040
+ box-shadow: inset 0 0 0 1px var(--boxel-light-25);
1041
+ transition:
1042
+ background-color var(--boxel-transition),
1043
+ box-shadow var(--boxel-transition);
1042
1044
  }
1043
1045
  .workspace.is-row:has(.host-menu) {
1044
1046
  --_workspace-controls: 3;
1045
1047
  }
1046
- .workspace.is-row:hover {
1047
- background-color: var(--_workspace-row-tint-hover);
1048
+ @media (hover: hover) {
1049
+ .workspace.is-row:hover {
1050
+ background-color: var(--_workspace-row-tint-hover);
1051
+ box-shadow: inset 0 0 0 1px var(--boxel-light-50);
1052
+ }
1048
1053
  }
1049
1054
  /* Over the list's scrim, so a row the cursor rests on is never hidden
1050
1055
  under it; the Show more toggle, later in the page at the same level,
@@ -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) {
@@ -144,7 +144,6 @@ export interface KeyShareUsage {
144
144
  }[];
145
145
  grants: {
146
146
  id: string;
147
- host: string;
148
147
  destination: string;
149
148
  state: 'active' | 'rejected';
150
149
  rejectedAt: string | null;
@@ -78,7 +78,6 @@ export default class GetKeyShareUsageTool extends HostBaseTool<
78
78
  grants: usage.grants.map(
79
79
  (grant) =>
80
80
  new KeyUsageGrantField({
81
- host: grant.host,
82
81
  destination: grant.destination,
83
82
  state: grant.state,
84
83
  rejectedAt: grant.rejectedAt ?? undefined,