Marc-André Bombeck
3a241dbe35
feat(ui): extract <Textarea> primitive with iOS-zoom + WCAG defences
...
Six textarea call-sites had been copy-pasting the same className with
the text-base sm:text-sm iOS-zoom defence; the audit flagged it as a
drift risk. New shadcn-style primitive in src/components/ui/textarea.tsx
mirrors <Input>'s shape and bakes in the defence, the WCAG 2.5.5 tap-
target floor (min-h-11 sm:min-h-9), autoCapitalize="sentences" /
spellCheck defaults for prose, and the autoComplete="off" + password-
manager ignore posture from <Input>.
Migrates four call-sites onto the primitive (bugreport, medications
JSON import, side-effect notes, admin feedback note) — saves ~16 LOC
of inline copy-paste and ~850 chars of repeated className strings.
The coach-input textarea stays as-is: it's an auto-grow composer with
a transparent bg wrapped in an outer "fake input" div, so migrating
would require nullifying nearly every primitive default.
11 new unit tests lock the contract (iOS zoom class, tap-target floor,
forwardRef sentinel, override semantics, attribute pass-through).
2026-05-22 08:54:49 +02:00
..
2026-05-18 00:07:48 +02:00
2026-05-21 17:14:01 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 14:19:57 +02:00
2026-05-11 02:44:12 +02:00
2026-05-12 22:45:42 +02:00
2026-05-16 13:20:49 +02:00
2026-05-10 12:51:33 +02:00
2026-05-09 16:06:52 +02:00
2026-05-09 16:08:20 +02:00
2026-05-09 18:08:25 +02:00
2026-05-09 18:08:25 +02:00
2026-05-09 17:02:59 +02:00
2026-05-09 18:08:25 +02:00
2026-05-09 18:08:25 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 13:02:39 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 13:12:11 +02:00
2026-05-10 13:15:14 +02:00
2026-05-11 08:27:51 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 13:00:11 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-10 13:16:19 +02:00
2026-05-10 11:09:41 +02:00
2026-05-11 08:27:51 +02:00
2026-05-10 14:01:38 +02:00
2026-05-10 11:09:41 +02:00
2026-05-11 08:27:51 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-10 17:24:59 +02:00
2026-05-11 08:27:51 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 00:29:22 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-11 08:27:51 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-10 11:09:41 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-10 11:09:41 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-10 18:17:55 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-10 14:55:27 +02:00
2026-05-10 15:17:03 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-11 08:27:51 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 19:31:20 +02:00
2026-05-21 19:06:22 +02:00
2026-05-11 08:28:02 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:28:02 +02:00
2026-05-11 08:27:51 +02:00
2026-05-22 08:54:49 +02:00
2026-05-11 08:27:51 +02:00
2026-05-14 23:49:32 +02:00
2026-05-17 15:36:38 +02:00
2026-05-21 18:52:41 +02:00
2026-05-21 19:04:22 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-14 23:49:32 +02:00
2026-05-17 15:36:38 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-21 18:55:14 +02:00
2026-05-21 21:45:46 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-14 23:49:32 +02:00
2026-05-17 15:36:38 +02:00
2026-05-17 15:36:38 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-21 18:55:53 +02:00
2026-05-11 08:28:02 +02:00
2026-05-11 08:28:02 +02:00
2026-05-11 08:28:02 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:28:02 +02:00
2026-05-11 08:28:02 +02:00
2026-05-11 08:28:02 +02:00
2026-05-11 08:27:51 +02:00
2026-05-14 23:49:32 +02:00
2026-05-17 15:36:38 +02:00
2026-05-14 23:49:32 +02:00
2026-05-11 08:28:02 +02:00
2026-05-11 08:28:02 +02:00
2026-05-11 08:28:02 +02:00
2026-05-12 22:33:35 +02:00
2026-05-11 08:28:02 +02:00
2026-05-11 08:28:02 +02:00
2026-05-11 08:28:02 +02:00
2026-05-14 23:49:32 +02:00
2026-05-17 15:36:38 +02:00
2026-05-21 19:01:15 +02:00
2026-05-21 22:37:10 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-21 21:46:12 +02:00
2026-05-17 15:36:38 +02:00
2026-05-14 23:49:32 +02:00
2026-05-17 15:36:38 +02:00
2026-05-17 15:36:38 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-21 21:46:12 +02:00
2026-05-14 23:49:32 +02:00
2026-05-17 15:36:38 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-17 15:36:38 +02:00
2026-05-14 23:49:32 +02:00
2026-05-17 15:36:38 +02:00
2026-05-17 15:36:38 +02:00
2026-05-17 15:36:38 +02:00
2026-05-17 15:36:38 +02:00
2026-05-17 15:36:38 +02:00
2026-05-17 15:36:38 +02:00
2026-05-17 15:36:38 +02:00
2026-05-21 22:09:12 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-21 22:32:02 +02:00
2026-05-21 22:19:57 +02:00
2026-05-21 22:19:29 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-17 19:03:04 +02:00
2026-05-21 11:38:58 +02:00
2026-05-21 11:45:47 +02:00
2026-05-17 17:34:16 +02:00
2026-05-17 19:03:04 +02:00
2026-05-17 15:36:38 +02:00
2026-05-21 12:19:45 +02:00
2026-05-17 17:21:25 +02:00
2026-05-21 11:52:29 +02:00
2026-05-17 17:42:06 +02:00
2026-05-17 19:03:04 +02:00
2026-05-21 17:17:13 +02:00
2026-05-21 12:14:22 +02:00
2026-05-21 12:27:49 +02:00
2026-05-21 12:19:45 +02:00
2026-05-21 17:13:49 +02:00
2026-05-18 12:32:01 +02:00
2026-05-18 12:30:33 +02:00
2026-05-21 17:17:13 +02:00
2026-05-21 12:19:45 +02:00
2026-05-21 12:19:45 +02:00
2026-05-21 17:16:04 +02:00
2026-05-17 19:03:04 +02:00
2026-05-17 19:03:04 +02:00
2026-05-17 19:03:04 +02:00
2026-05-17 19:03:04 +02:00
2026-05-17 19:03:04 +02:00
2026-05-21 18:18:53 +02:00
2026-05-21 11:52:50 +02:00
2026-05-21 17:52:01 +02:00
2026-05-18 12:22:11 +02:00
2026-05-18 12:23:31 +02:00
2026-05-18 12:32:34 +02:00
2026-05-21 12:07:24 +02:00
2026-05-10 11:09:41 +02:00
2026-05-09 01:22:09 +02:00
2026-05-16 12:37:55 +02:00
2026-05-14 23:49:32 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-16 09:28:40 +02:00
2026-05-16 09:28:40 +02:00
2026-05-16 09:28:40 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-16 09:28:40 +02:00
2026-05-16 09:28:40 +02:00
2026-05-16 09:28:40 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-16 09:28:40 +02:00
2026-05-16 09:28:40 +02:00
2026-05-16 09:28:40 +02:00
2026-05-16 10:59:42 +02:00
2026-05-17 00:39:58 +02:00
2026-05-17 00:39:58 +02:00
2026-05-17 00:39:58 +02:00
2026-05-21 13:00:03 +02:00
2026-05-17 00:39:58 +02:00
2026-05-17 00:39:58 +02:00
2026-05-17 00:39:58 +02:00
2026-05-17 00:39:58 +02:00
2026-05-17 00:39:58 +02:00
2026-05-16 14:19:57 +02:00
2026-05-16 12:37:55 +02:00
2026-05-16 14:19:57 +02:00
2026-05-16 16:04:21 +02:00
2026-05-16 16:04:21 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 22:26:59 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 21:25:26 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-16 19:46:43 +02:00
2026-05-17 00:06:18 +02:00
2026-05-16 22:26:59 +02:00
2026-05-16 21:25:26 +02:00
2026-05-16 21:25:26 +02:00
2026-05-16 21:25:26 +02:00
2026-05-16 22:26:59 +02:00
2026-05-16 22:26:59 +02:00
2026-05-16 21:25:26 +02:00
2026-05-16 21:25:26 +02:00
2026-05-16 21:25:26 +02:00
2026-05-16 22:26:59 +02:00
2026-05-16 21:25:26 +02:00
2026-05-16 22:26:59 +02:00
2026-05-17 09:55:33 +02:00
2026-05-17 13:22:51 +02:00
2026-05-17 15:36:38 +02:00
2026-05-17 13:22:51 +02:00
2026-05-17 15:36:38 +02:00
2026-05-17 15:36:38 +02:00
2026-05-17 16:37:51 +02:00
2026-05-17 15:36:38 +02:00
2026-05-17 17:07:12 +02:00
2026-05-18 12:10:02 +02:00
2026-05-17 19:18:56 +02:00
2026-05-21 11:19:57 +02:00
2026-05-21 11:19:57 +02:00
2026-05-21 11:19:57 +02:00
2026-05-21 11:19:57 +02:00
2026-05-17 19:03:04 +02:00
2026-05-21 11:19:57 +02:00
2026-05-21 07:50:32 +02:00
2026-05-18 13:00:01 +02:00
2026-05-18 13:00:01 +02:00
2026-05-18 13:00:01 +02:00
2026-05-18 13:00:01 +02:00
2026-05-18 13:00:01 +02:00
2026-05-18 13:00:01 +02:00
2026-05-18 13:00:01 +02:00
2026-05-21 13:00:03 +02:00
2026-05-21 13:00:03 +02:00
2026-05-21 13:00:03 +02:00
2026-05-21 13:00:03 +02:00
2026-05-21 13:00:03 +02:00
2026-05-21 13:00:03 +02:00
2026-05-21 13:00:03 +02:00
2026-05-21 18:42:55 +02:00
2026-05-21 18:42:55 +02:00
2026-05-21 18:42:55 +02:00
2026-05-21 18:42:55 +02:00
2026-05-21 18:42:55 +02:00
2026-05-21 18:42:55 +02:00
2026-05-21 19:31:04 +02:00
2026-05-21 19:31:04 +02:00
2026-05-21 19:31:04 +02:00
2026-05-21 19:31:04 +02:00
2026-05-21 19:31:04 +02:00
2026-05-21 19:31:04 +02:00
2026-05-21 22:05:05 +02:00
2026-05-21 22:05:05 +02:00
2026-05-21 22:05:05 +02:00
2026-05-21 22:05:05 +02:00
2026-05-21 23:06:20 +02:00
2026-05-21 23:06:20 +02:00
2026-05-21 23:06:20 +02:00
2026-05-21 23:06:20 +02:00
2026-05-21 23:06:20 +02:00
2026-05-21 23:06:20 +02:00
2026-05-21 17:13:49 +02:00
2026-05-21 17:13:49 +02:00
2026-05-14 23:49:32 +02:00
2026-05-15 22:59:10 +02:00
2026-05-12 22:45:42 +02:00
2026-05-16 21:25:26 +02:00
2026-05-09 17:57:30 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 11:09:41 +02:00
2026-05-10 13:12:11 +02:00
2026-05-10 11:10:59 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-11 08:27:51 +02:00
2026-05-12 22:33:35 +02:00
2026-05-15 22:59:10 +02:00
2026-05-14 23:49:32 +02:00
2026-05-14 23:49:32 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-15 22:59:10 +02:00
2026-05-16 03:17:00 +02:00
2026-05-16 03:17:00 +02:00
2026-05-16 09:28:40 +02:00
2026-05-21 17:17:53 +02:00
2026-05-21 21:26:28 +02:00