peter
fc32188fd2
refactor(chips): share the chip-overflow measure core between the two lanes (S3)
...
ActiveFilterChips (feed applied-filter row) and ChannelTagsControl both
hand-rolled the same single-line chip-fit measurer: a hidden mirror + a
layout-effect + ResizeObserver reading chip right edges, the real rem gap,
the pill width and the lane width. The policy half was already extracted
(decideChipLayout); the DOM-measurement half was still duplicated.
Promote that half to useChipOverflowFit(rowRef, chipsRef, pillRef, deps,
decide, initial): it owns the effect + observer + initial measure and reads
the common geometry, then hands it to each caller's own policy. The feed
row layers its leading label + trailing "Clear all" reservation on top and
keeps decideChipLayout; the tag cell's chips-only policy is extracted as
fitChipsWithPill (pure, unit-tested) alongside it. Add a jsdom test for the
hook (stubbed offsets, re-measure on deps). Behaviour unchanged — verified
in the browser: feed all/count modes + popover, tag "+N" fit + hover reveal.
2026-08-23 23:22:52 +02:00
..
2026-08-23 06:57:33 +02:00
2026-08-23 08:08:34 +02:00
2026-08-23 08:08:34 +02:00
2026-08-18 03:02:34 +02:00
2026-07-11 04:47:08 +02:00
2026-08-23 06:57:33 +02:00
2026-08-15 07:11:50 +02:00
2026-08-15 07:11:50 +02:00
2026-07-20 00:56:47 +02:00
2026-07-21 02:26:40 +02:00
2026-08-23 23:22:52 +02:00
2026-08-23 23:22:52 +02:00
2026-07-19 05:38:42 +02:00
2026-08-13 23:41:12 +02:00
2026-08-13 23:41:12 +02:00
2026-08-22 05:42:30 +02:00
2026-08-22 05:42:30 +02:00
2026-07-21 04:11:19 +02:00
2026-07-27 22:10:03 +02:00
2026-07-23 03:11:35 +02:00
2026-07-11 04:47:08 +02:00
2026-07-21 02:26:40 +02:00
2026-07-21 02:26:40 +02:00
2026-07-20 22:28:09 +02:00
2026-07-21 04:11:19 +02:00
2026-07-30 23:49:29 +02:00
2026-07-02 01:45:16 +02:00
2026-08-06 23:59:53 +02:00
2026-08-23 07:22:53 +02:00
2026-08-20 05:14:12 +02:00
2026-08-23 06:57:33 +02:00
2026-08-23 01:39:29 +02:00
2026-08-23 21:59:58 +02:00
2026-08-23 21:59:58 +02:00
2026-07-21 03:13:26 +02:00
2026-07-21 04:11:19 +02:00
2026-08-20 00:47:09 +02:00
2026-07-21 02:26:40 +02:00
2026-07-27 22:10:03 +02:00
2026-08-21 19:58:19 +02:00
2026-07-03 01:52:58 +02:00
2026-07-21 22:37:42 +02:00
2026-08-18 03:02:34 +02:00
2026-07-27 22:45:30 +02:00
2026-07-27 22:45:30 +02:00
2026-08-22 04:03:58 +02:00
2026-08-20 05:40:59 +02:00
2026-08-20 05:40:59 +02:00
2026-08-19 05:56:20 +02:00
2026-08-13 03:43:02 +02:00
2026-08-13 03:20:01 +02:00
2026-07-20 23:30:49 +02:00
2026-07-21 02:26:40 +02:00
2026-07-21 02:26:40 +02:00
2026-08-21 01:00:11 +02:00
2026-08-21 03:16:40 +02:00
2026-08-17 19:19:03 +02:00
2026-08-12 00:06:21 +02:00
2026-08-17 20:41:13 +02:00
2026-08-17 20:41:13 +02:00
2026-08-17 22:18:07 +02:00
2026-08-14 00:10:13 +02:00
2026-08-19 06:10:48 +02:00
2026-08-23 02:09:14 +02:00
2026-08-23 01:39:29 +02:00
2026-08-18 02:34:45 +02:00
2026-08-23 07:26:43 +02:00
2026-08-23 23:05:24 +02:00
2026-08-23 23:05:24 +02:00
2026-08-13 23:24:59 +02:00
2026-08-23 23:05:24 +02:00
2026-06-26 03:30:19 +02:00
2026-07-14 21:39:53 +02:00
2026-08-22 06:33:48 +02:00
2026-08-22 03:48:23 +02:00
2026-08-14 03:12:50 +02:00
2026-08-14 03:12:50 +02:00
2026-08-22 03:48:23 +02:00
2026-07-21 02:26:40 +02:00
2026-08-11 03:29:08 +02:00
2026-07-30 23:33:50 +02:00
2026-08-23 23:22:52 +02:00
2026-08-23 23:22:52 +02:00
2026-06-29 02:19:18 +02:00
2026-07-30 23:33:50 +02:00
2026-08-14 03:26:30 +02:00
2026-08-14 02:37:28 +02:00
2026-08-11 02:20:52 +02:00
2026-08-15 05:50:11 +02:00
2026-07-27 22:10:03 +02:00
2026-08-20 05:24:11 +02:00
2026-08-20 02:13:49 +02:00
2026-08-21 06:16:15 +02:00
2026-08-21 06:16:15 +02:00
2026-08-14 03:12:50 +02:00
2026-08-14 02:37:28 +02:00
2026-07-21 04:11:19 +02:00
2026-08-20 05:24:11 +02:00
2026-08-20 02:13:49 +02:00
2026-06-26 03:30:19 +02:00
2026-08-02 02:02:31 +02:00
2026-08-11 05:05:50 +02:00