featuredrop 2.7.2 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +32 -1
  2. package/dist/astro.cjs +333 -0
  3. package/dist/astro.cjs.map +1 -0
  4. package/dist/astro.d.cts +242 -0
  5. package/dist/astro.d.ts +242 -0
  6. package/dist/astro.js +329 -0
  7. package/dist/astro.js.map +1 -0
  8. package/dist/engine.cjs +552 -0
  9. package/dist/engine.cjs.map +1 -0
  10. package/dist/engine.d.cts +422 -0
  11. package/dist/engine.d.ts +422 -0
  12. package/dist/engine.js +545 -0
  13. package/dist/engine.js.map +1 -0
  14. package/dist/featuredrop.cjs +208 -1
  15. package/dist/featuredrop.cjs.map +1 -1
  16. package/dist/next.cjs +336 -0
  17. package/dist/next.cjs.map +1 -0
  18. package/dist/next.d.cts +243 -0
  19. package/dist/next.d.ts +243 -0
  20. package/dist/next.js +332 -0
  21. package/dist/next.js.map +1 -0
  22. package/dist/nuxt.cjs +352 -0
  23. package/dist/nuxt.cjs.map +1 -0
  24. package/dist/nuxt.d.cts +282 -0
  25. package/dist/nuxt.d.ts +282 -0
  26. package/dist/nuxt.js +347 -0
  27. package/dist/nuxt.js.map +1 -0
  28. package/dist/preact.cjs +354 -0
  29. package/dist/preact.cjs.map +1 -1
  30. package/dist/preact.d.cts +170 -1
  31. package/dist/preact.d.ts +170 -1
  32. package/dist/preact.js +350 -1
  33. package/dist/preact.js.map +1 -1
  34. package/dist/react-hooks.cjs +82 -0
  35. package/dist/react-hooks.cjs.map +1 -1
  36. package/dist/react-hooks.d.cts +117 -1
  37. package/dist/react-hooks.d.ts +117 -1
  38. package/dist/react-hooks.js +80 -1
  39. package/dist/react-hooks.js.map +1 -1
  40. package/dist/react.cjs +354 -0
  41. package/dist/react.cjs.map +1 -1
  42. package/dist/react.d.cts +170 -1
  43. package/dist/react.d.ts +170 -1
  44. package/dist/react.js +350 -1
  45. package/dist/react.js.map +1 -1
  46. package/dist/remix.cjs +331 -0
  47. package/dist/remix.cjs.map +1 -0
  48. package/dist/remix.d.cts +305 -0
  49. package/dist/remix.d.ts +305 -0
  50. package/dist/remix.js +327 -0
  51. package/dist/remix.js.map +1 -0
  52. package/package.json +70 -2
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/animation.ts","../src/semver.ts","../src/triggers.ts","../src/core.ts","../src/helpers.ts","../src/throttle.ts","../src/i18n.ts","../src/variants.ts","../src/react/context.ts","../src/react/provider.tsx","../src/theme.ts","../src/react/theme.ts","../src/react/components/theme-provider.tsx","../src/react/hooks/use-feature-drop.ts","../src/react/hooks/use-new-feature.ts","../src/react/hooks/use-new-count.ts","../src/react/hooks/use-tab-notification.ts","../src/analytics.ts","../src/react/hooks/use-adoption-analytics.ts","../src/react/tour-registry.ts","../src/react/hooks/use-tour.ts","../src/react/hooks/use-tour-sequencer.ts","../src/react/checklist-registry.ts","../src/react/hooks/use-checklist.ts","../src/react/survey-registry.ts","../src/react/hooks/use-survey.ts","../src/react/error-boundary.tsx","../src/react/components/new-badge.tsx","../src/markdown.ts","../src/react/reactions-store.ts","../src/react/components/changelog-widget.tsx","../src/react/components/spotlight.tsx","../src/react/components/banner.tsx","../src/react/components/toast.tsx","../src/react/components/changelog-page.tsx","../src/react/components/tour.tsx","../src/react/components/checklist.tsx","../src/react/components/hotspot.tsx","../src/react/components/feedback-widget.tsx","../src/react/components/announcement-modal.tsx","../src/react/components/spotlight-chain.tsx","../src/react/components/survey.tsx","../src/react/feature-request-store.ts","../src/react/components/feature-request-button.tsx","../src/react/components/feature-request-form.tsx","../src/react/index.ts"],"names":["engine","value","useState","useEffect","useMemo","jsx","isNew","useRef","useCallback","controllers","registryListeners","emitRegistry","EMPTY_SNAPSHOT","readSnapshot","useContext","sanitized","decoded","readStorageValue","writeStorageValue","Fragment","jsxs","sessionDismissed","positionStyles","headerStyles","pillStyles","reactionsRowStyles","reactionButtonStyles","containerStyles","overlayStyles","getFocusableElements","getStorageKey","createContext","tooltipStyles","onceStorageKey","isDismissedOnce","setDismissedOnce","beaconStyles","start","panelStyles","SEEN_FEATURES_STORAGE_KEY","CLICKED_FEATURES_STORAGE_KEY","NewBadge","ChangelogWidget","Spotlight","Banner","Toast","ChangelogPage","Tour","Checklist","Hotspot","TooltipGroup","FeedbackWidget","AnnouncementModal","SpotlightChain","Survey","FeatureRequestButton","FeatureRequestForm"],"mappings":"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","file":"react.js","sourcesContent":["import type { FeatureDropAnimationPreset } from \"./types\";\n\nexport const FEATUREDROP_ANIMATION_PRESETS = [\n \"none\",\n \"subtle\",\n \"normal\",\n \"playful\",\n] as const satisfies readonly FeatureDropAnimationPreset[];\n\nlet injectedAnimationStyles = false;\n\nexport function ensureFeatureDropAnimationStyles(): void {\n if (injectedAnimationStyles || typeof document === \"undefined\") return;\n injectedAnimationStyles = true;\n\n const style = document.createElement(\"style\");\n style.setAttribute(\"data-featuredrop-animations\", \"true\");\n style.textContent = `\n @keyframes featuredrop-enter-fade-up {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n @keyframes featuredrop-enter-scale {\n from { opacity: 0; transform: scale(0.96); }\n to { opacity: 1; transform: scale(1); }\n }\n @keyframes featuredrop-enter-panel {\n from { opacity: 0; transform: translateX(14px); }\n to { opacity: 1; transform: translateX(0); }\n }\n @keyframes featuredrop-enter-pop {\n 0% { opacity: 0; transform: translateY(12px) scale(0.94); }\n 70% { opacity: 1; transform: translateY(-2px) scale(1.02); }\n 100% { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes featuredrop-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.55; }\n }\n @keyframes featuredrop-pulse-playful {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 40% { opacity: 0.7; transform: scale(1.08); }\n 70% { opacity: 0.9; transform: scale(0.96); }\n }\n @keyframes featuredrop-beacon-pulse {\n 0%, 100% { transform: scale(1); opacity: 0.65; }\n 50% { transform: scale(1.5); opacity: 0; }\n }\n @keyframes featuredrop-beacon-pop-pulse {\n 0%, 100% { transform: scale(1); opacity: 0.72; }\n 45% { transform: scale(1.65); opacity: 0.08; }\n 75% { transform: scale(0.95); opacity: 0.28; }\n }\n @keyframes featuredrop-exit-fade-down {\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(8px); }\n }\n @keyframes featuredrop-exit-scale {\n from { opacity: 1; transform: scale(1); }\n to { opacity: 0; transform: scale(0.96); }\n }\n @keyframes featuredrop-exit-panel {\n from { opacity: 1; transform: translateX(0); }\n to { opacity: 0; transform: translateX(14px); }\n }\n @keyframes featuredrop-exit-pop {\n from { opacity: 1; transform: translateY(0) scale(1); }\n to { opacity: 0; transform: translateY(10px) scale(0.96); }\n }\n `;\n document.head.appendChild(style);\n}\n\nexport function prefersReducedMotion(): boolean {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return false;\n }\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nexport function resolveAnimationPreset(\n preset: FeatureDropAnimationPreset = \"normal\",\n options?: { reducedMotion?: boolean },\n): FeatureDropAnimationPreset {\n if (options?.reducedMotion) return \"none\";\n return preset;\n}\n\ntype AnimationSurface = \"toast\" | \"panel\" | \"modal\" | \"popover\";\ntype AnimationPhase = \"enter\" | \"exit\";\ntype PulseSurface = \"dot\" | \"beacon\";\n\nexport function getEnterAnimation(\n preset: FeatureDropAnimationPreset,\n surface: AnimationSurface,\n): string | undefined {\n if (preset === \"none\") return undefined;\n\n if (preset === \"subtle\") {\n if (surface === \"panel\") return \"featuredrop-enter-panel 180ms ease-out\";\n if (surface === \"modal\") return \"featuredrop-enter-scale 180ms ease-out\";\n return \"featuredrop-enter-fade-up 170ms ease-out\";\n }\n\n if (preset === \"playful\") {\n if (surface === \"panel\") return \"featuredrop-enter-panel 320ms cubic-bezier(0.2, 0.9, 0.2, 1)\";\n return \"featuredrop-enter-pop 300ms cubic-bezier(0.22, 1.4, 0.36, 1)\";\n }\n\n if (surface === \"panel\") return \"featuredrop-enter-panel 240ms cubic-bezier(0.2, 0.9, 0.2, 1)\";\n if (surface === \"modal\") return \"featuredrop-enter-scale 220ms cubic-bezier(0.2, 0.9, 0.2, 1)\";\n return \"featuredrop-enter-fade-up 210ms cubic-bezier(0.2, 0.9, 0.2, 1)\";\n}\n\nexport function getExitAnimation(\n preset: FeatureDropAnimationPreset,\n surface: AnimationSurface,\n): string | undefined {\n if (preset === \"none\") return undefined;\n\n if (preset === \"subtle\") {\n if (surface === \"panel\") return \"featuredrop-exit-panel 150ms ease-in forwards\";\n if (surface === \"modal\") return \"featuredrop-exit-scale 150ms ease-in forwards\";\n return \"featuredrop-exit-fade-down 140ms ease-in forwards\";\n }\n\n if (preset === \"playful\") {\n if (surface === \"panel\") return \"featuredrop-exit-panel 260ms ease-in forwards\";\n return \"featuredrop-exit-pop 240ms ease-in forwards\";\n }\n\n if (surface === \"panel\") return \"featuredrop-exit-panel 200ms ease-in forwards\";\n if (surface === \"modal\") return \"featuredrop-exit-scale 190ms ease-in forwards\";\n return \"featuredrop-exit-fade-down 180ms ease-in forwards\";\n}\n\nexport function getPulseAnimation(\n preset: FeatureDropAnimationPreset,\n surface: PulseSurface = \"beacon\",\n): string | undefined {\n if (preset === \"none\") return undefined;\n\n if (surface === \"dot\") {\n if (preset === \"subtle\") return \"featuredrop-pulse 2.6s ease-in-out infinite\";\n if (preset === \"playful\") {\n return \"featuredrop-pulse-playful 1.8s cubic-bezier(0.22, 1.4, 0.36, 1) infinite\";\n }\n return \"featuredrop-pulse 2s ease-in-out infinite\";\n }\n\n if (preset === \"subtle\") return \"featuredrop-beacon-pulse 2.6s ease-in-out infinite\";\n if (preset === \"playful\") {\n return \"featuredrop-beacon-pop-pulse 1.8s cubic-bezier(0.22, 1.4, 0.36, 1) infinite\";\n }\n return \"featuredrop-beacon-pulse 2s ease-in-out infinite\";\n}\n\nexport function getAnimationDurationMs(\n preset: FeatureDropAnimationPreset,\n surface: AnimationSurface,\n phase: AnimationPhase,\n): number {\n if (preset === \"none\") return 0;\n const animation = phase === \"enter\"\n ? getEnterAnimation(preset, surface)\n : getExitAnimation(preset, surface);\n if (!animation) return 0;\n\n const msMatch = animation.match(/(\\d+)ms/);\n if (msMatch?.[1]) return Number(msMatch[1]);\n\n const sMatch = animation.match(/(\\d+(?:\\.\\d+)?)s/);\n if (sMatch?.[1]) return Math.round(Number(sMatch[1]) * 1000);\n\n return 0;\n}\n","// Minimal semver comparison utilities (no build metadata sorting needed)\n\nexport type Comparator = \">=\" | \"<=\" | \">\" | \"<\" | \"=\";\n\nexport interface SemverParts {\n major: number;\n minor: number;\n patch: number;\n prerelease: string[];\n}\n\nconst SEMVER_REGEX = /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?/;\n\nexport function parseSemver(input: string): SemverParts | null {\n const match = input.trim().match(SEMVER_REGEX);\n if (!match) return null;\n return {\n major: Number(match[1]),\n minor: Number(match[2]),\n patch: Number(match[3]),\n prerelease: match[4] ? match[4].split(\".\") : [],\n };\n}\n\nexport function compareSemver(a: string, b: string): number {\n const pa = parseSemver(a);\n const pb = parseSemver(b);\n if (!pa || !pb) return 0;\n\n for (const key of [\"major\", \"minor\", \"patch\"] as const) {\n if (pa[key] !== pb[key]) return pa[key] - pb[key];\n }\n\n // Handle prerelease: absence > presence, otherwise lexicographic\n const aPre = pa.prerelease;\n const bPre = pb.prerelease;\n if (aPre.length === 0 && bPre.length === 0) return 0;\n if (aPre.length === 0) return 1;\n if (bPre.length === 0) return -1;\n\n const len = Math.max(aPre.length, bPre.length);\n for (let i = 0; i < len; i++) {\n const ai = aPre[i];\n const bi = bPre[i];\n if (ai === undefined) return -1;\n if (bi === undefined) return 1;\n const aNum = Number(ai);\n const bNum = Number(bi);\n const aIsNum = Number.isInteger(aNum);\n const bIsNum = Number.isInteger(bNum);\n if (aIsNum && bIsNum && aNum !== bNum) return aNum - bNum;\n if (aIsNum !== bIsNum) return aIsNum ? -1 : 1;\n if (ai !== bi) return ai < bi ? -1 : 1;\n }\n return 0;\n}\n\nfunction parseComparator(comp: string): { op: Comparator; version: string } | null {\n const match = comp.trim().match(/^(>=|<=|>|<|=)?\\\\s*(.+)$/);\n if (!match) return null;\n const op = (match[1] as Comparator) || \">=\";\n const version = match[2];\n if (!parseSemver(version)) return null;\n return { op, version };\n}\n\nfunction satisfiesComparator(version: string, comp: { op: Comparator; version: string }): boolean {\n const diff = compareSemver(version, comp.version);\n switch (comp.op) {\n case \">\":\n return diff > 0;\n case \">=\":\n return diff >= 0;\n case \"<\":\n return diff < 0;\n case \"<=\":\n return diff <= 0;\n case \"=\":\n return diff === 0;\n default:\n return false;\n }\n}\n\n// Space-separated comparator list (AND semantics), e.g. \">=2.5.0 <3.0.0\"\nexport function satisfiesRange(version: string, range: string): boolean {\n const parts = range.split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return true;\n for (const part of parts) {\n const comp = parseComparator(part);\n if (!comp) return false;\n if (!satisfiesComparator(version, comp)) return false;\n }\n return true;\n}\n","import type { FeatureEntry, FeatureTrigger, TriggerContext } from \"./types\";\n\nfunction wildcardToRegExp(value: string): RegExp {\n const escaped = value.replace(/[.+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const pattern = `^${escaped.replace(/\\*/g, \".*\")}$`;\n return new RegExp(pattern);\n}\n\nfunction matchPath(path: string, pattern: string | RegExp): boolean {\n if (pattern instanceof RegExp) return pattern.test(path);\n if (!pattern) return false;\n if (pattern.includes(\"*\")) return wildcardToRegExp(pattern).test(path);\n return path === pattern || path.startsWith(pattern);\n}\n\nexport function isTriggerMatch(trigger: FeatureTrigger | undefined, context?: TriggerContext): boolean {\n if (!trigger) return true;\n if (!context) return false;\n\n if (trigger.type === \"page\") {\n const path = context.path;\n if (!path) return false;\n return matchPath(path, trigger.match);\n }\n\n if (trigger.type === \"usage\") {\n const usage = context.usage ?? {};\n const count = usage[trigger.event] ?? 0;\n return count >= (trigger.minActions ?? 1);\n }\n\n if (trigger.type === \"time\") {\n const elapsedMs = context.elapsedMs ?? 0;\n return elapsedMs >= trigger.minSeconds * 1000;\n }\n\n if (trigger.type === \"milestone\") {\n return context.milestones?.has(trigger.event) ?? false;\n }\n\n if (trigger.type === \"frustration\") {\n const usage = context.usage ?? {};\n const count = usage[trigger.pattern] ?? 0;\n return count >= (trigger.threshold ?? 1);\n }\n\n if (trigger.type === \"scroll\") {\n return (context.scrollPercent ?? 0) >= (trigger.minPercent ?? 50);\n }\n\n try {\n return trigger.evaluate(context);\n } catch {\n return false;\n }\n}\n\nexport class TriggerEngine {\n private context: TriggerContext;\n\n constructor(initial?: TriggerContext) {\n this.context = {\n path: initial?.path,\n events: new Set(initial?.events ?? []),\n milestones: new Set(initial?.milestones ?? []),\n usage: { ...(initial?.usage ?? {}) },\n elapsedMs: initial?.elapsedMs ?? 0,\n scrollPercent: initial?.scrollPercent ?? 0,\n metadata: { ...(initial?.metadata ?? {}) },\n };\n }\n\n setPath(path: string): void {\n this.context.path = path;\n }\n\n trackEvent(event: string): void {\n const next = new Set(this.context.events ?? new Set<string>());\n next.add(event);\n this.context.events = next;\n }\n\n trackUsage(event: string, delta = 1): void {\n const usage = { ...(this.context.usage ?? {}) };\n usage[event] = (usage[event] ?? 0) + Math.max(1, delta);\n this.context.usage = usage;\n }\n\n trackMilestone(event: string): void {\n const next = new Set(this.context.milestones ?? new Set<string>());\n next.add(event);\n this.context.milestones = next;\n }\n\n setElapsedMs(elapsedMs: number): void {\n this.context.elapsedMs = Math.max(0, elapsedMs);\n }\n\n setScrollPercent(scrollPercent: number): void {\n const clamped = Math.max(0, Math.min(100, scrollPercent));\n this.context.scrollPercent = clamped;\n }\n\n setMetadata(next: Record<string, unknown>): void {\n this.context.metadata = { ...next };\n }\n\n getContext(): TriggerContext {\n return {\n path: this.context.path,\n events: new Set(this.context.events ?? []),\n milestones: new Set(this.context.milestones ?? []),\n usage: { ...(this.context.usage ?? {}) },\n elapsedMs: this.context.elapsedMs,\n scrollPercent: this.context.scrollPercent,\n metadata: { ...(this.context.metadata ?? {}) },\n };\n }\n\n evaluate(trigger: FeatureTrigger | undefined): boolean {\n return isTriggerMatch(trigger, this.context);\n }\n\n evaluateFeature(feature: Pick<FeatureEntry, \"trigger\">): boolean {\n return this.evaluate(feature.trigger);\n }\n}\n","import type {\n AudienceMatchFn,\n AudienceRule,\n FeatureEntry,\n FeatureManifest,\n StorageAdapter,\n UserContext,\n FeatureDependencyState,\n FeatureFlagBridge,\n TriggerContext,\n} from \"./types\";\nimport { compareSemver, satisfiesRange } from \"./semver\";\nimport { isTriggerMatch } from \"./triggers\";\n\n/**\n * Default audience matching logic.\n *\n * For each specified field (plan, role, region), checks if the user's\n * value is included in the allowed list. Fields use AND logic between them,\n * OR logic within each field's array. The `custom` field is ignored by\n * the default matcher — use a custom `AudienceMatchFn` for that.\n */\nexport function matchesAudience(\n audience: AudienceRule,\n userContext: UserContext,\n): boolean {\n if (audience.plan && audience.plan.length > 0) {\n if (!userContext.plan || !audience.plan.includes(userContext.plan)) {\n return false;\n }\n }\n if (audience.role && audience.role.length > 0) {\n if (!userContext.role || !audience.role.includes(userContext.role)) {\n return false;\n }\n }\n if (audience.region && audience.region.length > 0) {\n if (!userContext.region || !audience.region.includes(userContext.region)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Check if a feature's audience allows the given user context.\n *\n * - No `audience` field → visible to all\n * - Empty `audience` ({}) → visible to all\n * - `audience` specified but no `userContext` → hidden (safe default)\n * - Otherwise, delegate to `matchFn` (or default `matchesAudience`)\n */\nfunction isAudienceMatch(\n feature: FeatureEntry,\n userContext?: UserContext,\n matchFn?: AudienceMatchFn,\n): boolean {\n // No audience restriction → show to everyone\n if (!feature.audience) return true;\n\n // Check if audience is empty (no fields with values)\n const { plan, role, region, custom } = feature.audience;\n const hasRules =\n (plan && plan.length > 0) ||\n (role && role.length > 0) ||\n (region && region.length > 0) ||\n (custom && Object.keys(custom).length > 0);\n if (!hasRules) return true;\n\n // Audience specified but no user context → hidden (safe default)\n if (!userContext) return false;\n\n // Use custom matcher if provided, otherwise default\n if (matchFn) return matchFn(feature.audience, userContext);\n return matchesAudience(feature.audience, userContext);\n}\n\nfunction isVersionMatch(feature: FeatureEntry, appVersion?: string): boolean {\n const v = feature.version;\n if (!v || typeof v === \"string\") return true; // string = display only\n if (!appVersion) return false; // Safe default when constraints exist\n if (!v.introduced && !v.showNewUntil && !v.deprecatedAt && !v.showIn) return true;\n\n // Range check\n if (v.showIn && !satisfiesRange(appVersion, v.showIn)) return false;\n\n if (v.introduced && compareSemver(appVersion, v.introduced) < 0) return false;\n if (v.deprecatedAt && compareSemver(appVersion, v.deprecatedAt) >= 0) return false;\n\n // showNewUntil gates \"new\" state only\n if (v.showNewUntil && compareSemver(appVersion, v.showNewUntil) >= 0) return false;\n\n return true;\n}\n\nfunction isFlagMatch(\n feature: FeatureEntry,\n flagBridge?: FeatureFlagBridge,\n userContext?: UserContext,\n): boolean {\n if (!feature.flagKey) return true;\n if (!flagBridge) return false;\n try {\n return flagBridge.isEnabled(feature.flagKey, userContext);\n } catch {\n return false;\n }\n}\n\nfunction isProductMatch(feature: FeatureEntry, product?: string): boolean {\n if (!feature.product || feature.product === \"*\") return true;\n if (!product) return false;\n return feature.product === product;\n}\n\nfunction isDependencyMatch(\n feature: FeatureEntry,\n dismissedIds: ReadonlySet<string>,\n dependencyState?: FeatureDependencyState,\n): boolean {\n const dependsOn = feature.dependsOn;\n if (!dependsOn) return true;\n\n const seenIds = dependencyState?.seenIds;\n const clickedIds = dependencyState?.clickedIds;\n const dismissedDependencyIds = dependencyState?.dismissedIds ?? dismissedIds;\n\n if (dependsOn.seen && dependsOn.seen.length > 0) {\n for (const id of dependsOn.seen) {\n const seen = seenIds?.has(id) ?? false;\n if (!seen && !dismissedDependencyIds.has(id)) return false;\n }\n }\n\n if (dependsOn.clicked && dependsOn.clicked.length > 0) {\n for (const id of dependsOn.clicked) {\n if (!(clickedIds?.has(id) ?? false)) return false;\n }\n }\n\n if (dependsOn.dismissed && dependsOn.dismissed.length > 0) {\n for (const id of dependsOn.dismissed) {\n if (!dismissedDependencyIds.has(id)) return false;\n }\n }\n\n return true;\n}\n\n/**\n * Check if a single feature should show as \"new\".\n *\n * A feature is \"new\" when ALL of these are true:\n * 1. Current time is before `showNewUntil`\n * 2. Feature was released after the watermark (or no watermark exists)\n * 3. Feature has not been individually dismissed\n * 4. If `publishAt` is set, current time must be after it (scheduled publishing)\n * 5. If `audience` is set, user must match the targeting rules\n * 6. If `flagKey` is set, the flag bridge must resolve it as enabled\n * 7. If `product` is set, it must match the current product scope\n */\nexport function isNew(\n feature: FeatureEntry,\n watermark: string | null,\n dismissedIds: ReadonlySet<string>,\n now: Date = new Date(),\n userContext?: UserContext,\n matchAudience?: AudienceMatchFn,\n appVersion?: string,\n dependencyState?: FeatureDependencyState,\n triggerContext?: TriggerContext,\n flagBridge?: FeatureFlagBridge,\n product?: string,\n): boolean {\n // Already dismissed by the user on this device\n if (dismissedIds.has(feature.id)) return false;\n\n // Audience targeting — check before time-based checks\n if (!isAudienceMatch(feature, userContext, matchAudience)) return false;\n\n // Dependency targeting — defer features until prerequisites are satisfied\n if (!isDependencyMatch(feature, dismissedIds, dependencyState)) return false;\n\n // Version targeting — requires appVersion when constraints exist\n if (!isVersionMatch(feature, appVersion)) return false;\n\n // Feature flag targeting — hide flagged entries unless enabled\n if (!isFlagMatch(feature, flagBridge, userContext)) return false;\n\n // Multi-product targeting — hide entries for other product scopes\n if (!isProductMatch(feature, product)) return false;\n\n // Contextual trigger rules — show only when trigger condition is satisfied.\n if (!isTriggerMatch(feature.trigger, triggerContext)) return false;\n\n const nowMs = now.getTime();\n\n // Scheduled publishing — hidden until publishAt\n if (feature.publishAt) {\n const publishMs = new Date(feature.publishAt).getTime();\n if (nowMs < publishMs) return false;\n }\n\n const showUntilMs = new Date(feature.showNewUntil).getTime();\n\n // Past the display window\n if (nowMs >= showUntilMs) return false;\n\n // If there's a watermark, feature must have been released after it\n if (watermark) {\n const watermarkMs = new Date(watermark).getTime();\n const releasedMs = new Date(feature.releasedAt).getTime();\n if (releasedMs <= watermarkMs) return false;\n }\n\n return true;\n}\n\n/**\n * Get all features that are currently \"new\" for this user.\n */\nexport function getNewFeatures(\n manifest: FeatureManifest,\n storage: StorageAdapter,\n now: Date = new Date(),\n userContext?: UserContext,\n matchAudience?: AudienceMatchFn,\n appVersion?: string,\n dependencyState?: FeatureDependencyState,\n triggerContext?: TriggerContext,\n flagBridge?: FeatureFlagBridge,\n product?: string,\n): FeatureEntry[] {\n const watermark = storage.getWatermark();\n const dismissedIds = storage.getDismissedIds();\n return manifest.filter((f) =>\n isNew(\n f,\n watermark,\n dismissedIds,\n now,\n userContext,\n matchAudience,\n appVersion,\n dependencyState,\n triggerContext,\n flagBridge,\n product,\n ),\n );\n}\n\n/**\n * Get the count of new features.\n */\nexport function getNewFeatureCount(\n manifest: FeatureManifest,\n storage: StorageAdapter,\n now: Date = new Date(),\n userContext?: UserContext,\n matchAudience?: AudienceMatchFn,\n appVersion?: string,\n dependencyState?: FeatureDependencyState,\n triggerContext?: TriggerContext,\n flagBridge?: FeatureFlagBridge,\n product?: string,\n): number {\n return getNewFeatures(\n manifest,\n storage,\n now,\n userContext,\n matchAudience,\n appVersion,\n dependencyState,\n triggerContext,\n flagBridge,\n product,\n ).length;\n}\n\n/**\n * Check if a specific sidebar key has a new feature.\n */\nexport function hasNewFeature(\n manifest: FeatureManifest,\n sidebarKey: string,\n storage: StorageAdapter,\n now: Date = new Date(),\n userContext?: UserContext,\n matchAudience?: AudienceMatchFn,\n appVersion?: string,\n dependencyState?: FeatureDependencyState,\n triggerContext?: TriggerContext,\n flagBridge?: FeatureFlagBridge,\n product?: string,\n): boolean {\n const watermark = storage.getWatermark();\n const dismissedIds = storage.getDismissedIds();\n return manifest.some(\n (f) =>\n f.sidebarKey === sidebarKey &&\n isNew(\n f,\n watermark,\n dismissedIds,\n now,\n userContext,\n matchAudience,\n appVersion,\n dependencyState,\n triggerContext,\n flagBridge,\n product,\n ),\n );\n}\n\n/**\n * Get all features sorted by priority (critical first) then by release date (newest first).\n */\nexport function getNewFeaturesSorted(\n manifest: FeatureManifest,\n storage: StorageAdapter,\n now: Date = new Date(),\n userContext?: UserContext,\n matchAudience?: AudienceMatchFn,\n appVersion?: string,\n dependencyState?: FeatureDependencyState,\n triggerContext?: TriggerContext,\n flagBridge?: FeatureFlagBridge,\n product?: string,\n): FeatureEntry[] {\n const priorityOrder = { critical: 0, normal: 1, low: 2 };\n return getNewFeatures(\n manifest,\n storage,\n now,\n userContext,\n matchAudience,\n appVersion,\n dependencyState,\n triggerContext,\n flagBridge,\n product,\n ).sort(\n (a, b) => {\n const pa = priorityOrder[a.priority ?? \"normal\"];\n const pb = priorityOrder[b.priority ?? \"normal\"];\n if (pa !== pb) return pa - pb;\n return (\n new Date(b.releasedAt).getTime() - new Date(a.releasedAt).getTime()\n );\n },\n );\n}\n","import type {\n AudienceMatchFn,\n FeatureEntry,\n FeatureManifest,\n StorageAdapter,\n UserContext,\n} from \"./types\";\nimport { isNew } from \"./core\";\n\n/**\n * Create a frozen feature manifest from an array of entries.\n * Ensures the manifest is immutable at runtime.\n */\nexport function createManifest(\n entries: FeatureEntry[],\n): FeatureManifest {\n return Object.freeze([...entries]);\n}\n\n/**\n * Find a feature by its ID in the manifest.\n * Returns `undefined` if not found.\n */\nexport function getFeatureById(\n manifest: FeatureManifest,\n id: string,\n): FeatureEntry | undefined {\n return manifest.find((f) => f.id === id);\n}\n\n/**\n * Get all new features in a specific category.\n */\nexport function getNewFeaturesByCategory(\n manifest: FeatureManifest,\n category: string,\n storage: StorageAdapter,\n now: Date = new Date(),\n userContext?: UserContext,\n matchAudience?: AudienceMatchFn,\n appVersion?: string,\n): FeatureEntry[] {\n const watermark = storage.getWatermark();\n const dismissedIds = storage.getDismissedIds();\n return manifest.filter(\n (f) =>\n f.category === category &&\n isNew(f, watermark, dismissedIds, now, userContext, matchAudience, appVersion),\n );\n}\n","import type { FeatureEntry } from \"./types\";\n\nexport interface ThrottleOptions {\n maxSimultaneousBadges?: number;\n maxSimultaneousSpotlights?: number;\n maxToastsPerSession?: number;\n minTimeBetweenModals?: number;\n minTimeBetweenTours?: number;\n sessionCooldown?: number;\n respectDoNotDisturb?: boolean;\n}\n\nexport interface ThrottleRuntimeState {\n sessionStartedAt: number;\n quietMode?: boolean;\n}\n\nexport interface ThrottleResult {\n visible: FeatureEntry[];\n queued: FeatureEntry[];\n}\n\nfunction sortByPriorityAndRecency(features: FeatureEntry[]): FeatureEntry[] {\n const priorityWeight = { critical: 3, normal: 2, low: 1 };\n return [...features].sort((a, b) => {\n const scoreA = priorityWeight[a.priority ?? \"normal\"];\n const scoreB = priorityWeight[b.priority ?? \"normal\"];\n if (scoreA !== scoreB) return scoreB - scoreA;\n return new Date(b.releasedAt).getTime() - new Date(a.releasedAt).getTime();\n });\n}\n\nexport function applyAnnouncementThrottle(\n features: FeatureEntry[],\n options: ThrottleOptions | undefined,\n state: ThrottleRuntimeState,\n now: number = Date.now(),\n): ThrottleResult {\n const sorted = sortByPriorityAndRecency(features);\n if (sorted.length === 0) {\n return { visible: [], queued: [] };\n }\n\n if (options?.sessionCooldown && options.sessionCooldown > 0) {\n const elapsed = now - state.sessionStartedAt;\n if (elapsed < options.sessionCooldown) {\n return { visible: [], queued: sorted };\n }\n }\n\n if (options?.respectDoNotDisturb && state.quietMode) {\n const visible = sorted.filter((feature) => feature.priority === \"critical\");\n const queued = sorted.filter((feature) => feature.priority !== \"critical\");\n return { visible, queued };\n }\n\n const maxVisible = options?.maxSimultaneousBadges;\n if (!maxVisible || !Number.isFinite(maxVisible) || maxVisible < 1) {\n return { visible: sorted, queued: [] };\n }\n\n return {\n visible: sorted.slice(0, maxVisible),\n queued: sorted.slice(maxVisible),\n };\n}\n","export interface FeatureDropTranslations {\n newBadge: string;\n whatsNewTitle: string;\n markAllRead: string;\n allCaughtUp: string;\n close: string;\n changelogTitle: string;\n searchPlaceholder: string;\n allCategories: string;\n noUpdatesYet: string;\n loadMore: string;\n share: string;\n skipToEntries: string;\n newFeatureCount: (count: number) => string;\n stepOf: (current: number, total: number) => string;\n back: string;\n next: string;\n skip: string;\n finish: string;\n gotIt: string;\n announcement: string;\n feedbackTitle: string;\n feedbackTrigger: string;\n feedbackSubmitted: string;\n submit: string;\n cancel: string;\n askLater: string;\n}\n\nconst EN_TRANSLATIONS: FeatureDropTranslations = {\n newBadge: \"New\",\n whatsNewTitle: \"What's New\",\n markAllRead: \"Mark all as read\",\n allCaughtUp: \"You're all caught up!\",\n close: \"Close\",\n changelogTitle: \"Changelog\",\n searchPlaceholder: \"Search updates\",\n allCategories: \"All categories\",\n noUpdatesYet: \"No updates yet\",\n loadMore: \"Load more\",\n share: \"Share\",\n skipToEntries: \"Skip to changelog entries\",\n newFeatureCount: (count: number) =>\n count === 0 ? \"No new features\" : `${count} new feature${count === 1 ? \"\" : \"s\"}`,\n stepOf: (current: number, total: number) => `Step ${current} of ${total}`,\n back: \"Back\",\n next: \"Next\",\n skip: \"Skip\",\n finish: \"Finish\",\n gotIt: \"Got it\",\n announcement: \"Announcement\",\n feedbackTitle: \"Share feedback\",\n feedbackTrigger: \"Feedback\",\n feedbackSubmitted: \"Thanks for the feedback.\",\n submit: \"Submit\",\n cancel: \"Cancel\",\n askLater: \"Ask me later\",\n};\n\nconst SIMPLE_TRANSLATIONS: Record<string, Partial<FeatureDropTranslations>> = {\n es: {\n newBadge: \"Nuevo\",\n whatsNewTitle: \"Novedades\",\n markAllRead: \"Marcar todo como leído\",\n allCaughtUp: \"Estás al día.\",\n close: \"Cerrar\",\n changelogTitle: \"Registro de cambios\",\n searchPlaceholder: \"Buscar actualizaciones\",\n allCategories: \"Todas las categorías\",\n noUpdatesYet: \"Aún no hay actualizaciones\",\n loadMore: \"Cargar más\",\n share: \"Compartir\",\n skipToEntries: \"Saltar a las entradas del changelog\",\n back: \"Atrás\",\n next: \"Siguiente\",\n skip: \"Saltar\",\n finish: \"Finalizar\",\n gotIt: \"Entendido\",\n announcement: \"Anuncio\",\n feedbackTitle: \"Enviar comentarios\",\n feedbackTrigger: \"Comentarios\",\n feedbackSubmitted: \"Gracias por tus comentarios.\",\n submit: \"Enviar\",\n cancel: \"Cancelar\",\n askLater: \"Preguntar más tarde\",\n },\n fr: {\n newBadge: \"Nouveau\",\n whatsNewTitle: \"Nouveautés\",\n markAllRead: \"Tout marquer comme lu\",\n allCaughtUp: \"Vous êtes à jour.\",\n close: \"Fermer\",\n changelogTitle: \"Journal des changements\",\n searchPlaceholder: \"Rechercher des mises à jour\",\n allCategories: \"Toutes les catégories\",\n noUpdatesYet: \"Aucune mise à jour\",\n loadMore: \"Charger plus\",\n share: \"Partager\",\n skipToEntries: \"Aller aux entrées du changelog\",\n back: \"Retour\",\n next: \"Suivant\",\n skip: \"Passer\",\n finish: \"Terminer\",\n gotIt: \"Compris\",\n announcement: \"Annonce\",\n feedbackTitle: \"Partager un avis\",\n feedbackTrigger: \"Avis\",\n feedbackSubmitted: \"Merci pour votre avis.\",\n submit: \"Envoyer\",\n cancel: \"Annuler\",\n askLater: \"Demander plus tard\",\n },\n de: {\n newBadge: \"Neu\",\n whatsNewTitle: \"Neuigkeiten\",\n markAllRead: \"Alles als gelesen markieren\",\n allCaughtUp: \"Alles erledigt.\",\n close: \"Schließen\",\n changelogTitle: \"Änderungsprotokoll\",\n searchPlaceholder: \"Updates suchen\",\n allCategories: \"Alle Kategorien\",\n noUpdatesYet: \"Noch keine Updates\",\n loadMore: \"Mehr laden\",\n share: \"Teilen\",\n skipToEntries: \"Zu den Einträgen springen\",\n back: \"Zurück\",\n next: \"Weiter\",\n skip: \"Überspringen\",\n finish: \"Fertig\",\n gotIt: \"Verstanden\",\n announcement: \"Ankündigung\",\n feedbackTitle: \"Feedback teilen\",\n feedbackTrigger: \"Feedback\",\n feedbackSubmitted: \"Danke für dein Feedback.\",\n submit: \"Senden\",\n cancel: \"Abbrechen\",\n askLater: \"Später fragen\",\n },\n pt: {\n newBadge: \"Novo\",\n whatsNewTitle: \"Novidades\",\n markAllRead: \"Marcar tudo como lido\",\n allCaughtUp: \"Tudo em dia.\",\n close: \"Fechar\",\n changelogTitle: \"Histórico de mudanças\",\n searchPlaceholder: \"Buscar atualizações\",\n allCategories: \"Todas as categorias\",\n noUpdatesYet: \"Sem atualizações ainda\",\n loadMore: \"Carregar mais\",\n share: \"Compartilhar\",\n skipToEntries: \"Ir para entradas do changelog\",\n back: \"Voltar\",\n next: \"Próximo\",\n skip: \"Pular\",\n finish: \"Concluir\",\n gotIt: \"Entendi\",\n announcement: \"Anúncio\",\n feedbackTitle: \"Enviar feedback\",\n feedbackTrigger: \"Feedback\",\n feedbackSubmitted: \"Obrigado pelo feedback.\",\n submit: \"Enviar\",\n cancel: \"Cancelar\",\n askLater: \"Perguntar depois\",\n },\n \"zh-cn\": {\n newBadge: \"新\",\n whatsNewTitle: \"最新动态\",\n markAllRead: \"全部标记为已读\",\n allCaughtUp: \"你已查看全部更新。\",\n close: \"关闭\",\n changelogTitle: \"更新日志\",\n searchPlaceholder: \"搜索更新\",\n allCategories: \"全部分类\",\n noUpdatesYet: \"暂无更新\",\n loadMore: \"加载更多\",\n share: \"分享\",\n skipToEntries: \"跳转到更新条目\",\n back: \"返回\",\n next: \"下一步\",\n skip: \"跳过\",\n finish: \"完成\",\n gotIt: \"知道了\",\n announcement: \"公告\",\n feedbackTitle: \"提交反馈\",\n feedbackTrigger: \"反馈\",\n feedbackSubmitted: \"感谢你的反馈。\",\n submit: \"提交\",\n cancel: \"取消\",\n askLater: \"稍后询问\",\n },\n ja: {\n newBadge: \"新着\",\n whatsNewTitle: \"新機能\",\n markAllRead: \"すべて既読にする\",\n allCaughtUp: \"すべて確認済みです。\",\n close: \"閉じる\",\n changelogTitle: \"変更履歴\",\n searchPlaceholder: \"更新を検索\",\n allCategories: \"すべてのカテゴリ\",\n noUpdatesYet: \"更新はありません\",\n loadMore: \"さらに表示\",\n share: \"共有\",\n skipToEntries: \"変更履歴へ移動\",\n back: \"戻る\",\n next: \"次へ\",\n skip: \"スキップ\",\n finish: \"完了\",\n gotIt: \"了解\",\n announcement: \"お知らせ\",\n feedbackTitle: \"フィードバックを送信\",\n feedbackTrigger: \"フィードバック\",\n feedbackSubmitted: \"フィードバックありがとうございます。\",\n submit: \"送信\",\n cancel: \"キャンセル\",\n askLater: \"後で聞く\",\n },\n ko: {\n newBadge: \"새로움\",\n whatsNewTitle: \"새 소식\",\n markAllRead: \"모두 읽음 처리\",\n allCaughtUp: \"모든 업데이트를 확인했습니다.\",\n close: \"닫기\",\n changelogTitle: \"변경 로그\",\n searchPlaceholder: \"업데이트 검색\",\n allCategories: \"전체 카테고리\",\n noUpdatesYet: \"업데이트가 없습니다\",\n loadMore: \"더 보기\",\n share: \"공유\",\n skipToEntries: \"변경 항목으로 이동\",\n back: \"뒤로\",\n next: \"다음\",\n skip: \"건너뛰기\",\n finish: \"완료\",\n gotIt: \"확인\",\n announcement: \"공지\",\n feedbackTitle: \"피드백 보내기\",\n feedbackTrigger: \"피드백\",\n feedbackSubmitted: \"피드백 감사합니다.\",\n submit: \"제출\",\n cancel: \"취소\",\n askLater: \"나중에 묻기\",\n },\n ar: {\n newBadge: \"جديد\",\n whatsNewTitle: \"ما الجديد\",\n markAllRead: \"تحديد الكل كمقروء\",\n allCaughtUp: \"تمت متابعة كل التحديثات.\",\n close: \"إغلاق\",\n changelogTitle: \"سجل التغييرات\",\n searchPlaceholder: \"ابحث في التحديثات\",\n allCategories: \"كل الفئات\",\n noUpdatesYet: \"لا توجد تحديثات بعد\",\n loadMore: \"تحميل المزيد\",\n share: \"مشاركة\",\n skipToEntries: \"تخطي إلى عناصر السجل\",\n back: \"رجوع\",\n next: \"التالي\",\n skip: \"تخطي\",\n finish: \"إنهاء\",\n gotIt: \"تم\",\n announcement: \"إعلان\",\n feedbackTitle: \"شارك ملاحظاتك\",\n feedbackTrigger: \"ملاحظات\",\n feedbackSubmitted: \"شكرًا على ملاحظاتك.\",\n submit: \"إرسال\",\n cancel: \"إلغاء\",\n askLater: \"اسألني لاحقًا\",\n },\n hi: {\n newBadge: \"नया\",\n whatsNewTitle: \"नया क्या है\",\n markAllRead: \"सभी को पढ़ा हुआ चिह्नित करें\",\n allCaughtUp: \"आपने सभी अपडेट देख लिए हैं।\",\n close: \"बंद करें\",\n changelogTitle: \"परिवर्तन सूची\",\n searchPlaceholder: \"अपडेट खोजें\",\n allCategories: \"सभी श्रेणियां\",\n noUpdatesYet: \"अभी कोई अपडेट नहीं\",\n loadMore: \"और लोड करें\",\n share: \"साझा करें\",\n skipToEntries: \"चेंजलॉग प्रविष्टियों पर जाएं\",\n back: \"वापस\",\n next: \"अगला\",\n skip: \"छोड़ें\",\n finish: \"समाप्त\",\n gotIt: \"ठीक है\",\n announcement: \"घोषणा\",\n feedbackTitle: \"फीडबैक साझा करें\",\n feedbackTrigger: \"फीडबैक\",\n feedbackSubmitted: \"फीडबैक के लिए धन्यवाद।\",\n submit: \"जमा करें\",\n cancel: \"रद्द करें\",\n askLater: \"बाद में पूछें\",\n },\n};\n\nconst RTL_LANGUAGES = new Set([\"ar\", \"fa\", \"he\", \"ur\"]);\n\nconst STEP_OF_TRANSLATIONS: Record<string, (current: number, total: number) => string> = {\n en: EN_TRANSLATIONS.stepOf,\n es: (current: number, total: number) => `Paso ${current} de ${total}`,\n fr: (current: number, total: number) => `Etape ${current} sur ${total}`,\n de: (current: number, total: number) => `Schritt ${current} von ${total}`,\n pt: (current: number, total: number) => `Etapa ${current} de ${total}`,\n \"zh-cn\": (current: number, total: number) => `第 ${current} / ${total} 步`,\n ja: (current: number, total: number) => `${total}中${current}番目`,\n ko: (current: number, total: number) => `${total}단계 중 ${current}단계`,\n ar: (current: number, total: number) => `الخطوة ${current} من ${total}`,\n hi: (current: number, total: number) => `${total} में से चरण ${current}`,\n};\n\nconst NEW_FEATURE_COUNT_TRANSLATIONS: Record<string, (count: number) => string> = {\n en: EN_TRANSLATIONS.newFeatureCount,\n es: (count: number) => (count === 0 ? \"Sin novedades\" : `${count} novedad${count === 1 ? \"\" : \"es\"}`),\n fr: (count: number) =>\n count === 0 ? \"Aucune nouveaute\" : `${count} nouveaute${count === 1 ? \"\" : \"s\"}`,\n de: (count: number) =>\n count === 0\n ? \"Keine neuen Features\"\n : `${count} ${count === 1 ? \"neues Feature\" : \"neue Features\"}`,\n pt: (count: number) =>\n count === 0 ? \"Sem novidades\" : `${count} novidade${count === 1 ? \"\" : \"s\"}`,\n \"zh-cn\": (count: number) => (count === 0 ? \"暂无更新\" : `${count} 条新更新`),\n ja: (count: number) => (count === 0 ? \"新着はありません\" : `新着 ${count} 件`),\n ko: (count: number) => (count === 0 ? \"새 소식 없음\" : `새 소식 ${count}개`),\n ar: (count: number) => {\n if (count === 0) return \"لا توجد ميزات جديدة\";\n const category = new Intl.PluralRules(\"ar\").select(count);\n if (category === \"one\") return \"ميزة جديدة واحدة\";\n if (category === \"two\") return \"ميزتان جديدتان\";\n return `${count} ميزات جديدة`;\n },\n hi: (count: number) =>\n count === 0 ? \"कोई नया अपडेट नहीं\" : `${count} ${count === 1 ? \"नया अपडेट\" : \"नए अपडेट\"}`,\n};\n\nexport function resolveLocale(locale?: string): string {\n const normalized = (locale ?? \"en\").toLowerCase();\n if (normalized === \"en\" || normalized.startsWith(\"en-\")) return \"en\";\n if (Object.prototype.hasOwnProperty.call(SIMPLE_TRANSLATIONS, normalized)) {\n return normalized;\n }\n const base = normalized.split(\"-\")[0];\n if (base === \"en\") return \"en\";\n if (Object.prototype.hasOwnProperty.call(SIMPLE_TRANSLATIONS, base)) {\n return base;\n }\n return \"en\";\n}\n\nexport function getLocaleDirection(locale?: string): \"ltr\" | \"rtl\" {\n const resolved = resolveLocale(locale);\n const base = resolved.split(\"-\")[0];\n return RTL_LANGUAGES.has(base) ? \"rtl\" : \"ltr\";\n}\n\nexport function formatDateForLocale(\n value: string | number | Date,\n locale?: string,\n options: Intl.DateTimeFormatOptions = {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n },\n): string {\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.getTime())) return \"\";\n const resolved = resolveLocale(locale);\n try {\n return new Intl.DateTimeFormat(resolved, options).format(date);\n } catch {\n return date.toLocaleDateString(undefined, options);\n }\n}\n\nexport function formatRelativeTimeForLocale(\n value: string | number | Date,\n locale?: string,\n options?: {\n now?: string | number | Date;\n numeric?: Intl.RelativeTimeFormatNumeric;\n style?: Intl.RelativeTimeFormatStyle;\n },\n): string {\n const target = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(target.getTime())) return \"\";\n const nowInput = options?.now;\n const nowDate =\n nowInput instanceof Date\n ? nowInput\n : typeof nowInput !== \"undefined\"\n ? new Date(nowInput)\n : new Date();\n if (Number.isNaN(nowDate.getTime())) return \"\";\n\n const diffMs = target.getTime() - nowDate.getTime();\n const absDiff = Math.abs(diffMs);\n const minute = 60_000;\n const hour = 60 * minute;\n const day = 24 * hour;\n const week = 7 * day;\n const month = 30 * day;\n const year = 365 * day;\n\n let unit: Intl.RelativeTimeFormatUnit = \"second\";\n let divisor = 1_000;\n if (absDiff >= year) {\n unit = \"year\";\n divisor = year;\n } else if (absDiff >= month) {\n unit = \"month\";\n divisor = month;\n } else if (absDiff >= week) {\n unit = \"week\";\n divisor = week;\n } else if (absDiff >= day) {\n unit = \"day\";\n divisor = day;\n } else if (absDiff >= hour) {\n unit = \"hour\";\n divisor = hour;\n } else if (absDiff >= minute) {\n unit = \"minute\";\n divisor = minute;\n }\n\n const relativeValue = Math.round(diffMs / divisor);\n const resolvedLocale = resolveLocale(locale);\n try {\n const formatter = new Intl.RelativeTimeFormat(resolvedLocale, {\n numeric: options?.numeric ?? \"auto\",\n style: options?.style ?? \"long\",\n });\n return formatter.format(relativeValue, unit);\n } catch {\n const fallback = formatDateForLocale(target, resolvedLocale);\n return fallback || target.toISOString();\n }\n}\n\nexport function resolveTranslations(\n locale?: string,\n overrides?: Partial<FeatureDropTranslations>,\n): FeatureDropTranslations {\n const resolvedLocale = resolveLocale(locale);\n const base = resolvedLocale === \"en\" ? {} : SIMPLE_TRANSLATIONS[resolvedLocale] ?? {};\n const stepOf =\n overrides?.stepOf ??\n STEP_OF_TRANSLATIONS[resolvedLocale] ??\n STEP_OF_TRANSLATIONS.en;\n const newFeatureCount =\n overrides?.newFeatureCount ??\n NEW_FEATURE_COUNT_TRANSLATIONS[resolvedLocale] ??\n NEW_FEATURE_COUNT_TRANSLATIONS.en;\n\n return {\n ...EN_TRANSLATIONS,\n ...base,\n ...(overrides ?? {}),\n stepOf,\n newFeatureCount,\n };\n}\n\nexport const FEATUREDROP_TRANSLATIONS = {\n en: EN_TRANSLATIONS,\n ...SIMPLE_TRANSLATIONS,\n} as const;\n","import type { FeatureEntry, FeatureManifest, FeatureVariant } from \"./types\";\n\nconst VARIANT_META_KEY = \"featuredropVariant\";\nconst VARIANT_KEY_STORAGE = \"featuredrop:variant-key\";\n\nfunction readStorageValue(key: string): string | null {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (storageKey: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return null;\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeStorageValue(key: string, value: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (storageKey: string, storageValue: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(key, value);\n } catch {\n // noop\n }\n}\n\nfunction hashToPercent(value: string): number {\n let hash = 2166136261;\n for (let i = 0; i < value.length; i += 1) {\n hash ^= value.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return (hash >>> 0) % 100;\n}\n\nfunction normalizeSplit(count: number, split?: number[]): number[] {\n if (!split || split.length !== count) {\n return Array.from({ length: count }, () => 100 / count);\n }\n const cleaned = split.map((value) => (Number.isFinite(value) && value > 0 ? value : 0));\n const total = cleaned.reduce((sum, value) => sum + value, 0);\n if (total <= 0) {\n return Array.from({ length: count }, () => 100 / count);\n }\n return cleaned.map((value) => (value / total) * 100);\n}\n\nfunction pickVariantName(feature: FeatureEntry, variantKey: string): string | null {\n const variants = feature.variants;\n if (!variants) return null;\n const names = Object.keys(variants);\n if (names.length === 0) return null;\n if (names.length === 1) return names[0];\n\n const split = normalizeSplit(names.length, feature.variantSplit);\n const bucket = hashToPercent(`${feature.id}:${variantKey}`);\n let cumulative = 0;\n for (let i = 0; i < names.length; i += 1) {\n cumulative += split[i];\n if (bucket < cumulative) return names[i];\n }\n return names[names.length - 1];\n}\n\nexport function getFeatureVariantName(feature: FeatureEntry): string | undefined {\n const raw = feature.meta?.[VARIANT_META_KEY];\n return typeof raw === \"string\" ? raw : undefined;\n}\n\nexport function applyFeatureVariant(\n feature: FeatureEntry,\n variantKey: string,\n): FeatureEntry {\n const variantName = pickVariantName(feature, variantKey);\n if (!variantName) return feature;\n const variant: FeatureVariant | undefined = feature.variants?.[variantName];\n if (!variant) return feature;\n\n return {\n ...feature,\n label: variant.label ?? feature.label,\n description: variant.description ?? feature.description,\n image: variant.image ?? feature.image,\n cta: variant.cta ?? feature.cta,\n meta: {\n ...(feature.meta ?? {}),\n ...(variant.meta ?? {}),\n [VARIANT_META_KEY]: variantName,\n },\n };\n}\n\nexport function applyFeatureVariants(\n manifest: FeatureManifest,\n variantKey: string,\n): FeatureEntry[] {\n return manifest.map((feature) => applyFeatureVariant(feature, variantKey));\n}\n\nfunction createRandomKey(): string {\n return Math.random().toString(36).slice(2, 12);\n}\n\nexport function getOrCreateVariantKey(explicitKey?: string): string {\n if (explicitKey) return explicitKey;\n const existing = readStorageValue(VARIANT_KEY_STORAGE);\n if (existing) return existing;\n const next = createRandomKey();\n writeStorageValue(VARIANT_KEY_STORAGE, next);\n return next;\n}\n","import { createContext } from \"react\";\nimport type { FeatureDropAnimationPreset, FeatureDropEngine, FeatureEntry, FeaturePriority } from \"../types\";\nimport type { AdoptionEventInput } from \"../analytics\";\nimport type { FeatureDropTranslations } from \"../i18n\";\n\nexport interface FeatureDropContextValue {\n /** Full manifest provided to the provider */\n manifest: FeatureEntry[] | readonly FeatureEntry[];\n /** All currently \"new\" features */\n newFeatures: FeatureEntry[];\n /** New features currently queued by throttling rules */\n queuedFeatures: FeatureEntry[];\n /** Count of new features */\n newCount: number;\n /** Count before throttling (all pending new features) */\n totalNewCount: number;\n /** All new features sorted by priority then release date */\n newFeaturesSorted: FeatureEntry[];\n /** Check if a sidebar key has any new features */\n isNew: (sidebarKey: string) => boolean;\n /** Dismiss a single feature by ID */\n dismiss: (id: string) => void;\n /** Dismiss all features (marks all as seen) */\n dismissAll: () => Promise<void>;\n /** Get the feature entry for a sidebar key (if it's new) */\n getFeature: (sidebarKey: string) => FeatureEntry | undefined;\n /** Whether quiet mode (Do Not Disturb) is enabled */\n quietMode: boolean;\n /** Enable/disable quiet mode */\n setQuietMode: (enabled: boolean) => void;\n /** Mark a feature as seen for dependency-chain resolution */\n markFeatureSeen: (featureId: string) => void;\n /** Mark a feature as clicked for dependency-chain resolution */\n markFeatureClicked: (featureId: string) => void;\n /** Remaining toasts allowed in this session under throttle rules */\n getRemainingToastSlots: () => number;\n /** Mark toasts as shown in this session */\n markToastsShown: (featureIds: string[]) => void;\n /** Whether a modal can open right now under throttle rules */\n canShowModal: (priority?: FeaturePriority) => boolean;\n /** Record a modal display timestamp */\n markModalShown: () => void;\n /** Whether a tour can start right now under throttle rules */\n canShowTour: () => boolean;\n /** Record a tour start timestamp */\n markTourShown: () => void;\n /** Acquire/release spotlight slots under maxSimultaneousSpotlights */\n acquireSpotlightSlot: (id: string, priority?: FeaturePriority) => boolean;\n releaseSpotlightSlot: (id: string) => void;\n /** Number of currently active spotlight slots */\n activeSpotlightCount: number;\n /** Emit an adoption analytics event (collector-backed when configured) */\n trackAdoptionEvent: (event: AdoptionEventInput) => void;\n /** Report a component/runtime error to provider-level monitoring hooks */\n reportError: (\n error: unknown,\n context?: { component?: string; componentStack?: string },\n ) => void;\n /** Active locale code used by built-in UI strings */\n locale: string;\n /** Text direction derived from locale */\n direction: \"ltr\" | \"rtl\";\n /** Active motion preset for built-in component transitions */\n animation: FeatureDropAnimationPreset;\n /** Resolved translation strings for built-in React components */\n translations: FeatureDropTranslations;\n /** Track a named usage event for trigger rules */\n trackUsageEvent: (event: string, delta?: number) => void;\n /** Track a named trigger event for trigger rules */\n trackTriggerEvent: (event: string) => void;\n /** Mark a milestone for trigger rules */\n trackMilestone: (event: string) => void;\n /** Manually override current path for page trigger rules */\n setTriggerPath: (path: string) => void;\n /** Optional engine instance for AI-powered delivery intelligence */\n engine: FeatureDropEngine | null;\n}\n\nexport const FeatureDropContext = createContext<FeatureDropContextValue | null>(\n null,\n);\n","import {\n useState,\n useCallback,\n useMemo,\n useRef,\n useEffect,\n type ReactNode,\n} from \"react\";\nimport type {\n AudienceMatchFn,\n AnalyticsCallbacks,\n FeatureDropAnimationPreset,\n FeatureDropEngine,\n FeatureFlagBridge,\n FeatureManifest,\n FeaturePriority,\n StorageAdapter,\n TriggerContext,\n UserContext,\n} from \"../types\";\nimport type { ThrottleOptions } from \"../throttle\";\nimport type { AdoptionEventInput, AnalyticsCollector } from \"../analytics\";\nimport { prefersReducedMotion, resolveAnimationPreset } from \"../animation\";\nimport { getNewFeatures } from \"../core\";\nimport { getFeatureById } from \"../helpers\";\nimport { applyAnnouncementThrottle } from \"../throttle\";\nimport { TriggerEngine } from \"../triggers\";\nimport {\n getLocaleDirection,\n resolveLocale,\n resolveTranslations,\n type FeatureDropTranslations,\n} from \"../i18n\";\nimport {\n applyFeatureVariants,\n getFeatureVariantName,\n getOrCreateVariantKey,\n} from \"../variants\";\nimport { FeatureDropContext } from \"./context\";\n\nconst QUIET_MODE_STORAGE_KEY = \"featuredrop:quiet-mode\";\nconst SEEN_FEATURES_STORAGE_KEY = \"featuredrop:seen-features\";\nconst CLICKED_FEATURES_STORAGE_KEY = \"featuredrop:clicked-features\";\n\nfunction getCurrentPath(): string {\n if (typeof window === \"undefined\") return \"\";\n return `${window.location.pathname}${window.location.search}${window.location.hash}`;\n}\n\nfunction getScrollPercent(): number {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return 0;\n const root = document.documentElement;\n const max = root.scrollHeight - window.innerHeight;\n if (max <= 0) return 100;\n return Math.max(0, Math.min(100, Math.round((window.scrollY / max) * 100)));\n}\n\nfunction readQuietMode(): boolean {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (key: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return false;\n try {\n return storage.getItem(QUIET_MODE_STORAGE_KEY) === \"1\";\n } catch {\n return false;\n }\n}\n\nfunction writeQuietMode(enabled: boolean): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (key: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(QUIET_MODE_STORAGE_KEY, enabled ? \"1\" : \"0\");\n } catch {\n // noop\n }\n}\n\nfunction readIdSet(key: string): Set<string> {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (storageKey: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return new Set<string>();\n try {\n const raw = storage.getItem(key);\n if (!raw) return new Set<string>();\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) return new Set<string>();\n return new Set(parsed.filter((value): value is string => typeof value === \"string\"));\n } catch {\n return new Set<string>();\n }\n}\n\nfunction writeIdSet(key: string, values: ReadonlySet<string>): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (storageKey: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(key, JSON.stringify(Array.from(values)));\n } catch {\n // noop\n }\n}\n\ninterface FeatureState {\n allFeatures: ReturnType<typeof getNewFeatures>;\n visibleFeatures: ReturnType<typeof getNewFeatures>;\n queuedFeatures: ReturnType<typeof getNewFeatures>;\n}\n\nfunction computeFeatureState({\n manifest,\n storage,\n now,\n userContext,\n matchAudience,\n appVersion,\n product,\n throttle,\n sessionStartedAt,\n quietMode,\n seenFeatureIds,\n clickedFeatureIds,\n triggerContext,\n flagBridge,\n}: {\n manifest: FeatureManifest;\n storage: StorageAdapter;\n now: Date;\n userContext?: UserContext;\n matchAudience?: AudienceMatchFn;\n appVersion?: string;\n product?: string;\n throttle?: ThrottleOptions;\n sessionStartedAt: number;\n quietMode: boolean;\n seenFeatureIds: ReadonlySet<string>;\n clickedFeatureIds: ReadonlySet<string>;\n triggerContext?: TriggerContext;\n flagBridge?: FeatureFlagBridge;\n}): FeatureState {\n const dismissedIds = storage.getDismissedIds();\n const allFeatures = getNewFeatures(\n manifest,\n storage,\n now,\n userContext,\n matchAudience,\n appVersion,\n {\n seenIds: seenFeatureIds,\n clickedIds: clickedFeatureIds,\n dismissedIds,\n },\n triggerContext,\n flagBridge,\n product,\n );\n\n const throttled = applyAnnouncementThrottle(\n allFeatures,\n throttle,\n {\n sessionStartedAt,\n quietMode,\n },\n now.getTime(),\n );\n\n return {\n allFeatures,\n visibleFeatures: throttled.visible,\n queuedFeatures: throttled.queued,\n };\n}\n\nexport interface FeatureDropProviderProps {\n /** The feature manifest — typically a frozen array of FeatureEntry objects */\n manifest: FeatureManifest;\n /** Storage adapter instance (e.g. LocalStorageAdapter, MemoryAdapter) */\n storage: StorageAdapter;\n /** Optional analytics callbacks — pipe to your analytics provider */\n analytics?: AnalyticsCallbacks;\n /** Optional error callback for monitoring caught component errors */\n onError?: (error: unknown, context?: { component?: string; componentStack?: string }) => void;\n /** User context for audience targeting (plan, role, region, traits) */\n userContext?: UserContext;\n /** Custom audience matcher — overrides default AND/OR matching logic */\n matchAudience?: AudienceMatchFn;\n /** Current app version (semver) for version-pinned features */\n appVersion?: string;\n /** Current product scope for multi-product manifests */\n product?: string;\n /** Announcement throttling and session cooldown controls */\n throttle?: ThrottleOptions;\n /** Stable identifier for A/B variant assignment (e.g. userId) */\n variantKey?: string;\n /** Optional adoption analytics collector */\n collector?: AnalyticsCollector;\n /** Feature flag bridge for evaluating `feature.flagKey` visibility */\n flagBridge?: FeatureFlagBridge;\n /** Locale code for built-in component translations (e.g. \"en\", \"fr\", \"es\") */\n locale?: string;\n /** Animation preset for built-in component transitions */\n animation?: FeatureDropAnimationPreset;\n /** Custom translation overrides for built-in component strings */\n translations?: Partial<FeatureDropTranslations>;\n /** Optional engine for AI-powered delivery intelligence (@featuredrop/engine) */\n engine?: FeatureDropEngine;\n children: ReactNode;\n}\n\n/**\n * Provides feature discovery state to the component tree.\n *\n * Wrap your app (or a subtree) with this provider to enable\n * `useFeatureDrop`, `useNewFeature`, `useNewCount`, and other hooks.\n */\nexport function FeatureDropProvider({\n manifest,\n storage,\n analytics,\n onError,\n userContext,\n matchAudience: matchAudienceFn,\n appVersion,\n product,\n throttle,\n variantKey,\n collector,\n flagBridge,\n locale = \"en\",\n animation = \"normal\",\n translations: translationOverrides,\n engine,\n children,\n}: FeatureDropProviderProps) {\n const analyticsRef = useRef(analytics);\n analyticsRef.current = analytics;\n\n const sessionStartedAtRef = useRef(Date.now());\n const lastModalAtRef = useRef<number | null>(null);\n const lastTourAtRef = useRef<number | null>(null);\n const activeSpotlightIdsRef = useRef(new Set<string>());\n const triggerEngineRef = useRef<TriggerEngine | null>(null);\n if (!triggerEngineRef.current) {\n triggerEngineRef.current = new TriggerEngine({\n path: getCurrentPath(),\n scrollPercent: getScrollPercent(),\n });\n }\n const lastScrollPercentRef = useRef<number>(getScrollPercent());\n const [triggerVersion, setTriggerVersion] = useState(0);\n const [quietMode, setQuietModeState] = useState(() => readQuietMode());\n const [toastShownIds, setToastShownIds] = useState<Set<string>>(new Set());\n const [activeSpotlightIds, setActiveSpotlightIds] = useState<Set<string>>(new Set());\n const [seenFeatureIds, setSeenFeatureIds] = useState<Set<string>>(\n () => readIdSet(SEEN_FEATURES_STORAGE_KEY),\n );\n const [clickedFeatureIds, setClickedFeatureIds] = useState<Set<string>>(\n () => readIdSet(CLICKED_FEATURES_STORAGE_KEY),\n );\n const resolvedVariantKey = useMemo(() => getOrCreateVariantKey(variantKey), [variantKey]);\n const resolvedLocale = useMemo(() => resolveLocale(locale), [locale]);\n const direction = useMemo(() => getLocaleDirection(resolvedLocale), [resolvedLocale]);\n const resolvedAnimation = useMemo(\n () => resolveAnimationPreset(animation, { reducedMotion: prefersReducedMotion() }),\n [animation],\n );\n const translations = useMemo(\n () => resolveTranslations(resolvedLocale, translationOverrides),\n [resolvedLocale, translationOverrides],\n );\n const resolvedManifest = useMemo(\n () => applyFeatureVariants(manifest, resolvedVariantKey),\n [manifest, resolvedVariantKey],\n );\n const [featureState, setFeatureState] = useState<FeatureState>(() =>\n computeFeatureState({\n manifest: resolvedManifest,\n storage,\n now: new Date(),\n userContext,\n matchAudience: matchAudienceFn,\n appVersion,\n product,\n throttle,\n sessionStartedAt: sessionStartedAtRef.current,\n quietMode: readQuietMode(),\n seenFeatureIds: readIdSet(SEEN_FEATURES_STORAGE_KEY),\n clickedFeatureIds: readIdSet(CLICKED_FEATURES_STORAGE_KEY),\n triggerContext: (() => {\n const engine = triggerEngineRef.current;\n if (!engine) return undefined;\n engine.setElapsedMs(Date.now() - sessionStartedAtRef.current);\n return engine.getContext();\n })(),\n flagBridge,\n }),\n );\n\n const recompute = useCallback(() => {\n const engine = triggerEngineRef.current;\n let triggerContext: TriggerContext | undefined;\n if (engine) {\n engine.setElapsedMs(Date.now() - sessionStartedAtRef.current);\n triggerContext = engine.getContext();\n }\n\n setFeatureState(\n computeFeatureState({\n manifest: resolvedManifest,\n storage,\n now: new Date(),\n userContext,\n matchAudience: matchAudienceFn,\n appVersion,\n product,\n throttle,\n sessionStartedAt: sessionStartedAtRef.current,\n quietMode,\n seenFeatureIds,\n clickedFeatureIds,\n triggerContext,\n flagBridge,\n }),\n );\n }, [\n resolvedManifest,\n storage,\n userContext,\n matchAudienceFn,\n appVersion,\n product,\n throttle,\n quietMode,\n seenFeatureIds,\n clickedFeatureIds,\n triggerVersion,\n flagBridge,\n ]);\n\n useEffect(() => {\n recompute();\n }, [recompute]);\n\n // Engine lifecycle — initialize on mount, destroy on unmount\n useEffect(() => {\n engine?.initialize?.();\n return () => {\n engine?.destroy?.();\n };\n }, [engine]);\n\n const hasTimeTriggers = useMemo(\n () => resolvedManifest.some((feature) => feature.trigger?.type === \"time\"),\n [resolvedManifest],\n );\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const updatePath = () => {\n triggerEngineRef.current?.setPath(getCurrentPath());\n setTriggerVersion((value) => value + 1);\n };\n window.addEventListener(\"popstate\", updatePath);\n window.addEventListener(\"hashchange\", updatePath);\n return () => {\n window.removeEventListener(\"popstate\", updatePath);\n window.removeEventListener(\"hashchange\", updatePath);\n };\n }, []);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const updateScroll = () => {\n const percent = getScrollPercent();\n if (percent === lastScrollPercentRef.current) return;\n lastScrollPercentRef.current = percent;\n triggerEngineRef.current?.setScrollPercent(percent);\n setTriggerVersion((value) => value + 1);\n };\n updateScroll();\n window.addEventListener(\"scroll\", updateScroll, { passive: true });\n window.addEventListener(\"resize\", updateScroll);\n return () => {\n window.removeEventListener(\"scroll\", updateScroll);\n window.removeEventListener(\"resize\", updateScroll);\n };\n }, []);\n\n useEffect(() => {\n if (!hasTimeTriggers) return;\n const timer = setInterval(() => {\n setTriggerVersion((value) => value + 1);\n }, 1000);\n return () => {\n clearInterval(timer);\n };\n }, [hasTimeTriggers]);\n\n useEffect(() => {\n const sessionCooldown = throttle?.sessionCooldown;\n if (!sessionCooldown || sessionCooldown <= 0) return;\n const elapsed = Date.now() - sessionStartedAtRef.current;\n const remaining = sessionCooldown - elapsed;\n if (remaining <= 0) return;\n const timer = setTimeout(() => {\n recompute();\n }, remaining + 5);\n return () => clearTimeout(timer);\n }, [recompute, throttle?.sessionCooldown]);\n\n useEffect(() => {\n let changed = false;\n const next = new Set(seenFeatureIds);\n for (const feature of featureState.visibleFeatures) {\n if (next.has(feature.id)) continue;\n next.add(feature.id);\n changed = true;\n }\n if (!changed) return;\n setSeenFeatureIds(next);\n writeIdSet(SEEN_FEATURES_STORAGE_KEY, next);\n }, [featureState.visibleFeatures, seenFeatureIds]);\n\n const dismiss = useCallback(\n (id: string) => {\n const feature = getFeatureById(resolvedManifest, id);\n storage.dismiss(id);\n if (feature) {\n analyticsRef.current?.onFeatureDismissed?.(feature);\n }\n collector?.track({\n type: \"feature_dismissed\",\n featureId: id,\n variant: feature ? getFeatureVariantName(feature) : undefined,\n });\n recompute();\n },\n [collector, resolvedManifest, storage, recompute],\n );\n\n const dismissAll = useCallback(async () => {\n await storage.dismissAll(new Date());\n analyticsRef.current?.onAllDismissed?.();\n recompute();\n }, [recompute, storage]);\n\n const inSessionCooldown = useCallback((now: number): boolean => {\n const sessionCooldown = throttle?.sessionCooldown ?? 0;\n if (!sessionCooldown || sessionCooldown <= 0) return false;\n return now - sessionStartedAtRef.current < sessionCooldown;\n }, [throttle?.sessionCooldown]);\n\n const shouldSuppressForQuietMode = useCallback((priority?: FeaturePriority): boolean => {\n if (!throttle?.respectDoNotDisturb || !quietMode) return false;\n return priority !== \"critical\";\n }, [quietMode, throttle?.respectDoNotDisturb]);\n\n const getRemainingToastSlots = useCallback((): number => {\n const maxToastsPerSession = throttle?.maxToastsPerSession;\n if (!maxToastsPerSession || maxToastsPerSession <= 0) return Number.POSITIVE_INFINITY;\n return Math.max(0, maxToastsPerSession - toastShownIds.size);\n }, [throttle?.maxToastsPerSession, toastShownIds.size]);\n\n const markToastsShown = useCallback((featureIds: string[]) => {\n if (featureIds.length === 0) return;\n setToastShownIds((previous) => {\n let changed = false;\n const next = new Set(previous);\n for (const id of featureIds) {\n if (!id || next.has(id)) continue;\n next.add(id);\n changed = true;\n }\n return changed ? next : previous;\n });\n }, []);\n\n const canShowModal = useCallback((priority?: FeaturePriority): boolean => {\n const now = Date.now();\n if (inSessionCooldown(now)) return false;\n if (shouldSuppressForQuietMode(priority)) return false;\n const minTime = throttle?.minTimeBetweenModals ?? 0;\n const lastShown = lastModalAtRef.current;\n if (minTime > 0 && lastShown && now - lastShown < minTime) return false;\n return true;\n }, [inSessionCooldown, shouldSuppressForQuietMode, throttle?.minTimeBetweenModals]);\n\n const markModalShown = useCallback(() => {\n lastModalAtRef.current = Date.now();\n }, []);\n\n const canShowTour = useCallback((): boolean => {\n const now = Date.now();\n if (inSessionCooldown(now)) return false;\n if (shouldSuppressForQuietMode(undefined)) return false;\n const minTime = throttle?.minTimeBetweenTours ?? 0;\n const lastShown = lastTourAtRef.current;\n if (minTime > 0 && lastShown && now - lastShown < minTime) return false;\n return true;\n }, [inSessionCooldown, shouldSuppressForQuietMode, throttle?.minTimeBetweenTours]);\n\n const markTourShown = useCallback(() => {\n lastTourAtRef.current = Date.now();\n }, []);\n\n const acquireSpotlightSlot = useCallback((id: string, priority?: FeaturePriority): boolean => {\n if (!id) return false;\n if (shouldSuppressForQuietMode(priority)) return false;\n const current = activeSpotlightIdsRef.current;\n if (current.has(id)) return true;\n const maxSpotlights = throttle?.maxSimultaneousSpotlights;\n if (maxSpotlights && maxSpotlights > 0 && current.size >= maxSpotlights) return false;\n const next = new Set(current);\n next.add(id);\n activeSpotlightIdsRef.current = next;\n setActiveSpotlightIds(next);\n return true;\n }, [shouldSuppressForQuietMode, throttle?.maxSimultaneousSpotlights]);\n\n const releaseSpotlightSlot = useCallback((id: string) => {\n if (!id) return;\n const current = activeSpotlightIdsRef.current;\n if (!current.has(id)) return;\n const next = new Set(current);\n next.delete(id);\n activeSpotlightIdsRef.current = next;\n setActiveSpotlightIds(next);\n }, []);\n\n const setQuietMode = useCallback((enabled: boolean) => {\n setQuietModeState(enabled);\n writeQuietMode(enabled);\n }, []);\n\n const markFeatureSeen = useCallback((featureId: string) => {\n setSeenFeatureIds((previous) => {\n if (previous.has(featureId)) return previous;\n const next = new Set(previous);\n next.add(featureId);\n writeIdSet(SEEN_FEATURES_STORAGE_KEY, next);\n const feature = getFeatureById(resolvedManifest, featureId);\n collector?.track({\n type: \"feature_seen\",\n featureId,\n variant: feature ? getFeatureVariantName(feature) : undefined,\n });\n return next;\n });\n }, [collector, resolvedManifest]);\n\n const markFeatureClicked = useCallback((featureId: string) => {\n setClickedFeatureIds((previous) => {\n if (previous.has(featureId)) return previous;\n const next = new Set(previous);\n next.add(featureId);\n writeIdSet(CLICKED_FEATURES_STORAGE_KEY, next);\n const feature = getFeatureById(resolvedManifest, featureId);\n collector?.track({\n type: \"feature_clicked\",\n featureId,\n variant: feature ? getFeatureVariantName(feature) : undefined,\n });\n return next;\n });\n }, [collector, resolvedManifest]);\n\n const trackAdoptionEvent = useCallback((event: AdoptionEventInput) => {\n if (!collector) return;\n const feature = event.featureId ? getFeatureById(resolvedManifest, event.featureId) : undefined;\n collector.track({\n ...event,\n variant: event.variant ?? (feature ? getFeatureVariantName(feature) : undefined),\n });\n }, [collector, resolvedManifest]);\n\n const reportError = useCallback(\n (error: unknown, context?: { component?: string; componentStack?: string }) => {\n onError?.(error, context);\n if (typeof process !== \"undefined\" && process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"[featuredrop] component error\", context?.component, error);\n }\n },\n [onError],\n );\n\n const trackUsageEvent = useCallback((event: string, delta = 1) => {\n if (!event) return;\n triggerEngineRef.current?.trackUsage(event, delta);\n setTriggerVersion((value) => value + 1);\n }, []);\n\n const trackTriggerEvent = useCallback((event: string) => {\n if (!event) return;\n triggerEngineRef.current?.trackEvent(event);\n setTriggerVersion((value) => value + 1);\n }, []);\n\n const trackMilestone = useCallback((event: string) => {\n if (!event) return;\n triggerEngineRef.current?.trackMilestone(event);\n setTriggerVersion((value) => value + 1);\n }, []);\n\n const setTriggerPath = useCallback((path: string) => {\n if (!path) return;\n triggerEngineRef.current?.setPath(path);\n setTriggerVersion((value) => value + 1);\n }, []);\n\n const isNewFn = useCallback(\n (sidebarKey: string) =>\n featureState.visibleFeatures.some((feature) => feature.sidebarKey === sidebarKey),\n [featureState.visibleFeatures],\n );\n\n const getFeature = useCallback(\n (sidebarKey: string) =>\n featureState.visibleFeatures.find((feature) => feature.sidebarKey === sidebarKey),\n [featureState.visibleFeatures],\n );\n\n const newFeaturesSorted = useMemo(() => {\n const priorityOrder = { critical: 0, normal: 1, low: 2 };\n return [...featureState.visibleFeatures].sort((a, b) => {\n const pa = priorityOrder[a.priority ?? \"normal\"];\n const pb = priorityOrder[b.priority ?? \"normal\"];\n if (pa !== pb) return pa - pb;\n return new Date(b.releasedAt).getTime() - new Date(a.releasedAt).getTime();\n });\n }, [featureState.visibleFeatures]);\n\n const value = useMemo(\n () => ({\n manifest: resolvedManifest,\n newFeatures: featureState.visibleFeatures,\n queuedFeatures: featureState.queuedFeatures,\n newCount: featureState.visibleFeatures.length,\n totalNewCount: featureState.allFeatures.length,\n newFeaturesSorted,\n isNew: isNewFn,\n dismiss,\n dismissAll,\n getFeature,\n quietMode,\n setQuietMode,\n markFeatureSeen,\n markFeatureClicked,\n getRemainingToastSlots,\n markToastsShown,\n canShowModal,\n markModalShown,\n canShowTour,\n markTourShown,\n acquireSpotlightSlot,\n releaseSpotlightSlot,\n activeSpotlightCount: activeSpotlightIds.size,\n trackAdoptionEvent,\n reportError,\n locale: resolvedLocale,\n direction,\n animation: resolvedAnimation,\n translations,\n trackUsageEvent,\n trackTriggerEvent,\n trackMilestone,\n setTriggerPath,\n engine: engine ?? null,\n }),\n [\n resolvedManifest,\n featureState.visibleFeatures,\n featureState.queuedFeatures,\n featureState.allFeatures.length,\n newFeaturesSorted,\n isNewFn,\n dismiss,\n dismissAll,\n getFeature,\n quietMode,\n setQuietMode,\n markFeatureSeen,\n markFeatureClicked,\n getRemainingToastSlots,\n markToastsShown,\n canShowModal,\n markModalShown,\n canShowTour,\n markTourShown,\n acquireSpotlightSlot,\n releaseSpotlightSlot,\n activeSpotlightIds.size,\n trackAdoptionEvent,\n reportError,\n resolvedLocale,\n direction,\n resolvedAnimation,\n translations,\n trackUsageEvent,\n trackTriggerEvent,\n trackMilestone,\n setTriggerPath,\n engine,\n ],\n );\n\n return (\n <FeatureDropContext.Provider value={value}>\n {children}\n </FeatureDropContext.Provider>\n );\n}\n","export interface FeatureDropTheme {\n colors: {\n primary: string;\n background: string;\n text: string;\n textMuted: string;\n border: string;\n success: string;\n warning: string;\n error: string;\n };\n fonts: {\n family: string;\n sizeBase: string;\n sizeSm: string;\n sizeLg: string;\n };\n spacing: {\n xs: string;\n sm: string;\n md: string;\n lg: string;\n xl: string;\n };\n radii: {\n sm: string;\n md: string;\n lg: string;\n full: string;\n };\n shadows: {\n sm: string;\n md: string;\n lg: string;\n };\n zIndex: {\n base: number;\n tooltip: number;\n modal: number;\n overlay: number;\n };\n}\n\nexport type FeatureDropThemePreset = \"light\" | \"dark\" | \"auto\" | \"minimal\" | \"vibrant\";\n\nexport type FeatureDropThemeOverrides = {\n [K in keyof FeatureDropTheme]?: Partial<FeatureDropTheme[K]>;\n};\n\nexport type FeatureDropThemeInput =\n | FeatureDropThemePreset\n | FeatureDropThemeOverrides\n | FeatureDropTheme;\n\nconst LIGHT_THEME: FeatureDropTheme = {\n colors: {\n primary: \"#2563eb\",\n background: \"#ffffff\",\n text: \"#111827\",\n textMuted: \"#6b7280\",\n border: \"#e5e7eb\",\n success: \"#16a34a\",\n warning: \"#f59e0b\",\n error: \"#dc2626\",\n },\n fonts: {\n family: \"system-ui, -apple-system, Segoe UI, sans-serif\",\n sizeBase: \"14px\",\n sizeSm: \"12px\",\n sizeLg: \"16px\",\n },\n spacing: {\n xs: \"4px\",\n sm: \"8px\",\n md: \"12px\",\n lg: \"16px\",\n xl: \"24px\",\n },\n radii: {\n sm: \"6px\",\n md: \"8px\",\n lg: \"12px\",\n full: \"999px\",\n },\n shadows: {\n sm: \"0 2px 8px rgba(0, 0, 0, 0.08)\",\n md: \"0 8px 24px rgba(0, 0, 0, 0.12)\",\n lg: \"0 20px 60px rgba(0, 0, 0, 0.16)\",\n },\n zIndex: {\n base: 9998,\n tooltip: 10000,\n modal: 10001,\n overlay: 9997,\n },\n};\n\nconst DARK_THEME: FeatureDropTheme = {\n ...LIGHT_THEME,\n colors: {\n primary: \"#60a5fa\",\n background: \"#0b1220\",\n text: \"#f3f4f6\",\n textMuted: \"#9ca3af\",\n border: \"#1f2937\",\n success: \"#4ade80\",\n warning: \"#fbbf24\",\n error: \"#f87171\",\n },\n shadows: {\n sm: \"0 2px 8px rgba(0, 0, 0, 0.35)\",\n md: \"0 8px 24px rgba(0, 0, 0, 0.42)\",\n lg: \"0 20px 60px rgba(0, 0, 0, 0.52)\",\n },\n};\n\nconst MINIMAL_THEME: FeatureDropTheme = {\n ...LIGHT_THEME,\n colors: {\n ...LIGHT_THEME.colors,\n primary: \"#111827\",\n background: \"#ffffff\",\n text: \"#111827\",\n textMuted: \"#6b7280\",\n border: \"#d1d5db\",\n success: \"#111827\",\n warning: \"#111827\",\n error: \"#111827\",\n },\n shadows: {\n sm: \"none\",\n md: \"none\",\n lg: \"none\",\n },\n radii: {\n sm: \"0\",\n md: \"0\",\n lg: \"0\",\n full: \"0\",\n },\n};\n\nconst VIBRANT_THEME: FeatureDropTheme = {\n ...LIGHT_THEME,\n colors: {\n primary: \"#ec4899\",\n background: \"#fff7ed\",\n text: \"#3f1d57\",\n textMuted: \"#6d4c84\",\n border: \"#fdba74\",\n success: \"#10b981\",\n warning: \"#f59e0b\",\n error: \"#ef4444\",\n },\n shadows: {\n sm: \"0 2px 10px rgba(236, 72, 153, 0.15)\",\n md: \"0 10px 26px rgba(236, 72, 153, 0.22)\",\n lg: \"0 22px 58px rgba(236, 72, 153, 0.28)\",\n },\n};\n\nexport const FEATUREDROP_THEMES = {\n light: LIGHT_THEME,\n dark: DARK_THEME,\n minimal: MINIMAL_THEME,\n vibrant: VIBRANT_THEME,\n} as const;\n\nfunction isThemePreset(value: unknown): value is FeatureDropThemePreset {\n return (\n value === \"light\" ||\n value === \"dark\" ||\n value === \"auto\" ||\n value === \"minimal\" ||\n value === \"vibrant\"\n );\n}\n\nfunction mergeTheme(base: FeatureDropTheme, overrides?: FeatureDropThemeOverrides): FeatureDropTheme {\n if (!overrides) return base;\n return {\n colors: {\n ...base.colors,\n ...(overrides.colors ?? {}),\n },\n fonts: {\n ...base.fonts,\n ...(overrides.fonts ?? {}),\n },\n spacing: {\n ...base.spacing,\n ...(overrides.spacing ?? {}),\n },\n radii: {\n ...base.radii,\n ...(overrides.radii ?? {}),\n },\n shadows: {\n ...base.shadows,\n ...(overrides.shadows ?? {}),\n },\n zIndex: {\n ...base.zIndex,\n ...(overrides.zIndex ?? {}),\n },\n };\n}\n\nexport function createTheme(overrides: FeatureDropThemeOverrides, base: FeatureDropTheme = LIGHT_THEME): FeatureDropTheme {\n return mergeTheme(base, overrides);\n}\n\nexport function resolveTheme(\n input: FeatureDropThemeInput = \"light\",\n options: { prefersDark?: boolean } = {},\n): FeatureDropTheme {\n if (isThemePreset(input)) {\n if (input === \"auto\") {\n return options.prefersDark ? DARK_THEME : LIGHT_THEME;\n }\n return FEATUREDROP_THEMES[input];\n }\n return mergeTheme(LIGHT_THEME, input);\n}\n\nfunction applyThemeSection(\n vars: Record<string, string | number>,\n key: string,\n values: Record<string, string | number>,\n): void {\n for (const [token, value] of Object.entries(values)) {\n vars[`--featuredrop-${key}-${token}`] = value;\n }\n}\n\nexport function themeToCSSVariables(theme: FeatureDropTheme): Record<string, string | number> {\n const vars: Record<string, string | number> = {};\n\n applyThemeSection(vars, \"color\", theme.colors);\n applyThemeSection(vars, \"font\", theme.fonts);\n applyThemeSection(vars, \"space\", theme.spacing);\n applyThemeSection(vars, \"radius\", theme.radii);\n applyThemeSection(vars, \"shadow\", theme.shadows);\n applyThemeSection(vars, \"z\", theme.zIndex as Record<string, number>);\n\n vars[\"--featuredrop-font-family\"] = theme.fonts.family;\n vars[\"--featuredrop-widget-bg\"] = theme.colors.background;\n vars[\"--featuredrop-trigger-bg\"] = theme.colors.background;\n vars[\"--featuredrop-trigger-color\"] = theme.colors.text;\n vars[\"--featuredrop-entry-title-color\"] = theme.colors.text;\n vars[\"--featuredrop-entry-desc-color\"] = theme.colors.textMuted;\n vars[\"--featuredrop-title-color\"] = theme.colors.text;\n vars[\"--featuredrop-border-color\"] = theme.colors.border;\n vars[\"--featuredrop-cta-bg\"] = theme.colors.primary;\n vars[\"--featuredrop-cta-color\"] = theme.colors.background;\n vars[\"--featuredrop-mark-all-color\"] = theme.colors.primary;\n vars[\"--featuredrop-widget-shadow\"] = theme.shadows.md;\n vars[\"--featuredrop-widget-radius\"] = theme.radii.lg;\n vars[\"--featuredrop-trigger-radius\"] = theme.radii.md;\n vars[\"--featuredrop-badge-bg\"] = theme.colors.warning;\n vars[\"--featuredrop-z-index\"] = theme.zIndex.base;\n vars[\"--featuredrop-toast-z-index\"] = theme.zIndex.tooltip;\n vars[\"--featuredrop-tour-z-index\"] = theme.zIndex.modal;\n vars[\"--featuredrop-tour-overlay-z-index\"] = theme.zIndex.overlay;\n\n return vars;\n}\n","import { useEffect, useMemo, useState, type CSSProperties } from \"react\";\nimport {\n resolveTheme,\n themeToCSSVariables,\n type FeatureDropThemeInput,\n} from \"../theme\";\n\nconst PREFERS_DARK_MEDIA_QUERY = \"(prefers-color-scheme: dark)\";\n\nfunction getPrefersDarkFromSystem(): boolean {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return false;\n }\n return window.matchMedia(PREFERS_DARK_MEDIA_QUERY).matches;\n}\n\nfunction usePrefersDark(shouldTrack: boolean): boolean {\n const [prefersDark, setPrefersDark] = useState<boolean>(() => getPrefersDarkFromSystem());\n\n useEffect(() => {\n if (!shouldTrack || typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return;\n }\n\n const mediaQuery = window.matchMedia(PREFERS_DARK_MEDIA_QUERY);\n setPrefersDark(mediaQuery.matches);\n\n const handleChange = (event: MediaQueryListEvent) => {\n setPrefersDark(event.matches);\n };\n\n if (typeof mediaQuery.addEventListener === \"function\") {\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }\n\n mediaQuery.addListener(handleChange);\n return () => mediaQuery.removeListener(handleChange);\n }, [shouldTrack]);\n\n if (!shouldTrack) {\n return getPrefersDarkFromSystem();\n }\n\n return prefersDark;\n}\n\nexport function useThemeVariables(theme?: FeatureDropThemeInput): CSSProperties | undefined {\n const prefersDark = usePrefersDark(theme === \"auto\");\n\n return useMemo(() => {\n if (!theme) return undefined;\n return themeToCSSVariables(resolveTheme(theme, { prefersDark })) as CSSProperties;\n }, [theme, prefersDark]);\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport type { FeatureDropThemeInput } from \"../../theme\";\nimport { useThemeVariables } from \"../theme\";\n\nexport interface ThemeProviderProps {\n /** Theme preset (\"light\" | \"dark\" | \"auto\" | \"minimal\" | \"vibrant\") or custom theme overrides */\n theme?: FeatureDropThemeInput;\n /** Optional CSS class for the wrapper element */\n className?: string;\n /** Optional inline style merged after theme CSS variables */\n style?: CSSProperties;\n children: ReactNode;\n}\n\n/**\n * Applies FeatureDrop theme tokens as CSS custom properties to a subtree.\n *\n * All featuredrop components inside this provider inherit the resolved theme.\n */\nexport function ThemeProvider({\n theme = \"light\",\n className,\n style,\n children,\n}: ThemeProviderProps) {\n const themeVariables = useThemeVariables(theme);\n\n return (\n <div\n data-featuredrop-theme-provider\n className={className}\n style={{ ...themeVariables, ...style }}\n >\n {children}\n </div>\n );\n}\n","import { useContext } from \"react\";\nimport { FeatureDropContext } from \"../context\";\nimport type { FeatureDropContextValue } from \"../context\";\n\n/**\n * Access the full feature discovery context.\n *\n * Returns: `{ newFeatures, newCount, isNew, dismiss, dismissAll, getFeature }`\n *\n * @throws Error if used outside of `<FeatureDropProvider>`\n */\nexport function useFeatureDrop(): FeatureDropContextValue {\n const context = useContext(FeatureDropContext);\n if (!context) {\n throw new Error(\n \"useFeatureDrop must be used within a <FeatureDropProvider>\",\n );\n }\n return context;\n}\n","import { useFeatureDrop } from \"./use-feature-drop\";\nimport type { FeatureEntry } from \"../../types\";\n\nexport interface UseNewFeatureResult {\n /** Whether this sidebar key has a new feature */\n isNew: boolean;\n /** The feature entry, if new */\n feature: FeatureEntry | undefined;\n /** Dismiss the feature for this sidebar key */\n dismiss: () => void;\n}\n\n/**\n * Check if a single navigation item has a new feature.\n *\n * @param sidebarKey - The key to check (e.g. \"/journal\", \"settings\")\n * @returns `{ isNew, feature, dismiss }`\n */\nexport function useNewFeature(sidebarKey: string): UseNewFeatureResult {\n const { isNew, getFeature, dismiss } = useFeatureDrop();\n\n const feature = getFeature(sidebarKey);\n const isNewValue = isNew(sidebarKey);\n\n return {\n isNew: isNewValue,\n feature,\n dismiss: () => {\n if (feature) {\n dismiss(feature.id);\n }\n },\n };\n}\n","import { useFeatureDrop } from \"./use-feature-drop\";\n\n/**\n * Get the count of currently new features.\n *\n * Useful for rendering a badge count on a \"What's New\" button.\n *\n * @returns The number of new features\n */\nexport function useNewCount(): number {\n const { newCount } = useFeatureDrop();\n return newCount;\n}\n","import { useEffect, useRef } from \"react\";\nimport { useFeatureDrop } from \"./use-feature-drop\";\n\nexport interface UseTabNotificationOptions {\n /** Whether tab notifications are enabled. Default: true */\n enabled?: boolean;\n /** Template string. `{count}` is replaced with the number. Default: \"({count}) {title}\" */\n template?: string;\n /** Enable flashing/blinking pattern for attention. Default: false */\n flash?: boolean;\n /** Flash interval in ms. Default: 1500 */\n flashInterval?: number;\n}\n\n/**\n * Updates the browser tab title with the unread feature count.\n *\n * Shows \"(3) My App\" when there are new features, restores the original\n * title when all features are read. Optional flash/blink pattern for attention.\n *\n * @example\n * ```tsx\n * function App() {\n * useTabNotification();\n * return <div>...</div>;\n * }\n * ```\n *\n * @example With flash\n * ```tsx\n * useTabNotification({ flash: true, template: \"[{count} new] {title}\" });\n * ```\n */\nexport function useTabNotification(options: UseTabNotificationOptions = {}): void {\n const {\n enabled = true,\n template = \"({count}) {title}\",\n flash = false,\n flashInterval = 1500,\n } = options;\n\n const { newCount } = useFeatureDrop();\n const originalTitleRef = useRef<string>(\"\");\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n // Capture original title once\n if (!originalTitleRef.current) {\n originalTitleRef.current = document.title;\n }\n const originalTitle = originalTitleRef.current;\n\n if (!enabled || newCount === 0) {\n // Restore original title\n document.title = originalTitle;\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n return;\n }\n\n const notificationTitle = template\n .replace(\"{count}\", String(newCount))\n .replace(\"{title}\", originalTitle);\n\n if (flash) {\n // Alternate between notification and original title\n let showNotification = true;\n document.title = notificationTitle;\n intervalRef.current = setInterval(() => {\n showNotification = !showNotification;\n document.title = showNotification ? notificationTitle : originalTitle;\n }, flashInterval);\n } else {\n document.title = notificationTitle;\n }\n\n return () => {\n document.title = originalTitle;\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n };\n }, [enabled, newCount, template, flash, flashInterval]);\n}\n","export type AdoptionEventType =\n | \"feature_seen\"\n | \"feature_clicked\"\n | \"feature_dismissed\"\n | \"tour_started\"\n | \"tour_completed\"\n | \"tour_skipped\"\n | \"checklist_task_completed\"\n | \"checklist_completed\"\n | \"survey_submitted\"\n | \"feedback_submitted\"\n | \"announcement_shown\"\n | \"cta_clicked\";\n\nexport interface AdoptionEvent {\n type: AdoptionEventType;\n featureId?: string;\n tourId?: string;\n variant?: string;\n timestamp: string;\n sessionId?: string;\n userId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport type AdoptionEventInput = Omit<AdoptionEvent, \"timestamp\"> & {\n timestamp?: string;\n};\n\nexport interface AnalyticsAdapter {\n track: (event: AdoptionEvent) => void | Promise<void>;\n trackBatch?: (events: AdoptionEvent[]) => void | Promise<void>;\n}\n\nexport interface AnalyticsCollectorOptions {\n adapter: AnalyticsAdapter;\n batchSize?: number;\n flushInterval?: number;\n sampleRate?: number;\n enabled?: boolean;\n sessionId?: string;\n userId?: string;\n now?: () => Date;\n random?: () => number;\n}\n\nexport class AnalyticsCollector {\n private adapter: AnalyticsAdapter;\n private queue: AdoptionEvent[] = [];\n private batchSize: number;\n private flushInterval: number;\n private sampleRate: number;\n private enabled: boolean;\n private now: () => Date;\n private random: () => number;\n private sessionId?: string;\n private userId?: string;\n private timer: ReturnType<typeof setInterval> | null = null;\n private flushing = false;\n\n constructor(options: AnalyticsCollectorOptions) {\n this.adapter = options.adapter;\n this.batchSize = options.batchSize ?? 20;\n this.flushInterval = options.flushInterval ?? 10_000;\n this.sampleRate = options.sampleRate ?? 1;\n this.enabled = options.enabled ?? true;\n this.sessionId = options.sessionId;\n this.userId = options.userId;\n this.now = options.now ?? (() => new Date());\n this.random = options.random ?? Math.random;\n this.startTimer();\n }\n\n setEnabled(enabled: boolean): void {\n this.enabled = enabled;\n }\n\n setContext(context: { sessionId?: string; userId?: string }): void {\n if (context.sessionId !== undefined) this.sessionId = context.sessionId;\n if (context.userId !== undefined) this.userId = context.userId;\n }\n\n getQueueSize(): number {\n return this.queue.length;\n }\n\n track(event: AdoptionEventInput): void {\n if (!this.enabled) return;\n if (this.sampleRate < 1 && this.random() > this.sampleRate) return;\n const normalized: AdoptionEvent = {\n ...event,\n timestamp: event.timestamp ?? this.now().toISOString(),\n sessionId: event.sessionId ?? this.sessionId,\n userId: event.userId ?? this.userId,\n };\n this.queue.push(normalized);\n if (this.queue.length >= this.batchSize) {\n void this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.flushing) return;\n if (this.queue.length === 0) return;\n this.flushing = true;\n const batch = this.queue.splice(0, this.queue.length);\n try {\n if (this.adapter.trackBatch) {\n await this.adapter.trackBatch(batch);\n } else {\n for (const event of batch) {\n await this.adapter.track(event);\n }\n }\n } catch {\n // Requeue on transient failures.\n this.queue = [...batch, ...this.queue];\n } finally {\n this.flushing = false;\n }\n }\n\n async destroy(): Promise<void> {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n await this.flush();\n }\n\n private startTimer(): void {\n if (this.flushInterval <= 0) return;\n this.timer = setInterval(() => {\n void this.flush();\n }, this.flushInterval);\n }\n}\n\nexport class PostHogAdapter implements AnalyticsAdapter {\n constructor(\n private readonly client: {\n capture: (event: string, properties?: Record<string, unknown>) => void;\n },\n ) {}\n\n track(event: AdoptionEvent): void {\n this.client.capture(event.type, {\n featureId: event.featureId,\n tourId: event.tourId,\n variant: event.variant,\n timestamp: event.timestamp,\n sessionId: event.sessionId,\n userId: event.userId,\n ...event.metadata,\n });\n }\n}\n\nexport class AmplitudeAdapter implements AnalyticsAdapter {\n constructor(\n private readonly client: {\n track: (event: string, properties?: Record<string, unknown>) => void;\n },\n ) {}\n\n track(event: AdoptionEvent): void {\n this.client.track(event.type, {\n featureId: event.featureId,\n tourId: event.tourId,\n variant: event.variant,\n timestamp: event.timestamp,\n sessionId: event.sessionId,\n userId: event.userId,\n ...event.metadata,\n });\n }\n}\n\nexport class MixpanelAdapter implements AnalyticsAdapter {\n constructor(\n private readonly client: {\n track: (event: string, properties?: Record<string, unknown>) => void;\n },\n ) {}\n\n track(event: AdoptionEvent): void {\n this.client.track(event.type, {\n featureId: event.featureId,\n tourId: event.tourId,\n variant: event.variant,\n timestamp: event.timestamp,\n sessionId: event.sessionId,\n userId: event.userId,\n ...event.metadata,\n });\n }\n}\n\nexport class SegmentAdapter implements AnalyticsAdapter {\n constructor(\n private readonly client: {\n track: (event: string, properties?: Record<string, unknown>) => void;\n },\n ) {}\n\n track(event: AdoptionEvent): void {\n this.client.track(event.type, {\n featureId: event.featureId,\n tourId: event.tourId,\n variant: event.variant,\n timestamp: event.timestamp,\n sessionId: event.sessionId,\n userId: event.userId,\n ...event.metadata,\n });\n }\n}\n\nexport class CustomAdapter implements AnalyticsAdapter {\n constructor(private readonly handler: (event: AdoptionEvent) => void | Promise<void>) {}\n\n track(event: AdoptionEvent): void | Promise<void> {\n return this.handler(event);\n }\n}\n\nexport interface FeatureEngagementMetrics {\n seen: number;\n clicked: number;\n dismissed: number;\n}\n\nexport interface AdoptionMetrics {\n getAdoptionRate: (featureId: string) => number;\n getTourCompletionRate: (tourId: string) => number;\n getChecklistCompletionRate: (checklistId: string) => number;\n getFeatureEngagement: (featureId: string) => FeatureEngagementMetrics;\n getVariantPerformance: (featureId: string) => Record<string, number>;\n}\n\nexport function createAdoptionMetrics(events: AdoptionEvent[]): AdoptionMetrics {\n const getAdoptionRate = (featureId: string): number => {\n const seen = events.filter((event) => event.type === \"feature_seen\" && event.featureId === featureId).length;\n if (seen === 0) return 0;\n const clicked = events.filter((event) => event.type === \"feature_clicked\" && event.featureId === featureId).length;\n return clicked / seen;\n };\n\n const getTourCompletionRate = (tourId: string): number => {\n const started = events.filter((event) => event.type === \"tour_started\" && event.tourId === tourId).length;\n if (started === 0) return 0;\n const completed = events.filter((event) => event.type === \"tour_completed\" && event.tourId === tourId).length;\n return completed / started;\n };\n\n const getChecklistCompletionRate = (checklistId: string): number => {\n const taskCompleted = events.filter((event) =>\n event.type === \"checklist_task_completed\" &&\n event.metadata?.checklistId === checklistId\n ).length;\n if (taskCompleted === 0) return 0;\n const completed = events.filter((event) =>\n event.type === \"checklist_completed\" &&\n event.metadata?.checklistId === checklistId\n ).length;\n return completed / taskCompleted;\n };\n\n const getFeatureEngagement = (featureId: string): FeatureEngagementMetrics => ({\n seen: events.filter((event) => event.type === \"feature_seen\" && event.featureId === featureId).length,\n clicked: events.filter((event) => event.type === \"feature_clicked\" && event.featureId === featureId).length,\n dismissed: events.filter((event) => event.type === \"feature_dismissed\" && event.featureId === featureId).length,\n });\n\n const getVariantPerformance = (featureId: string): Record<string, number> => {\n const byVariant = new Map<string, { seen: number; clicked: number }>();\n for (const event of events) {\n if (event.featureId !== featureId) continue;\n const variant = event.variant ?? \"control\";\n const bucket = byVariant.get(variant) ?? { seen: 0, clicked: 0 };\n if (event.type === \"feature_seen\") bucket.seen += 1;\n if (event.type === \"feature_clicked\") bucket.clicked += 1;\n byVariant.set(variant, bucket);\n }\n const output: Record<string, number> = {};\n for (const [variant, bucket] of byVariant.entries()) {\n output[variant] = bucket.seen === 0 ? 0 : bucket.clicked / bucket.seen;\n }\n return output;\n };\n\n return {\n getAdoptionRate,\n getTourCompletionRate,\n getChecklistCompletionRate,\n getFeatureEngagement,\n getVariantPerformance,\n };\n}\n","import { useMemo } from \"react\";\nimport type { AdoptionEvent } from \"../../analytics\";\nimport { createAdoptionMetrics, type AdoptionMetrics } from \"../../analytics\";\n\nexport function useAdoptionAnalytics(events: AdoptionEvent[]): AdoptionMetrics {\n return useMemo(() => createAdoptionMetrics(events), [events]);\n}\n","import type { TourStep } from \"./components/tour\";\n\nexport interface TourSnapshot {\n isActive: boolean;\n currentStepIndex: number;\n currentStep: TourStep | null;\n totalSteps: number;\n}\n\nexport interface TourController {\n startTour: () => void;\n nextStep: () => void;\n prevStep: () => void;\n skipTour: () => void;\n closeTour: () => void;\n getSnapshot: () => TourSnapshot;\n subscribe: (listener: () => void) => () => void;\n}\n\nconst controllers = new Map<string, TourController>();\nconst registryListeners = new Map<string, Set<() => void>>();\n\nfunction emitRegistry(id: string): void {\n const listeners = registryListeners.get(id);\n if (!listeners) return;\n for (const listener of listeners) listener();\n}\n\nexport function registerTourController(id: string, controller: TourController): () => void {\n controllers.set(id, controller);\n emitRegistry(id);\n return () => {\n if (controllers.get(id) === controller) {\n controllers.delete(id);\n emitRegistry(id);\n }\n };\n}\n\nexport function getTourController(id: string): TourController | undefined {\n return controllers.get(id);\n}\n\nexport function subscribeTourRegistry(id: string, listener: () => void): () => void {\n const listeners = registryListeners.get(id) ?? new Set<() => void>();\n listeners.add(listener);\n registryListeners.set(id, listeners);\n return () => {\n const current = registryListeners.get(id);\n if (!current) return;\n current.delete(listener);\n if (current.size === 0) {\n registryListeners.delete(id);\n }\n };\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { getTourController, subscribeTourRegistry, type TourSnapshot } from \"../tour-registry\";\n\nconst EMPTY_SNAPSHOT: TourSnapshot = {\n isActive: false,\n currentStepIndex: -1,\n currentStep: null,\n totalSteps: 0,\n};\n\nexport interface UseTourResult {\n startTour: () => void;\n nextStep: () => void;\n prevStep: () => void;\n skipTour: () => void;\n closeTour: () => void;\n currentStep: TourSnapshot[\"currentStep\"];\n currentStepIndex: number;\n totalSteps: number;\n isActive: boolean;\n}\n\nfunction readSnapshot(id: string): TourSnapshot {\n const controller = getTourController(id);\n if (!controller) return EMPTY_SNAPSHOT;\n return controller.getSnapshot();\n}\n\nexport function useTour(id: string): UseTourResult {\n const [snapshot, setSnapshot] = useState<TourSnapshot>(() => readSnapshot(id));\n\n useEffect(() => {\n let unsubscribeController: (() => void) | null = null;\n\n const bindController = (): void => {\n if (unsubscribeController) {\n unsubscribeController();\n unsubscribeController = null;\n }\n const controller = getTourController(id);\n if (!controller) {\n setSnapshot(EMPTY_SNAPSHOT);\n return;\n }\n setSnapshot(controller.getSnapshot());\n unsubscribeController = controller.subscribe(() => {\n setSnapshot(controller.getSnapshot());\n });\n };\n\n bindController();\n const unsubscribeRegistry = subscribeTourRegistry(id, bindController);\n return () => {\n unsubscribeRegistry();\n if (unsubscribeController) unsubscribeController();\n };\n }, [id]);\n\n const call = useCallback((method: keyof Omit<UseTourResult, \"currentStep\" | \"currentStepIndex\" | \"totalSteps\" | \"isActive\">) => {\n const controller = getTourController(id);\n if (!controller) return;\n controller[method]();\n }, [id]);\n\n return useMemo(\n () => ({\n startTour: () => call(\"startTour\"),\n nextStep: () => call(\"nextStep\"),\n prevStep: () => call(\"prevStep\"),\n skipTour: () => call(\"skipTour\"),\n closeTour: () => call(\"closeTour\"),\n currentStep: snapshot.currentStep,\n currentStepIndex: snapshot.currentStepIndex,\n totalSteps: snapshot.totalSteps,\n isActive: snapshot.isActive,\n }),\n [call, snapshot],\n );\n}\n","import { useCallback, useMemo, useState } from \"react\";\nimport { useFeatureDrop } from \"./use-feature-drop\";\nimport { getTourController } from \"../tour-registry\";\n\nexport interface TourSequenceItem {\n featureId: string;\n tourId: string;\n}\n\nexport interface UseTourSequencerResult {\n nextTourId: string | null;\n nextFeatureId: string | null;\n remainingTours: number;\n startNextTour: () => boolean;\n}\n\nexport function useTourSequencer(sequence: TourSequenceItem[]): UseTourSequencerResult {\n const {\n newFeatures,\n canShowTour,\n markTourShown,\n markFeatureSeen,\n } = useFeatureDrop();\n const [startedFeatureIds, setStartedFeatureIds] = useState<Set<string>>(new Set());\n\n const visibleFeatureIds = useMemo(\n () => new Set(newFeatures.map((feature) => feature.id)),\n [newFeatures],\n );\n\n const remaining = useMemo(\n () =>\n sequence.filter(\n (item) =>\n visibleFeatureIds.has(item.featureId) &&\n !startedFeatureIds.has(item.featureId),\n ),\n [sequence, startedFeatureIds, visibleFeatureIds],\n );\n\n const next = remaining[0] ?? null;\n\n const startNextTour = useCallback((): boolean => {\n if (!next) return false;\n if (!canShowTour()) return false;\n const controller = getTourController(next.tourId);\n if (!controller) return false;\n setStartedFeatureIds((previous) => {\n if (previous.has(next.featureId)) return previous;\n const updated = new Set(previous);\n updated.add(next.featureId);\n return updated;\n });\n markFeatureSeen(next.featureId);\n markTourShown();\n controller.startTour();\n return true;\n }, [canShowTour, markFeatureSeen, markTourShown, next]);\n\n return {\n nextTourId: next?.tourId ?? null,\n nextFeatureId: next?.featureId ?? null,\n remainingTours: remaining.length,\n startNextTour,\n };\n}\n","export interface ChecklistSnapshot {\n exists: boolean;\n tasks: Array<{ id: string; completed: boolean }>;\n progress: { completed: number; total: number; percent: number };\n isComplete: boolean;\n dismissed: boolean;\n collapsed: boolean;\n}\n\nexport interface ChecklistController {\n completeTask: (taskId: string) => void;\n resetChecklist: () => void;\n dismissChecklist: () => void;\n toggleCollapsed: () => void;\n getSnapshot: () => ChecklistSnapshot;\n subscribe: (listener: () => void) => () => void;\n}\n\nconst controllers = new Map<string, ChecklistController>();\nconst registryListeners = new Map<string, Set<() => void>>();\n\nfunction emitRegistry(id: string): void {\n const listeners = registryListeners.get(id);\n if (!listeners) return;\n for (const listener of listeners) listener();\n}\n\nexport function registerChecklistController(id: string, controller: ChecklistController): () => void {\n controllers.set(id, controller);\n emitRegistry(id);\n return () => {\n if (controllers.get(id) === controller) {\n controllers.delete(id);\n emitRegistry(id);\n }\n };\n}\n\nexport function getChecklistController(id: string): ChecklistController | undefined {\n return controllers.get(id);\n}\n\nexport function subscribeChecklistRegistry(id: string, listener: () => void): () => void {\n const listeners = registryListeners.get(id) ?? new Set<() => void>();\n listeners.add(listener);\n registryListeners.set(id, listeners);\n return () => {\n const current = registryListeners.get(id);\n if (!current) return;\n current.delete(listener);\n if (current.size === 0) registryListeners.delete(id);\n };\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n getChecklistController,\n subscribeChecklistRegistry,\n type ChecklistSnapshot,\n} from \"../checklist-registry\";\n\nconst EMPTY_SNAPSHOT: ChecklistSnapshot = {\n exists: false,\n tasks: [],\n progress: { completed: 0, total: 0, percent: 0 },\n isComplete: false,\n dismissed: false,\n collapsed: false,\n};\n\nexport interface UseChecklistResult {\n completeTask: (taskId: string) => void;\n resetChecklist: () => void;\n dismissChecklist: () => void;\n toggleCollapsed: () => void;\n isComplete: boolean;\n progress: { completed: number; total: number; percent: number };\n tasks: Array<{ id: string; completed: boolean }>;\n dismissed: boolean;\n collapsed: boolean;\n}\n\nfunction readSnapshot(id: string): ChecklistSnapshot {\n const controller = getChecklistController(id);\n if (!controller) return EMPTY_SNAPSHOT;\n return controller.getSnapshot();\n}\n\nexport function useChecklist(id: string): UseChecklistResult {\n const [snapshot, setSnapshot] = useState<ChecklistSnapshot>(() => readSnapshot(id));\n\n useEffect(() => {\n let unsubscribeController: (() => void) | null = null;\n\n const bind = (): void => {\n if (unsubscribeController) {\n unsubscribeController();\n unsubscribeController = null;\n }\n const controller = getChecklistController(id);\n if (!controller) {\n setSnapshot(EMPTY_SNAPSHOT);\n return;\n }\n setSnapshot(controller.getSnapshot());\n unsubscribeController = controller.subscribe(() => {\n setSnapshot(controller.getSnapshot());\n });\n };\n\n bind();\n const unsubscribeRegistry = subscribeChecklistRegistry(id, bind);\n return () => {\n unsubscribeRegistry();\n if (unsubscribeController) unsubscribeController();\n };\n }, [id]);\n\n const invoke = useCallback((method: \"completeTask\" | \"resetChecklist\" | \"dismissChecklist\" | \"toggleCollapsed\", arg?: string) => {\n const controller = getChecklistController(id);\n if (!controller) return;\n if (method === \"completeTask\") {\n controller.completeTask(arg ?? \"\");\n return;\n }\n controller[method]();\n }, [id]);\n\n return useMemo(\n () => ({\n completeTask: (taskId: string) => invoke(\"completeTask\", taskId),\n resetChecklist: () => invoke(\"resetChecklist\"),\n dismissChecklist: () => invoke(\"dismissChecklist\"),\n toggleCollapsed: () => invoke(\"toggleCollapsed\"),\n isComplete: snapshot.isComplete,\n progress: snapshot.progress,\n tasks: snapshot.tasks,\n dismissed: snapshot.dismissed,\n collapsed: snapshot.collapsed,\n }),\n [invoke, snapshot],\n );\n}\n","import type { SurveyType } from \"./components/survey\";\n\nexport interface SurveySnapshot {\n exists: boolean;\n isOpen: boolean;\n submitted: boolean;\n canShow: boolean;\n type: SurveyType;\n}\n\nexport interface SurveyController {\n show: (options?: { force?: boolean }) => boolean;\n hide: () => void;\n askLater: () => void;\n getSnapshot: () => SurveySnapshot;\n subscribe: (listener: () => void) => () => void;\n}\n\nconst controllers = new Map<string, SurveyController>();\nconst registryListeners = new Map<string, Set<() => void>>();\n\nfunction emitRegistry(id: string): void {\n const listeners = registryListeners.get(id);\n if (!listeners) return;\n for (const listener of listeners) listener();\n}\n\nexport function registerSurveyController(id: string, controller: SurveyController): () => void {\n controllers.set(id, controller);\n emitRegistry(id);\n return () => {\n if (controllers.get(id) === controller) {\n controllers.delete(id);\n emitRegistry(id);\n }\n };\n}\n\nexport function getSurveyController(id: string): SurveyController | undefined {\n return controllers.get(id);\n}\n\nexport function subscribeSurveyRegistry(id: string, listener: () => void): () => void {\n const listeners = registryListeners.get(id) ?? new Set<() => void>();\n listeners.add(listener);\n registryListeners.set(id, listeners);\n return () => {\n const current = registryListeners.get(id);\n if (!current) return;\n current.delete(listener);\n if (current.size === 0) {\n registryListeners.delete(id);\n }\n };\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n getSurveyController,\n subscribeSurveyRegistry,\n type SurveySnapshot,\n} from \"../survey-registry\";\nimport type { SurveyType } from \"../components/survey\";\n\nconst EMPTY_SNAPSHOT: SurveySnapshot = {\n exists: false,\n isOpen: false,\n submitted: false,\n canShow: false,\n type: \"custom\",\n};\n\nexport interface UseSurveyResult {\n show: (options?: { force?: boolean }) => boolean;\n hide: () => void;\n askLater: () => void;\n isOpen: boolean;\n submitted: boolean;\n canShow: boolean;\n type: SurveyType;\n}\n\nfunction readSnapshot(id: string): SurveySnapshot {\n const controller = getSurveyController(id);\n if (!controller) return EMPTY_SNAPSHOT;\n return controller.getSnapshot();\n}\n\nexport function useSurvey(id: string): UseSurveyResult {\n const [snapshot, setSnapshot] = useState<SurveySnapshot>(() => readSnapshot(id));\n\n useEffect(() => {\n let unsubscribeController: (() => void) | null = null;\n\n const bind = (): void => {\n if (unsubscribeController) {\n unsubscribeController();\n unsubscribeController = null;\n }\n const controller = getSurveyController(id);\n if (!controller) {\n setSnapshot(EMPTY_SNAPSHOT);\n return;\n }\n setSnapshot(controller.getSnapshot());\n unsubscribeController = controller.subscribe(() => {\n setSnapshot(controller.getSnapshot());\n });\n };\n\n bind();\n const unsubscribeRegistry = subscribeSurveyRegistry(id, bind);\n return () => {\n unsubscribeRegistry();\n if (unsubscribeController) unsubscribeController();\n };\n }, [id]);\n\n const show = useCallback((options?: { force?: boolean }): boolean => {\n const controller = getSurveyController(id);\n if (!controller) return false;\n return controller.show(options);\n }, [id]);\n\n const hide = useCallback(() => {\n getSurveyController(id)?.hide();\n }, [id]);\n\n const askLater = useCallback(() => {\n getSurveyController(id)?.askLater();\n }, [id]);\n\n return useMemo(\n () => ({\n show,\n hide,\n askLater,\n isOpen: snapshot.isOpen,\n submitted: snapshot.submitted,\n canShow: snapshot.canShow,\n type: snapshot.type,\n }),\n [askLater, hide, show, snapshot],\n );\n}\n","import {\n Component,\n useCallback,\n useContext,\n type ComponentType,\n type ErrorInfo,\n type ReactNode,\n} from \"react\";\nimport { FeatureDropContext } from \"./context\";\n\ninterface BoundaryProps {\n children: ReactNode;\n onError?: (error: unknown, info: ErrorInfo) => void;\n}\n\ninterface BoundaryState {\n hasError: boolean;\n}\n\nclass FeatureDropComponentBoundary extends Component<BoundaryProps, BoundaryState> {\n override state: BoundaryState = { hasError: false };\n\n override componentDidCatch(error: unknown, info: ErrorInfo): void {\n this.setState({ hasError: true });\n this.props.onError?.(error, info);\n }\n\n override render(): ReactNode {\n if (this.state.hasError) return null;\n return this.props.children;\n }\n}\n\nexport function withFeatureDropBoundary<Props extends object>(\n ComponentImpl: ComponentType<Props>,\n componentName: string,\n): ComponentType<Props> {\n function Wrapped(props: Props) {\n const context = useContext(FeatureDropContext);\n const onError = useCallback(\n (error: unknown, info: ErrorInfo) => {\n context?.reportError(error, {\n component: componentName,\n componentStack: info.componentStack ?? undefined,\n });\n },\n [context],\n );\n\n return (\n <FeatureDropComponentBoundary onError={onError}>\n <ComponentImpl {...props} />\n </FeatureDropComponentBoundary>\n );\n }\n\n Wrapped.displayName = `FeatureDropBoundary(${componentName})`;\n return Wrapped;\n}\n","import { useContext, useEffect, useMemo, type ReactNode, type CSSProperties } from \"react\";\nimport {\n ensureFeatureDropAnimationStyles,\n getPulseAnimation,\n prefersReducedMotion,\n resolveAnimationPreset,\n} from \"../../animation\";\nimport { FeatureDropContext } from \"../context\";\n\nexport interface NewBadgeRenderProps {\n /** Whether the feature is currently new */\n isNew: boolean;\n}\n\nexport interface NewBadgeProps {\n /** Display variant */\n variant?: \"pill\" | \"dot\" | \"count\";\n /** Whether to show the badge (typically from `useNewFeature().isNew`) */\n show?: boolean;\n /** Count to display when variant is \"count\" */\n count?: number;\n /** Text label for the pill variant. Default: \"New\" */\n label?: string;\n /** Dismiss callback. If set with `dismissOnClick`, clicking dismisses. */\n onDismiss?: () => void;\n /** Whether clicking the badge should trigger onDismiss */\n dismissOnClick?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Additional inline styles (merged with defaults) */\n style?: CSSProperties;\n /** Render prop for full customization */\n children?: (props: NewBadgeRenderProps) => ReactNode;\n}\n\nconst baseStyles: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontFamily: \"inherit\",\n};\n\nconst pillStyles: CSSProperties = {\n ...baseStyles,\n padding: \"2px 6px\",\n borderRadius: \"9999px\",\n fontSize: \"var(--featuredrop-font-size, 10px)\",\n fontWeight: 700,\n textTransform: \"uppercase\" as const,\n letterSpacing: \"0.05em\",\n lineHeight: 1,\n color: \"var(--featuredrop-color, #b45309)\",\n backgroundColor: \"var(--featuredrop-bg, rgba(245, 158, 11, 0.15))\",\n};\n\nconst dotStyles: CSSProperties = {\n ...baseStyles,\n width: \"var(--featuredrop-dot-size, 8px)\",\n height: \"var(--featuredrop-dot-size, 8px)\",\n borderRadius: \"9999px\",\n backgroundColor: \"var(--featuredrop-color, #f59e0b)\",\n boxShadow: \"0 0 6px var(--featuredrop-glow, rgba(245, 158, 11, 0.6))\",\n animation: \"featuredrop-pulse 2s ease-in-out infinite\",\n};\n\nconst countStyles: CSSProperties = {\n ...baseStyles,\n minWidth: \"var(--featuredrop-count-size, 18px)\",\n height: \"var(--featuredrop-count-size, 18px)\",\n padding: \"0 4px\",\n borderRadius: \"9999px\",\n fontSize: \"var(--featuredrop-font-size, 11px)\",\n fontWeight: 700,\n lineHeight: 1,\n color: \"var(--featuredrop-count-color, white)\",\n backgroundColor: \"var(--featuredrop-count-bg, #f59e0b)\",\n};\n\n/**\n * Headless \"New\" badge component.\n *\n * Styled via CSS custom properties — zero CSS framework dependency:\n * - `--featuredrop-color` — text/dot color\n * - `--featuredrop-bg` — pill background\n * - `--featuredrop-font-size` — font size\n * - `--featuredrop-dot-size` — dot diameter\n * - `--featuredrop-glow` — dot glow color\n * - `--featuredrop-count-size` — count badge size\n * - `--featuredrop-count-color` — count text color\n * - `--featuredrop-count-bg` — count background\n *\n * Use `data-featuredrop` attribute for CSS selector styling.\n */\nexport function NewBadge({\n variant = \"pill\",\n show = true,\n count,\n label = \"New\",\n onDismiss,\n dismissOnClick = false,\n className,\n style,\n children,\n}: NewBadgeProps) {\n const context = useContext(FeatureDropContext);\n const pulsePreset = useMemo(\n () =>\n resolveAnimationPreset(context?.animation ?? \"normal\", {\n reducedMotion: prefersReducedMotion(),\n }),\n [context?.animation],\n );\n const dotPulseAnimation = useMemo(() => getPulseAnimation(pulsePreset, \"dot\"), [pulsePreset]);\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n // Render prop mode\n if (children) {\n return <>{children({ isNew: show })}</>;\n }\n\n if (!show) return null;\n\n const handleClick = dismissOnClick && onDismiss ? onDismiss : undefined;\n\n const variantStyles =\n variant === \"dot\"\n ? {\n ...dotStyles,\n animation: dotPulseAnimation ?? \"none\",\n }\n : variant === \"count\"\n ? countStyles\n : pillStyles;\n\n const content =\n variant === \"dot\"\n ? null\n : variant === \"count\"\n ? (count ?? 0)\n : label;\n\n const ariaLabel =\n variant === \"count\"\n ? `${count ?? 0} new features`\n : \"New feature\";\n\n return (\n <span\n data-featuredrop={variant}\n className={className}\n style={{ ...variantStyles, ...style }}\n onClick={handleClick}\n role={dismissOnClick ? \"button\" : undefined}\n tabIndex={dismissOnClick ? 0 : undefined}\n onKeyDown={\n dismissOnClick && onDismiss\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onDismiss();\n }\n }\n : undefined\n }\n aria-label={ariaLabel}\n aria-live={variant === \"count\" ? \"polite\" : undefined}\n aria-atomic={variant === \"count\" ? true : undefined}\n >\n {content}\n </span>\n );\n}\n","import * as moduleApi from \"module\";\n\n// Lightweight markdown parser with optional `marked` + `shiki` support.\n// The function is synchronous and always returns sanitized HTML.\n\ntype MarkedRenderer = {\n link?: (href: string | null, title: string | null, text: string) => string;\n image?: (href: string | null, title: string | null, text: string) => string;\n paragraph?: (text: string) => string;\n heading?: (text: string, level: number) => string;\n};\n\ntype MarkedModule = {\n Renderer?: new () => MarkedRenderer;\n parse?: (markdown: string, options?: { renderer?: MarkedRenderer }) => string | Promise<string>;\n};\n\ntype ShikiLike = {\n codeToHtml?: (code: string, options?: { lang?: string; theme?: string }) => string | Promise<string>;\n};\n\nconst dynamicRequire =\n typeof moduleApi.createRequire === \"function\" ? moduleApi.createRequire(import.meta.url) : null;\n\nlet cachedMarked: MarkedModule | null | false = null;\nlet cachedShiki: ShikiLike | null | false = null;\n\nfunction optionalRequire<T>(name: string): T | null {\n if (!dynamicRequire) return null;\n try {\n // Using dynamic require so missing optional peers don't break bundling/runtime.\n return dynamicRequire(name) as T;\n } catch (error: unknown) {\n if (error && typeof error === \"object\" && \"code\" in error && (error as { code?: string }).code === \"MODULE_NOT_FOUND\") {\n return null;\n }\n // Any other error should still be treated as a failure to keep parsing resilient.\n return null;\n }\n}\n\nfunction getMarked(): MarkedModule | null {\n if (cachedMarked !== null) return cachedMarked || null;\n cachedMarked = optionalRequire<MarkedModule>(\"marked\") ?? false;\n return cachedMarked || null;\n}\n\nfunction getShiki(): ShikiLike | null {\n if (cachedShiki !== null) return cachedShiki || null;\n cachedShiki = optionalRequire<ShikiLike>(\"shiki\") ?? false;\n return cachedShiki || null;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n\nfunction sanitizeUrl(url: string | null | undefined): string | null {\n if (!url) return null;\n const trimmed = url.trim();\n if (!trimmed) return null;\n\n const lower = trimmed.toLowerCase();\n if (lower.startsWith(\"javascript:\")) return null;\n if (lower.startsWith(\"data:\")) return null;\n if (lower.startsWith(\"vbscript:\")) return null;\n\n // Disallow characters that can break attribute context\n if (/['\"<>\\s]/.test(trimmed)) return null;\n\n return trimmed;\n}\n\nfunction sanitizeHtml(html: string): string {\n return html\n // Remove script/style tags entirely\n .replace(/<script[\\s\\S]*?>[\\s\\S]*?<\\/script>/gi, \"\")\n .replace(/<style[\\s\\S]*?>[\\s\\S]*?<\\/style>/gi, \"\")\n // Remove inline event handlers (on*)\n .replace(/\\s+on[a-z]+\\s*=\\s*(\"[^\"]*\"|'[^']*'|[^\\s>]+)/gi, \"\")\n // Remove javascript: or data: URLs in href/src/xlink:href\n .replace(/\\s+(?:href|src|xlink:href)\\s*=\\s*(\"|')(?:javascript:|data:)[^\"']*\\1/gi, \"\");\n}\n\nfunction decodeAllowedEntities(html: string): string {\n const allowTags = [\n \"p\",\n \"strong\",\n \"em\",\n \"a\",\n \"code\",\n \"pre\",\n \"img\",\n \"ul\",\n \"ol\",\n \"li\",\n \"blockquote\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"br\",\n ];\n\n // Decode common entities inside allowed tags only\n return html.replace(/&lt;(\\/?)([a-z0-9]+)([^>]*)&gt;/gi, (match, slash, tag, rest) => {\n if (!allowTags.includes(tag.toLowerCase())) return match;\n const decodedRest = rest\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&amp;/g, \"&\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\");\n return `<${slash}${tag}${decodedRest}>`;\n });\n}\n\nfunction renderCodeBlock(code: string, language: string | undefined): string {\n const shiki = getShiki();\n if (shiki?.codeToHtml) {\n try {\n const rendered = shiki.codeToHtml(code, { lang: language || \"text\", theme: \"github-dark\" });\n if (typeof rendered === \"string\") return rendered;\n } catch {\n // Fall through to non-highlighted rendering\n }\n }\n\n const langAttr = language ? ` class=\"language-${escapeHtml(language)}\"` : \"\";\n return `<pre><code${langAttr}>${escapeHtml(code)}</code></pre>`;\n}\n\nfunction inlineMarkdown(text: string): string {\n // Escape user-provided HTML before applying markdown conversions.\n let result = escapeHtml(text);\n\n // Protect inline code spans so subsequent replacements don't mangle them.\n const codeSpans: string[] = [];\n result = result.replace(/`([^`]+)`/g, (_match, code) => {\n const idx = codeSpans.length;\n codeSpans.push(`<code>${escapeHtml(code)}</code>`);\n return `§§CODE${idx}§§`;\n });\n\n // Images: ![alt](url)\n result = result.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, (_match, alt, url) => {\n const safeUrl = sanitizeUrl(url);\n const safeAlt = escapeHtml(alt ?? \"\");\n if (!safeUrl) return safeAlt;\n return `<img src=\"${escapeHtml(safeUrl)}\" alt=\"${safeAlt}\" />`;\n });\n\n // Links: [text](url)\n result = result.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_match, label, url) => {\n const safeUrl = sanitizeUrl(url);\n const safeLabel = escapeHtml(label ?? \"\");\n if (!safeUrl) return safeLabel;\n return `<a href=\"${escapeHtml(safeUrl)}\" target=\"_blank\" rel=\"noopener noreferrer\">${safeLabel}</a>`;\n });\n\n // Bold and italic (basic)\n result = result.replace(/\\*\\*([^*]+)\\*\\*/g, \"<strong>$1</strong>\");\n result = result.replace(/\\*([^*]+)\\*/g, \"<em>$1</em>\");\n\n // Restore code spans\n result = result.replace(/§§CODE(\\d+)§§/g, (_m, idx) => codeSpans[Number(idx)] ?? \"\");\n\n return result;\n}\n\nfunction fallbackParse(markdown: string): string {\n const lines = markdown.split(/\\r?\\n/);\n const blocks: string[] = [];\n let listBuffer: string[] | null = null;\n let quoteBuffer: string[] | null = null;\n let inCodeBlock = false;\n let codeLang: string | undefined;\n let codeLines: string[] = [];\n\n const flushList = () => {\n if (!listBuffer) return;\n blocks.push(`<ul>${listBuffer.map((item) => `<li>${item}</li>`).join(\"\")}</ul>`);\n listBuffer = null;\n };\n\n const flushQuote = () => {\n if (!quoteBuffer) return;\n const content = quoteBuffer.map((line) => inlineMarkdown(line.trim())).join(\"<br>\");\n blocks.push(`<blockquote>${content}</blockquote>`);\n quoteBuffer = null;\n };\n\n const flushCode = () => {\n if (!inCodeBlock) return;\n blocks.push(renderCodeBlock(codeLines.join(\"\\n\"), codeLang));\n codeLines = [];\n codeLang = undefined;\n inCodeBlock = false;\n };\n\n for (const rawLine of lines) {\n const line = rawLine.replace(/\\s+$/, \"\");\n\n const codeFence = line.match(/^```(.*)$/);\n if (codeFence) {\n if (inCodeBlock) {\n flushCode();\n } else {\n flushList();\n flushQuote();\n inCodeBlock = true;\n codeLang = codeFence[1]?.trim() || undefined;\n codeLines = [];\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeLines.push(rawLine);\n continue;\n }\n\n const listMatch = line.match(/^\\s*[-*+]\\s+(.*)$/);\n if (listMatch) {\n flushQuote();\n listBuffer = listBuffer ?? [];\n listBuffer.push(inlineMarkdown(listMatch[1].trim()));\n continue;\n }\n\n if (listBuffer) flushList();\n\n const headingMatch = line.match(/^(#{1,6})\\s+(.*)$/);\n if (headingMatch) {\n flushQuote();\n const level = headingMatch[1].length;\n const content = inlineMarkdown(headingMatch[2].trim());\n blocks.push(`<h${level}>${content}</h${level}>`);\n continue;\n }\n\n const quoteMatch = line.match(/^>\\s?(.*)$/);\n if (quoteMatch) {\n quoteBuffer = quoteBuffer ?? [];\n quoteBuffer.push(quoteMatch[1]);\n continue;\n }\n\n if (quoteBuffer) flushQuote();\n\n if (!line.trim()) {\n continue;\n }\n\n blocks.push(`<p>${inlineMarkdown(line.trim())}</p>`);\n }\n\n flushList();\n flushQuote();\n flushCode();\n\n return blocks.join(\"\\n\");\n}\n\nfunction renderWithMarked(markdown: string, marked: MarkedModule): string | null {\n if (!marked.parse) return null;\n\n const renderer = marked.Renderer ? new marked.Renderer() : undefined;\n\n if (renderer) {\n renderer.link = (href, _title, text) => {\n const safeUrl = sanitizeUrl(href);\n if (!safeUrl) return escapeHtml(text);\n return `<a href=\"${escapeHtml(safeUrl)}\" target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`;\n };\n renderer.image = (href, _title, text) => {\n const safeUrl = sanitizeUrl(href);\n const safeAlt = escapeHtml(text ?? \"\");\n if (!safeUrl) return safeAlt;\n return `<img src=\"${escapeHtml(safeUrl)}\" alt=\"${safeAlt}\" />`;\n };\n }\n\n const output = marked.parse(markdown, renderer ? { renderer } : undefined);\n if (typeof output === \"string\") return output;\n return output ? String(output) : null;\n}\n\n/**\n * Parse a feature description from markdown into sanitized HTML.\n * - Uses `marked` when installed (optional peer dep)\n * - Falls back to a tiny built-in parser when `marked` is absent\n * - Strips script tags, event handlers, and javascript:/data: URLs\n */\nexport function parseDescription(markdown: string): string {\n if (!markdown) return \"\";\n\n const marked = getMarked();\n if (marked) {\n try {\n const rendered = renderWithMarked(markdown, marked);\n if (rendered) {\n const sanitized = sanitizeHtml(rendered);\n const decoded = decodeAllowedEntities(sanitized);\n return sanitizeHtml(decoded);\n }\n } catch {\n // If marked fails for any reason, fall back to the tiny parser.\n }\n }\n\n // Fast path: raw HTML provided without `marked` installed\n if (/<[^>]+>/.test(markdown)) {\n const sanitized = sanitizeHtml(markdown);\n const decoded = decodeAllowedEntities(sanitized);\n return sanitizeHtml(decoded);\n }\n\n const fallback = fallbackParse(markdown);\n const sanitized = sanitizeHtml(fallback);\n const decoded = decodeAllowedEntities(sanitized);\n return sanitizeHtml(decoded);\n}\n","export type ReactionCounts = Record<string, number>;\n\nconst COUNTS_STORAGE_KEY = \"featuredrop:reactions:counts\";\nconst USER_STORAGE_KEY = \"featuredrop:reactions:user\";\n\nexport const DEFAULT_REACTIONS = [\"👍\", \"❤️\", \"🎉\", \"👀\", \"👎\"] as const;\n\nfunction readStorageValue(key: string): string | null {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (storageKey: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return null;\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeStorageValue(key: string, value: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (storageKey: string, storageValue: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(key, value);\n } catch {\n // noop\n }\n}\n\nfunction readCountsState(): Record<string, ReactionCounts> {\n const raw = readStorageValue(COUNTS_STORAGE_KEY);\n if (!raw) return {};\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return {};\n return parsed as Record<string, ReactionCounts>;\n } catch {\n return {};\n }\n}\n\nfunction writeCountsState(state: Record<string, ReactionCounts>): void {\n writeStorageValue(COUNTS_STORAGE_KEY, JSON.stringify(state));\n}\n\nfunction readUserState(): Record<string, string> {\n const raw = readStorageValue(USER_STORAGE_KEY);\n if (!raw) return {};\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return {};\n return parsed as Record<string, string>;\n } catch {\n return {};\n }\n}\n\nfunction writeUserState(state: Record<string, string>): void {\n writeStorageValue(USER_STORAGE_KEY, JSON.stringify(state));\n}\n\nexport function getReactionCounts(entryId: string, reactions: readonly string[]): ReactionCounts {\n const state = readCountsState();\n const stored = state[entryId] ?? {};\n const counts: ReactionCounts = {};\n for (const reaction of reactions) {\n const value = stored[reaction];\n counts[reaction] = Number.isFinite(value) && value > 0 ? value : 0;\n }\n return counts;\n}\n\nexport function getUserReaction(entryId: string): string | null {\n const state = readUserState();\n const reaction = state[entryId];\n return typeof reaction === \"string\" && reaction ? reaction : null;\n}\n\nexport function reactToEntry(\n entryId: string,\n reaction: string,\n reactions: readonly string[],\n): { updated: boolean; counts: ReactionCounts; userReaction: string | null } {\n if (!entryId || !reaction || !reactions.includes(reaction)) {\n return {\n updated: false,\n counts: getReactionCounts(entryId, reactions),\n userReaction: getUserReaction(entryId),\n };\n }\n\n const userState = readUserState();\n const currentReaction = userState[entryId];\n if (currentReaction) {\n return {\n updated: false,\n counts: getReactionCounts(entryId, reactions),\n userReaction: currentReaction,\n };\n }\n\n const countsState = readCountsState();\n const entryCounts: ReactionCounts = {\n ...(countsState[entryId] ?? {}),\n };\n entryCounts[reaction] = (entryCounts[reaction] ?? 0) + 1;\n countsState[entryId] = entryCounts;\n writeCountsState(countsState);\n\n userState[entryId] = reaction;\n writeUserState(userState);\n\n return {\n updated: true,\n counts: getReactionCounts(entryId, reactions),\n userReaction: reaction,\n };\n}\n","import {\n useState,\n useCallback,\n useEffect,\n useRef,\n type ReactNode,\n type CSSProperties,\n useMemo,\n} from \"react\";\nimport { parseDescription } from \"../../markdown\";\nimport { formatDateForLocale, formatRelativeTimeForLocale } from \"../../i18n\";\nimport {\n ensureFeatureDropAnimationStyles,\n getAnimationDurationMs,\n getEnterAnimation,\n getExitAnimation,\n} from \"../../animation\";\nimport type { FeatureDropThemeInput } from \"../../theme\";\nimport type { FeatureEntry, AnalyticsCallbacks } from \"../../types\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\nimport { useThemeVariables } from \"../theme\";\nimport {\n DEFAULT_REACTIONS,\n getReactionCounts,\n getUserReaction,\n reactToEntry,\n type ReactionCounts,\n} from \"../reactions-store\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface ChangelogEntryRenderProps {\n feature: FeatureEntry;\n dismiss: () => void;\n onFeatureClick?: () => void;\n reactions?: ReactionCounts;\n userReaction?: string | null;\n canReact?: boolean;\n react?: (reaction: string) => void;\n}\n\nexport interface ChangelogWidgetRenderProps {\n /** Whether the widget is currently open */\n isOpen: boolean;\n /** Open the widget */\n open: () => void;\n /** Close the widget */\n close: () => void;\n /** Toggle open/close */\n toggle: () => void;\n /** Current new feature count */\n count: number;\n /** Sorted features to display */\n features: FeatureEntry[];\n /** Dismiss a single feature */\n dismiss: (id: string) => void;\n /** Dismiss all features */\n dismissAll: () => Promise<void>;\n}\n\nexport interface ChangelogWidgetProps {\n /** Display variant */\n variant?: \"panel\" | \"modal\" | \"popover\";\n /** Title shown in the widget header. Default: \"What's New\" */\n title?: string;\n /** Text for the trigger button. Default: \"What's New\" */\n triggerLabel?: string;\n /** Show trigger badge count. Default: true */\n showCount?: boolean;\n /** Text for the \"mark all as read\" button. Default: \"Mark all as read\" */\n markAllLabel?: string;\n /** Whether to show the mark-all button. Default: true */\n showMarkAll?: boolean;\n /** Text shown when no new features exist. Default: \"You're all caught up!\" */\n emptyLabel?: string;\n /** Max height for the feed area. Default: \"400px\" */\n maxHeight?: string;\n /** Date display mode for entry metadata. Default: \"absolute\" */\n dateFormat?: \"absolute\" | \"relative\";\n /** Analytics callbacks */\n analytics?: AnalyticsCallbacks;\n /** Additional CSS class for the container */\n className?: string;\n /** Additional inline styles for the container */\n style?: CSSProperties;\n /** Optional component-scoped theme preset or overrides */\n theme?: FeatureDropThemeInput;\n /** Render prop for full customization — receives widget state */\n children?: (props: ChangelogWidgetRenderProps) => ReactNode;\n /** Custom render for each entry — receives feature + dismiss callback */\n renderEntry?: (props: ChangelogEntryRenderProps) => ReactNode;\n /** Custom render for the trigger button */\n renderTrigger?: (props: { count: number; onClick: () => void }) => ReactNode;\n /** Show reaction controls on each entry. Default: false */\n showReactions?: boolean;\n /** Reaction options. Default: 👍 ❤️ 🎉 👀 👎 */\n reactions?: string[];\n /** Callback fired when a reaction is persisted */\n onReaction?: (feature: FeatureEntry, reaction: string, counts: ReactionCounts) => void;\n}\n\n/* ------------------------------------------------------------------ */\n/* Default Styles (CSS custom properties) */\n/* ------------------------------------------------------------------ */\n\nconst overlayStyles: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n backgroundColor: \"var(--featuredrop-overlay-bg, rgba(0, 0, 0, 0.4))\",\n zIndex: \"var(--featuredrop-z-index, 9998)\" as unknown as number,\n};\n\nconst panelContainerStyles: CSSProperties = {\n position: \"fixed\",\n top: 0,\n right: 0,\n bottom: 0,\n width: \"var(--featuredrop-panel-width, 380px)\",\n maxWidth: \"100vw\",\n backgroundColor: \"var(--featuredrop-widget-bg, #ffffff)\",\n boxShadow: \"var(--featuredrop-widget-shadow, -4px 0 24px rgba(0, 0, 0, 0.12))\",\n zIndex: \"var(--featuredrop-z-index, 9999)\" as unknown as number,\n display: \"flex\",\n flexDirection: \"column\",\n fontFamily: \"var(--featuredrop-font-family, inherit)\",\n};\n\nconst modalContainerStyles: CSSProperties = {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"var(--featuredrop-modal-width, 480px)\",\n maxWidth: \"90vw\",\n maxHeight: \"80vh\",\n backgroundColor: \"var(--featuredrop-widget-bg, #ffffff)\",\n borderRadius: \"var(--featuredrop-widget-radius, 12px)\",\n boxShadow: \"var(--featuredrop-widget-shadow, 0 20px 60px rgba(0, 0, 0, 0.15))\",\n zIndex: \"var(--featuredrop-z-index, 9999)\" as unknown as number,\n display: \"flex\",\n flexDirection: \"column\",\n fontFamily: \"var(--featuredrop-font-family, inherit)\",\n};\n\nconst popoverContainerStyles: CSSProperties = {\n position: \"absolute\",\n top: \"100%\",\n right: 0,\n marginTop: \"8px\",\n width: \"var(--featuredrop-popover-width, 340px)\",\n maxWidth: \"90vw\",\n backgroundColor: \"var(--featuredrop-widget-bg, #ffffff)\",\n borderRadius: \"var(--featuredrop-widget-radius, 12px)\",\n boxShadow: \"var(--featuredrop-widget-shadow, 0 8px 30px rgba(0, 0, 0, 0.12))\",\n zIndex: \"var(--featuredrop-z-index, 9999)\" as unknown as number,\n display: \"flex\",\n flexDirection: \"column\",\n fontFamily: \"var(--featuredrop-font-family, inherit)\",\n};\n\nconst headerStyles: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"var(--featuredrop-widget-padding, 16px)\",\n borderBottom: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n};\n\nconst titleStyles: CSSProperties = {\n margin: 0,\n fontSize: \"var(--featuredrop-title-size, 16px)\",\n fontWeight: 600,\n color: \"var(--featuredrop-title-color, #111827)\",\n};\n\nconst closeButtonStyles: CSSProperties = {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px\",\n fontSize: \"18px\",\n color: \"var(--featuredrop-close-color, #6b7280)\",\n lineHeight: 1,\n};\n\nconst feedStyles: CSSProperties = {\n flex: 1,\n overflowY: \"auto\",\n padding: \"var(--featuredrop-widget-padding, 16px)\",\n};\n\nconst entryStyles: CSSProperties = {\n padding: \"12px 0\",\n borderBottom: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n};\n\nconst entryTitleStyles: CSSProperties = {\n fontSize: \"var(--featuredrop-entry-title-size, 14px)\",\n fontWeight: 600,\n color: \"var(--featuredrop-entry-title-color, #111827)\",\n margin: \"0 0 4px\",\n};\n\nconst entryDescriptionStyles: CSSProperties = {\n fontSize: \"var(--featuredrop-entry-desc-size, 13px)\",\n color: \"var(--featuredrop-entry-desc-color, #6b7280)\",\n margin: \"0 0 6px\",\n lineHeight: 1.5,\n};\n\nconst entryMetaStyles: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n fontSize: \"12px\",\n color: \"var(--featuredrop-entry-meta-color, #9ca3af)\",\n};\n\nconst typeTagStyles: CSSProperties = {\n display: \"inline-block\",\n padding: \"1px 6px\",\n borderRadius: \"4px\",\n fontSize: \"11px\",\n fontWeight: 600,\n textTransform: \"uppercase\" as const,\n};\n\nconst ctaButtonStyles: CSSProperties = {\n display: \"inline-block\",\n marginTop: \"8px\",\n padding: \"6px 12px\",\n borderRadius: \"var(--featuredrop-cta-radius, 6px)\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"var(--featuredrop-cta-color, #ffffff)\",\n backgroundColor: \"var(--featuredrop-cta-bg, #3b82f6)\",\n textDecoration: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n};\n\nconst footerStyles: CSSProperties = {\n padding: \"var(--featuredrop-widget-padding, 16px)\",\n borderTop: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n textAlign: \"center\",\n};\n\nconst markAllButtonStyles: CSSProperties = {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"var(--featuredrop-mark-all-color, #3b82f6)\",\n padding: \"4px 8px\",\n};\n\nconst triggerButtonStyles: CSSProperties = {\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"8px 14px\",\n border: \"1px solid var(--featuredrop-trigger-border, #d1d5db)\",\n borderRadius: \"var(--featuredrop-trigger-radius, 8px)\",\n backgroundColor: \"var(--featuredrop-trigger-bg, #ffffff)\",\n color: \"var(--featuredrop-trigger-color, #374151)\",\n fontSize: \"14px\",\n fontWeight: 500,\n cursor: \"pointer\",\n fontFamily: \"inherit\",\n};\n\nconst triggerBadgeStyles: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minWidth: \"18px\",\n height: \"18px\",\n padding: \"0 4px\",\n borderRadius: \"9999px\",\n fontSize: \"11px\",\n fontWeight: 700,\n color: \"var(--featuredrop-badge-color, white)\",\n backgroundColor: \"var(--featuredrop-badge-bg, #f59e0b)\",\n};\n\nconst emptyStyles: CSSProperties = {\n padding: \"32px 16px\",\n textAlign: \"center\",\n fontSize: \"14px\",\n color: \"var(--featuredrop-empty-color, #9ca3af)\",\n};\n\nconst reactionsRowStyles: CSSProperties = {\n display: \"flex\",\n gap: \"6px\",\n flexWrap: \"wrap\",\n marginTop: \"8px\",\n};\n\nconst reactionButtonStyles: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n borderRadius: \"999px\",\n background: \"#fff\",\n padding: \"3px 8px\",\n fontSize: \"12px\",\n cursor: \"pointer\",\n};\n\nconst srOnlyStyles: CSSProperties = {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: 0,\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n};\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nconst TYPE_COLORS: Record<string, { color: string; bg: string }> = {\n feature: { color: \"#065f46\", bg: \"rgba(16, 185, 129, 0.15)\" },\n improvement: { color: \"#1e40af\", bg: \"rgba(59, 130, 246, 0.15)\" },\n fix: { color: \"#92400e\", bg: \"rgba(245, 158, 11, 0.15)\" },\n breaking: { color: \"#991b1b\", bg: \"rgba(239, 68, 68, 0.15)\" },\n};\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n const nodes = container.querySelectorAll<HTMLElement>(\n [\n \"a[href]\",\n \"button:not([disabled])\",\n \"textarea:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n ].join(\",\"),\n );\n return Array.from(nodes).filter(\n (node) => !node.hasAttribute(\"disabled\") && node.getAttribute(\"aria-hidden\") !== \"true\",\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Default Entry Renderer */\n/* ------------------------------------------------------------------ */\n\nfunction DefaultEntry({\n feature,\n dismiss,\n onFeatureClick,\n reactions,\n userReaction,\n canReact,\n react,\n locale,\n dateFormat,\n}: ChangelogEntryRenderProps & { locale: string; dateFormat: \"absolute\" | \"relative\" }) {\n const typeStyle = feature.type\n ? TYPE_COLORS[feature.type] ?? TYPE_COLORS.feature\n : null;\n\n const descriptionHtml = feature.description\n ? parseDescription(feature.description)\n : null;\n\n const versionLabel =\n typeof feature.version === \"string\"\n ? feature.version\n : feature.version?.introduced ?? feature.version?.showNewUntil ?? null;\n\n return (\n <div data-featuredrop-entry={feature.id} style={entryStyles}>\n <div style={{ display: \"flex\", alignItems: \"flex-start\", justifyContent: \"space-between\" }}>\n <p style={entryTitleStyles}>{feature.label}</p>\n <button\n onClick={dismiss}\n style={{ ...closeButtonStyles, fontSize: \"14px\", flexShrink: 0 }}\n aria-label={`Dismiss ${feature.label}`}\n >\n &times;\n </button>\n </div>\n {descriptionHtml && (\n <div\n style={entryDescriptionStyles}\n dangerouslySetInnerHTML={{ __html: descriptionHtml }}\n />\n )}\n {feature.image && (\n <img\n src={feature.image}\n alt={feature.label}\n style={{\n width: \"100%\",\n borderRadius: \"8px\",\n marginBottom: \"8px\",\n }}\n />\n )}\n <div style={entryMetaStyles}>\n {feature.type && typeStyle && (\n <span\n style={{\n ...typeTagStyles,\n color: typeStyle.color,\n backgroundColor: typeStyle.bg,\n }}\n >\n {feature.type}\n </span>\n )}\n {feature.category && (\n <span>{feature.category}</span>\n )}\n <span>\n {dateFormat === \"relative\"\n ? formatRelativeTimeForLocale(feature.releasedAt, locale)\n : formatDateForLocale(feature.releasedAt, locale)}\n </span>\n {versionLabel && <span>v{versionLabel}</span>}\n </div>\n {feature.cta && (\n <a\n href={feature.cta.url}\n style={ctaButtonStyles}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onFeatureClick}\n >\n {feature.cta.label}\n </a>\n )}\n {reactions && react && (\n <div style={reactionsRowStyles}>\n {Object.entries(reactions).map(([reaction, count]) => (\n <button\n key={reaction}\n type=\"button\"\n onClick={() => react(reaction)}\n disabled={!canReact}\n style={{\n ...reactionButtonStyles,\n opacity: !canReact && userReaction !== reaction ? 0.55 : 1,\n background: userReaction === reaction ? \"rgba(17, 24, 39, 0.08)\" : \"#fff\",\n }}\n aria-label={`React ${reaction} to ${feature.label}`}\n >\n <span>{reaction}</span>\n <span>{count}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* ChangelogWidget Component */\n/* ------------------------------------------------------------------ */\n\n/**\n * Changelog widget — the #1 feature for feature discovery tools.\n *\n * Renders a trigger button with an unread count badge and a\n * slide-out panel, modal, or popover with the changelog feed.\n *\n * Styled via CSS custom properties — zero framework dependency.\n * Use `children` render prop for full headless control.\n *\n * @example\n * ```tsx\n * <ChangelogWidget variant=\"panel\" />\n * ```\n *\n * @example Headless mode\n * ```tsx\n * <ChangelogWidget>\n * {({ isOpen, toggle, features, count }) => (\n * <MyCustomUI ... />\n * )}\n * </ChangelogWidget>\n * ```\n */\nexport function ChangelogWidget({\n variant = \"panel\",\n title,\n triggerLabel,\n showCount = true,\n markAllLabel,\n showMarkAll = true,\n emptyLabel,\n maxHeight = \"400px\",\n dateFormat = \"absolute\",\n analytics,\n className,\n style,\n theme,\n children,\n renderEntry,\n renderTrigger,\n showReactions = false,\n reactions = [...DEFAULT_REACTIONS],\n onReaction,\n}: ChangelogWidgetProps) {\n const {\n newFeaturesSorted,\n newCount,\n dismiss,\n dismissAll,\n markFeatureSeen,\n markFeatureClicked,\n trackAdoptionEvent,\n locale,\n direction,\n animation,\n translations,\n } = useFeatureDrop();\n const [isOpen, setIsOpen] = useState(false);\n const [isClosing, setIsClosing] = useState(false);\n const [, setReactionVersion] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n const dialogRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const widgetIdRef = useRef(`featuredrop-widget-${Math.random().toString(36).slice(2, 10)}`);\n const themeVariables = useThemeVariables(theme);\n const resolvedTitle = title ?? translations.whatsNewTitle;\n const resolvedTriggerLabel = triggerLabel ?? translations.whatsNewTitle;\n const resolvedMarkAllLabel = markAllLabel ?? translations.markAllRead;\n const resolvedEmptyLabel = emptyLabel ?? translations.allCaughtUp;\n const dialogId = `${widgetIdRef.current}-dialog`;\n const titleId = `${widgetIdRef.current}-title`;\n const countLabel = translations.newFeatureCount(newCount);\n const dialogEnterAnimation = useMemo(\n () => getEnterAnimation(animation, variant),\n [animation, variant],\n );\n const dialogExitAnimation = useMemo(\n () => getExitAnimation(animation, variant),\n [animation, variant],\n );\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n return () => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n };\n }, []);\n\n const open = useCallback(() => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n setIsClosing(false);\n if (typeof document !== \"undefined\" && document.activeElement instanceof HTMLElement) {\n lastFocusedElementRef.current = document.activeElement;\n }\n setIsOpen(true);\n analytics?.onWidgetOpened?.();\n }, [analytics]);\n\n const close = useCallback(() => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n setIsOpen(false);\n const exitDuration = getAnimationDurationMs(animation, variant, \"exit\");\n if (exitDuration > 0) {\n setIsClosing(true);\n closeTimerRef.current = setTimeout(() => {\n setIsClosing(false);\n closeTimerRef.current = null;\n }, exitDuration);\n } else {\n setIsClosing(false);\n }\n analytics?.onWidgetClosed?.();\n const returnTarget = triggerRef.current ?? lastFocusedElementRef.current;\n if (returnTarget) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => {\n returnTarget.focus();\n });\n } else {\n returnTarget.focus();\n }\n }\n }, [animation, analytics, variant]);\n\n const toggle = useCallback(() => {\n if (isOpen) {\n close();\n } else {\n open();\n }\n }, [isOpen, open, close]);\n\n const handleDismiss = useCallback(\n (id: string) => {\n const feature = newFeaturesSorted.find((f) => f.id === id);\n dismiss(id);\n if (feature) {\n analytics?.onFeatureDismissed?.(feature);\n }\n },\n [dismiss, newFeaturesSorted, analytics],\n );\n\n const handleDismissAll = useCallback(async () => {\n await dismissAll();\n analytics?.onAllDismissed?.();\n }, [dismissAll, analytics]);\n\n const handleFeatureClick = useCallback((feature: FeatureEntry) => {\n markFeatureClicked(feature.id);\n trackAdoptionEvent({\n type: \"cta_clicked\",\n featureId: feature.id,\n metadata: { source: \"changelog\" },\n });\n analytics?.onFeatureClicked?.(feature);\n }, [analytics, markFeatureClicked, trackAdoptionEvent]);\n\n const handleReaction = useCallback((feature: FeatureEntry, reaction: string) => {\n const result = reactToEntry(feature.id, reaction, reactions);\n if (!result.updated) return;\n setReactionVersion((value) => value + 1);\n onReaction?.(feature, reaction, result.counts);\n }, [onReaction, reactions]);\n\n useEffect(() => {\n if (!isOpen) return;\n for (const feature of newFeaturesSorted) {\n markFeatureSeen(feature.id);\n analytics?.onFeatureSeen?.(feature);\n }\n }, [analytics, isOpen, markFeatureSeen, newFeaturesSorted]);\n\n // Close on click outside (panel/modal)\n useEffect(() => {\n if (!isOpen || variant === \"popover\") return;\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") close();\n };\n document.addEventListener(\"keydown\", handleEsc);\n return () => document.removeEventListener(\"keydown\", handleEsc);\n }, [isOpen, variant, close]);\n\n // Close popover on outside click\n useEffect(() => {\n if (!isOpen || variant !== \"popover\") return;\n const handleClick = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n close();\n }\n };\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") close();\n };\n document.addEventListener(\"mousedown\", handleClick);\n document.addEventListener(\"keydown\", handleEsc);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n document.removeEventListener(\"keydown\", handleEsc);\n };\n }, [isOpen, variant, close]);\n\n useEffect(() => {\n if (!isOpen) return;\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n const focusable = getFocusableElements(dialog);\n const first = focusable[0] ?? dialog;\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => first.focus());\n } else {\n first.focus();\n }\n\n const handleTab = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") return;\n const items = getFocusableElements(dialog);\n if (items.length === 0) {\n event.preventDefault();\n dialog.focus();\n return;\n }\n\n const firstItem = items[0];\n const lastItem = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n\n if (event.shiftKey) {\n if (active === firstItem || active === dialog) {\n event.preventDefault();\n lastItem.focus();\n }\n return;\n }\n\n if (active === lastItem) {\n event.preventDefault();\n firstItem.focus();\n }\n };\n\n dialog.addEventListener(\"keydown\", handleTab);\n return () => {\n dialog.removeEventListener(\"keydown\", handleTab);\n };\n }, [isOpen]);\n\n // Headless render prop mode\n if (children) {\n return (\n <>\n {children({\n isOpen,\n open,\n close,\n toggle,\n count: newCount,\n features: newFeaturesSorted,\n dismiss: handleDismiss,\n dismissAll: handleDismissAll,\n })}\n </>\n );\n }\n\n const widgetRootStyle = useMemo<CSSProperties>(\n () => ({\n ...(themeVariables ?? {}),\n position: \"relative\",\n display: \"inline-block\",\n ...(style ?? {}),\n }),\n [themeVariables, style],\n );\n\n const dialogContainerStyles =\n variant === \"modal\"\n ? modalContainerStyles\n : variant === \"popover\"\n ? popoverContainerStyles\n : panelContainerStyles;\n\n return (\n <div\n ref={containerRef}\n data-featuredrop-widget\n className={className}\n style={widgetRootStyle}\n dir={direction}\n >\n {/* Trigger */}\n {renderTrigger ? (\n renderTrigger({ count: newCount, onClick: toggle })\n ) : (\n <button\n ref={triggerRef}\n onClick={toggle}\n style={triggerButtonStyles}\n data-featuredrop-trigger\n aria-label={`${resolvedTriggerLabel}${newCount > 0 ? ` — ${countLabel}` : \"\"}`}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={dialogId}\n >\n {resolvedTriggerLabel}\n {showCount && newCount > 0 && (\n <span style={triggerBadgeStyles} data-featuredrop-trigger-badge>\n {newCount}\n </span>\n )}\n </button>\n )}\n <span style={srOnlyStyles} aria-live=\"polite\" aria-atomic=\"true\">\n {countLabel}\n </span>\n\n {/* Widget body */}\n {(isOpen || isClosing) && (\n <>\n {/* Overlay for panel/modal */}\n {variant !== \"popover\" && (\n <div\n style={overlayStyles}\n onClick={close}\n data-featuredrop-overlay\n aria-hidden=\"true\"\n />\n )}\n\n <div\n id={dialogId}\n ref={dialogRef}\n style={{\n ...dialogContainerStyles,\n animation: isClosing ? dialogExitAnimation : dialogEnterAnimation,\n }}\n data-featuredrop-container={variant}\n role=\"dialog\"\n aria-labelledby={titleId}\n aria-modal={variant === \"popover\" ? undefined : true}\n tabIndex={-1}\n >\n {/* Header */}\n <div style={headerStyles} data-featuredrop-header>\n <h2 id={titleId} style={titleStyles}>{resolvedTitle}</h2>\n <button\n onClick={close}\n style={closeButtonStyles}\n aria-label={translations.close}\n >\n &times;\n </button>\n </div>\n\n {/* Feed */}\n <div style={{ ...feedStyles, maxHeight }} data-featuredrop-feed>\n {newFeaturesSorted.length === 0 ? (\n <div style={emptyStyles} data-featuredrop-empty>\n {resolvedEmptyLabel}\n </div>\n ) : (\n newFeaturesSorted.map((feature) =>\n renderEntry ? (\n <div key={feature.id}>\n {(() => {\n const counts = showReactions\n ? getReactionCounts(feature.id, reactions)\n : undefined;\n const userReaction = showReactions\n ? getUserReaction(feature.id)\n : null;\n const canReact = showReactions\n ? !userReaction\n : false;\n return renderEntry({\n feature,\n dismiss: () => handleDismiss(feature.id),\n onFeatureClick: () => handleFeatureClick(feature),\n reactions: counts,\n userReaction,\n canReact,\n react: (reaction) => handleReaction(feature, reaction),\n });\n })()}\n </div>\n ) : (\n <DefaultEntry\n key={feature.id}\n feature={feature}\n dismiss={() => handleDismiss(feature.id)}\n onFeatureClick={() => handleFeatureClick(feature)}\n locale={locale}\n dateFormat={dateFormat}\n reactions={showReactions ? getReactionCounts(feature.id, reactions) : undefined}\n userReaction={showReactions ? getUserReaction(feature.id) : null}\n canReact={showReactions ? !getUserReaction(feature.id) : undefined}\n react={(reaction) => handleReaction(feature, reaction)}\n />\n ),\n )\n )}\n </div>\n\n {/* Footer */}\n {showMarkAll && newFeaturesSorted.length > 0 && (\n <div style={footerStyles} data-featuredrop-footer>\n <button\n onClick={handleDismissAll}\n style={markAllButtonStyles}\n data-featuredrop-mark-all\n >\n {resolvedMarkAllLabel}\n </button>\n </div>\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n","import {\n useState,\n useEffect,\n useCallback,\n useRef,\n useMemo,\n type ReactNode,\n type CSSProperties,\n type RefObject,\n} from \"react\";\nimport type { FeatureEntry, AnalyticsCallbacks } from \"../../types\";\nimport {\n ensureFeatureDropAnimationStyles,\n getEnterAnimation,\n getPulseAnimation,\n} from \"../../animation\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\nimport { parseDescription } from \"../../markdown\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface SpotlightRenderProps {\n /** The feature being spotlighted */\n feature: FeatureEntry | undefined;\n /** Whether the spotlight is active */\n isActive: boolean;\n /** Whether the tooltip is visible */\n isTooltipOpen: boolean;\n /** Show the tooltip */\n openTooltip: () => void;\n /** Hide the tooltip */\n closeTooltip: () => void;\n /** Dismiss this spotlight permanently */\n dismiss: () => void;\n}\n\nexport interface SpotlightProps {\n /** The feature ID to spotlight */\n featureId: string;\n /** Ref to the target DOM element — beacon will be positioned over it */\n targetRef?: RefObject<HTMLElement | null>;\n /** CSS selector for the target element (alternative to targetRef) */\n targetSelector?: string;\n /** Tooltip placement relative to target */\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Beacon size in pixels. Default: 12 */\n beaconSize?: number;\n /** Auto-dismiss after the tooltip is seen */\n autoDismiss?: boolean;\n /** Delay before auto-dismiss in ms. Default: 5000 */\n autoDismissDelay?: number;\n /** Analytics callbacks */\n analytics?: AnalyticsCallbacks;\n /** Additional CSS class */\n className?: string;\n /** Custom tooltip content */\n tooltipContent?: ReactNode;\n /** Render prop for full customization */\n children?: (props: SpotlightRenderProps) => ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Styles */\n/* ------------------------------------------------------------------ */\n\nconst beaconStyles: CSSProperties = {\n position: \"absolute\",\n borderRadius: \"50%\",\n backgroundColor: \"var(--featuredrop-beacon-color, #f59e0b)\",\n cursor: \"pointer\",\n zIndex: \"var(--featuredrop-z-index, 9999)\" as unknown as number,\n};\n\nconst beaconPulseStyles: CSSProperties = {\n position: \"absolute\",\n inset: \"-4px\",\n borderRadius: \"50%\",\n border: \"2px solid var(--featuredrop-beacon-color, #f59e0b)\",\n opacity: 0.6,\n};\n\nconst tooltipStyles: CSSProperties = {\n position: \"absolute\",\n padding: \"var(--featuredrop-tooltip-padding, 12px 16px)\",\n backgroundColor: \"var(--featuredrop-tooltip-bg, #ffffff)\",\n borderRadius: \"var(--featuredrop-tooltip-radius, 8px)\",\n boxShadow: \"var(--featuredrop-tooltip-shadow, 0 4px 20px rgba(0, 0, 0, 0.12))\",\n maxWidth: \"var(--featuredrop-tooltip-max-width, 260px)\",\n zIndex: \"var(--featuredrop-z-index, 10000)\" as unknown as number,\n fontFamily: \"var(--featuredrop-font-family, inherit)\",\n};\n\nconst tooltipTitleStyles: CSSProperties = {\n margin: \"0 0 4px\",\n fontSize: \"var(--featuredrop-tooltip-title-size, 14px)\",\n fontWeight: 600,\n color: \"var(--featuredrop-tooltip-title-color, #111827)\",\n};\n\nconst tooltipDescStyles: CSSProperties = {\n margin: 0,\n fontSize: \"var(--featuredrop-tooltip-desc-size, 13px)\",\n color: \"var(--featuredrop-tooltip-desc-color, #6b7280)\",\n lineHeight: 1.5,\n};\n\nconst tooltipDismissStyles: CSSProperties = {\n display: \"inline-block\",\n marginTop: \"8px\",\n padding: \"4px 10px\",\n border: \"none\",\n borderRadius: \"4px\",\n fontSize: \"12px\",\n fontWeight: 600,\n cursor: \"pointer\",\n backgroundColor: \"var(--featuredrop-tooltip-dismiss-bg, #f3f4f6)\",\n color: \"var(--featuredrop-tooltip-dismiss-color, #374151)\",\n};\n\n/* ------------------------------------------------------------------ */\n/* Spotlight Component */\n/* ------------------------------------------------------------------ */\n\n/**\n * Pulsing beacon that attaches to any DOM element to highlight a new feature.\n *\n * Clicking the beacon reveals a tooltip with feature info.\n * After dismissal, the beacon disappears permanently for this user.\n *\n * @example\n * ```tsx\n * const ref = useRef<HTMLButtonElement>(null);\n * <button ref={ref}>Analytics</button>\n * <Spotlight featureId=\"analytics-v2\" targetRef={ref} />\n * ```\n *\n * @example With CSS selector\n * ```tsx\n * <Spotlight featureId=\"analytics-v2\" targetSelector=\"#analytics-btn\" />\n * ```\n */\nexport function Spotlight({\n featureId,\n targetRef,\n targetSelector,\n placement = \"top\",\n beaconSize = 12,\n autoDismiss = false,\n autoDismissDelay = 5000,\n analytics,\n className,\n tooltipContent,\n children,\n}: SpotlightProps) {\n const {\n newFeatures,\n dismiss,\n markFeatureSeen,\n acquireSpotlightSlot,\n releaseSpotlightSlot,\n activeSpotlightCount,\n animation,\n translations,\n } = useFeatureDrop();\n const feature = newFeatures.find((f) => f.id === featureId);\n const [isTooltipOpen, setTooltipOpen] = useState(false);\n const [targetRect, setTargetRect] = useState<DOMRect | null>(null);\n const [hasSlot, setHasSlot] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const beaconRef = useRef<HTMLDivElement>(null);\n const instanceIdRef = useRef(`featuredrop-spotlight-${Math.random().toString(36).slice(2, 10)}`);\n const beaconPulseAnimation = useMemo(\n () => getPulseAnimation(animation, \"beacon\"),\n [animation],\n );\n const tooltipEnterAnimation = useMemo(\n () => getEnterAnimation(animation, \"popover\"),\n [animation],\n );\n\n const isActive = !!feature;\n const tooltipId = `${instanceIdRef.current}-tooltip`;\n const tooltipTitleId = `${instanceIdRef.current}-title`;\n const tooltipDescId = `${instanceIdRef.current}-description`;\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n useEffect(() => {\n if (!isActive) {\n setHasSlot(false);\n releaseSpotlightSlot(featureId);\n return;\n }\n if (hasSlot) return;\n setHasSlot(acquireSpotlightSlot(featureId, feature?.priority));\n }, [\n isActive,\n hasSlot,\n feature?.priority,\n featureId,\n acquireSpotlightSlot,\n releaseSpotlightSlot,\n activeSpotlightCount,\n ]);\n\n useEffect(() => {\n return () => {\n releaseSpotlightSlot(featureId);\n };\n }, [featureId, releaseSpotlightSlot]);\n\n // Track target position\n useEffect(() => {\n if (!isActive) return;\n\n const getTarget = (): HTMLElement | null => {\n if (targetRef?.current) return targetRef.current;\n if (targetSelector) return document.querySelector(targetSelector);\n return null;\n };\n\n const update = () => {\n const el = getTarget();\n if (el) setTargetRect(el.getBoundingClientRect());\n };\n\n update();\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n return () => {\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n };\n }, [isActive, targetRef, targetSelector]);\n\n const openTooltip = useCallback(() => {\n setTooltipOpen(true);\n if (feature) {\n markFeatureSeen(feature.id);\n analytics?.onFeatureSeen?.(feature);\n }\n if (autoDismiss) {\n timerRef.current = setTimeout(() => {\n dismiss(featureId);\n if (feature) analytics?.onFeatureDismissed?.(feature);\n }, autoDismissDelay);\n }\n }, [feature, featureId, autoDismiss, autoDismissDelay, dismiss, analytics, markFeatureSeen]);\n\n const closeTooltip = useCallback(() => {\n setTooltipOpen(false);\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n const beacon = beaconRef.current;\n if (beacon) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => beacon.focus());\n } else {\n beacon.focus();\n }\n }\n }, []);\n\n const handleDismiss = useCallback(() => {\n dismiss(featureId);\n setTooltipOpen(false);\n if (feature) analytics?.onFeatureDismissed?.(feature);\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }, [featureId, dismiss, feature, analytics]);\n\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n useEffect(() => {\n if (!isTooltipOpen) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n closeTooltip();\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [closeTooltip, isTooltipOpen]);\n\n // Render prop mode\n if (children) {\n return (\n <>\n {children({\n feature,\n isActive,\n isTooltipOpen,\n openTooltip,\n closeTooltip,\n dismiss: handleDismiss,\n })}\n </>\n );\n }\n\n if (!isActive || !hasSlot || !targetRect) return null;\n\n // Compute beacon position\n const beaconLeft = targetRect.right - beaconSize / 2;\n const beaconTop = targetRect.top - beaconSize / 2;\n\n // Tooltip offset from beacon\n const tooltipOffset = 12;\n const tooltipPosition: CSSProperties = (() => {\n switch (placement) {\n case \"bottom\":\n return { top: targetRect.bottom + tooltipOffset, left: targetRect.left };\n case \"left\":\n return { top: targetRect.top, right: `calc(100vw - ${targetRect.left - tooltipOffset}px)` };\n case \"right\":\n return { top: targetRect.top, left: targetRect.right + tooltipOffset };\n case \"top\":\n default:\n return { bottom: `calc(100vh - ${targetRect.top - tooltipOffset}px)`, left: targetRect.left };\n }\n })();\n\n return (\n <>\n {/* Beacon */}\n <div\n ref={beaconRef}\n data-featuredrop-spotlight={featureId}\n className={className}\n style={{\n ...beaconStyles,\n position: \"fixed\",\n left: beaconLeft,\n top: beaconTop,\n width: beaconSize,\n height: beaconSize,\n }}\n onClick={isTooltipOpen ? closeTooltip : openTooltip}\n role=\"button\"\n tabIndex={0}\n aria-haspopup=\"dialog\"\n aria-expanded={isTooltipOpen}\n aria-controls={tooltipId}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n isTooltipOpen ? closeTooltip() : openTooltip();\n }\n }}\n aria-label={`New: ${feature.label}`}\n >\n <span\n style={{\n ...beaconPulseStyles,\n animation: beaconPulseAnimation ?? \"none\",\n }}\n />\n </div>\n\n {/* Tooltip */}\n {isTooltipOpen && (\n <div\n id={tooltipId}\n style={{\n ...tooltipStyles,\n position: \"fixed\",\n ...tooltipPosition,\n animation: tooltipEnterAnimation,\n }}\n data-featuredrop-tooltip\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={tooltipTitleId}\n aria-describedby={feature.description ? tooltipDescId : undefined}\n >\n {tooltipContent ?? (\n <>\n <p id={tooltipTitleId} style={tooltipTitleStyles}>{feature.label}</p>\n {feature.description && (\n <div\n id={tooltipDescId}\n style={tooltipDescStyles}\n dangerouslySetInnerHTML={{ __html: parseDescription(feature.description) }}\n />\n )}\n <button\n type=\"button\"\n onClick={handleDismiss}\n style={tooltipDismissStyles}\n >\n {translations.gotIt}\n </button>\n </>\n )}\n </div>\n )}\n </>\n );\n}\n","import { useState, useCallback, type ReactNode, type CSSProperties } from \"react\";\nimport type { FeatureEntry, AnalyticsCallbacks } from \"../../types\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\nimport { parseDescription } from \"../../markdown\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport type BannerVariant = \"info\" | \"success\" | \"warning\" | \"announcement\";\n\nexport interface BannerRenderProps {\n /** The feature being announced */\n feature: FeatureEntry | undefined;\n /** Whether the banner is active */\n isActive: boolean;\n /** Whether the banner has been dismissed this session */\n isDismissed: boolean;\n /** Dismiss the banner permanently */\n dismiss: () => void;\n}\n\nexport interface BannerProps {\n /** Feature ID to display as a banner */\n featureId: string;\n /** Banner visual variant. Default: \"announcement\" */\n variant?: BannerVariant;\n /** Whether the banner is dismissible. Default: true */\n dismissible?: boolean;\n /** Position mode. Default: \"sticky\" */\n position?: \"sticky\" | \"inline\" | \"fixed\";\n /** Analytics callbacks */\n analytics?: AnalyticsCallbacks;\n /** Additional CSS class */\n className?: string;\n /** Additional inline styles */\n style?: CSSProperties;\n /** Render prop for full customization */\n children?: (props: BannerRenderProps) => ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Styles */\n/* ------------------------------------------------------------------ */\n\nconst VARIANT_STYLES: Record<BannerVariant, { bg: string; border: string; color: string; icon: string }> = {\n info: {\n bg: \"var(--featuredrop-banner-info-bg, #eff6ff)\",\n border: \"var(--featuredrop-banner-info-border, #bfdbfe)\",\n color: \"var(--featuredrop-banner-info-color, #1e40af)\",\n icon: \"\\u2139\\uFE0F\",\n },\n success: {\n bg: \"var(--featuredrop-banner-success-bg, #f0fdf4)\",\n border: \"var(--featuredrop-banner-success-border, #bbf7d0)\",\n color: \"var(--featuredrop-banner-success-color, #166534)\",\n icon: \"\\u2705\",\n },\n warning: {\n bg: \"var(--featuredrop-banner-warning-bg, #fffbeb)\",\n border: \"var(--featuredrop-banner-warning-border, #fde68a)\",\n color: \"var(--featuredrop-banner-warning-color, #92400e)\",\n icon: \"\\u26A0\\uFE0F\",\n },\n announcement: {\n bg: \"var(--featuredrop-banner-announce-bg, #faf5ff)\",\n border: \"var(--featuredrop-banner-announce-border, #e9d5ff)\",\n color: \"var(--featuredrop-banner-announce-color, #6b21a8)\",\n icon: \"\\uD83C\\uDF89\",\n },\n};\n\nconst baseBannerStyles: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"12px\",\n padding: \"var(--featuredrop-banner-padding, 10px 16px)\",\n fontFamily: \"var(--featuredrop-font-family, inherit)\",\n fontSize: \"var(--featuredrop-banner-font-size, 14px)\",\n lineHeight: 1.5,\n borderBottom: \"1px solid\",\n};\n\nconst bannerTextStyles: CSSProperties = {\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\",\n};\n\nconst bannerLabelStyles: CSSProperties = {\n fontWeight: 600,\n};\n\nconst bannerDescStyles: CSSProperties = {\n fontWeight: 400,\n opacity: 0.9,\n};\n\nconst bannerCtaStyles: CSSProperties = {\n display: \"inline-block\",\n padding: \"4px 12px\",\n borderRadius: \"var(--featuredrop-banner-cta-radius, 6px)\",\n fontSize: \"13px\",\n fontWeight: 600,\n textDecoration: \"none\",\n border: \"1px solid currentColor\",\n opacity: 0.9,\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n color: \"inherit\",\n};\n\nconst bannerCloseStyles: CSSProperties = {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px\",\n fontSize: \"16px\",\n opacity: 0.6,\n color: \"inherit\",\n lineHeight: 1,\n};\n\n/* ------------------------------------------------------------------ */\n/* Banner Component */\n/* ------------------------------------------------------------------ */\n\n/**\n * Announcement banner for major feature launches or important notices.\n *\n * Shows at the top of the page (sticky/fixed) or inline in content.\n * Auto-expires using the same `showNewUntil` logic as badges.\n * Styled via CSS custom properties for each variant.\n *\n * @example\n * ```tsx\n * <Banner featureId=\"v2-launch\" variant=\"announcement\" />\n * ```\n *\n * @example Headless\n * ```tsx\n * <Banner featureId=\"v2-launch\">\n * {({ feature, dismiss }) => (\n * <div>New: {feature?.label} <button onClick={dismiss}>x</button></div>\n * )}\n * </Banner>\n * ```\n */\nexport function Banner({\n featureId,\n variant = \"announcement\",\n dismissible = true,\n position = \"sticky\",\n analytics,\n className,\n style,\n children,\n}: BannerProps) {\n const { newFeatures, dismiss, markFeatureClicked, trackAdoptionEvent } = useFeatureDrop();\n const feature = newFeatures.find((f) => f.id === featureId);\n const [sessionDismissed, setSessionDismissed] = useState(false);\n\n const isActive = !!feature && !sessionDismissed;\n\n const handleDismiss = useCallback(() => {\n dismiss(featureId);\n setSessionDismissed(true);\n if (feature) analytics?.onFeatureDismissed?.(feature);\n }, [featureId, dismiss, feature, analytics]);\n\n const handleCtaClick = useCallback(() => {\n if (!feature) return;\n markFeatureClicked(feature.id);\n trackAdoptionEvent({\n type: \"cta_clicked\",\n featureId: feature.id,\n metadata: { source: \"banner\" },\n });\n analytics?.onFeatureClicked?.(feature);\n }, [feature, markFeatureClicked, trackAdoptionEvent, analytics]);\n\n // Headless render prop\n if (children) {\n return (\n <>\n {children({\n feature,\n isActive,\n isDismissed: sessionDismissed,\n dismiss: handleDismiss,\n })}\n </>\n );\n }\n\n if (!isActive) return null;\n\n const variantStyle = VARIANT_STYLES[variant];\n const positionStyles: CSSProperties =\n position === \"fixed\"\n ? { position: \"fixed\", top: 0, left: 0, right: 0, zIndex: \"var(--featuredrop-z-index, 9999)\" as unknown as number }\n : position === \"sticky\"\n ? { position: \"sticky\", top: 0, zIndex: \"var(--featuredrop-z-index, 9999)\" as unknown as number }\n : {};\n\n const descriptionHtml = feature.description\n ? parseDescription(feature.description)\n : null;\n\n return (\n <div\n data-featuredrop-banner={variant}\n className={className}\n role=\"alert\"\n style={{\n ...baseBannerStyles,\n ...positionStyles,\n backgroundColor: variantStyle.bg,\n borderColor: variantStyle.border,\n color: variantStyle.color,\n ...style,\n }}\n >\n <div style={bannerTextStyles}>\n <span aria-hidden=\"true\">{variantStyle.icon}</span>\n <span style={bannerLabelStyles}>{feature.label}</span>\n {descriptionHtml && (\n <span\n style={bannerDescStyles}\n dangerouslySetInnerHTML={{ __html: `— ${descriptionHtml}` }}\n />\n )}\n {feature.cta && (\n <a\n href={feature.cta.url}\n style={bannerCtaStyles}\n onClick={handleCtaClick}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {feature.cta.label}\n </a>\n )}\n </div>\n {dismissible && (\n <button\n onClick={handleDismiss}\n style={bannerCloseStyles}\n aria-label=\"Dismiss banner\"\n >\n &times;\n </button>\n )}\n </div>\n );\n}\n","import {\n useState,\n useEffect,\n useCallback,\n useMemo,\n useRef,\n type ReactNode,\n type CSSProperties,\n} from \"react\";\nimport type { FeatureEntry, AnalyticsCallbacks } from \"../../types\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\nimport { parseDescription } from \"../../markdown\";\nimport {\n ensureFeatureDropAnimationStyles,\n getAnimationDurationMs,\n getEnterAnimation,\n getExitAnimation,\n} from \"../../animation\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface ToastRenderProps {\n /** Features currently showing as toasts */\n toasts: FeatureEntry[];\n /** Dismiss a specific toast */\n dismiss: (id: string) => void;\n /** Dismiss all toasts */\n dismissAll: () => void;\n}\n\nexport interface ToastProps {\n /** Feature IDs to show as toasts. If omitted, shows all new features. */\n featureIds?: string[];\n /** Max number of visible toasts at once. Default: 3 */\n maxVisible?: number;\n /** Auto-dismiss delay in ms. Default: 8000. Set to 0 to disable. */\n autoDismissMs?: number;\n /** Position on screen. Default: \"bottom-right\" */\n position?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\" | \"top-center\" | \"bottom-center\";\n /** Analytics callbacks */\n analytics?: AnalyticsCallbacks;\n /** Additional CSS class for the container */\n className?: string;\n /** Additional inline styles for the container */\n style?: CSSProperties;\n /** Render prop for full customization */\n children?: (props: ToastRenderProps) => ReactNode;\n /** Custom render for each toast */\n renderToast?: (props: { feature: FeatureEntry; dismiss: () => void }) => ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Styles */\n/* ------------------------------------------------------------------ */\n\nconst POSITION_STYLES: Record<string, CSSProperties> = {\n \"top-right\": { top: 16, right: 16 },\n \"top-left\": { top: 16, left: 16 },\n \"bottom-right\": { bottom: 16, right: 16 },\n \"bottom-left\": { bottom: 16, left: 16 },\n \"top-center\": { top: 16, left: \"50%\", transform: \"translateX(-50%)\" },\n \"bottom-center\": { bottom: 16, left: \"50%\", transform: \"translateX(-50%)\" },\n};\n\nconst containerStyles: CSSProperties = {\n position: \"fixed\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"8px\",\n zIndex: \"var(--featuredrop-toast-z-index, 10000)\" as unknown as number,\n pointerEvents: \"none\",\n};\n\nconst toastStyles: CSSProperties = {\n pointerEvents: \"auto\",\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: \"12px\",\n padding: \"var(--featuredrop-toast-padding, 12px 16px)\",\n backgroundColor: \"var(--featuredrop-toast-bg, #ffffff)\",\n borderRadius: \"var(--featuredrop-toast-radius, 10px)\",\n boxShadow: \"var(--featuredrop-toast-shadow, 0 4px 20px rgba(0, 0, 0, 0.12))\",\n border: \"1px solid var(--featuredrop-toast-border, #e5e7eb)\",\n width: \"var(--featuredrop-toast-width, 340px)\",\n maxWidth: \"calc(100vw - 32px)\",\n fontFamily: \"var(--featuredrop-font-family, inherit)\",\n};\n\nconst toastBodyStyles: CSSProperties = {\n flex: 1,\n minWidth: 0,\n};\n\nconst toastTitleStyles: CSSProperties = {\n margin: \"0 0 2px\",\n fontSize: \"var(--featuredrop-toast-title-size, 14px)\",\n fontWeight: 600,\n color: \"var(--featuredrop-toast-title-color, #111827)\",\n};\n\nconst toastDescStyles: CSSProperties = {\n margin: 0,\n fontSize: \"var(--featuredrop-toast-desc-size, 13px)\",\n color: \"var(--featuredrop-toast-desc-color, #6b7280)\",\n lineHeight: 1.4,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n display: \"-webkit-box\",\n WebkitLineClamp: 2,\n WebkitBoxOrient: \"vertical\" as const,\n};\n\nconst toastCloseStyles: CSSProperties = {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"2px\",\n fontSize: \"16px\",\n color: \"var(--featuredrop-toast-close-color, #9ca3af)\",\n lineHeight: 1,\n flexShrink: 0,\n};\n\nconst toastCtaStyles: CSSProperties = {\n display: \"inline-block\",\n marginTop: \"6px\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"var(--featuredrop-toast-cta-color, #3b82f6)\",\n textDecoration: \"none\",\n};\n\nconst TYPE_INDICATORS: Record<string, { color: string; icon: string }> = {\n feature: { color: \"#10b981\", icon: \"\\u2728\" },\n improvement: { color: \"#3b82f6\", icon: \"\\uD83D\\uDCC8\" },\n fix: { color: \"#f59e0b\", icon: \"\\uD83D\\uDD27\" },\n breaking: { color: \"#ef4444\", icon: \"\\u26A0\\uFE0F\" },\n};\n\n/* ------------------------------------------------------------------ */\n/* Toast Component */\n/* ------------------------------------------------------------------ */\n\n/**\n * Toast notification component for feature announcements.\n *\n * Shows brief popups for new features. Auto-dismisses after a timeout.\n * Stacks multiple toasts with configurable max visible count.\n *\n * @example\n * ```tsx\n * <Toast position=\"bottom-right\" maxVisible={3} />\n * ```\n *\n * @example Specific features\n * ```tsx\n * <Toast featureIds={[\"ai-journal\", \"analytics-v2\"]} />\n * ```\n *\n * @example Headless\n * ```tsx\n * <Toast>\n * {({ toasts, dismiss }) => toasts.map(t => (\n * <div key={t.id}>{t.label} <button onClick={() => dismiss(t.id)}>x</button></div>\n * ))}\n * </Toast>\n * ```\n */\nexport function Toast({\n featureIds,\n maxVisible = 3,\n autoDismissMs = 8000,\n position = \"bottom-right\",\n analytics,\n className,\n style,\n children,\n renderToast,\n}: ToastProps) {\n const {\n newFeaturesSorted,\n dismiss,\n markFeatureSeen,\n markFeatureClicked,\n trackAdoptionEvent,\n getRemainingToastSlots,\n markToastsShown,\n animation,\n } = useFeatureDrop();\n const [localDismissed, setLocalDismissed] = useState<Set<string>>(new Set());\n const [closingIds, setClosingIds] = useState<Set<string>>(new Set());\n const timersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map());\n const shownIdsRef = useRef(new Set<string>());\n const toastEnterAnimation = useMemo(() => getEnterAnimation(animation, \"toast\"), [animation]);\n const toastExitAnimation = useMemo(() => getExitAnimation(animation, \"toast\"), [animation]);\n const toastExitDuration = useMemo(\n () => getAnimationDurationMs(animation, \"toast\", \"exit\"),\n [animation],\n );\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n // Filter features for toasting\n const toastFeatures = newFeaturesSorted.filter((f) => {\n if (localDismissed.has(f.id)) return false;\n if (featureIds && !featureIds.includes(f.id)) return false;\n return true;\n });\n\n const remainingSlots = getRemainingToastSlots();\n const baseVisible = toastFeatures.slice(0, maxVisible);\n const visibleToasts = useMemo(() => {\n if (!Number.isFinite(remainingSlots)) return baseVisible;\n let newlyAllowed = 0;\n const limit = Math.max(0, remainingSlots);\n return baseVisible.filter((feature) => {\n if (shownIdsRef.current.has(feature.id)) return true;\n if (newlyAllowed >= limit) return false;\n newlyAllowed += 1;\n return true;\n });\n }, [baseVisible, remainingSlots]);\n\n const finalizeDismiss = useCallback(\n (id: string) => {\n setClosingIds((previous) => {\n if (!previous.has(id)) return previous;\n const next = new Set(previous);\n next.delete(id);\n return next;\n });\n setLocalDismissed((prev) => new Set(prev).add(id));\n dismiss(id);\n const feature = newFeaturesSorted.find((f) => f.id === id);\n if (feature) analytics?.onFeatureDismissed?.(feature);\n const timer = timersRef.current.get(id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(id);\n }\n const exitTimer = timersRef.current.get(`exit:${id}`);\n if (exitTimer) {\n clearTimeout(exitTimer);\n timersRef.current.delete(`exit:${id}`);\n }\n },\n [dismiss, newFeaturesSorted, analytics],\n );\n\n const handleDismiss = useCallback((id: string) => {\n if (closingIds.has(id)) return;\n if (toastExitDuration > 0 && toastExitAnimation) {\n const existingAutoTimer = timersRef.current.get(id);\n if (existingAutoTimer) {\n clearTimeout(existingAutoTimer);\n timersRef.current.delete(id);\n }\n setClosingIds((previous) => {\n if (previous.has(id)) return previous;\n const next = new Set(previous);\n next.add(id);\n return next;\n });\n const existing = timersRef.current.get(`exit:${id}`);\n if (existing) clearTimeout(existing);\n timersRef.current.set(\n `exit:${id}`,\n setTimeout(() => {\n finalizeDismiss(id);\n }, toastExitDuration),\n );\n return;\n }\n finalizeDismiss(id);\n }, [closingIds, finalizeDismiss, toastExitAnimation, toastExitDuration]);\n\n const handleDismissAllLocal = useCallback(() => {\n for (const f of visibleToasts) {\n handleDismiss(f.id);\n }\n }, [visibleToasts, handleDismiss]);\n\n // Auto-dismiss timers\n useEffect(() => {\n if (autoDismissMs <= 0) return;\n for (const f of visibleToasts) {\n if (!timersRef.current.has(f.id) && !closingIds.has(f.id)) {\n timersRef.current.set(\n f.id,\n setTimeout(() => handleDismiss(f.id), autoDismissMs),\n );\n }\n }\n }, [visibleToasts, autoDismissMs, closingIds, handleDismiss]);\n\n // Fire onFeatureSeen for visible toasts\n useEffect(() => {\n const newlyShownIds: string[] = [];\n for (const feature of visibleToasts) {\n if (shownIdsRef.current.has(feature.id)) continue;\n shownIdsRef.current.add(feature.id);\n newlyShownIds.push(feature.id);\n markFeatureSeen(feature.id);\n analytics?.onFeatureSeen?.(feature);\n }\n markToastsShown(newlyShownIds);\n }, [visibleToasts, analytics, markFeatureSeen, markToastsShown]);\n\n // Cleanup timers\n useEffect(() => {\n const timers = timersRef.current;\n return () => {\n for (const timer of timers.values()) clearTimeout(timer);\n timers.clear();\n };\n }, []);\n\n // Headless render prop\n if (children) {\n return (\n <>\n {children({\n toasts: visibleToasts,\n dismiss: handleDismiss,\n dismissAll: handleDismissAllLocal,\n })}\n </>\n );\n }\n\n if (visibleToasts.length === 0) return null;\n\n const posStyles = POSITION_STYLES[position] ?? POSITION_STYLES[\"bottom-right\"];\n const isBottom = position.startsWith(\"bottom\");\n\n return (\n <div\n data-featuredrop-toast-container\n className={className}\n role=\"region\"\n aria-label=\"Feature announcements\"\n aria-live=\"polite\"\n aria-atomic=\"false\"\n style={{\n ...containerStyles,\n ...posStyles,\n flexDirection: isBottom ? \"column-reverse\" : \"column\",\n ...style,\n }}\n >\n {visibleToasts.map((feature) => {\n if (renderToast) {\n return (\n <div key={feature.id}>\n {renderToast({ feature, dismiss: () => handleDismiss(feature.id) })}\n </div>\n );\n }\n\n const indicator = feature.type\n ? TYPE_INDICATORS[feature.type] ?? TYPE_INDICATORS.feature\n : null;\n\n const descriptionHtml = feature.description\n ? parseDescription(feature.description)\n : null;\n\n return (\n <div\n key={feature.id}\n data-featuredrop-toast={feature.id}\n style={{\n ...toastStyles,\n animation: closingIds.has(feature.id)\n ? toastExitAnimation\n : toastEnterAnimation,\n }}\n role=\"status\"\n >\n {indicator && (\n <span style={{ fontSize: \"20px\", lineHeight: 1 }} aria-hidden=\"true\">\n {indicator.icon}\n </span>\n )}\n <div style={toastBodyStyles}>\n <p style={toastTitleStyles}>{feature.label}</p>\n {descriptionHtml && (\n <div\n style={toastDescStyles}\n dangerouslySetInnerHTML={{ __html: descriptionHtml }}\n />\n )}\n {feature.cta && (\n <a\n href={feature.cta.url}\n style={toastCtaStyles}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => {\n markFeatureClicked(feature.id);\n trackAdoptionEvent({\n type: \"cta_clicked\",\n featureId: feature.id,\n metadata: { source: \"toast\" },\n });\n analytics?.onFeatureClicked?.(feature);\n }}\n >\n {feature.cta.label} &rarr;\n </a>\n )}\n </div>\n <button\n onClick={() => handleDismiss(feature.id)}\n style={toastCloseStyles}\n aria-label={`Dismiss ${feature.label}`}\n >\n &times;\n </button>\n </div>\n );\n })}\n </div>\n );\n}\n","import {\n useMemo,\n useCallback,\n useState,\n useEffect,\n useRef,\n type CSSProperties,\n type ReactNode,\n type KeyboardEvent as ReactKeyboardEvent,\n} from \"react\";\nimport type { FeatureEntry, FeatureManifest } from \"../../types\";\nimport type { FeatureDropThemeInput } from \"../../theme\";\nimport { formatDateForLocale, formatRelativeTimeForLocale } from \"../../i18n\";\nimport { parseDescription } from \"../../markdown\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\nimport { useThemeVariables } from \"../theme\";\nimport {\n DEFAULT_REACTIONS,\n getReactionCounts,\n getUserReaction,\n reactToEntry,\n type ReactionCounts,\n} from \"../reactions-store\";\n\nexport type PaginationMode = \"infinite-scroll\" | \"load-more\" | \"numbered\";\n\nexport interface ChangelogPageProps {\n pageSize?: number;\n pagination?: PaginationMode;\n showFilters?: boolean;\n showSearch?: boolean;\n categories?: string[];\n emptyState?: ReactNode;\n renderEntry?: (entry: FeatureEntry, index: number) => ReactNode;\n formatDate?: (date: string) => string;\n dateFormat?: \"absolute\" | \"relative\";\n basePath?: string;\n manifest?: FeatureManifest;\n className?: string;\n style?: CSSProperties;\n theme?: FeatureDropThemeInput;\n showReactions?: boolean;\n reactions?: string[];\n onReaction?: (entry: FeatureEntry, reaction: string, counts: ReactionCounts) => void;\n}\n\nconst pageStyles: CSSProperties = {\n maxWidth: \"880px\",\n margin: \"0 auto\",\n padding: \"32px 16px\",\n fontFamily: \"var(--featuredrop-font-family, system-ui, -apple-system, Segoe UI, sans-serif)\",\n};\n\nconst skipLinkStyles: CSSProperties = {\n display: \"inline-block\",\n marginBottom: \"12px\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"var(--featuredrop-mark-all-color, #3b82f6)\",\n};\n\nconst headerStyles: CSSProperties = {\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: \"12px\",\n alignItems: \"center\",\n marginBottom: \"16px\",\n};\n\nconst searchStyles: CSSProperties = {\n flex: \"1 1 280px\",\n padding: \"10px 12px\",\n borderRadius: \"10px\",\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n fontSize: \"14px\",\n};\n\nconst filterBarStyles: CSSProperties = {\n display: \"flex\",\n gap: \"8px\",\n flexWrap: \"wrap\",\n margin: \"12px 0 20px\",\n};\n\nconst pillStyles: CSSProperties = {\n padding: \"6px 12px\",\n borderRadius: \"999px\",\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n cursor: \"pointer\",\n background: \"var(--featuredrop-card-bg, #fff)\",\n color: \"var(--featuredrop-text, #111827)\",\n fontSize: \"13px\",\n};\n\nconst pillActiveStyles: CSSProperties = {\n ...pillStyles,\n background: \"var(--featuredrop-pill-active-bg, #111827)\",\n color: \"var(--featuredrop-pill-active-text, #fff)\",\n border: \"1px solid var(--featuredrop-pill-active-bg, #111827)\",\n};\n\nconst entryCardStyles: CSSProperties = {\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n borderRadius: \"12px\",\n padding: \"16px\",\n marginBottom: \"16px\",\n background: \"var(--featuredrop-card-bg, #fff)\",\n boxShadow: \"var(--featuredrop-card-shadow, 0 4px 20px rgba(0,0,0,0.04))\",\n};\n\nconst metaRowStyles: CSSProperties = {\n display: \"flex\",\n gap: \"10px\",\n flexWrap: \"wrap\",\n fontSize: \"12px\",\n color: \"var(--featuredrop-muted, #6b7280)\",\n marginTop: \"8px\",\n};\n\nconst loadMoreBtnStyles: CSSProperties = {\n padding: \"10px 14px\",\n borderRadius: \"10px\",\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n background: \"var(--featuredrop-card-bg, #fff)\",\n color: \"var(--featuredrop-text, #111827)\",\n cursor: \"pointer\",\n fontWeight: 600,\n};\n\nconst reactionsRowStyles: CSSProperties = {\n display: \"flex\",\n gap: \"8px\",\n flexWrap: \"wrap\",\n marginTop: \"12px\",\n};\n\nconst reactionButtonStyles: CSSProperties = {\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n borderRadius: \"999px\",\n background: \"var(--featuredrop-card-bg, #fff)\",\n color: \"var(--featuredrop-text, #111827)\",\n padding: \"4px 9px\",\n cursor: \"pointer\",\n fontSize: \"12px\",\n};\n\nfunction defaultFormatDate(date: string, locale: string): string {\n return formatDateForLocale(date, locale);\n}\n\nfunction EntryCard({\n entry,\n formatDate,\n basePath,\n shareLabel,\n showReactions,\n reactions,\n userReaction,\n canReact,\n onReact,\n}: {\n entry: FeatureEntry;\n formatDate: (d: string) => string;\n basePath: string;\n shareLabel: string;\n showReactions: boolean;\n reactions: ReactionCounts;\n userReaction: string | null;\n canReact: boolean;\n onReact: (reaction: string) => void;\n}) {\n const descriptionHtml = entry.description ? parseDescription(entry.description) : null;\n const shareHref = `${basePath}#entry-${entry.id}`;\n\n const handleShare = async () => {\n try {\n if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n await navigator.clipboard.writeText(shareHref);\n }\n } catch {\n // noop; best-effort copy\n }\n };\n\n return (\n <article\n id={`entry-${entry.id}`}\n data-featuredrop-entry={entry.id}\n style={entryCardStyles}\n tabIndex={0}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", gap: \"12px\" }}>\n <div>\n <h3 style={{ margin: \"0 0 6px\", fontSize: \"18px\" }}>{entry.label}</h3>\n {descriptionHtml && (\n <div\n style={{ color: \"#4b5563\", fontSize: \"14px\", lineHeight: 1.6 }}\n dangerouslySetInnerHTML={{ __html: descriptionHtml }}\n />\n )}\n </div>\n <button\n aria-label={`${shareLabel} ${entry.label}`}\n onClick={handleShare}\n style={{\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n background: \"var(--featuredrop-card-bg, #fff)\",\n color: \"var(--featuredrop-text, #111827)\",\n borderRadius: \"8px\",\n padding: \"6px 8px\",\n cursor: \"pointer\",\n height: \"36px\",\n }}\n >\n {shareLabel}\n </button>\n </div>\n <div style={metaRowStyles}>\n <span>{formatDate(entry.releasedAt)}</span>\n {entry.version && (\n <span>\n v\n {typeof entry.version === \"string\"\n ? entry.version\n : entry.version.introduced ?? entry.version.showNewUntil ?? \"\"}\n </span>\n )}\n {entry.category && <span>{entry.category}</span>}\n {entry.type && <span>{entry.type}</span>}\n </div>\n {entry.image && (\n <img\n src={entry.image}\n alt={entry.label}\n style={{ width: \"100%\", borderRadius: \"10px\", marginTop: \"12px\" }}\n />\n )}\n {entry.cta && (\n <a\n href={entry.cta.url}\n style={{\n display: \"inline-block\",\n marginTop: \"12px\",\n padding: \"10px 14px\",\n borderRadius: \"10px\",\n fontWeight: 600,\n color: \"var(--featuredrop-btn-text, #fff)\",\n background: \"var(--featuredrop-btn-bg, #111827)\",\n textDecoration: \"none\",\n }}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.cta.label}\n </a>\n )}\n {showReactions && (\n <div style={reactionsRowStyles}>\n {Object.entries(reactions).map(([reaction, count]) => (\n <button\n key={reaction}\n type=\"button\"\n onClick={() => onReact(reaction)}\n disabled={!canReact}\n style={{\n ...reactionButtonStyles,\n opacity: !canReact && userReaction !== reaction ? 0.55 : 1,\n background: userReaction === reaction ? \"var(--featuredrop-reaction-active, rgba(17, 24, 39, 0.08))\" : \"var(--featuredrop-card-bg, #fff)\",\n }}\n aria-label={`React ${reaction} to ${entry.label}`}\n >\n {reaction} {count}\n </button>\n ))}\n </div>\n )}\n </article>\n );\n}\n\nexport function ChangelogPage({\n pageSize = 20,\n pagination = \"load-more\",\n showFilters = true,\n showSearch = true,\n categories,\n emptyState,\n renderEntry,\n formatDate,\n dateFormat = \"absolute\",\n basePath,\n manifest: manifestProp,\n className,\n style,\n theme,\n showReactions = false,\n reactions = [...DEFAULT_REACTIONS],\n onReaction,\n}: ChangelogPageProps) {\n const { manifest: contextManifest, locale, direction, translations } = useFeatureDrop();\n const themeVariables = useThemeVariables(theme);\n const manifest = useMemo(\n () => manifestProp ?? contextManifest ?? [],\n [manifestProp, contextManifest],\n );\n\n const sorted = useMemo(\n () =>\n [...manifest].sort(\n (a, b) => new Date(b.releasedAt).getTime() - new Date(a.releasedAt).getTime(),\n ),\n [manifest],\n );\n\n const allCategories = useMemo(() => {\n if (categories && categories.length > 0) return categories;\n const set = new Set<string>();\n for (const f of manifest) if (f.category) set.add(f.category);\n return Array.from(set);\n }, [categories, manifest]);\n\n const [query, setQuery] = useState(\"\");\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const [activeType, setActiveType] = useState<string | null>(null);\n const [page, setPage] = useState(1);\n const [, setReactionVersion] = useState(0);\n\n const filtered = useMemo(() => {\n const q = query.trim().toLowerCase();\n return sorted.filter((f) => {\n if (activeCategory && f.category !== activeCategory) return false;\n if (activeType && f.type !== activeType) return false;\n if (q) {\n const haystack = `${f.label} ${f.description ?? \"\"}`.toLowerCase();\n // lightweight fuzzy: all query tokens must appear somewhere\n const tokens = q.split(/\\s+/).filter(Boolean);\n if (!tokens.every((t) => haystack.includes(t))) return false;\n }\n return true;\n });\n }, [sorted, activeCategory, activeType, query]);\n\n useEffect(() => {\n setPage(1);\n }, [query, activeCategory, activeType]);\n\n const totalPages = Math.max(1, Math.ceil(filtered.length / pageSize));\n const visible = filtered.slice(0, page * pageSize);\n const listIdRef = useRef(`featuredrop-changelog-list-${Math.random().toString(36).slice(2, 10)}`);\n const listId = listIdRef.current;\n\n const sentinelRef = useRef<HTMLDivElement | null>(null);\n useEffect(() => {\n if (pagination !== \"infinite-scroll\") return;\n if (typeof IntersectionObserver === \"undefined\") return;\n const el = sentinelRef.current;\n if (!el) return;\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setPage((p) => (p < totalPages ? p + 1 : p));\n }\n }\n });\n observer.observe(el);\n return () => observer.disconnect();\n }, [pagination, totalPages]);\n\n const resolvedBasePath = useMemo(() => {\n if (basePath) return basePath;\n if (typeof window !== \"undefined\") return window.location.pathname;\n return \"\";\n }, [basePath]);\n const resolvedFormatDate = useMemo(\n () =>\n formatDate ??\n ((value: string) =>\n dateFormat === \"relative\"\n ? formatRelativeTimeForLocale(value, locale)\n : defaultFormatDate(value, locale)),\n [dateFormat, formatDate, locale],\n );\n\n // Deep-link scroll to #entry-id\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const hash = window.location.hash;\n if (hash.startsWith(\"#entry-\")) {\n const target = document.querySelector(hash);\n if (target && \"scrollIntoView\" in target) {\n target.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n }\n }, []);\n\n const handleListKeyDown = useCallback((event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.key !== \"ArrowDown\" && event.key !== \"ArrowUp\") return;\n const target = event.target as HTMLElement;\n const tagName = target.tagName.toLowerCase();\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") return;\n\n const entries = Array.from(\n event.currentTarget.querySelectorAll<HTMLElement>(\"[data-featuredrop-entry]\"),\n );\n if (entries.length === 0) return;\n\n const active = document.activeElement as HTMLElement | null;\n const currentIndex = entries.findIndex(\n (entry) => entry === active || (active ? entry.contains(active) : false),\n );\n const nextIndex = currentIndex < 0\n ? (event.key === \"ArrowDown\" ? 0 : entries.length - 1)\n : event.key === \"ArrowDown\"\n ? Math.min(entries.length - 1, currentIndex + 1)\n : Math.max(0, currentIndex - 1);\n\n if (nextIndex === currentIndex) return;\n event.preventDefault();\n entries[nextIndex].focus();\n }, []);\n\n const renderList = () =>\n visible.map((entry, idx) =>\n renderEntry ? (\n <div key={entry.id}>{renderEntry(entry, idx)}</div>\n ) : (\n <EntryCard\n key={entry.id}\n entry={entry}\n formatDate={resolvedFormatDate}\n basePath={resolvedBasePath}\n showReactions={showReactions}\n shareLabel={translations.share}\n reactions={showReactions ? getReactionCounts(entry.id, reactions) : {}}\n userReaction={showReactions ? getUserReaction(entry.id) : null}\n canReact={showReactions ? !getUserReaction(entry.id) : false}\n onReact={(reaction) => {\n const result = reactToEntry(entry.id, reaction, reactions);\n if (!result.updated) return;\n setReactionVersion((value) => value + 1);\n onReaction?.(entry, reaction, result.counts);\n }}\n />\n ),\n );\n\n const paginationControls = () => {\n if (pagination === \"load-more\" && page < totalPages) {\n return (\n <div style={{ textAlign: \"center\", marginTop: \"12px\" }}>\n <button style={loadMoreBtnStyles} onClick={() => setPage((p) => p + 1)}>\n {translations.loadMore}\n </button>\n </div>\n );\n }\n if (pagination === \"numbered\" && totalPages > 1) {\n return (\n <div style={{ display: \"flex\", gap: \"8px\", flexWrap: \"wrap\", marginTop: \"12px\" }}>\n {Array.from({ length: totalPages }).map((_, i) => {\n const pageNumber = i + 1;\n const active = pageNumber === page;\n return (\n <button\n key={pageNumber}\n style={active ? pillActiveStyles : pillStyles}\n onClick={() => setPage(pageNumber)}\n >\n {pageNumber}\n </button>\n );\n })}\n </div>\n );\n }\n if (pagination === \"infinite-scroll\") {\n return <div ref={sentinelRef} style={{ height: \"1px\" }} />;\n }\n return null;\n };\n\n const containerStyles = useMemo<CSSProperties>(\n () => ({ ...(themeVariables ?? {}), ...pageStyles, ...(style ?? {}) }),\n [themeVariables, style],\n );\n\n return (\n <div\n data-featuredrop-changelog-page\n className={className}\n style={containerStyles}\n dir={direction}\n >\n <a href={`#${listId}`} style={skipLinkStyles}>\n {translations.skipToEntries}\n </a>\n\n <div style={headerStyles}>\n <h2 style={{ margin: 0 }}>{translations.changelogTitle}</h2>\n {showSearch && (\n <input\n style={searchStyles}\n type=\"search\"\n placeholder={translations.searchPlaceholder}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n aria-label=\"Search changelog updates\"\n />\n )}\n </div>\n\n {showFilters && (\n <div style={filterBarStyles}>\n {allCategories.length > 0 && (\n <>\n <button\n type=\"button\"\n style={activeCategory ? pillStyles : pillActiveStyles}\n onClick={() => setActiveCategory(null)}\n >\n {translations.allCategories}\n </button>\n {allCategories.map((cat) => (\n <button\n type=\"button\"\n key={cat}\n style={activeCategory === cat ? pillActiveStyles : pillStyles}\n onClick={() => setActiveCategory(cat)}\n >\n {cat}\n </button>\n ))}\n </>\n )}\n {[\"feature\", \"improvement\", \"fix\", \"breaking\"].map((t) => (\n <button\n type=\"button\"\n key={t}\n style={activeType === t ? pillActiveStyles : pillStyles}\n onClick={() => setActiveType((prev) => (prev === t ? null : t))}\n >\n {t}\n </button>\n ))}\n </div>\n )}\n\n {visible.length === 0 ? (\n <div style={{ padding: \"32px 0\", textAlign: \"center\", color: \"#6b7280\" }}>\n {emptyState ?? translations.noUpdatesYet}\n </div>\n ) : (\n <div id={listId} onKeyDown={handleListKeyDown}>\n {renderList()}\n {paginationControls()}\n </div>\n )}\n </div>\n );\n}\n","import {\n useEffect,\n useContext,\n useMemo,\n useRef,\n useState,\n useCallback,\n type CSSProperties,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { ensureFeatureDropAnimationStyles, getEnterAnimation } from \"../../animation\";\nimport {\n registerTourController,\n type TourController,\n type TourSnapshot,\n} from \"../tour-registry\";\nimport { FeatureDropContext } from \"../context\";\n\nexport interface TourStep {\n id: string;\n target: string | RefObject<HTMLElement | null>;\n title: string;\n content: string | ReactNode;\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\" | \"auto\";\n action?: \"click\" | \"input\" | \"custom\";\n advanceOn?: { selector: string; event: string };\n highlightTarget?: boolean;\n beforeStep?: () => Promise<void>;\n afterStep?: () => Promise<void>;\n skipable?: boolean;\n}\n\nexport interface TourRenderProps {\n isActive: boolean;\n step: TourStep | null;\n stepIndex: number;\n totalSteps: number;\n startTour: () => void;\n nextStep: () => void;\n prevStep: () => void;\n skipTour: () => void;\n closeTour: () => void;\n}\n\nexport interface TourProps {\n id: string;\n steps: TourStep[];\n onComplete?: () => void;\n onSkip?: (stepId: string) => void;\n onTourStarted?: () => void;\n onTourCompleted?: () => void;\n onTourSkipped?: (stepId: string) => void;\n onStepViewed?: (step: TourStep, index: number) => void;\n overlay?: boolean;\n showProgress?: boolean;\n keyboard?: boolean;\n persistence?: boolean;\n children?: (props: TourRenderProps) => ReactNode;\n}\n\nconst tourBoxStyles: CSSProperties = {\n position: \"fixed\",\n zIndex: \"var(--featuredrop-tour-z-index, 10002)\" as unknown as number,\n width: \"min(92vw, 360px)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"12px\",\n background: \"#ffffff\",\n boxShadow: \"0 12px 40px rgba(0,0,0,0.18)\",\n padding: \"14px\",\n};\n\nconst overlayStyles: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n zIndex: \"var(--featuredrop-tour-overlay-z-index, 10000)\" as unknown as number,\n background: \"rgba(17, 24, 39, 0.54)\",\n};\n\nconst highlightStyles: CSSProperties = {\n position: \"fixed\",\n pointerEvents: \"none\",\n zIndex: \"var(--featuredrop-tour-highlight-z-index, 10001)\" as unknown as number,\n borderRadius: \"8px\",\n boxShadow: \"0 0 0 2px #f59e0b, 0 0 0 9999px rgba(17, 24, 39, 0.54)\",\n};\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n const nodes = container.querySelectorAll<HTMLElement>(\n [\n \"a[href]\",\n \"button:not([disabled])\",\n \"textarea:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n ].join(\",\"),\n );\n return Array.from(nodes).filter(\n (node) => !node.hasAttribute(\"disabled\") && node.getAttribute(\"aria-hidden\") !== \"true\",\n );\n}\n\nfunction getTargetElement(target: TourStep[\"target\"]): HTMLElement | null {\n if (typeof target === \"string\") {\n return document.querySelector(target);\n }\n return target.current;\n}\n\nfunction getStorageKey(id: string): string {\n return `featuredrop:tour:${id}:step`;\n}\n\nfunction readPersistedStep(id: string): string | null {\n if (typeof window === \"undefined\") return null;\n const storage = globalThis.localStorage as unknown as {\n getItem?: (key: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return null;\n try {\n return storage.getItem(getStorageKey(id));\n } catch {\n return null;\n }\n}\n\nfunction writePersistedStep(id: string, stepIndex: number): void {\n if (typeof window === \"undefined\") return;\n const storage = globalThis.localStorage as unknown as {\n setItem?: (key: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(getStorageKey(id), String(stepIndex));\n } catch {\n // noop\n }\n}\n\nfunction clearPersistedStep(id: string): void {\n if (typeof window === \"undefined\") return;\n const storage = globalThis.localStorage as unknown as {\n removeItem?: (key: string) => void;\n };\n if (!storage || typeof storage.removeItem !== \"function\") return;\n try {\n storage.removeItem(getStorageKey(id));\n } catch {\n // noop\n }\n}\n\nfunction resolvePosition(\n rect: DOMRect,\n placement: TourStep[\"placement\"],\n): { top: number; left: number } {\n const margin = 12;\n const width = 360;\n const height = 180;\n const viewportWidth = typeof window === \"undefined\" ? 1200 : window.innerWidth;\n const viewportHeight = typeof window === \"undefined\" ? 800 : window.innerHeight;\n\n const chosen = placement === \"auto\"\n ? rect.top > height + margin\n ? \"top\"\n : \"bottom\"\n : placement ?? \"bottom\";\n\n if (chosen === \"top\") {\n return {\n top: Math.max(margin, rect.top - height - margin),\n left: Math.min(viewportWidth - width - margin, Math.max(margin, rect.left)),\n };\n }\n if (chosen === \"left\") {\n return {\n top: Math.min(viewportHeight - height - margin, Math.max(margin, rect.top)),\n left: Math.max(margin, rect.left - width - margin),\n };\n }\n if (chosen === \"right\") {\n return {\n top: Math.min(viewportHeight - height - margin, Math.max(margin, rect.top)),\n left: Math.min(viewportWidth - width - margin, rect.right + margin),\n };\n }\n return {\n top: Math.min(viewportHeight - height - margin, rect.bottom + margin),\n left: Math.min(viewportWidth - width - margin, Math.max(margin, rect.left)),\n };\n}\n\nexport function Tour({\n id,\n steps,\n onComplete,\n onSkip,\n onTourStarted,\n onTourCompleted,\n onTourSkipped,\n onStepViewed,\n overlay = true,\n showProgress = true,\n keyboard = true,\n persistence = true,\n children,\n}: TourProps) {\n const context = useContext(FeatureDropContext);\n const dialogAnimation = useMemo(\n () => getEnterAnimation(context?.animation ?? \"normal\", \"popover\"),\n [context?.animation],\n );\n const [isActive, setIsActive] = useState(false);\n const [stepIndex, setStepIndex] = useState(-1);\n const [targetRect, setTargetRect] = useState<DOMRect | null>(null);\n const listenersRef = useRef(new Set<() => void>());\n const dialogRef = useRef<HTMLDivElement>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n const instanceIdRef = useRef(`featuredrop-tour-${Math.random().toString(36).slice(2, 10)}`);\n\n const step = stepIndex >= 0 ? steps[stepIndex] ?? null : null;\n\n const emit = useCallback(() => {\n for (const listener of listenersRef.current) listener();\n }, []);\n\n const snapshot = useCallback((): TourSnapshot => ({\n isActive,\n currentStepIndex: stepIndex,\n currentStep: step,\n totalSteps: steps.length,\n }), [isActive, stepIndex, step, steps.length]);\n\n const findValidStep = useCallback((fromIndex: number, direction: 1 | -1): number | null => {\n for (\n let i = fromIndex;\n i >= 0 && i < steps.length;\n i += direction\n ) {\n const targetEl = getTargetElement(steps[i].target);\n if (targetEl) return i;\n // eslint-disable-next-line no-console\n console.warn(`[featuredrop] Tour \"${id}\" step \"${steps[i].id}\" target not found, skipping.`);\n }\n return null;\n }, [id, steps]);\n\n const runAfterCurrentStep = useCallback(async () => {\n if (!step?.afterStep) return;\n try {\n await step.afterStep();\n } catch {\n // ignore callback failures to keep tour flow moving\n }\n }, [step]);\n\n const openStep = useCallback(async (index: number) => {\n const current = steps[index];\n if (!current) return;\n try {\n await current.beforeStep?.();\n } catch {\n // ignore callback failures to keep tour flow moving\n }\n\n const el = getTargetElement(current.target);\n if (!el) return;\n const scrollable = el as HTMLElement & {\n scrollIntoView?: (options?: ScrollIntoViewOptions) => void;\n };\n if (typeof scrollable.scrollIntoView === \"function\") {\n scrollable.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\n }\n setStepIndex(index);\n setIsActive(true);\n onStepViewed?.(current, index);\n }, [onStepViewed, steps]);\n\n const closeTour = useCallback(async () => {\n await runAfterCurrentStep();\n setIsActive(false);\n setStepIndex(-1);\n if (persistence) clearPersistedStep(id);\n const returnTarget = lastFocusedElementRef.current;\n if (returnTarget) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => returnTarget.focus());\n } else {\n returnTarget.focus();\n }\n }\n }, [id, persistence, runAfterCurrentStep]);\n\n const startTour = useCallback(async () => {\n if (context && !context.canShowTour()) return;\n if (typeof document !== \"undefined\" && document.activeElement instanceof HTMLElement) {\n lastFocusedElementRef.current = document.activeElement;\n }\n const next = findValidStep(0, 1);\n if (next === null) return;\n context?.trackAdoptionEvent({ type: \"tour_started\", tourId: id });\n onTourStarted?.();\n await openStep(next);\n context?.markTourShown();\n }, [context, findValidStep, id, onTourStarted, openStep]);\n\n const nextStep = useCallback(async () => {\n await runAfterCurrentStep();\n const next = findValidStep(stepIndex + 1, 1);\n if (next === null) {\n context?.trackAdoptionEvent({ type: \"tour_completed\", tourId: id });\n onComplete?.();\n onTourCompleted?.();\n await closeTour();\n return;\n }\n await openStep(next);\n }, [closeTour, context, findValidStep, id, onComplete, onTourCompleted, openStep, runAfterCurrentStep, stepIndex]);\n\n const prevStep = useCallback(async () => {\n await runAfterCurrentStep();\n const prev = findValidStep(stepIndex - 1, -1);\n if (prev === null) return;\n await openStep(prev);\n }, [findValidStep, openStep, runAfterCurrentStep, stepIndex]);\n\n const skipTour = useCallback(async () => {\n const stepId = step?.id ?? \"\";\n context?.trackAdoptionEvent({ type: \"tour_skipped\", tourId: id, metadata: { stepId } });\n onSkip?.(stepId);\n onTourSkipped?.(stepId);\n await closeTour();\n }, [closeTour, context, id, onSkip, onTourSkipped, step]);\n\n useEffect(() => {\n if (!persistence) return;\n if (context && !context.canShowTour()) return;\n const raw = readPersistedStep(id);\n if (!raw) return;\n const persisted = Number(raw);\n if (!Number.isInteger(persisted) || persisted < 0) return;\n const next = findValidStep(persisted, 1);\n if (next === null) return;\n void openStep(next);\n context?.markTourShown();\n }, [context, findValidStep, id, openStep, persistence]);\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n useEffect(() => {\n if (!isActive || !step) return;\n const updateRect = () => {\n const el = getTargetElement(step.target);\n if (!el) return;\n setTargetRect(el.getBoundingClientRect());\n };\n updateRect();\n window.addEventListener(\"resize\", updateRect);\n window.addEventListener(\"scroll\", updateRect, true);\n return () => {\n window.removeEventListener(\"resize\", updateRect);\n window.removeEventListener(\"scroll\", updateRect, true);\n };\n }, [isActive, step]);\n\n useEffect(() => {\n const advanceOn = step?.advanceOn;\n if (!isActive || !advanceOn) return;\n const el = document.querySelector(advanceOn.selector);\n if (!el) return;\n const handler = () => {\n void nextStep();\n };\n el.addEventListener(advanceOn.event, handler);\n return () => {\n el.removeEventListener(advanceOn.event, handler);\n };\n }, [isActive, nextStep, step]);\n\n useEffect(() => {\n if (!keyboard || !isActive) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n void nextStep();\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n void prevStep();\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n void skipTour();\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [isActive, keyboard, nextStep, prevStep, skipTour]);\n\n useEffect(() => {\n if (!isActive) return;\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n const focusable = getFocusableElements(dialog);\n const first = focusable[0] ?? dialog;\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => first.focus());\n } else {\n first.focus();\n }\n\n const handleTab = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") return;\n const items = getFocusableElements(dialog);\n if (items.length === 0) {\n event.preventDefault();\n dialog.focus();\n return;\n }\n\n const firstItem = items[0];\n const lastItem = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (event.shiftKey) {\n if (active === firstItem || active === dialog) {\n event.preventDefault();\n lastItem.focus();\n }\n return;\n }\n if (active === lastItem) {\n event.preventDefault();\n firstItem.focus();\n }\n };\n\n dialog.addEventListener(\"keydown\", handleTab);\n return () => {\n dialog.removeEventListener(\"keydown\", handleTab);\n };\n }, [isActive, stepIndex]);\n\n useEffect(() => {\n emit();\n }, [emit, isActive, step, stepIndex]);\n\n useEffect(() => {\n if (!persistence || !isActive || stepIndex < 0) return;\n writePersistedStep(id, stepIndex);\n }, [id, isActive, persistence, stepIndex]);\n\n useEffect(() => {\n const controller: TourController = {\n startTour: () => void startTour(),\n nextStep: () => void nextStep(),\n prevStep: () => void prevStep(),\n skipTour: () => void skipTour(),\n closeTour: () => void closeTour(),\n getSnapshot: snapshot,\n subscribe: (listener) => {\n listenersRef.current.add(listener);\n return () => {\n listenersRef.current.delete(listener);\n };\n },\n };\n return registerTourController(id, controller);\n }, [closeTour, id, nextStep, prevStep, skipTour, snapshot, startTour]);\n\n const renderProps: TourRenderProps = useMemo(() => ({\n isActive,\n step,\n stepIndex,\n totalSteps: steps.length,\n startTour: () => void startTour(),\n nextStep: () => void nextStep(),\n prevStep: () => void prevStep(),\n skipTour: () => void skipTour(),\n closeTour: () => void closeTour(),\n }), [closeTour, isActive, nextStep, prevStep, skipTour, startTour, step, stepIndex, steps.length]);\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n if (!isActive || !step || !targetRect) return null;\n\n const tooltipPos = resolvePosition(targetRect, step.placement ?? \"auto\");\n const canSkip = step.skipable !== false;\n const titleId = `${instanceIdRef.current}-title`;\n const contentId = `${instanceIdRef.current}-content`;\n const progressId = `${instanceIdRef.current}-progress`;\n const t = context?.translations;\n\n return (\n <>\n {overlay && <div data-featuredrop-tour-overlay style={overlayStyles} aria-hidden=\"true\" />}\n {(step.highlightTarget ?? true) && (\n <div\n data-featuredrop-tour-highlight\n style={{\n ...highlightStyles,\n top: targetRect.top - 4,\n left: targetRect.left - 4,\n width: targetRect.width + 8,\n height: targetRect.height + 8,\n }}\n />\n )}\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal={overlay ? true : undefined}\n aria-labelledby={titleId}\n aria-describedby={showProgress ? `${contentId} ${progressId}` : contentId}\n data-featuredrop-tour={id}\n dir={context?.direction}\n tabIndex={-1}\n style={{\n ...tourBoxStyles,\n animation: dialogAnimation,\n top: tooltipPos.top,\n left: tooltipPos.left,\n }}\n >\n <p id={titleId} style={{ margin: \"0 0 8px\", fontSize: \"16px\", fontWeight: 700 }}>\n {step.title}\n </p>\n <div\n id={contentId}\n style={{ margin: \"0 0 10px\", fontSize: \"14px\", lineHeight: 1.5, color: \"#4b5563\" }}\n >\n {typeof step.content === \"string\" ? step.content : step.content}\n </div>\n {showProgress && (\n <p\n id={progressId}\n style={{ margin: \"0 0 10px\", fontSize: \"12px\", color: \"#6b7280\" }}\n aria-live=\"polite\"\n >\n {t ? t.stepOf(stepIndex + 1, steps.length) : `Step ${stepIndex + 1} of ${steps.length}`}\n </p>\n )}\n <div style={{ display: \"flex\", justifyContent: \"space-between\", gap: \"8px\" }}>\n <button\n type=\"button\"\n onClick={() => void prevStep()}\n disabled={stepIndex <= 0}\n style={{\n border: \"1px solid #e5e7eb\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: stepIndex <= 0 ? \"not-allowed\" : \"pointer\",\n opacity: stepIndex <= 0 ? 0.5 : 1,\n }}\n >\n {t?.back ?? \"Back\"}\n </button>\n <div style={{ display: \"flex\", gap: \"8px\" }}>\n {canSkip && (\n <button\n type=\"button\"\n onClick={() => void skipTour()}\n style={{\n border: \"1px solid #e5e7eb\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {t?.skip ?? \"Skip\"}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => void nextStep()}\n style={{\n border: \"none\",\n background: \"#111827\",\n color: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {stepIndex >= steps.length - 1 ? (t?.finish ?? \"Finish\") : (t?.next ?? \"Next\")}\n </button>\n </div>\n </div>\n </div>\n </>\n );\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n registerChecklistController,\n type ChecklistController,\n type ChecklistSnapshot,\n} from \"../checklist-registry\";\nimport { getTourController } from \"../tour-registry\";\nimport { FeatureDropContext } from \"../context\";\n\nexport interface ChecklistTask {\n id: string;\n title: string;\n description?: string;\n completed?: boolean;\n completionEvent?: string;\n action?: {\n type: \"tour\" | \"link\" | \"callback\";\n target: string;\n };\n icon?: ReactNode;\n estimatedTime?: string;\n}\n\nexport interface ChecklistRenderProps {\n tasks: ChecklistTask[];\n completedIds: Set<string>;\n completeTask: (taskId: string) => void;\n resetChecklist: () => void;\n dismissChecklist: () => void;\n isComplete: boolean;\n progress: { completed: number; total: number; percent: number };\n collapsed: boolean;\n toggleCollapsed: () => void;\n}\n\nexport interface ChecklistProps {\n id: string;\n tasks: ChecklistTask[];\n position?:\n | \"bottom-right\"\n | \"bottom-left\"\n | \"top-right\"\n | \"top-left\"\n | \"inline\";\n collapsible?: boolean;\n showProgress?: boolean;\n onComplete?: () => void;\n dismissible?: boolean;\n actionHandlers?: Record<string, () => void>;\n children?: (props: ChecklistRenderProps) => ReactNode;\n}\n\ninterface PersistedChecklistState {\n completedIds: string[];\n dismissed: boolean;\n collapsed: boolean;\n}\n\nconst containerBaseStyles: CSSProperties = {\n width: \"min(92vw, 360px)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"12px\",\n background: \"#ffffff\",\n boxShadow: \"0 10px 28px rgba(0,0,0,0.12)\",\n padding: \"12px\",\n zIndex: \"var(--featuredrop-checklist-z-index, 10000)\" as unknown as number,\n};\n\nconst positionStyles: Record<NonNullable<ChecklistProps[\"position\"]>, CSSProperties> = {\n \"bottom-right\": { position: \"fixed\", right: \"16px\", bottom: \"16px\" },\n \"bottom-left\": { position: \"fixed\", left: \"16px\", bottom: \"16px\" },\n \"top-right\": { position: \"fixed\", right: \"16px\", top: \"16px\" },\n \"top-left\": { position: \"fixed\", left: \"16px\", top: \"16px\" },\n inline: {},\n};\n\nfunction getStorageKey(id: string): string {\n return `featuredrop:checklist:${id}:state`;\n}\n\nfunction readPersistedState(id: string): PersistedChecklistState | null {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (key: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return null;\n try {\n const raw = storage.getItem(getStorageKey(id));\n if (!raw) return null;\n const parsed = JSON.parse(raw) as PersistedChecklistState;\n if (!parsed || typeof parsed !== \"object\") return null;\n if (!Array.isArray(parsed.completedIds)) return null;\n return {\n completedIds: parsed.completedIds.filter((value): value is string => typeof value === \"string\"),\n dismissed: !!parsed.dismissed,\n collapsed: !!parsed.collapsed,\n };\n } catch {\n return null;\n }\n}\n\nfunction writePersistedState(id: string, state: PersistedChecklistState): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (key: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(getStorageKey(id), JSON.stringify(state));\n } catch {\n // noop\n }\n}\n\nfunction parseCompletionEvent(value: string): { selector: string; event: string } | null {\n const parts = value.split(\":\");\n if (parts.length < 2) return null;\n const selector = parts.slice(0, -1).join(\":\").trim();\n const event = parts[parts.length - 1].trim();\n if (!selector || !event) return null;\n return { selector, event };\n}\n\nexport function Checklist({\n id,\n tasks,\n position = \"bottom-right\",\n collapsible = true,\n showProgress = true,\n onComplete,\n dismissible = true,\n actionHandlers,\n children,\n}: ChecklistProps) {\n const context = useContext(FeatureDropContext);\n const persisted = useMemo(() => readPersistedState(id), [id]);\n const [completedIds, setCompletedIds] = useState<Set<string>>(() => {\n const initial = new Set<string>();\n for (const task of tasks) {\n if (task.completed) initial.add(task.id);\n }\n for (const taskId of persisted?.completedIds ?? []) initial.add(taskId);\n return initial;\n });\n const [dismissed, setDismissed] = useState<boolean>(persisted?.dismissed ?? false);\n const [collapsed, setCollapsed] = useState<boolean>(persisted?.collapsed ?? false);\n const listenersRef = useRef(new Set<() => void>());\n\n const progress = useMemo(() => {\n const total = tasks.length;\n const completed = tasks.reduce(\n (count, task) => count + (completedIds.has(task.id) ? 1 : 0),\n 0,\n );\n const percent = total === 0 ? 100 : Math.round((completed / total) * 100);\n return { completed, total, percent };\n }, [completedIds, tasks]);\n\n const isComplete = progress.total > 0 && progress.completed >= progress.total;\n\n const emit = useCallback(() => {\n for (const listener of listenersRef.current) listener();\n }, []);\n\n const persist = useCallback((next?: {\n completedIds?: Set<string>;\n dismissed?: boolean;\n collapsed?: boolean;\n }) => {\n writePersistedState(id, {\n completedIds: Array.from(next?.completedIds ?? completedIds),\n dismissed: next?.dismissed ?? dismissed,\n collapsed: next?.collapsed ?? collapsed,\n });\n }, [collapsed, completedIds, dismissed, id]);\n\n const completeTask = useCallback((taskId: string) => {\n setCompletedIds((previous) => {\n if (previous.has(taskId)) return previous;\n const next = new Set(previous);\n next.add(taskId);\n persist({ completedIds: next });\n context?.trackAdoptionEvent({\n type: \"checklist_task_completed\",\n metadata: { checklistId: id, taskId },\n });\n return next;\n });\n }, [context, id, persist]);\n\n const resetChecklist = useCallback(() => {\n const next = new Set<string>();\n for (const task of tasks) {\n if (task.completed) next.add(task.id);\n }\n setCompletedIds(next);\n setDismissed(false);\n setCollapsed(false);\n persist({ completedIds: next, dismissed: false, collapsed: false });\n }, [persist, tasks]);\n\n const dismissChecklist = useCallback(() => {\n setDismissed(true);\n persist({ dismissed: true });\n }, [persist]);\n\n const toggleCollapsed = useCallback(() => {\n setCollapsed((previous) => {\n const next = !previous;\n persist({ collapsed: next });\n return next;\n });\n }, [persist]);\n\n useEffect(() => {\n if (!isComplete) return;\n context?.trackAdoptionEvent({\n type: \"checklist_completed\",\n metadata: { checklistId: id },\n });\n onComplete?.();\n }, [context, id, isComplete, onComplete]);\n\n useEffect(() => {\n emit();\n }, [collapsed, completedIds, dismissed, emit, progress.completed, progress.percent, progress.total, isComplete]);\n\n useEffect(() => {\n const cleanups: Array<() => void> = [];\n for (const task of tasks) {\n if (!task.completionEvent || completedIds.has(task.id)) continue;\n const parsed = parseCompletionEvent(task.completionEvent);\n if (!parsed) continue;\n const target = document.querySelector(parsed.selector);\n if (!target) continue;\n const handler = () => completeTask(task.id);\n target.addEventListener(parsed.event, handler);\n cleanups.push(() => target.removeEventListener(parsed.event, handler));\n }\n return () => {\n for (const cleanup of cleanups) cleanup();\n };\n }, [completeTask, completedIds, tasks]);\n\n useEffect(() => {\n const controller: ChecklistController = {\n completeTask,\n resetChecklist,\n dismissChecklist,\n toggleCollapsed,\n getSnapshot: (): ChecklistSnapshot => ({\n exists: true,\n tasks: tasks.map((task) => ({\n id: task.id,\n completed: completedIds.has(task.id),\n })),\n progress,\n isComplete,\n dismissed,\n collapsed,\n }),\n subscribe: (listener) => {\n listenersRef.current.add(listener);\n return () => {\n listenersRef.current.delete(listener);\n };\n },\n };\n return registerChecklistController(id, controller);\n }, [collapsed, completeTask, completedIds, dismissChecklist, dismissed, id, isComplete, progress, resetChecklist, tasks, toggleCollapsed]);\n\n const runTaskAction = (task: ChecklistTask): void => {\n const action = task.action;\n if (!action) return;\n if (action.type === \"tour\") {\n getTourController(action.target)?.startTour();\n return;\n }\n if (action.type === \"link\") {\n if (typeof window !== \"undefined\") {\n window.location.assign(action.target);\n }\n return;\n }\n if (action.type === \"callback\") {\n actionHandlers?.[action.target]?.();\n }\n };\n\n const renderProps: ChecklistRenderProps = {\n tasks,\n completedIds,\n completeTask,\n resetChecklist,\n dismissChecklist,\n isComplete,\n progress,\n collapsed,\n toggleCollapsed,\n };\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n if (dismissed) return null;\n\n return (\n <div\n data-featuredrop-checklist={id}\n style={{\n ...containerBaseStyles,\n ...positionStyles[position],\n }}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", gap: \"8px\" }}>\n <strong>Getting Started</strong>\n <div style={{ display: \"flex\", gap: \"6px\" }}>\n {collapsible && (\n <button\n onClick={toggleCollapsed}\n style={{ border: \"none\", background: \"transparent\", cursor: \"pointer\" }}\n aria-label={collapsed ? \"Expand checklist\" : \"Collapse checklist\"}\n >\n {collapsed ? \"+\" : \"-\"}\n </button>\n )}\n {dismissible && (\n <button\n onClick={dismissChecklist}\n style={{ border: \"none\", background: \"transparent\", cursor: \"pointer\" }}\n aria-label=\"Dismiss checklist\"\n >\n x\n </button>\n )}\n </div>\n </div>\n\n {showProgress && (\n <div style={{ marginTop: \"8px\", marginBottom: collapsed ? 0 : \"8px\" }}>\n <div style={{ fontSize: \"12px\", color: \"#6b7280\", marginBottom: \"4px\" }}>\n {progress.completed} of {progress.total} complete\n </div>\n <div style={{ height: \"6px\", borderRadius: \"999px\", background: \"#e5e7eb\" }}>\n <div\n style={{\n height: \"100%\",\n width: `${progress.percent}%`,\n borderRadius: \"999px\",\n background: \"#10b981\",\n transition: \"width 160ms ease\",\n }}\n />\n </div>\n </div>\n )}\n\n {!collapsed && (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {tasks.map((task) => {\n const done = completedIds.has(task.id);\n return (\n <button\n key={task.id}\n onClick={() => {\n completeTask(task.id);\n runTaskAction(task);\n }}\n style={{\n textAlign: \"left\",\n border: \"1px solid #e5e7eb\",\n background: done ? \"#ecfdf5\" : \"#fff\",\n borderRadius: \"8px\",\n padding: \"8px 10px\",\n cursor: \"pointer\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: \"8px\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <span>{task.icon ?? (done ? \"✓\" : \"○\")}</span>\n <span style={{ fontWeight: 600 }}>{task.title}</span>\n </div>\n {task.estimatedTime && (\n <span style={{ fontSize: \"11px\", color: \"#6b7280\" }}>{task.estimatedTime}</span>\n )}\n </div>\n {task.description && (\n <p style={{ margin: \"4px 0 0 24px\", fontSize: \"12px\", color: \"#6b7280\" }}>\n {task.description}\n </p>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n ensureFeatureDropAnimationStyles,\n getEnterAnimation,\n getPulseAnimation,\n prefersReducedMotion,\n resolveAnimationPreset,\n} from \"../../animation\";\nimport { FeatureDropContext } from \"../context\";\n\nexport interface HotspotProps {\n id: string;\n target: string;\n type?: \"info\" | \"new\" | \"help\";\n frequency?: \"once\" | \"every-session\" | \"always\";\n children: ReactNode;\n}\n\nexport interface TooltipGroupProps {\n maxVisible?: number;\n children: ReactNode;\n}\n\ninterface TooltipGroupContextValue {\n canOpen: (id: string) => boolean;\n markOpen: (id: string) => void;\n markClosed: (id: string) => void;\n}\n\nconst TooltipGroupContext = createContext<TooltipGroupContextValue | null>(null);\nconst sessionDismissed = new Set<string>();\n\nfunction onceStorageKey(id: string): string {\n return `featuredrop:hotspot:${id}:dismissed`;\n}\n\nfunction isDismissedOnce(id: string): boolean {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (key: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return false;\n try {\n return storage.getItem(onceStorageKey(id)) === \"1\";\n } catch {\n return false;\n }\n}\n\nfunction setDismissedOnce(id: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (key: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(onceStorageKey(id), \"1\");\n } catch {\n // noop\n }\n}\n\nexport function TooltipGroup({ maxVisible = 3, children }: TooltipGroupProps) {\n const [openIds, setOpenIds] = useState<Set<string>>(new Set());\n const openIdsRef = useRef(openIds);\n openIdsRef.current = openIds;\n\n const value = useMemo<TooltipGroupContextValue>(() => ({\n canOpen: (id: string) => {\n const current = openIdsRef.current;\n return current.has(id) || current.size < maxVisible;\n },\n markOpen: (id: string) => {\n const current = openIdsRef.current;\n if (current.has(id)) return;\n const next = new Set(current);\n next.add(id);\n openIdsRef.current = next;\n setOpenIds(next);\n },\n markClosed: (id: string) => {\n const current = openIdsRef.current;\n if (!current.has(id)) return;\n const next = new Set(current);\n next.delete(id);\n openIdsRef.current = next;\n setOpenIds(next);\n },\n }), [maxVisible]);\n\n useEffect(() => {\n openIdsRef.current = openIds;\n }, [openIds]);\n\n return (\n <TooltipGroupContext.Provider value={value}>\n {children}\n </TooltipGroupContext.Provider>\n );\n}\n\nconst beaconTypeStyles: Record<NonNullable<HotspotProps[\"type\"]>, CSSProperties> = {\n info: { background: \"#3b82f6\" },\n new: { background: \"#10b981\" },\n help: { background: \"#f59e0b\" },\n};\n\nconst tooltipStyles: CSSProperties = {\n position: \"fixed\",\n zIndex: \"var(--featuredrop-hotspot-z-index, 10001)\" as unknown as number,\n border: \"1px solid #e5e7eb\",\n borderRadius: \"10px\",\n background: \"#fff\",\n padding: \"10px 12px\",\n boxShadow: \"0 8px 28px rgba(0,0,0,0.14)\",\n width: \"min(90vw, 280px)\",\n};\n\nexport function Hotspot({\n id,\n target,\n type = \"info\",\n frequency = \"once\",\n children,\n}: HotspotProps) {\n const featureDrop = useContext(FeatureDropContext);\n const group = useContext(TooltipGroupContext);\n const [open, setOpen] = useState(false);\n const [dismissed, setDismissed] = useState(false);\n const [rect, setRect] = useState<DOMRect | null>(null);\n const hoverTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const beaconRef = useRef<HTMLButtonElement>(null);\n const instanceIdRef = useRef(`featuredrop-hotspot-${Math.random().toString(36).slice(2, 10)}`);\n const animation = useMemo(\n () =>\n resolveAnimationPreset(featureDrop?.animation ?? \"normal\", {\n reducedMotion: prefersReducedMotion(),\n }),\n [featureDrop?.animation],\n );\n const beaconPulseAnimation = useMemo(\n () => getPulseAnimation(animation, \"dot\"),\n [animation],\n );\n const tooltipEnterAnimation = useMemo(\n () => getEnterAnimation(animation, \"popover\"),\n [animation],\n );\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n useEffect(() => {\n if (frequency === \"once\" && isDismissedOnce(id)) {\n setDismissed(true);\n return;\n }\n if (frequency === \"every-session\" && sessionDismissed.has(id)) {\n setDismissed(true);\n }\n }, [frequency, id]);\n\n useEffect(() => {\n const el = document.querySelector(target);\n if (!el) return;\n const update = () => setRect(el.getBoundingClientRect());\n update();\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n return () => {\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n };\n }, [target]);\n\n const canOpen = useCallback(() => {\n if (dismissed) return false;\n if (!group) return true;\n return group.canOpen(id);\n }, [dismissed, group, id]);\n\n const openTooltip = useCallback(() => {\n if (!canOpen()) return;\n setOpen(true);\n group?.markOpen(id);\n }, [canOpen, group, id]);\n\n const closeTooltip = useCallback(() => {\n setOpen(false);\n group?.markClosed(id);\n const beacon = beaconRef.current;\n if (beacon) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => beacon.focus());\n } else {\n beacon.focus();\n }\n }\n }, [group, id]);\n\n const dismissTooltip = useCallback(() => {\n setDismissed(true);\n closeTooltip();\n if (frequency === \"once\") {\n setDismissedOnce(id);\n } else if (frequency === \"every-session\") {\n sessionDismissed.add(id);\n }\n }, [closeTooltip, frequency, id]);\n\n useEffect(() => {\n return () => {\n if (hoverTimer.current) {\n clearTimeout(hoverTimer.current);\n }\n group?.markClosed(id);\n };\n }, [group, id]);\n\n useEffect(() => {\n if (!open) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n closeTooltip();\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [closeTooltip, open]);\n\n if (!rect || dismissed) return null;\n\n const tooltipTop = Math.min(window.innerHeight - 120, rect.bottom + 10);\n const tooltipLeft = Math.min(window.innerWidth - 300, Math.max(10, rect.left));\n const tooltipId = `${instanceIdRef.current}-tooltip`;\n\n return (\n <>\n <button\n ref={beaconRef}\n type=\"button\"\n data-featuredrop-hotspot={id}\n aria-label={`Hotspot ${id}`}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-controls={tooltipId}\n onMouseEnter={() => {\n hoverTimer.current = setTimeout(openTooltip, 120);\n }}\n onMouseLeave={() => {\n if (hoverTimer.current) clearTimeout(hoverTimer.current);\n }}\n onClick={() => {\n if (open) closeTooltip();\n else openTooltip();\n }}\n style={{\n position: \"fixed\",\n top: rect.top - 6,\n left: rect.right - 6,\n width: \"12px\",\n height: \"12px\",\n borderRadius: \"999px\",\n border: \"2px solid #fff\",\n boxShadow: \"0 0 0 2px rgba(17,24,39,0.1)\",\n cursor: \"pointer\",\n zIndex: \"var(--featuredrop-hotspot-beacon-z-index, 10000)\" as unknown as number,\n animation: beaconPulseAnimation ?? \"none\",\n ...beaconTypeStyles[type],\n }}\n />\n {open && (\n <div\n id={tooltipId}\n role=\"dialog\"\n aria-modal=\"false\"\n data-featuredrop-hotspot-tooltip={id}\n style={{\n ...tooltipStyles,\n top: tooltipTop,\n left: tooltipLeft,\n animation: tooltipEnterAnimation,\n }}\n onMouseLeave={closeTooltip}\n >\n <div style={{ fontSize: \"13px\", color: \"#374151\", lineHeight: 1.5 }}>{children}</div>\n <button\n type=\"button\"\n onClick={dismissTooltip}\n style={{\n marginTop: \"8px\",\n border: \"none\",\n background: \"transparent\",\n color: \"#2563eb\",\n cursor: \"pointer\",\n padding: 0,\n }}\n >\n Dismiss\n </button>\n </div>\n )}\n </>\n );\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { ensureFeatureDropAnimationStyles, getEnterAnimation } from \"../../animation\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\n\nexport type FeedbackEmoji =\n | \"thumbs-up\"\n | \"thumbs-down\"\n | \"heart\"\n | \"thinking\"\n | \"fire\";\n\nexport interface FeedbackPayload {\n featureId?: string;\n text: string;\n category?: string;\n emoji?: FeedbackEmoji;\n screenshot?: Blob;\n url: string;\n timestamp: string;\n metadata?: Record<string, unknown>;\n}\n\nexport type FeedbackRateLimit = \"none\" | \"1-per-feature\" | \"1-per-session\";\n\nexport interface FeedbackWidgetRenderProps {\n isOpen: boolean;\n isSubmitting: boolean;\n isRateLimited: boolean;\n submitted: boolean;\n text: string;\n category: string;\n emoji: FeedbackEmoji | null;\n screenshot: Blob | null;\n error: string | null;\n open: () => void;\n close: () => void;\n setText: (value: string) => void;\n setCategory: (value: string) => void;\n setEmoji: (value: FeedbackEmoji | null) => void;\n captureScreenshot: () => Promise<void>;\n submit: () => Promise<void>;\n}\n\nexport interface FeedbackWidgetProps {\n featureId?: string;\n onSubmit: (payload: FeedbackPayload) => Promise<void> | void;\n showScreenshot?: boolean;\n showEmoji?: boolean;\n rateLimit?: FeedbackRateLimit;\n categories?: string[];\n metadata?: Record<string, unknown>;\n screenshotCapture?: () => Promise<Blob | null | undefined>;\n triggerLabel?: string;\n title?: string;\n className?: string;\n style?: CSSProperties;\n children?: (props: FeedbackWidgetRenderProps) => ReactNode;\n}\n\nconst sessionSubmitted = new Set<string>();\nconst defaultCategories = [\"bug\", \"suggestion\", \"praise\", \"other\"];\nconst emojiOptions: FeedbackEmoji[] = [\n \"thumbs-up\",\n \"thumbs-down\",\n \"heart\",\n \"thinking\",\n \"fire\",\n];\n\nconst panelStyles: CSSProperties = {\n width: \"min(92vw, 360px)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"12px\",\n background: \"#fff\",\n boxShadow: \"0 10px 28px rgba(0,0,0,0.14)\",\n padding: \"12px\",\n};\n\nfunction getRateLimitKey(featureId?: string): string {\n return `featuredrop:feedback:${featureId ?? \"__global__\"}:submitted`;\n}\n\nfunction readSubmitted(key: string): boolean {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (storageKey: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return false;\n try {\n return storage.getItem(key) === \"1\";\n } catch {\n return false;\n }\n}\n\nfunction writeSubmitted(key: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (storageKey: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(key, \"1\");\n } catch {\n // noop\n }\n}\n\nasync function captureViaHtml2Canvas(): Promise<Blob | null> {\n const html2canvasFn = (\n globalThis as unknown as {\n html2canvas?: (target: HTMLElement) => Promise<HTMLCanvasElement>;\n }\n ).html2canvas;\n if (!html2canvasFn || typeof document === \"undefined\") return null;\n const canvas = await html2canvasFn(document.body);\n if (typeof canvas.toBlob !== \"function\") return null;\n return new Promise((resolve) => {\n canvas.toBlob((blob) => resolve(blob), \"image/png\");\n });\n}\n\nexport function FeedbackWidget({\n featureId,\n onSubmit,\n showScreenshot = false,\n showEmoji = true,\n rateLimit = \"none\",\n categories = defaultCategories,\n metadata,\n screenshotCapture,\n triggerLabel,\n title,\n className,\n style,\n children,\n}: FeedbackWidgetProps) {\n const { trackAdoptionEvent, direction, animation, translations } = useFeatureDrop();\n const [isOpen, setIsOpen] = useState(false);\n const [text, setText] = useState(\"\");\n const [category, setCategory] = useState(categories[0] ?? \"other\");\n const [emoji, setEmoji] = useState<FeedbackEmoji | null>(null);\n const [screenshot, setScreenshot] = useState<Blob | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [submitted, setSubmitted] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n const instanceIdRef = useRef(`featuredrop-feedback-${Math.random().toString(36).slice(2, 10)}`);\n\n const rateLimitKey = useMemo(() => getRateLimitKey(featureId), [featureId]);\n const panelAnimation = useMemo(() => getEnterAnimation(animation, \"popover\"), [animation]);\n const resolvedTriggerLabel = triggerLabel ?? translations.feedbackTrigger;\n const resolvedTitle = title ?? translations.feedbackTitle;\n const isRateLimited = useMemo(() => {\n if (rateLimit === \"none\") return false;\n if (rateLimit === \"1-per-session\") return sessionSubmitted.has(rateLimitKey);\n return readSubmitted(rateLimitKey);\n }, [rateLimit, rateLimitKey, submitted]);\n\n const open = useCallback(() => {\n if (typeof document !== \"undefined\" && document.activeElement instanceof HTMLElement) {\n lastFocusedElementRef.current = document.activeElement;\n }\n setIsOpen(true);\n }, []);\n const close = useCallback(() => {\n setIsOpen(false);\n const returnTarget = triggerRef.current ?? lastFocusedElementRef.current;\n if (returnTarget) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => returnTarget.focus());\n } else {\n returnTarget.focus();\n }\n }\n }, []);\n\n useEffect(() => {\n if (!isOpen) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n close();\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [close, isOpen]);\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n const captureScreenshot = useCallback(async () => {\n if (!showScreenshot) return;\n try {\n const captured = screenshotCapture\n ? await screenshotCapture()\n : await captureViaHtml2Canvas();\n if (captured) setScreenshot(captured);\n } catch {\n // ignore capture errors in UI flow\n }\n }, [screenshotCapture, showScreenshot]);\n\n const submit = useCallback(async () => {\n if (isSubmitting || isRateLimited) return;\n const trimmed = text.trim();\n if (!trimmed) {\n setError(\"Please add feedback details.\");\n return;\n }\n setIsSubmitting(true);\n setError(null);\n const payload: FeedbackPayload = {\n featureId,\n text: trimmed,\n category,\n emoji: emoji ?? undefined,\n screenshot: screenshot ?? undefined,\n url: typeof window === \"undefined\" ? \"\" : window.location.href,\n timestamp: new Date().toISOString(),\n metadata,\n };\n try {\n await onSubmit(payload);\n setSubmitted(true);\n if (rateLimit === \"1-per-session\") {\n sessionSubmitted.add(rateLimitKey);\n } else if (rateLimit === \"1-per-feature\") {\n writeSubmitted(rateLimitKey);\n }\n trackAdoptionEvent({\n type: \"feedback_submitted\",\n featureId,\n metadata: {\n category,\n emoji: emoji ?? undefined,\n hasScreenshot: !!screenshot,\n },\n });\n setText(\"\");\n setScreenshot(null);\n setEmoji(null);\n } catch {\n setError(\"Failed to submit feedback. Please try again.\");\n } finally {\n setIsSubmitting(false);\n }\n }, [\n category,\n emoji,\n featureId,\n isRateLimited,\n isSubmitting,\n metadata,\n onSubmit,\n rateLimit,\n rateLimitKey,\n screenshot,\n text,\n trackAdoptionEvent,\n ]);\n\n const renderProps: FeedbackWidgetRenderProps = {\n isOpen,\n isSubmitting,\n isRateLimited,\n submitted,\n text,\n category,\n emoji,\n screenshot,\n error,\n open,\n close,\n setText,\n setCategory,\n setEmoji,\n captureScreenshot,\n submit,\n };\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n if (!isOpen) {\n return (\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={open}\n data-featuredrop-feedback-trigger\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={`${instanceIdRef.current}-panel`}\n style={{\n border: \"1px solid #d1d5db\",\n background: \"#fff\",\n borderRadius: \"10px\",\n padding: \"8px 12px\",\n cursor: \"pointer\",\n fontWeight: 600,\n }}\n >\n {resolvedTriggerLabel}\n </button>\n );\n }\n\n const titleId = `${instanceIdRef.current}-title`;\n const textareaId = `${instanceIdRef.current}-textarea`;\n\n return (\n <div\n ref={panelRef}\n id={`${instanceIdRef.current}-panel`}\n data-featuredrop-feedback-widget\n className={className}\n style={{ ...panelStyles, animation: panelAnimation, ...style }}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={titleId}\n dir={direction}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", gap: \"8px\" }}>\n <strong id={titleId}>{resolvedTitle}</strong>\n <button\n type=\"button\"\n onClick={close}\n style={{ border: \"none\", background: \"transparent\", cursor: \"pointer\" }}\n aria-label={translations.close}\n >\n x\n </button>\n </div>\n\n {isRateLimited && (\n <p style={{ margin: \"8px 0 0\", fontSize: \"12px\", color: \"#6b7280\" }}>\n Feedback already submitted.\n </p>\n )}\n\n <textarea\n id={textareaId}\n aria-label=\"Feedback details\"\n value={text}\n onChange={(event) => setText(event.target.value)}\n placeholder=\"Tell us what worked, what did not, and what would help.\"\n rows={4}\n disabled={isRateLimited || isSubmitting}\n style={{\n width: \"100%\",\n marginTop: \"8px\",\n border: \"1px solid #d1d5db\",\n borderRadius: \"8px\",\n padding: \"8px\",\n resize: \"vertical\",\n }}\n />\n\n <div style={{ display: \"flex\", gap: \"8px\", marginTop: \"8px\", flexWrap: \"wrap\" }}>\n <select\n aria-label=\"Feedback category\"\n value={category}\n onChange={(event) => setCategory(event.target.value)}\n disabled={isRateLimited || isSubmitting}\n style={{ border: \"1px solid #d1d5db\", borderRadius: \"8px\", padding: \"6px 8px\" }}\n >\n {categories.map((item) => (\n <option key={item} value={item}>\n {item}\n </option>\n ))}\n </select>\n\n {showEmoji && (\n <div style={{ display: \"flex\", gap: \"6px\", flexWrap: \"wrap\" }}>\n {emojiOptions.map((item) => (\n <button\n key={item}\n type=\"button\"\n onClick={() => setEmoji(item)}\n disabled={isRateLimited || isSubmitting}\n aria-pressed={emoji === item}\n style={{\n border: \"1px solid #d1d5db\",\n background: emoji === item ? \"#111827\" : \"#fff\",\n color: emoji === item ? \"#fff\" : \"#111827\",\n borderRadius: \"999px\",\n fontSize: \"11px\",\n padding: \"4px 8px\",\n cursor: \"pointer\",\n }}\n >\n {item}\n </button>\n ))}\n </div>\n )}\n </div>\n\n {showScreenshot && (\n <div style={{ marginTop: \"8px\" }}>\n <button\n type=\"button\"\n onClick={() => void captureScreenshot()}\n disabled={isRateLimited || isSubmitting}\n style={{\n border: \"1px solid #d1d5db\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 8px\",\n cursor: \"pointer\",\n }}\n >\n Capture screenshot\n </button>\n {screenshot && (\n <span style={{ marginLeft: \"8px\", fontSize: \"12px\", color: \"#6b7280\" }}>\n Screenshot attached\n </span>\n )}\n </div>\n )}\n\n {error && (\n <p role=\"alert\" style={{ margin: \"8px 0 0\", fontSize: \"12px\", color: \"#b91c1c\" }}>{error}</p>\n )}\n {submitted && !error && (\n <p role=\"status\" aria-live=\"polite\" style={{ margin: \"8px 0 0\", fontSize: \"12px\", color: \"#166534\" }}>\n {translations.feedbackSubmitted}\n </p>\n )}\n\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: \"8px\", marginTop: \"10px\" }}>\n <button\n type=\"button\"\n onClick={close}\n style={{\n border: \"1px solid #d1d5db\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {translations.cancel}\n </button>\n <button\n type=\"button\"\n onClick={() => void submit()}\n disabled={isRateLimited || isSubmitting || !text.trim()}\n style={{\n border: \"none\",\n background: \"#111827\",\n color: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n opacity: isRateLimited || isSubmitting || !text.trim() ? 0.5 : 1,\n }}\n >\n {isSubmitting ? \"Submitting...\" : translations.submit}\n </button>\n </div>\n </div>\n );\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport type { FeatureCTA, FeatureEntry } from \"../../types\";\nimport { parseDescription } from \"../../markdown\";\nimport {\n ensureFeatureDropAnimationStyles,\n getAnimationDurationMs,\n getEnterAnimation,\n getExitAnimation,\n} from \"../../animation\";\nimport { FeatureDropContext } from \"../context\";\n\nexport interface AnnouncementSlide {\n id?: string;\n title: string;\n description?: string;\n image?: string;\n videoUrl?: string;\n primaryCta?: FeatureCTA;\n secondaryCta?: FeatureCTA;\n}\n\nexport interface AnnouncementModalRenderProps {\n isOpen: boolean;\n currentSlide: AnnouncementSlide | null;\n currentSlideIndex: number;\n totalSlides: number;\n open: () => void;\n close: () => void;\n nextSlide: () => void;\n prevSlide: () => void;\n dismiss: () => void;\n}\n\nexport interface AnnouncementModalProps {\n id?: string;\n featureId?: string;\n feature?: FeatureEntry;\n trigger?: \"auto\" | \"manual\";\n defaultOpen?: boolean;\n slides?: AnnouncementSlide[];\n frequency?: \"once\" | \"every-session\" | \"always\";\n dismissible?: boolean;\n mobileBreakpoint?: number;\n onOpen?: () => void;\n onDismiss?: () => void;\n onPrimaryCtaClick?: (slide: AnnouncementSlide, index: number) => void;\n onSecondaryCtaClick?: (slide: AnnouncementSlide, index: number) => void;\n className?: string;\n style?: CSSProperties;\n children?: (props: AnnouncementModalRenderProps) => ReactNode;\n}\n\nconst sessionDismissed = new Set<string>();\n\nconst overlayStyles: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n background: \"rgba(17, 24, 39, 0.62)\",\n zIndex: \"var(--featuredrop-modal-overlay-z-index, 10020)\" as unknown as number,\n};\n\nconst desktopModalStyles: CSSProperties = {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"min(92vw, 680px)\",\n maxHeight: \"85vh\",\n overflowY: \"auto\",\n borderRadius: \"16px\",\n border: \"1px solid #e5e7eb\",\n background: \"#fff\",\n boxShadow: \"0 24px 80px rgba(0,0,0,0.24)\",\n zIndex: \"var(--featuredrop-modal-z-index, 10021)\" as unknown as number,\n};\n\nconst mobileModalStyles: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n borderRadius: 0,\n width: \"100vw\",\n height: \"100vh\",\n maxHeight: \"100vh\",\n overflowY: \"auto\",\n border: \"none\",\n background: \"#fff\",\n zIndex: \"var(--featuredrop-modal-z-index, 10021)\" as unknown as number,\n};\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n const nodes = container.querySelectorAll<HTMLElement>(\n [\n \"a[href]\",\n \"button:not([disabled])\",\n \"textarea:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n ].join(\",\"),\n );\n\n return Array.from(nodes).filter(\n (node) => !node.hasAttribute(\"disabled\") && node.getAttribute(\"aria-hidden\") !== \"true\",\n );\n}\n\nfunction onceStorageKey(id: string): string {\n return `featuredrop:announcement:${id}:dismissed`;\n}\n\nfunction isDismissedOnce(id: string): boolean {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (key: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return false;\n try {\n return storage.getItem(onceStorageKey(id)) === \"1\";\n } catch {\n return false;\n }\n}\n\nfunction setDismissedOnce(id: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (key: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(onceStorageKey(id), \"1\");\n } catch {\n // noop\n }\n}\n\nfunction toEmbedUrl(videoUrl?: string): string | null {\n if (!videoUrl) return null;\n const trimmed = videoUrl.trim();\n const youtubeMatch =\n trimmed.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([\\w-]{6,})/) ??\n trimmed.match(/youtube\\.com\\/embed\\/([\\w-]{6,})/);\n if (youtubeMatch?.[1]) {\n return `https://www.youtube.com/embed/${youtubeMatch[1]}`;\n }\n const vimeoMatch =\n trimmed.match(/vimeo\\.com\\/(\\d{6,})/) ??\n trimmed.match(/player\\.vimeo\\.com\\/video\\/(\\d{6,})/);\n if (vimeoMatch?.[1]) {\n return `https://player.vimeo.com/video/${vimeoMatch[1]}`;\n }\n return null;\n}\n\nfunction toFeatureSlide(feature?: FeatureEntry): AnnouncementSlide[] {\n if (!feature) return [];\n return [\n {\n id: feature.id,\n title: feature.label,\n description: feature.description,\n image: feature.image,\n primaryCta: feature.cta,\n },\n ];\n}\n\nexport function AnnouncementModal({\n id,\n featureId,\n feature,\n trigger = \"manual\",\n defaultOpen = false,\n slides,\n frequency = \"once\",\n dismissible = true,\n mobileBreakpoint = 768,\n onOpen,\n onDismiss,\n onPrimaryCtaClick,\n onSecondaryCtaClick,\n className,\n style,\n children,\n}: AnnouncementModalProps) {\n const context = useContext(FeatureDropContext);\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [isClosing, setIsClosing] = useState(false);\n const [slideIndex, setSlideIndex] = useState(0);\n const [blockedByFrequency, setBlockedByFrequency] = useState(false);\n const [isMobile, setIsMobile] = useState(\n typeof window !== \"undefined\" ? window.innerWidth <= mobileBreakpoint : false,\n );\n const modalRef = useRef<HTMLElement>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const instanceIdRef = useRef(`featuredrop-announcement-${Math.random().toString(36).slice(2, 10)}`);\n\n const resolvedFeature = useMemo(() => {\n if (feature) return feature;\n if (!featureId) return undefined;\n return (\n context?.newFeatures.find((item) => item.id === featureId) ??\n context?.manifest.find((item) => item.id === featureId)\n );\n }, [context?.manifest, context?.newFeatures, feature, featureId]);\n\n const modalId = id ?? resolvedFeature?.id ?? featureId ?? \"announcement-modal\";\n const titleId = `${instanceIdRef.current}-title`;\n const descriptionId = `${instanceIdRef.current}-description`;\n const resolvedSlides = useMemo(\n () => (slides && slides.length > 0 ? slides : toFeatureSlide(resolvedFeature)),\n [resolvedFeature, slides],\n );\n\n const currentSlide = resolvedSlides[slideIndex] ?? null;\n const t = context?.translations;\n const enterAnimation = getEnterAnimation(context?.animation ?? \"normal\", \"modal\");\n const exitAnimation = getExitAnimation(context?.animation ?? \"normal\", \"modal\");\n\n const open = useCallback(() => {\n if (blockedByFrequency || resolvedSlides.length === 0) return;\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n setIsClosing(false);\n if (typeof document !== \"undefined\" && document.activeElement instanceof HTMLElement) {\n lastFocusedElementRef.current = document.activeElement;\n }\n const priority = resolvedFeature?.priority;\n if (context && !context.canShowModal(priority)) return;\n setSlideIndex((current) =>\n current >= resolvedSlides.length ? resolvedSlides.length - 1 : current,\n );\n setIsOpen(true);\n context?.markModalShown();\n context?.trackAdoptionEvent({\n type: \"announcement_shown\",\n featureId: resolvedFeature?.id,\n metadata: { modalId },\n });\n onOpen?.();\n }, [blockedByFrequency, context, modalId, onOpen, resolvedFeature?.id, resolvedFeature?.priority, resolvedSlides.length]);\n\n useEffect(() => {\n if (!defaultOpen) return;\n open();\n }, [defaultOpen, open]);\n\n const close = useCallback(() => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n setIsOpen(false);\n const animationPreset = context?.animation ?? \"normal\";\n const exitDuration = getAnimationDurationMs(animationPreset, \"modal\", \"exit\");\n if (exitDuration > 0) {\n setIsClosing(true);\n closeTimerRef.current = setTimeout(() => {\n setIsClosing(false);\n closeTimerRef.current = null;\n }, exitDuration);\n } else {\n setIsClosing(false);\n }\n const returnTarget = lastFocusedElementRef.current;\n if (returnTarget) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => returnTarget.focus());\n } else {\n returnTarget.focus();\n }\n }\n }, [context?.animation]);\n\n const dismiss = useCallback(() => {\n setBlockedByFrequency(true);\n close();\n if (frequency === \"once\") {\n setDismissedOnce(modalId);\n } else if (frequency === \"every-session\") {\n sessionDismissed.add(modalId);\n }\n onDismiss?.();\n }, [close, frequency, modalId, onDismiss]);\n\n const nextSlide = useCallback(() => {\n setSlideIndex((current) => {\n if (current >= resolvedSlides.length - 1) {\n dismiss();\n return current;\n }\n return current + 1;\n });\n }, [dismiss, resolvedSlides.length]);\n\n const prevSlide = useCallback(() => {\n setSlideIndex((current) => (current <= 0 ? 0 : current - 1));\n }, []);\n\n useEffect(() => {\n if (frequency === \"once\") {\n setBlockedByFrequency(isDismissedOnce(modalId));\n return;\n }\n if (frequency === \"every-session\") {\n setBlockedByFrequency(sessionDismissed.has(modalId));\n return;\n }\n setBlockedByFrequency(false);\n }, [frequency, modalId]);\n\n useEffect(() => {\n if (trigger !== \"auto\") return;\n if (blockedByFrequency || isOpen || isClosing || resolvedSlides.length === 0) return;\n if (frequency === \"once\" && isDismissedOnce(modalId)) return;\n if (frequency === \"every-session\" && sessionDismissed.has(modalId)) return;\n if (resolvedFeature && resolvedFeature.priority !== \"critical\") return;\n open();\n }, [\n frequency,\n blockedByFrequency,\n isClosing,\n isOpen,\n modalId,\n open,\n resolvedFeature,\n resolvedSlides.length,\n trigger,\n ]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const updateViewportMode = () => {\n setIsMobile(window.innerWidth <= mobileBreakpoint);\n };\n updateViewportMode();\n window.addEventListener(\"resize\", updateViewportMode);\n return () => {\n window.removeEventListener(\"resize\", updateViewportMode);\n };\n }, [mobileBreakpoint]);\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n return () => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n };\n }, []);\n\n useEffect(() => {\n if (!isOpen) return;\n const modalEl = modalRef.current;\n if (!modalEl) return;\n\n const focusable = getFocusableElements(modalEl);\n const first = focusable[0] ?? modalEl;\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => first.focus());\n } else {\n first.focus();\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Tab\") {\n const items = getFocusableElements(modalEl);\n if (items.length === 0) {\n event.preventDefault();\n modalEl.focus();\n return;\n }\n\n const firstItem = items[0];\n const lastItem = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (event.shiftKey) {\n if (active === firstItem || active === modalEl) {\n event.preventDefault();\n lastItem.focus();\n }\n return;\n }\n if (active === lastItem) {\n event.preventDefault();\n firstItem.focus();\n }\n return;\n }\n\n if (event.key === \"Escape\" && dismissible) {\n event.preventDefault();\n dismiss();\n return;\n }\n\n if (event.key === \"ArrowRight\" && resolvedSlides.length > 1) {\n event.preventDefault();\n nextSlide();\n } else if (event.key === \"ArrowLeft\" && resolvedSlides.length > 1) {\n event.preventDefault();\n prevSlide();\n }\n };\n\n modalEl.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n modalEl.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [dismiss, dismissible, isOpen, nextSlide, prevSlide, resolvedSlides.length]);\n\n const renderProps: AnnouncementModalRenderProps = {\n isOpen,\n currentSlide,\n currentSlideIndex: slideIndex,\n totalSlides: resolvedSlides.length,\n open,\n close,\n nextSlide,\n prevSlide,\n dismiss,\n };\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n if (!(isOpen || isClosing) || !currentSlide) return null;\n\n const embeddedVideo = toEmbedUrl(currentSlide.videoUrl);\n const descriptionHtml = currentSlide.description\n ? parseDescription(currentSlide.description)\n : null;\n const totalSlides = resolvedSlides.length;\n const primaryCta = currentSlide.primaryCta;\n const secondaryCta = currentSlide.secondaryCta;\n\n return (\n <>\n <div\n data-featuredrop-announcement-overlay\n style={overlayStyles}\n onClick={dismissible ? dismiss : undefined}\n aria-hidden=\"true\"\n />\n <section\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={currentSlide.description ? descriptionId : undefined}\n data-featuredrop-announcement-modal={modalId}\n className={className}\n dir={context?.direction}\n tabIndex={-1}\n style={{\n ...(isMobile ? mobileModalStyles : desktopModalStyles),\n animation: isClosing ? exitAnimation : enterAnimation,\n ...style,\n }}\n >\n <div style={{ padding: isMobile ? \"16px\" : \"20px\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", gap: \"8px\" }}>\n <p style={{ margin: 0, fontSize: \"12px\", color: \"#6b7280\", letterSpacing: 0.2 }}>\n {t?.announcement ?? \"Announcement\"}\n </p>\n {dismissible && (\n <button\n type=\"button\"\n aria-label={t?.close ?? \"Close\"}\n onClick={dismiss}\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"#6b7280\",\n fontSize: \"18px\",\n cursor: \"pointer\",\n lineHeight: 1,\n }}\n >\n x\n </button>\n )}\n </div>\n\n {(currentSlide.image || embeddedVideo) && (\n <div style={{ marginTop: \"12px\", borderRadius: \"12px\", overflow: \"hidden\", border: \"1px solid #e5e7eb\" }}>\n {embeddedVideo ? (\n <iframe\n title={currentSlide.title}\n src={embeddedVideo}\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n style={{ width: \"100%\", height: isMobile ? \"220px\" : \"320px\", border: 0 }}\n />\n ) : (\n <img\n src={currentSlide.image}\n alt={currentSlide.title}\n style={{ width: \"100%\", display: \"block\", objectFit: \"cover\" }}\n />\n )}\n </div>\n )}\n\n <h2\n id={titleId}\n style={{ margin: \"14px 0 8px\", fontSize: isMobile ? \"22px\" : \"24px\", lineHeight: 1.2 }}\n >\n {currentSlide.title}\n </h2>\n {descriptionHtml && (\n <div\n id={descriptionId}\n style={{ fontSize: \"14px\", color: \"#4b5563\", lineHeight: 1.6 }}\n dangerouslySetInnerHTML={{ __html: descriptionHtml }}\n />\n )}\n\n <div style={{ display: \"flex\", gap: \"8px\", flexWrap: \"wrap\", marginTop: \"14px\" }}>\n {primaryCta && (\n <a\n href={primaryCta.url}\n onClick={() => {\n context?.trackAdoptionEvent({\n type: \"cta_clicked\",\n featureId: resolvedFeature?.id,\n metadata: { modalId, slideIndex, cta: \"primary\" },\n });\n onPrimaryCtaClick?.(currentSlide, slideIndex);\n }}\n style={{\n textDecoration: \"none\",\n border: \"none\",\n borderRadius: \"10px\",\n padding: \"9px 12px\",\n background: \"#111827\",\n color: \"#fff\",\n fontWeight: 600,\n }}\n >\n {primaryCta.label}\n </a>\n )}\n {secondaryCta && (\n <a\n href={secondaryCta.url}\n onClick={() => {\n context?.trackAdoptionEvent({\n type: \"cta_clicked\",\n featureId: resolvedFeature?.id,\n metadata: { modalId, slideIndex, cta: \"secondary\" },\n });\n onSecondaryCtaClick?.(currentSlide, slideIndex);\n }}\n style={{\n textDecoration: \"none\",\n border: \"1px solid #d1d5db\",\n borderRadius: \"10px\",\n padding: \"9px 12px\",\n background: \"#fff\",\n color: \"#111827\",\n fontWeight: 600,\n }}\n >\n {secondaryCta.label}\n </a>\n )}\n </div>\n\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", gap: \"8px\", marginTop: \"16px\" }}>\n {totalSlides > 1 ? (\n <div style={{ display: \"flex\", gap: \"6px\" }}>\n {resolvedSlides.map((slide, index) => (\n <span\n key={slide.id ?? `${slide.title}-${index}`}\n aria-hidden=\"true\"\n style={{\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"999px\",\n background: index === slideIndex ? \"#111827\" : \"#d1d5db\",\n }}\n />\n ))}\n </div>\n ) : <span />}\n <div style={{ display: \"flex\", gap: \"8px\" }}>\n {totalSlides > 1 && (\n <button\n type=\"button\"\n onClick={prevSlide}\n disabled={slideIndex <= 0}\n style={{\n border: \"1px solid #d1d5db\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: slideIndex <= 0 ? \"not-allowed\" : \"pointer\",\n opacity: slideIndex <= 0 ? 0.5 : 1,\n }}\n >\n {t?.back ?? \"Back\"}\n </button>\n )}\n <button\n type=\"button\"\n onClick={nextSlide}\n style={{\n border: \"none\",\n background: \"#111827\",\n color: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {slideIndex >= totalSlides - 1 ? (t?.gotIt ?? \"Got it\") : (t?.next ?? \"Next\")}\n </button>\n </div>\n </div>\n </div>\n </section>\n </>\n );\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n ensureFeatureDropAnimationStyles,\n getEnterAnimation,\n getPulseAnimation,\n prefersReducedMotion,\n resolveAnimationPreset,\n} from \"../../animation\";\nimport { FeatureDropContext } from \"../context\";\n\nexport interface SpotlightChainStep {\n id?: string;\n target: string;\n title?: string;\n content: ReactNode;\n autoAdvanceMs?: number;\n}\n\nexport interface SpotlightChainRenderProps {\n isActive: boolean;\n currentStep: SpotlightChainStep | null;\n currentStepIndex: number;\n totalSteps: number;\n start: () => void;\n next: () => void;\n skip: () => void;\n}\n\nexport interface SpotlightChainProps {\n steps: SpotlightChainStep[];\n startOnMount?: boolean;\n autoAdvance?: boolean;\n autoAdvanceMs?: number;\n onComplete?: () => void;\n onStepViewed?: (step: SpotlightChainStep, index: number) => void;\n onSkip?: (step: SpotlightChainStep | null, index: number) => void;\n children?: (props: SpotlightChainRenderProps) => ReactNode;\n}\n\nconst beaconStyles: CSSProperties = {\n position: \"fixed\",\n width: \"14px\",\n height: \"14px\",\n borderRadius: \"999px\",\n border: \"2px solid #fff\",\n background: \"#f59e0b\",\n boxShadow: \"0 0 0 2px rgba(17,24,39,0.12)\",\n zIndex: \"var(--featuredrop-spotlight-chain-beacon-z-index, 10010)\" as unknown as number,\n};\n\nconst tooltipStyles: CSSProperties = {\n position: \"fixed\",\n zIndex: \"var(--featuredrop-spotlight-chain-z-index, 10011)\" as unknown as number,\n border: \"1px solid #e5e7eb\",\n borderRadius: \"10px\",\n background: \"#fff\",\n padding: \"12px\",\n boxShadow: \"0 10px 30px rgba(0,0,0,0.16)\",\n width: \"min(90vw, 320px)\",\n};\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n const nodes = container.querySelectorAll<HTMLElement>(\n [\n \"a[href]\",\n \"button:not([disabled])\",\n \"textarea:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n ].join(\",\"),\n );\n return Array.from(nodes).filter(\n (node) => !node.hasAttribute(\"disabled\") && node.getAttribute(\"aria-hidden\") !== \"true\",\n );\n}\n\nfunction resolveTarget(selector: string): HTMLElement | null {\n return document.querySelector(selector);\n}\n\nexport function SpotlightChain({\n steps,\n startOnMount = true,\n autoAdvance = false,\n autoAdvanceMs = 2500,\n onComplete,\n onStepViewed,\n onSkip,\n children,\n}: SpotlightChainProps) {\n const featureDrop = useContext(FeatureDropContext);\n const [isActive, setIsActive] = useState(false);\n const [stepIndex, setStepIndex] = useState(-1);\n const [rect, setRect] = useState<DOMRect | null>(null);\n const autoTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const dialogRef = useRef<HTMLDivElement>(null);\n const animation = useMemo(\n () =>\n resolveAnimationPreset(featureDrop?.animation ?? \"normal\", {\n reducedMotion: prefersReducedMotion(),\n }),\n [featureDrop?.animation],\n );\n const beaconPulseAnimation = useMemo(\n () => getPulseAnimation(animation, \"beacon\"),\n [animation],\n );\n const tooltipEnterAnimation = useMemo(\n () => getEnterAnimation(animation, \"popover\"),\n [animation],\n );\n const instanceIdRef = useRef(`featuredrop-spotlight-chain-${Math.random().toString(36).slice(2, 10)}`);\n\n const step = stepIndex >= 0 ? steps[stepIndex] ?? null : null;\n\n const findValidStep = useCallback((start: number): number | null => {\n for (let i = start; i < steps.length; i += 1) {\n if (resolveTarget(steps[i].target)) return i;\n // eslint-disable-next-line no-console\n console.warn(`[featuredrop] SpotlightChain step \"${steps[i].id ?? i}\" target not found, skipping.`);\n }\n return null;\n }, [steps]);\n\n const openStep = useCallback((index: number) => {\n const current = steps[index];\n if (!current) return;\n const target = resolveTarget(current.target);\n if (!target) return;\n const scrollable = target as HTMLElement & {\n scrollIntoView?: (options?: ScrollIntoViewOptions) => void;\n };\n if (typeof scrollable.scrollIntoView === \"function\") {\n scrollable.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }\n setStepIndex(index);\n setIsActive(true);\n setRect(target.getBoundingClientRect());\n onStepViewed?.(current, index);\n }, [onStepViewed, steps]);\n\n const finish = useCallback(() => {\n setIsActive(false);\n setStepIndex(-1);\n setRect(null);\n onComplete?.();\n }, [onComplete]);\n\n const start = useCallback(() => {\n const first = findValidStep(0);\n if (first === null) return;\n openStep(first);\n }, [findValidStep, openStep]);\n\n const next = useCallback(() => {\n const nextIndex = findValidStep(stepIndex + 1);\n if (nextIndex === null) {\n finish();\n return;\n }\n openStep(nextIndex);\n }, [findValidStep, finish, openStep, stepIndex]);\n\n const skip = useCallback(() => {\n onSkip?.(step, stepIndex);\n setIsActive(false);\n setStepIndex(-1);\n setRect(null);\n }, [onSkip, step, stepIndex]);\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n useEffect(() => {\n if (!startOnMount) return;\n start();\n }, [start, startOnMount]);\n\n useEffect(() => {\n if (!isActive || !step) return;\n const update = () => {\n const target = resolveTarget(step.target);\n if (!target) return;\n setRect(target.getBoundingClientRect());\n };\n update();\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n return () => {\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n };\n }, [isActive, step]);\n\n useEffect(() => {\n if (!isActive || !step || !autoAdvance) return;\n const waitMs = step.autoAdvanceMs ?? autoAdvanceMs;\n autoTimerRef.current = setTimeout(() => {\n next();\n }, waitMs);\n return () => {\n if (autoTimerRef.current) {\n clearTimeout(autoTimerRef.current);\n autoTimerRef.current = null;\n }\n };\n }, [autoAdvance, autoAdvanceMs, isActive, next, step]);\n\n useEffect(() => {\n if (!isActive) return;\n const dialog = dialogRef.current;\n if (!dialog) return;\n const focusable = getFocusableElements(dialog);\n const first = focusable[0] ?? dialog;\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => first.focus());\n } else {\n first.focus();\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n skip();\n return;\n }\n\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n next();\n return;\n }\n\n if (event.key !== \"Tab\") return;\n const items = getFocusableElements(dialog);\n if (items.length === 0) {\n event.preventDefault();\n dialog.focus();\n return;\n }\n const firstItem = items[0];\n const lastItem = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (event.shiftKey) {\n if (active === firstItem || active === dialog) {\n event.preventDefault();\n lastItem.focus();\n }\n return;\n }\n if (active === lastItem) {\n event.preventDefault();\n firstItem.focus();\n }\n };\n\n window.addEventListener(\"keydown\", onKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isActive, next, skip, stepIndex]);\n\n const renderProps: SpotlightChainRenderProps = useMemo(() => ({\n isActive,\n currentStep: step,\n currentStepIndex: stepIndex,\n totalSteps: steps.length,\n start,\n next,\n skip,\n }), [isActive, next, skip, start, step, stepIndex, steps.length]);\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n if (!isActive || !step || !rect) return null;\n\n const tooltipTop = Math.min(window.innerHeight - 150, rect.bottom + 12);\n const tooltipLeft = Math.min(window.innerWidth - 340, Math.max(10, rect.left));\n const titleId = `${instanceIdRef.current}-title`;\n const contentId = `${instanceIdRef.current}-content`;\n\n return (\n <>\n <div\n data-featuredrop-spotlight-chain-beacon={step.id ?? stepIndex}\n style={{\n ...beaconStyles,\n animation: beaconPulseAnimation ?? \"none\",\n top: rect.top - 7,\n left: rect.right - 7,\n }}\n />\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={step.title ? titleId : undefined}\n aria-describedby={contentId}\n data-featuredrop-spotlight-chain={step.id ?? stepIndex}\n tabIndex={-1}\n style={{\n ...tooltipStyles,\n top: tooltipTop,\n left: tooltipLeft,\n animation: tooltipEnterAnimation,\n }}\n >\n {step.title && (\n <p id={titleId} style={{ margin: \"0 0 6px\", fontWeight: 700, fontSize: \"15px\" }}>\n {step.title}\n </p>\n )}\n <div id={contentId} style={{ margin: \"0 0 10px\", fontSize: \"14px\", color: \"#4b5563\" }}>\n {step.content}\n </div>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", gap: \"8px\" }}>\n <button\n type=\"button\"\n onClick={skip}\n style={{\n border: \"1px solid #e5e7eb\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {featureDrop?.translations.skip ?? \"Skip\"}\n </button>\n <button\n type=\"button\"\n onClick={next}\n style={{\n border: \"none\",\n background: \"#111827\",\n color: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {stepIndex >= steps.length - 1\n ? (featureDrop?.translations.gotIt ?? \"Got it\")\n : (featureDrop?.translations.next ?? \"Next\")}\n </button>\n </div>\n </div>\n </>\n );\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { ensureFeatureDropAnimationStyles, getEnterAnimation } from \"../../animation\";\nimport { FeatureDropContext } from \"../context\";\nimport {\n registerSurveyController,\n type SurveyController,\n type SurveySnapshot,\n} from \"../survey-registry\";\n\nexport type SurveyType = \"nps\" | \"csat\" | \"ces\" | \"custom\";\nexport type SurveyQuestionType = \"single-choice\" | \"multi-choice\" | \"text\";\n\nexport interface SurveyQuestion {\n id: string;\n type: SurveyQuestionType;\n prompt: string;\n options?: string[];\n required?: boolean;\n}\n\nexport interface SurveyTriggerRules {\n signupAt?: string | Date;\n minDaysSinceSignup?: number;\n featureUsageIds?: string[];\n pageMatch?: string | RegExp | ((path: string) => boolean);\n sampleRate?: number;\n maxFrequencyDays?: number;\n askLaterCooldownDays?: number;\n}\n\nexport interface SurveyPayload {\n id: string;\n type: SurveyType;\n prompt?: string;\n score?: number;\n responses?: Record<string, unknown>;\n feedback?: string;\n timestamp: string;\n url: string;\n featureId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SurveyRenderProps {\n isOpen: boolean;\n isSubmitting: boolean;\n submitted: boolean;\n canShow: boolean;\n error: string | null;\n type: SurveyType;\n score: number | null;\n feedback: string;\n responses: Record<string, unknown>;\n show: (options?: { force?: boolean }) => boolean;\n hide: () => void;\n askLater: () => void;\n setScore: (value: number | null) => void;\n setFeedback: (value: string) => void;\n setResponse: (questionId: string, value: unknown) => void;\n submit: () => Promise<boolean>;\n}\n\nexport interface SurveyProps {\n id: string;\n type: SurveyType;\n prompt?: string;\n featureId?: string;\n questions?: SurveyQuestion[];\n trigger?: \"auto\" | \"manual\";\n triggerRules?: SurveyTriggerRules;\n defaultOpen?: boolean;\n showAskLater?: boolean;\n submitLabel?: string;\n askLaterLabel?: string;\n closeLabel?: string;\n title?: string;\n metadata?: Record<string, unknown>;\n onSubmit: (payload: SurveyPayload) => Promise<void> | void;\n onAskLater?: () => void;\n onDismiss?: () => void;\n className?: string;\n style?: CSSProperties;\n children?: (props: SurveyRenderProps) => ReactNode;\n}\n\nconst panelStyles: CSSProperties = {\n width: \"min(92vw, 420px)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"14px\",\n background: \"#fff\",\n boxShadow: \"0 16px 48px rgba(0,0,0,0.16)\",\n padding: \"14px\",\n};\n\nconst questionBlockStyles: CSSProperties = {\n marginTop: \"10px\",\n padding: \"10px\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"10px\",\n};\n\nconst SEEN_FEATURES_STORAGE_KEY = \"featuredrop:seen-features\";\nconst CLICKED_FEATURES_STORAGE_KEY = \"featuredrop:clicked-features\";\nconst DEFAULT_MAX_FREQUENCY_DAYS = 30;\nconst DEFAULT_ASK_LATER_DAYS = 7;\n\nfunction submittedStorageKey(id: string): string {\n return `featuredrop:survey:${id}:submitted-at`;\n}\n\nfunction cooldownStorageKey(id: string): string {\n return `featuredrop:survey:${id}:cooldown-until`;\n}\n\nfunction sampleBucketStorageKey(id: string): string {\n return `featuredrop:survey:${id}:sample-bucket`;\n}\n\nfunction readStorageValue(key: string): string | null {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (storageKey: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return null;\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeStorageValue(key: string, value: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (storageKey: string, storageValue: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(key, value);\n } catch {\n // noop\n }\n}\n\nfunction clearStorageValue(key: string): void {\n const storage = globalThis.localStorage as unknown as {\n removeItem?: (storageKey: string) => void;\n };\n if (!storage || typeof storage.removeItem !== \"function\") return;\n try {\n storage.removeItem(key);\n } catch {\n // noop\n }\n}\n\nfunction parseIsoTime(value: string | null): number | null {\n if (!value) return null;\n const parsed = new Date(value).getTime();\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction readFeatureUsageIds(): Set<string> {\n const seenRaw = readStorageValue(SEEN_FEATURES_STORAGE_KEY);\n const clickedRaw = readStorageValue(CLICKED_FEATURES_STORAGE_KEY);\n const ids = new Set<string>();\n\n const append = (raw: string | null): void => {\n if (!raw) return;\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) return;\n for (const item of parsed) {\n if (typeof item === \"string\") ids.add(item);\n }\n } catch {\n // ignore malformed values\n }\n };\n\n append(seenRaw);\n append(clickedRaw);\n return ids;\n}\n\nfunction matchesPage(pageMatch: SurveyTriggerRules[\"pageMatch\"]): boolean {\n if (!pageMatch) return true;\n if (typeof window === \"undefined\") return false;\n const path = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n if (typeof pageMatch === \"string\") return path.includes(pageMatch);\n if (pageMatch instanceof RegExp) return pageMatch.test(path);\n try {\n return pageMatch(path);\n } catch {\n return false;\n }\n}\n\nfunction resolveScale(type: SurveyType): { min: number; max: number } | null {\n if (type === \"nps\") return { min: 0, max: 10 };\n if (type === \"csat\") return { min: 1, max: 5 };\n if (type === \"ces\") return { min: 1, max: 7 };\n return null;\n}\n\nfunction defaultTitle(type: SurveyType): string {\n if (type === \"nps\") return \"NPS Survey\";\n if (type === \"csat\") return \"CSAT Survey\";\n if (type === \"ces\") return \"CES Survey\";\n return \"Survey\";\n}\n\nfunction normalizeSignupAt(signupAt?: string | Date): number | null {\n if (!signupAt) return null;\n if (signupAt instanceof Date) return signupAt.getTime();\n return parseIsoTime(signupAt);\n}\n\nfunction daysToMs(days: number): number {\n return days * 24 * 60 * 60 * 1000;\n}\n\nfunction hasRequiredResponses(\n questions: SurveyQuestion[],\n responses: Record<string, unknown>,\n): boolean {\n for (const question of questions) {\n if (!question.required) continue;\n const value = responses[question.id];\n if (question.type === \"multi-choice\") {\n if (!Array.isArray(value) || value.length === 0) return false;\n continue;\n }\n if (typeof value === \"string\") {\n if (!value.trim()) return false;\n continue;\n }\n if (value === undefined || value === null) return false;\n }\n return true;\n}\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n const nodes = container.querySelectorAll<HTMLElement>(\n [\n \"a[href]\",\n \"button:not([disabled])\",\n \"textarea:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n ].join(\",\"),\n );\n return Array.from(nodes).filter(\n (node) => !node.hasAttribute(\"disabled\") && node.getAttribute(\"aria-hidden\") !== \"true\",\n );\n}\n\nexport function Survey({\n id,\n type,\n prompt,\n featureId,\n questions = [],\n trigger = \"auto\",\n triggerRules,\n defaultOpen = false,\n showAskLater = true,\n submitLabel,\n askLaterLabel,\n closeLabel,\n title,\n metadata,\n onSubmit,\n onAskLater,\n onDismiss,\n className,\n style,\n children,\n}: SurveyProps) {\n const context = useContext(FeatureDropContext);\n const listenersRef = useRef(new Set<() => void>());\n const panelRef = useRef<HTMLElement>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n const instanceIdRef = useRef(`featuredrop-survey-${Math.random().toString(36).slice(2, 10)}`);\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [submitted, setSubmitted] = useState(false);\n const [score, setScore] = useState<number | null>(null);\n const [feedback, setFeedback] = useState(\"\");\n const [responses, setResponses] = useState<Record<string, unknown>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [refreshVersion, setRefreshVersion] = useState(0);\n\n const maxFrequencyDays = triggerRules?.maxFrequencyDays ?? DEFAULT_MAX_FREQUENCY_DAYS;\n const askLaterCooldownDays = triggerRules?.askLaterCooldownDays ?? DEFAULT_ASK_LATER_DAYS;\n const scale = useMemo(() => resolveScale(type), [type]);\n const translations = context?.translations;\n const direction = context?.direction ?? \"ltr\";\n const panelAnimation = useMemo(\n () => getEnterAnimation(context?.animation ?? \"normal\", \"modal\"),\n [context?.animation],\n );\n\n const canShow = useMemo(() => {\n const now = Date.now();\n const cooldownUntil = parseIsoTime(readStorageValue(cooldownStorageKey(id)));\n if (cooldownUntil && now < cooldownUntil) return false;\n\n const submittedAt = parseIsoTime(readStorageValue(submittedStorageKey(id)));\n if (submittedAt && maxFrequencyDays > 0) {\n const cutoff = submittedAt + daysToMs(maxFrequencyDays);\n if (now < cutoff) return false;\n }\n\n const sampleRate = triggerRules?.sampleRate;\n if (typeof sampleRate === \"number\") {\n if (sampleRate <= 0) return false;\n if (sampleRate < 1) {\n const bucketKey = sampleBucketStorageKey(id);\n const existing = Number(readStorageValue(bucketKey));\n const bucket = Number.isFinite(existing) ? existing : Math.random();\n if (!Number.isFinite(existing)) {\n writeStorageValue(bucketKey, String(bucket));\n }\n if (bucket >= sampleRate) return false;\n }\n }\n\n const minDaysSinceSignup = triggerRules?.minDaysSinceSignup;\n if (typeof minDaysSinceSignup === \"number\" && minDaysSinceSignup > 0) {\n const signupAt = normalizeSignupAt(triggerRules?.signupAt);\n if (!signupAt) return false;\n if (now - signupAt < daysToMs(minDaysSinceSignup)) return false;\n }\n\n const usageIds = triggerRules?.featureUsageIds ?? [];\n if (usageIds.length > 0) {\n const usage = readFeatureUsageIds();\n const hasUsage = usageIds.some((featureUsageId) => usage.has(featureUsageId));\n if (!hasUsage) return false;\n }\n\n if (!matchesPage(triggerRules?.pageMatch)) return false;\n return true;\n }, [\n id,\n maxFrequencyDays,\n triggerRules?.featureUsageIds,\n triggerRules?.minDaysSinceSignup,\n triggerRules?.pageMatch,\n triggerRules?.sampleRate,\n triggerRules?.signupAt,\n refreshVersion,\n ]);\n\n const emit = useCallback(() => {\n for (const listener of listenersRef.current) listener();\n }, []);\n\n useEffect(() => {\n emit();\n }, [canShow, emit, isOpen, submitted, type]);\n\n const hide = useCallback(() => {\n setIsOpen(false);\n onDismiss?.();\n const returnTarget = lastFocusedElementRef.current;\n if (returnTarget) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => returnTarget.focus());\n } else {\n returnTarget.focus();\n }\n }\n }, [onDismiss]);\n\n const show = useCallback((options?: { force?: boolean }): boolean => {\n if (!options?.force && !canShow) return false;\n if (typeof document !== \"undefined\" && document.activeElement instanceof HTMLElement) {\n lastFocusedElementRef.current = document.activeElement;\n }\n setIsOpen(true);\n setError(null);\n return true;\n }, [canShow]);\n\n const askLater = useCallback(() => {\n const until = new Date(Date.now() + daysToMs(askLaterCooldownDays)).toISOString();\n writeStorageValue(cooldownStorageKey(id), until);\n setIsOpen(false);\n setRefreshVersion((current) => current + 1);\n onAskLater?.();\n }, [askLaterCooldownDays, id, onAskLater]);\n\n useEffect(() => {\n if (trigger !== \"auto\") return;\n if (defaultOpen) return;\n show();\n }, [defaultOpen, show, trigger]);\n\n useEffect(() => {\n if (!defaultOpen) return;\n show({ force: true });\n }, [defaultOpen, show]);\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n useEffect(() => {\n if (!isOpen) return;\n const panel = panelRef.current;\n if (!panel) return;\n\n const focusable = getFocusableElements(panel);\n const first = focusable[0] ?? panel;\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => first.focus());\n } else {\n first.focus();\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Tab\") {\n const items = getFocusableElements(panel);\n if (items.length === 0) {\n event.preventDefault();\n panel.focus();\n return;\n }\n const firstItem = items[0];\n const lastItem = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (event.shiftKey) {\n if (active === firstItem || active === panel) {\n event.preventDefault();\n lastItem.focus();\n }\n return;\n }\n if (active === lastItem) {\n event.preventDefault();\n firstItem.focus();\n }\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n hide();\n }\n };\n\n panel.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n panel.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [hide, isOpen]);\n\n const setResponse = useCallback((questionId: string, value: unknown) => {\n setResponses((previous) => ({\n ...previous,\n [questionId]: value,\n }));\n }, []);\n\n const submit = useCallback(async (): Promise<boolean> => {\n if (isSubmitting) return false;\n if (type === \"custom\") {\n if (!hasRequiredResponses(questions, responses)) {\n setError(\"Please answer all required questions.\");\n return false;\n }\n } else if (scale && score === null) {\n setError(\"Please select a score.\");\n return false;\n }\n\n setIsSubmitting(true);\n setError(null);\n const timestamp = new Date().toISOString();\n const payload: SurveyPayload = {\n id,\n type,\n prompt,\n score: scale ? score ?? undefined : undefined,\n responses: type === \"custom\" ? responses : undefined,\n feedback: feedback.trim() ? feedback.trim() : undefined,\n timestamp,\n url: typeof window === \"undefined\" ? \"\" : window.location.href,\n featureId,\n metadata,\n };\n\n try {\n await onSubmit(payload);\n writeStorageValue(submittedStorageKey(id), timestamp);\n clearStorageValue(cooldownStorageKey(id));\n context?.trackAdoptionEvent({\n type: \"survey_submitted\",\n featureId,\n metadata: {\n surveyId: id,\n surveyType: type,\n score: payload.score,\n questionCount: type === \"custom\" ? questions.length : 1,\n },\n });\n setSubmitted(true);\n setIsOpen(false);\n setFeedback(\"\");\n setResponses({});\n setScore(null);\n setRefreshVersion((current) => current + 1);\n return true;\n } catch {\n setError(\"Failed to submit survey. Please try again.\");\n return false;\n } finally {\n setIsSubmitting(false);\n }\n }, [\n context,\n featureId,\n feedback,\n id,\n isSubmitting,\n metadata,\n onSubmit,\n prompt,\n questions.length,\n responses,\n scale,\n score,\n type,\n ]);\n\n useEffect(() => {\n const controller: SurveyController = {\n show,\n hide,\n askLater,\n getSnapshot: (): SurveySnapshot => ({\n exists: true,\n isOpen,\n submitted,\n canShow,\n type,\n }),\n subscribe: (listener) => {\n listenersRef.current.add(listener);\n return () => {\n listenersRef.current.delete(listener);\n };\n },\n };\n return registerSurveyController(id, controller);\n }, [askLater, canShow, hide, id, isOpen, show, submitted, type]);\n\n const renderProps: SurveyRenderProps = {\n isOpen,\n isSubmitting,\n submitted,\n canShow,\n error,\n type,\n score,\n feedback,\n responses,\n show,\n hide,\n askLater,\n setScore,\n setFeedback,\n setResponse,\n submit,\n };\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n if (!isOpen) return null;\n\n const surveyTitle = title ?? defaultTitle(type);\n const resolvedCloseLabel = closeLabel ?? translations?.close ?? \"Close\";\n const resolvedAskLaterLabel = askLaterLabel ?? translations?.askLater ?? \"Ask me later\";\n const resolvedSubmitLabel = submitLabel ?? translations?.submit ?? \"Submit\";\n const surveyTitleId = `${instanceIdRef.current}-title`;\n const surveyDescriptionId = `${instanceIdRef.current}-description`;\n const scoreRange = scale\n ? Array.from({ length: scale.max - scale.min + 1 }, (_, index) => scale.min + index)\n : [];\n\n return (\n <section\n ref={panelRef}\n data-featuredrop-survey={id}\n className={className}\n style={{ ...panelStyles, animation: panelAnimation, ...style }}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={surveyTitleId}\n aria-describedby={prompt ? surveyDescriptionId : undefined}\n tabIndex={-1}\n dir={direction}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", gap: \"8px\" }}>\n <strong id={surveyTitleId}>{surveyTitle}</strong>\n <button\n type=\"button\"\n onClick={hide}\n style={{ border: \"none\", background: \"transparent\", cursor: \"pointer\" }}\n aria-label={resolvedCloseLabel}\n >\n x\n </button>\n </div>\n\n {prompt && <p id={surveyDescriptionId} style={{ margin: \"10px 0 0\" }}>{prompt}</p>}\n\n {scale && (\n <div style={{ display: \"flex\", gap: \"6px\", flexWrap: \"wrap\", marginTop: \"10px\" }}>\n {scoreRange.map((value) => (\n <button\n key={value}\n type=\"button\"\n onClick={() => setScore(value)}\n aria-pressed={score === value}\n style={{\n border: \"1px solid #d1d5db\",\n background: score === value ? \"#111827\" : \"#fff\",\n color: score === value ? \"#fff\" : \"#111827\",\n borderRadius: \"999px\",\n padding: \"4px 8px\",\n minWidth: \"34px\",\n cursor: \"pointer\",\n }}\n >\n {value}\n </button>\n ))}\n </div>\n )}\n\n {type === \"custom\" && (\n <div style={{ marginTop: \"8px\" }}>\n {questions.map((question) => {\n const value = responses[question.id];\n return (\n <div key={question.id} style={questionBlockStyles}>\n <p style={{ margin: 0, fontSize: \"13px\", fontWeight: 600 }}>\n {question.prompt}\n {question.required ? \" *\" : \"\"}\n </p>\n\n {question.type === \"text\" && (\n <textarea\n value={typeof value === \"string\" ? value : \"\"}\n onChange={(event) => setResponse(question.id, event.target.value)}\n rows={3}\n style={{\n width: \"100%\",\n marginTop: \"8px\",\n border: \"1px solid #d1d5db\",\n borderRadius: \"8px\",\n padding: \"8px\",\n resize: \"vertical\",\n }}\n />\n )}\n\n {question.type === \"single-choice\" && (\n <div style={{ display: \"flex\", gap: \"6px\", flexWrap: \"wrap\", marginTop: \"8px\" }}>\n {(question.options ?? []).map((option) => (\n <button\n key={option}\n type=\"button\"\n onClick={() => setResponse(question.id, option)}\n aria-pressed={value === option}\n style={{\n border: \"1px solid #d1d5db\",\n background: value === option ? \"#111827\" : \"#fff\",\n color: value === option ? \"#fff\" : \"#111827\",\n borderRadius: \"999px\",\n padding: \"4px 10px\",\n cursor: \"pointer\",\n }}\n >\n {option}\n </button>\n ))}\n </div>\n )}\n\n {question.type === \"multi-choice\" && (\n <div style={{ display: \"grid\", gap: \"6px\", marginTop: \"8px\" }}>\n {(question.options ?? []).map((option) => {\n const selected = Array.isArray(value) ? value.includes(option) : false;\n return (\n <label\n key={option}\n style={{ display: \"flex\", alignItems: \"center\", gap: \"6px\", fontSize: \"13px\" }}\n >\n <input\n type=\"checkbox\"\n checked={selected}\n onChange={(event) => {\n const current = Array.isArray(value) ? value.filter((item): item is string => typeof item === \"string\") : [];\n if (event.target.checked) {\n setResponse(question.id, [...current, option]);\n } else {\n setResponse(question.id, current.filter((item) => item !== option));\n }\n }}\n />\n {option}\n </label>\n );\n })}\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n <textarea\n value={feedback}\n onChange={(event) => setFeedback(event.target.value)}\n placeholder=\"Optional: tell us more\"\n rows={3}\n style={{\n width: \"100%\",\n marginTop: \"10px\",\n border: \"1px solid #d1d5db\",\n borderRadius: \"8px\",\n padding: \"8px\",\n resize: \"vertical\",\n }}\n />\n\n {error && (\n <p style={{ margin: \"8px 0 0\", fontSize: \"12px\", color: \"#b91c1c\" }}>\n {error}\n </p>\n )}\n\n <div style={{ display: \"flex\", justifyContent: \"space-between\", gap: \"8px\", marginTop: \"12px\" }}>\n {showAskLater ? (\n <button\n type=\"button\"\n onClick={askLater}\n style={{\n border: \"1px solid #d1d5db\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {resolvedAskLaterLabel}\n </button>\n ) : (\n <span />\n )}\n <button\n type=\"button\"\n onClick={() => void submit()}\n disabled={isSubmitting}\n style={{\n border: \"none\",\n background: \"#111827\",\n color: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n opacity: isSubmitting ? 0.5 : 1,\n }}\n >\n {isSubmitting ? \"Submitting...\" : resolvedSubmitLabel}\n </button>\n </div>\n </section>\n );\n}\n","export interface FeatureRequestRecord {\n id: string;\n featureId?: string;\n title: string;\n description?: string;\n category?: string;\n votes: number;\n createdAt: string;\n updatedAt: string;\n}\n\nexport type FeatureRequestSort = \"votes\" | \"recent\";\n\nconst REQUESTS_KEY = \"featuredrop:feature-requests:requests\";\nconst VOTED_KEYS = \"featuredrop:feature-requests:voted\";\n\nfunction readStorageValue(key: string): string | null {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (storageKey: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return null;\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeStorageValue(key: string, value: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (storageKey: string, storageValue: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(key, value);\n } catch {\n // noop\n }\n}\n\nfunction readRequests(): FeatureRequestRecord[] {\n const raw = readStorageValue(REQUESTS_KEY);\n if (!raw) return [];\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) return [];\n return parsed.filter((request): request is FeatureRequestRecord => (\n request &&\n typeof request === \"object\" &&\n typeof (request as FeatureRequestRecord).id === \"string\" &&\n typeof (request as FeatureRequestRecord).title === \"string\"\n ));\n } catch {\n return [];\n }\n}\n\nfunction writeRequests(requests: FeatureRequestRecord[]): void {\n writeStorageValue(REQUESTS_KEY, JSON.stringify(requests));\n}\n\nfunction readVotedKeys(): Set<string> {\n const raw = readStorageValue(VOTED_KEYS);\n if (!raw) return new Set<string>();\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) return new Set<string>();\n return new Set(parsed.filter((value): value is string => typeof value === \"string\"));\n } catch {\n return new Set<string>();\n }\n}\n\nfunction writeVotedKeys(keys: ReadonlySet<string>): void {\n writeStorageValue(VOTED_KEYS, JSON.stringify(Array.from(keys)));\n}\n\nfunction makeVoteKey(options: { requestId?: string; featureId?: string }): string | null {\n if (options.requestId) return `request:${options.requestId}`;\n if (options.featureId) return `feature:${options.featureId}`;\n return null;\n}\n\nfunction createId(): string {\n return `req_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;\n}\n\nexport function listFeatureRequests(sortBy: FeatureRequestSort = \"votes\"): FeatureRequestRecord[] {\n const requests = readRequests();\n const sorted = [...requests].sort((a, b) => {\n if (sortBy === \"recent\") {\n return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime();\n }\n if (b.votes !== a.votes) return b.votes - a.votes;\n return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime();\n });\n return sorted;\n}\n\nexport function hasUserVoted(options: { requestId?: string; featureId?: string }): boolean {\n const voteKey = makeVoteKey(options);\n if (!voteKey) return false;\n return readVotedKeys().has(voteKey);\n}\n\nexport function createFeatureRequest(input: {\n title: string;\n description?: string;\n category?: string;\n featureId?: string;\n autoVote?: boolean;\n}): FeatureRequestRecord {\n const now = new Date().toISOString();\n const request: FeatureRequestRecord = {\n id: createId(),\n featureId: input.featureId,\n title: input.title.trim(),\n description: input.description?.trim() || undefined,\n category: input.category || undefined,\n votes: input.autoVote ? 1 : 0,\n createdAt: now,\n updatedAt: now,\n };\n\n const requests = readRequests();\n requests.push(request);\n writeRequests(requests);\n\n if (input.autoVote) {\n const voted = readVotedKeys();\n voted.add(`request:${request.id}`);\n writeVotedKeys(voted);\n }\n\n return request;\n}\n\nexport function voteFeatureRequest(input: {\n requestId?: string;\n featureId?: string;\n defaultTitle?: string;\n}): { voted: boolean; request: FeatureRequestRecord } | null {\n const voteKey = makeVoteKey({ requestId: input.requestId, featureId: input.featureId });\n if (!voteKey) return null;\n\n const voted = readVotedKeys();\n const requests = readRequests();\n let request = input.requestId\n ? requests.find((item) => item.id === input.requestId)\n : requests.find((item) => item.featureId === input.featureId);\n\n if (!request) {\n const now = new Date().toISOString();\n request = {\n id: createId(),\n featureId: input.featureId,\n title: input.defaultTitle?.trim() || input.featureId || \"Feature request\",\n votes: 0,\n createdAt: now,\n updatedAt: now,\n };\n requests.push(request);\n }\n\n if (voted.has(voteKey)) {\n return { voted: false, request };\n }\n\n request.votes += 1;\n request.updatedAt = new Date().toISOString();\n writeRequests(requests);\n\n voted.add(voteKey);\n writeVotedKeys(voted);\n return { voted: true, request };\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n hasUserVoted,\n listFeatureRequests,\n voteFeatureRequest,\n type FeatureRequestRecord,\n} from \"../feature-request-store\";\n\nexport interface FeatureRequestButtonRenderProps {\n votes: number;\n hasVoted: boolean;\n vote: () => void;\n request: FeatureRequestRecord | null;\n}\n\nexport interface FeatureRequestButtonProps {\n featureId: string;\n requestId?: string;\n requestTitle?: string;\n label?: string;\n onVote?: (result: { voted: boolean; request: FeatureRequestRecord }) => void;\n className?: string;\n style?: CSSProperties;\n children?: (props: FeatureRequestButtonRenderProps) => ReactNode;\n}\n\nconst buttonStyles: CSSProperties = {\n border: \"1px solid #d1d5db\",\n background: \"#fff\",\n borderRadius: \"999px\",\n padding: \"6px 12px\",\n cursor: \"pointer\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n fontWeight: 600,\n};\n\nfunction getRequest(options: { requestId?: string; featureId: string }): FeatureRequestRecord | null {\n const requests = listFeatureRequests(\"votes\");\n if (options.requestId) {\n return requests.find((request) => request.id === options.requestId) ?? null;\n }\n return requests.find((request) => request.featureId === options.featureId) ?? null;\n}\n\nexport function FeatureRequestButton({\n featureId,\n requestId,\n requestTitle,\n label = \"Vote\",\n onVote,\n className,\n style,\n children,\n}: FeatureRequestButtonProps) {\n const [request, setRequest] = useState<FeatureRequestRecord | null>(() =>\n getRequest({ requestId, featureId }),\n );\n const [hasVotedState, setHasVotedState] = useState<boolean>(() =>\n hasUserVoted({ requestId, featureId }),\n );\n\n useEffect(() => {\n setRequest(getRequest({ requestId, featureId }));\n setHasVotedState(hasUserVoted({ requestId, featureId }));\n }, [featureId, requestId]);\n\n const votes = request?.votes ?? 0;\n\n const vote = useCallback(() => {\n const result = voteFeatureRequest({\n requestId,\n featureId,\n defaultTitle: requestTitle,\n });\n if (!result) return;\n setRequest(result.request);\n if (result.voted) setHasVotedState(true);\n onVote?.(result);\n }, [featureId, onVote, requestId, requestTitle]);\n\n const renderProps: FeatureRequestButtonRenderProps = useMemo(\n () => ({\n votes,\n hasVoted: hasVotedState,\n vote,\n request,\n }),\n [hasVotedState, request, vote, votes],\n );\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n return (\n <button\n type=\"button\"\n onClick={vote}\n data-featuredrop-request-vote={featureId}\n className={className}\n style={{ ...buttonStyles, ...style }}\n >\n <span>{hasVotedState ? \"Voted\" : label}</span>\n <span>({votes})</span>\n </button>\n );\n}\n","import {\n useCallback,\n useMemo,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n createFeatureRequest,\n listFeatureRequests,\n voteFeatureRequest,\n type FeatureRequestRecord,\n type FeatureRequestSort,\n} from \"../feature-request-store\";\n\nexport interface FeatureRequestPayload extends FeatureRequestRecord {\n metadata?: Record<string, unknown>;\n}\n\nexport interface FeatureRequestFormRenderProps {\n requests: FeatureRequestRecord[];\n sortBy: FeatureRequestSort;\n title: string;\n description: string;\n category: string;\n isSubmitting: boolean;\n error: string | null;\n setTitle: (value: string) => void;\n setDescription: (value: string) => void;\n setCategory: (value: string) => void;\n setSortBy: (value: FeatureRequestSort) => void;\n submit: () => Promise<void>;\n vote: (requestId: string) => void;\n}\n\nexport interface FeatureRequestFormProps {\n onSubmit?: (request: FeatureRequestPayload) => Promise<void> | void;\n onWebhook?: (request: FeatureRequestPayload) => Promise<void> | void;\n categories?: string[];\n defaultSort?: FeatureRequestSort;\n metadata?: Record<string, unknown>;\n className?: string;\n style?: CSSProperties;\n children?: (props: FeatureRequestFormRenderProps) => ReactNode;\n}\n\nconst panelStyles: CSSProperties = {\n width: \"min(92vw, 520px)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"12px\",\n background: \"#fff\",\n boxShadow: \"0 12px 36px rgba(0,0,0,0.12)\",\n padding: \"14px\",\n};\n\nexport function FeatureRequestForm({\n onSubmit,\n onWebhook,\n categories = [\"UI\", \"Performance\", \"Integration\", \"Other\"],\n defaultSort = \"votes\",\n metadata,\n className,\n style,\n children,\n}: FeatureRequestFormProps) {\n const [title, setTitle] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [category, setCategory] = useState(categories[0] ?? \"Other\");\n const [sortBy, setSortBy] = useState<FeatureRequestSort>(defaultSort);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [refreshVersion, setRefreshVersion] = useState(0);\n\n const requests = useMemo(\n () => listFeatureRequests(sortBy),\n [refreshVersion, sortBy],\n );\n\n const submit = useCallback(async () => {\n const nextTitle = title.trim();\n if (!nextTitle) {\n setError(\"Please add a request title.\");\n return;\n }\n setError(null);\n setIsSubmitting(true);\n const created = createFeatureRequest({\n title: nextTitle,\n description,\n category,\n autoVote: true,\n });\n const payload: FeatureRequestPayload = { ...created, metadata };\n\n try {\n await onSubmit?.(payload);\n await onWebhook?.(payload);\n } catch {\n setError(\"Saved locally, but failed to sync request.\");\n } finally {\n setTitle(\"\");\n setDescription(\"\");\n setCategory(categories[0] ?? \"Other\");\n setRefreshVersion((current) => current + 1);\n setIsSubmitting(false);\n }\n }, [categories, category, description, metadata, onSubmit, onWebhook, title]);\n\n const vote = useCallback((requestId: string) => {\n const result = voteFeatureRequest({ requestId });\n if (!result) return;\n setRefreshVersion((current) => current + 1);\n }, []);\n\n const renderProps: FeatureRequestFormRenderProps = {\n requests,\n sortBy,\n title,\n description,\n category,\n isSubmitting,\n error,\n setTitle,\n setDescription,\n setCategory,\n setSortBy,\n submit,\n vote,\n };\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n return (\n <section\n data-featuredrop-request-form\n className={className}\n style={{ ...panelStyles, ...style }}\n >\n <div style={{ display: \"grid\", gap: \"8px\" }}>\n <strong>Feature requests</strong>\n <input\n value={title}\n onChange={(event) => setTitle(event.target.value)}\n placeholder=\"Request title\"\n style={{ border: \"1px solid #d1d5db\", borderRadius: \"8px\", padding: \"8px\" }}\n />\n <textarea\n value={description}\n onChange={(event) => setDescription(event.target.value)}\n placeholder=\"Describe the use case\"\n rows={3}\n style={{ border: \"1px solid #d1d5db\", borderRadius: \"8px\", padding: \"8px\", resize: \"vertical\" }}\n />\n <div style={{ display: \"flex\", gap: \"8px\", flexWrap: \"wrap\" }}>\n <select\n aria-label=\"Request category\"\n value={category}\n onChange={(event) => setCategory(event.target.value)}\n style={{ border: \"1px solid #d1d5db\", borderRadius: \"8px\", padding: \"6px 8px\" }}\n >\n {categories.map((item) => (\n <option key={item} value={item}>{item}</option>\n ))}\n </select>\n <button\n type=\"button\"\n onClick={() => void submit()}\n disabled={isSubmitting}\n style={{\n border: \"none\",\n background: \"#111827\",\n color: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n opacity: isSubmitting ? 0.5 : 1,\n }}\n >\n {isSubmitting ? \"Submitting...\" : \"Submit request\"}\n </button>\n </div>\n {error && <p style={{ margin: 0, color: \"#b91c1c\", fontSize: \"12px\" }}>{error}</p>}\n </div>\n\n <div style={{ marginTop: \"14px\", display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <strong style={{ fontSize: \"13px\" }}>Top requests</strong>\n <select\n aria-label=\"Sort requests\"\n value={sortBy}\n onChange={(event) => setSortBy(event.target.value as FeatureRequestSort)}\n style={{ border: \"1px solid #d1d5db\", borderRadius: \"8px\", padding: \"6px 8px\" }}\n >\n <option value=\"votes\">Most votes</option>\n <option value=\"recent\">Most recent</option>\n </select>\n </div>\n\n <div style={{ marginTop: \"8px\", display: \"grid\", gap: \"8px\" }}>\n {requests.length === 0 && (\n <p style={{ margin: 0, color: \"#6b7280\", fontSize: \"13px\" }}>\n No requests yet.\n </p>\n )}\n {requests.map((request) => (\n <article\n key={request.id}\n data-featuredrop-request-item={request.id}\n style={{ border: \"1px solid #e5e7eb\", borderRadius: \"10px\", padding: \"10px\" }}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", gap: \"8px\", alignItems: \"flex-start\" }}>\n <div>\n <p style={{ margin: 0, fontWeight: 600 }}>{request.title}</p>\n {request.category && (\n <p style={{ margin: \"2px 0 0\", fontSize: \"12px\", color: \"#6b7280\" }}>\n {request.category}\n </p>\n )}\n </div>\n <button\n type=\"button\"\n onClick={() => vote(request.id)}\n style={{\n border: \"1px solid #d1d5db\",\n borderRadius: \"999px\",\n background: \"#fff\",\n padding: \"4px 8px\",\n cursor: \"pointer\",\n }}\n >\n ↑ {request.votes}\n </button>\n </div>\n {request.description && (\n <p style={{ margin: \"8px 0 0\", fontSize: \"13px\", color: \"#374151\" }}>\n {request.description}\n </p>\n )}\n </article>\n ))}\n </div>\n </section>\n );\n}\n","// Provider\nexport { FeatureDropProvider } from \"./provider\";\nexport type { FeatureDropProviderProps } from \"./provider\";\nexport { ThemeProvider } from \"./components/theme-provider\";\nexport type { ThemeProviderProps } from \"./components/theme-provider\";\n\n// Context\nexport { FeatureDropContext } from \"./context\";\nexport type { FeatureDropContextValue } from \"./context\";\n\n// Hooks\nexport { useFeatureDrop } from \"./hooks/use-feature-drop\";\nexport { useNewFeature } from \"./hooks/use-new-feature\";\nexport type { UseNewFeatureResult } from \"./hooks/use-new-feature\";\nexport { useNewCount } from \"./hooks/use-new-count\";\nexport { useTabNotification } from \"./hooks/use-tab-notification\";\nexport type { UseTabNotificationOptions } from \"./hooks/use-tab-notification\";\nexport { useAdoptionAnalytics } from \"./hooks/use-adoption-analytics\";\nexport { useTour } from \"./hooks/use-tour\";\nexport type { UseTourResult } from \"./hooks/use-tour\";\nexport { useTourSequencer } from \"./hooks/use-tour-sequencer\";\nexport type { TourSequenceItem, UseTourSequencerResult } from \"./hooks/use-tour-sequencer\";\nexport { useChecklist } from \"./hooks/use-checklist\";\nexport type { UseChecklistResult } from \"./hooks/use-checklist\";\nexport { useSurvey } from \"./hooks/use-survey\";\nexport type { UseSurveyResult } from \"./hooks/use-survey\";\n\n// Components\nimport { withFeatureDropBoundary } from \"./error-boundary\";\nimport { NewBadge as NewBadgeBase } from \"./components/new-badge\";\nexport type { NewBadgeProps, NewBadgeRenderProps } from \"./components/new-badge\";\nexport const NewBadge = withFeatureDropBoundary(NewBadgeBase, \"NewBadge\");\n\nimport { ChangelogWidget as ChangelogWidgetBase } from \"./components/changelog-widget\";\nexport type {\n ChangelogWidgetProps,\n ChangelogWidgetRenderProps,\n ChangelogEntryRenderProps,\n} from \"./components/changelog-widget\";\nexport const ChangelogWidget = withFeatureDropBoundary(ChangelogWidgetBase, \"ChangelogWidget\");\n\nimport { Spotlight as SpotlightBase } from \"./components/spotlight\";\nexport type { SpotlightProps, SpotlightRenderProps } from \"./components/spotlight\";\nexport const Spotlight = withFeatureDropBoundary(SpotlightBase, \"Spotlight\");\n\nimport { Banner as BannerBase } from \"./components/banner\";\nexport type { BannerProps, BannerRenderProps, BannerVariant } from \"./components/banner\";\nexport const Banner = withFeatureDropBoundary(BannerBase, \"Banner\");\n\nimport { Toast as ToastBase } from \"./components/toast\";\nexport type { ToastProps, ToastRenderProps } from \"./components/toast\";\nexport const Toast = withFeatureDropBoundary(ToastBase, \"Toast\");\n\nimport { ChangelogPage as ChangelogPageBase } from \"./components/changelog-page\";\nexport type { ChangelogPageProps, PaginationMode } from \"./components/changelog-page\";\nexport const ChangelogPage = withFeatureDropBoundary(ChangelogPageBase, \"ChangelogPage\");\n\nimport { Tour as TourBase } from \"./components/tour\";\nexport type { TourProps, TourStep, TourRenderProps } from \"./components/tour\";\nexport const Tour = withFeatureDropBoundary(TourBase, \"Tour\");\nimport { Checklist as ChecklistBase } from \"./components/checklist\";\nexport type { ChecklistProps, ChecklistTask, ChecklistRenderProps } from \"./components/checklist\";\nexport const Checklist = withFeatureDropBoundary(ChecklistBase, \"Checklist\");\nimport { Hotspot as HotspotBase, TooltipGroup as TooltipGroupBase } from \"./components/hotspot\";\nexport type { HotspotProps, TooltipGroupProps } from \"./components/hotspot\";\nexport const Hotspot = withFeatureDropBoundary(HotspotBase, \"Hotspot\");\nexport const TooltipGroup = withFeatureDropBoundary(TooltipGroupBase, \"TooltipGroup\");\nimport { FeedbackWidget as FeedbackWidgetBase } from \"./components/feedback-widget\";\nexport type {\n FeedbackWidgetProps,\n FeedbackWidgetRenderProps,\n FeedbackPayload,\n FeedbackEmoji,\n FeedbackRateLimit,\n} from \"./components/feedback-widget\";\nexport const FeedbackWidget = withFeatureDropBoundary(FeedbackWidgetBase, \"FeedbackWidget\");\nimport { AnnouncementModal as AnnouncementModalBase } from \"./components/announcement-modal\";\nexport type {\n AnnouncementModalProps,\n AnnouncementModalRenderProps,\n AnnouncementSlide,\n} from \"./components/announcement-modal\";\nexport const AnnouncementModal = withFeatureDropBoundary(AnnouncementModalBase, \"AnnouncementModal\");\nimport { SpotlightChain as SpotlightChainBase } from \"./components/spotlight-chain\";\nexport type {\n SpotlightChainProps,\n SpotlightChainRenderProps,\n SpotlightChainStep,\n} from \"./components/spotlight-chain\";\nexport const SpotlightChain = withFeatureDropBoundary(SpotlightChainBase, \"SpotlightChain\");\nimport { Survey as SurveyBase } from \"./components/survey\";\nexport type {\n SurveyProps,\n SurveyType,\n SurveyQuestion,\n SurveyQuestionType,\n SurveyTriggerRules,\n SurveyPayload,\n SurveyRenderProps,\n} from \"./components/survey\";\nexport const Survey = withFeatureDropBoundary(SurveyBase, \"Survey\");\nimport { FeatureRequestButton as FeatureRequestButtonBase } from \"./components/feature-request-button\";\nexport type {\n FeatureRequestButtonProps,\n FeatureRequestButtonRenderProps,\n} from \"./components/feature-request-button\";\nexport const FeatureRequestButton = withFeatureDropBoundary(FeatureRequestButtonBase, \"FeatureRequestButton\");\nimport { FeatureRequestForm as FeatureRequestFormBase } from \"./components/feature-request-form\";\nexport type {\n FeatureRequestFormProps,\n FeatureRequestFormRenderProps,\n FeatureRequestPayload,\n} from \"./components/feature-request-form\";\nexport const FeatureRequestForm = withFeatureDropBoundary(FeatureRequestFormBase, \"FeatureRequestForm\");\n"]}
1
+ {"version":3,"sources":["../src/animation.ts","../src/semver.ts","../src/triggers.ts","../src/core.ts","../src/helpers.ts","../src/throttle.ts","../src/i18n.ts","../src/variants.ts","../src/react/context.ts","../src/react/provider.tsx","../src/theme.ts","../src/react/theme.ts","../src/react/components/theme-provider.tsx","../src/react/hooks/use-feature-drop.ts","../src/react/hooks/use-new-feature.ts","../src/react/hooks/use-new-count.ts","../src/react/hooks/use-tab-notification.ts","../src/analytics.ts","../src/react/hooks/use-adoption-analytics.ts","../src/react/tour-registry.ts","../src/react/hooks/use-tour.ts","../src/react/hooks/use-tour-sequencer.ts","../src/react/checklist-registry.ts","../src/react/hooks/use-checklist.ts","../src/react/survey-registry.ts","../src/react/hooks/use-survey.ts","../src/react/hooks/use-changelog.ts","../src/react/hooks/use-smart-feature.ts","../src/react/hooks/use-adoption-score.ts","../src/react/hooks/use-behavior-profile.ts","../src/react/error-boundary.tsx","../src/react/components/new-badge.tsx","../src/markdown.ts","../src/react/reactions-store.ts","../src/react/components/changelog-widget.tsx","../src/react/components/spotlight.tsx","../src/react/components/banner.tsx","../src/react/components/toast.tsx","../src/react/components/changelog-page.tsx","../src/react/components/tour.tsx","../src/react/components/checklist.tsx","../src/react/components/hotspot.tsx","../src/react/components/feedback-widget.tsx","../src/react/components/announcement-modal.tsx","../src/react/components/spotlight-chain.tsx","../src/react/components/survey.tsx","../src/react/feature-request-store.ts","../src/react/components/feature-request-button.tsx","../src/react/components/feature-request-form.tsx","../src/react/components/smart-announcement.tsx","../src/react/index.ts"],"names":["engine","value","useState","useEffect","useMemo","jsx","isNew","useRef","useCallback","controllers","registryListeners","emitRegistry","EMPTY_SNAPSHOT","readSnapshot","useContext","sanitized","decoded","readStorageValue","writeStorageValue","Fragment","jsxs","sessionDismissed","positionStyles","headerStyles","pillStyles","reactionsRowStyles","reactionButtonStyles","containerStyles","overlayStyles","getFocusableElements","getStorageKey","createContext","tooltipStyles","onceStorageKey","isDismissedOnce","setDismissedOnce","beaconStyles","start","panelStyles","SEEN_FEATURES_STORAGE_KEY","CLICKED_FEATURES_STORAGE_KEY","toastStyles","NewBadge","ChangelogWidget","Spotlight","Banner","Toast","ChangelogPage","Tour","Checklist","Hotspot","TooltipGroup","FeedbackWidget","AnnouncementModal","SpotlightChain","Survey","FeatureRequestButton","FeatureRequestForm","SmartAnnouncement"],"mappings":"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","file":"react.js","sourcesContent":["import type { FeatureDropAnimationPreset } from \"./types\";\n\nexport const FEATUREDROP_ANIMATION_PRESETS = [\n \"none\",\n \"subtle\",\n \"normal\",\n \"playful\",\n] as const satisfies readonly FeatureDropAnimationPreset[];\n\nlet injectedAnimationStyles = false;\n\nexport function ensureFeatureDropAnimationStyles(): void {\n if (injectedAnimationStyles || typeof document === \"undefined\") return;\n injectedAnimationStyles = true;\n\n const style = document.createElement(\"style\");\n style.setAttribute(\"data-featuredrop-animations\", \"true\");\n style.textContent = `\n @keyframes featuredrop-enter-fade-up {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n @keyframes featuredrop-enter-scale {\n from { opacity: 0; transform: scale(0.96); }\n to { opacity: 1; transform: scale(1); }\n }\n @keyframes featuredrop-enter-panel {\n from { opacity: 0; transform: translateX(14px); }\n to { opacity: 1; transform: translateX(0); }\n }\n @keyframes featuredrop-enter-pop {\n 0% { opacity: 0; transform: translateY(12px) scale(0.94); }\n 70% { opacity: 1; transform: translateY(-2px) scale(1.02); }\n 100% { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes featuredrop-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.55; }\n }\n @keyframes featuredrop-pulse-playful {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 40% { opacity: 0.7; transform: scale(1.08); }\n 70% { opacity: 0.9; transform: scale(0.96); }\n }\n @keyframes featuredrop-beacon-pulse {\n 0%, 100% { transform: scale(1); opacity: 0.65; }\n 50% { transform: scale(1.5); opacity: 0; }\n }\n @keyframes featuredrop-beacon-pop-pulse {\n 0%, 100% { transform: scale(1); opacity: 0.72; }\n 45% { transform: scale(1.65); opacity: 0.08; }\n 75% { transform: scale(0.95); opacity: 0.28; }\n }\n @keyframes featuredrop-exit-fade-down {\n from { opacity: 1; transform: translateY(0); }\n to { opacity: 0; transform: translateY(8px); }\n }\n @keyframes featuredrop-exit-scale {\n from { opacity: 1; transform: scale(1); }\n to { opacity: 0; transform: scale(0.96); }\n }\n @keyframes featuredrop-exit-panel {\n from { opacity: 1; transform: translateX(0); }\n to { opacity: 0; transform: translateX(14px); }\n }\n @keyframes featuredrop-exit-pop {\n from { opacity: 1; transform: translateY(0) scale(1); }\n to { opacity: 0; transform: translateY(10px) scale(0.96); }\n }\n `;\n document.head.appendChild(style);\n}\n\nexport function prefersReducedMotion(): boolean {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return false;\n }\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nexport function resolveAnimationPreset(\n preset: FeatureDropAnimationPreset = \"normal\",\n options?: { reducedMotion?: boolean },\n): FeatureDropAnimationPreset {\n if (options?.reducedMotion) return \"none\";\n return preset;\n}\n\ntype AnimationSurface = \"toast\" | \"panel\" | \"modal\" | \"popover\";\ntype AnimationPhase = \"enter\" | \"exit\";\ntype PulseSurface = \"dot\" | \"beacon\";\n\nexport function getEnterAnimation(\n preset: FeatureDropAnimationPreset,\n surface: AnimationSurface,\n): string | undefined {\n if (preset === \"none\") return undefined;\n\n if (preset === \"subtle\") {\n if (surface === \"panel\") return \"featuredrop-enter-panel 180ms ease-out\";\n if (surface === \"modal\") return \"featuredrop-enter-scale 180ms ease-out\";\n return \"featuredrop-enter-fade-up 170ms ease-out\";\n }\n\n if (preset === \"playful\") {\n if (surface === \"panel\") return \"featuredrop-enter-panel 320ms cubic-bezier(0.2, 0.9, 0.2, 1)\";\n return \"featuredrop-enter-pop 300ms cubic-bezier(0.22, 1.4, 0.36, 1)\";\n }\n\n if (surface === \"panel\") return \"featuredrop-enter-panel 240ms cubic-bezier(0.2, 0.9, 0.2, 1)\";\n if (surface === \"modal\") return \"featuredrop-enter-scale 220ms cubic-bezier(0.2, 0.9, 0.2, 1)\";\n return \"featuredrop-enter-fade-up 210ms cubic-bezier(0.2, 0.9, 0.2, 1)\";\n}\n\nexport function getExitAnimation(\n preset: FeatureDropAnimationPreset,\n surface: AnimationSurface,\n): string | undefined {\n if (preset === \"none\") return undefined;\n\n if (preset === \"subtle\") {\n if (surface === \"panel\") return \"featuredrop-exit-panel 150ms ease-in forwards\";\n if (surface === \"modal\") return \"featuredrop-exit-scale 150ms ease-in forwards\";\n return \"featuredrop-exit-fade-down 140ms ease-in forwards\";\n }\n\n if (preset === \"playful\") {\n if (surface === \"panel\") return \"featuredrop-exit-panel 260ms ease-in forwards\";\n return \"featuredrop-exit-pop 240ms ease-in forwards\";\n }\n\n if (surface === \"panel\") return \"featuredrop-exit-panel 200ms ease-in forwards\";\n if (surface === \"modal\") return \"featuredrop-exit-scale 190ms ease-in forwards\";\n return \"featuredrop-exit-fade-down 180ms ease-in forwards\";\n}\n\nexport function getPulseAnimation(\n preset: FeatureDropAnimationPreset,\n surface: PulseSurface = \"beacon\",\n): string | undefined {\n if (preset === \"none\") return undefined;\n\n if (surface === \"dot\") {\n if (preset === \"subtle\") return \"featuredrop-pulse 2.6s ease-in-out infinite\";\n if (preset === \"playful\") {\n return \"featuredrop-pulse-playful 1.8s cubic-bezier(0.22, 1.4, 0.36, 1) infinite\";\n }\n return \"featuredrop-pulse 2s ease-in-out infinite\";\n }\n\n if (preset === \"subtle\") return \"featuredrop-beacon-pulse 2.6s ease-in-out infinite\";\n if (preset === \"playful\") {\n return \"featuredrop-beacon-pop-pulse 1.8s cubic-bezier(0.22, 1.4, 0.36, 1) infinite\";\n }\n return \"featuredrop-beacon-pulse 2s ease-in-out infinite\";\n}\n\nexport function getAnimationDurationMs(\n preset: FeatureDropAnimationPreset,\n surface: AnimationSurface,\n phase: AnimationPhase,\n): number {\n if (preset === \"none\") return 0;\n const animation = phase === \"enter\"\n ? getEnterAnimation(preset, surface)\n : getExitAnimation(preset, surface);\n if (!animation) return 0;\n\n const msMatch = animation.match(/(\\d+)ms/);\n if (msMatch?.[1]) return Number(msMatch[1]);\n\n const sMatch = animation.match(/(\\d+(?:\\.\\d+)?)s/);\n if (sMatch?.[1]) return Math.round(Number(sMatch[1]) * 1000);\n\n return 0;\n}\n","// Minimal semver comparison utilities (no build metadata sorting needed)\n\nexport type Comparator = \">=\" | \"<=\" | \">\" | \"<\" | \"=\";\n\nexport interface SemverParts {\n major: number;\n minor: number;\n patch: number;\n prerelease: string[];\n}\n\nconst SEMVER_REGEX = /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?/;\n\nexport function parseSemver(input: string): SemverParts | null {\n const match = input.trim().match(SEMVER_REGEX);\n if (!match) return null;\n return {\n major: Number(match[1]),\n minor: Number(match[2]),\n patch: Number(match[3]),\n prerelease: match[4] ? match[4].split(\".\") : [],\n };\n}\n\nexport function compareSemver(a: string, b: string): number {\n const pa = parseSemver(a);\n const pb = parseSemver(b);\n if (!pa || !pb) return 0;\n\n for (const key of [\"major\", \"minor\", \"patch\"] as const) {\n if (pa[key] !== pb[key]) return pa[key] - pb[key];\n }\n\n // Handle prerelease: absence > presence, otherwise lexicographic\n const aPre = pa.prerelease;\n const bPre = pb.prerelease;\n if (aPre.length === 0 && bPre.length === 0) return 0;\n if (aPre.length === 0) return 1;\n if (bPre.length === 0) return -1;\n\n const len = Math.max(aPre.length, bPre.length);\n for (let i = 0; i < len; i++) {\n const ai = aPre[i];\n const bi = bPre[i];\n if (ai === undefined) return -1;\n if (bi === undefined) return 1;\n const aNum = Number(ai);\n const bNum = Number(bi);\n const aIsNum = Number.isInteger(aNum);\n const bIsNum = Number.isInteger(bNum);\n if (aIsNum && bIsNum && aNum !== bNum) return aNum - bNum;\n if (aIsNum !== bIsNum) return aIsNum ? -1 : 1;\n if (ai !== bi) return ai < bi ? -1 : 1;\n }\n return 0;\n}\n\nfunction parseComparator(comp: string): { op: Comparator; version: string } | null {\n const match = comp.trim().match(/^(>=|<=|>|<|=)?\\\\s*(.+)$/);\n if (!match) return null;\n const op = (match[1] as Comparator) || \">=\";\n const version = match[2];\n if (!parseSemver(version)) return null;\n return { op, version };\n}\n\nfunction satisfiesComparator(version: string, comp: { op: Comparator; version: string }): boolean {\n const diff = compareSemver(version, comp.version);\n switch (comp.op) {\n case \">\":\n return diff > 0;\n case \">=\":\n return diff >= 0;\n case \"<\":\n return diff < 0;\n case \"<=\":\n return diff <= 0;\n case \"=\":\n return diff === 0;\n default:\n return false;\n }\n}\n\n// Space-separated comparator list (AND semantics), e.g. \">=2.5.0 <3.0.0\"\nexport function satisfiesRange(version: string, range: string): boolean {\n const parts = range.split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return true;\n for (const part of parts) {\n const comp = parseComparator(part);\n if (!comp) return false;\n if (!satisfiesComparator(version, comp)) return false;\n }\n return true;\n}\n","import type { FeatureEntry, FeatureTrigger, TriggerContext } from \"./types\";\n\nfunction wildcardToRegExp(value: string): RegExp {\n const escaped = value.replace(/[.+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const pattern = `^${escaped.replace(/\\*/g, \".*\")}$`;\n return new RegExp(pattern);\n}\n\nfunction matchPath(path: string, pattern: string | RegExp): boolean {\n if (pattern instanceof RegExp) return pattern.test(path);\n if (!pattern) return false;\n if (pattern.includes(\"*\")) return wildcardToRegExp(pattern).test(path);\n return path === pattern || path.startsWith(pattern);\n}\n\nexport function isTriggerMatch(trigger: FeatureTrigger | undefined, context?: TriggerContext): boolean {\n if (!trigger) return true;\n if (!context) return false;\n\n if (trigger.type === \"page\") {\n const path = context.path;\n if (!path) return false;\n return matchPath(path, trigger.match);\n }\n\n if (trigger.type === \"usage\") {\n const usage = context.usage ?? {};\n const count = usage[trigger.event] ?? 0;\n return count >= (trigger.minActions ?? 1);\n }\n\n if (trigger.type === \"time\") {\n const elapsedMs = context.elapsedMs ?? 0;\n return elapsedMs >= trigger.minSeconds * 1000;\n }\n\n if (trigger.type === \"milestone\") {\n return context.milestones?.has(trigger.event) ?? false;\n }\n\n if (trigger.type === \"frustration\") {\n const usage = context.usage ?? {};\n const count = usage[trigger.pattern] ?? 0;\n return count >= (trigger.threshold ?? 1);\n }\n\n if (trigger.type === \"scroll\") {\n return (context.scrollPercent ?? 0) >= (trigger.minPercent ?? 50);\n }\n\n try {\n return trigger.evaluate(context);\n } catch {\n return false;\n }\n}\n\nexport class TriggerEngine {\n private context: TriggerContext;\n\n constructor(initial?: TriggerContext) {\n this.context = {\n path: initial?.path,\n events: new Set(initial?.events ?? []),\n milestones: new Set(initial?.milestones ?? []),\n usage: { ...(initial?.usage ?? {}) },\n elapsedMs: initial?.elapsedMs ?? 0,\n scrollPercent: initial?.scrollPercent ?? 0,\n metadata: { ...(initial?.metadata ?? {}) },\n };\n }\n\n setPath(path: string): void {\n this.context.path = path;\n }\n\n trackEvent(event: string): void {\n const next = new Set(this.context.events ?? new Set<string>());\n next.add(event);\n this.context.events = next;\n }\n\n trackUsage(event: string, delta = 1): void {\n const usage = { ...(this.context.usage ?? {}) };\n usage[event] = (usage[event] ?? 0) + Math.max(1, delta);\n this.context.usage = usage;\n }\n\n trackMilestone(event: string): void {\n const next = new Set(this.context.milestones ?? new Set<string>());\n next.add(event);\n this.context.milestones = next;\n }\n\n setElapsedMs(elapsedMs: number): void {\n this.context.elapsedMs = Math.max(0, elapsedMs);\n }\n\n setScrollPercent(scrollPercent: number): void {\n const clamped = Math.max(0, Math.min(100, scrollPercent));\n this.context.scrollPercent = clamped;\n }\n\n setMetadata(next: Record<string, unknown>): void {\n this.context.metadata = { ...next };\n }\n\n getContext(): TriggerContext {\n return {\n path: this.context.path,\n events: new Set(this.context.events ?? []),\n milestones: new Set(this.context.milestones ?? []),\n usage: { ...(this.context.usage ?? {}) },\n elapsedMs: this.context.elapsedMs,\n scrollPercent: this.context.scrollPercent,\n metadata: { ...(this.context.metadata ?? {}) },\n };\n }\n\n evaluate(trigger: FeatureTrigger | undefined): boolean {\n return isTriggerMatch(trigger, this.context);\n }\n\n evaluateFeature(feature: Pick<FeatureEntry, \"trigger\">): boolean {\n return this.evaluate(feature.trigger);\n }\n}\n","import type {\n AudienceMatchFn,\n AudienceRule,\n FeatureEntry,\n FeatureManifest,\n StorageAdapter,\n UserContext,\n FeatureDependencyState,\n FeatureFlagBridge,\n TriggerContext,\n} from \"./types\";\nimport { compareSemver, satisfiesRange } from \"./semver\";\nimport { isTriggerMatch } from \"./triggers\";\n\n/**\n * Default audience matching logic.\n *\n * For each specified field (plan, role, region), checks if the user's\n * value is included in the allowed list. Fields use AND logic between them,\n * OR logic within each field's array. The `custom` field is ignored by\n * the default matcher — use a custom `AudienceMatchFn` for that.\n */\nexport function matchesAudience(\n audience: AudienceRule,\n userContext: UserContext,\n): boolean {\n if (audience.plan && audience.plan.length > 0) {\n if (!userContext.plan || !audience.plan.includes(userContext.plan)) {\n return false;\n }\n }\n if (audience.role && audience.role.length > 0) {\n if (!userContext.role || !audience.role.includes(userContext.role)) {\n return false;\n }\n }\n if (audience.region && audience.region.length > 0) {\n if (!userContext.region || !audience.region.includes(userContext.region)) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Check if a feature's audience allows the given user context.\n *\n * - No `audience` field → visible to all\n * - Empty `audience` ({}) → visible to all\n * - `audience` specified but no `userContext` → hidden (safe default)\n * - Otherwise, delegate to `matchFn` (or default `matchesAudience`)\n */\nfunction isAudienceMatch(\n feature: FeatureEntry,\n userContext?: UserContext,\n matchFn?: AudienceMatchFn,\n): boolean {\n // No audience restriction → show to everyone\n if (!feature.audience) return true;\n\n // Check if audience is empty (no fields with values)\n const { plan, role, region, custom } = feature.audience;\n const hasRules =\n (plan && plan.length > 0) ||\n (role && role.length > 0) ||\n (region && region.length > 0) ||\n (custom && Object.keys(custom).length > 0);\n if (!hasRules) return true;\n\n // Audience specified but no user context → hidden (safe default)\n if (!userContext) return false;\n\n // Use custom matcher if provided, otherwise default\n if (matchFn) return matchFn(feature.audience, userContext);\n return matchesAudience(feature.audience, userContext);\n}\n\nfunction isVersionMatch(feature: FeatureEntry, appVersion?: string): boolean {\n const v = feature.version;\n if (!v || typeof v === \"string\") return true; // string = display only\n if (!appVersion) return false; // Safe default when constraints exist\n if (!v.introduced && !v.showNewUntil && !v.deprecatedAt && !v.showIn) return true;\n\n // Range check\n if (v.showIn && !satisfiesRange(appVersion, v.showIn)) return false;\n\n if (v.introduced && compareSemver(appVersion, v.introduced) < 0) return false;\n if (v.deprecatedAt && compareSemver(appVersion, v.deprecatedAt) >= 0) return false;\n\n // showNewUntil gates \"new\" state only\n if (v.showNewUntil && compareSemver(appVersion, v.showNewUntil) >= 0) return false;\n\n return true;\n}\n\nfunction isFlagMatch(\n feature: FeatureEntry,\n flagBridge?: FeatureFlagBridge,\n userContext?: UserContext,\n): boolean {\n if (!feature.flagKey) return true;\n if (!flagBridge) return false;\n try {\n return flagBridge.isEnabled(feature.flagKey, userContext);\n } catch {\n return false;\n }\n}\n\nfunction isProductMatch(feature: FeatureEntry, product?: string): boolean {\n if (!feature.product || feature.product === \"*\") return true;\n if (!product) return false;\n return feature.product === product;\n}\n\nfunction isDependencyMatch(\n feature: FeatureEntry,\n dismissedIds: ReadonlySet<string>,\n dependencyState?: FeatureDependencyState,\n): boolean {\n const dependsOn = feature.dependsOn;\n if (!dependsOn) return true;\n\n const seenIds = dependencyState?.seenIds;\n const clickedIds = dependencyState?.clickedIds;\n const dismissedDependencyIds = dependencyState?.dismissedIds ?? dismissedIds;\n\n if (dependsOn.seen && dependsOn.seen.length > 0) {\n for (const id of dependsOn.seen) {\n const seen = seenIds?.has(id) ?? false;\n if (!seen && !dismissedDependencyIds.has(id)) return false;\n }\n }\n\n if (dependsOn.clicked && dependsOn.clicked.length > 0) {\n for (const id of dependsOn.clicked) {\n if (!(clickedIds?.has(id) ?? false)) return false;\n }\n }\n\n if (dependsOn.dismissed && dependsOn.dismissed.length > 0) {\n for (const id of dependsOn.dismissed) {\n if (!dismissedDependencyIds.has(id)) return false;\n }\n }\n\n return true;\n}\n\n/**\n * Check if a single feature should show as \"new\".\n *\n * A feature is \"new\" when ALL of these are true:\n * 1. Current time is before `showNewUntil`\n * 2. Feature was released after the watermark (or no watermark exists)\n * 3. Feature has not been individually dismissed\n * 4. If `publishAt` is set, current time must be after it (scheduled publishing)\n * 5. If `audience` is set, user must match the targeting rules\n * 6. If `flagKey` is set, the flag bridge must resolve it as enabled\n * 7. If `product` is set, it must match the current product scope\n */\nexport function isNew(\n feature: FeatureEntry,\n watermark: string | null,\n dismissedIds: ReadonlySet<string>,\n now: Date = new Date(),\n userContext?: UserContext,\n matchAudience?: AudienceMatchFn,\n appVersion?: string,\n dependencyState?: FeatureDependencyState,\n triggerContext?: TriggerContext,\n flagBridge?: FeatureFlagBridge,\n product?: string,\n): boolean {\n // Already dismissed by the user on this device\n if (dismissedIds.has(feature.id)) return false;\n\n // Audience targeting — check before time-based checks\n if (!isAudienceMatch(feature, userContext, matchAudience)) return false;\n\n // Dependency targeting — defer features until prerequisites are satisfied\n if (!isDependencyMatch(feature, dismissedIds, dependencyState)) return false;\n\n // Version targeting — requires appVersion when constraints exist\n if (!isVersionMatch(feature, appVersion)) return false;\n\n // Feature flag targeting — hide flagged entries unless enabled\n if (!isFlagMatch(feature, flagBridge, userContext)) return false;\n\n // Multi-product targeting — hide entries for other product scopes\n if (!isProductMatch(feature, product)) return false;\n\n // Contextual trigger rules — show only when trigger condition is satisfied.\n if (!isTriggerMatch(feature.trigger, triggerContext)) return false;\n\n const nowMs = now.getTime();\n\n // Scheduled publishing — hidden until publishAt\n if (feature.publishAt) {\n const publishMs = new Date(feature.publishAt).getTime();\n if (nowMs < publishMs) return false;\n }\n\n const showUntilMs = new Date(feature.showNewUntil).getTime();\n\n // Past the display window\n if (nowMs >= showUntilMs) return false;\n\n // If there's a watermark, feature must have been released after it\n if (watermark) {\n const watermarkMs = new Date(watermark).getTime();\n const releasedMs = new Date(feature.releasedAt).getTime();\n if (releasedMs <= watermarkMs) return false;\n }\n\n return true;\n}\n\n/**\n * Get all features that are currently \"new\" for this user.\n */\nexport function getNewFeatures(\n manifest: FeatureManifest,\n storage: StorageAdapter,\n now: Date = new Date(),\n userContext?: UserContext,\n matchAudience?: AudienceMatchFn,\n appVersion?: string,\n dependencyState?: FeatureDependencyState,\n triggerContext?: TriggerContext,\n flagBridge?: FeatureFlagBridge,\n product?: string,\n): FeatureEntry[] {\n const watermark = storage.getWatermark();\n const dismissedIds = storage.getDismissedIds();\n return manifest.filter((f) =>\n isNew(\n f,\n watermark,\n dismissedIds,\n now,\n userContext,\n matchAudience,\n appVersion,\n dependencyState,\n triggerContext,\n flagBridge,\n product,\n ),\n );\n}\n\n/**\n * Get the count of new features.\n */\nexport function getNewFeatureCount(\n manifest: FeatureManifest,\n storage: StorageAdapter,\n now: Date = new Date(),\n userContext?: UserContext,\n matchAudience?: AudienceMatchFn,\n appVersion?: string,\n dependencyState?: FeatureDependencyState,\n triggerContext?: TriggerContext,\n flagBridge?: FeatureFlagBridge,\n product?: string,\n): number {\n return getNewFeatures(\n manifest,\n storage,\n now,\n userContext,\n matchAudience,\n appVersion,\n dependencyState,\n triggerContext,\n flagBridge,\n product,\n ).length;\n}\n\n/**\n * Check if a specific sidebar key has a new feature.\n */\nexport function hasNewFeature(\n manifest: FeatureManifest,\n sidebarKey: string,\n storage: StorageAdapter,\n now: Date = new Date(),\n userContext?: UserContext,\n matchAudience?: AudienceMatchFn,\n appVersion?: string,\n dependencyState?: FeatureDependencyState,\n triggerContext?: TriggerContext,\n flagBridge?: FeatureFlagBridge,\n product?: string,\n): boolean {\n const watermark = storage.getWatermark();\n const dismissedIds = storage.getDismissedIds();\n return manifest.some(\n (f) =>\n f.sidebarKey === sidebarKey &&\n isNew(\n f,\n watermark,\n dismissedIds,\n now,\n userContext,\n matchAudience,\n appVersion,\n dependencyState,\n triggerContext,\n flagBridge,\n product,\n ),\n );\n}\n\n/**\n * Get all features sorted by priority (critical first) then by release date (newest first).\n */\nexport function getNewFeaturesSorted(\n manifest: FeatureManifest,\n storage: StorageAdapter,\n now: Date = new Date(),\n userContext?: UserContext,\n matchAudience?: AudienceMatchFn,\n appVersion?: string,\n dependencyState?: FeatureDependencyState,\n triggerContext?: TriggerContext,\n flagBridge?: FeatureFlagBridge,\n product?: string,\n): FeatureEntry[] {\n const priorityOrder = { critical: 0, normal: 1, low: 2 };\n return getNewFeatures(\n manifest,\n storage,\n now,\n userContext,\n matchAudience,\n appVersion,\n dependencyState,\n triggerContext,\n flagBridge,\n product,\n ).sort(\n (a, b) => {\n const pa = priorityOrder[a.priority ?? \"normal\"];\n const pb = priorityOrder[b.priority ?? \"normal\"];\n if (pa !== pb) return pa - pb;\n return (\n new Date(b.releasedAt).getTime() - new Date(a.releasedAt).getTime()\n );\n },\n );\n}\n","import type {\n AudienceMatchFn,\n FeatureEntry,\n FeatureManifest,\n StorageAdapter,\n UserContext,\n} from \"./types\";\nimport { isNew } from \"./core\";\n\n/**\n * Create a frozen feature manifest from an array of entries.\n * Ensures the manifest is immutable at runtime.\n */\nexport function createManifest(\n entries: FeatureEntry[],\n): FeatureManifest {\n return Object.freeze([...entries]);\n}\n\n/**\n * Find a feature by its ID in the manifest.\n * Returns `undefined` if not found.\n */\nexport function getFeatureById(\n manifest: FeatureManifest,\n id: string,\n): FeatureEntry | undefined {\n return manifest.find((f) => f.id === id);\n}\n\n/**\n * Get all new features in a specific category.\n */\nexport function getNewFeaturesByCategory(\n manifest: FeatureManifest,\n category: string,\n storage: StorageAdapter,\n now: Date = new Date(),\n userContext?: UserContext,\n matchAudience?: AudienceMatchFn,\n appVersion?: string,\n): FeatureEntry[] {\n const watermark = storage.getWatermark();\n const dismissedIds = storage.getDismissedIds();\n return manifest.filter(\n (f) =>\n f.category === category &&\n isNew(f, watermark, dismissedIds, now, userContext, matchAudience, appVersion),\n );\n}\n","import type { FeatureEntry } from \"./types\";\n\nexport interface ThrottleOptions {\n maxSimultaneousBadges?: number;\n maxSimultaneousSpotlights?: number;\n maxToastsPerSession?: number;\n minTimeBetweenModals?: number;\n minTimeBetweenTours?: number;\n sessionCooldown?: number;\n respectDoNotDisturb?: boolean;\n}\n\nexport interface ThrottleRuntimeState {\n sessionStartedAt: number;\n quietMode?: boolean;\n}\n\nexport interface ThrottleResult {\n visible: FeatureEntry[];\n queued: FeatureEntry[];\n}\n\nfunction sortByPriorityAndRecency(features: FeatureEntry[]): FeatureEntry[] {\n const priorityWeight = { critical: 3, normal: 2, low: 1 };\n return [...features].sort((a, b) => {\n const scoreA = priorityWeight[a.priority ?? \"normal\"];\n const scoreB = priorityWeight[b.priority ?? \"normal\"];\n if (scoreA !== scoreB) return scoreB - scoreA;\n return new Date(b.releasedAt).getTime() - new Date(a.releasedAt).getTime();\n });\n}\n\nexport function applyAnnouncementThrottle(\n features: FeatureEntry[],\n options: ThrottleOptions | undefined,\n state: ThrottleRuntimeState,\n now: number = Date.now(),\n): ThrottleResult {\n const sorted = sortByPriorityAndRecency(features);\n if (sorted.length === 0) {\n return { visible: [], queued: [] };\n }\n\n if (options?.sessionCooldown && options.sessionCooldown > 0) {\n const elapsed = now - state.sessionStartedAt;\n if (elapsed < options.sessionCooldown) {\n return { visible: [], queued: sorted };\n }\n }\n\n if (options?.respectDoNotDisturb && state.quietMode) {\n const visible = sorted.filter((feature) => feature.priority === \"critical\");\n const queued = sorted.filter((feature) => feature.priority !== \"critical\");\n return { visible, queued };\n }\n\n const maxVisible = options?.maxSimultaneousBadges;\n if (!maxVisible || !Number.isFinite(maxVisible) || maxVisible < 1) {\n return { visible: sorted, queued: [] };\n }\n\n return {\n visible: sorted.slice(0, maxVisible),\n queued: sorted.slice(maxVisible),\n };\n}\n","export interface FeatureDropTranslations {\n newBadge: string;\n whatsNewTitle: string;\n markAllRead: string;\n allCaughtUp: string;\n close: string;\n changelogTitle: string;\n searchPlaceholder: string;\n allCategories: string;\n noUpdatesYet: string;\n loadMore: string;\n share: string;\n skipToEntries: string;\n newFeatureCount: (count: number) => string;\n stepOf: (current: number, total: number) => string;\n back: string;\n next: string;\n skip: string;\n finish: string;\n gotIt: string;\n announcement: string;\n feedbackTitle: string;\n feedbackTrigger: string;\n feedbackSubmitted: string;\n submit: string;\n cancel: string;\n askLater: string;\n}\n\nconst EN_TRANSLATIONS: FeatureDropTranslations = {\n newBadge: \"New\",\n whatsNewTitle: \"What's New\",\n markAllRead: \"Mark all as read\",\n allCaughtUp: \"You're all caught up!\",\n close: \"Close\",\n changelogTitle: \"Changelog\",\n searchPlaceholder: \"Search updates\",\n allCategories: \"All categories\",\n noUpdatesYet: \"No updates yet\",\n loadMore: \"Load more\",\n share: \"Share\",\n skipToEntries: \"Skip to changelog entries\",\n newFeatureCount: (count: number) =>\n count === 0 ? \"No new features\" : `${count} new feature${count === 1 ? \"\" : \"s\"}`,\n stepOf: (current: number, total: number) => `Step ${current} of ${total}`,\n back: \"Back\",\n next: \"Next\",\n skip: \"Skip\",\n finish: \"Finish\",\n gotIt: \"Got it\",\n announcement: \"Announcement\",\n feedbackTitle: \"Share feedback\",\n feedbackTrigger: \"Feedback\",\n feedbackSubmitted: \"Thanks for the feedback.\",\n submit: \"Submit\",\n cancel: \"Cancel\",\n askLater: \"Ask me later\",\n};\n\nconst SIMPLE_TRANSLATIONS: Record<string, Partial<FeatureDropTranslations>> = {\n es: {\n newBadge: \"Nuevo\",\n whatsNewTitle: \"Novedades\",\n markAllRead: \"Marcar todo como leído\",\n allCaughtUp: \"Estás al día.\",\n close: \"Cerrar\",\n changelogTitle: \"Registro de cambios\",\n searchPlaceholder: \"Buscar actualizaciones\",\n allCategories: \"Todas las categorías\",\n noUpdatesYet: \"Aún no hay actualizaciones\",\n loadMore: \"Cargar más\",\n share: \"Compartir\",\n skipToEntries: \"Saltar a las entradas del changelog\",\n back: \"Atrás\",\n next: \"Siguiente\",\n skip: \"Saltar\",\n finish: \"Finalizar\",\n gotIt: \"Entendido\",\n announcement: \"Anuncio\",\n feedbackTitle: \"Enviar comentarios\",\n feedbackTrigger: \"Comentarios\",\n feedbackSubmitted: \"Gracias por tus comentarios.\",\n submit: \"Enviar\",\n cancel: \"Cancelar\",\n askLater: \"Preguntar más tarde\",\n },\n fr: {\n newBadge: \"Nouveau\",\n whatsNewTitle: \"Nouveautés\",\n markAllRead: \"Tout marquer comme lu\",\n allCaughtUp: \"Vous êtes à jour.\",\n close: \"Fermer\",\n changelogTitle: \"Journal des changements\",\n searchPlaceholder: \"Rechercher des mises à jour\",\n allCategories: \"Toutes les catégories\",\n noUpdatesYet: \"Aucune mise à jour\",\n loadMore: \"Charger plus\",\n share: \"Partager\",\n skipToEntries: \"Aller aux entrées du changelog\",\n back: \"Retour\",\n next: \"Suivant\",\n skip: \"Passer\",\n finish: \"Terminer\",\n gotIt: \"Compris\",\n announcement: \"Annonce\",\n feedbackTitle: \"Partager un avis\",\n feedbackTrigger: \"Avis\",\n feedbackSubmitted: \"Merci pour votre avis.\",\n submit: \"Envoyer\",\n cancel: \"Annuler\",\n askLater: \"Demander plus tard\",\n },\n de: {\n newBadge: \"Neu\",\n whatsNewTitle: \"Neuigkeiten\",\n markAllRead: \"Alles als gelesen markieren\",\n allCaughtUp: \"Alles erledigt.\",\n close: \"Schließen\",\n changelogTitle: \"Änderungsprotokoll\",\n searchPlaceholder: \"Updates suchen\",\n allCategories: \"Alle Kategorien\",\n noUpdatesYet: \"Noch keine Updates\",\n loadMore: \"Mehr laden\",\n share: \"Teilen\",\n skipToEntries: \"Zu den Einträgen springen\",\n back: \"Zurück\",\n next: \"Weiter\",\n skip: \"Überspringen\",\n finish: \"Fertig\",\n gotIt: \"Verstanden\",\n announcement: \"Ankündigung\",\n feedbackTitle: \"Feedback teilen\",\n feedbackTrigger: \"Feedback\",\n feedbackSubmitted: \"Danke für dein Feedback.\",\n submit: \"Senden\",\n cancel: \"Abbrechen\",\n askLater: \"Später fragen\",\n },\n pt: {\n newBadge: \"Novo\",\n whatsNewTitle: \"Novidades\",\n markAllRead: \"Marcar tudo como lido\",\n allCaughtUp: \"Tudo em dia.\",\n close: \"Fechar\",\n changelogTitle: \"Histórico de mudanças\",\n searchPlaceholder: \"Buscar atualizações\",\n allCategories: \"Todas as categorias\",\n noUpdatesYet: \"Sem atualizações ainda\",\n loadMore: \"Carregar mais\",\n share: \"Compartilhar\",\n skipToEntries: \"Ir para entradas do changelog\",\n back: \"Voltar\",\n next: \"Próximo\",\n skip: \"Pular\",\n finish: \"Concluir\",\n gotIt: \"Entendi\",\n announcement: \"Anúncio\",\n feedbackTitle: \"Enviar feedback\",\n feedbackTrigger: \"Feedback\",\n feedbackSubmitted: \"Obrigado pelo feedback.\",\n submit: \"Enviar\",\n cancel: \"Cancelar\",\n askLater: \"Perguntar depois\",\n },\n \"zh-cn\": {\n newBadge: \"新\",\n whatsNewTitle: \"最新动态\",\n markAllRead: \"全部标记为已读\",\n allCaughtUp: \"你已查看全部更新。\",\n close: \"关闭\",\n changelogTitle: \"更新日志\",\n searchPlaceholder: \"搜索更新\",\n allCategories: \"全部分类\",\n noUpdatesYet: \"暂无更新\",\n loadMore: \"加载更多\",\n share: \"分享\",\n skipToEntries: \"跳转到更新条目\",\n back: \"返回\",\n next: \"下一步\",\n skip: \"跳过\",\n finish: \"完成\",\n gotIt: \"知道了\",\n announcement: \"公告\",\n feedbackTitle: \"提交反馈\",\n feedbackTrigger: \"反馈\",\n feedbackSubmitted: \"感谢你的反馈。\",\n submit: \"提交\",\n cancel: \"取消\",\n askLater: \"稍后询问\",\n },\n ja: {\n newBadge: \"新着\",\n whatsNewTitle: \"新機能\",\n markAllRead: \"すべて既読にする\",\n allCaughtUp: \"すべて確認済みです。\",\n close: \"閉じる\",\n changelogTitle: \"変更履歴\",\n searchPlaceholder: \"更新を検索\",\n allCategories: \"すべてのカテゴリ\",\n noUpdatesYet: \"更新はありません\",\n loadMore: \"さらに表示\",\n share: \"共有\",\n skipToEntries: \"変更履歴へ移動\",\n back: \"戻る\",\n next: \"次へ\",\n skip: \"スキップ\",\n finish: \"完了\",\n gotIt: \"了解\",\n announcement: \"お知らせ\",\n feedbackTitle: \"フィードバックを送信\",\n feedbackTrigger: \"フィードバック\",\n feedbackSubmitted: \"フィードバックありがとうございます。\",\n submit: \"送信\",\n cancel: \"キャンセル\",\n askLater: \"後で聞く\",\n },\n ko: {\n newBadge: \"새로움\",\n whatsNewTitle: \"새 소식\",\n markAllRead: \"모두 읽음 처리\",\n allCaughtUp: \"모든 업데이트를 확인했습니다.\",\n close: \"닫기\",\n changelogTitle: \"변경 로그\",\n searchPlaceholder: \"업데이트 검색\",\n allCategories: \"전체 카테고리\",\n noUpdatesYet: \"업데이트가 없습니다\",\n loadMore: \"더 보기\",\n share: \"공유\",\n skipToEntries: \"변경 항목으로 이동\",\n back: \"뒤로\",\n next: \"다음\",\n skip: \"건너뛰기\",\n finish: \"완료\",\n gotIt: \"확인\",\n announcement: \"공지\",\n feedbackTitle: \"피드백 보내기\",\n feedbackTrigger: \"피드백\",\n feedbackSubmitted: \"피드백 감사합니다.\",\n submit: \"제출\",\n cancel: \"취소\",\n askLater: \"나중에 묻기\",\n },\n ar: {\n newBadge: \"جديد\",\n whatsNewTitle: \"ما الجديد\",\n markAllRead: \"تحديد الكل كمقروء\",\n allCaughtUp: \"تمت متابعة كل التحديثات.\",\n close: \"إغلاق\",\n changelogTitle: \"سجل التغييرات\",\n searchPlaceholder: \"ابحث في التحديثات\",\n allCategories: \"كل الفئات\",\n noUpdatesYet: \"لا توجد تحديثات بعد\",\n loadMore: \"تحميل المزيد\",\n share: \"مشاركة\",\n skipToEntries: \"تخطي إلى عناصر السجل\",\n back: \"رجوع\",\n next: \"التالي\",\n skip: \"تخطي\",\n finish: \"إنهاء\",\n gotIt: \"تم\",\n announcement: \"إعلان\",\n feedbackTitle: \"شارك ملاحظاتك\",\n feedbackTrigger: \"ملاحظات\",\n feedbackSubmitted: \"شكرًا على ملاحظاتك.\",\n submit: \"إرسال\",\n cancel: \"إلغاء\",\n askLater: \"اسألني لاحقًا\",\n },\n hi: {\n newBadge: \"नया\",\n whatsNewTitle: \"नया क्या है\",\n markAllRead: \"सभी को पढ़ा हुआ चिह्नित करें\",\n allCaughtUp: \"आपने सभी अपडेट देख लिए हैं।\",\n close: \"बंद करें\",\n changelogTitle: \"परिवर्तन सूची\",\n searchPlaceholder: \"अपडेट खोजें\",\n allCategories: \"सभी श्रेणियां\",\n noUpdatesYet: \"अभी कोई अपडेट नहीं\",\n loadMore: \"और लोड करें\",\n share: \"साझा करें\",\n skipToEntries: \"चेंजलॉग प्रविष्टियों पर जाएं\",\n back: \"वापस\",\n next: \"अगला\",\n skip: \"छोड़ें\",\n finish: \"समाप्त\",\n gotIt: \"ठीक है\",\n announcement: \"घोषणा\",\n feedbackTitle: \"फीडबैक साझा करें\",\n feedbackTrigger: \"फीडबैक\",\n feedbackSubmitted: \"फीडबैक के लिए धन्यवाद।\",\n submit: \"जमा करें\",\n cancel: \"रद्द करें\",\n askLater: \"बाद में पूछें\",\n },\n};\n\nconst RTL_LANGUAGES = new Set([\"ar\", \"fa\", \"he\", \"ur\"]);\n\nconst STEP_OF_TRANSLATIONS: Record<string, (current: number, total: number) => string> = {\n en: EN_TRANSLATIONS.stepOf,\n es: (current: number, total: number) => `Paso ${current} de ${total}`,\n fr: (current: number, total: number) => `Etape ${current} sur ${total}`,\n de: (current: number, total: number) => `Schritt ${current} von ${total}`,\n pt: (current: number, total: number) => `Etapa ${current} de ${total}`,\n \"zh-cn\": (current: number, total: number) => `第 ${current} / ${total} 步`,\n ja: (current: number, total: number) => `${total}中${current}番目`,\n ko: (current: number, total: number) => `${total}단계 중 ${current}단계`,\n ar: (current: number, total: number) => `الخطوة ${current} من ${total}`,\n hi: (current: number, total: number) => `${total} में से चरण ${current}`,\n};\n\nconst NEW_FEATURE_COUNT_TRANSLATIONS: Record<string, (count: number) => string> = {\n en: EN_TRANSLATIONS.newFeatureCount,\n es: (count: number) => (count === 0 ? \"Sin novedades\" : `${count} novedad${count === 1 ? \"\" : \"es\"}`),\n fr: (count: number) =>\n count === 0 ? \"Aucune nouveaute\" : `${count} nouveaute${count === 1 ? \"\" : \"s\"}`,\n de: (count: number) =>\n count === 0\n ? \"Keine neuen Features\"\n : `${count} ${count === 1 ? \"neues Feature\" : \"neue Features\"}`,\n pt: (count: number) =>\n count === 0 ? \"Sem novidades\" : `${count} novidade${count === 1 ? \"\" : \"s\"}`,\n \"zh-cn\": (count: number) => (count === 0 ? \"暂无更新\" : `${count} 条新更新`),\n ja: (count: number) => (count === 0 ? \"新着はありません\" : `新着 ${count} 件`),\n ko: (count: number) => (count === 0 ? \"새 소식 없음\" : `새 소식 ${count}개`),\n ar: (count: number) => {\n if (count === 0) return \"لا توجد ميزات جديدة\";\n const category = new Intl.PluralRules(\"ar\").select(count);\n if (category === \"one\") return \"ميزة جديدة واحدة\";\n if (category === \"two\") return \"ميزتان جديدتان\";\n return `${count} ميزات جديدة`;\n },\n hi: (count: number) =>\n count === 0 ? \"कोई नया अपडेट नहीं\" : `${count} ${count === 1 ? \"नया अपडेट\" : \"नए अपडेट\"}`,\n};\n\nexport function resolveLocale(locale?: string): string {\n const normalized = (locale ?? \"en\").toLowerCase();\n if (normalized === \"en\" || normalized.startsWith(\"en-\")) return \"en\";\n if (Object.prototype.hasOwnProperty.call(SIMPLE_TRANSLATIONS, normalized)) {\n return normalized;\n }\n const base = normalized.split(\"-\")[0];\n if (base === \"en\") return \"en\";\n if (Object.prototype.hasOwnProperty.call(SIMPLE_TRANSLATIONS, base)) {\n return base;\n }\n return \"en\";\n}\n\nexport function getLocaleDirection(locale?: string): \"ltr\" | \"rtl\" {\n const resolved = resolveLocale(locale);\n const base = resolved.split(\"-\")[0];\n return RTL_LANGUAGES.has(base) ? \"rtl\" : \"ltr\";\n}\n\nexport function formatDateForLocale(\n value: string | number | Date,\n locale?: string,\n options: Intl.DateTimeFormatOptions = {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n },\n): string {\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.getTime())) return \"\";\n const resolved = resolveLocale(locale);\n try {\n return new Intl.DateTimeFormat(resolved, options).format(date);\n } catch {\n return date.toLocaleDateString(undefined, options);\n }\n}\n\nexport function formatRelativeTimeForLocale(\n value: string | number | Date,\n locale?: string,\n options?: {\n now?: string | number | Date;\n numeric?: Intl.RelativeTimeFormatNumeric;\n style?: Intl.RelativeTimeFormatStyle;\n },\n): string {\n const target = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(target.getTime())) return \"\";\n const nowInput = options?.now;\n const nowDate =\n nowInput instanceof Date\n ? nowInput\n : typeof nowInput !== \"undefined\"\n ? new Date(nowInput)\n : new Date();\n if (Number.isNaN(nowDate.getTime())) return \"\";\n\n const diffMs = target.getTime() - nowDate.getTime();\n const absDiff = Math.abs(diffMs);\n const minute = 60_000;\n const hour = 60 * minute;\n const day = 24 * hour;\n const week = 7 * day;\n const month = 30 * day;\n const year = 365 * day;\n\n let unit: Intl.RelativeTimeFormatUnit = \"second\";\n let divisor = 1_000;\n if (absDiff >= year) {\n unit = \"year\";\n divisor = year;\n } else if (absDiff >= month) {\n unit = \"month\";\n divisor = month;\n } else if (absDiff >= week) {\n unit = \"week\";\n divisor = week;\n } else if (absDiff >= day) {\n unit = \"day\";\n divisor = day;\n } else if (absDiff >= hour) {\n unit = \"hour\";\n divisor = hour;\n } else if (absDiff >= minute) {\n unit = \"minute\";\n divisor = minute;\n }\n\n const relativeValue = Math.round(diffMs / divisor);\n const resolvedLocale = resolveLocale(locale);\n try {\n const formatter = new Intl.RelativeTimeFormat(resolvedLocale, {\n numeric: options?.numeric ?? \"auto\",\n style: options?.style ?? \"long\",\n });\n return formatter.format(relativeValue, unit);\n } catch {\n const fallback = formatDateForLocale(target, resolvedLocale);\n return fallback || target.toISOString();\n }\n}\n\nexport function resolveTranslations(\n locale?: string,\n overrides?: Partial<FeatureDropTranslations>,\n): FeatureDropTranslations {\n const resolvedLocale = resolveLocale(locale);\n const base = resolvedLocale === \"en\" ? {} : SIMPLE_TRANSLATIONS[resolvedLocale] ?? {};\n const stepOf =\n overrides?.stepOf ??\n STEP_OF_TRANSLATIONS[resolvedLocale] ??\n STEP_OF_TRANSLATIONS.en;\n const newFeatureCount =\n overrides?.newFeatureCount ??\n NEW_FEATURE_COUNT_TRANSLATIONS[resolvedLocale] ??\n NEW_FEATURE_COUNT_TRANSLATIONS.en;\n\n return {\n ...EN_TRANSLATIONS,\n ...base,\n ...(overrides ?? {}),\n stepOf,\n newFeatureCount,\n };\n}\n\nexport const FEATUREDROP_TRANSLATIONS = {\n en: EN_TRANSLATIONS,\n ...SIMPLE_TRANSLATIONS,\n} as const;\n","import type { FeatureEntry, FeatureManifest, FeatureVariant } from \"./types\";\n\nconst VARIANT_META_KEY = \"featuredropVariant\";\nconst VARIANT_KEY_STORAGE = \"featuredrop:variant-key\";\n\nfunction readStorageValue(key: string): string | null {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (storageKey: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return null;\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeStorageValue(key: string, value: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (storageKey: string, storageValue: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(key, value);\n } catch {\n // noop\n }\n}\n\nfunction hashToPercent(value: string): number {\n let hash = 2166136261;\n for (let i = 0; i < value.length; i += 1) {\n hash ^= value.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return (hash >>> 0) % 100;\n}\n\nfunction normalizeSplit(count: number, split?: number[]): number[] {\n if (!split || split.length !== count) {\n return Array.from({ length: count }, () => 100 / count);\n }\n const cleaned = split.map((value) => (Number.isFinite(value) && value > 0 ? value : 0));\n const total = cleaned.reduce((sum, value) => sum + value, 0);\n if (total <= 0) {\n return Array.from({ length: count }, () => 100 / count);\n }\n return cleaned.map((value) => (value / total) * 100);\n}\n\nfunction pickVariantName(feature: FeatureEntry, variantKey: string): string | null {\n const variants = feature.variants;\n if (!variants) return null;\n const names = Object.keys(variants);\n if (names.length === 0) return null;\n if (names.length === 1) return names[0];\n\n const split = normalizeSplit(names.length, feature.variantSplit);\n const bucket = hashToPercent(`${feature.id}:${variantKey}`);\n let cumulative = 0;\n for (let i = 0; i < names.length; i += 1) {\n cumulative += split[i];\n if (bucket < cumulative) return names[i];\n }\n return names[names.length - 1];\n}\n\nexport function getFeatureVariantName(feature: FeatureEntry): string | undefined {\n const raw = feature.meta?.[VARIANT_META_KEY];\n return typeof raw === \"string\" ? raw : undefined;\n}\n\nexport function applyFeatureVariant(\n feature: FeatureEntry,\n variantKey: string,\n): FeatureEntry {\n const variantName = pickVariantName(feature, variantKey);\n if (!variantName) return feature;\n const variant: FeatureVariant | undefined = feature.variants?.[variantName];\n if (!variant) return feature;\n\n return {\n ...feature,\n label: variant.label ?? feature.label,\n description: variant.description ?? feature.description,\n image: variant.image ?? feature.image,\n cta: variant.cta ?? feature.cta,\n meta: {\n ...(feature.meta ?? {}),\n ...(variant.meta ?? {}),\n [VARIANT_META_KEY]: variantName,\n },\n };\n}\n\nexport function applyFeatureVariants(\n manifest: FeatureManifest,\n variantKey: string,\n): FeatureEntry[] {\n return manifest.map((feature) => applyFeatureVariant(feature, variantKey));\n}\n\nfunction createRandomKey(): string {\n return Math.random().toString(36).slice(2, 12);\n}\n\nexport function getOrCreateVariantKey(explicitKey?: string): string {\n if (explicitKey) return explicitKey;\n const existing = readStorageValue(VARIANT_KEY_STORAGE);\n if (existing) return existing;\n const next = createRandomKey();\n writeStorageValue(VARIANT_KEY_STORAGE, next);\n return next;\n}\n","import { createContext } from \"react\";\nimport type { FeatureDropAnimationPreset, FeatureDropEngine, FeatureEntry, FeaturePriority } from \"../types\";\nimport type { AdoptionEventInput } from \"../analytics\";\nimport type { FeatureDropTranslations } from \"../i18n\";\n\nexport interface FeatureDropContextValue {\n /** Full manifest provided to the provider */\n manifest: FeatureEntry[] | readonly FeatureEntry[];\n /** All currently \"new\" features */\n newFeatures: FeatureEntry[];\n /** New features currently queued by throttling rules */\n queuedFeatures: FeatureEntry[];\n /** Count of new features */\n newCount: number;\n /** Count before throttling (all pending new features) */\n totalNewCount: number;\n /** All new features sorted by priority then release date */\n newFeaturesSorted: FeatureEntry[];\n /** Check if a sidebar key has any new features */\n isNew: (sidebarKey: string) => boolean;\n /** Dismiss a single feature by ID */\n dismiss: (id: string) => void;\n /** Dismiss all features (marks all as seen) */\n dismissAll: () => Promise<void>;\n /** Get the feature entry for a sidebar key (if it's new) */\n getFeature: (sidebarKey: string) => FeatureEntry | undefined;\n /** Whether quiet mode (Do Not Disturb) is enabled */\n quietMode: boolean;\n /** Enable/disable quiet mode */\n setQuietMode: (enabled: boolean) => void;\n /** Mark a feature as seen for dependency-chain resolution */\n markFeatureSeen: (featureId: string) => void;\n /** Mark a feature as clicked for dependency-chain resolution */\n markFeatureClicked: (featureId: string) => void;\n /** Remaining toasts allowed in this session under throttle rules */\n getRemainingToastSlots: () => number;\n /** Mark toasts as shown in this session */\n markToastsShown: (featureIds: string[]) => void;\n /** Whether a modal can open right now under throttle rules */\n canShowModal: (priority?: FeaturePriority) => boolean;\n /** Record a modal display timestamp */\n markModalShown: () => void;\n /** Whether a tour can start right now under throttle rules */\n canShowTour: () => boolean;\n /** Record a tour start timestamp */\n markTourShown: () => void;\n /** Acquire/release spotlight slots under maxSimultaneousSpotlights */\n acquireSpotlightSlot: (id: string, priority?: FeaturePriority) => boolean;\n releaseSpotlightSlot: (id: string) => void;\n /** Number of currently active spotlight slots */\n activeSpotlightCount: number;\n /** Emit an adoption analytics event (collector-backed when configured) */\n trackAdoptionEvent: (event: AdoptionEventInput) => void;\n /** Report a component/runtime error to provider-level monitoring hooks */\n reportError: (\n error: unknown,\n context?: { component?: string; componentStack?: string },\n ) => void;\n /** Active locale code used by built-in UI strings */\n locale: string;\n /** Text direction derived from locale */\n direction: \"ltr\" | \"rtl\";\n /** Active motion preset for built-in component transitions */\n animation: FeatureDropAnimationPreset;\n /** Resolved translation strings for built-in React components */\n translations: FeatureDropTranslations;\n /** Track a named usage event for trigger rules */\n trackUsageEvent: (event: string, delta?: number) => void;\n /** Track a named trigger event for trigger rules */\n trackTriggerEvent: (event: string) => void;\n /** Mark a milestone for trigger rules */\n trackMilestone: (event: string) => void;\n /** Manually override current path for page trigger rules */\n setTriggerPath: (path: string) => void;\n /** Optional engine instance for AI-powered delivery intelligence */\n engine: FeatureDropEngine | null;\n}\n\nexport const FeatureDropContext = createContext<FeatureDropContextValue | null>(\n null,\n);\n","import {\n useState,\n useCallback,\n useMemo,\n useRef,\n useEffect,\n type ReactNode,\n} from \"react\";\nimport type {\n AudienceMatchFn,\n AnalyticsCallbacks,\n FeatureDropAnimationPreset,\n FeatureDropEngine,\n FeatureFlagBridge,\n FeatureManifest,\n FeaturePriority,\n StorageAdapter,\n TriggerContext,\n UserContext,\n} from \"../types\";\nimport type { ThrottleOptions } from \"../throttle\";\nimport type { AdoptionEventInput, AnalyticsCollector } from \"../analytics\";\nimport { prefersReducedMotion, resolveAnimationPreset } from \"../animation\";\nimport { getNewFeatures } from \"../core\";\nimport { getFeatureById } from \"../helpers\";\nimport { applyAnnouncementThrottle } from \"../throttle\";\nimport { TriggerEngine } from \"../triggers\";\nimport {\n getLocaleDirection,\n resolveLocale,\n resolveTranslations,\n type FeatureDropTranslations,\n} from \"../i18n\";\nimport {\n applyFeatureVariants,\n getFeatureVariantName,\n getOrCreateVariantKey,\n} from \"../variants\";\nimport { FeatureDropContext } from \"./context\";\n\nconst QUIET_MODE_STORAGE_KEY = \"featuredrop:quiet-mode\";\nconst SEEN_FEATURES_STORAGE_KEY = \"featuredrop:seen-features\";\nconst CLICKED_FEATURES_STORAGE_KEY = \"featuredrop:clicked-features\";\n\nfunction getCurrentPath(): string {\n if (typeof window === \"undefined\") return \"\";\n return `${window.location.pathname}${window.location.search}${window.location.hash}`;\n}\n\nfunction getScrollPercent(): number {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return 0;\n const root = document.documentElement;\n const max = root.scrollHeight - window.innerHeight;\n if (max <= 0) return 100;\n return Math.max(0, Math.min(100, Math.round((window.scrollY / max) * 100)));\n}\n\nfunction readQuietMode(): boolean {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (key: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return false;\n try {\n return storage.getItem(QUIET_MODE_STORAGE_KEY) === \"1\";\n } catch {\n return false;\n }\n}\n\nfunction writeQuietMode(enabled: boolean): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (key: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(QUIET_MODE_STORAGE_KEY, enabled ? \"1\" : \"0\");\n } catch {\n // noop\n }\n}\n\nfunction readIdSet(key: string): Set<string> {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (storageKey: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return new Set<string>();\n try {\n const raw = storage.getItem(key);\n if (!raw) return new Set<string>();\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) return new Set<string>();\n return new Set(parsed.filter((value): value is string => typeof value === \"string\"));\n } catch {\n return new Set<string>();\n }\n}\n\nfunction writeIdSet(key: string, values: ReadonlySet<string>): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (storageKey: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(key, JSON.stringify(Array.from(values)));\n } catch {\n // noop\n }\n}\n\ninterface FeatureState {\n allFeatures: ReturnType<typeof getNewFeatures>;\n visibleFeatures: ReturnType<typeof getNewFeatures>;\n queuedFeatures: ReturnType<typeof getNewFeatures>;\n}\n\nfunction computeFeatureState({\n manifest,\n storage,\n now,\n userContext,\n matchAudience,\n appVersion,\n product,\n throttle,\n sessionStartedAt,\n quietMode,\n seenFeatureIds,\n clickedFeatureIds,\n triggerContext,\n flagBridge,\n}: {\n manifest: FeatureManifest;\n storage: StorageAdapter;\n now: Date;\n userContext?: UserContext;\n matchAudience?: AudienceMatchFn;\n appVersion?: string;\n product?: string;\n throttle?: ThrottleOptions;\n sessionStartedAt: number;\n quietMode: boolean;\n seenFeatureIds: ReadonlySet<string>;\n clickedFeatureIds: ReadonlySet<string>;\n triggerContext?: TriggerContext;\n flagBridge?: FeatureFlagBridge;\n}): FeatureState {\n const dismissedIds = storage.getDismissedIds();\n const allFeatures = getNewFeatures(\n manifest,\n storage,\n now,\n userContext,\n matchAudience,\n appVersion,\n {\n seenIds: seenFeatureIds,\n clickedIds: clickedFeatureIds,\n dismissedIds,\n },\n triggerContext,\n flagBridge,\n product,\n );\n\n const throttled = applyAnnouncementThrottle(\n allFeatures,\n throttle,\n {\n sessionStartedAt,\n quietMode,\n },\n now.getTime(),\n );\n\n return {\n allFeatures,\n visibleFeatures: throttled.visible,\n queuedFeatures: throttled.queued,\n };\n}\n\nexport interface FeatureDropProviderProps {\n /** The feature manifest — typically a frozen array of FeatureEntry objects */\n manifest: FeatureManifest;\n /** Storage adapter instance (e.g. LocalStorageAdapter, MemoryAdapter) */\n storage: StorageAdapter;\n /** Optional analytics callbacks — pipe to your analytics provider */\n analytics?: AnalyticsCallbacks;\n /** Optional error callback for monitoring caught component errors */\n onError?: (error: unknown, context?: { component?: string; componentStack?: string }) => void;\n /** User context for audience targeting (plan, role, region, traits) */\n userContext?: UserContext;\n /** Custom audience matcher — overrides default AND/OR matching logic */\n matchAudience?: AudienceMatchFn;\n /** Current app version (semver) for version-pinned features */\n appVersion?: string;\n /** Current product scope for multi-product manifests */\n product?: string;\n /** Announcement throttling and session cooldown controls */\n throttle?: ThrottleOptions;\n /** Stable identifier for A/B variant assignment (e.g. userId) */\n variantKey?: string;\n /** Optional adoption analytics collector */\n collector?: AnalyticsCollector;\n /** Feature flag bridge for evaluating `feature.flagKey` visibility */\n flagBridge?: FeatureFlagBridge;\n /** Locale code for built-in component translations (e.g. \"en\", \"fr\", \"es\") */\n locale?: string;\n /** Animation preset for built-in component transitions */\n animation?: FeatureDropAnimationPreset;\n /** Custom translation overrides for built-in component strings */\n translations?: Partial<FeatureDropTranslations>;\n /** Optional engine for AI-powered delivery intelligence (@featuredrop/engine) */\n engine?: FeatureDropEngine;\n children: ReactNode;\n}\n\n/**\n * Provides feature discovery state to the component tree.\n *\n * Wrap your app (or a subtree) with this provider to enable\n * `useFeatureDrop`, `useNewFeature`, `useNewCount`, and other hooks.\n */\nexport function FeatureDropProvider({\n manifest,\n storage,\n analytics,\n onError,\n userContext,\n matchAudience: matchAudienceFn,\n appVersion,\n product,\n throttle,\n variantKey,\n collector,\n flagBridge,\n locale = \"en\",\n animation = \"normal\",\n translations: translationOverrides,\n engine,\n children,\n}: FeatureDropProviderProps) {\n const analyticsRef = useRef(analytics);\n analyticsRef.current = analytics;\n\n const sessionStartedAtRef = useRef(Date.now());\n const lastModalAtRef = useRef<number | null>(null);\n const lastTourAtRef = useRef<number | null>(null);\n const activeSpotlightIdsRef = useRef(new Set<string>());\n const triggerEngineRef = useRef<TriggerEngine | null>(null);\n if (!triggerEngineRef.current) {\n triggerEngineRef.current = new TriggerEngine({\n path: getCurrentPath(),\n scrollPercent: getScrollPercent(),\n });\n }\n const lastScrollPercentRef = useRef<number>(getScrollPercent());\n const [triggerVersion, setTriggerVersion] = useState(0);\n const [quietMode, setQuietModeState] = useState(() => readQuietMode());\n const [toastShownIds, setToastShownIds] = useState<Set<string>>(new Set());\n const [activeSpotlightIds, setActiveSpotlightIds] = useState<Set<string>>(new Set());\n const [seenFeatureIds, setSeenFeatureIds] = useState<Set<string>>(\n () => readIdSet(SEEN_FEATURES_STORAGE_KEY),\n );\n const [clickedFeatureIds, setClickedFeatureIds] = useState<Set<string>>(\n () => readIdSet(CLICKED_FEATURES_STORAGE_KEY),\n );\n const resolvedVariantKey = useMemo(() => getOrCreateVariantKey(variantKey), [variantKey]);\n const resolvedLocale = useMemo(() => resolveLocale(locale), [locale]);\n const direction = useMemo(() => getLocaleDirection(resolvedLocale), [resolvedLocale]);\n const resolvedAnimation = useMemo(\n () => resolveAnimationPreset(animation, { reducedMotion: prefersReducedMotion() }),\n [animation],\n );\n const translations = useMemo(\n () => resolveTranslations(resolvedLocale, translationOverrides),\n [resolvedLocale, translationOverrides],\n );\n const resolvedManifest = useMemo(\n () => applyFeatureVariants(manifest, resolvedVariantKey),\n [manifest, resolvedVariantKey],\n );\n const [featureState, setFeatureState] = useState<FeatureState>(() =>\n computeFeatureState({\n manifest: resolvedManifest,\n storage,\n now: new Date(),\n userContext,\n matchAudience: matchAudienceFn,\n appVersion,\n product,\n throttle,\n sessionStartedAt: sessionStartedAtRef.current,\n quietMode: readQuietMode(),\n seenFeatureIds: readIdSet(SEEN_FEATURES_STORAGE_KEY),\n clickedFeatureIds: readIdSet(CLICKED_FEATURES_STORAGE_KEY),\n triggerContext: (() => {\n const engine = triggerEngineRef.current;\n if (!engine) return undefined;\n engine.setElapsedMs(Date.now() - sessionStartedAtRef.current);\n return engine.getContext();\n })(),\n flagBridge,\n }),\n );\n\n const recompute = useCallback(() => {\n const engine = triggerEngineRef.current;\n let triggerContext: TriggerContext | undefined;\n if (engine) {\n engine.setElapsedMs(Date.now() - sessionStartedAtRef.current);\n triggerContext = engine.getContext();\n }\n\n setFeatureState(\n computeFeatureState({\n manifest: resolvedManifest,\n storage,\n now: new Date(),\n userContext,\n matchAudience: matchAudienceFn,\n appVersion,\n product,\n throttle,\n sessionStartedAt: sessionStartedAtRef.current,\n quietMode,\n seenFeatureIds,\n clickedFeatureIds,\n triggerContext,\n flagBridge,\n }),\n );\n }, [\n resolvedManifest,\n storage,\n userContext,\n matchAudienceFn,\n appVersion,\n product,\n throttle,\n quietMode,\n seenFeatureIds,\n clickedFeatureIds,\n triggerVersion,\n flagBridge,\n ]);\n\n useEffect(() => {\n recompute();\n }, [recompute]);\n\n // Engine lifecycle — initialize on mount, destroy on unmount\n useEffect(() => {\n engine?.initialize?.();\n return () => {\n engine?.destroy?.();\n };\n }, [engine]);\n\n const hasTimeTriggers = useMemo(\n () => resolvedManifest.some((feature) => feature.trigger?.type === \"time\"),\n [resolvedManifest],\n );\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const updatePath = () => {\n triggerEngineRef.current?.setPath(getCurrentPath());\n setTriggerVersion((value) => value + 1);\n };\n window.addEventListener(\"popstate\", updatePath);\n window.addEventListener(\"hashchange\", updatePath);\n return () => {\n window.removeEventListener(\"popstate\", updatePath);\n window.removeEventListener(\"hashchange\", updatePath);\n };\n }, []);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const updateScroll = () => {\n const percent = getScrollPercent();\n if (percent === lastScrollPercentRef.current) return;\n lastScrollPercentRef.current = percent;\n triggerEngineRef.current?.setScrollPercent(percent);\n setTriggerVersion((value) => value + 1);\n };\n updateScroll();\n window.addEventListener(\"scroll\", updateScroll, { passive: true });\n window.addEventListener(\"resize\", updateScroll);\n return () => {\n window.removeEventListener(\"scroll\", updateScroll);\n window.removeEventListener(\"resize\", updateScroll);\n };\n }, []);\n\n useEffect(() => {\n if (!hasTimeTriggers) return;\n const timer = setInterval(() => {\n setTriggerVersion((value) => value + 1);\n }, 1000);\n return () => {\n clearInterval(timer);\n };\n }, [hasTimeTriggers]);\n\n useEffect(() => {\n const sessionCooldown = throttle?.sessionCooldown;\n if (!sessionCooldown || sessionCooldown <= 0) return;\n const elapsed = Date.now() - sessionStartedAtRef.current;\n const remaining = sessionCooldown - elapsed;\n if (remaining <= 0) return;\n const timer = setTimeout(() => {\n recompute();\n }, remaining + 5);\n return () => clearTimeout(timer);\n }, [recompute, throttle?.sessionCooldown]);\n\n useEffect(() => {\n let changed = false;\n const next = new Set(seenFeatureIds);\n for (const feature of featureState.visibleFeatures) {\n if (next.has(feature.id)) continue;\n next.add(feature.id);\n changed = true;\n }\n if (!changed) return;\n setSeenFeatureIds(next);\n writeIdSet(SEEN_FEATURES_STORAGE_KEY, next);\n }, [featureState.visibleFeatures, seenFeatureIds]);\n\n const dismiss = useCallback(\n (id: string) => {\n const feature = getFeatureById(resolvedManifest, id);\n storage.dismiss(id);\n if (feature) {\n analyticsRef.current?.onFeatureDismissed?.(feature);\n }\n collector?.track({\n type: \"feature_dismissed\",\n featureId: id,\n variant: feature ? getFeatureVariantName(feature) : undefined,\n });\n recompute();\n },\n [collector, resolvedManifest, storage, recompute],\n );\n\n const dismissAll = useCallback(async () => {\n await storage.dismissAll(new Date());\n analyticsRef.current?.onAllDismissed?.();\n recompute();\n }, [recompute, storage]);\n\n const inSessionCooldown = useCallback((now: number): boolean => {\n const sessionCooldown = throttle?.sessionCooldown ?? 0;\n if (!sessionCooldown || sessionCooldown <= 0) return false;\n return now - sessionStartedAtRef.current < sessionCooldown;\n }, [throttle?.sessionCooldown]);\n\n const shouldSuppressForQuietMode = useCallback((priority?: FeaturePriority): boolean => {\n if (!throttle?.respectDoNotDisturb || !quietMode) return false;\n return priority !== \"critical\";\n }, [quietMode, throttle?.respectDoNotDisturb]);\n\n const getRemainingToastSlots = useCallback((): number => {\n const maxToastsPerSession = throttle?.maxToastsPerSession;\n if (!maxToastsPerSession || maxToastsPerSession <= 0) return Number.POSITIVE_INFINITY;\n return Math.max(0, maxToastsPerSession - toastShownIds.size);\n }, [throttle?.maxToastsPerSession, toastShownIds.size]);\n\n const markToastsShown = useCallback((featureIds: string[]) => {\n if (featureIds.length === 0) return;\n setToastShownIds((previous) => {\n let changed = false;\n const next = new Set(previous);\n for (const id of featureIds) {\n if (!id || next.has(id)) continue;\n next.add(id);\n changed = true;\n }\n return changed ? next : previous;\n });\n }, []);\n\n const canShowModal = useCallback((priority?: FeaturePriority): boolean => {\n const now = Date.now();\n if (inSessionCooldown(now)) return false;\n if (shouldSuppressForQuietMode(priority)) return false;\n const minTime = throttle?.minTimeBetweenModals ?? 0;\n const lastShown = lastModalAtRef.current;\n if (minTime > 0 && lastShown && now - lastShown < minTime) return false;\n return true;\n }, [inSessionCooldown, shouldSuppressForQuietMode, throttle?.minTimeBetweenModals]);\n\n const markModalShown = useCallback(() => {\n lastModalAtRef.current = Date.now();\n }, []);\n\n const canShowTour = useCallback((): boolean => {\n const now = Date.now();\n if (inSessionCooldown(now)) return false;\n if (shouldSuppressForQuietMode(undefined)) return false;\n const minTime = throttle?.minTimeBetweenTours ?? 0;\n const lastShown = lastTourAtRef.current;\n if (minTime > 0 && lastShown && now - lastShown < minTime) return false;\n return true;\n }, [inSessionCooldown, shouldSuppressForQuietMode, throttle?.minTimeBetweenTours]);\n\n const markTourShown = useCallback(() => {\n lastTourAtRef.current = Date.now();\n }, []);\n\n const acquireSpotlightSlot = useCallback((id: string, priority?: FeaturePriority): boolean => {\n if (!id) return false;\n if (shouldSuppressForQuietMode(priority)) return false;\n const current = activeSpotlightIdsRef.current;\n if (current.has(id)) return true;\n const maxSpotlights = throttle?.maxSimultaneousSpotlights;\n if (maxSpotlights && maxSpotlights > 0 && current.size >= maxSpotlights) return false;\n const next = new Set(current);\n next.add(id);\n activeSpotlightIdsRef.current = next;\n setActiveSpotlightIds(next);\n return true;\n }, [shouldSuppressForQuietMode, throttle?.maxSimultaneousSpotlights]);\n\n const releaseSpotlightSlot = useCallback((id: string) => {\n if (!id) return;\n const current = activeSpotlightIdsRef.current;\n if (!current.has(id)) return;\n const next = new Set(current);\n next.delete(id);\n activeSpotlightIdsRef.current = next;\n setActiveSpotlightIds(next);\n }, []);\n\n const setQuietMode = useCallback((enabled: boolean) => {\n setQuietModeState(enabled);\n writeQuietMode(enabled);\n }, []);\n\n const markFeatureSeen = useCallback((featureId: string) => {\n setSeenFeatureIds((previous) => {\n if (previous.has(featureId)) return previous;\n const next = new Set(previous);\n next.add(featureId);\n writeIdSet(SEEN_FEATURES_STORAGE_KEY, next);\n const feature = getFeatureById(resolvedManifest, featureId);\n collector?.track({\n type: \"feature_seen\",\n featureId,\n variant: feature ? getFeatureVariantName(feature) : undefined,\n });\n return next;\n });\n }, [collector, resolvedManifest]);\n\n const markFeatureClicked = useCallback((featureId: string) => {\n setClickedFeatureIds((previous) => {\n if (previous.has(featureId)) return previous;\n const next = new Set(previous);\n next.add(featureId);\n writeIdSet(CLICKED_FEATURES_STORAGE_KEY, next);\n const feature = getFeatureById(resolvedManifest, featureId);\n collector?.track({\n type: \"feature_clicked\",\n featureId,\n variant: feature ? getFeatureVariantName(feature) : undefined,\n });\n return next;\n });\n }, [collector, resolvedManifest]);\n\n const trackAdoptionEvent = useCallback((event: AdoptionEventInput) => {\n if (!collector) return;\n const feature = event.featureId ? getFeatureById(resolvedManifest, event.featureId) : undefined;\n collector.track({\n ...event,\n variant: event.variant ?? (feature ? getFeatureVariantName(feature) : undefined),\n });\n }, [collector, resolvedManifest]);\n\n const reportError = useCallback(\n (error: unknown, context?: { component?: string; componentStack?: string }) => {\n onError?.(error, context);\n if (typeof process !== \"undefined\" && process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"[featuredrop] component error\", context?.component, error);\n }\n },\n [onError],\n );\n\n const trackUsageEvent = useCallback((event: string, delta = 1) => {\n if (!event) return;\n triggerEngineRef.current?.trackUsage(event, delta);\n setTriggerVersion((value) => value + 1);\n }, []);\n\n const trackTriggerEvent = useCallback((event: string) => {\n if (!event) return;\n triggerEngineRef.current?.trackEvent(event);\n setTriggerVersion((value) => value + 1);\n }, []);\n\n const trackMilestone = useCallback((event: string) => {\n if (!event) return;\n triggerEngineRef.current?.trackMilestone(event);\n setTriggerVersion((value) => value + 1);\n }, []);\n\n const setTriggerPath = useCallback((path: string) => {\n if (!path) return;\n triggerEngineRef.current?.setPath(path);\n setTriggerVersion((value) => value + 1);\n }, []);\n\n const isNewFn = useCallback(\n (sidebarKey: string) =>\n featureState.visibleFeatures.some((feature) => feature.sidebarKey === sidebarKey),\n [featureState.visibleFeatures],\n );\n\n const getFeature = useCallback(\n (sidebarKey: string) =>\n featureState.visibleFeatures.find((feature) => feature.sidebarKey === sidebarKey),\n [featureState.visibleFeatures],\n );\n\n const newFeaturesSorted = useMemo(() => {\n const priorityOrder = { critical: 0, normal: 1, low: 2 };\n return [...featureState.visibleFeatures].sort((a, b) => {\n const pa = priorityOrder[a.priority ?? \"normal\"];\n const pb = priorityOrder[b.priority ?? \"normal\"];\n if (pa !== pb) return pa - pb;\n return new Date(b.releasedAt).getTime() - new Date(a.releasedAt).getTime();\n });\n }, [featureState.visibleFeatures]);\n\n const value = useMemo(\n () => ({\n manifest: resolvedManifest,\n newFeatures: featureState.visibleFeatures,\n queuedFeatures: featureState.queuedFeatures,\n newCount: featureState.visibleFeatures.length,\n totalNewCount: featureState.allFeatures.length,\n newFeaturesSorted,\n isNew: isNewFn,\n dismiss,\n dismissAll,\n getFeature,\n quietMode,\n setQuietMode,\n markFeatureSeen,\n markFeatureClicked,\n getRemainingToastSlots,\n markToastsShown,\n canShowModal,\n markModalShown,\n canShowTour,\n markTourShown,\n acquireSpotlightSlot,\n releaseSpotlightSlot,\n activeSpotlightCount: activeSpotlightIds.size,\n trackAdoptionEvent,\n reportError,\n locale: resolvedLocale,\n direction,\n animation: resolvedAnimation,\n translations,\n trackUsageEvent,\n trackTriggerEvent,\n trackMilestone,\n setTriggerPath,\n engine: engine ?? null,\n }),\n [\n resolvedManifest,\n featureState.visibleFeatures,\n featureState.queuedFeatures,\n featureState.allFeatures.length,\n newFeaturesSorted,\n isNewFn,\n dismiss,\n dismissAll,\n getFeature,\n quietMode,\n setQuietMode,\n markFeatureSeen,\n markFeatureClicked,\n getRemainingToastSlots,\n markToastsShown,\n canShowModal,\n markModalShown,\n canShowTour,\n markTourShown,\n acquireSpotlightSlot,\n releaseSpotlightSlot,\n activeSpotlightIds.size,\n trackAdoptionEvent,\n reportError,\n resolvedLocale,\n direction,\n resolvedAnimation,\n translations,\n trackUsageEvent,\n trackTriggerEvent,\n trackMilestone,\n setTriggerPath,\n engine,\n ],\n );\n\n return (\n <FeatureDropContext.Provider value={value}>\n {children}\n </FeatureDropContext.Provider>\n );\n}\n","export interface FeatureDropTheme {\n colors: {\n primary: string;\n background: string;\n text: string;\n textMuted: string;\n border: string;\n success: string;\n warning: string;\n error: string;\n };\n fonts: {\n family: string;\n sizeBase: string;\n sizeSm: string;\n sizeLg: string;\n };\n spacing: {\n xs: string;\n sm: string;\n md: string;\n lg: string;\n xl: string;\n };\n radii: {\n sm: string;\n md: string;\n lg: string;\n full: string;\n };\n shadows: {\n sm: string;\n md: string;\n lg: string;\n };\n zIndex: {\n base: number;\n tooltip: number;\n modal: number;\n overlay: number;\n };\n}\n\nexport type FeatureDropThemePreset = \"light\" | \"dark\" | \"auto\" | \"minimal\" | \"vibrant\";\n\nexport type FeatureDropThemeOverrides = {\n [K in keyof FeatureDropTheme]?: Partial<FeatureDropTheme[K]>;\n};\n\nexport type FeatureDropThemeInput =\n | FeatureDropThemePreset\n | FeatureDropThemeOverrides\n | FeatureDropTheme;\n\nconst LIGHT_THEME: FeatureDropTheme = {\n colors: {\n primary: \"#2563eb\",\n background: \"#ffffff\",\n text: \"#111827\",\n textMuted: \"#6b7280\",\n border: \"#e5e7eb\",\n success: \"#16a34a\",\n warning: \"#f59e0b\",\n error: \"#dc2626\",\n },\n fonts: {\n family: \"system-ui, -apple-system, Segoe UI, sans-serif\",\n sizeBase: \"14px\",\n sizeSm: \"12px\",\n sizeLg: \"16px\",\n },\n spacing: {\n xs: \"4px\",\n sm: \"8px\",\n md: \"12px\",\n lg: \"16px\",\n xl: \"24px\",\n },\n radii: {\n sm: \"6px\",\n md: \"8px\",\n lg: \"12px\",\n full: \"999px\",\n },\n shadows: {\n sm: \"0 2px 8px rgba(0, 0, 0, 0.08)\",\n md: \"0 8px 24px rgba(0, 0, 0, 0.12)\",\n lg: \"0 20px 60px rgba(0, 0, 0, 0.16)\",\n },\n zIndex: {\n base: 9998,\n tooltip: 10000,\n modal: 10001,\n overlay: 9997,\n },\n};\n\nconst DARK_THEME: FeatureDropTheme = {\n ...LIGHT_THEME,\n colors: {\n primary: \"#60a5fa\",\n background: \"#0b1220\",\n text: \"#f3f4f6\",\n textMuted: \"#9ca3af\",\n border: \"#1f2937\",\n success: \"#4ade80\",\n warning: \"#fbbf24\",\n error: \"#f87171\",\n },\n shadows: {\n sm: \"0 2px 8px rgba(0, 0, 0, 0.35)\",\n md: \"0 8px 24px rgba(0, 0, 0, 0.42)\",\n lg: \"0 20px 60px rgba(0, 0, 0, 0.52)\",\n },\n};\n\nconst MINIMAL_THEME: FeatureDropTheme = {\n ...LIGHT_THEME,\n colors: {\n ...LIGHT_THEME.colors,\n primary: \"#111827\",\n background: \"#ffffff\",\n text: \"#111827\",\n textMuted: \"#6b7280\",\n border: \"#d1d5db\",\n success: \"#111827\",\n warning: \"#111827\",\n error: \"#111827\",\n },\n shadows: {\n sm: \"none\",\n md: \"none\",\n lg: \"none\",\n },\n radii: {\n sm: \"0\",\n md: \"0\",\n lg: \"0\",\n full: \"0\",\n },\n};\n\nconst VIBRANT_THEME: FeatureDropTheme = {\n ...LIGHT_THEME,\n colors: {\n primary: \"#ec4899\",\n background: \"#fff7ed\",\n text: \"#3f1d57\",\n textMuted: \"#6d4c84\",\n border: \"#fdba74\",\n success: \"#10b981\",\n warning: \"#f59e0b\",\n error: \"#ef4444\",\n },\n shadows: {\n sm: \"0 2px 10px rgba(236, 72, 153, 0.15)\",\n md: \"0 10px 26px rgba(236, 72, 153, 0.22)\",\n lg: \"0 22px 58px rgba(236, 72, 153, 0.28)\",\n },\n};\n\nexport const FEATUREDROP_THEMES = {\n light: LIGHT_THEME,\n dark: DARK_THEME,\n minimal: MINIMAL_THEME,\n vibrant: VIBRANT_THEME,\n} as const;\n\nfunction isThemePreset(value: unknown): value is FeatureDropThemePreset {\n return (\n value === \"light\" ||\n value === \"dark\" ||\n value === \"auto\" ||\n value === \"minimal\" ||\n value === \"vibrant\"\n );\n}\n\nfunction mergeTheme(base: FeatureDropTheme, overrides?: FeatureDropThemeOverrides): FeatureDropTheme {\n if (!overrides) return base;\n return {\n colors: {\n ...base.colors,\n ...(overrides.colors ?? {}),\n },\n fonts: {\n ...base.fonts,\n ...(overrides.fonts ?? {}),\n },\n spacing: {\n ...base.spacing,\n ...(overrides.spacing ?? {}),\n },\n radii: {\n ...base.radii,\n ...(overrides.radii ?? {}),\n },\n shadows: {\n ...base.shadows,\n ...(overrides.shadows ?? {}),\n },\n zIndex: {\n ...base.zIndex,\n ...(overrides.zIndex ?? {}),\n },\n };\n}\n\nexport function createTheme(overrides: FeatureDropThemeOverrides, base: FeatureDropTheme = LIGHT_THEME): FeatureDropTheme {\n return mergeTheme(base, overrides);\n}\n\nexport function resolveTheme(\n input: FeatureDropThemeInput = \"light\",\n options: { prefersDark?: boolean } = {},\n): FeatureDropTheme {\n if (isThemePreset(input)) {\n if (input === \"auto\") {\n return options.prefersDark ? DARK_THEME : LIGHT_THEME;\n }\n return FEATUREDROP_THEMES[input];\n }\n return mergeTheme(LIGHT_THEME, input);\n}\n\nfunction applyThemeSection(\n vars: Record<string, string | number>,\n key: string,\n values: Record<string, string | number>,\n): void {\n for (const [token, value] of Object.entries(values)) {\n vars[`--featuredrop-${key}-${token}`] = value;\n }\n}\n\nexport function themeToCSSVariables(theme: FeatureDropTheme): Record<string, string | number> {\n const vars: Record<string, string | number> = {};\n\n applyThemeSection(vars, \"color\", theme.colors);\n applyThemeSection(vars, \"font\", theme.fonts);\n applyThemeSection(vars, \"space\", theme.spacing);\n applyThemeSection(vars, \"radius\", theme.radii);\n applyThemeSection(vars, \"shadow\", theme.shadows);\n applyThemeSection(vars, \"z\", theme.zIndex as Record<string, number>);\n\n vars[\"--featuredrop-font-family\"] = theme.fonts.family;\n vars[\"--featuredrop-widget-bg\"] = theme.colors.background;\n vars[\"--featuredrop-trigger-bg\"] = theme.colors.background;\n vars[\"--featuredrop-trigger-color\"] = theme.colors.text;\n vars[\"--featuredrop-entry-title-color\"] = theme.colors.text;\n vars[\"--featuredrop-entry-desc-color\"] = theme.colors.textMuted;\n vars[\"--featuredrop-title-color\"] = theme.colors.text;\n vars[\"--featuredrop-border-color\"] = theme.colors.border;\n vars[\"--featuredrop-cta-bg\"] = theme.colors.primary;\n vars[\"--featuredrop-cta-color\"] = theme.colors.background;\n vars[\"--featuredrop-mark-all-color\"] = theme.colors.primary;\n vars[\"--featuredrop-widget-shadow\"] = theme.shadows.md;\n vars[\"--featuredrop-widget-radius\"] = theme.radii.lg;\n vars[\"--featuredrop-trigger-radius\"] = theme.radii.md;\n vars[\"--featuredrop-badge-bg\"] = theme.colors.warning;\n vars[\"--featuredrop-z-index\"] = theme.zIndex.base;\n vars[\"--featuredrop-toast-z-index\"] = theme.zIndex.tooltip;\n vars[\"--featuredrop-tour-z-index\"] = theme.zIndex.modal;\n vars[\"--featuredrop-tour-overlay-z-index\"] = theme.zIndex.overlay;\n\n return vars;\n}\n","import { useEffect, useMemo, useState, type CSSProperties } from \"react\";\nimport {\n resolveTheme,\n themeToCSSVariables,\n type FeatureDropThemeInput,\n} from \"../theme\";\n\nconst PREFERS_DARK_MEDIA_QUERY = \"(prefers-color-scheme: dark)\";\n\nfunction getPrefersDarkFromSystem(): boolean {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return false;\n }\n return window.matchMedia(PREFERS_DARK_MEDIA_QUERY).matches;\n}\n\nfunction usePrefersDark(shouldTrack: boolean): boolean {\n const [prefersDark, setPrefersDark] = useState<boolean>(() => getPrefersDarkFromSystem());\n\n useEffect(() => {\n if (!shouldTrack || typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return;\n }\n\n const mediaQuery = window.matchMedia(PREFERS_DARK_MEDIA_QUERY);\n setPrefersDark(mediaQuery.matches);\n\n const handleChange = (event: MediaQueryListEvent) => {\n setPrefersDark(event.matches);\n };\n\n if (typeof mediaQuery.addEventListener === \"function\") {\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }\n\n mediaQuery.addListener(handleChange);\n return () => mediaQuery.removeListener(handleChange);\n }, [shouldTrack]);\n\n if (!shouldTrack) {\n return getPrefersDarkFromSystem();\n }\n\n return prefersDark;\n}\n\nexport function useThemeVariables(theme?: FeatureDropThemeInput): CSSProperties | undefined {\n const prefersDark = usePrefersDark(theme === \"auto\");\n\n return useMemo(() => {\n if (!theme) return undefined;\n return themeToCSSVariables(resolveTheme(theme, { prefersDark })) as CSSProperties;\n }, [theme, prefersDark]);\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport type { FeatureDropThemeInput } from \"../../theme\";\nimport { useThemeVariables } from \"../theme\";\n\nexport interface ThemeProviderProps {\n /** Theme preset (\"light\" | \"dark\" | \"auto\" | \"minimal\" | \"vibrant\") or custom theme overrides */\n theme?: FeatureDropThemeInput;\n /** Optional CSS class for the wrapper element */\n className?: string;\n /** Optional inline style merged after theme CSS variables */\n style?: CSSProperties;\n children: ReactNode;\n}\n\n/**\n * Applies FeatureDrop theme tokens as CSS custom properties to a subtree.\n *\n * All featuredrop components inside this provider inherit the resolved theme.\n */\nexport function ThemeProvider({\n theme = \"light\",\n className,\n style,\n children,\n}: ThemeProviderProps) {\n const themeVariables = useThemeVariables(theme);\n\n return (\n <div\n data-featuredrop-theme-provider\n className={className}\n style={{ ...themeVariables, ...style }}\n >\n {children}\n </div>\n );\n}\n","import { useContext } from \"react\";\nimport { FeatureDropContext } from \"../context\";\nimport type { FeatureDropContextValue } from \"../context\";\n\n/**\n * Access the full feature discovery context.\n *\n * Returns: `{ newFeatures, newCount, isNew, dismiss, dismissAll, getFeature }`\n *\n * @throws Error if used outside of `<FeatureDropProvider>`\n */\nexport function useFeatureDrop(): FeatureDropContextValue {\n const context = useContext(FeatureDropContext);\n if (!context) {\n throw new Error(\n \"useFeatureDrop must be used within a <FeatureDropProvider>\",\n );\n }\n return context;\n}\n","import { useFeatureDrop } from \"./use-feature-drop\";\nimport type { FeatureEntry } from \"../../types\";\n\nexport interface UseNewFeatureResult {\n /** Whether this sidebar key has a new feature */\n isNew: boolean;\n /** The feature entry, if new */\n feature: FeatureEntry | undefined;\n /** Dismiss the feature for this sidebar key */\n dismiss: () => void;\n}\n\n/**\n * Check if a single navigation item has a new feature.\n *\n * @param sidebarKey - The key to check (e.g. \"/journal\", \"settings\")\n * @returns `{ isNew, feature, dismiss }`\n */\nexport function useNewFeature(sidebarKey: string): UseNewFeatureResult {\n const { isNew, getFeature, dismiss } = useFeatureDrop();\n\n const feature = getFeature(sidebarKey);\n const isNewValue = isNew(sidebarKey);\n\n return {\n isNew: isNewValue,\n feature,\n dismiss: () => {\n if (feature) {\n dismiss(feature.id);\n }\n },\n };\n}\n","import { useFeatureDrop } from \"./use-feature-drop\";\n\n/**\n * Get the count of currently new features.\n *\n * Useful for rendering a badge count on a \"What's New\" button.\n *\n * @returns The number of new features\n */\nexport function useNewCount(): number {\n const { newCount } = useFeatureDrop();\n return newCount;\n}\n","import { useEffect, useRef } from \"react\";\nimport { useFeatureDrop } from \"./use-feature-drop\";\n\nexport interface UseTabNotificationOptions {\n /** Whether tab notifications are enabled. Default: true */\n enabled?: boolean;\n /** Template string. `{count}` is replaced with the number. Default: \"({count}) {title}\" */\n template?: string;\n /** Enable flashing/blinking pattern for attention. Default: false */\n flash?: boolean;\n /** Flash interval in ms. Default: 1500 */\n flashInterval?: number;\n}\n\n/**\n * Updates the browser tab title with the unread feature count.\n *\n * Shows \"(3) My App\" when there are new features, restores the original\n * title when all features are read. Optional flash/blink pattern for attention.\n *\n * @example\n * ```tsx\n * function App() {\n * useTabNotification();\n * return <div>...</div>;\n * }\n * ```\n *\n * @example With flash\n * ```tsx\n * useTabNotification({ flash: true, template: \"[{count} new] {title}\" });\n * ```\n */\nexport function useTabNotification(options: UseTabNotificationOptions = {}): void {\n const {\n enabled = true,\n template = \"({count}) {title}\",\n flash = false,\n flashInterval = 1500,\n } = options;\n\n const { newCount } = useFeatureDrop();\n const originalTitleRef = useRef<string>(\"\");\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n\n // Capture original title once\n if (!originalTitleRef.current) {\n originalTitleRef.current = document.title;\n }\n const originalTitle = originalTitleRef.current;\n\n if (!enabled || newCount === 0) {\n // Restore original title\n document.title = originalTitle;\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n return;\n }\n\n const notificationTitle = template\n .replace(\"{count}\", String(newCount))\n .replace(\"{title}\", originalTitle);\n\n if (flash) {\n // Alternate between notification and original title\n let showNotification = true;\n document.title = notificationTitle;\n intervalRef.current = setInterval(() => {\n showNotification = !showNotification;\n document.title = showNotification ? notificationTitle : originalTitle;\n }, flashInterval);\n } else {\n document.title = notificationTitle;\n }\n\n return () => {\n document.title = originalTitle;\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n };\n }, [enabled, newCount, template, flash, flashInterval]);\n}\n","export type AdoptionEventType =\n | \"feature_seen\"\n | \"feature_clicked\"\n | \"feature_dismissed\"\n | \"tour_started\"\n | \"tour_completed\"\n | \"tour_skipped\"\n | \"checklist_task_completed\"\n | \"checklist_completed\"\n | \"survey_submitted\"\n | \"feedback_submitted\"\n | \"announcement_shown\"\n | \"cta_clicked\";\n\nexport interface AdoptionEvent {\n type: AdoptionEventType;\n featureId?: string;\n tourId?: string;\n variant?: string;\n timestamp: string;\n sessionId?: string;\n userId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport type AdoptionEventInput = Omit<AdoptionEvent, \"timestamp\"> & {\n timestamp?: string;\n};\n\nexport interface AnalyticsAdapter {\n track: (event: AdoptionEvent) => void | Promise<void>;\n trackBatch?: (events: AdoptionEvent[]) => void | Promise<void>;\n}\n\nexport interface AnalyticsCollectorOptions {\n adapter: AnalyticsAdapter;\n batchSize?: number;\n flushInterval?: number;\n sampleRate?: number;\n enabled?: boolean;\n sessionId?: string;\n userId?: string;\n now?: () => Date;\n random?: () => number;\n}\n\nexport class AnalyticsCollector {\n private adapter: AnalyticsAdapter;\n private queue: AdoptionEvent[] = [];\n private batchSize: number;\n private flushInterval: number;\n private sampleRate: number;\n private enabled: boolean;\n private now: () => Date;\n private random: () => number;\n private sessionId?: string;\n private userId?: string;\n private timer: ReturnType<typeof setInterval> | null = null;\n private flushing = false;\n\n constructor(options: AnalyticsCollectorOptions) {\n this.adapter = options.adapter;\n this.batchSize = options.batchSize ?? 20;\n this.flushInterval = options.flushInterval ?? 10_000;\n this.sampleRate = options.sampleRate ?? 1;\n this.enabled = options.enabled ?? true;\n this.sessionId = options.sessionId;\n this.userId = options.userId;\n this.now = options.now ?? (() => new Date());\n this.random = options.random ?? Math.random;\n this.startTimer();\n }\n\n setEnabled(enabled: boolean): void {\n this.enabled = enabled;\n }\n\n setContext(context: { sessionId?: string; userId?: string }): void {\n if (context.sessionId !== undefined) this.sessionId = context.sessionId;\n if (context.userId !== undefined) this.userId = context.userId;\n }\n\n getQueueSize(): number {\n return this.queue.length;\n }\n\n track(event: AdoptionEventInput): void {\n if (!this.enabled) return;\n if (this.sampleRate < 1 && this.random() > this.sampleRate) return;\n const normalized: AdoptionEvent = {\n ...event,\n timestamp: event.timestamp ?? this.now().toISOString(),\n sessionId: event.sessionId ?? this.sessionId,\n userId: event.userId ?? this.userId,\n };\n this.queue.push(normalized);\n if (this.queue.length >= this.batchSize) {\n void this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.flushing) return;\n if (this.queue.length === 0) return;\n this.flushing = true;\n const batch = this.queue.splice(0, this.queue.length);\n try {\n if (this.adapter.trackBatch) {\n await this.adapter.trackBatch(batch);\n } else {\n for (const event of batch) {\n await this.adapter.track(event);\n }\n }\n } catch {\n // Requeue on transient failures.\n this.queue = [...batch, ...this.queue];\n } finally {\n this.flushing = false;\n }\n }\n\n async destroy(): Promise<void> {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n await this.flush();\n }\n\n private startTimer(): void {\n if (this.flushInterval <= 0) return;\n this.timer = setInterval(() => {\n void this.flush();\n }, this.flushInterval);\n }\n}\n\nexport class PostHogAdapter implements AnalyticsAdapter {\n constructor(\n private readonly client: {\n capture: (event: string, properties?: Record<string, unknown>) => void;\n },\n ) {}\n\n track(event: AdoptionEvent): void {\n this.client.capture(event.type, {\n featureId: event.featureId,\n tourId: event.tourId,\n variant: event.variant,\n timestamp: event.timestamp,\n sessionId: event.sessionId,\n userId: event.userId,\n ...event.metadata,\n });\n }\n}\n\nexport class AmplitudeAdapter implements AnalyticsAdapter {\n constructor(\n private readonly client: {\n track: (event: string, properties?: Record<string, unknown>) => void;\n },\n ) {}\n\n track(event: AdoptionEvent): void {\n this.client.track(event.type, {\n featureId: event.featureId,\n tourId: event.tourId,\n variant: event.variant,\n timestamp: event.timestamp,\n sessionId: event.sessionId,\n userId: event.userId,\n ...event.metadata,\n });\n }\n}\n\nexport class MixpanelAdapter implements AnalyticsAdapter {\n constructor(\n private readonly client: {\n track: (event: string, properties?: Record<string, unknown>) => void;\n },\n ) {}\n\n track(event: AdoptionEvent): void {\n this.client.track(event.type, {\n featureId: event.featureId,\n tourId: event.tourId,\n variant: event.variant,\n timestamp: event.timestamp,\n sessionId: event.sessionId,\n userId: event.userId,\n ...event.metadata,\n });\n }\n}\n\nexport class SegmentAdapter implements AnalyticsAdapter {\n constructor(\n private readonly client: {\n track: (event: string, properties?: Record<string, unknown>) => void;\n },\n ) {}\n\n track(event: AdoptionEvent): void {\n this.client.track(event.type, {\n featureId: event.featureId,\n tourId: event.tourId,\n variant: event.variant,\n timestamp: event.timestamp,\n sessionId: event.sessionId,\n userId: event.userId,\n ...event.metadata,\n });\n }\n}\n\nexport class CustomAdapter implements AnalyticsAdapter {\n constructor(private readonly handler: (event: AdoptionEvent) => void | Promise<void>) {}\n\n track(event: AdoptionEvent): void | Promise<void> {\n return this.handler(event);\n }\n}\n\nexport interface FeatureEngagementMetrics {\n seen: number;\n clicked: number;\n dismissed: number;\n}\n\nexport interface AdoptionMetrics {\n getAdoptionRate: (featureId: string) => number;\n getTourCompletionRate: (tourId: string) => number;\n getChecklistCompletionRate: (checklistId: string) => number;\n getFeatureEngagement: (featureId: string) => FeatureEngagementMetrics;\n getVariantPerformance: (featureId: string) => Record<string, number>;\n}\n\nexport function createAdoptionMetrics(events: AdoptionEvent[]): AdoptionMetrics {\n const getAdoptionRate = (featureId: string): number => {\n const seen = events.filter((event) => event.type === \"feature_seen\" && event.featureId === featureId).length;\n if (seen === 0) return 0;\n const clicked = events.filter((event) => event.type === \"feature_clicked\" && event.featureId === featureId).length;\n return clicked / seen;\n };\n\n const getTourCompletionRate = (tourId: string): number => {\n const started = events.filter((event) => event.type === \"tour_started\" && event.tourId === tourId).length;\n if (started === 0) return 0;\n const completed = events.filter((event) => event.type === \"tour_completed\" && event.tourId === tourId).length;\n return completed / started;\n };\n\n const getChecklistCompletionRate = (checklistId: string): number => {\n const taskCompleted = events.filter((event) =>\n event.type === \"checklist_task_completed\" &&\n event.metadata?.checklistId === checklistId\n ).length;\n if (taskCompleted === 0) return 0;\n const completed = events.filter((event) =>\n event.type === \"checklist_completed\" &&\n event.metadata?.checklistId === checklistId\n ).length;\n return completed / taskCompleted;\n };\n\n const getFeatureEngagement = (featureId: string): FeatureEngagementMetrics => ({\n seen: events.filter((event) => event.type === \"feature_seen\" && event.featureId === featureId).length,\n clicked: events.filter((event) => event.type === \"feature_clicked\" && event.featureId === featureId).length,\n dismissed: events.filter((event) => event.type === \"feature_dismissed\" && event.featureId === featureId).length,\n });\n\n const getVariantPerformance = (featureId: string): Record<string, number> => {\n const byVariant = new Map<string, { seen: number; clicked: number }>();\n for (const event of events) {\n if (event.featureId !== featureId) continue;\n const variant = event.variant ?? \"control\";\n const bucket = byVariant.get(variant) ?? { seen: 0, clicked: 0 };\n if (event.type === \"feature_seen\") bucket.seen += 1;\n if (event.type === \"feature_clicked\") bucket.clicked += 1;\n byVariant.set(variant, bucket);\n }\n const output: Record<string, number> = {};\n for (const [variant, bucket] of byVariant.entries()) {\n output[variant] = bucket.seen === 0 ? 0 : bucket.clicked / bucket.seen;\n }\n return output;\n };\n\n return {\n getAdoptionRate,\n getTourCompletionRate,\n getChecklistCompletionRate,\n getFeatureEngagement,\n getVariantPerformance,\n };\n}\n","import { useMemo } from \"react\";\nimport type { AdoptionEvent } from \"../../analytics\";\nimport { createAdoptionMetrics, type AdoptionMetrics } from \"../../analytics\";\n\nexport function useAdoptionAnalytics(events: AdoptionEvent[]): AdoptionMetrics {\n return useMemo(() => createAdoptionMetrics(events), [events]);\n}\n","import type { TourStep } from \"./components/tour\";\n\nexport interface TourSnapshot {\n isActive: boolean;\n currentStepIndex: number;\n currentStep: TourStep | null;\n totalSteps: number;\n}\n\nexport interface TourController {\n startTour: () => void;\n nextStep: () => void;\n prevStep: () => void;\n skipTour: () => void;\n closeTour: () => void;\n getSnapshot: () => TourSnapshot;\n subscribe: (listener: () => void) => () => void;\n}\n\nconst controllers = new Map<string, TourController>();\nconst registryListeners = new Map<string, Set<() => void>>();\n\nfunction emitRegistry(id: string): void {\n const listeners = registryListeners.get(id);\n if (!listeners) return;\n for (const listener of listeners) listener();\n}\n\nexport function registerTourController(id: string, controller: TourController): () => void {\n controllers.set(id, controller);\n emitRegistry(id);\n return () => {\n if (controllers.get(id) === controller) {\n controllers.delete(id);\n emitRegistry(id);\n }\n };\n}\n\nexport function getTourController(id: string): TourController | undefined {\n return controllers.get(id);\n}\n\nexport function subscribeTourRegistry(id: string, listener: () => void): () => void {\n const listeners = registryListeners.get(id) ?? new Set<() => void>();\n listeners.add(listener);\n registryListeners.set(id, listeners);\n return () => {\n const current = registryListeners.get(id);\n if (!current) return;\n current.delete(listener);\n if (current.size === 0) {\n registryListeners.delete(id);\n }\n };\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { getTourController, subscribeTourRegistry, type TourSnapshot } from \"../tour-registry\";\n\nconst EMPTY_SNAPSHOT: TourSnapshot = {\n isActive: false,\n currentStepIndex: -1,\n currentStep: null,\n totalSteps: 0,\n};\n\nexport interface UseTourResult {\n startTour: () => void;\n nextStep: () => void;\n prevStep: () => void;\n skipTour: () => void;\n closeTour: () => void;\n currentStep: TourSnapshot[\"currentStep\"];\n currentStepIndex: number;\n totalSteps: number;\n isActive: boolean;\n}\n\nfunction readSnapshot(id: string): TourSnapshot {\n const controller = getTourController(id);\n if (!controller) return EMPTY_SNAPSHOT;\n return controller.getSnapshot();\n}\n\nexport function useTour(id: string): UseTourResult {\n const [snapshot, setSnapshot] = useState<TourSnapshot>(() => readSnapshot(id));\n\n useEffect(() => {\n let unsubscribeController: (() => void) | null = null;\n\n const bindController = (): void => {\n if (unsubscribeController) {\n unsubscribeController();\n unsubscribeController = null;\n }\n const controller = getTourController(id);\n if (!controller) {\n setSnapshot(EMPTY_SNAPSHOT);\n return;\n }\n setSnapshot(controller.getSnapshot());\n unsubscribeController = controller.subscribe(() => {\n setSnapshot(controller.getSnapshot());\n });\n };\n\n bindController();\n const unsubscribeRegistry = subscribeTourRegistry(id, bindController);\n return () => {\n unsubscribeRegistry();\n if (unsubscribeController) unsubscribeController();\n };\n }, [id]);\n\n const call = useCallback((method: keyof Omit<UseTourResult, \"currentStep\" | \"currentStepIndex\" | \"totalSteps\" | \"isActive\">) => {\n const controller = getTourController(id);\n if (!controller) return;\n controller[method]();\n }, [id]);\n\n return useMemo(\n () => ({\n startTour: () => call(\"startTour\"),\n nextStep: () => call(\"nextStep\"),\n prevStep: () => call(\"prevStep\"),\n skipTour: () => call(\"skipTour\"),\n closeTour: () => call(\"closeTour\"),\n currentStep: snapshot.currentStep,\n currentStepIndex: snapshot.currentStepIndex,\n totalSteps: snapshot.totalSteps,\n isActive: snapshot.isActive,\n }),\n [call, snapshot],\n );\n}\n","import { useCallback, useMemo, useState } from \"react\";\nimport { useFeatureDrop } from \"./use-feature-drop\";\nimport { getTourController } from \"../tour-registry\";\n\nexport interface TourSequenceItem {\n featureId: string;\n tourId: string;\n}\n\nexport interface UseTourSequencerResult {\n nextTourId: string | null;\n nextFeatureId: string | null;\n remainingTours: number;\n startNextTour: () => boolean;\n}\n\nexport function useTourSequencer(sequence: TourSequenceItem[]): UseTourSequencerResult {\n const {\n newFeatures,\n canShowTour,\n markTourShown,\n markFeatureSeen,\n } = useFeatureDrop();\n const [startedFeatureIds, setStartedFeatureIds] = useState<Set<string>>(new Set());\n\n const visibleFeatureIds = useMemo(\n () => new Set(newFeatures.map((feature) => feature.id)),\n [newFeatures],\n );\n\n const remaining = useMemo(\n () =>\n sequence.filter(\n (item) =>\n visibleFeatureIds.has(item.featureId) &&\n !startedFeatureIds.has(item.featureId),\n ),\n [sequence, startedFeatureIds, visibleFeatureIds],\n );\n\n const next = remaining[0] ?? null;\n\n const startNextTour = useCallback((): boolean => {\n if (!next) return false;\n if (!canShowTour()) return false;\n const controller = getTourController(next.tourId);\n if (!controller) return false;\n setStartedFeatureIds((previous) => {\n if (previous.has(next.featureId)) return previous;\n const updated = new Set(previous);\n updated.add(next.featureId);\n return updated;\n });\n markFeatureSeen(next.featureId);\n markTourShown();\n controller.startTour();\n return true;\n }, [canShowTour, markFeatureSeen, markTourShown, next]);\n\n return {\n nextTourId: next?.tourId ?? null,\n nextFeatureId: next?.featureId ?? null,\n remainingTours: remaining.length,\n startNextTour,\n };\n}\n","export interface ChecklistSnapshot {\n exists: boolean;\n tasks: Array<{ id: string; completed: boolean }>;\n progress: { completed: number; total: number; percent: number };\n isComplete: boolean;\n dismissed: boolean;\n collapsed: boolean;\n}\n\nexport interface ChecklistController {\n completeTask: (taskId: string) => void;\n resetChecklist: () => void;\n dismissChecklist: () => void;\n toggleCollapsed: () => void;\n getSnapshot: () => ChecklistSnapshot;\n subscribe: (listener: () => void) => () => void;\n}\n\nconst controllers = new Map<string, ChecklistController>();\nconst registryListeners = new Map<string, Set<() => void>>();\n\nfunction emitRegistry(id: string): void {\n const listeners = registryListeners.get(id);\n if (!listeners) return;\n for (const listener of listeners) listener();\n}\n\nexport function registerChecklistController(id: string, controller: ChecklistController): () => void {\n controllers.set(id, controller);\n emitRegistry(id);\n return () => {\n if (controllers.get(id) === controller) {\n controllers.delete(id);\n emitRegistry(id);\n }\n };\n}\n\nexport function getChecklistController(id: string): ChecklistController | undefined {\n return controllers.get(id);\n}\n\nexport function subscribeChecklistRegistry(id: string, listener: () => void): () => void {\n const listeners = registryListeners.get(id) ?? new Set<() => void>();\n listeners.add(listener);\n registryListeners.set(id, listeners);\n return () => {\n const current = registryListeners.get(id);\n if (!current) return;\n current.delete(listener);\n if (current.size === 0) registryListeners.delete(id);\n };\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n getChecklistController,\n subscribeChecklistRegistry,\n type ChecklistSnapshot,\n} from \"../checklist-registry\";\n\nconst EMPTY_SNAPSHOT: ChecklistSnapshot = {\n exists: false,\n tasks: [],\n progress: { completed: 0, total: 0, percent: 0 },\n isComplete: false,\n dismissed: false,\n collapsed: false,\n};\n\nexport interface UseChecklistResult {\n completeTask: (taskId: string) => void;\n resetChecklist: () => void;\n dismissChecklist: () => void;\n toggleCollapsed: () => void;\n isComplete: boolean;\n progress: { completed: number; total: number; percent: number };\n tasks: Array<{ id: string; completed: boolean }>;\n dismissed: boolean;\n collapsed: boolean;\n}\n\nfunction readSnapshot(id: string): ChecklistSnapshot {\n const controller = getChecklistController(id);\n if (!controller) return EMPTY_SNAPSHOT;\n return controller.getSnapshot();\n}\n\nexport function useChecklist(id: string): UseChecklistResult {\n const [snapshot, setSnapshot] = useState<ChecklistSnapshot>(() => readSnapshot(id));\n\n useEffect(() => {\n let unsubscribeController: (() => void) | null = null;\n\n const bind = (): void => {\n if (unsubscribeController) {\n unsubscribeController();\n unsubscribeController = null;\n }\n const controller = getChecklistController(id);\n if (!controller) {\n setSnapshot(EMPTY_SNAPSHOT);\n return;\n }\n setSnapshot(controller.getSnapshot());\n unsubscribeController = controller.subscribe(() => {\n setSnapshot(controller.getSnapshot());\n });\n };\n\n bind();\n const unsubscribeRegistry = subscribeChecklistRegistry(id, bind);\n return () => {\n unsubscribeRegistry();\n if (unsubscribeController) unsubscribeController();\n };\n }, [id]);\n\n const invoke = useCallback((method: \"completeTask\" | \"resetChecklist\" | \"dismissChecklist\" | \"toggleCollapsed\", arg?: string) => {\n const controller = getChecklistController(id);\n if (!controller) return;\n if (method === \"completeTask\") {\n controller.completeTask(arg ?? \"\");\n return;\n }\n controller[method]();\n }, [id]);\n\n return useMemo(\n () => ({\n completeTask: (taskId: string) => invoke(\"completeTask\", taskId),\n resetChecklist: () => invoke(\"resetChecklist\"),\n dismissChecklist: () => invoke(\"dismissChecklist\"),\n toggleCollapsed: () => invoke(\"toggleCollapsed\"),\n isComplete: snapshot.isComplete,\n progress: snapshot.progress,\n tasks: snapshot.tasks,\n dismissed: snapshot.dismissed,\n collapsed: snapshot.collapsed,\n }),\n [invoke, snapshot],\n );\n}\n","import type { SurveyType } from \"./components/survey\";\n\nexport interface SurveySnapshot {\n exists: boolean;\n isOpen: boolean;\n submitted: boolean;\n canShow: boolean;\n type: SurveyType;\n}\n\nexport interface SurveyController {\n show: (options?: { force?: boolean }) => boolean;\n hide: () => void;\n askLater: () => void;\n getSnapshot: () => SurveySnapshot;\n subscribe: (listener: () => void) => () => void;\n}\n\nconst controllers = new Map<string, SurveyController>();\nconst registryListeners = new Map<string, Set<() => void>>();\n\nfunction emitRegistry(id: string): void {\n const listeners = registryListeners.get(id);\n if (!listeners) return;\n for (const listener of listeners) listener();\n}\n\nexport function registerSurveyController(id: string, controller: SurveyController): () => void {\n controllers.set(id, controller);\n emitRegistry(id);\n return () => {\n if (controllers.get(id) === controller) {\n controllers.delete(id);\n emitRegistry(id);\n }\n };\n}\n\nexport function getSurveyController(id: string): SurveyController | undefined {\n return controllers.get(id);\n}\n\nexport function subscribeSurveyRegistry(id: string, listener: () => void): () => void {\n const listeners = registryListeners.get(id) ?? new Set<() => void>();\n listeners.add(listener);\n registryListeners.set(id, listeners);\n return () => {\n const current = registryListeners.get(id);\n if (!current) return;\n current.delete(listener);\n if (current.size === 0) {\n registryListeners.delete(id);\n }\n };\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n getSurveyController,\n subscribeSurveyRegistry,\n type SurveySnapshot,\n} from \"../survey-registry\";\nimport type { SurveyType } from \"../components/survey\";\n\nconst EMPTY_SNAPSHOT: SurveySnapshot = {\n exists: false,\n isOpen: false,\n submitted: false,\n canShow: false,\n type: \"custom\",\n};\n\nexport interface UseSurveyResult {\n show: (options?: { force?: boolean }) => boolean;\n hide: () => void;\n askLater: () => void;\n isOpen: boolean;\n submitted: boolean;\n canShow: boolean;\n type: SurveyType;\n}\n\nfunction readSnapshot(id: string): SurveySnapshot {\n const controller = getSurveyController(id);\n if (!controller) return EMPTY_SNAPSHOT;\n return controller.getSnapshot();\n}\n\nexport function useSurvey(id: string): UseSurveyResult {\n const [snapshot, setSnapshot] = useState<SurveySnapshot>(() => readSnapshot(id));\n\n useEffect(() => {\n let unsubscribeController: (() => void) | null = null;\n\n const bind = (): void => {\n if (unsubscribeController) {\n unsubscribeController();\n unsubscribeController = null;\n }\n const controller = getSurveyController(id);\n if (!controller) {\n setSnapshot(EMPTY_SNAPSHOT);\n return;\n }\n setSnapshot(controller.getSnapshot());\n unsubscribeController = controller.subscribe(() => {\n setSnapshot(controller.getSnapshot());\n });\n };\n\n bind();\n const unsubscribeRegistry = subscribeSurveyRegistry(id, bind);\n return () => {\n unsubscribeRegistry();\n if (unsubscribeController) unsubscribeController();\n };\n }, [id]);\n\n const show = useCallback((options?: { force?: boolean }): boolean => {\n const controller = getSurveyController(id);\n if (!controller) return false;\n return controller.show(options);\n }, [id]);\n\n const hide = useCallback(() => {\n getSurveyController(id)?.hide();\n }, [id]);\n\n const askLater = useCallback(() => {\n getSurveyController(id)?.askLater();\n }, [id]);\n\n return useMemo(\n () => ({\n show,\n hide,\n askLater,\n isOpen: snapshot.isOpen,\n submitted: snapshot.submitted,\n canShow: snapshot.canShow,\n type: snapshot.type,\n }),\n [askLater, hide, show, snapshot],\n );\n}\n","import { useCallback, useMemo } from \"react\";\nimport { useFeatureDrop } from \"./use-feature-drop\";\nimport type { FeatureEntry } from \"../../types\";\n\nexport interface UseChangelogResult {\n /** All features from the manifest (including non-new) */\n features: readonly FeatureEntry[];\n /** Only features that are currently \"new\" (unread) */\n newFeatures: readonly FeatureEntry[];\n /** Count of new/unread features */\n newCount: number;\n /** Sorted new features (critical first, then by date) */\n newFeaturesSorted: readonly FeatureEntry[];\n /** Dismiss a single feature by ID */\n dismiss: (id: string) => void;\n /** Dismiss all features at once */\n dismissAll: () => void;\n /** Check if a specific feature is new */\n isNew: (sidebarKey: string) => boolean;\n /** Mark all currently visible features as seen (advances watermark) */\n markAllSeen: () => void;\n /** Get features filtered by category */\n getByCategory: (category: string) => readonly FeatureEntry[];\n}\n\nexport function useChangelog(): UseChangelogResult {\n const ctx = useFeatureDrop();\n\n const markAllSeen = useCallback(() => {\n void ctx.dismissAll();\n }, [ctx]);\n\n const getByCategory = useCallback(\n (category: string): readonly FeatureEntry[] => {\n return ctx.newFeatures.filter((f) => f.category === category);\n },\n [ctx.newFeatures],\n );\n\n return useMemo(\n () => ({\n features: ctx.manifest,\n newFeatures: ctx.newFeatures,\n newCount: ctx.newCount,\n newFeaturesSorted: ctx.newFeaturesSorted,\n dismiss: ctx.dismiss,\n dismissAll: () => void ctx.dismissAll(),\n isNew: ctx.isNew,\n markAllSeen,\n getByCategory,\n }),\n [ctx.manifest, ctx.newFeatures, ctx.newCount, ctx.newFeaturesSorted, ctx.dismiss, ctx.dismissAll, ctx.isNew, markAllSeen, getByCategory],\n );\n}\n","import { useRef, useCallback } from \"react\";\nimport { useFeatureDrop } from \"./use-feature-drop\";\nimport type { DisplayFormat, FeatureEntry } from \"../../types\";\n\nexport interface UseSmartFeatureResult {\n /** Whether the engine recommends showing this feature now */\n show: boolean;\n /** Recommended display format */\n format: DisplayFormat;\n /** Fallback format if primary component isn't available */\n fallbackFormat: DisplayFormat;\n /** The feature entry from the manifest */\n feature: FeatureEntry | undefined;\n /** Dismiss the feature (also tracks dismissal in engine) */\n dismiss: () => void;\n /** Engine's confidence in this timing decision (0-1) */\n confidence: number;\n /** Reason for the timing decision */\n reason: string;\n}\n\n/**\n * Engine-powered smart feature display hook.\n *\n * Combines the TimingOptimizer and FormatSelector to decide\n * whether to show a feature and what format to use.\n *\n * Without an engine, gracefully degrades to always-show with badge format.\n *\n * @param featureId - The feature ID to check\n * @returns `{ show, format, fallbackFormat, feature, dismiss, confidence, reason }`\n *\n * @example\n * ```tsx\n * function MyFeature() {\n * const { show, format, feature, dismiss } = useSmartFeature('dark-mode')\n *\n * if (!show) return null\n *\n * switch (format) {\n * case 'badge': return <NewBadge id=\"dark-mode\" />\n * case 'toast': return <Toast feature={feature} onDismiss={dismiss} />\n * case 'modal': return <AnnouncementModal feature={feature} onDismiss={dismiss} />\n * default: return <NewBadge id=\"dark-mode\" />\n * }\n * }\n * ```\n */\nexport function useSmartFeature(featureId: string): UseSmartFeatureResult {\n const { engine, manifest, dismiss: providerDismiss } = useFeatureDrop();\n const sessionStartRef = useRef(Date.now());\n\n const feature = (manifest as FeatureEntry[]).find((f) => f.id === featureId);\n\n const dismiss = useCallback(() => {\n engine?.trackInteraction(featureId, \"dismissed\");\n providerDismiss(featureId);\n }, [engine, featureId, providerDismiss]);\n\n // No engine → always show with badge format (graceful degradation)\n if (!engine) {\n return {\n show: !!feature,\n format: \"badge\",\n fallbackFormat: \"inline\",\n feature,\n dismiss,\n confidence: 1.0,\n reason: \"no_engine\",\n };\n }\n\n const currentPath =\n typeof window !== \"undefined\" ? window.location.pathname : \"/\";\n const sessionAge = (Date.now() - sessionStartRef.current) / 1000;\n\n const timing = engine.shouldShow(featureId, {\n currentPath,\n sessionAge,\n recentDismissals: 0,\n featurePriority: feature?.priority ?? \"normal\",\n });\n\n const formatRec = engine.recommendFormat(featureId);\n\n return {\n show: timing.show,\n format: formatRec.primary,\n fallbackFormat: formatRec.fallback,\n feature,\n dismiss,\n confidence: timing.confidence,\n reason: timing.reason,\n };\n}\n","import { useMemo } from \"react\";\nimport { useFeatureDrop } from \"./use-feature-drop\";\nimport type { AdoptionScore } from \"../../types\";\n\nexport type UseAdoptionScoreResult = AdoptionScore;\n\nconst DEFAULT_SCORE: AdoptionScore = {\n score: 100,\n grade: \"A\",\n breakdown: {\n featuresExplored: 0,\n dismissRate: 0,\n completionRate: 0,\n engagementTrend: \"stable\",\n },\n recommendations: [],\n};\n\n/**\n * Get the user's overall feature adoption score.\n *\n * Returns a 0-100 score with letter grade, breakdown, and recommendations.\n * Useful for admin dashboards, debug panels, or gamification.\n *\n * Without an engine, returns a perfect score with no recommendations.\n *\n * @returns `{ score, grade, breakdown, recommendations }`\n *\n * @example\n * ```tsx\n * function AdoptionDashboard() {\n * const { score, grade, breakdown, recommendations } = useAdoptionScore()\n *\n * return (\n * <div>\n * <h2>Adoption Score: {score}/100 ({grade})</h2>\n * <p>Features explored: {Math.round(breakdown.featuresExplored * 100)}%</p>\n * <p>Completion rate: {Math.round(breakdown.completionRate * 100)}%</p>\n * <ul>\n * {recommendations.map((r, i) => <li key={i}>{r}</li>)}\n * </ul>\n * </div>\n * )\n * }\n * ```\n */\nexport function useAdoptionScore(): UseAdoptionScoreResult {\n const { engine } = useFeatureDrop();\n\n return useMemo(() => {\n if (!engine) return DEFAULT_SCORE;\n return engine.getAdoptionScore();\n }, [engine]);\n}\n","import { useMemo } from \"react\";\nimport { useFeatureDrop } from \"./use-feature-drop\";\nimport type { DisplayFormat } from \"../../types\";\n\nexport interface UseBehaviorProfileResult {\n /** Total sessions tracked */\n sessionCount: number;\n /** Dismiss rate (0-1) — fraction of announcements dismissed */\n dismissRate: number;\n /** Engagement rate (0-1) — fraction of announcements clicked/completed */\n engagementRate: number;\n /** User's preferred display format based on past behavior */\n preferredFormat: DisplayFormat;\n /** Whether an engine is available */\n hasEngine: boolean;\n}\n\nconst DEFAULT_PROFILE: UseBehaviorProfileResult = {\n sessionCount: 0,\n dismissRate: 0,\n engagementRate: 0,\n preferredFormat: \"badge\",\n hasEngine: false,\n};\n\n/**\n * Access the user's behavior profile for debug or admin views.\n *\n * Exposes aggregated behavior data from the AdoptionEngine's BehaviorTracker.\n * Without an engine, returns default values.\n *\n * @returns `{ sessionCount, dismissRate, engagementRate, preferredFormat, hasEngine }`\n *\n * @example\n * ```tsx\n * function DebugPanel() {\n * const { sessionCount, dismissRate, engagementRate, preferredFormat, hasEngine } = useBehaviorProfile()\n *\n * if (!hasEngine) return <p>No engine configured</p>\n *\n * return (\n * <div>\n * <p>Sessions: {sessionCount}</p>\n * <p>Dismiss rate: {(dismissRate * 100).toFixed(0)}%</p>\n * <p>Engagement rate: {(engagementRate * 100).toFixed(0)}%</p>\n * <p>Preferred format: {preferredFormat}</p>\n * </div>\n * )\n * }\n * ```\n */\nexport function useBehaviorProfile(): UseBehaviorProfileResult {\n const { engine } = useFeatureDrop();\n\n return useMemo(() => {\n if (!engine) return DEFAULT_PROFILE;\n\n // Access BehaviorTracker via the engine's public methods\n // The engine tracks interactions internally, so we derive profile data\n // from the engine's adoption scoring methods\n const score = engine.getAdoptionScore();\n\n return {\n sessionCount: 0, // Not directly exposed by FeatureDropEngine interface\n dismissRate: score.breakdown.dismissRate,\n engagementRate: 1 - score.breakdown.dismissRate,\n preferredFormat: \"badge\" as DisplayFormat, // Default — full profile requires AdoptionEngine\n hasEngine: true,\n };\n }, [engine]);\n}\n","import {\n Component,\n useCallback,\n useContext,\n type ComponentType,\n type ErrorInfo,\n type ReactNode,\n} from \"react\";\nimport { FeatureDropContext } from \"./context\";\n\ninterface BoundaryProps {\n children: ReactNode;\n onError?: (error: unknown, info: ErrorInfo) => void;\n}\n\ninterface BoundaryState {\n hasError: boolean;\n}\n\nclass FeatureDropComponentBoundary extends Component<BoundaryProps, BoundaryState> {\n override state: BoundaryState = { hasError: false };\n\n override componentDidCatch(error: unknown, info: ErrorInfo): void {\n this.setState({ hasError: true });\n this.props.onError?.(error, info);\n }\n\n override render(): ReactNode {\n if (this.state.hasError) return null;\n return this.props.children;\n }\n}\n\nexport function withFeatureDropBoundary<Props extends object>(\n ComponentImpl: ComponentType<Props>,\n componentName: string,\n): ComponentType<Props> {\n function Wrapped(props: Props) {\n const context = useContext(FeatureDropContext);\n const onError = useCallback(\n (error: unknown, info: ErrorInfo) => {\n context?.reportError(error, {\n component: componentName,\n componentStack: info.componentStack ?? undefined,\n });\n },\n [context],\n );\n\n return (\n <FeatureDropComponentBoundary onError={onError}>\n <ComponentImpl {...props} />\n </FeatureDropComponentBoundary>\n );\n }\n\n Wrapped.displayName = `FeatureDropBoundary(${componentName})`;\n return Wrapped;\n}\n","import { useContext, useEffect, useMemo, type ReactNode, type CSSProperties } from \"react\";\nimport {\n ensureFeatureDropAnimationStyles,\n getPulseAnimation,\n prefersReducedMotion,\n resolveAnimationPreset,\n} from \"../../animation\";\nimport { FeatureDropContext } from \"../context\";\n\nexport interface NewBadgeRenderProps {\n /** Whether the feature is currently new */\n isNew: boolean;\n}\n\nexport interface NewBadgeProps {\n /** Display variant */\n variant?: \"pill\" | \"dot\" | \"count\";\n /** Whether to show the badge (typically from `useNewFeature().isNew`) */\n show?: boolean;\n /** Count to display when variant is \"count\" */\n count?: number;\n /** Text label for the pill variant. Default: \"New\" */\n label?: string;\n /** Dismiss callback. If set with `dismissOnClick`, clicking dismisses. */\n onDismiss?: () => void;\n /** Whether clicking the badge should trigger onDismiss */\n dismissOnClick?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Additional inline styles (merged with defaults) */\n style?: CSSProperties;\n /** Render prop for full customization */\n children?: (props: NewBadgeRenderProps) => ReactNode;\n}\n\nconst baseStyles: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontFamily: \"inherit\",\n};\n\nconst pillStyles: CSSProperties = {\n ...baseStyles,\n padding: \"2px 6px\",\n borderRadius: \"9999px\",\n fontSize: \"var(--featuredrop-font-size, 10px)\",\n fontWeight: 700,\n textTransform: \"uppercase\" as const,\n letterSpacing: \"0.05em\",\n lineHeight: 1,\n color: \"var(--featuredrop-color, #b45309)\",\n backgroundColor: \"var(--featuredrop-bg, rgba(245, 158, 11, 0.15))\",\n};\n\nconst dotStyles: CSSProperties = {\n ...baseStyles,\n width: \"var(--featuredrop-dot-size, 8px)\",\n height: \"var(--featuredrop-dot-size, 8px)\",\n borderRadius: \"9999px\",\n backgroundColor: \"var(--featuredrop-color, #f59e0b)\",\n boxShadow: \"0 0 6px var(--featuredrop-glow, rgba(245, 158, 11, 0.6))\",\n animation: \"featuredrop-pulse 2s ease-in-out infinite\",\n};\n\nconst countStyles: CSSProperties = {\n ...baseStyles,\n minWidth: \"var(--featuredrop-count-size, 18px)\",\n height: \"var(--featuredrop-count-size, 18px)\",\n padding: \"0 4px\",\n borderRadius: \"9999px\",\n fontSize: \"var(--featuredrop-font-size, 11px)\",\n fontWeight: 700,\n lineHeight: 1,\n color: \"var(--featuredrop-count-color, white)\",\n backgroundColor: \"var(--featuredrop-count-bg, #f59e0b)\",\n};\n\n/**\n * Headless \"New\" badge component.\n *\n * Styled via CSS custom properties — zero CSS framework dependency:\n * - `--featuredrop-color` — text/dot color\n * - `--featuredrop-bg` — pill background\n * - `--featuredrop-font-size` — font size\n * - `--featuredrop-dot-size` — dot diameter\n * - `--featuredrop-glow` — dot glow color\n * - `--featuredrop-count-size` — count badge size\n * - `--featuredrop-count-color` — count text color\n * - `--featuredrop-count-bg` — count background\n *\n * Use `data-featuredrop` attribute for CSS selector styling.\n */\nexport function NewBadge({\n variant = \"pill\",\n show = true,\n count,\n label = \"New\",\n onDismiss,\n dismissOnClick = false,\n className,\n style,\n children,\n}: NewBadgeProps) {\n const context = useContext(FeatureDropContext);\n const pulsePreset = useMemo(\n () =>\n resolveAnimationPreset(context?.animation ?? \"normal\", {\n reducedMotion: prefersReducedMotion(),\n }),\n [context?.animation],\n );\n const dotPulseAnimation = useMemo(() => getPulseAnimation(pulsePreset, \"dot\"), [pulsePreset]);\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n // Render prop mode\n if (children) {\n return <>{children({ isNew: show })}</>;\n }\n\n if (!show) return null;\n\n const handleClick = dismissOnClick && onDismiss ? onDismiss : undefined;\n\n const variantStyles =\n variant === \"dot\"\n ? {\n ...dotStyles,\n animation: dotPulseAnimation ?? \"none\",\n }\n : variant === \"count\"\n ? countStyles\n : pillStyles;\n\n const content =\n variant === \"dot\"\n ? null\n : variant === \"count\"\n ? (count ?? 0)\n : label;\n\n const ariaLabel =\n variant === \"count\"\n ? `${count ?? 0} new features`\n : \"New feature\";\n\n return (\n <span\n data-featuredrop={variant}\n className={className}\n style={{ ...variantStyles, ...style }}\n onClick={handleClick}\n role={dismissOnClick ? \"button\" : undefined}\n tabIndex={dismissOnClick ? 0 : undefined}\n onKeyDown={\n dismissOnClick && onDismiss\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onDismiss();\n }\n }\n : undefined\n }\n aria-label={ariaLabel}\n aria-live={variant === \"count\" ? \"polite\" : undefined}\n aria-atomic={variant === \"count\" ? true : undefined}\n >\n {content}\n </span>\n );\n}\n","import * as moduleApi from \"module\";\n\n// Lightweight markdown parser with optional `marked` + `shiki` support.\n// The function is synchronous and always returns sanitized HTML.\n\ntype MarkedRenderer = {\n link?: (href: string | null, title: string | null, text: string) => string;\n image?: (href: string | null, title: string | null, text: string) => string;\n paragraph?: (text: string) => string;\n heading?: (text: string, level: number) => string;\n};\n\ntype MarkedModule = {\n Renderer?: new () => MarkedRenderer;\n parse?: (markdown: string, options?: { renderer?: MarkedRenderer }) => string | Promise<string>;\n};\n\ntype ShikiLike = {\n codeToHtml?: (code: string, options?: { lang?: string; theme?: string }) => string | Promise<string>;\n};\n\nconst dynamicRequire =\n typeof moduleApi.createRequire === \"function\" ? moduleApi.createRequire(import.meta.url) : null;\n\nlet cachedMarked: MarkedModule | null | false = null;\nlet cachedShiki: ShikiLike | null | false = null;\n\nfunction optionalRequire<T>(name: string): T | null {\n if (!dynamicRequire) return null;\n try {\n // Using dynamic require so missing optional peers don't break bundling/runtime.\n return dynamicRequire(name) as T;\n } catch (error: unknown) {\n if (error && typeof error === \"object\" && \"code\" in error && (error as { code?: string }).code === \"MODULE_NOT_FOUND\") {\n return null;\n }\n // Any other error should still be treated as a failure to keep parsing resilient.\n return null;\n }\n}\n\nfunction getMarked(): MarkedModule | null {\n if (cachedMarked !== null) return cachedMarked || null;\n cachedMarked = optionalRequire<MarkedModule>(\"marked\") ?? false;\n return cachedMarked || null;\n}\n\nfunction getShiki(): ShikiLike | null {\n if (cachedShiki !== null) return cachedShiki || null;\n cachedShiki = optionalRequire<ShikiLike>(\"shiki\") ?? false;\n return cachedShiki || null;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n\nfunction sanitizeUrl(url: string | null | undefined): string | null {\n if (!url) return null;\n const trimmed = url.trim();\n if (!trimmed) return null;\n\n const lower = trimmed.toLowerCase();\n if (lower.startsWith(\"javascript:\")) return null;\n if (lower.startsWith(\"data:\")) return null;\n if (lower.startsWith(\"vbscript:\")) return null;\n\n // Disallow characters that can break attribute context\n if (/['\"<>\\s]/.test(trimmed)) return null;\n\n return trimmed;\n}\n\nfunction sanitizeHtml(html: string): string {\n return html\n // Remove script/style tags entirely\n .replace(/<script[\\s\\S]*?>[\\s\\S]*?<\\/script>/gi, \"\")\n .replace(/<style[\\s\\S]*?>[\\s\\S]*?<\\/style>/gi, \"\")\n // Remove inline event handlers (on*)\n .replace(/\\s+on[a-z]+\\s*=\\s*(\"[^\"]*\"|'[^']*'|[^\\s>]+)/gi, \"\")\n // Remove javascript: or data: URLs in href/src/xlink:href\n .replace(/\\s+(?:href|src|xlink:href)\\s*=\\s*(\"|')(?:javascript:|data:)[^\"']*\\1/gi, \"\");\n}\n\nfunction decodeAllowedEntities(html: string): string {\n const allowTags = [\n \"p\",\n \"strong\",\n \"em\",\n \"a\",\n \"code\",\n \"pre\",\n \"img\",\n \"ul\",\n \"ol\",\n \"li\",\n \"blockquote\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n \"br\",\n ];\n\n // Decode common entities inside allowed tags only\n return html.replace(/&lt;(\\/?)([a-z0-9]+)([^>]*)&gt;/gi, (match, slash, tag, rest) => {\n if (!allowTags.includes(tag.toLowerCase())) return match;\n const decodedRest = rest\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&amp;/g, \"&\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\");\n return `<${slash}${tag}${decodedRest}>`;\n });\n}\n\nfunction renderCodeBlock(code: string, language: string | undefined): string {\n const shiki = getShiki();\n if (shiki?.codeToHtml) {\n try {\n const rendered = shiki.codeToHtml(code, { lang: language || \"text\", theme: \"github-dark\" });\n if (typeof rendered === \"string\") return rendered;\n } catch {\n // Fall through to non-highlighted rendering\n }\n }\n\n const langAttr = language ? ` class=\"language-${escapeHtml(language)}\"` : \"\";\n return `<pre><code${langAttr}>${escapeHtml(code)}</code></pre>`;\n}\n\nfunction inlineMarkdown(text: string): string {\n // Escape user-provided HTML before applying markdown conversions.\n let result = escapeHtml(text);\n\n // Protect inline code spans so subsequent replacements don't mangle them.\n const codeSpans: string[] = [];\n result = result.replace(/`([^`]+)`/g, (_match, code) => {\n const idx = codeSpans.length;\n codeSpans.push(`<code>${escapeHtml(code)}</code>`);\n return `§§CODE${idx}§§`;\n });\n\n // Images: ![alt](url)\n result = result.replace(/!\\[([^\\]]*)\\]\\(([^)]+)\\)/g, (_match, alt, url) => {\n const safeUrl = sanitizeUrl(url);\n const safeAlt = escapeHtml(alt ?? \"\");\n if (!safeUrl) return safeAlt;\n return `<img src=\"${escapeHtml(safeUrl)}\" alt=\"${safeAlt}\" />`;\n });\n\n // Links: [text](url)\n result = result.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_match, label, url) => {\n const safeUrl = sanitizeUrl(url);\n const safeLabel = escapeHtml(label ?? \"\");\n if (!safeUrl) return safeLabel;\n return `<a href=\"${escapeHtml(safeUrl)}\" target=\"_blank\" rel=\"noopener noreferrer\">${safeLabel}</a>`;\n });\n\n // Bold and italic (basic)\n result = result.replace(/\\*\\*([^*]+)\\*\\*/g, \"<strong>$1</strong>\");\n result = result.replace(/\\*([^*]+)\\*/g, \"<em>$1</em>\");\n\n // Restore code spans\n result = result.replace(/§§CODE(\\d+)§§/g, (_m, idx) => codeSpans[Number(idx)] ?? \"\");\n\n return result;\n}\n\nfunction fallbackParse(markdown: string): string {\n const lines = markdown.split(/\\r?\\n/);\n const blocks: string[] = [];\n let listBuffer: string[] | null = null;\n let quoteBuffer: string[] | null = null;\n let inCodeBlock = false;\n let codeLang: string | undefined;\n let codeLines: string[] = [];\n\n const flushList = () => {\n if (!listBuffer) return;\n blocks.push(`<ul>${listBuffer.map((item) => `<li>${item}</li>`).join(\"\")}</ul>`);\n listBuffer = null;\n };\n\n const flushQuote = () => {\n if (!quoteBuffer) return;\n const content = quoteBuffer.map((line) => inlineMarkdown(line.trim())).join(\"<br>\");\n blocks.push(`<blockquote>${content}</blockquote>`);\n quoteBuffer = null;\n };\n\n const flushCode = () => {\n if (!inCodeBlock) return;\n blocks.push(renderCodeBlock(codeLines.join(\"\\n\"), codeLang));\n codeLines = [];\n codeLang = undefined;\n inCodeBlock = false;\n };\n\n for (const rawLine of lines) {\n const line = rawLine.replace(/\\s+$/, \"\");\n\n const codeFence = line.match(/^```(.*)$/);\n if (codeFence) {\n if (inCodeBlock) {\n flushCode();\n } else {\n flushList();\n flushQuote();\n inCodeBlock = true;\n codeLang = codeFence[1]?.trim() || undefined;\n codeLines = [];\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeLines.push(rawLine);\n continue;\n }\n\n const listMatch = line.match(/^\\s*[-*+]\\s+(.*)$/);\n if (listMatch) {\n flushQuote();\n listBuffer = listBuffer ?? [];\n listBuffer.push(inlineMarkdown(listMatch[1].trim()));\n continue;\n }\n\n if (listBuffer) flushList();\n\n const headingMatch = line.match(/^(#{1,6})\\s+(.*)$/);\n if (headingMatch) {\n flushQuote();\n const level = headingMatch[1].length;\n const content = inlineMarkdown(headingMatch[2].trim());\n blocks.push(`<h${level}>${content}</h${level}>`);\n continue;\n }\n\n const quoteMatch = line.match(/^>\\s?(.*)$/);\n if (quoteMatch) {\n quoteBuffer = quoteBuffer ?? [];\n quoteBuffer.push(quoteMatch[1]);\n continue;\n }\n\n if (quoteBuffer) flushQuote();\n\n if (!line.trim()) {\n continue;\n }\n\n blocks.push(`<p>${inlineMarkdown(line.trim())}</p>`);\n }\n\n flushList();\n flushQuote();\n flushCode();\n\n return blocks.join(\"\\n\");\n}\n\nfunction renderWithMarked(markdown: string, marked: MarkedModule): string | null {\n if (!marked.parse) return null;\n\n const renderer = marked.Renderer ? new marked.Renderer() : undefined;\n\n if (renderer) {\n renderer.link = (href, _title, text) => {\n const safeUrl = sanitizeUrl(href);\n if (!safeUrl) return escapeHtml(text);\n return `<a href=\"${escapeHtml(safeUrl)}\" target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`;\n };\n renderer.image = (href, _title, text) => {\n const safeUrl = sanitizeUrl(href);\n const safeAlt = escapeHtml(text ?? \"\");\n if (!safeUrl) return safeAlt;\n return `<img src=\"${escapeHtml(safeUrl)}\" alt=\"${safeAlt}\" />`;\n };\n }\n\n const output = marked.parse(markdown, renderer ? { renderer } : undefined);\n if (typeof output === \"string\") return output;\n return output ? String(output) : null;\n}\n\n/**\n * Parse a feature description from markdown into sanitized HTML.\n * - Uses `marked` when installed (optional peer dep)\n * - Falls back to a tiny built-in parser when `marked` is absent\n * - Strips script tags, event handlers, and javascript:/data: URLs\n */\nexport function parseDescription(markdown: string): string {\n if (!markdown) return \"\";\n\n const marked = getMarked();\n if (marked) {\n try {\n const rendered = renderWithMarked(markdown, marked);\n if (rendered) {\n const sanitized = sanitizeHtml(rendered);\n const decoded = decodeAllowedEntities(sanitized);\n return sanitizeHtml(decoded);\n }\n } catch {\n // If marked fails for any reason, fall back to the tiny parser.\n }\n }\n\n // Fast path: raw HTML provided without `marked` installed\n if (/<[^>]+>/.test(markdown)) {\n const sanitized = sanitizeHtml(markdown);\n const decoded = decodeAllowedEntities(sanitized);\n return sanitizeHtml(decoded);\n }\n\n const fallback = fallbackParse(markdown);\n const sanitized = sanitizeHtml(fallback);\n const decoded = decodeAllowedEntities(sanitized);\n return sanitizeHtml(decoded);\n}\n","export type ReactionCounts = Record<string, number>;\n\nconst COUNTS_STORAGE_KEY = \"featuredrop:reactions:counts\";\nconst USER_STORAGE_KEY = \"featuredrop:reactions:user\";\n\nexport const DEFAULT_REACTIONS = [\"👍\", \"❤️\", \"🎉\", \"👀\", \"👎\"] as const;\n\nfunction readStorageValue(key: string): string | null {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (storageKey: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return null;\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeStorageValue(key: string, value: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (storageKey: string, storageValue: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(key, value);\n } catch {\n // noop\n }\n}\n\nfunction readCountsState(): Record<string, ReactionCounts> {\n const raw = readStorageValue(COUNTS_STORAGE_KEY);\n if (!raw) return {};\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return {};\n return parsed as Record<string, ReactionCounts>;\n } catch {\n return {};\n }\n}\n\nfunction writeCountsState(state: Record<string, ReactionCounts>): void {\n writeStorageValue(COUNTS_STORAGE_KEY, JSON.stringify(state));\n}\n\nfunction readUserState(): Record<string, string> {\n const raw = readStorageValue(USER_STORAGE_KEY);\n if (!raw) return {};\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return {};\n return parsed as Record<string, string>;\n } catch {\n return {};\n }\n}\n\nfunction writeUserState(state: Record<string, string>): void {\n writeStorageValue(USER_STORAGE_KEY, JSON.stringify(state));\n}\n\nexport function getReactionCounts(entryId: string, reactions: readonly string[]): ReactionCounts {\n const state = readCountsState();\n const stored = state[entryId] ?? {};\n const counts: ReactionCounts = {};\n for (const reaction of reactions) {\n const value = stored[reaction];\n counts[reaction] = Number.isFinite(value) && value > 0 ? value : 0;\n }\n return counts;\n}\n\nexport function getUserReaction(entryId: string): string | null {\n const state = readUserState();\n const reaction = state[entryId];\n return typeof reaction === \"string\" && reaction ? reaction : null;\n}\n\nexport function reactToEntry(\n entryId: string,\n reaction: string,\n reactions: readonly string[],\n): { updated: boolean; counts: ReactionCounts; userReaction: string | null } {\n if (!entryId || !reaction || !reactions.includes(reaction)) {\n return {\n updated: false,\n counts: getReactionCounts(entryId, reactions),\n userReaction: getUserReaction(entryId),\n };\n }\n\n const userState = readUserState();\n const currentReaction = userState[entryId];\n if (currentReaction) {\n return {\n updated: false,\n counts: getReactionCounts(entryId, reactions),\n userReaction: currentReaction,\n };\n }\n\n const countsState = readCountsState();\n const entryCounts: ReactionCounts = {\n ...(countsState[entryId] ?? {}),\n };\n entryCounts[reaction] = (entryCounts[reaction] ?? 0) + 1;\n countsState[entryId] = entryCounts;\n writeCountsState(countsState);\n\n userState[entryId] = reaction;\n writeUserState(userState);\n\n return {\n updated: true,\n counts: getReactionCounts(entryId, reactions),\n userReaction: reaction,\n };\n}\n","import {\n useState,\n useCallback,\n useEffect,\n useRef,\n type ReactNode,\n type CSSProperties,\n useMemo,\n} from \"react\";\nimport { parseDescription } from \"../../markdown\";\nimport { formatDateForLocale, formatRelativeTimeForLocale } from \"../../i18n\";\nimport {\n ensureFeatureDropAnimationStyles,\n getAnimationDurationMs,\n getEnterAnimation,\n getExitAnimation,\n} from \"../../animation\";\nimport type { FeatureDropThemeInput } from \"../../theme\";\nimport type { FeatureEntry, AnalyticsCallbacks } from \"../../types\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\nimport { useThemeVariables } from \"../theme\";\nimport {\n DEFAULT_REACTIONS,\n getReactionCounts,\n getUserReaction,\n reactToEntry,\n type ReactionCounts,\n} from \"../reactions-store\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface ChangelogEntryRenderProps {\n feature: FeatureEntry;\n dismiss: () => void;\n onFeatureClick?: () => void;\n reactions?: ReactionCounts;\n userReaction?: string | null;\n canReact?: boolean;\n react?: (reaction: string) => void;\n}\n\nexport interface ChangelogWidgetRenderProps {\n /** Whether the widget is currently open */\n isOpen: boolean;\n /** Open the widget */\n open: () => void;\n /** Close the widget */\n close: () => void;\n /** Toggle open/close */\n toggle: () => void;\n /** Current new feature count */\n count: number;\n /** Sorted features to display */\n features: FeatureEntry[];\n /** Dismiss a single feature */\n dismiss: (id: string) => void;\n /** Dismiss all features */\n dismissAll: () => Promise<void>;\n}\n\nexport interface ChangelogWidgetProps {\n /** Display variant */\n variant?: \"panel\" | \"modal\" | \"popover\";\n /** Title shown in the widget header. Default: \"What's New\" */\n title?: string;\n /** Text for the trigger button. Default: \"What's New\" */\n triggerLabel?: string;\n /** Show trigger badge count. Default: true */\n showCount?: boolean;\n /** Text for the \"mark all as read\" button. Default: \"Mark all as read\" */\n markAllLabel?: string;\n /** Whether to show the mark-all button. Default: true */\n showMarkAll?: boolean;\n /** Text shown when no new features exist. Default: \"You're all caught up!\" */\n emptyLabel?: string;\n /** Max height for the feed area. Default: \"400px\" */\n maxHeight?: string;\n /** Date display mode for entry metadata. Default: \"absolute\" */\n dateFormat?: \"absolute\" | \"relative\";\n /** Analytics callbacks */\n analytics?: AnalyticsCallbacks;\n /** Additional CSS class for the container */\n className?: string;\n /** Additional inline styles for the container */\n style?: CSSProperties;\n /** Optional component-scoped theme preset or overrides */\n theme?: FeatureDropThemeInput;\n /** Render prop for full customization — receives widget state */\n children?: (props: ChangelogWidgetRenderProps) => ReactNode;\n /** Custom render for each entry — receives feature + dismiss callback */\n renderEntry?: (props: ChangelogEntryRenderProps) => ReactNode;\n /** Custom render for the trigger button */\n renderTrigger?: (props: { count: number; onClick: () => void }) => ReactNode;\n /** Show reaction controls on each entry. Default: false */\n showReactions?: boolean;\n /** Reaction options. Default: 👍 ❤️ 🎉 👀 👎 */\n reactions?: string[];\n /** Callback fired when a reaction is persisted */\n onReaction?: (feature: FeatureEntry, reaction: string, counts: ReactionCounts) => void;\n}\n\n/* ------------------------------------------------------------------ */\n/* Default Styles (CSS custom properties) */\n/* ------------------------------------------------------------------ */\n\nconst overlayStyles: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n backgroundColor: \"var(--featuredrop-overlay-bg, rgba(0, 0, 0, 0.4))\",\n zIndex: \"var(--featuredrop-z-index, 9998)\" as unknown as number,\n};\n\nconst panelContainerStyles: CSSProperties = {\n position: \"fixed\",\n top: 0,\n right: 0,\n bottom: 0,\n width: \"var(--featuredrop-panel-width, 380px)\",\n maxWidth: \"100vw\",\n backgroundColor: \"var(--featuredrop-widget-bg, #ffffff)\",\n boxShadow: \"var(--featuredrop-widget-shadow, -4px 0 24px rgba(0, 0, 0, 0.12))\",\n zIndex: \"var(--featuredrop-z-index, 9999)\" as unknown as number,\n display: \"flex\",\n flexDirection: \"column\",\n fontFamily: \"var(--featuredrop-font-family, inherit)\",\n};\n\nconst modalContainerStyles: CSSProperties = {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"var(--featuredrop-modal-width, 480px)\",\n maxWidth: \"90vw\",\n maxHeight: \"80vh\",\n backgroundColor: \"var(--featuredrop-widget-bg, #ffffff)\",\n borderRadius: \"var(--featuredrop-widget-radius, 12px)\",\n boxShadow: \"var(--featuredrop-widget-shadow, 0 20px 60px rgba(0, 0, 0, 0.15))\",\n zIndex: \"var(--featuredrop-z-index, 9999)\" as unknown as number,\n display: \"flex\",\n flexDirection: \"column\",\n fontFamily: \"var(--featuredrop-font-family, inherit)\",\n};\n\nconst popoverContainerStyles: CSSProperties = {\n position: \"absolute\",\n top: \"100%\",\n right: 0,\n marginTop: \"8px\",\n width: \"var(--featuredrop-popover-width, 340px)\",\n maxWidth: \"90vw\",\n backgroundColor: \"var(--featuredrop-widget-bg, #ffffff)\",\n borderRadius: \"var(--featuredrop-widget-radius, 12px)\",\n boxShadow: \"var(--featuredrop-widget-shadow, 0 8px 30px rgba(0, 0, 0, 0.12))\",\n zIndex: \"var(--featuredrop-z-index, 9999)\" as unknown as number,\n display: \"flex\",\n flexDirection: \"column\",\n fontFamily: \"var(--featuredrop-font-family, inherit)\",\n};\n\nconst headerStyles: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"var(--featuredrop-widget-padding, 16px)\",\n borderBottom: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n};\n\nconst titleStyles: CSSProperties = {\n margin: 0,\n fontSize: \"var(--featuredrop-title-size, 16px)\",\n fontWeight: 600,\n color: \"var(--featuredrop-title-color, #111827)\",\n};\n\nconst closeButtonStyles: CSSProperties = {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px\",\n fontSize: \"18px\",\n color: \"var(--featuredrop-close-color, #6b7280)\",\n lineHeight: 1,\n};\n\nconst feedStyles: CSSProperties = {\n flex: 1,\n overflowY: \"auto\",\n padding: \"var(--featuredrop-widget-padding, 16px)\",\n};\n\nconst entryStyles: CSSProperties = {\n padding: \"12px 0\",\n borderBottom: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n};\n\nconst entryTitleStyles: CSSProperties = {\n fontSize: \"var(--featuredrop-entry-title-size, 14px)\",\n fontWeight: 600,\n color: \"var(--featuredrop-entry-title-color, #111827)\",\n margin: \"0 0 4px\",\n};\n\nconst entryDescriptionStyles: CSSProperties = {\n fontSize: \"var(--featuredrop-entry-desc-size, 13px)\",\n color: \"var(--featuredrop-entry-desc-color, #6b7280)\",\n margin: \"0 0 6px\",\n lineHeight: 1.5,\n};\n\nconst entryMetaStyles: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n fontSize: \"12px\",\n color: \"var(--featuredrop-entry-meta-color, #9ca3af)\",\n};\n\nconst typeTagStyles: CSSProperties = {\n display: \"inline-block\",\n padding: \"1px 6px\",\n borderRadius: \"4px\",\n fontSize: \"11px\",\n fontWeight: 600,\n textTransform: \"uppercase\" as const,\n};\n\nconst ctaButtonStyles: CSSProperties = {\n display: \"inline-block\",\n marginTop: \"8px\",\n padding: \"6px 12px\",\n borderRadius: \"var(--featuredrop-cta-radius, 6px)\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"var(--featuredrop-cta-color, #ffffff)\",\n backgroundColor: \"var(--featuredrop-cta-bg, #3b82f6)\",\n textDecoration: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n};\n\nconst footerStyles: CSSProperties = {\n padding: \"var(--featuredrop-widget-padding, 16px)\",\n borderTop: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n textAlign: \"center\",\n};\n\nconst markAllButtonStyles: CSSProperties = {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"var(--featuredrop-mark-all-color, #3b82f6)\",\n padding: \"4px 8px\",\n};\n\nconst triggerButtonStyles: CSSProperties = {\n position: \"relative\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"8px 14px\",\n border: \"1px solid var(--featuredrop-trigger-border, #d1d5db)\",\n borderRadius: \"var(--featuredrop-trigger-radius, 8px)\",\n backgroundColor: \"var(--featuredrop-trigger-bg, #ffffff)\",\n color: \"var(--featuredrop-trigger-color, #374151)\",\n fontSize: \"14px\",\n fontWeight: 500,\n cursor: \"pointer\",\n fontFamily: \"inherit\",\n};\n\nconst triggerBadgeStyles: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minWidth: \"18px\",\n height: \"18px\",\n padding: \"0 4px\",\n borderRadius: \"9999px\",\n fontSize: \"11px\",\n fontWeight: 700,\n color: \"var(--featuredrop-badge-color, white)\",\n backgroundColor: \"var(--featuredrop-badge-bg, #f59e0b)\",\n};\n\nconst emptyStyles: CSSProperties = {\n padding: \"32px 16px\",\n textAlign: \"center\",\n fontSize: \"14px\",\n color: \"var(--featuredrop-empty-color, #9ca3af)\",\n};\n\nconst reactionsRowStyles: CSSProperties = {\n display: \"flex\",\n gap: \"6px\",\n flexWrap: \"wrap\",\n marginTop: \"8px\",\n};\n\nconst reactionButtonStyles: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n borderRadius: \"999px\",\n background: \"#fff\",\n padding: \"3px 8px\",\n fontSize: \"12px\",\n cursor: \"pointer\",\n};\n\nconst srOnlyStyles: CSSProperties = {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: 0,\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n};\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nconst TYPE_COLORS: Record<string, { color: string; bg: string }> = {\n feature: { color: \"#065f46\", bg: \"rgba(16, 185, 129, 0.15)\" },\n improvement: { color: \"#1e40af\", bg: \"rgba(59, 130, 246, 0.15)\" },\n fix: { color: \"#92400e\", bg: \"rgba(245, 158, 11, 0.15)\" },\n breaking: { color: \"#991b1b\", bg: \"rgba(239, 68, 68, 0.15)\" },\n};\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n const nodes = container.querySelectorAll<HTMLElement>(\n [\n \"a[href]\",\n \"button:not([disabled])\",\n \"textarea:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n ].join(\",\"),\n );\n return Array.from(nodes).filter(\n (node) => !node.hasAttribute(\"disabled\") && node.getAttribute(\"aria-hidden\") !== \"true\",\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Default Entry Renderer */\n/* ------------------------------------------------------------------ */\n\nfunction DefaultEntry({\n feature,\n dismiss,\n onFeatureClick,\n reactions,\n userReaction,\n canReact,\n react,\n locale,\n dateFormat,\n}: ChangelogEntryRenderProps & { locale: string; dateFormat: \"absolute\" | \"relative\" }) {\n const typeStyle = feature.type\n ? TYPE_COLORS[feature.type] ?? TYPE_COLORS.feature\n : null;\n\n const descriptionHtml = feature.description\n ? parseDescription(feature.description)\n : null;\n\n const versionLabel =\n typeof feature.version === \"string\"\n ? feature.version\n : feature.version?.introduced ?? feature.version?.showNewUntil ?? null;\n\n return (\n <div data-featuredrop-entry={feature.id} style={entryStyles}>\n <div style={{ display: \"flex\", alignItems: \"flex-start\", justifyContent: \"space-between\" }}>\n <p style={entryTitleStyles}>{feature.label}</p>\n <button\n onClick={dismiss}\n style={{ ...closeButtonStyles, fontSize: \"14px\", flexShrink: 0 }}\n aria-label={`Dismiss ${feature.label}`}\n >\n &times;\n </button>\n </div>\n {descriptionHtml && (\n <div\n style={entryDescriptionStyles}\n dangerouslySetInnerHTML={{ __html: descriptionHtml }}\n />\n )}\n {feature.image && (\n <img\n src={feature.image}\n alt={feature.label}\n style={{\n width: \"100%\",\n borderRadius: \"8px\",\n marginBottom: \"8px\",\n }}\n />\n )}\n <div style={entryMetaStyles}>\n {feature.type && typeStyle && (\n <span\n style={{\n ...typeTagStyles,\n color: typeStyle.color,\n backgroundColor: typeStyle.bg,\n }}\n >\n {feature.type}\n </span>\n )}\n {feature.category && (\n <span>{feature.category}</span>\n )}\n <span>\n {dateFormat === \"relative\"\n ? formatRelativeTimeForLocale(feature.releasedAt, locale)\n : formatDateForLocale(feature.releasedAt, locale)}\n </span>\n {versionLabel && <span>v{versionLabel}</span>}\n </div>\n {feature.cta && (\n <a\n href={feature.cta.url}\n style={ctaButtonStyles}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onFeatureClick}\n >\n {feature.cta.label}\n </a>\n )}\n {reactions && react && (\n <div style={reactionsRowStyles}>\n {Object.entries(reactions).map(([reaction, count]) => (\n <button\n key={reaction}\n type=\"button\"\n onClick={() => react(reaction)}\n disabled={!canReact}\n style={{\n ...reactionButtonStyles,\n opacity: !canReact && userReaction !== reaction ? 0.55 : 1,\n background: userReaction === reaction ? \"rgba(17, 24, 39, 0.08)\" : \"#fff\",\n }}\n aria-label={`React ${reaction} to ${feature.label}`}\n >\n <span>{reaction}</span>\n <span>{count}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* ChangelogWidget Component */\n/* ------------------------------------------------------------------ */\n\n/**\n * Changelog widget — the #1 feature for feature discovery tools.\n *\n * Renders a trigger button with an unread count badge and a\n * slide-out panel, modal, or popover with the changelog feed.\n *\n * Styled via CSS custom properties — zero framework dependency.\n * Use `children` render prop for full headless control.\n *\n * @example\n * ```tsx\n * <ChangelogWidget variant=\"panel\" />\n * ```\n *\n * @example Headless mode\n * ```tsx\n * <ChangelogWidget>\n * {({ isOpen, toggle, features, count }) => (\n * <MyCustomUI ... />\n * )}\n * </ChangelogWidget>\n * ```\n */\nexport function ChangelogWidget({\n variant = \"panel\",\n title,\n triggerLabel,\n showCount = true,\n markAllLabel,\n showMarkAll = true,\n emptyLabel,\n maxHeight = \"400px\",\n dateFormat = \"absolute\",\n analytics,\n className,\n style,\n theme,\n children,\n renderEntry,\n renderTrigger,\n showReactions = false,\n reactions = [...DEFAULT_REACTIONS],\n onReaction,\n}: ChangelogWidgetProps) {\n const {\n newFeaturesSorted,\n newCount,\n dismiss,\n dismissAll,\n markFeatureSeen,\n markFeatureClicked,\n trackAdoptionEvent,\n locale,\n direction,\n animation,\n translations,\n } = useFeatureDrop();\n const [isOpen, setIsOpen] = useState(false);\n const [isClosing, setIsClosing] = useState(false);\n const [, setReactionVersion] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n const dialogRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const widgetIdRef = useRef(`featuredrop-widget-${Math.random().toString(36).slice(2, 10)}`);\n const themeVariables = useThemeVariables(theme);\n const resolvedTitle = title ?? translations.whatsNewTitle;\n const resolvedTriggerLabel = triggerLabel ?? translations.whatsNewTitle;\n const resolvedMarkAllLabel = markAllLabel ?? translations.markAllRead;\n const resolvedEmptyLabel = emptyLabel ?? translations.allCaughtUp;\n const dialogId = `${widgetIdRef.current}-dialog`;\n const titleId = `${widgetIdRef.current}-title`;\n const countLabel = translations.newFeatureCount(newCount);\n const dialogEnterAnimation = useMemo(\n () => getEnterAnimation(animation, variant),\n [animation, variant],\n );\n const dialogExitAnimation = useMemo(\n () => getExitAnimation(animation, variant),\n [animation, variant],\n );\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n return () => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n };\n }, []);\n\n const open = useCallback(() => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n setIsClosing(false);\n if (typeof document !== \"undefined\" && document.activeElement instanceof HTMLElement) {\n lastFocusedElementRef.current = document.activeElement;\n }\n setIsOpen(true);\n analytics?.onWidgetOpened?.();\n }, [analytics]);\n\n const close = useCallback(() => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n setIsOpen(false);\n const exitDuration = getAnimationDurationMs(animation, variant, \"exit\");\n if (exitDuration > 0) {\n setIsClosing(true);\n closeTimerRef.current = setTimeout(() => {\n setIsClosing(false);\n closeTimerRef.current = null;\n }, exitDuration);\n } else {\n setIsClosing(false);\n }\n analytics?.onWidgetClosed?.();\n const returnTarget = triggerRef.current ?? lastFocusedElementRef.current;\n if (returnTarget) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => {\n returnTarget.focus();\n });\n } else {\n returnTarget.focus();\n }\n }\n }, [animation, analytics, variant]);\n\n const toggle = useCallback(() => {\n if (isOpen) {\n close();\n } else {\n open();\n }\n }, [isOpen, open, close]);\n\n const handleDismiss = useCallback(\n (id: string) => {\n const feature = newFeaturesSorted.find((f) => f.id === id);\n dismiss(id);\n if (feature) {\n analytics?.onFeatureDismissed?.(feature);\n }\n },\n [dismiss, newFeaturesSorted, analytics],\n );\n\n const handleDismissAll = useCallback(async () => {\n await dismissAll();\n analytics?.onAllDismissed?.();\n }, [dismissAll, analytics]);\n\n const handleFeatureClick = useCallback((feature: FeatureEntry) => {\n markFeatureClicked(feature.id);\n trackAdoptionEvent({\n type: \"cta_clicked\",\n featureId: feature.id,\n metadata: { source: \"changelog\" },\n });\n analytics?.onFeatureClicked?.(feature);\n }, [analytics, markFeatureClicked, trackAdoptionEvent]);\n\n const handleReaction = useCallback((feature: FeatureEntry, reaction: string) => {\n const result = reactToEntry(feature.id, reaction, reactions);\n if (!result.updated) return;\n setReactionVersion((value) => value + 1);\n onReaction?.(feature, reaction, result.counts);\n }, [onReaction, reactions]);\n\n useEffect(() => {\n if (!isOpen) return;\n for (const feature of newFeaturesSorted) {\n markFeatureSeen(feature.id);\n analytics?.onFeatureSeen?.(feature);\n }\n }, [analytics, isOpen, markFeatureSeen, newFeaturesSorted]);\n\n // Close on click outside (panel/modal)\n useEffect(() => {\n if (!isOpen || variant === \"popover\") return;\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") close();\n };\n document.addEventListener(\"keydown\", handleEsc);\n return () => document.removeEventListener(\"keydown\", handleEsc);\n }, [isOpen, variant, close]);\n\n // Close popover on outside click\n useEffect(() => {\n if (!isOpen || variant !== \"popover\") return;\n const handleClick = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n close();\n }\n };\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") close();\n };\n document.addEventListener(\"mousedown\", handleClick);\n document.addEventListener(\"keydown\", handleEsc);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n document.removeEventListener(\"keydown\", handleEsc);\n };\n }, [isOpen, variant, close]);\n\n useEffect(() => {\n if (!isOpen) return;\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n const focusable = getFocusableElements(dialog);\n const first = focusable[0] ?? dialog;\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => first.focus());\n } else {\n first.focus();\n }\n\n const handleTab = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") return;\n const items = getFocusableElements(dialog);\n if (items.length === 0) {\n event.preventDefault();\n dialog.focus();\n return;\n }\n\n const firstItem = items[0];\n const lastItem = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n\n if (event.shiftKey) {\n if (active === firstItem || active === dialog) {\n event.preventDefault();\n lastItem.focus();\n }\n return;\n }\n\n if (active === lastItem) {\n event.preventDefault();\n firstItem.focus();\n }\n };\n\n dialog.addEventListener(\"keydown\", handleTab);\n return () => {\n dialog.removeEventListener(\"keydown\", handleTab);\n };\n }, [isOpen]);\n\n // Headless render prop mode\n if (children) {\n return (\n <>\n {children({\n isOpen,\n open,\n close,\n toggle,\n count: newCount,\n features: newFeaturesSorted,\n dismiss: handleDismiss,\n dismissAll: handleDismissAll,\n })}\n </>\n );\n }\n\n const widgetRootStyle = useMemo<CSSProperties>(\n () => ({\n ...(themeVariables ?? {}),\n position: \"relative\",\n display: \"inline-block\",\n ...(style ?? {}),\n }),\n [themeVariables, style],\n );\n\n const dialogContainerStyles =\n variant === \"modal\"\n ? modalContainerStyles\n : variant === \"popover\"\n ? popoverContainerStyles\n : panelContainerStyles;\n\n return (\n <div\n ref={containerRef}\n data-featuredrop-widget\n className={className}\n style={widgetRootStyle}\n dir={direction}\n >\n {/* Trigger */}\n {renderTrigger ? (\n renderTrigger({ count: newCount, onClick: toggle })\n ) : (\n <button\n ref={triggerRef}\n onClick={toggle}\n style={triggerButtonStyles}\n data-featuredrop-trigger\n aria-label={`${resolvedTriggerLabel}${newCount > 0 ? ` — ${countLabel}` : \"\"}`}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={dialogId}\n >\n {resolvedTriggerLabel}\n {showCount && newCount > 0 && (\n <span style={triggerBadgeStyles} data-featuredrop-trigger-badge>\n {newCount}\n </span>\n )}\n </button>\n )}\n <span style={srOnlyStyles} aria-live=\"polite\" aria-atomic=\"true\">\n {countLabel}\n </span>\n\n {/* Widget body */}\n {(isOpen || isClosing) && (\n <>\n {/* Overlay for panel/modal */}\n {variant !== \"popover\" && (\n <div\n style={overlayStyles}\n onClick={close}\n data-featuredrop-overlay\n aria-hidden=\"true\"\n />\n )}\n\n <div\n id={dialogId}\n ref={dialogRef}\n style={{\n ...dialogContainerStyles,\n animation: isClosing ? dialogExitAnimation : dialogEnterAnimation,\n }}\n data-featuredrop-container={variant}\n role=\"dialog\"\n aria-labelledby={titleId}\n aria-modal={variant === \"popover\" ? undefined : true}\n tabIndex={-1}\n >\n {/* Header */}\n <div style={headerStyles} data-featuredrop-header>\n <h2 id={titleId} style={titleStyles}>{resolvedTitle}</h2>\n <button\n onClick={close}\n style={closeButtonStyles}\n aria-label={translations.close}\n >\n &times;\n </button>\n </div>\n\n {/* Feed */}\n <div style={{ ...feedStyles, maxHeight }} data-featuredrop-feed>\n {newFeaturesSorted.length === 0 ? (\n <div style={emptyStyles} data-featuredrop-empty>\n {resolvedEmptyLabel}\n </div>\n ) : (\n newFeaturesSorted.map((feature) =>\n renderEntry ? (\n <div key={feature.id}>\n {(() => {\n const counts = showReactions\n ? getReactionCounts(feature.id, reactions)\n : undefined;\n const userReaction = showReactions\n ? getUserReaction(feature.id)\n : null;\n const canReact = showReactions\n ? !userReaction\n : false;\n return renderEntry({\n feature,\n dismiss: () => handleDismiss(feature.id),\n onFeatureClick: () => handleFeatureClick(feature),\n reactions: counts,\n userReaction,\n canReact,\n react: (reaction) => handleReaction(feature, reaction),\n });\n })()}\n </div>\n ) : (\n <DefaultEntry\n key={feature.id}\n feature={feature}\n dismiss={() => handleDismiss(feature.id)}\n onFeatureClick={() => handleFeatureClick(feature)}\n locale={locale}\n dateFormat={dateFormat}\n reactions={showReactions ? getReactionCounts(feature.id, reactions) : undefined}\n userReaction={showReactions ? getUserReaction(feature.id) : null}\n canReact={showReactions ? !getUserReaction(feature.id) : undefined}\n react={(reaction) => handleReaction(feature, reaction)}\n />\n ),\n )\n )}\n </div>\n\n {/* Footer */}\n {showMarkAll && newFeaturesSorted.length > 0 && (\n <div style={footerStyles} data-featuredrop-footer>\n <button\n onClick={handleDismissAll}\n style={markAllButtonStyles}\n data-featuredrop-mark-all\n >\n {resolvedMarkAllLabel}\n </button>\n </div>\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n","import {\n useState,\n useEffect,\n useCallback,\n useRef,\n useMemo,\n type ReactNode,\n type CSSProperties,\n type RefObject,\n} from \"react\";\nimport type { FeatureEntry, AnalyticsCallbacks } from \"../../types\";\nimport {\n ensureFeatureDropAnimationStyles,\n getEnterAnimation,\n getPulseAnimation,\n} from \"../../animation\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\nimport { parseDescription } from \"../../markdown\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface SpotlightRenderProps {\n /** The feature being spotlighted */\n feature: FeatureEntry | undefined;\n /** Whether the spotlight is active */\n isActive: boolean;\n /** Whether the tooltip is visible */\n isTooltipOpen: boolean;\n /** Show the tooltip */\n openTooltip: () => void;\n /** Hide the tooltip */\n closeTooltip: () => void;\n /** Dismiss this spotlight permanently */\n dismiss: () => void;\n}\n\nexport interface SpotlightProps {\n /** The feature ID to spotlight */\n featureId: string;\n /** Ref to the target DOM element — beacon will be positioned over it */\n targetRef?: RefObject<HTMLElement | null>;\n /** CSS selector for the target element (alternative to targetRef) */\n targetSelector?: string;\n /** Tooltip placement relative to target */\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Beacon size in pixels. Default: 12 */\n beaconSize?: number;\n /** Auto-dismiss after the tooltip is seen */\n autoDismiss?: boolean;\n /** Delay before auto-dismiss in ms. Default: 5000 */\n autoDismissDelay?: number;\n /** Analytics callbacks */\n analytics?: AnalyticsCallbacks;\n /** Additional CSS class */\n className?: string;\n /** Custom tooltip content */\n tooltipContent?: ReactNode;\n /** Render prop for full customization */\n children?: (props: SpotlightRenderProps) => ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Styles */\n/* ------------------------------------------------------------------ */\n\nconst beaconStyles: CSSProperties = {\n position: \"absolute\",\n borderRadius: \"50%\",\n backgroundColor: \"var(--featuredrop-beacon-color, #f59e0b)\",\n cursor: \"pointer\",\n zIndex: \"var(--featuredrop-z-index, 9999)\" as unknown as number,\n};\n\nconst beaconPulseStyles: CSSProperties = {\n position: \"absolute\",\n inset: \"-4px\",\n borderRadius: \"50%\",\n border: \"2px solid var(--featuredrop-beacon-color, #f59e0b)\",\n opacity: 0.6,\n};\n\nconst tooltipStyles: CSSProperties = {\n position: \"absolute\",\n padding: \"var(--featuredrop-tooltip-padding, 12px 16px)\",\n backgroundColor: \"var(--featuredrop-tooltip-bg, #ffffff)\",\n borderRadius: \"var(--featuredrop-tooltip-radius, 8px)\",\n boxShadow: \"var(--featuredrop-tooltip-shadow, 0 4px 20px rgba(0, 0, 0, 0.12))\",\n maxWidth: \"var(--featuredrop-tooltip-max-width, 260px)\",\n zIndex: \"var(--featuredrop-z-index, 10000)\" as unknown as number,\n fontFamily: \"var(--featuredrop-font-family, inherit)\",\n};\n\nconst tooltipTitleStyles: CSSProperties = {\n margin: \"0 0 4px\",\n fontSize: \"var(--featuredrop-tooltip-title-size, 14px)\",\n fontWeight: 600,\n color: \"var(--featuredrop-tooltip-title-color, #111827)\",\n};\n\nconst tooltipDescStyles: CSSProperties = {\n margin: 0,\n fontSize: \"var(--featuredrop-tooltip-desc-size, 13px)\",\n color: \"var(--featuredrop-tooltip-desc-color, #6b7280)\",\n lineHeight: 1.5,\n};\n\nconst tooltipDismissStyles: CSSProperties = {\n display: \"inline-block\",\n marginTop: \"8px\",\n padding: \"4px 10px\",\n border: \"none\",\n borderRadius: \"4px\",\n fontSize: \"12px\",\n fontWeight: 600,\n cursor: \"pointer\",\n backgroundColor: \"var(--featuredrop-tooltip-dismiss-bg, #f3f4f6)\",\n color: \"var(--featuredrop-tooltip-dismiss-color, #374151)\",\n};\n\n/* ------------------------------------------------------------------ */\n/* Spotlight Component */\n/* ------------------------------------------------------------------ */\n\n/**\n * Pulsing beacon that attaches to any DOM element to highlight a new feature.\n *\n * Clicking the beacon reveals a tooltip with feature info.\n * After dismissal, the beacon disappears permanently for this user.\n *\n * @example\n * ```tsx\n * const ref = useRef<HTMLButtonElement>(null);\n * <button ref={ref}>Analytics</button>\n * <Spotlight featureId=\"analytics-v2\" targetRef={ref} />\n * ```\n *\n * @example With CSS selector\n * ```tsx\n * <Spotlight featureId=\"analytics-v2\" targetSelector=\"#analytics-btn\" />\n * ```\n */\nexport function Spotlight({\n featureId,\n targetRef,\n targetSelector,\n placement = \"top\",\n beaconSize = 12,\n autoDismiss = false,\n autoDismissDelay = 5000,\n analytics,\n className,\n tooltipContent,\n children,\n}: SpotlightProps) {\n const {\n newFeatures,\n dismiss,\n markFeatureSeen,\n acquireSpotlightSlot,\n releaseSpotlightSlot,\n activeSpotlightCount,\n animation,\n translations,\n } = useFeatureDrop();\n const feature = newFeatures.find((f) => f.id === featureId);\n const [isTooltipOpen, setTooltipOpen] = useState(false);\n const [targetRect, setTargetRect] = useState<DOMRect | null>(null);\n const [hasSlot, setHasSlot] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const beaconRef = useRef<HTMLDivElement>(null);\n const instanceIdRef = useRef(`featuredrop-spotlight-${Math.random().toString(36).slice(2, 10)}`);\n const beaconPulseAnimation = useMemo(\n () => getPulseAnimation(animation, \"beacon\"),\n [animation],\n );\n const tooltipEnterAnimation = useMemo(\n () => getEnterAnimation(animation, \"popover\"),\n [animation],\n );\n\n const isActive = !!feature;\n const tooltipId = `${instanceIdRef.current}-tooltip`;\n const tooltipTitleId = `${instanceIdRef.current}-title`;\n const tooltipDescId = `${instanceIdRef.current}-description`;\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n useEffect(() => {\n if (!isActive) {\n setHasSlot(false);\n releaseSpotlightSlot(featureId);\n return;\n }\n if (hasSlot) return;\n setHasSlot(acquireSpotlightSlot(featureId, feature?.priority));\n }, [\n isActive,\n hasSlot,\n feature?.priority,\n featureId,\n acquireSpotlightSlot,\n releaseSpotlightSlot,\n activeSpotlightCount,\n ]);\n\n useEffect(() => {\n return () => {\n releaseSpotlightSlot(featureId);\n };\n }, [featureId, releaseSpotlightSlot]);\n\n // Track target position\n useEffect(() => {\n if (!isActive) return;\n\n const getTarget = (): HTMLElement | null => {\n if (targetRef?.current) return targetRef.current;\n if (targetSelector) return document.querySelector(targetSelector);\n return null;\n };\n\n const update = () => {\n const el = getTarget();\n if (el) setTargetRect(el.getBoundingClientRect());\n };\n\n update();\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n return () => {\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n };\n }, [isActive, targetRef, targetSelector]);\n\n const openTooltip = useCallback(() => {\n setTooltipOpen(true);\n if (feature) {\n markFeatureSeen(feature.id);\n analytics?.onFeatureSeen?.(feature);\n }\n if (autoDismiss) {\n timerRef.current = setTimeout(() => {\n dismiss(featureId);\n if (feature) analytics?.onFeatureDismissed?.(feature);\n }, autoDismissDelay);\n }\n }, [feature, featureId, autoDismiss, autoDismissDelay, dismiss, analytics, markFeatureSeen]);\n\n const closeTooltip = useCallback(() => {\n setTooltipOpen(false);\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n const beacon = beaconRef.current;\n if (beacon) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => beacon.focus());\n } else {\n beacon.focus();\n }\n }\n }, []);\n\n const handleDismiss = useCallback(() => {\n dismiss(featureId);\n setTooltipOpen(false);\n if (feature) analytics?.onFeatureDismissed?.(feature);\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }, [featureId, dismiss, feature, analytics]);\n\n useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, []);\n\n useEffect(() => {\n if (!isTooltipOpen) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n closeTooltip();\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [closeTooltip, isTooltipOpen]);\n\n // Render prop mode\n if (children) {\n return (\n <>\n {children({\n feature,\n isActive,\n isTooltipOpen,\n openTooltip,\n closeTooltip,\n dismiss: handleDismiss,\n })}\n </>\n );\n }\n\n if (!isActive || !hasSlot || !targetRect) return null;\n\n // Compute beacon position\n const beaconLeft = targetRect.right - beaconSize / 2;\n const beaconTop = targetRect.top - beaconSize / 2;\n\n // Tooltip offset from beacon\n const tooltipOffset = 12;\n const tooltipPosition: CSSProperties = (() => {\n switch (placement) {\n case \"bottom\":\n return { top: targetRect.bottom + tooltipOffset, left: targetRect.left };\n case \"left\":\n return { top: targetRect.top, right: `calc(100vw - ${targetRect.left - tooltipOffset}px)` };\n case \"right\":\n return { top: targetRect.top, left: targetRect.right + tooltipOffset };\n case \"top\":\n default:\n return { bottom: `calc(100vh - ${targetRect.top - tooltipOffset}px)`, left: targetRect.left };\n }\n })();\n\n return (\n <>\n {/* Beacon */}\n <div\n ref={beaconRef}\n data-featuredrop-spotlight={featureId}\n className={className}\n style={{\n ...beaconStyles,\n position: \"fixed\",\n left: beaconLeft,\n top: beaconTop,\n width: beaconSize,\n height: beaconSize,\n }}\n onClick={isTooltipOpen ? closeTooltip : openTooltip}\n role=\"button\"\n tabIndex={0}\n aria-haspopup=\"dialog\"\n aria-expanded={isTooltipOpen}\n aria-controls={tooltipId}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n isTooltipOpen ? closeTooltip() : openTooltip();\n }\n }}\n aria-label={`New: ${feature.label}`}\n >\n <span\n style={{\n ...beaconPulseStyles,\n animation: beaconPulseAnimation ?? \"none\",\n }}\n />\n </div>\n\n {/* Tooltip */}\n {isTooltipOpen && (\n <div\n id={tooltipId}\n style={{\n ...tooltipStyles,\n position: \"fixed\",\n ...tooltipPosition,\n animation: tooltipEnterAnimation,\n }}\n data-featuredrop-tooltip\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={tooltipTitleId}\n aria-describedby={feature.description ? tooltipDescId : undefined}\n >\n {tooltipContent ?? (\n <>\n <p id={tooltipTitleId} style={tooltipTitleStyles}>{feature.label}</p>\n {feature.description && (\n <div\n id={tooltipDescId}\n style={tooltipDescStyles}\n dangerouslySetInnerHTML={{ __html: parseDescription(feature.description) }}\n />\n )}\n <button\n type=\"button\"\n onClick={handleDismiss}\n style={tooltipDismissStyles}\n >\n {translations.gotIt}\n </button>\n </>\n )}\n </div>\n )}\n </>\n );\n}\n","import { useState, useCallback, type ReactNode, type CSSProperties } from \"react\";\nimport type { FeatureEntry, AnalyticsCallbacks } from \"../../types\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\nimport { parseDescription } from \"../../markdown\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport type BannerVariant = \"info\" | \"success\" | \"warning\" | \"announcement\";\n\nexport interface BannerRenderProps {\n /** The feature being announced */\n feature: FeatureEntry | undefined;\n /** Whether the banner is active */\n isActive: boolean;\n /** Whether the banner has been dismissed this session */\n isDismissed: boolean;\n /** Dismiss the banner permanently */\n dismiss: () => void;\n}\n\nexport interface BannerProps {\n /** Feature ID to display as a banner */\n featureId: string;\n /** Banner visual variant. Default: \"announcement\" */\n variant?: BannerVariant;\n /** Whether the banner is dismissible. Default: true */\n dismissible?: boolean;\n /** Position mode. Default: \"sticky\" */\n position?: \"sticky\" | \"inline\" | \"fixed\";\n /** Analytics callbacks */\n analytics?: AnalyticsCallbacks;\n /** Additional CSS class */\n className?: string;\n /** Additional inline styles */\n style?: CSSProperties;\n /** Render prop for full customization */\n children?: (props: BannerRenderProps) => ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Styles */\n/* ------------------------------------------------------------------ */\n\nconst VARIANT_STYLES: Record<BannerVariant, { bg: string; border: string; color: string; icon: string }> = {\n info: {\n bg: \"var(--featuredrop-banner-info-bg, #eff6ff)\",\n border: \"var(--featuredrop-banner-info-border, #bfdbfe)\",\n color: \"var(--featuredrop-banner-info-color, #1e40af)\",\n icon: \"\\u2139\\uFE0F\",\n },\n success: {\n bg: \"var(--featuredrop-banner-success-bg, #f0fdf4)\",\n border: \"var(--featuredrop-banner-success-border, #bbf7d0)\",\n color: \"var(--featuredrop-banner-success-color, #166534)\",\n icon: \"\\u2705\",\n },\n warning: {\n bg: \"var(--featuredrop-banner-warning-bg, #fffbeb)\",\n border: \"var(--featuredrop-banner-warning-border, #fde68a)\",\n color: \"var(--featuredrop-banner-warning-color, #92400e)\",\n icon: \"\\u26A0\\uFE0F\",\n },\n announcement: {\n bg: \"var(--featuredrop-banner-announce-bg, #faf5ff)\",\n border: \"var(--featuredrop-banner-announce-border, #e9d5ff)\",\n color: \"var(--featuredrop-banner-announce-color, #6b21a8)\",\n icon: \"\\uD83C\\uDF89\",\n },\n};\n\nconst baseBannerStyles: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"12px\",\n padding: \"var(--featuredrop-banner-padding, 10px 16px)\",\n fontFamily: \"var(--featuredrop-font-family, inherit)\",\n fontSize: \"var(--featuredrop-banner-font-size, 14px)\",\n lineHeight: 1.5,\n borderBottom: \"1px solid\",\n};\n\nconst bannerTextStyles: CSSProperties = {\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"8px\",\n};\n\nconst bannerLabelStyles: CSSProperties = {\n fontWeight: 600,\n};\n\nconst bannerDescStyles: CSSProperties = {\n fontWeight: 400,\n opacity: 0.9,\n};\n\nconst bannerCtaStyles: CSSProperties = {\n display: \"inline-block\",\n padding: \"4px 12px\",\n borderRadius: \"var(--featuredrop-banner-cta-radius, 6px)\",\n fontSize: \"13px\",\n fontWeight: 600,\n textDecoration: \"none\",\n border: \"1px solid currentColor\",\n opacity: 0.9,\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n color: \"inherit\",\n};\n\nconst bannerCloseStyles: CSSProperties = {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px\",\n fontSize: \"16px\",\n opacity: 0.6,\n color: \"inherit\",\n lineHeight: 1,\n};\n\n/* ------------------------------------------------------------------ */\n/* Banner Component */\n/* ------------------------------------------------------------------ */\n\n/**\n * Announcement banner for major feature launches or important notices.\n *\n * Shows at the top of the page (sticky/fixed) or inline in content.\n * Auto-expires using the same `showNewUntil` logic as badges.\n * Styled via CSS custom properties for each variant.\n *\n * @example\n * ```tsx\n * <Banner featureId=\"v2-launch\" variant=\"announcement\" />\n * ```\n *\n * @example Headless\n * ```tsx\n * <Banner featureId=\"v2-launch\">\n * {({ feature, dismiss }) => (\n * <div>New: {feature?.label} <button onClick={dismiss}>x</button></div>\n * )}\n * </Banner>\n * ```\n */\nexport function Banner({\n featureId,\n variant = \"announcement\",\n dismissible = true,\n position = \"sticky\",\n analytics,\n className,\n style,\n children,\n}: BannerProps) {\n const { newFeatures, dismiss, markFeatureClicked, trackAdoptionEvent } = useFeatureDrop();\n const feature = newFeatures.find((f) => f.id === featureId);\n const [sessionDismissed, setSessionDismissed] = useState(false);\n\n const isActive = !!feature && !sessionDismissed;\n\n const handleDismiss = useCallback(() => {\n dismiss(featureId);\n setSessionDismissed(true);\n if (feature) analytics?.onFeatureDismissed?.(feature);\n }, [featureId, dismiss, feature, analytics]);\n\n const handleCtaClick = useCallback(() => {\n if (!feature) return;\n markFeatureClicked(feature.id);\n trackAdoptionEvent({\n type: \"cta_clicked\",\n featureId: feature.id,\n metadata: { source: \"banner\" },\n });\n analytics?.onFeatureClicked?.(feature);\n }, [feature, markFeatureClicked, trackAdoptionEvent, analytics]);\n\n // Headless render prop\n if (children) {\n return (\n <>\n {children({\n feature,\n isActive,\n isDismissed: sessionDismissed,\n dismiss: handleDismiss,\n })}\n </>\n );\n }\n\n if (!isActive) return null;\n\n const variantStyle = VARIANT_STYLES[variant];\n const positionStyles: CSSProperties =\n position === \"fixed\"\n ? { position: \"fixed\", top: 0, left: 0, right: 0, zIndex: \"var(--featuredrop-z-index, 9999)\" as unknown as number }\n : position === \"sticky\"\n ? { position: \"sticky\", top: 0, zIndex: \"var(--featuredrop-z-index, 9999)\" as unknown as number }\n : {};\n\n const descriptionHtml = feature.description\n ? parseDescription(feature.description)\n : null;\n\n return (\n <div\n data-featuredrop-banner={variant}\n className={className}\n role=\"alert\"\n style={{\n ...baseBannerStyles,\n ...positionStyles,\n backgroundColor: variantStyle.bg,\n borderColor: variantStyle.border,\n color: variantStyle.color,\n ...style,\n }}\n >\n <div style={bannerTextStyles}>\n <span aria-hidden=\"true\">{variantStyle.icon}</span>\n <span style={bannerLabelStyles}>{feature.label}</span>\n {descriptionHtml && (\n <span\n style={bannerDescStyles}\n dangerouslySetInnerHTML={{ __html: `— ${descriptionHtml}` }}\n />\n )}\n {feature.cta && (\n <a\n href={feature.cta.url}\n style={bannerCtaStyles}\n onClick={handleCtaClick}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {feature.cta.label}\n </a>\n )}\n </div>\n {dismissible && (\n <button\n onClick={handleDismiss}\n style={bannerCloseStyles}\n aria-label=\"Dismiss banner\"\n >\n &times;\n </button>\n )}\n </div>\n );\n}\n","import {\n useState,\n useEffect,\n useCallback,\n useMemo,\n useRef,\n type ReactNode,\n type CSSProperties,\n} from \"react\";\nimport type { FeatureEntry, AnalyticsCallbacks } from \"../../types\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\nimport { parseDescription } from \"../../markdown\";\nimport {\n ensureFeatureDropAnimationStyles,\n getAnimationDurationMs,\n getEnterAnimation,\n getExitAnimation,\n} from \"../../animation\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface ToastRenderProps {\n /** Features currently showing as toasts */\n toasts: FeatureEntry[];\n /** Dismiss a specific toast */\n dismiss: (id: string) => void;\n /** Dismiss all toasts */\n dismissAll: () => void;\n}\n\nexport interface ToastProps {\n /** Feature IDs to show as toasts. If omitted, shows all new features. */\n featureIds?: string[];\n /** Max number of visible toasts at once. Default: 3 */\n maxVisible?: number;\n /** Auto-dismiss delay in ms. Default: 8000. Set to 0 to disable. */\n autoDismissMs?: number;\n /** Position on screen. Default: \"bottom-right\" */\n position?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\" | \"top-center\" | \"bottom-center\";\n /** Analytics callbacks */\n analytics?: AnalyticsCallbacks;\n /** Additional CSS class for the container */\n className?: string;\n /** Additional inline styles for the container */\n style?: CSSProperties;\n /** Render prop for full customization */\n children?: (props: ToastRenderProps) => ReactNode;\n /** Custom render for each toast */\n renderToast?: (props: { feature: FeatureEntry; dismiss: () => void }) => ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Styles */\n/* ------------------------------------------------------------------ */\n\nconst POSITION_STYLES: Record<string, CSSProperties> = {\n \"top-right\": { top: 16, right: 16 },\n \"top-left\": { top: 16, left: 16 },\n \"bottom-right\": { bottom: 16, right: 16 },\n \"bottom-left\": { bottom: 16, left: 16 },\n \"top-center\": { top: 16, left: \"50%\", transform: \"translateX(-50%)\" },\n \"bottom-center\": { bottom: 16, left: \"50%\", transform: \"translateX(-50%)\" },\n};\n\nconst containerStyles: CSSProperties = {\n position: \"fixed\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"8px\",\n zIndex: \"var(--featuredrop-toast-z-index, 10000)\" as unknown as number,\n pointerEvents: \"none\",\n};\n\nconst toastStyles: CSSProperties = {\n pointerEvents: \"auto\",\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: \"12px\",\n padding: \"var(--featuredrop-toast-padding, 12px 16px)\",\n backgroundColor: \"var(--featuredrop-toast-bg, #ffffff)\",\n borderRadius: \"var(--featuredrop-toast-radius, 10px)\",\n boxShadow: \"var(--featuredrop-toast-shadow, 0 4px 20px rgba(0, 0, 0, 0.12))\",\n border: \"1px solid var(--featuredrop-toast-border, #e5e7eb)\",\n width: \"var(--featuredrop-toast-width, 340px)\",\n maxWidth: \"calc(100vw - 32px)\",\n fontFamily: \"var(--featuredrop-font-family, inherit)\",\n};\n\nconst toastBodyStyles: CSSProperties = {\n flex: 1,\n minWidth: 0,\n};\n\nconst toastTitleStyles: CSSProperties = {\n margin: \"0 0 2px\",\n fontSize: \"var(--featuredrop-toast-title-size, 14px)\",\n fontWeight: 600,\n color: \"var(--featuredrop-toast-title-color, #111827)\",\n};\n\nconst toastDescStyles: CSSProperties = {\n margin: 0,\n fontSize: \"var(--featuredrop-toast-desc-size, 13px)\",\n color: \"var(--featuredrop-toast-desc-color, #6b7280)\",\n lineHeight: 1.4,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n display: \"-webkit-box\",\n WebkitLineClamp: 2,\n WebkitBoxOrient: \"vertical\" as const,\n};\n\nconst toastCloseStyles: CSSProperties = {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"2px\",\n fontSize: \"16px\",\n color: \"var(--featuredrop-toast-close-color, #9ca3af)\",\n lineHeight: 1,\n flexShrink: 0,\n};\n\nconst toastCtaStyles: CSSProperties = {\n display: \"inline-block\",\n marginTop: \"6px\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"var(--featuredrop-toast-cta-color, #3b82f6)\",\n textDecoration: \"none\",\n};\n\nconst TYPE_INDICATORS: Record<string, { color: string; icon: string }> = {\n feature: { color: \"#10b981\", icon: \"\\u2728\" },\n improvement: { color: \"#3b82f6\", icon: \"\\uD83D\\uDCC8\" },\n fix: { color: \"#f59e0b\", icon: \"\\uD83D\\uDD27\" },\n breaking: { color: \"#ef4444\", icon: \"\\u26A0\\uFE0F\" },\n};\n\n/* ------------------------------------------------------------------ */\n/* Toast Component */\n/* ------------------------------------------------------------------ */\n\n/**\n * Toast notification component for feature announcements.\n *\n * Shows brief popups for new features. Auto-dismisses after a timeout.\n * Stacks multiple toasts with configurable max visible count.\n *\n * @example\n * ```tsx\n * <Toast position=\"bottom-right\" maxVisible={3} />\n * ```\n *\n * @example Specific features\n * ```tsx\n * <Toast featureIds={[\"ai-journal\", \"analytics-v2\"]} />\n * ```\n *\n * @example Headless\n * ```tsx\n * <Toast>\n * {({ toasts, dismiss }) => toasts.map(t => (\n * <div key={t.id}>{t.label} <button onClick={() => dismiss(t.id)}>x</button></div>\n * ))}\n * </Toast>\n * ```\n */\nexport function Toast({\n featureIds,\n maxVisible = 3,\n autoDismissMs = 8000,\n position = \"bottom-right\",\n analytics,\n className,\n style,\n children,\n renderToast,\n}: ToastProps) {\n const {\n newFeaturesSorted,\n dismiss,\n markFeatureSeen,\n markFeatureClicked,\n trackAdoptionEvent,\n getRemainingToastSlots,\n markToastsShown,\n animation,\n } = useFeatureDrop();\n const [localDismissed, setLocalDismissed] = useState<Set<string>>(new Set());\n const [closingIds, setClosingIds] = useState<Set<string>>(new Set());\n const timersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map());\n const shownIdsRef = useRef(new Set<string>());\n const toastEnterAnimation = useMemo(() => getEnterAnimation(animation, \"toast\"), [animation]);\n const toastExitAnimation = useMemo(() => getExitAnimation(animation, \"toast\"), [animation]);\n const toastExitDuration = useMemo(\n () => getAnimationDurationMs(animation, \"toast\", \"exit\"),\n [animation],\n );\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n // Filter features for toasting\n const toastFeatures = newFeaturesSorted.filter((f) => {\n if (localDismissed.has(f.id)) return false;\n if (featureIds && !featureIds.includes(f.id)) return false;\n return true;\n });\n\n const remainingSlots = getRemainingToastSlots();\n const baseVisible = toastFeatures.slice(0, maxVisible);\n const visibleToasts = useMemo(() => {\n if (!Number.isFinite(remainingSlots)) return baseVisible;\n let newlyAllowed = 0;\n const limit = Math.max(0, remainingSlots);\n return baseVisible.filter((feature) => {\n if (shownIdsRef.current.has(feature.id)) return true;\n if (newlyAllowed >= limit) return false;\n newlyAllowed += 1;\n return true;\n });\n }, [baseVisible, remainingSlots]);\n\n const finalizeDismiss = useCallback(\n (id: string) => {\n setClosingIds((previous) => {\n if (!previous.has(id)) return previous;\n const next = new Set(previous);\n next.delete(id);\n return next;\n });\n setLocalDismissed((prev) => new Set(prev).add(id));\n dismiss(id);\n const feature = newFeaturesSorted.find((f) => f.id === id);\n if (feature) analytics?.onFeatureDismissed?.(feature);\n const timer = timersRef.current.get(id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(id);\n }\n const exitTimer = timersRef.current.get(`exit:${id}`);\n if (exitTimer) {\n clearTimeout(exitTimer);\n timersRef.current.delete(`exit:${id}`);\n }\n },\n [dismiss, newFeaturesSorted, analytics],\n );\n\n const handleDismiss = useCallback((id: string) => {\n if (closingIds.has(id)) return;\n if (toastExitDuration > 0 && toastExitAnimation) {\n const existingAutoTimer = timersRef.current.get(id);\n if (existingAutoTimer) {\n clearTimeout(existingAutoTimer);\n timersRef.current.delete(id);\n }\n setClosingIds((previous) => {\n if (previous.has(id)) return previous;\n const next = new Set(previous);\n next.add(id);\n return next;\n });\n const existing = timersRef.current.get(`exit:${id}`);\n if (existing) clearTimeout(existing);\n timersRef.current.set(\n `exit:${id}`,\n setTimeout(() => {\n finalizeDismiss(id);\n }, toastExitDuration),\n );\n return;\n }\n finalizeDismiss(id);\n }, [closingIds, finalizeDismiss, toastExitAnimation, toastExitDuration]);\n\n const handleDismissAllLocal = useCallback(() => {\n for (const f of visibleToasts) {\n handleDismiss(f.id);\n }\n }, [visibleToasts, handleDismiss]);\n\n // Auto-dismiss timers\n useEffect(() => {\n if (autoDismissMs <= 0) return;\n for (const f of visibleToasts) {\n if (!timersRef.current.has(f.id) && !closingIds.has(f.id)) {\n timersRef.current.set(\n f.id,\n setTimeout(() => handleDismiss(f.id), autoDismissMs),\n );\n }\n }\n }, [visibleToasts, autoDismissMs, closingIds, handleDismiss]);\n\n // Fire onFeatureSeen for visible toasts\n useEffect(() => {\n const newlyShownIds: string[] = [];\n for (const feature of visibleToasts) {\n if (shownIdsRef.current.has(feature.id)) continue;\n shownIdsRef.current.add(feature.id);\n newlyShownIds.push(feature.id);\n markFeatureSeen(feature.id);\n analytics?.onFeatureSeen?.(feature);\n }\n markToastsShown(newlyShownIds);\n }, [visibleToasts, analytics, markFeatureSeen, markToastsShown]);\n\n // Cleanup timers\n useEffect(() => {\n const timers = timersRef.current;\n return () => {\n for (const timer of timers.values()) clearTimeout(timer);\n timers.clear();\n };\n }, []);\n\n // Headless render prop\n if (children) {\n return (\n <>\n {children({\n toasts: visibleToasts,\n dismiss: handleDismiss,\n dismissAll: handleDismissAllLocal,\n })}\n </>\n );\n }\n\n if (visibleToasts.length === 0) return null;\n\n const posStyles = POSITION_STYLES[position] ?? POSITION_STYLES[\"bottom-right\"];\n const isBottom = position.startsWith(\"bottom\");\n\n return (\n <div\n data-featuredrop-toast-container\n className={className}\n role=\"region\"\n aria-label=\"Feature announcements\"\n aria-live=\"polite\"\n aria-atomic=\"false\"\n style={{\n ...containerStyles,\n ...posStyles,\n flexDirection: isBottom ? \"column-reverse\" : \"column\",\n ...style,\n }}\n >\n {visibleToasts.map((feature) => {\n if (renderToast) {\n return (\n <div key={feature.id}>\n {renderToast({ feature, dismiss: () => handleDismiss(feature.id) })}\n </div>\n );\n }\n\n const indicator = feature.type\n ? TYPE_INDICATORS[feature.type] ?? TYPE_INDICATORS.feature\n : null;\n\n const descriptionHtml = feature.description\n ? parseDescription(feature.description)\n : null;\n\n return (\n <div\n key={feature.id}\n data-featuredrop-toast={feature.id}\n style={{\n ...toastStyles,\n animation: closingIds.has(feature.id)\n ? toastExitAnimation\n : toastEnterAnimation,\n }}\n role=\"status\"\n >\n {indicator && (\n <span style={{ fontSize: \"20px\", lineHeight: 1 }} aria-hidden=\"true\">\n {indicator.icon}\n </span>\n )}\n <div style={toastBodyStyles}>\n <p style={toastTitleStyles}>{feature.label}</p>\n {descriptionHtml && (\n <div\n style={toastDescStyles}\n dangerouslySetInnerHTML={{ __html: descriptionHtml }}\n />\n )}\n {feature.cta && (\n <a\n href={feature.cta.url}\n style={toastCtaStyles}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => {\n markFeatureClicked(feature.id);\n trackAdoptionEvent({\n type: \"cta_clicked\",\n featureId: feature.id,\n metadata: { source: \"toast\" },\n });\n analytics?.onFeatureClicked?.(feature);\n }}\n >\n {feature.cta.label} &rarr;\n </a>\n )}\n </div>\n <button\n onClick={() => handleDismiss(feature.id)}\n style={toastCloseStyles}\n aria-label={`Dismiss ${feature.label}`}\n >\n &times;\n </button>\n </div>\n );\n })}\n </div>\n );\n}\n","import {\n useMemo,\n useCallback,\n useState,\n useEffect,\n useRef,\n type CSSProperties,\n type ReactNode,\n type KeyboardEvent as ReactKeyboardEvent,\n} from \"react\";\nimport type { FeatureEntry, FeatureManifest } from \"../../types\";\nimport type { FeatureDropThemeInput } from \"../../theme\";\nimport { formatDateForLocale, formatRelativeTimeForLocale } from \"../../i18n\";\nimport { parseDescription } from \"../../markdown\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\nimport { useThemeVariables } from \"../theme\";\nimport {\n DEFAULT_REACTIONS,\n getReactionCounts,\n getUserReaction,\n reactToEntry,\n type ReactionCounts,\n} from \"../reactions-store\";\n\nexport type PaginationMode = \"infinite-scroll\" | \"load-more\" | \"numbered\";\n\nexport interface ChangelogPageProps {\n pageSize?: number;\n pagination?: PaginationMode;\n showFilters?: boolean;\n showSearch?: boolean;\n categories?: string[];\n emptyState?: ReactNode;\n renderEntry?: (entry: FeatureEntry, index: number) => ReactNode;\n formatDate?: (date: string) => string;\n dateFormat?: \"absolute\" | \"relative\";\n basePath?: string;\n manifest?: FeatureManifest;\n className?: string;\n style?: CSSProperties;\n theme?: FeatureDropThemeInput;\n showReactions?: boolean;\n reactions?: string[];\n onReaction?: (entry: FeatureEntry, reaction: string, counts: ReactionCounts) => void;\n}\n\nconst pageStyles: CSSProperties = {\n maxWidth: \"880px\",\n margin: \"0 auto\",\n padding: \"32px 16px\",\n fontFamily: \"var(--featuredrop-font-family, system-ui, -apple-system, Segoe UI, sans-serif)\",\n};\n\nconst skipLinkStyles: CSSProperties = {\n display: \"inline-block\",\n marginBottom: \"12px\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: \"var(--featuredrop-mark-all-color, #3b82f6)\",\n};\n\nconst headerStyles: CSSProperties = {\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: \"12px\",\n alignItems: \"center\",\n marginBottom: \"16px\",\n};\n\nconst searchStyles: CSSProperties = {\n flex: \"1 1 280px\",\n padding: \"10px 12px\",\n borderRadius: \"10px\",\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n fontSize: \"14px\",\n};\n\nconst filterBarStyles: CSSProperties = {\n display: \"flex\",\n gap: \"8px\",\n flexWrap: \"wrap\",\n margin: \"12px 0 20px\",\n};\n\nconst pillStyles: CSSProperties = {\n padding: \"6px 12px\",\n borderRadius: \"999px\",\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n cursor: \"pointer\",\n background: \"var(--featuredrop-card-bg, #fff)\",\n color: \"var(--featuredrop-text, #111827)\",\n fontSize: \"13px\",\n};\n\nconst pillActiveStyles: CSSProperties = {\n ...pillStyles,\n background: \"var(--featuredrop-pill-active-bg, #111827)\",\n color: \"var(--featuredrop-pill-active-text, #fff)\",\n border: \"1px solid var(--featuredrop-pill-active-bg, #111827)\",\n};\n\nconst entryCardStyles: CSSProperties = {\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n borderRadius: \"12px\",\n padding: \"16px\",\n marginBottom: \"16px\",\n background: \"var(--featuredrop-card-bg, #fff)\",\n boxShadow: \"var(--featuredrop-card-shadow, 0 4px 20px rgba(0,0,0,0.04))\",\n};\n\nconst metaRowStyles: CSSProperties = {\n display: \"flex\",\n gap: \"10px\",\n flexWrap: \"wrap\",\n fontSize: \"12px\",\n color: \"var(--featuredrop-muted, #6b7280)\",\n marginTop: \"8px\",\n};\n\nconst loadMoreBtnStyles: CSSProperties = {\n padding: \"10px 14px\",\n borderRadius: \"10px\",\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n background: \"var(--featuredrop-card-bg, #fff)\",\n color: \"var(--featuredrop-text, #111827)\",\n cursor: \"pointer\",\n fontWeight: 600,\n};\n\nconst reactionsRowStyles: CSSProperties = {\n display: \"flex\",\n gap: \"8px\",\n flexWrap: \"wrap\",\n marginTop: \"12px\",\n};\n\nconst reactionButtonStyles: CSSProperties = {\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n borderRadius: \"999px\",\n background: \"var(--featuredrop-card-bg, #fff)\",\n color: \"var(--featuredrop-text, #111827)\",\n padding: \"4px 9px\",\n cursor: \"pointer\",\n fontSize: \"12px\",\n};\n\nfunction defaultFormatDate(date: string, locale: string): string {\n return formatDateForLocale(date, locale);\n}\n\nfunction EntryCard({\n entry,\n formatDate,\n basePath,\n shareLabel,\n showReactions,\n reactions,\n userReaction,\n canReact,\n onReact,\n}: {\n entry: FeatureEntry;\n formatDate: (d: string) => string;\n basePath: string;\n shareLabel: string;\n showReactions: boolean;\n reactions: ReactionCounts;\n userReaction: string | null;\n canReact: boolean;\n onReact: (reaction: string) => void;\n}) {\n const descriptionHtml = entry.description ? parseDescription(entry.description) : null;\n const shareHref = `${basePath}#entry-${entry.id}`;\n\n const handleShare = async () => {\n try {\n if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n await navigator.clipboard.writeText(shareHref);\n }\n } catch {\n // noop; best-effort copy\n }\n };\n\n return (\n <article\n id={`entry-${entry.id}`}\n data-featuredrop-entry={entry.id}\n style={entryCardStyles}\n tabIndex={0}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", gap: \"12px\" }}>\n <div>\n <h3 style={{ margin: \"0 0 6px\", fontSize: \"18px\" }}>{entry.label}</h3>\n {descriptionHtml && (\n <div\n style={{ color: \"#4b5563\", fontSize: \"14px\", lineHeight: 1.6 }}\n dangerouslySetInnerHTML={{ __html: descriptionHtml }}\n />\n )}\n </div>\n <button\n aria-label={`${shareLabel} ${entry.label}`}\n onClick={handleShare}\n style={{\n border: \"1px solid var(--featuredrop-border-color, #e5e7eb)\",\n background: \"var(--featuredrop-card-bg, #fff)\",\n color: \"var(--featuredrop-text, #111827)\",\n borderRadius: \"8px\",\n padding: \"6px 8px\",\n cursor: \"pointer\",\n height: \"36px\",\n }}\n >\n {shareLabel}\n </button>\n </div>\n <div style={metaRowStyles}>\n <span>{formatDate(entry.releasedAt)}</span>\n {entry.version && (\n <span>\n v\n {typeof entry.version === \"string\"\n ? entry.version\n : entry.version.introduced ?? entry.version.showNewUntil ?? \"\"}\n </span>\n )}\n {entry.category && <span>{entry.category}</span>}\n {entry.type && <span>{entry.type}</span>}\n </div>\n {entry.image && (\n <img\n src={entry.image}\n alt={entry.label}\n style={{ width: \"100%\", borderRadius: \"10px\", marginTop: \"12px\" }}\n />\n )}\n {entry.cta && (\n <a\n href={entry.cta.url}\n style={{\n display: \"inline-block\",\n marginTop: \"12px\",\n padding: \"10px 14px\",\n borderRadius: \"10px\",\n fontWeight: 600,\n color: \"var(--featuredrop-btn-text, #fff)\",\n background: \"var(--featuredrop-btn-bg, #111827)\",\n textDecoration: \"none\",\n }}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {entry.cta.label}\n </a>\n )}\n {showReactions && (\n <div style={reactionsRowStyles}>\n {Object.entries(reactions).map(([reaction, count]) => (\n <button\n key={reaction}\n type=\"button\"\n onClick={() => onReact(reaction)}\n disabled={!canReact}\n style={{\n ...reactionButtonStyles,\n opacity: !canReact && userReaction !== reaction ? 0.55 : 1,\n background: userReaction === reaction ? \"var(--featuredrop-reaction-active, rgba(17, 24, 39, 0.08))\" : \"var(--featuredrop-card-bg, #fff)\",\n }}\n aria-label={`React ${reaction} to ${entry.label}`}\n >\n {reaction} {count}\n </button>\n ))}\n </div>\n )}\n </article>\n );\n}\n\nexport function ChangelogPage({\n pageSize = 20,\n pagination = \"load-more\",\n showFilters = true,\n showSearch = true,\n categories,\n emptyState,\n renderEntry,\n formatDate,\n dateFormat = \"absolute\",\n basePath,\n manifest: manifestProp,\n className,\n style,\n theme,\n showReactions = false,\n reactions = [...DEFAULT_REACTIONS],\n onReaction,\n}: ChangelogPageProps) {\n const { manifest: contextManifest, locale, direction, translations } = useFeatureDrop();\n const themeVariables = useThemeVariables(theme);\n const manifest = useMemo(\n () => manifestProp ?? contextManifest ?? [],\n [manifestProp, contextManifest],\n );\n\n const sorted = useMemo(\n () =>\n [...manifest].sort(\n (a, b) => new Date(b.releasedAt).getTime() - new Date(a.releasedAt).getTime(),\n ),\n [manifest],\n );\n\n const allCategories = useMemo(() => {\n if (categories && categories.length > 0) return categories;\n const set = new Set<string>();\n for (const f of manifest) if (f.category) set.add(f.category);\n return Array.from(set);\n }, [categories, manifest]);\n\n const [query, setQuery] = useState(\"\");\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const [activeType, setActiveType] = useState<string | null>(null);\n const [page, setPage] = useState(1);\n const [, setReactionVersion] = useState(0);\n\n const filtered = useMemo(() => {\n const q = query.trim().toLowerCase();\n return sorted.filter((f) => {\n if (activeCategory && f.category !== activeCategory) return false;\n if (activeType && f.type !== activeType) return false;\n if (q) {\n const haystack = `${f.label} ${f.description ?? \"\"}`.toLowerCase();\n // lightweight fuzzy: all query tokens must appear somewhere\n const tokens = q.split(/\\s+/).filter(Boolean);\n if (!tokens.every((t) => haystack.includes(t))) return false;\n }\n return true;\n });\n }, [sorted, activeCategory, activeType, query]);\n\n useEffect(() => {\n setPage(1);\n }, [query, activeCategory, activeType]);\n\n const totalPages = Math.max(1, Math.ceil(filtered.length / pageSize));\n const visible = filtered.slice(0, page * pageSize);\n const listIdRef = useRef(`featuredrop-changelog-list-${Math.random().toString(36).slice(2, 10)}`);\n const listId = listIdRef.current;\n\n const sentinelRef = useRef<HTMLDivElement | null>(null);\n useEffect(() => {\n if (pagination !== \"infinite-scroll\") return;\n if (typeof IntersectionObserver === \"undefined\") return;\n const el = sentinelRef.current;\n if (!el) return;\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setPage((p) => (p < totalPages ? p + 1 : p));\n }\n }\n });\n observer.observe(el);\n return () => observer.disconnect();\n }, [pagination, totalPages]);\n\n const resolvedBasePath = useMemo(() => {\n if (basePath) return basePath;\n if (typeof window !== \"undefined\") return window.location.pathname;\n return \"\";\n }, [basePath]);\n const resolvedFormatDate = useMemo(\n () =>\n formatDate ??\n ((value: string) =>\n dateFormat === \"relative\"\n ? formatRelativeTimeForLocale(value, locale)\n : defaultFormatDate(value, locale)),\n [dateFormat, formatDate, locale],\n );\n\n // Deep-link scroll to #entry-id\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const hash = window.location.hash;\n if (hash.startsWith(\"#entry-\")) {\n const target = document.querySelector(hash);\n if (target && \"scrollIntoView\" in target) {\n target.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n }\n }, []);\n\n const handleListKeyDown = useCallback((event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.key !== \"ArrowDown\" && event.key !== \"ArrowUp\") return;\n const target = event.target as HTMLElement;\n const tagName = target.tagName.toLowerCase();\n if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\") return;\n\n const entries = Array.from(\n event.currentTarget.querySelectorAll<HTMLElement>(\"[data-featuredrop-entry]\"),\n );\n if (entries.length === 0) return;\n\n const active = document.activeElement as HTMLElement | null;\n const currentIndex = entries.findIndex(\n (entry) => entry === active || (active ? entry.contains(active) : false),\n );\n const nextIndex = currentIndex < 0\n ? (event.key === \"ArrowDown\" ? 0 : entries.length - 1)\n : event.key === \"ArrowDown\"\n ? Math.min(entries.length - 1, currentIndex + 1)\n : Math.max(0, currentIndex - 1);\n\n if (nextIndex === currentIndex) return;\n event.preventDefault();\n entries[nextIndex].focus();\n }, []);\n\n const renderList = () =>\n visible.map((entry, idx) =>\n renderEntry ? (\n <div key={entry.id}>{renderEntry(entry, idx)}</div>\n ) : (\n <EntryCard\n key={entry.id}\n entry={entry}\n formatDate={resolvedFormatDate}\n basePath={resolvedBasePath}\n showReactions={showReactions}\n shareLabel={translations.share}\n reactions={showReactions ? getReactionCounts(entry.id, reactions) : {}}\n userReaction={showReactions ? getUserReaction(entry.id) : null}\n canReact={showReactions ? !getUserReaction(entry.id) : false}\n onReact={(reaction) => {\n const result = reactToEntry(entry.id, reaction, reactions);\n if (!result.updated) return;\n setReactionVersion((value) => value + 1);\n onReaction?.(entry, reaction, result.counts);\n }}\n />\n ),\n );\n\n const paginationControls = () => {\n if (pagination === \"load-more\" && page < totalPages) {\n return (\n <div style={{ textAlign: \"center\", marginTop: \"12px\" }}>\n <button style={loadMoreBtnStyles} onClick={() => setPage((p) => p + 1)}>\n {translations.loadMore}\n </button>\n </div>\n );\n }\n if (pagination === \"numbered\" && totalPages > 1) {\n return (\n <div style={{ display: \"flex\", gap: \"8px\", flexWrap: \"wrap\", marginTop: \"12px\" }}>\n {Array.from({ length: totalPages }).map((_, i) => {\n const pageNumber = i + 1;\n const active = pageNumber === page;\n return (\n <button\n key={pageNumber}\n style={active ? pillActiveStyles : pillStyles}\n onClick={() => setPage(pageNumber)}\n >\n {pageNumber}\n </button>\n );\n })}\n </div>\n );\n }\n if (pagination === \"infinite-scroll\") {\n return <div ref={sentinelRef} style={{ height: \"1px\" }} />;\n }\n return null;\n };\n\n const containerStyles = useMemo<CSSProperties>(\n () => ({ ...(themeVariables ?? {}), ...pageStyles, ...(style ?? {}) }),\n [themeVariables, style],\n );\n\n return (\n <div\n data-featuredrop-changelog-page\n className={className}\n style={containerStyles}\n dir={direction}\n >\n <a href={`#${listId}`} style={skipLinkStyles}>\n {translations.skipToEntries}\n </a>\n\n <div style={headerStyles}>\n <h2 style={{ margin: 0 }}>{translations.changelogTitle}</h2>\n {showSearch && (\n <input\n style={searchStyles}\n type=\"search\"\n placeholder={translations.searchPlaceholder}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n aria-label=\"Search changelog updates\"\n />\n )}\n </div>\n\n {showFilters && (\n <div style={filterBarStyles}>\n {allCategories.length > 0 && (\n <>\n <button\n type=\"button\"\n style={activeCategory ? pillStyles : pillActiveStyles}\n onClick={() => setActiveCategory(null)}\n >\n {translations.allCategories}\n </button>\n {allCategories.map((cat) => (\n <button\n type=\"button\"\n key={cat}\n style={activeCategory === cat ? pillActiveStyles : pillStyles}\n onClick={() => setActiveCategory(cat)}\n >\n {cat}\n </button>\n ))}\n </>\n )}\n {[\"feature\", \"improvement\", \"fix\", \"breaking\"].map((t) => (\n <button\n type=\"button\"\n key={t}\n style={activeType === t ? pillActiveStyles : pillStyles}\n onClick={() => setActiveType((prev) => (prev === t ? null : t))}\n >\n {t}\n </button>\n ))}\n </div>\n )}\n\n {visible.length === 0 ? (\n <div style={{ padding: \"32px 0\", textAlign: \"center\", color: \"#6b7280\" }}>\n {emptyState ?? translations.noUpdatesYet}\n </div>\n ) : (\n <div id={listId} onKeyDown={handleListKeyDown}>\n {renderList()}\n {paginationControls()}\n </div>\n )}\n </div>\n );\n}\n","import {\n useEffect,\n useContext,\n useMemo,\n useRef,\n useState,\n useCallback,\n type CSSProperties,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { ensureFeatureDropAnimationStyles, getEnterAnimation } from \"../../animation\";\nimport {\n registerTourController,\n type TourController,\n type TourSnapshot,\n} from \"../tour-registry\";\nimport { FeatureDropContext } from \"../context\";\n\nexport interface TourStep {\n id: string;\n target: string | RefObject<HTMLElement | null>;\n title: string;\n content: string | ReactNode;\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\" | \"auto\";\n action?: \"click\" | \"input\" | \"custom\";\n advanceOn?: { selector: string; event: string };\n highlightTarget?: boolean;\n beforeStep?: () => Promise<void>;\n afterStep?: () => Promise<void>;\n skipable?: boolean;\n}\n\nexport interface TourRenderProps {\n isActive: boolean;\n step: TourStep | null;\n stepIndex: number;\n totalSteps: number;\n startTour: () => void;\n nextStep: () => void;\n prevStep: () => void;\n skipTour: () => void;\n closeTour: () => void;\n}\n\nexport interface TourProps {\n id: string;\n steps: TourStep[];\n onComplete?: () => void;\n onSkip?: (stepId: string) => void;\n onTourStarted?: () => void;\n onTourCompleted?: () => void;\n onTourSkipped?: (stepId: string) => void;\n onStepViewed?: (step: TourStep, index: number) => void;\n overlay?: boolean;\n showProgress?: boolean;\n keyboard?: boolean;\n persistence?: boolean;\n children?: (props: TourRenderProps) => ReactNode;\n}\n\nconst tourBoxStyles: CSSProperties = {\n position: \"fixed\",\n zIndex: \"var(--featuredrop-tour-z-index, 10002)\" as unknown as number,\n width: \"min(92vw, 360px)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"12px\",\n background: \"#ffffff\",\n boxShadow: \"0 12px 40px rgba(0,0,0,0.18)\",\n padding: \"14px\",\n};\n\nconst overlayStyles: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n zIndex: \"var(--featuredrop-tour-overlay-z-index, 10000)\" as unknown as number,\n background: \"rgba(17, 24, 39, 0.54)\",\n};\n\nconst highlightStyles: CSSProperties = {\n position: \"fixed\",\n pointerEvents: \"none\",\n zIndex: \"var(--featuredrop-tour-highlight-z-index, 10001)\" as unknown as number,\n borderRadius: \"8px\",\n boxShadow: \"0 0 0 2px #f59e0b, 0 0 0 9999px rgba(17, 24, 39, 0.54)\",\n};\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n const nodes = container.querySelectorAll<HTMLElement>(\n [\n \"a[href]\",\n \"button:not([disabled])\",\n \"textarea:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n ].join(\",\"),\n );\n return Array.from(nodes).filter(\n (node) => !node.hasAttribute(\"disabled\") && node.getAttribute(\"aria-hidden\") !== \"true\",\n );\n}\n\nfunction getTargetElement(target: TourStep[\"target\"]): HTMLElement | null {\n if (typeof target === \"string\") {\n return document.querySelector(target);\n }\n return target.current;\n}\n\nfunction getStorageKey(id: string): string {\n return `featuredrop:tour:${id}:step`;\n}\n\nfunction readPersistedStep(id: string): string | null {\n if (typeof window === \"undefined\") return null;\n const storage = globalThis.localStorage as unknown as {\n getItem?: (key: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return null;\n try {\n return storage.getItem(getStorageKey(id));\n } catch {\n return null;\n }\n}\n\nfunction writePersistedStep(id: string, stepIndex: number): void {\n if (typeof window === \"undefined\") return;\n const storage = globalThis.localStorage as unknown as {\n setItem?: (key: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(getStorageKey(id), String(stepIndex));\n } catch {\n // noop\n }\n}\n\nfunction clearPersistedStep(id: string): void {\n if (typeof window === \"undefined\") return;\n const storage = globalThis.localStorage as unknown as {\n removeItem?: (key: string) => void;\n };\n if (!storage || typeof storage.removeItem !== \"function\") return;\n try {\n storage.removeItem(getStorageKey(id));\n } catch {\n // noop\n }\n}\n\nfunction resolvePosition(\n rect: DOMRect,\n placement: TourStep[\"placement\"],\n): { top: number; left: number } {\n const margin = 12;\n const width = 360;\n const height = 180;\n const viewportWidth = typeof window === \"undefined\" ? 1200 : window.innerWidth;\n const viewportHeight = typeof window === \"undefined\" ? 800 : window.innerHeight;\n\n const chosen = placement === \"auto\"\n ? rect.top > height + margin\n ? \"top\"\n : \"bottom\"\n : placement ?? \"bottom\";\n\n if (chosen === \"top\") {\n return {\n top: Math.max(margin, rect.top - height - margin),\n left: Math.min(viewportWidth - width - margin, Math.max(margin, rect.left)),\n };\n }\n if (chosen === \"left\") {\n return {\n top: Math.min(viewportHeight - height - margin, Math.max(margin, rect.top)),\n left: Math.max(margin, rect.left - width - margin),\n };\n }\n if (chosen === \"right\") {\n return {\n top: Math.min(viewportHeight - height - margin, Math.max(margin, rect.top)),\n left: Math.min(viewportWidth - width - margin, rect.right + margin),\n };\n }\n return {\n top: Math.min(viewportHeight - height - margin, rect.bottom + margin),\n left: Math.min(viewportWidth - width - margin, Math.max(margin, rect.left)),\n };\n}\n\nexport function Tour({\n id,\n steps,\n onComplete,\n onSkip,\n onTourStarted,\n onTourCompleted,\n onTourSkipped,\n onStepViewed,\n overlay = true,\n showProgress = true,\n keyboard = true,\n persistence = true,\n children,\n}: TourProps) {\n const context = useContext(FeatureDropContext);\n const dialogAnimation = useMemo(\n () => getEnterAnimation(context?.animation ?? \"normal\", \"popover\"),\n [context?.animation],\n );\n const [isActive, setIsActive] = useState(false);\n const [stepIndex, setStepIndex] = useState(-1);\n const [targetRect, setTargetRect] = useState<DOMRect | null>(null);\n const listenersRef = useRef(new Set<() => void>());\n const dialogRef = useRef<HTMLDivElement>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n const instanceIdRef = useRef(`featuredrop-tour-${Math.random().toString(36).slice(2, 10)}`);\n\n const step = stepIndex >= 0 ? steps[stepIndex] ?? null : null;\n\n const emit = useCallback(() => {\n for (const listener of listenersRef.current) listener();\n }, []);\n\n const snapshot = useCallback((): TourSnapshot => ({\n isActive,\n currentStepIndex: stepIndex,\n currentStep: step,\n totalSteps: steps.length,\n }), [isActive, stepIndex, step, steps.length]);\n\n const findValidStep = useCallback((fromIndex: number, direction: 1 | -1): number | null => {\n for (\n let i = fromIndex;\n i >= 0 && i < steps.length;\n i += direction\n ) {\n const targetEl = getTargetElement(steps[i].target);\n if (targetEl) return i;\n // eslint-disable-next-line no-console\n console.warn(`[featuredrop] Tour \"${id}\" step \"${steps[i].id}\" target not found, skipping.`);\n }\n return null;\n }, [id, steps]);\n\n const runAfterCurrentStep = useCallback(async () => {\n if (!step?.afterStep) return;\n try {\n await step.afterStep();\n } catch {\n // ignore callback failures to keep tour flow moving\n }\n }, [step]);\n\n const openStep = useCallback(async (index: number) => {\n const current = steps[index];\n if (!current) return;\n try {\n await current.beforeStep?.();\n } catch {\n // ignore callback failures to keep tour flow moving\n }\n\n const el = getTargetElement(current.target);\n if (!el) return;\n const scrollable = el as HTMLElement & {\n scrollIntoView?: (options?: ScrollIntoViewOptions) => void;\n };\n if (typeof scrollable.scrollIntoView === \"function\") {\n scrollable.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\n }\n setStepIndex(index);\n setIsActive(true);\n onStepViewed?.(current, index);\n }, [onStepViewed, steps]);\n\n const closeTour = useCallback(async () => {\n await runAfterCurrentStep();\n setIsActive(false);\n setStepIndex(-1);\n if (persistence) clearPersistedStep(id);\n const returnTarget = lastFocusedElementRef.current;\n if (returnTarget) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => returnTarget.focus());\n } else {\n returnTarget.focus();\n }\n }\n }, [id, persistence, runAfterCurrentStep]);\n\n const startTour = useCallback(async () => {\n if (context && !context.canShowTour()) return;\n if (typeof document !== \"undefined\" && document.activeElement instanceof HTMLElement) {\n lastFocusedElementRef.current = document.activeElement;\n }\n const next = findValidStep(0, 1);\n if (next === null) return;\n context?.trackAdoptionEvent({ type: \"tour_started\", tourId: id });\n onTourStarted?.();\n await openStep(next);\n context?.markTourShown();\n }, [context, findValidStep, id, onTourStarted, openStep]);\n\n const nextStep = useCallback(async () => {\n await runAfterCurrentStep();\n const next = findValidStep(stepIndex + 1, 1);\n if (next === null) {\n context?.trackAdoptionEvent({ type: \"tour_completed\", tourId: id });\n onComplete?.();\n onTourCompleted?.();\n await closeTour();\n return;\n }\n await openStep(next);\n }, [closeTour, context, findValidStep, id, onComplete, onTourCompleted, openStep, runAfterCurrentStep, stepIndex]);\n\n const prevStep = useCallback(async () => {\n await runAfterCurrentStep();\n const prev = findValidStep(stepIndex - 1, -1);\n if (prev === null) return;\n await openStep(prev);\n }, [findValidStep, openStep, runAfterCurrentStep, stepIndex]);\n\n const skipTour = useCallback(async () => {\n const stepId = step?.id ?? \"\";\n context?.trackAdoptionEvent({ type: \"tour_skipped\", tourId: id, metadata: { stepId } });\n onSkip?.(stepId);\n onTourSkipped?.(stepId);\n await closeTour();\n }, [closeTour, context, id, onSkip, onTourSkipped, step]);\n\n useEffect(() => {\n if (!persistence) return;\n if (context && !context.canShowTour()) return;\n const raw = readPersistedStep(id);\n if (!raw) return;\n const persisted = Number(raw);\n if (!Number.isInteger(persisted) || persisted < 0) return;\n const next = findValidStep(persisted, 1);\n if (next === null) return;\n void openStep(next);\n context?.markTourShown();\n }, [context, findValidStep, id, openStep, persistence]);\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n useEffect(() => {\n if (!isActive || !step) return;\n const updateRect = () => {\n const el = getTargetElement(step.target);\n if (!el) return;\n setTargetRect(el.getBoundingClientRect());\n };\n updateRect();\n window.addEventListener(\"resize\", updateRect);\n window.addEventListener(\"scroll\", updateRect, true);\n return () => {\n window.removeEventListener(\"resize\", updateRect);\n window.removeEventListener(\"scroll\", updateRect, true);\n };\n }, [isActive, step]);\n\n useEffect(() => {\n const advanceOn = step?.advanceOn;\n if (!isActive || !advanceOn) return;\n const el = document.querySelector(advanceOn.selector);\n if (!el) return;\n const handler = () => {\n void nextStep();\n };\n el.addEventListener(advanceOn.event, handler);\n return () => {\n el.removeEventListener(advanceOn.event, handler);\n };\n }, [isActive, nextStep, step]);\n\n useEffect(() => {\n if (!keyboard || !isActive) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n void nextStep();\n } else if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n void prevStep();\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n void skipTour();\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [isActive, keyboard, nextStep, prevStep, skipTour]);\n\n useEffect(() => {\n if (!isActive) return;\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n const focusable = getFocusableElements(dialog);\n const first = focusable[0] ?? dialog;\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => first.focus());\n } else {\n first.focus();\n }\n\n const handleTab = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\") return;\n const items = getFocusableElements(dialog);\n if (items.length === 0) {\n event.preventDefault();\n dialog.focus();\n return;\n }\n\n const firstItem = items[0];\n const lastItem = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (event.shiftKey) {\n if (active === firstItem || active === dialog) {\n event.preventDefault();\n lastItem.focus();\n }\n return;\n }\n if (active === lastItem) {\n event.preventDefault();\n firstItem.focus();\n }\n };\n\n dialog.addEventListener(\"keydown\", handleTab);\n return () => {\n dialog.removeEventListener(\"keydown\", handleTab);\n };\n }, [isActive, stepIndex]);\n\n useEffect(() => {\n emit();\n }, [emit, isActive, step, stepIndex]);\n\n useEffect(() => {\n if (!persistence || !isActive || stepIndex < 0) return;\n writePersistedStep(id, stepIndex);\n }, [id, isActive, persistence, stepIndex]);\n\n useEffect(() => {\n const controller: TourController = {\n startTour: () => void startTour(),\n nextStep: () => void nextStep(),\n prevStep: () => void prevStep(),\n skipTour: () => void skipTour(),\n closeTour: () => void closeTour(),\n getSnapshot: snapshot,\n subscribe: (listener) => {\n listenersRef.current.add(listener);\n return () => {\n listenersRef.current.delete(listener);\n };\n },\n };\n return registerTourController(id, controller);\n }, [closeTour, id, nextStep, prevStep, skipTour, snapshot, startTour]);\n\n const renderProps: TourRenderProps = useMemo(() => ({\n isActive,\n step,\n stepIndex,\n totalSteps: steps.length,\n startTour: () => void startTour(),\n nextStep: () => void nextStep(),\n prevStep: () => void prevStep(),\n skipTour: () => void skipTour(),\n closeTour: () => void closeTour(),\n }), [closeTour, isActive, nextStep, prevStep, skipTour, startTour, step, stepIndex, steps.length]);\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n if (!isActive || !step || !targetRect) return null;\n\n const tooltipPos = resolvePosition(targetRect, step.placement ?? \"auto\");\n const canSkip = step.skipable !== false;\n const titleId = `${instanceIdRef.current}-title`;\n const contentId = `${instanceIdRef.current}-content`;\n const progressId = `${instanceIdRef.current}-progress`;\n const t = context?.translations;\n\n return (\n <>\n {overlay && <div data-featuredrop-tour-overlay style={overlayStyles} aria-hidden=\"true\" />}\n {(step.highlightTarget ?? true) && (\n <div\n data-featuredrop-tour-highlight\n style={{\n ...highlightStyles,\n top: targetRect.top - 4,\n left: targetRect.left - 4,\n width: targetRect.width + 8,\n height: targetRect.height + 8,\n }}\n />\n )}\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal={overlay ? true : undefined}\n aria-labelledby={titleId}\n aria-describedby={showProgress ? `${contentId} ${progressId}` : contentId}\n data-featuredrop-tour={id}\n dir={context?.direction}\n tabIndex={-1}\n style={{\n ...tourBoxStyles,\n animation: dialogAnimation,\n top: tooltipPos.top,\n left: tooltipPos.left,\n }}\n >\n <p id={titleId} style={{ margin: \"0 0 8px\", fontSize: \"16px\", fontWeight: 700 }}>\n {step.title}\n </p>\n <div\n id={contentId}\n style={{ margin: \"0 0 10px\", fontSize: \"14px\", lineHeight: 1.5, color: \"#4b5563\" }}\n >\n {typeof step.content === \"string\" ? step.content : step.content}\n </div>\n {showProgress && (\n <p\n id={progressId}\n style={{ margin: \"0 0 10px\", fontSize: \"12px\", color: \"#6b7280\" }}\n aria-live=\"polite\"\n >\n {t ? t.stepOf(stepIndex + 1, steps.length) : `Step ${stepIndex + 1} of ${steps.length}`}\n </p>\n )}\n <div style={{ display: \"flex\", justifyContent: \"space-between\", gap: \"8px\" }}>\n <button\n type=\"button\"\n onClick={() => void prevStep()}\n disabled={stepIndex <= 0}\n style={{\n border: \"1px solid #e5e7eb\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: stepIndex <= 0 ? \"not-allowed\" : \"pointer\",\n opacity: stepIndex <= 0 ? 0.5 : 1,\n }}\n >\n {t?.back ?? \"Back\"}\n </button>\n <div style={{ display: \"flex\", gap: \"8px\" }}>\n {canSkip && (\n <button\n type=\"button\"\n onClick={() => void skipTour()}\n style={{\n border: \"1px solid #e5e7eb\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {t?.skip ?? \"Skip\"}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => void nextStep()}\n style={{\n border: \"none\",\n background: \"#111827\",\n color: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {stepIndex >= steps.length - 1 ? (t?.finish ?? \"Finish\") : (t?.next ?? \"Next\")}\n </button>\n </div>\n </div>\n </div>\n </>\n );\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n registerChecklistController,\n type ChecklistController,\n type ChecklistSnapshot,\n} from \"../checklist-registry\";\nimport { getTourController } from \"../tour-registry\";\nimport { FeatureDropContext } from \"../context\";\n\nexport interface ChecklistTask {\n id: string;\n title: string;\n description?: string;\n completed?: boolean;\n completionEvent?: string;\n action?: {\n type: \"tour\" | \"link\" | \"callback\";\n target: string;\n };\n icon?: ReactNode;\n estimatedTime?: string;\n}\n\nexport interface ChecklistRenderProps {\n tasks: ChecklistTask[];\n completedIds: Set<string>;\n completeTask: (taskId: string) => void;\n resetChecklist: () => void;\n dismissChecklist: () => void;\n isComplete: boolean;\n progress: { completed: number; total: number; percent: number };\n collapsed: boolean;\n toggleCollapsed: () => void;\n}\n\nexport interface ChecklistProps {\n id: string;\n tasks: ChecklistTask[];\n position?:\n | \"bottom-right\"\n | \"bottom-left\"\n | \"top-right\"\n | \"top-left\"\n | \"inline\";\n collapsible?: boolean;\n showProgress?: boolean;\n onComplete?: () => void;\n dismissible?: boolean;\n actionHandlers?: Record<string, () => void>;\n children?: (props: ChecklistRenderProps) => ReactNode;\n}\n\ninterface PersistedChecklistState {\n completedIds: string[];\n dismissed: boolean;\n collapsed: boolean;\n}\n\nconst containerBaseStyles: CSSProperties = {\n width: \"min(92vw, 360px)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"12px\",\n background: \"#ffffff\",\n boxShadow: \"0 10px 28px rgba(0,0,0,0.12)\",\n padding: \"12px\",\n zIndex: \"var(--featuredrop-checklist-z-index, 10000)\" as unknown as number,\n};\n\nconst positionStyles: Record<NonNullable<ChecklistProps[\"position\"]>, CSSProperties> = {\n \"bottom-right\": { position: \"fixed\", right: \"16px\", bottom: \"16px\" },\n \"bottom-left\": { position: \"fixed\", left: \"16px\", bottom: \"16px\" },\n \"top-right\": { position: \"fixed\", right: \"16px\", top: \"16px\" },\n \"top-left\": { position: \"fixed\", left: \"16px\", top: \"16px\" },\n inline: {},\n};\n\nfunction getStorageKey(id: string): string {\n return `featuredrop:checklist:${id}:state`;\n}\n\nfunction readPersistedState(id: string): PersistedChecklistState | null {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (key: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return null;\n try {\n const raw = storage.getItem(getStorageKey(id));\n if (!raw) return null;\n const parsed = JSON.parse(raw) as PersistedChecklistState;\n if (!parsed || typeof parsed !== \"object\") return null;\n if (!Array.isArray(parsed.completedIds)) return null;\n return {\n completedIds: parsed.completedIds.filter((value): value is string => typeof value === \"string\"),\n dismissed: !!parsed.dismissed,\n collapsed: !!parsed.collapsed,\n };\n } catch {\n return null;\n }\n}\n\nfunction writePersistedState(id: string, state: PersistedChecklistState): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (key: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(getStorageKey(id), JSON.stringify(state));\n } catch {\n // noop\n }\n}\n\nfunction parseCompletionEvent(value: string): { selector: string; event: string } | null {\n const parts = value.split(\":\");\n if (parts.length < 2) return null;\n const selector = parts.slice(0, -1).join(\":\").trim();\n const event = parts[parts.length - 1].trim();\n if (!selector || !event) return null;\n return { selector, event };\n}\n\nexport function Checklist({\n id,\n tasks,\n position = \"bottom-right\",\n collapsible = true,\n showProgress = true,\n onComplete,\n dismissible = true,\n actionHandlers,\n children,\n}: ChecklistProps) {\n const context = useContext(FeatureDropContext);\n const persisted = useMemo(() => readPersistedState(id), [id]);\n const [completedIds, setCompletedIds] = useState<Set<string>>(() => {\n const initial = new Set<string>();\n for (const task of tasks) {\n if (task.completed) initial.add(task.id);\n }\n for (const taskId of persisted?.completedIds ?? []) initial.add(taskId);\n return initial;\n });\n const [dismissed, setDismissed] = useState<boolean>(persisted?.dismissed ?? false);\n const [collapsed, setCollapsed] = useState<boolean>(persisted?.collapsed ?? false);\n const listenersRef = useRef(new Set<() => void>());\n\n const progress = useMemo(() => {\n const total = tasks.length;\n const completed = tasks.reduce(\n (count, task) => count + (completedIds.has(task.id) ? 1 : 0),\n 0,\n );\n const percent = total === 0 ? 100 : Math.round((completed / total) * 100);\n return { completed, total, percent };\n }, [completedIds, tasks]);\n\n const isComplete = progress.total > 0 && progress.completed >= progress.total;\n\n const emit = useCallback(() => {\n for (const listener of listenersRef.current) listener();\n }, []);\n\n const persist = useCallback((next?: {\n completedIds?: Set<string>;\n dismissed?: boolean;\n collapsed?: boolean;\n }) => {\n writePersistedState(id, {\n completedIds: Array.from(next?.completedIds ?? completedIds),\n dismissed: next?.dismissed ?? dismissed,\n collapsed: next?.collapsed ?? collapsed,\n });\n }, [collapsed, completedIds, dismissed, id]);\n\n const completeTask = useCallback((taskId: string) => {\n setCompletedIds((previous) => {\n if (previous.has(taskId)) return previous;\n const next = new Set(previous);\n next.add(taskId);\n persist({ completedIds: next });\n context?.trackAdoptionEvent({\n type: \"checklist_task_completed\",\n metadata: { checklistId: id, taskId },\n });\n return next;\n });\n }, [context, id, persist]);\n\n const resetChecklist = useCallback(() => {\n const next = new Set<string>();\n for (const task of tasks) {\n if (task.completed) next.add(task.id);\n }\n setCompletedIds(next);\n setDismissed(false);\n setCollapsed(false);\n persist({ completedIds: next, dismissed: false, collapsed: false });\n }, [persist, tasks]);\n\n const dismissChecklist = useCallback(() => {\n setDismissed(true);\n persist({ dismissed: true });\n }, [persist]);\n\n const toggleCollapsed = useCallback(() => {\n setCollapsed((previous) => {\n const next = !previous;\n persist({ collapsed: next });\n return next;\n });\n }, [persist]);\n\n useEffect(() => {\n if (!isComplete) return;\n context?.trackAdoptionEvent({\n type: \"checklist_completed\",\n metadata: { checklistId: id },\n });\n onComplete?.();\n }, [context, id, isComplete, onComplete]);\n\n useEffect(() => {\n emit();\n }, [collapsed, completedIds, dismissed, emit, progress.completed, progress.percent, progress.total, isComplete]);\n\n useEffect(() => {\n const cleanups: Array<() => void> = [];\n for (const task of tasks) {\n if (!task.completionEvent || completedIds.has(task.id)) continue;\n const parsed = parseCompletionEvent(task.completionEvent);\n if (!parsed) continue;\n const target = document.querySelector(parsed.selector);\n if (!target) continue;\n const handler = () => completeTask(task.id);\n target.addEventListener(parsed.event, handler);\n cleanups.push(() => target.removeEventListener(parsed.event, handler));\n }\n return () => {\n for (const cleanup of cleanups) cleanup();\n };\n }, [completeTask, completedIds, tasks]);\n\n useEffect(() => {\n const controller: ChecklistController = {\n completeTask,\n resetChecklist,\n dismissChecklist,\n toggleCollapsed,\n getSnapshot: (): ChecklistSnapshot => ({\n exists: true,\n tasks: tasks.map((task) => ({\n id: task.id,\n completed: completedIds.has(task.id),\n })),\n progress,\n isComplete,\n dismissed,\n collapsed,\n }),\n subscribe: (listener) => {\n listenersRef.current.add(listener);\n return () => {\n listenersRef.current.delete(listener);\n };\n },\n };\n return registerChecklistController(id, controller);\n }, [collapsed, completeTask, completedIds, dismissChecklist, dismissed, id, isComplete, progress, resetChecklist, tasks, toggleCollapsed]);\n\n const runTaskAction = (task: ChecklistTask): void => {\n const action = task.action;\n if (!action) return;\n if (action.type === \"tour\") {\n getTourController(action.target)?.startTour();\n return;\n }\n if (action.type === \"link\") {\n if (typeof window !== \"undefined\") {\n window.location.assign(action.target);\n }\n return;\n }\n if (action.type === \"callback\") {\n actionHandlers?.[action.target]?.();\n }\n };\n\n const renderProps: ChecklistRenderProps = {\n tasks,\n completedIds,\n completeTask,\n resetChecklist,\n dismissChecklist,\n isComplete,\n progress,\n collapsed,\n toggleCollapsed,\n };\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n if (dismissed) return null;\n\n return (\n <div\n data-featuredrop-checklist={id}\n style={{\n ...containerBaseStyles,\n ...positionStyles[position],\n }}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", gap: \"8px\" }}>\n <strong>Getting Started</strong>\n <div style={{ display: \"flex\", gap: \"6px\" }}>\n {collapsible && (\n <button\n onClick={toggleCollapsed}\n style={{ border: \"none\", background: \"transparent\", cursor: \"pointer\" }}\n aria-label={collapsed ? \"Expand checklist\" : \"Collapse checklist\"}\n >\n {collapsed ? \"+\" : \"-\"}\n </button>\n )}\n {dismissible && (\n <button\n onClick={dismissChecklist}\n style={{ border: \"none\", background: \"transparent\", cursor: \"pointer\" }}\n aria-label=\"Dismiss checklist\"\n >\n x\n </button>\n )}\n </div>\n </div>\n\n {showProgress && (\n <div style={{ marginTop: \"8px\", marginBottom: collapsed ? 0 : \"8px\" }}>\n <div style={{ fontSize: \"12px\", color: \"#6b7280\", marginBottom: \"4px\" }}>\n {progress.completed} of {progress.total} complete\n </div>\n <div style={{ height: \"6px\", borderRadius: \"999px\", background: \"#e5e7eb\" }}>\n <div\n style={{\n height: \"100%\",\n width: `${progress.percent}%`,\n borderRadius: \"999px\",\n background: \"#10b981\",\n transition: \"width 160ms ease\",\n }}\n />\n </div>\n </div>\n )}\n\n {!collapsed && (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {tasks.map((task) => {\n const done = completedIds.has(task.id);\n return (\n <button\n key={task.id}\n onClick={() => {\n completeTask(task.id);\n runTaskAction(task);\n }}\n style={{\n textAlign: \"left\",\n border: \"1px solid #e5e7eb\",\n background: done ? \"#ecfdf5\" : \"#fff\",\n borderRadius: \"8px\",\n padding: \"8px 10px\",\n cursor: \"pointer\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: \"8px\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <span>{task.icon ?? (done ? \"✓\" : \"○\")}</span>\n <span style={{ fontWeight: 600 }}>{task.title}</span>\n </div>\n {task.estimatedTime && (\n <span style={{ fontSize: \"11px\", color: \"#6b7280\" }}>{task.estimatedTime}</span>\n )}\n </div>\n {task.description && (\n <p style={{ margin: \"4px 0 0 24px\", fontSize: \"12px\", color: \"#6b7280\" }}>\n {task.description}\n </p>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n ensureFeatureDropAnimationStyles,\n getEnterAnimation,\n getPulseAnimation,\n prefersReducedMotion,\n resolveAnimationPreset,\n} from \"../../animation\";\nimport { FeatureDropContext } from \"../context\";\n\nexport interface HotspotProps {\n id: string;\n target: string;\n type?: \"info\" | \"new\" | \"help\";\n frequency?: \"once\" | \"every-session\" | \"always\";\n children: ReactNode;\n}\n\nexport interface TooltipGroupProps {\n maxVisible?: number;\n children: ReactNode;\n}\n\ninterface TooltipGroupContextValue {\n canOpen: (id: string) => boolean;\n markOpen: (id: string) => void;\n markClosed: (id: string) => void;\n}\n\nconst TooltipGroupContext = createContext<TooltipGroupContextValue | null>(null);\nconst sessionDismissed = new Set<string>();\n\nfunction onceStorageKey(id: string): string {\n return `featuredrop:hotspot:${id}:dismissed`;\n}\n\nfunction isDismissedOnce(id: string): boolean {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (key: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return false;\n try {\n return storage.getItem(onceStorageKey(id)) === \"1\";\n } catch {\n return false;\n }\n}\n\nfunction setDismissedOnce(id: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (key: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(onceStorageKey(id), \"1\");\n } catch {\n // noop\n }\n}\n\nexport function TooltipGroup({ maxVisible = 3, children }: TooltipGroupProps) {\n const [openIds, setOpenIds] = useState<Set<string>>(new Set());\n const openIdsRef = useRef(openIds);\n openIdsRef.current = openIds;\n\n const value = useMemo<TooltipGroupContextValue>(() => ({\n canOpen: (id: string) => {\n const current = openIdsRef.current;\n return current.has(id) || current.size < maxVisible;\n },\n markOpen: (id: string) => {\n const current = openIdsRef.current;\n if (current.has(id)) return;\n const next = new Set(current);\n next.add(id);\n openIdsRef.current = next;\n setOpenIds(next);\n },\n markClosed: (id: string) => {\n const current = openIdsRef.current;\n if (!current.has(id)) return;\n const next = new Set(current);\n next.delete(id);\n openIdsRef.current = next;\n setOpenIds(next);\n },\n }), [maxVisible]);\n\n useEffect(() => {\n openIdsRef.current = openIds;\n }, [openIds]);\n\n return (\n <TooltipGroupContext.Provider value={value}>\n {children}\n </TooltipGroupContext.Provider>\n );\n}\n\nconst beaconTypeStyles: Record<NonNullable<HotspotProps[\"type\"]>, CSSProperties> = {\n info: { background: \"#3b82f6\" },\n new: { background: \"#10b981\" },\n help: { background: \"#f59e0b\" },\n};\n\nconst tooltipStyles: CSSProperties = {\n position: \"fixed\",\n zIndex: \"var(--featuredrop-hotspot-z-index, 10001)\" as unknown as number,\n border: \"1px solid #e5e7eb\",\n borderRadius: \"10px\",\n background: \"#fff\",\n padding: \"10px 12px\",\n boxShadow: \"0 8px 28px rgba(0,0,0,0.14)\",\n width: \"min(90vw, 280px)\",\n};\n\nexport function Hotspot({\n id,\n target,\n type = \"info\",\n frequency = \"once\",\n children,\n}: HotspotProps) {\n const featureDrop = useContext(FeatureDropContext);\n const group = useContext(TooltipGroupContext);\n const [open, setOpen] = useState(false);\n const [dismissed, setDismissed] = useState(false);\n const [rect, setRect] = useState<DOMRect | null>(null);\n const hoverTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const beaconRef = useRef<HTMLButtonElement>(null);\n const instanceIdRef = useRef(`featuredrop-hotspot-${Math.random().toString(36).slice(2, 10)}`);\n const animation = useMemo(\n () =>\n resolveAnimationPreset(featureDrop?.animation ?? \"normal\", {\n reducedMotion: prefersReducedMotion(),\n }),\n [featureDrop?.animation],\n );\n const beaconPulseAnimation = useMemo(\n () => getPulseAnimation(animation, \"dot\"),\n [animation],\n );\n const tooltipEnterAnimation = useMemo(\n () => getEnterAnimation(animation, \"popover\"),\n [animation],\n );\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n useEffect(() => {\n if (frequency === \"once\" && isDismissedOnce(id)) {\n setDismissed(true);\n return;\n }\n if (frequency === \"every-session\" && sessionDismissed.has(id)) {\n setDismissed(true);\n }\n }, [frequency, id]);\n\n useEffect(() => {\n const el = document.querySelector(target);\n if (!el) return;\n const update = () => setRect(el.getBoundingClientRect());\n update();\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n return () => {\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n };\n }, [target]);\n\n const canOpen = useCallback(() => {\n if (dismissed) return false;\n if (!group) return true;\n return group.canOpen(id);\n }, [dismissed, group, id]);\n\n const openTooltip = useCallback(() => {\n if (!canOpen()) return;\n setOpen(true);\n group?.markOpen(id);\n }, [canOpen, group, id]);\n\n const closeTooltip = useCallback(() => {\n setOpen(false);\n group?.markClosed(id);\n const beacon = beaconRef.current;\n if (beacon) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => beacon.focus());\n } else {\n beacon.focus();\n }\n }\n }, [group, id]);\n\n const dismissTooltip = useCallback(() => {\n setDismissed(true);\n closeTooltip();\n if (frequency === \"once\") {\n setDismissedOnce(id);\n } else if (frequency === \"every-session\") {\n sessionDismissed.add(id);\n }\n }, [closeTooltip, frequency, id]);\n\n useEffect(() => {\n return () => {\n if (hoverTimer.current) {\n clearTimeout(hoverTimer.current);\n }\n group?.markClosed(id);\n };\n }, [group, id]);\n\n useEffect(() => {\n if (!open) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n closeTooltip();\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [closeTooltip, open]);\n\n if (!rect || dismissed) return null;\n\n const tooltipTop = Math.min(window.innerHeight - 120, rect.bottom + 10);\n const tooltipLeft = Math.min(window.innerWidth - 300, Math.max(10, rect.left));\n const tooltipId = `${instanceIdRef.current}-tooltip`;\n\n return (\n <>\n <button\n ref={beaconRef}\n type=\"button\"\n data-featuredrop-hotspot={id}\n aria-label={`Hotspot ${id}`}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-controls={tooltipId}\n onMouseEnter={() => {\n hoverTimer.current = setTimeout(openTooltip, 120);\n }}\n onMouseLeave={() => {\n if (hoverTimer.current) clearTimeout(hoverTimer.current);\n }}\n onClick={() => {\n if (open) closeTooltip();\n else openTooltip();\n }}\n style={{\n position: \"fixed\",\n top: rect.top - 6,\n left: rect.right - 6,\n width: \"12px\",\n height: \"12px\",\n borderRadius: \"999px\",\n border: \"2px solid #fff\",\n boxShadow: \"0 0 0 2px rgba(17,24,39,0.1)\",\n cursor: \"pointer\",\n zIndex: \"var(--featuredrop-hotspot-beacon-z-index, 10000)\" as unknown as number,\n animation: beaconPulseAnimation ?? \"none\",\n ...beaconTypeStyles[type],\n }}\n />\n {open && (\n <div\n id={tooltipId}\n role=\"dialog\"\n aria-modal=\"false\"\n data-featuredrop-hotspot-tooltip={id}\n style={{\n ...tooltipStyles,\n top: tooltipTop,\n left: tooltipLeft,\n animation: tooltipEnterAnimation,\n }}\n onMouseLeave={closeTooltip}\n >\n <div style={{ fontSize: \"13px\", color: \"#374151\", lineHeight: 1.5 }}>{children}</div>\n <button\n type=\"button\"\n onClick={dismissTooltip}\n style={{\n marginTop: \"8px\",\n border: \"none\",\n background: \"transparent\",\n color: \"#2563eb\",\n cursor: \"pointer\",\n padding: 0,\n }}\n >\n Dismiss\n </button>\n </div>\n )}\n </>\n );\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { ensureFeatureDropAnimationStyles, getEnterAnimation } from \"../../animation\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\n\nexport type FeedbackEmoji =\n | \"thumbs-up\"\n | \"thumbs-down\"\n | \"heart\"\n | \"thinking\"\n | \"fire\";\n\nexport interface FeedbackPayload {\n featureId?: string;\n text: string;\n category?: string;\n emoji?: FeedbackEmoji;\n screenshot?: Blob;\n url: string;\n timestamp: string;\n metadata?: Record<string, unknown>;\n}\n\nexport type FeedbackRateLimit = \"none\" | \"1-per-feature\" | \"1-per-session\";\n\nexport interface FeedbackWidgetRenderProps {\n isOpen: boolean;\n isSubmitting: boolean;\n isRateLimited: boolean;\n submitted: boolean;\n text: string;\n category: string;\n emoji: FeedbackEmoji | null;\n screenshot: Blob | null;\n error: string | null;\n open: () => void;\n close: () => void;\n setText: (value: string) => void;\n setCategory: (value: string) => void;\n setEmoji: (value: FeedbackEmoji | null) => void;\n captureScreenshot: () => Promise<void>;\n submit: () => Promise<void>;\n}\n\nexport interface FeedbackWidgetProps {\n featureId?: string;\n onSubmit: (payload: FeedbackPayload) => Promise<void> | void;\n showScreenshot?: boolean;\n showEmoji?: boolean;\n rateLimit?: FeedbackRateLimit;\n categories?: string[];\n metadata?: Record<string, unknown>;\n screenshotCapture?: () => Promise<Blob | null | undefined>;\n triggerLabel?: string;\n title?: string;\n className?: string;\n style?: CSSProperties;\n children?: (props: FeedbackWidgetRenderProps) => ReactNode;\n}\n\nconst sessionSubmitted = new Set<string>();\nconst defaultCategories = [\"bug\", \"suggestion\", \"praise\", \"other\"];\nconst emojiOptions: FeedbackEmoji[] = [\n \"thumbs-up\",\n \"thumbs-down\",\n \"heart\",\n \"thinking\",\n \"fire\",\n];\n\nconst panelStyles: CSSProperties = {\n width: \"min(92vw, 360px)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"12px\",\n background: \"#fff\",\n boxShadow: \"0 10px 28px rgba(0,0,0,0.14)\",\n padding: \"12px\",\n};\n\nfunction getRateLimitKey(featureId?: string): string {\n return `featuredrop:feedback:${featureId ?? \"__global__\"}:submitted`;\n}\n\nfunction readSubmitted(key: string): boolean {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (storageKey: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return false;\n try {\n return storage.getItem(key) === \"1\";\n } catch {\n return false;\n }\n}\n\nfunction writeSubmitted(key: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (storageKey: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(key, \"1\");\n } catch {\n // noop\n }\n}\n\nasync function captureViaHtml2Canvas(): Promise<Blob | null> {\n const html2canvasFn = (\n globalThis as unknown as {\n html2canvas?: (target: HTMLElement) => Promise<HTMLCanvasElement>;\n }\n ).html2canvas;\n if (!html2canvasFn || typeof document === \"undefined\") return null;\n const canvas = await html2canvasFn(document.body);\n if (typeof canvas.toBlob !== \"function\") return null;\n return new Promise((resolve) => {\n canvas.toBlob((blob) => resolve(blob), \"image/png\");\n });\n}\n\nexport function FeedbackWidget({\n featureId,\n onSubmit,\n showScreenshot = false,\n showEmoji = true,\n rateLimit = \"none\",\n categories = defaultCategories,\n metadata,\n screenshotCapture,\n triggerLabel,\n title,\n className,\n style,\n children,\n}: FeedbackWidgetProps) {\n const { trackAdoptionEvent, direction, animation, translations } = useFeatureDrop();\n const [isOpen, setIsOpen] = useState(false);\n const [text, setText] = useState(\"\");\n const [category, setCategory] = useState(categories[0] ?? \"other\");\n const [emoji, setEmoji] = useState<FeedbackEmoji | null>(null);\n const [screenshot, setScreenshot] = useState<Blob | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [submitted, setSubmitted] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n const instanceIdRef = useRef(`featuredrop-feedback-${Math.random().toString(36).slice(2, 10)}`);\n\n const rateLimitKey = useMemo(() => getRateLimitKey(featureId), [featureId]);\n const panelAnimation = useMemo(() => getEnterAnimation(animation, \"popover\"), [animation]);\n const resolvedTriggerLabel = triggerLabel ?? translations.feedbackTrigger;\n const resolvedTitle = title ?? translations.feedbackTitle;\n const isRateLimited = useMemo(() => {\n if (rateLimit === \"none\") return false;\n if (rateLimit === \"1-per-session\") return sessionSubmitted.has(rateLimitKey);\n return readSubmitted(rateLimitKey);\n }, [rateLimit, rateLimitKey, submitted]);\n\n const open = useCallback(() => {\n if (typeof document !== \"undefined\" && document.activeElement instanceof HTMLElement) {\n lastFocusedElementRef.current = document.activeElement;\n }\n setIsOpen(true);\n }, []);\n const close = useCallback(() => {\n setIsOpen(false);\n const returnTarget = triggerRef.current ?? lastFocusedElementRef.current;\n if (returnTarget) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => returnTarget.focus());\n } else {\n returnTarget.focus();\n }\n }\n }, []);\n\n useEffect(() => {\n if (!isOpen) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n close();\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [close, isOpen]);\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n const captureScreenshot = useCallback(async () => {\n if (!showScreenshot) return;\n try {\n const captured = screenshotCapture\n ? await screenshotCapture()\n : await captureViaHtml2Canvas();\n if (captured) setScreenshot(captured);\n } catch {\n // ignore capture errors in UI flow\n }\n }, [screenshotCapture, showScreenshot]);\n\n const submit = useCallback(async () => {\n if (isSubmitting || isRateLimited) return;\n const trimmed = text.trim();\n if (!trimmed) {\n setError(\"Please add feedback details.\");\n return;\n }\n setIsSubmitting(true);\n setError(null);\n const payload: FeedbackPayload = {\n featureId,\n text: trimmed,\n category,\n emoji: emoji ?? undefined,\n screenshot: screenshot ?? undefined,\n url: typeof window === \"undefined\" ? \"\" : window.location.href,\n timestamp: new Date().toISOString(),\n metadata,\n };\n try {\n await onSubmit(payload);\n setSubmitted(true);\n if (rateLimit === \"1-per-session\") {\n sessionSubmitted.add(rateLimitKey);\n } else if (rateLimit === \"1-per-feature\") {\n writeSubmitted(rateLimitKey);\n }\n trackAdoptionEvent({\n type: \"feedback_submitted\",\n featureId,\n metadata: {\n category,\n emoji: emoji ?? undefined,\n hasScreenshot: !!screenshot,\n },\n });\n setText(\"\");\n setScreenshot(null);\n setEmoji(null);\n } catch {\n setError(\"Failed to submit feedback. Please try again.\");\n } finally {\n setIsSubmitting(false);\n }\n }, [\n category,\n emoji,\n featureId,\n isRateLimited,\n isSubmitting,\n metadata,\n onSubmit,\n rateLimit,\n rateLimitKey,\n screenshot,\n text,\n trackAdoptionEvent,\n ]);\n\n const renderProps: FeedbackWidgetRenderProps = {\n isOpen,\n isSubmitting,\n isRateLimited,\n submitted,\n text,\n category,\n emoji,\n screenshot,\n error,\n open,\n close,\n setText,\n setCategory,\n setEmoji,\n captureScreenshot,\n submit,\n };\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n if (!isOpen) {\n return (\n <button\n ref={triggerRef}\n type=\"button\"\n onClick={open}\n data-featuredrop-feedback-trigger\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={`${instanceIdRef.current}-panel`}\n style={{\n border: \"1px solid #d1d5db\",\n background: \"#fff\",\n borderRadius: \"10px\",\n padding: \"8px 12px\",\n cursor: \"pointer\",\n fontWeight: 600,\n }}\n >\n {resolvedTriggerLabel}\n </button>\n );\n }\n\n const titleId = `${instanceIdRef.current}-title`;\n const textareaId = `${instanceIdRef.current}-textarea`;\n\n return (\n <div\n ref={panelRef}\n id={`${instanceIdRef.current}-panel`}\n data-featuredrop-feedback-widget\n className={className}\n style={{ ...panelStyles, animation: panelAnimation, ...style }}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={titleId}\n dir={direction}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", gap: \"8px\" }}>\n <strong id={titleId}>{resolvedTitle}</strong>\n <button\n type=\"button\"\n onClick={close}\n style={{ border: \"none\", background: \"transparent\", cursor: \"pointer\" }}\n aria-label={translations.close}\n >\n x\n </button>\n </div>\n\n {isRateLimited && (\n <p style={{ margin: \"8px 0 0\", fontSize: \"12px\", color: \"#6b7280\" }}>\n Feedback already submitted.\n </p>\n )}\n\n <textarea\n id={textareaId}\n aria-label=\"Feedback details\"\n value={text}\n onChange={(event) => setText(event.target.value)}\n placeholder=\"Tell us what worked, what did not, and what would help.\"\n rows={4}\n disabled={isRateLimited || isSubmitting}\n style={{\n width: \"100%\",\n marginTop: \"8px\",\n border: \"1px solid #d1d5db\",\n borderRadius: \"8px\",\n padding: \"8px\",\n resize: \"vertical\",\n }}\n />\n\n <div style={{ display: \"flex\", gap: \"8px\", marginTop: \"8px\", flexWrap: \"wrap\" }}>\n <select\n aria-label=\"Feedback category\"\n value={category}\n onChange={(event) => setCategory(event.target.value)}\n disabled={isRateLimited || isSubmitting}\n style={{ border: \"1px solid #d1d5db\", borderRadius: \"8px\", padding: \"6px 8px\" }}\n >\n {categories.map((item) => (\n <option key={item} value={item}>\n {item}\n </option>\n ))}\n </select>\n\n {showEmoji && (\n <div style={{ display: \"flex\", gap: \"6px\", flexWrap: \"wrap\" }}>\n {emojiOptions.map((item) => (\n <button\n key={item}\n type=\"button\"\n onClick={() => setEmoji(item)}\n disabled={isRateLimited || isSubmitting}\n aria-pressed={emoji === item}\n style={{\n border: \"1px solid #d1d5db\",\n background: emoji === item ? \"#111827\" : \"#fff\",\n color: emoji === item ? \"#fff\" : \"#111827\",\n borderRadius: \"999px\",\n fontSize: \"11px\",\n padding: \"4px 8px\",\n cursor: \"pointer\",\n }}\n >\n {item}\n </button>\n ))}\n </div>\n )}\n </div>\n\n {showScreenshot && (\n <div style={{ marginTop: \"8px\" }}>\n <button\n type=\"button\"\n onClick={() => void captureScreenshot()}\n disabled={isRateLimited || isSubmitting}\n style={{\n border: \"1px solid #d1d5db\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 8px\",\n cursor: \"pointer\",\n }}\n >\n Capture screenshot\n </button>\n {screenshot && (\n <span style={{ marginLeft: \"8px\", fontSize: \"12px\", color: \"#6b7280\" }}>\n Screenshot attached\n </span>\n )}\n </div>\n )}\n\n {error && (\n <p role=\"alert\" style={{ margin: \"8px 0 0\", fontSize: \"12px\", color: \"#b91c1c\" }}>{error}</p>\n )}\n {submitted && !error && (\n <p role=\"status\" aria-live=\"polite\" style={{ margin: \"8px 0 0\", fontSize: \"12px\", color: \"#166534\" }}>\n {translations.feedbackSubmitted}\n </p>\n )}\n\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", gap: \"8px\", marginTop: \"10px\" }}>\n <button\n type=\"button\"\n onClick={close}\n style={{\n border: \"1px solid #d1d5db\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {translations.cancel}\n </button>\n <button\n type=\"button\"\n onClick={() => void submit()}\n disabled={isRateLimited || isSubmitting || !text.trim()}\n style={{\n border: \"none\",\n background: \"#111827\",\n color: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n opacity: isRateLimited || isSubmitting || !text.trim() ? 0.5 : 1,\n }}\n >\n {isSubmitting ? \"Submitting...\" : translations.submit}\n </button>\n </div>\n </div>\n );\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport type { FeatureCTA, FeatureEntry } from \"../../types\";\nimport { parseDescription } from \"../../markdown\";\nimport {\n ensureFeatureDropAnimationStyles,\n getAnimationDurationMs,\n getEnterAnimation,\n getExitAnimation,\n} from \"../../animation\";\nimport { FeatureDropContext } from \"../context\";\n\nexport interface AnnouncementSlide {\n id?: string;\n title: string;\n description?: string;\n image?: string;\n videoUrl?: string;\n primaryCta?: FeatureCTA;\n secondaryCta?: FeatureCTA;\n}\n\nexport interface AnnouncementModalRenderProps {\n isOpen: boolean;\n currentSlide: AnnouncementSlide | null;\n currentSlideIndex: number;\n totalSlides: number;\n open: () => void;\n close: () => void;\n nextSlide: () => void;\n prevSlide: () => void;\n dismiss: () => void;\n}\n\nexport interface AnnouncementModalProps {\n id?: string;\n featureId?: string;\n feature?: FeatureEntry;\n trigger?: \"auto\" | \"manual\";\n defaultOpen?: boolean;\n slides?: AnnouncementSlide[];\n frequency?: \"once\" | \"every-session\" | \"always\";\n dismissible?: boolean;\n mobileBreakpoint?: number;\n onOpen?: () => void;\n onDismiss?: () => void;\n onPrimaryCtaClick?: (slide: AnnouncementSlide, index: number) => void;\n onSecondaryCtaClick?: (slide: AnnouncementSlide, index: number) => void;\n className?: string;\n style?: CSSProperties;\n children?: (props: AnnouncementModalRenderProps) => ReactNode;\n}\n\nconst sessionDismissed = new Set<string>();\n\nconst overlayStyles: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n background: \"rgba(17, 24, 39, 0.62)\",\n zIndex: \"var(--featuredrop-modal-overlay-z-index, 10020)\" as unknown as number,\n};\n\nconst desktopModalStyles: CSSProperties = {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"min(92vw, 680px)\",\n maxHeight: \"85vh\",\n overflowY: \"auto\",\n borderRadius: \"16px\",\n border: \"1px solid #e5e7eb\",\n background: \"#fff\",\n boxShadow: \"0 24px 80px rgba(0,0,0,0.24)\",\n zIndex: \"var(--featuredrop-modal-z-index, 10021)\" as unknown as number,\n};\n\nconst mobileModalStyles: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n borderRadius: 0,\n width: \"100vw\",\n height: \"100vh\",\n maxHeight: \"100vh\",\n overflowY: \"auto\",\n border: \"none\",\n background: \"#fff\",\n zIndex: \"var(--featuredrop-modal-z-index, 10021)\" as unknown as number,\n};\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n const nodes = container.querySelectorAll<HTMLElement>(\n [\n \"a[href]\",\n \"button:not([disabled])\",\n \"textarea:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n ].join(\",\"),\n );\n\n return Array.from(nodes).filter(\n (node) => !node.hasAttribute(\"disabled\") && node.getAttribute(\"aria-hidden\") !== \"true\",\n );\n}\n\nfunction onceStorageKey(id: string): string {\n return `featuredrop:announcement:${id}:dismissed`;\n}\n\nfunction isDismissedOnce(id: string): boolean {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (key: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return false;\n try {\n return storage.getItem(onceStorageKey(id)) === \"1\";\n } catch {\n return false;\n }\n}\n\nfunction setDismissedOnce(id: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (key: string, value: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(onceStorageKey(id), \"1\");\n } catch {\n // noop\n }\n}\n\nfunction toEmbedUrl(videoUrl?: string): string | null {\n if (!videoUrl) return null;\n const trimmed = videoUrl.trim();\n const youtubeMatch =\n trimmed.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([\\w-]{6,})/) ??\n trimmed.match(/youtube\\.com\\/embed\\/([\\w-]{6,})/);\n if (youtubeMatch?.[1]) {\n return `https://www.youtube.com/embed/${youtubeMatch[1]}`;\n }\n const vimeoMatch =\n trimmed.match(/vimeo\\.com\\/(\\d{6,})/) ??\n trimmed.match(/player\\.vimeo\\.com\\/video\\/(\\d{6,})/);\n if (vimeoMatch?.[1]) {\n return `https://player.vimeo.com/video/${vimeoMatch[1]}`;\n }\n return null;\n}\n\nfunction toFeatureSlide(feature?: FeatureEntry): AnnouncementSlide[] {\n if (!feature) return [];\n return [\n {\n id: feature.id,\n title: feature.label,\n description: feature.description,\n image: feature.image,\n primaryCta: feature.cta,\n },\n ];\n}\n\nexport function AnnouncementModal({\n id,\n featureId,\n feature,\n trigger = \"manual\",\n defaultOpen = false,\n slides,\n frequency = \"once\",\n dismissible = true,\n mobileBreakpoint = 768,\n onOpen,\n onDismiss,\n onPrimaryCtaClick,\n onSecondaryCtaClick,\n className,\n style,\n children,\n}: AnnouncementModalProps) {\n const context = useContext(FeatureDropContext);\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [isClosing, setIsClosing] = useState(false);\n const [slideIndex, setSlideIndex] = useState(0);\n const [blockedByFrequency, setBlockedByFrequency] = useState(false);\n const [isMobile, setIsMobile] = useState(\n typeof window !== \"undefined\" ? window.innerWidth <= mobileBreakpoint : false,\n );\n const modalRef = useRef<HTMLElement>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n const closeTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const instanceIdRef = useRef(`featuredrop-announcement-${Math.random().toString(36).slice(2, 10)}`);\n\n const resolvedFeature = useMemo(() => {\n if (feature) return feature;\n if (!featureId) return undefined;\n return (\n context?.newFeatures.find((item) => item.id === featureId) ??\n context?.manifest.find((item) => item.id === featureId)\n );\n }, [context?.manifest, context?.newFeatures, feature, featureId]);\n\n const modalId = id ?? resolvedFeature?.id ?? featureId ?? \"announcement-modal\";\n const titleId = `${instanceIdRef.current}-title`;\n const descriptionId = `${instanceIdRef.current}-description`;\n const resolvedSlides = useMemo(\n () => (slides && slides.length > 0 ? slides : toFeatureSlide(resolvedFeature)),\n [resolvedFeature, slides],\n );\n\n const currentSlide = resolvedSlides[slideIndex] ?? null;\n const t = context?.translations;\n const enterAnimation = getEnterAnimation(context?.animation ?? \"normal\", \"modal\");\n const exitAnimation = getExitAnimation(context?.animation ?? \"normal\", \"modal\");\n\n const open = useCallback(() => {\n if (blockedByFrequency || resolvedSlides.length === 0) return;\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n setIsClosing(false);\n if (typeof document !== \"undefined\" && document.activeElement instanceof HTMLElement) {\n lastFocusedElementRef.current = document.activeElement;\n }\n const priority = resolvedFeature?.priority;\n if (context && !context.canShowModal(priority)) return;\n setSlideIndex((current) =>\n current >= resolvedSlides.length ? resolvedSlides.length - 1 : current,\n );\n setIsOpen(true);\n context?.markModalShown();\n context?.trackAdoptionEvent({\n type: \"announcement_shown\",\n featureId: resolvedFeature?.id,\n metadata: { modalId },\n });\n onOpen?.();\n }, [blockedByFrequency, context, modalId, onOpen, resolvedFeature?.id, resolvedFeature?.priority, resolvedSlides.length]);\n\n useEffect(() => {\n if (!defaultOpen) return;\n open();\n }, [defaultOpen, open]);\n\n const close = useCallback(() => {\n if (closeTimerRef.current) {\n clearTimeout(closeTimerRef.current);\n closeTimerRef.current = null;\n }\n setIsOpen(false);\n const animationPreset = context?.animation ?? \"normal\";\n const exitDuration = getAnimationDurationMs(animationPreset, \"modal\", \"exit\");\n if (exitDuration > 0) {\n setIsClosing(true);\n closeTimerRef.current = setTimeout(() => {\n setIsClosing(false);\n closeTimerRef.current = null;\n }, exitDuration);\n } else {\n setIsClosing(false);\n }\n const returnTarget = lastFocusedElementRef.current;\n if (returnTarget) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => returnTarget.focus());\n } else {\n returnTarget.focus();\n }\n }\n }, [context?.animation]);\n\n const dismiss = useCallback(() => {\n setBlockedByFrequency(true);\n close();\n if (frequency === \"once\") {\n setDismissedOnce(modalId);\n } else if (frequency === \"every-session\") {\n sessionDismissed.add(modalId);\n }\n onDismiss?.();\n }, [close, frequency, modalId, onDismiss]);\n\n const nextSlide = useCallback(() => {\n setSlideIndex((current) => {\n if (current >= resolvedSlides.length - 1) {\n dismiss();\n return current;\n }\n return current + 1;\n });\n }, [dismiss, resolvedSlides.length]);\n\n const prevSlide = useCallback(() => {\n setSlideIndex((current) => (current <= 0 ? 0 : current - 1));\n }, []);\n\n useEffect(() => {\n if (frequency === \"once\") {\n setBlockedByFrequency(isDismissedOnce(modalId));\n return;\n }\n if (frequency === \"every-session\") {\n setBlockedByFrequency(sessionDismissed.has(modalId));\n return;\n }\n setBlockedByFrequency(false);\n }, [frequency, modalId]);\n\n useEffect(() => {\n if (trigger !== \"auto\") return;\n if (blockedByFrequency || isOpen || isClosing || resolvedSlides.length === 0) return;\n if (frequency === \"once\" && isDismissedOnce(modalId)) return;\n if (frequency === \"every-session\" && sessionDismissed.has(modalId)) return;\n if (resolvedFeature && resolvedFeature.priority !== \"critical\") return;\n open();\n }, [\n frequency,\n blockedByFrequency,\n isClosing,\n isOpen,\n modalId,\n open,\n resolvedFeature,\n resolvedSlides.length,\n trigger,\n ]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const updateViewportMode = () => {\n setIsMobile(window.innerWidth <= mobileBreakpoint);\n };\n updateViewportMode();\n window.addEventListener(\"resize\", updateViewportMode);\n return () => {\n window.removeEventListener(\"resize\", updateViewportMode);\n };\n }, [mobileBreakpoint]);\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n return () => {\n if (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n };\n }, []);\n\n useEffect(() => {\n if (!isOpen) return;\n const modalEl = modalRef.current;\n if (!modalEl) return;\n\n const focusable = getFocusableElements(modalEl);\n const first = focusable[0] ?? modalEl;\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => first.focus());\n } else {\n first.focus();\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Tab\") {\n const items = getFocusableElements(modalEl);\n if (items.length === 0) {\n event.preventDefault();\n modalEl.focus();\n return;\n }\n\n const firstItem = items[0];\n const lastItem = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (event.shiftKey) {\n if (active === firstItem || active === modalEl) {\n event.preventDefault();\n lastItem.focus();\n }\n return;\n }\n if (active === lastItem) {\n event.preventDefault();\n firstItem.focus();\n }\n return;\n }\n\n if (event.key === \"Escape\" && dismissible) {\n event.preventDefault();\n dismiss();\n return;\n }\n\n if (event.key === \"ArrowRight\" && resolvedSlides.length > 1) {\n event.preventDefault();\n nextSlide();\n } else if (event.key === \"ArrowLeft\" && resolvedSlides.length > 1) {\n event.preventDefault();\n prevSlide();\n }\n };\n\n modalEl.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n modalEl.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [dismiss, dismissible, isOpen, nextSlide, prevSlide, resolvedSlides.length]);\n\n const renderProps: AnnouncementModalRenderProps = {\n isOpen,\n currentSlide,\n currentSlideIndex: slideIndex,\n totalSlides: resolvedSlides.length,\n open,\n close,\n nextSlide,\n prevSlide,\n dismiss,\n };\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n if (!(isOpen || isClosing) || !currentSlide) return null;\n\n const embeddedVideo = toEmbedUrl(currentSlide.videoUrl);\n const descriptionHtml = currentSlide.description\n ? parseDescription(currentSlide.description)\n : null;\n const totalSlides = resolvedSlides.length;\n const primaryCta = currentSlide.primaryCta;\n const secondaryCta = currentSlide.secondaryCta;\n\n return (\n <>\n <div\n data-featuredrop-announcement-overlay\n style={overlayStyles}\n onClick={dismissible ? dismiss : undefined}\n aria-hidden=\"true\"\n />\n <section\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={currentSlide.description ? descriptionId : undefined}\n data-featuredrop-announcement-modal={modalId}\n className={className}\n dir={context?.direction}\n tabIndex={-1}\n style={{\n ...(isMobile ? mobileModalStyles : desktopModalStyles),\n animation: isClosing ? exitAnimation : enterAnimation,\n ...style,\n }}\n >\n <div style={{ padding: isMobile ? \"16px\" : \"20px\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", gap: \"8px\" }}>\n <p style={{ margin: 0, fontSize: \"12px\", color: \"#6b7280\", letterSpacing: 0.2 }}>\n {t?.announcement ?? \"Announcement\"}\n </p>\n {dismissible && (\n <button\n type=\"button\"\n aria-label={t?.close ?? \"Close\"}\n onClick={dismiss}\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"#6b7280\",\n fontSize: \"18px\",\n cursor: \"pointer\",\n lineHeight: 1,\n }}\n >\n x\n </button>\n )}\n </div>\n\n {(currentSlide.image || embeddedVideo) && (\n <div style={{ marginTop: \"12px\", borderRadius: \"12px\", overflow: \"hidden\", border: \"1px solid #e5e7eb\" }}>\n {embeddedVideo ? (\n <iframe\n title={currentSlide.title}\n src={embeddedVideo}\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n style={{ width: \"100%\", height: isMobile ? \"220px\" : \"320px\", border: 0 }}\n />\n ) : (\n <img\n src={currentSlide.image}\n alt={currentSlide.title}\n style={{ width: \"100%\", display: \"block\", objectFit: \"cover\" }}\n />\n )}\n </div>\n )}\n\n <h2\n id={titleId}\n style={{ margin: \"14px 0 8px\", fontSize: isMobile ? \"22px\" : \"24px\", lineHeight: 1.2 }}\n >\n {currentSlide.title}\n </h2>\n {descriptionHtml && (\n <div\n id={descriptionId}\n style={{ fontSize: \"14px\", color: \"#4b5563\", lineHeight: 1.6 }}\n dangerouslySetInnerHTML={{ __html: descriptionHtml }}\n />\n )}\n\n <div style={{ display: \"flex\", gap: \"8px\", flexWrap: \"wrap\", marginTop: \"14px\" }}>\n {primaryCta && (\n <a\n href={primaryCta.url}\n onClick={() => {\n context?.trackAdoptionEvent({\n type: \"cta_clicked\",\n featureId: resolvedFeature?.id,\n metadata: { modalId, slideIndex, cta: \"primary\" },\n });\n onPrimaryCtaClick?.(currentSlide, slideIndex);\n }}\n style={{\n textDecoration: \"none\",\n border: \"none\",\n borderRadius: \"10px\",\n padding: \"9px 12px\",\n background: \"#111827\",\n color: \"#fff\",\n fontWeight: 600,\n }}\n >\n {primaryCta.label}\n </a>\n )}\n {secondaryCta && (\n <a\n href={secondaryCta.url}\n onClick={() => {\n context?.trackAdoptionEvent({\n type: \"cta_clicked\",\n featureId: resolvedFeature?.id,\n metadata: { modalId, slideIndex, cta: \"secondary\" },\n });\n onSecondaryCtaClick?.(currentSlide, slideIndex);\n }}\n style={{\n textDecoration: \"none\",\n border: \"1px solid #d1d5db\",\n borderRadius: \"10px\",\n padding: \"9px 12px\",\n background: \"#fff\",\n color: \"#111827\",\n fontWeight: 600,\n }}\n >\n {secondaryCta.label}\n </a>\n )}\n </div>\n\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", gap: \"8px\", marginTop: \"16px\" }}>\n {totalSlides > 1 ? (\n <div style={{ display: \"flex\", gap: \"6px\" }}>\n {resolvedSlides.map((slide, index) => (\n <span\n key={slide.id ?? `${slide.title}-${index}`}\n aria-hidden=\"true\"\n style={{\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"999px\",\n background: index === slideIndex ? \"#111827\" : \"#d1d5db\",\n }}\n />\n ))}\n </div>\n ) : <span />}\n <div style={{ display: \"flex\", gap: \"8px\" }}>\n {totalSlides > 1 && (\n <button\n type=\"button\"\n onClick={prevSlide}\n disabled={slideIndex <= 0}\n style={{\n border: \"1px solid #d1d5db\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: slideIndex <= 0 ? \"not-allowed\" : \"pointer\",\n opacity: slideIndex <= 0 ? 0.5 : 1,\n }}\n >\n {t?.back ?? \"Back\"}\n </button>\n )}\n <button\n type=\"button\"\n onClick={nextSlide}\n style={{\n border: \"none\",\n background: \"#111827\",\n color: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {slideIndex >= totalSlides - 1 ? (t?.gotIt ?? \"Got it\") : (t?.next ?? \"Next\")}\n </button>\n </div>\n </div>\n </div>\n </section>\n </>\n );\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n ensureFeatureDropAnimationStyles,\n getEnterAnimation,\n getPulseAnimation,\n prefersReducedMotion,\n resolveAnimationPreset,\n} from \"../../animation\";\nimport { FeatureDropContext } from \"../context\";\n\nexport interface SpotlightChainStep {\n id?: string;\n target: string;\n title?: string;\n content: ReactNode;\n autoAdvanceMs?: number;\n}\n\nexport interface SpotlightChainRenderProps {\n isActive: boolean;\n currentStep: SpotlightChainStep | null;\n currentStepIndex: number;\n totalSteps: number;\n start: () => void;\n next: () => void;\n skip: () => void;\n}\n\nexport interface SpotlightChainProps {\n steps: SpotlightChainStep[];\n startOnMount?: boolean;\n autoAdvance?: boolean;\n autoAdvanceMs?: number;\n onComplete?: () => void;\n onStepViewed?: (step: SpotlightChainStep, index: number) => void;\n onSkip?: (step: SpotlightChainStep | null, index: number) => void;\n children?: (props: SpotlightChainRenderProps) => ReactNode;\n}\n\nconst beaconStyles: CSSProperties = {\n position: \"fixed\",\n width: \"14px\",\n height: \"14px\",\n borderRadius: \"999px\",\n border: \"2px solid #fff\",\n background: \"#f59e0b\",\n boxShadow: \"0 0 0 2px rgba(17,24,39,0.12)\",\n zIndex: \"var(--featuredrop-spotlight-chain-beacon-z-index, 10010)\" as unknown as number,\n};\n\nconst tooltipStyles: CSSProperties = {\n position: \"fixed\",\n zIndex: \"var(--featuredrop-spotlight-chain-z-index, 10011)\" as unknown as number,\n border: \"1px solid #e5e7eb\",\n borderRadius: \"10px\",\n background: \"#fff\",\n padding: \"12px\",\n boxShadow: \"0 10px 30px rgba(0,0,0,0.16)\",\n width: \"min(90vw, 320px)\",\n};\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n const nodes = container.querySelectorAll<HTMLElement>(\n [\n \"a[href]\",\n \"button:not([disabled])\",\n \"textarea:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n ].join(\",\"),\n );\n return Array.from(nodes).filter(\n (node) => !node.hasAttribute(\"disabled\") && node.getAttribute(\"aria-hidden\") !== \"true\",\n );\n}\n\nfunction resolveTarget(selector: string): HTMLElement | null {\n return document.querySelector(selector);\n}\n\nexport function SpotlightChain({\n steps,\n startOnMount = true,\n autoAdvance = false,\n autoAdvanceMs = 2500,\n onComplete,\n onStepViewed,\n onSkip,\n children,\n}: SpotlightChainProps) {\n const featureDrop = useContext(FeatureDropContext);\n const [isActive, setIsActive] = useState(false);\n const [stepIndex, setStepIndex] = useState(-1);\n const [rect, setRect] = useState<DOMRect | null>(null);\n const autoTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const dialogRef = useRef<HTMLDivElement>(null);\n const animation = useMemo(\n () =>\n resolveAnimationPreset(featureDrop?.animation ?? \"normal\", {\n reducedMotion: prefersReducedMotion(),\n }),\n [featureDrop?.animation],\n );\n const beaconPulseAnimation = useMemo(\n () => getPulseAnimation(animation, \"beacon\"),\n [animation],\n );\n const tooltipEnterAnimation = useMemo(\n () => getEnterAnimation(animation, \"popover\"),\n [animation],\n );\n const instanceIdRef = useRef(`featuredrop-spotlight-chain-${Math.random().toString(36).slice(2, 10)}`);\n\n const step = stepIndex >= 0 ? steps[stepIndex] ?? null : null;\n\n const findValidStep = useCallback((start: number): number | null => {\n for (let i = start; i < steps.length; i += 1) {\n if (resolveTarget(steps[i].target)) return i;\n // eslint-disable-next-line no-console\n console.warn(`[featuredrop] SpotlightChain step \"${steps[i].id ?? i}\" target not found, skipping.`);\n }\n return null;\n }, [steps]);\n\n const openStep = useCallback((index: number) => {\n const current = steps[index];\n if (!current) return;\n const target = resolveTarget(current.target);\n if (!target) return;\n const scrollable = target as HTMLElement & {\n scrollIntoView?: (options?: ScrollIntoViewOptions) => void;\n };\n if (typeof scrollable.scrollIntoView === \"function\") {\n scrollable.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }\n setStepIndex(index);\n setIsActive(true);\n setRect(target.getBoundingClientRect());\n onStepViewed?.(current, index);\n }, [onStepViewed, steps]);\n\n const finish = useCallback(() => {\n setIsActive(false);\n setStepIndex(-1);\n setRect(null);\n onComplete?.();\n }, [onComplete]);\n\n const start = useCallback(() => {\n const first = findValidStep(0);\n if (first === null) return;\n openStep(first);\n }, [findValidStep, openStep]);\n\n const next = useCallback(() => {\n const nextIndex = findValidStep(stepIndex + 1);\n if (nextIndex === null) {\n finish();\n return;\n }\n openStep(nextIndex);\n }, [findValidStep, finish, openStep, stepIndex]);\n\n const skip = useCallback(() => {\n onSkip?.(step, stepIndex);\n setIsActive(false);\n setStepIndex(-1);\n setRect(null);\n }, [onSkip, step, stepIndex]);\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n useEffect(() => {\n if (!startOnMount) return;\n start();\n }, [start, startOnMount]);\n\n useEffect(() => {\n if (!isActive || !step) return;\n const update = () => {\n const target = resolveTarget(step.target);\n if (!target) return;\n setRect(target.getBoundingClientRect());\n };\n update();\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n return () => {\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n };\n }, [isActive, step]);\n\n useEffect(() => {\n if (!isActive || !step || !autoAdvance) return;\n const waitMs = step.autoAdvanceMs ?? autoAdvanceMs;\n autoTimerRef.current = setTimeout(() => {\n next();\n }, waitMs);\n return () => {\n if (autoTimerRef.current) {\n clearTimeout(autoTimerRef.current);\n autoTimerRef.current = null;\n }\n };\n }, [autoAdvance, autoAdvanceMs, isActive, next, step]);\n\n useEffect(() => {\n if (!isActive) return;\n const dialog = dialogRef.current;\n if (!dialog) return;\n const focusable = getFocusableElements(dialog);\n const first = focusable[0] ?? dialog;\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => first.focus());\n } else {\n first.focus();\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n skip();\n return;\n }\n\n if (event.key === \"ArrowRight\") {\n event.preventDefault();\n next();\n return;\n }\n\n if (event.key !== \"Tab\") return;\n const items = getFocusableElements(dialog);\n if (items.length === 0) {\n event.preventDefault();\n dialog.focus();\n return;\n }\n const firstItem = items[0];\n const lastItem = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (event.shiftKey) {\n if (active === firstItem || active === dialog) {\n event.preventDefault();\n lastItem.focus();\n }\n return;\n }\n if (active === lastItem) {\n event.preventDefault();\n firstItem.focus();\n }\n };\n\n window.addEventListener(\"keydown\", onKeyDown);\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [isActive, next, skip, stepIndex]);\n\n const renderProps: SpotlightChainRenderProps = useMemo(() => ({\n isActive,\n currentStep: step,\n currentStepIndex: stepIndex,\n totalSteps: steps.length,\n start,\n next,\n skip,\n }), [isActive, next, skip, start, step, stepIndex, steps.length]);\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n if (!isActive || !step || !rect) return null;\n\n const tooltipTop = Math.min(window.innerHeight - 150, rect.bottom + 12);\n const tooltipLeft = Math.min(window.innerWidth - 340, Math.max(10, rect.left));\n const titleId = `${instanceIdRef.current}-title`;\n const contentId = `${instanceIdRef.current}-content`;\n\n return (\n <>\n <div\n data-featuredrop-spotlight-chain-beacon={step.id ?? stepIndex}\n style={{\n ...beaconStyles,\n animation: beaconPulseAnimation ?? \"none\",\n top: rect.top - 7,\n left: rect.right - 7,\n }}\n />\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={step.title ? titleId : undefined}\n aria-describedby={contentId}\n data-featuredrop-spotlight-chain={step.id ?? stepIndex}\n tabIndex={-1}\n style={{\n ...tooltipStyles,\n top: tooltipTop,\n left: tooltipLeft,\n animation: tooltipEnterAnimation,\n }}\n >\n {step.title && (\n <p id={titleId} style={{ margin: \"0 0 6px\", fontWeight: 700, fontSize: \"15px\" }}>\n {step.title}\n </p>\n )}\n <div id={contentId} style={{ margin: \"0 0 10px\", fontSize: \"14px\", color: \"#4b5563\" }}>\n {step.content}\n </div>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", gap: \"8px\" }}>\n <button\n type=\"button\"\n onClick={skip}\n style={{\n border: \"1px solid #e5e7eb\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {featureDrop?.translations.skip ?? \"Skip\"}\n </button>\n <button\n type=\"button\"\n onClick={next}\n style={{\n border: \"none\",\n background: \"#111827\",\n color: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {stepIndex >= steps.length - 1\n ? (featureDrop?.translations.gotIt ?? \"Got it\")\n : (featureDrop?.translations.next ?? \"Next\")}\n </button>\n </div>\n </div>\n </>\n );\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { ensureFeatureDropAnimationStyles, getEnterAnimation } from \"../../animation\";\nimport { FeatureDropContext } from \"../context\";\nimport {\n registerSurveyController,\n type SurveyController,\n type SurveySnapshot,\n} from \"../survey-registry\";\n\nexport type SurveyType = \"nps\" | \"csat\" | \"ces\" | \"custom\";\nexport type SurveyQuestionType = \"single-choice\" | \"multi-choice\" | \"text\";\n\nexport interface SurveyQuestion {\n id: string;\n type: SurveyQuestionType;\n prompt: string;\n options?: string[];\n required?: boolean;\n}\n\nexport interface SurveyTriggerRules {\n signupAt?: string | Date;\n minDaysSinceSignup?: number;\n featureUsageIds?: string[];\n pageMatch?: string | RegExp | ((path: string) => boolean);\n sampleRate?: number;\n maxFrequencyDays?: number;\n askLaterCooldownDays?: number;\n}\n\nexport interface SurveyPayload {\n id: string;\n type: SurveyType;\n prompt?: string;\n score?: number;\n responses?: Record<string, unknown>;\n feedback?: string;\n timestamp: string;\n url: string;\n featureId?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SurveyRenderProps {\n isOpen: boolean;\n isSubmitting: boolean;\n submitted: boolean;\n canShow: boolean;\n error: string | null;\n type: SurveyType;\n score: number | null;\n feedback: string;\n responses: Record<string, unknown>;\n show: (options?: { force?: boolean }) => boolean;\n hide: () => void;\n askLater: () => void;\n setScore: (value: number | null) => void;\n setFeedback: (value: string) => void;\n setResponse: (questionId: string, value: unknown) => void;\n submit: () => Promise<boolean>;\n}\n\nexport interface SurveyProps {\n id: string;\n type: SurveyType;\n prompt?: string;\n featureId?: string;\n questions?: SurveyQuestion[];\n trigger?: \"auto\" | \"manual\";\n triggerRules?: SurveyTriggerRules;\n defaultOpen?: boolean;\n showAskLater?: boolean;\n submitLabel?: string;\n askLaterLabel?: string;\n closeLabel?: string;\n title?: string;\n metadata?: Record<string, unknown>;\n onSubmit: (payload: SurveyPayload) => Promise<void> | void;\n onAskLater?: () => void;\n onDismiss?: () => void;\n className?: string;\n style?: CSSProperties;\n children?: (props: SurveyRenderProps) => ReactNode;\n}\n\nconst panelStyles: CSSProperties = {\n width: \"min(92vw, 420px)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"14px\",\n background: \"#fff\",\n boxShadow: \"0 16px 48px rgba(0,0,0,0.16)\",\n padding: \"14px\",\n};\n\nconst questionBlockStyles: CSSProperties = {\n marginTop: \"10px\",\n padding: \"10px\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"10px\",\n};\n\nconst SEEN_FEATURES_STORAGE_KEY = \"featuredrop:seen-features\";\nconst CLICKED_FEATURES_STORAGE_KEY = \"featuredrop:clicked-features\";\nconst DEFAULT_MAX_FREQUENCY_DAYS = 30;\nconst DEFAULT_ASK_LATER_DAYS = 7;\n\nfunction submittedStorageKey(id: string): string {\n return `featuredrop:survey:${id}:submitted-at`;\n}\n\nfunction cooldownStorageKey(id: string): string {\n return `featuredrop:survey:${id}:cooldown-until`;\n}\n\nfunction sampleBucketStorageKey(id: string): string {\n return `featuredrop:survey:${id}:sample-bucket`;\n}\n\nfunction readStorageValue(key: string): string | null {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (storageKey: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return null;\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeStorageValue(key: string, value: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (storageKey: string, storageValue: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(key, value);\n } catch {\n // noop\n }\n}\n\nfunction clearStorageValue(key: string): void {\n const storage = globalThis.localStorage as unknown as {\n removeItem?: (storageKey: string) => void;\n };\n if (!storage || typeof storage.removeItem !== \"function\") return;\n try {\n storage.removeItem(key);\n } catch {\n // noop\n }\n}\n\nfunction parseIsoTime(value: string | null): number | null {\n if (!value) return null;\n const parsed = new Date(value).getTime();\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction readFeatureUsageIds(): Set<string> {\n const seenRaw = readStorageValue(SEEN_FEATURES_STORAGE_KEY);\n const clickedRaw = readStorageValue(CLICKED_FEATURES_STORAGE_KEY);\n const ids = new Set<string>();\n\n const append = (raw: string | null): void => {\n if (!raw) return;\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) return;\n for (const item of parsed) {\n if (typeof item === \"string\") ids.add(item);\n }\n } catch {\n // ignore malformed values\n }\n };\n\n append(seenRaw);\n append(clickedRaw);\n return ids;\n}\n\nfunction matchesPage(pageMatch: SurveyTriggerRules[\"pageMatch\"]): boolean {\n if (!pageMatch) return true;\n if (typeof window === \"undefined\") return false;\n const path = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n if (typeof pageMatch === \"string\") return path.includes(pageMatch);\n if (pageMatch instanceof RegExp) return pageMatch.test(path);\n try {\n return pageMatch(path);\n } catch {\n return false;\n }\n}\n\nfunction resolveScale(type: SurveyType): { min: number; max: number } | null {\n if (type === \"nps\") return { min: 0, max: 10 };\n if (type === \"csat\") return { min: 1, max: 5 };\n if (type === \"ces\") return { min: 1, max: 7 };\n return null;\n}\n\nfunction defaultTitle(type: SurveyType): string {\n if (type === \"nps\") return \"NPS Survey\";\n if (type === \"csat\") return \"CSAT Survey\";\n if (type === \"ces\") return \"CES Survey\";\n return \"Survey\";\n}\n\nfunction normalizeSignupAt(signupAt?: string | Date): number | null {\n if (!signupAt) return null;\n if (signupAt instanceof Date) return signupAt.getTime();\n return parseIsoTime(signupAt);\n}\n\nfunction daysToMs(days: number): number {\n return days * 24 * 60 * 60 * 1000;\n}\n\nfunction hasRequiredResponses(\n questions: SurveyQuestion[],\n responses: Record<string, unknown>,\n): boolean {\n for (const question of questions) {\n if (!question.required) continue;\n const value = responses[question.id];\n if (question.type === \"multi-choice\") {\n if (!Array.isArray(value) || value.length === 0) return false;\n continue;\n }\n if (typeof value === \"string\") {\n if (!value.trim()) return false;\n continue;\n }\n if (value === undefined || value === null) return false;\n }\n return true;\n}\n\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\n const nodes = container.querySelectorAll<HTMLElement>(\n [\n \"a[href]\",\n \"button:not([disabled])\",\n \"textarea:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n ].join(\",\"),\n );\n return Array.from(nodes).filter(\n (node) => !node.hasAttribute(\"disabled\") && node.getAttribute(\"aria-hidden\") !== \"true\",\n );\n}\n\nexport function Survey({\n id,\n type,\n prompt,\n featureId,\n questions = [],\n trigger = \"auto\",\n triggerRules,\n defaultOpen = false,\n showAskLater = true,\n submitLabel,\n askLaterLabel,\n closeLabel,\n title,\n metadata,\n onSubmit,\n onAskLater,\n onDismiss,\n className,\n style,\n children,\n}: SurveyProps) {\n const context = useContext(FeatureDropContext);\n const listenersRef = useRef(new Set<() => void>());\n const panelRef = useRef<HTMLElement>(null);\n const lastFocusedElementRef = useRef<HTMLElement | null>(null);\n const instanceIdRef = useRef(`featuredrop-survey-${Math.random().toString(36).slice(2, 10)}`);\n const [isOpen, setIsOpen] = useState(defaultOpen);\n const [submitted, setSubmitted] = useState(false);\n const [score, setScore] = useState<number | null>(null);\n const [feedback, setFeedback] = useState(\"\");\n const [responses, setResponses] = useState<Record<string, unknown>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [refreshVersion, setRefreshVersion] = useState(0);\n\n const maxFrequencyDays = triggerRules?.maxFrequencyDays ?? DEFAULT_MAX_FREQUENCY_DAYS;\n const askLaterCooldownDays = triggerRules?.askLaterCooldownDays ?? DEFAULT_ASK_LATER_DAYS;\n const scale = useMemo(() => resolveScale(type), [type]);\n const translations = context?.translations;\n const direction = context?.direction ?? \"ltr\";\n const panelAnimation = useMemo(\n () => getEnterAnimation(context?.animation ?? \"normal\", \"modal\"),\n [context?.animation],\n );\n\n const canShow = useMemo(() => {\n const now = Date.now();\n const cooldownUntil = parseIsoTime(readStorageValue(cooldownStorageKey(id)));\n if (cooldownUntil && now < cooldownUntil) return false;\n\n const submittedAt = parseIsoTime(readStorageValue(submittedStorageKey(id)));\n if (submittedAt && maxFrequencyDays > 0) {\n const cutoff = submittedAt + daysToMs(maxFrequencyDays);\n if (now < cutoff) return false;\n }\n\n const sampleRate = triggerRules?.sampleRate;\n if (typeof sampleRate === \"number\") {\n if (sampleRate <= 0) return false;\n if (sampleRate < 1) {\n const bucketKey = sampleBucketStorageKey(id);\n const existing = Number(readStorageValue(bucketKey));\n const bucket = Number.isFinite(existing) ? existing : Math.random();\n if (!Number.isFinite(existing)) {\n writeStorageValue(bucketKey, String(bucket));\n }\n if (bucket >= sampleRate) return false;\n }\n }\n\n const minDaysSinceSignup = triggerRules?.minDaysSinceSignup;\n if (typeof minDaysSinceSignup === \"number\" && minDaysSinceSignup > 0) {\n const signupAt = normalizeSignupAt(triggerRules?.signupAt);\n if (!signupAt) return false;\n if (now - signupAt < daysToMs(minDaysSinceSignup)) return false;\n }\n\n const usageIds = triggerRules?.featureUsageIds ?? [];\n if (usageIds.length > 0) {\n const usage = readFeatureUsageIds();\n const hasUsage = usageIds.some((featureUsageId) => usage.has(featureUsageId));\n if (!hasUsage) return false;\n }\n\n if (!matchesPage(triggerRules?.pageMatch)) return false;\n return true;\n }, [\n id,\n maxFrequencyDays,\n triggerRules?.featureUsageIds,\n triggerRules?.minDaysSinceSignup,\n triggerRules?.pageMatch,\n triggerRules?.sampleRate,\n triggerRules?.signupAt,\n refreshVersion,\n ]);\n\n const emit = useCallback(() => {\n for (const listener of listenersRef.current) listener();\n }, []);\n\n useEffect(() => {\n emit();\n }, [canShow, emit, isOpen, submitted, type]);\n\n const hide = useCallback(() => {\n setIsOpen(false);\n onDismiss?.();\n const returnTarget = lastFocusedElementRef.current;\n if (returnTarget) {\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => returnTarget.focus());\n } else {\n returnTarget.focus();\n }\n }\n }, [onDismiss]);\n\n const show = useCallback((options?: { force?: boolean }): boolean => {\n if (!options?.force && !canShow) return false;\n if (typeof document !== \"undefined\" && document.activeElement instanceof HTMLElement) {\n lastFocusedElementRef.current = document.activeElement;\n }\n setIsOpen(true);\n setError(null);\n return true;\n }, [canShow]);\n\n const askLater = useCallback(() => {\n const until = new Date(Date.now() + daysToMs(askLaterCooldownDays)).toISOString();\n writeStorageValue(cooldownStorageKey(id), until);\n setIsOpen(false);\n setRefreshVersion((current) => current + 1);\n onAskLater?.();\n }, [askLaterCooldownDays, id, onAskLater]);\n\n useEffect(() => {\n if (trigger !== \"auto\") return;\n if (defaultOpen) return;\n show();\n }, [defaultOpen, show, trigger]);\n\n useEffect(() => {\n if (!defaultOpen) return;\n show({ force: true });\n }, [defaultOpen, show]);\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n useEffect(() => {\n if (!isOpen) return;\n const panel = panelRef.current;\n if (!panel) return;\n\n const focusable = getFocusableElements(panel);\n const first = focusable[0] ?? panel;\n if (typeof requestAnimationFrame === \"function\") {\n requestAnimationFrame(() => first.focus());\n } else {\n first.focus();\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Tab\") {\n const items = getFocusableElements(panel);\n if (items.length === 0) {\n event.preventDefault();\n panel.focus();\n return;\n }\n const firstItem = items[0];\n const lastItem = items[items.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (event.shiftKey) {\n if (active === firstItem || active === panel) {\n event.preventDefault();\n lastItem.focus();\n }\n return;\n }\n if (active === lastItem) {\n event.preventDefault();\n firstItem.focus();\n }\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n hide();\n }\n };\n\n panel.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n panel.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [hide, isOpen]);\n\n const setResponse = useCallback((questionId: string, value: unknown) => {\n setResponses((previous) => ({\n ...previous,\n [questionId]: value,\n }));\n }, []);\n\n const submit = useCallback(async (): Promise<boolean> => {\n if (isSubmitting) return false;\n if (type === \"custom\") {\n if (!hasRequiredResponses(questions, responses)) {\n setError(\"Please answer all required questions.\");\n return false;\n }\n } else if (scale && score === null) {\n setError(\"Please select a score.\");\n return false;\n }\n\n setIsSubmitting(true);\n setError(null);\n const timestamp = new Date().toISOString();\n const payload: SurveyPayload = {\n id,\n type,\n prompt,\n score: scale ? score ?? undefined : undefined,\n responses: type === \"custom\" ? responses : undefined,\n feedback: feedback.trim() ? feedback.trim() : undefined,\n timestamp,\n url: typeof window === \"undefined\" ? \"\" : window.location.href,\n featureId,\n metadata,\n };\n\n try {\n await onSubmit(payload);\n writeStorageValue(submittedStorageKey(id), timestamp);\n clearStorageValue(cooldownStorageKey(id));\n context?.trackAdoptionEvent({\n type: \"survey_submitted\",\n featureId,\n metadata: {\n surveyId: id,\n surveyType: type,\n score: payload.score,\n questionCount: type === \"custom\" ? questions.length : 1,\n },\n });\n setSubmitted(true);\n setIsOpen(false);\n setFeedback(\"\");\n setResponses({});\n setScore(null);\n setRefreshVersion((current) => current + 1);\n return true;\n } catch {\n setError(\"Failed to submit survey. Please try again.\");\n return false;\n } finally {\n setIsSubmitting(false);\n }\n }, [\n context,\n featureId,\n feedback,\n id,\n isSubmitting,\n metadata,\n onSubmit,\n prompt,\n questions.length,\n responses,\n scale,\n score,\n type,\n ]);\n\n useEffect(() => {\n const controller: SurveyController = {\n show,\n hide,\n askLater,\n getSnapshot: (): SurveySnapshot => ({\n exists: true,\n isOpen,\n submitted,\n canShow,\n type,\n }),\n subscribe: (listener) => {\n listenersRef.current.add(listener);\n return () => {\n listenersRef.current.delete(listener);\n };\n },\n };\n return registerSurveyController(id, controller);\n }, [askLater, canShow, hide, id, isOpen, show, submitted, type]);\n\n const renderProps: SurveyRenderProps = {\n isOpen,\n isSubmitting,\n submitted,\n canShow,\n error,\n type,\n score,\n feedback,\n responses,\n show,\n hide,\n askLater,\n setScore,\n setFeedback,\n setResponse,\n submit,\n };\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n if (!isOpen) return null;\n\n const surveyTitle = title ?? defaultTitle(type);\n const resolvedCloseLabel = closeLabel ?? translations?.close ?? \"Close\";\n const resolvedAskLaterLabel = askLaterLabel ?? translations?.askLater ?? \"Ask me later\";\n const resolvedSubmitLabel = submitLabel ?? translations?.submit ?? \"Submit\";\n const surveyTitleId = `${instanceIdRef.current}-title`;\n const surveyDescriptionId = `${instanceIdRef.current}-description`;\n const scoreRange = scale\n ? Array.from({ length: scale.max - scale.min + 1 }, (_, index) => scale.min + index)\n : [];\n\n return (\n <section\n ref={panelRef}\n data-featuredrop-survey={id}\n className={className}\n style={{ ...panelStyles, animation: panelAnimation, ...style }}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={surveyTitleId}\n aria-describedby={prompt ? surveyDescriptionId : undefined}\n tabIndex={-1}\n dir={direction}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\", gap: \"8px\" }}>\n <strong id={surveyTitleId}>{surveyTitle}</strong>\n <button\n type=\"button\"\n onClick={hide}\n style={{ border: \"none\", background: \"transparent\", cursor: \"pointer\" }}\n aria-label={resolvedCloseLabel}\n >\n x\n </button>\n </div>\n\n {prompt && <p id={surveyDescriptionId} style={{ margin: \"10px 0 0\" }}>{prompt}</p>}\n\n {scale && (\n <div style={{ display: \"flex\", gap: \"6px\", flexWrap: \"wrap\", marginTop: \"10px\" }}>\n {scoreRange.map((value) => (\n <button\n key={value}\n type=\"button\"\n onClick={() => setScore(value)}\n aria-pressed={score === value}\n style={{\n border: \"1px solid #d1d5db\",\n background: score === value ? \"#111827\" : \"#fff\",\n color: score === value ? \"#fff\" : \"#111827\",\n borderRadius: \"999px\",\n padding: \"4px 8px\",\n minWidth: \"34px\",\n cursor: \"pointer\",\n }}\n >\n {value}\n </button>\n ))}\n </div>\n )}\n\n {type === \"custom\" && (\n <div style={{ marginTop: \"8px\" }}>\n {questions.map((question) => {\n const value = responses[question.id];\n return (\n <div key={question.id} style={questionBlockStyles}>\n <p style={{ margin: 0, fontSize: \"13px\", fontWeight: 600 }}>\n {question.prompt}\n {question.required ? \" *\" : \"\"}\n </p>\n\n {question.type === \"text\" && (\n <textarea\n value={typeof value === \"string\" ? value : \"\"}\n onChange={(event) => setResponse(question.id, event.target.value)}\n rows={3}\n style={{\n width: \"100%\",\n marginTop: \"8px\",\n border: \"1px solid #d1d5db\",\n borderRadius: \"8px\",\n padding: \"8px\",\n resize: \"vertical\",\n }}\n />\n )}\n\n {question.type === \"single-choice\" && (\n <div style={{ display: \"flex\", gap: \"6px\", flexWrap: \"wrap\", marginTop: \"8px\" }}>\n {(question.options ?? []).map((option) => (\n <button\n key={option}\n type=\"button\"\n onClick={() => setResponse(question.id, option)}\n aria-pressed={value === option}\n style={{\n border: \"1px solid #d1d5db\",\n background: value === option ? \"#111827\" : \"#fff\",\n color: value === option ? \"#fff\" : \"#111827\",\n borderRadius: \"999px\",\n padding: \"4px 10px\",\n cursor: \"pointer\",\n }}\n >\n {option}\n </button>\n ))}\n </div>\n )}\n\n {question.type === \"multi-choice\" && (\n <div style={{ display: \"grid\", gap: \"6px\", marginTop: \"8px\" }}>\n {(question.options ?? []).map((option) => {\n const selected = Array.isArray(value) ? value.includes(option) : false;\n return (\n <label\n key={option}\n style={{ display: \"flex\", alignItems: \"center\", gap: \"6px\", fontSize: \"13px\" }}\n >\n <input\n type=\"checkbox\"\n checked={selected}\n onChange={(event) => {\n const current = Array.isArray(value) ? value.filter((item): item is string => typeof item === \"string\") : [];\n if (event.target.checked) {\n setResponse(question.id, [...current, option]);\n } else {\n setResponse(question.id, current.filter((item) => item !== option));\n }\n }}\n />\n {option}\n </label>\n );\n })}\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n <textarea\n value={feedback}\n onChange={(event) => setFeedback(event.target.value)}\n placeholder=\"Optional: tell us more\"\n rows={3}\n style={{\n width: \"100%\",\n marginTop: \"10px\",\n border: \"1px solid #d1d5db\",\n borderRadius: \"8px\",\n padding: \"8px\",\n resize: \"vertical\",\n }}\n />\n\n {error && (\n <p style={{ margin: \"8px 0 0\", fontSize: \"12px\", color: \"#b91c1c\" }}>\n {error}\n </p>\n )}\n\n <div style={{ display: \"flex\", justifyContent: \"space-between\", gap: \"8px\", marginTop: \"12px\" }}>\n {showAskLater ? (\n <button\n type=\"button\"\n onClick={askLater}\n style={{\n border: \"1px solid #d1d5db\",\n background: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n }}\n >\n {resolvedAskLaterLabel}\n </button>\n ) : (\n <span />\n )}\n <button\n type=\"button\"\n onClick={() => void submit()}\n disabled={isSubmitting}\n style={{\n border: \"none\",\n background: \"#111827\",\n color: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n opacity: isSubmitting ? 0.5 : 1,\n }}\n >\n {isSubmitting ? \"Submitting...\" : resolvedSubmitLabel}\n </button>\n </div>\n </section>\n );\n}\n","export interface FeatureRequestRecord {\n id: string;\n featureId?: string;\n title: string;\n description?: string;\n category?: string;\n votes: number;\n createdAt: string;\n updatedAt: string;\n}\n\nexport type FeatureRequestSort = \"votes\" | \"recent\";\n\nconst REQUESTS_KEY = \"featuredrop:feature-requests:requests\";\nconst VOTED_KEYS = \"featuredrop:feature-requests:voted\";\n\nfunction readStorageValue(key: string): string | null {\n const storage = globalThis.localStorage as unknown as {\n getItem?: (storageKey: string) => string | null;\n };\n if (!storage || typeof storage.getItem !== \"function\") return null;\n try {\n return storage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeStorageValue(key: string, value: string): void {\n const storage = globalThis.localStorage as unknown as {\n setItem?: (storageKey: string, storageValue: string) => void;\n };\n if (!storage || typeof storage.setItem !== \"function\") return;\n try {\n storage.setItem(key, value);\n } catch {\n // noop\n }\n}\n\nfunction readRequests(): FeatureRequestRecord[] {\n const raw = readStorageValue(REQUESTS_KEY);\n if (!raw) return [];\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) return [];\n return parsed.filter((request): request is FeatureRequestRecord => (\n request &&\n typeof request === \"object\" &&\n typeof (request as FeatureRequestRecord).id === \"string\" &&\n typeof (request as FeatureRequestRecord).title === \"string\"\n ));\n } catch {\n return [];\n }\n}\n\nfunction writeRequests(requests: FeatureRequestRecord[]): void {\n writeStorageValue(REQUESTS_KEY, JSON.stringify(requests));\n}\n\nfunction readVotedKeys(): Set<string> {\n const raw = readStorageValue(VOTED_KEYS);\n if (!raw) return new Set<string>();\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) return new Set<string>();\n return new Set(parsed.filter((value): value is string => typeof value === \"string\"));\n } catch {\n return new Set<string>();\n }\n}\n\nfunction writeVotedKeys(keys: ReadonlySet<string>): void {\n writeStorageValue(VOTED_KEYS, JSON.stringify(Array.from(keys)));\n}\n\nfunction makeVoteKey(options: { requestId?: string; featureId?: string }): string | null {\n if (options.requestId) return `request:${options.requestId}`;\n if (options.featureId) return `feature:${options.featureId}`;\n return null;\n}\n\nfunction createId(): string {\n return `req_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;\n}\n\nexport function listFeatureRequests(sortBy: FeatureRequestSort = \"votes\"): FeatureRequestRecord[] {\n const requests = readRequests();\n const sorted = [...requests].sort((a, b) => {\n if (sortBy === \"recent\") {\n return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime();\n }\n if (b.votes !== a.votes) return b.votes - a.votes;\n return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime();\n });\n return sorted;\n}\n\nexport function hasUserVoted(options: { requestId?: string; featureId?: string }): boolean {\n const voteKey = makeVoteKey(options);\n if (!voteKey) return false;\n return readVotedKeys().has(voteKey);\n}\n\nexport function createFeatureRequest(input: {\n title: string;\n description?: string;\n category?: string;\n featureId?: string;\n autoVote?: boolean;\n}): FeatureRequestRecord {\n const now = new Date().toISOString();\n const request: FeatureRequestRecord = {\n id: createId(),\n featureId: input.featureId,\n title: input.title.trim(),\n description: input.description?.trim() || undefined,\n category: input.category || undefined,\n votes: input.autoVote ? 1 : 0,\n createdAt: now,\n updatedAt: now,\n };\n\n const requests = readRequests();\n requests.push(request);\n writeRequests(requests);\n\n if (input.autoVote) {\n const voted = readVotedKeys();\n voted.add(`request:${request.id}`);\n writeVotedKeys(voted);\n }\n\n return request;\n}\n\nexport function voteFeatureRequest(input: {\n requestId?: string;\n featureId?: string;\n defaultTitle?: string;\n}): { voted: boolean; request: FeatureRequestRecord } | null {\n const voteKey = makeVoteKey({ requestId: input.requestId, featureId: input.featureId });\n if (!voteKey) return null;\n\n const voted = readVotedKeys();\n const requests = readRequests();\n let request = input.requestId\n ? requests.find((item) => item.id === input.requestId)\n : requests.find((item) => item.featureId === input.featureId);\n\n if (!request) {\n const now = new Date().toISOString();\n request = {\n id: createId(),\n featureId: input.featureId,\n title: input.defaultTitle?.trim() || input.featureId || \"Feature request\",\n votes: 0,\n createdAt: now,\n updatedAt: now,\n };\n requests.push(request);\n }\n\n if (voted.has(voteKey)) {\n return { voted: false, request };\n }\n\n request.votes += 1;\n request.updatedAt = new Date().toISOString();\n writeRequests(requests);\n\n voted.add(voteKey);\n writeVotedKeys(voted);\n return { voted: true, request };\n}\n","import {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n hasUserVoted,\n listFeatureRequests,\n voteFeatureRequest,\n type FeatureRequestRecord,\n} from \"../feature-request-store\";\n\nexport interface FeatureRequestButtonRenderProps {\n votes: number;\n hasVoted: boolean;\n vote: () => void;\n request: FeatureRequestRecord | null;\n}\n\nexport interface FeatureRequestButtonProps {\n featureId: string;\n requestId?: string;\n requestTitle?: string;\n label?: string;\n onVote?: (result: { voted: boolean; request: FeatureRequestRecord }) => void;\n className?: string;\n style?: CSSProperties;\n children?: (props: FeatureRequestButtonRenderProps) => ReactNode;\n}\n\nconst buttonStyles: CSSProperties = {\n border: \"1px solid #d1d5db\",\n background: \"#fff\",\n borderRadius: \"999px\",\n padding: \"6px 12px\",\n cursor: \"pointer\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n fontWeight: 600,\n};\n\nfunction getRequest(options: { requestId?: string; featureId: string }): FeatureRequestRecord | null {\n const requests = listFeatureRequests(\"votes\");\n if (options.requestId) {\n return requests.find((request) => request.id === options.requestId) ?? null;\n }\n return requests.find((request) => request.featureId === options.featureId) ?? null;\n}\n\nexport function FeatureRequestButton({\n featureId,\n requestId,\n requestTitle,\n label = \"Vote\",\n onVote,\n className,\n style,\n children,\n}: FeatureRequestButtonProps) {\n const [request, setRequest] = useState<FeatureRequestRecord | null>(() =>\n getRequest({ requestId, featureId }),\n );\n const [hasVotedState, setHasVotedState] = useState<boolean>(() =>\n hasUserVoted({ requestId, featureId }),\n );\n\n useEffect(() => {\n setRequest(getRequest({ requestId, featureId }));\n setHasVotedState(hasUserVoted({ requestId, featureId }));\n }, [featureId, requestId]);\n\n const votes = request?.votes ?? 0;\n\n const vote = useCallback(() => {\n const result = voteFeatureRequest({\n requestId,\n featureId,\n defaultTitle: requestTitle,\n });\n if (!result) return;\n setRequest(result.request);\n if (result.voted) setHasVotedState(true);\n onVote?.(result);\n }, [featureId, onVote, requestId, requestTitle]);\n\n const renderProps: FeatureRequestButtonRenderProps = useMemo(\n () => ({\n votes,\n hasVoted: hasVotedState,\n vote,\n request,\n }),\n [hasVotedState, request, vote, votes],\n );\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n return (\n <button\n type=\"button\"\n onClick={vote}\n data-featuredrop-request-vote={featureId}\n className={className}\n style={{ ...buttonStyles, ...style }}\n >\n <span>{hasVotedState ? \"Voted\" : label}</span>\n <span>({votes})</span>\n </button>\n );\n}\n","import {\n useCallback,\n useMemo,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport {\n createFeatureRequest,\n listFeatureRequests,\n voteFeatureRequest,\n type FeatureRequestRecord,\n type FeatureRequestSort,\n} from \"../feature-request-store\";\n\nexport interface FeatureRequestPayload extends FeatureRequestRecord {\n metadata?: Record<string, unknown>;\n}\n\nexport interface FeatureRequestFormRenderProps {\n requests: FeatureRequestRecord[];\n sortBy: FeatureRequestSort;\n title: string;\n description: string;\n category: string;\n isSubmitting: boolean;\n error: string | null;\n setTitle: (value: string) => void;\n setDescription: (value: string) => void;\n setCategory: (value: string) => void;\n setSortBy: (value: FeatureRequestSort) => void;\n submit: () => Promise<void>;\n vote: (requestId: string) => void;\n}\n\nexport interface FeatureRequestFormProps {\n onSubmit?: (request: FeatureRequestPayload) => Promise<void> | void;\n onWebhook?: (request: FeatureRequestPayload) => Promise<void> | void;\n categories?: string[];\n defaultSort?: FeatureRequestSort;\n metadata?: Record<string, unknown>;\n className?: string;\n style?: CSSProperties;\n children?: (props: FeatureRequestFormRenderProps) => ReactNode;\n}\n\nconst panelStyles: CSSProperties = {\n width: \"min(92vw, 520px)\",\n border: \"1px solid #e5e7eb\",\n borderRadius: \"12px\",\n background: \"#fff\",\n boxShadow: \"0 12px 36px rgba(0,0,0,0.12)\",\n padding: \"14px\",\n};\n\nexport function FeatureRequestForm({\n onSubmit,\n onWebhook,\n categories = [\"UI\", \"Performance\", \"Integration\", \"Other\"],\n defaultSort = \"votes\",\n metadata,\n className,\n style,\n children,\n}: FeatureRequestFormProps) {\n const [title, setTitle] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const [category, setCategory] = useState(categories[0] ?? \"Other\");\n const [sortBy, setSortBy] = useState<FeatureRequestSort>(defaultSort);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [refreshVersion, setRefreshVersion] = useState(0);\n\n const requests = useMemo(\n () => listFeatureRequests(sortBy),\n [refreshVersion, sortBy],\n );\n\n const submit = useCallback(async () => {\n const nextTitle = title.trim();\n if (!nextTitle) {\n setError(\"Please add a request title.\");\n return;\n }\n setError(null);\n setIsSubmitting(true);\n const created = createFeatureRequest({\n title: nextTitle,\n description,\n category,\n autoVote: true,\n });\n const payload: FeatureRequestPayload = { ...created, metadata };\n\n try {\n await onSubmit?.(payload);\n await onWebhook?.(payload);\n } catch {\n setError(\"Saved locally, but failed to sync request.\");\n } finally {\n setTitle(\"\");\n setDescription(\"\");\n setCategory(categories[0] ?? \"Other\");\n setRefreshVersion((current) => current + 1);\n setIsSubmitting(false);\n }\n }, [categories, category, description, metadata, onSubmit, onWebhook, title]);\n\n const vote = useCallback((requestId: string) => {\n const result = voteFeatureRequest({ requestId });\n if (!result) return;\n setRefreshVersion((current) => current + 1);\n }, []);\n\n const renderProps: FeatureRequestFormRenderProps = {\n requests,\n sortBy,\n title,\n description,\n category,\n isSubmitting,\n error,\n setTitle,\n setDescription,\n setCategory,\n setSortBy,\n submit,\n vote,\n };\n\n if (children) {\n return <>{children(renderProps)}</>;\n }\n\n return (\n <section\n data-featuredrop-request-form\n className={className}\n style={{ ...panelStyles, ...style }}\n >\n <div style={{ display: \"grid\", gap: \"8px\" }}>\n <strong>Feature requests</strong>\n <input\n value={title}\n onChange={(event) => setTitle(event.target.value)}\n placeholder=\"Request title\"\n style={{ border: \"1px solid #d1d5db\", borderRadius: \"8px\", padding: \"8px\" }}\n />\n <textarea\n value={description}\n onChange={(event) => setDescription(event.target.value)}\n placeholder=\"Describe the use case\"\n rows={3}\n style={{ border: \"1px solid #d1d5db\", borderRadius: \"8px\", padding: \"8px\", resize: \"vertical\" }}\n />\n <div style={{ display: \"flex\", gap: \"8px\", flexWrap: \"wrap\" }}>\n <select\n aria-label=\"Request category\"\n value={category}\n onChange={(event) => setCategory(event.target.value)}\n style={{ border: \"1px solid #d1d5db\", borderRadius: \"8px\", padding: \"6px 8px\" }}\n >\n {categories.map((item) => (\n <option key={item} value={item}>{item}</option>\n ))}\n </select>\n <button\n type=\"button\"\n onClick={() => void submit()}\n disabled={isSubmitting}\n style={{\n border: \"none\",\n background: \"#111827\",\n color: \"#fff\",\n borderRadius: \"8px\",\n padding: \"6px 10px\",\n cursor: \"pointer\",\n opacity: isSubmitting ? 0.5 : 1,\n }}\n >\n {isSubmitting ? \"Submitting...\" : \"Submit request\"}\n </button>\n </div>\n {error && <p style={{ margin: 0, color: \"#b91c1c\", fontSize: \"12px\" }}>{error}</p>}\n </div>\n\n <div style={{ marginTop: \"14px\", display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <strong style={{ fontSize: \"13px\" }}>Top requests</strong>\n <select\n aria-label=\"Sort requests\"\n value={sortBy}\n onChange={(event) => setSortBy(event.target.value as FeatureRequestSort)}\n style={{ border: \"1px solid #d1d5db\", borderRadius: \"8px\", padding: \"6px 8px\" }}\n >\n <option value=\"votes\">Most votes</option>\n <option value=\"recent\">Most recent</option>\n </select>\n </div>\n\n <div style={{ marginTop: \"8px\", display: \"grid\", gap: \"8px\" }}>\n {requests.length === 0 && (\n <p style={{ margin: 0, color: \"#6b7280\", fontSize: \"13px\" }}>\n No requests yet.\n </p>\n )}\n {requests.map((request) => (\n <article\n key={request.id}\n data-featuredrop-request-item={request.id}\n style={{ border: \"1px solid #e5e7eb\", borderRadius: \"10px\", padding: \"10px\" }}\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", gap: \"8px\", alignItems: \"flex-start\" }}>\n <div>\n <p style={{ margin: 0, fontWeight: 600 }}>{request.title}</p>\n {request.category && (\n <p style={{ margin: \"2px 0 0\", fontSize: \"12px\", color: \"#6b7280\" }}>\n {request.category}\n </p>\n )}\n </div>\n <button\n type=\"button\"\n onClick={() => vote(request.id)}\n style={{\n border: \"1px solid #d1d5db\",\n borderRadius: \"999px\",\n background: \"#fff\",\n padding: \"4px 8px\",\n cursor: \"pointer\",\n }}\n >\n ↑ {request.votes}\n </button>\n </div>\n {request.description && (\n <p style={{ margin: \"8px 0 0\", fontSize: \"13px\", color: \"#374151\" }}>\n {request.description}\n </p>\n )}\n </article>\n ))}\n </div>\n </section>\n );\n}\n","import {\n useEffect,\n useRef,\n type ReactNode,\n type CSSProperties,\n} from \"react\";\nimport type { DisplayFormat, FeatureEntry } from \"../../types\";\nimport { useSmartFeature } from \"../hooks/use-smart-feature\";\nimport { useFeatureDrop } from \"../hooks/use-feature-drop\";\nimport { parseDescription } from \"../../markdown\";\nimport {\n ensureFeatureDropAnimationStyles,\n getEnterAnimation,\n} from \"../../animation\";\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface SmartAnnouncementRenderProps {\n /** Whether the engine recommends showing now */\n show: boolean;\n /** Recommended display format */\n format: DisplayFormat;\n /** Fallback format */\n fallbackFormat: DisplayFormat;\n /** The feature entry */\n feature: FeatureEntry | undefined;\n /** Dismiss callback (tracks in engine + provider) */\n dismiss: () => void;\n /** Engine confidence in the timing decision (0-1) */\n confidence: number;\n /** Reason for the decision */\n reason: string;\n}\n\nexport interface SmartAnnouncementProps {\n /** Feature ID to display */\n id: string;\n /** Override the engine's format recommendation */\n format?: DisplayFormat;\n /** Additional CSS class for the container */\n className?: string;\n /** Additional inline styles */\n style?: CSSProperties;\n /** Render prop for full customization */\n children?: (props: SmartAnnouncementRenderProps) => ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Styles */\n/* ------------------------------------------------------------------ */\n\nconst badgeStyles: CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"2px 6px\",\n borderRadius: \"9999px\",\n fontSize: \"var(--featuredrop-font-size, 10px)\",\n fontWeight: 700,\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n lineHeight: 1,\n color: \"var(--featuredrop-color, #b45309)\",\n backgroundColor: \"var(--featuredrop-bg, rgba(245, 158, 11, 0.15))\",\n fontFamily: \"inherit\",\n};\n\nconst toastStyles: CSSProperties = {\n position: \"fixed\",\n bottom: 16,\n right: 16,\n zIndex: 9999,\n maxWidth: 360,\n padding: \"12px 16px\",\n borderRadius: \"var(--featuredrop-toast-radius, 8px)\",\n backgroundColor: \"var(--featuredrop-toast-bg, white)\",\n color: \"var(--featuredrop-toast-color, #1f2937)\",\n boxShadow:\n \"var(--featuredrop-toast-shadow, 0 4px 12px rgba(0, 0, 0, 0.15))\",\n border: \"1px solid var(--featuredrop-toast-border, #e5e7eb)\",\n fontFamily: \"inherit\",\n fontSize: 14,\n lineHeight: 1.5,\n};\n\nconst bannerStyles: CSSProperties = {\n width: \"100%\",\n padding: \"10px 16px\",\n backgroundColor: \"var(--featuredrop-banner-bg, #eff6ff)\",\n borderBottom: \"1px solid var(--featuredrop-banner-border, #bfdbfe)\",\n color: \"var(--featuredrop-banner-color, #1e40af)\",\n fontFamily: \"inherit\",\n fontSize: 14,\n lineHeight: 1.5,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n};\n\nconst inlineStyles: CSSProperties = {\n display: \"inline\",\n color: \"var(--featuredrop-inline-color, #6b7280)\",\n fontFamily: \"inherit\",\n fontSize: 13,\n};\n\nconst dismissButtonStyles: CSSProperties = {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px\",\n fontSize: 16,\n lineHeight: 1,\n color: \"inherit\",\n opacity: 0.6,\n};\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\n/**\n * Engine-powered smart announcement component.\n *\n * Combines the TimingOptimizer and FormatSelector to automatically\n * decide WHEN and HOW to show a feature announcement. Zero config needed.\n *\n * Without an engine, renders as a badge (graceful degradation).\n *\n * @example\n * ```tsx\n * // Zero config — engine decides everything\n * <SmartAnnouncement id=\"dark-mode\" />\n *\n * // Override format\n * <SmartAnnouncement id=\"dark-mode\" format=\"toast\" />\n *\n * // Full customization via render prop\n * <SmartAnnouncement id=\"dark-mode\">\n * {({ show, format, feature, dismiss }) => {\n * if (!show) return null\n * return <MyCustomAnnouncement feature={feature} onDismiss={dismiss} />\n * }}\n * </SmartAnnouncement>\n * ```\n */\nexport function SmartAnnouncement({\n id,\n format: formatOverride,\n className,\n style,\n children,\n}: SmartAnnouncementProps) {\n const smartFeature = useSmartFeature(id);\n const { engine } = useFeatureDrop();\n const hasTrackedSeen = useRef(false);\n\n const resolvedFormat = formatOverride ?? smartFeature.format;\n\n useEffect(() => {\n ensureFeatureDropAnimationStyles();\n }, []);\n\n // Track 'seen' once when showing\n useEffect(() => {\n if (smartFeature.show && !hasTrackedSeen.current) {\n hasTrackedSeen.current = true;\n engine?.trackInteraction(id, \"seen\");\n }\n }, [smartFeature.show, engine, id]);\n\n // Render prop mode\n if (children) {\n return (\n <>\n {children({\n show: smartFeature.show,\n format: resolvedFormat,\n fallbackFormat: smartFeature.fallbackFormat,\n feature: smartFeature.feature,\n dismiss: smartFeature.dismiss,\n confidence: smartFeature.confidence,\n reason: smartFeature.reason,\n })}\n </>\n );\n }\n\n if (!smartFeature.show || !smartFeature.feature) return null;\n\n const feature = smartFeature.feature;\n const description = parseDescription(feature.description ?? \"\");\n\n switch (resolvedFormat) {\n case \"badge\":\n return (\n <span\n data-featuredrop=\"smart-badge\"\n className={className}\n style={{ ...badgeStyles, ...style }}\n role=\"status\"\n aria-label={`New: ${feature.label}`}\n >\n New\n </span>\n );\n\n case \"toast\":\n return (\n <div\n data-featuredrop=\"smart-toast\"\n className={className}\n style={{\n ...toastStyles,\n animation: getEnterAnimation(\"normal\", \"toast\") ?? undefined,\n ...style,\n }}\n role=\"alert\"\n aria-live=\"polite\"\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-start\", gap: 8 }}>\n <div>\n <div style={{ fontWeight: 600, marginBottom: 2 }}>\n {feature.label}\n </div>\n <div\n style={{ fontSize: 13, opacity: 0.8 }}\n dangerouslySetInnerHTML={{ __html: description }}\n />\n </div>\n <button\n onClick={smartFeature.dismiss}\n style={dismissButtonStyles}\n aria-label=\"Dismiss\"\n type=\"button\"\n >\n &times;\n </button>\n </div>\n </div>\n );\n\n case \"banner\":\n return (\n <div\n data-featuredrop=\"smart-banner\"\n className={className}\n style={{ ...bannerStyles, ...style }}\n role=\"alert\"\n >\n <span>\n <strong>{feature.label}</strong>\n {feature.description ? ` — ${feature.description}` : \"\"}\n </span>\n <button\n onClick={smartFeature.dismiss}\n style={dismissButtonStyles}\n aria-label=\"Dismiss\"\n type=\"button\"\n >\n &times;\n </button>\n </div>\n );\n\n case \"inline\":\n return (\n <span\n data-featuredrop=\"smart-inline\"\n className={className}\n style={{ ...inlineStyles, ...style }}\n >\n {feature.label}\n </span>\n );\n\n case \"modal\":\n // Modal requires portal rendering — use render prop for full modal support\n // Default: fall back to toast format for built-in rendering\n return (\n <div\n data-featuredrop=\"smart-toast\"\n className={className}\n style={{\n ...toastStyles,\n animation: getEnterAnimation(\"normal\", \"toast\") ?? undefined,\n ...style,\n }}\n role=\"alert\"\n aria-live=\"polite\"\n >\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"flex-start\", gap: 8 }}>\n <div>\n <div style={{ fontWeight: 600, marginBottom: 2 }}>\n {feature.label}\n </div>\n <div\n style={{ fontSize: 13, opacity: 0.8 }}\n dangerouslySetInnerHTML={{ __html: description }}\n />\n </div>\n <button\n onClick={smartFeature.dismiss}\n style={dismissButtonStyles}\n aria-label=\"Dismiss\"\n type=\"button\"\n >\n &times;\n </button>\n </div>\n </div>\n );\n\n case \"spotlight\":\n // Spotlight requires a target element — use render prop for spotlight support\n // Default: fall back to badge\n return (\n <span\n data-featuredrop=\"smart-badge\"\n className={className}\n style={{ ...badgeStyles, ...style }}\n role=\"status\"\n aria-label={`New: ${feature.label}`}\n >\n New\n </span>\n );\n\n default:\n return (\n <span\n data-featuredrop=\"smart-badge\"\n className={className}\n style={{ ...badgeStyles, ...style }}\n role=\"status\"\n aria-label={`New: ${feature.label}`}\n >\n New\n </span>\n );\n }\n}\n","// Provider\nexport { FeatureDropProvider } from \"./provider\";\nexport type { FeatureDropProviderProps } from \"./provider\";\nexport { ThemeProvider } from \"./components/theme-provider\";\nexport type { ThemeProviderProps } from \"./components/theme-provider\";\n\n// Context\nexport { FeatureDropContext } from \"./context\";\nexport type { FeatureDropContextValue } from \"./context\";\n\n// Hooks\nexport { useFeatureDrop } from \"./hooks/use-feature-drop\";\nexport { useNewFeature } from \"./hooks/use-new-feature\";\nexport type { UseNewFeatureResult } from \"./hooks/use-new-feature\";\nexport { useNewCount } from \"./hooks/use-new-count\";\nexport { useTabNotification } from \"./hooks/use-tab-notification\";\nexport type { UseTabNotificationOptions } from \"./hooks/use-tab-notification\";\nexport { useAdoptionAnalytics } from \"./hooks/use-adoption-analytics\";\nexport { useTour } from \"./hooks/use-tour\";\nexport type { UseTourResult } from \"./hooks/use-tour\";\nexport { useTourSequencer } from \"./hooks/use-tour-sequencer\";\nexport type { TourSequenceItem, UseTourSequencerResult } from \"./hooks/use-tour-sequencer\";\nexport { useChecklist } from \"./hooks/use-checklist\";\nexport type { UseChecklistResult } from \"./hooks/use-checklist\";\nexport { useSurvey } from \"./hooks/use-survey\";\nexport type { UseSurveyResult } from \"./hooks/use-survey\";\nexport { useChangelog } from \"./hooks/use-changelog\";\nexport type { UseChangelogResult } from \"./hooks/use-changelog\";\nexport { useSmartFeature } from \"./hooks/use-smart-feature\";\nexport type { UseSmartFeatureResult } from \"./hooks/use-smart-feature\";\nexport { useAdoptionScore } from \"./hooks/use-adoption-score\";\nexport type { UseAdoptionScoreResult } from \"./hooks/use-adoption-score\";\nexport { useBehaviorProfile } from \"./hooks/use-behavior-profile\";\nexport type { UseBehaviorProfileResult } from \"./hooks/use-behavior-profile\";\n\n// Components\nimport { withFeatureDropBoundary } from \"./error-boundary\";\nimport { NewBadge as NewBadgeBase } from \"./components/new-badge\";\nexport type { NewBadgeProps, NewBadgeRenderProps } from \"./components/new-badge\";\nexport const NewBadge = withFeatureDropBoundary(NewBadgeBase, \"NewBadge\");\n\nimport { ChangelogWidget as ChangelogWidgetBase } from \"./components/changelog-widget\";\nexport type {\n ChangelogWidgetProps,\n ChangelogWidgetRenderProps,\n ChangelogEntryRenderProps,\n} from \"./components/changelog-widget\";\nexport const ChangelogWidget = withFeatureDropBoundary(ChangelogWidgetBase, \"ChangelogWidget\");\n\nimport { Spotlight as SpotlightBase } from \"./components/spotlight\";\nexport type { SpotlightProps, SpotlightRenderProps } from \"./components/spotlight\";\nexport const Spotlight = withFeatureDropBoundary(SpotlightBase, \"Spotlight\");\n\nimport { Banner as BannerBase } from \"./components/banner\";\nexport type { BannerProps, BannerRenderProps, BannerVariant } from \"./components/banner\";\nexport const Banner = withFeatureDropBoundary(BannerBase, \"Banner\");\n\nimport { Toast as ToastBase } from \"./components/toast\";\nexport type { ToastProps, ToastRenderProps } from \"./components/toast\";\nexport const Toast = withFeatureDropBoundary(ToastBase, \"Toast\");\n\nimport { ChangelogPage as ChangelogPageBase } from \"./components/changelog-page\";\nexport type { ChangelogPageProps, PaginationMode } from \"./components/changelog-page\";\nexport const ChangelogPage = withFeatureDropBoundary(ChangelogPageBase, \"ChangelogPage\");\n\nimport { Tour as TourBase } from \"./components/tour\";\nexport type { TourProps, TourStep, TourRenderProps } from \"./components/tour\";\nexport const Tour = withFeatureDropBoundary(TourBase, \"Tour\");\nimport { Checklist as ChecklistBase } from \"./components/checklist\";\nexport type { ChecklistProps, ChecklistTask, ChecklistRenderProps } from \"./components/checklist\";\nexport const Checklist = withFeatureDropBoundary(ChecklistBase, \"Checklist\");\nimport { Hotspot as HotspotBase, TooltipGroup as TooltipGroupBase } from \"./components/hotspot\";\nexport type { HotspotProps, TooltipGroupProps } from \"./components/hotspot\";\nexport const Hotspot = withFeatureDropBoundary(HotspotBase, \"Hotspot\");\nexport const TooltipGroup = withFeatureDropBoundary(TooltipGroupBase, \"TooltipGroup\");\nimport { FeedbackWidget as FeedbackWidgetBase } from \"./components/feedback-widget\";\nexport type {\n FeedbackWidgetProps,\n FeedbackWidgetRenderProps,\n FeedbackPayload,\n FeedbackEmoji,\n FeedbackRateLimit,\n} from \"./components/feedback-widget\";\nexport const FeedbackWidget = withFeatureDropBoundary(FeedbackWidgetBase, \"FeedbackWidget\");\nimport { AnnouncementModal as AnnouncementModalBase } from \"./components/announcement-modal\";\nexport type {\n AnnouncementModalProps,\n AnnouncementModalRenderProps,\n AnnouncementSlide,\n} from \"./components/announcement-modal\";\nexport const AnnouncementModal = withFeatureDropBoundary(AnnouncementModalBase, \"AnnouncementModal\");\nimport { SpotlightChain as SpotlightChainBase } from \"./components/spotlight-chain\";\nexport type {\n SpotlightChainProps,\n SpotlightChainRenderProps,\n SpotlightChainStep,\n} from \"./components/spotlight-chain\";\nexport const SpotlightChain = withFeatureDropBoundary(SpotlightChainBase, \"SpotlightChain\");\nimport { Survey as SurveyBase } from \"./components/survey\";\nexport type {\n SurveyProps,\n SurveyType,\n SurveyQuestion,\n SurveyQuestionType,\n SurveyTriggerRules,\n SurveyPayload,\n SurveyRenderProps,\n} from \"./components/survey\";\nexport const Survey = withFeatureDropBoundary(SurveyBase, \"Survey\");\nimport { FeatureRequestButton as FeatureRequestButtonBase } from \"./components/feature-request-button\";\nexport type {\n FeatureRequestButtonProps,\n FeatureRequestButtonRenderProps,\n} from \"./components/feature-request-button\";\nexport const FeatureRequestButton = withFeatureDropBoundary(FeatureRequestButtonBase, \"FeatureRequestButton\");\nimport { FeatureRequestForm as FeatureRequestFormBase } from \"./components/feature-request-form\";\nexport type {\n FeatureRequestFormProps,\n FeatureRequestFormRenderProps,\n FeatureRequestPayload,\n} from \"./components/feature-request-form\";\nexport const FeatureRequestForm = withFeatureDropBoundary(FeatureRequestFormBase, \"FeatureRequestForm\");\nimport { SmartAnnouncement as SmartAnnouncementBase } from \"./components/smart-announcement\";\nexport type {\n SmartAnnouncementProps,\n SmartAnnouncementRenderProps,\n} from \"./components/smart-announcement\";\nexport const SmartAnnouncement = withFeatureDropBoundary(SmartAnnouncementBase, \"SmartAnnouncement\");\n"]}