@superbright/indexeddb-orm 1.0.27 → 1.0.29

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.
@@ -1,2 +1,2 @@
1
- "use strict";var h=Object.create;var y=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var M=(t,o,r,l)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of w(o))!C.call(t,i)&&i!==r&&y(t,i,{get:()=>o[i],enumerable:!(l=k(o,i))||l.enumerable});return t};var m=(t,o,r)=>(r=t!=null?h(A(t)):{},M(o||!t||!t.__esModule?y(r,"default",{value:t,enumerable:!0}):r,t));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const R=require("react/jsx-runtime"),a=require("react"),v=require("./generateUserUUID.cjs"),P=a.createContext({track:()=>{},identify:()=>{}}),_=({children:t,mixpanelToken:o,posthogKey:r,posthogHost:l,envMode:i})=>{const d=a.useRef(null),p=a.useRef(null),f=a.useCallback((n,s)=>{var c,e;(c=d.current)==null||c.track(n,s),(e=p.current)==null||e.capture(n,s)},[]),g=a.useCallback(n=>{var s,c;(s=d.current)==null||s.identify(n),(c=p.current)==null||c.identify(n)},[]);a.useEffect(()=>{const n=(i??"production").toLowerCase(),s=n==="development"||n==="staging",c=n==="development";if(o)(async()=>{try{const{default:e}=await import("mixpanel-browser");e.init(o,{debug:c,persistence:"localStorage",autocapture:{pageview:"full-url",click:!0,input:!0,rage_click:!0,scroll:!0,submit:!0,capture_text_content:!1}}),d.current=e;const u=await v.generateUserUUID;e.identify(u)}catch(e){console.error("❌ Failed to initialize Mixpanel:",e)}})();else{const e="Mixpanel token not set. Pass a mixpanelToken prop to AnalyticsProvider.";s?console.error(`❌ ${e}`):console.warn(`⚠️ ${e}`)}r?(async()=>{try{const u=(await import("posthog-js")).default;u.init(r,{api_host:l||"https://us.i.posthog.com",loaded:U=>{c&&U.debug()}}),p.current=u;const x=await v.generateUserUUID;u.identify(x)}catch(e){console.error("❌ Failed to initialize PostHog:",e)}})():s&&console.warn("⚠️ PostHog key not set. Pass a posthogKey prop to AnalyticsProvider.")},[i,o,r,l]);const b=a.useMemo(()=>({track:f,identify:g}),[f,g]);return R.jsx(P.Provider,{value:b,children:t})},j=()=>a.useContext(P);exports.AnalyticsProvider=_;exports.useAnalytics=j;
1
+ "use strict";var k=Object.create;var m=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var M=(o,e,n,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of v(e))!C.call(o,s)&&s!==n&&m(o,s,{get:()=>e[s],enumerable:!(l=A(e,s))||l.enumerable});return o};var b=(o,e,n)=>(n=o!=null?k(w(o)):{},M(e||!o||!o.__esModule?m(n,"default",{value:o,enumerable:!0}):n,o));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const R=require("react/jsx-runtime"),a=require("react"),P=a.createContext({track:()=>{},identify:()=>{}}),j=({children:o,visitor_uuid:e,mixpanelToken:n,posthogKey:l,posthogHost:s,envMode:f})=>{const u=a.useRef(null),d=a.useRef(null),y=a.useCallback((r,c)=>{var i,t;(i=u.current)==null||i.track(r,c),(t=d.current)==null||t.capture(r,c)},[]),g=a.useCallback(r=>{var c,i;(c=u.current)==null||c.identify(r),(i=d.current)==null||i.identify(r)},[]);a.useEffect(()=>{if(!e)return;const r=(f??"production").toLowerCase(),c=r==="development"||r==="staging",i=r==="development";if(n)(async()=>{try{const{default:t}=await import("mixpanel-browser");t.init(n,{debug:i,persistence:"localStorage",autocapture:{pageview:"full-url",click:!0,input:!0,rage_click:!0,scroll:!0,submit:!0,capture_text_content:!1}}),u.current=t,t.identify(e)}catch(t){console.error("❌ Failed to initialize Mixpanel:",t)}})();else{const t="Mixpanel token not set. Pass a mixpanelToken prop to AnalyticsProvider.";c?console.error(`❌ ${t}`):console.warn(`⚠️ ${t}`)}l?(async()=>{try{const p=(await import("posthog-js")).default;p.init(l,{api_host:s||"https://us.i.posthog.com",bootstrap:{distinctID:e},loaded:h=>{i&&h.debug()}}),d.current=p,p.identify(e)}catch(t){console.error("❌ Failed to initialize PostHog:",t)}})():c&&console.warn("⚠️ PostHog key not set. Pass a posthogKey prop to AnalyticsProvider.")},[e,f,n,l,s]);const x=a.useMemo(()=>({track:y,identify:g}),[y,g]);return R.jsx(P.Provider,{value:x,children:o})},z=()=>a.useContext(P);exports.AnalyticsProvider=j;exports.useAnalytics=z;
2
2
  //# sourceMappingURL=AnalyticsProvider.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsProvider.cjs","sources":["../../../src/features/analytics/AnalyticsProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\n\nimport { generateUserUUID } from \"./generateUserUUID\";\n\ntype MixpanelInstance = typeof import(\"mixpanel-browser\")[\"default\"];\n\ninterface AnalyticsContextValue {\n track: (eventName: string, payload?: Record<string, any>) => void;\n identify: (userId: string) => void;\n}\n\nconst AnalyticsContext = createContext<AnalyticsContextValue>({\n track: () => undefined,\n identify: () => undefined,\n});\n\nexport interface AnalyticsProviderProps {\n children: React.ReactNode;\n mixpanelToken?: string;\n posthogKey?: string;\n posthogHost?: string;\n envMode?: string;\n}\n\nexport const AnalyticsProvider = ({\n children,\n mixpanelToken,\n posthogKey,\n posthogHost,\n envMode,\n}: AnalyticsProviderProps) => {\n const mixpanelRef = useRef<MixpanelInstance | null>(null);\n const posthogRef = useRef<any>(null);\n\n const track = useCallback(\n (eventName: string, payload?: Record<string, any>) => {\n mixpanelRef.current?.track(eventName, payload);\n posthogRef.current?.capture(eventName, payload);\n },\n [],\n );\n\n const identify = useCallback((userId: string) => {\n mixpanelRef.current?.identify(userId);\n posthogRef.current?.identify(userId);\n }, []);\n\n useEffect(() => {\n const normalizedMode = (envMode ?? \"production\").toLowerCase();\n const shouldWarnLoudly =\n normalizedMode === \"development\" || normalizedMode === \"staging\";\n const debugEnabled = normalizedMode === \"development\";\n\n // ── Mixpanel ──────────────────────────────────────────────\n if (mixpanelToken) {\n (async () => {\n try {\n const { default: mixpanel } = await import(\"mixpanel-browser\");\n mixpanel.init(mixpanelToken, {\n debug: debugEnabled,\n persistence: \"localStorage\",\n autocapture: {\n pageview: \"full-url\",\n click: true,\n input: true,\n rage_click: true,\n scroll: true,\n submit: true,\n capture_text_content: false,\n },\n });\n mixpanelRef.current = mixpanel;\n\n const uuid = await generateUserUUID;\n mixpanel.identify(uuid);\n } catch (err) {\n console.error(\"❌ Failed to initialize Mixpanel:\", err);\n }\n })();\n } else {\n const msg =\n \"Mixpanel token not set. Pass a mixpanelToken prop to AnalyticsProvider.\";\n if (shouldWarnLoudly) console.error(`❌ ${msg}`);\n else console.warn(`⚠️ ${msg}`);\n }\n\n // ── PostHog ───────────────────────────────────────────────\n if (posthogKey) {\n (async () => {\n try {\n const posthogModule = await import(\"posthog-js\");\n const posthog = posthogModule.default;\n posthog.init(posthogKey, {\n api_host: posthogHost || \"https://us.i.posthog.com\",\n loaded: (ph) => {\n if (debugEnabled) ph.debug();\n },\n });\n posthogRef.current = posthog;\n\n const uuid = await generateUserUUID;\n posthog.identify(uuid);\n } catch (err) {\n console.error(\"❌ Failed to initialize PostHog:\", err);\n }\n })();\n } else if (shouldWarnLoudly) {\n console.warn(\n \"⚠️ PostHog key not set. Pass a posthogKey prop to AnalyticsProvider.\",\n );\n }\n }, [envMode, mixpanelToken, posthogKey, posthogHost]);\n\n const value = useMemo(() => ({ track, identify }), [track, identify]);\n\n return (\n <AnalyticsContext.Provider value={value}>\n {children}\n </AnalyticsContext.Provider>\n );\n};\n\nexport const useAnalytics = () => useContext(AnalyticsContext);\n\n/** @deprecated Use `useAnalytics()` instead. */\nexport const useMixpanel = () => useContext(AnalyticsContext);\n\n/** @deprecated Use `AnalyticsProvider` instead. */\nexport const MixpanelProvider = ({\n children,\n token,\n envMode,\n}: {\n children: React.ReactNode;\n token?: string;\n envMode?: string;\n}) => (\n <AnalyticsProvider mixpanelToken={token} envMode={envMode}>\n {children}\n </AnalyticsProvider>\n);\n"],"names":["AnalyticsContext","createContext","AnalyticsProvider","children","mixpanelToken","posthogKey","posthogHost","envMode","mixpanelRef","useRef","posthogRef","track","useCallback","eventName","payload","_a","_b","identify","userId","useEffect","normalizedMode","shouldWarnLoudly","debugEnabled","mixpanel","uuid","generateUserUUID","err","msg","posthog","ph","value","useMemo","jsx","useAnalytics","useContext"],"mappings":"unBAkBMA,EAAmBC,EAAAA,cAAqC,CAC5D,MAAO,IAAA,GACP,SAAU,IAAA,EACZ,CAAC,EAUYC,EAAoB,CAAC,CAChC,SAAAC,EACA,cAAAC,EACA,WAAAC,EACA,YAAAC,EACA,QAAAC,CACF,IAA8B,CAC5B,MAAMC,EAAcC,EAAAA,OAAgC,IAAI,EAClDC,EAAaD,EAAAA,OAAY,IAAI,EAE7BE,EAAQC,EAAAA,YACZ,CAACC,EAAmBC,IAAkC,UACpDC,EAAAP,EAAY,UAAZ,MAAAO,EAAqB,MAAMF,EAAWC,IACtCE,EAAAN,EAAW,UAAX,MAAAM,EAAoB,QAAQH,EAAWC,EACzC,EACA,CAAA,CAAC,EAGGG,EAAWL,cAAaM,GAAmB,UAC/CH,EAAAP,EAAY,UAAZ,MAAAO,EAAqB,SAASG,IAC9BF,EAAAN,EAAW,UAAX,MAAAM,EAAoB,SAASE,EAC/B,EAAG,CAAA,CAAE,EAELC,EAAAA,UAAU,IAAM,CACd,MAAMC,GAAkBb,GAAW,cAAc,YAAA,EAC3Cc,EACJD,IAAmB,eAAiBA,IAAmB,UACnDE,EAAeF,IAAmB,cAGxC,GAAIhB,GACD,SAAY,CACX,GAAI,CACF,KAAM,CAAE,QAASmB,GAAa,KAAM,QAAO,kBAAkB,EAC7DA,EAAS,KAAKnB,EAAe,CAC3B,MAAOkB,EACP,YAAa,eACb,YAAa,CACX,SAAU,WACV,MAAO,GACP,MAAO,GACP,WAAY,GACZ,OAAQ,GACR,OAAQ,GACR,qBAAsB,EAAA,CACxB,CACD,EACDd,EAAY,QAAUe,EAEtB,MAAMC,EAAO,MAAMC,EAAAA,iBACnBF,EAAS,SAASC,CAAI,CACxB,OAASE,EAAK,CACZ,QAAQ,MAAM,mCAAoCA,CAAG,CACvD,CACF,GAAA,MACK,CACL,MAAMC,EACJ,0EACEN,EAAkB,QAAQ,MAAM,KAAKM,CAAG,EAAE,EACzC,QAAQ,KAAK,MAAMA,CAAG,EAAE,CAC/B,CAGItB,GACD,SAAY,CACX,GAAI,CAEF,MAAMuB,GADgB,KAAM,QAAO,YAAY,GACjB,QAC9BA,EAAQ,KAAKvB,EAAY,CACvB,SAAUC,GAAe,2BACzB,OAASuB,GAAO,CACVP,KAAiB,MAAA,CACvB,CAAA,CACD,EACDZ,EAAW,QAAUkB,EAErB,MAAMJ,EAAO,MAAMC,EAAAA,iBACnBG,EAAQ,SAASJ,CAAI,CACvB,OAASE,EAAK,CACZ,QAAQ,MAAM,kCAAmCA,CAAG,CACtD,CACF,GAAA,EACSL,GACT,QAAQ,KACN,sEAAA,CAGN,EAAG,CAACd,EAASH,EAAeC,EAAYC,CAAW,CAAC,EAEpD,MAAMwB,EAAQC,UAAQ,KAAO,CAAE,MAAApB,EAAO,SAAAM,IAAa,CAACN,EAAOM,CAAQ,CAAC,EAEpE,OACEe,EAAAA,IAAChC,EAAiB,SAAjB,CAA0B,MAAA8B,EACxB,SAAA3B,CAAA,CACH,CAEJ,EAEa8B,EAAe,IAAMC,EAAAA,WAAWlC,CAAgB"}
1
+ {"version":3,"file":"AnalyticsProvider.cjs","sources":["../../../src/features/analytics/AnalyticsProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\n\ntype MixpanelInstance = typeof import(\"mixpanel-browser\")[\"default\"];\n\ninterface AnalyticsContextValue {\n track: (eventName: string, payload?: Record<string, any>) => void;\n identify: (userId: string) => void;\n}\n\nconst AnalyticsContext = createContext<AnalyticsContextValue>({\n track: () => undefined,\n identify: () => undefined,\n});\n\nexport interface AnalyticsProviderProps {\n children: React.ReactNode;\n visitor_uuid?: string;\n mixpanelToken?: string;\n posthogKey?: string;\n posthogHost?: string;\n envMode?: string;\n}\n\nexport const AnalyticsProvider = ({\n children,\n visitor_uuid,\n mixpanelToken,\n posthogKey,\n posthogHost,\n envMode,\n}: AnalyticsProviderProps) => {\n const mixpanelRef = useRef<MixpanelInstance | null>(null);\n const posthogRef = useRef<any>(null);\n\n const track = useCallback(\n (eventName: string, payload?: Record<string, any>) => {\n mixpanelRef.current?.track(eventName, payload);\n posthogRef.current?.capture(eventName, payload);\n },\n [],\n );\n\n const identify = useCallback((userId: string) => {\n mixpanelRef.current?.identify(userId);\n posthogRef.current?.identify(userId);\n }, []);\n\n useEffect(() => {\n if (!visitor_uuid) return;\n\n const normalizedMode = (envMode ?? \"production\").toLowerCase();\n const shouldWarnLoudly =\n normalizedMode === \"development\" || normalizedMode === \"staging\";\n const debugEnabled = normalizedMode === \"development\";\n\n // ── Mixpanel ──────────────────────────────────────────────\n if (mixpanelToken) {\n (async () => {\n try {\n const { default: mixpanel } = await import(\"mixpanel-browser\");\n mixpanel.init(mixpanelToken, {\n debug: debugEnabled,\n persistence: \"localStorage\",\n autocapture: {\n pageview: \"full-url\",\n click: true,\n input: true,\n rage_click: true,\n scroll: true,\n submit: true,\n capture_text_content: false,\n },\n });\n mixpanelRef.current = mixpanel;\n mixpanel.identify(visitor_uuid);\n } catch (err) {\n console.error(\"❌ Failed to initialize Mixpanel:\", err);\n }\n })();\n } else {\n const msg =\n \"Mixpanel token not set. Pass a mixpanelToken prop to AnalyticsProvider.\";\n if (shouldWarnLoudly) console.error(`❌ ${msg}`);\n else console.warn(`⚠️ ${msg}`);\n }\n\n // ── PostHog ───────────────────────────────────────────────\n if (posthogKey) {\n (async () => {\n try {\n const posthogModule = await import(\"posthog-js\");\n const posthog = posthogModule.default;\n posthog.init(posthogKey, {\n api_host: posthogHost || \"https://us.i.posthog.com\",\n bootstrap: { distinctID: visitor_uuid },\n loaded: (ph) => {\n if (debugEnabled) ph.debug();\n },\n });\n posthogRef.current = posthog;\n posthog.identify(visitor_uuid);\n } catch (err) {\n console.error(\"❌ Failed to initialize PostHog:\", err);\n }\n })();\n } else if (shouldWarnLoudly) {\n console.warn(\n \"⚠️ PostHog key not set. Pass a posthogKey prop to AnalyticsProvider.\",\n );\n }\n }, [visitor_uuid, envMode, mixpanelToken, posthogKey, posthogHost]);\n\n const value = useMemo(() => ({ track, identify }), [track, identify]);\n\n return (\n <AnalyticsContext.Provider value={value}>\n {children}\n </AnalyticsContext.Provider>\n );\n};\n\nexport const useAnalytics = () => useContext(AnalyticsContext);\n\n/** @deprecated Use `useAnalytics()` instead. */\nexport const useMixpanel = () => useContext(AnalyticsContext);\n\n/** @deprecated Use `AnalyticsProvider` instead. */\nexport const MixpanelProvider = ({\n children,\n token,\n envMode,\n}: {\n children: React.ReactNode;\n token?: string;\n envMode?: string;\n}) => (\n <AnalyticsProvider mixpanelToken={token} envMode={envMode}>\n {children}\n </AnalyticsProvider>\n);\n"],"names":["AnalyticsContext","createContext","AnalyticsProvider","children","visitor_uuid","mixpanelToken","posthogKey","posthogHost","envMode","mixpanelRef","useRef","posthogRef","track","useCallback","eventName","payload","_a","_b","identify","userId","useEffect","normalizedMode","shouldWarnLoudly","debugEnabled","mixpanel","err","msg","posthog","ph","value","useMemo","jsx","useAnalytics","useContext"],"mappings":"mlBAgBMA,EAAmBC,EAAAA,cAAqC,CAC5D,MAAO,IAAA,GACP,SAAU,IAAA,EACZ,CAAC,EAWYC,EAAoB,CAAC,CAChC,SAAAC,EACA,aAAAC,EACA,cAAAC,EACA,WAAAC,EACA,YAAAC,EACA,QAAAC,CACF,IAA8B,CAC5B,MAAMC,EAAcC,EAAAA,OAAgC,IAAI,EAClDC,EAAaD,EAAAA,OAAY,IAAI,EAE7BE,EAAQC,EAAAA,YACZ,CAACC,EAAmBC,IAAkC,UACpDC,EAAAP,EAAY,UAAZ,MAAAO,EAAqB,MAAMF,EAAWC,IACtCE,EAAAN,EAAW,UAAX,MAAAM,EAAoB,QAAQH,EAAWC,EACzC,EACA,CAAA,CAAC,EAGGG,EAAWL,cAAaM,GAAmB,UAC/CH,EAAAP,EAAY,UAAZ,MAAAO,EAAqB,SAASG,IAC9BF,EAAAN,EAAW,UAAX,MAAAM,EAAoB,SAASE,EAC/B,EAAG,CAAA,CAAE,EAELC,EAAAA,UAAU,IAAM,CACd,GAAI,CAAChB,EAAc,OAEnB,MAAMiB,GAAkBb,GAAW,cAAc,YAAA,EAC3Cc,EACJD,IAAmB,eAAiBA,IAAmB,UACnDE,EAAeF,IAAmB,cAGxC,GAAIhB,GACD,SAAY,CACX,GAAI,CACF,KAAM,CAAE,QAASmB,GAAa,KAAM,QAAO,kBAAkB,EAC7DA,EAAS,KAAKnB,EAAe,CAC3B,MAAOkB,EACP,YAAa,eACb,YAAa,CACX,SAAU,WACV,MAAO,GACP,MAAO,GACP,WAAY,GACZ,OAAQ,GACR,OAAQ,GACR,qBAAsB,EAAA,CACxB,CACD,EACDd,EAAY,QAAUe,EACtBA,EAAS,SAASpB,CAAY,CAChC,OAASqB,EAAK,CACZ,QAAQ,MAAM,mCAAoCA,CAAG,CACvD,CACF,GAAA,MACK,CACL,MAAMC,EACJ,0EACEJ,EAAkB,QAAQ,MAAM,KAAKI,CAAG,EAAE,EACzC,QAAQ,KAAK,MAAMA,CAAG,EAAE,CAC/B,CAGIpB,GACD,SAAY,CACX,GAAI,CAEF,MAAMqB,GADgB,KAAM,QAAO,YAAY,GACjB,QAC9BA,EAAQ,KAAKrB,EAAY,CACvB,SAAUC,GAAe,2BACzB,UAAW,CAAE,WAAYH,CAAA,EACzB,OAASwB,GAAO,CACVL,KAAiB,MAAA,CACvB,CAAA,CACD,EACDZ,EAAW,QAAUgB,EACrBA,EAAQ,SAASvB,CAAY,CAC/B,OAASqB,EAAK,CACZ,QAAQ,MAAM,kCAAmCA,CAAG,CACtD,CACF,GAAA,EACSH,GACT,QAAQ,KACN,sEAAA,CAGN,EAAG,CAAClB,EAAcI,EAASH,EAAeC,EAAYC,CAAW,CAAC,EAElE,MAAMsB,EAAQC,UAAQ,KAAO,CAAE,MAAAlB,EAAO,SAAAM,IAAa,CAACN,EAAOM,CAAQ,CAAC,EAEpE,OACEa,EAAAA,IAAC/B,EAAiB,SAAjB,CAA0B,MAAA6B,EACxB,SAAA1B,CAAA,CACH,CAEJ,EAEa6B,EAAe,IAAMC,EAAAA,WAAWjC,CAAgB"}
@@ -5,12 +5,13 @@ interface AnalyticsContextValue {
5
5
  }
6
6
  export interface AnalyticsProviderProps {
7
7
  children: React.ReactNode;
8
+ visitor_uuid?: string;
8
9
  mixpanelToken?: string;
9
10
  posthogKey?: string;
10
11
  posthogHost?: string;
11
12
  envMode?: string;
12
13
  }
13
- export declare const AnalyticsProvider: ({ children, mixpanelToken, posthogKey, posthogHost, envMode, }: AnalyticsProviderProps) => import("react/jsx-runtime").JSX.Element;
14
+ export declare const AnalyticsProvider: ({ children, visitor_uuid, mixpanelToken, posthogKey, posthogHost, envMode, }: AnalyticsProviderProps) => import("react/jsx-runtime").JSX.Element;
14
15
  export declare const useAnalytics: () => AnalyticsContextValue;
15
16
  /** @deprecated Use `useAnalytics()` instead. */
16
17
  export declare const useMixpanel: () => AnalyticsContextValue;
@@ -1,36 +1,37 @@
1
- import { jsx as P } from "react/jsx-runtime";
2
- import { useContext as k, useRef as f, useCallback as g, useEffect as b, useMemo as A, createContext as C } from "react";
3
- import { generateUserUUID as m } from "./generateUserUUID.mjs";
4
- const y = C({
1
+ import { jsx as b } from "react/jsx-runtime";
2
+ import { useContext as k, useRef as y, useCallback as g, useEffect as w, useMemo as A, createContext as C } from "react";
3
+ const m = C({
5
4
  track: () => {
6
5
  },
7
6
  identify: () => {
8
7
  }
9
- }), R = ({
8
+ }), z = ({
10
9
  children: x,
11
- mixpanelToken: i,
10
+ visitor_uuid: r,
11
+ mixpanelToken: c,
12
12
  posthogKey: s,
13
- posthogHost: l,
14
- envMode: u
13
+ posthogHost: u,
14
+ envMode: p
15
15
  }) => {
16
- const c = f(null), a = f(null), d = g(
16
+ const i = y(null), a = y(null), d = g(
17
17
  (e, o) => {
18
- var r, t;
19
- (r = c.current) == null || r.track(e, o), (t = a.current) == null || t.capture(e, o);
18
+ var n, t;
19
+ (n = i.current) == null || n.track(e, o), (t = a.current) == null || t.capture(e, o);
20
20
  },
21
21
  []
22
- ), p = g((e) => {
23
- var o, r;
24
- (o = c.current) == null || o.identify(e), (r = a.current) == null || r.identify(e);
22
+ ), f = g((e) => {
23
+ var o, n;
24
+ (o = i.current) == null || o.identify(e), (n = a.current) == null || n.identify(e);
25
25
  }, []);
26
- b(() => {
27
- const e = (u ?? "production").toLowerCase(), o = e === "development" || e === "staging", r = e === "development";
28
- if (i)
26
+ w(() => {
27
+ if (!r) return;
28
+ const e = (p ?? "production").toLowerCase(), o = e === "development" || e === "staging", n = e === "development";
29
+ if (c)
29
30
  (async () => {
30
31
  try {
31
32
  const { default: t } = await import("mixpanel-browser");
32
- t.init(i, {
33
- debug: r,
33
+ t.init(c, {
34
+ debug: n,
34
35
  persistence: "localStorage",
35
36
  autocapture: {
36
37
  pageview: "full-url",
@@ -41,9 +42,7 @@ const y = C({
41
42
  submit: !0,
42
43
  capture_text_content: !1
43
44
  }
44
- }), c.current = t;
45
- const n = await m;
46
- t.identify(n);
45
+ }), i.current = t, t.identify(r);
47
46
  } catch (t) {
48
47
  console.error("❌ Failed to initialize Mixpanel:", t);
49
48
  }
@@ -54,27 +53,26 @@ const y = C({
54
53
  }
55
54
  s ? (async () => {
56
55
  try {
57
- const n = (await import("posthog-js")).default;
58
- n.init(s, {
59
- api_host: l || "https://us.i.posthog.com",
60
- loaded: (w) => {
61
- r && w.debug();
56
+ const l = (await import("posthog-js")).default;
57
+ l.init(s, {
58
+ api_host: u || "https://us.i.posthog.com",
59
+ bootstrap: { distinctID: r },
60
+ loaded: (P) => {
61
+ n && P.debug();
62
62
  }
63
- }), a.current = n;
64
- const v = await m;
65
- n.identify(v);
63
+ }), a.current = l, l.identify(r);
66
64
  } catch (t) {
67
65
  console.error("❌ Failed to initialize PostHog:", t);
68
66
  }
69
67
  })() : o && console.warn(
70
68
  "⚠️ PostHog key not set. Pass a posthogKey prop to AnalyticsProvider."
71
69
  );
72
- }, [u, i, s, l]);
73
- const h = A(() => ({ track: d, identify: p }), [d, p]);
74
- return /* @__PURE__ */ P(y.Provider, { value: h, children: x });
75
- }, U = () => k(y);
70
+ }, [r, p, c, s, u]);
71
+ const h = A(() => ({ track: d, identify: f }), [d, f]);
72
+ return /* @__PURE__ */ b(m.Provider, { value: h, children: x });
73
+ }, R = () => k(m);
76
74
  export {
77
- R as AnalyticsProvider,
78
- U as useAnalytics
75
+ z as AnalyticsProvider,
76
+ R as useAnalytics
79
77
  };
80
78
  //# sourceMappingURL=AnalyticsProvider.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsProvider.mjs","sources":["../../../src/features/analytics/AnalyticsProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\n\nimport { generateUserUUID } from \"./generateUserUUID\";\n\ntype MixpanelInstance = typeof import(\"mixpanel-browser\")[\"default\"];\n\ninterface AnalyticsContextValue {\n track: (eventName: string, payload?: Record<string, any>) => void;\n identify: (userId: string) => void;\n}\n\nconst AnalyticsContext = createContext<AnalyticsContextValue>({\n track: () => undefined,\n identify: () => undefined,\n});\n\nexport interface AnalyticsProviderProps {\n children: React.ReactNode;\n mixpanelToken?: string;\n posthogKey?: string;\n posthogHost?: string;\n envMode?: string;\n}\n\nexport const AnalyticsProvider = ({\n children,\n mixpanelToken,\n posthogKey,\n posthogHost,\n envMode,\n}: AnalyticsProviderProps) => {\n const mixpanelRef = useRef<MixpanelInstance | null>(null);\n const posthogRef = useRef<any>(null);\n\n const track = useCallback(\n (eventName: string, payload?: Record<string, any>) => {\n mixpanelRef.current?.track(eventName, payload);\n posthogRef.current?.capture(eventName, payload);\n },\n [],\n );\n\n const identify = useCallback((userId: string) => {\n mixpanelRef.current?.identify(userId);\n posthogRef.current?.identify(userId);\n }, []);\n\n useEffect(() => {\n const normalizedMode = (envMode ?? \"production\").toLowerCase();\n const shouldWarnLoudly =\n normalizedMode === \"development\" || normalizedMode === \"staging\";\n const debugEnabled = normalizedMode === \"development\";\n\n // ── Mixpanel ──────────────────────────────────────────────\n if (mixpanelToken) {\n (async () => {\n try {\n const { default: mixpanel } = await import(\"mixpanel-browser\");\n mixpanel.init(mixpanelToken, {\n debug: debugEnabled,\n persistence: \"localStorage\",\n autocapture: {\n pageview: \"full-url\",\n click: true,\n input: true,\n rage_click: true,\n scroll: true,\n submit: true,\n capture_text_content: false,\n },\n });\n mixpanelRef.current = mixpanel;\n\n const uuid = await generateUserUUID;\n mixpanel.identify(uuid);\n } catch (err) {\n console.error(\"❌ Failed to initialize Mixpanel:\", err);\n }\n })();\n } else {\n const msg =\n \"Mixpanel token not set. Pass a mixpanelToken prop to AnalyticsProvider.\";\n if (shouldWarnLoudly) console.error(`❌ ${msg}`);\n else console.warn(`⚠️ ${msg}`);\n }\n\n // ── PostHog ───────────────────────────────────────────────\n if (posthogKey) {\n (async () => {\n try {\n const posthogModule = await import(\"posthog-js\");\n const posthog = posthogModule.default;\n posthog.init(posthogKey, {\n api_host: posthogHost || \"https://us.i.posthog.com\",\n loaded: (ph) => {\n if (debugEnabled) ph.debug();\n },\n });\n posthogRef.current = posthog;\n\n const uuid = await generateUserUUID;\n posthog.identify(uuid);\n } catch (err) {\n console.error(\"❌ Failed to initialize PostHog:\", err);\n }\n })();\n } else if (shouldWarnLoudly) {\n console.warn(\n \"⚠️ PostHog key not set. Pass a posthogKey prop to AnalyticsProvider.\",\n );\n }\n }, [envMode, mixpanelToken, posthogKey, posthogHost]);\n\n const value = useMemo(() => ({ track, identify }), [track, identify]);\n\n return (\n <AnalyticsContext.Provider value={value}>\n {children}\n </AnalyticsContext.Provider>\n );\n};\n\nexport const useAnalytics = () => useContext(AnalyticsContext);\n\n/** @deprecated Use `useAnalytics()` instead. */\nexport const useMixpanel = () => useContext(AnalyticsContext);\n\n/** @deprecated Use `AnalyticsProvider` instead. */\nexport const MixpanelProvider = ({\n children,\n token,\n envMode,\n}: {\n children: React.ReactNode;\n token?: string;\n envMode?: string;\n}) => (\n <AnalyticsProvider mixpanelToken={token} envMode={envMode}>\n {children}\n </AnalyticsProvider>\n);\n"],"names":["AnalyticsContext","createContext","AnalyticsProvider","children","mixpanelToken","posthogKey","posthogHost","envMode","mixpanelRef","useRef","posthogRef","track","useCallback","eventName","payload","_a","_b","identify","userId","useEffect","normalizedMode","shouldWarnLoudly","debugEnabled","mixpanel","uuid","generateUserUUID","err","msg","posthog","ph","value","useMemo","jsx","useAnalytics","useContext"],"mappings":";;;AAkBA,MAAMA,IAAmBC,EAAqC;AAAA,EAC5D,OAAO,MAAA;AAAA;AAAA,EACP,UAAU,MAAA;AAAA;AACZ,CAAC,GAUYC,IAAoB,CAAC;AAAA,EAChC,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AACF,MAA8B;AAC5B,QAAMC,IAAcC,EAAgC,IAAI,GAClDC,IAAaD,EAAY,IAAI,GAE7BE,IAAQC;AAAA,IACZ,CAACC,GAAmBC,MAAkC;;AACpD,OAAAC,IAAAP,EAAY,YAAZ,QAAAO,EAAqB,MAAMF,GAAWC,KACtCE,IAAAN,EAAW,YAAX,QAAAM,EAAoB,QAAQH,GAAWC;AAAA,IACzC;AAAA,IACA,CAAA;AAAA,EAAC,GAGGG,IAAWL,EAAY,CAACM,MAAmB;;AAC/C,KAAAH,IAAAP,EAAY,YAAZ,QAAAO,EAAqB,SAASG,KAC9BF,IAAAN,EAAW,YAAX,QAAAM,EAAoB,SAASE;AAAA,EAC/B,GAAG,CAAA,CAAE;AAEL,EAAAC,EAAU,MAAM;AACd,UAAMC,KAAkBb,KAAW,cAAc,YAAA,GAC3Cc,IACJD,MAAmB,iBAAiBA,MAAmB,WACnDE,IAAeF,MAAmB;AAGxC,QAAIhB;AACF,OAAC,YAAY;AACX,YAAI;AACF,gBAAM,EAAE,SAASmB,MAAa,MAAM,OAAO,kBAAkB;AAC7D,UAAAA,EAAS,KAAKnB,GAAe;AAAA,YAC3B,OAAOkB;AAAA,YACP,aAAa;AAAA,YACb,aAAa;AAAA,cACX,UAAU;AAAA,cACV,OAAO;AAAA,cACP,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,sBAAsB;AAAA,YAAA;AAAA,UACxB,CACD,GACDd,EAAY,UAAUe;AAEtB,gBAAMC,IAAO,MAAMC;AACnB,UAAAF,EAAS,SAASC,CAAI;AAAA,QACxB,SAASE,GAAK;AACZ,kBAAQ,MAAM,oCAAoCA,CAAG;AAAA,QACvD;AAAA,MACF,GAAA;AAAA,SACK;AACL,YAAMC,IACJ;AACF,MAAIN,IAAkB,QAAQ,MAAM,KAAKM,CAAG,EAAE,IACzC,QAAQ,KAAK,MAAMA,CAAG,EAAE;AAAA,IAC/B;AAGA,IAAItB,KACD,YAAY;AACX,UAAI;AAEF,cAAMuB,KADgB,MAAM,OAAO,YAAY,GACjB;AAC9B,QAAAA,EAAQ,KAAKvB,GAAY;AAAA,UACvB,UAAUC,KAAe;AAAA,UACzB,QAAQ,CAACuB,MAAO;AACd,YAAIP,OAAiB,MAAA;AAAA,UACvB;AAAA,QAAA,CACD,GACDZ,EAAW,UAAUkB;AAErB,cAAMJ,IAAO,MAAMC;AACnB,QAAAG,EAAQ,SAASJ,CAAI;AAAA,MACvB,SAASE,GAAK;AACZ,gBAAQ,MAAM,mCAAmCA,CAAG;AAAA,MACtD;AAAA,IACF,GAAA,IACSL,KACT,QAAQ;AAAA,MACN;AAAA,IAAA;AAAA,EAGN,GAAG,CAACd,GAASH,GAAeC,GAAYC,CAAW,CAAC;AAEpD,QAAMwB,IAAQC,EAAQ,OAAO,EAAE,OAAApB,GAAO,UAAAM,MAAa,CAACN,GAAOM,CAAQ,CAAC;AAEpE,SACE,gBAAAe,EAAChC,EAAiB,UAAjB,EAA0B,OAAA8B,GACxB,UAAA3B,EAAA,CACH;AAEJ,GAEa8B,IAAe,MAAMC,EAAWlC,CAAgB;"}
1
+ {"version":3,"file":"AnalyticsProvider.mjs","sources":["../../../src/features/analytics/AnalyticsProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\n\ntype MixpanelInstance = typeof import(\"mixpanel-browser\")[\"default\"];\n\ninterface AnalyticsContextValue {\n track: (eventName: string, payload?: Record<string, any>) => void;\n identify: (userId: string) => void;\n}\n\nconst AnalyticsContext = createContext<AnalyticsContextValue>({\n track: () => undefined,\n identify: () => undefined,\n});\n\nexport interface AnalyticsProviderProps {\n children: React.ReactNode;\n visitor_uuid?: string;\n mixpanelToken?: string;\n posthogKey?: string;\n posthogHost?: string;\n envMode?: string;\n}\n\nexport const AnalyticsProvider = ({\n children,\n visitor_uuid,\n mixpanelToken,\n posthogKey,\n posthogHost,\n envMode,\n}: AnalyticsProviderProps) => {\n const mixpanelRef = useRef<MixpanelInstance | null>(null);\n const posthogRef = useRef<any>(null);\n\n const track = useCallback(\n (eventName: string, payload?: Record<string, any>) => {\n mixpanelRef.current?.track(eventName, payload);\n posthogRef.current?.capture(eventName, payload);\n },\n [],\n );\n\n const identify = useCallback((userId: string) => {\n mixpanelRef.current?.identify(userId);\n posthogRef.current?.identify(userId);\n }, []);\n\n useEffect(() => {\n if (!visitor_uuid) return;\n\n const normalizedMode = (envMode ?? \"production\").toLowerCase();\n const shouldWarnLoudly =\n normalizedMode === \"development\" || normalizedMode === \"staging\";\n const debugEnabled = normalizedMode === \"development\";\n\n // ── Mixpanel ──────────────────────────────────────────────\n if (mixpanelToken) {\n (async () => {\n try {\n const { default: mixpanel } = await import(\"mixpanel-browser\");\n mixpanel.init(mixpanelToken, {\n debug: debugEnabled,\n persistence: \"localStorage\",\n autocapture: {\n pageview: \"full-url\",\n click: true,\n input: true,\n rage_click: true,\n scroll: true,\n submit: true,\n capture_text_content: false,\n },\n });\n mixpanelRef.current = mixpanel;\n mixpanel.identify(visitor_uuid);\n } catch (err) {\n console.error(\"❌ Failed to initialize Mixpanel:\", err);\n }\n })();\n } else {\n const msg =\n \"Mixpanel token not set. Pass a mixpanelToken prop to AnalyticsProvider.\";\n if (shouldWarnLoudly) console.error(`❌ ${msg}`);\n else console.warn(`⚠️ ${msg}`);\n }\n\n // ── PostHog ───────────────────────────────────────────────\n if (posthogKey) {\n (async () => {\n try {\n const posthogModule = await import(\"posthog-js\");\n const posthog = posthogModule.default;\n posthog.init(posthogKey, {\n api_host: posthogHost || \"https://us.i.posthog.com\",\n bootstrap: { distinctID: visitor_uuid },\n loaded: (ph) => {\n if (debugEnabled) ph.debug();\n },\n });\n posthogRef.current = posthog;\n posthog.identify(visitor_uuid);\n } catch (err) {\n console.error(\"❌ Failed to initialize PostHog:\", err);\n }\n })();\n } else if (shouldWarnLoudly) {\n console.warn(\n \"⚠️ PostHog key not set. Pass a posthogKey prop to AnalyticsProvider.\",\n );\n }\n }, [visitor_uuid, envMode, mixpanelToken, posthogKey, posthogHost]);\n\n const value = useMemo(() => ({ track, identify }), [track, identify]);\n\n return (\n <AnalyticsContext.Provider value={value}>\n {children}\n </AnalyticsContext.Provider>\n );\n};\n\nexport const useAnalytics = () => useContext(AnalyticsContext);\n\n/** @deprecated Use `useAnalytics()` instead. */\nexport const useMixpanel = () => useContext(AnalyticsContext);\n\n/** @deprecated Use `AnalyticsProvider` instead. */\nexport const MixpanelProvider = ({\n children,\n token,\n envMode,\n}: {\n children: React.ReactNode;\n token?: string;\n envMode?: string;\n}) => (\n <AnalyticsProvider mixpanelToken={token} envMode={envMode}>\n {children}\n </AnalyticsProvider>\n);\n"],"names":["AnalyticsContext","createContext","AnalyticsProvider","children","visitor_uuid","mixpanelToken","posthogKey","posthogHost","envMode","mixpanelRef","useRef","posthogRef","track","useCallback","eventName","payload","_a","_b","identify","userId","useEffect","normalizedMode","shouldWarnLoudly","debugEnabled","mixpanel","err","msg","posthog","ph","value","useMemo","jsx","useAnalytics","useContext"],"mappings":";;AAgBA,MAAMA,IAAmBC,EAAqC;AAAA,EAC5D,OAAO,MAAA;AAAA;AAAA,EACP,UAAU,MAAA;AAAA;AACZ,CAAC,GAWYC,IAAoB,CAAC;AAAA,EAChC,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AACF,MAA8B;AAC5B,QAAMC,IAAcC,EAAgC,IAAI,GAClDC,IAAaD,EAAY,IAAI,GAE7BE,IAAQC;AAAA,IACZ,CAACC,GAAmBC,MAAkC;;AACpD,OAAAC,IAAAP,EAAY,YAAZ,QAAAO,EAAqB,MAAMF,GAAWC,KACtCE,IAAAN,EAAW,YAAX,QAAAM,EAAoB,QAAQH,GAAWC;AAAA,IACzC;AAAA,IACA,CAAA;AAAA,EAAC,GAGGG,IAAWL,EAAY,CAACM,MAAmB;;AAC/C,KAAAH,IAAAP,EAAY,YAAZ,QAAAO,EAAqB,SAASG,KAC9BF,IAAAN,EAAW,YAAX,QAAAM,EAAoB,SAASE;AAAA,EAC/B,GAAG,CAAA,CAAE;AAEL,EAAAC,EAAU,MAAM;AACd,QAAI,CAAChB,EAAc;AAEnB,UAAMiB,KAAkBb,KAAW,cAAc,YAAA,GAC3Cc,IACJD,MAAmB,iBAAiBA,MAAmB,WACnDE,IAAeF,MAAmB;AAGxC,QAAIhB;AACF,OAAC,YAAY;AACX,YAAI;AACF,gBAAM,EAAE,SAASmB,MAAa,MAAM,OAAO,kBAAkB;AAC7D,UAAAA,EAAS,KAAKnB,GAAe;AAAA,YAC3B,OAAOkB;AAAA,YACP,aAAa;AAAA,YACb,aAAa;AAAA,cACX,UAAU;AAAA,cACV,OAAO;AAAA,cACP,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,sBAAsB;AAAA,YAAA;AAAA,UACxB,CACD,GACDd,EAAY,UAAUe,GACtBA,EAAS,SAASpB,CAAY;AAAA,QAChC,SAASqB,GAAK;AACZ,kBAAQ,MAAM,oCAAoCA,CAAG;AAAA,QACvD;AAAA,MACF,GAAA;AAAA,SACK;AACL,YAAMC,IACJ;AACF,MAAIJ,IAAkB,QAAQ,MAAM,KAAKI,CAAG,EAAE,IACzC,QAAQ,KAAK,MAAMA,CAAG,EAAE;AAAA,IAC/B;AAGA,IAAIpB,KACD,YAAY;AACX,UAAI;AAEF,cAAMqB,KADgB,MAAM,OAAO,YAAY,GACjB;AAC9B,QAAAA,EAAQ,KAAKrB,GAAY;AAAA,UACvB,UAAUC,KAAe;AAAA,UACzB,WAAW,EAAE,YAAYH,EAAA;AAAA,UACzB,QAAQ,CAACwB,MAAO;AACd,YAAIL,OAAiB,MAAA;AAAA,UACvB;AAAA,QAAA,CACD,GACDZ,EAAW,UAAUgB,GACrBA,EAAQ,SAASvB,CAAY;AAAA,MAC/B,SAASqB,GAAK;AACZ,gBAAQ,MAAM,mCAAmCA,CAAG;AAAA,MACtD;AAAA,IACF,GAAA,IACSH,KACT,QAAQ;AAAA,MACN;AAAA,IAAA;AAAA,EAGN,GAAG,CAAClB,GAAcI,GAASH,GAAeC,GAAYC,CAAW,CAAC;AAElE,QAAMsB,IAAQC,EAAQ,OAAO,EAAE,OAAAlB,GAAO,UAAAM,MAAa,CAACN,GAAOM,CAAQ,CAAC;AAEpE,SACE,gBAAAa,EAAC/B,EAAiB,UAAjB,EAA0B,OAAA6B,GACxB,UAAA1B,EAAA,CACH;AAEJ,GAEa6B,IAAe,MAAMC,EAAWjC,CAAgB;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../../utils/casing.cjs"),q=require("../../utils/collections.cjs"),O=require("./AnalyticsProvider.cjs"),e=require("../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs"),P=["location","budget","size","other"],p=["cost_low_to_high","cost_high_to_low","newest","relevance"],N=["Skip","Continue","Back"],l=e.object({propertyId:e.string().min(1,"propertyId is required"),propertySlug:e.string().min(1,"propertySlug is required"),propertyName:e.string().min(1,"propertyName is required")}),d=l.extend({propertyName:e.string().min(1,"propertyName is required")}),x=d.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),K=d.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),g=d.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional(),lifestylePreferences:e.unknown().optional()}),f=d.extend({funnelStep:e.number().int().nonnegative(),profileQuestion:e.string().min(1,"profileQuestion is required"),interactedElement:e.enum(N),questionEnum:e.string().optional()}),U=f.extend({selectedAnswersEnumArray:e.any().transform(o=>q.normalizeToStringArray(o)).refine(o=>Array.isArray(o),{message:"selectedAnswersEnumArray must resolve to an array"})});l.extend({unitId:e.string().min(1,"unitId is required"),unitName:e.string().min(1,"unitName is required"),unitSlug:e.string().min(1,"unitSlug is required")});const a=d.extend({unitId:e.string().min(1,"unitId is required"),unitName:e.string().min(1,"unitName is required"),unitSlug:e.string().min(1,"unitSlug is required")}),k=a.extend({buttonName:e.string().min(1,"buttonName is required"),formName:e.string().min(1,"formName is required"),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),unitBedrooms:e.number().int().nonnegative(),favoritedUnit:e.boolean()}),m=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),favoritedUnit:e.boolean()}),E=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),type:e.enum(["click","hover_on","hover_off"])}),F=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),link:e.string().min(1,"link is required"),type:e.string().min(1,"type is required"),favoritedUnit:e.boolean()}),A=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required")}),V=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required")}),B=a.extend({method:e.enum(["Prev","Next"]),roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required")}),T=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),method:e.enum(["Navigation","Map"])}),D=T.extend({timeInRoom:e.number().int().nonnegative()}),Q=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),method:e.enum(["On Click Play"]),videoCurrentTime:e.number().int().nonnegative(),videoDuration:e.number().int().nonnegative(),videoPercent:e.number().int().nonnegative(),videoFilename:e.string().min(1,"videoFilename is required")}),M=a.extend({utmSource:e.string().min(1,"utm_source is required"),utmMedium:e.string().min(1,"utm_medium is required"),utmName:e.string().min(1,"utm_name is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),favoritedUnit:e.boolean()}),b=a.extend({fullUrl:e.string().min(1,"fullUrl is required"),datestamp:e.string().min(1,"datestamp is required")}),L=b.extend({pageName:e.string().min(1,"pageName is required")}),R=b.extend({roomName:e.string().min(1,"roomName is required")}),_=a.extend({unitBedrooms:e.number().int().nonnegative()}),y=a.extend({toastCopy:e.string().min(1,"toastCopy is required")}),z=a.extend({unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required")}),j=a.extend({favoritedUnit:e.boolean()}),h=e.any().transform(o=>q.normalizeToStringArray(o)).refine(o=>Array.isArray(o),{message:"Selection must resolve to an array"}),W=d.extend({filterIndex:e.number().int().nonnegative(),filterLabel:e.string().min(1,"filterLabel is required"),selectedFiltersEnum:h,filterName:e.string().optional()}),S=d.extend({filterIndex:e.number().int().nonnegative(),filterLabel:e.string().min(1,"filterLabel is required"),selectedFiltersEnum:h}),v=l.extend({sortIndex:e.number().int().nonnegative(),sortEnum:e.enum(p)}),G=d.extend({sortIndex:e.number().int().nonnegative(),sortEnum:e.enum(p),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),H=l.extend({fullQuestionnaireSchemaJson:e.unknown().optional(),resultsJson:e.object({type:e.string().optional(),total:e.number().int().nonnegative().optional(),units:e.array(e.object({unitId:e.string().min(1,"unitId is required"),unitName:e.string().optional()})).optional()}).optional()}),J=a.extend({favoritedUnit:e.boolean()}),X=a.extend({favoritedUnit:e.boolean()}),Y=d.extend({unitId:e.string().min(1,"unitId is required"),unitName:e.string().min(1,"unitName is required"),unitSlug:e.string().min(1,"unitSlug is required"),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()});function I(){const o=O.useAnalytics();return(s,r)=>{const n=r==null?r:u.convertKeysToSnakeCase(r);o.track(s,n)}}const Z=(o,s,r,n)=>t=>{const i=u.convertKeysToCamelCase(t),c=s.parse(i),w=n!=null&&n.forwardOriginalPayload?t:c;r(o,w,{skipKeyTransform:n==null?void 0:n.skipKeyTransform})};function C(o){const s=(n,t,i)=>{const c=i!=null&&i.skipKeyTransform?t:u.convertKeysToSnakeCase(t);o(n,c)},r=(n,t,i)=>Z(n,t,s,i);return{trackViewAllUnits:n=>{const t=u.convertKeysToCamelCase(n),i=x.parse({unitCountDate:new Date().toISOString(),...t});s("View All Units",i)},trackQuestionnaireSkip:n=>{const t=u.convertKeysToCamelCase(n),i=f.parse({...t,interactedElement:"Skip"});s("Questionnaire Navigated",i)},trackQuestionnaireContinue:n=>{const t=u.convertKeysToCamelCase(n),i=U.parse({...t,interactedElement:"Continue"});s("Questionnaire Navigated",i)},trackQuestionnaireBack:n=>{const t=u.convertKeysToCamelCase(n),i=f.parse({...t,interactedElement:"Back"});s("Questionnaire Navigated",i)},trackClickUnit:r("Unit Card Clicked",J,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackHoverUnit:r("Unit Hovered",j,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackLoadMore:n=>{const t=u.convertKeysToCamelCase(n),i=K.parse({unitCountDate:new Date().toISOString(),...t});s("More Units Loaded",i)},trackFilterOpened:r("Filter Opened",W),trackFilterCanceled:r("Filter Cleared",S),trackFilterApplied:r("Filter Applied",S),trackOpenSort:n=>{const t=u.convertKeysToCamelCase(n),i=G.parse({unitCountDate:new Date().toISOString(),...t});s("Sort Opened",i)},trackSelectSort:r("Sort Applied",v),trackCancelSort:r("Sort Canceled",v),trackClickUnitFavorites:r("Unit Favorited",X),trackUnitUnfavorited:r("Unit Unfavorited",Y),trackQuestionnaireResult:r("Questionnaire Submitted",H),trackScheduleTourFormInteracted:r("Schedule Tour Form Interacted",g,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackScheduleTourFormSubmitted:r("Schedule Tour Form Submitted",g,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackScheduleTourUrlClicked:r("Schedule Tour URL Clicked",g,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackGetInTouchFormOpened:r("Form Opened",k,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackGetInTouchFormSubmitted:r("Form Submitted",k,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackStyleDrawerOpened:r("Style Menu Opened",m,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackStyleDrawerChanged:r("Style Changed",m,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackOpeningStyleImpression:r("Opening Style Modal Impression",m,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackOpeningStyleSlected:r("Opening Style Selected",m,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureViewed:r("Furniture Viewed",E,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureExternalUrlClicked:r("Purchase Link Clicked",F,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureSaved:r("Furniture Saved",A,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureModalOpened:r("Furniture Modal Opened",V,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureCarouselToggled:r("Furniture Carousel Toggled",B,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackRoomEntered:r("Room Entered",T,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackRoomLeft:r("Room Left",D,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackVideoStarted:r("Video Started",Q,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackEmailRedirect:r("Email Tracked",M,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackToastImpression:r("Toast Impression",y,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackToastClicked:r("Toast Clicked",y,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackToastClosed:r("Toast Closed",y,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackContentModalOpened:r("Content Modal Opened",z,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackWebPageViewed:r("Page Viewed",L,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackWebPageRoomViewed:r("Page Viewed",R,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackEmbedPageViewed:r("Embed Impression",_,{skipKeyTransform:!0,forwardOriginalPayload:!0})}}function $(){const o=I();return C(o)}exports.QuestionEnumValues=P;exports.QuestionnaireInteractionValues=N;exports.SortEnumValues=p;exports.buildTrackingEvents=C;exports.useTrackEvent=I;exports.useTrackingEvents=$;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("../../utils/casing.cjs"),q=require("../../utils/collections.cjs"),O=require("./AnalyticsProvider.cjs"),e=require("../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs"),P=["location","budget","size","other"],p=["cost_low_to_high","cost_high_to_low","newest","relevance"],N=["Skip","Continue","Back"],l=e.object({propertyId:e.string().min(1,"propertyId is required"),propertySlug:e.string().min(1,"propertySlug is required"),propertyName:e.string().min(1,"propertyName is required")}),u=l.extend({propertyName:e.string().min(1,"propertyName is required")}),x=u.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),K=u.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),g=u.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional(),lifestylePreferences:e.unknown().optional()}),f=u.extend({funnelStep:e.number().int().nonnegative(),profileQuestion:e.string().min(1,"profileQuestion is required"),interactedElement:e.enum(N),questionEnum:e.string().optional()}),U=f.extend({selectedAnswersEnumArray:e.any().transform(o=>q.normalizeToStringArray(o)).refine(o=>Array.isArray(o),{message:"selectedAnswersEnumArray must resolve to an array"})});l.extend({unitId:e.string().min(1,"unitId is required"),unitName:e.string().min(1,"unitName is required"),unitSlug:e.string().min(1,"unitSlug is required")});const a=u.extend({unitId:e.string().min(1,"unitId is required"),unitName:e.string().min(1,"unitName is required"),unitSlug:e.string().min(1,"unitSlug is required")}),k=a.extend({buttonName:e.string().min(1,"buttonName is required"),formName:e.string().min(1,"formName is required"),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),unitBedrooms:e.number().int().nonnegative(),favoritedUnit:e.boolean()}),m=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),favoritedUnit:e.boolean()}),E=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),type:e.enum(["click","hover_on","hover_off"])}),F=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),link:e.string().min(1,"link is required"),type:e.string().min(1,"type is required"),favoritedUnit:e.boolean()}),A=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required")}),V=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required")}),D=a.extend({method:e.enum(["Prev","Next"]),roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required")}),T=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),method:e.enum(["Navigation","Map"])}),B=T.extend({timeInRoom:e.number().int().nonnegative()}),M=a.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),method:e.enum(["On Click Play"]),videoCurrentTime:e.number().int().nonnegative(),videoDuration:e.number().int().nonnegative(),videoPercent:e.number().int().nonnegative(),videoFilename:e.string().min(1,"videoFilename is required")}),Q=a.extend({utmSource:e.string().min(1,"utm_source is required"),utmMedium:e.string().min(1,"utm_medium is required"),utmName:e.string().min(1,"utm_name is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),favoritedUnit:e.boolean()}),b=a.extend({fullUrl:e.string().min(1,"fullUrl is required"),datestamp:e.string().min(1,"datestamp is required")}),L=b.extend({pageName:e.string().min(1,"pageName is required")}),R=b.extend({roomName:e.string().min(1,"roomName is required")}),_=a.extend({unitBedrooms:e.number().int().nonnegative()}),y=a.extend({toastCopy:e.string().min(1,"toastCopy is required")}),z=a.extend({unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required")}),j=u,W=a.extend({favoritedUnit:e.boolean()}),h=e.any().transform(o=>q.normalizeToStringArray(o)).refine(o=>Array.isArray(o),{message:"Selection must resolve to an array"}),G=u.extend({filterIndex:e.number().int().nonnegative(),filterLabel:e.string().min(1,"filterLabel is required"),selectedFiltersEnum:h,filterName:e.string().optional()}),S=u.extend({filterIndex:e.number().int().nonnegative(),filterLabel:e.string().min(1,"filterLabel is required"),selectedFiltersEnum:h}),v=l.extend({sortIndex:e.number().int().nonnegative(),sortEnum:e.enum(p)}),H=u.extend({sortIndex:e.number().int().nonnegative(),sortEnum:e.enum(p),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),J=l.extend({fullQuestionnaireSchemaJson:e.unknown().optional(),resultsJson:e.object({type:e.string().optional(),total:e.number().int().nonnegative().optional(),units:e.array(e.object({unitId:e.string().min(1,"unitId is required"),unitName:e.string().optional()})).optional()}).optional()}),X=a.extend({favoritedUnit:e.boolean()}),Y=a.extend({favoritedUnit:e.boolean()}),Z=u.extend({unitId:e.string().min(1,"unitId is required"),unitName:e.string().min(1,"unitName is required"),unitSlug:e.string().min(1,"unitSlug is required"),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()});function I(){const o=O.useAnalytics();return(s,r)=>{const n=r==null?r:d.convertKeysToSnakeCase(r);o.track(s,n)}}const $=(o,s,r,n)=>t=>{const i=d.convertKeysToCamelCase(t),c=s.parse(i),w=n!=null&&n.forwardOriginalPayload?t:c;r(o,w,{skipKeyTransform:n==null?void 0:n.skipKeyTransform})};function C(o){const s=(n,t,i)=>{const c=i!=null&&i.skipKeyTransform?t:d.convertKeysToSnakeCase(t);o(n,c)},r=(n,t,i)=>$(n,t,s,i);return{trackViewAllUnits:n=>{const t=d.convertKeysToCamelCase(n),i=x.parse({unitCountDate:new Date().toISOString(),...t});s("View All Units",i)},trackQuestionnaireSkip:n=>{const t=d.convertKeysToCamelCase(n),i=f.parse({...t,interactedElement:"Skip"});s("Questionnaire Navigated",i)},trackQuestionnaireContinue:n=>{const t=d.convertKeysToCamelCase(n),i=U.parse({...t,interactedElement:"Continue"});s("Questionnaire Navigated",i)},trackQuestionnaireBack:n=>{const t=d.convertKeysToCamelCase(n),i=f.parse({...t,interactedElement:"Back"});s("Questionnaire Navigated",i)},trackClickUnit:r("Unit Card Clicked",X,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackHoverUnit:r("Unit Hovered",W,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackLoadMore:n=>{const t=d.convertKeysToCamelCase(n),i=K.parse({unitCountDate:new Date().toISOString(),...t});s("More Units Loaded",i)},trackFilterOpened:r("Filter Opened",G),trackFilterCanceled:r("Filter Cleared",S),trackFilterApplied:r("Filter Applied",S),trackOpenSort:n=>{const t=d.convertKeysToCamelCase(n),i=H.parse({unitCountDate:new Date().toISOString(),...t});s("Sort Opened",i)},trackSelectSort:r("Sort Applied",v),trackCancelSort:r("Sort Canceled",v),trackClickUnitFavorites:r("Unit Favorited",Y),trackUnitUnfavorited:r("Unit Unfavorited",Z),trackQuestionnaireResult:r("Questionnaire Submitted",J),trackScheduleTourFormInteracted:r("Schedule Tour Form Interacted",g,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackScheduleTourFormSubmitted:r("Schedule Tour Form Submitted",g,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackScheduleTourUrlClicked:r("Schedule Tour URL Clicked",g,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackGetInTouchFormOpened:r("Form Opened",k,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackGetInTouchFormSubmitted:r("Form Submitted",k,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackStyleDrawerOpened:r("Style Menu Opened",m,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackStyleDrawerChanged:r("Style Changed",m,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackOpeningStyleImpression:r("Opening Style Modal Impression",m,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackOpeningStyleSlected:r("Opening Style Selected",m,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureViewed:r("Furniture Viewed",E,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureExternalUrlClicked:r("Purchase Link Clicked",F,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureSaved:r("Furniture Saved",A,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureModalOpened:r("Furniture Modal Opened",V,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureCarouselToggled:r("Furniture Carousel Toggled",D,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackRoomEntered:r("Room Entered",T,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackRoomLeft:r("Room Left",B,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackVideoStarted:r("Video Started",M,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackEmailRedirect:r("Email Tracked",Q,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackToastImpression:r("Toast Impression",y,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackToastClicked:r("Toast Clicked",y,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackToastClosed:r("Toast Closed",y,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackContentModalOpened:r("Content Modal Opened",z,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackBuildingDetailsModalOpened:r("Building Details Modal",j,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackWebPageViewed:r("Page Viewed",L,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackWebPageRoomViewed:r("Page Viewed",R,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackEmbedPageViewed:r("Embed Impression",_,{skipKeyTransform:!0,forwardOriginalPayload:!0})}}function ee(){const o=I();return C(o)}exports.QuestionEnumValues=P;exports.QuestionnaireInteractionValues=N;exports.SortEnumValues=p;exports.buildTrackingEvents=C;exports.useTrackEvent=I;exports.useTrackingEvents=ee;
2
2
  //# sourceMappingURL=analytics.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.cjs","sources":["../../../src/features/analytics/analytics.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n convertKeysToCamelCase,\n convertKeysToSnakeCase,\n} from \"../../utils/casing\";\nimport { normalizeToStringArray } from \"../../utils/collections\";\nimport { useAnalytics } from \"./AnalyticsProvider\";\n\ntype AnalyticsPayload<Schema extends z.ZodTypeAny> = z.input<Schema>;\n\ntype AnalyticsPayloadWithout<\n Schema extends z.ZodTypeAny,\n Keys extends PropertyKey,\n> = Omit<AnalyticsPayload<Schema>, Keys>;\n\nexport const QuestionEnumValues = [\"location\", \"budget\", \"size\", \"other\"] as const;\nexport type QuestionEnum = (typeof QuestionEnumValues)[number];\nexport type FilterEnum = string;\nexport const SortEnumValues = [\n \"cost_low_to_high\",\n \"cost_high_to_low\",\n \"newest\",\n \"relevance\",\n] as const;\nexport type SortEnum = (typeof SortEnumValues)[number];\nexport const QuestionnaireInteractionValues = [\n \"Skip\",\n \"Continue\",\n \"Back\",\n] as const;\nexport type QuestionnaireInteraction =\n (typeof QuestionnaireInteractionValues)[number];\n\nconst propertyContextSchema = z.object({\n propertyId: z.string().min(1, \"propertyId is required\"),\n propertySlug: z.string().min(1, \"propertySlug is required\"),\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst propertyWithNameSchema = propertyContextSchema.extend({\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst viewAllUnitsSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst loadMoreSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst scheduleTourFormSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n lifestylePreferences: z.unknown().optional(),\n});\n\nconst questionnaireEventSchema = propertyWithNameSchema.extend({\n funnelStep: z.number().int().nonnegative(),\n profileQuestion: z.string().min(1, \"profileQuestion is required\"),\n interactedElement: z.enum(QuestionnaireInteractionValues),\n questionEnum: z.string().optional(),\n});\n\nconst continueQuestionnaireEventSchema = questionnaireEventSchema.extend({\n selectedAnswersEnumArray: z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"selectedAnswersEnumArray must resolve to an array\",\n }),\n});\n\nconst unitEventSchema = propertyContextSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst getInTouchFormSchema = unitWithPropertyNameSchema.extend({\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n favoritedUnit: z.boolean(),\n});\nconst styleDrawerSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n favoritedUnit: z.boolean(),\n});\nconst furnitureInteractionSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n type: z.enum([\"click\", \"hover_on\", \"hover_off\"]),\n})\nconst furnitureExternalUrlSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n link: z.string().min(1, \"link is required\"),\n type: z.string().min(1, \"type is required\"),\n favoritedUnit: z.boolean(),\n})\nconst furnitureSavedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\nconst furnitureModalOpenedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\nconst furnitureCarouselSchema = unitWithPropertyNameSchema.extend({\n method: z.enum([\"Prev\", \"Next\"]),\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\n\nconst roomEnteredSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"Navigation\", \"Map\"]),\n})\nconst roomLeftSchema = roomEnteredSchema.extend({\n timeInRoom: z.number().int().nonnegative(),\n})\n\nconst videoStartedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"On Click Play\"]),\n videoCurrentTime: z.number().int().nonnegative(),\n videoDuration: z.number().int().nonnegative(),\n videoPercent: z.number().int().nonnegative(),\n videoFilename: z.string().min(1, \"videoFilename is required\"),\n})\nconst emailTrackedSchema = unitWithPropertyNameSchema.extend({\n utmSource: z.string().min(1, \"utm_source is required\"),\n utmMedium: z.string().min(1, \"utm_medium is required\"),\n utmName: z.string().min(1, \"utm_name is required\"),\n\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n favoritedUnit: z.boolean(),\n})\nconst webPageViewedBaseSchema = unitWithPropertyNameSchema.extend({\n fullUrl: z.string().min(1, \"fullUrl is required\"),\n datestamp: z.string().min(1, \"datestamp is required\"),\n})\n// 360 app only\nconst webPageViewedSchema = webPageViewedBaseSchema.extend({\n pageName: z.string().min(1, \"pageName is required\"),\n})\nconst webPageRoomViewedSchema = webPageViewedBaseSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n})\nconst embedPageViewedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n})\n\n// property_slug, property_id, property_name, unit_id, unit_slug, unit_title, unit_bedrooms\n\nconst toastSchema = unitWithPropertyNameSchema.extend({\n toastCopy: z.string().min(1, \"toastCopy is required\"),\n})\nconst contentModalOpenedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n})\n\nconst hoverUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst selectionSchema = z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"Selection must resolve to an array\",\n });\n\nconst filterOpenSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n filterName: z.string().optional(),\n});\n\nconst filterMutationSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n});\n\nconst sortEventSchema = propertyContextSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n});\n\nconst sortOpenSchema = propertyWithNameSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst questionnaireResultSchema = propertyContextSchema.extend({\n fullQuestionnaireSchemaJson: z.unknown().optional(),\n resultsJson: z\n .object({\n type: z.string().optional(),\n total: z.number().int().nonnegative().optional(),\n units: z\n .array(\n z.object({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().optional(),\n })\n )\n .optional(),\n })\n .optional(),\n});\n\nconst clickUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst clickUnitFavoritesSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst unitUnfavoritedSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nexport type BaseEvent = z.infer<typeof propertyContextSchema>;\nexport type ViewAllUnitsEvent = z.infer<typeof viewAllUnitsSchema>;\nexport type LoadMoreEvent = z.infer<typeof loadMoreSchema>;\nexport type QuestionnaireEvent = z.infer<typeof questionnaireEventSchema>;\nexport type ContinueQuestionnaireEvent = z.infer<\n typeof continueQuestionnaireEventSchema\n>;\nexport type ClickUnitEvent = z.infer<typeof clickUnitSchema>;\nexport type UnitEvent = z.infer<typeof unitEventSchema>;\nexport type HoverUnitEvent = z.infer<typeof hoverUnitSchema>;\nexport type FilterEvent = z.infer<typeof filterMutationSchema>;\nexport type FilterOpenEvent = z.infer<typeof filterOpenSchema>;\nexport type SortEvent = z.infer<typeof sortEventSchema>;\nexport type SortOpenEvent = z.infer<typeof sortOpenSchema>;\nexport type QuestionnaireResultEvent = z.infer<\n typeof questionnaireResultSchema\n>;\nexport type ClickUnitFavoritesEvent = z.infer<typeof clickUnitFavoritesSchema>;\nexport type ScheduleTourFormEvent = z.infer<typeof scheduleTourFormSchema>;\nexport type UnitUnfavoritedEvent = z.infer<typeof unitUnfavoritedSchema>;\n\nexport type GetInTouchFormEvent = z.infer<typeof getInTouchFormSchema>;\nexport type StyleDrawerEvent = z.infer<typeof styleDrawerSchema>;\nexport type FurnitureInteractionEvent = z.infer<typeof furnitureInteractionSchema>;\nexport type FurnitureExternalUrlClickedEvent = z.infer<typeof furnitureExternalUrlSchema>;\nexport type FurnitureSavedEvent = z.infer<typeof furnitureSavedSchema>;\nexport type FurnitureModalOpenedEvent = z.infer<typeof furnitureModalOpenedSchema>;\nexport type FurnitureCarouselEvent = z.infer<typeof furnitureCarouselSchema>;\nexport type RoomEnteredEvent = z.infer<typeof roomEnteredSchema>;\nexport type RoomLeftEvent = z.infer<typeof roomLeftSchema>;\nexport type VideoStartedEvent = z.infer<typeof videoStartedSchema>;\nexport type EmailTrackedEvent = z.infer<typeof emailTrackedSchema>;\nexport type ToastEvent = z.infer<typeof toastSchema>;\nexport type ContentModalOpenedEvent = z.infer<typeof contentModalOpenedSchema>;\nexport type WebPageViewedEvent = z.infer<typeof webPageViewedSchema>;\nexport type WebPageRoomViewedEvent = z.infer<typeof webPageRoomViewedSchema>;\n\n\nexport type TrackingEventWithUnits = FilterEvent & {\n trackingEvent: (payload: FilterEvent) => void;\n [metadata: string]: unknown;\n};\n\nexport type TrackEventFn = (eventName: string, data?: Record<string, any>) => void;\n\nexport function useTrackEvent() {\n const analytics = useAnalytics();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n analytics.track(eventName, payload);\n };\n}\n\nconst createStrictTrackerInternal =\n <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n dispatch: (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => void,\n options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) =>\n (payload: AnalyticsPayload<Schema>) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<Schema>;\n const parsed = schema.parse(normalizedPayload);\n const payloadForDispatch = options?.forwardOriginalPayload\n ? payload\n : parsed;\n dispatch(eventName, payloadForDispatch, {\n skipKeyTransform: options?.skipKeyTransform,\n });\n };\n\nexport function buildTrackingEvents(trackEvent: TrackEventFn) {\n const dispatch = (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => {\n const finalPayload = options?.skipKeyTransform\n ? (payload as Record<string, any>)\n : (convertKeysToSnakeCase(payload) as Record<string, any>);\n trackEvent(eventName, finalPayload);\n };\n\n const createStrictTracker = <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) => createStrictTrackerInternal(eventName, schema, dispatch, options);\n\n return {\n trackViewAllUnits: (\n payload: AnalyticsPayload<typeof viewAllUnitsSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof viewAllUnitsSchema>;\n const parsed = viewAllUnitsSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"View All Units\", parsed);\n },\n trackQuestionnaireSkip: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Skip\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackQuestionnaireContinue: (\n payload: AnalyticsPayloadWithout<\n typeof continueQuestionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof continueQuestionnaireEventSchema>,\n \"interactedElement\"\n >;\n const parsed = continueQuestionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Continue\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackQuestionnaireBack: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Back\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackClickUnit: createStrictTracker(\"Unit Card Clicked\", clickUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackHoverUnit: createStrictTracker(\"Unit Hovered\", hoverUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackLoadMore: (\n payload: AnalyticsPayload<typeof loadMoreSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof loadMoreSchema>;\n const parsed = loadMoreSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"More Units Loaded\", parsed);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Cleared\",\n filterMutationSchema,\n ),\n trackFilterApplied: createStrictTracker(\n \"Filter Applied\",\n filterMutationSchema,\n ),\n trackOpenSort: (\n payload: AnalyticsPayload<typeof sortOpenSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof sortOpenSchema>;\n const parsed = sortOpenSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Sort Opened\", parsed);\n },\n trackSelectSort: createStrictTracker(\"Sort Applied\", sortEventSchema),\n trackCancelSort: createStrictTracker(\"Sort Canceled\", sortEventSchema),\n trackClickUnitFavorites: createStrictTracker(\n \"Unit Favorited\",\n clickUnitFavoritesSchema,\n ),\n trackUnitUnfavorited: createStrictTracker(\n \"Unit Unfavorited\",\n unitUnfavoritedSchema,\n ),\n trackQuestionnaireResult: createStrictTracker(\n \"Questionnaire Submitted\",\n questionnaireResultSchema,\n ),\n trackScheduleTourFormInteracted: createStrictTracker(\n \"Schedule Tour Form Interacted\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourFormSubmitted: createStrictTracker(\n \"Schedule Tour Form Submitted\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourUrlClicked: createStrictTracker(\n \"Schedule Tour URL Clicked\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormOpened: createStrictTracker(\n \"Form Opened\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormSubmitted: createStrictTracker(\n \"Form Submitted\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerOpened: createStrictTracker(\n \"Style Menu Opened\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerChanged: createStrictTracker(\n \"Style Changed\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackOpeningStyleImpression: createStrictTracker(\n \"Opening Style Modal Impression\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackOpeningStyleSlected: createStrictTracker(\n \"Opening Style Selected\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureViewed: createStrictTracker(\n \"Furniture Viewed\",\n furnitureInteractionSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureExternalUrlClicked: createStrictTracker(\n \"Purchase Link Clicked\",\n furnitureExternalUrlSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureSaved: createStrictTracker(\n \"Furniture Saved\",\n furnitureSavedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureModalOpened: createStrictTracker(\n \"Furniture Modal Opened\",\n furnitureModalOpenedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureCarouselToggled: createStrictTracker(\n \"Furniture Carousel Toggled\",\n furnitureCarouselSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomEntered: createStrictTracker(\n \"Room Entered\",\n roomEnteredSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomLeft: createStrictTracker(\n \"Room Left\",\n roomLeftSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackVideoStarted: createStrictTracker(\n \"Video Started\",\n videoStartedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackEmailRedirect: createStrictTracker(\n \"Email Tracked\",\n emailTrackedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastImpression: createStrictTracker(\n \"Toast Impression\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastClicked: createStrictTracker(\n \"Toast Clicked\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastClosed: createStrictTracker(\n \"Toast Closed\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackContentModalOpened: createStrictTracker(\n \"Content Modal Opened\",\n contentModalOpenedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackWebPageViewed: createStrictTracker(\n \"Page Viewed\",\n webPageViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackWebPageRoomViewed: createStrictTracker(\n \"Page Viewed\",\n webPageRoomViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackEmbedPageViewed: createStrictTracker(\n \"Embed Impression\",\n embedPageViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n };\n}\n\nexport function useTrackingEvents() {\n const trackEvent = useTrackEvent();\n return buildTrackingEvents(trackEvent);\n}\n"],"names":["QuestionEnumValues","SortEnumValues","QuestionnaireInteractionValues","propertyContextSchema","z.object","z.string","propertyWithNameSchema","viewAllUnitsSchema","z.number","loadMoreSchema","scheduleTourFormSchema","z.unknown","questionnaireEventSchema","z.enum","continueQuestionnaireEventSchema","z.any","value","normalizeToStringArray","unitWithPropertyNameSchema","getInTouchFormSchema","z.boolean","styleDrawerSchema","furnitureInteractionSchema","furnitureExternalUrlSchema","furnitureSavedSchema","furnitureModalOpenedSchema","furnitureCarouselSchema","roomEnteredSchema","roomLeftSchema","videoStartedSchema","emailTrackedSchema","webPageViewedBaseSchema","webPageViewedSchema","webPageRoomViewedSchema","embedPageViewedSchema","toastSchema","contentModalOpenedSchema","hoverUnitSchema","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","z.array","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","analytics","useAnalytics","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","normalizedPayload","convertKeysToCamelCase","parsed","payloadForDispatch","buildTrackingEvents","trackEvent","finalPayload","createStrictTracker","useTrackingEvents"],"mappings":"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"}
1
+ {"version":3,"file":"analytics.cjs","sources":["../../../src/features/analytics/analytics.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n convertKeysToCamelCase,\n convertKeysToSnakeCase,\n} from \"../../utils/casing\";\nimport { normalizeToStringArray } from \"../../utils/collections\";\nimport { useAnalytics } from \"./AnalyticsProvider\";\n\ntype AnalyticsPayload<Schema extends z.ZodTypeAny> = z.input<Schema>;\n\ntype AnalyticsPayloadWithout<\n Schema extends z.ZodTypeAny,\n Keys extends PropertyKey,\n> = Omit<AnalyticsPayload<Schema>, Keys>;\n\nexport const QuestionEnumValues = [\"location\", \"budget\", \"size\", \"other\"] as const;\nexport type QuestionEnum = (typeof QuestionEnumValues)[number];\nexport type FilterEnum = string;\nexport const SortEnumValues = [\n \"cost_low_to_high\",\n \"cost_high_to_low\",\n \"newest\",\n \"relevance\",\n] as const;\nexport type SortEnum = (typeof SortEnumValues)[number];\nexport const QuestionnaireInteractionValues = [\n \"Skip\",\n \"Continue\",\n \"Back\",\n] as const;\nexport type QuestionnaireInteraction =\n (typeof QuestionnaireInteractionValues)[number];\n\nconst propertyContextSchema = z.object({\n propertyId: z.string().min(1, \"propertyId is required\"),\n propertySlug: z.string().min(1, \"propertySlug is required\"),\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst propertyWithNameSchema = propertyContextSchema.extend({\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst viewAllUnitsSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst loadMoreSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst scheduleTourFormSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n lifestylePreferences: z.unknown().optional(),\n});\n\nconst questionnaireEventSchema = propertyWithNameSchema.extend({\n funnelStep: z.number().int().nonnegative(),\n profileQuestion: z.string().min(1, \"profileQuestion is required\"),\n interactedElement: z.enum(QuestionnaireInteractionValues),\n questionEnum: z.string().optional(),\n});\n\nconst continueQuestionnaireEventSchema = questionnaireEventSchema.extend({\n selectedAnswersEnumArray: z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"selectedAnswersEnumArray must resolve to an array\",\n }),\n});\n\nconst unitEventSchema = propertyContextSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst getInTouchFormSchema = unitWithPropertyNameSchema.extend({\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n favoritedUnit: z.boolean(),\n});\nconst styleDrawerSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n favoritedUnit: z.boolean(),\n});\nconst furnitureInteractionSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n type: z.enum([\"click\", \"hover_on\", \"hover_off\"]),\n})\nconst furnitureExternalUrlSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n link: z.string().min(1, \"link is required\"),\n type: z.string().min(1, \"type is required\"),\n favoritedUnit: z.boolean(),\n})\nconst furnitureSavedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\nconst furnitureModalOpenedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\nconst furnitureCarouselSchema = unitWithPropertyNameSchema.extend({\n method: z.enum([\"Prev\", \"Next\"]),\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n})\n\nconst roomEnteredSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"Navigation\", \"Map\"]),\n})\nconst roomLeftSchema = roomEnteredSchema.extend({\n timeInRoom: z.number().int().nonnegative(),\n})\n\nconst videoStartedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"On Click Play\"]),\n videoCurrentTime: z.number().int().nonnegative(),\n videoDuration: z.number().int().nonnegative(),\n videoPercent: z.number().int().nonnegative(),\n videoFilename: z.string().min(1, \"videoFilename is required\"),\n})\nconst emailTrackedSchema = unitWithPropertyNameSchema.extend({\n utmSource: z.string().min(1, \"utm_source is required\"),\n utmMedium: z.string().min(1, \"utm_medium is required\"),\n utmName: z.string().min(1, \"utm_name is required\"),\n\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n favoritedUnit: z.boolean(),\n})\nconst webPageViewedBaseSchema = unitWithPropertyNameSchema.extend({\n fullUrl: z.string().min(1, \"fullUrl is required\"),\n datestamp: z.string().min(1, \"datestamp is required\"),\n})\n// 360 app only\nconst webPageViewedSchema = webPageViewedBaseSchema.extend({\n pageName: z.string().min(1, \"pageName is required\"),\n})\nconst webPageRoomViewedSchema = webPageViewedBaseSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n})\nconst embedPageViewedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n})\n\n// property_slug, property_id, property_name, unit_id, unit_slug, unit_title, unit_bedrooms\n\nconst toastSchema = unitWithPropertyNameSchema.extend({\n toastCopy: z.string().min(1, \"toastCopy is required\"),\n})\nconst contentModalOpenedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n})\n\nconst buildingDetailsModalSchema = propertyWithNameSchema\n\nconst hoverUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst selectionSchema = z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"Selection must resolve to an array\",\n });\n\nconst filterOpenSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n filterName: z.string().optional(),\n});\n\nconst filterMutationSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n});\n\nconst sortEventSchema = propertyContextSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n});\n\nconst sortOpenSchema = propertyWithNameSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst questionnaireResultSchema = propertyContextSchema.extend({\n fullQuestionnaireSchemaJson: z.unknown().optional(),\n resultsJson: z\n .object({\n type: z.string().optional(),\n total: z.number().int().nonnegative().optional(),\n units: z\n .array(\n z.object({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().optional(),\n })\n )\n .optional(),\n })\n .optional(),\n});\n\nconst clickUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst clickUnitFavoritesSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst unitUnfavoritedSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nexport type BaseEvent = z.infer<typeof propertyContextSchema>;\nexport type ViewAllUnitsEvent = z.infer<typeof viewAllUnitsSchema>;\nexport type LoadMoreEvent = z.infer<typeof loadMoreSchema>;\nexport type QuestionnaireEvent = z.infer<typeof questionnaireEventSchema>;\nexport type ContinueQuestionnaireEvent = z.infer<\n typeof continueQuestionnaireEventSchema\n>;\nexport type ClickUnitEvent = z.infer<typeof clickUnitSchema>;\nexport type UnitEvent = z.infer<typeof unitEventSchema>;\nexport type HoverUnitEvent = z.infer<typeof hoverUnitSchema>;\nexport type FilterEvent = z.infer<typeof filterMutationSchema>;\nexport type FilterOpenEvent = z.infer<typeof filterOpenSchema>;\nexport type SortEvent = z.infer<typeof sortEventSchema>;\nexport type SortOpenEvent = z.infer<typeof sortOpenSchema>;\nexport type QuestionnaireResultEvent = z.infer<\n typeof questionnaireResultSchema\n>;\nexport type ClickUnitFavoritesEvent = z.infer<typeof clickUnitFavoritesSchema>;\nexport type ScheduleTourFormEvent = z.infer<typeof scheduleTourFormSchema>;\nexport type UnitUnfavoritedEvent = z.infer<typeof unitUnfavoritedSchema>;\n\nexport type GetInTouchFormEvent = z.infer<typeof getInTouchFormSchema>;\nexport type StyleDrawerEvent = z.infer<typeof styleDrawerSchema>;\nexport type FurnitureInteractionEvent = z.infer<typeof furnitureInteractionSchema>;\nexport type FurnitureExternalUrlClickedEvent = z.infer<typeof furnitureExternalUrlSchema>;\nexport type FurnitureSavedEvent = z.infer<typeof furnitureSavedSchema>;\nexport type FurnitureModalOpenedEvent = z.infer<typeof furnitureModalOpenedSchema>;\nexport type FurnitureCarouselEvent = z.infer<typeof furnitureCarouselSchema>;\nexport type RoomEnteredEvent = z.infer<typeof roomEnteredSchema>;\nexport type RoomLeftEvent = z.infer<typeof roomLeftSchema>;\nexport type VideoStartedEvent = z.infer<typeof videoStartedSchema>;\nexport type EmailTrackedEvent = z.infer<typeof emailTrackedSchema>;\nexport type ToastEvent = z.infer<typeof toastSchema>;\nexport type ContentModalOpenedEvent = z.infer<typeof contentModalOpenedSchema>;\nexport type BuildingDetailsModalEvent = z.infer<typeof buildingDetailsModalSchema>;\nexport type WebPageViewedEvent = z.infer<typeof webPageViewedSchema>;\nexport type WebPageRoomViewedEvent = z.infer<typeof webPageRoomViewedSchema>;\n\n\nexport type TrackingEventWithUnits = FilterEvent & {\n trackingEvent: (payload: FilterEvent) => void;\n [metadata: string]: unknown;\n};\n\nexport type TrackEventFn = (eventName: string, data?: Record<string, any>) => void;\n\nexport function useTrackEvent() {\n const analytics = useAnalytics();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n analytics.track(eventName, payload);\n };\n}\n\nconst createStrictTrackerInternal =\n <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n dispatch: (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => void,\n options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) =>\n (payload: AnalyticsPayload<Schema>) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<Schema>;\n const parsed = schema.parse(normalizedPayload);\n const payloadForDispatch = options?.forwardOriginalPayload\n ? payload\n : parsed;\n dispatch(eventName, payloadForDispatch, {\n skipKeyTransform: options?.skipKeyTransform,\n });\n };\n\nexport function buildTrackingEvents(trackEvent: TrackEventFn) {\n const dispatch = (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => {\n const finalPayload = options?.skipKeyTransform\n ? (payload as Record<string, any>)\n : (convertKeysToSnakeCase(payload) as Record<string, any>);\n trackEvent(eventName, finalPayload);\n };\n\n const createStrictTracker = <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) => createStrictTrackerInternal(eventName, schema, dispatch, options);\n\n return {\n trackViewAllUnits: (\n payload: AnalyticsPayload<typeof viewAllUnitsSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof viewAllUnitsSchema>;\n const parsed = viewAllUnitsSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"View All Units\", parsed);\n },\n trackQuestionnaireSkip: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Skip\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackQuestionnaireContinue: (\n payload: AnalyticsPayloadWithout<\n typeof continueQuestionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof continueQuestionnaireEventSchema>,\n \"interactedElement\"\n >;\n const parsed = continueQuestionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Continue\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackQuestionnaireBack: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Back\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackClickUnit: createStrictTracker(\"Unit Card Clicked\", clickUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackHoverUnit: createStrictTracker(\"Unit Hovered\", hoverUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackLoadMore: (\n payload: AnalyticsPayload<typeof loadMoreSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof loadMoreSchema>;\n const parsed = loadMoreSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"More Units Loaded\", parsed);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Cleared\",\n filterMutationSchema,\n ),\n trackFilterApplied: createStrictTracker(\n \"Filter Applied\",\n filterMutationSchema,\n ),\n trackOpenSort: (\n payload: AnalyticsPayload<typeof sortOpenSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof sortOpenSchema>;\n const parsed = sortOpenSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Sort Opened\", parsed);\n },\n trackSelectSort: createStrictTracker(\"Sort Applied\", sortEventSchema),\n trackCancelSort: createStrictTracker(\"Sort Canceled\", sortEventSchema),\n trackClickUnitFavorites: createStrictTracker(\n \"Unit Favorited\",\n clickUnitFavoritesSchema,\n ),\n trackUnitUnfavorited: createStrictTracker(\n \"Unit Unfavorited\",\n unitUnfavoritedSchema,\n ),\n trackQuestionnaireResult: createStrictTracker(\n \"Questionnaire Submitted\",\n questionnaireResultSchema,\n ),\n trackScheduleTourFormInteracted: createStrictTracker(\n \"Schedule Tour Form Interacted\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourFormSubmitted: createStrictTracker(\n \"Schedule Tour Form Submitted\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourUrlClicked: createStrictTracker(\n \"Schedule Tour URL Clicked\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormOpened: createStrictTracker(\n \"Form Opened\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormSubmitted: createStrictTracker(\n \"Form Submitted\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerOpened: createStrictTracker(\n \"Style Menu Opened\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerChanged: createStrictTracker(\n \"Style Changed\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackOpeningStyleImpression: createStrictTracker(\n \"Opening Style Modal Impression\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackOpeningStyleSlected: createStrictTracker(\n \"Opening Style Selected\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureViewed: createStrictTracker(\n \"Furniture Viewed\",\n furnitureInteractionSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureExternalUrlClicked: createStrictTracker(\n \"Purchase Link Clicked\",\n furnitureExternalUrlSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureSaved: createStrictTracker(\n \"Furniture Saved\",\n furnitureSavedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureModalOpened: createStrictTracker(\n \"Furniture Modal Opened\",\n furnitureModalOpenedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureCarouselToggled: createStrictTracker(\n \"Furniture Carousel Toggled\",\n furnitureCarouselSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomEntered: createStrictTracker(\n \"Room Entered\",\n roomEnteredSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomLeft: createStrictTracker(\n \"Room Left\",\n roomLeftSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackVideoStarted: createStrictTracker(\n \"Video Started\",\n videoStartedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackEmailRedirect: createStrictTracker(\n \"Email Tracked\",\n emailTrackedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastImpression: createStrictTracker(\n \"Toast Impression\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastClicked: createStrictTracker(\n \"Toast Clicked\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastClosed: createStrictTracker(\n \"Toast Closed\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackContentModalOpened: createStrictTracker(\n \"Content Modal Opened\",\n contentModalOpenedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackBuildingDetailsModalOpened: createStrictTracker(\n \"Building Details Modal\",\n buildingDetailsModalSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackWebPageViewed: createStrictTracker(\n \"Page Viewed\",\n webPageViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackWebPageRoomViewed: createStrictTracker(\n \"Page Viewed\",\n webPageRoomViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackEmbedPageViewed: createStrictTracker(\n \"Embed Impression\",\n embedPageViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n };\n}\n\nexport function useTrackingEvents() {\n const trackEvent = useTrackEvent();\n return buildTrackingEvents(trackEvent);\n}\n"],"names":["QuestionEnumValues","SortEnumValues","QuestionnaireInteractionValues","propertyContextSchema","z.object","z.string","propertyWithNameSchema","viewAllUnitsSchema","z.number","loadMoreSchema","scheduleTourFormSchema","z.unknown","questionnaireEventSchema","z.enum","continueQuestionnaireEventSchema","z.any","value","normalizeToStringArray","unitWithPropertyNameSchema","getInTouchFormSchema","z.boolean","styleDrawerSchema","furnitureInteractionSchema","furnitureExternalUrlSchema","furnitureSavedSchema","furnitureModalOpenedSchema","furnitureCarouselSchema","roomEnteredSchema","roomLeftSchema","videoStartedSchema","emailTrackedSchema","webPageViewedBaseSchema","webPageViewedSchema","webPageRoomViewedSchema","embedPageViewedSchema","toastSchema","contentModalOpenedSchema","buildingDetailsModalSchema","hoverUnitSchema","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","z.array","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","analytics","useAnalytics","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","normalizedPayload","convertKeysToCamelCase","parsed","payloadForDispatch","buildTrackingEvents","trackEvent","finalPayload","createStrictTracker","useTrackingEvents"],"mappings":"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"}
@@ -804,6 +804,20 @@ declare const contentModalOpenedSchema: z.ZodObject<{
804
804
  styleName: string;
805
805
  unitBedrooms: number;
806
806
  }>;
807
+ declare const buildingDetailsModalSchema: z.ZodObject<{
808
+ propertyId: z.ZodString;
809
+ propertySlug: z.ZodString;
810
+ } & {
811
+ propertyName: z.ZodString;
812
+ }, "strip", z.ZodTypeAny, {
813
+ propertySlug: string;
814
+ propertyId: string;
815
+ propertyName: string;
816
+ }, {
817
+ propertySlug: string;
818
+ propertyId: string;
819
+ propertyName: string;
820
+ }>;
807
821
  declare const hoverUnitSchema: z.ZodObject<{
808
822
  propertyId: z.ZodString;
809
823
  propertySlug: z.ZodString;
@@ -1106,6 +1120,7 @@ export type VideoStartedEvent = z.infer<typeof videoStartedSchema>;
1106
1120
  export type EmailTrackedEvent = z.infer<typeof emailTrackedSchema>;
1107
1121
  export type ToastEvent = z.infer<typeof toastSchema>;
1108
1122
  export type ContentModalOpenedEvent = z.infer<typeof contentModalOpenedSchema>;
1123
+ export type BuildingDetailsModalEvent = z.infer<typeof buildingDetailsModalSchema>;
1109
1124
  export type WebPageViewedEvent = z.infer<typeof webPageViewedSchema>;
1110
1125
  export type WebPageRoomViewedEvent = z.infer<typeof webPageRoomViewedSchema>;
1111
1126
  export type TrackingEventWithUnits = FilterEvent & {
@@ -1490,6 +1505,11 @@ export declare function buildTrackingEvents(trackEvent: TrackEventFn): {
1490
1505
  styleName: string;
1491
1506
  unitBedrooms: number;
1492
1507
  }) => void;
1508
+ trackBuildingDetailsModalOpened: (payload: {
1509
+ propertySlug: string;
1510
+ propertyId: string;
1511
+ propertyName: string;
1512
+ }) => void;
1493
1513
  trackWebPageViewed: (payload: {
1494
1514
  propertySlug: string;
1495
1515
  propertyId: string;
@@ -1898,6 +1918,11 @@ export declare function useTrackingEvents(): {
1898
1918
  styleName: string;
1899
1919
  unitBedrooms: number;
1900
1920
  }) => void;
1921
+ trackBuildingDetailsModalOpened: (payload: {
1922
+ propertySlug: string;
1923
+ propertyId: string;
1924
+ propertyName: string;
1925
+ }) => void;
1901
1926
  trackWebPageViewed: (payload: {
1902
1927
  propertySlug: string;
1903
1928
  propertyId: string;