rocky
cfe14f67d4
perf(keyboard): track KeyboardState per property with @Observable
...
- KeyboardState moves from ObservableObject/@Published to @Observable, so a view re-renders only for the properties it reads. Previously unpublished state and injected action hooks are @ObservationIgnored.
- KeyboardViewController replaces the $phase/$surface Combine sinks with Observations loops tied to the same cancellables.
- AIKeyboardView reads the 200 ms mic level and live ASR partials in small child views (AssistantWaveform, LiveTranscriptReader), so those ticks no longer rebuild the whole assistant surface.
- Tests observe changes with withObservationTracking instead of Combine publishers.
2026-10-21 06:12:21 +02:00
..
2026-09-25 12:14:29 +08:00
2026-08-22 16:33:18 +08:00
2026-07-10 12:39:41 +08:00
2026-07-26 12:34:43 +08:00
2026-08-20 11:43:21 +08:00
2026-08-20 11:43:21 +08:00
2026-09-18 17:31:29 -07:00
2026-09-18 17:31:29 -07:00
2026-09-27 19:25:53 +08:00
2026-09-18 17:31:29 -07:00
2026-08-14 18:22:41 +08:00
2026-08-20 11:43:21 +08:00
2026-08-23 20:26:34 +08:00
2026-08-23 20:26:34 +08:00
2026-08-23 20:26:34 +08:00
2026-08-22 16:33:18 +08:00
2026-08-20 11:43:21 +08:00
2026-08-13 23:01:43 +08:00
2026-08-20 11:43:21 +08:00
2026-08-23 14:02:33 +08:00
2026-08-29 11:51:21 +08:00
2026-08-13 23:01:43 +08:00
2026-08-20 11:43:21 +08:00
2026-08-29 11:51:21 +08:00
2026-08-20 11:43:21 +08:00
2026-09-25 12:14:29 +08:00
2026-09-18 17:31:29 -07:00
2026-08-15 09:07:15 +08:00
2026-09-25 12:14:29 +08:00
2026-09-25 12:14:29 +08:00
2026-09-18 17:31:29 -07:00
2026-09-25 12:14:29 +08:00
2026-08-27 18:01:46 +08:00
2026-09-18 17:31:29 -07:00
2026-08-20 11:43:21 +08:00
2026-08-11 01:06:27 +08:00
2026-08-13 01:00:51 +08:00
2026-08-10 13:50:50 +08:00
2026-08-13 01:00:51 +08:00
2026-08-10 13:50:50 +08:00
2026-09-18 17:31:29 -07:00
2026-09-18 17:31:29 -07:00
2026-08-13 15:47:32 +08:00
2026-08-13 01:00:51 +08:00
2026-09-18 17:31:29 -07:00
2026-09-18 17:31:29 -07:00
2026-08-07 11:32:31 +08:00
2026-08-10 13:50:50 +08:00
2026-10-20 20:06:36 +02:00
2026-09-18 17:31:29 -07:00
2026-08-10 13:50:50 +08:00
2026-09-18 17:31:29 -07:00
2026-10-21 06:12:21 +02:00
2026-08-05 21:39:31 +08:00
2026-10-20 23:00:12 +02:00
2026-07-29 17:45:11 +08:00
2026-10-20 23:00:12 +02:00
2026-08-13 01:00:51 +08:00
2026-08-20 11:43:21 +08:00
2026-07-09 08:55:37 +08:00
2026-07-09 08:55:37 +08:00
2026-09-01 11:28:07 -07:00
2026-08-13 01:00:51 +08:00
2026-09-18 17:31:29 -07:00
2026-07-23 14:34:56 +08:00
2026-07-09 08:55:37 +08:00
2026-08-25 13:42:00 +08:00
2026-10-20 20:05:35 +02:00
2026-09-18 17:31:29 -07:00
2026-08-20 11:43:21 +08:00
2026-09-18 17:31:29 -07:00
2026-10-20 20:05:35 +02:00
2026-08-13 01:00:51 +08:00
2026-08-29 11:51:21 +08:00
2026-08-20 11:43:21 +08:00
2026-08-20 11:43:21 +08:00
2026-08-25 13:42:00 +08:00
2026-07-08 18:13:56 +08:00
2026-08-27 18:01:46 +08:00
2026-06-19 18:05:50 +08:00
2026-08-23 14:02:33 +08:00
2026-08-20 11:43:21 +08:00
2026-08-05 21:39:31 +08:00
2026-08-25 13:42:00 +08:00
2026-08-15 09:07:24 +08:00