featuredrop 1.2.0 → 1.3.0
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.
- package/README.md +171 -0
- package/dist/admin.cjs +212 -0
- package/dist/admin.cjs.map +1 -0
- package/dist/admin.d.cts +176 -0
- package/dist/admin.d.ts +176 -0
- package/dist/admin.js +207 -0
- package/dist/admin.js.map +1 -0
- package/dist/angular.cjs +13 -3
- package/dist/angular.cjs.map +1 -1
- package/dist/angular.d.cts +4 -0
- package/dist/angular.d.ts +4 -0
- package/dist/angular.js +13 -3
- package/dist/angular.js.map +1 -1
- package/dist/bridges.cjs +401 -0
- package/dist/bridges.cjs.map +1 -0
- package/dist/bridges.d.cts +194 -0
- package/dist/bridges.d.ts +194 -0
- package/dist/bridges.js +394 -0
- package/dist/bridges.js.map +1 -0
- package/dist/ci.cjs +328 -0
- package/dist/ci.cjs.map +1 -0
- package/dist/ci.d.cts +176 -0
- package/dist/ci.d.ts +176 -0
- package/dist/ci.js +324 -0
- package/dist/ci.js.map +1 -0
- package/dist/featuredrop.cjs +139 -18
- package/dist/featuredrop.cjs.map +1 -1
- package/dist/flags.cjs +51 -0
- package/dist/flags.cjs.map +1 -0
- package/dist/flags.d.cts +48 -0
- package/dist/flags.d.ts +48 -0
- package/dist/flags.js +47 -0
- package/dist/flags.js.map +1 -0
- package/dist/index.cjs +2583 -665
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +743 -206
- package/dist/index.d.ts +743 -206
- package/dist/index.js +2552 -666
- package/dist/index.js.map +1 -1
- package/dist/preact.cjs +710 -209
- package/dist/preact.cjs.map +1 -1
- package/dist/preact.d.cts +67 -120
- package/dist/preact.d.ts +67 -120
- package/dist/preact.js +696 -195
- package/dist/preact.js.map +1 -1
- package/dist/react.cjs +710 -209
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +67 -120
- package/dist/react.d.ts +67 -120
- package/dist/react.js +696 -195
- package/dist/react.js.map +1 -1
- package/dist/schema.cjs +78 -1
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +142 -0
- package/dist/schema.d.ts +142 -0
- package/dist/schema.js +78 -1
- package/dist/schema.js.map +1 -1
- package/dist/solid.cjs +13 -3
- package/dist/solid.cjs.map +1 -1
- package/dist/solid.d.cts +4 -0
- package/dist/solid.d.ts +4 -0
- package/dist/solid.js +13 -3
- package/dist/solid.js.map +1 -1
- package/dist/svelte.cjs +13 -3
- package/dist/svelte.cjs.map +1 -1
- package/dist/svelte.js +13 -3
- package/dist/svelte.js.map +1 -1
- package/dist/testing.cjs +136 -15
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +22 -0
- package/dist/testing.d.ts +22 -0
- package/dist/testing.js +136 -15
- package/dist/testing.js.map +1 -1
- package/dist/vue.cjs +13 -3
- package/dist/vue.cjs.map +1 -1
- package/dist/vue.js +13 -3
- package/dist/vue.js.map +1 -1
- package/dist/web-components.cjs +14 -4
- package/dist/web-components.cjs.map +1 -1
- package/dist/web-components.d.cts +4 -0
- package/dist/web-components.d.ts +4 -0
- package/dist/web-components.js +14 -4
- package/dist/web-components.js.map +1 -1
- package/package.json +59 -1
package/dist/preact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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/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"],"names":["value","useState","useEffect","useMemo","jsx","isNew","useRef","useCallback","controllers","registryListeners","emitRegistry","EMPTY_SNAPSHOT","readSnapshot","sanitized","decoded","readStorageValue","writeStorageValue","Fragment","jsxs","sessionDismissed","positionStyles","prefersReducedMotion","headerStyles","pillStyles","reactionsRowStyles","reactionButtonStyles","formatDate","containerStyles","overlayStyles","getFocusableElements","useContext","getStorageKey","createContext","tooltipStyles","onceStorageKey","isDismissedOnce","setDismissedOnce","beaconStyles","injectedKeyframes","injectKeyframes","start","panelStyles","SEEN_FEATURES_STORAGE_KEY","CLICKED_FEATURES_STORAGE_KEY"],"mappings":"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","file":"preact.js","sourcesContent":["// 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 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 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 */\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): 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 // 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): 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 ),\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): number {\n return getNewFeatures(\n manifest,\n storage,\n now,\n userContext,\n matchAudience,\n appVersion,\n dependencyState,\n triggerContext,\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): 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 ),\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): 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 ).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 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 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\nexport function resolveTranslations(\n locale?: string,\n overrides?: Partial<FeatureDropTranslations>,\n): FeatureDropTranslations {\n const normalizedLocale = (locale ?? \"en\").toLowerCase();\n const base =\n SIMPLE_TRANSLATIONS[normalizedLocale] ??\n SIMPLE_TRANSLATIONS[normalizedLocale.split(\"-\")[0]] ??\n {};\n\n return {\n ...EN_TRANSLATIONS,\n ...base,\n ...(overrides ?? {}),\n stepOf: overrides?.stepOf ?? EN_TRANSLATIONS.stepOf,\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 { 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 /** Active locale code used by built-in UI strings */\n locale: string;\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}\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 FeatureManifest,\n FeaturePriority,\n StorageAdapter,\n TriggerContext,\n UserContext,\n} from \"../types\";\nimport type { ThrottleOptions } from \"../throttle\";\nimport type { AdoptionEventInput, AnalyticsCollector } from \"../analytics\";\nimport { getNewFeatures } from \"../core\";\nimport { getFeatureById } from \"../helpers\";\nimport { applyAnnouncementThrottle } from \"../throttle\";\nimport { TriggerEngine } from \"../triggers\";\nimport { resolveTranslations, type FeatureDropTranslations } 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 throttle,\n sessionStartedAt,\n quietMode,\n seenFeatureIds,\n clickedFeatureIds,\n triggerContext,\n}: {\n manifest: FeatureManifest;\n storage: StorageAdapter;\n now: Date;\n userContext?: UserContext;\n matchAudience?: AudienceMatchFn;\n appVersion?: string;\n throttle?: ThrottleOptions;\n sessionStartedAt: number;\n quietMode: boolean;\n seenFeatureIds: ReadonlySet<string>;\n clickedFeatureIds: ReadonlySet<string>;\n triggerContext?: TriggerContext;\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 );\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 /** 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 /** 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 /** Locale code for built-in component translations (e.g. \"en\", \"fr\", \"es\") */\n locale?: string;\n /** Custom translation overrides for built-in component strings */\n translations?: Partial<FeatureDropTranslations>;\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 userContext,\n matchAudience: matchAudienceFn,\n appVersion,\n throttle,\n variantKey,\n collector,\n locale = \"en\",\n translations: translationOverrides,\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 translations = useMemo(\n () => resolveTranslations(locale, translationOverrides),\n [locale, 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 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 }),\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 throttle,\n sessionStartedAt: sessionStartedAtRef.current,\n quietMode,\n seenFeatureIds,\n clickedFeatureIds,\n triggerContext,\n }),\n );\n }, [\n resolvedManifest,\n storage,\n userContext,\n matchAudienceFn,\n appVersion,\n throttle,\n quietMode,\n seenFeatureIds,\n clickedFeatureIds,\n triggerVersion,\n ]);\n\n useEffect(() => {\n recompute();\n }, [recompute]);\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 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 locale,\n translations,\n trackUsageEvent,\n trackTriggerEvent,\n trackMilestone,\n setTriggerPath,\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 locale,\n translations,\n trackUsageEvent,\n trackTriggerEvent,\n trackMilestone,\n setTriggerPath,\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 type { ReactNode, CSSProperties } from \"react\";\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 // 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 const reduceMotion =\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n const variantStyles =\n variant === \"dot\"\n ? {\n ...dotStyles,\n animation: reduceMotion ? \"none\" : dotStyles.animation,\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 { createRequire } 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 = createRequire(import.meta.url);\n\nlet cachedMarked: MarkedModule | null | false = null;\nlet cachedShiki: ShikiLike | null | false = null;\n\nfunction optionalRequire<T>(name: string): T | 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, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\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(/<(\\/?)([a-z0-9]+)([^>]*)>/gi, (match, slash, tag, rest) => {\n if (!allowTags.includes(tag.toLowerCase())) return match;\n const decodedRest = rest\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/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: \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 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 /** 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 formatDate(iso: string): string {\n const d = new Date(iso);\n return d.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\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}: ChangelogEntryRenderProps) {\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 ×\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>{formatDate(feature.releasedAt)}</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 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 translations,\n } = useFeatureDrop();\n const [isOpen, setIsOpen] = 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 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\n const open = useCallback(() => {\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 setIsOpen(false);\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 }, [analytics]);\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 >\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 ? ` — ${newCount} new` : \"\"}`}\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 {newCount > 0 ? `${newCount} new feature${newCount === 1 ? \"\" : \"s\"}` : \"No new features\"}\n </span>\n\n {/* Widget body */}\n {isOpen && (\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={dialogContainerStyles}\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 ×\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 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 { 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 animation: \"featuredrop-spotlight-pulse 2s ease-in-out infinite\",\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/* CSS keyframes injection */\n/* ------------------------------------------------------------------ */\n\nlet injectedKeyframes = false;\nfunction injectKeyframes() {\n if (injectedKeyframes || typeof document === \"undefined\") return;\n injectedKeyframes = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes featuredrop-spotlight-pulse {\n 0%, 100% { transform: scale(1); opacity: 0.6; }\n 50% { transform: scale(1.6); opacity: 0; }\n }\n @keyframes featuredrop-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n `;\n document.head.appendChild(style);\n}\n\nfunction 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\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 } = 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 reduceMotion = useMemo(() => prefersReducedMotion(), []);\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 injectKeyframes();\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: reduceMotion ? \"none\" : beaconPulseStyles.animation,\n }}\n />\n </div>\n\n {/* Tooltip */}\n {isTooltipOpen && (\n <div\n id={tooltipId}\n style={{ ...tooltipStyles, position: \"fixed\", ...tooltipPosition }}\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 Got it\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 ×\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\";\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 animation: \"featuredrop-toast-enter 0.3s ease-out\",\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/* Keyframes */\n/* ------------------------------------------------------------------ */\n\nlet injectedToastKeyframes = false;\nfunction injectToastKeyframes() {\n if (injectedToastKeyframes || typeof document === \"undefined\") return;\n injectedToastKeyframes = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes featuredrop-toast-enter {\n from { opacity: 0; transform: translateY(8px) scale(0.96); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n `;\n document.head.appendChild(style);\n}\n\nfunction 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\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 } = useFeatureDrop();\n const [localDismissed, setLocalDismissed] = 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 reduceMotion = useMemo(() => prefersReducedMotion(), []);\n\n useEffect(() => {\n injectToastKeyframes();\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 handleDismiss = useCallback(\n (id: string) => {\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 },\n [dismiss, newFeaturesSorted, analytics],\n );\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)) {\n timersRef.current.set(\n f.id,\n setTimeout(() => handleDismiss(f.id), autoDismissMs),\n );\n }\n }\n }, [visibleToasts, autoDismissMs, 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: reduceMotion ? \"none\" : toastStyles.animation,\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} →\n </a>\n )}\n </div>\n <button\n onClick={() => handleDismiss(feature.id)}\n style={toastCloseStyles}\n aria-label={`Dismiss ${feature.label}`}\n >\n ×\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 { 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 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: \"#fff\",\n fontSize: \"13px\",\n};\n\nconst pillActiveStyles: CSSProperties = {\n ...pillStyles,\n background: \"var(--featuredrop-pill-active-bg, #111827)\",\n color: \"#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: \"#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: \"#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: \"#fff\",\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: \"#fff\",\n padding: \"4px 9px\",\n cursor: \"pointer\",\n fontSize: \"12px\",\n};\n\nfunction defaultFormatDate(date: string): string {\n const d = new Date(date);\n return d.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\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: \"#fff\",\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: \"#fff\",\n background: \"#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 ? \"rgba(17, 24, 39, 0.08)\" : \"#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 = defaultFormatDate,\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, 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\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={formatDate}\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 data-featuredrop-changelog-page className={className} style={containerStyles}>\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 {\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 [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 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 tabIndex={-1}\n style={{\n ...tourBoxStyles,\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\";\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 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\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 ...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={{ ...tooltipStyles, top: tooltipTop, left: tooltipLeft }}\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 { 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, 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 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 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, ...style }}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={titleId}\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=\"Close feedback\"\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 { 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 [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 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\n const open = useCallback(() => {\n if (blockedByFrequency || resolvedSlides.length === 0) return;\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 setIsOpen(false);\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 }, []);\n\n const dismiss = useCallback(() => {\n close();\n setBlockedByFrequency(true);\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 || resolvedSlides.length === 0) return;\n if (resolvedFeature && resolvedFeature.priority !== \"critical\") return;\n open();\n }, [\n blockedByFrequency,\n isOpen,\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 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 || !currentSlide || blockedByFrequency) 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 tabIndex={-1}\n style={{\n ...(isMobile ? mobileModalStyles : desktopModalStyles),\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 useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\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 animation: \"featuredrop-chain-pulse 1.8s ease-in-out infinite\",\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\nlet injectedKeyframes = false;\nfunction injectKeyframes() {\n if (injectedKeyframes || typeof document === \"undefined\") return;\n injectedKeyframes = true;\n const style = document.createElement(\"style\");\n style.textContent = `\n @keyframes featuredrop-chain-pulse {\n 0%, 100% { transform: scale(1); opacity: 1; }\n 50% { transform: scale(1.35); opacity: 0.65; }\n }\n `;\n document.head.appendChild(style);\n}\n\nfunction 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\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 [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 reduceMotion = useMemo(() => prefersReducedMotion(), []);\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 injectKeyframes();\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: reduceMotion ? \"none\" : beaconStyles.animation,\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={{ ...tooltipStyles, top: tooltipTop, left: tooltipLeft }}\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 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 ? \"Got it\" : \"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 { 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\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 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, ...style }}\n role=\"dialog\"\n aria-modal=\"false\"\n aria-labelledby={surveyTitleId}\n aria-describedby={prompt ? surveyDescriptionId : undefined}\n tabIndex={-1}\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"]}
|
|
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":["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":"preact.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, 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}\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 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 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 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 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 }),\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 ],\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 { createRequire } 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 = createRequire(import.meta.url);\n\nlet cachedMarked: MarkedModule | null | false = null;\nlet cachedShiki: ShikiLike | null | false = null;\n\nfunction optionalRequire<T>(name: string): T | 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, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\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(/<(\\/?)([a-z0-9]+)([^>]*)>/gi, (match, slash, tag, rest) => {\n if (!allowTags.includes(tag.toLowerCase())) return match;\n const decodedRest = rest\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/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: \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 ×\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 ×\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 ×\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} →\n </a>\n )}\n </div>\n <button\n onClick={() => handleDismiss(feature.id)}\n style={toastCloseStyles}\n aria-label={`Dismiss ${feature.label}`}\n >\n ×\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: \"#fff\",\n fontSize: \"13px\",\n};\n\nconst pillActiveStyles: CSSProperties = {\n ...pillStyles,\n background: \"var(--featuredrop-pill-active-bg, #111827)\",\n color: \"#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: \"#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: \"#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: \"#fff\",\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: \"#fff\",\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: \"#fff\",\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: \"#fff\",\n background: \"#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 ? \"rgba(17, 24, 39, 0.08)\" : \"#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"]}
|