/** * The announcements reducer, moved verbatim from `announcements-provider.tsx` * in v3 Phase 3 Task 3.2. Pure `(state, action) => state`, no React, no DOM. * * The local `AnnouncementsState` / `AnnouncementsAction` declarations that sat * beside it are gone: they live in `./types` now, parameterised by `TConfig` * so the React side can widen `configs` to configs carrying `ReactNode`. */ /** * Whitelist of gates `forceShow(id)` may bypass. * * Phase 0 §4 sign-off; pinned by a literal-array test in * `__tests__/force-show.test.tsx`. New gates added to `show()` MUST default to * "respect, don't bypass" — adding a gate name here is a deliberate API change * and breaks the pinned test, forcing a review. * * The `` wrapper is intentionally NOT a member of * this list — `forceShow` must not strip the license soft-gate watermark. See * `apps/docs/content/docs/guides/imperative-control.mdx`. */ declare const FORCE_SHOW_BYPASS: readonly ["frequency", "cooldown", "viewCount", "isDismissed", "audience"]; type ForceShowBypassKey = (typeof FORCE_SHOW_BYPASS)[number]; export { FORCE_SHOW_BYPASS as F, type ForceShowBypassKey as a };