@superbright/indexeddb-orm 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.d.ts +0 -1
  3. package/dist/index.mjs +44 -56
  4. package/dist/index.mjs.map +1 -1
  5. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs +1 -1
  6. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs.map +1 -1
  7. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.mjs +49 -50
  8. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.mjs.map +1 -1
  9. package/dist/utils/dimensions.cjs +1 -1
  10. package/dist/utils/dimensions.cjs.map +1 -1
  11. package/dist/utils/dimensions.d.ts +14 -20
  12. package/dist/utils/dimensions.mjs +20 -23
  13. package/dist/utils/dimensions.mjs.map +1 -1
  14. package/package.json +6 -1
  15. package/dist/features/analytics/MixpanelProvider.cjs +0 -2
  16. package/dist/features/analytics/MixpanelProvider.cjs.map +0 -1
  17. package/dist/features/analytics/MixpanelProvider.mjs +0 -40
  18. package/dist/features/analytics/MixpanelProvider.mjs.map +0 -1
  19. package/dist/features/analytics/analytics.cjs +0 -2
  20. package/dist/features/analytics/analytics.cjs.map +0 -1
  21. package/dist/features/analytics/analytics.mjs +0 -230
  22. package/dist/features/analytics/analytics.mjs.map +0 -1
  23. package/dist/features/analytics/generateUserUUID.cjs +0 -2
  24. package/dist/features/analytics/generateUserUUID.cjs.map +0 -1
  25. package/dist/features/analytics/generateUserUUID.mjs +0 -6
  26. package/dist/features/analytics/generateUserUUID.mjs.map +0 -1
  27. package/dist/utils/casing.cjs +0 -2
  28. package/dist/utils/casing.cjs.map +0 -1
  29. package/dist/utils/casing.mjs +0 -12
  30. package/dist/utils/casing.mjs.map +0 -1
  31. package/dist/utils/collections.cjs +0 -2
  32. package/dist/utils/collections.cjs.map +0 -1
  33. package/dist/utils/collections.mjs +0 -13
  34. package/dist/utils/collections.mjs.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=25.4,s=12;function u(o,t){const e=o/f;if(Number.isFinite(t)){const r=Math.max(0,t),c=Math.pow(10,r);return Math.round(e*c)/c}return e}function m(o,t={}){const{roundInches:e=!0,precision:r}=t,c=u(o);let i=Math.floor(c/s),n=c-i*s;if(e)n=Math.round(n);else if(Number.isFinite(r)){const a=Math.max(0,r),h=Math.pow(10,a);n=Math.round(n*h)/h}return n>=s&&(i+=1,n-=s),{feet:i,inches:n}}function M(o){const{feet:t,inches:e}=o;return t===0?`${e}"`:e===0?`${t}'`:`${t}' ${e}"`}exports.formatFeetInches=M;exports.mmToFeetInches=m;exports.mmToInches=u;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=25.4;function m(t,n=1,i=!1){const e=t/f,o=Math.max(0,n),s=Math.pow(10,o),r=Math.round(e*s)/s;return i?`${r}"`:r}function h(t){return t*f}function p(t){var c,u,l,a;if(typeof t!="string")return null;let n=t.trim();if(!n)return null;n=n.replace(/[’′‵`]/g,"'").replace(/[”″˝❞]/g,'"').toLowerCase();const i=/^(?:\s*(?<feet>\d+(?:\.\d+)?)\s*(?:'|ft|feet))?\s*(?:\s*(?<inches>\d+(?:\.\d+)?)\s*(?:\"|in\b|inch(?:es)?\b))?\s*$/i,e=n.match(i);if(!e||!((c=e.groups)!=null&&c.feet)&&!((u=e.groups)!=null&&u.inches))return null;const o=(l=e.groups)!=null&&l.feet?parseFloat(e.groups.feet):0,s=(a=e.groups)!=null&&a.inches?parseFloat(e.groups.inches):0;if(!isFinite(o)||!isFinite(s))return null;const r=o*12+s;return h(r)}exports.imperialToMm=p;exports.inchesToMm=h;exports.mmToInches=m;
2
2
  //# sourceMappingURL=dimensions.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dimensions.cjs","sources":["../../src/utils/dimensions.ts"],"sourcesContent":["/**\n * Units + formatting helpers for converting millimeters to US customary units.\n */\n\nconst MM_PER_INCH = 25.4;\nconst INCHES_PER_FOOT = 12;\n\n/**\n * Convert millimeters to inches.\n * @param mm - Value in millimeters\n * @param precision - Optional decimal places to round to (no rounding if undefined)\n */\nexport function mmToInches(mm: number, precision?: number): number {\n const inches = mm / MM_PER_INCH;\n if (Number.isFinite(precision)) {\n const p = Math.max(0, precision as number);\n const factor = Math.pow(10, p);\n return Math.round(inches * factor) / factor;\n }\n return inches;\n}\n\nexport interface FeetInches {\n feet: number;\n inches: number; // remainder inches (0..11 when rounding to whole inches)\n}\n\n/**\n * Convert millimeters to feet and inches.\n *\n * By default, inches are rounded to the nearest whole inch. If the rounded\n * inches value equals 12, it carries over to the feet value.\n *\n * @param mm - Value in millimeters\n * @param options.roundInches - Round inches to a whole number (default: true)\n * @param options.precision - If provided and roundInches is false, round inches to N decimals\n */\nexport function mmToFeetInches(\n mm: number,\n options: { roundInches?: boolean; precision?: number } = {},\n): FeetInches {\n const { roundInches = true, precision } = options;\n const totalInches = mmToInches(mm);\n let feet = Math.floor(totalInches / INCHES_PER_FOOT);\n let inches = totalInches - feet * INCHES_PER_FOOT;\n\n if (roundInches) {\n inches = Math.round(inches);\n } else if (Number.isFinite(precision)) {\n const p = Math.max(0, precision as number);\n const factor = Math.pow(10, p);\n inches = Math.round(inches * factor) / factor;\n }\n\n // Carry over if inches rounds to 12\n if (inches >= INCHES_PER_FOOT) {\n feet += 1;\n inches -= INCHES_PER_FOOT;\n }\n\n return { feet, inches };\n}\n\n/**\n * Format a feet/inches object as a human-readable string.\n * Examples: 5' 8\", 12\" (when feet is 0)\n */\nexport function formatFeetInches(value: FeetInches): string {\n const { feet, inches } = value;\n if (feet === 0) return `${inches}\\\"`;\n if (inches === 0) return `${feet}'`;\n return `${feet}' ${inches}\\\"`;\n}\n\n"],"names":["MM_PER_INCH","INCHES_PER_FOOT","mmToInches","mm","precision","inches","p","factor","mmToFeetInches","options","roundInches","totalInches","feet","formatFeetInches","value"],"mappings":"gFAIA,MAAMA,EAAc,KACdC,EAAkB,GAOjB,SAASC,EAAWC,EAAYC,EAA4B,CACjE,MAAMC,EAASF,EAAKH,EACpB,GAAI,OAAO,SAASI,CAAS,EAAG,CAC9B,MAAME,EAAI,KAAK,IAAI,EAAGF,CAAmB,EACnCG,EAAS,KAAK,IAAI,GAAID,CAAC,EAC7B,OAAO,KAAK,MAAMD,EAASE,CAAM,EAAIA,CACvC,CACA,OAAOF,CACT,CAiBO,SAASG,EACdL,EACAM,EAAyD,GAC7C,CACZ,KAAM,CAAE,YAAAC,EAAc,GAAM,UAAAN,CAAA,EAAcK,EACpCE,EAAcT,EAAWC,CAAE,EACjC,IAAIS,EAAO,KAAK,MAAMD,EAAcV,CAAe,EAC/CI,EAASM,EAAcC,EAAOX,EAElC,GAAIS,EACFL,EAAS,KAAK,MAAMA,CAAM,UACjB,OAAO,SAASD,CAAS,EAAG,CACrC,MAAME,EAAI,KAAK,IAAI,EAAGF,CAAmB,EACnCG,EAAS,KAAK,IAAI,GAAID,CAAC,EAC7BD,EAAS,KAAK,MAAMA,EAASE,CAAM,EAAIA,CACzC,CAGA,OAAIF,GAAUJ,IACZW,GAAQ,EACRP,GAAUJ,GAGL,CAAE,KAAAW,EAAM,OAAAP,CAAA,CACjB,CAMO,SAASQ,EAAiBC,EAA2B,CAC1D,KAAM,CAAE,KAAAF,EAAM,OAAAP,CAAA,EAAWS,EACzB,OAAIF,IAAS,EAAU,GAAGP,CAAM,IAC5BA,IAAW,EAAU,GAAGO,CAAI,IACzB,GAAGA,CAAI,KAAKP,CAAM,GAC3B"}
1
+ {"version":3,"file":"dimensions.cjs","sources":["../../src/utils/dimensions.ts"],"sourcesContent":["/**\n * Units + formatting helpers for converting millimeters to US customary units.\n */\n\nconst MM_PER_INCH = 25.4;\n// Note: feet/inches helpers removed to keep API minimal\n\n/**\n * Convert millimeters to inches.\n * @param mm - Value in millimeters\n * @param precision - Optional decimal places to round to (no rounding if undefined)\n */\nexport function mmToInches(mm: number, precision: number = 1, appendSymbol = false): number | string {\n const inches = mm / MM_PER_INCH;\n const p = Math.max(0, precision);\n const factor = Math.pow(10, p);\n const value = Math.round(inches * factor) / factor;\n return appendSymbol ? `${value}\\\"` : value;\n}\n\n// Feet/inches helpers were intentionally removed. Use mmToInches with append flag for display.\n\n/**\n * Convert inches to millimeters.\n * Always returns the full-precision value without rounding.\n * @param inches - Value in inches\n */\nexport function inchesToMm(inches: number): number {\n return inches * MM_PER_INCH;\n}\n\n/**\n * Parse a human-entered imperial dimension like:\n * - 15' 4\" (feet and inches with symbols)\n * - 6ft 2in (text units)\n * - 72\" (inches only)\n * - 10' (feet only)\n * and convert it to millimeters.\n *\n * Returns null when the input doesn't contain recognizable feet/inches values.\n */\nexport function imperialToMm(input: string): number | null {\n if (typeof input !== 'string') return null;\n let s = input.trim();\n if (!s) return null;\n\n // Normalize various quote characters to plain ASCII ' and \"\n s = s\n .replace(/[’′‵`]/g, \"'\") // single-quote variants\n .replace(/[”″˝❞]/g, '\"') // double-quote variants\n .toLowerCase();\n\n // Regex to capture optional feet and inches components (decimals allowed)\n // Examples matched: 15' 4\", 6ft 2in, 72\", 10'\n const re = /^(?:\\s*(?<feet>\\d+(?:\\.\\d+)?)\\s*(?:'|ft|feet))?\\s*(?:\\s*(?<inches>\\d+(?:\\.\\d+)?)\\s*(?:\\\"|in\\b|inch(?:es)?\\b))?\\s*$/i;\n const m = s.match(re);\n if (!m || (!m.groups?.feet && !m.groups?.inches)) return null;\n\n const feet = m.groups?.feet ? parseFloat(m.groups.feet) : 0;\n const inches = m.groups?.inches ? parseFloat(m.groups.inches) : 0;\n if (!isFinite(feet) || !isFinite(inches)) return null;\n\n const totalInches = feet * 12 + inches;\n return inchesToMm(totalInches);\n}\n"],"names":["MM_PER_INCH","mmToInches","mm","precision","appendSymbol","inches","p","factor","value","inchesToMm","imperialToMm","input","s","re","m","_a","_b","feet","_c","_d","totalInches"],"mappings":"gFAIA,MAAMA,EAAc,KAQb,SAASC,EAAWC,EAAYC,EAAoB,EAAGC,EAAe,GAAwB,CACnG,MAAMC,EAASH,EAAKF,EACdM,EAAI,KAAK,IAAI,EAAGH,CAAS,EACzBI,EAAS,KAAK,IAAI,GAAID,CAAC,EACvBE,EAAQ,KAAK,MAAMH,EAASE,CAAM,EAAIA,EAC5C,OAAOH,EAAe,GAAGI,CAAK,IAAOA,CACvC,CASO,SAASC,EAAWJ,EAAwB,CACjD,OAAOA,EAASL,CAClB,CAYO,SAASU,EAAaC,EAA8B,aACzD,GAAI,OAAOA,GAAU,SAAU,OAAO,KACtC,IAAIC,EAAID,EAAM,KAAA,EACd,GAAI,CAACC,EAAG,OAAO,KAGfA,EAAIA,EACD,QAAQ,UAAW,GAAG,EACtB,QAAQ,UAAW,GAAG,EACtB,YAAA,EAIH,MAAMC,EAAK,sHACLC,EAAIF,EAAE,MAAMC,CAAE,EACpB,GAAI,CAACC,GAAM,GAACC,EAAAD,EAAE,SAAF,MAAAC,EAAU,OAAQ,GAACC,EAAAF,EAAE,SAAF,MAAAE,EAAU,QAAS,OAAO,KAEzD,MAAMC,GAAOC,EAAAJ,EAAE,SAAF,MAAAI,EAAU,KAAO,WAAWJ,EAAE,OAAO,IAAI,EAAI,EACpDT,GAASc,EAAAL,EAAE,SAAF,MAAAK,EAAU,OAAS,WAAWL,EAAE,OAAO,MAAM,EAAI,EAChE,GAAI,CAAC,SAASG,CAAI,GAAK,CAAC,SAASZ,CAAM,EAAG,OAAO,KAEjD,MAAMe,EAAcH,EAAO,GAAKZ,EAChC,OAAOI,EAAWW,CAAW,CAC/B"}
@@ -6,27 +6,21 @@
6
6
  * @param mm - Value in millimeters
7
7
  * @param precision - Optional decimal places to round to (no rounding if undefined)
8
8
  */
9
- export declare function mmToInches(mm: number, precision?: number): number;
10
- export interface FeetInches {
11
- feet: number;
12
- inches: number;
13
- }
9
+ export declare function mmToInches(mm: number, precision?: number, appendSymbol?: boolean): number | string;
14
10
  /**
15
- * Convert millimeters to feet and inches.
16
- *
17
- * By default, inches are rounded to the nearest whole inch. If the rounded
18
- * inches value equals 12, it carries over to the feet value.
19
- *
20
- * @param mm - Value in millimeters
21
- * @param options.roundInches - Round inches to a whole number (default: true)
22
- * @param options.precision - If provided and roundInches is false, round inches to N decimals
11
+ * Convert inches to millimeters.
12
+ * Always returns the full-precision value without rounding.
13
+ * @param inches - Value in inches
23
14
  */
24
- export declare function mmToFeetInches(mm: number, options?: {
25
- roundInches?: boolean;
26
- precision?: number;
27
- }): FeetInches;
15
+ export declare function inchesToMm(inches: number): number;
28
16
  /**
29
- * Format a feet/inches object as a human-readable string.
30
- * Examples: 5' 8", 12" (when feet is 0)
17
+ * Parse a human-entered imperial dimension like:
18
+ * - 15' 4" (feet and inches with symbols)
19
+ * - 6ft 2in (text units)
20
+ * - 72" (inches only)
21
+ * - 10' (feet only)
22
+ * and convert it to millimeters.
23
+ *
24
+ * Returns null when the input doesn't contain recognizable feet/inches values.
31
25
  */
32
- export declare function formatFeetInches(value: FeetInches): string;
26
+ export declare function imperialToMm(input: string): number | null;
@@ -1,29 +1,26 @@
1
- function u(o, t) {
2
- const n = o / 25.4;
3
- if (Number.isFinite(t)) {
4
- const c = Math.max(0, t), r = Math.pow(10, c);
5
- return Math.round(n * r) / r;
6
- }
7
- return n;
1
+ function h(t, n = 1, c = !1) {
2
+ const e = t / 25.4, o = Math.max(0, n), s = Math.pow(10, o), r = Math.round(e * s) / s;
3
+ return c ? `${r}"` : r;
8
4
  }
9
- function f(o, t = {}) {
10
- const { roundInches: n = !0, precision: c } = t, r = u(o);
11
- let s = Math.floor(r / 12), e = r - s * 12;
12
- if (n)
13
- e = Math.round(e);
14
- else if (Number.isFinite(c)) {
15
- const h = Math.max(0, c), i = Math.pow(10, h);
16
- e = Math.round(e * i) / i;
17
- }
18
- return e >= 12 && (s += 1, e -= 12), { feet: s, inches: e };
5
+ function l(t) {
6
+ return t * 25.4;
19
7
  }
20
- function a(o) {
21
- const { feet: t, inches: n } = o;
22
- return t === 0 ? `${n}"` : n === 0 ? `${t}'` : `${t}' ${n}"`;
8
+ function p(t) {
9
+ var i, u, a, f;
10
+ if (typeof t != "string") return null;
11
+ let n = t.trim();
12
+ if (!n) return null;
13
+ n = n.replace(/[’′‵`]/g, "'").replace(/[”″˝❞]/g, '"').toLowerCase();
14
+ const c = /^(?:\s*(?<feet>\d+(?:\.\d+)?)\s*(?:'|ft|feet))?\s*(?:\s*(?<inches>\d+(?:\.\d+)?)\s*(?:\"|in\b|inch(?:es)?\b))?\s*$/i, e = n.match(c);
15
+ if (!e || !((i = e.groups) != null && i.feet) && !((u = e.groups) != null && u.inches)) return null;
16
+ const o = (a = e.groups) != null && a.feet ? parseFloat(e.groups.feet) : 0, s = (f = e.groups) != null && f.inches ? parseFloat(e.groups.inches) : 0;
17
+ if (!isFinite(o) || !isFinite(s)) return null;
18
+ const r = o * 12 + s;
19
+ return l(r);
23
20
  }
24
21
  export {
25
- a as formatFeetInches,
26
- f as mmToFeetInches,
27
- u as mmToInches
22
+ p as imperialToMm,
23
+ l as inchesToMm,
24
+ h as mmToInches
28
25
  };
29
26
  //# sourceMappingURL=dimensions.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dimensions.mjs","sources":["../../src/utils/dimensions.ts"],"sourcesContent":["/**\n * Units + formatting helpers for converting millimeters to US customary units.\n */\n\nconst MM_PER_INCH = 25.4;\nconst INCHES_PER_FOOT = 12;\n\n/**\n * Convert millimeters to inches.\n * @param mm - Value in millimeters\n * @param precision - Optional decimal places to round to (no rounding if undefined)\n */\nexport function mmToInches(mm: number, precision?: number): number {\n const inches = mm / MM_PER_INCH;\n if (Number.isFinite(precision)) {\n const p = Math.max(0, precision as number);\n const factor = Math.pow(10, p);\n return Math.round(inches * factor) / factor;\n }\n return inches;\n}\n\nexport interface FeetInches {\n feet: number;\n inches: number; // remainder inches (0..11 when rounding to whole inches)\n}\n\n/**\n * Convert millimeters to feet and inches.\n *\n * By default, inches are rounded to the nearest whole inch. If the rounded\n * inches value equals 12, it carries over to the feet value.\n *\n * @param mm - Value in millimeters\n * @param options.roundInches - Round inches to a whole number (default: true)\n * @param options.precision - If provided and roundInches is false, round inches to N decimals\n */\nexport function mmToFeetInches(\n mm: number,\n options: { roundInches?: boolean; precision?: number } = {},\n): FeetInches {\n const { roundInches = true, precision } = options;\n const totalInches = mmToInches(mm);\n let feet = Math.floor(totalInches / INCHES_PER_FOOT);\n let inches = totalInches - feet * INCHES_PER_FOOT;\n\n if (roundInches) {\n inches = Math.round(inches);\n } else if (Number.isFinite(precision)) {\n const p = Math.max(0, precision as number);\n const factor = Math.pow(10, p);\n inches = Math.round(inches * factor) / factor;\n }\n\n // Carry over if inches rounds to 12\n if (inches >= INCHES_PER_FOOT) {\n feet += 1;\n inches -= INCHES_PER_FOOT;\n }\n\n return { feet, inches };\n}\n\n/**\n * Format a feet/inches object as a human-readable string.\n * Examples: 5' 8\", 12\" (when feet is 0)\n */\nexport function formatFeetInches(value: FeetInches): string {\n const { feet, inches } = value;\n if (feet === 0) return `${inches}\\\"`;\n if (inches === 0) return `${feet}'`;\n return `${feet}' ${inches}\\\"`;\n}\n\n"],"names":["mmToInches","mm","precision","inches","p","factor","mmToFeetInches","options","roundInches","totalInches","feet","formatFeetInches","value"],"mappings":"AAYO,SAASA,EAAWC,GAAYC,GAA4B;AACjE,QAAMC,IAASF,IAAK;AACpB,MAAI,OAAO,SAASC,CAAS,GAAG;AAC9B,UAAME,IAAI,KAAK,IAAI,GAAGF,CAAmB,GACnCG,IAAS,KAAK,IAAI,IAAID,CAAC;AAC7B,WAAO,KAAK,MAAMD,IAASE,CAAM,IAAIA;AAAA,EACvC;AACA,SAAOF;AACT;AAiBO,SAASG,EACdL,GACAM,IAAyD,IAC7C;AACZ,QAAM,EAAE,aAAAC,IAAc,IAAM,WAAAN,EAAA,IAAcK,GACpCE,IAAcT,EAAWC,CAAE;AACjC,MAAIS,IAAO,KAAK,MAAMD,IAAc,EAAe,GAC/CN,IAASM,IAAcC,IAAO;AAElC,MAAIF;AACF,IAAAL,IAAS,KAAK,MAAMA,CAAM;AAAA,WACjB,OAAO,SAASD,CAAS,GAAG;AACrC,UAAME,IAAI,KAAK,IAAI,GAAGF,CAAmB,GACnCG,IAAS,KAAK,IAAI,IAAID,CAAC;AAC7B,IAAAD,IAAS,KAAK,MAAMA,IAASE,CAAM,IAAIA;AAAA,EACzC;AAGA,SAAIF,KAAU,OACZO,KAAQ,GACRP,KAAU,KAGL,EAAE,MAAAO,GAAM,QAAAP,EAAA;AACjB;AAMO,SAASQ,EAAiBC,GAA2B;AAC1D,QAAM,EAAE,MAAAF,GAAM,QAAAP,EAAA,IAAWS;AACzB,SAAIF,MAAS,IAAU,GAAGP,CAAM,MAC5BA,MAAW,IAAU,GAAGO,CAAI,MACzB,GAAGA,CAAI,KAAKP,CAAM;AAC3B;"}
1
+ {"version":3,"file":"dimensions.mjs","sources":["../../src/utils/dimensions.ts"],"sourcesContent":["/**\n * Units + formatting helpers for converting millimeters to US customary units.\n */\n\nconst MM_PER_INCH = 25.4;\n// Note: feet/inches helpers removed to keep API minimal\n\n/**\n * Convert millimeters to inches.\n * @param mm - Value in millimeters\n * @param precision - Optional decimal places to round to (no rounding if undefined)\n */\nexport function mmToInches(mm: number, precision: number = 1, appendSymbol = false): number | string {\n const inches = mm / MM_PER_INCH;\n const p = Math.max(0, precision);\n const factor = Math.pow(10, p);\n const value = Math.round(inches * factor) / factor;\n return appendSymbol ? `${value}\\\"` : value;\n}\n\n// Feet/inches helpers were intentionally removed. Use mmToInches with append flag for display.\n\n/**\n * Convert inches to millimeters.\n * Always returns the full-precision value without rounding.\n * @param inches - Value in inches\n */\nexport function inchesToMm(inches: number): number {\n return inches * MM_PER_INCH;\n}\n\n/**\n * Parse a human-entered imperial dimension like:\n * - 15' 4\" (feet and inches with symbols)\n * - 6ft 2in (text units)\n * - 72\" (inches only)\n * - 10' (feet only)\n * and convert it to millimeters.\n *\n * Returns null when the input doesn't contain recognizable feet/inches values.\n */\nexport function imperialToMm(input: string): number | null {\n if (typeof input !== 'string') return null;\n let s = input.trim();\n if (!s) return null;\n\n // Normalize various quote characters to plain ASCII ' and \"\n s = s\n .replace(/[’′‵`]/g, \"'\") // single-quote variants\n .replace(/[”″˝❞]/g, '\"') // double-quote variants\n .toLowerCase();\n\n // Regex to capture optional feet and inches components (decimals allowed)\n // Examples matched: 15' 4\", 6ft 2in, 72\", 10'\n const re = /^(?:\\s*(?<feet>\\d+(?:\\.\\d+)?)\\s*(?:'|ft|feet))?\\s*(?:\\s*(?<inches>\\d+(?:\\.\\d+)?)\\s*(?:\\\"|in\\b|inch(?:es)?\\b))?\\s*$/i;\n const m = s.match(re);\n if (!m || (!m.groups?.feet && !m.groups?.inches)) return null;\n\n const feet = m.groups?.feet ? parseFloat(m.groups.feet) : 0;\n const inches = m.groups?.inches ? parseFloat(m.groups.inches) : 0;\n if (!isFinite(feet) || !isFinite(inches)) return null;\n\n const totalInches = feet * 12 + inches;\n return inchesToMm(totalInches);\n}\n"],"names":["mmToInches","mm","precision","appendSymbol","inches","p","factor","value","inchesToMm","imperialToMm","input","_a","_b","_c","_d","s","re","m","feet","totalInches"],"mappings":"AAYO,SAASA,EAAWC,GAAYC,IAAoB,GAAGC,IAAe,IAAwB;AACnG,QAAMC,IAASH,IAAK,MACdI,IAAI,KAAK,IAAI,GAAGH,CAAS,GACzBI,IAAS,KAAK,IAAI,IAAID,CAAC,GACvBE,IAAQ,KAAK,MAAMH,IAASE,CAAM,IAAIA;AAC5C,SAAOH,IAAe,GAAGI,CAAK,MAAOA;AACvC;AASO,SAASC,EAAWJ,GAAwB;AACjD,SAAOA,IAAS;AAClB;AAYO,SAASK,EAAaC,GAA8B;AArC3D,MAAAC,GAAAC,GAAAC,GAAAC;AAsCE,MAAI,OAAOJ,KAAU,SAAU,QAAO;AACtC,MAAIK,IAAIL,EAAM,KAAA;AACd,MAAI,CAACK,EAAG,QAAO;AAGf,EAAAA,IAAIA,EACD,QAAQ,WAAW,GAAG,EACtB,QAAQ,WAAW,GAAG,EACtB,YAAA;AAIH,QAAMC,IAAK,uHACLC,IAAIF,EAAE,MAAMC,CAAE;AACpB,MAAI,CAACC,KAAM,GAACN,IAAAM,EAAE,WAAF,QAAAN,EAAU,SAAQ,GAACC,IAAAK,EAAE,WAAF,QAAAL,EAAU,QAAS,QAAO;AAEzD,QAAMM,KAAOL,IAAAI,EAAE,WAAF,QAAAJ,EAAU,OAAO,WAAWI,EAAE,OAAO,IAAI,IAAI,GACpDb,KAASU,IAAAG,EAAE,WAAF,QAAAH,EAAU,SAAS,WAAWG,EAAE,OAAO,MAAM,IAAI;AAChE,MAAI,CAAC,SAASC,CAAI,KAAK,CAAC,SAASd,CAAM,EAAG,QAAO;AAEjD,QAAMe,IAAcD,IAAO,KAAKd;AAChC,SAAOI,EAAWW,CAAW;AAC/B;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superbright/indexeddb-orm",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Vite + TypeScript starter for an IndexedDB ORM (Dexie + Zod) with playground.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -17,6 +17,11 @@
17
17
  "types": "./dist/utils/dimensions.d.ts",
18
18
  "import": "./dist/utils/dimensions.mjs",
19
19
  "require": "./dist/utils/dimensions.cjs"
20
+ },
21
+ "./analytics": {
22
+ "types": "./dist/features/analytics/index.d.ts",
23
+ "import": "./dist/features/analytics/index.mjs",
24
+ "require": "./dist/features/analytics/index.cjs"
20
25
  }
21
26
  },
22
27
  "sideEffects": false,
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("react/jsx-runtime"),i=require("react"),d=require("./generateUserUUID.cjs"),o=require("mixpanel-browser"),u=i.createContext(null),x=({children:e,token:t,envMode:s})=>(i.useEffect(()=>{const r=(s??"production").toLowerCase(),l=r==="development"||r==="staging",c=r==="development",a="Mixpanel token not set. Pass a token prop to MixpanelProvider or define VITE_MIXPANEL_TOKEN.";if(!t){l?console.error(`❌ ${a}`):console.warn(`⚠️ ${a}`);return}o.init(t,{debug:c,persistence:"localStorage",autocapture:{pageview:"full-url",click:!0,input:!0,rage_click:!0,scroll:!0,submit:!0,capture_text_content:!1}}),(async()=>{try{const n=await d.generateUserUUID;o.identify(n)}catch(n){console.error("❌ Failed to set Mixpanel identity:",n)}})()},[s,t]),p.jsx(u.Provider,{value:o,children:e})),g=()=>{const e=i.useContext(u);if(!e)throw new Error("useMixpanel must be used within MixpanelProvider");return e};exports.MixpanelProvider=x;exports.useMixpanel=g;
2
- //# sourceMappingURL=MixpanelProvider.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MixpanelProvider.cjs","sources":["../../../src/features/analytics/MixpanelProvider.tsx"],"sourcesContent":["import React, { createContext, useContext, useEffect, useRef } from \"react\";\n\nimport { generateUserUUID } from \"./generateUserUUID\";\nimport mixpanel from \"mixpanel-browser\";\n\nconst MixpanelContext = createContext<typeof mixpanel | null>(null);\n\ninterface MixpanelProviderProps {\n children: React.ReactNode;\n token?: string;\n envMode?: string;\n}\n\nexport const MixpanelProvider = ({ children, token, envMode }: MixpanelProviderProps) => {\n\n\n useEffect(() => {\n const normalizedMode = (envMode ?? \"production\").toLowerCase();\n const shouldError =\n normalizedMode === \"development\" || normalizedMode === \"staging\";\n const debugEnabled = normalizedMode === \"development\";\n\n const message =\n \"Mixpanel token not set. Pass a token prop to MixpanelProvider or define VITE_MIXPANEL_TOKEN.\";\n\n if (!token) {\n if (shouldError) {\n console.error(`❌ ${message}`);\n } else {\n console.warn(`⚠️ ${message}`);\n }\n return;\n }\n\n\n\n mixpanel.init(token, {\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\n\n (async () => {\n try {\n const uuid = await generateUserUUID;\n mixpanel.identify(uuid);\n } catch (err) {\n console.error(\"❌ Failed to set Mixpanel identity:\", err);\n }\n })();\n }, [envMode, token]);\n\n return (\n <MixpanelContext.Provider value={mixpanel}>\n {children}\n </MixpanelContext.Provider>\n );\n};\n\nexport const useMixpanel = () => {\n const ctx = useContext(MixpanelContext);\n if (!ctx) throw new Error(\"useMixpanel must be used within MixpanelProvider\");\n return ctx;\n};\n"],"names":["MixpanelContext","createContext","MixpanelProvider","children","token","envMode","useEffect","normalizedMode","shouldError","debugEnabled","message","mixpanel","uuid","generateUserUUID","err","useMixpanel","ctx","useContext"],"mappings":"0MAKMA,EAAkBC,EAAAA,cAAsC,IAAI,EAQrDC,EAAmB,CAAC,CAAE,SAAAC,EAAU,MAAAC,EAAO,QAAAC,MAGlDC,EAAAA,UAAU,IAAM,CACd,MAAMC,GAAkBF,GAAW,cAAc,YAAA,EAC3CG,EACJD,IAAmB,eAAiBA,IAAmB,UACnDE,EAAeF,IAAmB,cAElCG,EACJ,+FAEF,GAAI,CAACN,EAAO,CACNI,EACF,QAAQ,MAAM,KAAKE,CAAO,EAAE,EAE5B,QAAQ,KAAK,MAAMA,CAAO,EAAE,EAE9B,MACF,CAIAC,EAAS,KAAKP,EAAO,CACnB,MAAOK,EACP,YAAa,eACb,YAAa,CACX,SAAU,WACV,MAAO,GACP,MAAO,GACP,WAAY,GACZ,OAAQ,GACR,OAAQ,GACR,qBAAsB,EAAA,CACxB,CACD,GAGA,SAAY,CACX,GAAI,CACF,MAAMG,EAAO,MAAMC,EAAAA,iBACnBF,EAAS,SAASC,CAAI,CACxB,OAASE,EAAK,CACZ,QAAQ,MAAM,qCAAsCA,CAAG,CACzD,CACF,GAAA,CACF,EAAG,CAACT,EAASD,CAAK,CAAC,QAGhBJ,EAAgB,SAAhB,CAAyB,MAAOW,EAC9B,SAAAR,EACH,GAISY,EAAc,IAAM,CAC/B,MAAMC,EAAMC,EAAAA,WAAWjB,CAAe,EACtC,GAAI,CAACgB,EAAK,MAAM,IAAI,MAAM,kDAAkD,EAC5E,OAAOA,CACT"}
@@ -1,40 +0,0 @@
1
- import { jsx as u } from "react/jsx-runtime";
2
- import { useEffect as p, createContext as d, useContext as x } from "react";
3
- import { generateUserUUID as m } from "./generateUserUUID.mjs";
4
- import n from "mixpanel-browser";
5
- const a = d(null), w = ({ children: e, token: t, envMode: i }) => (p(() => {
6
- const r = (i ?? "production").toLowerCase(), l = r === "development" || r === "staging", c = r === "development", s = "Mixpanel token not set. Pass a token prop to MixpanelProvider or define VITE_MIXPANEL_TOKEN.";
7
- if (!t) {
8
- l ? console.error(`❌ ${s}`) : console.warn(`⚠️ ${s}`);
9
- return;
10
- }
11
- n.init(t, {
12
- debug: c,
13
- persistence: "localStorage",
14
- autocapture: {
15
- pageview: "full-url",
16
- click: !0,
17
- input: !0,
18
- rage_click: !0,
19
- scroll: !0,
20
- submit: !0,
21
- capture_text_content: !1
22
- }
23
- }), (async () => {
24
- try {
25
- const o = await m;
26
- n.identify(o);
27
- } catch (o) {
28
- console.error("❌ Failed to set Mixpanel identity:", o);
29
- }
30
- })();
31
- }, [i, t]), /* @__PURE__ */ u(a.Provider, { value: n, children: e })), E = () => {
32
- const e = x(a);
33
- if (!e) throw new Error("useMixpanel must be used within MixpanelProvider");
34
- return e;
35
- };
36
- export {
37
- w as MixpanelProvider,
38
- E as useMixpanel
39
- };
40
- //# sourceMappingURL=MixpanelProvider.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MixpanelProvider.mjs","sources":["../../../src/features/analytics/MixpanelProvider.tsx"],"sourcesContent":["import React, { createContext, useContext, useEffect, useRef } from \"react\";\n\nimport { generateUserUUID } from \"./generateUserUUID\";\nimport mixpanel from \"mixpanel-browser\";\n\nconst MixpanelContext = createContext<typeof mixpanel | null>(null);\n\ninterface MixpanelProviderProps {\n children: React.ReactNode;\n token?: string;\n envMode?: string;\n}\n\nexport const MixpanelProvider = ({ children, token, envMode }: MixpanelProviderProps) => {\n\n\n useEffect(() => {\n const normalizedMode = (envMode ?? \"production\").toLowerCase();\n const shouldError =\n normalizedMode === \"development\" || normalizedMode === \"staging\";\n const debugEnabled = normalizedMode === \"development\";\n\n const message =\n \"Mixpanel token not set. Pass a token prop to MixpanelProvider or define VITE_MIXPANEL_TOKEN.\";\n\n if (!token) {\n if (shouldError) {\n console.error(`❌ ${message}`);\n } else {\n console.warn(`⚠️ ${message}`);\n }\n return;\n }\n\n\n\n mixpanel.init(token, {\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\n\n (async () => {\n try {\n const uuid = await generateUserUUID;\n mixpanel.identify(uuid);\n } catch (err) {\n console.error(\"❌ Failed to set Mixpanel identity:\", err);\n }\n })();\n }, [envMode, token]);\n\n return (\n <MixpanelContext.Provider value={mixpanel}>\n {children}\n </MixpanelContext.Provider>\n );\n};\n\nexport const useMixpanel = () => {\n const ctx = useContext(MixpanelContext);\n if (!ctx) throw new Error(\"useMixpanel must be used within MixpanelProvider\");\n return ctx;\n};\n"],"names":["MixpanelContext","createContext","MixpanelProvider","children","token","envMode","useEffect","normalizedMode","shouldError","debugEnabled","message","mixpanel","uuid","generateUserUUID","err","useMixpanel","ctx","useContext"],"mappings":";;;;AAKA,MAAMA,IAAkBC,EAAsC,IAAI,GAQrDC,IAAmB,CAAC,EAAE,UAAAC,GAAU,OAAAC,GAAO,SAAAC,SAGlDC,EAAU,MAAM;AACd,QAAMC,KAAkBF,KAAW,cAAc,YAAA,GAC3CG,IACJD,MAAmB,iBAAiBA,MAAmB,WACnDE,IAAeF,MAAmB,eAElCG,IACJ;AAEF,MAAI,CAACN,GAAO;AACV,IAAII,IACF,QAAQ,MAAM,KAAKE,CAAO,EAAE,IAE5B,QAAQ,KAAK,MAAMA,CAAO,EAAE;AAE9B;AAAA,EACF;AAIA,EAAAC,EAAS,KAAKP,GAAO;AAAA,IACnB,OAAOK;AAAA,IACP,aAAa;AAAA,IACb,aAAa;AAAA,MACX,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,sBAAsB;AAAA,IAAA;AAAA,EACxB,CACD,IAGA,YAAY;AACX,QAAI;AACF,YAAMG,IAAO,MAAMC;AACnB,MAAAF,EAAS,SAASC,CAAI;AAAA,IACxB,SAASE,GAAK;AACZ,cAAQ,MAAM,sCAAsCA,CAAG;AAAA,IACzD;AAAA,EACF,GAAA;AACF,GAAG,CAACT,GAASD,CAAK,CAAC,qBAGhBJ,EAAgB,UAAhB,EAAyB,OAAOW,GAC9B,UAAAR,GACH,IAISY,IAAc,MAAM;AAC/B,QAAMC,IAAMC,EAAWjB,CAAe;AACtC,MAAI,CAACgB,EAAK,OAAM,IAAI,MAAM,kDAAkD;AAC5E,SAAOA;AACT;"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../utils/casing.cjs"),v=require("../../utils/collections.cjs"),b=require("./MixpanelProvider.cjs"),e=require("../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs"),U=["location","budget","size","other"],g=["cost_low_to_high","cost_high_to_low","newest","relevance"],k=["Skip","Continue","Back"],l=e.object({propertyId:e.string().min(1,"propertyId is required"),propertySlug:e.string().min(1,"propertySlug 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()}),E=u.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),d=u.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional(),lifestylePreferences:e.unknown().optional()}),m=u.extend({funnelStep:e.number().int().nonnegative(),profileQuestion:e.string().min(1,"profileQuestion is required"),interactedElement:e.enum(k),questionEnum:e.string().optional()}),q=m.extend({selectedAnswersEnumArray:e.any().transform(a=>v.normalizeToStringArray(a)).refine(a=>Array.isArray(a),{message:"selectedAnswersEnumArray must resolve to an array"})});l.extend({unitId:e.string().min(1,"unitId is required"),unitTitle:e.string().min(1,"unitTitle is required"),unitSlug:e.string().min(1,"unitSlug is required")});const p=u.extend({unitId:e.string().min(1,"unitId is required"),unitTitle:e.string().min(1,"unitTitle is required"),unitSlug:e.string().min(1,"unitSlug is required")}),I=p.extend({favoritedUnit:e.boolean()}),f=e.any().transform(a=>v.normalizeToStringArray(a)).refine(a=>Array.isArray(a),{message:"Selection must resolve to an array"}),w=u.extend({filterIndex:e.number().int().nonnegative(),filterLabel:e.string().min(1,"filterLabel is required"),selectedFiltersEnum:f,filterName:e.string().optional()}),S=u.extend({filterIndex:e.number().int().nonnegative(),filterLabel:e.string().min(1,"filterLabel is required"),selectedFiltersEnum:f}),y=l.extend({sortIndex:e.number().int().nonnegative(),sortEnum:e.enum(g)}),A=u.extend({sortIndex:e.number().int().nonnegative(),sortEnum:e.enum(g),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),P=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()}),F=p.extend({favoritedUnit:e.boolean()}),K=p.extend({favoritedUnit:e.boolean()}),O=u.extend({unitId:e.string().min(1,"unitId is required"),unitTitle:e.string().min(1,"unitTitle is required"),unitSlug:e.string().min(1,"unitSlug is required"),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()});function C(){const a=b.useMixpanel();return(o,t)=>{const n=t==null?t:s.convertKeysToSnakeCase(t);a.track(o,n)}}const Q=(a,o,t,n)=>r=>{const i=s.convertKeysToCamelCase(r),c=o.parse(i),h=n!=null&&n.forwardOriginalPayload?r:c;t(a,h,{skipKeyTransform:n==null?void 0:n.skipKeyTransform})};function T(a){const o=(n,r,i)=>{const c=i!=null&&i.skipKeyTransform?r:s.convertKeysToSnakeCase(r);a(n,c)},t=(n,r,i)=>Q(n,r,o,i);return{trackViewAllUnits:n=>{const r=s.convertKeysToCamelCase(n),i=x.parse({unitCountDate:new Date().toISOString(),...r});o("View All Units",i)},trackQuestionnaireSkip:n=>{const r=s.convertKeysToCamelCase(n),i=m.parse({...r,interactedElement:"Skip"});o("Questionnaire Navigated",i)},trackQuestionnaireContinue:n=>{const r=s.convertKeysToCamelCase(n),i=q.parse({...r,interactedElement:"Continue"});o("Questionnaire Navigated",i)},trackQuestionnaireBack:n=>{const r=s.convertKeysToCamelCase(n),i=m.parse({...r,interactedElement:"Back"});o("Questionnaire Navigated",i)},trackClickUnit:t("Unit Card Clicked",F,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackHoverUnit:t("Unit Hovered",I,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackLoadMore:n=>{const r=s.convertKeysToCamelCase(n),i=E.parse({unitCountDate:new Date().toISOString(),...r});o("Load More",i)},trackFilterOpened:t("Filter Opened",w),trackFilterCanceled:t("Filter Canceled",S),trackFilterApplied:t("Filter Applied",S),trackOpenSort:n=>{const r=s.convertKeysToCamelCase(n),i=A.parse({unitCountDate:new Date().toISOString(),...r});o("Sort Opened",i)},trackSelectSort:t("Sort Applied",y),trackCancelSort:t("Sort Canceled",y),trackClickUnitFavorites:t("Unit Favorited",K),trackUnitUnfavorited:t("Unit Unfavorited",O),trackQuestionnaireResult:t("Questionnaire Submitted",P),trackScheduleTourFormInteracted:t("Schedule Tour Form Interacted",d,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackScheduleTourFormSubmitted:t("Schedule Tour Form Submitted",d,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackScheduleTourUrlClicked:t("Schedule Tour URL Clicked",d,{skipKeyTransform:!0,forwardOriginalPayload:!0})}}function D(){const a=C();return T(a)}exports.QuestionEnumValues=U;exports.QuestionnaireInteractionValues=k;exports.SortEnumValues=g;exports.buildTrackingEvents=T;exports.useTrackEvent=C;exports.useTrackingEvents=D;
2
- //# sourceMappingURL=analytics.cjs.map
@@ -1 +0,0 @@
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 { useMixpanel } from \"./MixpanelProvider\";\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});\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 unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\n\nconst unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug 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 unitTitle: z.string().min(1, \"unitTitle 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 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 mixpanel = useMixpanel();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n mixpanel.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: z.input<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: (payload: z.input<typeof viewAllUnitsSchema>) => {\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: Omit<\n z.input<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: Omit<\n z.input<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: Omit<\n z.input<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: (payload: z.input<typeof loadMoreSchema>) => {\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(\"Load More\", parsed);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Canceled\",\n filterMutationSchema,\n ),\n trackFilterApplied: createStrictTracker(\n \"Filter Applied\",\n filterMutationSchema,\n ),\n trackOpenSort: (payload: z.input<typeof sortOpenSchema>) => {\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 };\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","hoverUnitSchema","z.boolean","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","z.array","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","mixpanel","useMixpanel","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","normalizedPayload","convertKeysToCamelCase","parsed","payloadForDispatch","buildTrackingEvents","trackEvent","finalPayload","createStrictTracker","useTrackingEvents"],"mappings":"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"}
@@ -1,230 +0,0 @@
1
- import { convertKeysToSnakeCase as T, convertKeysToCamelCase as u } from "../../utils/casing.mjs";
2
- import { normalizeToStringArray as h } from "../../utils/collections.mjs";
3
- import { useMixpanel as q } from "./MixpanelProvider.mjs";
4
- import { object as p, string as e, number as o, enum as y, any as C, unknown as U, boolean as k, array as w } from "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.mjs";
5
- const J = ["location", "budget", "size", "other"], x = [
6
- "cost_low_to_high",
7
- "cost_high_to_low",
8
- "newest",
9
- "relevance"
10
- ], b = [
11
- "Skip",
12
- "Continue",
13
- "Back"
14
- ], c = p({
15
- propertyId: e().min(1, "propertyId is required"),
16
- propertySlug: e().min(1, "propertySlug is required")
17
- }), l = c.extend({
18
- propertyName: e().min(1, "propertyName is required")
19
- }), A = l.extend({
20
- totalUnitsAvailable: o().int().nonnegative(),
21
- resultsUnitCount: o().int().nonnegative(),
22
- unitCountDate: e().optional()
23
- }), F = l.extend({
24
- totalUnitsAvailable: o().int().nonnegative(),
25
- resultsUnitCount: o().int().nonnegative(),
26
- unitCountDate: e().optional()
27
- }), m = l.extend({
28
- totalUnitsAvailable: o().int().nonnegative(),
29
- resultsUnitCount: o().int().nonnegative(),
30
- unitCountDate: e().optional(),
31
- lifestylePreferences: U().optional()
32
- }), S = l.extend({
33
- funnelStep: o().int().nonnegative(),
34
- profileQuestion: e().min(1, "profileQuestion is required"),
35
- interactedElement: y(b),
36
- questionEnum: e().optional()
37
- }), P = S.extend({
38
- selectedAnswersEnumArray: C().transform((a) => h(a)).refine((a) => Array.isArray(a), {
39
- message: "selectedAnswersEnumArray must resolve to an array"
40
- })
41
- });
42
- c.extend({
43
- unitId: e().min(1, "unitId is required"),
44
- unitTitle: e().min(1, "unitTitle is required"),
45
- unitSlug: e().min(1, "unitSlug is required")
46
- });
47
- const f = l.extend({
48
- unitId: e().min(1, "unitId is required"),
49
- unitTitle: e().min(1, "unitTitle is required"),
50
- unitSlug: e().min(1, "unitSlug is required")
51
- }), O = f.extend({
52
- favoritedUnit: k()
53
- }), I = C().transform((a) => h(a)).refine((a) => Array.isArray(a), {
54
- message: "Selection must resolve to an array"
55
- }), Q = l.extend({
56
- filterIndex: o().int().nonnegative(),
57
- filterLabel: e().min(1, "filterLabel is required"),
58
- selectedFiltersEnum: I,
59
- filterName: e().optional()
60
- }), v = l.extend({
61
- filterIndex: o().int().nonnegative(),
62
- filterLabel: e().min(1, "filterLabel is required"),
63
- selectedFiltersEnum: I
64
- }), g = c.extend({
65
- sortIndex: o().int().nonnegative(),
66
- sortEnum: y(x)
67
- }), D = l.extend({
68
- sortIndex: o().int().nonnegative(),
69
- sortEnum: y(x),
70
- resultsUnitCount: o().int().nonnegative(),
71
- unitCountDate: e().optional()
72
- }), K = c.extend({
73
- fullQuestionnaireSchemaJson: U().optional(),
74
- resultsJson: p({
75
- type: e().optional(),
76
- total: o().int().nonnegative().optional(),
77
- units: w(
78
- p({
79
- unitId: e().min(1, "unitId is required"),
80
- unitName: e().optional()
81
- })
82
- ).optional()
83
- }).optional()
84
- }), z = f.extend({
85
- favoritedUnit: k()
86
- }), N = f.extend({
87
- favoritedUnit: k()
88
- }), L = l.extend({
89
- unitId: e().min(1, "unitId is required"),
90
- unitTitle: e().min(1, "unitTitle is required"),
91
- unitSlug: e().min(1, "unitSlug is required"),
92
- resultsUnitCount: o().int().nonnegative(),
93
- unitCountDate: e().optional()
94
- });
95
- function _() {
96
- const a = q();
97
- return (s, n) => {
98
- const t = n == null ? n : T(n);
99
- a.track(s, t);
100
- };
101
- }
102
- const M = (a, s, n, t) => (r) => {
103
- const i = u(
104
- r
105
- ), d = s.parse(i), E = t != null && t.forwardOriginalPayload ? r : d;
106
- n(a, E, {
107
- skipKeyTransform: t == null ? void 0 : t.skipKeyTransform
108
- });
109
- };
110
- function V(a) {
111
- const s = (t, r, i) => {
112
- const d = i != null && i.skipKeyTransform ? r : T(r);
113
- a(t, d);
114
- }, n = (t, r, i) => M(t, r, s, i);
115
- return {
116
- trackViewAllUnits: (t) => {
117
- const r = u(
118
- t
119
- ), i = A.parse({
120
- unitCountDate: (/* @__PURE__ */ new Date()).toISOString(),
121
- ...r
122
- });
123
- s("View All Units", i);
124
- },
125
- trackQuestionnaireSkip: (t) => {
126
- const r = u(
127
- t
128
- ), i = S.parse({
129
- ...r,
130
- interactedElement: "Skip"
131
- });
132
- s("Questionnaire Navigated", i);
133
- },
134
- trackQuestionnaireContinue: (t) => {
135
- const r = u(
136
- t
137
- ), i = P.parse({
138
- ...r,
139
- interactedElement: "Continue"
140
- });
141
- s("Questionnaire Navigated", i);
142
- },
143
- trackQuestionnaireBack: (t) => {
144
- const r = u(
145
- t
146
- ), i = S.parse({
147
- ...r,
148
- interactedElement: "Back"
149
- });
150
- s("Questionnaire Navigated", i);
151
- },
152
- trackClickUnit: n("Unit Card Clicked", z, {
153
- skipKeyTransform: !0,
154
- forwardOriginalPayload: !0
155
- }),
156
- trackHoverUnit: n("Unit Hovered", O, {
157
- skipKeyTransform: !0,
158
- forwardOriginalPayload: !0
159
- }),
160
- trackLoadMore: (t) => {
161
- const r = u(
162
- t
163
- ), i = F.parse({
164
- unitCountDate: (/* @__PURE__ */ new Date()).toISOString(),
165
- ...r
166
- });
167
- s("Load More", i);
168
- },
169
- trackFilterOpened: n("Filter Opened", Q),
170
- trackFilterCanceled: n(
171
- "Filter Canceled",
172
- v
173
- ),
174
- trackFilterApplied: n(
175
- "Filter Applied",
176
- v
177
- ),
178
- trackOpenSort: (t) => {
179
- const r = u(
180
- t
181
- ), i = D.parse({
182
- unitCountDate: (/* @__PURE__ */ new Date()).toISOString(),
183
- ...r
184
- });
185
- s("Sort Opened", i);
186
- },
187
- trackSelectSort: n("Sort Applied", g),
188
- trackCancelSort: n("Sort Canceled", g),
189
- trackClickUnitFavorites: n(
190
- "Unit Favorited",
191
- N
192
- ),
193
- trackUnitUnfavorited: n(
194
- "Unit Unfavorited",
195
- L
196
- ),
197
- trackQuestionnaireResult: n(
198
- "Questionnaire Submitted",
199
- K
200
- ),
201
- trackScheduleTourFormInteracted: n(
202
- "Schedule Tour Form Interacted",
203
- m,
204
- { skipKeyTransform: !0, forwardOriginalPayload: !0 }
205
- ),
206
- trackScheduleTourFormSubmitted: n(
207
- "Schedule Tour Form Submitted",
208
- m,
209
- { skipKeyTransform: !0, forwardOriginalPayload: !0 }
210
- ),
211
- trackScheduleTourUrlClicked: n(
212
- "Schedule Tour URL Clicked",
213
- m,
214
- { skipKeyTransform: !0, forwardOriginalPayload: !0 }
215
- )
216
- };
217
- }
218
- function W() {
219
- const a = _();
220
- return V(a);
221
- }
222
- export {
223
- J as QuestionEnumValues,
224
- b as QuestionnaireInteractionValues,
225
- x as SortEnumValues,
226
- V as buildTrackingEvents,
227
- _ as useTrackEvent,
228
- W as useTrackingEvents
229
- };
230
- //# sourceMappingURL=analytics.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analytics.mjs","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 { useMixpanel } from \"./MixpanelProvider\";\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});\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 unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\n\nconst unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug 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 unitTitle: z.string().min(1, \"unitTitle 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 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 mixpanel = useMixpanel();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n mixpanel.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: z.input<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: (payload: z.input<typeof viewAllUnitsSchema>) => {\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: Omit<\n z.input<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: Omit<\n z.input<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: Omit<\n z.input<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: (payload: z.input<typeof loadMoreSchema>) => {\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(\"Load More\", parsed);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Canceled\",\n filterMutationSchema,\n ),\n trackFilterApplied: createStrictTracker(\n \"Filter Applied\",\n filterMutationSchema,\n ),\n trackOpenSort: (payload: z.input<typeof sortOpenSchema>) => {\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 };\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","hoverUnitSchema","z.boolean","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","z.array","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","mixpanel","useMixpanel","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","normalizedPayload","convertKeysToCamelCase","parsed","payloadForDispatch","buildTrackingEvents","trackEvent","finalPayload","createStrictTracker","useTrackingEvents"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../api/users.cjs"),r=e.getUserUUID();exports.generateUserUUID=r;
2
- //# sourceMappingURL=generateUserUUID.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generateUserUUID.cjs","sources":["../../../src/features/analytics/generateUserUUID.ts"],"sourcesContent":["import { getUserUUID } from \"../../api/users\";\n\nexport const generateUserUUID = getUserUUID();\n"],"names":["generateUserUUID","getUserUUID"],"mappings":"uHAEaA,EAAmBC,EAAAA,YAAA"}
@@ -1,6 +0,0 @@
1
- import { getUserUUID as e } from "../../api/users.mjs";
2
- const U = e();
3
- export {
4
- U as generateUserUUID
5
- };
6
- //# sourceMappingURL=generateUserUUID.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generateUserUUID.mjs","sources":["../../../src/features/analytics/generateUserUUID.ts"],"sourcesContent":["import { getUserUUID } from \"../../api/users\";\n\nexport const generateUserUUID = getUserUUID();\n"],"names":["generateUserUUID","getUserUUID"],"mappings":";AAEO,MAAMA,IAAmBC,EAAA;"}