@feelflow/ffid-sdk 5.1.0 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -477,6 +477,16 @@ declare const CONSENT_COOKIE_MAX_AGE_SEC: number;
477
477
  * first, then fall back to cookie. See `FFIDAnalyticsProvider.bootstrap`.
478
478
  */
479
479
  declare const CONSENT_SESSION_STORAGE_KEY = "ffid_consent_state";
480
+ /**
481
+ * sessionStorage key for the dismissal timestamp ("あとで" cooldown).
482
+ *
483
+ * EDPB Guidelines 05/2020 §86 forbids treating dismissal as a refusal, so we
484
+ * never write this to a cookie or DB. Holding the timestamp in sessionStorage
485
+ * keeps it scoped to the current tab session — once the tab closes, the user
486
+ * is reprompted on next visit. See `FFIDAnalyticsProvider`'s
487
+ * `dismissalCooldownMinutes` prop for the auto-show suppression policy.
488
+ */
489
+ declare const CONSENT_DISMISSAL_TIMESTAMP_KEY = "ffid_consent_dismissed_at";
480
490
  interface WriteConsentCookieOptions {
481
491
  /** Override Secure flag for non-https custom domains. Defaults to production. */
482
492
  secure?: boolean;
@@ -520,6 +530,34 @@ declare function deleteConsentCookie(opts?: WriteConsentCookieOptions): boolean;
520
530
  declare function readConsentSessionMirror(): FFIDConsentCategories | null;
521
531
  declare function writeConsentSessionMirror(cats: FFIDConsentCategories): boolean;
522
532
  declare function clearConsentSessionMirror(): void;
533
+ /**
534
+ * Read the millisecond unix timestamp at which the banner was last dismissed,
535
+ * or `null` if absent / invalid / sessionStorage unavailable.
536
+ *
537
+ * Defensive parsing rejects non-finite values, negatives, and future-dated
538
+ * timestamps (clock-skew / tampering). When a corrupted value is detected,
539
+ * the helper **auto-heals** by clearing the slot — otherwise the same bad
540
+ * value would be re-parsed on every Provider mount and a buggy / extension-
541
+ * polluted consumer site could leave the cooldown effectively permanently
542
+ * disabled with no surface signal.
543
+ */
544
+ declare function readConsentDismissalTimestamp(): number | null;
545
+ /**
546
+ * Write the dismissal timestamp. Returns `true` on success, `false` when
547
+ * sessionStorage is unavailable / throws (e.g., quota, old Safari Private
548
+ * Browsing) **or** when `nowMs` is non-finite / negative.
549
+ *
550
+ * Callers may safely ignore the return — failure degrades to the legacy
551
+ * "reprompt every Provider mount" behavior, which is the published v5.1.0
552
+ * baseline. Dismissal carries no GDPR weight (EDPB §86) so there is no
553
+ * obligation to surface storage failure via `onError`.
554
+ */
555
+ declare function writeConsentDismissalTimestamp(nowMs?: number): boolean;
556
+ /**
557
+ * Idempotent clear of the dismissal timestamp. Safe to call when no value is
558
+ * present or sessionStorage is unavailable; never throws.
559
+ */
560
+ declare function clearConsentDismissalTimestamp(): void;
523
561
 
524
562
  /**
525
563
  * Cookie Consent — Google Consent Mode v2 wiring.
@@ -652,11 +690,29 @@ interface FFIDAnalyticsProviderProps {
652
690
  onError?: (error: FFIDConsentError) => void;
653
691
  /** Whether to open banner automatically when no decision is on file. Default: true. */
654
692
  autoShowBanner?: boolean;
693
+ /**
694
+ * Minutes to suppress auto-reopen after the user presses "あとで" (closeBanner).
695
+ *
696
+ * The dismissal timestamp is held in `sessionStorage` only — never written
697
+ * to cookie or DB — so it expires when the tab closes. This is EDPB
698
+ * Guidelines 05/2020 §86 compliant: dismissal is not a refusal, and the
699
+ * user is reprompted on the next fresh visit regardless of cooldown.
700
+ *
701
+ * Accepts any `number`; non-finite (`NaN` / `±Infinity`) and negative
702
+ * values are treated as `0` (suppression disabled). `0` reverts to the
703
+ * legacy v5.1.0 "reprompt on every Provider mount" behavior. Default: 30.
704
+ *
705
+ * Manual `openBanner()` calls ignore the cooldown so consumer "Cookie 設定"
706
+ * links keep working, and `needsRenewal=true` overrides the cooldown so the
707
+ * renewal reprompt (CNIL/ICO renewal guidance — see PR #3261) is never
708
+ * suppressed by a UX dismissal.
709
+ */
710
+ dismissalCooldownMinutes?: number;
655
711
  /** Optional fetch override (mainly for tests). */
656
712
  fetchImpl?: typeof fetch;
657
713
  children: ReactNode;
658
714
  }
659
- declare function FFIDAnalyticsProvider({ baseUrl, serviceApiKey, getAccessToken, gaMeasurementId, sentryReplay, sentry, onConsentChange, onError, autoShowBanner, fetchImpl, children, }: FFIDAnalyticsProviderProps): React.JSX.Element;
715
+ declare function FFIDAnalyticsProvider({ baseUrl, serviceApiKey, getAccessToken, gaMeasurementId, sentryReplay, sentry, onConsentChange, onError, autoShowBanner, dismissalCooldownMinutes, fetchImpl, children, }: FFIDAnalyticsProviderProps): React.JSX.Element;
660
716
 
661
717
  interface FFIDConsentContextValue {
662
718
  /** Current consent state. Always non-null; "not yet decided" is encoded by `hasDecided=false`. */
@@ -795,7 +851,14 @@ declare function useFFIDConsentPreferences(): UseFFIDConsentPreferencesReturn;
795
851
  /**
796
852
  * `<FFIDCookieBanner>` — bottom-sheet consent banner.
797
853
  *
798
- * Renders only when `state.hasDecided === false` or `state.needsRenewal === true`.
854
+ * Rendering is gated solely by `isBannerOpen` from the consent context (see
855
+ * `FFIDAnalyticsProvider`). The provider's bootstrap effect flips it to
856
+ * `true` for fresh visitors / policy-version renewal, and the banner's own
857
+ * buttons (or any consumer calling `closeBanner()` / `openBanner()`) flip
858
+ * it back. The earlier `hasDecided=false || needsRenewal=true` fallback
859
+ * was removed in v5.2.1 (#3289) because it overrode `setIsBannerOpen(false)`
860
+ * for fresh visitors and silently kept the banner mounted on "あとで" click.
861
+ *
799
862
  * Four buttons (spec §6.2):
800
863
  * 1. "すべて同意" (Accept all)
801
864
  * 2. "同意しない" (Necessary only — `necessary=true` is enforced by ePrivacy
@@ -916,4 +979,4 @@ interface FFIDCookieLinkProps {
916
979
  }
917
980
  declare function FFIDCookieLink({ children, className, style, id, }: FFIDCookieLinkProps): React.JSX.Element;
918
981
 
919
- export { GetCategoriesWireSchema as $, ALL_DENIED_EXCEPT_NECESSARY as A, FFIDConsentMergeWarningSchema as B, CONSENT_COOKIE_MAX_AGE_SEC as C, DEFAULT_CONSENT_ERROR_MESSAGES as D, type FFIDConsentSource as E, type FFIDConsentResult as F, type GetConsentMeWire as G, FFIDConsentSourceSchema as H, FFIDConsentStateSchema as I, FFIDConsentUpdateSchema as J, FFIDCookieBanner as K, type FFIDCookieBannerClassNames as L, type FFIDCookieBannerProps as M, FFIDCookieLink as N, type FFIDCookieLinkProps as O, type PostConsentWire as P, FFIDCookiePolicySchema as Q, FFIDCookieSettings as R, type FFIDCookieSettingsClassNames as S, type FFIDCookieSettingsProps as T, type FFIDInternalConsentSource as U, FFIDInternalConsentSourceSchema as V, type FFIDPublicConsentSource as W, FFIDPublicConsentSourceSchema as X, FFID_CONSENT_ERROR_CODES as Y, FFID_CONSENT_NOT_DECIDED_STATE as Z, type GetCategoriesWire as _, type FFIDConsentState as a, GetConsentMeWireSchema as a0, type GetDocumentWire as a1, GetDocumentWireSchema as a2, type GtagBridge as a3, type GtagBridgeOptions as a4, type PostConsentRequest as a5, PostConsentRequestSchema as a6, PostConsentWireSchema as a7, type PostSyncRequest as a8, PostSyncRequestSchema as a9, PostSyncWireSchema as aa, PostWithdrawWireSchema as ab, type UseFFIDConsentPreferencesReturn as ac, type UseFFIDConsentReturn as ad, clearConsentSessionMirror as ae, createGtagBridge as af, decodeConsentCookie as ag, deleteConsentCookie as ah, encodeConsentCookie as ai, mapCategoriesToGtagParams as aj, readConsentCookie as ak, readConsentSessionMirror as al, useFFIDConsent as am, useFFIDConsentPreferences as an, writeConsentCookie as ao, writeConsentSessionMirror as ap, type FFIDConsentUpdate as b, type FFIDConsentCategories as c, type FFIDConsentSyncResult as d, type FFIDConsentCategoryMetadata as e, type FFIDCookiePolicy as f, type PostSyncWire as g, type PostWithdrawWire as h, CONSENT_COOKIE_NAME as i, CONSENT_SESSION_STORAGE_KEY as j, COOKIE_VERSION as k, DEFAULT_MERGE_WARNING_MESSAGES as l, DeviceIdSchema as m, FFIDAnalyticsProvider as n, type FFIDAnalyticsProviderProps as o, FFIDConsentCategoriesSchema as p, type FFIDConsentCategoryCode as q, FFIDConsentCategoryCodeSchema as r, FFIDConsentCategoryMetadataSchema as s, FFIDConsentContext as t, type FFIDConsentContextValue as u, FFIDConsentError as v, type FFIDConsentErrorCode as w, type FFIDConsentMergeStrategy as x, FFIDConsentMergeStrategySchema as y, type FFIDConsentMergeWarning as z };
982
+ export { type GetCategoriesWire as $, ALL_DENIED_EXCEPT_NECESSARY as A, type FFIDConsentMergeWarning as B, CONSENT_COOKIE_MAX_AGE_SEC as C, DEFAULT_CONSENT_ERROR_MESSAGES as D, FFIDConsentMergeWarningSchema as E, type FFIDConsentResult as F, type GetConsentMeWire as G, type FFIDConsentSource as H, FFIDConsentSourceSchema as I, FFIDConsentStateSchema as J, FFIDConsentUpdateSchema as K, FFIDCookieBanner as L, type FFIDCookieBannerClassNames as M, type FFIDCookieBannerProps as N, FFIDCookieLink as O, type PostConsentWire as P, type FFIDCookieLinkProps as Q, FFIDCookiePolicySchema as R, FFIDCookieSettings as S, type FFIDCookieSettingsClassNames as T, type FFIDCookieSettingsProps as U, type FFIDInternalConsentSource as V, FFIDInternalConsentSourceSchema as W, type FFIDPublicConsentSource as X, FFIDPublicConsentSourceSchema as Y, FFID_CONSENT_ERROR_CODES as Z, FFID_CONSENT_NOT_DECIDED_STATE as _, type FFIDConsentState as a, GetCategoriesWireSchema as a0, GetConsentMeWireSchema as a1, type GetDocumentWire as a2, GetDocumentWireSchema as a3, type GtagBridge as a4, type GtagBridgeOptions as a5, type PostConsentRequest as a6, PostConsentRequestSchema as a7, PostConsentWireSchema as a8, type PostSyncRequest as a9, PostSyncRequestSchema as aa, PostSyncWireSchema as ab, PostWithdrawWireSchema as ac, type UseFFIDConsentPreferencesReturn as ad, type UseFFIDConsentReturn as ae, clearConsentDismissalTimestamp as af, clearConsentSessionMirror as ag, createGtagBridge as ah, decodeConsentCookie as ai, deleteConsentCookie as aj, encodeConsentCookie as ak, mapCategoriesToGtagParams as al, readConsentCookie as am, readConsentDismissalTimestamp as an, readConsentSessionMirror as ao, useFFIDConsent as ap, useFFIDConsentPreferences as aq, writeConsentCookie as ar, writeConsentDismissalTimestamp as as, writeConsentSessionMirror as at, type FFIDConsentUpdate as b, type FFIDConsentCategories as c, type FFIDConsentSyncResult as d, type FFIDConsentCategoryMetadata as e, type FFIDCookiePolicy as f, type PostSyncWire as g, type PostWithdrawWire as h, CONSENT_COOKIE_NAME as i, CONSENT_DISMISSAL_TIMESTAMP_KEY as j, CONSENT_SESSION_STORAGE_KEY as k, COOKIE_VERSION as l, DEFAULT_MERGE_WARNING_MESSAGES as m, DeviceIdSchema as n, FFIDAnalyticsProvider as o, type FFIDAnalyticsProviderProps as p, FFIDConsentCategoriesSchema as q, type FFIDConsentCategoryCode as r, FFIDConsentCategoryCodeSchema as s, FFIDConsentCategoryMetadataSchema as t, FFIDConsentContext as u, type FFIDConsentContextValue as v, FFIDConsentError as w, type FFIDConsentErrorCode as x, type FFIDConsentMergeStrategy as y, FFIDConsentMergeStrategySchema as z };
@@ -477,6 +477,16 @@ declare const CONSENT_COOKIE_MAX_AGE_SEC: number;
477
477
  * first, then fall back to cookie. See `FFIDAnalyticsProvider.bootstrap`.
478
478
  */
479
479
  declare const CONSENT_SESSION_STORAGE_KEY = "ffid_consent_state";
480
+ /**
481
+ * sessionStorage key for the dismissal timestamp ("あとで" cooldown).
482
+ *
483
+ * EDPB Guidelines 05/2020 §86 forbids treating dismissal as a refusal, so we
484
+ * never write this to a cookie or DB. Holding the timestamp in sessionStorage
485
+ * keeps it scoped to the current tab session — once the tab closes, the user
486
+ * is reprompted on next visit. See `FFIDAnalyticsProvider`'s
487
+ * `dismissalCooldownMinutes` prop for the auto-show suppression policy.
488
+ */
489
+ declare const CONSENT_DISMISSAL_TIMESTAMP_KEY = "ffid_consent_dismissed_at";
480
490
  interface WriteConsentCookieOptions {
481
491
  /** Override Secure flag for non-https custom domains. Defaults to production. */
482
492
  secure?: boolean;
@@ -520,6 +530,34 @@ declare function deleteConsentCookie(opts?: WriteConsentCookieOptions): boolean;
520
530
  declare function readConsentSessionMirror(): FFIDConsentCategories | null;
521
531
  declare function writeConsentSessionMirror(cats: FFIDConsentCategories): boolean;
522
532
  declare function clearConsentSessionMirror(): void;
533
+ /**
534
+ * Read the millisecond unix timestamp at which the banner was last dismissed,
535
+ * or `null` if absent / invalid / sessionStorage unavailable.
536
+ *
537
+ * Defensive parsing rejects non-finite values, negatives, and future-dated
538
+ * timestamps (clock-skew / tampering). When a corrupted value is detected,
539
+ * the helper **auto-heals** by clearing the slot — otherwise the same bad
540
+ * value would be re-parsed on every Provider mount and a buggy / extension-
541
+ * polluted consumer site could leave the cooldown effectively permanently
542
+ * disabled with no surface signal.
543
+ */
544
+ declare function readConsentDismissalTimestamp(): number | null;
545
+ /**
546
+ * Write the dismissal timestamp. Returns `true` on success, `false` when
547
+ * sessionStorage is unavailable / throws (e.g., quota, old Safari Private
548
+ * Browsing) **or** when `nowMs` is non-finite / negative.
549
+ *
550
+ * Callers may safely ignore the return — failure degrades to the legacy
551
+ * "reprompt every Provider mount" behavior, which is the published v5.1.0
552
+ * baseline. Dismissal carries no GDPR weight (EDPB §86) so there is no
553
+ * obligation to surface storage failure via `onError`.
554
+ */
555
+ declare function writeConsentDismissalTimestamp(nowMs?: number): boolean;
556
+ /**
557
+ * Idempotent clear of the dismissal timestamp. Safe to call when no value is
558
+ * present or sessionStorage is unavailable; never throws.
559
+ */
560
+ declare function clearConsentDismissalTimestamp(): void;
523
561
 
524
562
  /**
525
563
  * Cookie Consent — Google Consent Mode v2 wiring.
@@ -652,11 +690,29 @@ interface FFIDAnalyticsProviderProps {
652
690
  onError?: (error: FFIDConsentError) => void;
653
691
  /** Whether to open banner automatically when no decision is on file. Default: true. */
654
692
  autoShowBanner?: boolean;
693
+ /**
694
+ * Minutes to suppress auto-reopen after the user presses "あとで" (closeBanner).
695
+ *
696
+ * The dismissal timestamp is held in `sessionStorage` only — never written
697
+ * to cookie or DB — so it expires when the tab closes. This is EDPB
698
+ * Guidelines 05/2020 §86 compliant: dismissal is not a refusal, and the
699
+ * user is reprompted on the next fresh visit regardless of cooldown.
700
+ *
701
+ * Accepts any `number`; non-finite (`NaN` / `±Infinity`) and negative
702
+ * values are treated as `0` (suppression disabled). `0` reverts to the
703
+ * legacy v5.1.0 "reprompt on every Provider mount" behavior. Default: 30.
704
+ *
705
+ * Manual `openBanner()` calls ignore the cooldown so consumer "Cookie 設定"
706
+ * links keep working, and `needsRenewal=true` overrides the cooldown so the
707
+ * renewal reprompt (CNIL/ICO renewal guidance — see PR #3261) is never
708
+ * suppressed by a UX dismissal.
709
+ */
710
+ dismissalCooldownMinutes?: number;
655
711
  /** Optional fetch override (mainly for tests). */
656
712
  fetchImpl?: typeof fetch;
657
713
  children: ReactNode;
658
714
  }
659
- declare function FFIDAnalyticsProvider({ baseUrl, serviceApiKey, getAccessToken, gaMeasurementId, sentryReplay, sentry, onConsentChange, onError, autoShowBanner, fetchImpl, children, }: FFIDAnalyticsProviderProps): React.JSX.Element;
715
+ declare function FFIDAnalyticsProvider({ baseUrl, serviceApiKey, getAccessToken, gaMeasurementId, sentryReplay, sentry, onConsentChange, onError, autoShowBanner, dismissalCooldownMinutes, fetchImpl, children, }: FFIDAnalyticsProviderProps): React.JSX.Element;
660
716
 
661
717
  interface FFIDConsentContextValue {
662
718
  /** Current consent state. Always non-null; "not yet decided" is encoded by `hasDecided=false`. */
@@ -795,7 +851,14 @@ declare function useFFIDConsentPreferences(): UseFFIDConsentPreferencesReturn;
795
851
  /**
796
852
  * `<FFIDCookieBanner>` — bottom-sheet consent banner.
797
853
  *
798
- * Renders only when `state.hasDecided === false` or `state.needsRenewal === true`.
854
+ * Rendering is gated solely by `isBannerOpen` from the consent context (see
855
+ * `FFIDAnalyticsProvider`). The provider's bootstrap effect flips it to
856
+ * `true` for fresh visitors / policy-version renewal, and the banner's own
857
+ * buttons (or any consumer calling `closeBanner()` / `openBanner()`) flip
858
+ * it back. The earlier `hasDecided=false || needsRenewal=true` fallback
859
+ * was removed in v5.2.1 (#3289) because it overrode `setIsBannerOpen(false)`
860
+ * for fresh visitors and silently kept the banner mounted on "あとで" click.
861
+ *
799
862
  * Four buttons (spec §6.2):
800
863
  * 1. "すべて同意" (Accept all)
801
864
  * 2. "同意しない" (Necessary only — `necessary=true` is enforced by ePrivacy
@@ -916,4 +979,4 @@ interface FFIDCookieLinkProps {
916
979
  }
917
980
  declare function FFIDCookieLink({ children, className, style, id, }: FFIDCookieLinkProps): React.JSX.Element;
918
981
 
919
- export { GetCategoriesWireSchema as $, ALL_DENIED_EXCEPT_NECESSARY as A, FFIDConsentMergeWarningSchema as B, CONSENT_COOKIE_MAX_AGE_SEC as C, DEFAULT_CONSENT_ERROR_MESSAGES as D, type FFIDConsentSource as E, type FFIDConsentResult as F, type GetConsentMeWire as G, FFIDConsentSourceSchema as H, FFIDConsentStateSchema as I, FFIDConsentUpdateSchema as J, FFIDCookieBanner as K, type FFIDCookieBannerClassNames as L, type FFIDCookieBannerProps as M, FFIDCookieLink as N, type FFIDCookieLinkProps as O, type PostConsentWire as P, FFIDCookiePolicySchema as Q, FFIDCookieSettings as R, type FFIDCookieSettingsClassNames as S, type FFIDCookieSettingsProps as T, type FFIDInternalConsentSource as U, FFIDInternalConsentSourceSchema as V, type FFIDPublicConsentSource as W, FFIDPublicConsentSourceSchema as X, FFID_CONSENT_ERROR_CODES as Y, FFID_CONSENT_NOT_DECIDED_STATE as Z, type GetCategoriesWire as _, type FFIDConsentState as a, GetConsentMeWireSchema as a0, type GetDocumentWire as a1, GetDocumentWireSchema as a2, type GtagBridge as a3, type GtagBridgeOptions as a4, type PostConsentRequest as a5, PostConsentRequestSchema as a6, PostConsentWireSchema as a7, type PostSyncRequest as a8, PostSyncRequestSchema as a9, PostSyncWireSchema as aa, PostWithdrawWireSchema as ab, type UseFFIDConsentPreferencesReturn as ac, type UseFFIDConsentReturn as ad, clearConsentSessionMirror as ae, createGtagBridge as af, decodeConsentCookie as ag, deleteConsentCookie as ah, encodeConsentCookie as ai, mapCategoriesToGtagParams as aj, readConsentCookie as ak, readConsentSessionMirror as al, useFFIDConsent as am, useFFIDConsentPreferences as an, writeConsentCookie as ao, writeConsentSessionMirror as ap, type FFIDConsentUpdate as b, type FFIDConsentCategories as c, type FFIDConsentSyncResult as d, type FFIDConsentCategoryMetadata as e, type FFIDCookiePolicy as f, type PostSyncWire as g, type PostWithdrawWire as h, CONSENT_COOKIE_NAME as i, CONSENT_SESSION_STORAGE_KEY as j, COOKIE_VERSION as k, DEFAULT_MERGE_WARNING_MESSAGES as l, DeviceIdSchema as m, FFIDAnalyticsProvider as n, type FFIDAnalyticsProviderProps as o, FFIDConsentCategoriesSchema as p, type FFIDConsentCategoryCode as q, FFIDConsentCategoryCodeSchema as r, FFIDConsentCategoryMetadataSchema as s, FFIDConsentContext as t, type FFIDConsentContextValue as u, FFIDConsentError as v, type FFIDConsentErrorCode as w, type FFIDConsentMergeStrategy as x, FFIDConsentMergeStrategySchema as y, type FFIDConsentMergeWarning as z };
982
+ export { type GetCategoriesWire as $, ALL_DENIED_EXCEPT_NECESSARY as A, type FFIDConsentMergeWarning as B, CONSENT_COOKIE_MAX_AGE_SEC as C, DEFAULT_CONSENT_ERROR_MESSAGES as D, FFIDConsentMergeWarningSchema as E, type FFIDConsentResult as F, type GetConsentMeWire as G, type FFIDConsentSource as H, FFIDConsentSourceSchema as I, FFIDConsentStateSchema as J, FFIDConsentUpdateSchema as K, FFIDCookieBanner as L, type FFIDCookieBannerClassNames as M, type FFIDCookieBannerProps as N, FFIDCookieLink as O, type PostConsentWire as P, type FFIDCookieLinkProps as Q, FFIDCookiePolicySchema as R, FFIDCookieSettings as S, type FFIDCookieSettingsClassNames as T, type FFIDCookieSettingsProps as U, type FFIDInternalConsentSource as V, FFIDInternalConsentSourceSchema as W, type FFIDPublicConsentSource as X, FFIDPublicConsentSourceSchema as Y, FFID_CONSENT_ERROR_CODES as Z, FFID_CONSENT_NOT_DECIDED_STATE as _, type FFIDConsentState as a, GetCategoriesWireSchema as a0, GetConsentMeWireSchema as a1, type GetDocumentWire as a2, GetDocumentWireSchema as a3, type GtagBridge as a4, type GtagBridgeOptions as a5, type PostConsentRequest as a6, PostConsentRequestSchema as a7, PostConsentWireSchema as a8, type PostSyncRequest as a9, PostSyncRequestSchema as aa, PostSyncWireSchema as ab, PostWithdrawWireSchema as ac, type UseFFIDConsentPreferencesReturn as ad, type UseFFIDConsentReturn as ae, clearConsentDismissalTimestamp as af, clearConsentSessionMirror as ag, createGtagBridge as ah, decodeConsentCookie as ai, deleteConsentCookie as aj, encodeConsentCookie as ak, mapCategoriesToGtagParams as al, readConsentCookie as am, readConsentDismissalTimestamp as an, readConsentSessionMirror as ao, useFFIDConsent as ap, useFFIDConsentPreferences as aq, writeConsentCookie as ar, writeConsentDismissalTimestamp as as, writeConsentSessionMirror as at, type FFIDConsentUpdate as b, type FFIDConsentCategories as c, type FFIDConsentSyncResult as d, type FFIDConsentCategoryMetadata as e, type FFIDCookiePolicy as f, type PostSyncWire as g, type PostWithdrawWire as h, CONSENT_COOKIE_NAME as i, CONSENT_DISMISSAL_TIMESTAMP_KEY as j, CONSENT_SESSION_STORAGE_KEY as k, COOKIE_VERSION as l, DEFAULT_MERGE_WARNING_MESSAGES as m, DeviceIdSchema as n, FFIDAnalyticsProvider as o, type FFIDAnalyticsProviderProps as p, FFIDConsentCategoriesSchema as q, type FFIDConsentCategoryCode as r, FFIDConsentCategoryCodeSchema as s, FFIDConsentCategoryMetadataSchema as t, FFIDConsentContext as u, type FFIDConsentContextValue as v, FFIDConsentError as w, type FFIDConsentErrorCode as x, type FFIDConsentMergeStrategy as y, FFIDConsentMergeStrategySchema as z };
@@ -838,7 +838,7 @@ function createProfileMethods(deps) {
838
838
  }
839
839
 
840
840
  // src/client/version-check.ts
841
- var SDK_VERSION = "5.1.0";
841
+ var SDK_VERSION = "5.2.1";
842
842
  var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
843
843
  var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
844
844
  function sdkHeaders() {
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { createContext, useState, useRef, useCallback, useEffect, useMemo, useContext } from 'react';
2
+ import { createContext, useCallback, useState, useRef, useEffect, useMemo, useContext } from 'react';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
 
5
5
  var FFIDConsentCategoryCodeSchema = z.enum([
@@ -282,6 +282,7 @@ var HOURS_PER_DAY = 24;
282
282
  var DAYS_PER_YEAR = 365;
283
283
  var CONSENT_COOKIE_MAX_AGE_SEC = SECONDS_PER_MINUTE * MINUTES_PER_HOUR * HOURS_PER_DAY * DAYS_PER_YEAR;
284
284
  var CONSENT_SESSION_STORAGE_KEY = "ffid_consent_state";
285
+ var CONSENT_DISMISSAL_TIMESTAMP_KEY = "ffid_consent_dismissed_at";
285
286
  function hasDocument() {
286
287
  return typeof document !== "undefined";
287
288
  }
@@ -372,6 +373,39 @@ function clearConsentSessionMirror() {
372
373
  } catch {
373
374
  }
374
375
  }
376
+ function readConsentDismissalTimestamp() {
377
+ if (!hasSessionStorage()) return null;
378
+ try {
379
+ const raw = sessionStorage.getItem(CONSENT_DISMISSAL_TIMESTAMP_KEY);
380
+ if (!raw) return null;
381
+ const parsed = Number(raw);
382
+ const CLOCK_SKEW_GRACE_MS = 6e4;
383
+ if (!Number.isFinite(parsed) || parsed < 0 || parsed > Date.now() + CLOCK_SKEW_GRACE_MS) {
384
+ clearConsentDismissalTimestamp();
385
+ return null;
386
+ }
387
+ return parsed;
388
+ } catch {
389
+ return null;
390
+ }
391
+ }
392
+ function writeConsentDismissalTimestamp(nowMs = Date.now()) {
393
+ if (!Number.isFinite(nowMs) || nowMs < 0) return false;
394
+ if (!hasSessionStorage()) return false;
395
+ try {
396
+ sessionStorage.setItem(CONSENT_DISMISSAL_TIMESTAMP_KEY, String(nowMs));
397
+ return true;
398
+ } catch {
399
+ return false;
400
+ }
401
+ }
402
+ function clearConsentDismissalTimestamp() {
403
+ if (!hasSessionStorage()) return;
404
+ try {
405
+ sessionStorage.removeItem(CONSENT_DISMISSAL_TIMESTAMP_KEY);
406
+ } catch {
407
+ }
408
+ }
375
409
 
376
410
  // src/consent/storage/device-id.ts
377
411
  var DEVICE_ID_LOCAL_STORAGE_KEY = "ffid_device_id";
@@ -1012,6 +1046,8 @@ var DEFAULT_MERGE_WARNING_MESSAGES = {
1012
1046
  shared_device_detected: "\u3053\u306E\u7AEF\u672B\u306F\u5225\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u3067\u3082\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u3059\u3002Cookie \u8A2D\u5B9A\u306F\u30A2\u30AB\u30A6\u30F3\u30C8\u3054\u3068\u306B\u4FDD\u5B58\u3055\u308C\u3066\u3044\u307E\u3059",
1013
1047
  drift_detected: "\u4FDD\u5B58\u3055\u308C\u3066\u3044\u305F\u8A2D\u5B9A\u3068\u7570\u306A\u308B\u9805\u76EE\u304C\u3042\u3063\u305F\u305F\u3081\u3001\u65B0\u3057\u304F\u8A18\u9332\u3055\u308C\u307E\u3057\u305F"
1014
1048
  };
1049
+ var DEFAULT_DISMISSAL_COOLDOWN_MINUTES = 30;
1050
+ var MS_PER_MINUTE = 6e4;
1015
1051
  function applyChanges(base, changes) {
1016
1052
  return {
1017
1053
  necessary: true,
@@ -1030,9 +1066,17 @@ function FFIDAnalyticsProvider({
1030
1066
  onConsentChange,
1031
1067
  onError,
1032
1068
  autoShowBanner = true,
1069
+ dismissalCooldownMinutes = DEFAULT_DISMISSAL_COOLDOWN_MINUTES,
1033
1070
  fetchImpl,
1034
1071
  children
1035
1072
  }) {
1073
+ const cooldownMs = Number.isFinite(dismissalCooldownMinutes) && dismissalCooldownMinutes > 0 ? dismissalCooldownMinutes * MS_PER_MINUTE : 0;
1074
+ const isWithinDismissalCooldown = useCallback(() => {
1075
+ if (cooldownMs <= 0) return false;
1076
+ const dismissedAt = readConsentDismissalTimestamp();
1077
+ if (dismissedAt === null) return false;
1078
+ return Date.now() - dismissedAt < cooldownMs;
1079
+ }, [cooldownMs]);
1036
1080
  const [state, setState] = useState(
1037
1081
  FFID_CONSENT_NOT_DECIDED_STATE
1038
1082
  );
@@ -1143,7 +1187,7 @@ function FFIDAnalyticsProvider({
1143
1187
  applyCategoriesSideEffects(result.value.categories);
1144
1188
  writeConsentSessionMirror(result.value.categories);
1145
1189
  setIsLoading(false);
1146
- if (!result.value.hasDecided && autoShowBanner) {
1190
+ if (!result.value.hasDecided && autoShowBanner && !isWithinDismissalCooldown()) {
1147
1191
  setIsBannerOpen(true);
1148
1192
  }
1149
1193
  if (result.value.needsRenewal && autoShowBanner) {
@@ -1271,7 +1315,10 @@ function FFIDAnalyticsProvider({
1271
1315
  persistCategories
1272
1316
  ]);
1273
1317
  const openBanner = useCallback(() => setIsBannerOpen(true), []);
1274
- const closeBanner = useCallback(() => setIsBannerOpen(false), []);
1318
+ const closeBanner = useCallback(() => {
1319
+ if (cooldownMs > 0) writeConsentDismissalTimestamp();
1320
+ setIsBannerOpen(false);
1321
+ }, [cooldownMs]);
1275
1322
  const openPreferences = useCallback(async () => {
1276
1323
  if (!categoryMetadata) {
1277
1324
  const client = clientRef.current;
@@ -1405,7 +1452,6 @@ function FFIDCookieBanner({
1405
1452
  style
1406
1453
  }) {
1407
1454
  const {
1408
- state,
1409
1455
  isBannerOpen,
1410
1456
  acceptAll,
1411
1457
  acceptNecessaryOnly,
@@ -1413,7 +1459,7 @@ function FFIDCookieBanner({
1413
1459
  closeBanner,
1414
1460
  error
1415
1461
  } = useFFIDConsent();
1416
- if (!isBannerOpen && state.hasDecided && !state.needsRenewal) return null;
1462
+ if (!isBannerOpen) return null;
1417
1463
  return /* @__PURE__ */ jsxs(
1418
1464
  "div",
1419
1465
  {
@@ -1790,4 +1836,4 @@ function FFIDCookieLink({
1790
1836
  );
1791
1837
  }
1792
1838
 
1793
- export { ALL_DENIED_EXCEPT_NECESSARY, CONSENT_COOKIE_MAX_AGE_SEC, CONSENT_COOKIE_NAME, CONSENT_SESSION_STORAGE_KEY, COOKIE_VERSION, DEFAULT_CONSENT_ERROR_MESSAGES, DEFAULT_MERGE_WARNING_MESSAGES, DEVICE_ID_LOCAL_STORAGE_KEY, DEVICE_ID_SESSION_STORAGE_KEY, DeviceIdSchema, FFIDAnalyticsProvider, FFIDConsentCategoriesSchema, FFIDConsentCategoryCodeSchema, FFIDConsentCategoryMetadataSchema, FFIDConsentContext, FFIDConsentError, FFIDConsentMergeStrategySchema, FFIDConsentMergeWarningSchema, FFIDConsentSourceSchema, FFIDConsentStateSchema, FFIDConsentUpdateSchema, FFIDCookieBanner, FFIDCookieLink, FFIDCookiePolicySchema, FFIDCookieSettings, FFIDInternalConsentSourceSchema, FFIDPublicConsentSourceSchema, FFID_CONSENT_ERROR_CODES, FFID_CONSENT_NOT_DECIDED_STATE, GetCategoriesWireSchema, GetConsentMeWireSchema, GetDocumentWireSchema, PostConsentRequestSchema, PostConsentWireSchema, PostSyncRequestSchema, PostSyncWireSchema, PostWithdrawWireSchema, clearConsentSessionMirror, clearDeviceId, createConsentClient, createGtagBridge, decodeConsentCookie, deleteConsentCookie, encodeConsentCookie, generateDeviceId, getOrCreateDeviceId, isUuidV7, isValidDeviceId, mapCategoriesToGtagParams, mapConsentWireToState, mapMeWireToState, mapSyncWireToResult, mapWithdrawWireToState, readConsentCookie, readConsentSessionMirror, useFFIDConsent, useFFIDConsentPreferences, writeConsentCookie, writeConsentSessionMirror };
1839
+ export { ALL_DENIED_EXCEPT_NECESSARY, CONSENT_COOKIE_MAX_AGE_SEC, CONSENT_COOKIE_NAME, CONSENT_DISMISSAL_TIMESTAMP_KEY, CONSENT_SESSION_STORAGE_KEY, COOKIE_VERSION, DEFAULT_CONSENT_ERROR_MESSAGES, DEFAULT_MERGE_WARNING_MESSAGES, DEVICE_ID_LOCAL_STORAGE_KEY, DEVICE_ID_SESSION_STORAGE_KEY, DeviceIdSchema, FFIDAnalyticsProvider, FFIDConsentCategoriesSchema, FFIDConsentCategoryCodeSchema, FFIDConsentCategoryMetadataSchema, FFIDConsentContext, FFIDConsentError, FFIDConsentMergeStrategySchema, FFIDConsentMergeWarningSchema, FFIDConsentSourceSchema, FFIDConsentStateSchema, FFIDConsentUpdateSchema, FFIDCookieBanner, FFIDCookieLink, FFIDCookiePolicySchema, FFIDCookieSettings, FFIDInternalConsentSourceSchema, FFIDPublicConsentSourceSchema, FFID_CONSENT_ERROR_CODES, FFID_CONSENT_NOT_DECIDED_STATE, GetCategoriesWireSchema, GetConsentMeWireSchema, GetDocumentWireSchema, PostConsentRequestSchema, PostConsentWireSchema, PostSyncRequestSchema, PostSyncWireSchema, PostWithdrawWireSchema, clearConsentDismissalTimestamp, clearConsentSessionMirror, clearDeviceId, createConsentClient, createGtagBridge, decodeConsentCookie, deleteConsentCookie, encodeConsentCookie, generateDeviceId, getOrCreateDeviceId, isUuidV7, isValidDeviceId, mapCategoriesToGtagParams, mapConsentWireToState, mapMeWireToState, mapSyncWireToResult, mapWithdrawWireToState, readConsentCookie, readConsentDismissalTimestamp, readConsentSessionMirror, useFFIDConsent, useFFIDConsentPreferences, writeConsentCookie, writeConsentDismissalTimestamp, writeConsentSessionMirror };
@@ -284,6 +284,7 @@ var HOURS_PER_DAY = 24;
284
284
  var DAYS_PER_YEAR = 365;
285
285
  var CONSENT_COOKIE_MAX_AGE_SEC = SECONDS_PER_MINUTE * MINUTES_PER_HOUR * HOURS_PER_DAY * DAYS_PER_YEAR;
286
286
  var CONSENT_SESSION_STORAGE_KEY = "ffid_consent_state";
287
+ var CONSENT_DISMISSAL_TIMESTAMP_KEY = "ffid_consent_dismissed_at";
287
288
  function hasDocument() {
288
289
  return typeof document !== "undefined";
289
290
  }
@@ -374,6 +375,39 @@ function clearConsentSessionMirror() {
374
375
  } catch {
375
376
  }
376
377
  }
378
+ function readConsentDismissalTimestamp() {
379
+ if (!hasSessionStorage()) return null;
380
+ try {
381
+ const raw = sessionStorage.getItem(CONSENT_DISMISSAL_TIMESTAMP_KEY);
382
+ if (!raw) return null;
383
+ const parsed = Number(raw);
384
+ const CLOCK_SKEW_GRACE_MS = 6e4;
385
+ if (!Number.isFinite(parsed) || parsed < 0 || parsed > Date.now() + CLOCK_SKEW_GRACE_MS) {
386
+ clearConsentDismissalTimestamp();
387
+ return null;
388
+ }
389
+ return parsed;
390
+ } catch {
391
+ return null;
392
+ }
393
+ }
394
+ function writeConsentDismissalTimestamp(nowMs = Date.now()) {
395
+ if (!Number.isFinite(nowMs) || nowMs < 0) return false;
396
+ if (!hasSessionStorage()) return false;
397
+ try {
398
+ sessionStorage.setItem(CONSENT_DISMISSAL_TIMESTAMP_KEY, String(nowMs));
399
+ return true;
400
+ } catch {
401
+ return false;
402
+ }
403
+ }
404
+ function clearConsentDismissalTimestamp() {
405
+ if (!hasSessionStorage()) return;
406
+ try {
407
+ sessionStorage.removeItem(CONSENT_DISMISSAL_TIMESTAMP_KEY);
408
+ } catch {
409
+ }
410
+ }
377
411
 
378
412
  // src/consent/storage/device-id.ts
379
413
  var DEVICE_ID_LOCAL_STORAGE_KEY = "ffid_device_id";
@@ -1014,6 +1048,8 @@ var DEFAULT_MERGE_WARNING_MESSAGES = {
1014
1048
  shared_device_detected: "\u3053\u306E\u7AEF\u672B\u306F\u5225\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u3067\u3082\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u3059\u3002Cookie \u8A2D\u5B9A\u306F\u30A2\u30AB\u30A6\u30F3\u30C8\u3054\u3068\u306B\u4FDD\u5B58\u3055\u308C\u3066\u3044\u307E\u3059",
1015
1049
  drift_detected: "\u4FDD\u5B58\u3055\u308C\u3066\u3044\u305F\u8A2D\u5B9A\u3068\u7570\u306A\u308B\u9805\u76EE\u304C\u3042\u3063\u305F\u305F\u3081\u3001\u65B0\u3057\u304F\u8A18\u9332\u3055\u308C\u307E\u3057\u305F"
1016
1050
  };
1051
+ var DEFAULT_DISMISSAL_COOLDOWN_MINUTES = 30;
1052
+ var MS_PER_MINUTE = 6e4;
1017
1053
  function applyChanges(base, changes) {
1018
1054
  return {
1019
1055
  necessary: true,
@@ -1032,9 +1068,17 @@ function FFIDAnalyticsProvider({
1032
1068
  onConsentChange,
1033
1069
  onError,
1034
1070
  autoShowBanner = true,
1071
+ dismissalCooldownMinutes = DEFAULT_DISMISSAL_COOLDOWN_MINUTES,
1035
1072
  fetchImpl,
1036
1073
  children
1037
1074
  }) {
1075
+ const cooldownMs = Number.isFinite(dismissalCooldownMinutes) && dismissalCooldownMinutes > 0 ? dismissalCooldownMinutes * MS_PER_MINUTE : 0;
1076
+ const isWithinDismissalCooldown = react.useCallback(() => {
1077
+ if (cooldownMs <= 0) return false;
1078
+ const dismissedAt = readConsentDismissalTimestamp();
1079
+ if (dismissedAt === null) return false;
1080
+ return Date.now() - dismissedAt < cooldownMs;
1081
+ }, [cooldownMs]);
1038
1082
  const [state, setState] = react.useState(
1039
1083
  FFID_CONSENT_NOT_DECIDED_STATE
1040
1084
  );
@@ -1145,7 +1189,7 @@ function FFIDAnalyticsProvider({
1145
1189
  applyCategoriesSideEffects(result.value.categories);
1146
1190
  writeConsentSessionMirror(result.value.categories);
1147
1191
  setIsLoading(false);
1148
- if (!result.value.hasDecided && autoShowBanner) {
1192
+ if (!result.value.hasDecided && autoShowBanner && !isWithinDismissalCooldown()) {
1149
1193
  setIsBannerOpen(true);
1150
1194
  }
1151
1195
  if (result.value.needsRenewal && autoShowBanner) {
@@ -1273,7 +1317,10 @@ function FFIDAnalyticsProvider({
1273
1317
  persistCategories
1274
1318
  ]);
1275
1319
  const openBanner = react.useCallback(() => setIsBannerOpen(true), []);
1276
- const closeBanner = react.useCallback(() => setIsBannerOpen(false), []);
1320
+ const closeBanner = react.useCallback(() => {
1321
+ if (cooldownMs > 0) writeConsentDismissalTimestamp();
1322
+ setIsBannerOpen(false);
1323
+ }, [cooldownMs]);
1277
1324
  const openPreferences = react.useCallback(async () => {
1278
1325
  if (!categoryMetadata) {
1279
1326
  const client = clientRef.current;
@@ -1407,7 +1454,6 @@ function FFIDCookieBanner({
1407
1454
  style
1408
1455
  }) {
1409
1456
  const {
1410
- state,
1411
1457
  isBannerOpen,
1412
1458
  acceptAll,
1413
1459
  acceptNecessaryOnly,
@@ -1415,7 +1461,7 @@ function FFIDCookieBanner({
1415
1461
  closeBanner,
1416
1462
  error
1417
1463
  } = useFFIDConsent();
1418
- if (!isBannerOpen && state.hasDecided && !state.needsRenewal) return null;
1464
+ if (!isBannerOpen) return null;
1419
1465
  return /* @__PURE__ */ jsxRuntime.jsxs(
1420
1466
  "div",
1421
1467
  {
@@ -1795,6 +1841,7 @@ function FFIDCookieLink({
1795
1841
  exports.ALL_DENIED_EXCEPT_NECESSARY = ALL_DENIED_EXCEPT_NECESSARY;
1796
1842
  exports.CONSENT_COOKIE_MAX_AGE_SEC = CONSENT_COOKIE_MAX_AGE_SEC;
1797
1843
  exports.CONSENT_COOKIE_NAME = CONSENT_COOKIE_NAME;
1844
+ exports.CONSENT_DISMISSAL_TIMESTAMP_KEY = CONSENT_DISMISSAL_TIMESTAMP_KEY;
1798
1845
  exports.CONSENT_SESSION_STORAGE_KEY = CONSENT_SESSION_STORAGE_KEY;
1799
1846
  exports.COOKIE_VERSION = COOKIE_VERSION;
1800
1847
  exports.DEFAULT_CONSENT_ERROR_MESSAGES = DEFAULT_CONSENT_ERROR_MESSAGES;
@@ -1829,6 +1876,7 @@ exports.PostConsentWireSchema = PostConsentWireSchema;
1829
1876
  exports.PostSyncRequestSchema = PostSyncRequestSchema;
1830
1877
  exports.PostSyncWireSchema = PostSyncWireSchema;
1831
1878
  exports.PostWithdrawWireSchema = PostWithdrawWireSchema;
1879
+ exports.clearConsentDismissalTimestamp = clearConsentDismissalTimestamp;
1832
1880
  exports.clearConsentSessionMirror = clearConsentSessionMirror;
1833
1881
  exports.clearDeviceId = clearDeviceId;
1834
1882
  exports.createConsentClient = createConsentClient;
@@ -1846,8 +1894,10 @@ exports.mapMeWireToState = mapMeWireToState;
1846
1894
  exports.mapSyncWireToResult = mapSyncWireToResult;
1847
1895
  exports.mapWithdrawWireToState = mapWithdrawWireToState;
1848
1896
  exports.readConsentCookie = readConsentCookie;
1897
+ exports.readConsentDismissalTimestamp = readConsentDismissalTimestamp;
1849
1898
  exports.readConsentSessionMirror = readConsentSessionMirror;
1850
1899
  exports.useFFIDConsent = useFFIDConsent;
1851
1900
  exports.useFFIDConsentPreferences = useFFIDConsentPreferences;
1852
1901
  exports.writeConsentCookie = writeConsentCookie;
1902
+ exports.writeConsentDismissalTimestamp = writeConsentDismissalTimestamp;
1853
1903
  exports.writeConsentSessionMirror = writeConsentSessionMirror;
@@ -840,7 +840,7 @@ function createProfileMethods(deps) {
840
840
  }
841
841
 
842
842
  // src/client/version-check.ts
843
- var SDK_VERSION = "5.1.0";
843
+ var SDK_VERSION = "5.2.1";
844
844
  var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
845
845
  var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
846
846
  function sdkHeaders() {
@@ -1,34 +1,34 @@
1
1
  'use strict';
2
2
 
3
- var chunk7IOAHDFM_cjs = require('../chunk-7IOAHDFM.cjs');
3
+ var chunkZ4D37JR3_cjs = require('../chunk-Z4D37JR3.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "FFIDAnnouncementBadge", {
8
8
  enumerable: true,
9
- get: function () { return chunk7IOAHDFM_cjs.FFIDAnnouncementBadge; }
9
+ get: function () { return chunkZ4D37JR3_cjs.FFIDAnnouncementBadge; }
10
10
  });
11
11
  Object.defineProperty(exports, "FFIDAnnouncementList", {
12
12
  enumerable: true,
13
- get: function () { return chunk7IOAHDFM_cjs.FFIDAnnouncementList; }
13
+ get: function () { return chunkZ4D37JR3_cjs.FFIDAnnouncementList; }
14
14
  });
15
15
  Object.defineProperty(exports, "FFIDInquiryForm", {
16
16
  enumerable: true,
17
- get: function () { return chunk7IOAHDFM_cjs.FFIDInquiryForm; }
17
+ get: function () { return chunkZ4D37JR3_cjs.FFIDInquiryForm; }
18
18
  });
19
19
  Object.defineProperty(exports, "FFIDLoginButton", {
20
20
  enumerable: true,
21
- get: function () { return chunk7IOAHDFM_cjs.FFIDLoginButton; }
21
+ get: function () { return chunkZ4D37JR3_cjs.FFIDLoginButton; }
22
22
  });
23
23
  Object.defineProperty(exports, "FFIDOrganizationSwitcher", {
24
24
  enumerable: true,
25
- get: function () { return chunk7IOAHDFM_cjs.FFIDOrganizationSwitcher; }
25
+ get: function () { return chunkZ4D37JR3_cjs.FFIDOrganizationSwitcher; }
26
26
  });
27
27
  Object.defineProperty(exports, "FFIDSubscriptionBadge", {
28
28
  enumerable: true,
29
- get: function () { return chunk7IOAHDFM_cjs.FFIDSubscriptionBadge; }
29
+ get: function () { return chunkZ4D37JR3_cjs.FFIDSubscriptionBadge; }
30
30
  });
31
31
  Object.defineProperty(exports, "FFIDUserMenu", {
32
32
  enumerable: true,
33
- get: function () { return chunk7IOAHDFM_cjs.FFIDUserMenu; }
33
+ get: function () { return chunkZ4D37JR3_cjs.FFIDUserMenu; }
34
34
  });
@@ -1 +1 @@
1
- export { FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDSubscriptionBadge, FFIDUserMenu } from '../chunk-Y4JGEGPS.js';
1
+ export { FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDSubscriptionBadge, FFIDUserMenu } from '../chunk-GBQGMXBM.js';