flowgrid-sdk 1.6.3 → 1.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/flowgrid.min.js +1 -1
- package/dist/flowgrid.min.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/client/transport.d.ts +9 -1
- package/dist/lib/client/transport.js +19 -2
- package/dist/lib/client/transport.js.map +1 -1
- package/dist/lib/features/core/experiment.d.ts +8 -0
- package/dist/lib/features/core/experiment.js +16 -0
- package/dist/lib/features/core/experiment.js.map +1 -1
- package/dist/lib/features/ecommerce/cart.js +1 -0
- package/dist/lib/features/ecommerce/cart.js.map +1 -1
- package/dist/lib/helpers/consent.d.ts +87 -0
- package/dist/lib/helpers/consent.js +125 -0
- package/dist/lib/helpers/consent.js.map +1 -0
- package/dist/lib/helpers/identity.d.ts +45 -0
- package/dist/lib/helpers/identity.js +104 -0
- package/dist/lib/helpers/identity.js.map +1 -0
- package/dist/lib/helpers/index.d.ts +21 -0
- package/dist/lib/helpers/index.js +29 -0
- package/dist/lib/helpers/index.js.map +1 -0
- package/dist/lib/tracking/core/experiment.d.ts +12 -0
- package/dist/lib/tracking/core/experiment.js +14 -0
- package/dist/lib/tracking/core/experiment.js.map +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Drop-in identity helpers.
|
|
4
|
+
* @module helpers/identity
|
|
5
|
+
*
|
|
6
|
+
* @description
|
|
7
|
+
* Stable, SSR-safe IDs that most apps need to wire up tracking, exposed as
|
|
8
|
+
* plain functions so you never have to re-implement the localStorage /
|
|
9
|
+
* sessionStorage boilerplate yourself.
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { getOrCreateAnonId, getOrCreateCartId } from "flowgrid-sdk";
|
|
13
|
+
*
|
|
14
|
+
* fg.products.view(product, { userId: getOrCreateAnonId() });
|
|
15
|
+
* fg.cart.add(product, 1, getOrCreateCartId());
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Both helpers degrade gracefully: during SSR or when storage is blocked
|
|
19
|
+
* (private mode, strict cookie settings) they return a safe fallback instead
|
|
20
|
+
* of throwing, so they're safe to call anywhere.
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.getOrCreateAnonId = getOrCreateAnonId;
|
|
24
|
+
exports.getOrCreateCartId = getOrCreateCartId;
|
|
25
|
+
exports.resetCartId = resetCartId;
|
|
26
|
+
/** localStorage key for the anonymous visitor ID. Shared with the experiment engine. */
|
|
27
|
+
const ANON_ID_KEY = "fg_anon_id";
|
|
28
|
+
/** sessionStorage key for the per-session cart ID. */
|
|
29
|
+
const CART_ID_KEY = "fg_cart_id";
|
|
30
|
+
/**
|
|
31
|
+
* UUID v4 with a non-crypto fallback for ancient/locked-down runtimes.
|
|
32
|
+
* `crypto.randomUUID()` is preferred when available.
|
|
33
|
+
*/
|
|
34
|
+
function uuid() {
|
|
35
|
+
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
36
|
+
return crypto.randomUUID();
|
|
37
|
+
}
|
|
38
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
|
39
|
+
const r = (Math.random() * 16) | 0;
|
|
40
|
+
return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Returns a stable anonymous visitor ID, generating and persisting one in
|
|
45
|
+
* `localStorage` on first call. The same value is reused across page loads so
|
|
46
|
+
* a returning visitor is recognised as the same person.
|
|
47
|
+
*
|
|
48
|
+
* Uses the same `fg_anon_id` key as the experiment engine, so the IDs line up
|
|
49
|
+
* across tracking calls and A/B test assignments.
|
|
50
|
+
*
|
|
51
|
+
* @returns The persisted anonymous ID, or `"anon"` when storage is unavailable.
|
|
52
|
+
*/
|
|
53
|
+
function getOrCreateAnonId() {
|
|
54
|
+
if (typeof localStorage === "undefined")
|
|
55
|
+
return "anon";
|
|
56
|
+
try {
|
|
57
|
+
const existing = localStorage.getItem(ANON_ID_KEY);
|
|
58
|
+
if (existing)
|
|
59
|
+
return existing;
|
|
60
|
+
const id = uuid();
|
|
61
|
+
localStorage.setItem(ANON_ID_KEY, id);
|
|
62
|
+
return id;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return "anon";
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Returns a stable cart ID for the lifetime of the browser session, generating
|
|
70
|
+
* and persisting one in `sessionStorage` on first call. Pair this with cart and
|
|
71
|
+
* checkout events so every line item shares the same `cartId`.
|
|
72
|
+
*
|
|
73
|
+
* @returns The persisted cart ID (prefixed `cart_`), or `"cart_anon"` when
|
|
74
|
+
* storage is unavailable.
|
|
75
|
+
*/
|
|
76
|
+
function getOrCreateCartId() {
|
|
77
|
+
if (typeof sessionStorage === "undefined")
|
|
78
|
+
return "cart_anon";
|
|
79
|
+
try {
|
|
80
|
+
const existing = sessionStorage.getItem(CART_ID_KEY);
|
|
81
|
+
if (existing)
|
|
82
|
+
return existing;
|
|
83
|
+
const id = `cart_${uuid()}`;
|
|
84
|
+
sessionStorage.setItem(CART_ID_KEY, id);
|
|
85
|
+
return id;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return "cart_anon";
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Clears the persisted cart ID so the next {@link getOrCreateCartId} call starts
|
|
93
|
+
* a fresh cart. Call this after a completed purchase.
|
|
94
|
+
*/
|
|
95
|
+
function resetCartId() {
|
|
96
|
+
try {
|
|
97
|
+
if (typeof sessionStorage !== "undefined")
|
|
98
|
+
sessionStorage.removeItem(CART_ID_KEY);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
/* SSR or privacy mode */
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/lib/helpers/identity.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;AAgCH,8CAWC;AAUD,8CAWC;AAMD,kCAMC;AA1ED,wFAAwF;AACxF,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC,sDAAsD;AACtD,MAAM,WAAW,GAAG,YAAY,CAAC;AAEjC;;;GAGG;AACH,SAAS,IAAI;IACX,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC7E,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACnE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,iBAAiB;IAC/B,IAAI,OAAO,YAAY,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;QAClB,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,iBAAiB;IAC/B,IAAI,OAAO,cAAc,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACrD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,EAAE,GAAG,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC5B,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW;IACzB,IAAI,CAAC;QACH,IAAI,OAAO,cAAc,KAAK,WAAW;YAAE,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Drop-in helpers.
|
|
3
|
+
* @module helpers
|
|
4
|
+
*
|
|
5
|
+
* @description
|
|
6
|
+
* Small, framework-agnostic convenience functions for the things almost every
|
|
7
|
+
* integration needs — stable IDs and consent wiring — so you can import them
|
|
8
|
+
* directly instead of re-implementing the boilerplate in every app.
|
|
9
|
+
*
|
|
10
|
+
* ```ts
|
|
11
|
+
* import {
|
|
12
|
+
* getOrCreateAnonId,
|
|
13
|
+
* getOrCreateCartId,
|
|
14
|
+
* setupConsent,
|
|
15
|
+
* attachConsentBanner,
|
|
16
|
+
* } from "flowgrid-sdk";
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export { getOrCreateAnonId, getOrCreateCartId, resetCartId } from "./identity";
|
|
20
|
+
export { setupConsent, attachConsentBanner } from "./consent";
|
|
21
|
+
export type { ConsentBannerOptions, ConsentBannerHandle } from "./consent";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Drop-in helpers.
|
|
4
|
+
* @module helpers
|
|
5
|
+
*
|
|
6
|
+
* @description
|
|
7
|
+
* Small, framework-agnostic convenience functions for the things almost every
|
|
8
|
+
* integration needs — stable IDs and consent wiring — so you can import them
|
|
9
|
+
* directly instead of re-implementing the boilerplate in every app.
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import {
|
|
13
|
+
* getOrCreateAnonId,
|
|
14
|
+
* getOrCreateCartId,
|
|
15
|
+
* setupConsent,
|
|
16
|
+
* attachConsentBanner,
|
|
17
|
+
* } from "flowgrid-sdk";
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.attachConsentBanner = exports.setupConsent = exports.resetCartId = exports.getOrCreateCartId = exports.getOrCreateAnonId = void 0;
|
|
22
|
+
var identity_1 = require("./identity");
|
|
23
|
+
Object.defineProperty(exports, "getOrCreateAnonId", { enumerable: true, get: function () { return identity_1.getOrCreateAnonId; } });
|
|
24
|
+
Object.defineProperty(exports, "getOrCreateCartId", { enumerable: true, get: function () { return identity_1.getOrCreateCartId; } });
|
|
25
|
+
Object.defineProperty(exports, "resetCartId", { enumerable: true, get: function () { return identity_1.resetCartId; } });
|
|
26
|
+
var consent_1 = require("./consent");
|
|
27
|
+
Object.defineProperty(exports, "setupConsent", { enumerable: true, get: function () { return consent_1.setupConsent; } });
|
|
28
|
+
Object.defineProperty(exports, "attachConsentBanner", { enumerable: true, get: function () { return consent_1.attachConsentBanner; } });
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/helpers/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AAEH,uCAA+E;AAAtE,6GAAA,iBAAiB,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAAE,uGAAA,WAAW,OAAA;AAC1D,qCAA8D;AAArD,uGAAA,YAAY,OAAA;AAAE,8GAAA,mBAAmB,OAAA"}
|
|
@@ -62,6 +62,18 @@ export declare class ExperimentTracker {
|
|
|
62
62
|
* Call this when the variant is rendered.
|
|
63
63
|
*/
|
|
64
64
|
exposure(experimentId: string, userId: string, variantId: string): Promise<import("../../..").ExperimentResponse>;
|
|
65
|
+
/**
|
|
66
|
+
* Browser-side exposure for the locally-assigned variant — resolves both the
|
|
67
|
+
* variant and the user id for you. Call this right after rendering the
|
|
68
|
+
* variant; no-op if the visitor has no assignment yet.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* await fg.experiments.init([{ id: "checkout_v2", variants: [...] }]);
|
|
73
|
+
* await fg.experiments.exposureAuto("checkout_v2");
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
exposureAuto(experimentId: string): Promise<void>;
|
|
65
77
|
/**
|
|
66
78
|
* Record a conversion against a specific user's variant (server-side).
|
|
67
79
|
*
|
|
@@ -63,6 +63,20 @@ class ExperimentTracker {
|
|
|
63
63
|
exposure(experimentId, userId, variantId) {
|
|
64
64
|
return this.client.trackExposure(experimentId, userId, variantId);
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Browser-side exposure for the locally-assigned variant — resolves both the
|
|
68
|
+
* variant and the user id for you. Call this right after rendering the
|
|
69
|
+
* variant; no-op if the visitor has no assignment yet.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* await fg.experiments.init([{ id: "checkout_v2", variants: [...] }]);
|
|
74
|
+
* await fg.experiments.exposureAuto("checkout_v2");
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
exposureAuto(experimentId) {
|
|
78
|
+
return this.client.trackLocalExposure(experimentId);
|
|
79
|
+
}
|
|
66
80
|
/**
|
|
67
81
|
* Record a conversion against a specific user's variant (server-side).
|
|
68
82
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"experiment.js","sourceRoot":"","sources":["../../../../src/lib/tracking/core/experiment.ts"],"names":[],"mappings":";;;AA2BA,MAAa,iBAAiB;IAC5B,YAA4B,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAElD,8EAA8E;IAC9E,QAAQ;IACR,8EAA8E;IAE9E;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,UAAgC;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACH,IAAI,CAAC,WAAmC;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAE9E;;;OAGG;IACH,OAAO,CAAC,YAAoB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,MAAM,CACJ,YAAoB,EACpB,MAAc,EACd,SAAiB,EACjB,SAA6C,UAAU;QAEvD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,8EAA8E;IAC9E,wBAAwB;IACxB,8EAA8E;IAE9E;;;OAGG;IACH,QAAQ,CAAC,YAAoB,EAAE,MAAc,EAAE,SAAiB;QAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CACR,YAAoB,EACpB,MAAc,EACd,SAAiB,EACjB,UAAkB,EAClB,QAAgB,CAAC;QAEjB,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACjC,YAAY;YACZ,MAAM;YACN,SAAS;YACT,UAAU;YACV,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,eAAe,CAAC,YAAoB,EAAE,aAAqB,YAAY,EAAE,QAAgB,CAAC;QACxF,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,YAAY,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,8EAA8E;IAC9E,yBAAyB;IACzB,EAAE;IACF,sEAAsE;IACtE,wEAAwE;IACxE,uEAAuE;IACvE,8EAA8E;IAE9E;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,MAA0B;QAC3C,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,YAAuC;QAC7D,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,WAAmC;QACnD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IACtC,CAAC;IAED;;;;;;;;OAQG;IACH,yBAAyB;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,CAAC;IACjD,CAAC;IAED,mEAAmE;IACnE,gBAAgB;QACd,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACjC,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"experiment.js","sourceRoot":"","sources":["../../../../src/lib/tracking/core/experiment.ts"],"names":[],"mappings":";;;AA2BA,MAAa,iBAAiB;IAC5B,YAA4B,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAElD,8EAA8E;IAC9E,QAAQ;IACR,8EAA8E;IAE9E;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,UAAgC;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACH,IAAI,CAAC,WAAmC;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAE9E;;;OAGG;IACH,OAAO,CAAC,YAAoB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,MAAM,CACJ,YAAoB,EACpB,MAAc,EACd,SAAiB,EACjB,SAA6C,UAAU;QAEvD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,8EAA8E;IAC9E,wBAAwB;IACxB,8EAA8E;IAE9E;;;OAGG;IACH,QAAQ,CAAC,YAAoB,EAAE,MAAc,EAAE,SAAiB;QAC9D,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;;;;;OAUG;IACH,YAAY,CAAC,YAAoB;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACtD,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CACR,YAAoB,EACpB,MAAc,EACd,SAAiB,EACjB,UAAkB,EAClB,QAAgB,CAAC;QAEjB,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACjC,YAAY;YACZ,MAAM;YACN,SAAS;YACT,UAAU;YACV,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,eAAe,CAAC,YAAoB,EAAE,aAAqB,YAAY,EAAE,QAAgB,CAAC;QACxF,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,YAAY,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,8EAA8E;IAC9E,yBAAyB;IACzB,EAAE;IACF,sEAAsE;IACtE,wEAAwE;IACxE,uEAAuE;IACvE,8EAA8E;IAE9E;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,MAA0B;QAC3C,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,YAAuC;QAC7D,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,WAAmC;QACnD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IACtC,CAAC;IAED;;;;;;;;OAQG;IACH,yBAAyB;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,CAAC;IACjD,CAAC;IAED,mEAAmE;IACnE,gBAAgB;QACd,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACjC,CAAC;CACF;AA7LD,8CA6LC"}
|