@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.
- package/bundled-realms/pretui/components/chip.gts +47 -2
- package/bundled-realms/pretui/components/chip.md +5 -2
- package/bundled-realms/pretui/components/chip.usage.gts +37 -2
- package/bundled-realms/pretui/components/status-chip.gts +12 -2
- package/bundled-realms/pretui/components/status-chip.md +2 -1
- package/bundled-realms/pretui/components/status-chip.usage.gts +2 -0
- package/bundled-test-harness/assets/{ai-module-creation-test-B9lSKNq1.js → ai-module-creation-test-Czsh1MyP.js} +1 -1
- package/bundled-test-harness/assets/{aibot-message-LXV0UlzI.js → aibot-message-Dg5nzE1b.js} +1 -1
- package/bundled-test-harness/assets/{app-BIQcKrVT.js → app-hXF_bqWy.js} +6 -6
- package/bundled-test-harness/assets/{assistant-transcript-test-CG_2-bog.js → assistant-transcript-test-kILRv_pf.js} +1 -1
- package/bundled-test-harness/assets/{binary-upload-dedupe-test-Q7e6bzl1.js → binary-upload-dedupe-test-Bt5RqtEk.js} +1 -1
- package/bundled-test-harness/assets/{bundled-base-DldokUSJ.js → bundled-base-DtxlKFXx.js} +3 -3
- package/bundled-test-harness/assets/{bundled-base-modules-test-VAlRx4t3.js → bundled-base-modules-test-D1fXHMTE.js} +1 -1
- package/bundled-test-harness/assets/{can-invoke-test-BGmUJHxo.js → can-invoke-test-DqBuecdl.js} +1 -1
- package/bundled-test-harness/assets/{card-chooser-paging-test-CzooKL4I.js → card-chooser-paging-test-Cf8r032c.js} +1 -1
- package/bundled-test-harness/assets/{card-chooser-test-C3fjaDYi.js → card-chooser-test-q_qnUKxi.js} +1 -1
- package/bundled-test-harness/assets/{card-def-field-def-relationships-test-yqv8ir8Y.js → card-def-field-def-relationships-test-C5xkWMZi.js} +1 -1
- package/bundled-test-harness/assets/{card-delete-test-BtjqrqKO.js → card-delete-test-KB4aJuv_.js} +1 -1
- package/bundled-test-harness/assets/{chip-D6Xffhjx.css → chip-B2Ns53A6.css} +35 -9
- package/bundled-test-harness/assets/{chip-BydgljDL.js → chip-DVJE_YDh.js} +11 -3
- package/bundled-test-harness/assets/{choreo-D7dLCdGB.js → choreo-CIrop3HM.js} +16 -35
- package/bundled-test-harness/assets/choreo-Ca2Y2sF3.js +2 -0
- package/bundled-test-harness/assets/{choreo-feature-reel-test--x-L3ZKc.js → choreo-feature-reel-test-CJHms7Sf.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-ZO9vXOxd.js → choreo-gallery-DZm1KZ20.js} +3 -3
- package/bundled-test-harness/assets/{choreo-gallery-build-order-test-DG5UTyc9.js → choreo-gallery-build-order-test-QKyMWELN.js} +4 -4
- package/bundled-test-harness/assets/{choreo-gallery-compositor-test-DJP80SNj.js → choreo-gallery-compositor-test-BQDptxfE.js} +1 -1
- package/bundled-test-harness/assets/{choreo-gallery-cover-test-CHYz7sM4.js → choreo-gallery-cover-test-Do-HYF96.js} +1 -1
- package/bundled-test-harness/assets/{choreo-gallery-crossing-stage-test-BuinlINr.js → choreo-gallery-crossing-stage-test-yJVXghRc.js} +10 -10
- package/bundled-test-harness/assets/{choreo-gallery-demos-alive-test-BjNCGfH9.js → choreo-gallery-demos-alive-test-BCeaaZye.js} +1 -1
- package/bundled-test-harness/assets/{choreo-gallery-drift-test-BJ17f3yv.js → choreo-gallery-drift-test-CJ1yq6R0.js} +1 -1
- package/bundled-test-harness/assets/{choreo-gallery-escort-test-Dadih8-S.js → choreo-gallery-escort-test-DypqSgvs.js} +1 -1
- package/bundled-test-harness/assets/{choreo-gallery-films-test-CCXty_WI.js → choreo-gallery-films-test-ClMy5M_p.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-filter-test-BozCoT_M.js → choreo-gallery-filter-test-CzOmgqgl.js} +1 -1
- package/bundled-test-harness/assets/{choreo-gallery-fold-test-Kez2P3_Y.js → choreo-gallery-fold-test-qNnH6wtC.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-guide-pages-test-BV5oxrYA.js → choreo-gallery-guide-pages-test-BtKWMkTv.js} +1 -1
- package/bundled-test-harness/assets/{choreo-gallery-guides-test-DwYBDgKi.js → choreo-gallery-guides-test-CXMsuDYi.js} +4 -3
- package/bundled-test-harness/assets/{choreo-gallery-hang-test-B-5u7cGJ.js → choreo-gallery-hang-test-BD4JQ04e.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-highlight-test-BZ5Lg8V6.js → choreo-gallery-highlight-test-BK280K2W.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-inline-edit-test-wSlSI-VM.js → choreo-gallery-inline-edit-test-DAgUcaaw.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-interruption-test-DBpCEiro.js → choreo-gallery-interruption-test-DY5KUilC.js} +4 -4
- package/bundled-test-harness/assets/{choreo-gallery-lone-stack-test-aMLrHsns.js → choreo-gallery-lone-stack-test-Dxd_Nb0-.js} +4 -4
- package/bundled-test-harness/assets/{choreo-gallery-navigation-test-B8b-2ZTz.js → choreo-gallery-navigation-test-DWJq12PN.js} +1 -1
- package/bundled-test-harness/assets/{choreo-gallery-playhead-transport-test-B95CYBh7.js → choreo-gallery-playhead-transport-test-DlQ6yTKW.js} +1 -1
- package/bundled-test-harness/assets/{choreo-gallery-poplayout-subtree-test-jZAAICV6.js → choreo-gallery-poplayout-subtree-test-D59W8gYt.js} +5 -5
- package/bundled-test-harness/assets/{choreo-gallery-presence-modes-test-BawIKB-a.js → choreo-gallery-presence-modes-test-BAU-dggP.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-presentation-test-CYIb-8ML.js → choreo-gallery-presentation-test-BqGsinE0.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-reduced-motion-test-C6Vi1WYr.js → choreo-gallery-reduced-motion-test-By0rb2Ai.js} +4 -3
- package/bundled-test-harness/assets/{choreo-gallery-sheet-standalone-test-_e4T5KDI.js → choreo-gallery-sheet-standalone-test-Cfw-4ULF.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-sheet-test-Cv51Te3G.js → choreo-gallery-sheet-test-dm53Pdzb.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-site-test-Cm35kHu_.js → choreo-gallery-site-test-SAlqtZgL.js} +3 -2
- package/bundled-test-harness/assets/{choreo-gallery-stage-Bp6QVqlI.js → choreo-gallery-stage-CU8LvQqX.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-stage-keyboard-test-DDX2cuMa.js → choreo-gallery-stage-keyboard-test-DQ4v5qA4.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-stages-test-Dfa_33_4.js → choreo-gallery-stages-test-CRvaS6w6.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-subdivision-test-CgR3WdcT.js → choreo-gallery-subdivision-test-CtOm-U35.js} +3 -3
- package/bundled-test-harness/assets/{choreo-gallery-table-plan-test-DF-cE3J9.js → choreo-gallery-table-plan-test-_0koIm2u.js} +1 -1
- package/bundled-test-harness/assets/{choreo-gallery-theater-test-BuIyb2ke.js → choreo-gallery-theater-test-yedwQVyP.js} +4 -4
- package/bundled-test-harness/assets/{choreo-gallery-tuning-test-BdZ45YBK.js → choreo-gallery-tuning-test-CmMtfJ5a.js} +1 -1
- package/bundled-test-harness/assets/{choreo-gallery-widget-room-test-HcPX75Dg.js → choreo-gallery-widget-room-test-jnYOas5x.js} +2 -2
- package/bundled-test-harness/assets/{choreo-gallery-wires-test-BhFCIjB1.js → choreo-gallery-wires-test-CSyqjVnm.js} +2 -2
- package/bundled-test-harness/assets/clip--wioup_3.js +2 -0
- package/bundled-test-harness/assets/{clip-BmBVqUyU.js → clip-Cm32sLyn.js} +3 -3
- package/bundled-test-harness/assets/{codeblocks-test-DbZYlmG_.js → codeblocks-test-DLVRpBAl.js} +1 -1
- package/bundled-test-harness/assets/{compaction-test-D1G3KCSe.js → compaction-test-zX01t57K.js} +1 -1
- package/bundled-test-harness/assets/{container-XSX5809v.js → container-CXZoEvul.js} +10 -9
- package/bundled-test-harness/assets/{create-listing-modal-test--oGT9P_F.js → create-listing-modal-test-DPgVovcL.js} +1 -1
- package/bundled-test-harness/assets/{debug-message-test-C8UZUtCt.js → debug-message-test-CWl-ido2.js} +1 -1
- package/bundled-test-harness/assets/{externals--YMzwHwd.js → externals-Ddhtv753.js} +37 -37
- package/bundled-test-harness/assets/{fallback-banner-live-delete-test-DPK_coJY.js → fallback-banner-live-delete-test-CFbMEFHo.js} +1 -1
- package/bundled-test-harness/assets/{fallback-banner-test-C2wi6Lu6.js → fallback-banner-test-3O0imkxJ.js} +1 -1
- package/bundled-test-harness/assets/{fallback-models-test-SqdXWB1Z.js → fallback-models-test-hyQfQLuM.js} +1 -1
- package/bundled-test-harness/assets/{file-attachment-test-DT0HK6yS.js → file-attachment-test-C63Ttyaj.js} +1 -1
- package/bundled-test-harness/assets/{film-Zt2YoVoG.js → film-9V69qBWw.js} +6 -6
- package/bundled-test-harness/assets/{film-77OfTGL7.js → film-Z87hSVo_.js} +8 -8
- package/bundled-test-harness/assets/film-h1N8vUjG.js +2 -0
- package/bundled-test-harness/assets/{formatted-aibot-message-test-B6i0k9wW.js → formatted-aibot-message-test-DH3WPvU1.js} +1 -1
- package/bundled-test-harness/assets/{general-test-C0Xb2Idr.js → general-test-wrSeNkrm.js} +1 -1
- 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
- package/bundled-test-harness/assets/{glimmer-motion-and-choreo-test-B2ustNm9.js → glimmer-motion-and-choreo-test-BM7uX8k4.js} +10 -10
- package/bundled-test-harness/assets/group-Cgg5RLul.js +2 -0
- package/bundled-test-harness/assets/{group-BNxp6qON.js → group-DL-b_Hzj.js} +2 -2
- package/bundled-test-harness/assets/{index-query-engine-test-BKOqgBMv.js → index-query-engine-test-DvfKgn6s.js} +1 -1
- package/bundled-test-harness/assets/{instance-filter-matcher-test-CNIzKZvP.js → instance-filter-matcher-test-KqGi-K79.js} +1 -1
- package/bundled-test-harness/assets/item-Bu9hhPf2.js +2 -0
- package/bundled-test-harness/assets/{item-BDyVqxdA.js → item-CBEoTOyj.js} +2 -2
- package/bundled-test-harness/assets/{main-BiI-FhMc.js → main-CoUo04VF.js} +1 -1
- package/bundled-test-harness/assets/{markdown-preview-BItI_AEl.js → markdown-preview-D_QssEOi.js} +1 -1
- package/bundled-test-harness/assets/{markdown-preview-test-Bntyikh1.js → markdown-preview-test-nljzB8o_.js} +1 -1
- package/bundled-test-harness/assets/memory-B73-H_Rp.js +223 -0
- package/bundled-test-harness/assets/{model-cost-tier-test-Hu2-LpEw.js → model-cost-tier-test-B5ByLtAP.js} +1 -1
- package/bundled-test-harness/assets/{motion-DeM7UCtd.js → motion-BiMvMS08.js} +1 -1
- package/bundled-test-harness/assets/{node-BAM535H5.js → node-BWOLCOMI.js} +95 -6
- package/bundled-test-harness/assets/{operation-lowering-test-CG1gatuH.js → operation-lowering-test-Bz81V0Gt.js} +1 -1
- package/bundled-test-harness/assets/{operator-mode-card-chooser-test-Bo5ZnF_x.js → operator-mode-card-chooser-test-DNOnplV8.js} +1 -1
- package/bundled-test-harness/assets/{operator-mode-links-test-DVx_LQOU.js → operator-mode-links-test-BeXsOYMU.js} +1 -1
- package/bundled-test-harness/assets/{operator-mode-test-CCbFrYgN.js → operator-mode-test-jdeCXqhV.js} +1 -1
- package/bundled-test-harness/assets/{operator-mode-ui-test-Dm2Bf6Vn.js → operator-mode-ui-test-DdiFZylM.js} +1 -1
- package/bundled-test-harness/assets/{overlay-menu-items-test-Bk5AidFD.js → overlay-menu-items-test-C_Q4sJlC.js} +1 -1
- package/bundled-test-harness/assets/{overlays-CY7IgeOl.js → overlays-DZXjQykn.js} +3 -3
- package/bundled-test-harness/assets/{overlays-DhVKmSP-.js → overlays-hrAO43jG.js} +1 -1
- package/bundled-test-harness/assets/{panel-t9QyU1lY.js → panel-CXmB6GMs.js} +15 -75
- package/bundled-test-harness/assets/{panel-CUYJ8oHS.css → panel-D2zkZoIr.css} +39 -31
- package/bundled-test-harness/assets/{past-sessions-test-Dq-Y9T6W.js → past-sessions-test-Bm1UiLD0.js} +1 -1
- package/bundled-test-harness/assets/{permission-checking-realm-test-CuImx8ie.js → permission-checking-realm-test-Jq7R-yRT.js} +1 -1
- package/bundled-test-harness/assets/pill-menu-Ctn3JNqG.js +154 -0
- package/bundled-test-harness/assets/{pill-menu-test-kpWBGrX5.js → pill-menu-test-Cf2xO2w6.js} +1 -1
- package/bundled-test-harness/assets/plate-CnatwP3n.js +2 -0
- package/bundled-test-harness/assets/{plate-B4Lz2Ulo.js → plate-Cu5EnXQZ.js} +3 -3
- package/bundled-test-harness/assets/player-Bwn5tEsh.js +2 -0
- package/bundled-test-harness/assets/{player-B965XH82.js → player-CVdsx7Ng.js} +3 -3
- package/bundled-test-harness/assets/presence-BKkR2au7.js +553 -0
- package/bundled-test-harness/assets/presence-CcEXVges.js +2 -0
- package/bundled-test-harness/assets/{quick-look-test-VW5_W7dm.js → quick-look-test-BrnxRRsq.js} +1 -1
- package/bundled-test-harness/assets/{realm-api-keys-sg--fohv.js → realm-api-keys-CHPnfcko.js} +1 -1
- package/bundled-test-harness/assets/realm-api-keys-GLBmvu4U.js +2 -0
- package/bundled-test-harness/assets/{realm-api-keys-test-Cy7qSoAd.js → realm-api-keys-test-CHBGOFcx.js} +1 -1
- package/bundled-test-harness/assets/{realm-config-DvpP1xf-.js → realm-config-C7c3B2er.js} +1 -1
- package/bundled-test-harness/assets/{realm-config-policy-standing-test-DJk-ftgH.js → realm-config-policy-standing-test-C8aNeb6_.js} +1 -1
- package/bundled-test-harness/assets/{realm-config-routing-rule-edit-test-CTPiJrAL.js → realm-config-routing-rule-edit-test-Dmnw-VQz.js} +1 -1
- package/bundled-test-harness/assets/{realm-config-settings-test-CUa-PjMC.js → realm-config-settings-test-C6V0Mx35.js} +1 -1
- package/bundled-test-harness/assets/{reasoning-test-CeeGGwvf.js → reasoning-test-Dn0Xb42V.js} +1 -1
- package/bundled-test-harness/assets/{rendered-markdown-B8TH0yN4.js → rendered-markdown-DPEXS7MQ.js} +1 -1
- package/bundled-test-harness/assets/{rendered-markdown-test-CBRsIBqW.js → rendered-markdown-test-DxbJ1nFX.js} +1 -1
- package/bundled-test-harness/assets/{room-message-test-BTxZ_W74.js → room-message-test-BBE8UIPX.js} +1 -1
- package/bundled-test-harness/assets/{run-BSEzn_PH.js → run-CfyzhBXb.js} +2 -2
- package/bundled-test-harness/assets/{scrolling-test-C7R0UASi.js → scrolling-test-sLBz7Gxv.js} +2 -2
- package/bundled-test-harness/assets/{searchable-option-test-BiOqxIIs.js → searchable-option-test-Ix9_H5QV.js} +1 -1
- package/bundled-test-harness/assets/{sending-test-DOXQ0Tvx.js → sending-test-_Pqzq1bN.js} +1 -1
- package/bundled-test-harness/assets/{skills-test-BjCYI4Z_.js → skills-test-DUHRQGiC.js} +1 -1
- package/bundled-test-harness/assets/src-CEw1V0fi.js +11 -0
- package/bundled-test-harness/assets/{src-Bhefkhqj.js → src-CbBcj3xm.js} +11 -5
- package/bundled-test-harness/assets/{src-BDDYD1rs.js → src-D8bpj2tb.js} +2 -2
- package/bundled-test-harness/assets/{src-DySBAkac.js → src-Df4Vutrk.js} +3 -3
- package/bundled-test-harness/assets/{stick-to-bottom-resize-test-hN0AjdXP.js → stick-to-bottom-resize-test-Du4B3w2x.js} +4 -4
- package/bundled-test-harness/assets/{store-test-BD99H9dQ.js → store-test-9C-s0-H6.js} +1 -1
- package/bundled-test-harness/assets/{test-support-BcjhIHQa.js → test-support-BOFeeYuE.js} +25 -2
- package/bundled-test-harness/assets/test-support-CXESl4Wf.js +3 -0
- package/bundled-test-harness/assets/test-support-CgWmpebE.js +3 -0
- package/bundled-test-harness/assets/{test-support-Dl6FChlV.js → test-support-xTaMuaOA.js} +4 -27
- package/bundled-test-harness/assets/{tests-BqLDuQog.js → tests-CVpu0hZj.js} +437 -437
- package/bundled-test-harness/assets/{text-input-validator-test-CW6Ay7bo.js → text-input-validator-test-CcVh-MFa.js} +1 -1
- package/bundled-test-harness/assets/{titles-CFt3dEls.js → titles-BUbpcMoe.js} +3 -3
- package/bundled-test-harness/assets/titles-D80DwOQU.js +2 -0
- package/bundled-test-harness/assets/{to-device-streaming-test-DRxNCi7Z.js → to-device-streaming-test-RFHD62PN.js} +1 -1
- package/bundled-test-harness/assets/{token-usage-test-Ck9rB3Ie.js → token-usage-test-B2iJC-UX.js} +1 -1
- package/bundled-test-harness/assets/{tools-test-B3zniq10.js → tools-test-BZOWfXML.js} +1 -1
- package/bundled-test-harness/assets/{turn-settling-test-C0X6hL7x.js → turn-settling-test-Cvu2rvzM.js} +1 -1
- package/bundled-test-harness/assets/{turn-summary-0XOoAv3j.js → turn-summary-CAZVdcBd.js} +1 -1
- package/bundled-test-harness/index.html +26 -25
- package/bundled-test-harness/tests/index.html +26 -25
- package/bundled-types/choreo/choreo.gts +21 -42
- package/bundled-types/choreo/test-support/index.ts +9 -30
- package/bundled-types/glimmer-motion/index.ts +11 -3
- package/bundled-types/glimmer-motion/memory.ts +302 -0
- package/bundled-types/glimmer-motion/node.ts +125 -14
- package/bundled-types/glimmer-motion/presence-types.ts +13 -5
- package/bundled-types/glimmer-motion/presence.gts +199 -11
- package/bundled-types/glimmer-motion/snapshot.ts +280 -0
- package/bundled-types/glimmer-motion/test-support/index.ts +36 -4
- package/bundled-types/host-app/components/ai-assistant/llm-select.gts +3 -0
- package/bundled-types/host-app/components/ai-assistant/skill-menu/index.gts +3 -0
- package/bundled-types/host-app/components/matrix/room.gts +15 -3
- package/bundled-types/host-app/components/pill-menu/index.gts +74 -23
- package/package.json +1 -1
- package/bundled-test-harness/assets/choreo-Cd9yKlEK.js +0 -2
- package/bundled-test-harness/assets/clip-DnEy6oK5.js +0 -2
- package/bundled-test-harness/assets/film-C4NJTl9U.js +0 -2
- package/bundled-test-harness/assets/group-CPQojb-T.js +0 -2
- package/bundled-test-harness/assets/item-DGzMAZ9K.js +0 -2
- package/bundled-test-harness/assets/pill-menu-DaRpDMUm.js +0 -68
- package/bundled-test-harness/assets/plate-B7JjCVMj.js +0 -2
- package/bundled-test-harness/assets/player-DpGXST02.js +0 -2
- package/bundled-test-harness/assets/presence-CmLmFwhO.js +0 -2
- package/bundled-test-harness/assets/presence-Sv4y4tQy.js +0 -230
- package/bundled-test-harness/assets/realm-api-keys-DkdlXgAg.js +0 -2
- package/bundled-test-harness/assets/src-BpmcuCfH.js +0 -10
- package/bundled-test-harness/assets/test-support-CB3auo8h.js +0 -2
- package/bundled-test-harness/assets/test-support-DfGKwg35.js +0 -3
- 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
|
-
|
|
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(
|
|
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(
|
|
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
|
|
40
|
-
*
|
|
41
|
-
* already moved on
|
|
42
|
-
* re-render as the collapsed face, and
|
|
43
|
-
*
|
|
44
|
-
*
|
|
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
|
-
{{#
|
|
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
|
-
|
|
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,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,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,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,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 };
|