diff --git a/web/src/app.css b/web/src/app.css
index de04d3b6..acaf90b3 100644
--- a/web/src/app.css
+++ b/web/src/app.css
@@ -233,6 +233,32 @@
line-height: 1.25rem;
}
+@utility popover-transition {
+ opacity: 0;
+ scale: 0.98;
+ transition:
+ opacity 120ms ease-out,
+ scale 120ms ease-out,
+ overlay 120ms allow-discrete,
+ display 120ms allow-discrete;
+
+ &:popover-open {
+ opacity: 1;
+ scale: 1;
+ }
+
+ @starting-style {
+ &:popover-open {
+ opacity: 0;
+ scale: 0.98;
+ }
+ }
+
+ @media (prefers-reduced-motion: reduce) {
+ transition: none;
+ }
+}
+
@layer base {
@font-face {
font-family: "InterVariable";
diff --git a/web/src/lib/components/reaction/ReactionPicker.svelte b/web/src/lib/components/reaction/ReactionPicker.svelte
index 360fdaeb..1a45a14a 100644
--- a/web/src/lib/components/reaction/ReactionPicker.svelte
+++ b/web/src/lib/components/reaction/ReactionPicker.svelte
@@ -68,7 +68,7 @@
id={popoverId}
popover="auto"
style={`position-anchor: ${anchorName}`}
- class="inset-auto mt-1 h-fit w-max rounded-sm border border-border-default bg-background-default text-foreground-default shadow-regular [position-area:bottom_center]"
+ class="inset-auto mt-1 h-fit w-max popover-transition rounded-sm border border-border-default bg-background-default text-foreground-default shadow-regular [position-area:bottom_center]"
>
{#each ORDERED_REACTION_KINDS as kind (kind)}
diff --git a/web/src/lib/components/ui/Combobox.svelte b/web/src/lib/components/ui/Combobox.svelte
index 94250ea5..17ae8481 100644
--- a/web/src/lib/components/ui/Combobox.svelte
+++ b/web/src/lib/components/ui/Combobox.svelte
@@ -9,7 +9,7 @@
trigger: "flex min-h-9 cursor-pointer items-center gap-2 px-2.5 py-1",
value: "min-w-0 flex-1 truncate text-left typography-paragraph-regular",
panel:
- "combobox-panel fixed z-50 m-0 hidden max-h-[min(24rem,calc(100dvh-1rem))] w-72 max-w-[calc(100vw-1rem)] flex-col overflow-hidden rounded-sm border border-border-default bg-background-default p-0 text-foreground-default shadow-regular open:flex dark:shadow-none",
+ "combobox-panel fixed z-50 m-0 hidden max-h-[min(24rem,calc(100dvh-1rem))] w-72 max-w-[calc(100vw-1rem)] popover-transition flex-col overflow-hidden rounded-sm border border-border-default bg-background-default p-0 text-foreground-default shadow-regular open:flex dark:shadow-none",
search: "shrink-0 border-b border-border-default p-2",
list: "min-h-0 flex-1 overflow-y-auto p-1",
groupHeading: "px-2 pt-2 pb-1 font-semibold text-foreground-muted first:pt-1",
@@ -357,32 +357,4 @@
position-area: block-end span-inline-start;
}
}
-
- .combobox-panel {
- opacity: 0;
- scale: 0.98;
- transition:
- opacity 120ms ease-out,
- scale 120ms ease-out,
- overlay 120ms allow-discrete,
- display 120ms allow-discrete;
- }
-
- .combobox-panel:popover-open {
- opacity: 1;
- scale: 1;
- }
-
- @starting-style {
- .combobox-panel:popover-open {
- opacity: 0;
- scale: 0.98;
- }
- }
-
- @media (prefers-reduced-motion: reduce) {
- .combobox-panel {
- transition: none;
- }
- }
diff --git a/web/src/lib/components/ui/Dropdown.svelte b/web/src/lib/components/ui/Dropdown.svelte
index d82f6f08..8674d6c1 100644
--- a/web/src/lib/components/ui/Dropdown.svelte
+++ b/web/src/lib/components/ui/Dropdown.svelte
@@ -6,7 +6,7 @@
slots: {
root: "relative inline-block",
plainTrigger: "min-h-0 gap-1 border-0 bg-transparent p-0 text-inherit hover:bg-transparent",
- menu: "dropdown-menu fixed z-50 m-0 max-h-[calc(100dvh-1rem)] w-56 max-w-[calc(100vw-1rem)] divide-y divide-border-default overflow-auto rounded-sm border border-border-default bg-background-default text-foreground-default shadow-regular"
+ menu: "dropdown-menu fixed z-50 m-0 max-h-[calc(100dvh-1rem)] w-56 max-w-[calc(100vw-1rem)] popover-transition divide-y divide-border-default overflow-auto rounded-sm border border-border-default bg-background-default text-foreground-default shadow-regular"
},
variants: {
align: {