merge: upstream Element Call v0.28.0 (cinny #201) #61

Merged
jared merged 197 commits from lotus-upstream-v0.28.0 into lotus 2026-10-24 01:14:32 -04:00
3 changed files with 29 additions and 10 deletions
Showing only changes of commit 3361ce2b60 - Show all commits
+14 -3
View File
@@ -6,15 +6,26 @@ Please see LICENSE in the repository root for full details.
*/
/* The container a host mounts us into. It fills whatever space the host gives
it, and establishes a stacking context of its own so that our overlays and
modals cannot escape it — which is the whole reason for embedding rather than
using an iframe. */
it, and nothing we draw may leave it.
That takes two separate things, which are easy to mistake for one. `isolation`
gives us a stacking context, so nothing inside can be layered above the host's
own interface. Containment makes us the containing block for `position: fixed`
descendants, and clips what we paint to our own box: without it, the modal
scrim and dialog — which are positioned `fixed` and centred, since in the app
they are meant to cover the page — resolve against the viewport and appear in
the middle of the host's window rather than in the middle of the call.
The clipping cuts both ways: a menu near the edge of a small container is
trimmed rather than overflowing into the host. That is the trade being an
embedded component makes. */
.root {
display: flex;
flex-direction: column;
inline-size: 100%;
block-size: 100%;
isolation: isolate;
contain: layout paint;
position: relative;
background-color: var(--cpd-color-bg-canvas-default);
color: var(--cpd-color-text-primary);
+6 -1
View File
@@ -19,7 +19,12 @@
}
div.reactionPopupMenuRoot.reactionPopupMenuModal {
--overlay-top: 82vh;
/* Down near the footer it belongs to, rather than centred like other modals.
A percentage, not a viewport unit: the overlay is positioned `fixed`, so this
resolves against the page in the standalone app and against the container
when a host embeds us — where 82vh would put it below the container
entirely. */
--overlay-top: 82%;
width: fit-content;
}
+9 -6
View File
@@ -3,8 +3,11 @@
display: inline;
z-index: 2;
pointer-events: none;
width: 100vw;
height: 100vh;
/* Percentages, not viewport units: the containing block is the element
Element Call treats as its root, which is the page in the standalone app but
the container a host gave us when embedded. */
width: 100%;
height: 100%;
left: 0;
top: 0;
}
@@ -16,7 +19,7 @@
animation-name: reaction-up;
width: fit-content;
position: relative;
top: 80vh;
top: 80%;
}
@keyframes reaction-up {
@@ -24,7 +27,7 @@
opacity: 1;
translate: 0 0;
scale: 200%;
top: 80vh;
top: 80%;
}
to {
@@ -48,7 +51,7 @@
.reaction {
font-size: 48pt;
animation-name: reaction-up-reduced;
top: calc(-50vh + (48pt / 2));
left: calc(50vw - (48pt / 2)) !important;
top: calc(-50% + (48pt / 2));
left: calc(50% - (48pt / 2)) !important;
}
}