@worthai/onboarding-sdk 2.0.11 → 2.0.13
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/index.js +26 -14
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -50,6 +50,7 @@ const createChildSite = /* @__PURE__ */ __name((args) => {
|
|
|
50
50
|
}, "subscribe");
|
|
51
51
|
const initializeChildSite = /* @__PURE__ */ __name(() => {
|
|
52
52
|
iframe.src = buildIframeSrc().toString();
|
|
53
|
+
iframe.allow = "camera";
|
|
53
54
|
if (style.zIndex) iframe.style.zIndex = style.zIndex;
|
|
54
55
|
iframe.style.width = "100%";
|
|
55
56
|
iframe.style.height = "100%";
|
|
@@ -83,14 +84,7 @@ const createOnboardingApp = /* @__PURE__ */ __name((args) => {
|
|
|
83
84
|
...restArgs,
|
|
84
85
|
queryParams
|
|
85
86
|
});
|
|
86
|
-
|
|
87
|
-
...restArgs,
|
|
88
|
-
queryParams,
|
|
89
|
-
initialRoute: "/detached",
|
|
90
|
-
window: childApp.iframe.contentWindow,
|
|
91
|
-
autoResize: false,
|
|
92
|
-
style: { zIndex: "99999" }
|
|
93
|
-
});
|
|
87
|
+
let detachedChildApp;
|
|
94
88
|
let childAppSubscription;
|
|
95
89
|
let detachedChildAppSubscription;
|
|
96
90
|
const postMessage = /* @__PURE__ */ __name((message) => {
|
|
@@ -111,8 +105,19 @@ const createOnboardingApp = /* @__PURE__ */ __name((args) => {
|
|
|
111
105
|
const setCustomCss = /* @__PURE__ */ __name((css) => {
|
|
112
106
|
postMessage({ type: "SET_CUSTOM_CSS", payload: { css } });
|
|
113
107
|
}, "setCustomCss");
|
|
114
|
-
const appendDetachedOnboardingApp = /* @__PURE__ */ __name(
|
|
108
|
+
const appendDetachedOnboardingApp = /* @__PURE__ */ __name(() => {
|
|
109
|
+
if (childApp.iframe.contentWindow === null) {
|
|
110
|
+
console.error("Failed to initialize detached child app. No iframe content window found.");
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
115
113
|
const id = "detached-onboarding-app";
|
|
114
|
+
detachedChildApp = createChildSite({
|
|
115
|
+
...restArgs,
|
|
116
|
+
queryParams,
|
|
117
|
+
initialRoute: "/detached",
|
|
118
|
+
autoResize: false,
|
|
119
|
+
style: { zIndex: "99999" }
|
|
120
|
+
});
|
|
116
121
|
detachedChildApp.iframe.style.display = "none";
|
|
117
122
|
detachedChildApp.iframe.style.width = "100%";
|
|
118
123
|
detachedChildApp.iframe.style.height = "100%";
|
|
@@ -124,7 +129,7 @@ const createOnboardingApp = /* @__PURE__ */ __name((args) => {
|
|
|
124
129
|
document.querySelector("body")?.appendChild(detachedChildApp.iframe);
|
|
125
130
|
detachedChildAppSubscription = detachedChildApp.subscribe(
|
|
126
131
|
(event) => {
|
|
127
|
-
if (event.data.type === "DETACHED_EVENT") {
|
|
132
|
+
if (event.data.type === "DETACHED_EVENT" && detachedChildApp) {
|
|
128
133
|
const detachedEvent = event.data.payload;
|
|
129
134
|
switch (detachedEvent.type) {
|
|
130
135
|
case "SHOW_DETACHED_IFRAME":
|
|
@@ -143,13 +148,12 @@ const createOnboardingApp = /* @__PURE__ */ __name((args) => {
|
|
|
143
148
|
);
|
|
144
149
|
}, "appendDetachedOnboardingApp");
|
|
145
150
|
const onIframeInitialized = /* @__PURE__ */ __name(() => {
|
|
146
|
-
appendDetachedOnboardingApp();
|
|
147
151
|
childAppSubscription = subscribe(
|
|
148
152
|
(event) => {
|
|
149
153
|
if (event.data.type === "IFRAME_INITIALIZED") {
|
|
150
154
|
postMessage({ type: "INVITE_TOKEN_SENT", payload: { inviteToken } });
|
|
151
155
|
}
|
|
152
|
-
if (event.data.type === "DETACHED_EVENT") {
|
|
156
|
+
if (event.data.type === "DETACHED_EVENT" && detachedChildApp) {
|
|
153
157
|
detachedChildApp.postMessage(event.data);
|
|
154
158
|
}
|
|
155
159
|
}
|
|
@@ -160,13 +164,21 @@ const createOnboardingApp = /* @__PURE__ */ __name((args) => {
|
|
|
160
164
|
}, "cleanupChildApp");
|
|
161
165
|
const cleanupDetachedApp = /* @__PURE__ */ __name(() => {
|
|
162
166
|
detachedChildAppSubscription?.unsubscribe();
|
|
163
|
-
detachedChildApp
|
|
167
|
+
detachedChildApp?.iframe.remove();
|
|
164
168
|
}, "cleanupDetachedApp");
|
|
165
169
|
const cleanup = /* @__PURE__ */ __name(() => {
|
|
166
170
|
cleanupChildApp();
|
|
167
171
|
cleanupDetachedApp();
|
|
168
172
|
}, "cleanup");
|
|
169
|
-
|
|
173
|
+
const onIframeLoad = /* @__PURE__ */ __name(() => {
|
|
174
|
+
appendDetachedOnboardingApp();
|
|
175
|
+
childApp.iframe.removeEventListener("load", onIframeLoad);
|
|
176
|
+
}, "onIframeLoad");
|
|
177
|
+
const run = /* @__PURE__ */ __name(() => {
|
|
178
|
+
onIframeInitialized();
|
|
179
|
+
childApp.iframe.addEventListener("load", onIframeLoad);
|
|
180
|
+
}, "run");
|
|
181
|
+
run();
|
|
170
182
|
return {
|
|
171
183
|
subscribe,
|
|
172
184
|
setMode: childApp.setMode,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/utils/createChildSite/index.ts","../src/utils/createOnboardingApp/index.ts","../src/utils/getURLQueryParams/index.ts","../src/utils/createParentSite/index.ts","../src/utils/createOnboardingConsumerApp/index.ts"],"sourcesContent":["import type { AnyMessage } from '@/interfaces/AnyMessage';\nimport type { ChildSiteMessage } from '@/interfaces/ChildSiteMessage';\nimport type { IframeMode } from '@/interfaces/IframeMode';\nimport type { IframeQueryParams } from '@/interfaces/IframeQueryParams';\nimport type { ParentSiteMessage } from '@/interfaces/ParentSiteMessage';\n\nexport const createChildSite = (args: {\n origin: string;\n initialRoute?: string;\n queryParams?: IframeQueryParams;\n window?: Window | null;\n mode?: IframeMode;\n autoResize?: boolean;\n style?: { zIndex?: string };\n}) => {\n const {\n origin,\n initialRoute = '',\n mode,\n autoResize = true,\n style = {},\n } = args;\n const app = args.window || window;\n const queryParams = args.queryParams;\n const iframe = document.createElement('iframe');\n const state = { mode };\n\n const setMode = (mode: IframeMode) => {\n state.mode = mode;\n postMessage<ParentSiteMessage>({\n type: 'SET_IFRAME_MODE',\n payload: { mode: state.mode },\n });\n };\n\n const refreshSize = () => {\n postMessage<ParentSiteMessage>({ type: 'REFRESH_SIZE' });\n };\n\n const buildIframeSrc = () => {\n let srcUrl: URL;\n if (initialRoute) {\n srcUrl = new URL(initialRoute.replace(/^\\//, ''), origin);\n } else {\n srcUrl = new URL(origin);\n }\n\n for (const [key, value] of Object.entries(queryParams || {})) {\n if (typeof value === 'string') {\n srcUrl.searchParams.set(key, value);\n }\n }\n\n return srcUrl;\n };\n\n const subscribe = <T extends AnyMessage>(\n callback: (event: MessageEvent<T>) => void,\n ) => {\n const handler = (event: MessageEvent<T>) => {\n if (event.source !== iframe.contentWindow) {\n return;\n }\n callback(event);\n };\n\n app.addEventListener('message', handler);\n return {\n unsubscribe: () => app.removeEventListener('message', handler),\n };\n };\n\n const initializeChildSite = () => {\n iframe.src = buildIframeSrc().toString();\n if (style.zIndex) iframe.style.zIndex = style.zIndex;\n iframe.style.width = '100%';\n iframe.style.height = '100%';\n iframe.style.border = 'none';\n\n subscribe<ChildSiteMessage>((event) => {\n switch (event.data.type) {\n case 'IFRAME_RESIZE':\n if (autoResize === false || state.mode === 'non-embedded') return;\n iframe.style.border = 'none';\n iframe.style.height = `${event.data.payload.height}px`;\n break;\n case 'IFRAME_INITIALIZED':\n setMode(state.mode);\n postMessage<ParentSiteMessage>({\n type: 'IFRAME_RENDERED_ON_PARENT_SITE',\n });\n break;\n }\n });\n };\n\n const postMessage = <TMessage extends AnyMessage>(\n message: TMessage,\n transfer?: Transferable[],\n ) => {\n iframe.contentWindow?.postMessage(message, '*', transfer);\n };\n\n initializeChildSite();\n\n return { iframe, subscribe, postMessage, setMode, refreshSize };\n};\n","import type { AnyMessage } from '@/interfaces/AnyMessage';\nimport type { ChildSiteSubscription } from '@/interfaces/ChildSiteSubscription';\nimport type { IframeQueryParams } from '@/interfaces/IframeQueryParams';\nimport type { OnboardingAppMessage } from '@/interfaces/OnboardingAppMessage';\nimport type { OnboardingAppMode } from '@/interfaces/OnboardingAppMode';\nimport type { OnboardingConsumerAppMessage } from '@/interfaces/OnboardingConsumerAppMessage';\nimport { createChildSite } from '@/utils/createChildSite';\n\nexport const createOnboardingApp = (args: {\n origin: string;\n inviteToken: string;\n mode?: OnboardingAppMode;\n}) => {\n const queryParams: IframeQueryParams = {};\n const { inviteToken, ...restArgs } = args;\n const childApp = createChildSite({\n ...restArgs,\n queryParams,\n });\n const detachedChildApp = createChildSite({\n ...restArgs,\n queryParams,\n initialRoute: '/detached',\n window: childApp.iframe.contentWindow,\n autoResize: false,\n style: { zIndex: '99999' },\n });\n let childAppSubscription: ChildSiteSubscription | undefined;\n let detachedChildAppSubscription: ChildSiteSubscription | undefined;\n\n const postMessage = (message: OnboardingConsumerAppMessage) => {\n childApp.postMessage(message as unknown as AnyMessage);\n };\n\n const subscribe = (\n callback: (event: MessageEvent<OnboardingAppMessage>) => void,\n ) => {\n return childApp.subscribe(callback);\n };\n\n const skip = () => {\n postMessage({ type: 'SKIP_STAGE' });\n };\n\n const next = () => {\n postMessage({ type: 'NEXT_STAGE' });\n };\n\n const prev = () => {\n postMessage({ type: 'PREV_STAGE' });\n };\n\n const setCustomCss = (css: string) => {\n postMessage({ type: 'SET_CUSTOM_CSS', payload: { css } });\n };\n\n const appendDetachedOnboardingApp = async () => {\n const id = 'detached-onboarding-app';\n detachedChildApp.iframe.style.display = 'none';\n detachedChildApp.iframe.style.width = '100%';\n detachedChildApp.iframe.style.height = '100%';\n detachedChildApp.iframe.style.position = 'fixed';\n detachedChildApp.iframe.style.top = '0px';\n detachedChildApp.iframe.style.left = '0px';\n detachedChildApp.iframe.id = id;\n document.getElementById(id)?.remove();\n document.querySelector('body')?.appendChild(detachedChildApp.iframe);\n\n detachedChildAppSubscription = detachedChildApp.subscribe(\n (event: MessageEvent<OnboardingAppMessage>) => {\n if (event.data.type === 'DETACHED_EVENT') {\n const detachedEvent = event.data.payload;\n switch (detachedEvent.type) {\n case 'SHOW_DETACHED_IFRAME':\n detachedChildApp.iframe.style.display = 'block';\n break;\n case 'HIDE_DETACHED_IFRAME':\n detachedChildApp.postMessage(event.data);\n detachedChildApp.iframe.style.display = 'none';\n break;\n default:\n postMessage(event.data);\n break;\n }\n }\n },\n );\n };\n\n const onIframeInitialized = () => {\n appendDetachedOnboardingApp();\n\n childAppSubscription = subscribe(\n (event: MessageEvent<OnboardingAppMessage>) => {\n if (event.data.type === 'IFRAME_INITIALIZED') {\n postMessage({ type: 'INVITE_TOKEN_SENT', payload: { inviteToken } });\n }\n\n if (event.data.type === 'DETACHED_EVENT') {\n detachedChildApp.postMessage(event.data);\n }\n },\n );\n };\n\n const cleanupChildApp = () => {\n childAppSubscription?.unsubscribe();\n };\n\n const cleanupDetachedApp = () => {\n detachedChildAppSubscription?.unsubscribe();\n detachedChildApp.iframe.remove();\n };\n\n const cleanup = () => {\n cleanupChildApp();\n cleanupDetachedApp();\n };\n\n onIframeInitialized();\n\n return {\n subscribe,\n setMode: childApp.setMode,\n setCustomCss,\n iframe: childApp.iframe,\n next,\n prev,\n skip,\n refreshSize: childApp.refreshSize,\n cleanup,\n };\n};\n","import type { QueryParams } from '@/interfaces/QueryParams';\n\nexport const getURLQueryParams = <T extends QueryParams>() => {\n const urlSearchParams = new URLSearchParams(window.location.search);\n const queryParams: QueryParams = {};\n urlSearchParams.forEach((value, key) => {\n queryParams[key] = value;\n });\n\n return queryParams as T;\n};\n","import type { AnyMessage } from '@/interfaces/AnyMessage';\nimport type { ChildSiteMessage } from '@/interfaces/ChildSiteMessage';\nimport type { IframeMode } from '@/interfaces/IframeMode';\nimport type { IframeQueryParams } from '@/interfaces/IframeQueryParams';\nimport { getURLQueryParams } from '@/utils/getURLQueryParams';\n\nexport const createParentSite = () => {\n const queryParams = getURLQueryParams<IframeQueryParams>();\n\n const notifyHeight = () => {\n const height = document.body.scrollHeight;\n postMessage<ChildSiteMessage>({\n type: 'IFRAME_RESIZE',\n payload: { height },\n });\n };\n\n const postMessage = <TMessage extends AnyMessage>(message: TMessage) => {\n window.parent.postMessage(message, '*');\n };\n\n const subscribe = <T extends AnyMessage>(\n callback: (event: MessageEvent<T>) => void\n ) => {\n const handler = (event: MessageEvent<T>) => {\n callback(event);\n };\n\n window.addEventListener('message', handler);\n return {\n unsubscribe: () => window.removeEventListener('message', handler),\n };\n };\n\n const notifySize = () => {\n notifyHeight();\n };\n\n const initializeParentSite = () => {\n const observer = new ResizeObserver(notifySize);\n observer.observe(document.body);\n\n subscribe((event) => {\n switch (event.data.type) {\n case 'SET_IFRAME_MODE':\n const mode = event.data.payload.mode as IframeMode;\n document.body.style.overflow =\n mode === 'embedded' ? 'hidden' : 'auto';\n break;\n case 'REFRESH_SIZE':\n notifySize();\n break;\n default:\n break;\n }\n });\n\n postMessage<ChildSiteMessage>({ type: 'IFRAME_INITIALIZED' });\n };\n\n initializeParentSite();\n\n return {\n notifySize,\n subscribe,\n postMessage,\n queryParams,\n };\n};\n","import type { OnboardingAppMessage } from '@/interfaces/OnboardingAppMessage';\nimport type { OnboardingConsumerAppMessage } from '@/interfaces/OnboardingConsumerAppMessage';\nimport { createParentSite } from '@/utils/createParentSite';\n\nexport const createOnboardingConsumerApp = () => {\n const parentApp = createParentSite();\n\n const postMessage = (message: OnboardingAppMessage) => {\n parentApp.postMessage(message);\n };\n\n const subscribe = (\n callback: (event: MessageEvent<OnboardingConsumerAppMessage>) => void\n ) => {\n return parentApp.subscribe(callback);\n };\n\n return {\n postMessage,\n subscribe,\n notifySize: parentApp.notifySize,\n };\n};\n"],"names":["mode"],"mappings":";;AAMO,MAAM,kBAAkB,wBAAC,SAQ1B;AACJ,QAAM;AAAA,IACJ;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA,aAAa;AAAA,IACb,QAAQ,CAAA;AAAA,EAAC,IACP;AACJ,QAAM,MAAM,KAAK,UAAU;AAC3B,QAAM,cAAc,KAAK;AACzB,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,QAAM,QAAQ,EAAE,KAAA;AAEhB,QAAM,UAAU,wBAACA,UAAqB;AACpC,UAAM,OAAOA;AACb,gBAA+B;AAAA,MAC7B,MAAM;AAAA,MACN,SAAS,EAAE,MAAM,MAAM,KAAA;AAAA,IAAK,CAC7B;AAAA,EACH,GANgB;AAQhB,QAAM,cAAc,6BAAM;AACxB,gBAA+B,EAAE,MAAM,gBAAgB;AAAA,EACzD,GAFoB;AAIpB,QAAM,iBAAiB,6BAAM;AAC3B,QAAI;AACJ,QAAI,cAAc;AAChB,eAAS,IAAI,IAAI,aAAa,QAAQ,OAAO,EAAE,GAAG,MAAM;AAAA,IAC1D,OAAO;AACL,eAAS,IAAI,IAAI,MAAM;AAAA,IACzB;AAEA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,eAAe,CAAA,CAAE,GAAG;AAC5D,UAAI,OAAO,UAAU,UAAU;AAC7B,eAAO,aAAa,IAAI,KAAK,KAAK;AAAA,MACpC;AAAA,IACF;AAEA,WAAO;AAAA,EACT,GAfuB;AAiBvB,QAAM,YAAY,wBAChB,aACG;AACH,UAAM,UAAU,wBAAC,UAA2B;AAC1C,UAAI,MAAM,WAAW,OAAO,eAAe;AACzC;AAAA,MACF;AACA,eAAS,KAAK;AAAA,IAChB,GALgB;AAOhB,QAAI,iBAAiB,WAAW,OAAO;AACvC,WAAO;AAAA,MACL,aAAa,6BAAM,IAAI,oBAAoB,WAAW,OAAO,GAAhD;AAAA,IAAgD;AAAA,EAEjE,GAdkB;AAgBlB,QAAM,sBAAsB,6BAAM;AAChC,WAAO,MAAM,eAAA,EAAiB,SAAA;AAC9B,QAAI,MAAM,OAAQ,QAAO,MAAM,SAAS,MAAM;AAC9C,WAAO,MAAM,QAAQ;AACrB,WAAO,MAAM,SAAS;AACtB,WAAO,MAAM,SAAS;AAEtB,cAA4B,CAAC,UAAU;AACrC,cAAQ,MAAM,KAAK,MAAA;AAAA,QACjB,KAAK;AACH,cAAI,eAAe,SAAS,MAAM,SAAS,eAAgB;AAC3D,iBAAO,MAAM,SAAS;AACtB,iBAAO,MAAM,SAAS,GAAG,MAAM,KAAK,QAAQ,MAAM;AAClD;AAAA,QACF,KAAK;AACH,kBAAQ,MAAM,IAAI;AAClB,sBAA+B;AAAA,YAC7B,MAAM;AAAA,UAAA,CACP;AACD;AAAA,MAAA;AAAA,IAEN,CAAC;AAAA,EACH,GAtB4B;AAwB5B,QAAM,cAAc,wBAClB,SACA,aACG;AACH,WAAO,eAAe,YAAY,SAAS,KAAK,QAAQ;AAAA,EAC1D,GALoB;AAOpB,sBAAA;AAEA,SAAO,EAAE,QAAQ,WAAW,aAAa,SAAS,YAAA;AACpD,GApG+B;ACExB,MAAM,sBAAsB,wBAAC,SAI9B;AACJ,QAAM,cAAiC,CAAA;AACvC,QAAM,EAAE,aAAa,GAAG,SAAA,IAAa;AACrC,QAAM,WAAW,gBAAgB;AAAA,IAC/B,GAAG;AAAA,IACH;AAAA,EAAA,CACD;AACD,QAAM,mBAAmB,gBAAgB;AAAA,IACvC,GAAG;AAAA,IACH;AAAA,IACA,cAAc;AAAA,IACd,QAAQ,SAAS,OAAO;AAAA,IACxB,YAAY;AAAA,IACZ,OAAO,EAAE,QAAQ,QAAA;AAAA,EAAQ,CAC1B;AACD,MAAI;AACJ,MAAI;AAEJ,QAAM,cAAc,wBAAC,YAA0C;AAC7D,aAAS,YAAY,OAAgC;AAAA,EACvD,GAFoB;AAIpB,QAAM,YAAY,wBAChB,aACG;AACH,WAAO,SAAS,UAAU,QAAQ;AAAA,EACpC,GAJkB;AAMlB,QAAM,OAAO,6BAAM;AACjB,gBAAY,EAAE,MAAM,cAAc;AAAA,EACpC,GAFa;AAIb,QAAM,OAAO,6BAAM;AACjB,gBAAY,EAAE,MAAM,cAAc;AAAA,EACpC,GAFa;AAIb,QAAM,OAAO,6BAAM;AACjB,gBAAY,EAAE,MAAM,cAAc;AAAA,EACpC,GAFa;AAIb,QAAM,eAAe,wBAAC,QAAgB;AACpC,gBAAY,EAAE,MAAM,kBAAkB,SAAS,EAAE,IAAA,GAAO;AAAA,EAC1D,GAFqB;AAIrB,QAAM,8BAA8B,mCAAY;AAC9C,UAAM,KAAK;AACX,qBAAiB,OAAO,MAAM,UAAU;AACxC,qBAAiB,OAAO,MAAM,QAAQ;AACtC,qBAAiB,OAAO,MAAM,SAAS;AACvC,qBAAiB,OAAO,MAAM,WAAW;AACzC,qBAAiB,OAAO,MAAM,MAAM;AACpC,qBAAiB,OAAO,MAAM,OAAO;AACrC,qBAAiB,OAAO,KAAK;AAC7B,aAAS,eAAe,EAAE,GAAG,OAAA;AAC7B,aAAS,cAAc,MAAM,GAAG,YAAY,iBAAiB,MAAM;AAEnE,mCAA+B,iBAAiB;AAAA,MAC9C,CAAC,UAA8C;AAC7C,YAAI,MAAM,KAAK,SAAS,kBAAkB;AACxC,gBAAM,gBAAgB,MAAM,KAAK;AACjC,kBAAQ,cAAc,MAAA;AAAA,YACpB,KAAK;AACH,+BAAiB,OAAO,MAAM,UAAU;AACxC;AAAA,YACF,KAAK;AACH,+BAAiB,YAAY,MAAM,IAAI;AACvC,+BAAiB,OAAO,MAAM,UAAU;AACxC;AAAA,YACF;AACE,0BAAY,MAAM,IAAI;AACtB;AAAA,UAAA;AAAA,QAEN;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ,GA/BoC;AAiCpC,QAAM,sBAAsB,6BAAM;AAChC,gCAAA;AAEA,2BAAuB;AAAA,MACrB,CAAC,UAA8C;AAC7C,YAAI,MAAM,KAAK,SAAS,sBAAsB;AAC5C,sBAAY,EAAE,MAAM,qBAAqB,SAAS,EAAE,YAAA,GAAe;AAAA,QACrE;AAEA,YAAI,MAAM,KAAK,SAAS,kBAAkB;AACxC,2BAAiB,YAAY,MAAM,IAAI;AAAA,QACzC;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ,GAd4B;AAgB5B,QAAM,kBAAkB,6BAAM;AAC5B,0BAAsB,YAAA;AAAA,EACxB,GAFwB;AAIxB,QAAM,qBAAqB,6BAAM;AAC/B,kCAA8B,YAAA;AAC9B,qBAAiB,OAAO,OAAA;AAAA,EAC1B,GAH2B;AAK3B,QAAM,UAAU,6BAAM;AACpB,oBAAA;AACA,uBAAA;AAAA,EACF,GAHgB;AAKhB,sBAAA;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,SAAS;AAAA,IAClB;AAAA,IACA,QAAQ,SAAS;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,SAAS;AAAA,IACtB;AAAA,EAAA;AAEJ,GA5HmC;ACN5B,MAAM,oBAAoB,6BAA6B;AAC5D,QAAM,kBAAkB,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAClE,QAAM,cAA2B,CAAA;AACjC,kBAAgB,QAAQ,CAAC,OAAO,QAAQ;AACtC,gBAAY,GAAG,IAAI;AAAA,EACrB,CAAC;AAED,SAAO;AACT,GARiC;ACI1B,MAAM,mBAAmB,6BAAM;AACpC,QAAM,cAAc,kBAAA;AAEpB,QAAM,eAAe,6BAAM;AACzB,UAAM,SAAS,SAAS,KAAK;AAC7B,gBAA8B;AAAA,MAC5B,MAAM;AAAA,MACN,SAAS,EAAE,OAAA;AAAA,IAAO,CACnB;AAAA,EACH,GANqB;AAQrB,QAAM,cAAc,wBAA8B,YAAsB;AACtE,WAAO,OAAO,YAAY,SAAS,GAAG;AAAA,EACxC,GAFoB;AAIpB,QAAM,YAAY,wBAChB,aACG;AACH,UAAM,UAAU,wBAAC,UAA2B;AAC1C,eAAS,KAAK;AAAA,IAChB,GAFgB;AAIhB,WAAO,iBAAiB,WAAW,OAAO;AAC1C,WAAO;AAAA,MACL,aAAa,6BAAM,OAAO,oBAAoB,WAAW,OAAO,GAAnD;AAAA,IAAmD;AAAA,EAEpE,GAXkB;AAalB,QAAM,aAAa,6BAAM;AACvB,iBAAA;AAAA,EACF,GAFmB;AAInB,QAAM,uBAAuB,6BAAM;AACjC,UAAM,WAAW,IAAI,eAAe,UAAU;AAC9C,aAAS,QAAQ,SAAS,IAAI;AAE9B,cAAU,CAAC,UAAU;AACnB,cAAQ,MAAM,KAAK,MAAA;AAAA,QACjB,KAAK;AACH,gBAAM,OAAO,MAAM,KAAK,QAAQ;AAChC,mBAAS,KAAK,MAAM,WAClB,SAAS,aAAa,WAAW;AACnC;AAAA,QACF,KAAK;AACH,qBAAA;AACA;AAAA,MAEA;AAAA,IAEN,CAAC;AAED,gBAA8B,EAAE,MAAM,sBAAsB;AAAA,EAC9D,GApB6B;AAsB7B,uBAAA;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,GA9DgC;ACFzB,MAAM,8BAA8B,6BAAM;AAC/C,QAAM,YAAY,iBAAA;AAElB,QAAM,cAAc,wBAAC,YAAkC;AACrD,cAAU,YAAY,OAAO;AAAA,EAC/B,GAFoB;AAIpB,QAAM,YAAY,wBAChB,aACG;AACH,WAAO,UAAU,UAAU,QAAQ;AAAA,EACrC,GAJkB;AAMlB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,UAAU;AAAA,EAAA;AAE1B,GAlB2C;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/createChildSite/index.ts","../src/utils/createOnboardingApp/index.ts","../src/utils/getURLQueryParams/index.ts","../src/utils/createParentSite/index.ts","../src/utils/createOnboardingConsumerApp/index.ts"],"sourcesContent":["import type { AnyMessage } from '@/interfaces/AnyMessage';\nimport type { ChildSiteMessage } from '@/interfaces/ChildSiteMessage';\nimport type { IframeMode } from '@/interfaces/IframeMode';\nimport type { IframeQueryParams } from '@/interfaces/IframeQueryParams';\nimport type { ParentSiteMessage } from '@/interfaces/ParentSiteMessage';\n\nexport const createChildSite = (args: {\n origin: string;\n initialRoute?: string;\n queryParams?: IframeQueryParams;\n window?: Window | null;\n mode?: IframeMode;\n autoResize?: boolean;\n style?: { zIndex?: string };\n}) => {\n const {\n origin,\n initialRoute = '',\n mode,\n autoResize = true,\n style = {},\n } = args;\n const app = args.window || window;\n const queryParams = args.queryParams;\n const iframe = document.createElement('iframe');\n const state = { mode };\n\n const setMode = (mode: IframeMode) => {\n state.mode = mode;\n postMessage<ParentSiteMessage>({\n type: 'SET_IFRAME_MODE',\n payload: { mode: state.mode },\n });\n };\n\n const refreshSize = () => {\n postMessage<ParentSiteMessage>({ type: 'REFRESH_SIZE' });\n };\n\n const buildIframeSrc = () => {\n let srcUrl: URL;\n if (initialRoute) {\n srcUrl = new URL(initialRoute.replace(/^\\//, ''), origin);\n } else {\n srcUrl = new URL(origin);\n }\n\n for (const [key, value] of Object.entries(queryParams || {})) {\n if (typeof value === 'string') {\n srcUrl.searchParams.set(key, value);\n }\n }\n\n return srcUrl;\n };\n\n const subscribe = <T extends AnyMessage>(\n callback: (event: MessageEvent<T>) => void,\n ) => {\n const handler = (event: MessageEvent<T>) => {\n if (event.source !== iframe.contentWindow) {\n return;\n }\n callback(event);\n };\n\n app.addEventListener('message', handler);\n return {\n unsubscribe: () => app.removeEventListener('message', handler),\n };\n };\n\n const initializeChildSite = () => {\n iframe.src = buildIframeSrc().toString();\n iframe.allow = 'camera';\n if (style.zIndex) iframe.style.zIndex = style.zIndex;\n iframe.style.width = '100%';\n iframe.style.height = '100%';\n iframe.style.border = 'none';\n\n subscribe<ChildSiteMessage>((event) => {\n switch (event.data.type) {\n case 'IFRAME_RESIZE':\n if (autoResize === false || state.mode === 'non-embedded') return;\n iframe.style.border = 'none';\n iframe.style.height = `${event.data.payload.height}px`;\n break;\n case 'IFRAME_INITIALIZED':\n setMode(state.mode);\n postMessage<ParentSiteMessage>({\n type: 'IFRAME_RENDERED_ON_PARENT_SITE',\n });\n break;\n }\n });\n };\n\n const postMessage = <TMessage extends AnyMessage>(\n message: TMessage,\n transfer?: Transferable[],\n ) => {\n iframe.contentWindow?.postMessage(message, '*', transfer);\n };\n\n initializeChildSite();\n\n return { iframe, subscribe, postMessage, setMode, refreshSize };\n};\n","import type { AnyMessage } from '@/interfaces/AnyMessage';\nimport type { ChildSiteSubscription } from '@/interfaces/ChildSiteSubscription';\nimport type { IframeQueryParams } from '@/interfaces/IframeQueryParams';\nimport type { OnboardingAppMessage } from '@/interfaces/OnboardingAppMessage';\nimport type { OnboardingAppMode } from '@/interfaces/OnboardingAppMode';\nimport type { OnboardingConsumerAppMessage } from '@/interfaces/OnboardingConsumerAppMessage';\nimport { createChildSite } from '@/utils/createChildSite';\n\nexport const createOnboardingApp = (args: {\n origin: string;\n inviteToken: string;\n mode?: OnboardingAppMode;\n}) => {\n const queryParams: IframeQueryParams = {};\n const { inviteToken, ...restArgs } = args;\n const childApp = createChildSite({\n ...restArgs,\n queryParams,\n }); \n let detachedChildApp: ReturnType<typeof createChildSite> | undefined\n let childAppSubscription: ChildSiteSubscription | undefined;\n let detachedChildAppSubscription: ChildSiteSubscription | undefined;\n\n const postMessage = (message: OnboardingConsumerAppMessage) => {\n childApp.postMessage(message as unknown as AnyMessage);\n };\n\n const subscribe = (\n callback: (event: MessageEvent<OnboardingAppMessage>) => void,\n ) => {\n return childApp.subscribe(callback);\n };\n\n const skip = () => {\n postMessage({ type: 'SKIP_STAGE' });\n };\n\n const next = () => {\n postMessage({ type: 'NEXT_STAGE' });\n };\n\n const prev = () => {\n postMessage({ type: 'PREV_STAGE' });\n };\n\n const setCustomCss = (css: string) => {\n postMessage({ type: 'SET_CUSTOM_CSS', payload: { css } });\n };\n\n const appendDetachedOnboardingApp = () => {\n if (childApp.iframe.contentWindow === null) {\n console.error('Failed to initialize detached child app. No iframe content window found.')\n return;\n }\n \n const id = 'detached-onboarding-app';\n detachedChildApp = createChildSite({\n ...restArgs,\n queryParams,\n initialRoute: '/detached', \n autoResize: false,\n style: { zIndex: '99999' },\n });\n\n detachedChildApp.iframe.style.display = 'none';\n detachedChildApp.iframe.style.width = '100%';\n detachedChildApp.iframe.style.height = '100%';\n detachedChildApp.iframe.style.position = 'fixed';\n detachedChildApp.iframe.style.top = '0px';\n detachedChildApp.iframe.style.left = '0px';\n detachedChildApp.iframe.id = id;\n document.getElementById(id)?.remove();\n document.querySelector('body')?.appendChild(detachedChildApp.iframe);\n\n detachedChildAppSubscription = detachedChildApp.subscribe(\n (event: MessageEvent<OnboardingAppMessage>) => {\n if (event.data.type === 'DETACHED_EVENT' && detachedChildApp) {\n const detachedEvent = event.data.payload;\n switch (detachedEvent.type) {\n case 'SHOW_DETACHED_IFRAME':\n detachedChildApp.iframe.style.display = 'block';\n break;\n case 'HIDE_DETACHED_IFRAME':\n detachedChildApp.postMessage(event.data);\n detachedChildApp.iframe.style.display = 'none';\n break;\n default:\n postMessage(event.data);\n break;\n }\n }\n },\n );\n };\n\n const onIframeInitialized = () => {\n childAppSubscription = subscribe(\n (event: MessageEvent<OnboardingAppMessage>) => {\n if (event.data.type === 'IFRAME_INITIALIZED') {\n postMessage({ type: 'INVITE_TOKEN_SENT', payload: { inviteToken } });\n }\n\n if (event.data.type === 'DETACHED_EVENT' && detachedChildApp) {\n detachedChildApp.postMessage(event.data);\n }\n },\n );\n };\n\n const cleanupChildApp = () => {\n childAppSubscription?.unsubscribe();\n };\n\n const cleanupDetachedApp = () => {\n detachedChildAppSubscription?.unsubscribe();\n detachedChildApp?.iframe.remove();\n };\n\n const cleanup = () => {\n cleanupChildApp();\n cleanupDetachedApp();\n };\n\n const onIframeLoad = () => {\n appendDetachedOnboardingApp()\n childApp.iframe.removeEventListener('load', onIframeLoad);\n }\n\n const run = () => {\n onIframeInitialized();\n childApp.iframe.addEventListener('load', onIframeLoad);\n }\n\n run()\n\n return {\n subscribe,\n setMode: childApp.setMode,\n setCustomCss,\n iframe: childApp.iframe,\n next,\n prev,\n skip,\n refreshSize: childApp.refreshSize,\n cleanup,\n };\n};\n","import type { QueryParams } from '@/interfaces/QueryParams';\n\nexport const getURLQueryParams = <T extends QueryParams>() => {\n const urlSearchParams = new URLSearchParams(window.location.search);\n const queryParams: QueryParams = {};\n urlSearchParams.forEach((value, key) => {\n queryParams[key] = value;\n });\n\n return queryParams as T;\n};\n","import type { AnyMessage } from '@/interfaces/AnyMessage';\nimport type { ChildSiteMessage } from '@/interfaces/ChildSiteMessage';\nimport type { IframeMode } from '@/interfaces/IframeMode';\nimport type { IframeQueryParams } from '@/interfaces/IframeQueryParams';\nimport { getURLQueryParams } from '@/utils/getURLQueryParams';\n\nexport const createParentSite = () => {\n const queryParams = getURLQueryParams<IframeQueryParams>();\n\n const notifyHeight = () => {\n const height = document.body.scrollHeight;\n postMessage<ChildSiteMessage>({\n type: 'IFRAME_RESIZE',\n payload: { height },\n });\n };\n\n const postMessage = <TMessage extends AnyMessage>(message: TMessage) => {\n window.parent.postMessage(message, '*');\n };\n\n const subscribe = <T extends AnyMessage>(\n callback: (event: MessageEvent<T>) => void\n ) => {\n const handler = (event: MessageEvent<T>) => {\n callback(event);\n };\n\n window.addEventListener('message', handler);\n return {\n unsubscribe: () => window.removeEventListener('message', handler),\n };\n };\n\n const notifySize = () => {\n notifyHeight();\n };\n\n const initializeParentSite = () => {\n const observer = new ResizeObserver(notifySize);\n observer.observe(document.body);\n\n subscribe((event) => {\n switch (event.data.type) {\n case 'SET_IFRAME_MODE':\n const mode = event.data.payload.mode as IframeMode;\n document.body.style.overflow =\n mode === 'embedded' ? 'hidden' : 'auto';\n break;\n case 'REFRESH_SIZE':\n notifySize();\n break;\n default:\n break;\n }\n });\n\n postMessage<ChildSiteMessage>({ type: 'IFRAME_INITIALIZED' });\n };\n\n initializeParentSite();\n\n return {\n notifySize,\n subscribe,\n postMessage,\n queryParams,\n };\n};\n","import type { OnboardingAppMessage } from '@/interfaces/OnboardingAppMessage';\nimport type { OnboardingConsumerAppMessage } from '@/interfaces/OnboardingConsumerAppMessage';\nimport { createParentSite } from '@/utils/createParentSite';\n\nexport const createOnboardingConsumerApp = () => {\n const parentApp = createParentSite();\n\n const postMessage = (message: OnboardingAppMessage) => {\n parentApp.postMessage(message);\n };\n\n const subscribe = (\n callback: (event: MessageEvent<OnboardingConsumerAppMessage>) => void\n ) => {\n return parentApp.subscribe(callback);\n };\n\n return {\n postMessage,\n subscribe,\n notifySize: parentApp.notifySize,\n };\n};\n"],"names":["mode"],"mappings":";;AAMO,MAAM,kBAAkB,wBAAC,SAQ1B;AACJ,QAAM;AAAA,IACJ;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA,aAAa;AAAA,IACb,QAAQ,CAAA;AAAA,EAAC,IACP;AACJ,QAAM,MAAM,KAAK,UAAU;AAC3B,QAAM,cAAc,KAAK;AACzB,QAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,QAAM,QAAQ,EAAE,KAAA;AAEhB,QAAM,UAAU,wBAACA,UAAqB;AACpC,UAAM,OAAOA;AACb,gBAA+B;AAAA,MAC7B,MAAM;AAAA,MACN,SAAS,EAAE,MAAM,MAAM,KAAA;AAAA,IAAK,CAC7B;AAAA,EACH,GANgB;AAQhB,QAAM,cAAc,6BAAM;AACxB,gBAA+B,EAAE,MAAM,gBAAgB;AAAA,EACzD,GAFoB;AAIpB,QAAM,iBAAiB,6BAAM;AAC3B,QAAI;AACJ,QAAI,cAAc;AAChB,eAAS,IAAI,IAAI,aAAa,QAAQ,OAAO,EAAE,GAAG,MAAM;AAAA,IAC1D,OAAO;AACL,eAAS,IAAI,IAAI,MAAM;AAAA,IACzB;AAEA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,eAAe,CAAA,CAAE,GAAG;AAC5D,UAAI,OAAO,UAAU,UAAU;AAC7B,eAAO,aAAa,IAAI,KAAK,KAAK;AAAA,MACpC;AAAA,IACF;AAEA,WAAO;AAAA,EACT,GAfuB;AAiBvB,QAAM,YAAY,wBAChB,aACG;AACH,UAAM,UAAU,wBAAC,UAA2B;AAC1C,UAAI,MAAM,WAAW,OAAO,eAAe;AACzC;AAAA,MACF;AACA,eAAS,KAAK;AAAA,IAChB,GALgB;AAOhB,QAAI,iBAAiB,WAAW,OAAO;AACvC,WAAO;AAAA,MACL,aAAa,6BAAM,IAAI,oBAAoB,WAAW,OAAO,GAAhD;AAAA,IAAgD;AAAA,EAEjE,GAdkB;AAgBlB,QAAM,sBAAsB,6BAAM;AAChC,WAAO,MAAM,eAAA,EAAiB,SAAA;AAC9B,WAAO,QAAQ;AACf,QAAI,MAAM,OAAQ,QAAO,MAAM,SAAS,MAAM;AAC9C,WAAO,MAAM,QAAQ;AACrB,WAAO,MAAM,SAAS;AACtB,WAAO,MAAM,SAAS;AAEtB,cAA4B,CAAC,UAAU;AACrC,cAAQ,MAAM,KAAK,MAAA;AAAA,QACjB,KAAK;AACH,cAAI,eAAe,SAAS,MAAM,SAAS,eAAgB;AAC3D,iBAAO,MAAM,SAAS;AACtB,iBAAO,MAAM,SAAS,GAAG,MAAM,KAAK,QAAQ,MAAM;AAClD;AAAA,QACF,KAAK;AACH,kBAAQ,MAAM,IAAI;AAClB,sBAA+B;AAAA,YAC7B,MAAM;AAAA,UAAA,CACP;AACD;AAAA,MAAA;AAAA,IAEN,CAAC;AAAA,EACH,GAvB4B;AAyB5B,QAAM,cAAc,wBAClB,SACA,aACG;AACH,WAAO,eAAe,YAAY,SAAS,KAAK,QAAQ;AAAA,EAC1D,GALoB;AAOpB,sBAAA;AAEA,SAAO,EAAE,QAAQ,WAAW,aAAa,SAAS,YAAA;AACpD,GArG+B;ACExB,MAAM,sBAAsB,wBAAC,SAI9B;AACJ,QAAM,cAAiC,CAAA;AACvC,QAAM,EAAE,aAAa,GAAG,SAAA,IAAa;AACrC,QAAM,WAAW,gBAAgB;AAAA,IAC/B,GAAG;AAAA,IACH;AAAA,EAAA,CACD;AACD,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,QAAM,cAAc,wBAAC,YAA0C;AAC7D,aAAS,YAAY,OAAgC;AAAA,EACvD,GAFoB;AAIpB,QAAM,YAAY,wBAChB,aACG;AACH,WAAO,SAAS,UAAU,QAAQ;AAAA,EACpC,GAJkB;AAMlB,QAAM,OAAO,6BAAM;AACjB,gBAAY,EAAE,MAAM,cAAc;AAAA,EACpC,GAFa;AAIb,QAAM,OAAO,6BAAM;AACjB,gBAAY,EAAE,MAAM,cAAc;AAAA,EACpC,GAFa;AAIb,QAAM,OAAO,6BAAM;AACjB,gBAAY,EAAE,MAAM,cAAc;AAAA,EACpC,GAFa;AAIb,QAAM,eAAe,wBAAC,QAAgB;AACpC,gBAAY,EAAE,MAAM,kBAAkB,SAAS,EAAE,IAAA,GAAO;AAAA,EAC1D,GAFqB;AAIrB,QAAM,8BAA8B,6BAAM;AACxC,QAAI,SAAS,OAAO,kBAAkB,MAAM;AAC1C,cAAQ,MAAM,0EAA0E;AACxF;AAAA,IACF;AAEA,UAAM,KAAK;AACX,uBAAmB,gBAAgB;AAAA,MACjC,GAAG;AAAA,MACH;AAAA,MACA,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,OAAO,EAAE,QAAQ,QAAA;AAAA,IAAQ,CAC1B;AAED,qBAAiB,OAAO,MAAM,UAAU;AACxC,qBAAiB,OAAO,MAAM,QAAQ;AACtC,qBAAiB,OAAO,MAAM,SAAS;AACvC,qBAAiB,OAAO,MAAM,WAAW;AACzC,qBAAiB,OAAO,MAAM,MAAM;AACpC,qBAAiB,OAAO,MAAM,OAAO;AACrC,qBAAiB,OAAO,KAAK;AAC7B,aAAS,eAAe,EAAE,GAAG,OAAA;AAC7B,aAAS,cAAc,MAAM,GAAG,YAAY,iBAAiB,MAAM;AAEnE,mCAA+B,iBAAiB;AAAA,MAC9C,CAAC,UAA8C;AAC7C,YAAI,MAAM,KAAK,SAAS,oBAAoB,kBAAkB;AAC5D,gBAAM,gBAAgB,MAAM,KAAK;AACjC,kBAAQ,cAAc,MAAA;AAAA,YACpB,KAAK;AACH,+BAAiB,OAAO,MAAM,UAAU;AACxC;AAAA,YACF,KAAK;AACH,+BAAiB,YAAY,MAAM,IAAI;AACvC,+BAAiB,OAAO,MAAM,UAAU;AACxC;AAAA,YACF;AACE,0BAAY,MAAM,IAAI;AACtB;AAAA,UAAA;AAAA,QAEN;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ,GA5CoC;AA8CpC,QAAM,sBAAsB,6BAAM;AAChC,2BAAuB;AAAA,MACrB,CAAC,UAA8C;AAC7C,YAAI,MAAM,KAAK,SAAS,sBAAsB;AAC5C,sBAAY,EAAE,MAAM,qBAAqB,SAAS,EAAE,YAAA,GAAe;AAAA,QACrE;AAEA,YAAI,MAAM,KAAK,SAAS,oBAAoB,kBAAkB;AAC5D,2BAAiB,YAAY,MAAM,IAAI;AAAA,QACzC;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ,GAZ4B;AAc5B,QAAM,kBAAkB,6BAAM;AAC5B,0BAAsB,YAAA;AAAA,EACxB,GAFwB;AAIxB,QAAM,qBAAqB,6BAAM;AAC/B,kCAA8B,YAAA;AAC9B,sBAAkB,OAAO,OAAA;AAAA,EAC3B,GAH2B;AAK3B,QAAM,UAAU,6BAAM;AACpB,oBAAA;AACA,uBAAA;AAAA,EACF,GAHgB;AAKhB,QAAM,eAAe,6BAAM;AACzB,gCAAA;AACA,aAAS,OAAO,oBAAoB,QAAQ,YAAY;AAAA,EAC1D,GAHqB;AAKrB,QAAM,MAAM,6BAAM;AAChB,wBAAA;AACA,aAAS,OAAO,iBAAiB,QAAQ,YAAY;AAAA,EACvD,GAHY;AAKZ,MAAA;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,SAAS;AAAA,IAClB;AAAA,IACA,QAAQ,SAAS;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,SAAS;AAAA,IACtB;AAAA,EAAA;AAEJ,GA1ImC;ACN5B,MAAM,oBAAoB,6BAA6B;AAC5D,QAAM,kBAAkB,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAClE,QAAM,cAA2B,CAAA;AACjC,kBAAgB,QAAQ,CAAC,OAAO,QAAQ;AACtC,gBAAY,GAAG,IAAI;AAAA,EACrB,CAAC;AAED,SAAO;AACT,GARiC;ACI1B,MAAM,mBAAmB,6BAAM;AACpC,QAAM,cAAc,kBAAA;AAEpB,QAAM,eAAe,6BAAM;AACzB,UAAM,SAAS,SAAS,KAAK;AAC7B,gBAA8B;AAAA,MAC5B,MAAM;AAAA,MACN,SAAS,EAAE,OAAA;AAAA,IAAO,CACnB;AAAA,EACH,GANqB;AAQrB,QAAM,cAAc,wBAA8B,YAAsB;AACtE,WAAO,OAAO,YAAY,SAAS,GAAG;AAAA,EACxC,GAFoB;AAIpB,QAAM,YAAY,wBAChB,aACG;AACH,UAAM,UAAU,wBAAC,UAA2B;AAC1C,eAAS,KAAK;AAAA,IAChB,GAFgB;AAIhB,WAAO,iBAAiB,WAAW,OAAO;AAC1C,WAAO;AAAA,MACL,aAAa,6BAAM,OAAO,oBAAoB,WAAW,OAAO,GAAnD;AAAA,IAAmD;AAAA,EAEpE,GAXkB;AAalB,QAAM,aAAa,6BAAM;AACvB,iBAAA;AAAA,EACF,GAFmB;AAInB,QAAM,uBAAuB,6BAAM;AACjC,UAAM,WAAW,IAAI,eAAe,UAAU;AAC9C,aAAS,QAAQ,SAAS,IAAI;AAE9B,cAAU,CAAC,UAAU;AACnB,cAAQ,MAAM,KAAK,MAAA;AAAA,QACjB,KAAK;AACH,gBAAM,OAAO,MAAM,KAAK,QAAQ;AAChC,mBAAS,KAAK,MAAM,WAClB,SAAS,aAAa,WAAW;AACnC;AAAA,QACF,KAAK;AACH,qBAAA;AACA;AAAA,MAEA;AAAA,IAEN,CAAC;AAED,gBAA8B,EAAE,MAAM,sBAAsB;AAAA,EAC9D,GApB6B;AAsB7B,uBAAA;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,GA9DgC;ACFzB,MAAM,8BAA8B,6BAAM;AAC/C,QAAM,YAAY,iBAAA;AAElB,QAAM,cAAc,wBAAC,YAAkC;AACrD,cAAU,YAAY,OAAO;AAAA,EAC/B,GAFoB;AAIpB,QAAM,YAAY,wBAChB,aACG;AACH,WAAO,UAAU,UAAU,QAAQ;AAAA,EACrC,GAJkB;AAMlB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,YAAY,UAAU;AAAA,EAAA;AAE1B,GAlB2C;"}
|