diff --git a/README.md b/README.md index cd1fe6b..d0b48c0 100644 --- a/README.md +++ b/README.md @@ -1513,6 +1513,22 @@ Things I chose while building, with the reasoning: into view as you type. No strings, so no i18n; the additive change sits on top of the merged scene-heat rework unchanged. +111. **The model dropdown was clipped by the card it lived in.** "The model selection in teach it + back is kinda broken at least on desktop": the pickers' desktop panels were + `position: absolute` children of whatever container held their chip. In chat that is the + composer at the bottom of the column (open upwards, nothing clips it), but Teach it back puts + its chips inside a scrolling form card — so the panel opened upward, out of the card, and its + first rows (the selected model among them) were cut off by the viewport: the probe measured + `top: -66px`, and the list could not be reached by scrolling the inner list. Both pickers now + hand the desktop surface to `PickerPopover`: portalled to `
`, `position: fixed`, anchored + to the trigger that opened it (`[data-picker-trigger][aria-expanded="true"]`), opening on the + side with room and capped to the viewport, so the panel scrolls as a whole and always keeps its + heading and note attached to the chip. It closes on an outside press, Escape, a resize or a + page scroll (not on scrolling its own list), and the phone sheets are untouched. Pinned by the + teach suite: the panel's rect sits fully inside the viewport, `elementFromPoint` over it hits + the panel, it is not a descendant of the scrolling card, and picking a model updates the chip + and `freezmo.chat.model.v1` (46 checks). + 110. **The reminder is written by the browser, because the notes never leave it.** Push reminders used to say one generic line to everyone, and the server had no way to do better: it only knows push endpoints, never a deck. So the notification text is now composed on the device diff --git a/components/chat/ContextPicker.tsx b/components/chat/ContextPicker.tsx index dd443a0..e2dd49c 100644 --- a/components/chat/ContextPicker.tsx +++ b/components/chat/ContextPicker.tsx @@ -1,9 +1,10 @@ "use client"; -import { useEffect, useRef } from "react"; +import { useEffect } from "react"; import { AnimatePresence, motion } from "framer-motion"; import { useAppReducedMotion as useReducedMotion } from "@/lib/motion-pref"; +import { PickerPopover } from "./PickerPopover"; import { CheckCircleIcon, FolderIcon, LayersIcon } from "@/components/icons"; import { useI18n } from "@/lib/i18n"; import { springSheet } from "@/lib/motion"; @@ -35,7 +36,6 @@ export function ContextPicker({ const { t, plural } = useI18n(); const isPhone = useIsPhone(); const reduceMotion = useReducedMotion(); - const panel = useRef{t("chat.scope.note")}
{t("chat.scope.note")}
-{t("chat.scope.note")}
+{t("chat.modelNote")}
{t("chat.modelNote")}
-{t("chat.modelNote")}
+