Files
cinny/src/app/state/focusAssist.ts
T
jared 4509a2b6d3 feat(desktop): Tier B web side — toast actions, Focus Assist gate, folder DnD
- P5-41/35 useTauriToastActions: native rich-toast click → navigate(path) (opens
  the room), quick reply → mx.sendMessage(roomId, m.text). The desktop bridge
  routes message notifications (tag=roomId) to show_rich_toast.
- P5-56 useTauriFocusAssist + focusAssistActiveAtom: a native focus-assist-changed
  event drives the atom, OR'd into the existing quiet-hours gate in
  ClientNonUIFeatures so notifications+sounds suppress during Windows Focus Assist.
- P5-48 recursive folder drag-drop: fileEntries.ts (sync webkitGetAsEntry capture
  → async batched readEntries traversal, path-prefixed names, 500-file cap) wired
  into useFileDrop, reusing the existing upload pipeline. +3 unit tests.

Hooks no-op in the browser. Gates: tsc/eslint/prettier clean, build OK, 559 tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 10:01:10 -04:00

15 lines
675 B
TypeScript

import { atom } from 'jotai';
/**
* P5-56 — Windows Focus Assist ↔ Do-Not-Disturb sync (live OS state).
*
* Standalone, non-persisted boolean atom reflecting whether the shell is
* currently suppressing notifications (Focus Assist / Quiet Hours, presentation
* mode, full-screen D3D, or "busy"). It is driven at runtime by
* `useTauriFocusAssist` from the native `focus-assist-changed` event and read by
* the notification gate. Because it mirrors transient OS state — not a user
* preference — it is a plain in-memory atom that defaults to `false` and is
* intentionally NOT written to `localStorage`.
*/
export const focusAssistActiveAtom = atom(false);