@hanzo/event 0.3.44 → 0.3.48

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.
@@ -0,0 +1,22 @@
1
+ export interface CommerceItem {
2
+ item_id: string;
3
+ item_name?: string;
4
+ item_category: 'individual' | 'team';
5
+ item_variant: 'monthly' | 'annual';
6
+ price: number;
7
+ quantity: number;
8
+ }
9
+ export interface PlanLine {
10
+ id: string;
11
+ name?: string;
12
+ /** A team plan is sold per seat. */
13
+ team?: boolean;
14
+ /** The term, as commerce (`month`, `year`) or the funnel (`monthly`, `annual`) says it. */
15
+ interval: string;
16
+ price: number | null;
17
+ quantity?: number;
18
+ }
19
+ export declare function commerceItem(p: PlanLine): CommerceItem;
20
+ /** What the whole order is worth: the unit price times the seats. */
21
+ export declare const worth: (i: CommerceItem) => number;
22
+ //# sourceMappingURL=items.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../src/items.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,YAAY,GAAG,MAAM,CAAA;IACpC,YAAY,EAAE,SAAS,GAAG,QAAQ,CAAA;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,2FAA2F;IAC3F,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,GAAG,YAAY,CAUtD;AAED,qEAAqE;AACrE,eAAO,MAAM,KAAK,MAAO,YAAY,KAAG,MAA8B,CAAA"}
package/dist/react.cjs CHANGED
@@ -22,20 +22,20 @@ var SOCIAL_HOSTS = [
22
22
  var SEARCH_HOSTS = ["google.", "bing.", "duckduckgo.", "yahoo.", "baidu.", "ecosia."];
23
23
  function parseAttribution(search, referrer) {
24
24
  const q = new URLSearchParams(search || "");
25
- const get = (k) => {
25
+ const get2 = (k) => {
26
26
  const v = q.get(k);
27
27
  return v ? v.trim() : void 0;
28
28
  };
29
29
  const a = {
30
30
  utm: {
31
- source: get("utm_source"),
32
- medium: get("utm_medium"),
33
- campaign: get("utm_campaign"),
34
- term: get("utm_term"),
35
- content: get("utm_content")
31
+ source: get2("utm_source"),
32
+ medium: get2("utm_medium"),
33
+ campaign: get2("utm_campaign"),
34
+ term: get2("utm_term"),
35
+ content: get2("utm_content")
36
36
  },
37
37
  referrer: referrer ? referrer.trim() : void 0,
38
- refCode: get("ref") || get("refCode") || get("ref_code") || void 0
38
+ refCode: get2("ref") || get2("refCode") || get2("ref_code") || void 0
39
39
  };
40
40
  a.channel = deriveChannel(a);
41
41
  return a;
@@ -397,7 +397,7 @@ function hzAnonAdopt(id) {
397
397
  }
398
398
 
399
399
  // package.json
400
- var version = "0.3.44";
400
+ var version = "0.3.48";
401
401
 
402
402
  // src/version.ts
403
403
  var VERSION = version;
@@ -805,10 +805,10 @@ function linkUrl(url, state, fromHost, base) {
805
805
  }
806
806
  if (u.protocol !== "https:" && u.protocol !== "http:") return url;
807
807
  if (!orgOf(u.hostname) || u.hostname === fromHost) return url;
808
- const set = (k, v) => v && u.searchParams.set(k, v);
809
- if (isId(state.anonId)) set(LINK_PARAMS.anon, state.anonId);
810
- if (isId(state.sessionId)) set(LINK_PARAMS.session, state.sessionId);
811
- if (state.firstTouch) set(LINK_PARAMS.firstTouch, encodeFirstTouch(state.firstTouch));
808
+ const set2 = (k, v) => v && u.searchParams.set(k, v);
809
+ if (isId(state.anonId)) set2(LINK_PARAMS.anon, state.anonId);
810
+ if (isId(state.sessionId)) set2(LINK_PARAMS.session, state.sessionId);
811
+ if (state.firstTouch) set2(LINK_PARAMS.firstTouch, encodeFirstTouch(state.firstTouch));
812
812
  return u.toString();
813
813
  }
814
814
  function readLink(search) {
@@ -1270,6 +1270,45 @@ function createAnalytics(config) {
1270
1270
  return fresh;
1271
1271
  }
1272
1272
 
1273
+ // src/cookie.ts
1274
+ function get(name) {
1275
+ if (typeof document === "undefined") return void 0;
1276
+ const hit = document.cookie.split("; ").find((c) => c.startsWith(`${name}=`));
1277
+ return hit ? decodeURIComponent(hit.slice(name.length + 1)) : void 0;
1278
+ }
1279
+
1280
+ // src/consent.ts
1281
+ var CONSENT_COOKIE = "hz_consent";
1282
+ var CONSENT_EVENT = "hzconsent";
1283
+ var US = /^(America\/(New_York|Chicago|Denver|Los_Angeles|Phoenix|Anchorage|Adak|Boise|Detroit|Juneau|Sitka|Nome|Yakutat|Menominee|Metlakatla|Indiana\/.*|Kentucky\/.*|North_Dakota\/.*)|Pacific\/Honolulu|US\/.*)$/;
1284
+ function gpc() {
1285
+ if (typeof navigator === "undefined") return false;
1286
+ return navigator.globalPrivacyControl === true;
1287
+ }
1288
+ function refused() {
1289
+ if (typeof window === "undefined") return false;
1290
+ const n = navigator;
1291
+ const dnt = n.doNotTrack ?? window.doNotTrack ?? n.msDoNotTrack;
1292
+ return gpc() || dnt === "1" || dnt === "yes";
1293
+ }
1294
+ function region() {
1295
+ try {
1296
+ const zone = Intl.DateTimeFormat().resolvedOptions().timeZone ?? "";
1297
+ return US.test(zone) ? "opt-out" : "opt-in";
1298
+ } catch {
1299
+ return "opt-in";
1300
+ }
1301
+ }
1302
+ function read2() {
1303
+ const kept = get(CONSENT_COOKIE);
1304
+ const on = kept !== void 0 ? kept.split(",") : region() === "opt-in" || refused() ? [] : ["analytics", "marketing", "ads"];
1305
+ const has = (k) => on.includes(k);
1306
+ return { analytics: has("analytics"), marketing: has("marketing") && !gpc(), ads: has("ads") && !gpc() };
1307
+ }
1308
+ function render(c) {
1309
+ return ["analytics", "marketing", "ads"].filter((k) => c[k]).join(",");
1310
+ }
1311
+
1273
1312
  // src/react.tsx
1274
1313
  var Ctx = react.createContext(null);
1275
1314
  function AnalyticsProvider(props) {
@@ -1324,6 +1363,18 @@ var ErrorBoundary = class extends react.Component {
1324
1363
  }
1325
1364
  };
1326
1365
  ErrorBoundary.contextType = Ctx;
1366
+ var listen = (on) => {
1367
+ window.addEventListener(CONSENT_EVENT, on);
1368
+ return () => window.removeEventListener(CONSENT_EVENT, on);
1369
+ };
1370
+ function useConsent() {
1371
+ const kept = react.useSyncExternalStore(listen, () => render(read2()), () => "");
1372
+ return {
1373
+ analytics: kept.includes("analytics"),
1374
+ marketing: kept.includes("marketing"),
1375
+ ads: kept.includes("ads")
1376
+ };
1377
+ }
1327
1378
  /*! anon.js — THE anonymous-identity chain. ONE implementation, two distributions.
1328
1379
  *
1329
1380
  * One browser is ONE person on every Hanzo surface, whichever client a page
@@ -1349,6 +1400,7 @@ ErrorBoundary.contextType = Ctx;
1349
1400
  exports.AnalyticsProvider = AnalyticsProvider;
1350
1401
  exports.ErrorBoundary = ErrorBoundary;
1351
1402
  exports.useAnalytics = useAnalytics;
1403
+ exports.useConsent = useConsent;
1352
1404
  exports.usePageview = usePageview;
1353
1405
  //# sourceMappingURL=react.cjs.map
1354
1406
  //# sourceMappingURL=react.cjs.map