@builder.io/react 9.1.0 → 9.1.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.
- package/CHANGELOG.md +8 -0
- package/dist/builder-react-lite.cjs.js +1 -1
- package/dist/builder-react-lite.cjs.js.map +1 -1
- package/dist/builder-react-lite.esm.js +1 -1
- package/dist/builder-react-lite.esm.js.map +1 -1
- package/dist/builder-react.browser.js +1 -1
- package/dist/builder-react.browser.js.map +1 -1
- package/dist/builder-react.cjs.js +1 -1
- package/dist/builder-react.cjs.js.map +1 -1
- package/dist/builder-react.es5.js +1 -1
- package/dist/builder-react.es5.js.map +1 -1
- package/dist/builder-react.unpkg.js +1 -1
- package/dist/builder-react.unpkg.js.map +1 -1
- package/dist/lib/package.json +1 -1
- package/dist/lib/src/sdk-version.js +1 -1
- package/dist/types/src/sdk-version.d.ts +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-react.es5.js","sources":["../src/sdk-version.ts","../src/scripts/init-editing.ts","../src/functions/utils.ts","../src/constants/device-sizes.constant.ts","../src/functions/set.ts","../src/functions/safe-dynamic-require.ts","../src/functions/is-debug.ts","../src/functions/should-force-browser-runtime-in-node.ts","../src/functions/string-to-function.ts","../src/store/builder-async-requests.ts","../src/store/builder-store.ts","../src/functions/apply-patch-with-mutation.ts","../src/functions/block-to-html-string.ts","../src/components/Link.tsx","../src/functions/traverse.ts","../src/functions/extract-localized-values.ts","../src/components/builder-block.component.tsx","../src/components/builder-blocks.component.tsx","../src/components/no-wrap.tsx","../src/components/variants-provider.component.tsx","../src/components/builder-content.component.tsx","../lib/on-change.js","../src/functions/debonce-next-tick.ts","../src/functions/throttle.ts","../src/store/builder-meta.ts","../src/functions/try-eval.tsx","../src/to-error.ts","../src/functions/get-builder-pixel.ts","../src/components/builder-component.component.tsx","../src/decorators/builder-block.decorator.ts","../src/functions/update-metadata.ts","../src/functions/with-builder.ts","../src/functions/with-children.tsx","../src/functions/no-wrap.tsx","../src/blocks/Text.tsx","../src/blocks/Slot.tsx","../src/blocks/Fragment.tsx","../src/blocks/Columns.tsx","../src/blocks/Embed.tsx","../src/blocks/CustomCode.tsx","../src/constants/file-types.constant.ts","../src/blocks/Image.tsx","../src/blocks/Video.tsx","../src/blocks/Symbol.tsx","../src/blocks/Button.tsx","../src/blocks/Section.tsx","../src/blocks/StateProvider.tsx","../src/blocks/Router.tsx","../src/blocks/Mutation.tsx","../src/functions/get.ts","../src/blocks/forms/Form.tsx","../src/blocks/forms/Input.tsx","../src/blocks/forms/Button.tsx","../src/blocks/forms/Label.tsx","../src/blocks/forms/Select.tsx","../src/blocks/forms/TextArea.tsx","../src/blocks/raw/Img.tsx","../src/blocks/raw/RawText.tsx","../src/functions/filter-with-custom-targeting.ts","../src/blocks/PersonalizationContainer.tsx","../src/hooks/useIsPreviewing.ts","../src/builder-react.ts"],"sourcesContent":["export const SDK_VERSION = '9.1.0';\n","import { SDK_VERSION } from '../sdk-version';\n\nif (typeof window !== 'undefined') {\n window.parent?.postMessage(\n {\n type: 'builder.isReactSdk',\n data: {\n value: true,\n supportsPatchUpdates: 'v4',\n supportsCustomBreakpoints: true,\n supportsXSmallBreakpoint: true,\n supportsGlobalSymbols: true,\n blockLevelPersonalization: true,\n version: SDK_VERSION,\n },\n },\n '*'\n );\n}\n","// TODO: pull from builder internal utils\nexport const fastClone = <T extends object>(obj: T): T => JSON.parse(JSON.stringify(obj));\n\nexport const omit = <T extends object>(obj: T, ...values: (keyof T)[]): Partial<T> => {\n const newObject = Object.assign({}, obj);\n for (const key of values) {\n delete (newObject as any)[key];\n }\n return newObject;\n};\n","import { fastClone } from '../functions/utils';\n\nexport type Size = 'large' | 'medium' | 'small' | 'xsmall';\nexport const sizeNames: Size[] = ['xsmall', 'small', 'medium', 'large'];\n\n// TODO: put in @builder.io/core\nconst sizes = {\n xsmall: {\n min: 0,\n default: 160,\n max: 320,\n },\n small: {\n min: 321,\n default: 321,\n max: 640,\n },\n medium: {\n min: 641,\n default: 642,\n max: 991,\n },\n large: {\n min: 990,\n default: 991,\n max: 1200,\n },\n getWidthForSize(size: Size) {\n return this[size].default;\n },\n getSizeForWidth(width: number) {\n for (const size of sizeNames) {\n const value = this[size];\n if (width <= value.max) {\n return size;\n }\n }\n return 'large';\n },\n};\nexport type Sizes = typeof sizes;\n\nexport interface Breakpoints {\n xsmall?: number;\n small?: number;\n medium?: number;\n}\n\nexport const getSizesForBreakpoints = (breakpoints: Breakpoints) => {\n const newSizes = {\n ...sizes, // Note: this helps get the function from sizes\n ...fastClone(sizes), // Note: this helps to get a deep clone of fields like small, medium etc\n };\n\n if (!breakpoints) {\n return newSizes;\n }\n\n const { xsmall, small, medium } = breakpoints;\n\n if (xsmall) {\n const xsmallMin = Math.floor(xsmall / 2);\n newSizes.xsmall = {\n max: xsmall,\n min: xsmallMin,\n default: xsmallMin + 1,\n };\n }\n\n if (!small || !medium) {\n return newSizes;\n }\n\n const smallMin = xsmall ? newSizes.xsmall.max + 1 : Math.floor(small / 2);\n newSizes.small = {\n max: small,\n min: smallMin,\n default: smallMin + 1,\n };\n\n const mediumMin = newSizes.small.max + 1;\n newSizes.medium = {\n max: medium,\n min: mediumMin,\n default: mediumMin + 1,\n };\n\n const largeMin = newSizes.medium.max + 1;\n newSizes.large = {\n max: 2000, // TODO: decide upper limit\n min: largeMin,\n default: largeMin + 1,\n };\n\n return newSizes;\n};\n","export const set = (obj: any, _path: string | string[], value: any) => {\n if (Object(obj) !== obj) {\n return obj;\n }\n const path: string[] = Array.isArray(_path)\n ? _path\n : (_path.toString().match(/[^.[\\]]+/g) as string[]);\n\n path\n .slice(0, -1)\n .reduce(\n (a, c, i) =>\n Object(a[c]) === a[c]\n ? a[c]\n : (a[c] = Math.abs(Number(path[i + 1])) >> 0 === +path[i + 1] ? [] : {}),\n obj\n )[path[path.length - 1]] = value;\n return obj;\n};\n","'use strict';\n\nimport { Builder } from '@builder.io/sdk';\n\nconst noop = () => null;\n// Allow us to require things dynamically safe from webpack bundling\n\nexport let safeDynamicRequire: typeof require;\n\n/*\n * The if condition below used to be\n *\n * if (typeof globalThis.require === \"function\")\n *\n * That broke in case Builder was running on the server (Next, SSR use-cases) where\n * globalThis.require was undefined. Avoiding use of Builder.isServer for Cloudflare worker cases\n * That said, if change it to\n *\n * if (typeof require === 'function') {\n * localSafeDynamicRequire = eval('require');\n * }\n *\n * Then the TSC / rollup compiler over-optimizes and replaces the if condition with true always\n * causing it to blow up on the client side. Hence this convoluted way of doing it.\n *\n * In Summary:\n *\n * 1. Node -> globalThis.require does not work\n * 2. Cloudflare edge -> only globalThis.require works\n */\nif (\n typeof globalThis?.require === 'function' ||\n (Builder.isServer && typeof require === 'function')\n) {\n try {\n /*\n This is a hack to get around webpack bundling the require function, which is not available in the browser\n Needs to be eval'd to avoid webpack bundling it\n */\n safeDynamicRequire = eval('require');\n } catch (e) {\n /* \n This is a patch for enviornments where eval is not allowed, like Shopify-hydrogen storefront\n Relevant issue : https://github.com/BuilderIO/builder-shopify-hydrogen/issues/12\n */\n if (globalThis?.require) {\n safeDynamicRequire = globalThis.require;\n } else {\n // @ts-ignore\n safeDynamicRequire = noop;\n }\n }\n}\n\nsafeDynamicRequire ??= noop as any;\n","export function isDebug(): boolean {\n return Boolean(\n typeof process !== 'undefined' && typeof process.env !== 'undefined' && process.env.DEBUG\n );\n}\n","function isNodeRuntime(): boolean {\n return typeof process !== 'undefined' && Boolean(process?.versions?.node);\n}\n\nexport const shouldForceBrowserRuntimeInNode = () => {\n if (!isNodeRuntime()) return false;\n\n const isArm64 = process.arch === 'arm64';\n const isNode20 = process.version.startsWith('v20');\n\n const hasNoNodeSnapshotNodeOption = process.env.NODE_OPTIONS?.includes('--no-node-snapshot');\n\n if (isArm64 && isNode20 && !hasNoNodeSnapshotNodeOption) {\n console.log(`Skipping usage of \\`isolated-vm\\` to avoid crashes in Node v20 on an arm64 machine.\n If you would like to use the \\`isolated-vm\\` package on this machine, please provide the \\`NODE_OPTIONS=--no-node-snapshot\\` config to your Node process.\n See https://github.com/BuilderIO/builder/blob/main/packages/react/README.md#node-v20--m1-macs-apple-silicon-support for more information.\n `);\n\n return true;\n }\n\n return false;\n};\n","import { Builder, builder } from '@builder.io/sdk';\nimport { safeDynamicRequire } from './safe-dynamic-require';\nimport { isDebug } from './is-debug';\nimport { shouldForceBrowserRuntimeInNode } from './should-force-browser-runtime-in-node';\n\nconst fnCache: { [key: string]: BuilderEvanFunction | undefined } = {};\n\ntype BuilderEvanFunction = (\n state: object,\n event?: Event | undefined | null,\n block?: any,\n builder?: Builder,\n Device?: any,\n update?: Function | null,\n _Builder?: typeof Builder,\n context?: object\n) => any;\n\nexport const api = (state: any) => builder;\n\nexport function stringToFunction(\n str: string,\n expression = true,\n errors?: Error[],\n logs?: string[]\n): BuilderEvanFunction {\n /* TODO: objedct */\n if (!str || !str.trim()) {\n return () => undefined;\n }\n\n const cacheKey = str + ':' + expression;\n if (fnCache[cacheKey]) {\n return fnCache[cacheKey]!;\n }\n\n // FIXME: gross hack\n const useReturn =\n (expression &&\n !(str.includes(';') || str.includes(' return ') || str.trim().startsWith('return '))) ||\n str.trim().startsWith('builder.run');\n let fn: Function = () => {\n /* intentionally empty */\n };\n\n try {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n if (Builder.isBrowser) {\n // TODO: use strict and eval\n fn = new Function(\n 'state',\n 'event',\n 'block',\n 'builder',\n 'Device',\n 'update',\n 'Builder',\n 'context',\n // TODO: remove the with () {} - make a page v3 that doesn't use this\n // Or only do if can't find state\\s*\\. anywhere hm\n `\n var names = [\n 'state',\n 'event',\n 'block',\n 'builder',\n 'Device',\n 'update',\n 'Builder',\n 'context'\n ];\n var rootState = state;\n if (typeof Proxy !== 'undefined') {\n rootState = new Proxy(rootState, {\n set: function () {\n return false;\n },\n get: function (target, key) {\n if (names.includes(key)) {\n return undefined;\n }\n return target[key];\n }\n });\n }\n /* Alias */\n var ctx = context;\n var log = console.log.bind(console);\n with (rootState) {\n ${useReturn ? `return (${str});` : str};\n }\n `\n );\n }\n } catch (error: any) {\n if (errors) {\n errors.push(error);\n }\n const message = error && error.message;\n if (message && typeof message === 'string') {\n if (logs && logs.indexOf(message) === -1) {\n logs.push(message);\n }\n }\n if (Builder.isBrowser) {\n console.warn(`Function compile error in ${str}`, error);\n }\n }\n\n const final = (...args: any[]) => {\n try {\n if (Builder.isBrowser || shouldForceBrowserRuntimeInNode()) {\n return fn(...args);\n } else {\n // TODO: memoize on server\n // TODO: use something like this instead https://www.npmjs.com/package/rollup-plugin-strip-blocks\n // There must be something more widely used?\n // TODO: regex for between comments instead so can still type check the code... e.g. //SERVER-START ... code ... //SERVER-END\n // Below is a hack to get certain code to *only* load in the server build, to not screw with\n // browser bundler's like rollup and webpack. Our rollup plugin strips these comments only\n // for the server build\n // TODO: cache these for better performancs with new VmScript\n const isolateContext: import('isolated-vm').Context = getIsolateContext();\n const ivm = safeDynamicRequire('isolated-vm') as typeof import('isolated-vm');\n const resultStr = isolateContext.evalClosureSync(\n makeFn(str, useReturn),\n args.map((arg, index) =>\n typeof arg === 'object'\n ? new ivm.Reference(\n index === indexOfBuilderInstance\n ? {\n // workaround: methods with default values for arguments is not being cloned over\n ...arg,\n getUserAttributes: () => arg.getUserAttributes(''),\n }\n : arg\n )\n : null\n )\n );\n try {\n // returning objects throw errors in isolated vm, so we stringify it and parse it back\n const res = JSON.parse(resultStr);\n return res;\n } catch (_error: any) {\n return resultStr;\n }\n }\n } catch (error: any) {\n if (Builder.isBrowser) {\n console.warn(\n 'Builder custom code error:',\n error.message || error,\n 'in',\n str,\n error.stack || error\n );\n } else {\n if (isDebug()) {\n console.debug(\n 'Builder custom code error:',\n error.message || error,\n 'in',\n str,\n error.stack || error\n );\n }\n }\n if (errors) {\n errors.push(error);\n }\n return null;\n }\n };\n\n if (Builder.isBrowser) {\n fnCache[cacheKey] = final;\n }\n\n return final;\n}\n\nconst indexOfBuilderInstance = 3;\n\nexport const makeFn = (code: string, useReturn: boolean, args?: string[]) => {\n // Order must match the order of the arguments to the function\n const names = args || [\n 'state',\n 'event',\n 'block',\n 'builder',\n 'Device',\n 'update',\n 'Builder',\n 'context',\n ];\n\n // Convert all argument references to proxies, and pass `copySync` method to target object, to return a copy of the original JS object\n // https://github.com/laverdet/isolated-vm#referencecopysync\n const refToProxyFn = `\n var refToProxy = (obj) => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return new Proxy({}, {\n get(target, key) {\n if (key === 'copySync') {\n return () => obj.copySync();\n }\n const val = obj.getSync(key);\n if (typeof val?.copySync === 'function') {\n return JSON.parse(stringify(val));\n }\n return val;\n },\n set(target, key, value) {\n obj.setSync(key, value);\n },\n deleteProperty(target, key) {\n obj.deleteSync(key);\n }\n })\n }\n`;\n // Returned object will be stringified and parsed back to the parent isolate\n const strinfigyFn = `\n var stringify = (val) => {\n if (typeof val === 'object' && val !== null) {\n return JSON.stringify(val.copySync ? val.copySync() : val);\n }\n return val;\n }\n `;\n\n return `\n${refToProxyFn}\n${strinfigyFn}\n`.concat(names.map((arg, index) => `var ${arg} = refToProxy($${index});`).join('\\n')).concat(`\n${names.includes('context') ? 'var ctx = context;' : ''}\nvar endResult = function() {\n ${useReturn ? `return (${code});` : code};\n};\n\nreturn stringify(endResult());\n`);\n};\n\nexport const getIsolateContext = () => {\n let isolatedContext = Builder.serverContext;\n\n if (!isolatedContext) {\n const ivm = safeDynamicRequire('isolated-vm') as typeof import('isolated-vm');\n const isolate = new ivm.Isolate({ memoryLimit: 128 });\n isolatedContext = isolate.createContextSync();\n Builder.setServerContext(isolatedContext);\n }\n const jail = isolatedContext!.global;\n // This makes the global object available in the context as `global`. We use `derefInto()` here\n // because otherwise `global` would actually be a Reference{} object in the new isolate.\n jail.setSync('global', jail.derefInto());\n // We will create a basic `log` function for the new isolate to use.\n jail.setSync('log', function (...args: any[]) {\n if (isDebug()) {\n console.log(...args);\n }\n });\n return isolatedContext;\n};\n","import React from 'react';\n\nexport interface RequestInfo {\n promise: Promise<any>;\n url?: string;\n}\n\nexport type RequestOrPromise = RequestInfo | Promise<any>;\n\nexport const isPromise = (thing: RequestOrPromise): thing is Promise<any> =>\n typeof (thing as any).then === 'function';\nexport const isRequestInfo = (thing: RequestOrPromise): thing is RequestInfo => !isPromise(thing);\n\nexport const BuilderAsyncRequestsContext = React.createContext({\n requests: [] as RequestOrPromise[],\n errors: [] as Error[],\n logs: [] as string[],\n});\n","import React from 'react';\n\nexport const BuilderStoreContext = React.createContext<BuilderStore>({\n state: {},\n rootState: {},\n content: {},\n context: {},\n update: (mutator: (state: any) => any) => null,\n});\n\nexport interface BuilderStore {\n state: any;\n rootState: any;\n content: any;\n context: any;\n update: (mutator: (state: any) => any) => any;\n renderLink?: (props: React.AnchorHTMLAttributes<any>) => React.ReactNode;\n}\n","export const applyPatchWithMinimalMutationChain = <T extends object>(\n obj: T,\n patch: { path: string; op: 'add' | 'remove' | 'replace'; value: any },\n preserveRoot = false\n): T => {\n if (Object(obj) !== obj) {\n return obj;\n }\n const { path, op, value } = patch;\n const pathArr: string[] = path.split(/\\//);\n if (pathArr[0] === '') {\n pathArr.shift();\n }\n\n const newObj = preserveRoot ? obj : { ...obj };\n let objPart = newObj as any;\n for (let i = 0; i < pathArr.length; i++) {\n const isLast = i === pathArr.length - 1;\n const property = pathArr[i];\n if (isLast) {\n if (op === 'replace') {\n objPart[property] = value;\n } else if (op === 'add') {\n const index = Number(property);\n if (Array.isArray(objPart)) {\n if (property === '-') {\n objPart.push(value);\n } else {\n objPart.splice(index, 0, value);\n }\n } else {\n objPart[property] = value;\n }\n } else if (op === 'remove') {\n const index = Number(property);\n if (Array.isArray(objPart)) {\n objPart.splice(index, 1);\n } else {\n delete objPart[property];\n }\n }\n } else {\n const nextProperty = pathArr[i + 1];\n const newPart =\n Object(objPart[property]) === objPart[property]\n ? objPart[property]\n : String(Number(nextProperty)) === nextProperty\n ? []\n : {};\n objPart = objPart[property] = Array.isArray(newPart) ? [...newPart] : { ...newPart };\n }\n }\n\n return newObj;\n};\n","import { BuilderElement } from '@builder.io/sdk';\n\nexport const htmlEscape = (str: string) =>\n str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\n\n// TODO: handle self closing tags\n// TODO: how allow components (e.g. react components) in templates?\nexport const blockToHtmlString = (block: BuilderElement): string =>\n `<${htmlEscape(block.tagName || 'div')} \n class=\"builder-block ${block.id} ${block.class || ''}\"\n builder-id=\"${block.id}\"\n ${Object.keys(block.properties || {})\n .map(key => `${htmlEscape(key)}=\"${htmlEscape(block.properties![key])}\"`)\n .join(' ')}\n >${\n block?.component?.name === 'Text'\n ? block.component.options.text\n : block.children\n ? block.children.map(item => blockToHtmlString(item)).join('')\n : ''\n }</${block.tagName || 'div'}>`.replace(/\\s+/g, ' ');\n","'use client';\nimport React from 'react';\nimport { BuilderStoreContext } from '../store/builder-store';\n/**\n * Link component should be used instead of an anchor tag in our components,\n * this is to allow our users to override anchor tags in\n * case they're using a routing Lib that requires using their\n * custom Link component (e.g Next, Gatsby, React Router)\n * <BuilderComponent renderLink=(props) => <myCustomLink {...props} /> />\n */\nexport const Link = (props: React.AnchorHTMLAttributes<HTMLAnchorElement>) => (\n <BuilderStoreContext.Consumer>\n {context => {\n if (context.renderLink) {\n return context.renderLink(props);\n }\n return <a {...props} />;\n }}\n </BuilderStoreContext.Consumer>\n);\n","type TraverseCallback = (value: any, update: (newValue: any) => void) => void;\n\n/**\n * Recursively traverses an object or array, invoking a callback on each value.\n *\n * @param {any} obj - The object or array to traverse. Can also handle primitives, null, or undefined.\n * @param {TraverseCallback} callback - The function to invoke on each value. Receives the current value\n * and an `update` function to modify the value in its parent container.\n * @param {any} [parent=null] - The parent object or array of the current value. Used internally.\n * @param {any} [key=null] - The key or index of the current value in its parent. Used internally.\n * @param {WeakSet} [visited=new WeakSet()] - Tracks visited objects to handle circular references. Used internally.\n *\n * @example\n * // Example: Doubling all numbers in an object\n * const obj = { a: 1, b: [2, 3, { c: 4 }] };\n * traverse(obj, (value, update) => {\n * if (typeof value === 'number') {\n * update(value * 2);\n * }\n * });\n * console.log(obj); // { a: 2, b: [4, 6, { c: 8 }] }\n *\n * @example\n * // Example: Handling circular references\n * const obj = { a: 1 };\n * obj.self = obj;\n * traverse(obj, (value, update) => {\n * if (typeof value === 'number') {\n * update(value * 2);\n * }\n * });\n * console.log(obj.a); // 2\n */\nexport function traverse(\n obj: any,\n callback: TraverseCallback,\n parent: any = null,\n key: any = null,\n visited = new WeakSet()\n): void {\n if (obj == null || typeof obj !== 'object') {\n callback(obj, (newValue: any) => {\n if (parent !== null && key !== null) {\n parent[key] = newValue;\n }\n });\n return;\n }\n\n if (visited.has(obj)) {\n return;\n }\n visited.add(obj);\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n const update = (newValue: any) => {\n obj[index] = newValue;\n };\n callback(item, update);\n traverse(item, callback, obj, index, visited);\n });\n } else {\n Object.entries(obj).forEach(([key, value]) => {\n const update = (newValue: any) => {\n obj[key] = newValue;\n };\n callback(value, update);\n traverse(value, callback, obj, key, visited);\n });\n }\n}\n","import { traverse } from './traverse';\n\nconst isLocalizedField = (value: any) => {\n return value && typeof value === 'object' && value['@type'] === '@builder.io/core:LocalizedValue';\n};\n\nexport const containsLocalizedValues = (data: Record<string, any>) => {\n if (!data || !Object.getOwnPropertyNames(data).length) {\n return false;\n }\n let hasLocalizedValues = false;\n traverse(data, value => {\n if (isLocalizedField(value)) {\n hasLocalizedValues = true;\n return;\n }\n });\n return hasLocalizedValues;\n};\n\nexport const extractLocalizedValues = (data: Record<string, any>, locale: string) => {\n if (!data || !Object.getOwnPropertyNames(data).length) {\n return {};\n }\n\n traverse(data, (value, update) => {\n if (isLocalizedField(value)) {\n update(value[locale] ?? undefined);\n }\n });\n\n return data;\n};\n","/** @jsx jsx */\nimport { Builder, builder, BuilderElement, Component } from '@builder.io/sdk';\nimport { ClassNames, jsx } from '@emotion/core';\nimport React from 'react';\nimport { getSizesForBreakpoints, Size, sizeNames } from '../constants/device-sizes.constant';\nimport { set } from '../functions/set';\nimport { api, stringToFunction } from '../functions/string-to-function';\nimport { BuilderAsyncRequestsContext, RequestOrPromise } from '../store/builder-async-requests';\nimport { BuilderStoreContext } from '../store/builder-store';\nimport { applyPatchWithMinimalMutationChain } from '../functions/apply-patch-with-mutation';\nimport { blockToHtmlString } from '../functions/block-to-html-string';\nimport { Link } from './Link';\nimport { fastClone } from '../functions/utils';\nimport {\n containsLocalizedValues,\n extractLocalizedValues,\n} from 'src/functions/extract-localized-values';\n\nconst camelCaseToKebabCase = (str?: string) =>\n str ? str.replace(/([A-Z])/g, g => `-${g[0].toLowerCase()}`) : '';\n\nconst kebabCaseToCamelCase = (str = '') =>\n str.replace(/-([a-z])/g, match => match[1].toUpperCase());\n\nconst Device = { desktop: 0, tablet: 1, mobile: 2 };\n\n// Deep clone a block but without cloning any child blocks\nexport function deepCloneWithConditions<T = any>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item: any) => deepCloneWithConditions(item)) as T;\n }\n\n if ((obj as any)['@type'] === '@builder.io/sdk:Element') {\n return obj;\n }\n\n const clonedObj: any = {};\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n if (key === 'meta') {\n clonedObj.meta = obj['meta'];\n } else {\n clonedObj[key] = deepCloneWithConditions(obj[key]);\n }\n }\n }\n\n return clonedObj;\n}\n\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n 'textarea', // In React, we want to treat this as void (no children, otherwise React throws errors)\n]);\n\nconst last = <T extends any>(arr: T[]) => arr[arr.length - 1];\n\nfunction omit(obj: any, values: string[]) {\n const newObject = Object.assign({}, obj);\n for (const key of values) {\n delete newObject[key];\n }\n return newObject;\n}\n\nconst cssCase = (property: string) => {\n if (!property) {\n return property;\n }\n\n let str = camelCaseToKebabCase(property);\n\n if (property[0] === property[0].toUpperCase()) {\n str = '-' + str;\n }\n\n return str;\n};\n\n// TODO: share these types in shared\ntype ElementType = any;\n\nexport interface BuilderBlockProps {\n fieldName?: string;\n block: BuilderElement;\n // TODO:\n // block: BuilderElement\n child?: boolean;\n index?: number;\n size?: Size;\n emailMode?: boolean;\n // TODO: use context\n}\n\nfunction capitalize(str: string) {\n if (!str) {\n return;\n }\n return str[0].toUpperCase() + str.slice(1);\n}\n\ninterface BuilderBlockState {\n state: any;\n rootState: any;\n context: any;\n update: Function;\n}\n\nexport class BuilderBlock extends React.Component<\n BuilderBlockProps,\n { hasError: boolean; updates: number }\n> {\n private _asyncRequests?: RequestOrPromise[];\n private _errors?: Error[];\n private _logs?: string[];\n\n hydrated = false;\n\n state = {\n hasError: false,\n updates: 0,\n };\n\n private privateState: BuilderBlockState = {\n state: {},\n rootState: {},\n context: {},\n update: () => {\n /* Intentionally empty */\n },\n };\n\n get store() {\n return this.privateState;\n }\n\n static getDerivedStateFromError(error: any) {\n return { hasError: true };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error('Builder block error:', error, errorInfo);\n }\n\n // TODO: handle adding return if none provided\n // TODO: cache/memoize this (globally with LRU?)\n stringToFunction(str: string, expression = true) {\n return stringToFunction(str, expression, this._errors, this._logs);\n }\n\n get block() {\n return this.props.block;\n }\n\n emotionCss(responsiveStyles: BuilderElement['responsiveStyles']) {\n let initialAnimationStepStyles: any;\n const { block } = this;\n const animation = block.animations && block.animations[0];\n if (animation && animation.trigger !== 'hover') {\n const firstStep = animation && animation.steps && animation.steps[0];\n const stepStyles = firstStep && firstStep.styles;\n if (stepStyles) {\n initialAnimationStepStyles = stepStyles;\n }\n }\n\n const reversedNames = sizeNames.slice().reverse();\n const styles: any = {};\n if (responsiveStyles) {\n const contentHasXSmallBreakpoint = Boolean(\n this.privateState.context.builderContent?.meta?.breakpoints?.xsmall\n );\n for (const size of reversedNames) {\n if (!contentHasXSmallBreakpoint && size === 'xsmall') {\n // Only apply xsmall styles if xsmall breakpoint is enabled on content\n continue;\n }\n\n if (size === 'large') {\n if (!this.props.emailMode) {\n styles[`&.builder-block`] = Object.assign(\n {},\n responsiveStyles[size],\n initialAnimationStepStyles\n );\n }\n } else {\n const sizesPerBreakpoints = getSizesForBreakpoints(\n this.privateState.context.builderContent?.meta?.breakpoints || {}\n );\n styles[`@media only screen and (max-width: ${sizesPerBreakpoints[size].max}px)`] = {\n '&.builder-block': responsiveStyles[size],\n };\n }\n }\n }\n\n const hoverAnimation =\n block.animations && block.animations.find(item => item.trigger === 'hover');\n if (hoverAnimation) {\n styles[':hover'] = hoverAnimation.steps?.[1]?.styles || {};\n // TODO: if manually has set transition property deal with that\n // TODO: only include properties explicitly set in the animation\n // using Object.keys(styles)\n styles.transition = `all ${hoverAnimation.duration}s ${camelCaseToKebabCase(\n hoverAnimation.easing\n )}`;\n if (hoverAnimation.delay) {\n styles.transitionDelay = hoverAnimation.delay + 's';\n }\n }\n\n return styles;\n }\n\n eval(str: string) {\n const fn = this.stringToFunction(str);\n // TODO: only one root instance of this, don't rewrap every time...\n return fn(\n this.privateState.state,\n undefined,\n this.block,\n builder,\n Device,\n this.privateState.update,\n Builder,\n this.privateState.context\n );\n }\n\n componentWillUnmount() {\n if (Builder.isEditing) {\n removeEventListener('message', this.onWindowMessage);\n }\n }\n\n onWindowMessage = (event: MessageEvent) => {\n const message = event.data;\n if (!message) {\n return;\n }\n switch (message.type) {\n case 'builder.selectionChange': {\n const { data } = message;\n if (!data) {\n break;\n }\n const { selection } = data;\n const id = this.block && this.block.id;\n if (id && Array.isArray(selection) && selection.indexOf(id) > -1) {\n setTimeout(() => {\n (window as any).$block = this;\n if (!(window as any).$blocks) {\n (window as any).$blocks = [];\n }\n (window as any).$blocks.push(this);\n });\n }\n break;\n }\n\n case 'builder.patchUpdates': {\n const { data } = message;\n if (!(data && data.data)) {\n break;\n }\n const patches = data.data[this.block.id!];\n if (!patches) {\n return;\n }\n\n if (location.href.includes('builder.debug=true')) {\n eval('debugger');\n }\n for (const patch of patches) {\n applyPatchWithMinimalMutationChain(this.props.block, patch, true);\n }\n this.setState({ updates: this.state.updates + 1 });\n\n break;\n }\n }\n };\n\n componentDidMount() {\n this.hydrated = true;\n const block = this.block;\n const animations = block && block.animations;\n\n if (Builder.isEditing) {\n addEventListener('message', this.onWindowMessage);\n }\n\n // tslint:disable-next-line:comment-format\n ///REACT15ONLY if (this.ref) { this.ref.setAttribute('builder-id', block.id); }\n\n if (animations) {\n const options = {\n animations: fastClone(animations),\n };\n\n // TODO: listen to Builder.editingMode and bind animations when editing\n // and unbind when not\n // TODO: apply bindings first\n if (block.bindings) {\n for (const key in block.bindings) {\n if (!key.trim?.()) {\n continue;\n }\n\n if (key.startsWith('animations.')) {\n // TODO: this needs to run in getElement bc of local state per element for repeats\n const value = this.stringToFunction(block.bindings[key]);\n if (value !== undefined) {\n set(\n options,\n key,\n value(\n this.privateState.state,\n null,\n block,\n builder,\n null,\n null,\n Builder,\n this.privateState.context\n )\n );\n }\n }\n }\n }\n Builder.animator.bindAnimations(\n options.animations\n .filter((item: any) => item.trigger !== 'hover')\n .map((animation: any) => ({\n ...animation,\n elementId: this.block.id,\n }))\n );\n }\n }\n\n // <!-- Builder Blocks --> in comments hmm\n getElement(index = 0, state = this.privateState.state): React.ReactNode {\n const { child, fieldName } = this.props;\n const block = this.block;\n let TagName: string | typeof Link = (block.tagName || 'div').toLowerCase();\n\n if (TagName === 'template') {\n const html = block.children\n ? block.children.map(item => blockToHtmlString(item)).join(' ')\n : '';\n console.debug('template html', html);\n return (\n // React has an undesired behavior (for us) for template tags, so we must\n // turn the contents into a string\n <template\n {...block.properties}\n dangerouslySetInnerHTML={{\n __html: html,\n }}\n />\n );\n }\n\n let InnerComponent: any;\n const componentName =\n block.component && (block.component.name || (block.component as any).component);\n let componentInfo: Component | null = null;\n if (block.component && !(block.component as any).class) {\n if (block.component && block.component.tag) {\n InnerComponent = block.component.tag;\n } else {\n componentInfo = Builder.components.find(item => item.name === componentName) || null;\n if (componentInfo && componentInfo.class) {\n InnerComponent = componentInfo.class;\n } else if (componentInfo && componentInfo.tag) {\n InnerComponent = componentInfo.tag;\n } else {\n if (componentName?.startsWith('Builder:')) {\n console.warn(\n `Missing @builder.io/widgets installation, please install and import @builder.io/widgets to use ${\n componentName.split(':')[1]\n } in your content, more info here: https://github.com/BuilderIO/builder/tree/main/packages/widgets`\n );\n } else if (componentName) {\n console.warn(\n `Missing registration for ${componentName}, have you included the registration in your bundle?`\n );\n }\n }\n }\n }\n\n const TextTag: any = 'span';\n\n let options: any = {\n ...block.properties,\n style: {},\n responsiveStyles: fastClone(block.responsiveStyles || {}),\n };\n\n options = {\n ...options.properties,\n ...options,\n };\n\n if (block.component) {\n options.component = deepCloneWithConditions(block.component);\n }\n\n // Binding should be properties to href or href?\n // Manual style editor show bindings\n // Show if things bound in overlays hmm\n if (block.bindings) {\n for (const key in block.bindings) {\n if (!key.trim?.()) {\n continue;\n }\n\n const value = this.stringToFunction(block.bindings[key]);\n // TODO: pass block, etc\n set(\n options,\n key,\n value(state, null, block, api(state), Device, null, Builder, this.privateState.context)\n );\n }\n }\n\n if (options.hide) {\n return null;\n } else {\n delete options.hide;\n }\n // TODO: UI for this\n if (('show' in options || (block.bindings && block.bindings.show)) && !options.show) {\n return null;\n } else {\n delete options.show;\n }\n\n if (block.actions) {\n for (const key in block.actions) {\n if (!key.trim?.()) {\n continue;\n }\n\n const value = block.actions[key];\n options['on' + capitalize(key)] = (event: any) => {\n let useState = state;\n if (typeof Proxy !== 'undefined') {\n useState = new Proxy(state, {\n set: (obj, prop, value) => {\n obj[prop] = value;\n this.privateState.rootState[prop] = value;\n return true;\n },\n });\n }\n const fn = this.stringToFunction(value, false);\n // TODO: only one root instance of this, don't rewrap every time...\n return fn(\n useState,\n event,\n this.block,\n builder,\n Device,\n this.privateState.update,\n Builder,\n this.privateState.context\n );\n };\n }\n }\n\n let innerComponentProperties = (options.component || options.options) && {\n ...options.options,\n ...(options.component.options || options.component.data),\n };\n\n if (containsLocalizedValues(innerComponentProperties)) {\n if (!this.privateState.state.locale) {\n console.warn(\n '[Builder.io] In order to use localized fields in Builder, you must pass a locale prop to the BuilderComponent or to options object while fetching the content to resolve localized fields. Learn more: https://www.builder.io/c/docs/localization-inline#targeting-and-inline-localization'\n );\n }\n innerComponentProperties = extractLocalizedValues(\n innerComponentProperties,\n this.privateState.state.locale ?? 'Default'\n );\n }\n\n const isVoid = voidElements.has(TagName);\n\n const noWrap = componentInfo && (componentInfo.fragment || componentInfo.noWrap);\n\n const styleStr =\n options.attr?.style || (typeof options.style === 'string' ? options.style : '') || '';\n\n if (typeof styleStr === 'string') {\n if (typeof options.style !== 'object') {\n options.style = {};\n }\n\n const styleSplit = styleStr.split(';');\n for (const pair of styleSplit) {\n const stylePieces = pair.split(':');\n if (!stylePieces.length) {\n return;\n }\n\n let [key, value] = stylePieces;\n\n if (!key) {\n continue;\n }\n\n if (stylePieces.length > 2) {\n value = stylePieces.slice(1).join(':');\n }\n\n options.style[kebabCaseToCamelCase(key)] = value;\n }\n }\n\n const finalOptions: { [key: string]: string } = {\n ...omit(options, ['class', 'component', 'attr', 'responsiveStyles']),\n [typeof TagName === 'string' && !TagName.includes('-') ? 'className' : 'class']:\n `builder-block ${this.id}${block.class ? ` ${block.class}` : ''}${\n block.component && !(['Image', 'Video', 'Banner'].indexOf(componentName) > -1)\n ? ` builder-has-component`\n : ''\n }` +\n (options.class ? ' ' + options.class : '') +\n (this.hydrated && Builder.isEditing && this.privateState.state._spacer?.parent === block.id\n ? ' builder-spacer-parent'\n : ''),\n key: this.id + index,\n 'builder-id': this.id,\n // ...(state && state.$index && typeof state.$index === 'number'\n // ? {\n // TODO: ONLY include on repeat!\n // TODO: what if dymically repeated by another component like tabs... may not work.\n // need function to provide that right\n ...(index !== 0 && {\n 'builder-index': index, // String(state.$index)\n }),\n // }\n // : null)\n };\n\n // tslint:disable-next-line:comment-format\n ///REACT15ONLY finalOptions.className = finalOptions.class\n\n if (Builder.isEditing && this.hydrated) {\n // TODO: removed bc JS can add styles inline too?\n (finalOptions as any)['builder-inline-styles'] = !(options.attr && options.attr.style)\n ? ''\n : Object.keys(options.style).reduce(\n (memo, key) => (memo ? `${memo};` : '') + `${cssCase(key)}:${options.style[key]};`,\n ''\n );\n }\n\n if (\n (((finalOptions as any).properties && (finalOptions as any).properties.href) ||\n (finalOptions as any).href) &&\n TagName === 'div'\n ) {\n TagName = 'a';\n }\n\n if (TagName === 'a') {\n TagName = Link;\n }\n // const css = this.css\n\n // const styleTag = css.trim() && (\n // <style className=\"builder-style\">\n // {(InnerComponent && !isBlock ? `.${this.id} > * { height: 100%; width: 100%; }` : '') +\n // this.css}\n // </style>\n // )\n\n const children = block.children || finalOptions.children || [];\n\n // TODO: test it out\n return (\n <React.Fragment>\n {/* <InsertSpacer id={block.id!} position=\"before\" /> */}\n <ClassNames>\n {({ css, cx }) => {\n if (!this.props.emailMode) {\n const addClass = ' ' + css(this.emotionCss(options.responsiveStyles));\n if (finalOptions.class) {\n finalOptions.class += addClass;\n }\n if (finalOptions.className) {\n finalOptions.className += addClass;\n }\n }\n\n return (\n <BuilderAsyncRequestsContext.Consumer>\n {value => {\n this._asyncRequests = value && value.requests;\n this._errors = value && value.errors;\n this._logs = value && value.logs;\n return isVoid ? (\n <TagName {...finalOptions} />\n ) : InnerComponent && (noWrap || this.props.emailMode) ? (\n // TODO: pass the class to be easier\n // TODO: acceptsChildren option?\n <InnerComponent\n // Final options maaay be wrong here hm\n {...innerComponentProperties}\n // should really call this builderAttributes bc people can name a\n // componet input \"attributes\"\n attributes={finalOptions}\n builderBlock={block}\n builderState={this.privateState}\n />\n ) : (\n <TagName {...(finalOptions as any)}>\n {InnerComponent && (\n <InnerComponent\n builderState={this.privateState}\n builderBlock={block}\n {...innerComponentProperties}\n />\n )}\n {(block as any).text || options.text\n ? options.text\n : !InnerComponent && children && Array.isArray(children) && children.length\n ? children.map((block: ElementType, index: number) => (\n <BuilderBlock\n key={((this.id as string) || '') + index}\n block={block}\n index={index}\n size={this.props.size}\n fieldName={this.props.fieldName}\n child={this.props.child}\n emailMode={this.props.emailMode}\n />\n ))\n : null}\n </TagName>\n );\n }}\n </BuilderAsyncRequestsContext.Consumer>\n );\n }}\n </ClassNames>\n {/* <InsertSpacer id={block.id!} position=\"after\" /> */}\n </React.Fragment>\n );\n }\n\n get id(): string {\n const { block } = this;\n if (block.id && !block.id.startsWith('builder')) {\n return 'builder-' + block.id;\n }\n return block.id || '';\n }\n\n contents(state: BuilderBlockState) {\n const block = this.block;\n\n // this.setState(state);\n this.privateState = state;\n\n if (block.repeat && block.repeat.collection) {\n const collectionPath = block.repeat.collection;\n const collectionName = last((collectionPath || '').trim().split('(')[0].trim().split('.'));\n const itemName = block.repeat.itemName || (collectionName ? collectionName + 'Item' : 'item');\n const array = this.stringToFunction(collectionPath)(\n state.state,\n null,\n block,\n api(state),\n Device,\n null,\n Builder,\n this.privateState.context\n );\n if (Array.isArray(array)) {\n return array.map((data, index) => {\n // TODO: Builder state produce the data\n const childState = {\n ...state.state,\n $index: index,\n $item: data,\n [itemName]: data,\n [`$${itemName}Index`]: index,\n };\n\n return (\n <BuilderStoreContext.Provider\n key={index}\n value={{ ...state, state: childState } as any}\n >\n {this.getElement(index, childState)}\n </BuilderStoreContext.Provider>\n );\n });\n }\n return null;\n }\n\n return this.getElement();\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <span\n css={{\n display: 'inline-block',\n padding: 5,\n color: '#999',\n fontSize: 11,\n fontStyle: 'italic',\n }}\n >\n Builder block error :( Check console for details\n </span>\n );\n }\n return (\n <BuilderStoreContext.Consumer>{value => this.contents(value)}</BuilderStoreContext.Consumer>\n );\n }\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport { Builder } from '@builder.io/sdk';\nimport { BuilderBlock } from './builder-block.component';\n// TODO: fetch these for user and send them with same response like graphql\nimport { Size } from '../constants/device-sizes.constant';\nimport ReactDOM from 'react-dom';\nimport { BuilderStoreContext } from '../store/builder-store';\n\nexport interface BuilderBlocksProps {\n fieldName?: string;\n // TODO: block type (ElementType[])\n blocks?: any[] | React.ReactNode;\n child?: boolean;\n // TODO: use new react context for this to pass window size all the way down\n size?: Size;\n style?: React.CSSProperties;\n parentElementId?: string;\n parent?: any;\n dataPath?: string;\n className?: string;\n emailMode?: boolean;\n}\n\ninterface BuilderBlocksState {\n // width: number\n}\n\n// TODO: options to set direciotn\nexport class BuilderBlocks extends React.Component<BuilderBlocksProps, BuilderBlocksState> {\n hydrated = false;\n get isRoot() {\n return !this.props.child;\n }\n\n get noBlocks() {\n const { blocks } = this.props;\n return !(blocks && (blocks as any).length); // TODO: allow react nodes\n }\n get path() {\n const pathPrefix = 'component.options.';\n let path = this.props.dataPath || '';\n const thisPrefix = 'this.';\n if (path.trim()) {\n if (path.startsWith(thisPrefix)) {\n path = path.replace(thisPrefix, '');\n } else if (!path.startsWith(pathPrefix)) {\n path = pathPrefix + path;\n }\n }\n return path;\n }\n\n get parentId() {\n if (this.props.parentElementId) {\n return this.props.parentElementId;\n }\n return this.props.parent && this.props.parent.id;\n }\n\n componentDidMount() {\n this.hydrated = true;\n }\n\n onClickEmptyBlocks = () => {\n if (Builder.isIframe && this.noBlocks) {\n window.parent?.postMessage(\n {\n type: 'builder.clickEmptyBlocks',\n data: {\n parentElementId: this.parentId,\n dataPath: this.path,\n },\n },\n '*'\n );\n }\n };\n onHoverEmptyBlocks = () => {\n if (Builder.isEditing && this.noBlocks) {\n window.parent?.postMessage(\n {\n type: 'builder.hoverEmptyBlocks',\n data: {\n parentElementId: this.parentId,\n dataPath: this.path,\n },\n },\n '*'\n );\n }\n };\n\n // <!-- Builder Blocks --> in comments hmm\n render() {\n const { blocks } = this.props;\n\n const TagName = this.props.emailMode ? 'span' : 'div';\n\n // TODO: how deep check this automatically for mobx... hmmm optional / peer dependency?\n return (\n // TODO: component <Stack direction=\"vertical\">\n // TODO: react.fragment instead?\n <TagName\n className={\n 'builder-blocks' +\n (this.noBlocks ? ' no-blocks' : '') +\n (this.props.child ? ' builder-blocks-child' : '') +\n (this.props.className ? ' ' + this.props.className : '')\n }\n builder-type=\"blocks\"\n builder-path={Builder.isIframe && this.hydrated ? this.path : undefined}\n builder-parent-id={this.parentId}\n css={\n {\n ...(!this.props.emailMode && {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n }),\n ...this.props.style,\n } as any\n }\n onClick={() => {\n if (this.noBlocks) {\n this.onClickEmptyBlocks();\n }\n }}\n {...(Builder.isEditing && {\n onMouseEnter: () => this.onHoverEmptyBlocks(),\n })}\n >\n {/* TODO: if is react node (for react compatibility) render it */}\n {/* TODO: maybe don't do this to preserve blocks always editable */}\n {(blocks &&\n Array.isArray(blocks) &&\n (blocks as any[]).map((block, index) =>\n block && block['@type'] === '@builder.io/sdk:Element' ? (\n <BuilderBlock\n key={block.id}\n block={block}\n index={index}\n fieldName={this.props.fieldName}\n child={this.props.child}\n emailMode={this.props.emailMode}\n />\n ) : (\n block\n )\n )) ||\n blocks}\n </TagName>\n );\n }\n\n static renderInto(\n elementOrSelector: string | HTMLElement,\n props: BuilderBlocksProps = {},\n builderState: any\n ) {\n if (!elementOrSelector) {\n return;\n }\n\n let element: Element | null = null;\n\n if (typeof elementOrSelector === 'string') {\n element = document.querySelector(elementOrSelector);\n } else {\n if (elementOrSelector instanceof Element) {\n element = elementOrSelector;\n }\n }\n return ReactDOM.render(\n <BuilderStoreContext.Provider value={builderState}>\n <BuilderBlocks {...props} />\n </BuilderStoreContext.Provider>,\n element\n );\n }\n}\n","'use client';\nimport React from 'react';\n\nexport const NoWrap = (props: React.ComponentPropsWithoutRef<any>) => props.children;\n","'use client';\nimport * as React from 'react';\nimport { builder, Builder, BuilderContent, BuilderContentVariation } from '@builder.io/sdk';\n\nfunction getData(content: BuilderContentVariation) {\n if (typeof content?.data === 'undefined') {\n return undefined;\n }\n\n const { blocks, blocksString } = content.data;\n const hasBlocks = Array.isArray(blocks) || typeof blocksString === 'string';\n const newData: any = {\n ...content.data,\n ...(hasBlocks && { blocks: blocks || JSON.parse(blocksString) }),\n };\n\n delete newData.blocksString;\n return newData;\n}\n\nconst variantsScript = (variantsString: string, contentId: string) =>\n `\n(function() {\n if (window.builderNoTrack || !navigator.cookieEnabled) {\n return;\n }\n\n var variants = ${variantsString};\n function removeVariants() {\n variants.forEach(function (template) {\n document.querySelector('template[data-template-variant-id=\"' + template.id + '\"]').remove();\n });\n document.getElementById('variants-script-${contentId}').remove();\n }\n\n if (typeof document.createElement(\"template\").content === 'undefined') {\n removeVariants();\n return ;\n }\n\n function setCookie(name,value,days) {\n var expires = \"\";\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days*24*60*60*1000));\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\" + \"; Secure; SameSite=None\";\n }\n\n function getCookie(name) {\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n for(var i=0;i < ca.length;i++) {\n var c = ca[i];\n while (c.charAt(0)==' ') c = c.substring(1,c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);\n }\n return null;\n }\n var cookieName = 'builder.tests.${contentId}';\n var variantInCookie = getCookie(cookieName);\n var availableIDs = variants.map(function(vr) { return vr.id }).concat('${contentId}');\n var variantId;\n if (availableIDs.indexOf(variantInCookie) > -1) {\n variantId = variantInCookie;\n }\n if (!variantId) {\n var n = 0;\n var random = Math.random();\n for (var i = 0; i < variants.length; i++) {\n var variant = variants[i];\n var testRatio = variant.testRatio;\n n += testRatio;\n if (random < n) {\n setCookie(cookieName, variant.id);\n variantId = variant.id;\n break;\n }\n }\n if (!variantId) {\n variantId = \"${contentId}\";\n setCookie(cookieName, \"${contentId}\");\n }\n }\n if (variantId && variantId !== \"${contentId}\") {\n var winningTemplate = document.querySelector('template[data-template-variant-id=\"' + variantId + '\"]');\n if (winningTemplate) {\n var parentNode = winningTemplate.parentNode;\n var newParent = parentNode.cloneNode(false);\n newParent.appendChild(winningTemplate.content.firstChild);\n parentNode.parentNode.replaceChild(newParent, parentNode);\n }\n } else if (variants.length > 0) {\n removeVariants();\n }\n})()`.replace(/\\s+/g, ' ');\n\ninterface VariantsProviderProps {\n initialContent: BuilderContent;\n children: (variants: BuilderContent[], renderScript?: () => JSX.Element) => JSX.Element;\n nonce?: string;\n}\n\nexport const VariantsProvider = ({ initialContent, children, nonce }: VariantsProviderProps) => {\n if (Builder.isBrowser && !builder.canTrack) {\n return children([initialContent]);\n }\n\n const hasTests = Boolean(Object.keys(initialContent?.variations || {}).length);\n\n if (!hasTests) return children([initialContent]);\n\n const variants: BuilderContent[] = Object.keys(initialContent.variations!).map(id => ({\n id,\n ...initialContent.variations![id],\n data: getData(initialContent.variations![id]!),\n }));\n\n const allVariants = [...variants, initialContent];\n if (Builder.isServer) {\n const variantsJson = JSON.stringify(\n Object.keys(initialContent.variations || {}).map(item => ({\n id: item,\n testRatio: initialContent.variations![item]!.testRatio,\n }))\n );\n const renderScript = () => (\n <script\n nonce={nonce}\n id={`variants-script-${initialContent.id}`}\n dangerouslySetInnerHTML={{\n __html: variantsScript(variantsJson, initialContent.id!),\n }}\n ></script>\n );\n\n // render all variants on the server side\n return <React.Fragment>{children(allVariants, renderScript)}</React.Fragment>;\n }\n\n const cookieName = `builder.tests.${initialContent.id}`;\n\n let variantId = builder.getCookie(cookieName);\n\n if (!variantId && Builder.isBrowser) {\n let n = 0;\n const random = Math.random();\n for (let i = 0; i < variants.length; i++) {\n const variant = variants[i];\n const testRatio = variant.testRatio;\n n += testRatio!;\n if (random < n) {\n builder.setCookie(cookieName, variant.id);\n variantId = variant.id;\n break;\n }\n }\n }\n\n if (!variantId) {\n // render initial content when no winning variation or on the server\n variantId = initialContent.id;\n builder.setCookie(cookieName, variantId);\n }\n\n return children([allVariants.find(item => item.id === variantId)!]);\n};\n","'use client';\nimport React from 'react';\nimport {\n builder,\n Subscription,\n GetContentOptions,\n Builder,\n BuilderContent as Content,\n} from '@builder.io/sdk';\nimport { NoWrap } from './no-wrap';\nimport { applyPatchWithMinimalMutationChain } from '../functions/apply-patch-with-mutation';\nimport { VariantsProvider } from './variants-provider.component';\n\nexport type BuilderContentProps<ContentType> = {\n /**\n * Callback to run when content is fetched and loaded.\n */\n contentLoaded?: (data: any, content: any) => void;\n /**\n * Callback to run if an error occurred while fetching content.\n */\n contentError?: (error: any) => void;\n options?: GetContentOptions;\n children: (content: ContentType, loading?: boolean, fullData?: any) => React.ReactNode;\n /**\n * Only render what was explicitly passed in via `content` - don't fetch from\n * the Builder API.\n *\n * @see content\n */\n inline?: boolean;\n /**\n * @package\n * @deprecated\n */\n dataOnly?: boolean;\n /**\n * @package\n * Pass in a specific builder instance to use instead of the default\n * singleton.\n */\n builder?: Builder;\n /**\n * @deprecated and unnecessary\n */\n isStatic?: boolean;\n /**\n * Builder content object to use instead of fetching from the API.\n *\n * Required if `inline` is set to `true`.\n */\n content?: Content;\n /**\n * CSP nonce to allow the loading and execution of a script or style tag when Content-Security-Policy is enabled.\n */\n nonce?: string;\n} & ({ model: string } | { modelName: string }); // model and modelName are aliases of the same thing¸\n\n/**\n * When passed content json explicitly it'll calculate a/b tests on the content\n * and pass the winning variation down to the children function. If then content\n * prop was omitted it'll try to fetch matching content from your Builder\n * account based on the default user attributes and model.\n */\nexport class BuilderContent<ContentType extends object = any> extends React.Component<\n BuilderContentProps<ContentType>\n> {\n ref: HTMLDivElement | null = null;\n\n get builder() {\n return this.props.builder || builder;\n }\n get name() {\n const props = this.props;\n\n if ('model' in props) {\n return props.model;\n } else {\n return props.modelName;\n }\n }\n\n get renderedVariantId() {\n const id = this.props.isStatic\n ? this.builder.getCookie(`builder.tests.${this.data?.id}`)\n : this.data?.variationId;\n if (id !== null) {\n return id;\n }\n }\n\n get options() {\n let options = {\n ...(this.props.options || ({} as GetContentOptions)),\n };\n if (!options.key && this.props.content?.id && !Builder.isEditing && !Builder.isPreviewing) {\n options.key = this.props.content.id;\n }\n if (\n this.props.content &&\n !options.initialContent?.length &&\n (this.props.inline || !Builder.isPreviewing)\n ) {\n options.initialContent = [this.props.content];\n }\n\n return options;\n }\n\n get data() {\n const content: Content =\n ((this.props.inline || !Builder.isBrowser || this.firstLoad) &&\n this.options.initialContent &&\n this.options.initialContent[0]) ||\n this.state.data;\n\n return getContentWithInfo(content);\n }\n\n state = {\n loading: !this.props.content,\n data: getContentWithInfo(this.props.content),\n updates: 1,\n };\n\n onWindowMessage = (event: MessageEvent) => {\n const isTrusted = Builder.isTrustedHostForEvent(event);\n if (!isTrusted) return;\n\n const message = event.data;\n if (!message) {\n return;\n }\n switch (message.type) {\n case 'builder.patchUpdates': {\n if (this.props.options?.noEditorUpdates) {\n return;\n }\n const { data } = message;\n if (!(data && data.data)) {\n break;\n }\n const patches = data.data[this.state.data?.id!];\n if (!(patches && patches.length)) {\n return;\n }\n\n if (location.href.includes('builder.debug=true')) {\n eval('debugger');\n }\n let newData = this.state.data as any;\n for (const patch of patches) {\n newData = applyPatchWithMinimalMutationChain(newData, patch, false);\n }\n this.setState({\n updates: this.state.updates + 1,\n data: newData,\n });\n if (this.props.contentLoaded) {\n this.props.contentLoaded(newData.data, newData);\n }\n break;\n }\n }\n };\n\n subscriptions = new Subscription();\n\n firstLoad = true;\n clicked = false;\n trackedImpression = false;\n\n intersectionObserver: IntersectionObserver | null = null;\n\n // TODO: observe model name for changes\n componentDidMount() {\n // Temporary to test metrics diving in with bigquery and heatmaps\n // this.builder.autoTrack = true;\n // this.builder.env = 'development';\n if (!this.props.inline || Builder.isEditing || Builder.isPreviewing) {\n this.subscribeToContent();\n } else if (this.props.inline && this.options?.initialContent?.length) {\n const contentData = this.options.initialContent[0];\n // TODO: intersectionobserver like in subscribetocontent - reuse the logic\n if (contentData?.id) {\n this.builder.contentId = contentData.id;\n this.builder.trackImpression(contentData.id, this.renderedVariantId, undefined, {\n content: contentData,\n });\n }\n }\n\n if (Builder.isEditing) {\n addEventListener('message', this.onWindowMessage);\n }\n\n /// REACT15ONLY if (this.ref) { this.ref.setAttribute('builder-model', this.name); }\n }\n\n subscribeToContent() {\n if (this.name !== '_inline') {\n // TODO:... using targeting...? express.request hmmm\n this.subscriptions.add(\n this.builder.queueGetContent(this.name, this.options).subscribe(\n matches => {\n const match = matches && matches[0];\n this.setState({\n data: match,\n loading: false,\n });\n // when BuilderContent is wrapping a BuilderComponent of the same model, the BuilderComponent is passing initialContent on the same key\n // causing the sdk to resolve this call to the initialContent instead of the previewed/edited content\n // so we test here if the BuilderContent is being used directly ( not inlined ) and it has initial content ( content prop ), we let the first render go through to show the initial content\n // and we subscribe again to get the draft/editing content\n const isPreviewing =\n (this.builder.editingModel || this.builder.previewingModel) === this.name;\n if (!this.props.inline && this.props.content && this.firstLoad && isPreviewing) {\n this.firstLoad = false;\n this.subscriptions.unsubscribe();\n this.subscribeToContent();\n }\n\n if (match && this.firstLoad) {\n this.firstLoad = false;\n // TODO: autoTrack\n if (builder.autoTrack && !Builder.isEditing) {\n let addedObserver = false;\n if (typeof IntersectionObserver === 'function' && this.ref) {\n try {\n const observer = (this.intersectionObserver = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach(entry => {\n // In view\n if (entry.intersectionRatio > 0 && !this.trackedImpression) {\n this.builder.trackImpression(\n match.id!,\n this.renderedVariantId,\n undefined,\n {\n content: this.data,\n }\n ),\n { content: this.data };\n this.trackedImpression = true;\n if (this.ref) {\n observer.unobserve(this.ref);\n }\n }\n });\n }\n ));\n\n observer.observe(this.ref);\n addedObserver = true;\n } catch (err) {\n console.warn('Could not bind intersection observer');\n }\n }\n if (!addedObserver) {\n this.trackedImpression = true;\n this.builder.trackImpression(match.id!, this.renderedVariantId, undefined, {\n content: match,\n });\n }\n }\n }\n if (this.props.contentLoaded) {\n this.props.contentLoaded(match && match.data, match);\n }\n },\n error => {\n if (this.props.contentError) {\n this.props.contentError(error);\n this.setState({\n loading: false,\n });\n }\n }\n )\n );\n }\n }\n\n componentWillUnmount() {\n if (Builder.isEditing) {\n removeEventListener('message', this.onWindowMessage);\n }\n\n this.subscriptions.unsubscribe();\n if (this.intersectionObserver && this.ref) {\n this.intersectionObserver.unobserve(this.ref);\n }\n }\n\n onClick = (reactEvent: React.MouseEvent<HTMLElement>) => {\n // TODO: viewport scrolling tracking for impression events\n const event = reactEvent.nativeEvent;\n\n const content = this.data;\n if (!content) {\n return;\n }\n if (builder.autoTrack) {\n this.builder.trackInteraction(content.id!, this.renderedVariantId, this.clicked, event, {\n content,\n });\n }\n if (!this.clicked) {\n this.clicked = true;\n }\n };\n\n render() {\n if (this.props.dataOnly) {\n return null;\n }\n const { loading } = this.state;\n\n const useData: any = this.data;\n const TagName = this.props.dataOnly ? NoWrap : 'div';\n return (\n <VariantsProvider initialContent={useData} nonce={this.props.nonce}>\n {(variants, renderScript) => {\n return (\n <React.Fragment>\n {variants.map((content, index) => {\n // default Variation is at the end, wrap the rest with template\n // TODO: IE11 don't support templates\n const Tag = index === variants.length - 1 ? React.Fragment : 'template';\n return (\n <React.Fragment key={String(content?.id! + index)}>\n {Tag !== 'template' && renderScript?.()}\n <Tag\n key={String(content?.id! + index)}\n {...(Tag === 'template' && {\n 'data-template-variant-id': content?.id,\n })}\n >\n <TagName\n {...(index === 0 &&\n !this.props.dataOnly && {\n ref: (ref: any) => (this.ref = ref),\n })}\n className=\"builder-content\"\n onClick={this.onClick}\n builder-content-id={content?.id}\n builder-model={this.name}\n >\n {this.props.children(\n content?.data! as any,\n this.props.inline ? false : loading,\n useData\n )}\n </TagName>\n </Tag>\n </React.Fragment>\n );\n })}\n </React.Fragment>\n );\n }}\n </VariantsProvider>\n );\n }\n}\n\nexport const getContentWithInfo = (content?: Content) => {\n if (content) {\n const cookieValue = builder.getCookie(`builder.tests.${content.id}`);\n const cookieVariation =\n cookieValue === content.id ? content : content.variations?.[cookieValue];\n const variationName =\n cookieVariation?.name || (cookieVariation?.id === content.id ? 'Default variation' : '');\n\n return {\n ...content,\n variationId: cookieValue,\n testVariationId: cookieValue,\n testVariationName: variationName,\n };\n }\n return null;\n};\n","// Via https://github.com/sindresorhus/on-change but\n// compiled for ES5\n\n'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\n('use strict');\nvar PATH_SEPARATOR = '.';\nvar TARGET = Symbol('target');\nvar UNSUBSCRIBE = Symbol('unsubscribe');\nvar isPrimitive = function (value) {\n return value === null || (typeof value !== 'object' && typeof value !== 'function');\n};\nvar isBuiltinWithoutMutableMethods = function (value) {\n return value instanceof RegExp || value instanceof Number;\n};\nvar isBuiltinWithMutableMethods = function (value) {\n return value instanceof Date;\n};\nvar concatPath = function (path, property) {\n if (property && property.toString) {\n if (path) {\n path += PATH_SEPARATOR;\n }\n path += property.toString();\n }\n return path;\n};\nvar walkPath = function (path, callback) {\n var index;\n while (path) {\n index = path.indexOf(PATH_SEPARATOR);\n if (index === -1) {\n index = path.length;\n }\n callback(path.slice(0, index));\n path = path.slice(index + 1);\n }\n};\nvar shallowClone = function (value) {\n if (Array.isArray(value)) {\n return value.slice();\n }\n return Object.assign({}, value);\n};\nvar onChange = function (object, onChange, options) {\n if (typeof Proxy === 'undefined') {\n // TODO: use immer? or a technique like immer to diff maybe\n return object;\n }\n if (options === void 0) {\n options = {};\n }\n var proxyTarget = Symbol('ProxyTarget');\n var inApply = false;\n var changed = false;\n var applyPath;\n var applyPrevious;\n var isUnsubscribed = false;\n var equals = options.equals || Object.is;\n var propCache = new WeakMap();\n var pathCache = new WeakMap();\n var proxyCache = new WeakMap();\n var handleChange = function (path, property, previous, value) {\n if (isUnsubscribed) {\n return;\n }\n if (!inApply) {\n onChange(concatPath(path, property), value, previous);\n return;\n }\n if (\n inApply &&\n applyPrevious &&\n previous !== undefined &&\n value !== undefined &&\n property !== 'length'\n ) {\n var item_1 = applyPrevious;\n if (path !== applyPath) {\n path = path.replace(applyPath, '').slice(1);\n walkPath(path, function (key) {\n item_1[key] = shallowClone(item_1[key]);\n item_1 = item_1[key];\n });\n }\n item_1[property] = previous;\n }\n changed = true;\n };\n var getOwnPropertyDescriptor = function (target, property) {\n var props = propCache ? propCache.get(target) : undefined;\n if (props) {\n return props;\n }\n props = new Map();\n propCache.set(target, props);\n var prop = props.get(property);\n if (!prop) {\n prop = Reflect.getOwnPropertyDescriptor(target, property);\n props.set(property, prop);\n }\n return prop;\n };\n var invalidateCachedDescriptor = function (target, property) {\n var props = propCache ? propCache.get(target) : undefined;\n if (props) {\n props.delete(property);\n }\n };\n var buildProxy = function (value, path) {\n if (isUnsubscribed) {\n return value;\n }\n pathCache.set(value, path);\n var proxy = proxyCache.get(value);\n if (proxy === undefined) {\n proxy = new Proxy(value, handler);\n proxyCache.set(value, proxy);\n }\n return proxy;\n };\n var unsubscribe = function (target) {\n isUnsubscribed = true;\n propCache = null;\n pathCache = null;\n proxyCache = null;\n return target;\n };\n var ignoreChange = function (property) {\n return isUnsubscribed || (options.ignoreSymbols === true && typeof property === 'symbol');\n };\n var handler = {\n get: function (target, property, receiver) {\n if (property === proxyTarget || property === TARGET) {\n return target;\n }\n if (property === UNSUBSCRIBE && pathCache.get(target) === '') {\n return unsubscribe(target);\n }\n var value = Reflect.get(target, property, receiver);\n if (\n isPrimitive(value) ||\n isBuiltinWithoutMutableMethods(value) ||\n property === 'constructor' ||\n options.isShallow === true\n ) {\n return value;\n }\n // Preserve invariants\n var descriptor = getOwnPropertyDescriptor(target, property);\n if (descriptor && !descriptor.configurable) {\n if (descriptor.set && !descriptor.get) {\n return undefined;\n }\n if (descriptor.writable === false) {\n return value;\n }\n }\n return buildProxy(value, concatPath(pathCache.get(target), property));\n },\n set: function (target, property, value, receiver) {\n if (value && value[proxyTarget] !== undefined) {\n value = value[proxyTarget];\n }\n var ignore = ignoreChange(property);\n var previous = ignore ? null : Reflect.get(target, property, receiver);\n var result = Reflect.set(target[proxyTarget] || target, property, value);\n if (!ignore && !equals(previous, value)) {\n handleChange(pathCache.get(target), property, previous, value);\n }\n return result;\n },\n defineProperty: function (target, property, descriptor) {\n var result = Reflect.defineProperty(target, property, descriptor);\n if (!ignoreChange(property)) {\n invalidateCachedDescriptor(target, property);\n handleChange(pathCache.get(target), property, undefined, descriptor.value);\n }\n return result;\n },\n deleteProperty: function (target, property) {\n if (!Reflect.has(target, property)) {\n return true;\n }\n var ignore = ignoreChange(property);\n var previous = ignore ? null : Reflect.get(target, property);\n var result = Reflect.deleteProperty(target, property);\n if (!ignore) {\n invalidateCachedDescriptor(target, property);\n handleChange(pathCache.get(target), property, previous);\n }\n return result;\n },\n apply: function (target, thisArg, argumentsList) {\n var compare = isBuiltinWithMutableMethods(thisArg);\n if (compare) {\n thisArg = thisArg[proxyTarget];\n }\n if (!inApply) {\n inApply = true;\n if (compare) {\n applyPrevious = thisArg.valueOf();\n }\n if (Array.isArray(thisArg) || toString.call(thisArg) === '[object Object]') {\n applyPrevious = shallowClone(thisArg[proxyTarget]);\n }\n applyPath = pathCache.get(target);\n applyPath = applyPath.slice(0, Math.max(applyPath.lastIndexOf(PATH_SEPARATOR), 0));\n var result = Reflect.apply(target, thisArg, argumentsList);\n inApply = false;\n if (changed || (compare && !equals(applyPrevious, thisArg.valueOf()))) {\n handleChange(applyPath, '', applyPrevious, thisArg[proxyTarget] || thisArg);\n applyPrevious = null;\n changed = false;\n }\n return result;\n }\n return Reflect.apply(target, thisArg, argumentsList);\n },\n };\n var proxy = buildProxy(object, '');\n onChange = onChange.bind(proxy);\n return proxy;\n};\nonChange.target = function (proxy) {\n return proxy[TARGET] || proxy;\n};\nonChange.unsubscribe = function (proxy) {\n return proxy[UNSUBSCRIBE] || proxy;\n};\nmodule.exports = onChange;\nexports.default = onChange;\n","import { Builder } from '@builder.io/sdk';\n\nconst nextTick = Builder.nextTick;\n\n// Plain function - e.g. const debounced = debounceNextTick(fn);\nexport function debounceNextTick(fn: (...args: any[]) => void): () => void;\n// Decorator - e.g. class Foo { @debounceNextTick myMethod() { ... } }\nexport function debounceNextTick(\n target: any,\n key: PropertyKey,\n descriptor: PropertyDescriptor\n): PropertyDescriptor;\nexport function debounceNextTick(\n target: object | ((...args: any[]) => void),\n key?: PropertyKey,\n descriptor?: PropertyDescriptor\n) {\n if (typeof key === 'undefined' && typeof target === 'function') {\n return debounceNextTickImpl(target as any);\n }\n return {\n configurable: true,\n enumerable: descriptor!.enumerable,\n get: function getter(): any {\n // Attach this function to the instance (not the class)\n Object.defineProperty(this, key!, {\n configurable: true,\n enumerable: descriptor!.enumerable,\n value: debounceNextTickImpl(descriptor!.value),\n });\n\n return (this as any)[key!];\n },\n } as PropertyDescriptor;\n}\n\nfunction debounceNextTickImpl(fn: (...args: any[]) => void) {\n let args: any[] | null = null;\n let context: any = null;\n\n return debounced;\n\n function debounced(this: any) {\n const previous = args;\n args = [].slice.call(arguments);\n context = this;\n if (previous !== null) return;\n nextTick(next);\n }\n\n function next() {\n fn.apply(context, args as any);\n args = null;\n context = null;\n }\n}\n","export function throttle(func: Function, wait: number, options: any = {}) {\n let context: any;\n let args: any;\n let result: any;\n let timeout = null as any;\n let previous = 0;\n const later = function () {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function (this: any) {\n const now = Date.now();\n if (!previous && options.leading === false) previous = now;\n const remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n}\n","import React from 'react';\n\nexport const BuilderMetaContext = React.createContext({\n emailMode: false,\n ampMode: false,\n isServer: false,\n});\n","'use client';\nimport { Builder } from '@builder.io/sdk';\nimport { safeDynamicRequire } from './safe-dynamic-require';\nimport { isDebug } from './is-debug';\nimport { getIsolateContext, makeFn } from './string-to-function';\nimport { shouldForceBrowserRuntimeInNode } from './should-force-browser-runtime-in-node';\n\nexport const tryEval = (str?: string, data: any = {}, errors?: Error[]): any => {\n const value = str;\n if (!(typeof value === 'string' && value.trim())) {\n return;\n }\n const useReturn = !(value.includes(';') || value.includes(' return '));\n let fn: Function = () => {\n /* Intentionally empty */\n };\n try {\n if (Builder.isBrowser) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n // TODO: VM in node......\n fn = new Function(\n 'state',\n // TODO: remove the with () {} - make a page v3 that doesn't use this\n `var rootState = state;\n if (typeof Proxy !== 'undefined') {\n rootState = new Proxy(rootState, {\n set: function () {\n return false;\n },\n get: function (target, key) {\n if (key === 'state') {\n return state;\n }\n return target[key]\n }\n });\n }\n with (rootState) {\n ${useReturn ? `return (${str});` : str};\n }`\n );\n }\n } catch (error: any) {\n if (Builder.isBrowser) {\n console.warn('Could not compile javascript', error);\n } else {\n // Add to req.options.errors to return to client\n }\n }\n try {\n if (Builder.isBrowser || shouldForceBrowserRuntimeInNode()) {\n return fn(data || {});\n } else {\n // Below is a hack to get certain code to *only* load in the server build, to not screw with\n // browser bundler's like rollup and webpack. Our rollup plugin strips these comments only\n // for the server build\n const ivm = safeDynamicRequire('isolated-vm');\n const context = getIsolateContext();\n\n Object.keys(data).forEach(key => {\n switch (key) {\n case 'state':\n case 'global':\n case 'log':\n console.warn(`Not setting state.${key} as global ${key} in isolated vm`);\n break;\n default:\n if (data[key] === undefined) {\n return;\n }\n try {\n if (typeof data[key] === 'object' && data[key] !== null) {\n context.global.setSync(key, new ivm.ExternalCopy(data[key]).copyInto());\n } else {\n context.global.setSync(key, data[key]);\n }\n } catch (error) {\n console.warn(`Could not set ${key} for isolated-vm:`, error);\n }\n }\n });\n const fnString = makeFn(str!, useReturn, ['state']);\n const resultStr = context.evalClosureSync(fnString, [new ivm.Reference(data || {})]);\n try {\n // returning objects throw errors in isolated vm, so we stringify it and parse it back\n return JSON.parse(resultStr);\n } catch (_error: any) {\n return resultStr;\n }\n }\n } catch (error: any) {\n if (errors) {\n errors.push(error);\n }\n\n if (Builder.isBrowser) {\n console.warn('Builder custom code error:', error.message, 'in', str, error.stack);\n } else {\n if (isDebug()) {\n console.debug('Builder custom code error:', error.message, 'in', str, error.stack);\n }\n // Add to req.options.errors to return to client\n }\n } finally {\n if (!(Builder.isBrowser || shouldForceBrowserRuntimeInNode())) {\n const context = getIsolateContext();\n\n // Clean up the global context\n Object.keys(data).forEach(key => {\n switch (key) {\n case 'state':\n case 'global':\n case 'log':\n break;\n default:\n context.global.deleteSync(key);\n }\n });\n }\n }\n\n return;\n};\n","/**\n * Safe conversion to error type. Intended to be used in catch blocks where the\n * value is not guaranteed to be an error.\n *\n * @example\n * try {\n * throw new Error('Something went wrong')\n * }\n * catch (err: unknown) {\n * const error: Error = toError(err)\n * }\n */\nexport function toError(err: unknown): Error {\n if (err instanceof Error) return err;\n return new Error(String(err));\n}\n","import { BuilderElement } from '@builder.io/sdk';\n\nexport function getBuilderPixel(apiKey: string): BuilderElement {\n return {\n id: 'builder-pixel-' + Math.random().toString(36).split('.')[1],\n '@type': '@builder.io/sdk:Element',\n tagName: 'img',\n properties: {\n role: 'presentation',\n 'aria-hidden': 'true',\n src: `https://cdn.builder.io/api/v1/pixel?apiKey=${apiKey}`,\n },\n responsiveStyles: {\n large: {\n height: '0',\n width: '0',\n display: 'inline-block',\n opacity: '0',\n overflow: 'hidden',\n pointerEvents: 'none',\n },\n },\n };\n}\n","'use client';\nimport React, { PropsWithChildren } from 'react';\nimport ReactDOM from 'react-dom';\nimport { jsx, css } from '@emotion/core';\nimport { BuilderContent, getContentWithInfo } from './builder-content.component';\nimport { BuilderBlocks } from './builder-blocks.component';\nimport {\n Builder,\n GetContentOptions,\n builder,\n Subscription,\n BehaviorSubject,\n BuilderElement,\n BuilderContent as Content,\n Component,\n} from '@builder.io/sdk';\nimport { BuilderStoreContext } from '../store/builder-store';\nimport hash from 'hash-sum';\nimport onChange from '../../lib/on-change';\n\nexport { onChange };\n\nimport { Breakpoints, getSizesForBreakpoints, Sizes } from '../constants/device-sizes.constant';\nimport {\n BuilderAsyncRequestsContext,\n RequestOrPromise,\n RequestInfo,\n isRequestInfo,\n} from '../store/builder-async-requests';\nimport { Url } from 'url';\nimport { debounceNextTick } from '../functions/debonce-next-tick';\nimport { throttle } from '../functions/throttle';\nimport { BuilderMetaContext } from '../store/builder-meta';\nimport { tryEval } from '../functions/try-eval';\nimport { toError } from '../to-error';\nimport { getBuilderPixel } from '../functions/get-builder-pixel';\nimport { isDebug } from '../functions/is-debug';\n\nexport type RegisteredComponent = Component & {\n component?: React.ComponentType<any>;\n};\n\nfunction pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {\n const ret: any = {};\n keys.forEach(key => {\n ret[key] = obj[key];\n });\n return ret;\n}\nfunction omit<T, K extends keyof T>(obj: T, ...keys: K[]): Omit<T, K> {\n const ret: any = { ...obj };\n keys.forEach(key => {\n delete ret[key];\n });\n return ret;\n}\n\nconst instancesMap = new Map<string, Builder>();\n\nconst wrapComponent = (info: any) => {\n return (props: any) => {\n // TODO: convention for all of this, like builderTagProps={{ style: {} foo: 'bar' }}\n const Tag = props.builderTag || 'div';\n const inputNames = ['children'].concat(\n info.inputs?.map((item: any) => item.name as string) || []\n );\n\n const baseProps = omit(props, ...inputNames, 'attributes');\n const inputProps = props; // pick(props, ...inputNames);\n\n if (info.noWrap) {\n return <info.class attributes={baseProps} {...inputProps} />;\n }\n\n return (\n <Tag {...baseProps}>\n <info.class {...inputProps} />\n </Tag>\n );\n };\n};\n\nconst size = (thing: object) => Object.keys(thing).length;\n\nfunction debounce(func: Function, wait: number, immediate = false) {\n let timeout: any;\n return function (this: any) {\n const context = this;\n const args = arguments;\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n }, wait);\n if (immediate && !timeout) func.apply(context, args);\n };\n}\n\nconst fontsLoaded = new Set();\n\nlet fetch: (typeof globalThis)['fetch'];\nif (globalThis.fetch) fetch = globalThis.fetch;\nfetch ??= require('node-fetch');\n\nconst sizeMap = {\n desktop: 'large',\n tablet: 'medium',\n mobile: 'small',\n xsmall: 'xsmall',\n};\n\nconst fetchCache: { [key: string]: any } = {};\n\nexport interface BuilderComponentProps {\n /**\n * @package\n * @deprecated use {@link model} instead.\n * @hidden\n */\n modelName?: string;\n /**\n * Name of the model this is rendering content for. Default is \"page\".\n */\n model?: string;\n /**\n * @package\n * @deprecated use {@link model} instead.\n * @hidden\n */\n name?: string;\n /**\n * Data is passed along as `state.*` to the component.\n * @see {@link https://github.com/BuilderIO/builder/tree/master/packages/react#passing-data-and-functions-down}\n *\n * @example\n * ```\n * <BuilderComponent\n * model=\"page\"\n * data={{\n * products: productsList,\n * myFunction: () => alert('Triggered!'),\n * foo: 'bar'\n * }} >\n * ```\n */\n data?: any;\n /**\n * Specific instance of Builder that should be used. You might use this for\n * server side rendering. It's generally not recommended except for very\n * advanced multi-tenant use cases.\n */\n builder?: Builder;\n /**\n * Content entry ID for this component to fetch client side\n */\n entry?: string;\n /**\n * @package\n *\n * Builder public API key.\n *\n * @see {@link builder.init()} for the preferred way of supplying your API key.\n */\n apiKey?: string;\n /**\n * @private\n * @hidden\n */\n codegen?: boolean;\n options?: GetContentOptions;\n /**\n * Function callback invoked with `data` and your content when it becomes\n * available.\n *\n * @see {@link https://github.com/BuilderIO/builder/tree/master/packages/react#passing-data-and-functions-down}\n */\n contentLoaded?: (data: any, content: Content) => void;\n /**\n * Instead of having Builder render a link for you with plain anchor\n * elements, use your own function. Useful when using Next.js, Gatsby, or\n * other client side routers' custom `<Link>` components.\n *\n * ## Notes\n *\n * This must be a function that returns JSX, not a component!\n *\n * ## Examples\n *\n * @see {@link https://github.com/BuilderIO/builder/blob/0f0bc1ca835335f99fc21efb20ff3c4836bc9f41/examples/next-js-builder-site/src/functions/render-link.tsx#L6}\n */\n renderLink?: (props: React.AnchorHTMLAttributes<any>) => React.ReactNode;\n /**\n * Callback to run if an error occurred while fetching content.\n */\n contentError?: (error: any) => void;\n /**\n * Manually specify what Builder content JSON object to render. @see {@link\n * https://github.com/BuilderIO/builder/tree/master/packages/react#passing-content-manually}\n */\n content?: Content;\n /**\n * @package\n * @hidden\n *\n * Location object that provides the current url, path, etc; for server side\n * rendering.\n */\n location?: Location | Url;\n /**\n * Callback to run when Builder state changes (e.g. state.foo = 'bar' in an\n * action)\n */\n onStateChange?: (newData: any) => void;\n /**\n * @package\n * @deprecated\n * @hidden\n */\n noAsync?: boolean;\n /**\n * @package\n * @hidden\n *\n * Flag to render email content (small differences in our render logic for\n * email support).\n */\n emailMode?: boolean;\n /**\n * @package\n * @hidden\n *\n * Flag to render amp content (small differences in our render logic for amp\n * support)\n */\n ampMode?: boolean;\n /**\n * @package\n * @hidden\n *\n * Render content in-line only (can't passed from the content prop) don't\n * fetch content from our API.\n */\n inlineContent?: boolean;\n /**\n * @package\n * @deprecated\n * @hidden\n */\n builderBlock?: BuilderElement;\n /**\n * @package\n * @deprecated\n * @hidden\n */\n dataOnly?: boolean;\n /**\n * @package\n * @deprecated\n * @hidden\n */\n hydrate?: boolean;\n /**\n * @package\n * @deprecated use {@link Builder.isStatic} instead\n * @hidden\n */\n isStatic?: boolean;\n /**\n * Object that will be available in actions and bindings.\n *\n * @see {@link https://github.com/BuilderIO/builder/tree/master/packages/react#passing-data-and-functions-down}\n */\n context?: any;\n /**\n * @deprecated\n * @hidden\n */\n url?: string;\n /**\n * @hidden\n * Set to true if this is not the root content component, for instance for symbols\n */\n isChild?: boolean;\n /**\n * Set to true to not call `event.stopPropagation()` in the editor to avoid\n * issues with client site routing triggering when editing in Builder, causing\n * navigation to other pages unintended\n */\n stopClickPropagationWhenEditing?: boolean;\n\n /**\n * Set to the current locale in your application if you want localized inputs to be auto-resolved, should match one of the locales keys in your space settings\n * Learn more about adding or removing locales [here](https://www.builder.io/c/docs/add-remove-locales)\n */\n locale?: string;\n\n /**\n * Pass a list of custom components to register with Builder.io.\n */\n customComponents?: Array<RegisteredComponent>;\n\n /**\n * CSP nonce to allow the loading and execution of a script or style tag when Content-Security-Policy is enabled.\n */\n nonce?: string;\n}\n\nexport interface BuilderComponentState {\n state: any;\n update: (state: any) => any;\n updates: number;\n context: any;\n key: number;\n breakpoints?: Breakpoints;\n}\n\ninterface BuilderRequest {\n '@type': '@builder.io/core:Request';\n request: {\n url: string;\n query?: { [key: string]: string };\n headers?: { [key: string]: string };\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n body?: any;\n };\n options?: { [key: string]: any };\n bindings?: { [key: string]: string };\n}\n\nfunction searchToObject(location: Location | Url) {\n const pairs = (location.search || '').substring(1).split('&');\n const obj: { [key: string]: string } = {};\n\n for (const i in pairs) {\n if (!(pairs[i] && typeof pairs[i] === 'string')) {\n continue;\n }\n const pair = pairs[i].split('=');\n obj[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n\n return obj;\n}\n\n/**\n * Responsible for rendering Builder content of type: 'page' or 'section' to\n * react components. It will attempt to fetch content from the API based on\n * defined user attributes (URL path, device type, and any custom targeting you set using `builder.setUserAttributes`) unless a `BuilderContent`\n * object is provided to `props.content`\n *\n * Use it to mount content in desired location, enable editing in place when\n * previewed in the editor.\n *\n * Supports server-side-rendering when passed the content json as\n * `props.content`.\n */\nexport class BuilderComponent extends React.Component<\n PropsWithChildren<BuilderComponentProps>,\n BuilderComponentState\n> {\n static defaults: Pick<BuilderComponentProps, 'codegen'> = {\n codegen: Boolean(Builder.isBrowser && location.href.includes('builder.codegen=true')),\n };\n\n subscriptions: Subscription = new Subscription();\n // TODO: don't trigger initial one?\n onStateChange = new BehaviorSubject<any>(null);\n asServer = Builder.isServer;\n\n contentRef: BuilderContent | null = null;\n\n styleRef: HTMLStyleElement | null = null;\n\n rootState = Builder.isServer ? {} : onChange({}, () => this.updateState());\n\n lastJsCode = '';\n lastHttpRequests: { [key: string]: string | undefined } = {};\n httpSubscriptionPerKey: { [key: string]: Subscription | undefined } = {};\n firstLoad = true;\n ref: HTMLElement | null = null;\n\n Component: any;\n\n get options() {\n // TODO: for perf cache this\n return {\n ...BuilderComponent.defaults,\n ...this.props,\n };\n }\n\n get name(): string | undefined {\n return this.props.model || this.props.modelName || this.props.name; // || this.props.model\n }\n\n private _asyncRequests?: RequestOrPromise[];\n private _errors?: Error[];\n private _logs?: string[];\n private sizes: Sizes;\n\n get element() {\n return this.ref;\n }\n\n get inlinedContent() {\n if (this.isPreviewing && !this.props.inlineContent) {\n return undefined;\n }\n return this.props.content;\n }\n\n constructor(props: BuilderComponentProps) {\n super(props);\n\n let _content: any = this.inlinedContent;\n if (_content && _content.content) {\n _content = _content.content;\n }\n\n this.sizes = getSizesForBreakpoints(_content?.meta?.breakpoints || {});\n\n // TODO: pass this all the way down - symbols, etc\n // this.asServer = Boolean(props.hydrate && Builder.isBrowser)\n const contentData = this.inlinedContent?.data;\n if (contentData && Array.isArray(contentData.inputs) && contentData.inputs.length > 0) {\n if (!contentData.state) {\n contentData.state = {};\n }\n // set default values of content inputs on state\n contentData.inputs.forEach((input: any) => {\n if (input) {\n if (\n input.name &&\n input.defaultValue !== undefined &&\n contentData.state![input.name] === undefined\n ) {\n contentData.state![input.name] = input.defaultValue;\n }\n }\n });\n }\n this.state = {\n // TODO: should change if this prop changes\n context: {\n ...props.context,\n apiKey: this.props.apiKey || builder.apiKey,\n nonce: this.props.nonce,\n },\n state: Object.assign(this.rootState, {\n ...(this.inlinedContent && this.inlinedContent.data && this.inlinedContent.data.state),\n isBrowser: Builder.isBrowser, // !this.asServer,\n isServer: !Builder.isBrowser, // this.asServer,\n _hydrate: props.hydrate,\n location: this.locationState,\n deviceSize: this.deviceSizeState,\n // TODO: will user attributes be ready here?\n device: this.device,\n ...this.getHtmlData(),\n ...props.data,\n }),\n updates: 0,\n key: 0,\n update: this.updateState,\n };\n\n const key = this.props.apiKey;\n if (key && key !== this.builder.apiKey && !instancesMap.has(key)) {\n // We create a builder instance for each api key to support loading of symbols from other spaces\n const instance = new Builder(key, undefined, undefined, true);\n instancesMap.set(key, instance);\n }\n\n if (this.inlinedContent) {\n // Sometimes with graphql we get the content as `content.content`\n const content = (this.inlinedContent as any).content || this.inlinedContent;\n this.onContentLoaded(content?.data, getContentWithInfo(content)!);\n }\n\n this.registerCustomComponents();\n }\n\n get builder() {\n const instance = this.props.apiKey && instancesMap.get(this.props.apiKey);\n return instance || this.props.builder || builder;\n }\n\n getHtmlData() {\n const id = (this.inlinedContent && this.inlinedContent.id) || this.props.entry;\n const script =\n id &&\n Builder.isBrowser &&\n document.querySelector(\n `script[data-builder-json=\"${id}\"],script[data-builder-state=\"${id}\"]`\n );\n if (script) {\n try {\n const json = JSON.parse((script as HTMLElement).innerText);\n return json;\n } catch (err) {\n console.warn(\n 'Could not parse Builder.io HTML data transfer',\n err,\n (script as HTMLElement).innerText\n );\n }\n }\n return {};\n }\n\n // TODO: pass down with context\n get device() {\n return this.builder.getUserAttributes().device || 'desktop';\n }\n\n get locationState() {\n return {\n // TODO: handle this correctly on the server. Pass in with CONTEXT\n ...pick(this.location, 'pathname', 'hostname', 'search', 'host'),\n path: (this.location.pathname && this.location.pathname.split('/').slice(1)) || '',\n query: searchToObject(this.location),\n };\n }\n\n // TODO: trigger state change on screen size change\n get deviceSizeState() {\n // TODO: use context to pass this down on server\n return Builder.isBrowser\n ? this.sizes.getSizeForWidth(window.innerWidth)\n : sizeMap[this.device] || 'large';\n }\n\n messageListener = (event: MessageEvent) => {\n const isTrusted = Builder.isTrustedHostForEvent(event);\n if (!isTrusted) return;\n\n const info = event.data;\n switch (info.type) {\n case 'builder.configureSdk': {\n const data = info.data;\n\n if (!data.contentId || data.contentId !== this.useContent?.id) {\n return;\n }\n\n this.sizes = getSizesForBreakpoints(data.breakpoints || {});\n\n this.setState({\n state: Object.assign(this.rootState, {\n deviceSize: this.deviceSizeState,\n // TODO: will user attributes be ready here?\n device: this.device,\n }),\n updates: ((this.state && this.state.updates) || 0) + 1,\n breakpoints: data.breakpoints,\n });\n\n break;\n }\n\n case 'builder.updateSpacer': {\n const data = info.data;\n const currentSpacer = this.rootState._spacer;\n this.updateState(state => {\n state._spacer = data;\n });\n break;\n }\n case 'builder.resetState': {\n const { state, model } = info.data;\n if (model === this.name) {\n for (const key in this.rootState) {\n // TODO: support nested functions (somehow)\n if (typeof this.rootState[key] !== 'function') {\n delete this.rootState[key];\n }\n }\n Object.assign(this.rootState, state);\n this.setState({\n ...this.state,\n state: this.rootState,\n updates: ((this.state && this.state.updates) || 0) + 1,\n });\n }\n break;\n }\n case 'builder.resetSymbolState': {\n const { state, model, id } = info.data.state;\n if (this.props.builderBlock && this.props.builderBlock === id) {\n for (const key in this.rootState) {\n delete this.rootState[key];\n }\n Object.assign(this.rootState, state);\n this.setState({\n ...this.state,\n state: this.rootState,\n updates: ((this.state && this.state.updates) || 0) + 1,\n });\n }\n break;\n }\n }\n };\n\n resizeFn = () => {\n const deviceSize = this.deviceSizeState;\n if (deviceSize !== this.state.state.deviceSize) {\n this.setState({\n ...this.state,\n updates: ((this.state && this.state.updates) || 0) + 1,\n state: Object.assign(this.rootState, {\n ...this.state.state,\n deviceSize,\n }),\n });\n }\n };\n\n resizeListener = Builder.isEditing ? throttle(this.resizeFn, 200) : debounce(this.resizeFn, 400);\n\n static renderInto(\n elementOrSelector: string | HTMLElement,\n props: BuilderComponentProps = {},\n hydrate = true,\n fresh = false\n ) {\n console.debug('BuilderPage.renderInto', elementOrSelector, props, hydrate, this);\n\n if (!elementOrSelector) {\n return;\n }\n\n let element: Element | null = null;\n\n if (typeof elementOrSelector === 'string') {\n element = document.querySelector(elementOrSelector);\n } else {\n if (elementOrSelector instanceof Element) {\n element = elementOrSelector;\n }\n }\n\n if (!element) {\n return;\n }\n\n const exists = element.classList.contains('builder-hydrated');\n if (exists && !fresh) {\n console.debug('Tried to hydrate multiple times');\n return;\n }\n element.classList.add('builder-hydrated');\n\n let shouldHydrate = hydrate && element.innerHTML.includes('builder-block');\n\n if (!element.classList.contains('builder-component')) {\n // TODO: maybe remove any builder-api-styles...\n const apiStyles =\n element.querySelector('.builder-api-styles') ||\n (element.previousElementSibling &&\n element.previousElementSibling.matches('.builder-api-styles')\n ? element.previousElementSibling\n : null);\n let keepStyles = '';\n if (apiStyles) {\n const html = apiStyles.innerHTML;\n html.replace(\n /\\/\\*start:([^\\*]+?)\\*\\/([\\s\\S]*?)\\/\\*end:([^\\*]+?)\\*\\//g,\n (match, id, content) => {\n let el: HTMLElement | null = null;\n try {\n el = document.querySelector(`[data-emotion-css=\"${id}\"]`);\n } catch (err) {\n console.warn(err);\n }\n if (el) {\n el.innerHTML = content;\n } else if (!Builder.isEditing) {\n keepStyles += match;\n }\n\n return match;\n }\n );\n // NextTick? or longer timeout?\n Builder.nextTick(() => {\n apiStyles.innerHTML = keepStyles;\n });\n }\n const useElement = element.querySelector('.builder-component');\n if (useElement) {\n element = useElement;\n } else {\n shouldHydrate = false;\n }\n }\n\n if (location.search.includes('builder.debug=true')) {\n console.debug('hydrate', shouldHydrate, element);\n }\n\n let useEl = element;\n if (!exists) {\n const div = document.createElement('div');\n element.insertAdjacentElement('beforebegin', div);\n div.appendChild(element);\n useEl = div;\n }\n\n if (Builder.isEditing || (Builder.isBrowser && location.search.includes('builder.preview='))) {\n shouldHydrate = false;\n }\n if (shouldHydrate && element) {\n // TODO: maybe hydrate again. Maybe...\n const val = ReactDOM.render(\n <BuilderComponent {...props} />,\n useEl,\n (useEl as any).builderRootRef\n );\n (useEl as any).builderRootRef = val;\n return val;\n }\n const val = ReactDOM.render(\n <BuilderComponent {...props} />,\n useEl,\n (useEl as any).builderRootRef\n );\n (useEl as any).builderRootRef = val;\n return val;\n }\n\n mounted = false;\n\n registerCustomComponents() {\n if (this.props.customComponents) {\n for (const customComponent of this.props.customComponents) {\n if (customComponent) {\n const { component, ...registration } = customComponent;\n Builder.registerComponent(component, registration);\n }\n }\n }\n }\n\n componentDidMount() {\n this.mounted = true;\n if (this.asServer) {\n this.asServer = false;\n this.updateState(state => {\n state.isBrowser = true;\n state.isServer = false;\n });\n }\n\n if (Builder.isIframe) {\n window.parent?.postMessage(\n {\n type: 'builder.sdkInjected',\n data: { modelName: this.name, apiKey: this.props.apiKey || builder.apiKey },\n },\n '*'\n );\n }\n\n if (Builder.isBrowser) {\n // TODO: remove event on unload\n window.addEventListener('resize', this.resizeListener);\n if (Builder.isEditing) {\n window.addEventListener('message', this.messageListener);\n }\n\n if (Builder.isEditing || Builder.isPreviewing) {\n Builder.nextTick(() => {\n this.firstLoad = false;\n this.reload();\n });\n }\n\n setTimeout(() => {\n window.dispatchEvent(\n new CustomEvent('builder:component:load', {\n detail: {\n ref: this,\n },\n })\n );\n });\n }\n }\n\n updateState = (fn?: (state: any) => void) => {\n const state = this.rootState;\n if (fn) {\n fn(state);\n }\n if (this.mounted) {\n this.setState({\n update: this.updateState,\n state,\n updates: ((this.state && this.state.updates) || 0) + 1,\n });\n } else {\n this.state = {\n ...this.state,\n update: this.updateState,\n state,\n updates: ((this.state && this.state.updates) || 0) + 1,\n };\n }\n\n this.notifyStateChange();\n };\n\n get isPreviewing() {\n return (\n (Builder.isServer || (Builder.isBrowser && Builder.isPreviewing && !this.firstLoad)) &&\n (builder.previewingModel === this.name || builder.previewingModel === 'BUILDER_STUDIO')\n );\n }\n\n @debounceNextTick\n notifyStateChange() {\n if (Builder.isServer) {\n return;\n }\n if (!(this && this.state)) {\n return;\n }\n const nextState = this.state.state;\n // TODO: only run the below once per tick...\n if (this.props.onStateChange) {\n this.props.onStateChange(nextState);\n }\n\n if (Builder.isBrowser) {\n window.dispatchEvent(\n new CustomEvent('builder:component:stateChange', {\n detail: {\n state: nextState,\n ref: this,\n },\n })\n );\n }\n this.onStateChange.next(nextState);\n }\n\n processStateFromApi(state: { [key: string]: any }) {\n return state; // mapValues(state, value => tryEval(value, this.data, this._errors))\n }\n\n get location() {\n return this.props.location || (Builder.isBrowser ? location : ({} as any));\n }\n\n getCssFromFont(font: any, data?: any) {\n // TODO: compute what font sizes are used and only load those.......\n const family = font.family + (font.kind && !font.kind.includes('#') ? ', ' + font.kind : '');\n const name = family.split(',')[0];\n const url = font.fileUrl ? font.fileUrl : font.files && font.files.regular;\n let str = '';\n if (url && family && name) {\n str += `\n@font-face {\n font-family: \"${family}\";\n src: local(\"${name}\"), url('${url}') format('woff2');\n font-display: fallback;\n font-weight: 400;\n}\n `.trim();\n }\n\n if (font.files) {\n for (const weight in font.files) {\n const isNumber = String(Number(weight)) === weight;\n if (!isNumber) {\n continue;\n }\n // TODO: maybe limit number loaded\n const weightUrl = font.files[weight];\n if (weightUrl && weightUrl !== url) {\n str += `\n@font-face {\n font-family: \"${family}\";\n src: url('${weightUrl}') format('woff2');\n font-display: fallback;\n font-weight: ${weight};\n}\n `.trim();\n }\n }\n }\n return str;\n }\n\n componentWillUnmount() {\n this.unsubscribe();\n if (Builder.isBrowser) {\n window.removeEventListener('resize', this.resizeListener);\n window.removeEventListener('message', this.messageListener);\n }\n }\n\n getFontCss(data?: any) {\n if (!this.builder.allowCustomFonts) {\n return '';\n }\n // TODO: separate internal data from external\n return (\n (data?.customFonts &&\n data.customFonts.length &&\n data.customFonts.map((font: any) => this.getCssFromFont(font, data)).join(' ')) ||\n ''\n );\n }\n\n ensureFontsLoaded(data?: any) {\n if (this.builder.allowCustomFonts && data?.customFonts && Array.isArray(data.customFonts)) {\n for (const font of data.customFonts) {\n const url = font.fileUrl ? font.fileUrl : font.files && font.files.regular;\n if (!fontsLoaded.has(url)) {\n const html = this.getCssFromFont(font, data);\n fontsLoaded.add(url);\n if (!html) {\n continue;\n }\n const style = document.createElement('style');\n style.className = 'builder-custom-font';\n style.setAttribute('data-builder-custom-font', url);\n style.innerHTML = html;\n document.head.appendChild(style);\n }\n }\n }\n }\n\n getCss(data?: any) {\n const contentId = this.useContent?.id;\n let cssCode = data?.cssCode || '';\n if (contentId) {\n // Allow using `&` in custom CSS code like @emotion\n // E.g. `& .foobar { ... }` to scope CSS\n // TODO: handle if '&' is within a string like `content: \"&\"`\n cssCode = cssCode.replace(/&/g, `.builder-component-${contentId}`);\n }\n\n return cssCode + this.getFontCss(data);\n }\n\n get data() {\n const data = {\n ...(this.inlinedContent && this.inlinedContent.data?.state),\n ...this.externalState,\n ...this.state.state,\n };\n Object.assign(this.rootState, data);\n return data;\n }\n\n componentDidUpdate(prevProps: BuilderComponentProps) {\n // TODO: shallow diff\n if (this.props.data && prevProps.data !== this.props.data) {\n this.state.update((state: any) => {\n Object.assign(state, this.externalState);\n });\n }\n\n if (this.props.customComponents && this.props.customComponents !== prevProps.customComponents) {\n this.registerCustomComponents();\n }\n\n if (Builder.isEditing) {\n if (this.inlinedContent && prevProps.content !== this.inlinedContent) {\n this.onContentLoaded(this.inlinedContent.data, this.inlinedContent);\n }\n }\n }\n\n // FIXME: workaround to issue with CSS extraction and then hydration\n // (might be preact only)\n checkStyles(data: any) {\n if (this.styleRef) {\n const css = this.getCss(data);\n if (this.styleRef.innerHTML !== css) {\n this.styleRef.innerHTML = css;\n }\n }\n }\n\n reload() {\n this.setState({\n key: this.state.key + 1,\n });\n }\n\n get content() {\n let content = this.inlinedContent;\n if (content && (content as any).content) {\n // GraphQL workaround\n content = {\n ...content,\n data: (content as any).content,\n };\n }\n return content;\n }\n\n get externalState() {\n return {\n ...this.props.data,\n ...(this.props.locale ? { locale: this.props.locale } : {}),\n };\n }\n\n get useContent() {\n return this.content || this.state.context.builderContent;\n }\n\n render() {\n const content = this.content;\n\n const dataString =\n Builder.isBrowser &&\n this.externalState &&\n size(this.externalState) &&\n hash(this.externalState);\n let key = Builder.isEditing ? this.name : this.props.entry;\n if (key && !Builder.isEditing && dataString && dataString.length < 300) {\n key += ':' + dataString;\n }\n\n const WrapComponent = this.props.dataOnly ? React.Fragment : 'div';\n\n const contentId = this.useContent?.id;\n\n return (\n // TODO: data attributes for model, id, etc?\n <WrapComponent\n onClick={event => {\n // Prevent propagation from the root content component when editing to prevent issues\n // like client side routing triggering when links are clicked, unless this behavior is\n // disabled with the stopClickPropagationWhenEditing prop\n if (\n Builder.isEditing &&\n !this.props.isChild &&\n !this.props.stopClickPropagationWhenEditing\n ) {\n event.stopPropagation();\n }\n }}\n className={`builder-component ${contentId ? `builder-component-${contentId}` : ''}`}\n data-name={this.name}\n data-source=\"Rendered by Builder.io\"\n key={this.state.key}\n ref={ref => (this.ref = ref)}\n >\n <BuilderMetaContext.Consumer>\n {value => (\n <BuilderMetaContext.Provider\n value={\n typeof this.props.ampMode === 'boolean'\n ? {\n ...value,\n ampMode: this.props.ampMode,\n }\n : value\n }\n >\n <BuilderAsyncRequestsContext.Consumer>\n {value => {\n this._asyncRequests = value && value.requests;\n this._errors = value && value.errors;\n this._logs = value && value.logs;\n\n return (\n <BuilderContent\n isStatic={this.props.isStatic || Builder.isStatic}\n key={\n this.inlinedContent?.id ||\n ('content' in this.props && !this.isPreviewing\n ? 'null-content-prop'\n : 'no-content-prop')\n }\n builder={this.builder}\n ref={ref => (this.contentRef = ref)}\n // TODO: pass entry in\n contentLoaded={(data, content) => this.onContentLoaded(data, content)}\n options={{\n key,\n entry: this.props.entry,\n ...(content && { initialContent: [content] }),\n ...(!content &&\n 'content' in this.props &&\n !this.isPreviewing && { initialContent: [] }),\n ...(this.props.url && { url: this.props.url }),\n ...this.props.options,\n ...(this.props.locale ? { locale: this.props.locale } : {}),\n ...(this.options.codegen && {\n format: 'react',\n }),\n }}\n inline={\n this.props.inlineContent || (!this.isPreviewing && 'content' in this.props)\n }\n contentError={this.props.contentError}\n modelName={this.name || 'page'}\n nonce={this.props.nonce}\n >\n {(data, loading, fullData) => {\n if (this.props.dataOnly) {\n return null;\n }\n if (fullData && fullData.id) {\n if (this.state.breakpoints) {\n fullData.meta = fullData.meta || {};\n fullData.meta.breakpoints = this.state.breakpoints;\n }\n this.state.context.builderContent = fullData;\n }\n if (Builder.isBrowser) {\n Builder.nextTick(() => {\n this.checkStyles(data);\n });\n }\n\n const { codegen } = this.options;\n\n if (codegen && !this.Component && data?.blocksJs) {\n const builderComponentNames: string[] = Array.from(\n new Set(Builder.components.map((item: any) => item.name))\n );\n const reversedcomponents = Builder.components.slice().reverse();\n\n const builderComponents = builderComponentNames.map(name =>\n reversedcomponents.find((item: any) => item.class && item.name === name)\n );\n\n const useBuilderState = (initialState: any) => {\n const [, setTick] = React.useState(0);\n const [state] = React.useState(() =>\n onChange(initialState, function () {\n setTick(tick => tick + 1);\n })\n );\n\n return state;\n };\n\n const mappedComponentNames = builderComponentNames.map(name =>\n (name || '').replace(/[^\\w]+/gi, '')\n );\n\n const finalizedComponents = builderComponents.map(info =>\n wrapComponent(info)\n );\n\n this.Component = new Function(\n 'jsx',\n '_css',\n 'Builder',\n 'builder',\n 'React',\n 'useBuilderState',\n ...mappedComponentNames,\n data.blocksJs\n )(\n jsx,\n css,\n Builder,\n builder,\n React,\n useBuilderState,\n ...finalizedComponents\n );\n }\n\n const blocks = data?.blocks || [];\n\n const hasPixel = blocks.find((block: BuilderElement) =>\n block.id?.startsWith('builder-pixel')\n );\n\n if (data && !hasPixel && blocks.length > 0) {\n blocks.push(getBuilderPixel(builder.apiKey!));\n }\n\n // TODO: loading option - maybe that is what the children is or component prop\n // TODO: get rid of all these wrapper divs\n return data ? (\n <div\n data-builder-component={this.name}\n data-builder-content-id={fullData.id}\n {...(this.isPreviewing\n ? {\n 'data-builder-variation-id':\n fullData.testVariationId || fullData.variationId || fullData.id,\n }\n : {})}\n >\n {!codegen && this.getCss(data) && (\n <style\n nonce={this.props.nonce}\n ref={ref => (this.styleRef = ref)}\n className=\"builder-custom-styles\"\n dangerouslySetInnerHTML={{\n __html: this.getCss(data),\n }}\n />\n )}\n <BuilderStoreContext.Provider\n value={{\n ...this.state,\n rootState: this.rootState,\n state: this.data,\n content: fullData,\n renderLink: this.props.renderLink,\n }}\n >\n {codegen && this.Component ? (\n <this.Component data={this.data} context={this.state.context} />\n ) : (\n <BuilderBlocks\n key={String(!!data?.blocks?.length)}\n emailMode={this.props.emailMode}\n fieldName=\"blocks\"\n blocks={blocks}\n />\n )}\n </BuilderStoreContext.Provider>\n </div>\n ) : loading ? (\n <div data-builder-component={this.name} className=\"builder-loading\">\n {this.props.children}\n </div>\n ) : (\n <div data-builder-component={this.name} className=\"builder-no-content\" />\n );\n }}\n </BuilderContent>\n );\n }}\n </BuilderAsyncRequestsContext.Consumer>\n </BuilderMetaContext.Provider>\n )}\n </BuilderMetaContext.Consumer>\n </WrapComponent>\n );\n }\n\n evalExpression(expression: string) {\n const { data } = this;\n return String(expression).replace(/{{([^}]+)}}/g, (match, group) =>\n tryEval(group, data, this._errors)\n );\n }\n\n async handleRequest(\n propertyName: string,\n httpRequest: {\n url: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n body?: any;\n headers?: Record<string, string>;\n }\n ) {\n const { url, method, body, headers } = httpRequest;\n\n const fetchCacheKey = JSON.stringify({ url, method, body, headers });\n // TODO: Builder.isEditing = just checks if iframe and parent page is this.builder.io or localhost:1234\n if (Builder.isIframe && fetchCache[fetchCacheKey]) {\n this.updateState(ctx => {\n ctx[propertyName] = fetchCache[fetchCacheKey];\n });\n return fetchCache[fetchCacheKey];\n }\n const request = async () => {\n const requestStart = Date.now();\n if (!Builder.isBrowser) {\n console.time('Fetch ' + fetchCacheKey);\n }\n let json: any;\n try {\n const fetchOptions = {\n method,\n headers,\n body,\n };\n if (method === 'GET') {\n delete fetchOptions.body;\n }\n const result = await fetch(url, fetchOptions);\n json = await result.json();\n } catch (err) {\n const error = toError(err);\n if (this._errors) {\n this._errors.push(error);\n }\n if (this._logs) {\n this._logs.push(`Fetch to ${fetchCacheKey} errored in ${Date.now() - requestStart}ms`);\n }\n return;\n } finally {\n if (!Builder.isBrowser) {\n console.timeEnd('Fetch ' + fetchCacheKey);\n if (this._logs) {\n this._logs.push(`Fetched ${fetchCacheKey} in ${Date.now() - requestStart}ms`);\n }\n }\n }\n\n if (json) {\n if (Builder.isIframe) {\n fetchCache[fetchCacheKey] = json;\n }\n // TODO: debounce next tick all of these when there are a bunch\n this.updateState(ctx => {\n ctx[propertyName] = json;\n });\n }\n\n return json;\n };\n const existing =\n this._asyncRequests &&\n (this._asyncRequests.find(\n req => isRequestInfo(req) && req.url === url\n ) as RequestInfo | null);\n if (existing) {\n const promise = existing.promise;\n promise.then(json => {\n if (json) {\n this.updateState(ctx => {\n ctx[propertyName] = json;\n });\n }\n });\n return promise;\n }\n const promise = request();\n Builder.nextTick(() => {\n if (this._asyncRequests) {\n this._asyncRequests.push(promise);\n }\n });\n return promise;\n }\n\n unsubscribe() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n this.subscriptions = new Subscription();\n }\n }\n\n handleBuilderRequest(propertyName: string, optionsString: string) {\n const options = tryEval(optionsString, this.data, this._errors);\n // TODO: this will screw up for multiple bits of data\n if (this.subscriptions) {\n this.unsubscribe();\n }\n // TODO: don't unsubscribe and resubscribe every time data changes, will make a TON of requests if that's the case when editing...\n // I guess will be cached then\n if (options) {\n // TODO: unsubscribe on destroy\n this.subscriptions.add(\n this.builder.queueGetContent(options.model, options).subscribe(matches => {\n if (matches) {\n this.updateState(ctx => {\n ctx[propertyName] = matches;\n });\n }\n })\n );\n }\n }\n\n onContentLoaded = (data: any, content: Content) => {\n if (this.name === 'page' && Builder.isBrowser) {\n if (data) {\n const { title, pageTitle, description, pageDescription } = data;\n\n if (title || pageTitle) {\n document.title = title || pageTitle;\n }\n\n if (description || pageDescription) {\n let descriptionTag = document.querySelector('meta[name=\"description\"]');\n\n if (!descriptionTag) {\n descriptionTag = document.createElement('meta');\n descriptionTag.setAttribute('name', 'description');\n document.head.appendChild(descriptionTag);\n }\n\n descriptionTag.setAttribute('content', description || pageDescription);\n }\n }\n }\n\n if (Builder.isEditing) {\n this.notifyStateChange();\n }\n\n if (this.props.contentLoaded) {\n this.props.contentLoaded(data, content);\n }\n\n if (data && data.inputs && Array.isArray(data.inputs) && data.inputs.length) {\n if (!data.state) {\n data.state = {};\n }\n\n data.inputs.forEach((input: any) => {\n if (input) {\n if (\n input.name &&\n input.defaultValue !== undefined &&\n data.state[input.name] === undefined\n ) {\n data.state[input.name] = input.defaultValue;\n }\n }\n });\n }\n\n if (data && data.state) {\n const newState = {\n ...this.state,\n updates: ((this.state && this.state.updates) || 0) + 1,\n state: Object.assign(this.rootState, {\n ...this.state.state,\n location: this.locationState,\n device: this.device,\n ...data.state,\n ...this.externalState,\n deviceSize: this.deviceSizeState,\n }),\n };\n if (this.mounted) {\n this.setState(newState);\n } else {\n this.state = newState;\n }\n }\n\n // TODO: also throttle on edits maybe\n if (data && data.jsCode && !this.options.codegen) {\n // Don't rerun js code when editing and not changed\n let skip = false;\n if (Builder.isEditing) {\n if (this.lastJsCode === data.jsCode) {\n skip = true;\n } else {\n this.lastJsCode = data.jsCode;\n }\n }\n\n if (!skip) {\n const state = this.state.state;\n\n // TODO: real editing method\n try {\n const result = new Function(\n 'data',\n 'ref',\n 'state',\n 'update',\n 'element',\n 'Builder',\n 'builder',\n 'context',\n data.jsCode\n )(data, this, state, this.state.update, this.ref, Builder, builder, this.state.context);\n\n // TODO: allow exports = { } syntax?\n // TODO: do something with reuslt like view - methods, computed, actions, properties, template, etc etc\n } catch (err) {\n const error = toError(err);\n if (Builder.isBrowser) {\n console.warn(\n 'Builder custom code error:',\n error.message,\n 'in',\n data.jsCode,\n error.stack\n );\n } else {\n if (isDebug()) {\n console.debug(\n 'Builder custom code error:',\n error.message,\n 'in',\n data.jsCode,\n error.stack\n );\n }\n // Add to req.options.errors to return to client\n }\n }\n }\n }\n\n if (data && data.httpRequests /* || data.builderData @DEPRECATED */ && !this.props.noAsync) {\n // Don't rerun http requests when editing and not changed\n // No longer needed?\n let skip = false;\n\n if (!skip) {\n // TODO: another structure for this\n for (const key in data.httpRequests) {\n const httpRequest: BuilderRequest | string | undefined = data.httpRequests[key];\n if (httpRequest && (!this.data[key] || Builder.isEditing)) {\n const isCoreRequest =\n typeof httpRequest === 'object' &&\n httpRequest['@type'] === '@builder.io/core:Request';\n if (Builder.isBrowser) {\n const finalUrl = isCoreRequest\n ? this.evalExpression(httpRequest.request.url)\n : this.evalExpression(httpRequest as string);\n\n if (Builder.isEditing && this.lastHttpRequests[key] === finalUrl) {\n continue;\n }\n this.lastHttpRequests[key] = finalUrl;\n\n if (isCoreRequest) {\n this.handleRequest(key, {\n url: finalUrl,\n method: httpRequest.request.method,\n body: httpRequest.request.body,\n headers: httpRequest.request.headers,\n });\n } else {\n this.handleRequest(key, {\n url: finalUrl,\n method: 'GET',\n });\n }\n const currentSubscription = this.httpSubscriptionPerKey[key];\n if (currentSubscription) {\n currentSubscription.unsubscribe();\n }\n\n // TODO: fix this\n const newSubscription = (this.httpSubscriptionPerKey[key] =\n this.onStateChange.subscribe(() => {\n const newUrl = isCoreRequest\n ? this.evalExpression(httpRequest.request.url)\n : this.evalExpression(httpRequest as string);\n if (newUrl !== finalUrl) {\n if (isCoreRequest) {\n this.handleRequest(key, {\n url: newUrl,\n method: httpRequest.request.method,\n body: httpRequest.request.body,\n headers: httpRequest.request.headers,\n });\n } else {\n this.handleRequest(key, {\n url: newUrl,\n method: 'GET',\n });\n }\n this.lastHttpRequests[key] = newUrl;\n }\n }));\n this.subscriptions.add(newSubscription);\n } else {\n if (isCoreRequest) {\n this.handleRequest(key, {\n url: this.evalExpression(httpRequest.request.url),\n method: httpRequest.request.method,\n body: httpRequest.request.body,\n headers: httpRequest.request.headers,\n });\n } else {\n this.handleRequest(key, {\n url: this.evalExpression(httpRequest as string),\n method: 'GET',\n });\n }\n }\n }\n }\n }\n }\n };\n}\n","import { Builder, Component } from '@builder.io/sdk';\n\ninterface ReactComponent extends Component {}\n\nexport function BuilderBlock(options: ReactComponent) {\n options.type = 'react';\n\n return Builder.Component(options);\n}\n","import { Component, Builder } from '@builder.io/sdk';\n\n/**\n * Update metadata for a Builder component\n *\n * @param component Builder react component\n * @param fn Updater\n *\n * @example\n * updatMetadata(TextBlock, current => ({\n * ...current,\n * fields: [\n * ...curent.fields,\n * { name: 'myNewField', type: 'string' }\n * ]\n * }))\n */\nexport function updateMetadata(\n component: Function | string,\n fn: (currentMetadata: Component | null) => Component | void\n) {\n const match =\n Builder.components.find(item => {\n if (typeof component === 'string') {\n return item.name === component;\n } else {\n return item.class === item;\n }\n }) || null;\n\n const updated = fn(match);\n if (match && updated) {\n // re-registering the same component will replace it\n Builder.registerComponent(updated.class || match.class, updated);\n } else if (match && !updated) {\n // TODO: have a way to message to remove component\n } else if (!match && updated) {\n Builder.registerComponent(updated.class, updated);\n }\n}\n","import { Component } from '@builder.io/sdk';\nimport { BuilderBlock } from '../decorators/builder-block.decorator';\n\nexport function withBuilder(component: Function, options: Component) {\n BuilderBlock(options)(component as any);\n return component;\n}\n","'use client';\nimport React from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlock } from '../components/builder-block.component';\n\nconst isBuilderElement = (item: unknown): item is BuilderElement => {\n return Boolean(\n typeof item === 'object' && item && (item as any)?.['@type'] === '@builder.io/sdk:Element'\n );\n};\n\n/**\n * Higher order component for passing Builder.io children as React children\n *\n * @example\n * ```tsx\n *\n * const MyButton = props => <Button>\n * {children}\n * </Button>\n *\n * const ButtonWithBuilderChildren = withChildren(MyButton)\n *\n * Builder.registerComponent(ButtonWithBuilderChildren, {\n * name: 'MyButton',\n * defaultChildren: [\n * {\n * '@type': '@builder.io/sdk:Element'\n * }\n * ]\n * })\n * ```\n */\nexport const withChildren = <P extends object>(Component: React.ComponentType<P>) => {\n const HOC = React.forwardRef<any, React.PropsWithChildren<P> & { builderBlock?: BuilderElement }>(\n (props, ref) => {\n const useProps = { ...props };\n const children =\n props.children ||\n (props.builderBlock &&\n props.builderBlock.children &&\n props.builderBlock.children.map(child => <BuilderBlock key={child.id} block={child} />));\n\n const componentOptions = props.builderBlock?.component?.options;\n if (!!componentOptions) {\n Object.keys(componentOptions).forEach(key => {\n const value = componentOptions[key];\n if (Array.isArray(value) && value.every(isBuilderElement)) {\n useProps[key] = value.map(child => <BuilderBlock key={child.id} block={child} />);\n } else if (isBuilderElement(value)) {\n useProps[key] = <BuilderBlock block={value} />;\n }\n });\n }\n\n return (\n // getting type errors due to `@types/react` version mismatches. Can safely ignore.\n // @ts-ignore\n <Component {...useProps} ref={ref}>\n {children}\n </Component>\n );\n }\n );\n\n (HOC as any).builderOptions = {\n canHaveChildren: true,\n };\n\n return HOC;\n};\n","'use client';\nimport React from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlock } from '../components/builder-block.component';\n\n/**\n * Higher order component for passing Builder.io styles and attributes directly\n * to the component child without wrapping\n *\n * Useful when you need styles etc applied directly to the component without a\n * wrapping element (e.g. div), and you are already forwarding all props and attributes\n * (e.g. <YourComponent {...props} />)\n *\n * 👉 Important: make sure you always add props.className,\n * even if you supply a className too\n *\n * @example\n * ```tsx\n *\n * const MyButton = props => <Button\n * {...props}\n * className={'my-button ' + (props.className || '')}>\n * Hello there!\n * </Button>\n *\n * const ButtonWithBuilderChildren = noWrap(MyButton)\n *\n * Builder.registerComponent(ButtonWithBuilderChildren, {\n * name: 'MyButton',\n * })\n * ```\n */\nexport const noWrap = <P extends object>(Component: React.ComponentType<P>) => {\n const HOC = React.forwardRef((props: React.PropsWithChildren<P> & { attributes?: any }, ref) => {\n const finalProps = {\n ...props,\n ...props.attributes,\n };\n // getting type errors due to `@types/react` version mismatches. Can safely ignore.\n // @ts-ignore\n return <Component {...finalProps} ref={ref} />;\n });\n (HOC as any).builderOptions = {\n noWrap: true,\n };\n\n return HOC;\n};\n","/** @jsx jsx */\nimport { jsx, InterpolationWithTheme } from '@emotion/core';\nimport React from 'react';\nimport { Builder, BuilderElement } from '@builder.io/sdk';\nimport { withBuilder } from '../functions/with-builder';\nimport { BuilderStoreContext } from '../store/builder-store';\nimport { tryEval } from '../functions/try-eval';\n\nconst iconUrl =\n 'https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-text_fields-24px%20(1).svg?alt=media&token=12177b73-0ee3-42ca-98c6-0dd003de1929';\n\nexport interface TextProps {\n text: string;\n builderBlock?: BuilderElement;\n}\n\nclass TextComponent extends React.Component<TextProps> {\n textRef: HTMLSpanElement | null = null;\n\n componentDidMount() {\n // test if there are any expressions in text before assigning innerHTML\n if (this.textRef && !/{{([^}]+)}}/.test(this.props.text)) {\n this.textRef.innerHTML = this.props.text;\n }\n }\n\n evalExpression(expression: string, state: any) {\n // Don't interpolate when inline editing\n if (this.allowTextEdit) {\n return String(expression);\n }\n return String(expression).replace(/{{([^}]+)}}/g, (match, group) => tryEval(group, state));\n }\n\n get allowTextEdit() {\n return (\n Builder.isBrowser &&\n Builder.isEditing &&\n location.search.includes('builder.allowTextEdit=true') &&\n !(\n this.props.builderBlock &&\n this.props.builderBlock.bindings &&\n (this.props.builderBlock.bindings['component.options.text'] ||\n this.props.builderBlock.bindings['options.text'] ||\n this.props.builderBlock.bindings['text'])\n )\n );\n }\n\n render() {\n const textCSS: InterpolationWithTheme<any> = {\n outline: 'none',\n '& p:first-of-type, & .builder-paragraph:first-of-type': {\n margin: 0,\n },\n '& > p, & .builder-paragraph': {\n color: 'inherit',\n lineHeight: 'inherit',\n letterSpacing: 'inherit',\n fontWeight: 'inherit',\n fontSize: 'inherit',\n textAlign: 'inherit',\n fontFamily: 'inherit',\n },\n };\n\n return (\n <BuilderStoreContext.Consumer>\n {state => {\n if (state.content.meta?.rtlMode) {\n textCSS.direction = 'rtl';\n }\n\n return (\n <React.Fragment>\n {/* TODO: <BuilderEditableText component that wraps this for other components with text */}\n <span\n ref={ref => {\n this.textRef = ref;\n }}\n css={textCSS}\n className={\n /* NOTE: This class name must be \"builder-text\" for inline editing to work in the Builder editor */\n 'builder-text'\n }\n {...{\n dangerouslySetInnerHTML: {\n __html: this.evalExpression(\n this.props.text || (this.props as any).content || '',\n state.state\n ),\n },\n }}\n />\n </React.Fragment>\n );\n }}\n </BuilderStoreContext.Consumer>\n );\n }\n}\n\nexport const Text = withBuilder(TextComponent, {\n name: 'Text',\n static: true,\n image: iconUrl,\n inputs: [\n {\n name: 'text',\n type: 'html',\n required: true,\n autoFocus: true,\n bubble: true,\n defaultValue: 'Enter some text...',\n },\n ],\n // Maybe optionally a function that takes in some params like block vs absolute, etc\n defaultStyles: {\n lineHeight: 'normal',\n height: 'auto',\n textAlign: 'center',\n },\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React, { useContext } from 'react';\nimport { Builder } from '@builder.io/sdk';\nimport { BuilderBlocks } from '../components/builder-blocks.component';\nimport { BuilderStoreContext } from '../store/builder-store';\n\nBuilder.registerComponent(Slot, {\n name: 'Slot',\n description: 'Allow child blocks to be inserted into this content when used as a Symbol',\n docsLink: 'https://www.builder.io/c/docs/symbols-with-blocks',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F3aad6de36eae43b59b52c85190fdef56',\n\n // Maybe wrap this for canHaveChildren so bind children to this hm\n inputs: [{ name: 'name', type: 'string', required: true, defaultValue: 'children' }],\n});\n\ntype DropzoneProps = {\n name: string;\n};\n\nexport function Slot(props: DropzoneProps) {\n const { name } = props;\n const context = useContext(BuilderStoreContext);\n\n const isEditingThisSlot = !context.context.symbolId;\n\n return (\n <div\n css={{\n pointerEvents: 'auto',\n }}\n {...(isEditingThisSlot && {\n 'builder-slot': name,\n })}\n >\n <BuilderBlocks\n child\n parentElementId={context.context.symbolId}\n dataPath={`symbol.data.${name}`}\n blocks={context.state[name] || []}\n />\n </div>\n );\n}\n","'use client';\nimport React from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { withBuilder } from '../functions/with-builder';\nimport { BuilderBlock as BuilderBlockComponent } from '../components/builder-block.component';\n\nexport interface FragmentProps {\n builderBlock?: BuilderElement;\n}\n\nclass FragmentComponent extends React.Component<FragmentProps> {\n render() {\n return (\n this.props.builderBlock &&\n this.props.builderBlock.children &&\n this.props.builderBlock.children.map((block, index) => (\n <BuilderBlockComponent block={block} key={block.id} index={index} />\n ))\n );\n }\n}\n\nexport const Fragment = withBuilder(FragmentComponent, {\n name: 'Core:Fragment',\n canHaveChildren: true,\n noWrap: true,\n static: true,\n hideFromInsertMenu: true,\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\n\nimport { BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlocks } from '../components/builder-blocks.component';\nimport { withBuilder } from '../functions/with-builder';\nimport { Link } from '../components/Link';\nimport { Breakpoints, getSizesForBreakpoints } from '../constants/device-sizes.constant';\n\nconst DEFAULT_ASPECT_RATIO = 0.7004048582995948;\n\nconst defaultBlocks: BuilderElement[] = [\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n flexShrink: '0',\n position: 'relative',\n marginTop: '30px',\n textAlign: 'center',\n lineHeight: 'normal',\n height: 'auto',\n minHeight: '20px',\n minWidth: '20px',\n overflow: 'hidden',\n },\n },\n component: {\n name: 'Image',\n options: {\n image:\n 'https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d',\n backgroundPosition: 'center',\n backgroundSize: 'cover',\n aspectRatio: DEFAULT_ASPECT_RATIO,\n },\n },\n },\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n flexShrink: '0',\n position: 'relative',\n marginTop: '30px',\n textAlign: 'center',\n lineHeight: 'normal',\n height: 'auto',\n },\n },\n component: {\n name: 'Text',\n options: {\n text: '<p>Enter some text...</p>',\n },\n },\n },\n];\n\nclass ColumnsComponent extends React.Component<any> {\n // TODO: Column interface\n get columns(): any[] {\n return this.props.columns || [];\n }\n\n get gutterSize(): number {\n return typeof this.props.space === 'number' ? this.props.space || 0 : 20;\n }\n\n getWidth(index: number) {\n return (this.columns[index] && this.columns[index].width) || 100 / this.columns.length;\n }\n\n getColumnWidth(index: number) {\n const { columns, gutterSize } = this;\n const width = this.getWidth(index);\n\n const subtractWidth = gutterSize * (columns.length - 1) * (width / 100);\n\n return `calc(${width}% - ${subtractWidth}px)`;\n }\n\n render() {\n const { columns, gutterSize } = this;\n const contentBreakpoints: Breakpoints =\n this.props.builderState?.context.builderContent?.meta?.breakpoints || {};\n const breakpointSizes = getSizesForBreakpoints(contentBreakpoints);\n\n return (\n // FIXME: make more elegant\n <React.Fragment>\n <div\n className=\"builder-columns\"\n css={{\n display: 'flex',\n height: '100%',\n ...(this.props.stackColumnsAt !== 'never' && {\n [`@media (max-width: ${\n this.props.stackColumnsAt !== 'tablet'\n ? breakpointSizes.small.max\n : breakpointSizes.medium.max\n }px)`]: {\n flexDirection: this.props.reverseColumnsWhenStacked ? 'column-reverse' : 'column',\n alignItems: 'stretch',\n },\n }),\n }}\n >\n {columns.map((col, index) => {\n const TagName = col.link ? Link : 'div';\n\n // TODO: pass size down in context\n\n return (\n <React.Fragment key={index}>\n <TagName\n className=\"builder-column\"\n {...(col.link ? { href: col.link } : null)}\n // TODO: generate width and margin-left as CSS instead so can override with pure CSS for best responsieness\n // and no use of !important\n css={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n lineHeight: 'normal',\n ['& > .builder-blocks']: {\n flexGrow: 1,\n },\n width: this.getColumnWidth(index),\n marginLeft: index === 0 ? 0 : gutterSize,\n ...(this.props.stackColumnsAt !== 'never' && {\n [`@media (max-width: ${\n this.props.stackColumnsAt !== 'tablet'\n ? breakpointSizes.small.max\n : breakpointSizes.medium.max\n }px)`]: {\n width: '100%',\n marginLeft: 0,\n },\n }),\n }}\n >\n <BuilderBlocks\n key={index}\n // TODO: childOf [parentBlocks]?\n child\n parentElementId={this.props.builderBlock && this.props.builderBlock.id}\n blocks={col.blocks}\n dataPath={`component.options.columns.${index}.blocks`}\n />\n </TagName>\n </React.Fragment>\n );\n })}\n </div>\n </React.Fragment>\n );\n }\n}\n\nexport const Columns = withBuilder(ColumnsComponent, {\n name: 'Columns',\n static: true,\n inputs: [\n {\n name: 'columns',\n type: 'array',\n broadcast: true,\n subFields: [\n {\n name: 'blocks',\n type: 'array',\n hideFromUI: true,\n defaultValue: defaultBlocks,\n },\n {\n name: 'width',\n type: 'number',\n hideFromUI: true,\n helperText: 'Width %, e.g. set to 50 to fill half of the space',\n },\n {\n name: 'link',\n type: 'url',\n helperText: 'Optionally set a url that clicking this column will link to',\n },\n ],\n defaultValue: [{ blocks: defaultBlocks }, { blocks: defaultBlocks }],\n onChange: (options: Map<string, any>) => {\n function clearWidths() {\n columns.forEach(col => {\n col.delete('width');\n });\n }\n\n const columns = options.get('columns') as Array<Map<String, any>>;\n\n if (Array.isArray(columns)) {\n const containsColumnWithWidth = !!columns.find(col => col.get('width'));\n\n if (containsColumnWithWidth) {\n const containsColumnWithoutWidth = !!columns.find(col => !col.get('width'));\n if (containsColumnWithoutWidth) {\n clearWidths();\n } else {\n const sumWidths = columns.reduce((memo, col) => {\n return memo + col.get('width');\n }, 0);\n const widthsDontAddUp = sumWidths !== 100;\n if (widthsDontAddUp) {\n clearWidths();\n }\n }\n }\n }\n },\n },\n {\n name: 'space',\n type: 'number',\n defaultValue: 20,\n helperText: 'Size of gap between columns',\n advanced: true,\n },\n {\n name: 'stackColumnsAt',\n type: 'string',\n defaultValue: 'tablet',\n helperText: 'Convert horizontal columns to vertical at what device size',\n enum: ['tablet', 'mobile', 'never'],\n advanced: true,\n },\n {\n name: 'reverseColumnsWhenStacked',\n type: 'boolean',\n defaultValue: false,\n helperText: 'When stacking columns for mobile devices, reverse the ordering',\n advanced: true,\n },\n ],\n});\n","'use client';\nimport React from 'react';\nimport { Builder } from '@builder.io/sdk';\nimport { withBuilder } from '../functions/with-builder';\n\nclass EmbedComponent extends React.Component<any> {\n elementRef: HTMLElement | null = null;\n\n scriptsInserted = new Set();\n scriptsRun = new Set();\n\n shouldComponentUpdate(nextProps: Readonly<any>): boolean {\n return nextProps.content !== this.props.content;\n }\n\n componentDidUpdate(prevProps: any) {\n if (this.props.content !== prevProps.content) {\n this.findAndRunScripts();\n }\n }\n\n componentDidMount() {\n this.findAndRunScripts();\n }\n\n findAndRunScripts() {\n if (this.elementRef && typeof window !== 'undefined') {\n const scripts = this.elementRef.getElementsByTagName('script');\n for (let i = 0; i < scripts.length; i++) {\n const script = scripts[i];\n if (script.src) {\n if (this.scriptsInserted.has(script.src)) {\n continue;\n }\n this.scriptsInserted.add(script.src);\n const newScript = document.createElement('script');\n newScript.async = true;\n newScript.src = script.src;\n document.head.appendChild(newScript);\n } else {\n if (this.scriptsRun.has(script.innerText)) {\n continue;\n }\n this.scriptsRun.add(script.innerText);\n try {\n new Function(script.innerText)();\n } catch (error) {\n console.warn('Builder custom code component error:', error);\n }\n }\n }\n }\n }\n\n get content() {\n // Remove scripts on server - if they manipulate dom there can be issues on hydration\n // TODO: allow this to by bypassed by context or prop that says if this is going to be HTML\n // loaded without client JS/hydration (static)\n if (Builder.isServer) {\n return (this.props.content || '').replace(/<script[\\s\\S]*?<\\/script>/g, '');\n }\n return this.props.content;\n }\n\n render() {\n return (\n <div\n ref={ref => (this.elementRef = ref)}\n className=\"builder-embed\"\n dangerouslySetInnerHTML={{ __html: this.content }}\n />\n );\n }\n}\n\nexport const Embed = withBuilder(EmbedComponent, {\n name: 'Embed',\n static: true,\n inputs: [\n {\n name: 'url',\n type: 'url',\n required: true,\n defaultValue: '',\n helperText: 'e.g. enter a youtube url, google map, etc',\n },\n {\n name: 'content',\n type: 'html',\n defaultValue: `<div style=\"padding: 20px; text-align: center\">(Choose an embed URL)<div>`,\n hideFromUI: true,\n },\n ],\n});\n","'use client';\nimport React from 'react';\nimport { BuilderElement, Builder } from '@builder.io/sdk';\nimport { withBuilder } from '../functions/with-builder';\n\ninterface Props {\n code: string;\n builderBlock?: BuilderElement;\n replaceNodes?: boolean;\n scriptsClientOnly?: boolean;\n}\n\n// TODO: settings context to pass this down. do in shopify-specific generated code\nconst globalReplaceNodes = ({} as { [key: string]: Node[] }) || null;\n\nconst isShopify = Builder.isBrowser && 'Shopify' in window;\n\nif (Builder.isBrowser && globalReplaceNodes) {\n const customCodeQuerySelector = '.builder-custom-code';\n\n try {\n let allCustomCodeElements = Array.from(document.querySelectorAll(customCodeQuerySelector));\n\n // Search each template element (if present) for custom code blocks since\n // querySelectorAll cannot search all templates that we use for variations, because they are\n // considered document fragments and are not a part of the DOM.\n const builderTemplates = document.querySelectorAll('template[data-template-variant-id]');\n if (builderTemplates.length) {\n Array.from(builderTemplates).forEach(template => {\n const content: DocumentFragment = (template as any).content;\n const codeElements = content.querySelectorAll(customCodeQuerySelector);\n if (codeElements.length) {\n allCustomCodeElements = allCustomCodeElements.concat(Array.from(codeElements));\n }\n });\n }\n\n allCustomCodeElements.forEach(el => {\n const parent = el.parentElement;\n const id = parent && parent.getAttribute('builder-id');\n if (id) {\n globalReplaceNodes[id] = globalReplaceNodes[id] || [];\n globalReplaceNodes[id].push(isShopify ? el : el.cloneNode(true));\n }\n });\n } catch (err) {\n console.error('Builder replace nodes error:', err);\n }\n}\n\nclass CustomCodeComponent extends React.Component<Props> {\n elementRef: Element | null = null;\n originalRef: Node | Element | null = null;\n\n scriptsInserted = new Set();\n scriptsRun = new Set();\n\n firstLoad = true;\n replaceNodes = false;\n state = {\n hydrated: false,\n };\n\n constructor(props: Props) {\n super(props);\n if (Builder.isBrowser) {\n const id = this.props.builderBlock?.id;\n this.replaceNodes = Boolean(\n Builder.isBrowser && (props.replaceNodes || isShopify) && id && globalReplaceNodes?.[id]\n );\n\n if (this.firstLoad && this.props.builderBlock) {\n if (id && globalReplaceNodes?.[id]) {\n const el = globalReplaceNodes[id].shift() || null;\n this.originalRef = el;\n if (globalReplaceNodes[id].length === 0) {\n delete globalReplaceNodes[id];\n }\n } else if (this.replaceNodes) {\n const existing = document.querySelectorAll(\n `.${this.props.builderBlock.id} .builder-custom-code`\n );\n if (existing.length === 1) {\n const node = existing[0];\n this.originalRef = node as HTMLElement;\n (this.originalRef as Element).remove();\n }\n }\n }\n }\n }\n\n shouldComponentUpdate(nextProps: Readonly<Props>): boolean {\n return nextProps.code !== this.props.code;\n }\n\n get noReactRender() {\n // Don't render liquid client side\n return Boolean(isShopify && this.props.code?.match(/{[{%]/g));\n }\n\n get isHydrating() {\n return !isShopify && this.originalRef;\n }\n\n componentDidUpdate(prevProps: Props) {\n if (this.props.code !== prevProps.code) {\n this.findAndRunScripts();\n }\n }\n\n componentDidMount() {\n this.firstLoad = false;\n if (!this.replaceNodes) {\n if (this.isHydrating) {\n // first render need to match what's on ssr (issue with next.js)\n this.setState({\n hydrated: true,\n });\n Builder.nextTick(() => this.findAndRunScripts());\n } else {\n this.findAndRunScripts();\n }\n }\n if (Builder.isBrowser && this.replaceNodes && this.originalRef && this.elementRef) {\n this.elementRef.appendChild(this.originalRef);\n }\n }\n\n findAndRunScripts() {\n if (this.elementRef && typeof window !== 'undefined') {\n const scripts = this.elementRef.getElementsByTagName('script');\n for (let i = 0; i < scripts.length; i++) {\n const script = scripts[i];\n if (script.src) {\n if (this.scriptsInserted.has(script.src)) {\n continue;\n }\n this.scriptsInserted.add(script.src);\n const newScript = document.createElement('script');\n newScript.async = true;\n newScript.src = script.src;\n document.head.appendChild(newScript);\n } else if (\n !script.type ||\n ['text/javascript', 'application/javascript', 'application/ecmascript'].includes(\n script.type\n )\n ) {\n if (this.scriptsRun.has(script.innerText)) {\n continue;\n }\n try {\n this.scriptsRun.add(script.innerText);\n new Function(script.innerText)();\n } catch (error) {\n console.warn('Builder custom code component error:', error);\n }\n }\n }\n }\n }\n\n get code() {\n // when ssr'd by nextjs it'll break hydration if initial client render doesn't match ssr\n if (\n (Builder.isServer || (this.isHydrating && this.firstLoad)) &&\n this.props.scriptsClientOnly\n ) {\n return (this.props.code || '').replace(\n /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n ''\n );\n }\n return this.props.code;\n }\n\n render() {\n // TODO: remove <script> tags for server render (unless has some param to say it's only goingn to be run on server)\n // like embed\n return (\n <div\n ref={ref => (this.elementRef = ref)}\n // TODO: add a class when node replaced in (?)\n className=\"builder-custom-code\"\n {...(!this.replaceNodes &&\n !this.noReactRender && {\n dangerouslySetInnerHTML: { __html: this.code },\n })}\n />\n );\n }\n}\n\nexport const CustomCode = withBuilder(CustomCodeComponent, {\n name: 'Custom Code',\n static: true,\n requiredPermissions: ['editCode'],\n inputs: [\n {\n name: 'code',\n type: 'html',\n required: true,\n defaultValue: '<p>Hello there, I am custom HTML code!</p>',\n code: true,\n },\n {\n name: 'replaceNodes',\n type: 'boolean',\n helperText: 'Preserve server rendered dom nodes',\n advanced: true,\n ...(isShopify && {\n defaultValue: true,\n }),\n },\n {\n name: 'scriptsClientOnly',\n type: 'boolean',\n helperText:\n 'Only print and run scripts on the client. Important when scripts influence DOM that could be replaced when client loads',\n advanced: true,\n ...(!isShopify && {\n defaultValue: true,\n }),\n },\n ],\n} as any);\n","export const IMAGE_FILE_TYPES = [\n 'jpeg',\n 'jpg',\n 'png',\n 'svg',\n 'webp',\n 'gif',\n 'jfif',\n 'pjpeg',\n 'pjp',\n 'apng',\n 'avif',\n 'tif',\n 'tiff',\n 'heif',\n 'bmp',\n 'eps',\n 'raw',\n 'cr2',\n 'nef',\n 'orf',\n 'sr2',\n 'psd',\n 'heic',\n 'dib',\n 'ai',\n];\n\nexport const VIDEO_FILE_TYPES = [\n 'mp4',\n 'webm',\n 'mkv',\n 'flv',\n 'vob',\n 'ogv',\n 'ogg',\n 'drc',\n 'gif',\n 'gifv',\n 'mng',\n 'avi',\n 'mov',\n 'qt',\n 'mts',\n 'm2ts',\n 'ts',\n 'wmv',\n 'yuv',\n 'rm',\n 'rmvb',\n 'viv',\n 'asf',\n 'amv',\n 'm4p',\n 'mpeg',\n 'mpe',\n 'm2v',\n 'm4v',\n 'svi',\n '3gp',\n '3g2',\n 'mxf',\n 'roq',\n 'nsv',\n 'f4v',\n 'f4p',\n 'f4a',\n 'f4b',\n];\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\n\nimport { BuilderBlock as BuilderBlockComponent } from '../components/builder-block.component';\nimport { BuilderElement, Builder } from '@builder.io/sdk';\nimport { BuilderMetaContext } from '../store/builder-meta';\nimport { withBuilder } from '../functions/with-builder';\nimport { throttle } from '../functions/throttle';\nimport { Breakpoints, getSizesForBreakpoints } from '../constants/device-sizes.constant';\nimport { IMAGE_FILE_TYPES } from 'src/constants/file-types.constant';\n\nconst isNewReact = 'use' in React;\n\n// Taken from (and modified) the shopify theme script repo\n// https://github.com/Shopify/theme-scripts/blob/bcfb471f2a57d439e2f964a1bb65b67708cc90c3/packages/theme-images/images.js#L59\nfunction removeProtocol(path: string) {\n return path.replace(/http(s)?:/, '');\n}\n\nfunction isElementInViewport(el: HTMLElement) {\n const rect = el.getBoundingClientRect();\n\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\nfunction getShopifyImageUrl(src: string, size: string): string | null {\n if (!src || !src?.match(/cdn\\.shopify\\.com/) || !size) {\n return src;\n }\n\n if (size === 'master') {\n return removeProtocol(src);\n }\n\n const match = src.match(/(_\\d+x(\\d+)?)?(\\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\\?v=\\d+)?)/i);\n\n if (match) {\n const prefix = src.split(match[0]);\n const suffix = match[3];\n const useSize = size.match('x') ? size : `${size}x`;\n\n return removeProtocol(`${prefix[0]}_${useSize}${suffix}`);\n }\n\n return null;\n}\n\nconst DEFAULT_ASPECT_RATIO = 0.7041;\n\nexport function updateQueryParam(uri = '', key: string, value: string | number | boolean): string {\n const re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i');\n const separator = uri.indexOf('?') !== -1 ? '&' : '?';\n if (uri.match(re)) {\n return uri.replace(re, '$1' + key + '=' + encodeURIComponent(value) + '$2');\n }\n\n return uri + separator + key + '=' + encodeURIComponent(value);\n}\n\nexport function getSrcSet(url: string): string {\n if (!url) {\n return url;\n }\n\n const sizes = [100, 200, 400, 800, 1200, 1600, 2000];\n\n if (url.match(/builder\\.io/)) {\n let srcUrl = url;\n const widthInSrc = Number(url.split('?width=')[1]);\n if (!isNaN(widthInSrc)) {\n srcUrl = `${srcUrl} ${widthInSrc}w`;\n }\n\n return sizes\n .filter(size => size !== widthInSrc)\n .map(size => `${updateQueryParam(url, 'width', size)} ${size}w`)\n .concat([srcUrl])\n .join(', ');\n }\n\n if (url.match(/cdn\\.shopify\\.com/)) {\n return sizes\n .map(size => [getShopifyImageUrl(url, `${size}x${size}`), size])\n .filter(([sizeUrl]) => !!sizeUrl)\n .map(([sizeUrl, size]) => `${sizeUrl} ${size}w`)\n .concat([url])\n .join(', ');\n }\n\n return url;\n}\n\nexport const getSizes = (\n sizes: string,\n block: BuilderElement,\n contentBreakpoints: Breakpoints = {}\n) => {\n let useSizes = '';\n\n if (sizes) {\n const splitSizes = sizes.split(',');\n const sizesLength = splitSizes.length;\n useSizes = splitSizes\n .map((size: string, index) => {\n if (sizesLength === index + 1) {\n // If it is the last size in the array, then we want to strip out\n // any media query information. According to the img spec, the last\n // value for sizes cannot have a media query. If there is a media\n // query at the end it breaks AMP mode rendering\n // https://github.com/ampproject/amphtml/blob/b6313e372fdd1298928e2417dcc616b03288e051/src/size-list.js#L169\n return size.replace(/\\([\\s\\S]*?\\)/g, '').trim();\n } else {\n return size;\n }\n })\n .join(', ');\n } else if (block && block.responsiveStyles) {\n const generatedSizes: string[] = [];\n let hasSmallOrMediumSize = false;\n const unitRegex = /^\\d+/;\n\n const breakpointSizes = getSizesForBreakpoints(contentBreakpoints);\n if (block.responsiveStyles?.small?.width?.match(unitRegex)) {\n hasSmallOrMediumSize = true;\n const mediaQuery = `(max-width: ${breakpointSizes.small.max}px)`;\n const widthAndQuery = `${mediaQuery} ${block.responsiveStyles.small.width.replace(\n '%',\n 'vw'\n )}`;\n generatedSizes.push(widthAndQuery);\n }\n\n if (block.responsiveStyles?.medium?.width?.match(unitRegex)) {\n hasSmallOrMediumSize = true;\n const mediaQuery = `(max-width: ${breakpointSizes.medium.max}px)`;\n const widthAndQuery = `${mediaQuery} ${block.responsiveStyles.medium.width.replace(\n '%',\n 'vw'\n )}`;\n generatedSizes.push(widthAndQuery);\n }\n\n if (block.responsiveStyles?.large?.width) {\n const width = block.responsiveStyles.large.width.replace('%', 'vw');\n generatedSizes.push(width);\n } else if (hasSmallOrMediumSize) {\n generatedSizes.push('100vw');\n }\n\n if (generatedSizes.length) {\n useSizes = generatedSizes.join(', ');\n }\n }\n\n return useSizes;\n};\n\n// TODO: use picture tag to support more formats\nclass ImageComponent extends React.Component<any, { imageLoaded: boolean; load: boolean }> {\n get useLazyLoading() {\n if (this.props.highPriority) {\n return false;\n }\n // Use builder.getLocation()\n return Builder.isBrowser && location.search.includes('builder.lazyLoadImages=false')\n ? false\n : Builder.isBrowser && location.href.includes('builder.lazyLoadImages=true')\n ? true\n : this.props.lazy;\n }\n\n // TODO: setting to always fade in the images (?)\n state = {\n imageLoaded: !this.useLazyLoading,\n load: !this.useLazyLoading,\n };\n\n pictureRef: HTMLPictureElement | null = null;\n\n scrollListener: null | ((e: Event) => void) = null;\n intersectionObserver: IntersectionObserver | null = null;\n\n componentWillUnmount() {\n if (Builder.isBrowser) {\n if (this.scrollListener) {\n window.removeEventListener('scroll', this.scrollListener);\n this.scrollListener = null;\n }\n\n if (this.intersectionObserver && this.pictureRef) {\n this.intersectionObserver.unobserve(this.pictureRef);\n }\n }\n }\n\n componentDidMount() {\n if (this.props.lazy && Builder.isBrowser) {\n if (this.pictureRef && isElementInViewport(this.pictureRef)) {\n this.setState({\n load: true,\n });\n } else if (typeof IntersectionObserver === 'function' && this.pictureRef) {\n const observer = (this.intersectionObserver = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach(entry => {\n // In view\n if (entry.intersectionRatio > 0) {\n this.setState({\n load: true,\n });\n if (this.pictureRef) {\n observer.unobserve(this.pictureRef);\n }\n }\n });\n }\n ));\n\n observer.observe(this.pictureRef);\n } else {\n // throttled scroll capture listener\n const listener = throttle(\n (event: Event) => {\n if (this.pictureRef) {\n const rect = this.pictureRef.getBoundingClientRect();\n const buffer = window.innerHeight / 2;\n if (rect.top < window.innerHeight + buffer) {\n this.setState({\n ...this.state,\n load: true,\n });\n window.removeEventListener('scroll', listener);\n this.scrollListener = null;\n }\n }\n },\n 400,\n {\n leading: false,\n trailing: true,\n }\n );\n this.scrollListener = listener;\n\n window.addEventListener('scroll', listener, {\n capture: true,\n passive: true,\n });\n listener();\n }\n }\n }\n\n // Allow our legacy `image` prop, as well as allow a `src` prop for more intuitive\n // DX of manual usage (<Image src=\"...\" />)\n get image() {\n return this.props.image || this.props.src;\n }\n\n get loadEagerly() {\n return this.props.builderBlock?.id.startsWith('builder-pixel-') || this.props.highPriority;\n }\n\n get fetchPriorityProp() {\n const propNameToUse = isNewReact ? 'fetchPriority' : 'fetchpriority';\n return {\n [propNameToUse]: this.loadEagerly ? 'high' : 'auto',\n };\n }\n\n getSrcSet(): string | undefined {\n const url = this.image;\n if (!url || typeof url !== 'string') {\n return;\n }\n\n if (this.props.noWebp) {\n return;\n }\n\n // We can auto add srcset for cdn.builder.io and shopify\n // images, otherwise you can supply this prop manually\n if (!(url.match(/builder\\.io/) || url.match(/cdn\\.shopify\\.com/))) {\n return;\n }\n\n return getSrcSet(url);\n }\n\n render() {\n const { aspectRatio, lazy, builderBlock, builderState } = this.props;\n const children = this.props.builderBlock && this.props.builderBlock.children;\n\n let srcset = this.props.srcset;\n const sizes = getSizes(\n this.props.sizes,\n builderBlock,\n builderState?.context.builderContent?.meta?.breakpoints || {}\n );\n const image = this.image;\n\n if (srcset && image && image.includes('builder.io/api/v1/image')) {\n if (!srcset.includes(image.split('?')[0])) {\n console.debug('Removed given srcset');\n srcset = this.getSrcSet();\n }\n } else if (image && !srcset) {\n srcset = this.getSrcSet();\n }\n\n const { fitContent } = this.props;\n\n return (\n <BuilderMetaContext.Consumer>\n {value => {\n const amp = value.ampMode;\n const Tag: 'img' = amp ? ('amp-img' as any) : 'img';\n\n const imageContents = (!lazy || this.state.load || amp) && (\n <Tag\n {...(amp\n ? ({\n layout: 'responsive',\n height:\n this.props.height ||\n (aspectRatio ? Math.round(aspectRatio * 1000) : undefined),\n width:\n this.props.width ||\n (aspectRatio ? Math.round(1000 / aspectRatio) : undefined),\n } as any)\n : null)}\n alt={this.props.altText}\n title={this.props.title}\n key={\n Builder.isEditing\n ? (typeof this.image === 'string' && this.image.split('?')[0]) || undefined\n : undefined\n }\n role={!this.props.altText ? 'presentation' : undefined}\n css={{\n opacity: amp ? 1 : this.useLazyLoading && !this.state.imageLoaded ? 0 : 1,\n transition: 'opacity 0.2s ease-in-out',\n objectFit: this.props.backgroundSize || 'cover',\n objectPosition: this.props.backgroundPosition || 'center',\n ...(aspectRatio &&\n !amp && {\n position: 'absolute',\n height: '100%',\n width: '100%',\n left: 0,\n top: 0,\n }),\n ...(amp && {\n ['& img']: {\n objectFit: this.props.backgroundSize,\n objectPosition: this.props.backgroundPosition,\n },\n }),\n }}\n loading={this.loadEagerly ? 'eager' : 'lazy'}\n {...this.fetchPriorityProp}\n className={'builder-image' + (this.props.className ? ' ' + this.props.className : '')}\n src={this.image}\n {...(!amp && {\n // TODO: queue these so react renders all loads at once\n onLoad: () => this.setState({ imageLoaded: true }),\n })}\n // TODO: memoize on image on client\n srcSet={srcset}\n sizes={!amp && sizes ? sizes : undefined}\n />\n );\n\n return (\n <React.Fragment>\n {amp ? (\n imageContents\n ) : (\n <picture ref={ref => (this.pictureRef = ref)}>\n {srcset && srcset.match(/builder\\.io/) && !this.props.noWebp && (\n <source srcSet={srcset.replace(/\\?/g, '?format=webp&')} type=\"image/webp\" />\n )}\n {imageContents}\n </picture>\n )}\n {aspectRatio && !amp && !(fitContent && children && children.length) ? (\n <div\n className=\"builder-image-sizer\"\n css={{\n width: '100%',\n paddingTop: aspectRatio * 100 + '%',\n pointerEvents: 'none',\n fontSize: 0,\n }}\n >\n {' '}\n </div>\n ) : null}\n {children && children.length ? (\n fitContent ? (\n children.map((block: BuilderElement, index: number) => (\n <BuilderBlockComponent key={block.id} block={block} />\n ))\n ) : (\n // TODO: if no aspect ratio and has children, don't make this absolute but instead\n // make the image absolute and fit the children (or with a special option)\n <div\n css={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n }}\n >\n {children.map((block: BuilderElement, index: number) => (\n <BuilderBlockComponent key={block.id} block={block} />\n ))}\n </div>\n )\n ) : null}\n </React.Fragment>\n );\n }}\n </BuilderMetaContext.Consumer>\n );\n }\n}\n\nexport const Image = withBuilder(ImageComponent, {\n name: 'Image',\n static: true,\n image:\n 'https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4',\n defaultStyles: {\n position: 'relative',\n minHeight: '20px',\n minWidth: '20px',\n overflow: 'hidden',\n },\n canHaveChildren: true,\n inputs: [\n {\n // TODO: new editor type 'responsiveImage' that can do different crops per breakpoint\n // and sets an object and that is read here\n name: 'image',\n type: 'file',\n bubble: true,\n allowedFileTypes: IMAGE_FILE_TYPES,\n required: true,\n defaultValue:\n 'https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F72c80f114dc149019051b6852a9e3b7a',\n onChange: (options: Map<string, any>) => {\n const DEFAULT_ASPECT_RATIO = 0.7041;\n options.delete('srcset');\n options.delete('noWebp');\n function loadImage(url: string, timeout = 60000): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = document.createElement('img');\n let loaded = false;\n img.onload = () => {\n loaded = true;\n resolve(img);\n };\n\n img.addEventListener('error', event => {\n console.warn('Image load failed', event.error);\n reject(event.error);\n });\n\n img.src = url;\n setTimeout(() => {\n if (!loaded) {\n reject(new Error('Image load timed out'));\n }\n }, timeout);\n });\n }\n\n function round(num: number) {\n return Math.round(num * 1000) / 1000;\n }\n\n const value = options.get('image');\n const aspectRatio = options.get('aspectRatio');\n\n // For SVG images - don't render as webp, keep them as SVG\n fetch(value)\n .then(res => res.blob())\n .then(blob => {\n if (blob.type.includes('svg')) {\n options.set('noWebp', true);\n }\n });\n\n if (value && (!aspectRatio || aspectRatio === DEFAULT_ASPECT_RATIO)) {\n return loadImage(value).then(img => {\n const possiblyUpdatedAspectRatio = options.get('aspectRatio');\n if (\n options.get('image') === value &&\n (!possiblyUpdatedAspectRatio || possiblyUpdatedAspectRatio === DEFAULT_ASPECT_RATIO)\n ) {\n if (img.width && img.height) {\n options.set('aspectRatio', round(img.height / img.width));\n options.set('height', img.height);\n options.set('width', img.width);\n }\n }\n });\n }\n },\n },\n {\n name: 'backgroundSize',\n type: 'text',\n defaultValue: 'cover',\n enum: [\n {\n label: 'contain',\n value: 'contain',\n helperText: 'The image should never get cropped',\n },\n {\n label: 'cover',\n value: 'cover',\n helperText: `The image should fill its box, cropping when needed`,\n },\n // TODO: add these options back\n // { label: 'auto', value: 'auto', helperText: '' },\n // { label: 'fill', value: 'fill', helperText: 'The image should fill the box, being stretched or squished if necessary' },\n ] as any,\n },\n {\n name: 'backgroundPosition',\n type: 'text',\n defaultValue: 'center',\n enum: [\n 'center',\n 'top',\n 'left',\n 'right',\n 'bottom',\n 'top left',\n 'top right',\n 'bottom left',\n 'bottom right',\n ],\n },\n {\n name: 'altText',\n type: 'string',\n helperText: 'Text to display when the user has images off',\n },\n {\n name: 'title',\n type: 'string',\n helperText: 'Text to display when hovering over the asset',\n },\n {\n name: 'highPriority',\n type: 'boolean',\n advanced: true,\n helperText:\n 'Mark this image as high priority compared to other images on the page. This prevents lazy loading of the image and tells the browser to load this image before others on the page.',\n },\n {\n name: 'height',\n type: 'number',\n hideFromUI: true,\n },\n {\n name: 'width',\n type: 'number',\n hideFromUI: true,\n },\n {\n name: 'sizes',\n type: 'string',\n hideFromUI: true,\n },\n {\n name: 'srcset',\n type: 'string',\n hideFromUI: true,\n },\n // TODO: force lazy load option (maybe via binding for now hm component.options.lazy: true)\n {\n name: 'lazy',\n type: 'boolean',\n defaultValue: true,\n hideFromUI: true,\n },\n {\n name: 'fitContent',\n type: 'boolean',\n helperText:\n \"When child blocks are provided, fit to them instead of using the image's aspect ratio\",\n defaultValue: true,\n },\n {\n name: 'aspectRatio',\n type: 'number',\n helperText:\n \"This is the ratio of height/width, e.g. set to 1.5 for a 300px wide and 200px tall photo. Set to 0 to not force the image to maintain it's aspect ratio\",\n advanced: true,\n defaultValue: DEFAULT_ASPECT_RATIO,\n },\n // {\n // name: 'backgroundRepeat',\n // type: 'text',\n // defaultValue: 'no-repeat',\n // enum: ['no-repeat', 'repeat', 'repeat-x', 'repeat-y'],\n // },\n ],\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React, { PropsWithChildren } from 'react';\n\nimport { withChildren } from '../functions/with-children';\nimport { Builder } from '@builder.io/sdk';\nimport { IMAGE_FILE_TYPES, VIDEO_FILE_TYPES } from 'src/constants/file-types.constant';\n\nconst DEFAULT_ASPECT_RATIO = 0.7004048582995948;\n\nclass VideoComponent extends React.Component<\n PropsWithChildren<{\n video: string;\n autoPlay?: boolean;\n controls?: boolean;\n muted?: boolean;\n loop?: boolean;\n playsInline?: boolean;\n aspectRatio?: number;\n width?: number;\n height?: number;\n fit?: 'contain' | 'cover' | 'fill';\n preload?: 'auto' | 'metadata' | 'none';\n position?: string;\n posterImage?: string;\n lazyLoad?: boolean;\n fitContent?: boolean;\n }>\n> {\n video: HTMLVideoElement | null = null;\n containerRef: HTMLElement | null = null;\n lazyVideoObserver: IntersectionObserver | null = null;\n\n get lazyLoad() {\n // Default is true, must be explicitly turned off to not have this behavior\n // as it's highly recommended for performance and bandwidth optimization\n return this.props.lazyLoad !== false;\n }\n\n state = {\n load: !this.lazyLoad,\n };\n\n updateVideo() {\n const video = this.video;\n if (video) {\n // There are some issues with boolean attributes and media elements\n // see: https://github.com/facebook/react/issues/10389\n const boolProps: Array<'muted' | 'playsInline' | 'autoPlay'> = [\n 'muted',\n 'playsInline',\n 'autoPlay',\n ];\n boolProps.forEach(prop => {\n const attr = prop.toLowerCase();\n if (this.props[prop]) {\n video.setAttribute(attr, attr);\n } else {\n video.removeAttribute(attr);\n }\n });\n }\n }\n\n componentDidUpdate() {\n this.updateVideo();\n }\n\n componentDidMount() {\n this.updateVideo();\n\n if (this.lazyLoad && Builder.isBrowser) {\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (!entry.isIntersecting) return;\n\n this.setState(state => ({\n ...state,\n load: true,\n }));\n\n if (this.lazyVideoObserver) {\n this.lazyVideoObserver.disconnect();\n this.lazyVideoObserver = null;\n }\n });\n });\n\n if (this.containerRef) {\n observer.observe(this.containerRef);\n this.lazyVideoObserver = observer;\n }\n }\n }\n\n componentWillUnmount() {\n if (this.lazyVideoObserver) {\n this.lazyVideoObserver.disconnect();\n this.lazyVideoObserver = null;\n }\n }\n\n render() {\n const { aspectRatio, children } = this.props;\n return (\n <div ref={ref => (this.containerRef = ref)} css={{ position: 'relative' }}>\n {/* TODO: option to load the whole thing (inc. poster image) or just video */}\n <video\n key={this.props.video || 'no-src'}\n poster={this.props.posterImage}\n ref={ref => (this.video = ref)}\n autoPlay={this.props.autoPlay}\n muted={this.props.muted}\n controls={this.props.controls}\n loop={this.props.loop}\n preload={this.props.preload || 'metadata'}\n className=\"builder-video\"\n css={{\n width: '100%',\n height: '100%',\n objectFit: this.props.fit,\n objectPosition: this.props.position,\n // Hack to get object fit to work as expected and not have the video\n // overflow\n borderRadius: 1,\n ...(aspectRatio\n ? {\n position: 'absolute',\n }\n : null),\n }}\n >\n {(!this.lazyLoad || this.state.load) && (\n <source type=\"video/mp4\" src={this.props.video} />\n )}\n </video>\n {aspectRatio && !(this.props.fitContent && children) ? (\n <div\n css={{\n width: '100%',\n paddingTop: aspectRatio * 100 + '%',\n pointerEvents: 'none',\n fontSize: 0,\n }}\n />\n ) : null}\n {children && this.props.fitContent ? (\n <div css={{ display: 'flex', flexDirection: 'column', alignItems: 'stretch' }}>\n {children}\n </div>\n ) : children ? (\n <div\n css={{\n pointerEvents: 'none',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n }}\n >\n {children}\n </div>\n ) : null}\n </div>\n );\n }\n}\n\nexport const Video = Builder.registerComponent(withChildren(VideoComponent), {\n name: 'Video',\n canHaveChildren: true,\n defaultStyles: {\n minHeight: '20px',\n minWidth: '20px',\n },\n image:\n 'https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-videocam-24px%20(1).svg?alt=media&token=49a84e4a-b20e-4977-a650-047f986874bb',\n inputs: [\n {\n name: 'video',\n type: 'file',\n allowedFileTypes: VIDEO_FILE_TYPES,\n bubble: true,\n defaultValue:\n 'https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd27731a526464deba0016216f5f9e570%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d27731a526464deba0016216f5f9e570&alt=media&optimized=true',\n required: true,\n },\n {\n name: 'posterImage',\n type: 'file',\n allowedFileTypes: IMAGE_FILE_TYPES,\n helperText: 'Image to show before the video plays',\n },\n {\n name: 'autoPlay',\n type: 'boolean',\n defaultValue: true,\n },\n {\n name: 'controls',\n type: 'boolean',\n defaultValue: false,\n },\n {\n name: 'muted',\n type: 'boolean',\n defaultValue: true,\n },\n {\n name: 'loop',\n type: 'boolean',\n defaultValue: true,\n },\n {\n name: 'playsInline',\n type: 'boolean',\n defaultValue: true,\n },\n {\n name: 'fit',\n type: 'text',\n defaultValue: 'cover',\n enum: ['contain', 'cover', 'fill', 'auto'],\n },\n {\n name: 'preload',\n type: 'text',\n defaultValue: 'metadata',\n enum: ['auto', 'metadata', 'none'],\n },\n {\n name: 'fitContent',\n type: 'boolean',\n helperText: 'When child blocks are provided, fit to them instead of using the aspect ratio',\n defaultValue: true,\n advanced: true,\n },\n {\n name: 'position',\n type: 'text',\n defaultValue: 'center',\n enum: [\n 'center',\n 'top',\n 'left',\n 'right',\n 'bottom',\n 'top left',\n 'top right',\n 'bottom left',\n 'bottom right',\n ],\n },\n {\n name: 'height',\n type: 'number',\n advanced: true,\n },\n {\n name: 'width',\n type: 'number',\n advanced: true,\n },\n {\n name: 'aspectRatio',\n type: 'number',\n advanced: true,\n defaultValue: DEFAULT_ASPECT_RATIO,\n },\n {\n name: 'lazyLoad',\n type: 'boolean',\n helperText:\n 'Load this video \"lazily\" - as in only when a user scrolls near the video. Recommended for optmized performance and bandwidth consumption',\n defaultValue: true,\n advanced: true,\n },\n ],\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React, { PropsWithChildren } from 'react';\nimport { BuilderComponent } from '../components/builder-component.component';\nimport { Builder, BuilderElement, builder } from '@builder.io/sdk';\nimport hash from 'hash-sum';\nimport { NoWrap } from '../components/no-wrap';\nimport { BuilderStoreContext } from '../store/builder-store';\nimport { withBuilder } from '../functions/with-builder';\nimport { omit } from '../functions/utils';\n\nconst size = (thing: object) => Object.keys(thing).length;\n\nconst isShopify = Builder.isBrowser && 'Shopify' in window;\n\nconst refs: Record<string, Element> = {};\n\nif (Builder.isBrowser) {\n try {\n Array.from(document.querySelectorAll('[builder-static-symbol]')).forEach(el => {\n const id = (el as HTMLDivElement).getAttribute('builder-static-symbol');\n if (id) {\n refs[id] = el;\n }\n });\n } catch (err) {\n console.error('Builder replace nodes error:', err);\n }\n}\n\nexport interface SymbolInfo {\n model?: string;\n entry?: string;\n data?: any;\n content?: any;\n inline?: boolean;\n dynamic?: boolean;\n ownerId?: string;\n}\n\nexport interface SymbolProps {\n symbol?: SymbolInfo;\n dataOnly?: boolean;\n dynamic?: boolean;\n builderBlock?: BuilderElement;\n attributes?: any;\n inheritState?: boolean;\n}\n\nclass SymbolComponent extends React.Component<PropsWithChildren<SymbolProps>> {\n ref: BuilderComponent | null = null;\n staticRef: HTMLDivElement | null = null;\n isEditingThisSymbol = false;\n\n get placeholder() {\n return (\n <div css={{ padding: 10 }}>\n Symbols let you reuse dynamic elements across your content. Please choose a model and entry\n for this symbol.\n </div>\n );\n }\n\n componentDidMount() {\n if (this.useStatic && this.staticRef && refs[this.props.builderBlock?.id!]) {\n this.staticRef.parentNode?.replaceChild(refs[this.props.builderBlock?.id!], this.staticRef);\n }\n Builder.nextTick(() => {\n const { model, entry } = this.props.symbol || {};\n // allows editing of symbols in the context of a parent page\n this.isEditingThisSymbol = Boolean(\n Builder.isEditing &&\n model === builder.editingModel &&\n entry &&\n location.search.includes(`overrides.${entry}`)\n );\n });\n }\n\n get useStatic() {\n return Boolean(\n Builder.isBrowser &&\n refs[this.props.builderBlock?.id!] &&\n !(Builder.isEditing || Builder.isPreviewing)\n );\n }\n\n render() {\n if (this.useStatic) {\n return <div ref={el => (this.staticRef = el)} />;\n }\n\n const symbol = this.props.symbol;\n\n let showPlaceholder = false;\n\n if (!symbol) {\n showPlaceholder = true;\n }\n\n const TagName = this.props.dataOnly\n ? NoWrap\n : (this.props.builderBlock && this.props.builderBlock.tagName) || 'div';\n\n const { model, entry, data, content, inline, ownerId } = symbol || {};\n const dynamic = symbol?.dynamic || this.props.dynamic;\n if (!(model && (entry || dynamic)) && !content?.data?.blocksJs && !inline) {\n showPlaceholder = true;\n }\n\n if (this.isEditingThisSymbol) {\n showPlaceholder = false;\n }\n\n let key = dynamic ? this.props.builderBlock?.id : [model, entry].join(':');\n const dataString = data && size(data) && hash(data);\n\n if (key && dataString && dataString.length < 300) {\n key += ':' + dataString;\n }\n const attributes = this.props.attributes || {};\n return (\n <BuilderStoreContext.Consumer\n key={(model || 'no model') + ':' + (entry || 'no entry' + this.isEditingThisSymbol)}\n >\n {state => {\n const builderComponentKey = `${key}_${state?.state?.locale || 'Default'}`;\n return (\n <TagName\n data-model={model}\n {...attributes}\n className={\n (attributes.class || attributes.className || '') +\n ' builder-symbol' +\n (symbol?.inline ? ' builder-inline-symbol' : '') +\n (symbol?.dynamic || this.props.dynamic ? ' builder-dynamic-symbol' : '')\n }\n >\n {showPlaceholder ? (\n this.placeholder\n ) : (\n <BuilderComponent\n {...(ownerId && { apiKey: ownerId })}\n {...(state.state?.locale && { locale: state.state.locale })}\n isChild\n ref={(ref: any) => (this.ref = ref)}\n context={{ ...state.context, symbolId: this.props.builderBlock?.id }}\n model={model}\n entry={entry}\n data={{\n ...data,\n ...(!!this.props.inheritState && omit(state.state, 'children')),\n ...this.props.builderBlock?.component?.options?.symbol?.content?.data?.state,\n }}\n renderLink={state.renderLink}\n inlineContent={symbol?.inline}\n {...(content && { content })}\n key={builderComponentKey}\n options={{\n ...(!this.isEditingThisSymbol && {\n key: builderComponentKey,\n noEditorUpdates: true,\n }),\n ...(Builder.singletonInstance.apiEndpoint === 'content' &&\n entry && {\n query: {\n id: entry,\n },\n }),\n }}\n codegen={!!content?.data?.blocksJs}\n hydrate={state.state?._hydrate}\n builderBlock={this.props.builderBlock}\n dataOnly={this.props.dataOnly}\n nonce={state.context.nonce}\n >\n {/* TODO: builder blocks option for loading stuff */}\n {this.props.children}\n </BuilderComponent>\n )}\n </TagName>\n );\n }}\n </BuilderStoreContext.Consumer>\n );\n }\n}\n\nexport const Symbol = withBuilder(SymbolComponent, {\n // Builder:Symbol\n name: 'Symbol',\n noWrap: true,\n static: true,\n // TODO: allow getter for icon so different icon if data symbol hm,\n // Maybe \"this\" context is the block element in editor, and it's the\n // builderBlock json otherwise. In BuilderBlock decorator find any getters\n // and convert to strings when passing and convert back to getters after\n // with `this` bound\n inputs: [\n {\n name: 'symbol',\n type: 'uiSymbol',\n },\n {\n name: 'dataOnly',\n helperText: `Make this a data symbol that doesn't display any UI`,\n type: 'boolean',\n defaultValue: false,\n advanced: true,\n hideFromUI: true,\n },\n {\n name: 'inheritState',\n helperText: `Inherit the parent component state and data`,\n type: 'boolean',\n defaultValue: isShopify,\n advanced: true,\n },\n {\n name: 'renderToLiquid',\n helperText:\n 'Render this symbols contents to liquid. Turn off to fetch with javascript and use custom targeting',\n type: 'boolean',\n defaultValue: isShopify,\n advanced: true,\n hideFromUI: true,\n },\n {\n name: 'useChildren',\n hideFromUI: true,\n type: 'boolean',\n },\n ],\n});\n","'use client';\nimport React from 'react';\nimport { withBuilder } from '../functions/with-builder';\nimport { Link } from '../components/Link';\n\nexport interface ButtonProps {\n attributes?: any;\n text?: string;\n link?: string;\n openLinkInNewTab?: boolean;\n}\n\nclass ButtonComponent extends React.Component<ButtonProps> {\n render() {\n const Tag = this.props.link ? Link : 'span';\n return (\n <Tag\n role=\"button\"\n href={this.props.link}\n target={this.props.openLinkInNewTab ? '_blank' : undefined}\n {...this.props.attributes}\n >\n {this.props.text}\n </Tag>\n );\n }\n}\n\nexport const Button = withBuilder(ButtonComponent, {\n name: 'Core:Button',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F81a15681c3e74df09677dfc57a615b13',\n defaultStyles: {\n // TODO: make min width more intuitive and set one\n appearance: 'none',\n paddingTop: '15px',\n paddingBottom: '15px',\n paddingLeft: '25px',\n paddingRight: '25px',\n backgroundColor: '#000000',\n color: 'white',\n borderRadius: '4px',\n textAlign: 'center',\n cursor: 'pointer',\n },\n inputs: [\n {\n name: 'text',\n type: 'text',\n defaultValue: 'Click me!',\n bubble: true,\n },\n {\n name: 'link',\n type: 'url',\n bubble: true,\n },\n {\n name: 'openLinkInNewTab',\n type: 'boolean',\n defaultValue: false,\n friendlyName: 'Open link in new tab',\n },\n ],\n static: true,\n noWrap: true,\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React, { PropsWithChildren } from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlock as BuilderBlockComponent } from '../components/builder-block.component';\nimport { withBuilder } from '../functions/with-builder';\n\ninterface SectionProps {\n builderBlock?: BuilderElement;\n verticalAlignContent?: string;\n maxWidth?: number;\n lazyLoad?: boolean;\n // Styles to load before lazy loaded in, like a min height\n lazyStyles?: any;\n}\n\nclass SectionComponent extends React.Component<\n PropsWithChildren<SectionProps>,\n { inView?: boolean }\n> {\n ref: HTMLElement | null = null;\n\n unmountCallbacks: Function[] = [];\n\n state = {\n inView: false,\n };\n\n get renderContents() {\n if (this.props.lazyLoad !== true) {\n return true;\n }\n\n return this.state.inView;\n }\n\n componentWillUnmount() {\n this.unmountCallbacks.forEach(cb => cb());\n }\n\n componentDidMount() {\n if (this.props.lazyLoad) {\n if (typeof IntersectionObserver === 'undefined' || !this.ref) {\n this.setState({ inView: true });\n } else {\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach(entry => {\n if (entry.intersectionRatio > 0) {\n this.setState({\n inView: true,\n });\n if (this.ref) {\n observer.unobserve(this.ref);\n }\n }\n });\n },\n {\n rootMargin: '10px',\n }\n );\n\n observer.observe(this.ref);\n\n this.unmountCallbacks.push(() => {\n if (this.ref) {\n observer.unobserve(this.ref);\n }\n });\n }\n }\n }\n\n render() {\n return (\n <section\n ref={ref => (this.ref = ref)}\n css={{\n width: '100%',\n // height: '100%' was is here so the inner contents can align center, but that is causing\n // issues in Safari. Need another workaround.\n alignSelf: 'stretch',\n flexGrow: 1,\n boxSizing: 'border-box',\n maxWidth: this.props.maxWidth,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n marginLeft: 'auto',\n marginRight: 'auto',\n ...(this.renderContents ? null : this.props.lazyStyles),\n }}\n >\n {this.renderContents ? (\n <React.Fragment>\n {this.props.children}\n {this.props.builderBlock &&\n this.props.builderBlock.children &&\n this.props.builderBlock.children.map((block, index) => (\n <BuilderBlockComponent key={block.id} block={block} />\n ))}\n </React.Fragment>\n ) : null}\n </section>\n );\n }\n}\n\nexport const Section = withBuilder(SectionComponent, {\n name: 'Core:Section',\n static: true,\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F682efef23ace49afac61748dd305c70a',\n inputs: [\n {\n name: 'maxWidth',\n type: 'number',\n defaultValue: 1200,\n },\n {\n name: 'lazyLoad',\n type: 'boolean',\n defaultValue: false,\n advanced: true,\n description: 'Only render this section when in view',\n },\n ],\n defaultStyles: {\n paddingLeft: '20px',\n paddingRight: '20px',\n paddingTop: '50px',\n paddingBottom: '50px',\n marginTop: '0px',\n width: '100vw',\n marginLeft: 'calc(50% - 50vw)',\n },\n canHaveChildren: true,\n\n defaultChildren: [\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n textAlign: 'center',\n },\n },\n component: {\n name: 'Text',\n options: {\n text: \"<p><b>I am a section! My content keeps from getting too wide, so that it's easy to read even on big screens.</b></p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur</p>\",\n },\n },\n },\n ],\n});\n","'use client';\nimport React, { PropsWithChildren } from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlock as BuilderBlockComponent } from '../components/builder-block.component';\nimport { BuilderStoreContext } from '../store/builder-store';\nimport { withBuilder } from '../functions/with-builder';\n\ninterface StateProviderProps {\n builderBlock?: BuilderElement;\n state: any;\n context?: any;\n}\n\nclass StateProviderComponent extends React.Component<PropsWithChildren<StateProviderProps>> {\n render() {\n return (\n <BuilderStoreContext.Consumer>\n {state => (\n <BuilderStoreContext.Provider\n value={{\n ...state,\n state: {\n ...state.state,\n ...this.props.state,\n },\n context: {\n ...state.context,\n ...this.props.context,\n },\n }}\n >\n {this.props.builderBlock &&\n this.props.builderBlock.children &&\n this.props.builderBlock.children.map((block, index) => (\n <BuilderBlockComponent block={block} key={block.id} index={index} child={true} />\n ))}\n {this.props.children}\n </BuilderStoreContext.Provider>\n )}\n </BuilderStoreContext.Consumer>\n );\n }\n}\n\nexport const StateProvider = withBuilder(StateProviderComponent, {\n name: 'Builder:StateProvider',\n // TODO: default children\n canHaveChildren: true,\n static: true,\n noWrap: true,\n hideFromInsertMenu: true,\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React, { PropsWithChildren } from 'react';\nimport { BuilderElement, builder, Builder } from '@builder.io/sdk';\nimport { BuilderStoreContext } from '../store/builder-store';\nimport { BuilderComponent } from '../components/builder-component.component';\nimport { withBuilder } from '../functions/with-builder';\n\nexport interface RouterProps {\n model?: string;\n data?: string;\n content?: any;\n handleRouting?: boolean;\n builderBlock?: BuilderElement;\n preloadOnHover?: boolean;\n onRoute?: (routeEvent: RouteEvent) => void;\n}\n\nconst prefetched = new Set();\n\nfunction searchToObject(location: Location) {\n const pairs = (location.search || '').substring(1).split('&');\n const obj: { [key: string]: string } = {};\n\n for (const i in pairs) {\n if (!(pairs[i] && typeof pairs[i] === 'string')) {\n continue;\n }\n const pair = pairs[i].split('=');\n obj[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n\n return obj;\n}\n\nexport interface RouteEvent {\n /**\n * Url being routed to\n */\n url: string;\n /**\n * Html anchor element the href is on that\n * caused the route\n */\n anchorNode: HTMLAnchorElement;\n /**\n * Has preventDefault() been called preventing\n * builder from routing to the clicked URL\n */\n defaultPrevented: boolean;\n /**\n * Prevents builder from handling routing for you to handle\n * yourself\n */\n preventDefault(): void;\n}\n\nclass RouterComponent extends React.Component<PropsWithChildren<RouterProps>> {\n builder = builder;\n\n routed = false;\n\n private preloadQueue = 0;\n\n // TODO: handle route to same url as current (do nothing)\n // TODO: replaceState option\n public route(url: string) {\n this.routed = true;\n\n // TODO: check if relative?\n if (typeof window.history?.pushState === 'function') {\n history.pushState(null, '', url);\n this.updateLocationState();\n return true;\n } else {\n location.href = url;\n return false;\n }\n }\n\n private updateLocationState() {\n if (this.privateState) {\n // Reload path info\n this.privateState.update(obj => {\n // TODO: force always override the location path info... hmm\n obj.location = {\n ...obj.location,\n pathname: location.pathname,\n search: location.search,\n path: location.pathname.split('/').slice(1),\n query: searchToObject(location),\n };\n });\n }\n }\n\n private get model() {\n return this.props.model || 'page';\n }\n\n componentDidMount() {\n if (typeof document !== 'undefined') {\n document.addEventListener('click', this.onClick);\n window.addEventListener('popstate', this.onPopState);\n document.addEventListener('mouseover', this.onMouseOverOrTouchStart);\n document.addEventListener('touchstart', this.onMouseOverOrTouchStart);\n }\n }\n\n componentWillUnmount() {\n if (typeof document !== 'undefined') {\n document.removeEventListener('click', this.onClick);\n document.removeEventListener('mouseover', this.onMouseOverOrTouchStart);\n window.removeEventListener('popstate', this.onPopState);\n document.removeEventListener('touchstart', this.onMouseOverOrTouchStart);\n }\n }\n\n private onPopState = (event: Event) => {\n this.updateLocationState();\n };\n\n private onMouseOverOrTouchStart = (event: MouseEvent | TouchEvent) => {\n if (this.preloadQueue > 4) {\n return;\n }\n\n if (this.props.preloadOnHover === false) {\n return;\n }\n\n const hrefTarget = this.findHrefTarget(event);\n if (!hrefTarget) {\n return;\n }\n\n let href = hrefTarget.getAttribute('href');\n if (!href) {\n return;\n }\n\n // TODO: onPreload hook and preload dom event\n // Also allow that to be defaultPrevented to cancel this behavior\n if (!this.isRelative(href)) {\n const converted = this.convertToRelative(href);\n if (converted) {\n href = converted;\n } else {\n return;\n }\n }\n\n if (href.startsWith('#')) {\n return;\n }\n\n if (prefetched.has(href)) {\n return;\n }\n prefetched.add(href);\n\n const parsedUrl = this.parseUrl(href);\n\n // TODO: override location!\n this.preloadQueue++;\n\n // TODO: use builder from context\n const attributes = builder.getUserAttributes();\n attributes.urlPath = parsedUrl.pathname;\n attributes.queryString = parsedUrl.search;\n\n // Should be queue?\n const subscription = builder\n .get(this.model, {\n userAttributes: attributes,\n key: this.model + ':' + parsedUrl.pathname + parsedUrl.search,\n })\n .subscribe(() => {\n this.preloadQueue--;\n subscription.unsubscribe();\n });\n };\n\n private onClick = async (event: MouseEvent) => {\n if (this.props.handleRouting === false) {\n return;\n }\n\n if (event.button !== 0 || event.ctrlKey || event.defaultPrevented || event.metaKey) {\n // If this is a non-left click, or the user is holding ctr/cmd, or the url is absolute,\n // or if the link has a target attribute, don't route on the client and let the default\n // href property handle the navigation\n return;\n }\n\n const hrefTarget = this.findHrefTarget(event);\n if (!hrefTarget) {\n return;\n }\n\n // target=\"_blank\" or target=\"_self\" etc\n if (hrefTarget.target && hrefTarget.target !== '_client') {\n return;\n }\n\n let href = hrefTarget.getAttribute('href');\n if (!href) {\n return;\n }\n\n if (this.props.onRoute) {\n const routeEvent: RouteEvent = {\n url: href,\n anchorNode: hrefTarget,\n preventDefault() {\n this.defaultPrevented = true;\n },\n defaultPrevented: false,\n };\n\n this.props.onRoute(routeEvent);\n\n if (routeEvent.defaultPrevented) {\n // Wait should this be here? they may want browser to handle this by deault preventing ours...\n // event.preventDefault()\n return;\n }\n }\n\n if (!this.isRelative(href)) {\n const converted = this.convertToRelative(href);\n if (converted) {\n href = converted;\n } else {\n return;\n }\n }\n\n if (href.startsWith('#')) {\n return;\n }\n\n // Otherwise if this url is relative, navigate on the client\n event.preventDefault();\n\n this.route(href);\n };\n\n render() {\n const { model } = this;\n return (\n <BuilderStoreContext.Consumer>\n {state => {\n this.privateState = state;\n // TODO: useEffect based on this that fetches new data and\n // populates as content={} param for fast updates\n const url =\n state.state &&\n state.state.location &&\n state.state.location.pathname + state.state.location.search;\n\n return (\n <div className=\"builder-router\" data-model={model}>\n {/* TODO: move to emotion */}\n <style nonce={state.context.nonce}>{`\n @keyframes builderLoadingSpinner {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n /* TODO: overridable tag */\n .builder-page-loading {\n -webkit-animation: builderLoadingSpinner 1s infinite linear;\n animation: builderLoadingSpinner 1s infinite linear;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n border-radius: 50%;\n width: 36px;\n height: 36px;\n margin: 6px auto;\n position: relative;\n border: 1px solid transparent;\n border-left: 1px solid #808284;\n }\n `}</style>\n <BuilderComponent\n // TODO: this key strategy is inidial bc it gives loading for full page when fetching content\n // Also sometimes content flashes to loading even when it's already precached in memory and should immediately display\n // - why\n key={url}\n data={this.props.data}\n content={this.routed ? undefined : this.props.content}\n modelName={model}\n options={{\n key: Builder.isEditing ? undefined : this.model + ':' + url, // TODO: other custom targets specify if should refetch components on change\n }}\n nonce={state.context.nonce}\n >\n {/* TODO: builder blocks option for loading stuff */}\n {/* TODO: input for builder blocks for this */}\n {this.props.children || (\n <div css={{ display: 'flex' }}>\n <div css={{ margin: '40vh auto' }} className=\"builder-page-loading\" />\n </div>\n )}\n </BuilderComponent>\n </div>\n );\n }}\n </BuilderStoreContext.Consumer>\n );\n }\n\n private findHrefTarget(event: MouseEvent | TouchEvent): HTMLAnchorElement | null {\n // TODO: move to core\n let element = event.target as HTMLElement | null;\n\n while (element) {\n if (element instanceof HTMLAnchorElement && element.getAttribute('href')) {\n return element;\n }\n\n if (element === event.currentTarget) {\n break;\n }\n\n element = element.parentElement;\n }\n\n return null;\n }\n\n private isRelative(href: string) {\n return !href.match(/^(\\/\\/|https?:\\/\\/)/i);\n }\n\n private privateState: {\n state: any;\n update: (mutator: (state: any) => any) => void;\n } | null = null;\n\n // This method can only be called client side only. It is only invoked on click events\n private parseUrl(url: string) {\n const a = document.createElement('a');\n a.href = url;\n return a;\n }\n\n private convertToRelative(href: string): string | null {\n const currentUrl = this.parseUrl(location.href);\n const hrefUrl = this.parseUrl(href);\n\n if (currentUrl.host === hrefUrl.host) {\n const relativeUrl = hrefUrl.pathname + (hrefUrl.search ? hrefUrl.search : '');\n\n if (relativeUrl.startsWith('#')) {\n return null;\n }\n return relativeUrl || '/';\n }\n\n return null;\n }\n}\n\nexport const Router = withBuilder(RouterComponent, {\n name: 'Core:Router',\n hideFromInsertMenu: true,\n // TODO: advanced: true\n inputs: [\n {\n // TODO: search picker\n name: 'model',\n type: 'string',\n defaultValue: 'page',\n advanced: true,\n },\n {\n name: 'handleRouting',\n type: 'boolean',\n defaultValue: true,\n advanced: true,\n },\n {\n name: 'preloadOnHover',\n type: 'boolean',\n defaultValue: true,\n advanced: true,\n },\n {\n name: 'onRoute',\n type: 'function',\n advanced: true,\n // Subfields are function arguments - object with properties\n },\n ],\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport { Builder, BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlocks } from '../components/builder-blocks.component';\n\nBuilder.registerComponent(Mutation, {\n name: 'Builder:Mutation',\n canHaveChildren: true,\n noWrap: true,\n hideFromInsertMenu: true,\n inputs: [\n {\n name: 'type',\n type: 'string',\n defaultValue: 'replace',\n enum: [\n {\n label: 'Replace',\n value: 'replace',\n helperText: 'Replace the contents of this site region with content from Builder',\n },\n {\n label: 'Append',\n value: 'afterEnd',\n helperText: 'Append Builder content after the chosen site region',\n },\n ],\n },\n {\n name: 'selector',\n // TODO: special UI for this\n type: 'builder:domSelector',\n },\n ],\n});\n\ntype MutationProps = {\n selector: string;\n builderBlock?: BuilderElement;\n type?: 'replace' | 'afterEnd';\n};\n\nexport function Mutation(props: MutationProps) {\n const ref = React.useRef<HTMLDivElement | null>(null);\n\n useWaitForSelector(props.selector, node => {\n // TODO: static generate this logic\n if (props.type !== 'afterEnd') {\n node.innerHTML = '';\n }\n node.appendChild(ref.current!.firstElementChild!);\n });\n\n const children = props.builderBlock?.children;\n\n return (\n <span style={{ display: 'none' }} ref={ref}>\n <BuilderBlocks\n style={{\n display: 'inline',\n }}\n child\n parentElementId={props.builderBlock?.id}\n dataPath=\"this.children\"\n blocks={children}\n />\n </span>\n );\n}\n\nfunction useWaitForSelector(selector: string, cb: (node: Element) => void) {\n React.useLayoutEffect(() => {\n try {\n const existingElement = document.querySelector(selector);\n if (existingElement) {\n cb(existingElement);\n return;\n }\n } catch (err) {\n console.warn(err);\n }\n\n const observer = new MutationObserver(() => {\n try {\n const foundElement = document.querySelector(selector);\n if (foundElement) {\n observer.disconnect();\n cb(foundElement);\n }\n } catch (err) {\n console.warn(err);\n }\n });\n\n observer.observe(document.body, {\n attributes: true,\n subtree: true,\n characterData: true,\n });\n\n return () => {\n observer.disconnect();\n };\n }, [selector]);\n}\n","export const get = (obj: any, path: string, defaultValue?: any) => {\n const result = String.prototype.split\n .call(path, /[,[\\].]+?/)\n .filter(Boolean)\n .reduce((res, key) => (res !== null && res !== undefined ? res[key] : res), obj);\n return result === undefined || result === obj ? defaultValue : result;\n};\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport { BuilderBlock as BuilderBlockComponent } from '../../components/builder-block.component';\nimport { BuilderElement, Builder, builder } from '@builder.io/sdk';\nimport { BuilderBlocks } from '../../components/builder-blocks.component';\nimport { BuilderStoreContext } from '../../store/builder-store';\nimport { set } from '../../functions/set';\nimport { get } from '../../functions/get';\nimport { withBuilder } from '../../functions/with-builder';\n\nexport interface FormProps {\n attributes?: any;\n name?: string;\n action?: string;\n validate?: boolean;\n method?: string;\n builderBlock?: BuilderElement;\n sendSubmissionsTo?: string;\n sendSubmissionsToEmail?: string;\n sendWithJs?: boolean;\n contentType?: string;\n customHeaders?: { [key: string]: string };\n successUrl?: string;\n previewState?: string;\n successMessage?: BuilderElement[];\n errorMessage?: BuilderElement[];\n sendingMessage?: BuilderElement[];\n resetFormOnSubmit?: boolean;\n errorMessagePath?: string;\n}\n\nconst MULTIPART_CONTENT_TYPE = 'multipart/form-data';\nconst JSON_CONTENT_TYPE = 'application/json';\nconst ENCODED_CONTENT_TYPE = 'application/x-www-form-urlencoded';\n\nclass FormComponent extends React.Component<FormProps> {\n ref: HTMLFormElement | null = null;\n\n // TODO: link this state to global state and allow togglign the modes in\n // the style and or data editor. TODO: for now some kind of input for preview state\n // that only impacts in the editor?\n state = {\n state: 'unsubmitted' as 'unsubmitted' | 'sending' | 'success' | 'error',\n // TODO: separate response and error?\n responseData: null as any,\n formErrorMessage: '',\n };\n\n get submissionState() {\n return (Builder.isEditing && this.props.previewState) || this.state.state;\n }\n\n render() {\n return (\n // TODO: JS data bindings\n <BuilderStoreContext.Consumer>\n {state => (\n <BuilderStoreContext.Provider\n value={{\n ...state,\n state: {\n ...state.state,\n formErrorMessage: this.state.formErrorMessage,\n },\n }}\n >\n <form\n {...(!this.props.validate ? { noValidate: true } : {})}\n ref={ref => (this.ref = ref)}\n action={!this.props.sendWithJs && this.props.action ? this.props.action : undefined}\n method={this.props.method}\n name={this.props.name}\n onSubmit={event => {\n const sendWithJs =\n this.props.sendWithJs || this.props.sendSubmissionsTo === 'email';\n // TODO: custom validate event that can preventDefault and use ref or event to set\n // invalid message\n if (this.props.sendSubmissionsTo === 'zapier') {\n event.preventDefault();\n // TODO: send submission to zapier\n } else if (sendWithJs) {\n if (!(this.props.action || this.props.sendSubmissionsTo === 'email')) {\n event.preventDefault();\n return;\n }\n event.preventDefault();\n\n // TODO: error and success state\n const el = event.currentTarget;\n const headers = this.props.customHeaders || {};\n\n let body: any;\n\n const formData = new FormData(el);\n\n // TODO: maybe support null\n const formPairs: {\n key: string;\n value: File | boolean | number | string | FileList;\n }[] = Array.from(event.currentTarget.querySelectorAll('input,select,textarea'))\n .filter(el => !!(el as HTMLInputElement).name)\n .filter(\n el =>\n !!(el as HTMLInputElement).name &&\n ((el as HTMLInputElement).type !== 'radio' ||\n (el as HTMLInputElement).checked)\n )\n .map(el => {\n let value: any;\n const key = (el as HTMLImageElement).name;\n if (el instanceof HTMLInputElement) {\n if (el.type === 'radio') {\n if (el.checked) {\n value = el.value;\n return { key, value };\n }\n } else if (el.type === 'checkbox') {\n value = el.checked;\n } else if (el.type === 'number' || el.type === 'range') {\n const num = el.valueAsNumber;\n if (!isNaN(num)) {\n value = num;\n }\n } else if (el.type === 'file') {\n // TODO: one vs multiple files\n value = el.files;\n } else {\n value = el.value;\n }\n } else {\n value = (el as HTMLInputElement).value;\n }\n\n return { key, value };\n });\n\n let contentType = this.props.contentType;\n\n if (this.props.sendSubmissionsTo === 'email') {\n contentType = MULTIPART_CONTENT_TYPE;\n }\n\n Array.from(formPairs).forEach(({ value }) => {\n if (\n value instanceof File ||\n (Array.isArray(value) && value[0] instanceof File) ||\n value instanceof FileList\n ) {\n contentType = MULTIPART_CONTENT_TYPE;\n }\n });\n\n if (contentType === MULTIPART_CONTENT_TYPE) {\n body = formData;\n } else if (contentType === JSON_CONTENT_TYPE) {\n const json = {};\n\n Array.from(formPairs).forEach(({ value, key }) => {\n set(json, key, value);\n });\n\n body = JSON.stringify(json);\n } else if (contentType === ENCODED_CONTENT_TYPE) {\n body = Array.from(formPairs)\n .map(({ value, key }) => {\n return (\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(value as boolean | number | string)\n );\n })\n .join('&');\n } else {\n // Unsupported content type\n console.error('Unsupported content type: ', contentType);\n return;\n }\n\n if (contentType && contentType !== MULTIPART_CONTENT_TYPE) {\n if (\n // Zapier doesn't allow content-type header to be sent from browsers\n !(sendWithJs && this.props.action?.includes('zapier.com'))\n ) {\n headers['content-type'] = contentType;\n }\n }\n\n const presubmitEvent = new CustomEvent('presubmit', {\n detail: {\n body,\n },\n });\n if (this.ref) {\n this.ref.dispatchEvent(presubmitEvent);\n if (presubmitEvent.defaultPrevented) {\n return;\n }\n }\n\n this.setState({\n ...this.state,\n state: 'sending',\n });\n\n const formUrl = `${\n builder.env === 'dev' ? 'http://localhost:5000' : 'https://builder.io'\n }/api/v1/form-submit?apiKey=${builder.apiKey}&to=${btoa(\n this.props.sendSubmissionsToEmail || ''\n )}&name=${encodeURIComponent(this.props.name || '')}`;\n\n fetch(\n this.props.sendSubmissionsTo === 'email' ? formUrl : this.props.action!, // TODO: throw error if no action URL\n {\n body,\n headers,\n method: this.props.method || 'post',\n }\n ).then(\n async res => {\n let body;\n const contentType = res.headers.get('content-type');\n if (contentType && contentType.indexOf(JSON_CONTENT_TYPE) !== -1) {\n body = await res.json();\n } else {\n body = await res.text();\n }\n\n if (!res.ok && this.props.errorMessagePath) {\n // TODO: allow supplying an error formatter function\n let message = get(body, this.props.errorMessagePath);\n\n if (message) {\n if (typeof message !== 'string') {\n // TODO: ideally convert json to yaml so it woul dbe like\n // error: - email has been taken\n message = JSON.stringify(message);\n }\n this.setState({\n ...this.state,\n formErrorMessage: message,\n });\n }\n }\n\n this.setState({\n ...this.state,\n responseData: body,\n state: res.ok ? 'success' : 'error',\n });\n\n if (res.ok) {\n // TODO: send submit success event\n\n const submitSuccessEvent = new CustomEvent('submit:success', {\n detail: {\n res,\n body,\n },\n });\n if (this.ref) {\n this.ref.dispatchEvent(submitSuccessEvent);\n if (submitSuccessEvent.defaultPrevented) {\n return;\n }\n // TODO: option to turn this on/off?\n if (this.props.resetFormOnSubmit !== false) {\n this.ref.reset();\n }\n }\n\n // TODO: client side route event first that can be preventDefaulted\n if (this.props.successUrl) {\n if (this.ref) {\n const event = new CustomEvent('route', {\n detail: {\n url: this.props.successUrl,\n },\n });\n this.ref.dispatchEvent(event);\n if (!event.defaultPrevented) {\n location.href = this.props.successUrl;\n }\n } else {\n location.href = this.props.successUrl;\n }\n }\n }\n },\n err => {\n const submitErrorEvent = new CustomEvent('submit:error', {\n detail: {\n error: err,\n },\n });\n if (this.ref) {\n this.ref.dispatchEvent(submitErrorEvent);\n if (submitErrorEvent.defaultPrevented) {\n return;\n }\n }\n\n // TODO: send submit error event\n this.setState({\n ...this.state,\n responseData: err,\n state: 'error',\n });\n }\n );\n }\n }}\n {...this.props.attributes}\n >\n {/* TODO: maybe BuilderBlocks */}\n {this.props.builderBlock &&\n this.props.builderBlock.children &&\n this.props.builderBlock.children.map((block, index) => (\n <BuilderBlockComponent key={block.id} block={block} />\n ))}\n\n {this.submissionState === 'error' && (\n <BuilderBlocks dataPath=\"errorMessage\" blocks={this.props.errorMessage!} />\n )}\n\n {this.submissionState === 'sending' && (\n <BuilderBlocks dataPath=\"sendingMessage\" blocks={this.props.sendingMessage!} />\n )}\n\n {/* TODO: option to turn this off */}\n {this.submissionState === 'error' && this.state.responseData && (\n // TODO: tag to edit\n <pre\n className=\"builder-form-error-text\"\n css={{ padding: 10, color: 'red', textAlign: 'center' }}\n >\n {JSON.stringify(this.state.responseData, null, 2)}\n </pre>\n )}\n\n {this.submissionState === 'success' && (\n <BuilderBlocks dataPath=\"successMessage\" blocks={this.props.successMessage!} />\n )}\n </form>\n </BuilderStoreContext.Provider>\n )}\n </BuilderStoreContext.Consumer>\n );\n }\n}\n\nexport const Form = withBuilder(FormComponent, {\n name: 'Form:Form',\n // editableTags: ['builder-form-error']\n defaults: {\n responsiveStyles: {\n large: {\n marginTop: '15px',\n paddingBottom: '15px',\n },\n },\n },\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fef36d2a846134910b64b88e6d18c5ca5',\n inputs: [\n {\n name: 'sendSubmissionsTo',\n type: 'string',\n // TODO: save to builder data and user can download as csv\n // TODO: easy for mode too or computed add/remove fields form mode\n // so you can edit details and high level mode at same time...\n // Later - more integrations like mailchimp\n // /api/v1/form-submit?to=mailchimp\n enum: [\n {\n label: 'Send to email',\n value: 'email',\n helperText: 'Send form submissions to the email address of your choosing',\n },\n {\n label: 'Custom',\n value: 'custom',\n helperText:\n 'Handle where the form requests go manually with a little code, e.g. to your own custom backend',\n },\n ],\n defaultValue: 'email',\n },\n {\n name: 'sendSubmissionsToEmail',\n type: 'string',\n required: true, // TODO: required: () => options.get(\"sendSubmissionsTo\") === \"email\"\n defaultValue: 'your@email.com',\n showIf: 'options.get(\"sendSubmissionsTo\") === \"email\"',\n },\n {\n name: 'sendWithJs',\n type: 'boolean',\n helperText: 'Set to false to use basic html form action',\n defaultValue: true,\n showIf: 'options.get(\"sendSubmissionsTo\") === \"custom\"',\n },\n {\n name: 'name',\n type: 'string',\n defaultValue: 'My form',\n // advanced: true\n },\n {\n name: 'action',\n type: 'string',\n helperText: 'URL to send the form data to',\n showIf: 'options.get(\"sendSubmissionsTo\") === \"custom\"',\n },\n {\n name: 'contentType',\n type: 'string',\n defaultValue: JSON_CONTENT_TYPE,\n advanced: true,\n // TODO: do automatically if file input\n enum: [JSON_CONTENT_TYPE, MULTIPART_CONTENT_TYPE, ENCODED_CONTENT_TYPE],\n showIf: 'options.get(\"sendSubmissionsTo\") === \"custom\" && options.get(\"sendWithJs\") === true',\n },\n {\n name: 'method',\n type: 'string',\n showIf: 'options.get(\"sendSubmissionsTo\") === \"custom\"',\n defaultValue: 'POST',\n advanced: true,\n },\n {\n name: 'previewState',\n type: 'string',\n // TODO: persist: false flag\n enum: ['unsubmitted', 'sending', 'success', 'error'],\n defaultValue: 'unsubmitted',\n helperText:\n 'Choose a state to edit, e.g. choose \"success\" to show what users see on success and edit the message',\n showIf: 'options.get(\"sendSubmissionsTo\") !== \"zapier\" && options.get(\"sendWithJs\") === true',\n },\n {\n name: 'successUrl',\n type: 'url',\n helperText: 'Optional URL to redirect the user to on form submission success',\n showIf: 'options.get(\"sendSubmissionsTo\") !== \"zapier\" && options.get(\"sendWithJs\") === true',\n },\n {\n name: 'resetFormOnSubmit',\n type: 'boolean',\n showIf: options =>\n options.get('sendSubmissionsTo') === 'custom' && options.get('sendWithJs') === true,\n advanced: true,\n },\n {\n name: 'successMessage',\n type: 'uiBlocks',\n hideFromUI: true,\n defaultValue: [\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Text',\n options: {\n text: '<span>Thanks!</span>',\n },\n },\n },\n ],\n },\n {\n name: 'validate',\n type: 'boolean',\n defaultValue: true,\n advanced: true,\n },\n {\n name: 'errorMessagePath',\n type: 'text',\n advanced: true,\n helperText:\n 'Path to where to get the error message from in a JSON response to display to the user, e.g. \"error.message\" for a response like { \"error\": { \"message\": \"this username is taken\" }}',\n },\n {\n name: 'errorMessage',\n type: 'uiBlocks',\n hideFromUI: true,\n defaultValue: [\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n bindings: {\n 'component.options.text': 'state.formErrorMessage || block.component.options.text',\n },\n component: {\n name: 'Text',\n options: {\n // TODO: how pull in API message\n text: '<span>Form submission error :( Please check your answers and try again</span>',\n },\n },\n },\n ],\n },\n {\n name: 'sendingMessage',\n type: 'uiBlocks',\n hideFromUI: true,\n defaultValue: [\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Text',\n options: {\n // TODO: how pull in API message\n text: '<span>Sending...</span>',\n },\n },\n },\n ],\n },\n {\n name: 'customHeaders',\n type: 'map',\n // TODO: add typings for this property\n ...({\n valueType: {\n type: 'string',\n },\n } as any),\n advanced: true,\n showIf: 'options.get(\"sendSubmissionsTo\") === \"custom\" && options.get(\"sendWithJs\") === true',\n },\n // TODO: custom headers or any fetch options\n // TODO: json vs serialized (i.e. send on client or not)\n // TODO: success/fail stuff\n ],\n noWrap: true,\n // TODO: defaultChildren with two inputs and submit button\n canHaveChildren: true,\n defaultChildren: [\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Text',\n options: {\n text: '<span>Enter your name</span>',\n },\n },\n },\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Form:Input',\n options: {\n name: 'name',\n placeholder: 'Jane Doe',\n },\n },\n },\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Text',\n options: {\n text: '<span>Enter your email</span>',\n },\n },\n },\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Form:Input',\n options: {\n name: 'email',\n placeholder: 'jane@doe.com',\n },\n },\n },\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Form:SubmitButton',\n options: {\n text: 'Submit',\n },\n },\n },\n ],\n});\n","'use client';\nimport React from 'react';\nimport { Builder } from '@builder.io/sdk';\nimport { withBuilder } from '../../functions/with-builder';\n\n// TODO: how do onchange...\n// TODO: actions all custom events and custom js gets\n// passed an element reference and listens for events....\n// Needs to unsubscribe, so must manage\nexport interface FormInputProps {\n type?: string;\n attributes?: any;\n name?: string;\n value?: string;\n placeholder?: string;\n defaultValue?: string;\n required?: boolean;\n}\n\nclass FormInputComponent extends React.Component<FormInputProps> {\n render() {\n return (\n <input\n key={Builder.isEditing && this.props.defaultValue ? this.props.defaultValue : 'default-key'}\n placeholder={this.props.placeholder}\n type={this.props.type}\n name={this.props.name}\n {...(typeof this.props.value === 'undefined'\n ? {\n defaultValue: this.props.defaultValue,\n }\n : {\n value: this.props.value,\n })}\n required={this.props.required}\n {...this.props.attributes}\n />\n );\n }\n}\n\nexport const FormInput = withBuilder(FormInputComponent, {\n name: 'Form:Input',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fad6f37889d9e40bbbbc72cdb5875d6ca',\n inputs: [\n {\n name: 'type',\n type: 'text',\n enum: [\n 'text',\n 'number',\n 'email',\n 'url',\n 'checkbox',\n 'radio',\n 'range',\n 'date',\n 'datetime-local',\n 'search',\n 'tel',\n 'time',\n 'file',\n 'month',\n 'week',\n 'password',\n 'color',\n 'hidden',\n ],\n defaultValue: 'text',\n },\n {\n name: 'name',\n type: 'string',\n required: true,\n helperText:\n 'Every input in a form needs a unique name describing what it takes, e.g. \"email\"',\n },\n {\n name: 'placeholder',\n type: 'string',\n defaultValue: 'Hello there',\n helperText: 'Text to display when there is no value',\n },\n // TODO: handle value vs default value automatically like ng-model\n {\n name: 'defaultValue',\n type: 'string',\n },\n {\n name: 'value',\n type: 'string',\n advanced: true,\n },\n\n {\n name: 'required',\n type: 'boolean',\n helperText: 'Is this input required to be filled out to submit a form',\n defaultValue: false,\n },\n ],\n // TODO\n // TODO: call editorHooks?\n // ...({\n // hooks: {\n // 'ElementLayout:shiftBottomSide': (element: Element, amount: number, snap: boolean) => {\n // // TODO: either update line height or split the padding padding on bottom sides hmm\n // }\n // } as any,\n // }),\n noWrap: true,\n static: true,\n defaultStyles: {\n paddingTop: '10px',\n paddingBottom: '10px',\n paddingLeft: '10px',\n paddingRight: '10px',\n borderRadius: '3px',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: '#ccc',\n },\n});\n","'use client';\nimport React from 'react';\nimport { withBuilder } from '../../functions/with-builder';\n\nexport interface ButtonProps {\n attributes?: any;\n text?: string;\n}\n\nclass FormSubmitButtonComponent extends React.Component<ButtonProps> {\n render() {\n return (\n <button type=\"submit\" {...this.props.attributes}>\n {this.props.text}\n </button>\n );\n }\n}\n\nexport const FormSubmitButton = withBuilder(FormSubmitButtonComponent, {\n name: 'Form:SubmitButton',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fdf2820ffed1f4349a94c40b3221f5b98',\n defaultStyles: {\n appearance: 'none',\n paddingTop: '15px',\n paddingBottom: '15px',\n paddingLeft: '25px',\n paddingRight: '25px',\n backgroundColor: '#3898EC',\n color: 'white',\n borderRadius: '4px',\n cursor: 'pointer',\n },\n inputs: [\n {\n name: 'text',\n type: 'text',\n defaultValue: 'Click me',\n },\n ],\n static: true,\n noWrap: true,\n // TODO: optional children? maybe as optional form input\n // that only shows if advanced setting is flipped\n // TODO: defaultChildren\n // canHaveChildren: true,\n});\n","'use client';\nimport React from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlockComponent } from '../../builder-react';\nimport { withBuilder } from '../../functions/with-builder';\n\nexport interface LabelProps {\n attributes?: any;\n text?: string;\n for?: string;\n builderBlock?: BuilderElement;\n}\n\nclass LabelComponent extends React.Component<LabelProps> {\n render() {\n return (\n <label htmlFor={this.props.for} {...this.props.attributes}>\n {this.props.text && (\n <span\n className=\"builder-label-text\"\n dangerouslySetInnerHTML={{\n __html: this.props.text,\n }}\n />\n )}\n {this.props.builderBlock &&\n this.props.builderBlock.children &&\n this.props.builderBlock.children.map(item => (\n <BuilderBlockComponent key={item.id} block={item} />\n ))}\n </label>\n );\n }\n}\n\n// TODO: strict ADA mode that enforces with custom error messages that all inputs need\n// labels and names\nexport const Label = withBuilder(LabelComponent, {\n name: 'Form:Label',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F9322342f04b545fb9a8091cd801dfb5b',\n inputs: [\n {\n name: 'text',\n type: 'html',\n richText: true,\n defaultValue: 'Label',\n },\n {\n name: 'for',\n type: 'text',\n helperText: 'The name of the input this label is for',\n advanced: true,\n },\n ],\n noWrap: true,\n static: true,\n canHaveChildren: true,\n // TODO: take inner html or blocsk\n // TODO: optional children? maybe as optional form input\n // that only shows if advanced setting is flipped\n // TODO: defaultChildren\n // canHaveChildren: true,\n});\n","'use client';\nimport React from 'react';\nimport { Builder } from '@builder.io/sdk';\nimport { withBuilder } from '../../functions/with-builder';\n\nexport interface FormSelectProps {\n options?: { name?: string; value: string }[];\n attributes?: any;\n name?: string;\n value?: string;\n defaultValue?: string;\n required?: boolean;\n}\n\nclass FormSelectComponent extends React.Component<FormSelectProps> {\n render() {\n const { options } = this.props;\n return (\n <select\n value={this.props.value}\n key={Builder.isEditing && this.props.defaultValue ? this.props.defaultValue : 'default-key'}\n defaultValue={this.props.defaultValue}\n name={this.props.name}\n required={this.props.required}\n {...this.props.attributes}\n >\n {options &&\n options.map(option => (\n <option value={option.value}>{option.name || option.value}</option>\n ))}\n </select>\n );\n }\n}\n\nexport const FormSelect = withBuilder(FormSelectComponent, {\n name: 'Form:Select',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F83acca093fb24aaf94dee136e9a4b045',\n defaultStyles: {\n alignSelf: 'flex-start',\n },\n inputs: [\n {\n name: 'options',\n type: 'list',\n required: true,\n subFields: [\n {\n name: 'value',\n type: 'text',\n required: true,\n },\n {\n name: 'name',\n type: 'text',\n },\n ],\n defaultValue: [\n {\n value: 'option 1',\n },\n {\n value: 'option 2',\n },\n ],\n },\n {\n name: 'name',\n type: 'string',\n required: true,\n helperText:\n 'Every select in a form needs a unique name describing what it gets, e.g. \"email\"',\n },\n {\n name: 'defaultValue',\n type: 'string',\n },\n {\n name: 'value',\n type: 'string',\n advanced: true,\n },\n\n {\n name: 'required',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n static: true,\n noWrap: true,\n});\n","'use client';\nimport React from 'react';\nimport { withBuilder } from '../../functions/with-builder';\n\nexport interface FormTextAreaProps {\n attributes?: any;\n name?: string;\n value?: string;\n defaultValue?: string;\n placeholder?: string;\n required?: boolean;\n}\n\nclass TextAreaComponent extends React.Component<FormTextAreaProps> {\n render() {\n return (\n <textarea\n placeholder={this.props.placeholder}\n name={this.props.name}\n value={this.props.value}\n defaultValue={this.props.defaultValue}\n required={this.props.required}\n {...this.props.attributes}\n />\n );\n }\n}\n\nexport const TextArea = withBuilder(TextAreaComponent, {\n name: 'Form:TextArea',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Ff74a2f3de58c4c3e939204e5b6b8f6c3',\n inputs: [\n {\n advanced: true,\n name: 'value',\n type: 'string',\n },\n {\n name: 'name',\n type: 'string',\n required: true,\n helperText: 'Every input in a form needs a unique name describing what it gets, e.g. \"email\"',\n },\n {\n name: 'defaultValue',\n type: 'string',\n },\n {\n name: 'placeholder',\n type: 'string',\n defaultValue: 'Hello there',\n },\n {\n name: 'required',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n defaultStyles: {\n paddingTop: '10px',\n paddingBottom: '10px',\n paddingLeft: '10px',\n paddingRight: '10px',\n borderRadius: '3px',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: '#ccc',\n },\n static: true,\n noWrap: true,\n});\n","'use client';\nimport React from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { withBuilder } from '../../functions/with-builder';\nimport { IMAGE_FILE_TYPES } from 'src/constants/file-types.constant';\nimport { getSrcSet } from '../Image';\n\nexport interface ImgProps {\n attributes?: any;\n image?: string;\n builderBlock?: BuilderElement;\n aspectRatio?: number;\n backgroundSize?: string;\n backgroundPosition?: string;\n altText?: string;\n title?: string;\n}\n\n// TODO: srcset, alt text input, object size/position input, etc\n\nclass ImgComponent extends React.Component<ImgProps> {\n getSrcSet(): string | undefined {\n const url = this.props.image;\n if (!url || typeof url !== 'string') {\n return;\n }\n\n // We can auto add srcset for cdn.builder.io images\n if (!url.match(/builder\\.io/)) {\n return;\n }\n\n return getSrcSet(url);\n }\n\n render() {\n const attributes = this.props.attributes || {};\n const srcset = this.getSrcSet();\n\n const { style: userStyle, ...restAttributes } = attributes;\n\n const defaultStyle: React.CSSProperties = {\n objectFit: this.props.backgroundSize as React.CSSProperties['objectFit'],\n objectPosition: this.props.backgroundPosition as React.CSSProperties['objectPosition'],\n aspectRatio: this.props.aspectRatio as unknown as React.CSSProperties['aspectRatio'],\n };\n\n const mergedStyle = {\n ...defaultStyle,\n ...(userStyle as React.CSSProperties),\n };\n\n return (\n <img\n loading=\"lazy\"\n {...restAttributes}\n src={this.props.image || attributes.src}\n srcSet={srcset}\n alt={this.props.altText}\n title={this.props.title}\n style={mergedStyle}\n className=\"builder-raw-img\"\n />\n );\n }\n}\n\nexport const Img = withBuilder(ImgComponent, {\n name: 'Raw:Img',\n hideFromInsertMenu: true,\n\n image:\n 'https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4',\n inputs: [\n {\n name: 'image',\n bubble: true,\n type: 'file',\n allowedFileTypes: IMAGE_FILE_TYPES,\n required: true,\n },\n {\n name: 'backgroundSize',\n type: 'text',\n defaultValue: 'cover',\n enum: [\n {\n label: 'contain',\n value: 'contain',\n helperText: 'The image should never get cropped',\n },\n {\n label: 'cover',\n value: 'cover',\n helperText: \"The image should fill it's box, cropping when needed\",\n },\n ],\n },\n {\n name: 'backgroundPosition',\n type: 'text',\n defaultValue: 'center',\n enum: [\n 'center',\n 'top',\n 'left',\n 'right',\n 'bottom',\n 'top left',\n 'top right',\n 'bottom left',\n 'bottom right',\n ],\n },\n {\n name: 'altText',\n type: 'string',\n helperText: 'Text to display when the user has images off',\n },\n {\n name: 'title',\n type: 'string',\n helperText: 'Text to display when hovering over the asset',\n },\n {\n name: 'aspectRatio',\n type: 'number',\n helperText:\n \"This is the ratio of height/width, e.g. set to 1.5 for a 300px wide and 200px tall photo. Set to 0 to not force the image to maintain it's aspect ratio\",\n advanced: true,\n defaultValue: 0.7041,\n },\n ],\n\n noWrap: true,\n});\n","'use client';\nimport * as React from 'react';\nimport { BuilderElement, Builder } from '@builder.io/sdk';\n\nexport interface RawTextProps {\n attributes?: any;\n text?: string;\n builderBlock?: BuilderElement;\n}\n\nexport const RawText = (props: RawTextProps) => {\n const attributes = props.attributes || {};\n return (\n <span\n className={attributes?.class || attributes?.className}\n dangerouslySetInnerHTML={{ __html: props.text || '' }}\n />\n );\n};\n\nBuilder.registerComponent(RawText, {\n name: 'Builder:RawText',\n hideFromInsertMenu: true,\n inputs: [\n {\n name: 'text',\n bubble: true,\n type: 'longText',\n required: true,\n },\n ],\n});\n","type UserAttributes = {\n date?: string | Date;\n urlPath?: string;\n [key: string]: any; // Allow any other properties\n};\n\n// Query type\ntype QueryOperator =\n | 'is'\n | 'isNot'\n | 'contains'\n | 'startsWith'\n | 'endsWith'\n | 'greaterThan'\n | 'lessThan'\n | 'greaterThanOrEqualTo'\n | 'lessThanOrEqualTo';\n\ntype QueryValue = string | number | boolean | Array<string | number | boolean>;\n\nexport type Query = {\n property: string;\n operator: QueryOperator;\n value: QueryValue;\n};\n\n// minified version of the function need to be added to the script\nexport const filterWithCustomTargetingScript = `function filterWithCustomTargeting(e,t,n,r){var i={query:t,startDate:n,endDate:r},o=e.date&&new Date(e.date)||new Date;return!(i.startDate&&new Date(i.startDate)>o)&&(!(i.endDate&&new Date(i.endDate)<o)&&(!i.query||!i.query.length||i.query.every((function(t){return objectMatchesQuery(e,t)}))))}function isString(e){return\"string\"==typeof e}function isNumber(e){return\"number\"==typeof e}function objectMatchesQuery(e,t){return function(){var n=t.property,r=t.operator,i=t.value;if(t&&\"urlPath\"===t.property&&t.value&&\"string\"==typeof t.value&&\"/\"!==t.value&&t.value.endsWith(\"/\")&&(i=t.value.slice(0,-1)),!n||!r)return!0;if(Array.isArray(i))return\"isNot\"===r?i.every((function(t){return objectMatchesQuery(e,{property:n,operator:r,value:t})})):!!i.find((function(t){return objectMatchesQuery(e,{property:n,operator:r,value:t})}));var o=e[n];if(Array.isArray(o))return o.includes(i);switch(r){case\"is\":return o===i;case\"isNot\":return o!==i;case\"contains\":return(isString(o)||Array.isArray(o))&&o.includes(String(i));case\"startsWith\":return isString(o)&&o.startsWith(String(i));case\"endsWith\":return isString(o)&&o.endsWith(String(i));case\"greaterThan\":return isNumber(o)&&isNumber(i)&&o>i;case\"lessThan\":return isNumber(o)&&isNumber(i)&&o<i;case\"greaterThanOrEqualTo\":return isNumber(o)&&isNumber(i)&&o>=i;case\"lessThanOrEqualTo\":return isNumber(o)&&isNumber(i)&&o<=i}return!1}()}`;\n\nexport function filterWithCustomTargeting(\n userAttributes: UserAttributes,\n query: Query[],\n startDate?: string,\n endDate?: string\n) {\n const item = {\n query,\n startDate,\n endDate,\n };\n\n const now = (userAttributes.date && new Date(userAttributes.date)) || new Date();\n\n if (item.startDate && new Date(item.startDate) > now) {\n return false;\n } else if (item.endDate && new Date(item.endDate) < now) {\n return false;\n }\n\n if (!item.query || !item.query.length) {\n return true;\n }\n\n return item.query.every((filter: Query) => {\n return objectMatchesQuery(userAttributes, filter);\n });\n}\n\nfunction isString(val: unknown): val is string {\n return typeof val === 'string';\n}\n\nfunction isNumber(val: unknown): val is number {\n return typeof val === 'number';\n}\n\nfunction objectMatchesQuery(userattr: UserAttributes, query: Query): boolean {\n const result = (() => {\n const property = query.property;\n const operator = query.operator;\n let testValue = query.value;\n\n if (\n query &&\n query.property === 'urlPath' &&\n query.value &&\n typeof query.value === 'string' &&\n query.value !== '/' &&\n query.value.endsWith('/')\n ) {\n testValue = query.value.slice(0, -1);\n }\n\n // Check is query property is present in userAttributes. Proceed only if it is present.\n if (!(property && operator)) {\n return true;\n }\n\n if (Array.isArray(testValue)) {\n if (operator === 'isNot') {\n return testValue.every(val =>\n objectMatchesQuery(userattr, { property, operator, value: val })\n );\n }\n return !!testValue.find(val =>\n objectMatchesQuery(userattr, { property, operator, value: val })\n );\n }\n const value = userattr[property];\n\n if (Array.isArray(value)) {\n return value.includes(testValue);\n }\n\n switch (operator) {\n case 'is':\n return value === testValue;\n case 'isNot':\n return value !== testValue;\n case 'contains':\n return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));\n case 'startsWith':\n return isString(value) && value.startsWith(String(testValue));\n case 'endsWith':\n return isString(value) && value.endsWith(String(testValue));\n case 'greaterThan':\n return isNumber(value) && isNumber(testValue) && value > testValue;\n case 'lessThan':\n return isNumber(value) && isNumber(testValue) && value < testValue;\n case 'greaterThanOrEqualTo':\n return isNumber(value) && isNumber(testValue) && value >= testValue;\n case 'lessThanOrEqualTo':\n return isNumber(value) && isNumber(testValue) && value <= testValue;\n }\n return false;\n })();\n\n return result;\n}\n","import React, { useContext, useRef } from 'react';\nimport { Builder, builder, BuilderElement } from '@builder.io/sdk';\nimport { useEffect, useState } from 'react';\nimport { BuilderBlocks } from '../components/builder-blocks.component';\nimport {\n filterWithCustomTargeting,\n filterWithCustomTargetingScript,\n Query,\n} from '../functions/filter-with-custom-targeting';\nimport { BuilderStoreContext } from '../store/builder-store';\n\nexport type PersonalizationContainerProps = {\n children: React.ReactNode;\n previewingIndex: number | null;\n builderBlock?: BuilderElement;\n builderState: any;\n variants?: [\n {\n query: Query[];\n startDate?: string;\n endDate?: string;\n blocks: BuilderElement[];\n },\n ];\n attributes: any;\n};\n\nexport function PersonalizationContainer(props: PersonalizationContainerProps) {\n const isBeingHydrated = Boolean(\n Builder.isBrowser && (window as any).__hydrated?.[props.builderBlock?.id!]\n );\n const rootRef = useRef<HTMLDivElement>(null);\n const [isClient, setIsClient] = useState(isBeingHydrated);\n const [isHydrated, setIsHydrated] = useState(false);\n const [_, setUpdate] = useState(0);\n const builderStore = useContext(BuilderStoreContext);\n\n useEffect(() => {\n setIsClient(true);\n setIsHydrated(true);\n const subscriber = builder.userAttributesChanged.subscribe(() => {\n setUpdate(prev => prev + 1);\n });\n let unsubs = [() => subscriber.unsubscribe()];\n\n if (!(Builder.isEditing || Builder.isPreviewing)) {\n const variant = filteredVariants[0];\n // fire a custom event to update the personalization container\n rootRef.current?.dispatchEvent(\n new CustomEvent('builder.variantLoaded', {\n detail: {\n variant: variant || 'default',\n content: builderStore.content,\n },\n bubbles: true,\n })\n );\n\n // add an intersection observer to fire a builder.variantDisplayed event when the container is in the viewport\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n rootRef.current?.dispatchEvent(\n new CustomEvent('builder.variantDisplayed', {\n detail: {\n variant: variant || 'default',\n content: builderStore.content,\n },\n bubbles: true,\n })\n );\n }\n });\n });\n\n observer.observe(rootRef.current!);\n unsubs.push(() => observer.disconnect());\n }\n\n return () => {\n unsubs.forEach(fn => fn());\n };\n }, []);\n\n if (Builder.isServer) {\n return (\n <React.Fragment>\n <div\n {...props.attributes}\n // same as the client side styles for hydration matching\n style={{\n opacity: 1,\n transition: 'opacity 0.2s ease-in-out',\n ...props.attributes?.style,\n }}\n className={`builder-personalization-container ${props.attributes.className}`}\n >\n {props.variants?.map((variant, index) => (\n <template key={index} data-variant-id={props.builderBlock?.id! + index}>\n <BuilderBlocks\n blocks={variant.blocks}\n parentElementId={props.builderBlock?.id}\n dataPath={`component.options.variants.${index}.blocks`}\n child\n />\n </template>\n ))}\n <script\n nonce={builderStore.context.nonce}\n id={`variants-script-${props.builderBlock?.id}`}\n dangerouslySetInnerHTML={{\n __html: getPersonalizationScript(\n props.variants,\n props.builderBlock?.id || 'none',\n props.builderState.state?.locale\n ),\n }}\n />\n <BuilderBlocks\n blocks={props.builderBlock?.children}\n parentElementId={props.builderBlock?.id}\n dataPath=\"this.children\"\n child\n />\n </div>\n <script\n nonce={builderStore.context.nonce}\n dangerouslySetInnerHTML={{\n __html: `\n window.__hydrated = window.__hydrated || {};\n window.__hydrated['${props.builderBlock?.id}'] = true;\n `.replace(/\\s+/g, ' '),\n }}\n />\n </React.Fragment>\n );\n }\n\n const filteredVariants = (props.variants || []).filter(variant => {\n return filterWithCustomTargeting(\n {\n ...(props.builderState.state?.locale ? { locale: props.builderState.state.locale } : {}),\n ...builder.getUserAttributes(),\n },\n variant.query,\n variant.startDate,\n variant.endDate\n );\n });\n\n return (\n <React.Fragment>\n <div\n ref={rootRef}\n {...props.attributes}\n style={{\n opacity: isClient ? 1 : 0,\n transition: 'opacity 0.2s ease-in-out',\n ...props.attributes?.style,\n }}\n className={`builder-personalization-container ${\n props.attributes.className\n }${isClient ? '' : ' builder-personalization-container-loading'}`}\n >\n {/* If editing a specific varient */}\n {isHydrated &&\n Builder.isEditing &&\n typeof props.previewingIndex === 'number' &&\n props.previewingIndex < (props.variants?.length || 0) ? (\n <BuilderBlocks\n blocks={props.variants?.[props.previewingIndex]?.blocks}\n parentElementId={props.builderBlock?.id}\n dataPath={`component.options.variants.${props.previewingIndex}.blocks`}\n child\n />\n ) : // If editing the default or we're on the server and there are no matching variants show the default\n (isHydrated && Builder.isEditing && typeof props.previewingIndex !== 'number') ||\n !isClient ||\n !filteredVariants.length ? (\n <BuilderBlocks\n blocks={props.builderBlock?.children}\n parentElementId={props.builderBlock?.id}\n dataPath=\"this.children\"\n child\n />\n ) : (\n // Show the variant matching the current user attributes\n <BuilderBlocks\n blocks={filteredVariants[0]?.blocks}\n parentElementId={props.builderBlock?.id}\n dataPath={`component.options.variants.${props.variants?.indexOf(\n filteredVariants[0]\n )}.blocks`}\n child\n />\n )}\n </div>\n <script\n nonce={builderStore.context.nonce}\n dangerouslySetInnerHTML={{\n __html: `\n window.__hydrated = window.__hydrated || {};\n window.__hydrated['${props.builderBlock?.id}'] = true;\n `.replace(/\\s+/g, ' '),\n }}\n />\n </React.Fragment>\n );\n}\n\nBuilder.registerComponent(PersonalizationContainer, {\n name: 'PersonalizationContainer',\n noWrap: true,\n friendlyName: 'Dynamic Container',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F37229ed30d8c41dfb10b8cca1992053a',\n canHaveChildren: true,\n inputs: [\n {\n name: 'variants',\n defaultValue: [],\n behavior: 'personalizationVariantList',\n type: 'list',\n subFields: [\n {\n name: 'name',\n type: 'text',\n localized: false,\n },\n {\n name: 'query',\n friendlyName: 'Targeting rules',\n type: 'BuilderQuery',\n defaultValue: [],\n localized: false,\n },\n {\n name: 'startDate',\n type: 'date',\n localized: false,\n },\n {\n name: 'endDate',\n type: 'date',\n localized: false,\n },\n {\n name: 'blocks',\n type: 'UiBlocks',\n hideFromUI: true,\n defaultValue: [],\n },\n ],\n },\n ],\n});\n\nfunction getPersonalizationScript(\n variants: PersonalizationContainerProps['variants'],\n blockId: string,\n locale?: string\n) {\n return `\n (function() {\n function getCookie(name) {\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n for(var i=0;i < ca.length;i++) {\n var c = ca[i];\n while (c.charAt(0)==' ') c = c.substring(1,c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);\n }\n return null;\n }\n function removeVariants() {\n variants.forEach(function (template, index) {\n document.querySelector('template[data-variant-id=\"' + \"${blockId}\" + index + '\"]').remove();\n });\n document.getElementById('variants-script-${blockId}').remove();\n }\n\n var attributes = JSON.parse(getCookie(\"${Builder.attributesCookieName}\") || \"{}\");\n ${locale ? `attributes.locale = \"${locale}\";` : ''}\n var variants = ${JSON.stringify(variants?.map(v => ({ query: v.query, startDate: v.startDate, endDate: v.endDate })))};\n var winningVariantIndex = variants.findIndex(function(variant) {\n return filterWithCustomTargeting(\n attributes,\n variant.query,\n variant.startDate,\n variant.endDate\n );\n });\n var isDebug = location.href.includes('builder.debug=true');\n if (isDebug) {\n console.debug('PersonalizationContainer', {\n attributes: attributes,\n variants: variants,\n winningVariantIndex: winningVariantIndex,\n });\n }\n if (winningVariantIndex !== -1) {\n var winningVariant = document.querySelector('template[data-variant-id=\"' + \"${blockId}\" + winningVariantIndex + '\"]');\n if (winningVariant) {\n var parentNode = winningVariant.parentNode;\n var newParent = parentNode.cloneNode(false);\n newParent.appendChild(winningVariant.content.firstChild);\n parentNode.parentNode.replaceChild(newParent, parentNode);\n if (isDebug) {\n console.debug('PersonalizationContainer', 'Winning variant Replaced:', winningVariant);\n }\n }\n } else if (variants.length > 0) {\n removeVariants();\n }\n ${filterWithCustomTargetingScript}\n })();\n `.replace(/\\s+/g, ' ');\n}\n","import { useEffect, useState } from 'react';\nimport { Builder } from '@builder.io/sdk';\n\nexport function useIsPreviewing() {\n const [isPreviewing, setIsPreviewing] = useState(false);\n\n useEffect(() => {\n if (Builder.isEditing || Builder.isPreviewing) {\n setIsPreviewing(true);\n }\n }, []);\n\n return isPreviewing;\n}\n","import './scripts/init-editing';\n\nimport { builder, Builder } from '@builder.io/sdk';\nexport { BuilderElement } from '@builder.io/sdk';\nimport { SDK_VERSION } from './sdk-version';\n\nBuilder.isReact = true;\nBuilder.sdkInfo = {\n name: 'react',\n version: SDK_VERSION,\n};\n\nexport { BuilderBlocks } from './components/builder-blocks.component';\nexport { BuilderBlock as BuilderBlockComponent } from './components/builder-block.component';\nexport { BuilderContent } from './components/builder-content.component';\nimport {\n BuilderComponent,\n onChange,\n RegisteredComponent,\n} from './components/builder-component.component';\nexport { BuilderStoreContext, BuilderStore } from './store/builder-store';\nexport { BuilderMetaContext } from './store/builder-meta';\nexport { BuilderAsyncRequestsContext } from './store/builder-async-requests';\nexport { BuilderBlock } from './decorators/builder-block.decorator';\n\nexport * from './functions/update-metadata';\n\nexport { withBuilder } from './functions/with-builder';\nexport { withChildren } from './functions/with-children';\nexport { noWrap } from './functions/no-wrap';\n\nexport { BuilderComponent as BuilderPage, onChange, RegisteredComponent };\nexport { BuilderComponent };\nexport { BuilderComponent as Content };\n\nexport { Text } from './blocks/Text';\nexport { Slot as Dropzone } from './blocks/Slot';\nexport { Fragment } from './blocks/Fragment';\nexport { Columns } from './blocks/Columns';\nexport { Embed } from './blocks/Embed';\nexport { CustomCode } from './blocks/CustomCode';\nexport { Image, getSrcSet } from './blocks/Image';\nexport { Video } from './blocks/Video';\nexport { Symbol } from './blocks/Symbol';\nexport { Button } from './blocks/Button';\nexport { Section } from './blocks/Section';\nexport { StateProvider } from './blocks/StateProvider';\nexport { Router } from './blocks/Router';\nexport { Mutation } from './blocks/Mutation';\n\nexport { Form } from './blocks/forms/Form';\nexport { FormInput } from './blocks/forms/Input';\nexport { FormSubmitButton } from './blocks/forms/Button';\nexport { Label } from './blocks/forms/Label'; // advanced?\nexport { FormSelect } from './blocks/forms/Select'; // advanced?\nexport { TextArea } from './blocks/forms/TextArea';\nexport { Img } from './blocks/raw/Img';\nexport { RawText } from './blocks/raw/RawText';\nexport { PersonalizationContainer } from './blocks/PersonalizationContainer';\n\nexport { stringToFunction } from './functions/string-to-function';\nexport { useIsPreviewing } from './hooks/useIsPreviewing';\n\nexport { builder, Builder };\nexport default builder;\n"],"names":["SDK_VERSION","window","_a","parent","postMessage","type","data","value","supportsPatchUpdates","supportsCustomBreakpoints","supportsXSmallBreakpoint","supportsGlobalSymbols","blockLevelPersonalization","version","fastClone","obj","JSON","parse","stringify","omit","values","_i","arguments","length","newObject","Object","assign","values_1","key","sizeNames","sizes","xsmall","min","default","max","small","medium","large","getWidthForSize","size","this","getSizeForWidth","width","sizeNames_1","getSizesForBreakpoints","breakpoints","newSizes","xsmallMin","Math","floor","smallMin","mediumMin","largeMin","set","_path","path","Array","isArray","toString","match","slice","reduce","a","c","i","abs","Number","noop","safeDynamicRequire","globalThis","require","Builder","isServer","eval","e","isDebug","Boolean","process","env","DEBUG","isNodeRuntime","versions","node","shouldForceBrowserRuntimeInNode","isArm64","arch","isNode20","startsWith","hasNoNodeSnapshotNodeOption","NODE_OPTIONS","includes","console","log","fnCache","api","state","builder","stringToFunction","str","expression","errors","logs","trim","cacheKey","useReturn","fn","isBrowser","Function","concat","error","push","message","indexOf","warn","final","args","apply","isolateContext","getIsolateContext","ivm_1","resultStr","evalClosureSync","makeFn","map","arg","index","Reference","indexOfBuilderInstance","getUserAttributes","res","_error","stack","debug","code","names","join","isolatedContext","serverContext","Isolate","memoryLimit","createContextSync","setServerContext","jail","global","setSync","derefInto","isPromise","thing","then","isRequestInfo","BuilderAsyncRequestsContext","React","createContext","requests","BuilderStoreContext","rootState","content","context","update","mutator","applyPatchWithMinimalMutationChain","patch","preserveRoot","op","pathArr","split","shift","newObj","__assign","objPart","isLast","property","splice","nextProperty","newPart","String","__spreadArray","htmlEscape","replace","blockToHtmlString","block","tagName","id","class","keys","properties","component","name","options","text","children","item","Link","props","Consumer","renderLink","createElement","traverse","callback","visited","WeakSet","has","add","forEach","newValue","entries","isLocalizedField","containsLocalizedValues","getOwnPropertyNames","hasLocalizedValues","extractLocalizedValues","locale","undefined","camelCaseToKebabCase","g","toLowerCase","kebabCaseToCamelCase","toUpperCase","Device","desktop","tablet","mobile","deepCloneWithConditions","clonedObj","prototype","hasOwnProperty","call","meta","voidElements","Set","last","arr","cssCase","capitalize","BuilderBlock","_super","_this","hydrated","hasError","updates","privateState","onWindowMessage","event","selection","setTimeout","$block","$blocks","patches","location","href","patches_1","setState","__extends","defineProperty","get","getDerivedStateFromError","componentDidCatch","errorInfo","_errors","_logs","emotionCss","responsiveStyles","initialAnimationStepStyles","animation","animations","trigger","firstStep","steps","stepStyles","styles","reversedNames","reverse","contentHasXSmallBreakpoint","_b","builderContent","_c","reversedNames_1","emailMode","sizesPerBreakpoints","_e","_d","&.builder-block","hoverAnimation","find","_f","transition","duration","easing","delay","transitionDelay","componentWillUnmount","isEditing","removeEventListener","componentDidMount","addEventListener","bindings","animator","bindAnimations","filter","elementId","getElement","_g","child","fieldName","InnerComponent","TagName","html","jsx","dangerouslySetInnerHTML","__html","componentName","componentInfo","tag","components","style","hide","show","actions","useState","Proxy","prop","innerComponentProperties","isVoid","noWrap","fragment","styleStr","attr","styleSplit_1","stylePieces","finalOptions","_spacer","builder-index","memo","Fragment","ClassNames","css","cx","addClass","className","_asyncRequests","attributes","builderBlock","builderState","contents","repeat","collection","collectionPath","collectionName","itemName_1","itemName","array","childState","$index","$item","Provider","render","display","padding","color","fontSize","fontStyle","Component","BuilderBlocks","onClickEmptyBlocks","isIframe","noBlocks","parentElementId","parentId","dataPath","onHoverEmptyBlocks","blocks","builder-type","builder-path","builder-parent-id","flexDirection","alignItems","onClick","onMouseEnter","renderInto","elementOrSelector","element","document","querySelector","Element","ReactDOM","NoWrap","getData","blocksString","hasBlocks","newData","variantsScript","variantsString","contentId","VariantsProvider","initialContent","nonce","canTrack","variations","variants","allVariants","variantsJson_1","testRatio","cookieName","variantId","getCookie","n","random","variant","setCookie","BuilderContent","ref","loading","getContentWithInfo","isTrusted","isTrustedHostForEvent","noEditorUpdates","contentLoaded","subscriptions","Subscription","firstLoad","clicked","trackedImpression","intersectionObserver","reactEvent","nativeEvent","autoTrack","trackInteraction","renderedVariantId","model","modelName","isStatic","variationId","isPreviewing","inline","subscribeToContent","contentData","trackImpression","queueGetContent","subscribe","matches","editingModel","previewingModel","unsubscribe","addedObserver","IntersectionObserver","observer","entry","intersectionRatio","unobserve","observe","err","contentError","dataOnly","useData","renderScript","Tag","data-template-variant-id","builder-content-id","builder-model","cookieValue","cookieVariation","variationName","testVariationId","testVariationName","exports","TARGET","Symbol","UNSUBSCRIBE","concatPath","shallowClone","onChange","object","applyPath","applyPrevious","proxyTarget","inApply","changed","isUnsubscribed","equals","is","propCache","WeakMap","pathCache","proxyCache","handleChange","previous","item_1","walkPath","invalidateCachedDescriptor","target","delete","buildProxy","proxy","handler","ignoreChange","ignoreSymbols","receiver","Reflect","isPrimitive","RegExp","isBuiltinWithoutMutableMethods","isShallow","descriptor","Map","getOwnPropertyDescriptor","configurable","writable","ignore","result","deleteProperty","thisArg","argumentsList","compare","Date","valueOf","lastIndexOf","bind","module","nextTick","debounceNextTick","debounceNextTickImpl","enumerable","next","throttle","func","wait","timeout","later","leading","now","remaining","clearTimeout","trailing","BuilderMetaContext","ampMode","tryEval","context_1","ExternalCopy","copyInto","fnString","context_2","deleteSync","toError","Error","getBuilderPixel","apiKey","@type","role","aria-hidden","src","height","opacity","overflow","pointerEvents","pick","ret","instancesMap","wrapComponent","info","builderTag","inputNames","inputs","baseProps","inputProps","debounce","immediate","fontsLoaded","fetch","sizeMap","fetchCache","searchToObject","pairs","search","substring","pair","decodeURIComponent","BuilderComponent","onStateChange","BehaviorSubject","asServer","contentRef","styleRef","updateState","lastJsCode","lastHttpRequests","httpSubscriptionPerKey","messageListener","useContent","deviceSize","deviceSizeState","device","data_1","resizeFn","resizeListener","mounted","notifyStateChange","onContentLoaded","title","pageTitle","description","pageDescription","descriptionTag","setAttribute","head","appendChild","input","defaultValue","newState","locationState","externalState","jsCode","codegen","skip","httpRequests","noAsync","httpRequest","isCoreRequest_1","finalUrl_1","evalExpression","request","url","handleRequest","method","body","headers","currentSubscription","newSubscription","newUrl","_content","inlinedContent","_hydrate","hydrate","getHtmlData","instance","registerCustomComponents","defaults","inlineContent","script","innerText","pathname","query","innerWidth","fresh","exists","classList","contains","shouldHydrate","innerHTML","apiStyles_1","previousElementSibling","keepStyles_1","el","useElement","useEl","div","insertAdjacentElement","val_1","builderRootRef","val","customComponents","customComponent","registration","__rest","registerComponent","reload","dispatchEvent","CustomEvent","detail","nextState","processStateFromApi","getCssFromFont","font","family","kind","fileUrl","files","regular","weight","weightUrl","getFontCss","allowCustomFonts","customFonts","ensureFontsLoaded","getCss","cssCode","componentDidUpdate","prevProps","checkStyles","css_1","dataString","hash","WrapComponent","isChild","stopClickPropagationWhenEditing","stopPropagation","data-source","format","fullData","blocksJs","builderComponentNames","from","reversedcomponents_1","builderComponents","mappedComponentNames","finalizedComponents","initialState","setTick","tick","hasPixel","data-builder-content-id","data-builder-variation-id","data-builder-component","group","propertyName","fetchCacheKey","ctx","__awaiter","requestStart","time","fetchOptions","sent","json","err_1","timeEnd","existing","req","promise_1","promise","handleBuilderRequest","optionsString","__decorate","updateMetadata","updated","withBuilder","isBuilderElement","withChildren","HOC","forwardRef","useProps","componentOptions","every","builderOptions","canHaveChildren","finalProps","iconUrl","TextComponent","textRef","test","allowTextEdit","textCSS","outline","& p:first-of-type, & .builder-paragraph:first-of-type","margin","& > p, & .builder-paragraph","lineHeight","letterSpacing","fontWeight","textAlign","fontFamily","rtlMode","direction","Text","static","image","required","autoFocus","bubble","defaultStyles","Slot","useContext","isEditingThisSlot","symbolId","builder-slot","docsLink","FragmentComponent","BuilderBlockComponent","hideFromInsertMenu","DEFAULT_ASPECT_RATIO","defaultBlocks","flexShrink","position","marginTop","minHeight","minWidth","backgroundPosition","backgroundSize","aspectRatio","ColumnsComponent","columns","space","getWidth","getColumnWidth","gutterSize","subtractWidth","contentBreakpoints","breakpointSizes","stackColumnsAt","reverseColumnsWhenStacked","col","link","flexGrow","marginLeft","Columns","broadcast","subFields","hideFromUI","helperText","clearWidths","advanced","enum","EmbedComponent","elementRef","scriptsInserted","scriptsRun","shouldComponentUpdate","nextProps","findAndRunScripts","scripts","getElementsByTagName","newScript","async","Embed","globalReplaceNodes","isShopify","customCodeQuerySelector_1","allCustomCodeElements_1","querySelectorAll","builderTemplates","template","codeElements","parentElement","getAttribute","cloneNode","CustomCodeComponent","originalRef","replaceNodes","remove","isHydrating","scriptsClientOnly","noReactRender","CustomCode","requiredPermissions","IMAGE_FILE_TYPES","VIDEO_FILE_TYPES","isNewReact","removeProtocol","isElementInViewport","rect","getBoundingClientRect","top","left","bottom","innerHeight","documentElement","clientHeight","right","clientWidth","getShopifyImageUrl","prefix","suffix","useSize","updateQueryParam","uri","re","separator","encodeURIComponent","getSrcSet","srcUrl","widthInSrc_1","isNaN","sizeUrl","getSizes","useSizes","splitSizes","sizesLength_1","generatedSizes","hasSmallOrMediumSize","unitRegex","mediaQuery","widthAndQuery","_h","ImageComponent","imageLoaded","useLazyLoading","load","pictureRef","scrollListener","highPriority","lazy","listener_1","buffer","capture","passive","loadEagerly","noWebp","srcset","fitContent","amp","imageContents","layout","round","alt","altText","objectFit","objectPosition","fetchPriorityProp","onLoad","srcSet","paddingTop","Image","allowedFileTypes","blob","Promise","resolve","reject","img","loaded","onload","num","possiblyUpdatedAspectRatio","label","VideoComponent","video","containerRef","lazyVideoObserver","lazyLoad","updateVideo","removeAttribute","isIntersecting","disconnect","poster","posterImage","autoPlay","muted","controls","loop","preload","fit","borderRadius","Video","refs","SymbolComponent","staticRef","isEditingThisSymbol","useStatic","parentNode","replaceChild","symbol","showPlaceholder","ownerId","dynamic","builderComponentKey","data-model","inheritState","_j","singletonInstance","apiEndpoint","_k","_l","ButtonComponent","openLinkInNewTab","Button","appearance","paddingBottom","paddingLeft","paddingRight","backgroundColor","cursor","friendlyName","SectionComponent","unmountCallbacks","inView","cb","observer_1","rootMargin","alignSelf","boxSizing","maxWidth","marginRight","renderContents","lazyStyles","Section","defaultChildren","StateProviderComponent","StateProvider","prefetched","RouterComponent","routed","preloadQueue","onPopState","updateLocationState","onMouseOverOrTouchStart","preloadOnHover","hrefTarget","findHrefTarget","isRelative","converted","convertToRelative","parsedUrl","parseUrl","urlPath","queryString","subscription","userAttributes","handleRouting","button","ctrlKey","defaultPrevented","metaKey","onRoute","routeEvent","anchorNode","preventDefault","route","history","pushState","HTMLAnchorElement","currentTarget","currentUrl","hrefUrl","host","relativeUrl","Router","Mutation","useRef","useWaitForSelector","selector","current","firstElementChild","useLayoutEffect","existingElement","MutationObserver","foundElement","subtree","characterData","MULTIPART_CONTENT_TYPE","JSON_CONTENT_TYPE","ENCODED_CONTENT_TYPE","FormComponent","responseData","formErrorMessage","previewState","validate","noValidate","action","sendWithJs","onSubmit","sendSubmissionsTo","customHeaders","formData","FormData","formPairs","checked","HTMLInputElement","valueAsNumber","contentType_1","contentType","File","FileList","json_1","presubmitEvent","formUrl","btoa","sendSubmissionsToEmail","ok","errorMessagePath","submitSuccessEvent","resetFormOnSubmit","reset","successUrl","event_1","submitErrorEvent","submissionState","errorMessage","sendingMessage","successMessage","Form","showIf","component.options.text","valueType","placeholder","FormInputComponent","FormInput","borderWidth","borderStyle","borderColor","FormSubmitButtonComponent","FormSubmitButton","LabelComponent","htmlFor","for","Label","richText","FormSelectComponent","option","FormSelect","TextAreaComponent","TextArea","ImgComponent","userStyle","restAttributes","defaultStyle","mergedStyle","Img","RawText","filterWithCustomTargetingScript","filterWithCustomTargeting","startDate","endDate","date","objectMatchesQuery","isString","isNumber","userattr","operator","testValue","endsWith","PersonalizationContainer","isBeingHydrated","__hydrated","rootRef","_x","isClient","setIsClient","_y","isHydrated","setIsHydrated","_z","setUpdate","builderStore","useEffect","subscriber","userAttributesChanged","prev","unsubs","variant_1","filteredVariants","bubbles","data-variant-id","getPersonalizationScript","previewingIndex","_m","_p","_o","_q","_r","_s","_t","_u","_v","_w","blockId","attributesCookieName","v","useIsPreviewing","setIsPreviewing","behavior","localized","isReact","sdkInfo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builder-react.es5.js","sources":["../src/sdk-version.ts","../src/scripts/init-editing.ts","../src/functions/utils.ts","../src/constants/device-sizes.constant.ts","../src/functions/set.ts","../src/functions/safe-dynamic-require.ts","../src/functions/is-debug.ts","../src/functions/should-force-browser-runtime-in-node.ts","../src/functions/string-to-function.ts","../src/store/builder-async-requests.ts","../src/store/builder-store.ts","../src/functions/apply-patch-with-mutation.ts","../src/functions/block-to-html-string.ts","../src/components/Link.tsx","../src/functions/traverse.ts","../src/functions/extract-localized-values.ts","../src/components/builder-block.component.tsx","../src/components/builder-blocks.component.tsx","../src/components/no-wrap.tsx","../src/components/variants-provider.component.tsx","../src/components/builder-content.component.tsx","../lib/on-change.js","../src/functions/debonce-next-tick.ts","../src/functions/throttle.ts","../src/store/builder-meta.ts","../src/functions/try-eval.tsx","../src/to-error.ts","../src/functions/get-builder-pixel.ts","../src/components/builder-component.component.tsx","../src/decorators/builder-block.decorator.ts","../src/functions/update-metadata.ts","../src/functions/with-builder.ts","../src/functions/with-children.tsx","../src/functions/no-wrap.tsx","../src/blocks/Text.tsx","../src/blocks/Slot.tsx","../src/blocks/Fragment.tsx","../src/blocks/Columns.tsx","../src/blocks/Embed.tsx","../src/blocks/CustomCode.tsx","../src/constants/file-types.constant.ts","../src/blocks/Image.tsx","../src/blocks/Video.tsx","../src/blocks/Symbol.tsx","../src/blocks/Button.tsx","../src/blocks/Section.tsx","../src/blocks/StateProvider.tsx","../src/blocks/Router.tsx","../src/blocks/Mutation.tsx","../src/functions/get.ts","../src/blocks/forms/Form.tsx","../src/blocks/forms/Input.tsx","../src/blocks/forms/Button.tsx","../src/blocks/forms/Label.tsx","../src/blocks/forms/Select.tsx","../src/blocks/forms/TextArea.tsx","../src/blocks/raw/Img.tsx","../src/blocks/raw/RawText.tsx","../src/functions/filter-with-custom-targeting.ts","../src/blocks/PersonalizationContainer.tsx","../src/hooks/useIsPreviewing.ts","../src/builder-react.ts"],"sourcesContent":["export const SDK_VERSION = '9.1.1';\n","import { SDK_VERSION } from '../sdk-version';\n\nif (typeof window !== 'undefined') {\n window.parent?.postMessage(\n {\n type: 'builder.isReactSdk',\n data: {\n value: true,\n supportsPatchUpdates: 'v4',\n supportsCustomBreakpoints: true,\n supportsXSmallBreakpoint: true,\n supportsGlobalSymbols: true,\n blockLevelPersonalization: true,\n version: SDK_VERSION,\n },\n },\n '*'\n );\n}\n","// TODO: pull from builder internal utils\nexport const fastClone = <T extends object>(obj: T): T => JSON.parse(JSON.stringify(obj));\n\nexport const omit = <T extends object>(obj: T, ...values: (keyof T)[]): Partial<T> => {\n const newObject = Object.assign({}, obj);\n for (const key of values) {\n delete (newObject as any)[key];\n }\n return newObject;\n};\n","import { fastClone } from '../functions/utils';\n\nexport type Size = 'large' | 'medium' | 'small' | 'xsmall';\nexport const sizeNames: Size[] = ['xsmall', 'small', 'medium', 'large'];\n\n// TODO: put in @builder.io/core\nconst sizes = {\n xsmall: {\n min: 0,\n default: 160,\n max: 320,\n },\n small: {\n min: 321,\n default: 321,\n max: 640,\n },\n medium: {\n min: 641,\n default: 642,\n max: 991,\n },\n large: {\n min: 990,\n default: 991,\n max: 1200,\n },\n getWidthForSize(size: Size) {\n return this[size].default;\n },\n getSizeForWidth(width: number) {\n for (const size of sizeNames) {\n const value = this[size];\n if (width <= value.max) {\n return size;\n }\n }\n return 'large';\n },\n};\nexport type Sizes = typeof sizes;\n\nexport interface Breakpoints {\n xsmall?: number;\n small?: number;\n medium?: number;\n}\n\nexport const getSizesForBreakpoints = (breakpoints: Breakpoints) => {\n const newSizes = {\n ...sizes, // Note: this helps get the function from sizes\n ...fastClone(sizes), // Note: this helps to get a deep clone of fields like small, medium etc\n };\n\n if (!breakpoints) {\n return newSizes;\n }\n\n const { xsmall, small, medium } = breakpoints;\n\n if (xsmall) {\n const xsmallMin = Math.floor(xsmall / 2);\n newSizes.xsmall = {\n max: xsmall,\n min: xsmallMin,\n default: xsmallMin + 1,\n };\n }\n\n if (!small || !medium) {\n return newSizes;\n }\n\n const smallMin = xsmall ? newSizes.xsmall.max + 1 : Math.floor(small / 2);\n newSizes.small = {\n max: small,\n min: smallMin,\n default: smallMin + 1,\n };\n\n const mediumMin = newSizes.small.max + 1;\n newSizes.medium = {\n max: medium,\n min: mediumMin,\n default: mediumMin + 1,\n };\n\n const largeMin = newSizes.medium.max + 1;\n newSizes.large = {\n max: 2000, // TODO: decide upper limit\n min: largeMin,\n default: largeMin + 1,\n };\n\n return newSizes;\n};\n","export const set = (obj: any, _path: string | string[], value: any) => {\n if (Object(obj) !== obj) {\n return obj;\n }\n const path: string[] = Array.isArray(_path)\n ? _path\n : (_path.toString().match(/[^.[\\]]+/g) as string[]);\n\n path\n .slice(0, -1)\n .reduce(\n (a, c, i) =>\n Object(a[c]) === a[c]\n ? a[c]\n : (a[c] = Math.abs(Number(path[i + 1])) >> 0 === +path[i + 1] ? [] : {}),\n obj\n )[path[path.length - 1]] = value;\n return obj;\n};\n","'use strict';\n\nimport { Builder } from '@builder.io/sdk';\n\nconst noop = () => null;\n// Allow us to require things dynamically safe from webpack bundling\n\nexport let safeDynamicRequire: typeof require;\n\n/*\n * The if condition below used to be\n *\n * if (typeof globalThis.require === \"function\")\n *\n * That broke in case Builder was running on the server (Next, SSR use-cases) where\n * globalThis.require was undefined. Avoiding use of Builder.isServer for Cloudflare worker cases\n * That said, if change it to\n *\n * if (typeof require === 'function') {\n * localSafeDynamicRequire = eval('require');\n * }\n *\n * Then the TSC / rollup compiler over-optimizes and replaces the if condition with true always\n * causing it to blow up on the client side. Hence this convoluted way of doing it.\n *\n * In Summary:\n *\n * 1. Node -> globalThis.require does not work\n * 2. Cloudflare edge -> only globalThis.require works\n */\nif (\n typeof globalThis?.require === 'function' ||\n (Builder.isServer && typeof require === 'function')\n) {\n try {\n /*\n This is a hack to get around webpack bundling the require function, which is not available in the browser\n Needs to be eval'd to avoid webpack bundling it\n */\n safeDynamicRequire = eval('require');\n } catch (e) {\n /* \n This is a patch for enviornments where eval is not allowed, like Shopify-hydrogen storefront\n Relevant issue : https://github.com/BuilderIO/builder-shopify-hydrogen/issues/12\n */\n if (globalThis?.require) {\n safeDynamicRequire = globalThis.require;\n } else {\n // @ts-ignore\n safeDynamicRequire = noop;\n }\n }\n}\n\nsafeDynamicRequire ??= noop as any;\n","export function isDebug(): boolean {\n return Boolean(\n typeof process !== 'undefined' && typeof process.env !== 'undefined' && process.env.DEBUG\n );\n}\n","function isNodeRuntime(): boolean {\n return typeof process !== 'undefined' && Boolean(process?.versions?.node);\n}\n\nexport const shouldForceBrowserRuntimeInNode = () => {\n if (!isNodeRuntime()) return false;\n\n const isArm64 = process.arch === 'arm64';\n const isNode20 = process.version.startsWith('v20');\n\n const hasNoNodeSnapshotNodeOption = process.env.NODE_OPTIONS?.includes('--no-node-snapshot');\n\n if (isArm64 && isNode20 && !hasNoNodeSnapshotNodeOption) {\n console.log(`Skipping usage of \\`isolated-vm\\` to avoid crashes in Node v20 on an arm64 machine.\n If you would like to use the \\`isolated-vm\\` package on this machine, please provide the \\`NODE_OPTIONS=--no-node-snapshot\\` config to your Node process.\n See https://github.com/BuilderIO/builder/blob/main/packages/react/README.md#node-v20--m1-macs-apple-silicon-support for more information.\n `);\n\n return true;\n }\n\n return false;\n};\n","import { Builder, builder } from '@builder.io/sdk';\nimport { safeDynamicRequire } from './safe-dynamic-require';\nimport { isDebug } from './is-debug';\nimport { shouldForceBrowserRuntimeInNode } from './should-force-browser-runtime-in-node';\n\nconst fnCache: { [key: string]: BuilderEvanFunction | undefined } = {};\n\ntype BuilderEvanFunction = (\n state: object,\n event?: Event | undefined | null,\n block?: any,\n builder?: Builder,\n Device?: any,\n update?: Function | null,\n _Builder?: typeof Builder,\n context?: object\n) => any;\n\nexport const api = (state: any) => builder;\n\nexport function stringToFunction(\n str: string,\n expression = true,\n errors?: Error[],\n logs?: string[]\n): BuilderEvanFunction {\n /* TODO: objedct */\n if (!str || !str.trim()) {\n return () => undefined;\n }\n\n const cacheKey = str + ':' + expression;\n if (fnCache[cacheKey]) {\n return fnCache[cacheKey]!;\n }\n\n // FIXME: gross hack\n const useReturn =\n (expression &&\n !(str.includes(';') || str.includes(' return ') || str.trim().startsWith('return '))) ||\n str.trim().startsWith('builder.run');\n let fn: Function = () => {\n /* intentionally empty */\n };\n\n try {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n if (Builder.isBrowser) {\n // TODO: use strict and eval\n fn = new Function(\n 'state',\n 'event',\n 'block',\n 'builder',\n 'Device',\n 'update',\n 'Builder',\n 'context',\n // TODO: remove the with () {} - make a page v3 that doesn't use this\n // Or only do if can't find state\\s*\\. anywhere hm\n `\n var names = [\n 'state',\n 'event',\n 'block',\n 'builder',\n 'Device',\n 'update',\n 'Builder',\n 'context'\n ];\n var rootState = state;\n if (typeof Proxy !== 'undefined') {\n rootState = new Proxy(rootState, {\n set: function () {\n return false;\n },\n get: function (target, key) {\n if (names.includes(key)) {\n return undefined;\n }\n return target[key];\n }\n });\n }\n /* Alias */\n var ctx = context;\n var log = console.log.bind(console);\n with (rootState) {\n ${useReturn ? `return (${str});` : str};\n }\n `\n );\n }\n } catch (error: any) {\n if (errors) {\n errors.push(error);\n }\n const message = error && error.message;\n if (message && typeof message === 'string') {\n if (logs && logs.indexOf(message) === -1) {\n logs.push(message);\n }\n }\n if (Builder.isBrowser) {\n console.warn(`Function compile error in ${str}`, error);\n }\n }\n\n const final = (...args: any[]) => {\n try {\n if (Builder.isBrowser || shouldForceBrowserRuntimeInNode()) {\n return fn(...args);\n } else {\n // TODO: memoize on server\n // TODO: use something like this instead https://www.npmjs.com/package/rollup-plugin-strip-blocks\n // There must be something more widely used?\n // TODO: regex for between comments instead so can still type check the code... e.g. //SERVER-START ... code ... //SERVER-END\n // Below is a hack to get certain code to *only* load in the server build, to not screw with\n // browser bundler's like rollup and webpack. Our rollup plugin strips these comments only\n // for the server build\n // TODO: cache these for better performancs with new VmScript\n const isolateContext: import('isolated-vm').Context = getIsolateContext();\n const ivm = safeDynamicRequire('isolated-vm') as typeof import('isolated-vm');\n const resultStr = isolateContext.evalClosureSync(\n makeFn(str, useReturn),\n args.map((arg, index) =>\n typeof arg === 'object'\n ? new ivm.Reference(\n index === indexOfBuilderInstance\n ? {\n // workaround: methods with default values for arguments is not being cloned over\n ...arg,\n getUserAttributes: () => arg.getUserAttributes(''),\n }\n : arg\n )\n : null\n )\n );\n try {\n // returning objects throw errors in isolated vm, so we stringify it and parse it back\n const res = JSON.parse(resultStr);\n return res;\n } catch (_error: any) {\n return resultStr;\n }\n }\n } catch (error: any) {\n if (Builder.isBrowser) {\n console.warn(\n 'Builder custom code error:',\n error.message || error,\n 'in',\n str,\n error.stack || error\n );\n } else {\n if (isDebug()) {\n console.debug(\n 'Builder custom code error:',\n error.message || error,\n 'in',\n str,\n error.stack || error\n );\n }\n }\n if (errors) {\n errors.push(error);\n }\n return null;\n }\n };\n\n if (Builder.isBrowser) {\n fnCache[cacheKey] = final;\n }\n\n return final;\n}\n\nconst indexOfBuilderInstance = 3;\n\nexport const makeFn = (code: string, useReturn: boolean, args?: string[]) => {\n // Order must match the order of the arguments to the function\n const names = args || [\n 'state',\n 'event',\n 'block',\n 'builder',\n 'Device',\n 'update',\n 'Builder',\n 'context',\n ];\n\n // Convert all argument references to proxies, and pass `copySync` method to target object, to return a copy of the original JS object\n // https://github.com/laverdet/isolated-vm#referencecopysync\n const refToProxyFn = `\n var refToProxy = (obj) => {\n if (typeof obj !== 'object' || obj === null) {\n return obj;\n }\n return new Proxy({}, {\n get(target, key) {\n if (key === 'copySync') {\n return () => obj.copySync();\n }\n const val = obj.getSync(key);\n if (typeof val?.copySync === 'function') {\n return JSON.parse(stringify(val));\n }\n return val;\n },\n set(target, key, value) {\n obj.setSync(key, value);\n },\n deleteProperty(target, key) {\n obj.deleteSync(key);\n }\n })\n }\n`;\n // Returned object will be stringified and parsed back to the parent isolate\n const strinfigyFn = `\n var stringify = (val) => {\n if (typeof val === 'object' && val !== null) {\n return JSON.stringify(val.copySync ? val.copySync() : val);\n }\n return val;\n }\n `;\n\n return `\n${refToProxyFn}\n${strinfigyFn}\n`.concat(names.map((arg, index) => `var ${arg} = refToProxy($${index});`).join('\\n')).concat(`\n${names.includes('context') ? 'var ctx = context;' : ''}\nvar endResult = function() {\n ${useReturn ? `return (${code});` : code};\n};\n\nreturn stringify(endResult());\n`);\n};\n\nexport const getIsolateContext = () => {\n let isolatedContext = Builder.serverContext;\n\n if (!isolatedContext) {\n const ivm = safeDynamicRequire('isolated-vm') as typeof import('isolated-vm');\n const isolate = new ivm.Isolate({ memoryLimit: 128 });\n isolatedContext = isolate.createContextSync();\n Builder.setServerContext(isolatedContext);\n }\n const jail = isolatedContext!.global;\n // This makes the global object available in the context as `global`. We use `derefInto()` here\n // because otherwise `global` would actually be a Reference{} object in the new isolate.\n jail.setSync('global', jail.derefInto());\n // We will create a basic `log` function for the new isolate to use.\n jail.setSync('log', function (...args: any[]) {\n if (isDebug()) {\n console.log(...args);\n }\n });\n return isolatedContext;\n};\n","import React from 'react';\n\nexport interface RequestInfo {\n promise: Promise<any>;\n url?: string;\n}\n\nexport type RequestOrPromise = RequestInfo | Promise<any>;\n\nexport const isPromise = (thing: RequestOrPromise): thing is Promise<any> =>\n typeof (thing as any).then === 'function';\nexport const isRequestInfo = (thing: RequestOrPromise): thing is RequestInfo => !isPromise(thing);\n\nexport const BuilderAsyncRequestsContext = React.createContext({\n requests: [] as RequestOrPromise[],\n errors: [] as Error[],\n logs: [] as string[],\n});\n","import React from 'react';\n\nexport const BuilderStoreContext = React.createContext<BuilderStore>({\n state: {},\n rootState: {},\n content: {},\n context: {},\n update: (mutator: (state: any) => any) => null,\n});\n\nexport interface BuilderStore {\n state: any;\n rootState: any;\n content: any;\n context: any;\n update: (mutator: (state: any) => any) => any;\n renderLink?: (props: React.AnchorHTMLAttributes<any>) => React.ReactNode;\n}\n","export const applyPatchWithMinimalMutationChain = <T extends object>(\n obj: T,\n patch: { path: string; op: 'add' | 'remove' | 'replace'; value: any },\n preserveRoot = false\n): T => {\n if (Object(obj) !== obj) {\n return obj;\n }\n const { path, op, value } = patch;\n const pathArr: string[] = path.split(/\\//);\n if (pathArr[0] === '') {\n pathArr.shift();\n }\n\n const newObj = preserveRoot ? obj : { ...obj };\n let objPart = newObj as any;\n for (let i = 0; i < pathArr.length; i++) {\n const isLast = i === pathArr.length - 1;\n const property = pathArr[i];\n if (isLast) {\n if (op === 'replace') {\n objPart[property] = value;\n } else if (op === 'add') {\n const index = Number(property);\n if (Array.isArray(objPart)) {\n if (property === '-') {\n objPart.push(value);\n } else {\n objPart.splice(index, 0, value);\n }\n } else {\n objPart[property] = value;\n }\n } else if (op === 'remove') {\n const index = Number(property);\n if (Array.isArray(objPart)) {\n objPart.splice(index, 1);\n } else {\n delete objPart[property];\n }\n }\n } else {\n const nextProperty = pathArr[i + 1];\n const newPart =\n Object(objPart[property]) === objPart[property]\n ? objPart[property]\n : String(Number(nextProperty)) === nextProperty\n ? []\n : {};\n objPart = objPart[property] = Array.isArray(newPart) ? [...newPart] : { ...newPart };\n }\n }\n\n return newObj;\n};\n","import { BuilderElement } from '@builder.io/sdk';\n\nexport const htmlEscape = (str: string) =>\n str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\n\n// TODO: handle self closing tags\n// TODO: how allow components (e.g. react components) in templates?\nexport const blockToHtmlString = (block: BuilderElement): string =>\n `<${htmlEscape(block.tagName || 'div')} \n class=\"builder-block ${block.id} ${block.class || ''}\"\n builder-id=\"${block.id}\"\n ${Object.keys(block.properties || {})\n .map(key => `${htmlEscape(key)}=\"${htmlEscape(block.properties![key])}\"`)\n .join(' ')}\n >${\n block?.component?.name === 'Text'\n ? block.component.options.text\n : block.children\n ? block.children.map(item => blockToHtmlString(item)).join('')\n : ''\n }</${block.tagName || 'div'}>`.replace(/\\s+/g, ' ');\n","'use client';\nimport React from 'react';\nimport { BuilderStoreContext } from '../store/builder-store';\n/**\n * Link component should be used instead of an anchor tag in our components,\n * this is to allow our users to override anchor tags in\n * case they're using a routing Lib that requires using their\n * custom Link component (e.g Next, Gatsby, React Router)\n * <BuilderComponent renderLink=(props) => <myCustomLink {...props} /> />\n */\nexport const Link = (props: React.AnchorHTMLAttributes<HTMLAnchorElement>) => (\n <BuilderStoreContext.Consumer>\n {context => {\n if (context.renderLink) {\n return context.renderLink(props);\n }\n return <a {...props} />;\n }}\n </BuilderStoreContext.Consumer>\n);\n","type TraverseCallback = (value: any, update: (newValue: any) => void) => void;\n\n/**\n * Recursively traverses an object or array, invoking a callback on each value.\n *\n * @param {any} obj - The object or array to traverse. Can also handle primitives, null, or undefined.\n * @param {TraverseCallback} callback - The function to invoke on each value. Receives the current value\n * and an `update` function to modify the value in its parent container.\n * @param {any} [parent=null] - The parent object or array of the current value. Used internally.\n * @param {any} [key=null] - The key or index of the current value in its parent. Used internally.\n * @param {WeakSet} [visited=new WeakSet()] - Tracks visited objects to handle circular references. Used internally.\n *\n * @example\n * // Example: Doubling all numbers in an object\n * const obj = { a: 1, b: [2, 3, { c: 4 }] };\n * traverse(obj, (value, update) => {\n * if (typeof value === 'number') {\n * update(value * 2);\n * }\n * });\n * console.log(obj); // { a: 2, b: [4, 6, { c: 8 }] }\n *\n * @example\n * // Example: Handling circular references\n * const obj = { a: 1 };\n * obj.self = obj;\n * traverse(obj, (value, update) => {\n * if (typeof value === 'number') {\n * update(value * 2);\n * }\n * });\n * console.log(obj.a); // 2\n */\nexport function traverse(\n obj: any,\n callback: TraverseCallback,\n parent: any = null,\n key: any = null,\n visited = new WeakSet()\n): void {\n if (obj == null || typeof obj !== 'object') {\n callback(obj, (newValue: any) => {\n if (parent !== null && key !== null) {\n parent[key] = newValue;\n }\n });\n return;\n }\n\n if (visited.has(obj)) {\n return;\n }\n visited.add(obj);\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n const update = (newValue: any) => {\n obj[index] = newValue;\n };\n callback(item, update);\n traverse(item, callback, obj, index, visited);\n });\n } else {\n Object.entries(obj).forEach(([key, value]) => {\n const update = (newValue: any) => {\n obj[key] = newValue;\n };\n callback(value, update);\n traverse(value, callback, obj, key, visited);\n });\n }\n}\n","import { traverse } from './traverse';\n\nconst isLocalizedField = (value: any) => {\n return value && typeof value === 'object' && value['@type'] === '@builder.io/core:LocalizedValue';\n};\n\nexport const containsLocalizedValues = (data: Record<string, any>) => {\n if (!data || !Object.getOwnPropertyNames(data).length) {\n return false;\n }\n let hasLocalizedValues = false;\n traverse(data, value => {\n if (isLocalizedField(value)) {\n hasLocalizedValues = true;\n return;\n }\n });\n return hasLocalizedValues;\n};\n\nexport const extractLocalizedValues = (data: Record<string, any>, locale: string) => {\n if (!data || !Object.getOwnPropertyNames(data).length) {\n return {};\n }\n\n traverse(data, (value, update) => {\n if (isLocalizedField(value)) {\n update(value[locale] ?? undefined);\n }\n });\n\n return data;\n};\n","/** @jsx jsx */\nimport { Builder, builder, BuilderElement, Component } from '@builder.io/sdk';\nimport { ClassNames, jsx } from '@emotion/core';\nimport React from 'react';\nimport { getSizesForBreakpoints, Size, sizeNames } from '../constants/device-sizes.constant';\nimport { set } from '../functions/set';\nimport { api, stringToFunction } from '../functions/string-to-function';\nimport { BuilderAsyncRequestsContext, RequestOrPromise } from '../store/builder-async-requests';\nimport { BuilderStoreContext } from '../store/builder-store';\nimport { applyPatchWithMinimalMutationChain } from '../functions/apply-patch-with-mutation';\nimport { blockToHtmlString } from '../functions/block-to-html-string';\nimport { Link } from './Link';\nimport { fastClone } from '../functions/utils';\nimport {\n containsLocalizedValues,\n extractLocalizedValues,\n} from 'src/functions/extract-localized-values';\n\nconst camelCaseToKebabCase = (str?: string) =>\n str ? str.replace(/([A-Z])/g, g => `-${g[0].toLowerCase()}`) : '';\n\nconst kebabCaseToCamelCase = (str = '') =>\n str.replace(/-([a-z])/g, match => match[1].toUpperCase());\n\nconst Device = { desktop: 0, tablet: 1, mobile: 2 };\n\n// Deep clone a block but without cloning any child blocks\nexport function deepCloneWithConditions<T = any>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item: any) => deepCloneWithConditions(item)) as T;\n }\n\n if ((obj as any)['@type'] === '@builder.io/sdk:Element') {\n return obj;\n }\n\n const clonedObj: any = {};\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n if (key === 'meta') {\n clonedObj.meta = obj['meta'];\n } else {\n clonedObj[key] = deepCloneWithConditions(obj[key]);\n }\n }\n }\n\n return clonedObj;\n}\n\nconst voidElements = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n 'textarea', // In React, we want to treat this as void (no children, otherwise React throws errors)\n]);\n\nconst last = <T extends any>(arr: T[]) => arr[arr.length - 1];\n\nfunction omit(obj: any, values: string[]) {\n const newObject = Object.assign({}, obj);\n for (const key of values) {\n delete newObject[key];\n }\n return newObject;\n}\n\nconst cssCase = (property: string) => {\n if (!property) {\n return property;\n }\n\n let str = camelCaseToKebabCase(property);\n\n if (property[0] === property[0].toUpperCase()) {\n str = '-' + str;\n }\n\n return str;\n};\n\n// TODO: share these types in shared\ntype ElementType = any;\n\nexport interface BuilderBlockProps {\n fieldName?: string;\n block: BuilderElement;\n // TODO:\n // block: BuilderElement\n child?: boolean;\n index?: number;\n size?: Size;\n emailMode?: boolean;\n // TODO: use context\n}\n\nfunction capitalize(str: string) {\n if (!str) {\n return;\n }\n return str[0].toUpperCase() + str.slice(1);\n}\n\ninterface BuilderBlockState {\n state: any;\n rootState: any;\n context: any;\n update: Function;\n}\n\nexport class BuilderBlock extends React.Component<\n BuilderBlockProps,\n { hasError: boolean; updates: number }\n> {\n private _asyncRequests?: RequestOrPromise[];\n private _errors?: Error[];\n private _logs?: string[];\n\n hydrated = false;\n\n state = {\n hasError: false,\n updates: 0,\n };\n\n private privateState: BuilderBlockState = {\n state: {},\n rootState: {},\n context: {},\n update: () => {\n /* Intentionally empty */\n },\n };\n\n get store() {\n return this.privateState;\n }\n\n static getDerivedStateFromError(error: any) {\n return { hasError: true };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error('Builder block error:', error, errorInfo);\n }\n\n // TODO: handle adding return if none provided\n // TODO: cache/memoize this (globally with LRU?)\n stringToFunction(str: string, expression = true) {\n return stringToFunction(str, expression, this._errors, this._logs);\n }\n\n get block() {\n return this.props.block;\n }\n\n emotionCss(responsiveStyles: BuilderElement['responsiveStyles']) {\n let initialAnimationStepStyles: any;\n const { block } = this;\n const animation = block.animations && block.animations[0];\n if (animation && animation.trigger !== 'hover') {\n const firstStep = animation && animation.steps && animation.steps[0];\n const stepStyles = firstStep && firstStep.styles;\n if (stepStyles) {\n initialAnimationStepStyles = stepStyles;\n }\n }\n\n const reversedNames = sizeNames.slice().reverse();\n const styles: any = {};\n if (responsiveStyles) {\n const contentHasXSmallBreakpoint = Boolean(\n this.privateState.context.builderContent?.meta?.breakpoints?.xsmall\n );\n for (const size of reversedNames) {\n if (!contentHasXSmallBreakpoint && size === 'xsmall') {\n // Only apply xsmall styles if xsmall breakpoint is enabled on content\n continue;\n }\n\n if (size === 'large') {\n if (!this.props.emailMode) {\n styles[`&.builder-block`] = Object.assign(\n {},\n responsiveStyles[size],\n initialAnimationStepStyles\n );\n }\n } else {\n const sizesPerBreakpoints = getSizesForBreakpoints(\n this.privateState.context.builderContent?.meta?.breakpoints || {}\n );\n styles[`@media only screen and (max-width: ${sizesPerBreakpoints[size].max}px)`] = {\n '&.builder-block': responsiveStyles[size],\n };\n }\n }\n }\n\n const hoverAnimation =\n block.animations && block.animations.find(item => item.trigger === 'hover');\n if (hoverAnimation) {\n styles[':hover'] = hoverAnimation.steps?.[1]?.styles || {};\n // TODO: if manually has set transition property deal with that\n // TODO: only include properties explicitly set in the animation\n // using Object.keys(styles)\n styles.transition = `all ${hoverAnimation.duration}s ${camelCaseToKebabCase(\n hoverAnimation.easing\n )}`;\n if (hoverAnimation.delay) {\n styles.transitionDelay = hoverAnimation.delay + 's';\n }\n }\n\n return styles;\n }\n\n eval(str: string) {\n const fn = this.stringToFunction(str);\n // TODO: only one root instance of this, don't rewrap every time...\n return fn(\n this.privateState.state,\n undefined,\n this.block,\n builder,\n Device,\n this.privateState.update,\n Builder,\n this.privateState.context\n );\n }\n\n componentWillUnmount() {\n if (Builder.isEditing) {\n removeEventListener('message', this.onWindowMessage);\n }\n }\n\n onWindowMessage = (event: MessageEvent) => {\n const message = event.data;\n if (!message) {\n return;\n }\n switch (message.type) {\n case 'builder.selectionChange': {\n const { data } = message;\n if (!data) {\n break;\n }\n const { selection } = data;\n const id = this.block && this.block.id;\n if (id && Array.isArray(selection) && selection.indexOf(id) > -1) {\n setTimeout(() => {\n (window as any).$block = this;\n if (!(window as any).$blocks) {\n (window as any).$blocks = [];\n }\n (window as any).$blocks.push(this);\n });\n }\n break;\n }\n\n case 'builder.patchUpdates': {\n const { data } = message;\n if (!(data && data.data)) {\n break;\n }\n const patches = data.data[this.block.id!];\n if (!patches) {\n return;\n }\n\n if (location.href.includes('builder.debug=true')) {\n eval('debugger');\n }\n for (const patch of patches) {\n applyPatchWithMinimalMutationChain(this.props.block, patch, true);\n }\n this.setState({ updates: this.state.updates + 1 });\n\n break;\n }\n }\n };\n\n componentDidMount() {\n this.hydrated = true;\n const block = this.block;\n const animations = block && block.animations;\n\n if (Builder.isEditing) {\n addEventListener('message', this.onWindowMessage);\n }\n\n // tslint:disable-next-line:comment-format\n ///REACT15ONLY if (this.ref) { this.ref.setAttribute('builder-id', block.id); }\n\n if (animations) {\n const options = {\n animations: fastClone(animations),\n };\n\n // TODO: listen to Builder.editingMode and bind animations when editing\n // and unbind when not\n // TODO: apply bindings first\n if (block.bindings) {\n for (const key in block.bindings) {\n if (!key.trim?.()) {\n continue;\n }\n\n if (key.startsWith('animations.')) {\n // TODO: this needs to run in getElement bc of local state per element for repeats\n const value = this.stringToFunction(block.bindings[key]);\n if (value !== undefined) {\n set(\n options,\n key,\n value(\n this.privateState.state,\n null,\n block,\n builder,\n null,\n null,\n Builder,\n this.privateState.context\n )\n );\n }\n }\n }\n }\n Builder.animator.bindAnimations(\n options.animations\n .filter((item: any) => item.trigger !== 'hover')\n .map((animation: any) => ({\n ...animation,\n elementId: this.block.id,\n }))\n );\n }\n }\n\n // <!-- Builder Blocks --> in comments hmm\n getElement(index = 0, state = this.privateState.state): React.ReactNode {\n const { child, fieldName } = this.props;\n const block = this.block;\n let TagName: string | typeof Link = (block.tagName || 'div').toLowerCase();\n\n if (TagName === 'template') {\n const html = block.children\n ? block.children.map(item => blockToHtmlString(item)).join(' ')\n : '';\n console.debug('template html', html);\n return (\n // React has an undesired behavior (for us) for template tags, so we must\n // turn the contents into a string\n <template\n {...block.properties}\n dangerouslySetInnerHTML={{\n __html: html,\n }}\n />\n );\n }\n\n let InnerComponent: any;\n const componentName =\n block.component && (block.component.name || (block.component as any).component);\n let componentInfo: Component | null = null;\n if (block.component && !(block.component as any).class) {\n if (block.component && block.component.tag) {\n InnerComponent = block.component.tag;\n } else {\n componentInfo = Builder.components.find(item => item.name === componentName) || null;\n if (componentInfo && componentInfo.class) {\n InnerComponent = componentInfo.class;\n } else if (componentInfo && componentInfo.tag) {\n InnerComponent = componentInfo.tag;\n } else {\n if (componentName?.startsWith('Builder:')) {\n console.warn(\n `Missing @builder.io/widgets installation, please install and import @builder.io/widgets to use ${\n componentName.split(':')[1]\n } in your content, more info here: https://github.com/BuilderIO/builder/tree/main/packages/widgets`\n );\n } else if (componentName) {\n console.warn(\n `Missing registration for ${componentName}, have you included the registration in your bundle?`\n );\n }\n }\n }\n }\n\n const TextTag: any = 'span';\n\n let options: any = {\n ...block.properties,\n style: {},\n responsiveStyles: fastClone(block.responsiveStyles || {}),\n };\n\n options = {\n ...options.properties,\n ...options,\n };\n\n if (block.component) {\n options.component = deepCloneWithConditions(block.component);\n }\n\n // Binding should be properties to href or href?\n // Manual style editor show bindings\n // Show if things bound in overlays hmm\n if (block.bindings) {\n for (const key in block.bindings) {\n if (!key.trim?.()) {\n continue;\n }\n\n const value = this.stringToFunction(block.bindings[key]);\n // TODO: pass block, etc\n set(\n options,\n key,\n value(state, null, block, api(state), Device, null, Builder, this.privateState.context)\n );\n }\n }\n\n if (options.hide) {\n return null;\n } else {\n delete options.hide;\n }\n // TODO: UI for this\n if (('show' in options || (block.bindings && block.bindings.show)) && !options.show) {\n return null;\n } else {\n delete options.show;\n }\n\n if (block.actions) {\n for (const key in block.actions) {\n if (!key.trim?.()) {\n continue;\n }\n\n const value = block.actions[key];\n options['on' + capitalize(key)] = (event: any) => {\n let useState = state;\n if (typeof Proxy !== 'undefined') {\n useState = new Proxy(state, {\n set: (obj, prop, value) => {\n obj[prop] = value;\n this.privateState.rootState[prop] = value;\n return true;\n },\n });\n }\n const fn = this.stringToFunction(value, false);\n // TODO: only one root instance of this, don't rewrap every time...\n return fn(\n useState,\n event,\n this.block,\n builder,\n Device,\n this.privateState.update,\n Builder,\n this.privateState.context\n );\n };\n }\n }\n\n let innerComponentProperties = (options.component || options.options) && {\n ...options.options,\n ...(options.component.options || options.component.data),\n };\n\n if (containsLocalizedValues(innerComponentProperties)) {\n if (!this.privateState.state.locale) {\n console.warn(\n '[Builder.io] In order to use localized fields in Builder, you must pass a locale prop to the BuilderComponent or to options object while fetching the content to resolve localized fields. Learn more: https://www.builder.io/c/docs/localization-inline#targeting-and-inline-localization'\n );\n }\n innerComponentProperties = extractLocalizedValues(\n innerComponentProperties,\n this.privateState.state.locale ?? 'Default'\n );\n }\n\n const isVoid = voidElements.has(TagName);\n\n const noWrap = componentInfo && (componentInfo.fragment || componentInfo.noWrap);\n\n const styleStr =\n options.attr?.style || (typeof options.style === 'string' ? options.style : '') || '';\n\n if (typeof styleStr === 'string') {\n if (typeof options.style !== 'object') {\n options.style = {};\n }\n\n const styleSplit = styleStr.split(';');\n for (const pair of styleSplit) {\n const stylePieces = pair.split(':');\n if (!stylePieces.length) {\n return;\n }\n\n let [key, value] = stylePieces;\n\n if (!key) {\n continue;\n }\n\n if (stylePieces.length > 2) {\n value = stylePieces.slice(1).join(':');\n }\n\n options.style[kebabCaseToCamelCase(key)] = value;\n }\n }\n\n const finalOptions: { [key: string]: string } = {\n ...omit(options, ['class', 'component', 'attr', 'responsiveStyles']),\n [typeof TagName === 'string' && !TagName.includes('-') ? 'className' : 'class']:\n `builder-block ${this.id}${block.class ? ` ${block.class}` : ''}${\n block.component && !(['Image', 'Video', 'Banner'].indexOf(componentName) > -1)\n ? ` builder-has-component`\n : ''\n }` +\n (options.class ? ' ' + options.class : '') +\n (this.hydrated && Builder.isEditing && this.privateState.state._spacer?.parent === block.id\n ? ' builder-spacer-parent'\n : ''),\n key: this.id + index,\n 'builder-id': this.id,\n // ...(state && state.$index && typeof state.$index === 'number'\n // ? {\n // TODO: ONLY include on repeat!\n // TODO: what if dymically repeated by another component like tabs... may not work.\n // need function to provide that right\n ...(index !== 0 && {\n 'builder-index': index, // String(state.$index)\n }),\n // }\n // : null)\n };\n\n // tslint:disable-next-line:comment-format\n ///REACT15ONLY finalOptions.className = finalOptions.class\n\n if (Builder.isEditing && this.hydrated) {\n // TODO: removed bc JS can add styles inline too?\n (finalOptions as any)['builder-inline-styles'] = !(options.attr && options.attr.style)\n ? ''\n : Object.keys(options.style).reduce(\n (memo, key) => (memo ? `${memo};` : '') + `${cssCase(key)}:${options.style[key]};`,\n ''\n );\n }\n\n if (\n (((finalOptions as any).properties && (finalOptions as any).properties.href) ||\n (finalOptions as any).href) &&\n TagName === 'div'\n ) {\n TagName = 'a';\n }\n\n if (TagName === 'a') {\n TagName = Link;\n }\n // const css = this.css\n\n // const styleTag = css.trim() && (\n // <style className=\"builder-style\">\n // {(InnerComponent && !isBlock ? `.${this.id} > * { height: 100%; width: 100%; }` : '') +\n // this.css}\n // </style>\n // )\n\n const children = block.children || finalOptions.children || [];\n\n // TODO: test it out\n return (\n <React.Fragment>\n {/* <InsertSpacer id={block.id!} position=\"before\" /> */}\n <ClassNames>\n {({ css, cx }) => {\n if (!this.props.emailMode) {\n const addClass = ' ' + css(this.emotionCss(options.responsiveStyles));\n if (finalOptions.class) {\n finalOptions.class += addClass;\n }\n if (finalOptions.className) {\n finalOptions.className += addClass;\n }\n }\n\n return (\n <BuilderAsyncRequestsContext.Consumer>\n {value => {\n this._asyncRequests = value && value.requests;\n this._errors = value && value.errors;\n this._logs = value && value.logs;\n return isVoid ? (\n <TagName {...finalOptions} />\n ) : InnerComponent && (noWrap || this.props.emailMode) ? (\n // TODO: pass the class to be easier\n // TODO: acceptsChildren option?\n <InnerComponent\n // Final options maaay be wrong here hm\n {...innerComponentProperties}\n // should really call this builderAttributes bc people can name a\n // componet input \"attributes\"\n attributes={finalOptions}\n builderBlock={block}\n builderState={this.privateState}\n />\n ) : (\n <TagName {...(finalOptions as any)}>\n {InnerComponent && (\n <InnerComponent\n builderState={this.privateState}\n builderBlock={block}\n {...innerComponentProperties}\n />\n )}\n {(block as any).text || options.text\n ? options.text\n : !InnerComponent && children && Array.isArray(children) && children.length\n ? children.map((block: ElementType, index: number) => (\n <BuilderBlock\n key={((this.id as string) || '') + index}\n block={block}\n index={index}\n size={this.props.size}\n fieldName={this.props.fieldName}\n child={this.props.child}\n emailMode={this.props.emailMode}\n />\n ))\n : null}\n </TagName>\n );\n }}\n </BuilderAsyncRequestsContext.Consumer>\n );\n }}\n </ClassNames>\n {/* <InsertSpacer id={block.id!} position=\"after\" /> */}\n </React.Fragment>\n );\n }\n\n get id(): string {\n const { block } = this;\n if (block.id && !block.id.startsWith('builder')) {\n return 'builder-' + block.id;\n }\n return block.id || '';\n }\n\n contents(state: BuilderBlockState) {\n const block = this.block;\n\n // this.setState(state);\n this.privateState = state;\n\n if (block.repeat && block.repeat.collection) {\n const collectionPath = block.repeat.collection;\n const collectionName = last((collectionPath || '').trim().split('(')[0].trim().split('.'));\n const itemName = block.repeat.itemName || (collectionName ? collectionName + 'Item' : 'item');\n const array = this.stringToFunction(collectionPath)(\n state.state,\n null,\n block,\n api(state),\n Device,\n null,\n Builder,\n this.privateState.context\n );\n if (Array.isArray(array)) {\n return array.map((data, index) => {\n // TODO: Builder state produce the data\n const childState = {\n ...state.state,\n $index: index,\n $item: data,\n [itemName]: data,\n [`$${itemName}Index`]: index,\n };\n\n return (\n <BuilderStoreContext.Provider\n key={index}\n value={{ ...state, state: childState } as any}\n >\n {this.getElement(index, childState)}\n </BuilderStoreContext.Provider>\n );\n });\n }\n return null;\n }\n\n return this.getElement();\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <span\n css={{\n display: 'inline-block',\n padding: 5,\n color: '#999',\n fontSize: 11,\n fontStyle: 'italic',\n }}\n >\n Builder block error :( Check console for details\n </span>\n );\n }\n return (\n <BuilderStoreContext.Consumer>{value => this.contents(value)}</BuilderStoreContext.Consumer>\n );\n }\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport { Builder } from '@builder.io/sdk';\nimport { BuilderBlock } from './builder-block.component';\n// TODO: fetch these for user and send them with same response like graphql\nimport { Size } from '../constants/device-sizes.constant';\nimport ReactDOM from 'react-dom';\nimport { BuilderStoreContext } from '../store/builder-store';\n\nexport interface BuilderBlocksProps {\n fieldName?: string;\n // TODO: block type (ElementType[])\n blocks?: any[] | React.ReactNode;\n child?: boolean;\n // TODO: use new react context for this to pass window size all the way down\n size?: Size;\n style?: React.CSSProperties;\n parentElementId?: string;\n parent?: any;\n dataPath?: string;\n className?: string;\n emailMode?: boolean;\n}\n\ninterface BuilderBlocksState {\n // width: number\n}\n\n// TODO: options to set direciotn\nexport class BuilderBlocks extends React.Component<BuilderBlocksProps, BuilderBlocksState> {\n hydrated = false;\n get isRoot() {\n return !this.props.child;\n }\n\n get noBlocks() {\n const { blocks } = this.props;\n return !(blocks && (blocks as any).length); // TODO: allow react nodes\n }\n get path() {\n const pathPrefix = 'component.options.';\n let path = this.props.dataPath || '';\n const thisPrefix = 'this.';\n if (path.trim()) {\n if (path.startsWith(thisPrefix)) {\n path = path.replace(thisPrefix, '');\n } else if (!path.startsWith(pathPrefix)) {\n path = pathPrefix + path;\n }\n }\n return path;\n }\n\n get parentId() {\n if (this.props.parentElementId) {\n return this.props.parentElementId;\n }\n return this.props.parent && this.props.parent.id;\n }\n\n componentDidMount() {\n this.hydrated = true;\n }\n\n onClickEmptyBlocks = () => {\n if (Builder.isIframe && this.noBlocks) {\n window.parent?.postMessage(\n {\n type: 'builder.clickEmptyBlocks',\n data: {\n parentElementId: this.parentId,\n dataPath: this.path,\n },\n },\n '*'\n );\n }\n };\n onHoverEmptyBlocks = () => {\n if (Builder.isEditing && this.noBlocks) {\n window.parent?.postMessage(\n {\n type: 'builder.hoverEmptyBlocks',\n data: {\n parentElementId: this.parentId,\n dataPath: this.path,\n },\n },\n '*'\n );\n }\n };\n\n // <!-- Builder Blocks --> in comments hmm\n render() {\n const { blocks } = this.props;\n\n const TagName = this.props.emailMode ? 'span' : 'div';\n\n // TODO: how deep check this automatically for mobx... hmmm optional / peer dependency?\n return (\n // TODO: component <Stack direction=\"vertical\">\n // TODO: react.fragment instead?\n <TagName\n className={\n 'builder-blocks' +\n (this.noBlocks ? ' no-blocks' : '') +\n (this.props.child ? ' builder-blocks-child' : '') +\n (this.props.className ? ' ' + this.props.className : '')\n }\n builder-type=\"blocks\"\n builder-path={Builder.isIframe && this.hydrated ? this.path : undefined}\n builder-parent-id={this.parentId}\n css={\n {\n ...(!this.props.emailMode && {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n }),\n ...this.props.style,\n } as any\n }\n onClick={() => {\n if (this.noBlocks) {\n this.onClickEmptyBlocks();\n }\n }}\n {...(Builder.isEditing && {\n onMouseEnter: () => this.onHoverEmptyBlocks(),\n })}\n >\n {/* TODO: if is react node (for react compatibility) render it */}\n {/* TODO: maybe don't do this to preserve blocks always editable */}\n {(blocks &&\n Array.isArray(blocks) &&\n (blocks as any[]).map((block, index) =>\n block && block['@type'] === '@builder.io/sdk:Element' ? (\n <BuilderBlock\n key={block.id}\n block={block}\n index={index}\n fieldName={this.props.fieldName}\n child={this.props.child}\n emailMode={this.props.emailMode}\n />\n ) : (\n block\n )\n )) ||\n blocks}\n </TagName>\n );\n }\n\n static renderInto(\n elementOrSelector: string | HTMLElement,\n props: BuilderBlocksProps = {},\n builderState: any\n ) {\n if (!elementOrSelector) {\n return;\n }\n\n let element: Element | null = null;\n\n if (typeof elementOrSelector === 'string') {\n element = document.querySelector(elementOrSelector);\n } else {\n if (elementOrSelector instanceof Element) {\n element = elementOrSelector;\n }\n }\n return ReactDOM.render(\n <BuilderStoreContext.Provider value={builderState}>\n <BuilderBlocks {...props} />\n </BuilderStoreContext.Provider>,\n element\n );\n }\n}\n","'use client';\nimport React from 'react';\n\nexport const NoWrap = (props: React.ComponentPropsWithoutRef<any>) => props.children;\n","'use client';\nimport * as React from 'react';\nimport { builder, Builder, BuilderContent, BuilderContentVariation } from '@builder.io/sdk';\n\nfunction getData(content: BuilderContentVariation) {\n if (typeof content?.data === 'undefined') {\n return undefined;\n }\n\n const { blocks, blocksString } = content.data;\n const hasBlocks = Array.isArray(blocks) || typeof blocksString === 'string';\n const newData: any = {\n ...content.data,\n ...(hasBlocks && { blocks: blocks || JSON.parse(blocksString) }),\n };\n\n delete newData.blocksString;\n return newData;\n}\n\nconst variantsScript = (variantsString: string, contentId: string) =>\n `\n(function() {\n if (window.builderNoTrack || !navigator.cookieEnabled) {\n return;\n }\n\n var variants = ${variantsString};\n function removeVariants() {\n variants.forEach(function (template) {\n document.querySelector('template[data-template-variant-id=\"' + template.id + '\"]').remove();\n });\n document.getElementById('variants-script-${contentId}').remove();\n }\n\n if (typeof document.createElement(\"template\").content === 'undefined') {\n removeVariants();\n return ;\n }\n\n function setCookie(name,value,days) {\n var expires = \"\";\n if (days) {\n var date = new Date();\n date.setTime(date.getTime() + (days*24*60*60*1000));\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\" + \"; Secure; SameSite=None\";\n }\n\n function getCookie(name) {\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n for(var i=0;i < ca.length;i++) {\n var c = ca[i];\n while (c.charAt(0)==' ') c = c.substring(1,c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);\n }\n return null;\n }\n var cookieName = 'builder.tests.${contentId}';\n var variantInCookie = getCookie(cookieName);\n var availableIDs = variants.map(function(vr) { return vr.id }).concat('${contentId}');\n var variantId;\n if (availableIDs.indexOf(variantInCookie) > -1) {\n variantId = variantInCookie;\n }\n if (!variantId) {\n var n = 0;\n var random = Math.random();\n for (var i = 0; i < variants.length; i++) {\n var variant = variants[i];\n var testRatio = variant.testRatio;\n n += testRatio;\n if (random < n) {\n setCookie(cookieName, variant.id);\n variantId = variant.id;\n break;\n }\n }\n if (!variantId) {\n variantId = \"${contentId}\";\n setCookie(cookieName, \"${contentId}\");\n }\n }\n if (variantId && variantId !== \"${contentId}\") {\n var winningTemplate = document.querySelector('template[data-template-variant-id=\"' + variantId + '\"]');\n if (winningTemplate) {\n var parentNode = winningTemplate.parentNode;\n var newParent = parentNode.cloneNode(false);\n newParent.appendChild(winningTemplate.content.firstChild);\n parentNode.parentNode.replaceChild(newParent, parentNode);\n }\n } else if (variants.length > 0) {\n removeVariants();\n }\n})()`.replace(/\\s+/g, ' ');\n\ninterface VariantsProviderProps {\n initialContent: BuilderContent;\n children: (variants: BuilderContent[], renderScript?: () => JSX.Element) => JSX.Element;\n nonce?: string;\n}\n\nexport const VariantsProvider = ({ initialContent, children, nonce }: VariantsProviderProps) => {\n if (Builder.isBrowser && !builder.canTrack) {\n return children([initialContent]);\n }\n\n const hasTests = Boolean(Object.keys(initialContent?.variations || {}).length);\n\n if (!hasTests) return children([initialContent]);\n\n const variants: BuilderContent[] = Object.keys(initialContent.variations!).map(id => ({\n id,\n ...initialContent.variations![id],\n data: getData(initialContent.variations![id]!),\n }));\n\n const allVariants = [...variants, initialContent];\n if (Builder.isServer) {\n const variantsJson = JSON.stringify(\n Object.keys(initialContent.variations || {}).map(item => ({\n id: item,\n testRatio: initialContent.variations![item]!.testRatio,\n }))\n );\n const renderScript = () => (\n <script\n nonce={nonce}\n id={`variants-script-${initialContent.id}`}\n dangerouslySetInnerHTML={{\n __html: variantsScript(variantsJson, initialContent.id!),\n }}\n ></script>\n );\n\n // render all variants on the server side\n return <React.Fragment>{children(allVariants, renderScript)}</React.Fragment>;\n }\n\n const cookieName = `builder.tests.${initialContent.id}`;\n\n let variantId = builder.getCookie(cookieName);\n\n if (!variantId && Builder.isBrowser) {\n let n = 0;\n const random = Math.random();\n for (let i = 0; i < variants.length; i++) {\n const variant = variants[i];\n const testRatio = variant.testRatio;\n n += testRatio!;\n if (random < n) {\n builder.setCookie(cookieName, variant.id);\n variantId = variant.id;\n break;\n }\n }\n }\n\n if (!variantId) {\n // render initial content when no winning variation or on the server\n variantId = initialContent.id;\n builder.setCookie(cookieName, variantId);\n }\n\n return children([allVariants.find(item => item.id === variantId)!]);\n};\n","'use client';\nimport React from 'react';\nimport {\n builder,\n Subscription,\n GetContentOptions,\n Builder,\n BuilderContent as Content,\n} from '@builder.io/sdk';\nimport { NoWrap } from './no-wrap';\nimport { applyPatchWithMinimalMutationChain } from '../functions/apply-patch-with-mutation';\nimport { VariantsProvider } from './variants-provider.component';\n\nexport type BuilderContentProps<ContentType> = {\n /**\n * Callback to run when content is fetched and loaded.\n */\n contentLoaded?: (data: any, content: any) => void;\n /**\n * Callback to run if an error occurred while fetching content.\n */\n contentError?: (error: any) => void;\n options?: GetContentOptions;\n children: (content: ContentType, loading?: boolean, fullData?: any) => React.ReactNode;\n /**\n * Only render what was explicitly passed in via `content` - don't fetch from\n * the Builder API.\n *\n * @see content\n */\n inline?: boolean;\n /**\n * @package\n * @deprecated\n */\n dataOnly?: boolean;\n /**\n * @package\n * Pass in a specific builder instance to use instead of the default\n * singleton.\n */\n builder?: Builder;\n /**\n * @deprecated and unnecessary\n */\n isStatic?: boolean;\n /**\n * Builder content object to use instead of fetching from the API.\n *\n * Required if `inline` is set to `true`.\n */\n content?: Content;\n /**\n * CSP nonce to allow the loading and execution of a script or style tag when Content-Security-Policy is enabled.\n */\n nonce?: string;\n} & ({ model: string } | { modelName: string }); // model and modelName are aliases of the same thing¸\n\n/**\n * When passed content json explicitly it'll calculate a/b tests on the content\n * and pass the winning variation down to the children function. If then content\n * prop was omitted it'll try to fetch matching content from your Builder\n * account based on the default user attributes and model.\n */\nexport class BuilderContent<ContentType extends object = any> extends React.Component<\n BuilderContentProps<ContentType>\n> {\n ref: HTMLDivElement | null = null;\n\n get builder() {\n return this.props.builder || builder;\n }\n get name() {\n const props = this.props;\n\n if ('model' in props) {\n return props.model;\n } else {\n return props.modelName;\n }\n }\n\n get renderedVariantId() {\n const id = this.props.isStatic\n ? this.builder.getCookie(`builder.tests.${this.data?.id}`)\n : this.data?.variationId;\n if (id !== null) {\n return id;\n }\n }\n\n get options() {\n let options = {\n ...(this.props.options || ({} as GetContentOptions)),\n };\n if (!options.key && this.props.content?.id && !Builder.isEditing && !Builder.isPreviewing) {\n options.key = this.props.content.id;\n }\n if (\n this.props.content &&\n !options.initialContent?.length &&\n (this.props.inline || !Builder.isPreviewing)\n ) {\n options.initialContent = [this.props.content];\n }\n\n return options;\n }\n\n get data() {\n const content: Content =\n ((this.props.inline || !Builder.isBrowser || this.firstLoad) &&\n this.options.initialContent &&\n this.options.initialContent[0]) ||\n this.state.data;\n\n return getContentWithInfo(content);\n }\n\n state = {\n loading: !this.props.content,\n data: getContentWithInfo(this.props.content),\n updates: 1,\n };\n\n onWindowMessage = (event: MessageEvent) => {\n const isTrusted = Builder.isTrustedHostForEvent(event);\n if (!isTrusted) return;\n\n const message = event.data;\n if (!message) {\n return;\n }\n switch (message.type) {\n case 'builder.patchUpdates': {\n if (this.props.options?.noEditorUpdates) {\n return;\n }\n const { data } = message;\n if (!(data && data.data)) {\n break;\n }\n const patches = data.data[this.state.data?.id!];\n if (!(patches && patches.length)) {\n return;\n }\n\n if (location.href.includes('builder.debug=true')) {\n eval('debugger');\n }\n let newData = this.state.data as any;\n for (const patch of patches) {\n newData = applyPatchWithMinimalMutationChain(newData, patch, false);\n }\n this.setState({\n updates: this.state.updates + 1,\n data: newData,\n });\n if (this.props.contentLoaded) {\n this.props.contentLoaded(newData.data, newData);\n }\n break;\n }\n }\n };\n\n subscriptions = new Subscription();\n\n firstLoad = true;\n clicked = false;\n trackedImpression = false;\n\n intersectionObserver: IntersectionObserver | null = null;\n\n // TODO: observe model name for changes\n componentDidMount() {\n // Temporary to test metrics diving in with bigquery and heatmaps\n // this.builder.autoTrack = true;\n // this.builder.env = 'development';\n if (!this.props.inline || Builder.isEditing || Builder.isPreviewing) {\n this.subscribeToContent();\n } else if (this.props.inline && this.options?.initialContent?.length) {\n const contentData = this.options.initialContent[0];\n // TODO: intersectionobserver like in subscribetocontent - reuse the logic\n if (contentData?.id) {\n this.builder.contentId = contentData.id;\n this.builder.trackImpression(contentData.id, this.renderedVariantId, undefined, {\n content: contentData,\n });\n }\n }\n\n if (Builder.isEditing) {\n addEventListener('message', this.onWindowMessage);\n }\n\n /// REACT15ONLY if (this.ref) { this.ref.setAttribute('builder-model', this.name); }\n }\n\n subscribeToContent() {\n if (this.name !== '_inline') {\n // TODO:... using targeting...? express.request hmmm\n this.subscriptions.add(\n this.builder.queueGetContent(this.name, this.options).subscribe(\n matches => {\n const match = matches && matches[0];\n this.setState({\n data: match,\n loading: false,\n });\n // when BuilderContent is wrapping a BuilderComponent of the same model, the BuilderComponent is passing initialContent on the same key\n // causing the sdk to resolve this call to the initialContent instead of the previewed/edited content\n // so we test here if the BuilderContent is being used directly ( not inlined ) and it has initial content ( content prop ), we let the first render go through to show the initial content\n // and we subscribe again to get the draft/editing content\n const isPreviewing =\n (this.builder.editingModel || this.builder.previewingModel) === this.name;\n if (!this.props.inline && this.props.content && this.firstLoad && isPreviewing) {\n this.firstLoad = false;\n this.subscriptions.unsubscribe();\n this.subscribeToContent();\n }\n\n if (match && this.firstLoad) {\n this.firstLoad = false;\n // TODO: autoTrack\n if (builder.autoTrack && !Builder.isEditing) {\n let addedObserver = false;\n if (typeof IntersectionObserver === 'function' && this.ref) {\n try {\n const observer = (this.intersectionObserver = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach(entry => {\n // In view\n if (entry.intersectionRatio > 0 && !this.trackedImpression) {\n this.builder.trackImpression(\n match.id!,\n this.renderedVariantId,\n undefined,\n {\n content: this.data,\n }\n ),\n { content: this.data };\n this.trackedImpression = true;\n if (this.ref) {\n observer.unobserve(this.ref);\n }\n }\n });\n }\n ));\n\n observer.observe(this.ref);\n addedObserver = true;\n } catch (err) {\n console.warn('Could not bind intersection observer');\n }\n }\n if (!addedObserver) {\n this.trackedImpression = true;\n this.builder.trackImpression(match.id!, this.renderedVariantId, undefined, {\n content: match,\n });\n }\n }\n }\n if (this.props.contentLoaded) {\n this.props.contentLoaded(match && match.data, match);\n }\n },\n error => {\n if (this.props.contentError) {\n this.props.contentError(error);\n this.setState({\n loading: false,\n });\n }\n }\n )\n );\n }\n }\n\n componentWillUnmount() {\n if (Builder.isEditing) {\n removeEventListener('message', this.onWindowMessage);\n }\n\n this.subscriptions.unsubscribe();\n if (this.intersectionObserver && this.ref) {\n this.intersectionObserver.unobserve(this.ref);\n }\n }\n\n onClick = (reactEvent: React.MouseEvent<HTMLElement>) => {\n // TODO: viewport scrolling tracking for impression events\n const event = reactEvent.nativeEvent;\n\n const content = this.data;\n if (!content) {\n return;\n }\n if (builder.autoTrack) {\n this.builder.trackInteraction(content.id!, this.renderedVariantId, this.clicked, event, {\n content,\n });\n }\n if (!this.clicked) {\n this.clicked = true;\n }\n };\n\n render() {\n if (this.props.dataOnly) {\n return null;\n }\n const { loading } = this.state;\n\n const useData: any = this.data;\n const TagName = this.props.dataOnly ? NoWrap : 'div';\n return (\n <VariantsProvider initialContent={useData} nonce={this.props.nonce}>\n {(variants, renderScript) => {\n return (\n <React.Fragment>\n {variants.map((content, index) => {\n // default Variation is at the end, wrap the rest with template\n // TODO: IE11 don't support templates\n const Tag = index === variants.length - 1 ? React.Fragment : 'template';\n return (\n <React.Fragment key={String(content?.id! + index)}>\n {Tag !== 'template' && renderScript?.()}\n <Tag\n key={String(content?.id! + index)}\n {...(Tag === 'template' && {\n 'data-template-variant-id': content?.id,\n })}\n >\n <TagName\n {...(index === 0 &&\n !this.props.dataOnly && {\n ref: (ref: any) => (this.ref = ref),\n })}\n className=\"builder-content\"\n onClick={this.onClick}\n builder-content-id={content?.id}\n builder-model={this.name}\n >\n {this.props.children(\n content?.data! as any,\n this.props.inline ? false : loading,\n useData\n )}\n </TagName>\n </Tag>\n </React.Fragment>\n );\n })}\n </React.Fragment>\n );\n }}\n </VariantsProvider>\n );\n }\n}\n\nexport const getContentWithInfo = (content?: Content) => {\n if (content) {\n const cookieValue = builder.getCookie(`builder.tests.${content.id}`);\n const cookieVariation =\n cookieValue === content.id ? content : content.variations?.[cookieValue];\n const variationName =\n cookieVariation?.name || (cookieVariation?.id === content.id ? 'Default variation' : '');\n\n return {\n ...content,\n variationId: cookieValue,\n testVariationId: cookieValue,\n testVariationName: variationName,\n };\n }\n return null;\n};\n","// Via https://github.com/sindresorhus/on-change but\n// compiled for ES5\n\n'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\n('use strict');\nvar PATH_SEPARATOR = '.';\nvar TARGET = Symbol('target');\nvar UNSUBSCRIBE = Symbol('unsubscribe');\nvar isPrimitive = function (value) {\n return value === null || (typeof value !== 'object' && typeof value !== 'function');\n};\nvar isBuiltinWithoutMutableMethods = function (value) {\n return value instanceof RegExp || value instanceof Number;\n};\nvar isBuiltinWithMutableMethods = function (value) {\n return value instanceof Date;\n};\nvar concatPath = function (path, property) {\n if (property && property.toString) {\n if (path) {\n path += PATH_SEPARATOR;\n }\n path += property.toString();\n }\n return path;\n};\nvar walkPath = function (path, callback) {\n var index;\n while (path) {\n index = path.indexOf(PATH_SEPARATOR);\n if (index === -1) {\n index = path.length;\n }\n callback(path.slice(0, index));\n path = path.slice(index + 1);\n }\n};\nvar shallowClone = function (value) {\n if (Array.isArray(value)) {\n return value.slice();\n }\n return Object.assign({}, value);\n};\nvar onChange = function (object, onChange, options) {\n if (typeof Proxy === 'undefined') {\n // TODO: use immer? or a technique like immer to diff maybe\n return object;\n }\n if (options === void 0) {\n options = {};\n }\n var proxyTarget = Symbol('ProxyTarget');\n var inApply = false;\n var changed = false;\n var applyPath;\n var applyPrevious;\n var isUnsubscribed = false;\n var equals = options.equals || Object.is;\n var propCache = new WeakMap();\n var pathCache = new WeakMap();\n var proxyCache = new WeakMap();\n var handleChange = function (path, property, previous, value) {\n if (isUnsubscribed) {\n return;\n }\n if (!inApply) {\n onChange(concatPath(path, property), value, previous);\n return;\n }\n if (\n inApply &&\n applyPrevious &&\n previous !== undefined &&\n value !== undefined &&\n property !== 'length'\n ) {\n var item_1 = applyPrevious;\n if (path !== applyPath) {\n path = path.replace(applyPath, '').slice(1);\n walkPath(path, function (key) {\n item_1[key] = shallowClone(item_1[key]);\n item_1 = item_1[key];\n });\n }\n item_1[property] = previous;\n }\n changed = true;\n };\n var getOwnPropertyDescriptor = function (target, property) {\n var props = propCache ? propCache.get(target) : undefined;\n if (props) {\n return props;\n }\n props = new Map();\n propCache.set(target, props);\n var prop = props.get(property);\n if (!prop) {\n prop = Reflect.getOwnPropertyDescriptor(target, property);\n props.set(property, prop);\n }\n return prop;\n };\n var invalidateCachedDescriptor = function (target, property) {\n var props = propCache ? propCache.get(target) : undefined;\n if (props) {\n props.delete(property);\n }\n };\n var buildProxy = function (value, path) {\n if (isUnsubscribed) {\n return value;\n }\n pathCache.set(value, path);\n var proxy = proxyCache.get(value);\n if (proxy === undefined) {\n proxy = new Proxy(value, handler);\n proxyCache.set(value, proxy);\n }\n return proxy;\n };\n var unsubscribe = function (target) {\n isUnsubscribed = true;\n propCache = null;\n pathCache = null;\n proxyCache = null;\n return target;\n };\n var ignoreChange = function (property) {\n return isUnsubscribed || (options.ignoreSymbols === true && typeof property === 'symbol');\n };\n var handler = {\n get: function (target, property, receiver) {\n if (property === proxyTarget || property === TARGET) {\n return target;\n }\n if (property === UNSUBSCRIBE && pathCache.get(target) === '') {\n return unsubscribe(target);\n }\n var value = Reflect.get(target, property, receiver);\n if (\n isPrimitive(value) ||\n isBuiltinWithoutMutableMethods(value) ||\n property === 'constructor' ||\n options.isShallow === true\n ) {\n return value;\n }\n // Preserve invariants\n var descriptor = getOwnPropertyDescriptor(target, property);\n if (descriptor && !descriptor.configurable) {\n if (descriptor.set && !descriptor.get) {\n return undefined;\n }\n if (descriptor.writable === false) {\n return value;\n }\n }\n return buildProxy(value, concatPath(pathCache.get(target), property));\n },\n set: function (target, property, value, receiver) {\n if (value && value[proxyTarget] !== undefined) {\n value = value[proxyTarget];\n }\n var ignore = ignoreChange(property);\n var previous = ignore ? null : Reflect.get(target, property, receiver);\n var result = Reflect.set(target[proxyTarget] || target, property, value);\n if (!ignore && !equals(previous, value)) {\n handleChange(pathCache.get(target), property, previous, value);\n }\n return result;\n },\n defineProperty: function (target, property, descriptor) {\n var result = Reflect.defineProperty(target, property, descriptor);\n if (!ignoreChange(property)) {\n invalidateCachedDescriptor(target, property);\n handleChange(pathCache.get(target), property, undefined, descriptor.value);\n }\n return result;\n },\n deleteProperty: function (target, property) {\n if (!Reflect.has(target, property)) {\n return true;\n }\n var ignore = ignoreChange(property);\n var previous = ignore ? null : Reflect.get(target, property);\n var result = Reflect.deleteProperty(target, property);\n if (!ignore) {\n invalidateCachedDescriptor(target, property);\n handleChange(pathCache.get(target), property, previous);\n }\n return result;\n },\n apply: function (target, thisArg, argumentsList) {\n var compare = isBuiltinWithMutableMethods(thisArg);\n if (compare) {\n thisArg = thisArg[proxyTarget];\n }\n if (!inApply) {\n inApply = true;\n if (compare) {\n applyPrevious = thisArg.valueOf();\n }\n if (Array.isArray(thisArg) || toString.call(thisArg) === '[object Object]') {\n applyPrevious = shallowClone(thisArg[proxyTarget]);\n }\n applyPath = pathCache.get(target);\n applyPath = applyPath.slice(0, Math.max(applyPath.lastIndexOf(PATH_SEPARATOR), 0));\n var result = Reflect.apply(target, thisArg, argumentsList);\n inApply = false;\n if (changed || (compare && !equals(applyPrevious, thisArg.valueOf()))) {\n handleChange(applyPath, '', applyPrevious, thisArg[proxyTarget] || thisArg);\n applyPrevious = null;\n changed = false;\n }\n return result;\n }\n return Reflect.apply(target, thisArg, argumentsList);\n },\n };\n var proxy = buildProxy(object, '');\n onChange = onChange.bind(proxy);\n return proxy;\n};\nonChange.target = function (proxy) {\n return proxy[TARGET] || proxy;\n};\nonChange.unsubscribe = function (proxy) {\n return proxy[UNSUBSCRIBE] || proxy;\n};\nmodule.exports = onChange;\nexports.default = onChange;\n","import { Builder } from '@builder.io/sdk';\n\nconst nextTick = Builder.nextTick;\n\n// Plain function - e.g. const debounced = debounceNextTick(fn);\nexport function debounceNextTick(fn: (...args: any[]) => void): () => void;\n// Decorator - e.g. class Foo { @debounceNextTick myMethod() { ... } }\nexport function debounceNextTick(\n target: any,\n key: PropertyKey,\n descriptor: PropertyDescriptor\n): PropertyDescriptor;\nexport function debounceNextTick(\n target: object | ((...args: any[]) => void),\n key?: PropertyKey,\n descriptor?: PropertyDescriptor\n) {\n if (typeof key === 'undefined' && typeof target === 'function') {\n return debounceNextTickImpl(target as any);\n }\n return {\n configurable: true,\n enumerable: descriptor!.enumerable,\n get: function getter(): any {\n // Attach this function to the instance (not the class)\n Object.defineProperty(this, key!, {\n configurable: true,\n enumerable: descriptor!.enumerable,\n value: debounceNextTickImpl(descriptor!.value),\n });\n\n return (this as any)[key!];\n },\n } as PropertyDescriptor;\n}\n\nfunction debounceNextTickImpl(fn: (...args: any[]) => void) {\n let args: any[] | null = null;\n let context: any = null;\n\n return debounced;\n\n function debounced(this: any) {\n const previous = args;\n args = [].slice.call(arguments);\n context = this;\n if (previous !== null) return;\n nextTick(next);\n }\n\n function next() {\n fn.apply(context, args as any);\n args = null;\n context = null;\n }\n}\n","export function throttle(func: Function, wait: number, options: any = {}) {\n let context: any;\n let args: any;\n let result: any;\n let timeout = null as any;\n let previous = 0;\n const later = function () {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function (this: any) {\n const now = Date.now();\n if (!previous && options.leading === false) previous = now;\n const remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n}\n","import React from 'react';\n\nexport const BuilderMetaContext = React.createContext({\n emailMode: false,\n ampMode: false,\n isServer: false,\n});\n","'use client';\nimport { Builder } from '@builder.io/sdk';\nimport { safeDynamicRequire } from './safe-dynamic-require';\nimport { isDebug } from './is-debug';\nimport { getIsolateContext, makeFn } from './string-to-function';\nimport { shouldForceBrowserRuntimeInNode } from './should-force-browser-runtime-in-node';\n\nexport const tryEval = (str?: string, data: any = {}, errors?: Error[]): any => {\n const value = str;\n if (!(typeof value === 'string' && value.trim())) {\n return;\n }\n const useReturn = !(value.includes(';') || value.includes(' return '));\n let fn: Function = () => {\n /* Intentionally empty */\n };\n try {\n if (Builder.isBrowser) {\n // tslint:disable-next-line:no-function-constructor-with-string-args\n // TODO: VM in node......\n fn = new Function(\n 'state',\n // TODO: remove the with () {} - make a page v3 that doesn't use this\n `var rootState = state;\n if (typeof Proxy !== 'undefined') {\n rootState = new Proxy(rootState, {\n set: function () {\n return false;\n },\n get: function (target, key) {\n if (key === 'state') {\n return state;\n }\n return target[key]\n }\n });\n }\n with (rootState) {\n ${useReturn ? `return (${str});` : str};\n }`\n );\n }\n } catch (error: any) {\n if (Builder.isBrowser) {\n console.warn('Could not compile javascript', error);\n } else {\n // Add to req.options.errors to return to client\n }\n }\n try {\n if (Builder.isBrowser || shouldForceBrowserRuntimeInNode()) {\n return fn(data || {});\n } else {\n // Below is a hack to get certain code to *only* load in the server build, to not screw with\n // browser bundler's like rollup and webpack. Our rollup plugin strips these comments only\n // for the server build\n const ivm = safeDynamicRequire('isolated-vm');\n const context = getIsolateContext();\n\n Object.keys(data).forEach(key => {\n switch (key) {\n case 'state':\n case 'global':\n case 'log':\n console.warn(`Not setting state.${key} as global ${key} in isolated vm`);\n break;\n default:\n if (data[key] === undefined) {\n return;\n }\n try {\n if (typeof data[key] === 'object' && data[key] !== null) {\n context.global.setSync(key, new ivm.ExternalCopy(data[key]).copyInto());\n } else {\n context.global.setSync(key, data[key]);\n }\n } catch (error) {\n console.warn(`Could not set ${key} for isolated-vm:`, error);\n }\n }\n });\n const fnString = makeFn(str!, useReturn, ['state']);\n const resultStr = context.evalClosureSync(fnString, [new ivm.Reference(data || {})]);\n try {\n // returning objects throw errors in isolated vm, so we stringify it and parse it back\n return JSON.parse(resultStr);\n } catch (_error: any) {\n return resultStr;\n }\n }\n } catch (error: any) {\n if (errors) {\n errors.push(error);\n }\n\n if (Builder.isBrowser) {\n console.warn('Builder custom code error:', error.message, 'in', str, error.stack);\n } else {\n if (isDebug()) {\n console.debug('Builder custom code error:', error.message, 'in', str, error.stack);\n }\n // Add to req.options.errors to return to client\n }\n } finally {\n if (!(Builder.isBrowser || shouldForceBrowserRuntimeInNode())) {\n const context = getIsolateContext();\n\n // Clean up the global context\n Object.keys(data).forEach(key => {\n switch (key) {\n case 'state':\n case 'global':\n case 'log':\n break;\n default:\n context.global.deleteSync(key);\n }\n });\n }\n }\n\n return;\n};\n","/**\n * Safe conversion to error type. Intended to be used in catch blocks where the\n * value is not guaranteed to be an error.\n *\n * @example\n * try {\n * throw new Error('Something went wrong')\n * }\n * catch (err: unknown) {\n * const error: Error = toError(err)\n * }\n */\nexport function toError(err: unknown): Error {\n if (err instanceof Error) return err;\n return new Error(String(err));\n}\n","import { BuilderElement } from '@builder.io/sdk';\n\nexport function getBuilderPixel(apiKey: string): BuilderElement {\n return {\n id: 'builder-pixel-' + Math.random().toString(36).split('.')[1],\n '@type': '@builder.io/sdk:Element',\n tagName: 'img',\n properties: {\n role: 'presentation',\n 'aria-hidden': 'true',\n src: `https://cdn.builder.io/api/v1/pixel?apiKey=${apiKey}`,\n },\n responsiveStyles: {\n large: {\n height: '0',\n width: '0',\n display: 'inline-block',\n opacity: '0',\n overflow: 'hidden',\n pointerEvents: 'none',\n },\n },\n };\n}\n","'use client';\nimport React, { PropsWithChildren } from 'react';\nimport ReactDOM from 'react-dom';\nimport { jsx, css } from '@emotion/core';\nimport { BuilderContent, getContentWithInfo } from './builder-content.component';\nimport { BuilderBlocks } from './builder-blocks.component';\nimport {\n Builder,\n GetContentOptions,\n builder,\n Subscription,\n BehaviorSubject,\n BuilderElement,\n BuilderContent as Content,\n Component,\n} from '@builder.io/sdk';\nimport { BuilderStoreContext } from '../store/builder-store';\nimport hash from 'hash-sum';\nimport onChange from '../../lib/on-change';\n\nexport { onChange };\n\nimport { Breakpoints, getSizesForBreakpoints, Sizes } from '../constants/device-sizes.constant';\nimport {\n BuilderAsyncRequestsContext,\n RequestOrPromise,\n RequestInfo,\n isRequestInfo,\n} from '../store/builder-async-requests';\nimport { Url } from 'url';\nimport { debounceNextTick } from '../functions/debonce-next-tick';\nimport { throttle } from '../functions/throttle';\nimport { BuilderMetaContext } from '../store/builder-meta';\nimport { tryEval } from '../functions/try-eval';\nimport { toError } from '../to-error';\nimport { getBuilderPixel } from '../functions/get-builder-pixel';\nimport { isDebug } from '../functions/is-debug';\n\nexport type RegisteredComponent = Component & {\n component?: React.ComponentType<any>;\n};\n\nfunction pick<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {\n const ret: any = {};\n keys.forEach(key => {\n ret[key] = obj[key];\n });\n return ret;\n}\nfunction omit<T, K extends keyof T>(obj: T, ...keys: K[]): Omit<T, K> {\n const ret: any = { ...obj };\n keys.forEach(key => {\n delete ret[key];\n });\n return ret;\n}\n\nconst instancesMap = new Map<string, Builder>();\n\nconst wrapComponent = (info: any) => {\n return (props: any) => {\n // TODO: convention for all of this, like builderTagProps={{ style: {} foo: 'bar' }}\n const Tag = props.builderTag || 'div';\n const inputNames = ['children'].concat(\n info.inputs?.map((item: any) => item.name as string) || []\n );\n\n const baseProps = omit(props, ...inputNames, 'attributes');\n const inputProps = props; // pick(props, ...inputNames);\n\n if (info.noWrap) {\n return <info.class attributes={baseProps} {...inputProps} />;\n }\n\n return (\n <Tag {...baseProps}>\n <info.class {...inputProps} />\n </Tag>\n );\n };\n};\n\nconst size = (thing: object) => Object.keys(thing).length;\n\nfunction debounce(func: Function, wait: number, immediate = false) {\n let timeout: any;\n return function (this: any) {\n const context = this;\n const args = arguments;\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n }, wait);\n if (immediate && !timeout) func.apply(context, args);\n };\n}\n\nconst fontsLoaded = new Set();\n\nlet fetch: (typeof globalThis)['fetch'];\nif (globalThis.fetch) fetch = globalThis.fetch;\nfetch ??= require('node-fetch');\n\nconst sizeMap = {\n desktop: 'large',\n tablet: 'medium',\n mobile: 'small',\n xsmall: 'xsmall',\n};\n\nconst fetchCache: { [key: string]: any } = {};\n\nexport interface BuilderComponentProps {\n /**\n * @package\n * @deprecated use {@link model} instead.\n * @hidden\n */\n modelName?: string;\n /**\n * Name of the model this is rendering content for. Default is \"page\".\n */\n model?: string;\n /**\n * @package\n * @deprecated use {@link model} instead.\n * @hidden\n */\n name?: string;\n /**\n * Data is passed along as `state.*` to the component.\n * @see {@link https://github.com/BuilderIO/builder/tree/master/packages/react#passing-data-and-functions-down}\n *\n * @example\n * ```\n * <BuilderComponent\n * model=\"page\"\n * data={{\n * products: productsList,\n * myFunction: () => alert('Triggered!'),\n * foo: 'bar'\n * }} >\n * ```\n */\n data?: any;\n /**\n * Specific instance of Builder that should be used. You might use this for\n * server side rendering. It's generally not recommended except for very\n * advanced multi-tenant use cases.\n */\n builder?: Builder;\n /**\n * Content entry ID for this component to fetch client side\n */\n entry?: string;\n /**\n * @package\n *\n * Builder public API key.\n *\n * @see {@link builder.init()} for the preferred way of supplying your API key.\n */\n apiKey?: string;\n /**\n * @private\n * @hidden\n */\n codegen?: boolean;\n options?: GetContentOptions;\n /**\n * Function callback invoked with `data` and your content when it becomes\n * available.\n *\n * @see {@link https://github.com/BuilderIO/builder/tree/master/packages/react#passing-data-and-functions-down}\n */\n contentLoaded?: (data: any, content: Content) => void;\n /**\n * Instead of having Builder render a link for you with plain anchor\n * elements, use your own function. Useful when using Next.js, Gatsby, or\n * other client side routers' custom `<Link>` components.\n *\n * ## Notes\n *\n * This must be a function that returns JSX, not a component!\n *\n * ## Examples\n *\n * @see {@link https://github.com/BuilderIO/builder/blob/0f0bc1ca835335f99fc21efb20ff3c4836bc9f41/examples/next-js-builder-site/src/functions/render-link.tsx#L6}\n */\n renderLink?: (props: React.AnchorHTMLAttributes<any>) => React.ReactNode;\n /**\n * Callback to run if an error occurred while fetching content.\n */\n contentError?: (error: any) => void;\n /**\n * Manually specify what Builder content JSON object to render. @see {@link\n * https://github.com/BuilderIO/builder/tree/master/packages/react#passing-content-manually}\n */\n content?: Content;\n /**\n * @package\n * @hidden\n *\n * Location object that provides the current url, path, etc; for server side\n * rendering.\n */\n location?: Location | Url;\n /**\n * Callback to run when Builder state changes (e.g. state.foo = 'bar' in an\n * action)\n */\n onStateChange?: (newData: any) => void;\n /**\n * @package\n * @deprecated\n * @hidden\n */\n noAsync?: boolean;\n /**\n * @package\n * @hidden\n *\n * Flag to render email content (small differences in our render logic for\n * email support).\n */\n emailMode?: boolean;\n /**\n * @package\n * @hidden\n *\n * Flag to render amp content (small differences in our render logic for amp\n * support)\n */\n ampMode?: boolean;\n /**\n * @package\n * @hidden\n *\n * Render content in-line only (can't passed from the content prop) don't\n * fetch content from our API.\n */\n inlineContent?: boolean;\n /**\n * @package\n * @deprecated\n * @hidden\n */\n builderBlock?: BuilderElement;\n /**\n * @package\n * @deprecated\n * @hidden\n */\n dataOnly?: boolean;\n /**\n * @package\n * @deprecated\n * @hidden\n */\n hydrate?: boolean;\n /**\n * @package\n * @deprecated use {@link Builder.isStatic} instead\n * @hidden\n */\n isStatic?: boolean;\n /**\n * Object that will be available in actions and bindings.\n *\n * @see {@link https://github.com/BuilderIO/builder/tree/master/packages/react#passing-data-and-functions-down}\n */\n context?: any;\n /**\n * @deprecated\n * @hidden\n */\n url?: string;\n /**\n * @hidden\n * Set to true if this is not the root content component, for instance for symbols\n */\n isChild?: boolean;\n /**\n * Set to true to not call `event.stopPropagation()` in the editor to avoid\n * issues with client site routing triggering when editing in Builder, causing\n * navigation to other pages unintended\n */\n stopClickPropagationWhenEditing?: boolean;\n\n /**\n * Set to the current locale in your application if you want localized inputs to be auto-resolved, should match one of the locales keys in your space settings\n * Learn more about adding or removing locales [here](https://www.builder.io/c/docs/add-remove-locales)\n */\n locale?: string;\n\n /**\n * Pass a list of custom components to register with Builder.io.\n */\n customComponents?: Array<RegisteredComponent>;\n\n /**\n * CSP nonce to allow the loading and execution of a script or style tag when Content-Security-Policy is enabled.\n */\n nonce?: string;\n}\n\nexport interface BuilderComponentState {\n state: any;\n update: (state: any) => any;\n updates: number;\n context: any;\n key: number;\n breakpoints?: Breakpoints;\n}\n\ninterface BuilderRequest {\n '@type': '@builder.io/core:Request';\n request: {\n url: string;\n query?: { [key: string]: string };\n headers?: { [key: string]: string };\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n body?: any;\n };\n options?: { [key: string]: any };\n bindings?: { [key: string]: string };\n}\n\nfunction searchToObject(location: Location | Url) {\n const pairs = (location.search || '').substring(1).split('&');\n const obj: { [key: string]: string } = {};\n\n for (const i in pairs) {\n if (!(pairs[i] && typeof pairs[i] === 'string')) {\n continue;\n }\n const pair = pairs[i].split('=');\n obj[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n\n return obj;\n}\n\n/**\n * Responsible for rendering Builder content of type: 'page' or 'section' to\n * react components. It will attempt to fetch content from the API based on\n * defined user attributes (URL path, device type, and any custom targeting you set using `builder.setUserAttributes`) unless a `BuilderContent`\n * object is provided to `props.content`\n *\n * Use it to mount content in desired location, enable editing in place when\n * previewed in the editor.\n *\n * Supports server-side-rendering when passed the content json as\n * `props.content`.\n */\nexport class BuilderComponent extends React.Component<\n PropsWithChildren<BuilderComponentProps>,\n BuilderComponentState\n> {\n static defaults: Pick<BuilderComponentProps, 'codegen'> = {\n codegen: Boolean(Builder.isBrowser && location.href.includes('builder.codegen=true')),\n };\n\n subscriptions: Subscription = new Subscription();\n // TODO: don't trigger initial one?\n onStateChange = new BehaviorSubject<any>(null);\n asServer = Builder.isServer;\n\n contentRef: BuilderContent | null = null;\n\n styleRef: HTMLStyleElement | null = null;\n\n rootState = Builder.isServer ? {} : onChange({}, () => this.updateState());\n\n lastJsCode = '';\n lastHttpRequests: { [key: string]: string | undefined } = {};\n httpSubscriptionPerKey: { [key: string]: Subscription | undefined } = {};\n firstLoad = true;\n ref: HTMLElement | null = null;\n\n Component: any;\n\n get options() {\n // TODO: for perf cache this\n return {\n ...BuilderComponent.defaults,\n ...this.props,\n };\n }\n\n get name(): string | undefined {\n return this.props.model || this.props.modelName || this.props.name; // || this.props.model\n }\n\n private _asyncRequests?: RequestOrPromise[];\n private _errors?: Error[];\n private _logs?: string[];\n private sizes: Sizes;\n\n get element() {\n return this.ref;\n }\n\n get inlinedContent() {\n if (this.isPreviewing && !this.props.inlineContent) {\n return undefined;\n }\n return this.props.content;\n }\n\n constructor(props: BuilderComponentProps) {\n super(props);\n\n let _content: any = this.inlinedContent;\n if (_content && _content.content) {\n _content = _content.content;\n }\n\n this.sizes = getSizesForBreakpoints(_content?.meta?.breakpoints || {});\n\n // TODO: pass this all the way down - symbols, etc\n // this.asServer = Boolean(props.hydrate && Builder.isBrowser)\n const contentData = this.inlinedContent?.data;\n if (contentData && Array.isArray(contentData.inputs) && contentData.inputs.length > 0) {\n if (!contentData.state) {\n contentData.state = {};\n }\n // set default values of content inputs on state\n contentData.inputs.forEach((input: any) => {\n if (input) {\n if (\n input.name &&\n input.defaultValue !== undefined &&\n contentData.state![input.name] === undefined\n ) {\n contentData.state![input.name] = input.defaultValue;\n }\n }\n });\n }\n this.state = {\n // TODO: should change if this prop changes\n context: {\n ...props.context,\n apiKey: this.props.apiKey || builder.apiKey,\n nonce: this.props.nonce,\n },\n state: Object.assign(this.rootState, {\n ...(this.inlinedContent && this.inlinedContent.data && this.inlinedContent.data.state),\n isBrowser: Builder.isBrowser, // !this.asServer,\n isServer: !Builder.isBrowser, // this.asServer,\n _hydrate: props.hydrate,\n location: this.locationState,\n deviceSize: this.deviceSizeState,\n // TODO: will user attributes be ready here?\n device: this.device,\n ...this.getHtmlData(),\n ...props.data,\n }),\n updates: 0,\n key: 0,\n update: this.updateState,\n };\n\n const key = this.props.apiKey;\n if (key && key !== this.builder.apiKey && !instancesMap.has(key)) {\n // We create a builder instance for each api key to support loading of symbols from other spaces\n const instance = new Builder(key, undefined, undefined, true);\n instancesMap.set(key, instance);\n }\n\n if (this.inlinedContent) {\n // Sometimes with graphql we get the content as `content.content`\n const content = (this.inlinedContent as any).content || this.inlinedContent;\n this.onContentLoaded(content?.data, getContentWithInfo(content)!);\n }\n\n this.registerCustomComponents();\n }\n\n get builder() {\n const instance = this.props.apiKey && instancesMap.get(this.props.apiKey);\n return instance || this.props.builder || builder;\n }\n\n getHtmlData() {\n const id = (this.inlinedContent && this.inlinedContent.id) || this.props.entry;\n const script =\n id &&\n Builder.isBrowser &&\n document.querySelector(\n `script[data-builder-json=\"${id}\"],script[data-builder-state=\"${id}\"]`\n );\n if (script) {\n try {\n const json = JSON.parse((script as HTMLElement).innerText);\n return json;\n } catch (err) {\n console.warn(\n 'Could not parse Builder.io HTML data transfer',\n err,\n (script as HTMLElement).innerText\n );\n }\n }\n return {};\n }\n\n // TODO: pass down with context\n get device() {\n return this.builder.getUserAttributes().device || 'desktop';\n }\n\n get locationState() {\n return {\n // TODO: handle this correctly on the server. Pass in with CONTEXT\n ...pick(this.location, 'pathname', 'hostname', 'search', 'host'),\n path: (this.location.pathname && this.location.pathname.split('/').slice(1)) || '',\n query: searchToObject(this.location),\n };\n }\n\n // TODO: trigger state change on screen size change\n get deviceSizeState() {\n // TODO: use context to pass this down on server\n return Builder.isBrowser\n ? this.sizes.getSizeForWidth(window.innerWidth)\n : sizeMap[this.device] || 'large';\n }\n\n messageListener = (event: MessageEvent) => {\n const isTrusted = Builder.isTrustedHostForEvent(event);\n if (!isTrusted) return;\n\n const info = event.data;\n switch (info.type) {\n case 'builder.configureSdk': {\n const data = info.data;\n\n if (!data.contentId || data.contentId !== this.useContent?.id) {\n return;\n }\n\n this.sizes = getSizesForBreakpoints(data.breakpoints || {});\n\n this.setState({\n state: Object.assign(this.rootState, {\n deviceSize: this.deviceSizeState,\n // TODO: will user attributes be ready here?\n device: this.device,\n }),\n updates: ((this.state && this.state.updates) || 0) + 1,\n breakpoints: data.breakpoints,\n });\n\n break;\n }\n\n case 'builder.updateSpacer': {\n const data = info.data;\n const currentSpacer = this.rootState._spacer;\n this.updateState(state => {\n state._spacer = data;\n });\n break;\n }\n case 'builder.resetState': {\n const { state, model } = info.data;\n if (model === this.name) {\n for (const key in this.rootState) {\n // TODO: support nested functions (somehow)\n if (typeof this.rootState[key] !== 'function') {\n delete this.rootState[key];\n }\n }\n Object.assign(this.rootState, state);\n this.setState({\n ...this.state,\n state: this.rootState,\n updates: ((this.state && this.state.updates) || 0) + 1,\n });\n }\n break;\n }\n case 'builder.resetSymbolState': {\n const { state, model, id } = info.data.state;\n if (this.props.builderBlock && this.props.builderBlock === id) {\n for (const key in this.rootState) {\n delete this.rootState[key];\n }\n Object.assign(this.rootState, state);\n this.setState({\n ...this.state,\n state: this.rootState,\n updates: ((this.state && this.state.updates) || 0) + 1,\n });\n }\n break;\n }\n }\n };\n\n resizeFn = () => {\n const deviceSize = this.deviceSizeState;\n if (deviceSize !== this.state.state.deviceSize) {\n this.setState({\n ...this.state,\n updates: ((this.state && this.state.updates) || 0) + 1,\n state: Object.assign(this.rootState, {\n ...this.state.state,\n deviceSize,\n }),\n });\n }\n };\n\n resizeListener = Builder.isEditing ? throttle(this.resizeFn, 200) : debounce(this.resizeFn, 400);\n\n static renderInto(\n elementOrSelector: string | HTMLElement,\n props: BuilderComponentProps = {},\n hydrate = true,\n fresh = false\n ) {\n console.debug('BuilderPage.renderInto', elementOrSelector, props, hydrate, this);\n\n if (!elementOrSelector) {\n return;\n }\n\n let element: Element | null = null;\n\n if (typeof elementOrSelector === 'string') {\n element = document.querySelector(elementOrSelector);\n } else {\n if (elementOrSelector instanceof Element) {\n element = elementOrSelector;\n }\n }\n\n if (!element) {\n return;\n }\n\n const exists = element.classList.contains('builder-hydrated');\n if (exists && !fresh) {\n console.debug('Tried to hydrate multiple times');\n return;\n }\n element.classList.add('builder-hydrated');\n\n let shouldHydrate = hydrate && element.innerHTML.includes('builder-block');\n\n if (!element.classList.contains('builder-component')) {\n // TODO: maybe remove any builder-api-styles...\n const apiStyles =\n element.querySelector('.builder-api-styles') ||\n (element.previousElementSibling &&\n element.previousElementSibling.matches('.builder-api-styles')\n ? element.previousElementSibling\n : null);\n let keepStyles = '';\n if (apiStyles) {\n const html = apiStyles.innerHTML;\n html.replace(\n /\\/\\*start:([^\\*]+?)\\*\\/([\\s\\S]*?)\\/\\*end:([^\\*]+?)\\*\\//g,\n (match, id, content) => {\n let el: HTMLElement | null = null;\n try {\n el = document.querySelector(`[data-emotion-css=\"${id}\"]`);\n } catch (err) {\n console.warn(err);\n }\n if (el) {\n el.innerHTML = content;\n } else if (!Builder.isEditing) {\n keepStyles += match;\n }\n\n return match;\n }\n );\n // NextTick? or longer timeout?\n Builder.nextTick(() => {\n apiStyles.innerHTML = keepStyles;\n });\n }\n const useElement = element.querySelector('.builder-component');\n if (useElement) {\n element = useElement;\n } else {\n shouldHydrate = false;\n }\n }\n\n if (location.search.includes('builder.debug=true')) {\n console.debug('hydrate', shouldHydrate, element);\n }\n\n let useEl = element;\n if (!exists) {\n const div = document.createElement('div');\n element.insertAdjacentElement('beforebegin', div);\n div.appendChild(element);\n useEl = div;\n }\n\n if (Builder.isEditing || (Builder.isBrowser && location.search.includes('builder.preview='))) {\n shouldHydrate = false;\n }\n if (shouldHydrate && element) {\n // TODO: maybe hydrate again. Maybe...\n const val = ReactDOM.render(\n <BuilderComponent {...props} />,\n useEl,\n (useEl as any).builderRootRef\n );\n (useEl as any).builderRootRef = val;\n return val;\n }\n const val = ReactDOM.render(\n <BuilderComponent {...props} />,\n useEl,\n (useEl as any).builderRootRef\n );\n (useEl as any).builderRootRef = val;\n return val;\n }\n\n mounted = false;\n\n registerCustomComponents() {\n if (this.props.customComponents) {\n for (const customComponent of this.props.customComponents) {\n if (customComponent) {\n const { component, ...registration } = customComponent;\n Builder.registerComponent(component, registration);\n }\n }\n }\n }\n\n componentDidMount() {\n this.mounted = true;\n if (this.asServer) {\n this.asServer = false;\n this.updateState(state => {\n state.isBrowser = true;\n state.isServer = false;\n });\n }\n\n if (Builder.isIframe) {\n window.parent?.postMessage(\n {\n type: 'builder.sdkInjected',\n data: { modelName: this.name, apiKey: this.props.apiKey || builder.apiKey },\n },\n '*'\n );\n }\n\n if (Builder.isBrowser) {\n // TODO: remove event on unload\n window.addEventListener('resize', this.resizeListener);\n if (Builder.isEditing) {\n window.addEventListener('message', this.messageListener);\n }\n\n if (Builder.isEditing || Builder.isPreviewing) {\n Builder.nextTick(() => {\n this.firstLoad = false;\n this.reload();\n });\n }\n\n setTimeout(() => {\n window.dispatchEvent(\n new CustomEvent('builder:component:load', {\n detail: {\n ref: this,\n },\n })\n );\n });\n }\n }\n\n updateState = (fn?: (state: any) => void) => {\n const state = this.rootState;\n if (fn) {\n fn(state);\n }\n if (this.mounted) {\n this.setState({\n update: this.updateState,\n state,\n updates: ((this.state && this.state.updates) || 0) + 1,\n });\n } else {\n this.state = {\n ...this.state,\n update: this.updateState,\n state,\n updates: ((this.state && this.state.updates) || 0) + 1,\n };\n }\n\n this.notifyStateChange();\n };\n\n get isPreviewing() {\n return (\n (Builder.isServer || (Builder.isBrowser && Builder.isPreviewing && !this.firstLoad)) &&\n (builder.previewingModel === this.name || builder.previewingModel === 'BUILDER_STUDIO')\n );\n }\n\n @debounceNextTick\n notifyStateChange() {\n if (Builder.isServer) {\n return;\n }\n if (!(this && this.state)) {\n return;\n }\n const nextState = this.state.state;\n // TODO: only run the below once per tick...\n if (this.props.onStateChange) {\n this.props.onStateChange(nextState);\n }\n\n if (Builder.isBrowser) {\n window.dispatchEvent(\n new CustomEvent('builder:component:stateChange', {\n detail: {\n state: nextState,\n ref: this,\n },\n })\n );\n }\n this.onStateChange.next(nextState);\n }\n\n processStateFromApi(state: { [key: string]: any }) {\n return state; // mapValues(state, value => tryEval(value, this.data, this._errors))\n }\n\n get location() {\n return this.props.location || (Builder.isBrowser ? location : ({} as any));\n }\n\n getCssFromFont(font: any, data?: any) {\n // TODO: compute what font sizes are used and only load those.......\n const family = font.family + (font.kind && !font.kind.includes('#') ? ', ' + font.kind : '');\n const name = family.split(',')[0];\n const url = font.fileUrl ? font.fileUrl : font.files && font.files.regular;\n let str = '';\n if (url && family && name) {\n str += `\n@font-face {\n font-family: \"${family}\";\n src: local(\"${name}\"), url('${url}') format('woff2');\n font-display: fallback;\n font-weight: 400;\n}\n `.trim();\n }\n\n if (font.files) {\n for (const weight in font.files) {\n const isNumber = String(Number(weight)) === weight;\n if (!isNumber) {\n continue;\n }\n // TODO: maybe limit number loaded\n const weightUrl = font.files[weight];\n if (weightUrl && weightUrl !== url) {\n str += `\n@font-face {\n font-family: \"${family}\";\n src: url('${weightUrl}') format('woff2');\n font-display: fallback;\n font-weight: ${weight};\n}\n `.trim();\n }\n }\n }\n return str;\n }\n\n componentWillUnmount() {\n this.unsubscribe();\n if (Builder.isBrowser) {\n window.removeEventListener('resize', this.resizeListener);\n window.removeEventListener('message', this.messageListener);\n }\n }\n\n getFontCss(data?: any) {\n if (!this.builder.allowCustomFonts) {\n return '';\n }\n // TODO: separate internal data from external\n return (\n (data?.customFonts &&\n data.customFonts.length &&\n data.customFonts.map((font: any) => this.getCssFromFont(font, data)).join(' ')) ||\n ''\n );\n }\n\n ensureFontsLoaded(data?: any) {\n if (this.builder.allowCustomFonts && data?.customFonts && Array.isArray(data.customFonts)) {\n for (const font of data.customFonts) {\n const url = font.fileUrl ? font.fileUrl : font.files && font.files.regular;\n if (!fontsLoaded.has(url)) {\n const html = this.getCssFromFont(font, data);\n fontsLoaded.add(url);\n if (!html) {\n continue;\n }\n const style = document.createElement('style');\n style.className = 'builder-custom-font';\n style.setAttribute('data-builder-custom-font', url);\n style.innerHTML = html;\n document.head.appendChild(style);\n }\n }\n }\n }\n\n getCss(data?: any) {\n const contentId = this.useContent?.id;\n let cssCode = data?.cssCode || '';\n if (contentId) {\n // Allow using `&` in custom CSS code like @emotion\n // E.g. `& .foobar { ... }` to scope CSS\n // TODO: handle if '&' is within a string like `content: \"&\"`\n cssCode = cssCode.replace(/&/g, `.builder-component-${contentId}`);\n }\n\n return cssCode + this.getFontCss(data);\n }\n\n get data() {\n const data = {\n ...(this.inlinedContent && this.inlinedContent.data?.state),\n ...this.externalState,\n ...this.state.state,\n };\n Object.assign(this.rootState, data);\n return data;\n }\n\n componentDidUpdate(prevProps: BuilderComponentProps) {\n // TODO: shallow diff\n if (this.props.data && prevProps.data !== this.props.data) {\n this.state.update((state: any) => {\n Object.assign(state, this.externalState);\n });\n }\n\n if (this.props.customComponents && this.props.customComponents !== prevProps.customComponents) {\n this.registerCustomComponents();\n }\n\n if (Builder.isEditing) {\n if (this.inlinedContent && prevProps.content !== this.inlinedContent) {\n this.onContentLoaded(this.inlinedContent.data, this.inlinedContent);\n }\n }\n }\n\n // FIXME: workaround to issue with CSS extraction and then hydration\n // (might be preact only)\n checkStyles(data: any) {\n if (this.styleRef) {\n const css = this.getCss(data);\n if (this.styleRef.innerHTML !== css) {\n this.styleRef.innerHTML = css;\n }\n }\n }\n\n reload() {\n this.setState({\n key: this.state.key + 1,\n });\n }\n\n get content() {\n let content = this.inlinedContent;\n if (content && (content as any).content) {\n // GraphQL workaround\n content = {\n ...content,\n data: (content as any).content,\n };\n }\n return content;\n }\n\n get externalState() {\n return {\n ...this.props.data,\n ...(this.props.locale ? { locale: this.props.locale } : {}),\n };\n }\n\n get useContent() {\n return this.content || this.state.context.builderContent;\n }\n\n render() {\n const content = this.content;\n\n const dataString =\n Builder.isBrowser &&\n this.externalState &&\n size(this.externalState) &&\n hash(this.externalState);\n let key = Builder.isEditing ? this.name : this.props.entry;\n if (key && !Builder.isEditing && dataString && dataString.length < 300) {\n key += ':' + dataString;\n }\n\n const WrapComponent = this.props.dataOnly ? React.Fragment : 'div';\n\n const contentId = this.useContent?.id;\n\n return (\n // TODO: data attributes for model, id, etc?\n <WrapComponent\n onClick={event => {\n // Prevent propagation from the root content component when editing to prevent issues\n // like client side routing triggering when links are clicked, unless this behavior is\n // disabled with the stopClickPropagationWhenEditing prop\n if (\n Builder.isEditing &&\n !this.props.isChild &&\n !this.props.stopClickPropagationWhenEditing\n ) {\n event.stopPropagation();\n }\n }}\n className={`builder-component ${contentId ? `builder-component-${contentId}` : ''}`}\n data-name={this.name}\n data-source=\"Rendered by Builder.io\"\n key={this.state.key}\n ref={ref => (this.ref = ref)}\n >\n <BuilderMetaContext.Consumer>\n {value => (\n <BuilderMetaContext.Provider\n value={\n typeof this.props.ampMode === 'boolean'\n ? {\n ...value,\n ampMode: this.props.ampMode,\n }\n : value\n }\n >\n <BuilderAsyncRequestsContext.Consumer>\n {value => {\n this._asyncRequests = value && value.requests;\n this._errors = value && value.errors;\n this._logs = value && value.logs;\n\n return (\n <BuilderContent\n isStatic={this.props.isStatic || Builder.isStatic}\n key={\n this.inlinedContent?.id ||\n ('content' in this.props && !this.isPreviewing\n ? 'null-content-prop'\n : 'no-content-prop')\n }\n builder={this.builder}\n ref={ref => (this.contentRef = ref)}\n // TODO: pass entry in\n contentLoaded={(data, content) => this.onContentLoaded(data, content)}\n options={{\n key,\n entry: this.props.entry,\n ...(content && { initialContent: [content] }),\n ...(!content &&\n 'content' in this.props &&\n !this.isPreviewing && { initialContent: [] }),\n ...(this.props.url && { url: this.props.url }),\n ...this.props.options,\n ...(this.props.locale ? { locale: this.props.locale } : {}),\n ...(this.options.codegen && {\n format: 'react',\n }),\n }}\n inline={\n this.props.inlineContent || (!this.isPreviewing && 'content' in this.props)\n }\n contentError={this.props.contentError}\n modelName={this.name || 'page'}\n nonce={this.props.nonce}\n >\n {(data, loading, fullData) => {\n if (this.props.dataOnly) {\n return null;\n }\n if (fullData && fullData.id) {\n if (this.state.breakpoints) {\n fullData.meta = fullData.meta || {};\n fullData.meta.breakpoints = this.state.breakpoints;\n }\n this.state.context.builderContent = fullData;\n }\n if (Builder.isBrowser) {\n Builder.nextTick(() => {\n this.checkStyles(data);\n });\n }\n\n const { codegen } = this.options;\n\n if (codegen && !this.Component && data?.blocksJs) {\n const builderComponentNames: string[] = Array.from(\n new Set(Builder.components.map((item: any) => item.name))\n );\n const reversedcomponents = Builder.components.slice().reverse();\n\n const builderComponents = builderComponentNames.map(name =>\n reversedcomponents.find((item: any) => item.class && item.name === name)\n );\n\n const useBuilderState = (initialState: any) => {\n const [, setTick] = React.useState(0);\n const [state] = React.useState(() =>\n onChange(initialState, function () {\n setTick(tick => tick + 1);\n })\n );\n\n return state;\n };\n\n const mappedComponentNames = builderComponentNames.map(name =>\n (name || '').replace(/[^\\w]+/gi, '')\n );\n\n const finalizedComponents = builderComponents.map(info =>\n wrapComponent(info)\n );\n\n this.Component = new Function(\n 'jsx',\n '_css',\n 'Builder',\n 'builder',\n 'React',\n 'useBuilderState',\n ...mappedComponentNames,\n data.blocksJs\n )(\n jsx,\n css,\n Builder,\n builder,\n React,\n useBuilderState,\n ...finalizedComponents\n );\n }\n\n const blocks = data?.blocks || [];\n\n const hasPixel = blocks.find((block: BuilderElement) =>\n block.id?.startsWith('builder-pixel')\n );\n\n if (data && !hasPixel && blocks.length > 0) {\n blocks.push(getBuilderPixel(builder.apiKey!));\n }\n\n // TODO: loading option - maybe that is what the children is or component prop\n // TODO: get rid of all these wrapper divs\n return data ? (\n <div\n data-builder-component={this.name}\n data-builder-content-id={fullData.id}\n {...(this.isPreviewing\n ? {\n 'data-builder-variation-id':\n fullData.testVariationId || fullData.variationId || fullData.id,\n }\n : {})}\n >\n {!codegen && this.getCss(data) && (\n <style\n nonce={this.props.nonce}\n ref={ref => (this.styleRef = ref)}\n className=\"builder-custom-styles\"\n dangerouslySetInnerHTML={{\n __html: this.getCss(data),\n }}\n />\n )}\n <BuilderStoreContext.Provider\n value={{\n ...this.state,\n rootState: this.rootState,\n state: this.data,\n content: fullData,\n renderLink: this.props.renderLink,\n }}\n >\n {codegen && this.Component ? (\n <this.Component data={this.data} context={this.state.context} />\n ) : (\n <BuilderBlocks\n key={String(!!data?.blocks?.length)}\n emailMode={this.props.emailMode}\n fieldName=\"blocks\"\n blocks={blocks}\n />\n )}\n </BuilderStoreContext.Provider>\n </div>\n ) : loading ? (\n <div data-builder-component={this.name} className=\"builder-loading\">\n {this.props.children}\n </div>\n ) : (\n <div data-builder-component={this.name} className=\"builder-no-content\" />\n );\n }}\n </BuilderContent>\n );\n }}\n </BuilderAsyncRequestsContext.Consumer>\n </BuilderMetaContext.Provider>\n )}\n </BuilderMetaContext.Consumer>\n </WrapComponent>\n );\n }\n\n evalExpression(expression: string) {\n const { data } = this;\n return String(expression).replace(/{{([^}]+)}}/g, (match, group) =>\n tryEval(group, data, this._errors)\n );\n }\n\n async handleRequest(\n propertyName: string,\n httpRequest: {\n url: string;\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n body?: any;\n headers?: Record<string, string>;\n }\n ) {\n const { url, method, body, headers } = httpRequest;\n\n const fetchCacheKey = JSON.stringify({ url, method, body, headers });\n // TODO: Builder.isEditing = just checks if iframe and parent page is this.builder.io or localhost:1234\n if (Builder.isIframe && fetchCache[fetchCacheKey]) {\n this.updateState(ctx => {\n ctx[propertyName] = fetchCache[fetchCacheKey];\n });\n return fetchCache[fetchCacheKey];\n }\n const request = async () => {\n const requestStart = Date.now();\n if (!Builder.isBrowser) {\n console.time('Fetch ' + fetchCacheKey);\n }\n let json: any;\n try {\n const fetchOptions = {\n method,\n headers,\n body,\n };\n if (method === 'GET') {\n delete fetchOptions.body;\n }\n const result = await fetch(url, fetchOptions);\n json = await result.json();\n } catch (err) {\n const error = toError(err);\n if (this._errors) {\n this._errors.push(error);\n }\n if (this._logs) {\n this._logs.push(`Fetch to ${fetchCacheKey} errored in ${Date.now() - requestStart}ms`);\n }\n return;\n } finally {\n if (!Builder.isBrowser) {\n console.timeEnd('Fetch ' + fetchCacheKey);\n if (this._logs) {\n this._logs.push(`Fetched ${fetchCacheKey} in ${Date.now() - requestStart}ms`);\n }\n }\n }\n\n if (json) {\n if (Builder.isIframe) {\n fetchCache[fetchCacheKey] = json;\n }\n // TODO: debounce next tick all of these when there are a bunch\n this.updateState(ctx => {\n ctx[propertyName] = json;\n });\n }\n\n return json;\n };\n const existing =\n this._asyncRequests &&\n (this._asyncRequests.find(\n req => isRequestInfo(req) && req.url === url\n ) as RequestInfo | null);\n if (existing) {\n const promise = existing.promise;\n promise.then(json => {\n if (json) {\n this.updateState(ctx => {\n ctx[propertyName] = json;\n });\n }\n });\n return promise;\n }\n const promise = request();\n Builder.nextTick(() => {\n if (this._asyncRequests) {\n this._asyncRequests.push(promise);\n }\n });\n return promise;\n }\n\n unsubscribe() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n this.subscriptions = new Subscription();\n }\n }\n\n handleBuilderRequest(propertyName: string, optionsString: string) {\n const options = tryEval(optionsString, this.data, this._errors);\n // TODO: this will screw up for multiple bits of data\n if (this.subscriptions) {\n this.unsubscribe();\n }\n // TODO: don't unsubscribe and resubscribe every time data changes, will make a TON of requests if that's the case when editing...\n // I guess will be cached then\n if (options) {\n // TODO: unsubscribe on destroy\n this.subscriptions.add(\n this.builder.queueGetContent(options.model, options).subscribe(matches => {\n if (matches) {\n this.updateState(ctx => {\n ctx[propertyName] = matches;\n });\n }\n })\n );\n }\n }\n\n onContentLoaded = (data: any, content: Content) => {\n if (this.name === 'page' && Builder.isBrowser) {\n if (data) {\n const { title, pageTitle, description, pageDescription } = data;\n\n if (title || pageTitle) {\n document.title = title || pageTitle;\n }\n\n if (description || pageDescription) {\n let descriptionTag = document.querySelector('meta[name=\"description\"]');\n\n if (!descriptionTag) {\n descriptionTag = document.createElement('meta');\n descriptionTag.setAttribute('name', 'description');\n document.head.appendChild(descriptionTag);\n }\n\n descriptionTag.setAttribute('content', description || pageDescription);\n }\n }\n }\n\n if (Builder.isEditing) {\n this.notifyStateChange();\n }\n\n if (this.props.contentLoaded) {\n this.props.contentLoaded(data, content);\n }\n\n if (data && data.inputs && Array.isArray(data.inputs) && data.inputs.length) {\n if (!data.state) {\n data.state = {};\n }\n\n data.inputs.forEach((input: any) => {\n if (input) {\n if (\n input.name &&\n input.defaultValue !== undefined &&\n data.state[input.name] === undefined\n ) {\n data.state[input.name] = input.defaultValue;\n }\n }\n });\n }\n\n if (data && data.state) {\n const newState = {\n ...this.state,\n updates: ((this.state && this.state.updates) || 0) + 1,\n state: Object.assign(this.rootState, {\n ...this.state.state,\n location: this.locationState,\n device: this.device,\n ...data.state,\n ...this.externalState,\n deviceSize: this.deviceSizeState,\n }),\n };\n if (this.mounted) {\n this.setState(newState);\n } else {\n this.state = newState;\n }\n }\n\n // TODO: also throttle on edits maybe\n if (data && data.jsCode && !this.options.codegen) {\n // Don't rerun js code when editing and not changed\n let skip = false;\n if (Builder.isEditing) {\n if (this.lastJsCode === data.jsCode) {\n skip = true;\n } else {\n this.lastJsCode = data.jsCode;\n }\n }\n\n if (!skip) {\n const state = this.state.state;\n\n // TODO: real editing method\n try {\n const result = new Function(\n 'data',\n 'ref',\n 'state',\n 'update',\n 'element',\n 'Builder',\n 'builder',\n 'context',\n data.jsCode\n )(data, this, state, this.state.update, this.ref, Builder, builder, this.state.context);\n\n // TODO: allow exports = { } syntax?\n // TODO: do something with reuslt like view - methods, computed, actions, properties, template, etc etc\n } catch (err) {\n const error = toError(err);\n if (Builder.isBrowser) {\n console.warn(\n 'Builder custom code error:',\n error.message,\n 'in',\n data.jsCode,\n error.stack\n );\n } else {\n if (isDebug()) {\n console.debug(\n 'Builder custom code error:',\n error.message,\n 'in',\n data.jsCode,\n error.stack\n );\n }\n // Add to req.options.errors to return to client\n }\n }\n }\n }\n\n if (data && data.httpRequests /* || data.builderData @DEPRECATED */ && !this.props.noAsync) {\n // Don't rerun http requests when editing and not changed\n // No longer needed?\n let skip = false;\n\n if (!skip) {\n // TODO: another structure for this\n for (const key in data.httpRequests) {\n const httpRequest: BuilderRequest | string | undefined = data.httpRequests[key];\n if (httpRequest && (!this.data[key] || Builder.isEditing)) {\n const isCoreRequest =\n typeof httpRequest === 'object' &&\n httpRequest['@type'] === '@builder.io/core:Request';\n if (Builder.isBrowser) {\n const finalUrl = isCoreRequest\n ? this.evalExpression(httpRequest.request.url)\n : this.evalExpression(httpRequest as string);\n\n if (Builder.isEditing && this.lastHttpRequests[key] === finalUrl) {\n continue;\n }\n this.lastHttpRequests[key] = finalUrl;\n\n if (isCoreRequest) {\n this.handleRequest(key, {\n url: finalUrl,\n method: httpRequest.request.method,\n body: httpRequest.request.body,\n headers: httpRequest.request.headers,\n });\n } else {\n this.handleRequest(key, {\n url: finalUrl,\n method: 'GET',\n });\n }\n const currentSubscription = this.httpSubscriptionPerKey[key];\n if (currentSubscription) {\n currentSubscription.unsubscribe();\n }\n\n // TODO: fix this\n const newSubscription = (this.httpSubscriptionPerKey[key] =\n this.onStateChange.subscribe(() => {\n const newUrl = isCoreRequest\n ? this.evalExpression(httpRequest.request.url)\n : this.evalExpression(httpRequest as string);\n if (newUrl !== finalUrl) {\n if (isCoreRequest) {\n this.handleRequest(key, {\n url: newUrl,\n method: httpRequest.request.method,\n body: httpRequest.request.body,\n headers: httpRequest.request.headers,\n });\n } else {\n this.handleRequest(key, {\n url: newUrl,\n method: 'GET',\n });\n }\n this.lastHttpRequests[key] = newUrl;\n }\n }));\n this.subscriptions.add(newSubscription);\n } else {\n if (isCoreRequest) {\n this.handleRequest(key, {\n url: this.evalExpression(httpRequest.request.url),\n method: httpRequest.request.method,\n body: httpRequest.request.body,\n headers: httpRequest.request.headers,\n });\n } else {\n this.handleRequest(key, {\n url: this.evalExpression(httpRequest as string),\n method: 'GET',\n });\n }\n }\n }\n }\n }\n }\n };\n}\n","import { Builder, Component } from '@builder.io/sdk';\n\ninterface ReactComponent extends Component {}\n\nexport function BuilderBlock(options: ReactComponent) {\n options.type = 'react';\n\n return Builder.Component(options);\n}\n","import { Component, Builder } from '@builder.io/sdk';\n\n/**\n * Update metadata for a Builder component\n *\n * @param component Builder react component\n * @param fn Updater\n *\n * @example\n * updatMetadata(TextBlock, current => ({\n * ...current,\n * fields: [\n * ...curent.fields,\n * { name: 'myNewField', type: 'string' }\n * ]\n * }))\n */\nexport function updateMetadata(\n component: Function | string,\n fn: (currentMetadata: Component | null) => Component | void\n) {\n const match =\n Builder.components.find(item => {\n if (typeof component === 'string') {\n return item.name === component;\n } else {\n return item.class === item;\n }\n }) || null;\n\n const updated = fn(match);\n if (match && updated) {\n // re-registering the same component will replace it\n Builder.registerComponent(updated.class || match.class, updated);\n } else if (match && !updated) {\n // TODO: have a way to message to remove component\n } else if (!match && updated) {\n Builder.registerComponent(updated.class, updated);\n }\n}\n","import { Component } from '@builder.io/sdk';\nimport { BuilderBlock } from '../decorators/builder-block.decorator';\n\nexport function withBuilder(component: Function, options: Component) {\n BuilderBlock(options)(component as any);\n return component;\n}\n","'use client';\nimport React from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlock } from '../components/builder-block.component';\n\nconst isBuilderElement = (item: unknown): item is BuilderElement => {\n return Boolean(\n typeof item === 'object' && item && (item as any)?.['@type'] === '@builder.io/sdk:Element'\n );\n};\n\n/**\n * Higher order component for passing Builder.io children as React children\n *\n * @example\n * ```tsx\n *\n * const MyButton = props => <Button>\n * {children}\n * </Button>\n *\n * const ButtonWithBuilderChildren = withChildren(MyButton)\n *\n * Builder.registerComponent(ButtonWithBuilderChildren, {\n * name: 'MyButton',\n * defaultChildren: [\n * {\n * '@type': '@builder.io/sdk:Element'\n * }\n * ]\n * })\n * ```\n */\nexport const withChildren = <P extends object>(Component: React.ComponentType<P>) => {\n const HOC = React.forwardRef<any, React.PropsWithChildren<P> & { builderBlock?: BuilderElement }>(\n (props, ref) => {\n const useProps = { ...props };\n const children =\n props.children ||\n (props.builderBlock &&\n props.builderBlock.children &&\n props.builderBlock.children.map(child => <BuilderBlock key={child.id} block={child} />));\n\n const componentOptions = props.builderBlock?.component?.options;\n if (!!componentOptions) {\n Object.keys(componentOptions).forEach(key => {\n const value = componentOptions[key];\n if (Array.isArray(value) && value.every(isBuilderElement)) {\n useProps[key] = value.map(child => <BuilderBlock key={child.id} block={child} />);\n } else if (isBuilderElement(value)) {\n useProps[key] = <BuilderBlock block={value} />;\n }\n });\n }\n\n return (\n // getting type errors due to `@types/react` version mismatches. Can safely ignore.\n // @ts-ignore\n <Component {...useProps} ref={ref}>\n {children}\n </Component>\n );\n }\n );\n\n (HOC as any).builderOptions = {\n canHaveChildren: true,\n };\n\n return HOC;\n};\n","'use client';\nimport React from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlock } from '../components/builder-block.component';\n\n/**\n * Higher order component for passing Builder.io styles and attributes directly\n * to the component child without wrapping\n *\n * Useful when you need styles etc applied directly to the component without a\n * wrapping element (e.g. div), and you are already forwarding all props and attributes\n * (e.g. <YourComponent {...props} />)\n *\n * 👉 Important: make sure you always add props.className,\n * even if you supply a className too\n *\n * @example\n * ```tsx\n *\n * const MyButton = props => <Button\n * {...props}\n * className={'my-button ' + (props.className || '')}>\n * Hello there!\n * </Button>\n *\n * const ButtonWithBuilderChildren = noWrap(MyButton)\n *\n * Builder.registerComponent(ButtonWithBuilderChildren, {\n * name: 'MyButton',\n * })\n * ```\n */\nexport const noWrap = <P extends object>(Component: React.ComponentType<P>) => {\n const HOC = React.forwardRef((props: React.PropsWithChildren<P> & { attributes?: any }, ref) => {\n const finalProps = {\n ...props,\n ...props.attributes,\n };\n // getting type errors due to `@types/react` version mismatches. Can safely ignore.\n // @ts-ignore\n return <Component {...finalProps} ref={ref} />;\n });\n (HOC as any).builderOptions = {\n noWrap: true,\n };\n\n return HOC;\n};\n","/** @jsx jsx */\nimport { jsx, InterpolationWithTheme } from '@emotion/core';\nimport React from 'react';\nimport { Builder, BuilderElement } from '@builder.io/sdk';\nimport { withBuilder } from '../functions/with-builder';\nimport { BuilderStoreContext } from '../store/builder-store';\nimport { tryEval } from '../functions/try-eval';\n\nconst iconUrl =\n 'https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-text_fields-24px%20(1).svg?alt=media&token=12177b73-0ee3-42ca-98c6-0dd003de1929';\n\nexport interface TextProps {\n text: string;\n builderBlock?: BuilderElement;\n}\n\nclass TextComponent extends React.Component<TextProps> {\n textRef: HTMLSpanElement | null = null;\n\n componentDidMount() {\n // test if there are any expressions in text before assigning innerHTML\n if (this.textRef && !/{{([^}]+)}}/.test(this.props.text)) {\n this.textRef.innerHTML = this.props.text;\n }\n }\n\n evalExpression(expression: string, state: any) {\n // Don't interpolate when inline editing\n if (this.allowTextEdit) {\n return String(expression);\n }\n return String(expression).replace(/{{([^}]+)}}/g, (match, group) => tryEval(group, state));\n }\n\n get allowTextEdit() {\n return (\n Builder.isBrowser &&\n Builder.isEditing &&\n location.search.includes('builder.allowTextEdit=true') &&\n !(\n this.props.builderBlock &&\n this.props.builderBlock.bindings &&\n (this.props.builderBlock.bindings['component.options.text'] ||\n this.props.builderBlock.bindings['options.text'] ||\n this.props.builderBlock.bindings['text'])\n )\n );\n }\n\n render() {\n const textCSS: InterpolationWithTheme<any> = {\n outline: 'none',\n '& p:first-of-type, & .builder-paragraph:first-of-type': {\n margin: 0,\n },\n '& > p, & .builder-paragraph': {\n color: 'inherit',\n lineHeight: 'inherit',\n letterSpacing: 'inherit',\n fontWeight: 'inherit',\n fontSize: 'inherit',\n textAlign: 'inherit',\n fontFamily: 'inherit',\n },\n };\n\n return (\n <BuilderStoreContext.Consumer>\n {state => {\n if (state.content.meta?.rtlMode) {\n textCSS.direction = 'rtl';\n }\n\n return (\n <React.Fragment>\n {/* TODO: <BuilderEditableText component that wraps this for other components with text */}\n <span\n ref={ref => {\n this.textRef = ref;\n }}\n css={textCSS}\n className={\n /* NOTE: This class name must be \"builder-text\" for inline editing to work in the Builder editor */\n 'builder-text'\n }\n {...{\n dangerouslySetInnerHTML: {\n __html: this.evalExpression(\n this.props.text || (this.props as any).content || '',\n state.state\n ),\n },\n }}\n />\n </React.Fragment>\n );\n }}\n </BuilderStoreContext.Consumer>\n );\n }\n}\n\nexport const Text = withBuilder(TextComponent, {\n name: 'Text',\n static: true,\n image: iconUrl,\n inputs: [\n {\n name: 'text',\n type: 'html',\n required: true,\n autoFocus: true,\n bubble: true,\n defaultValue: 'Enter some text...',\n },\n ],\n // Maybe optionally a function that takes in some params like block vs absolute, etc\n defaultStyles: {\n lineHeight: 'normal',\n height: 'auto',\n textAlign: 'center',\n },\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React, { useContext } from 'react';\nimport { Builder } from '@builder.io/sdk';\nimport { BuilderBlocks } from '../components/builder-blocks.component';\nimport { BuilderStoreContext } from '../store/builder-store';\n\nBuilder.registerComponent(Slot, {\n name: 'Slot',\n description: 'Allow child blocks to be inserted into this content when used as a Symbol',\n docsLink: 'https://www.builder.io/c/docs/symbols-with-blocks',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F3aad6de36eae43b59b52c85190fdef56',\n\n // Maybe wrap this for canHaveChildren so bind children to this hm\n inputs: [{ name: 'name', type: 'string', required: true, defaultValue: 'children' }],\n});\n\ntype DropzoneProps = {\n name: string;\n};\n\nexport function Slot(props: DropzoneProps) {\n const { name } = props;\n const context = useContext(BuilderStoreContext);\n\n const isEditingThisSlot = !context.context.symbolId;\n\n return (\n <div\n css={{\n pointerEvents: 'auto',\n }}\n {...(isEditingThisSlot && {\n 'builder-slot': name,\n })}\n >\n <BuilderBlocks\n child\n parentElementId={context.context.symbolId}\n dataPath={`symbol.data.${name}`}\n blocks={context.state[name] || []}\n />\n </div>\n );\n}\n","'use client';\nimport React from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { withBuilder } from '../functions/with-builder';\nimport { BuilderBlock as BuilderBlockComponent } from '../components/builder-block.component';\n\nexport interface FragmentProps {\n builderBlock?: BuilderElement;\n}\n\nclass FragmentComponent extends React.Component<FragmentProps> {\n render() {\n return (\n this.props.builderBlock &&\n this.props.builderBlock.children &&\n this.props.builderBlock.children.map((block, index) => (\n <BuilderBlockComponent block={block} key={block.id} index={index} />\n ))\n );\n }\n}\n\nexport const Fragment = withBuilder(FragmentComponent, {\n name: 'Core:Fragment',\n canHaveChildren: true,\n noWrap: true,\n static: true,\n hideFromInsertMenu: true,\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\n\nimport { BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlocks } from '../components/builder-blocks.component';\nimport { withBuilder } from '../functions/with-builder';\nimport { Link } from '../components/Link';\nimport { Breakpoints, getSizesForBreakpoints } from '../constants/device-sizes.constant';\n\nconst DEFAULT_ASPECT_RATIO = 0.7004048582995948;\n\nconst defaultBlocks: BuilderElement[] = [\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n flexShrink: '0',\n position: 'relative',\n marginTop: '30px',\n textAlign: 'center',\n lineHeight: 'normal',\n height: 'auto',\n minHeight: '20px',\n minWidth: '20px',\n overflow: 'hidden',\n },\n },\n component: {\n name: 'Image',\n options: {\n image:\n 'https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d',\n backgroundPosition: 'center',\n backgroundSize: 'cover',\n aspectRatio: DEFAULT_ASPECT_RATIO,\n },\n },\n },\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n flexShrink: '0',\n position: 'relative',\n marginTop: '30px',\n textAlign: 'center',\n lineHeight: 'normal',\n height: 'auto',\n },\n },\n component: {\n name: 'Text',\n options: {\n text: '<p>Enter some text...</p>',\n },\n },\n },\n];\n\nclass ColumnsComponent extends React.Component<any> {\n // TODO: Column interface\n get columns(): any[] {\n return this.props.columns || [];\n }\n\n get gutterSize(): number {\n return typeof this.props.space === 'number' ? this.props.space || 0 : 20;\n }\n\n getWidth(index: number) {\n return (this.columns[index] && this.columns[index].width) || 100 / this.columns.length;\n }\n\n getColumnWidth(index: number) {\n const { columns, gutterSize } = this;\n const width = this.getWidth(index);\n\n const subtractWidth = gutterSize * (columns.length - 1) * (width / 100);\n\n return `calc(${width}% - ${subtractWidth}px)`;\n }\n\n render() {\n const { columns, gutterSize } = this;\n const contentBreakpoints: Breakpoints =\n this.props.builderState?.context.builderContent?.meta?.breakpoints || {};\n const breakpointSizes = getSizesForBreakpoints(contentBreakpoints);\n\n return (\n // FIXME: make more elegant\n <React.Fragment>\n <div\n className=\"builder-columns\"\n css={{\n display: 'flex',\n height: '100%',\n ...(this.props.stackColumnsAt !== 'never' && {\n [`@media (max-width: ${\n this.props.stackColumnsAt !== 'tablet'\n ? breakpointSizes.small.max\n : breakpointSizes.medium.max\n }px)`]: {\n flexDirection: this.props.reverseColumnsWhenStacked ? 'column-reverse' : 'column',\n alignItems: 'stretch',\n },\n }),\n }}\n >\n {columns.map((col, index) => {\n const TagName = col.link ? Link : 'div';\n\n // TODO: pass size down in context\n\n return (\n <React.Fragment key={index}>\n <TagName\n className=\"builder-column\"\n {...(col.link ? { href: col.link } : null)}\n // TODO: generate width and margin-left as CSS instead so can override with pure CSS for best responsieness\n // and no use of !important\n css={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n lineHeight: 'normal',\n ['& > .builder-blocks']: {\n flexGrow: 1,\n },\n width: this.getColumnWidth(index),\n marginLeft: index === 0 ? 0 : gutterSize,\n ...(this.props.stackColumnsAt !== 'never' && {\n [`@media (max-width: ${\n this.props.stackColumnsAt !== 'tablet'\n ? breakpointSizes.small.max\n : breakpointSizes.medium.max\n }px)`]: {\n width: '100%',\n marginLeft: 0,\n },\n }),\n }}\n >\n <BuilderBlocks\n key={index}\n // TODO: childOf [parentBlocks]?\n child\n parentElementId={this.props.builderBlock && this.props.builderBlock.id}\n blocks={col.blocks}\n dataPath={`component.options.columns.${index}.blocks`}\n />\n </TagName>\n </React.Fragment>\n );\n })}\n </div>\n </React.Fragment>\n );\n }\n}\n\nexport const Columns = withBuilder(ColumnsComponent, {\n name: 'Columns',\n static: true,\n inputs: [\n {\n name: 'columns',\n type: 'array',\n broadcast: true,\n subFields: [\n {\n name: 'blocks',\n type: 'array',\n hideFromUI: true,\n defaultValue: defaultBlocks,\n },\n {\n name: 'width',\n type: 'number',\n hideFromUI: true,\n helperText: 'Width %, e.g. set to 50 to fill half of the space',\n },\n {\n name: 'link',\n type: 'url',\n helperText: 'Optionally set a url that clicking this column will link to',\n },\n ],\n defaultValue: [{ blocks: defaultBlocks }, { blocks: defaultBlocks }],\n onChange: (options: Map<string, any>) => {\n function clearWidths() {\n columns.forEach(col => {\n col.delete('width');\n });\n }\n\n const columns = options.get('columns') as Array<Map<String, any>>;\n\n if (Array.isArray(columns)) {\n const containsColumnWithWidth = !!columns.find(col => col.get('width'));\n\n if (containsColumnWithWidth) {\n const containsColumnWithoutWidth = !!columns.find(col => !col.get('width'));\n if (containsColumnWithoutWidth) {\n clearWidths();\n } else {\n const sumWidths = columns.reduce((memo, col) => {\n return memo + col.get('width');\n }, 0);\n const widthsDontAddUp = sumWidths !== 100;\n if (widthsDontAddUp) {\n clearWidths();\n }\n }\n }\n }\n },\n },\n {\n name: 'space',\n type: 'number',\n defaultValue: 20,\n helperText: 'Size of gap between columns',\n advanced: true,\n },\n {\n name: 'stackColumnsAt',\n type: 'string',\n defaultValue: 'tablet',\n helperText: 'Convert horizontal columns to vertical at what device size',\n enum: ['tablet', 'mobile', 'never'],\n advanced: true,\n },\n {\n name: 'reverseColumnsWhenStacked',\n type: 'boolean',\n defaultValue: false,\n helperText: 'When stacking columns for mobile devices, reverse the ordering',\n advanced: true,\n },\n ],\n});\n","'use client';\nimport React from 'react';\nimport { Builder } from '@builder.io/sdk';\nimport { withBuilder } from '../functions/with-builder';\n\nclass EmbedComponent extends React.Component<any> {\n elementRef: HTMLElement | null = null;\n\n scriptsInserted = new Set();\n scriptsRun = new Set();\n\n shouldComponentUpdate(nextProps: Readonly<any>): boolean {\n return nextProps.content !== this.props.content;\n }\n\n componentDidUpdate(prevProps: any) {\n if (this.props.content !== prevProps.content) {\n this.findAndRunScripts();\n }\n }\n\n componentDidMount() {\n this.findAndRunScripts();\n }\n\n findAndRunScripts() {\n if (this.elementRef && typeof window !== 'undefined') {\n const scripts = this.elementRef.getElementsByTagName('script');\n for (let i = 0; i < scripts.length; i++) {\n const script = scripts[i];\n if (script.src) {\n if (this.scriptsInserted.has(script.src)) {\n continue;\n }\n this.scriptsInserted.add(script.src);\n const newScript = document.createElement('script');\n newScript.async = true;\n newScript.src = script.src;\n document.head.appendChild(newScript);\n } else {\n if (this.scriptsRun.has(script.innerText)) {\n continue;\n }\n this.scriptsRun.add(script.innerText);\n try {\n new Function(script.innerText)();\n } catch (error) {\n console.warn('Builder custom code component error:', error);\n }\n }\n }\n }\n }\n\n get content() {\n // Remove scripts on server - if they manipulate dom there can be issues on hydration\n // TODO: allow this to by bypassed by context or prop that says if this is going to be HTML\n // loaded without client JS/hydration (static)\n if (Builder.isServer) {\n return (this.props.content || '').replace(/<script[\\s\\S]*?<\\/script>/g, '');\n }\n return this.props.content;\n }\n\n render() {\n return (\n <div\n ref={ref => (this.elementRef = ref)}\n className=\"builder-embed\"\n dangerouslySetInnerHTML={{ __html: this.content }}\n />\n );\n }\n}\n\nexport const Embed = withBuilder(EmbedComponent, {\n name: 'Embed',\n static: true,\n inputs: [\n {\n name: 'url',\n type: 'url',\n required: true,\n defaultValue: '',\n helperText: 'e.g. enter a youtube url, google map, etc',\n },\n {\n name: 'content',\n type: 'html',\n defaultValue: `<div style=\"padding: 20px; text-align: center\">(Choose an embed URL)<div>`,\n hideFromUI: true,\n },\n ],\n});\n","'use client';\nimport React from 'react';\nimport { BuilderElement, Builder } from '@builder.io/sdk';\nimport { withBuilder } from '../functions/with-builder';\n\ninterface Props {\n code: string;\n builderBlock?: BuilderElement;\n replaceNodes?: boolean;\n scriptsClientOnly?: boolean;\n}\n\n// TODO: settings context to pass this down. do in shopify-specific generated code\nconst globalReplaceNodes = ({} as { [key: string]: Node[] }) || null;\n\nconst isShopify = Builder.isBrowser && 'Shopify' in window;\n\nif (Builder.isBrowser && globalReplaceNodes) {\n const customCodeQuerySelector = '.builder-custom-code';\n\n try {\n let allCustomCodeElements = Array.from(document.querySelectorAll(customCodeQuerySelector));\n\n // Search each template element (if present) for custom code blocks since\n // querySelectorAll cannot search all templates that we use for variations, because they are\n // considered document fragments and are not a part of the DOM.\n const builderTemplates = document.querySelectorAll('template[data-template-variant-id]');\n if (builderTemplates.length) {\n Array.from(builderTemplates).forEach(template => {\n const content: DocumentFragment = (template as any).content;\n const codeElements = content.querySelectorAll(customCodeQuerySelector);\n if (codeElements.length) {\n allCustomCodeElements = allCustomCodeElements.concat(Array.from(codeElements));\n }\n });\n }\n\n allCustomCodeElements.forEach(el => {\n const parent = el.parentElement;\n const id = parent && parent.getAttribute('builder-id');\n if (id) {\n globalReplaceNodes[id] = globalReplaceNodes[id] || [];\n globalReplaceNodes[id].push(isShopify ? el : el.cloneNode(true));\n }\n });\n } catch (err) {\n console.error('Builder replace nodes error:', err);\n }\n}\n\nclass CustomCodeComponent extends React.Component<Props> {\n elementRef: Element | null = null;\n originalRef: Node | Element | null = null;\n\n scriptsInserted = new Set();\n scriptsRun = new Set();\n\n firstLoad = true;\n replaceNodes = false;\n state = {\n hydrated: false,\n };\n\n constructor(props: Props) {\n super(props);\n if (Builder.isBrowser) {\n const id = this.props.builderBlock?.id;\n this.replaceNodes = Boolean(\n Builder.isBrowser && (props.replaceNodes || isShopify) && id && globalReplaceNodes?.[id]\n );\n\n if (this.firstLoad && this.props.builderBlock) {\n if (id && globalReplaceNodes?.[id]) {\n const el = globalReplaceNodes[id].shift() || null;\n this.originalRef = el;\n if (globalReplaceNodes[id].length === 0) {\n delete globalReplaceNodes[id];\n }\n } else if (this.replaceNodes) {\n const existing = document.querySelectorAll(\n `.${this.props.builderBlock.id} .builder-custom-code`\n );\n if (existing.length === 1) {\n const node = existing[0];\n this.originalRef = node as HTMLElement;\n (this.originalRef as Element).remove();\n }\n }\n }\n }\n }\n\n shouldComponentUpdate(nextProps: Readonly<Props>): boolean {\n return nextProps.code !== this.props.code;\n }\n\n get noReactRender() {\n // Don't render liquid client side\n return Boolean(isShopify && this.props.code?.match(/{[{%]/g));\n }\n\n get isHydrating() {\n return !isShopify && this.originalRef;\n }\n\n componentDidUpdate(prevProps: Props) {\n if (this.props.code !== prevProps.code) {\n this.findAndRunScripts();\n }\n }\n\n componentDidMount() {\n this.firstLoad = false;\n if (!this.replaceNodes) {\n if (this.isHydrating) {\n // first render need to match what's on ssr (issue with next.js)\n this.setState({\n hydrated: true,\n });\n Builder.nextTick(() => this.findAndRunScripts());\n } else {\n this.findAndRunScripts();\n }\n }\n if (Builder.isBrowser && this.replaceNodes && this.originalRef && this.elementRef) {\n this.elementRef.appendChild(this.originalRef);\n }\n }\n\n findAndRunScripts() {\n if (this.elementRef && typeof window !== 'undefined') {\n const scripts = this.elementRef.getElementsByTagName('script');\n for (let i = 0; i < scripts.length; i++) {\n const script = scripts[i];\n if (script.src) {\n if (this.scriptsInserted.has(script.src)) {\n continue;\n }\n this.scriptsInserted.add(script.src);\n const newScript = document.createElement('script');\n newScript.async = true;\n newScript.src = script.src;\n document.head.appendChild(newScript);\n } else if (\n !script.type ||\n ['text/javascript', 'application/javascript', 'application/ecmascript'].includes(\n script.type\n )\n ) {\n if (this.scriptsRun.has(script.innerText)) {\n continue;\n }\n try {\n this.scriptsRun.add(script.innerText);\n new Function(script.innerText)();\n } catch (error) {\n console.warn('Builder custom code component error:', error);\n }\n }\n }\n }\n }\n\n get code() {\n // when ssr'd by nextjs it'll break hydration if initial client render doesn't match ssr\n if (\n (Builder.isServer || (this.isHydrating && this.firstLoad)) &&\n this.props.scriptsClientOnly\n ) {\n return (this.props.code || '').replace(\n /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n ''\n );\n }\n return this.props.code;\n }\n\n render() {\n // TODO: remove <script> tags for server render (unless has some param to say it's only goingn to be run on server)\n // like embed\n return (\n <div\n ref={ref => (this.elementRef = ref)}\n // TODO: add a class when node replaced in (?)\n className=\"builder-custom-code\"\n {...(!this.replaceNodes &&\n !this.noReactRender && {\n dangerouslySetInnerHTML: { __html: this.code },\n })}\n />\n );\n }\n}\n\nexport const CustomCode = withBuilder(CustomCodeComponent, {\n name: 'Custom Code',\n static: true,\n requiredPermissions: ['editCode'],\n inputs: [\n {\n name: 'code',\n type: 'html',\n required: true,\n defaultValue: '<p>Hello there, I am custom HTML code!</p>',\n code: true,\n },\n {\n name: 'replaceNodes',\n type: 'boolean',\n helperText: 'Preserve server rendered dom nodes',\n advanced: true,\n ...(isShopify && {\n defaultValue: true,\n }),\n },\n {\n name: 'scriptsClientOnly',\n type: 'boolean',\n helperText:\n 'Only print and run scripts on the client. Important when scripts influence DOM that could be replaced when client loads',\n advanced: true,\n ...(!isShopify && {\n defaultValue: true,\n }),\n },\n ],\n} as any);\n","export const IMAGE_FILE_TYPES = [\n 'jpeg',\n 'jpg',\n 'png',\n 'svg',\n 'webp',\n 'gif',\n 'jfif',\n 'pjpeg',\n 'pjp',\n 'apng',\n 'avif',\n 'tif',\n 'tiff',\n 'heif',\n 'bmp',\n 'eps',\n 'raw',\n 'cr2',\n 'nef',\n 'orf',\n 'sr2',\n 'psd',\n 'heic',\n 'dib',\n 'ai',\n];\n\nexport const VIDEO_FILE_TYPES = [\n 'mp4',\n 'webm',\n 'mkv',\n 'flv',\n 'vob',\n 'ogv',\n 'ogg',\n 'drc',\n 'gif',\n 'gifv',\n 'mng',\n 'avi',\n 'mov',\n 'qt',\n 'mts',\n 'm2ts',\n 'ts',\n 'wmv',\n 'yuv',\n 'rm',\n 'rmvb',\n 'viv',\n 'asf',\n 'amv',\n 'm4p',\n 'mpeg',\n 'mpe',\n 'm2v',\n 'm4v',\n 'svi',\n '3gp',\n '3g2',\n 'mxf',\n 'roq',\n 'nsv',\n 'f4v',\n 'f4p',\n 'f4a',\n 'f4b',\n];\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\n\nimport { BuilderBlock as BuilderBlockComponent } from '../components/builder-block.component';\nimport { BuilderElement, Builder } from '@builder.io/sdk';\nimport { BuilderMetaContext } from '../store/builder-meta';\nimport { withBuilder } from '../functions/with-builder';\nimport { throttle } from '../functions/throttle';\nimport { Breakpoints, getSizesForBreakpoints } from '../constants/device-sizes.constant';\nimport { IMAGE_FILE_TYPES } from 'src/constants/file-types.constant';\n\nconst isNewReact = 'use' in React;\n\n// Taken from (and modified) the shopify theme script repo\n// https://github.com/Shopify/theme-scripts/blob/bcfb471f2a57d439e2f964a1bb65b67708cc90c3/packages/theme-images/images.js#L59\nfunction removeProtocol(path: string) {\n return path.replace(/http(s)?:/, '');\n}\n\nfunction isElementInViewport(el: HTMLElement) {\n const rect = el.getBoundingClientRect();\n\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\nfunction getShopifyImageUrl(src: string, size: string): string | null {\n if (!src || !src?.match(/cdn\\.shopify\\.com/) || !size) {\n return src;\n }\n\n if (size === 'master') {\n return removeProtocol(src);\n }\n\n const match = src.match(/(_\\d+x(\\d+)?)?(\\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\\?v=\\d+)?)/i);\n\n if (match) {\n const prefix = src.split(match[0]);\n const suffix = match[3];\n const useSize = size.match('x') ? size : `${size}x`;\n\n return removeProtocol(`${prefix[0]}_${useSize}${suffix}`);\n }\n\n return null;\n}\n\nconst DEFAULT_ASPECT_RATIO = 0.7041;\n\nexport function updateQueryParam(uri = '', key: string, value: string | number | boolean): string {\n const re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i');\n const separator = uri.indexOf('?') !== -1 ? '&' : '?';\n if (uri.match(re)) {\n return uri.replace(re, '$1' + key + '=' + encodeURIComponent(value) + '$2');\n }\n\n return uri + separator + key + '=' + encodeURIComponent(value);\n}\n\nexport function getSrcSet(url: string): string {\n if (!url) {\n return url;\n }\n\n const sizes = [100, 200, 400, 800, 1200, 1600, 2000];\n\n if (url.match(/builder\\.io/)) {\n let srcUrl = url;\n const widthInSrc = Number(url.split('?width=')[1]);\n if (!isNaN(widthInSrc)) {\n srcUrl = `${srcUrl} ${widthInSrc}w`;\n }\n\n return sizes\n .filter(size => size !== widthInSrc)\n .map(size => `${updateQueryParam(url, 'width', size)} ${size}w`)\n .concat([srcUrl])\n .join(', ');\n }\n\n if (url.match(/cdn\\.shopify\\.com/)) {\n return sizes\n .map(size => [getShopifyImageUrl(url, `${size}x${size}`), size])\n .filter(([sizeUrl]) => !!sizeUrl)\n .map(([sizeUrl, size]) => `${sizeUrl} ${size}w`)\n .concat([url])\n .join(', ');\n }\n\n return url;\n}\n\nexport const getSizes = (\n sizes: string,\n block: BuilderElement,\n contentBreakpoints: Breakpoints = {}\n) => {\n let useSizes = '';\n\n if (sizes) {\n const splitSizes = sizes.split(',');\n const sizesLength = splitSizes.length;\n useSizes = splitSizes\n .map((size: string, index) => {\n if (sizesLength === index + 1) {\n // If it is the last size in the array, then we want to strip out\n // any media query information. According to the img spec, the last\n // value for sizes cannot have a media query. If there is a media\n // query at the end it breaks AMP mode rendering\n // https://github.com/ampproject/amphtml/blob/b6313e372fdd1298928e2417dcc616b03288e051/src/size-list.js#L169\n return size.replace(/\\([\\s\\S]*?\\)/g, '').trim();\n } else {\n return size;\n }\n })\n .join(', ');\n } else if (block && block.responsiveStyles) {\n const generatedSizes: string[] = [];\n let hasSmallOrMediumSize = false;\n const unitRegex = /^\\d+/;\n\n const breakpointSizes = getSizesForBreakpoints(contentBreakpoints);\n if (block.responsiveStyles?.small?.width?.match(unitRegex)) {\n hasSmallOrMediumSize = true;\n const mediaQuery = `(max-width: ${breakpointSizes.small.max}px)`;\n const widthAndQuery = `${mediaQuery} ${block.responsiveStyles.small.width.replace(\n '%',\n 'vw'\n )}`;\n generatedSizes.push(widthAndQuery);\n }\n\n if (block.responsiveStyles?.medium?.width?.match(unitRegex)) {\n hasSmallOrMediumSize = true;\n const mediaQuery = `(max-width: ${breakpointSizes.medium.max}px)`;\n const widthAndQuery = `${mediaQuery} ${block.responsiveStyles.medium.width.replace(\n '%',\n 'vw'\n )}`;\n generatedSizes.push(widthAndQuery);\n }\n\n if (block.responsiveStyles?.large?.width) {\n const width = block.responsiveStyles.large.width.replace('%', 'vw');\n generatedSizes.push(width);\n } else if (hasSmallOrMediumSize) {\n generatedSizes.push('100vw');\n }\n\n if (generatedSizes.length) {\n useSizes = generatedSizes.join(', ');\n }\n }\n\n return useSizes;\n};\n\n// TODO: use picture tag to support more formats\nclass ImageComponent extends React.Component<any, { imageLoaded: boolean; load: boolean }> {\n get useLazyLoading() {\n if (this.props.highPriority) {\n return false;\n }\n // Use builder.getLocation()\n return Builder.isBrowser && location.search.includes('builder.lazyLoadImages=false')\n ? false\n : Builder.isBrowser && location.href.includes('builder.lazyLoadImages=true')\n ? true\n : this.props.lazy;\n }\n\n // TODO: setting to always fade in the images (?)\n state = {\n imageLoaded: !this.useLazyLoading,\n load: !this.useLazyLoading,\n };\n\n pictureRef: HTMLPictureElement | null = null;\n\n scrollListener: null | ((e: Event) => void) = null;\n intersectionObserver: IntersectionObserver | null = null;\n\n componentWillUnmount() {\n if (Builder.isBrowser) {\n if (this.scrollListener) {\n window.removeEventListener('scroll', this.scrollListener);\n this.scrollListener = null;\n }\n\n if (this.intersectionObserver && this.pictureRef) {\n this.intersectionObserver.unobserve(this.pictureRef);\n }\n }\n }\n\n componentDidMount() {\n if (this.props.lazy && Builder.isBrowser) {\n if (this.pictureRef && isElementInViewport(this.pictureRef)) {\n this.setState({\n load: true,\n });\n } else if (typeof IntersectionObserver === 'function' && this.pictureRef) {\n const observer = (this.intersectionObserver = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach(entry => {\n // In view\n if (entry.intersectionRatio > 0) {\n this.setState({\n load: true,\n });\n if (this.pictureRef) {\n observer.unobserve(this.pictureRef);\n }\n }\n });\n }\n ));\n\n observer.observe(this.pictureRef);\n } else {\n // throttled scroll capture listener\n const listener = throttle(\n (event: Event) => {\n if (this.pictureRef) {\n const rect = this.pictureRef.getBoundingClientRect();\n const buffer = window.innerHeight / 2;\n if (rect.top < window.innerHeight + buffer) {\n this.setState({\n ...this.state,\n load: true,\n });\n window.removeEventListener('scroll', listener);\n this.scrollListener = null;\n }\n }\n },\n 400,\n {\n leading: false,\n trailing: true,\n }\n );\n this.scrollListener = listener;\n\n window.addEventListener('scroll', listener, {\n capture: true,\n passive: true,\n });\n listener();\n }\n }\n }\n\n // Allow our legacy `image` prop, as well as allow a `src` prop for more intuitive\n // DX of manual usage (<Image src=\"...\" />)\n get image() {\n return this.props.image || this.props.src;\n }\n\n get loadEagerly() {\n return this.props.builderBlock?.id.startsWith('builder-pixel-') || this.props.highPriority;\n }\n\n get fetchPriorityProp() {\n const propNameToUse = isNewReact ? 'fetchPriority' : 'fetchpriority';\n return {\n [propNameToUse]: this.loadEagerly ? 'high' : 'auto',\n };\n }\n\n getSrcSet(): string | undefined {\n const url = this.image;\n if (!url || typeof url !== 'string') {\n return;\n }\n\n if (this.props.noWebp) {\n return;\n }\n\n // We can auto add srcset for cdn.builder.io and shopify\n // images, otherwise you can supply this prop manually\n if (!(url.match(/builder\\.io/) || url.match(/cdn\\.shopify\\.com/))) {\n return;\n }\n\n return getSrcSet(url);\n }\n\n render() {\n const { aspectRatio, lazy, builderBlock, builderState } = this.props;\n const children = this.props.builderBlock && this.props.builderBlock.children;\n\n let srcset = this.props.srcset;\n const sizes = getSizes(\n this.props.sizes,\n builderBlock,\n builderState?.context.builderContent?.meta?.breakpoints || {}\n );\n const image = this.image;\n\n if (srcset && image && image.includes('builder.io/api/v1/image')) {\n if (!srcset.includes(image.split('?')[0])) {\n console.debug('Removed given srcset');\n srcset = this.getSrcSet();\n }\n } else if (image && !srcset) {\n srcset = this.getSrcSet();\n }\n\n const { fitContent } = this.props;\n\n return (\n <BuilderMetaContext.Consumer>\n {value => {\n const amp = value.ampMode;\n const Tag: 'img' = amp ? ('amp-img' as any) : 'img';\n\n const imageContents = (!lazy || this.state.load || amp) && (\n <Tag\n {...(amp\n ? ({\n layout: 'responsive',\n height:\n this.props.height ||\n (aspectRatio ? Math.round(aspectRatio * 1000) : undefined),\n width:\n this.props.width ||\n (aspectRatio ? Math.round(1000 / aspectRatio) : undefined),\n } as any)\n : null)}\n alt={this.props.altText}\n title={this.props.title}\n key={\n Builder.isEditing\n ? (typeof this.image === 'string' && this.image.split('?')[0]) || undefined\n : undefined\n }\n role={!this.props.altText ? 'presentation' : undefined}\n css={{\n opacity: amp ? 1 : this.useLazyLoading && !this.state.imageLoaded ? 0 : 1,\n transition: 'opacity 0.2s ease-in-out',\n objectFit: this.props.backgroundSize || 'cover',\n objectPosition: this.props.backgroundPosition || 'center',\n ...(aspectRatio &&\n !amp && {\n position: 'absolute',\n height: '100%',\n width: '100%',\n left: 0,\n top: 0,\n }),\n ...(amp && {\n ['& img']: {\n objectFit: this.props.backgroundSize,\n objectPosition: this.props.backgroundPosition,\n },\n }),\n }}\n loading={this.loadEagerly ? 'eager' : 'lazy'}\n {...this.fetchPriorityProp}\n className={'builder-image' + (this.props.className ? ' ' + this.props.className : '')}\n src={this.image}\n {...(!amp && {\n // TODO: queue these so react renders all loads at once\n onLoad: () => this.setState({ imageLoaded: true }),\n })}\n // TODO: memoize on image on client\n srcSet={srcset}\n sizes={!amp && sizes ? sizes : undefined}\n />\n );\n\n return (\n <React.Fragment>\n {amp ? (\n imageContents\n ) : (\n <picture ref={ref => (this.pictureRef = ref)}>\n {srcset && srcset.match(/builder\\.io/) && !this.props.noWebp && (\n <source srcSet={srcset.replace(/\\?/g, '?format=webp&')} type=\"image/webp\" />\n )}\n {imageContents}\n </picture>\n )}\n {aspectRatio && !amp && !(fitContent && children && children.length) ? (\n <div\n className=\"builder-image-sizer\"\n css={{\n width: '100%',\n paddingTop: aspectRatio * 100 + '%',\n pointerEvents: 'none',\n fontSize: 0,\n }}\n >\n {' '}\n </div>\n ) : null}\n {children && children.length ? (\n fitContent ? (\n children.map((block: BuilderElement, index: number) => (\n <BuilderBlockComponent key={block.id} block={block} />\n ))\n ) : (\n // TODO: if no aspect ratio and has children, don't make this absolute but instead\n // make the image absolute and fit the children (or with a special option)\n <div\n css={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n }}\n >\n {children.map((block: BuilderElement, index: number) => (\n <BuilderBlockComponent key={block.id} block={block} />\n ))}\n </div>\n )\n ) : null}\n </React.Fragment>\n );\n }}\n </BuilderMetaContext.Consumer>\n );\n }\n}\n\nexport const Image = withBuilder(ImageComponent, {\n name: 'Image',\n static: true,\n image:\n 'https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4',\n defaultStyles: {\n position: 'relative',\n minHeight: '20px',\n minWidth: '20px',\n overflow: 'hidden',\n },\n canHaveChildren: true,\n inputs: [\n {\n // TODO: new editor type 'responsiveImage' that can do different crops per breakpoint\n // and sets an object and that is read here\n name: 'image',\n type: 'file',\n bubble: true,\n allowedFileTypes: IMAGE_FILE_TYPES,\n required: true,\n defaultValue:\n 'https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F72c80f114dc149019051b6852a9e3b7a',\n onChange: (options: Map<string, any>) => {\n const DEFAULT_ASPECT_RATIO = 0.7041;\n options.delete('srcset');\n options.delete('noWebp');\n function loadImage(url: string, timeout = 60000): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = document.createElement('img');\n let loaded = false;\n img.onload = () => {\n loaded = true;\n resolve(img);\n };\n\n img.addEventListener('error', event => {\n console.warn('Image load failed', event.error);\n reject(event.error);\n });\n\n img.src = url;\n setTimeout(() => {\n if (!loaded) {\n reject(new Error('Image load timed out'));\n }\n }, timeout);\n });\n }\n\n function round(num: number) {\n return Math.round(num * 1000) / 1000;\n }\n\n const value = options.get('image');\n const aspectRatio = options.get('aspectRatio');\n\n // For SVG images - don't render as webp, keep them as SVG\n fetch(value)\n .then(res => res.blob())\n .then(blob => {\n if (blob.type.includes('svg')) {\n options.set('noWebp', true);\n }\n });\n\n if (value && (!aspectRatio || aspectRatio === DEFAULT_ASPECT_RATIO)) {\n return loadImage(value).then(img => {\n const possiblyUpdatedAspectRatio = options.get('aspectRatio');\n if (\n options.get('image') === value &&\n (!possiblyUpdatedAspectRatio || possiblyUpdatedAspectRatio === DEFAULT_ASPECT_RATIO)\n ) {\n if (img.width && img.height) {\n options.set('aspectRatio', round(img.height / img.width));\n options.set('height', img.height);\n options.set('width', img.width);\n }\n }\n });\n }\n },\n },\n {\n name: 'backgroundSize',\n type: 'text',\n defaultValue: 'cover',\n enum: [\n {\n label: 'contain',\n value: 'contain',\n helperText: 'The image should never get cropped',\n },\n {\n label: 'cover',\n value: 'cover',\n helperText: `The image should fill its box, cropping when needed`,\n },\n // TODO: add these options back\n // { label: 'auto', value: 'auto', helperText: '' },\n // { label: 'fill', value: 'fill', helperText: 'The image should fill the box, being stretched or squished if necessary' },\n ] as any,\n },\n {\n name: 'backgroundPosition',\n type: 'text',\n defaultValue: 'center',\n enum: [\n 'center',\n 'top',\n 'left',\n 'right',\n 'bottom',\n 'top left',\n 'top right',\n 'bottom left',\n 'bottom right',\n ],\n },\n {\n name: 'altText',\n type: 'string',\n helperText: 'Text to display when the user has images off',\n },\n {\n name: 'title',\n type: 'string',\n helperText: 'Text to display when hovering over the asset',\n },\n {\n name: 'highPriority',\n type: 'boolean',\n advanced: true,\n helperText:\n 'Mark this image as high priority compared to other images on the page. This prevents lazy loading of the image and tells the browser to load this image before others on the page.',\n },\n {\n name: 'height',\n type: 'number',\n hideFromUI: true,\n },\n {\n name: 'width',\n type: 'number',\n hideFromUI: true,\n },\n {\n name: 'sizes',\n type: 'string',\n hideFromUI: true,\n },\n {\n name: 'srcset',\n type: 'string',\n hideFromUI: true,\n },\n // TODO: force lazy load option (maybe via binding for now hm component.options.lazy: true)\n {\n name: 'lazy',\n type: 'boolean',\n defaultValue: true,\n hideFromUI: true,\n },\n {\n name: 'fitContent',\n type: 'boolean',\n helperText:\n \"When child blocks are provided, fit to them instead of using the image's aspect ratio\",\n defaultValue: true,\n },\n {\n name: 'aspectRatio',\n type: 'number',\n helperText:\n \"This is the ratio of height/width, e.g. set to 1.5 for a 300px wide and 200px tall photo. Set to 0 to not force the image to maintain it's aspect ratio\",\n advanced: true,\n defaultValue: DEFAULT_ASPECT_RATIO,\n },\n // {\n // name: 'backgroundRepeat',\n // type: 'text',\n // defaultValue: 'no-repeat',\n // enum: ['no-repeat', 'repeat', 'repeat-x', 'repeat-y'],\n // },\n ],\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React, { PropsWithChildren } from 'react';\n\nimport { withChildren } from '../functions/with-children';\nimport { Builder } from '@builder.io/sdk';\nimport { IMAGE_FILE_TYPES, VIDEO_FILE_TYPES } from 'src/constants/file-types.constant';\n\nconst DEFAULT_ASPECT_RATIO = 0.7004048582995948;\n\nclass VideoComponent extends React.Component<\n PropsWithChildren<{\n video: string;\n autoPlay?: boolean;\n controls?: boolean;\n muted?: boolean;\n loop?: boolean;\n playsInline?: boolean;\n aspectRatio?: number;\n width?: number;\n height?: number;\n fit?: 'contain' | 'cover' | 'fill';\n preload?: 'auto' | 'metadata' | 'none';\n position?: string;\n posterImage?: string;\n lazyLoad?: boolean;\n fitContent?: boolean;\n }>\n> {\n video: HTMLVideoElement | null = null;\n containerRef: HTMLElement | null = null;\n lazyVideoObserver: IntersectionObserver | null = null;\n\n get lazyLoad() {\n // Default is true, must be explicitly turned off to not have this behavior\n // as it's highly recommended for performance and bandwidth optimization\n return this.props.lazyLoad !== false;\n }\n\n state = {\n load: !this.lazyLoad,\n };\n\n updateVideo() {\n const video = this.video;\n if (video) {\n // There are some issues with boolean attributes and media elements\n // see: https://github.com/facebook/react/issues/10389\n const boolProps: Array<'muted' | 'playsInline' | 'autoPlay'> = [\n 'muted',\n 'playsInline',\n 'autoPlay',\n ];\n boolProps.forEach(prop => {\n const attr = prop.toLowerCase();\n if (this.props[prop]) {\n video.setAttribute(attr, attr);\n } else {\n video.removeAttribute(attr);\n }\n });\n }\n }\n\n componentDidUpdate() {\n this.updateVideo();\n }\n\n componentDidMount() {\n this.updateVideo();\n\n if (this.lazyLoad && Builder.isBrowser) {\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (!entry.isIntersecting) return;\n\n this.setState(state => ({\n ...state,\n load: true,\n }));\n\n if (this.lazyVideoObserver) {\n this.lazyVideoObserver.disconnect();\n this.lazyVideoObserver = null;\n }\n });\n });\n\n if (this.containerRef) {\n observer.observe(this.containerRef);\n this.lazyVideoObserver = observer;\n }\n }\n }\n\n componentWillUnmount() {\n if (this.lazyVideoObserver) {\n this.lazyVideoObserver.disconnect();\n this.lazyVideoObserver = null;\n }\n }\n\n render() {\n const { aspectRatio, children } = this.props;\n return (\n <div ref={ref => (this.containerRef = ref)} css={{ position: 'relative' }}>\n {/* TODO: option to load the whole thing (inc. poster image) or just video */}\n <video\n key={this.props.video || 'no-src'}\n poster={this.props.posterImage}\n ref={ref => (this.video = ref)}\n autoPlay={this.props.autoPlay}\n muted={this.props.muted}\n controls={this.props.controls}\n loop={this.props.loop}\n preload={this.props.preload || 'metadata'}\n className=\"builder-video\"\n css={{\n width: '100%',\n height: '100%',\n objectFit: this.props.fit,\n objectPosition: this.props.position,\n // Hack to get object fit to work as expected and not have the video\n // overflow\n borderRadius: 1,\n ...(aspectRatio\n ? {\n position: 'absolute',\n }\n : null),\n }}\n >\n {(!this.lazyLoad || this.state.load) && (\n <source type=\"video/mp4\" src={this.props.video} />\n )}\n </video>\n {aspectRatio && !(this.props.fitContent && children) ? (\n <div\n css={{\n width: '100%',\n paddingTop: aspectRatio * 100 + '%',\n pointerEvents: 'none',\n fontSize: 0,\n }}\n />\n ) : null}\n {children && this.props.fitContent ? (\n <div css={{ display: 'flex', flexDirection: 'column', alignItems: 'stretch' }}>\n {children}\n </div>\n ) : children ? (\n <div\n css={{\n pointerEvents: 'none',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n }}\n >\n {children}\n </div>\n ) : null}\n </div>\n );\n }\n}\n\nexport const Video = Builder.registerComponent(withChildren(VideoComponent), {\n name: 'Video',\n canHaveChildren: true,\n defaultStyles: {\n minHeight: '20px',\n minWidth: '20px',\n },\n image:\n 'https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-videocam-24px%20(1).svg?alt=media&token=49a84e4a-b20e-4977-a650-047f986874bb',\n inputs: [\n {\n name: 'video',\n type: 'file',\n allowedFileTypes: VIDEO_FILE_TYPES,\n bubble: true,\n defaultValue:\n 'https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd27731a526464deba0016216f5f9e570%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d27731a526464deba0016216f5f9e570&alt=media&optimized=true',\n required: true,\n },\n {\n name: 'posterImage',\n type: 'file',\n allowedFileTypes: IMAGE_FILE_TYPES,\n helperText: 'Image to show before the video plays',\n },\n {\n name: 'autoPlay',\n type: 'boolean',\n defaultValue: true,\n },\n {\n name: 'controls',\n type: 'boolean',\n defaultValue: false,\n },\n {\n name: 'muted',\n type: 'boolean',\n defaultValue: true,\n },\n {\n name: 'loop',\n type: 'boolean',\n defaultValue: true,\n },\n {\n name: 'playsInline',\n type: 'boolean',\n defaultValue: true,\n },\n {\n name: 'fit',\n type: 'text',\n defaultValue: 'cover',\n enum: ['contain', 'cover', 'fill', 'auto'],\n },\n {\n name: 'preload',\n type: 'text',\n defaultValue: 'metadata',\n enum: ['auto', 'metadata', 'none'],\n },\n {\n name: 'fitContent',\n type: 'boolean',\n helperText: 'When child blocks are provided, fit to them instead of using the aspect ratio',\n defaultValue: true,\n advanced: true,\n },\n {\n name: 'position',\n type: 'text',\n defaultValue: 'center',\n enum: [\n 'center',\n 'top',\n 'left',\n 'right',\n 'bottom',\n 'top left',\n 'top right',\n 'bottom left',\n 'bottom right',\n ],\n },\n {\n name: 'height',\n type: 'number',\n advanced: true,\n },\n {\n name: 'width',\n type: 'number',\n advanced: true,\n },\n {\n name: 'aspectRatio',\n type: 'number',\n advanced: true,\n defaultValue: DEFAULT_ASPECT_RATIO,\n },\n {\n name: 'lazyLoad',\n type: 'boolean',\n helperText:\n 'Load this video \"lazily\" - as in only when a user scrolls near the video. Recommended for optmized performance and bandwidth consumption',\n defaultValue: true,\n advanced: true,\n },\n ],\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React, { PropsWithChildren } from 'react';\nimport { BuilderComponent } from '../components/builder-component.component';\nimport { Builder, BuilderElement, builder } from '@builder.io/sdk';\nimport hash from 'hash-sum';\nimport { NoWrap } from '../components/no-wrap';\nimport { BuilderStoreContext } from '../store/builder-store';\nimport { withBuilder } from '../functions/with-builder';\nimport { omit } from '../functions/utils';\n\nconst size = (thing: object) => Object.keys(thing).length;\n\nconst isShopify = Builder.isBrowser && 'Shopify' in window;\n\nconst refs: Record<string, Element> = {};\n\nif (Builder.isBrowser) {\n try {\n Array.from(document.querySelectorAll('[builder-static-symbol]')).forEach(el => {\n const id = (el as HTMLDivElement).getAttribute('builder-static-symbol');\n if (id) {\n refs[id] = el;\n }\n });\n } catch (err) {\n console.error('Builder replace nodes error:', err);\n }\n}\n\nexport interface SymbolInfo {\n model?: string;\n entry?: string;\n data?: any;\n content?: any;\n inline?: boolean;\n dynamic?: boolean;\n ownerId?: string;\n}\n\nexport interface SymbolProps {\n symbol?: SymbolInfo;\n dataOnly?: boolean;\n dynamic?: boolean;\n builderBlock?: BuilderElement;\n attributes?: any;\n inheritState?: boolean;\n}\n\nclass SymbolComponent extends React.Component<PropsWithChildren<SymbolProps>> {\n ref: BuilderComponent | null = null;\n staticRef: HTMLDivElement | null = null;\n isEditingThisSymbol = false;\n\n get placeholder() {\n return (\n <div css={{ padding: 10 }}>\n Symbols let you reuse dynamic elements across your content. Please choose a model and entry\n for this symbol.\n </div>\n );\n }\n\n componentDidMount() {\n if (this.useStatic && this.staticRef && refs[this.props.builderBlock?.id!]) {\n this.staticRef.parentNode?.replaceChild(refs[this.props.builderBlock?.id!], this.staticRef);\n }\n Builder.nextTick(() => {\n const { model, entry } = this.props.symbol || {};\n // allows editing of symbols in the context of a parent page\n this.isEditingThisSymbol = Boolean(\n Builder.isEditing &&\n model === builder.editingModel &&\n entry &&\n location.search.includes(`overrides.${entry}`)\n );\n });\n }\n\n get useStatic() {\n return Boolean(\n Builder.isBrowser &&\n refs[this.props.builderBlock?.id!] &&\n !(Builder.isEditing || Builder.isPreviewing)\n );\n }\n\n render() {\n if (this.useStatic) {\n return <div ref={el => (this.staticRef = el)} />;\n }\n\n const symbol = this.props.symbol;\n\n let showPlaceholder = false;\n\n if (!symbol) {\n showPlaceholder = true;\n }\n\n const TagName = this.props.dataOnly\n ? NoWrap\n : (this.props.builderBlock && this.props.builderBlock.tagName) || 'div';\n\n const { model, entry, data, content, inline, ownerId } = symbol || {};\n const dynamic = symbol?.dynamic || this.props.dynamic;\n if (!(model && (entry || dynamic)) && !content?.data?.blocksJs && !inline) {\n showPlaceholder = true;\n }\n\n if (this.isEditingThisSymbol) {\n showPlaceholder = false;\n }\n\n let key = dynamic ? this.props.builderBlock?.id : [model, entry].join(':');\n const dataString = data && size(data) && hash(data);\n\n if (key && dataString && dataString.length < 300) {\n key += ':' + dataString;\n }\n const attributes = this.props.attributes || {};\n return (\n <BuilderStoreContext.Consumer\n key={(model || 'no model') + ':' + (entry || 'no entry' + this.isEditingThisSymbol)}\n >\n {state => {\n const builderComponentKey = `${key}_${state?.state?.locale || 'Default'}`;\n return (\n <TagName\n data-model={model}\n {...attributes}\n className={\n (attributes.class || attributes.className || '') +\n ' builder-symbol' +\n (symbol?.inline ? ' builder-inline-symbol' : '') +\n (symbol?.dynamic || this.props.dynamic ? ' builder-dynamic-symbol' : '')\n }\n >\n {showPlaceholder ? (\n this.placeholder\n ) : (\n <BuilderComponent\n {...(ownerId && { apiKey: ownerId })}\n {...(state.state?.locale && { locale: state.state.locale })}\n isChild\n ref={(ref: any) => (this.ref = ref)}\n context={{ ...state.context, symbolId: this.props.builderBlock?.id }}\n model={model}\n entry={entry}\n data={{\n ...data,\n ...(!!this.props.inheritState && omit(state.state, 'children')),\n ...this.props.builderBlock?.component?.options?.symbol?.content?.data?.state,\n }}\n renderLink={state.renderLink}\n inlineContent={symbol?.inline}\n {...(content && { content })}\n key={builderComponentKey}\n options={{\n ...(!this.isEditingThisSymbol && {\n key: builderComponentKey,\n noEditorUpdates: true,\n }),\n ...(Builder.singletonInstance.apiEndpoint === 'content' &&\n entry && {\n query: {\n id: entry,\n },\n }),\n }}\n codegen={!!content?.data?.blocksJs}\n hydrate={state.state?._hydrate}\n builderBlock={this.props.builderBlock}\n dataOnly={this.props.dataOnly}\n nonce={state.context.nonce}\n >\n {/* TODO: builder blocks option for loading stuff */}\n {this.props.children}\n </BuilderComponent>\n )}\n </TagName>\n );\n }}\n </BuilderStoreContext.Consumer>\n );\n }\n}\n\nexport const Symbol = withBuilder(SymbolComponent, {\n // Builder:Symbol\n name: 'Symbol',\n noWrap: true,\n static: true,\n // TODO: allow getter for icon so different icon if data symbol hm,\n // Maybe \"this\" context is the block element in editor, and it's the\n // builderBlock json otherwise. In BuilderBlock decorator find any getters\n // and convert to strings when passing and convert back to getters after\n // with `this` bound\n inputs: [\n {\n name: 'symbol',\n type: 'uiSymbol',\n },\n {\n name: 'dataOnly',\n helperText: `Make this a data symbol that doesn't display any UI`,\n type: 'boolean',\n defaultValue: false,\n advanced: true,\n hideFromUI: true,\n },\n {\n name: 'inheritState',\n helperText: `Inherit the parent component state and data`,\n type: 'boolean',\n defaultValue: isShopify,\n advanced: true,\n },\n {\n name: 'renderToLiquid',\n helperText:\n 'Render this symbols contents to liquid. Turn off to fetch with javascript and use custom targeting',\n type: 'boolean',\n defaultValue: isShopify,\n advanced: true,\n hideFromUI: true,\n },\n {\n name: 'useChildren',\n hideFromUI: true,\n type: 'boolean',\n },\n ],\n});\n","'use client';\nimport React from 'react';\nimport { withBuilder } from '../functions/with-builder';\nimport { Link } from '../components/Link';\n\nexport interface ButtonProps {\n attributes?: any;\n text?: string;\n link?: string;\n openLinkInNewTab?: boolean;\n}\n\nclass ButtonComponent extends React.Component<ButtonProps> {\n render() {\n const Tag = this.props.link ? Link : 'span';\n return (\n <Tag\n role=\"button\"\n href={this.props.link}\n target={this.props.openLinkInNewTab ? '_blank' : undefined}\n {...this.props.attributes}\n >\n {this.props.text}\n </Tag>\n );\n }\n}\n\nexport const Button = withBuilder(ButtonComponent, {\n name: 'Core:Button',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F81a15681c3e74df09677dfc57a615b13',\n defaultStyles: {\n // TODO: make min width more intuitive and set one\n appearance: 'none',\n paddingTop: '15px',\n paddingBottom: '15px',\n paddingLeft: '25px',\n paddingRight: '25px',\n backgroundColor: '#000000',\n color: 'white',\n borderRadius: '4px',\n textAlign: 'center',\n cursor: 'pointer',\n },\n inputs: [\n {\n name: 'text',\n type: 'text',\n defaultValue: 'Click me!',\n bubble: true,\n },\n {\n name: 'link',\n type: 'url',\n bubble: true,\n },\n {\n name: 'openLinkInNewTab',\n type: 'boolean',\n defaultValue: false,\n friendlyName: 'Open link in new tab',\n },\n ],\n static: true,\n noWrap: true,\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React, { PropsWithChildren } from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlock as BuilderBlockComponent } from '../components/builder-block.component';\nimport { withBuilder } from '../functions/with-builder';\n\ninterface SectionProps {\n builderBlock?: BuilderElement;\n verticalAlignContent?: string;\n maxWidth?: number;\n lazyLoad?: boolean;\n // Styles to load before lazy loaded in, like a min height\n lazyStyles?: any;\n}\n\nclass SectionComponent extends React.Component<\n PropsWithChildren<SectionProps>,\n { inView?: boolean }\n> {\n ref: HTMLElement | null = null;\n\n unmountCallbacks: Function[] = [];\n\n state = {\n inView: false,\n };\n\n get renderContents() {\n if (this.props.lazyLoad !== true) {\n return true;\n }\n\n return this.state.inView;\n }\n\n componentWillUnmount() {\n this.unmountCallbacks.forEach(cb => cb());\n }\n\n componentDidMount() {\n if (this.props.lazyLoad) {\n if (typeof IntersectionObserver === 'undefined' || !this.ref) {\n this.setState({ inView: true });\n } else {\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach(entry => {\n if (entry.intersectionRatio > 0) {\n this.setState({\n inView: true,\n });\n if (this.ref) {\n observer.unobserve(this.ref);\n }\n }\n });\n },\n {\n rootMargin: '10px',\n }\n );\n\n observer.observe(this.ref);\n\n this.unmountCallbacks.push(() => {\n if (this.ref) {\n observer.unobserve(this.ref);\n }\n });\n }\n }\n }\n\n render() {\n return (\n <section\n ref={ref => (this.ref = ref)}\n css={{\n width: '100%',\n // height: '100%' was is here so the inner contents can align center, but that is causing\n // issues in Safari. Need another workaround.\n alignSelf: 'stretch',\n flexGrow: 1,\n boxSizing: 'border-box',\n maxWidth: this.props.maxWidth,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n marginLeft: 'auto',\n marginRight: 'auto',\n ...(this.renderContents ? null : this.props.lazyStyles),\n }}\n >\n {this.renderContents ? (\n <React.Fragment>\n {this.props.children}\n {this.props.builderBlock &&\n this.props.builderBlock.children &&\n this.props.builderBlock.children.map((block, index) => (\n <BuilderBlockComponent key={block.id} block={block} />\n ))}\n </React.Fragment>\n ) : null}\n </section>\n );\n }\n}\n\nexport const Section = withBuilder(SectionComponent, {\n name: 'Core:Section',\n static: true,\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F682efef23ace49afac61748dd305c70a',\n inputs: [\n {\n name: 'maxWidth',\n type: 'number',\n defaultValue: 1200,\n },\n {\n name: 'lazyLoad',\n type: 'boolean',\n defaultValue: false,\n advanced: true,\n description: 'Only render this section when in view',\n },\n ],\n defaultStyles: {\n paddingLeft: '20px',\n paddingRight: '20px',\n paddingTop: '50px',\n paddingBottom: '50px',\n marginTop: '0px',\n width: '100vw',\n marginLeft: 'calc(50% - 50vw)',\n },\n canHaveChildren: true,\n\n defaultChildren: [\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n textAlign: 'center',\n },\n },\n component: {\n name: 'Text',\n options: {\n text: \"<p><b>I am a section! My content keeps from getting too wide, so that it's easy to read even on big screens.</b></p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur</p>\",\n },\n },\n },\n ],\n});\n","'use client';\nimport React, { PropsWithChildren } from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlock as BuilderBlockComponent } from '../components/builder-block.component';\nimport { BuilderStoreContext } from '../store/builder-store';\nimport { withBuilder } from '../functions/with-builder';\n\ninterface StateProviderProps {\n builderBlock?: BuilderElement;\n state: any;\n context?: any;\n}\n\nclass StateProviderComponent extends React.Component<PropsWithChildren<StateProviderProps>> {\n render() {\n return (\n <BuilderStoreContext.Consumer>\n {state => (\n <BuilderStoreContext.Provider\n value={{\n ...state,\n state: {\n ...state.state,\n ...this.props.state,\n },\n context: {\n ...state.context,\n ...this.props.context,\n },\n }}\n >\n {this.props.builderBlock &&\n this.props.builderBlock.children &&\n this.props.builderBlock.children.map((block, index) => (\n <BuilderBlockComponent block={block} key={block.id} index={index} child={true} />\n ))}\n {this.props.children}\n </BuilderStoreContext.Provider>\n )}\n </BuilderStoreContext.Consumer>\n );\n }\n}\n\nexport const StateProvider = withBuilder(StateProviderComponent, {\n name: 'Builder:StateProvider',\n // TODO: default children\n canHaveChildren: true,\n static: true,\n noWrap: true,\n hideFromInsertMenu: true,\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React, { PropsWithChildren } from 'react';\nimport { BuilderElement, builder, Builder } from '@builder.io/sdk';\nimport { BuilderStoreContext } from '../store/builder-store';\nimport { BuilderComponent } from '../components/builder-component.component';\nimport { withBuilder } from '../functions/with-builder';\n\nexport interface RouterProps {\n model?: string;\n data?: string;\n content?: any;\n handleRouting?: boolean;\n builderBlock?: BuilderElement;\n preloadOnHover?: boolean;\n onRoute?: (routeEvent: RouteEvent) => void;\n}\n\nconst prefetched = new Set();\n\nfunction searchToObject(location: Location) {\n const pairs = (location.search || '').substring(1).split('&');\n const obj: { [key: string]: string } = {};\n\n for (const i in pairs) {\n if (!(pairs[i] && typeof pairs[i] === 'string')) {\n continue;\n }\n const pair = pairs[i].split('=');\n obj[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n\n return obj;\n}\n\nexport interface RouteEvent {\n /**\n * Url being routed to\n */\n url: string;\n /**\n * Html anchor element the href is on that\n * caused the route\n */\n anchorNode: HTMLAnchorElement;\n /**\n * Has preventDefault() been called preventing\n * builder from routing to the clicked URL\n */\n defaultPrevented: boolean;\n /**\n * Prevents builder from handling routing for you to handle\n * yourself\n */\n preventDefault(): void;\n}\n\nclass RouterComponent extends React.Component<PropsWithChildren<RouterProps>> {\n builder = builder;\n\n routed = false;\n\n private preloadQueue = 0;\n\n // TODO: handle route to same url as current (do nothing)\n // TODO: replaceState option\n public route(url: string) {\n this.routed = true;\n\n // TODO: check if relative?\n if (typeof window.history?.pushState === 'function') {\n history.pushState(null, '', url);\n this.updateLocationState();\n return true;\n } else {\n location.href = url;\n return false;\n }\n }\n\n private updateLocationState() {\n if (this.privateState) {\n // Reload path info\n this.privateState.update(obj => {\n // TODO: force always override the location path info... hmm\n obj.location = {\n ...obj.location,\n pathname: location.pathname,\n search: location.search,\n path: location.pathname.split('/').slice(1),\n query: searchToObject(location),\n };\n });\n }\n }\n\n private get model() {\n return this.props.model || 'page';\n }\n\n componentDidMount() {\n if (typeof document !== 'undefined') {\n document.addEventListener('click', this.onClick);\n window.addEventListener('popstate', this.onPopState);\n document.addEventListener('mouseover', this.onMouseOverOrTouchStart);\n document.addEventListener('touchstart', this.onMouseOverOrTouchStart);\n }\n }\n\n componentWillUnmount() {\n if (typeof document !== 'undefined') {\n document.removeEventListener('click', this.onClick);\n document.removeEventListener('mouseover', this.onMouseOverOrTouchStart);\n window.removeEventListener('popstate', this.onPopState);\n document.removeEventListener('touchstart', this.onMouseOverOrTouchStart);\n }\n }\n\n private onPopState = (event: Event) => {\n this.updateLocationState();\n };\n\n private onMouseOverOrTouchStart = (event: MouseEvent | TouchEvent) => {\n if (this.preloadQueue > 4) {\n return;\n }\n\n if (this.props.preloadOnHover === false) {\n return;\n }\n\n const hrefTarget = this.findHrefTarget(event);\n if (!hrefTarget) {\n return;\n }\n\n let href = hrefTarget.getAttribute('href');\n if (!href) {\n return;\n }\n\n // TODO: onPreload hook and preload dom event\n // Also allow that to be defaultPrevented to cancel this behavior\n if (!this.isRelative(href)) {\n const converted = this.convertToRelative(href);\n if (converted) {\n href = converted;\n } else {\n return;\n }\n }\n\n if (href.startsWith('#')) {\n return;\n }\n\n if (prefetched.has(href)) {\n return;\n }\n prefetched.add(href);\n\n const parsedUrl = this.parseUrl(href);\n\n // TODO: override location!\n this.preloadQueue++;\n\n // TODO: use builder from context\n const attributes = builder.getUserAttributes();\n attributes.urlPath = parsedUrl.pathname;\n attributes.queryString = parsedUrl.search;\n\n // Should be queue?\n const subscription = builder\n .get(this.model, {\n userAttributes: attributes,\n key: this.model + ':' + parsedUrl.pathname + parsedUrl.search,\n })\n .subscribe(() => {\n this.preloadQueue--;\n subscription.unsubscribe();\n });\n };\n\n private onClick = async (event: MouseEvent) => {\n if (this.props.handleRouting === false) {\n return;\n }\n\n if (event.button !== 0 || event.ctrlKey || event.defaultPrevented || event.metaKey) {\n // If this is a non-left click, or the user is holding ctr/cmd, or the url is absolute,\n // or if the link has a target attribute, don't route on the client and let the default\n // href property handle the navigation\n return;\n }\n\n const hrefTarget = this.findHrefTarget(event);\n if (!hrefTarget) {\n return;\n }\n\n // target=\"_blank\" or target=\"_self\" etc\n if (hrefTarget.target && hrefTarget.target !== '_client') {\n return;\n }\n\n let href = hrefTarget.getAttribute('href');\n if (!href) {\n return;\n }\n\n if (this.props.onRoute) {\n const routeEvent: RouteEvent = {\n url: href,\n anchorNode: hrefTarget,\n preventDefault() {\n this.defaultPrevented = true;\n },\n defaultPrevented: false,\n };\n\n this.props.onRoute(routeEvent);\n\n if (routeEvent.defaultPrevented) {\n // Wait should this be here? they may want browser to handle this by deault preventing ours...\n // event.preventDefault()\n return;\n }\n }\n\n if (!this.isRelative(href)) {\n const converted = this.convertToRelative(href);\n if (converted) {\n href = converted;\n } else {\n return;\n }\n }\n\n if (href.startsWith('#')) {\n return;\n }\n\n // Otherwise if this url is relative, navigate on the client\n event.preventDefault();\n\n this.route(href);\n };\n\n render() {\n const { model } = this;\n return (\n <BuilderStoreContext.Consumer>\n {state => {\n this.privateState = state;\n // TODO: useEffect based on this that fetches new data and\n // populates as content={} param for fast updates\n const url =\n state.state &&\n state.state.location &&\n state.state.location.pathname + state.state.location.search;\n\n return (\n <div className=\"builder-router\" data-model={model}>\n {/* TODO: move to emotion */}\n <style nonce={state.context.nonce}>{`\n @keyframes builderLoadingSpinner {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n /* TODO: overridable tag */\n .builder-page-loading {\n -webkit-animation: builderLoadingSpinner 1s infinite linear;\n animation: builderLoadingSpinner 1s infinite linear;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n border-radius: 50%;\n width: 36px;\n height: 36px;\n margin: 6px auto;\n position: relative;\n border: 1px solid transparent;\n border-left: 1px solid #808284;\n }\n `}</style>\n <BuilderComponent\n // TODO: this key strategy is inidial bc it gives loading for full page when fetching content\n // Also sometimes content flashes to loading even when it's already precached in memory and should immediately display\n // - why\n key={url}\n data={this.props.data}\n content={this.routed ? undefined : this.props.content}\n modelName={model}\n options={{\n key: Builder.isEditing ? undefined : this.model + ':' + url, // TODO: other custom targets specify if should refetch components on change\n }}\n nonce={state.context.nonce}\n >\n {/* TODO: builder blocks option for loading stuff */}\n {/* TODO: input for builder blocks for this */}\n {this.props.children || (\n <div css={{ display: 'flex' }}>\n <div css={{ margin: '40vh auto' }} className=\"builder-page-loading\" />\n </div>\n )}\n </BuilderComponent>\n </div>\n );\n }}\n </BuilderStoreContext.Consumer>\n );\n }\n\n private findHrefTarget(event: MouseEvent | TouchEvent): HTMLAnchorElement | null {\n // TODO: move to core\n let element = event.target as HTMLElement | null;\n\n while (element) {\n if (element instanceof HTMLAnchorElement && element.getAttribute('href')) {\n return element;\n }\n\n if (element === event.currentTarget) {\n break;\n }\n\n element = element.parentElement;\n }\n\n return null;\n }\n\n private isRelative(href: string) {\n return !href.match(/^(\\/\\/|https?:\\/\\/)/i);\n }\n\n private privateState: {\n state: any;\n update: (mutator: (state: any) => any) => void;\n } | null = null;\n\n // This method can only be called client side only. It is only invoked on click events\n private parseUrl(url: string) {\n const a = document.createElement('a');\n a.href = url;\n return a;\n }\n\n private convertToRelative(href: string): string | null {\n const currentUrl = this.parseUrl(location.href);\n const hrefUrl = this.parseUrl(href);\n\n if (currentUrl.host === hrefUrl.host) {\n const relativeUrl = hrefUrl.pathname + (hrefUrl.search ? hrefUrl.search : '');\n\n if (relativeUrl.startsWith('#')) {\n return null;\n }\n return relativeUrl || '/';\n }\n\n return null;\n }\n}\n\nexport const Router = withBuilder(RouterComponent, {\n name: 'Core:Router',\n hideFromInsertMenu: true,\n // TODO: advanced: true\n inputs: [\n {\n // TODO: search picker\n name: 'model',\n type: 'string',\n defaultValue: 'page',\n advanced: true,\n },\n {\n name: 'handleRouting',\n type: 'boolean',\n defaultValue: true,\n advanced: true,\n },\n {\n name: 'preloadOnHover',\n type: 'boolean',\n defaultValue: true,\n advanced: true,\n },\n {\n name: 'onRoute',\n type: 'function',\n advanced: true,\n // Subfields are function arguments - object with properties\n },\n ],\n});\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport { Builder, BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlocks } from '../components/builder-blocks.component';\n\nBuilder.registerComponent(Mutation, {\n name: 'Builder:Mutation',\n canHaveChildren: true,\n noWrap: true,\n hideFromInsertMenu: true,\n inputs: [\n {\n name: 'type',\n type: 'string',\n defaultValue: 'replace',\n enum: [\n {\n label: 'Replace',\n value: 'replace',\n helperText: 'Replace the contents of this site region with content from Builder',\n },\n {\n label: 'Append',\n value: 'afterEnd',\n helperText: 'Append Builder content after the chosen site region',\n },\n ],\n },\n {\n name: 'selector',\n // TODO: special UI for this\n type: 'builder:domSelector',\n },\n ],\n});\n\ntype MutationProps = {\n selector: string;\n builderBlock?: BuilderElement;\n type?: 'replace' | 'afterEnd';\n};\n\nexport function Mutation(props: MutationProps) {\n const ref = React.useRef<HTMLDivElement | null>(null);\n\n useWaitForSelector(props.selector, node => {\n // TODO: static generate this logic\n if (props.type !== 'afterEnd') {\n node.innerHTML = '';\n }\n node.appendChild(ref.current!.firstElementChild!);\n });\n\n const children = props.builderBlock?.children;\n\n return (\n <span style={{ display: 'none' }} ref={ref}>\n <BuilderBlocks\n style={{\n display: 'inline',\n }}\n child\n parentElementId={props.builderBlock?.id}\n dataPath=\"this.children\"\n blocks={children}\n />\n </span>\n );\n}\n\nfunction useWaitForSelector(selector: string, cb: (node: Element) => void) {\n React.useLayoutEffect(() => {\n try {\n const existingElement = document.querySelector(selector);\n if (existingElement) {\n cb(existingElement);\n return;\n }\n } catch (err) {\n console.warn(err);\n }\n\n const observer = new MutationObserver(() => {\n try {\n const foundElement = document.querySelector(selector);\n if (foundElement) {\n observer.disconnect();\n cb(foundElement);\n }\n } catch (err) {\n console.warn(err);\n }\n });\n\n observer.observe(document.body, {\n attributes: true,\n subtree: true,\n characterData: true,\n });\n\n return () => {\n observer.disconnect();\n };\n }, [selector]);\n}\n","export const get = (obj: any, path: string, defaultValue?: any) => {\n const result = String.prototype.split\n .call(path, /[,[\\].]+?/)\n .filter(Boolean)\n .reduce((res, key) => (res !== null && res !== undefined ? res[key] : res), obj);\n return result === undefined || result === obj ? defaultValue : result;\n};\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport { BuilderBlock as BuilderBlockComponent } from '../../components/builder-block.component';\nimport { BuilderElement, Builder, builder } from '@builder.io/sdk';\nimport { BuilderBlocks } from '../../components/builder-blocks.component';\nimport { BuilderStoreContext } from '../../store/builder-store';\nimport { set } from '../../functions/set';\nimport { get } from '../../functions/get';\nimport { withBuilder } from '../../functions/with-builder';\n\nexport interface FormProps {\n attributes?: any;\n name?: string;\n action?: string;\n validate?: boolean;\n method?: string;\n builderBlock?: BuilderElement;\n sendSubmissionsTo?: string;\n sendSubmissionsToEmail?: string;\n sendWithJs?: boolean;\n contentType?: string;\n customHeaders?: { [key: string]: string };\n successUrl?: string;\n previewState?: string;\n successMessage?: BuilderElement[];\n errorMessage?: BuilderElement[];\n sendingMessage?: BuilderElement[];\n resetFormOnSubmit?: boolean;\n errorMessagePath?: string;\n}\n\nconst MULTIPART_CONTENT_TYPE = 'multipart/form-data';\nconst JSON_CONTENT_TYPE = 'application/json';\nconst ENCODED_CONTENT_TYPE = 'application/x-www-form-urlencoded';\n\nclass FormComponent extends React.Component<FormProps> {\n ref: HTMLFormElement | null = null;\n\n // TODO: link this state to global state and allow togglign the modes in\n // the style and or data editor. TODO: for now some kind of input for preview state\n // that only impacts in the editor?\n state = {\n state: 'unsubmitted' as 'unsubmitted' | 'sending' | 'success' | 'error',\n // TODO: separate response and error?\n responseData: null as any,\n formErrorMessage: '',\n };\n\n get submissionState() {\n return (Builder.isEditing && this.props.previewState) || this.state.state;\n }\n\n render() {\n return (\n // TODO: JS data bindings\n <BuilderStoreContext.Consumer>\n {state => (\n <BuilderStoreContext.Provider\n value={{\n ...state,\n state: {\n ...state.state,\n formErrorMessage: this.state.formErrorMessage,\n },\n }}\n >\n <form\n {...(!this.props.validate ? { noValidate: true } : {})}\n ref={ref => (this.ref = ref)}\n action={!this.props.sendWithJs && this.props.action ? this.props.action : undefined}\n method={this.props.method}\n name={this.props.name}\n onSubmit={event => {\n const sendWithJs =\n this.props.sendWithJs || this.props.sendSubmissionsTo === 'email';\n // TODO: custom validate event that can preventDefault and use ref or event to set\n // invalid message\n if (this.props.sendSubmissionsTo === 'zapier') {\n event.preventDefault();\n // TODO: send submission to zapier\n } else if (sendWithJs) {\n if (!(this.props.action || this.props.sendSubmissionsTo === 'email')) {\n event.preventDefault();\n return;\n }\n event.preventDefault();\n\n // TODO: error and success state\n const el = event.currentTarget;\n const headers = this.props.customHeaders || {};\n\n let body: any;\n\n const formData = new FormData(el);\n\n // TODO: maybe support null\n const formPairs: {\n key: string;\n value: File | boolean | number | string | FileList;\n }[] = Array.from(event.currentTarget.querySelectorAll('input,select,textarea'))\n .filter(el => !!(el as HTMLInputElement).name)\n .filter(\n el =>\n !!(el as HTMLInputElement).name &&\n ((el as HTMLInputElement).type !== 'radio' ||\n (el as HTMLInputElement).checked)\n )\n .map(el => {\n let value: any;\n const key = (el as HTMLImageElement).name;\n if (el instanceof HTMLInputElement) {\n if (el.type === 'radio') {\n if (el.checked) {\n value = el.value;\n return { key, value };\n }\n } else if (el.type === 'checkbox') {\n value = el.checked;\n } else if (el.type === 'number' || el.type === 'range') {\n const num = el.valueAsNumber;\n if (!isNaN(num)) {\n value = num;\n }\n } else if (el.type === 'file') {\n // TODO: one vs multiple files\n value = el.files;\n } else {\n value = el.value;\n }\n } else {\n value = (el as HTMLInputElement).value;\n }\n\n return { key, value };\n });\n\n let contentType = this.props.contentType;\n\n if (this.props.sendSubmissionsTo === 'email') {\n contentType = MULTIPART_CONTENT_TYPE;\n }\n\n Array.from(formPairs).forEach(({ value }) => {\n if (\n value instanceof File ||\n (Array.isArray(value) && value[0] instanceof File) ||\n value instanceof FileList\n ) {\n contentType = MULTIPART_CONTENT_TYPE;\n }\n });\n\n if (contentType === MULTIPART_CONTENT_TYPE) {\n body = formData;\n } else if (contentType === JSON_CONTENT_TYPE) {\n const json = {};\n\n Array.from(formPairs).forEach(({ value, key }) => {\n set(json, key, value);\n });\n\n body = JSON.stringify(json);\n } else if (contentType === ENCODED_CONTENT_TYPE) {\n body = Array.from(formPairs)\n .map(({ value, key }) => {\n return (\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(value as boolean | number | string)\n );\n })\n .join('&');\n } else {\n // Unsupported content type\n console.error('Unsupported content type: ', contentType);\n return;\n }\n\n if (contentType && contentType !== MULTIPART_CONTENT_TYPE) {\n if (\n // Zapier doesn't allow content-type header to be sent from browsers\n !(sendWithJs && this.props.action?.includes('zapier.com'))\n ) {\n headers['content-type'] = contentType;\n }\n }\n\n const presubmitEvent = new CustomEvent('presubmit', {\n detail: {\n body,\n },\n });\n if (this.ref) {\n this.ref.dispatchEvent(presubmitEvent);\n if (presubmitEvent.defaultPrevented) {\n return;\n }\n }\n\n this.setState({\n ...this.state,\n state: 'sending',\n });\n\n const formUrl = `${\n builder.env === 'dev' ? 'http://localhost:5000' : 'https://builder.io'\n }/api/v1/form-submit?apiKey=${builder.apiKey}&to=${btoa(\n this.props.sendSubmissionsToEmail || ''\n )}&name=${encodeURIComponent(this.props.name || '')}`;\n\n fetch(\n this.props.sendSubmissionsTo === 'email' ? formUrl : this.props.action!, // TODO: throw error if no action URL\n {\n body,\n headers,\n method: this.props.method || 'post',\n }\n ).then(\n async res => {\n let body;\n const contentType = res.headers.get('content-type');\n if (contentType && contentType.indexOf(JSON_CONTENT_TYPE) !== -1) {\n body = await res.json();\n } else {\n body = await res.text();\n }\n\n if (!res.ok && this.props.errorMessagePath) {\n // TODO: allow supplying an error formatter function\n let message = get(body, this.props.errorMessagePath);\n\n if (message) {\n if (typeof message !== 'string') {\n // TODO: ideally convert json to yaml so it woul dbe like\n // error: - email has been taken\n message = JSON.stringify(message);\n }\n this.setState({\n ...this.state,\n formErrorMessage: message,\n });\n }\n }\n\n this.setState({\n ...this.state,\n responseData: body,\n state: res.ok ? 'success' : 'error',\n });\n\n if (res.ok) {\n // TODO: send submit success event\n\n const submitSuccessEvent = new CustomEvent('submit:success', {\n detail: {\n res,\n body,\n },\n });\n if (this.ref) {\n this.ref.dispatchEvent(submitSuccessEvent);\n if (submitSuccessEvent.defaultPrevented) {\n return;\n }\n // TODO: option to turn this on/off?\n if (this.props.resetFormOnSubmit !== false) {\n this.ref.reset();\n }\n }\n\n // TODO: client side route event first that can be preventDefaulted\n if (this.props.successUrl) {\n if (this.ref) {\n const event = new CustomEvent('route', {\n detail: {\n url: this.props.successUrl,\n },\n });\n this.ref.dispatchEvent(event);\n if (!event.defaultPrevented) {\n location.href = this.props.successUrl;\n }\n } else {\n location.href = this.props.successUrl;\n }\n }\n }\n },\n err => {\n const submitErrorEvent = new CustomEvent('submit:error', {\n detail: {\n error: err,\n },\n });\n if (this.ref) {\n this.ref.dispatchEvent(submitErrorEvent);\n if (submitErrorEvent.defaultPrevented) {\n return;\n }\n }\n\n // TODO: send submit error event\n this.setState({\n ...this.state,\n responseData: err,\n state: 'error',\n });\n }\n );\n }\n }}\n {...this.props.attributes}\n >\n {/* TODO: maybe BuilderBlocks */}\n {this.props.builderBlock &&\n this.props.builderBlock.children &&\n this.props.builderBlock.children.map((block, index) => (\n <BuilderBlockComponent key={block.id} block={block} />\n ))}\n\n {this.submissionState === 'error' && (\n <BuilderBlocks dataPath=\"errorMessage\" blocks={this.props.errorMessage!} />\n )}\n\n {this.submissionState === 'sending' && (\n <BuilderBlocks dataPath=\"sendingMessage\" blocks={this.props.sendingMessage!} />\n )}\n\n {/* TODO: option to turn this off */}\n {this.submissionState === 'error' && this.state.responseData && (\n // TODO: tag to edit\n <pre\n className=\"builder-form-error-text\"\n css={{ padding: 10, color: 'red', textAlign: 'center' }}\n >\n {JSON.stringify(this.state.responseData, null, 2)}\n </pre>\n )}\n\n {this.submissionState === 'success' && (\n <BuilderBlocks dataPath=\"successMessage\" blocks={this.props.successMessage!} />\n )}\n </form>\n </BuilderStoreContext.Provider>\n )}\n </BuilderStoreContext.Consumer>\n );\n }\n}\n\nexport const Form = withBuilder(FormComponent, {\n name: 'Form:Form',\n // editableTags: ['builder-form-error']\n defaults: {\n responsiveStyles: {\n large: {\n marginTop: '15px',\n paddingBottom: '15px',\n },\n },\n },\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fef36d2a846134910b64b88e6d18c5ca5',\n inputs: [\n {\n name: 'sendSubmissionsTo',\n type: 'string',\n // TODO: save to builder data and user can download as csv\n // TODO: easy for mode too or computed add/remove fields form mode\n // so you can edit details and high level mode at same time...\n // Later - more integrations like mailchimp\n // /api/v1/form-submit?to=mailchimp\n enum: [\n {\n label: 'Send to email',\n value: 'email',\n helperText: 'Send form submissions to the email address of your choosing',\n },\n {\n label: 'Custom',\n value: 'custom',\n helperText:\n 'Handle where the form requests go manually with a little code, e.g. to your own custom backend',\n },\n ],\n defaultValue: 'email',\n },\n {\n name: 'sendSubmissionsToEmail',\n type: 'string',\n required: true, // TODO: required: () => options.get(\"sendSubmissionsTo\") === \"email\"\n defaultValue: 'your@email.com',\n showIf: 'options.get(\"sendSubmissionsTo\") === \"email\"',\n },\n {\n name: 'sendWithJs',\n type: 'boolean',\n helperText: 'Set to false to use basic html form action',\n defaultValue: true,\n showIf: 'options.get(\"sendSubmissionsTo\") === \"custom\"',\n },\n {\n name: 'name',\n type: 'string',\n defaultValue: 'My form',\n // advanced: true\n },\n {\n name: 'action',\n type: 'string',\n helperText: 'URL to send the form data to',\n showIf: 'options.get(\"sendSubmissionsTo\") === \"custom\"',\n },\n {\n name: 'contentType',\n type: 'string',\n defaultValue: JSON_CONTENT_TYPE,\n advanced: true,\n // TODO: do automatically if file input\n enum: [JSON_CONTENT_TYPE, MULTIPART_CONTENT_TYPE, ENCODED_CONTENT_TYPE],\n showIf: 'options.get(\"sendSubmissionsTo\") === \"custom\" && options.get(\"sendWithJs\") === true',\n },\n {\n name: 'method',\n type: 'string',\n showIf: 'options.get(\"sendSubmissionsTo\") === \"custom\"',\n defaultValue: 'POST',\n advanced: true,\n },\n {\n name: 'previewState',\n type: 'string',\n // TODO: persist: false flag\n enum: ['unsubmitted', 'sending', 'success', 'error'],\n defaultValue: 'unsubmitted',\n helperText:\n 'Choose a state to edit, e.g. choose \"success\" to show what users see on success and edit the message',\n showIf: 'options.get(\"sendSubmissionsTo\") !== \"zapier\" && options.get(\"sendWithJs\") === true',\n },\n {\n name: 'successUrl',\n type: 'url',\n helperText: 'Optional URL to redirect the user to on form submission success',\n showIf: 'options.get(\"sendSubmissionsTo\") !== \"zapier\" && options.get(\"sendWithJs\") === true',\n },\n {\n name: 'resetFormOnSubmit',\n type: 'boolean',\n showIf: options =>\n options.get('sendSubmissionsTo') === 'custom' && options.get('sendWithJs') === true,\n advanced: true,\n },\n {\n name: 'successMessage',\n type: 'uiBlocks',\n hideFromUI: true,\n defaultValue: [\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Text',\n options: {\n text: '<span>Thanks!</span>',\n },\n },\n },\n ],\n },\n {\n name: 'validate',\n type: 'boolean',\n defaultValue: true,\n advanced: true,\n },\n {\n name: 'errorMessagePath',\n type: 'text',\n advanced: true,\n helperText:\n 'Path to where to get the error message from in a JSON response to display to the user, e.g. \"error.message\" for a response like { \"error\": { \"message\": \"this username is taken\" }}',\n },\n {\n name: 'errorMessage',\n type: 'uiBlocks',\n hideFromUI: true,\n defaultValue: [\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n bindings: {\n 'component.options.text': 'state.formErrorMessage || block.component.options.text',\n },\n component: {\n name: 'Text',\n options: {\n // TODO: how pull in API message\n text: '<span>Form submission error :( Please check your answers and try again</span>',\n },\n },\n },\n ],\n },\n {\n name: 'sendingMessage',\n type: 'uiBlocks',\n hideFromUI: true,\n defaultValue: [\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Text',\n options: {\n // TODO: how pull in API message\n text: '<span>Sending...</span>',\n },\n },\n },\n ],\n },\n {\n name: 'customHeaders',\n type: 'map',\n // TODO: add typings for this property\n ...({\n valueType: {\n type: 'string',\n },\n } as any),\n advanced: true,\n showIf: 'options.get(\"sendSubmissionsTo\") === \"custom\" && options.get(\"sendWithJs\") === true',\n },\n // TODO: custom headers or any fetch options\n // TODO: json vs serialized (i.e. send on client or not)\n // TODO: success/fail stuff\n ],\n noWrap: true,\n // TODO: defaultChildren with two inputs and submit button\n canHaveChildren: true,\n defaultChildren: [\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Text',\n options: {\n text: '<span>Enter your name</span>',\n },\n },\n },\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Form:Input',\n options: {\n name: 'name',\n placeholder: 'Jane Doe',\n },\n },\n },\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Text',\n options: {\n text: '<span>Enter your email</span>',\n },\n },\n },\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Form:Input',\n options: {\n name: 'email',\n placeholder: 'jane@doe.com',\n },\n },\n },\n {\n '@type': '@builder.io/sdk:Element',\n responsiveStyles: {\n large: {\n marginTop: '10px',\n },\n },\n component: {\n name: 'Form:SubmitButton',\n options: {\n text: 'Submit',\n },\n },\n },\n ],\n});\n","'use client';\nimport React from 'react';\nimport { Builder } from '@builder.io/sdk';\nimport { withBuilder } from '../../functions/with-builder';\n\n// TODO: how do onchange...\n// TODO: actions all custom events and custom js gets\n// passed an element reference and listens for events....\n// Needs to unsubscribe, so must manage\nexport interface FormInputProps {\n type?: string;\n attributes?: any;\n name?: string;\n value?: string;\n placeholder?: string;\n defaultValue?: string;\n required?: boolean;\n}\n\nclass FormInputComponent extends React.Component<FormInputProps> {\n render() {\n return (\n <input\n key={Builder.isEditing && this.props.defaultValue ? this.props.defaultValue : 'default-key'}\n placeholder={this.props.placeholder}\n type={this.props.type}\n name={this.props.name}\n {...(typeof this.props.value === 'undefined'\n ? {\n defaultValue: this.props.defaultValue,\n }\n : {\n value: this.props.value,\n })}\n required={this.props.required}\n {...this.props.attributes}\n />\n );\n }\n}\n\nexport const FormInput = withBuilder(FormInputComponent, {\n name: 'Form:Input',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fad6f37889d9e40bbbbc72cdb5875d6ca',\n inputs: [\n {\n name: 'type',\n type: 'text',\n enum: [\n 'text',\n 'number',\n 'email',\n 'url',\n 'checkbox',\n 'radio',\n 'range',\n 'date',\n 'datetime-local',\n 'search',\n 'tel',\n 'time',\n 'file',\n 'month',\n 'week',\n 'password',\n 'color',\n 'hidden',\n ],\n defaultValue: 'text',\n },\n {\n name: 'name',\n type: 'string',\n required: true,\n helperText:\n 'Every input in a form needs a unique name describing what it takes, e.g. \"email\"',\n },\n {\n name: 'placeholder',\n type: 'string',\n defaultValue: 'Hello there',\n helperText: 'Text to display when there is no value',\n },\n // TODO: handle value vs default value automatically like ng-model\n {\n name: 'defaultValue',\n type: 'string',\n },\n {\n name: 'value',\n type: 'string',\n advanced: true,\n },\n\n {\n name: 'required',\n type: 'boolean',\n helperText: 'Is this input required to be filled out to submit a form',\n defaultValue: false,\n },\n ],\n // TODO\n // TODO: call editorHooks?\n // ...({\n // hooks: {\n // 'ElementLayout:shiftBottomSide': (element: Element, amount: number, snap: boolean) => {\n // // TODO: either update line height or split the padding padding on bottom sides hmm\n // }\n // } as any,\n // }),\n noWrap: true,\n static: true,\n defaultStyles: {\n paddingTop: '10px',\n paddingBottom: '10px',\n paddingLeft: '10px',\n paddingRight: '10px',\n borderRadius: '3px',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: '#ccc',\n },\n});\n","'use client';\nimport React from 'react';\nimport { withBuilder } from '../../functions/with-builder';\n\nexport interface ButtonProps {\n attributes?: any;\n text?: string;\n}\n\nclass FormSubmitButtonComponent extends React.Component<ButtonProps> {\n render() {\n return (\n <button type=\"submit\" {...this.props.attributes}>\n {this.props.text}\n </button>\n );\n }\n}\n\nexport const FormSubmitButton = withBuilder(FormSubmitButtonComponent, {\n name: 'Form:SubmitButton',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Fdf2820ffed1f4349a94c40b3221f5b98',\n defaultStyles: {\n appearance: 'none',\n paddingTop: '15px',\n paddingBottom: '15px',\n paddingLeft: '25px',\n paddingRight: '25px',\n backgroundColor: '#3898EC',\n color: 'white',\n borderRadius: '4px',\n cursor: 'pointer',\n },\n inputs: [\n {\n name: 'text',\n type: 'text',\n defaultValue: 'Click me',\n },\n ],\n static: true,\n noWrap: true,\n // TODO: optional children? maybe as optional form input\n // that only shows if advanced setting is flipped\n // TODO: defaultChildren\n // canHaveChildren: true,\n});\n","'use client';\nimport React from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { BuilderBlockComponent } from '../../builder-react';\nimport { withBuilder } from '../../functions/with-builder';\n\nexport interface LabelProps {\n attributes?: any;\n text?: string;\n for?: string;\n builderBlock?: BuilderElement;\n}\n\nclass LabelComponent extends React.Component<LabelProps> {\n render() {\n return (\n <label htmlFor={this.props.for} {...this.props.attributes}>\n {this.props.text && (\n <span\n className=\"builder-label-text\"\n dangerouslySetInnerHTML={{\n __html: this.props.text,\n }}\n />\n )}\n {this.props.builderBlock &&\n this.props.builderBlock.children &&\n this.props.builderBlock.children.map(item => (\n <BuilderBlockComponent key={item.id} block={item} />\n ))}\n </label>\n );\n }\n}\n\n// TODO: strict ADA mode that enforces with custom error messages that all inputs need\n// labels and names\nexport const Label = withBuilder(LabelComponent, {\n name: 'Form:Label',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F9322342f04b545fb9a8091cd801dfb5b',\n inputs: [\n {\n name: 'text',\n type: 'html',\n richText: true,\n defaultValue: 'Label',\n },\n {\n name: 'for',\n type: 'text',\n helperText: 'The name of the input this label is for',\n advanced: true,\n },\n ],\n noWrap: true,\n static: true,\n canHaveChildren: true,\n // TODO: take inner html or blocsk\n // TODO: optional children? maybe as optional form input\n // that only shows if advanced setting is flipped\n // TODO: defaultChildren\n // canHaveChildren: true,\n});\n","'use client';\nimport React from 'react';\nimport { Builder } from '@builder.io/sdk';\nimport { withBuilder } from '../../functions/with-builder';\n\nexport interface FormSelectProps {\n options?: { name?: string; value: string }[];\n attributes?: any;\n name?: string;\n value?: string;\n defaultValue?: string;\n required?: boolean;\n}\n\nclass FormSelectComponent extends React.Component<FormSelectProps> {\n render() {\n const { options } = this.props;\n return (\n <select\n value={this.props.value}\n key={Builder.isEditing && this.props.defaultValue ? this.props.defaultValue : 'default-key'}\n defaultValue={this.props.defaultValue}\n name={this.props.name}\n required={this.props.required}\n {...this.props.attributes}\n >\n {options &&\n options.map(option => (\n <option value={option.value}>{option.name || option.value}</option>\n ))}\n </select>\n );\n }\n}\n\nexport const FormSelect = withBuilder(FormSelectComponent, {\n name: 'Form:Select',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F83acca093fb24aaf94dee136e9a4b045',\n defaultStyles: {\n alignSelf: 'flex-start',\n },\n inputs: [\n {\n name: 'options',\n type: 'list',\n required: true,\n subFields: [\n {\n name: 'value',\n type: 'text',\n required: true,\n },\n {\n name: 'name',\n type: 'text',\n },\n ],\n defaultValue: [\n {\n value: 'option 1',\n },\n {\n value: 'option 2',\n },\n ],\n },\n {\n name: 'name',\n type: 'string',\n required: true,\n helperText:\n 'Every select in a form needs a unique name describing what it gets, e.g. \"email\"',\n },\n {\n name: 'defaultValue',\n type: 'string',\n },\n {\n name: 'value',\n type: 'string',\n advanced: true,\n },\n\n {\n name: 'required',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n static: true,\n noWrap: true,\n});\n","'use client';\nimport React from 'react';\nimport { withBuilder } from '../../functions/with-builder';\n\nexport interface FormTextAreaProps {\n attributes?: any;\n name?: string;\n value?: string;\n defaultValue?: string;\n placeholder?: string;\n required?: boolean;\n}\n\nclass TextAreaComponent extends React.Component<FormTextAreaProps> {\n render() {\n return (\n <textarea\n placeholder={this.props.placeholder}\n name={this.props.name}\n value={this.props.value}\n defaultValue={this.props.defaultValue}\n required={this.props.required}\n {...this.props.attributes}\n />\n );\n }\n}\n\nexport const TextArea = withBuilder(TextAreaComponent, {\n name: 'Form:TextArea',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Ff74a2f3de58c4c3e939204e5b6b8f6c3',\n inputs: [\n {\n advanced: true,\n name: 'value',\n type: 'string',\n },\n {\n name: 'name',\n type: 'string',\n required: true,\n helperText: 'Every input in a form needs a unique name describing what it gets, e.g. \"email\"',\n },\n {\n name: 'defaultValue',\n type: 'string',\n },\n {\n name: 'placeholder',\n type: 'string',\n defaultValue: 'Hello there',\n },\n {\n name: 'required',\n type: 'boolean',\n defaultValue: false,\n },\n ],\n defaultStyles: {\n paddingTop: '10px',\n paddingBottom: '10px',\n paddingLeft: '10px',\n paddingRight: '10px',\n borderRadius: '3px',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: '#ccc',\n },\n static: true,\n noWrap: true,\n});\n","'use client';\nimport React from 'react';\nimport { BuilderElement } from '@builder.io/sdk';\nimport { withBuilder } from '../../functions/with-builder';\nimport { IMAGE_FILE_TYPES } from 'src/constants/file-types.constant';\nimport { getSrcSet } from '../Image';\n\nexport interface ImgProps {\n attributes?: any;\n image?: string;\n builderBlock?: BuilderElement;\n aspectRatio?: number;\n backgroundSize?: string;\n backgroundPosition?: string;\n altText?: string;\n title?: string;\n}\n\n// TODO: srcset, alt text input, object size/position input, etc\n\nclass ImgComponent extends React.Component<ImgProps> {\n getSrcSet(): string | undefined {\n const url = this.props.image;\n if (!url || typeof url !== 'string') {\n return;\n }\n\n // We can auto add srcset for cdn.builder.io images\n if (!url.match(/builder\\.io/)) {\n return;\n }\n\n return getSrcSet(url);\n }\n\n render() {\n const attributes = this.props.attributes || {};\n const srcset = this.getSrcSet();\n\n const { style: userStyle, ...restAttributes } = attributes;\n\n const defaultStyle: React.CSSProperties = {\n objectFit: this.props.backgroundSize as React.CSSProperties['objectFit'],\n objectPosition: this.props.backgroundPosition as React.CSSProperties['objectPosition'],\n aspectRatio: this.props.aspectRatio as unknown as React.CSSProperties['aspectRatio'],\n };\n\n const mergedStyle = {\n ...defaultStyle,\n ...(userStyle as React.CSSProperties),\n };\n\n return (\n <img\n loading=\"lazy\"\n {...restAttributes}\n src={this.props.image || attributes.src}\n srcSet={srcset}\n alt={this.props.altText}\n title={this.props.title}\n style={mergedStyle}\n className=\"builder-raw-img\"\n />\n );\n }\n}\n\nexport const Img = withBuilder(ImgComponent, {\n name: 'Raw:Img',\n hideFromInsertMenu: true,\n\n image:\n 'https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4',\n inputs: [\n {\n name: 'image',\n bubble: true,\n type: 'file',\n allowedFileTypes: IMAGE_FILE_TYPES,\n required: true,\n },\n {\n name: 'backgroundSize',\n type: 'text',\n defaultValue: 'cover',\n enum: [\n {\n label: 'contain',\n value: 'contain',\n helperText: 'The image should never get cropped',\n },\n {\n label: 'cover',\n value: 'cover',\n helperText: \"The image should fill it's box, cropping when needed\",\n },\n ],\n },\n {\n name: 'backgroundPosition',\n type: 'text',\n defaultValue: 'center',\n enum: [\n 'center',\n 'top',\n 'left',\n 'right',\n 'bottom',\n 'top left',\n 'top right',\n 'bottom left',\n 'bottom right',\n ],\n },\n {\n name: 'altText',\n type: 'string',\n helperText: 'Text to display when the user has images off',\n },\n {\n name: 'title',\n type: 'string',\n helperText: 'Text to display when hovering over the asset',\n },\n {\n name: 'aspectRatio',\n type: 'number',\n helperText:\n \"This is the ratio of height/width, e.g. set to 1.5 for a 300px wide and 200px tall photo. Set to 0 to not force the image to maintain it's aspect ratio\",\n advanced: true,\n defaultValue: 0.7041,\n },\n ],\n\n noWrap: true,\n});\n","'use client';\nimport * as React from 'react';\nimport { BuilderElement, Builder } from '@builder.io/sdk';\n\nexport interface RawTextProps {\n attributes?: any;\n text?: string;\n builderBlock?: BuilderElement;\n}\n\nexport const RawText = (props: RawTextProps) => {\n const attributes = props.attributes || {};\n return (\n <span\n className={attributes?.class || attributes?.className}\n dangerouslySetInnerHTML={{ __html: props.text || '' }}\n />\n );\n};\n\nBuilder.registerComponent(RawText, {\n name: 'Builder:RawText',\n hideFromInsertMenu: true,\n inputs: [\n {\n name: 'text',\n bubble: true,\n type: 'longText',\n required: true,\n },\n ],\n});\n","type UserAttributes = {\n date?: string | Date;\n urlPath?: string;\n [key: string]: any; // Allow any other properties\n};\n\n// Query type\ntype QueryOperator =\n | 'is'\n | 'isNot'\n | 'contains'\n | 'startsWith'\n | 'endsWith'\n | 'greaterThan'\n | 'lessThan'\n | 'greaterThanOrEqualTo'\n | 'lessThanOrEqualTo';\n\ntype QueryValue = string | number | boolean | Array<string | number | boolean>;\n\nexport type Query = {\n property: string;\n operator: QueryOperator;\n value: QueryValue;\n};\n\n// minified version of the function need to be added to the script\nexport const filterWithCustomTargetingScript = `function filterWithCustomTargeting(e,t,n,r){var i={query:t,startDate:n,endDate:r},o=e.date&&new Date(e.date)||new Date;return!(i.startDate&&new Date(i.startDate)>o)&&(!(i.endDate&&new Date(i.endDate)<o)&&(!i.query||!i.query.length||i.query.every((function(t){return objectMatchesQuery(e,t)}))))}function isString(e){return\"string\"==typeof e}function isNumber(e){return\"number\"==typeof e}function objectMatchesQuery(e,t){return function(){var n=t.property,r=t.operator,i=t.value;if(t&&\"urlPath\"===t.property&&t.value&&\"string\"==typeof t.value&&\"/\"!==t.value&&t.value.endsWith(\"/\")&&(i=t.value.slice(0,-1)),!n||!r)return!0;if(Array.isArray(i))return\"isNot\"===r?i.every((function(t){return objectMatchesQuery(e,{property:n,operator:r,value:t})})):!!i.find((function(t){return objectMatchesQuery(e,{property:n,operator:r,value:t})}));var o=e[n];if(Array.isArray(o))return o.includes(i);switch(r){case\"is\":return o===i;case\"isNot\":return o!==i;case\"contains\":return(isString(o)||Array.isArray(o))&&o.includes(String(i));case\"startsWith\":return isString(o)&&o.startsWith(String(i));case\"endsWith\":return isString(o)&&o.endsWith(String(i));case\"greaterThan\":return isNumber(o)&&isNumber(i)&&o>i;case\"lessThan\":return isNumber(o)&&isNumber(i)&&o<i;case\"greaterThanOrEqualTo\":return isNumber(o)&&isNumber(i)&&o>=i;case\"lessThanOrEqualTo\":return isNumber(o)&&isNumber(i)&&o<=i}return!1}()}`;\n\nexport function filterWithCustomTargeting(\n userAttributes: UserAttributes,\n query: Query[],\n startDate?: string,\n endDate?: string\n) {\n const item = {\n query,\n startDate,\n endDate,\n };\n\n const now = (userAttributes.date && new Date(userAttributes.date)) || new Date();\n\n if (item.startDate && new Date(item.startDate) > now) {\n return false;\n } else if (item.endDate && new Date(item.endDate) < now) {\n return false;\n }\n\n if (!item.query || !item.query.length) {\n return true;\n }\n\n return item.query.every((filter: Query) => {\n return objectMatchesQuery(userAttributes, filter);\n });\n}\n\nfunction isString(val: unknown): val is string {\n return typeof val === 'string';\n}\n\nfunction isNumber(val: unknown): val is number {\n return typeof val === 'number';\n}\n\nfunction objectMatchesQuery(userattr: UserAttributes, query: Query): boolean {\n const result = (() => {\n const property = query.property;\n const operator = query.operator;\n let testValue = query.value;\n\n if (\n query &&\n query.property === 'urlPath' &&\n query.value &&\n typeof query.value === 'string' &&\n query.value !== '/' &&\n query.value.endsWith('/')\n ) {\n testValue = query.value.slice(0, -1);\n }\n\n // Check is query property is present in userAttributes. Proceed only if it is present.\n if (!(property && operator)) {\n return true;\n }\n\n if (Array.isArray(testValue)) {\n if (operator === 'isNot') {\n return testValue.every(val =>\n objectMatchesQuery(userattr, { property, operator, value: val })\n );\n }\n return !!testValue.find(val =>\n objectMatchesQuery(userattr, { property, operator, value: val })\n );\n }\n const value = userattr[property];\n\n if (Array.isArray(value)) {\n return value.includes(testValue);\n }\n\n switch (operator) {\n case 'is':\n return value === testValue;\n case 'isNot':\n return value !== testValue;\n case 'contains':\n return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));\n case 'startsWith':\n return isString(value) && value.startsWith(String(testValue));\n case 'endsWith':\n return isString(value) && value.endsWith(String(testValue));\n case 'greaterThan':\n return isNumber(value) && isNumber(testValue) && value > testValue;\n case 'lessThan':\n return isNumber(value) && isNumber(testValue) && value < testValue;\n case 'greaterThanOrEqualTo':\n return isNumber(value) && isNumber(testValue) && value >= testValue;\n case 'lessThanOrEqualTo':\n return isNumber(value) && isNumber(testValue) && value <= testValue;\n }\n return false;\n })();\n\n return result;\n}\n","import React, { useContext, useRef } from 'react';\nimport { Builder, builder, BuilderElement } from '@builder.io/sdk';\nimport { useEffect, useState } from 'react';\nimport { BuilderBlocks } from '../components/builder-blocks.component';\nimport {\n filterWithCustomTargeting,\n filterWithCustomTargetingScript,\n Query,\n} from '../functions/filter-with-custom-targeting';\nimport { BuilderStoreContext } from '../store/builder-store';\n\nexport type PersonalizationContainerProps = {\n children: React.ReactNode;\n previewingIndex: number | null;\n builderBlock?: BuilderElement;\n builderState: any;\n variants?: [\n {\n query: Query[];\n startDate?: string;\n endDate?: string;\n blocks: BuilderElement[];\n },\n ];\n attributes: any;\n};\n\nexport function PersonalizationContainer(props: PersonalizationContainerProps) {\n const isBeingHydrated = Boolean(\n Builder.isBrowser && (window as any).__hydrated?.[props.builderBlock?.id!]\n );\n const rootRef = useRef<HTMLDivElement>(null);\n const [isClient, setIsClient] = useState(isBeingHydrated);\n const [isHydrated, setIsHydrated] = useState(false);\n const [_, setUpdate] = useState(0);\n const builderStore = useContext(BuilderStoreContext);\n\n useEffect(() => {\n setIsClient(true);\n setIsHydrated(true);\n const subscriber = builder.userAttributesChanged.subscribe(() => {\n setUpdate(prev => prev + 1);\n });\n let unsubs = [() => subscriber.unsubscribe()];\n\n if (!(Builder.isEditing || Builder.isPreviewing)) {\n const variant = filteredVariants[0];\n // fire a custom event to update the personalization container\n rootRef.current?.dispatchEvent(\n new CustomEvent('builder.variantLoaded', {\n detail: {\n variant: variant || 'default',\n content: builderStore.content,\n },\n bubbles: true,\n })\n );\n\n // add an intersection observer to fire a builder.variantDisplayed event when the container is in the viewport\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n rootRef.current?.dispatchEvent(\n new CustomEvent('builder.variantDisplayed', {\n detail: {\n variant: variant || 'default',\n content: builderStore.content,\n },\n bubbles: true,\n })\n );\n }\n });\n });\n\n observer.observe(rootRef.current!);\n unsubs.push(() => observer.disconnect());\n }\n\n return () => {\n unsubs.forEach(fn => fn());\n };\n }, []);\n\n if (Builder.isServer) {\n return (\n <React.Fragment>\n <div\n {...props.attributes}\n // same as the client side styles for hydration matching\n style={{\n opacity: 1,\n transition: 'opacity 0.2s ease-in-out',\n ...props.attributes?.style,\n }}\n className={`builder-personalization-container ${props.attributes.className}`}\n >\n {props.variants?.map((variant, index) => (\n <template key={index} data-variant-id={props.builderBlock?.id! + index}>\n <BuilderBlocks\n blocks={variant.blocks}\n parentElementId={props.builderBlock?.id}\n dataPath={`component.options.variants.${index}.blocks`}\n child\n />\n </template>\n ))}\n <script\n nonce={builderStore.context.nonce}\n id={`variants-script-${props.builderBlock?.id}`}\n dangerouslySetInnerHTML={{\n __html: getPersonalizationScript(\n props.variants,\n props.builderBlock?.id || 'none',\n props.builderState.state?.locale\n ),\n }}\n />\n <BuilderBlocks\n blocks={props.builderBlock?.children}\n parentElementId={props.builderBlock?.id}\n dataPath=\"this.children\"\n child\n />\n </div>\n <script\n nonce={builderStore.context.nonce}\n dangerouslySetInnerHTML={{\n __html: `\n window.__hydrated = window.__hydrated || {};\n window.__hydrated['${props.builderBlock?.id}'] = true;\n `.replace(/\\s+/g, ' '),\n }}\n />\n </React.Fragment>\n );\n }\n\n const filteredVariants = (props.variants || []).filter(variant => {\n return filterWithCustomTargeting(\n {\n ...(props.builderState.state?.locale ? { locale: props.builderState.state.locale } : {}),\n ...builder.getUserAttributes(),\n },\n variant.query,\n variant.startDate,\n variant.endDate\n );\n });\n\n return (\n <React.Fragment>\n <div\n ref={rootRef}\n {...props.attributes}\n style={{\n opacity: isClient ? 1 : 0,\n transition: 'opacity 0.2s ease-in-out',\n ...props.attributes?.style,\n }}\n className={`builder-personalization-container ${\n props.attributes.className\n }${isClient ? '' : ' builder-personalization-container-loading'}`}\n >\n {/* If editing a specific varient */}\n {isHydrated &&\n Builder.isEditing &&\n typeof props.previewingIndex === 'number' &&\n props.previewingIndex < (props.variants?.length || 0) ? (\n <BuilderBlocks\n blocks={props.variants?.[props.previewingIndex]?.blocks}\n parentElementId={props.builderBlock?.id}\n dataPath={`component.options.variants.${props.previewingIndex}.blocks`}\n child\n />\n ) : // If editing the default or we're on the server and there are no matching variants show the default\n (isHydrated && Builder.isEditing && typeof props.previewingIndex !== 'number') ||\n !isClient ||\n !filteredVariants.length ? (\n <BuilderBlocks\n blocks={props.builderBlock?.children}\n parentElementId={props.builderBlock?.id}\n dataPath=\"this.children\"\n child\n />\n ) : (\n // Show the variant matching the current user attributes\n <BuilderBlocks\n blocks={filteredVariants[0]?.blocks}\n parentElementId={props.builderBlock?.id}\n dataPath={`component.options.variants.${props.variants?.indexOf(\n filteredVariants[0]\n )}.blocks`}\n child\n />\n )}\n </div>\n <script\n nonce={builderStore.context.nonce}\n dangerouslySetInnerHTML={{\n __html: `\n window.__hydrated = window.__hydrated || {};\n window.__hydrated['${props.builderBlock?.id}'] = true;\n `.replace(/\\s+/g, ' '),\n }}\n />\n </React.Fragment>\n );\n}\n\nBuilder.registerComponent(PersonalizationContainer, {\n name: 'PersonalizationContainer',\n noWrap: true,\n friendlyName: 'Dynamic Container',\n image:\n 'https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F37229ed30d8c41dfb10b8cca1992053a',\n canHaveChildren: true,\n inputs: [\n {\n name: 'variants',\n defaultValue: [],\n behavior: 'personalizationVariantList',\n type: 'list',\n subFields: [\n {\n name: 'name',\n type: 'text',\n localized: false,\n },\n {\n name: 'query',\n friendlyName: 'Targeting rules',\n type: 'BuilderQuery',\n defaultValue: [],\n localized: false,\n },\n {\n name: 'startDate',\n type: 'date',\n localized: false,\n },\n {\n name: 'endDate',\n type: 'date',\n localized: false,\n },\n {\n name: 'blocks',\n type: 'UiBlocks',\n hideFromUI: true,\n defaultValue: [],\n },\n ],\n },\n ],\n});\n\nfunction getPersonalizationScript(\n variants: PersonalizationContainerProps['variants'],\n blockId: string,\n locale?: string\n) {\n return `\n (function() {\n function getCookie(name) {\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n for(var i=0;i < ca.length;i++) {\n var c = ca[i];\n while (c.charAt(0)==' ') c = c.substring(1,c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);\n }\n return null;\n }\n function removeVariants() {\n variants.forEach(function (template, index) {\n document.querySelector('template[data-variant-id=\"' + \"${blockId}\" + index + '\"]').remove();\n });\n document.getElementById('variants-script-${blockId}').remove();\n }\n\n var attributes = JSON.parse(getCookie(\"${Builder.attributesCookieName}\") || \"{}\");\n ${locale ? `attributes.locale = \"${locale}\";` : ''}\n var variants = ${JSON.stringify(variants?.map(v => ({ query: v.query, startDate: v.startDate, endDate: v.endDate })))};\n var winningVariantIndex = variants.findIndex(function(variant) {\n return filterWithCustomTargeting(\n attributes,\n variant.query,\n variant.startDate,\n variant.endDate\n );\n });\n var isDebug = location.href.includes('builder.debug=true');\n if (isDebug) {\n console.debug('PersonalizationContainer', {\n attributes: attributes,\n variants: variants,\n winningVariantIndex: winningVariantIndex,\n });\n }\n if (winningVariantIndex !== -1) {\n var winningVariant = document.querySelector('template[data-variant-id=\"' + \"${blockId}\" + winningVariantIndex + '\"]');\n if (winningVariant) {\n var parentNode = winningVariant.parentNode;\n var newParent = parentNode.cloneNode(false);\n newParent.appendChild(winningVariant.content.firstChild);\n parentNode.parentNode.replaceChild(newParent, parentNode);\n if (isDebug) {\n console.debug('PersonalizationContainer', 'Winning variant Replaced:', winningVariant);\n }\n }\n } else if (variants.length > 0) {\n removeVariants();\n }\n ${filterWithCustomTargetingScript}\n })();\n `.replace(/\\s+/g, ' ');\n}\n","import { useEffect, useState } from 'react';\nimport { Builder } from '@builder.io/sdk';\n\nexport function useIsPreviewing() {\n const [isPreviewing, setIsPreviewing] = useState(false);\n\n useEffect(() => {\n if (Builder.isEditing || Builder.isPreviewing) {\n setIsPreviewing(true);\n }\n }, []);\n\n return isPreviewing;\n}\n","import './scripts/init-editing';\n\nimport { builder, Builder } from '@builder.io/sdk';\nexport { BuilderElement } from '@builder.io/sdk';\nimport { SDK_VERSION } from './sdk-version';\n\nBuilder.isReact = true;\nBuilder.sdkInfo = {\n name: 'react',\n version: SDK_VERSION,\n};\n\nexport { BuilderBlocks } from './components/builder-blocks.component';\nexport { BuilderBlock as BuilderBlockComponent } from './components/builder-block.component';\nexport { BuilderContent } from './components/builder-content.component';\nimport {\n BuilderComponent,\n onChange,\n RegisteredComponent,\n} from './components/builder-component.component';\nexport { BuilderStoreContext, BuilderStore } from './store/builder-store';\nexport { BuilderMetaContext } from './store/builder-meta';\nexport { BuilderAsyncRequestsContext } from './store/builder-async-requests';\nexport { BuilderBlock } from './decorators/builder-block.decorator';\n\nexport * from './functions/update-metadata';\n\nexport { withBuilder } from './functions/with-builder';\nexport { withChildren } from './functions/with-children';\nexport { noWrap } from './functions/no-wrap';\n\nexport { BuilderComponent as BuilderPage, onChange, RegisteredComponent };\nexport { BuilderComponent };\nexport { BuilderComponent as Content };\n\nexport { Text } from './blocks/Text';\nexport { Slot as Dropzone } from './blocks/Slot';\nexport { Fragment } from './blocks/Fragment';\nexport { Columns } from './blocks/Columns';\nexport { Embed } from './blocks/Embed';\nexport { CustomCode } from './blocks/CustomCode';\nexport { Image, getSrcSet } from './blocks/Image';\nexport { Video } from './blocks/Video';\nexport { Symbol } from './blocks/Symbol';\nexport { Button } from './blocks/Button';\nexport { Section } from './blocks/Section';\nexport { StateProvider } from './blocks/StateProvider';\nexport { Router } from './blocks/Router';\nexport { Mutation } from './blocks/Mutation';\n\nexport { Form } from './blocks/forms/Form';\nexport { FormInput } from './blocks/forms/Input';\nexport { FormSubmitButton } from './blocks/forms/Button';\nexport { Label } from './blocks/forms/Label'; // advanced?\nexport { FormSelect } from './blocks/forms/Select'; // advanced?\nexport { TextArea } from './blocks/forms/TextArea';\nexport { Img } from './blocks/raw/Img';\nexport { RawText } from './blocks/raw/RawText';\nexport { PersonalizationContainer } from './blocks/PersonalizationContainer';\n\nexport { stringToFunction } from './functions/string-to-function';\nexport { useIsPreviewing } from './hooks/useIsPreviewing';\n\nexport { builder, Builder };\nexport default builder;\n"],"names":["SDK_VERSION","window","_a","parent","postMessage","type","data","value","supportsPatchUpdates","supportsCustomBreakpoints","supportsXSmallBreakpoint","supportsGlobalSymbols","blockLevelPersonalization","version","fastClone","obj","JSON","parse","stringify","omit","values","_i","arguments","length","newObject","Object","assign","values_1","key","sizeNames","sizes","xsmall","min","default","max","small","medium","large","getWidthForSize","size","this","getSizeForWidth","width","sizeNames_1","getSizesForBreakpoints","breakpoints","newSizes","xsmallMin","Math","floor","smallMin","mediumMin","largeMin","set","_path","path","Array","isArray","toString","match","slice","reduce","a","c","i","abs","Number","noop","safeDynamicRequire","globalThis","require","Builder","isServer","eval","e","isDebug","Boolean","process","env","DEBUG","isNodeRuntime","versions","node","shouldForceBrowserRuntimeInNode","isArm64","arch","isNode20","startsWith","hasNoNodeSnapshotNodeOption","NODE_OPTIONS","includes","console","log","fnCache","api","state","builder","stringToFunction","str","expression","errors","logs","trim","cacheKey","useReturn","fn","isBrowser","Function","concat","error","push","message","indexOf","warn","final","args","apply","isolateContext","getIsolateContext","ivm_1","resultStr","evalClosureSync","makeFn","map","arg","index","Reference","indexOfBuilderInstance","getUserAttributes","res","_error","stack","debug","code","names","join","isolatedContext","serverContext","Isolate","memoryLimit","createContextSync","setServerContext","jail","global","setSync","derefInto","isPromise","thing","then","isRequestInfo","BuilderAsyncRequestsContext","React","createContext","requests","BuilderStoreContext","rootState","content","context","update","mutator","applyPatchWithMinimalMutationChain","patch","preserveRoot","op","pathArr","split","shift","newObj","__assign","objPart","isLast","property","splice","nextProperty","newPart","String","__spreadArray","htmlEscape","replace","blockToHtmlString","block","tagName","id","class","keys","properties","component","name","options","text","children","item","Link","props","Consumer","renderLink","createElement","traverse","callback","visited","WeakSet","has","add","forEach","newValue","entries","isLocalizedField","containsLocalizedValues","getOwnPropertyNames","hasLocalizedValues","extractLocalizedValues","locale","undefined","camelCaseToKebabCase","g","toLowerCase","kebabCaseToCamelCase","toUpperCase","Device","desktop","tablet","mobile","deepCloneWithConditions","clonedObj","prototype","hasOwnProperty","call","meta","voidElements","Set","last","arr","cssCase","capitalize","BuilderBlock","_super","_this","hydrated","hasError","updates","privateState","onWindowMessage","event","selection","setTimeout","$block","$blocks","patches","location","href","patches_1","setState","__extends","defineProperty","get","getDerivedStateFromError","componentDidCatch","errorInfo","_errors","_logs","emotionCss","responsiveStyles","initialAnimationStepStyles","animation","animations","trigger","firstStep","steps","stepStyles","styles","reversedNames","reverse","contentHasXSmallBreakpoint","_b","builderContent","_c","reversedNames_1","emailMode","sizesPerBreakpoints","_e","_d","&.builder-block","hoverAnimation","find","_f","transition","duration","easing","delay","transitionDelay","componentWillUnmount","isEditing","removeEventListener","componentDidMount","addEventListener","bindings","animator","bindAnimations","filter","elementId","getElement","_g","child","fieldName","InnerComponent","TagName","html","jsx","dangerouslySetInnerHTML","__html","componentName","componentInfo","tag","components","style","hide","show","actions","useState","Proxy","prop","innerComponentProperties","isVoid","noWrap","fragment","styleStr","attr","styleSplit_1","stylePieces","finalOptions","_spacer","builder-index","memo","Fragment","ClassNames","css","cx","addClass","className","_asyncRequests","attributes","builderBlock","builderState","contents","repeat","collection","collectionPath","collectionName","itemName_1","itemName","array","childState","$index","$item","Provider","render","display","padding","color","fontSize","fontStyle","Component","BuilderBlocks","onClickEmptyBlocks","isIframe","noBlocks","parentElementId","parentId","dataPath","onHoverEmptyBlocks","blocks","builder-type","builder-path","builder-parent-id","flexDirection","alignItems","onClick","onMouseEnter","renderInto","elementOrSelector","element","document","querySelector","Element","ReactDOM","NoWrap","getData","blocksString","hasBlocks","newData","variantsScript","variantsString","contentId","VariantsProvider","initialContent","nonce","canTrack","variations","variants","allVariants","variantsJson_1","testRatio","cookieName","variantId","getCookie","n","random","variant","setCookie","BuilderContent","ref","loading","getContentWithInfo","isTrusted","isTrustedHostForEvent","noEditorUpdates","contentLoaded","subscriptions","Subscription","firstLoad","clicked","trackedImpression","intersectionObserver","reactEvent","nativeEvent","autoTrack","trackInteraction","renderedVariantId","model","modelName","isStatic","variationId","isPreviewing","inline","subscribeToContent","contentData","trackImpression","queueGetContent","subscribe","matches","editingModel","previewingModel","unsubscribe","addedObserver","IntersectionObserver","observer","entry","intersectionRatio","unobserve","observe","err","contentError","dataOnly","useData","renderScript","Tag","data-template-variant-id","builder-content-id","builder-model","cookieValue","cookieVariation","variationName","testVariationId","testVariationName","exports","TARGET","Symbol","UNSUBSCRIBE","concatPath","shallowClone","onChange","object","applyPath","applyPrevious","proxyTarget","inApply","changed","isUnsubscribed","equals","is","propCache","WeakMap","pathCache","proxyCache","handleChange","previous","item_1","walkPath","invalidateCachedDescriptor","target","delete","buildProxy","proxy","handler","ignoreChange","ignoreSymbols","receiver","Reflect","isPrimitive","RegExp","isBuiltinWithoutMutableMethods","isShallow","descriptor","Map","getOwnPropertyDescriptor","configurable","writable","ignore","result","deleteProperty","thisArg","argumentsList","compare","Date","valueOf","lastIndexOf","bind","module","nextTick","debounceNextTick","debounceNextTickImpl","enumerable","next","throttle","func","wait","timeout","later","leading","now","remaining","clearTimeout","trailing","BuilderMetaContext","ampMode","tryEval","context_1","ExternalCopy","copyInto","fnString","context_2","deleteSync","toError","Error","getBuilderPixel","apiKey","@type","role","aria-hidden","src","height","opacity","overflow","pointerEvents","pick","ret","instancesMap","wrapComponent","info","builderTag","inputNames","inputs","baseProps","inputProps","debounce","immediate","fontsLoaded","fetch","sizeMap","fetchCache","searchToObject","pairs","search","substring","pair","decodeURIComponent","BuilderComponent","onStateChange","BehaviorSubject","asServer","contentRef","styleRef","updateState","lastJsCode","lastHttpRequests","httpSubscriptionPerKey","messageListener","useContent","deviceSize","deviceSizeState","device","data_1","resizeFn","resizeListener","mounted","notifyStateChange","onContentLoaded","title","pageTitle","description","pageDescription","descriptionTag","setAttribute","head","appendChild","input","defaultValue","newState","locationState","externalState","jsCode","codegen","skip","httpRequests","noAsync","httpRequest","isCoreRequest_1","finalUrl_1","evalExpression","request","url","handleRequest","method","body","headers","currentSubscription","newSubscription","newUrl","_content","inlinedContent","_hydrate","hydrate","getHtmlData","instance","registerCustomComponents","defaults","inlineContent","script","innerText","pathname","query","innerWidth","fresh","exists","classList","contains","shouldHydrate","innerHTML","apiStyles_1","previousElementSibling","keepStyles_1","el","useElement","useEl","div","insertAdjacentElement","val_1","builderRootRef","val","customComponents","customComponent","registration","__rest","registerComponent","reload","dispatchEvent","CustomEvent","detail","nextState","processStateFromApi","getCssFromFont","font","family","kind","fileUrl","files","regular","weight","weightUrl","getFontCss","allowCustomFonts","customFonts","ensureFontsLoaded","getCss","cssCode","componentDidUpdate","prevProps","checkStyles","css_1","dataString","hash","WrapComponent","isChild","stopClickPropagationWhenEditing","stopPropagation","data-source","format","fullData","blocksJs","builderComponentNames","from","reversedcomponents_1","builderComponents","mappedComponentNames","finalizedComponents","initialState","setTick","tick","hasPixel","data-builder-content-id","data-builder-variation-id","data-builder-component","group","propertyName","fetchCacheKey","ctx","__awaiter","requestStart","time","fetchOptions","sent","json","err_1","timeEnd","existing","req","promise_1","promise","handleBuilderRequest","optionsString","__decorate","updateMetadata","updated","withBuilder","isBuilderElement","withChildren","HOC","forwardRef","useProps","componentOptions","every","builderOptions","canHaveChildren","finalProps","iconUrl","TextComponent","textRef","test","allowTextEdit","textCSS","outline","& p:first-of-type, & .builder-paragraph:first-of-type","margin","& > p, & .builder-paragraph","lineHeight","letterSpacing","fontWeight","textAlign","fontFamily","rtlMode","direction","Text","static","image","required","autoFocus","bubble","defaultStyles","Slot","useContext","isEditingThisSlot","symbolId","builder-slot","docsLink","FragmentComponent","BuilderBlockComponent","hideFromInsertMenu","DEFAULT_ASPECT_RATIO","defaultBlocks","flexShrink","position","marginTop","minHeight","minWidth","backgroundPosition","backgroundSize","aspectRatio","ColumnsComponent","columns","space","getWidth","getColumnWidth","gutterSize","subtractWidth","contentBreakpoints","breakpointSizes","stackColumnsAt","reverseColumnsWhenStacked","col","link","flexGrow","marginLeft","Columns","broadcast","subFields","hideFromUI","helperText","clearWidths","advanced","enum","EmbedComponent","elementRef","scriptsInserted","scriptsRun","shouldComponentUpdate","nextProps","findAndRunScripts","scripts","getElementsByTagName","newScript","async","Embed","globalReplaceNodes","isShopify","customCodeQuerySelector_1","allCustomCodeElements_1","querySelectorAll","builderTemplates","template","codeElements","parentElement","getAttribute","cloneNode","CustomCodeComponent","originalRef","replaceNodes","remove","isHydrating","scriptsClientOnly","noReactRender","CustomCode","requiredPermissions","IMAGE_FILE_TYPES","VIDEO_FILE_TYPES","isNewReact","removeProtocol","isElementInViewport","rect","getBoundingClientRect","top","left","bottom","innerHeight","documentElement","clientHeight","right","clientWidth","getShopifyImageUrl","prefix","suffix","useSize","updateQueryParam","uri","re","separator","encodeURIComponent","getSrcSet","srcUrl","widthInSrc_1","isNaN","sizeUrl","getSizes","useSizes","splitSizes","sizesLength_1","generatedSizes","hasSmallOrMediumSize","unitRegex","mediaQuery","widthAndQuery","_h","ImageComponent","imageLoaded","useLazyLoading","load","pictureRef","scrollListener","highPriority","lazy","listener_1","buffer","capture","passive","loadEagerly","noWebp","srcset","fitContent","amp","imageContents","layout","round","alt","altText","objectFit","objectPosition","fetchPriorityProp","onLoad","srcSet","paddingTop","Image","allowedFileTypes","blob","Promise","resolve","reject","img","loaded","onload","num","possiblyUpdatedAspectRatio","label","VideoComponent","video","containerRef","lazyVideoObserver","lazyLoad","updateVideo","removeAttribute","isIntersecting","disconnect","poster","posterImage","autoPlay","muted","controls","loop","preload","fit","borderRadius","Video","refs","SymbolComponent","staticRef","isEditingThisSymbol","useStatic","parentNode","replaceChild","symbol","showPlaceholder","ownerId","dynamic","builderComponentKey","data-model","inheritState","_j","singletonInstance","apiEndpoint","_k","_l","ButtonComponent","openLinkInNewTab","Button","appearance","paddingBottom","paddingLeft","paddingRight","backgroundColor","cursor","friendlyName","SectionComponent","unmountCallbacks","inView","cb","observer_1","rootMargin","alignSelf","boxSizing","maxWidth","marginRight","renderContents","lazyStyles","Section","defaultChildren","StateProviderComponent","StateProvider","prefetched","RouterComponent","routed","preloadQueue","onPopState","updateLocationState","onMouseOverOrTouchStart","preloadOnHover","hrefTarget","findHrefTarget","isRelative","converted","convertToRelative","parsedUrl","parseUrl","urlPath","queryString","subscription","userAttributes","handleRouting","button","ctrlKey","defaultPrevented","metaKey","onRoute","routeEvent","anchorNode","preventDefault","route","history","pushState","HTMLAnchorElement","currentTarget","currentUrl","hrefUrl","host","relativeUrl","Router","Mutation","useRef","useWaitForSelector","selector","current","firstElementChild","useLayoutEffect","existingElement","MutationObserver","foundElement","subtree","characterData","MULTIPART_CONTENT_TYPE","JSON_CONTENT_TYPE","ENCODED_CONTENT_TYPE","FormComponent","responseData","formErrorMessage","previewState","validate","noValidate","action","sendWithJs","onSubmit","sendSubmissionsTo","customHeaders","formData","FormData","formPairs","checked","HTMLInputElement","valueAsNumber","contentType_1","contentType","File","FileList","json_1","presubmitEvent","formUrl","btoa","sendSubmissionsToEmail","ok","errorMessagePath","submitSuccessEvent","resetFormOnSubmit","reset","successUrl","event_1","submitErrorEvent","submissionState","errorMessage","sendingMessage","successMessage","Form","showIf","component.options.text","valueType","placeholder","FormInputComponent","FormInput","borderWidth","borderStyle","borderColor","FormSubmitButtonComponent","FormSubmitButton","LabelComponent","htmlFor","for","Label","richText","FormSelectComponent","option","FormSelect","TextAreaComponent","TextArea","ImgComponent","userStyle","restAttributes","defaultStyle","mergedStyle","Img","RawText","filterWithCustomTargetingScript","filterWithCustomTargeting","startDate","endDate","date","objectMatchesQuery","isString","isNumber","userattr","operator","testValue","endsWith","PersonalizationContainer","isBeingHydrated","__hydrated","rootRef","_x","isClient","setIsClient","_y","isHydrated","setIsHydrated","_z","setUpdate","builderStore","useEffect","subscriber","userAttributesChanged","prev","unsubs","variant_1","filteredVariants","bubbles","data-variant-id","getPersonalizationScript","previewingIndex","_m","_p","_o","_q","_r","_s","_t","_u","_v","_w","blockId","attributesCookieName","v","useIsPreviewing","setIsPreviewing","behavior","localized","isReact","sdkInfo"],"mappings":"uVAAO,IAAMA,YAAc,gCCEL,oBAAXC,SACI,QAAbC,GAAAD,OAAOE,cAAM,IAAAD,IAAAA,GAAEE,YACb,CACEC,KAAM,qBACNC,KAAM,CACJC,OAAO,EACPC,qBAAsB,KACtBC,2BAA2B,EAC3BC,0BAA0B,EAC1BC,uBAAuB,EACvBC,2BAA2B,EAC3BC,QAASb,cAGb,8lGCfG,IAAMc,UAAY,SAAmBC,GAAc,OAAAC,KAAKC,MAAMD,KAAKE,UAAUH,KAEvEI,OAAO,SAAmBJ,OAAQ,IAAsBK,EAAA,GAAAC,EAAA,EAAtBA,EAAsBC,UAAAC,OAAtBF,IAAAD,EAAsBC,EAAA,GAAAC,UAAAD,GAEnE,IADA,IAAMG,EAAYC,OAAOC,OAAO,GAAIX,OAClBY,EAAAP,EAAAlB,EAAMyB,EAAAJ,OAANrB,IAAQ,CAArB,IAAM0B,EAAGD,EAAAzB,UACJsB,EAAkBI,GAE5B,OAAOJ,GCLIK,UAAoB,CAAC,SAAU,QAAS,SAAU,SAGzDC,MAAQ,CACZC,OAAQ,CACNC,IAAK,EACLC,QAAS,IACTC,IAAK,KAEPC,MAAO,CACLH,IAAK,IACLC,QAAS,IACTC,IAAK,KAEPE,OAAQ,CACNJ,IAAK,IACLC,QAAS,IACTC,IAAK,KAEPG,MAAO,CACLL,IAAK,IACLC,QAAS,IACTC,IAAK,MAEPI,yBAAgBC,GACd,OAAOC,KAAKD,GAAMN,SAEpBQ,yBAAgBC,GACd,IAAmB,QAAAC,EAAAd,UAAAR,EAASsB,EAAApB,OAATF,IAAW,CAAzB,IAAMkB,EAAII,EAAAtB,GAEb,GAAIqB,GADUF,KAAKD,GACAL,IACjB,OAAOK,EAGX,MAAO,UAWEK,uBAAyB,SAACC,GACrC,IAAMC,uBACDhB,OACAhB,UAAUgB,QAGf,IAAKe,EACH,OAAOC,EAGD,IAAAf,EAA0Bc,EAAWd,OAA7BI,EAAkBU,EAAWV,MAAtBC,EAAWS,SAElC,GAAId,EAAQ,CACV,IAAMgB,EAAYC,KAAKC,MAAMlB,EAAS,GACtCe,EAASf,OAAS,CAChBG,IAAKH,EACLC,IAAKe,EACLd,QAASc,EAAY,GAIzB,IAAKZ,IAAUC,EACb,OAAOU,EAGT,IAAMI,EAAWnB,EAASe,EAASf,OAAOG,IAAM,EAAIc,KAAKC,MAAMd,EAAQ,GACvEW,EAASX,MAAQ,CACfD,IAAKC,EACLH,IAAKkB,EACLjB,QAASiB,EAAW,GAGtB,IAAMC,EAAYL,EAASX,MAAMD,IAAM,EACvCY,EAASV,OAAS,CAChBF,IAAKE,EACLJ,IAAKmB,EACLlB,QAASkB,EAAY,GAGvB,IAAMC,EAAWN,EAASV,OAAOF,IAAM,EAOvC,OANAY,EAAST,MAAQ,CACfH,IAAK,IACLF,IAAKoB,EACLnB,QAASmB,EAAW,GAGfN,GC9FIO,IAAM,SAACtC,EAAUuC,EAA0B/C,GACtD,GAAIkB,OAAOV,KAASA,EAClB,OAAOA,EAET,IAAMwC,EAAiBC,MAAMC,QAAQH,GACjCA,EACCA,EAAMI,WAAWC,MAAM,aAW5B,OATAJ,EACGK,MAAM,GAAI,GACVC,QACC,SAACC,EAAGC,EAAGC,GACL,OAAAvC,OAAOqC,EAAEC,MAAQD,EAAEC,GACfD,EAAEC,GACDD,EAAEC,GAAKf,KAAKiB,IAAIC,OAAOX,EAAKS,EAAI,MAAQ,IAAOT,EAAKS,EAAI,GAAK,GAAK,KACzEjD,GACAwC,EAAKA,EAAKhC,OAAS,IAAMhB,EACtBQ,GCbHoD,KAAO,WAAM,OAAA,MAGRC,mBAuBX,GACiC,mBAAxB,OAAAC,iBAAA,IAAAA,gBAAA,EAAAA,WAAYC,UAClBC,QAAQC,UAA+B,mBAAZF,QAE5B,IAKEF,mBAAqBK,KAAK,WAC1B,MAAOC,GAMLN,oBADE,OAAAC,qBAAAA,kBAAAA,WAAYC,SACOD,WAAWC,QAGXH,cCjDXQ,UACd,OAAOC,QACc,oBAAZC,cAAkD,IAAhBA,QAAQC,KAAuBD,QAAQC,IAAIC,OCFxF,SAASC,sBACP,MAA0B,oBAAZH,SAA2BD,QAA2B,QAAnB1E,EAAA,OAAA2E,kBAAAA,eAAAA,QAASI,gBAAU,IAAA/E,OAAA,EAAAA,EAAAgF,MFqDtEd,MAAAA,qBAAAA,mBAAuBD,MElDhB,IAAMgB,gCAAkC,iBAC7C,IAAKH,gBAAiB,OAAO,EAE7B,IAAMI,EAA2B,UAAjBP,QAAQQ,KAClBC,EAAWT,QAAQhE,QAAQ0E,WAAW,OAEtCC,EAAwD,QAA1BtF,EAAA2E,QAAQC,IAAIW,oBAAc,IAAAvF,OAAA,EAAAA,EAAAwF,SAAS,sBAEvE,SAAIN,IAAWE,GAAaE,KAC1BG,QAAQC,IAAI,sYAKL,ICbLC,QAA8D,GAavDC,IAAM,SAACC,GAAe,OAAAC,SAE7B,SAAUC,iBACdC,EACAC,EACAC,EACAC,GAGA,QALA,IAAAF,IAAAA,GAAiB,IAKZD,IAAQA,EAAII,OACf,OAAO,aAGT,IAAMC,EAAWL,EAAM,IAAMC,EAC7B,GAAIN,QAAQU,GACV,OAAOV,QAAQU,GAIjB,IAAMC,EACHL,KACGD,EAAIR,SAAS,MAAQQ,EAAIR,SAAS,aAAeQ,EAAII,OAAOf,WAAW,aAC3EW,EAAII,OAAOf,WAAW,eACpBkB,EAAe,aAInB,IAEMlC,QAAQmC,YAEVD,EAAK,IAAIE,SACP,QACA,QACA,QACA,UACA,SACA,SACA,UACA,UAGA,2yBAAAC,OA6BMJ,EAAY,WAAWI,OAAAV,EAAO,MAAGA,EAAG,8BAK9C,MAAOW,GACHT,GACFA,EAAOU,KAAKD,GAEd,IAAME,EAAUF,GAASA,EAAME,QAC3BA,GAA8B,iBAAZA,GAChBV,IAAmC,IAA3BA,EAAKW,QAAQD,IACvBV,EAAKS,KAAKC,GAGVxC,QAAQmC,WACVf,QAAQsB,KAAK,6BAAAL,OAA6BV,GAAOW,GAIrD,IAAMK,EAAQ,eAAC,IAAcC,EAAA,GAAA9F,EAAA,EAAdA,EAAcC,UAAAC,OAAdF,IAAA8F,EAAc9F,GAAAC,UAAAD,GAC3B,IACE,GAAIkD,QAAQmC,WAAavB,kCACvB,OAAOsB,EAAMW,WAAA,EAAAD,GAUb,IAAME,EAAgDC,oBAChDC,EAAMnD,mBAAmB,eACzBoD,EAAYH,EAAeI,gBAC/BC,OAAOxB,EAAKM,GACZW,EAAKQ,KAAI,SAACC,EAAKC,GACb,MAAe,iBAARD,EACH,IAAIL,EAAIO,UACND,IAAUE,4CAGDH,GAAG,CACNI,kBAAmB,WAAM,OAAAJ,EAAII,kBAAkB,OAEjDJ,GAEN,SAGR,IAEE,IAAMK,EAAMjH,KAAKC,MAAMuG,GACvB,OAAOS,EACP,MAAOC,GACP,OAAOV,GAGX,MAAOX,GAuBP,OAtBItC,QAAQmC,UACVf,QAAQsB,KACN,6BACAJ,EAAME,SAAWF,EACjB,KACAX,EACAW,EAAMsB,OAAStB,GAGblC,WACFgB,QAAQyC,MACN,6BACAvB,EAAME,SAAWF,EACjB,KACAX,EACAW,EAAMsB,OAAStB,GAIjBT,GACFA,EAAOU,KAAKD,GAEP,OAQX,OAJItC,QAAQmC,YACVb,QAAQU,GAAYW,GAGfA,EAGT,IAAMa,uBAAyB,EAElBL,OAAS,SAACW,EAAc7B,EAAoBW,GAEvD,IAAMmB,EAAQnB,GAAQ,CACpB,QACA,QACA,QACA,UACA,SACA,SACA,UACA,WAwCF,MAAO,KACPP,OApCqB,+oBAqCrB,MAAAA,OAXoB,qMAYrB,MAACA,OAAO0B,EAAMX,KAAI,SAACC,EAAKC,GAAU,MAAA,OAAAjB,OAAOgB,EAAG,mBAAAhB,OAAkBiB,EAAK,SAAMU,KAAK,OAAO3B,OAAO,KAAAA,OAC3F0B,EAAM5C,SAAS,WAAa,qBAAuB,GAAE,sCAAAkB,OAEnDJ,EAAY,WAAWI,OAAAyB,EAAQ,MAAGA,EAAI,+CAO7Bf,kBAAoB,WAC/B,IAAIkB,EAAkBjE,QAAQkE,cAEzBD,IAGHA,EADgB,IADJpE,mBAAmB,eACPsE,SAAQ,CAAEC,YAAa,MACrBC,oBAC1BrE,QAAQsE,iBAAiBL,IAE3B,IAAMM,EAAON,EAAiBO,OAU9B,OAPAD,EAAKE,QAAQ,SAAUF,EAAKG,aAE5BH,EAAKE,QAAQ,OAAO,eAAU,IAAc7B,EAAA,GAAA9F,EAAA,EAAdA,EAAcC,UAAAC,OAAdF,IAAA8F,EAAc9F,GAAAC,UAAAD,GACtCsD,WACFgB,QAAQC,IAAGwB,MAAXzB,QAAewB,MAGZqB,GCjQIU,UAAY,SAACC,GACxB,MAA+B,mBAAvBA,EAAcC,MACXC,cAAgB,SAACF,GAAkD,OAACD,UAAUC,IAE9EG,4BAA8BC,eAAMC,cAAc,CAC7DC,SAAU,GACVrD,OAAQ,GACRC,KAAM,KCdKqD,oBAAsBH,eAAMC,cAA4B,CACnEzD,MAAO,GACP4D,UAAW,GACXC,QAAS,GACTC,QAAS,GACTC,OAAQ,SAACC,GAAiC,OAAA,QCP/BC,mCAAqC,SAChDjJ,EACAkJ,EACAC,GAEA,QAFA,IAAAA,IAAAA,GAAoB,GAEhBzI,OAAOV,KAASA,EAClB,OAAOA,EAED,IAAAwC,EAAoB0G,EAAK1G,KAAnB4G,EAAcF,EAAKE,GAAf5J,EAAU0J,QACtBG,EAAoB7G,EAAK8G,MAAM,MAClB,KAAfD,EAAQ,IACVA,EAAQE,QAKV,IAFA,IAAMC,EAASL,EAAenJ,EAAKyJ,SAAA,GAAMzJ,GACrC0J,EAAUF,EACLvG,EAAI,EAAGA,EAAIoG,EAAQ7I,OAAQyC,IAAK,CACvC,IAAM0G,EAAS1G,IAAMoG,EAAQ7I,OAAS,EAChCoJ,EAAWP,EAAQpG,GACzB,GAAI0G,GACF,GAAW,YAAPP,EACFM,EAAQE,GAAYpK,OACf,GAAW,QAAP4J,EAAc,CACvB,IAAMtC,EAAQ3D,OAAOyG,GACjBnH,MAAMC,QAAQgH,GACC,MAAbE,EACFF,EAAQ3D,KAAKvG,GAEbkK,EAAQG,OAAO/C,EAAO,EAAGtH,GAG3BkK,EAAQE,GAAYpK,OAEjB,GAAW,WAAP4J,EAAiB,CACpBtC,EAAQ3D,OAAOyG,GACjBnH,MAAMC,QAAQgH,GAChBA,EAAQG,OAAO/C,EAAO,UAEf4C,EAAQE,QAGd,CACL,IAAME,EAAeT,EAAQpG,EAAI,GAC3B8G,EACJrJ,OAAOgJ,EAAQE,MAAeF,EAAQE,GAClCF,EAAQE,GACRI,OAAO7G,OAAO2G,MAAmBA,EAC/B,GACA,GACRJ,EAAUA,EAAQE,GAAYnH,MAAMC,QAAQqH,GAAeE,cAAA,GAAAF,MAAUN,SAAA,GAAMM,IAI/E,OAAOP,GCnDIU,WAAa,SAAC/E,GACzB,OAAAA,EAAIgF,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,WAI1EC,kBAAoB,SAACC,SAChC,MAAA,IAAIxE,OAAAqE,WAAWG,EAAMC,SAAW,OACP,gCAAAzE,OAAAwE,EAAME,eAAMF,EAAMG,OAAS,GAAE,uBAAA3E,OACtCwE,EAAME,GACpB,SAAA1E,OAAAnF,OAAO+J,KAAKJ,EAAMK,YAAc,IAC/B9D,KAAI,SAAA/F,GAAO,MAAA,GAAGgF,OAAAqE,WAAWrJ,GAAI,MAAAgF,OAAKqE,WAAWG,EAAMK,WAAY7J,IAAK,QACpE2G,KAAK,KAEN,SAAA3B,OAA2B,UAAT,UAAlBwE,MAAAA,OAAK,EAALA,EAAOM,iBAAW,IAAAxL,OAAA,EAAAA,EAAAyL,MACdP,EAAMM,UAAUE,QAAQC,KACxBT,EAAMU,SACJV,EAAMU,SAASnE,KAAI,SAAAoE,GAAQ,OAAAZ,kBAAkBY,MAAOxD,KAAK,IACzD,GAAE,MAAA3B,OACLwE,EAAMC,SAAW,MAAQ,KAACH,QAAQ,OAAQ,MCVpCc,KAAO,SAACC,GAAyD,OAC5E1C,6BAACG,oBAAoBwC,SAAQ,MAC1B,SAAArC,GACC,OAAIA,EAAQsC,WACHtC,EAAQsC,WAAWF,GAErB1C,eAAA6C,cAAA,IAAA5B,SAAA,GAAOyB,QCiBd,SAAUI,SACdtL,EACAuL,EACAnM,EACAyB,EACA2K,QAFA,IAAApM,IAAAA,EAAkB,WAClB,IAAAyB,IAAAA,EAAe,WACf,IAAA2K,IAAAA,EAAc,IAAAC,SAEH,MAAPzL,GAA8B,iBAARA,EAStBwL,EAAQE,IAAI1L,KAGhBwL,EAAQG,IAAI3L,GAERyC,MAAMC,QAAQ1C,GAChBA,EAAI4L,SAAQ,SAACZ,EAAMlE,GAIjByE,EAASP,GAHM,SAACa,GACd7L,EAAI8G,GAAS+E,KAGfP,SAASN,EAAMO,EAAUvL,EAAK8G,EAAO0E,MAGvC9K,OAAOoL,QAAQ9L,GAAK4L,SAAQ,SAACzM,OAAC0B,EAAG1B,EAAA,GAAEK,EAAKL,EAAA,GAItCoM,EAAS/L,GAHM,SAACqM,GACd7L,EAAIa,GAAOgL,KAGbP,SAAS9L,EAAO+L,EAAUvL,EAAKa,EAAK2K,OA3BtCD,EAASvL,GAAK,SAAC6L,GACE,OAAXzM,GAA2B,OAARyB,IACrBzB,EAAOyB,GAAOgL,MCzCtB,IAAME,iBAAmB,SAACvM,GACxB,OAAOA,GAA0B,iBAAVA,GAAyC,oCAAnBA,EAAM,UAGxCwM,wBAA0B,SAACzM,GACtC,IAAKA,IAASmB,OAAOuL,oBAAoB1M,GAAMiB,OAC7C,OAAO,EAET,IAAI0L,GAAqB,EAOzB,OANAZ,SAAS/L,GAAM,SAAAC,GACTuM,iBAAiBvM,KACnB0M,GAAqB,MAIlBA,GAGIC,uBAAyB,SAAC5M,EAA2B6M,GAChE,OAAK7M,GAASmB,OAAOuL,oBAAoB1M,GAAMiB,QAI/C8K,SAAS/L,GAAM,SAACC,EAAOuJ,SACjBgD,iBAAiBvM,IACnBuJ,EAAoB,UAAbvJ,EAAM4M,UAAO,IAAAjN,EAAAA,OAAIkN,MAIrB9M,GATE,ICJL+M,qBAAuB,SAACnH,GAC5B,OAAAA,EAAMA,EAAIgF,QAAQ,YAAY,SAAAoC,GAAK,MAAA,IAAI1G,OAAA0G,EAAE,GAAGC,kBAAmB,IAE3DC,qBAAuB,SAACtH,GAC5B,YAD4B,IAAAA,IAAAA,EAAQ,IACpCA,EAAIgF,QAAQ,aAAa,SAAAvH,GAAS,OAAAA,EAAM,GAAG8J,kBAEvCC,OAAS,CAAEC,QAAS,EAAGC,OAAQ,EAAGC,OAAQ,GAG1C,SAAUC,wBAAiC/M,GAC/C,GAAY,OAARA,GAA+B,iBAARA,EACzB,OAAOA,EAGT,GAAIyC,MAAMC,QAAQ1C,GAChB,OAAOA,EAAI4G,KAAI,SAACoE,GAAc,OAAA+B,wBAAwB/B,MAGxD,GAA8B,4BAAzBhL,EAAY,SACf,OAAOA,EAGT,IAAMgN,EAAiB,GAEvB,IAAK,IAAMnM,KAAOb,EACZU,OAAOuM,UAAUC,eAAeC,KAAKnN,EAAKa,KAChC,SAARA,EACFmM,EAAUI,KAAOpN,EAAU,KAE3BgN,EAAUnM,GAAOkM,wBAAwB/M,EAAIa,KAKnD,OAAOmM,EAGT,IAAMK,aAAe,IAAIC,IAAI,CAC3B,OACA,OACA,KACA,MACA,QACA,KACA,MACA,QACA,OACA,OACA,QACA,SACA,QACA,MACA,aAGIC,KAAO,SAAgBC,GAAa,OAAAA,EAAIA,EAAIhN,OAAS,IAE3D,SAASJ,OAAKJ,EAAUK,GAEtB,IADA,IAAMI,EAAYC,OAAOC,OAAO,GAAIX,OAClBY,EAAAP,EAAAC,EAAMM,EAAAJ,OAANF,IAAQ,QACjBG,EADKG,EAAAN,IAGd,OAAOG,EAGT,IAAMgN,QAAU,SAAC7D,GACf,IAAKA,EACH,OAAOA,EAGT,IAAIzE,EAAMmH,qBAAqB1C,GAM/B,OAJIA,EAAS,KAAOA,EAAS,GAAG8C,gBAC9BvH,EAAM,IAAMA,GAGPA,GAkBT,SAASuI,WAAWvI,GAClB,GAAKA,EAGL,OAAOA,EAAI,GAAGuH,cAAgBvH,EAAItC,MAAM,GAU1C,IAAA8K,eAAA,SAAAC,QAAA,SAAAD,eAAA,IAmnBCE,MAAA,OAAAD,QAAAA,OAAAvH,MAAA5E,KAAAlB,YAAAkB,YA3mBCoM,MAAQC,UAAG,EAEXD,MAAA7I,MAAQ,CACN+I,UAAU,EACVC,QAAS,GAGHH,MAAAI,aAAkC,CACxCjJ,MAAO,GACP4D,UAAW,GACXE,QAAS,GACTC,OAAQ,cA6GV8E,MAAeK,gBAAG,SAACC,OACjB,IAAMnI,QAAUmI,MAAM5O,KACtB,GAAKyG,QAGL,OAAQA,QAAQ1G,MACd,IAAK,0BACK,IAAAC,KAASyG,QAAOzG,KACxB,IAAKA,KACH,MAEM,IAAA6O,UAAc7O,KAAI6O,UACpB7D,GAAKsD,MAAKxD,OAASwD,MAAKxD,MAAME,GAChCA,IAAM9H,MAAMC,QAAQ0L,YAAcA,UAAUnI,QAAQsE,KAAO,GAC7D8D,YAAW,WACRnP,OAAeoP,OAAST,MACnB3O,OAAeqP,UAClBrP,OAAeqP,QAAU,IAE3BrP,OAAeqP,QAAQxI,KAAK8H,UAGjC,MAGF,IAAK,uBACK,IAAAtO,KAASyG,QAAOzG,KACxB,IAAMA,OAAQA,KAAKA,KACjB,MAEF,IAAMiP,QAAUjP,KAAKA,KAAKsO,MAAKxD,MAAME,IACrC,IAAKiE,QACH,OAGEC,SAASC,KAAK/J,SAAS,uBACzBjB,KAAK,YAEP,IAAoB,SAAAiL,UAAAH,QAAAlO,GAAOqO,UAAAnO,OAAPF,KAAS,CAAxB,IAAM4I,MAAKyF,UAAArO,IACd2I,mCAAmC4E,MAAK3C,MAAMb,MAAOnB,OAAO,GAE9D2E,MAAKe,SAAS,CAAEZ,QAASH,MAAK7I,MAAMgJ,QAAU,YA0ctD,OAnnBkCa,UAGjClB,aAAAC,QAqBClN,OAAAoO,eAAInB,aAAKV,UAAA,QAAA,CAAT8B,IAAA,WACE,OAAOtN,KAAKwM,8CAGPN,aAAwBqB,yBAA/B,SAAgClJ,GAC9B,MAAO,CAAEiI,UAAU,IAGrBJ,aAAAV,UAAAgC,kBAAA,SAAkBnJ,EAAYoJ,GAC5BtK,QAAQkB,MAAM,uBAAwBA,EAAOoJ,IAK/CvB,aAAAV,UAAA/H,iBAAA,SAAiBC,EAAaC,GAC5B,YAD4B,IAAAA,IAAAA,GAAiB,GACtCF,iBAAiBC,EAAKC,EAAY3D,KAAK0N,QAAS1N,KAAK2N,QAG9D1O,OAAAoO,eAAInB,aAAKV,UAAA,QAAA,CAAT8B,IAAA,WACE,OAAOtN,KAAKyJ,MAAMb,uCAGpBsD,aAAUV,UAAAoC,WAAV,SAAWC,qBACLC,EACIlF,EAAU5I,KAAI4I,MAChBmF,EAAYnF,EAAMoF,YAAcpF,EAAMoF,WAAW,GACvD,GAAID,GAAmC,UAAtBA,EAAUE,QAAqB,CAC9C,IAAMC,EAAYH,GAAaA,EAAUI,OAASJ,EAAUI,MAAM,GAC5DC,EAAaF,GAAaA,EAAUG,OACtCD,IACFN,EAA6BM,GAIjC,IAAME,EAAgBjP,UAAU+B,QAAQmN,UAClCF,EAAc,GACpB,GAAIR,EAIF,IAHA,IAAMW,EAA6BpM,QAC0B,kBAA3DqM,EAA0C,QAA1C/Q,EAAAsC,KAAKwM,aAAanF,QAAQqH,sBAAgB,IAAAhR,OAAA,EAAAA,EAAAiO,2BAAMtL,mBAAW,IAAAsO,OAAA,EAAAA,EAAEpP,YAE5CqP,EAAAN,EAAAzP,EAAa+P,EAAA7P,OAAbF,IAAe,CAA7B,IAAMkB,EAAI6O,EAAA/P,GACb,GAAK2P,GAAuC,WAATzO,EAKnC,GAAa,UAATA,EACGC,KAAKyJ,MAAMoF,YACdR,EAAO,mBAAqBpP,OAAOC,OACjC,GACA2O,EAAiB9N,GACjB+N,QAGC,CACL,IAAMgB,EAAsB1O,gCAC1B2O,EAA0C,QAA1CC,EAAAhP,KAAKwM,aAAanF,QAAQqH,sBAAgB,IAAAM,OAAA,EAAAA,EAAArD,2BAAMtL,cAAe,IAEjEgO,EAAO,sCAAsCjK,OAAA0K,EAAoB/O,GAAML,IAAQ,QAAI,CACjFuP,kBAAmBpB,EAAiB9N,KAM5C,IAAMmP,EACJtG,EAAMoF,YAAcpF,EAAMoF,WAAWmB,MAAK,SAAA5F,GAAQ,MAAiB,UAAjBA,EAAK0E,WAczD,OAbIiB,IACFb,EAAO,6BAAYe,EAAAF,EAAef,4BAAQ,yBAAIE,SAAU,GAIxDA,EAAOgB,WAAa,OAAAjL,OAAO8K,EAAeI,SAAa,MAAAlL,OAAAyG,qBACrDqE,EAAeK,SAEbL,EAAeM,QACjBnB,EAAOoB,gBAAkBP,EAAeM,MAAQ,MAI7CnB,GAGTnC,aAAIV,UAAAvJ,KAAJ,SAAKyB,GAGH,OAFW1D,KAAKyD,iBAAiBC,EAE1BO,CACLjE,KAAKwM,aAAajJ,WAClBqH,EACA5K,KAAK4I,MACLpF,QACA0H,OACAlL,KAAKwM,aAAalF,OAClBvF,QACA/B,KAAKwM,aAAanF,UAItB6E,aAAAV,UAAAkE,qBAAA,WACM3N,QAAQ4N,WACVC,oBAAoB,UAAW5P,KAAKyM,kBAoDxCP,aAAAV,UAAAqE,kBAAA,WAAA,MAyDCzD,EAAApM,KAxDCA,KAAKqM,UAAW,EAChB,IAAMzD,EAAQ5I,KAAK4I,MACboF,EAAapF,GAASA,EAAMoF,WASlC,GAPIjM,QAAQ4N,WACVG,iBAAiB,UAAW9P,KAAKyM,iBAM/BuB,EAAY,CACd,IAAM5E,EAAU,CACd4E,WAAY1P,UAAU0P,IAMxB,GAAIpF,EAAMmH,SACR,IAAK,IAAM3Q,KAAOwJ,EAAMmH,SACtB,IAAa,QAARrS,EAAA0B,EAAI0E,YAAI,IAAApG,OAAA,EAAAA,EAAAgO,KAAAtM,KAITA,EAAI2D,WAAW,eAAgB,CAEjC,IAAMhF,EAAQiC,KAAKyD,iBAAiBmF,EAAMmH,SAAS3Q,SACrCwL,IAAV7M,GACF8C,IACEuI,EACAhK,EACArB,EACEiC,KAAKwM,aAAajJ,MAClB,KACAqF,EACApF,QACA,KACA,KACAzB,QACA/B,KAAKwM,aAAanF,UAO9BtF,QAAQiO,SAASC,eACf7G,EAAQ4E,WACLkC,QAAO,SAAC3G,GAAc,MAAiB,UAAjBA,EAAK0E,WAC3B9I,KAAI,SAAC4I,GAAmB,OACpB/F,SAAAA,SAAA,GAAA+F,IACHoC,UAAW/D,EAAKxD,MAAME,WAOhCoD,aAAAV,UAAA4E,WAAA,SAAW/K,EAAW9B,mBA0TrB6I,EAAApM,UA1TU,IAAAqF,IAAAA,EAAS,QAAE,IAAA9B,IAAAA,EAAQvD,KAAKwM,aAAajJ,OACxC,IAAA8M,EAAuBrQ,KAAKyJ,MAArB4G,EAAAC,MAAWD,EAAAE,UACxB,IAoBIC,EApBE5H,EAAQ5I,KAAK4I,MACf6H,GAAiC7H,EAAMC,SAAW,OAAOkC,cAE7D,GAAgB,aAAZ0F,EAAwB,CAC1B,IAAMC,EAAO9H,EAAMU,SACfV,EAAMU,SAASnE,KAAI,SAAAoE,GAAQ,OAAAZ,kBAAkBY,MAAOxD,KAAK,KACzD,GAEJ,OADA5C,QAAQyC,MAAM,gBAAiB8K,GAI7BC,IAAA,WAAA3I,SAAA,GACMY,EAAMK,WAAU,CACpB2H,wBAAyB,CACvBC,OAAQH,MAOhB,IAAMI,EACJlI,EAAMM,YAAcN,EAAMM,UAAUC,MAASP,EAAMM,UAAkBA,WACnE6H,EAAkC,KAClCnI,EAAMM,YAAeN,EAAMM,UAAkBH,QAC3CH,EAAMM,WAAaN,EAAMM,UAAU8H,IACrCR,EAAiB5H,EAAMM,UAAU8H,KAEjCD,EAAgBhP,QAAQkP,WAAW9B,MAAK,SAAA5F,GAAQ,OAAAA,EAAKJ,OAAS2H,MAAkB,OAC3DC,EAAchI,MACjCyH,EAAiBO,EAAchI,MACtBgI,GAAiBA,EAAcC,IACxCR,EAAiBO,EAAcC,KAE3BF,MAAAA,OAAA,EAAAA,EAAe/N,WAAW,aAC5BI,QAAQsB,KACN,kGAAAL,OACE0M,EAAcjJ,MAAM,KAAK,GAAE,sGAGtBiJ,GACT3N,QAAQsB,KACN,mCAA4BqM,EAAa,0DASnD,IAAI1H,uBACCR,EAAMK,YACT,CAAAiI,MAAO,GACPrD,iBAAkBvP,UAAUsK,EAAMiF,kBAAoB,MAexD,GAZAzE,uBACKA,EAAQH,YACRG,GAGDR,EAAMM,YACRE,EAAQF,UAAYoC,wBAAwB1C,EAAMM,YAMhDN,EAAMmH,SACR,IAAK,IAAM3Q,KAAOwJ,EAAMmH,SACtB,GAAa,QAARtB,EAAArP,EAAI0E,YAAI,IAAA2K,OAAA,EAAAA,EAAA/C,KAAAtM,GAAb,CAIA,IAAMrB,EAAQiC,KAAKyD,iBAAiBmF,EAAMmH,SAAS3Q,IAEnDyB,IACEuI,EACAhK,EACArB,EAAMwF,EAAO,KAAMqF,EAAOtF,MAAY4H,OAAQ,KAAMnJ,QAAS/B,KAAKwM,aAAanF,UAKrF,GAAI+B,EAAQ+H,KACV,OAAO,KAKT,UAHS/H,EAAQ+H,MAGZ,SAAU/H,GAAYR,EAAMmH,UAAYnH,EAAMmH,SAASqB,QAAWhI,EAAQgI,KAC7E,OAAO,KAKT,UAHShI,EAAQgI,KAGbxI,EAAMyI,QAAS,gBACNjS,GACT,KAAa,QAARuP,EAAAvP,EAAI0E,YAAI,IAAA6K,OAAA,EAAAA,EAAAjD,KAAAtM,qBAIb,IAAMrB,EAAQ6K,EAAMyI,QAAQjS,GAC5BgK,EAAQ,KAAO6C,WAAW7M,IAAQ,SAACsN,GACjC,IAAI4E,EAAW/N,EAYf,MAXqB,oBAAVgO,QACTD,EAAW,IAAIC,MAAMhO,EAAO,CAC1B1C,IAAK,SAACtC,EAAKiT,EAAMzT,GAGf,OAFAQ,EAAIiT,GAAQzT,EACZqO,EAAKI,aAAarF,UAAUqK,GAAQzT,GAC7B,MAIFqO,EAAK3I,iBAAiB1F,GAAO,EAEjCkG,CACLqN,EACA5E,EACAN,EAAKxD,MACLpF,QACA0H,OACAkB,EAAKI,aAAalF,OAClBvF,QACAqK,EAAKI,aAAanF,WA3BxB,IAAK,IAAMjI,KAAOwJ,EAAMyI,UAAbjS,GAiCb,IAAIqS,GAA4BrI,EAAQF,WAAaE,EAAQA,UAAQpB,SAAAA,SAAA,GAChEoB,EAAQA,SACPA,EAAQF,UAAUE,SAAWA,EAAQF,UAAUpL,MAGjDyM,wBAAwBkH,KACrBzR,KAAKwM,aAAajJ,MAAMoH,QAC3BxH,QAAQsB,KACN,8RAGJgN,EAA2B/G,uBACzB+G,EACkC,UAAlCzR,KAAKwM,aAAajJ,MAAMoH,cAAU,IAAAqE,EAAAA,EAAA,YAItC,IAAM0C,EAAS9F,aAAa3B,IAAIwG,GAE1BkB,EAASZ,IAAkBA,EAAca,UAAYb,EAAcY,QAEnEE,GACQ,QAAZ9C,EAAA3F,EAAQ0I,YAAI,IAAA/C,OAAA,EAAAA,EAAEmC,SAAmC,iBAAlB9H,EAAQ8H,MAAqB9H,EAAQ8H,MAAQ,KAAO,GAErF,GAAwB,iBAAbW,EAAuB,CACH,iBAAlBzI,EAAQ8H,QACjB9H,EAAQ8H,MAAQ,IAIlB,IADA,QACmBa,EADAF,EAAShK,MAAM,KACfhJ,EAAUkT,EAAAhT,OAAVF,IAAY,CAA1B,IACGmT,EADOD,EAAAlT,GACYgJ,MAAM,KAC/B,IAAKmK,EAAYjT,OACf,OAGGK,EAAc4S,EAAW,GAApBjU,EAASiU,EAAW,GAEzB5S,IAID4S,EAAYjT,OAAS,IACvBhB,EAAQiU,EAAY5Q,MAAM,GAAG2E,KAAK,MAGpCqD,EAAQ8H,MAAMlG,qBAAqB5L,IAAQrB,IAI/C,IAAMkU,EACDjK,SAAAA,SAAAA,SAAA,GAAArJ,OAAKyK,EAAS,CAAC,QAAS,YAAa,OAAQ,8BAC5B,iBAAZqH,GAAyBA,EAAQvN,SAAS,KAAqB,QAAd,aACvD,iBAAiBkB,OAAApE,KAAK8I,WAAKF,EAAMG,MAAQ,IAAA3E,OAAIwE,EAAMG,OAAU,YAC3DH,EAAMM,WAAe,CAAC,QAAS,QAAS,UAAU1E,QAAQsM,IAAkB,EAExE,GADA,2BAGL1H,EAAQL,MAAQ,IAAMK,EAAQL,MAAQ,KACtC/I,KAAKqM,UAAYtK,QAAQ4N,oBAAaP,EAAApP,KAAKwM,aAAajJ,MAAM2O,8BAASvU,UAAWiL,EAAME,GACrF,yBACA,IACNpL,MAAKsC,KAAK8I,GAAKzD,EACf3H,EAAY,cAAEsC,KAAK8I,OAML,IAAVzD,GAAe,CACjB8M,gBAAiB9M,IASjBtD,QAAQ4N,WAAa3P,KAAKqM,WAE3B4F,EAAqB,yBAA6B7I,EAAQ0I,MAAQ1I,EAAQ0I,KAAKZ,MAE5EjS,OAAO+J,KAAKI,EAAQ8H,OAAO7P,QACzB,SAAC+Q,EAAMhT,GAAQ,OAACgT,EAAO,GAAGhO,OAAAgO,OAAU,IAAM,GAAGhO,OAAA4H,QAAQ5M,GAAI,KAAAgF,OAAIgF,EAAQ8H,MAAM9R,GAAI,OAC/E,IAHF,KAQD6S,EAAqBhJ,YAAegJ,EAAqBhJ,WAAWgE,MACpEgF,EAAqBhF,OACZ,QAAZwD,IAEAA,EAAU,KAGI,MAAZA,IACFA,EAAUjH,MAWZ,IAAMF,EAAWV,EAAMU,UAAY2I,EAAa3I,UAAY,GAG5D,OACEqH,IAAC5J,eAAMsL,SAAQ,KAEb1B,IAAC2B,WACE,MAAA,SAAC5U,OAAE6U,EAAG7U,EAAA6U,IACL,GADS7U,EAAA8U,IACJpG,EAAK3C,MAAMoF,UAAW,CACzB,IAAM4D,EAAW,IAAMF,EAAInG,EAAKwB,WAAWxE,EAAQyE,mBAC/CoE,EAAalJ,QACfkJ,EAAalJ,OAAS0J,GAEpBR,EAAaS,YACfT,EAAaS,WAAaD,GAI9B,OACE9B,IAAC7J,4BAA4B4C,SAAQ,MAClC,SAAA3L,GAIC,OAHAqO,EAAKuG,eAAiB5U,GAASA,EAAMkJ,SACrCmF,EAAKsB,QAAU3P,GAASA,EAAM6F,OAC9BwI,EAAKuB,MAAQ5P,GAASA,EAAM8F,KACrB6N,EACLf,IAACF,EAAYzI,SAAA,GAAAiK,IACXzB,IAAmBmB,GAAUvF,EAAK3C,MAAMoF,WAG1C8B,IAACH,cAEKiB,EAAwB,CAG5BmB,WAAYX,EACZY,aAAcjK,EACdkK,aAAc1G,EAAKI,gBAGrBmE,IAACF,EAAOzI,SAAA,GAAMiK,GACXzB,GACCG,IAACH,EAAcxI,SAAA,CACb8K,aAAc1G,EAAKI,aACnBqG,aAAcjK,GACV6I,IAGN7I,EAAcS,MAAQD,EAAQC,KAC5BD,EAAQC,MACPmH,GAAkBlH,GAAYtI,MAAMC,QAAQqI,IAAaA,EAASvK,OACjEuK,EAASnE,KAAI,SAACyD,EAAoBvD,GAAkB,OAClDsL,IAACzE,aACC,CAAA9M,KAAOgN,EAAKtD,IAAiB,IAAMzD,EACnCuD,MAAOA,EACPvD,MAAOA,EACPtF,KAAMqM,EAAK3C,MAAM1J,KACjBwQ,UAAWnE,EAAK3C,MAAM8G,UACtBD,MAAOlE,EAAK3C,MAAM6G,MAClBzB,UAAWzC,EAAK3C,MAAMoF,eAG1B,cAa1B5P,OAAAoO,eAAInB,aAAEV,UAAA,KAAA,CAAN8B,IAAA,WACU,IAAA1E,EAAU5I,KAAI4I,MACtB,OAAIA,EAAME,KAAOF,EAAME,GAAG/F,WAAW,WAC5B,WAAa6F,EAAME,GAErBF,EAAME,IAAM,oCAGrBoD,aAAQV,UAAAuH,SAAR,SAASxP,GAAT,IA6CC6I,EAAApM,KA5CO4I,EAAQ5I,KAAK4I,MAKnB,GAFA5I,KAAKwM,aAAejJ,EAEhBqF,EAAMoK,QAAUpK,EAAMoK,OAAOC,WAAY,CAC3C,IAAMC,EAAiBtK,EAAMoK,OAAOC,WAC9BE,EAAiBrH,MAAMoH,GAAkB,IAAIpP,OAAO+D,MAAM,KAAK,GAAG/D,OAAO+D,MAAM,MAC/EuL,EAAWxK,EAAMoK,OAAOK,WAAaF,EAAiBA,EAAiB,OAAS,QAChFG,EAAQtT,KAAKyD,iBAAiByP,EAAtBlT,CACZuD,EAAMA,MACN,KACAqF,EACAtF,MACA4H,OACA,KACAnJ,QACA/B,KAAKwM,aAAanF,SAEpB,OAAIrG,MAAMC,QAAQqS,GACTA,EAAMnO,KAAI,SAACrH,EAAMuH,SAEhBkO,EACDvL,SAAAA,SAAA,GAAAzE,EAAMA,YACTiQ,OAAQnO,EACRoO,MAAO3V,IACNsV,GAAWtV,EACXJ,EAAA,IAAA0G,OAAIgP,EAAe,UAAG/N,EAAK3H,IAG9B,OACEiT,IAACzJ,oBAAoBwM,SAAQ,CAC3BtU,IAAKiG,EACLtH,MAAOiK,qBAAKzE,GAAK,CAAEA,MAAOgQ,KAEzBnH,EAAKgE,WAAW/K,EAAOkO,OAKzB,KAGT,OAAOvT,KAAKoQ,cAGdlE,aAAAV,UAAAmI,OAAA,WAAA,IAmBCvH,EAAApM,KAlBC,OAAIA,KAAKuD,MAAM+I,SAEXqE,IACE,OAAA,CAAA4B,IAAK,CACHqB,QAAS,eACTC,QAAS,EACTC,MAAO,OACPC,SAAU,GACVC,UAAW,WACZ,oDAOLrD,IAACzJ,oBAAoBwC,SAAU,MAAA,SAAA3L,GAAS,OAAAqO,EAAK2G,SAAShV,OAG3DmO,aAnnBD,CAAkCnF,eAAMkN,WChGxCC,cAAA,SAAA/H,GAAA,SAAA+H,IAAA,IAuJC9H,EAAA,OAAAD,GAAAA,EAAAvH,MAAA5E,KAAAlB,YAAAkB,YAtJCoM,EAAQC,UAAG,EAkCXD,EAAA+H,mBAAqB,iBACfpS,QAAQqS,UAAYhI,EAAKiI,WACd,QAAb3W,EAAAD,OAAOE,cAAM,IAAAD,GAAAA,EAAEE,YACb,CACEC,KAAM,2BACNC,KAAM,CACJwW,gBAAiBlI,EAAKmI,SACtBC,SAAUpI,EAAKrL,OAGnB,OAINqL,EAAAqI,mBAAqB,iBACf1S,QAAQ4N,WAAavD,EAAKiI,WACf,QAAb3W,EAAAD,OAAOE,cAAM,IAAAD,GAAAA,EAAEE,YACb,CACEC,KAAM,2BACNC,KAAM,CACJwW,gBAAiBlI,EAAKmI,SACtBC,SAAUpI,EAAKrL,OAGnB,SA4FR,OAvJmCqM,UAAuD8G,EAAA/H,GAExFlN,OAAAoO,eAAI6G,EAAM1I,UAAA,SAAA,CAAV8B,IAAA,WACE,OAAQtN,KAAKyJ,MAAM6G,uCAGrBrR,OAAAoO,eAAI6G,EAAQ1I,UAAA,WAAA,CAAZ8B,IAAA,WACU,IAAAoH,EAAW1U,KAAKyJ,aACxB,QAASiL,GAAWA,EAAe3V,yCAErCE,OAAAoO,eAAI6G,EAAI1I,UAAA,OAAA,CAAR8B,IAAA,WACE,IACIvM,EAAOf,KAAKyJ,MAAM+K,UAAY,GASlC,OAPIzT,EAAK+C,SACH/C,EAAKgC,WAFQ,SAGfhC,EAAOA,EAAK2H,QAHG,QAGiB,IACtB3H,EAAKgC,WANA,wBAOfhC,EAPe,qBAOKA,IAGjBA,mCAGT9B,OAAAoO,eAAI6G,EAAQ1I,UAAA,WAAA,CAAZ8B,IAAA,WACE,OAAItN,KAAKyJ,MAAM6K,gBACNtU,KAAKyJ,MAAM6K,gBAEbtU,KAAKyJ,MAAM9L,QAAUqC,KAAKyJ,MAAM9L,OAAOmL,oCAGhDoL,EAAA1I,UAAAqE,kBAAA,WACE7P,KAAKqM,UAAW,GAiClB6H,EAAA1I,UAAAmI,OAAA,WAAA,IA2DCvH,EAAApM,KA1DS0U,EAAW1U,KAAKyJ,aAElBgH,EAAUzQ,KAAKyJ,MAAMoF,UAAY,OAAS,MAGhD,OAGE8B,IAACF,EAAOzI,SAAA,CACN0K,UACE,kBACC1S,KAAKqU,SAAW,aAAe,KAC/BrU,KAAKyJ,MAAM6G,MAAQ,wBAA0B,KAC7CtQ,KAAKyJ,MAAMiJ,UAAY,IAAM1S,KAAKyJ,MAAMiJ,UAAY,IAAGiC,eAE7C,SAAQC,eACP7S,QAAQqS,UAAYpU,KAAKqM,SAAWrM,KAAKe,UAAO6J,EAC3CiK,oBAAA7U,KAAKuU,SACxBhC,IACEvK,SACKA,SAAA,IAAEhI,KAAKyJ,MAAMoF,WAAa,CAC3B+E,QAAS,OACTkB,cAAe,SACfC,WAAY,YAEX/U,KAAKyJ,MAAMyH,OAGlB8D,QAAS,WACH5I,EAAKiI,UACPjI,EAAK+H,uBAGJpS,QAAQ4N,WAAa,CACxBsF,aAAc,WAAM,OAAA7I,EAAKqI,wBAKzBC,GACA1T,MAAMC,QAAQyT,IACbA,EAAiBvP,KAAI,SAACyD,EAAOvD,GAC5B,OAAAuD,GAA4B,4BAAnBA,EAAM,SACb+H,IAACzE,eAAY,CACX9M,IAAKwJ,EAAME,GACXF,MAAOA,EACPvD,MAAOA,EACPkL,UAAWnE,EAAK3C,MAAM8G,UACtBD,MAAOlE,EAAK3C,MAAM6G,MAClBzB,UAAWzC,EAAK3C,MAAMoF,YACtB,MAKN6F,IAKDR,EAAAgB,WAAP,SACEC,EACA1L,EACAqJ,GAEA,QAHA,IAAArJ,IAAAA,EAA8B,IAGzB0L,EAAL,CAIA,IAAIC,EAA0B,KAS9B,MAPiC,iBAAtBD,EACTC,EAAUC,SAASC,cAAcH,GAE7BA,aAA6BI,UAC/BH,EAAUD,GAGPK,SAAS7B,OACdhD,IAACzJ,oBAAoBwM,SAAQ,CAAC3V,MAAO+U,GACnCnC,IAACuD,cAAkBzK,KAErB2L,KAGLlB,EAvJD,CAAmCnN,eAAMkN,WC3B5BwB,OAAS,SAAChM,GAA+C,OAAAA,EAAMH,UCC5E,SAASoM,QAAQtO,GACf,QAA6B,KAAlBA,MAAAA,OAAO,EAAPA,EAAStJ,MAApB,CAIM,IAAAJ,EAA2B0J,EAAQtJ,KAAjC4W,EAAMhX,EAAAgX,OAAEiB,EAAYjY,EAAAiY,aACtBC,EAAY5U,MAAMC,QAAQyT,IAAmC,iBAAjBiB,EAC5CE,uBACDzO,EAAQtJ,MACP8X,GAAa,CAAElB,OAAQA,GAAUlW,KAAKC,MAAMkX,KAIlD,cADOE,EAAQF,aACRE,GAGT,IAAMC,eAAiB,SAACC,EAAwBC,GAC9C,MAAA,qHAAA5R,OAMiB2R,EAK4B,8OAAA3R,OAAA4R,g3BA4BXA,EAAS,iIAAA5R,OAE8B4R,EAmBtD,kgBAAA5R,OAAA4R,8CACUA,EAAS,uDAAA5R,OAGJ4R,EAW/B,8cAACtN,QAAQ,OAAQ,MAQTuN,iBAAmB,SAACvY,GAAE,IAAAwY,mBAAgB5M,EAAQ5L,EAAA4L,SAAE6M,EAAKzY,EAAAyY,MAChE,GAAIpU,QAAQmC,YAAcV,QAAQ4S,SAChC,OAAO9M,EAAS,CAAC4M,IAKnB,IAFiB9T,QAAQnD,OAAO+J,MAAKkN,MAAAA,OAAA,EAAAA,EAAgBG,aAAc,IAAItX,QAExD,OAAOuK,EAAS,CAAC4M,IAEhC,IAAMI,EAA6BrX,OAAO+J,KAAKkN,EAAeG,YAAalR,KAAI,SAAA2D,GAAM,OAAAd,SAAAA,SAAA,CACnFc,GAAEA,GACCoN,EAAeG,WAAYvN,KAC9BhL,KAAM4X,QAAQQ,EAAeG,WAAYvN,SAGrCyN,EAAkB/N,cAAAA,cAAA,GAAA8N,GAAU,GAAA,CAAAJ,OAClC,GAAInU,QAAQC,SAAU,CACpB,IAAMwU,EAAehY,KAAKE,UACxBO,OAAO+J,KAAKkN,EAAeG,YAAc,IAAIlR,KAAI,SAAAoE,GAAQ,MAAC,CACxDT,GAAIS,EACJkN,UAAWP,EAAeG,WAAY9M,GAAOkN,eAcjD,OAAO1P,MAAC6C,cAAA7C,MAAMsL,SAAU,KAAA/I,EAASiN,GAXZ,WAAM,OACzBxP,MAAA6C,cAAA,SAAA,CACEuM,MAAOA,EACPrN,GAAI,0BAAmBoN,EAAepN,IACtC8H,wBAAyB,CACvBC,OAAQiF,eAAeU,EAAcN,EAAepN,WAS5D,IAAM4N,EAAa,iBAAAtS,OAAiB8R,EAAepN,IAE/C6N,EAAYnT,QAAQoT,UAAUF,GAElC,IAAKC,GAAa5U,QAAQmC,UAGxB,IAFA,IAAI2S,EAAI,EACFC,EAAStW,KAAKsW,SACXtV,EAAI,EAAGA,EAAI8U,EAASvX,OAAQyC,IAAK,CACxC,IAAMuV,EAAUT,EAAS9U,GAGzB,GAAIsV,GADJD,GADkBE,EAAQN,WAEV,CACdjT,QAAQwT,UAAUN,EAAYK,EAAQjO,IACtC6N,EAAYI,EAAQjO,GACpB,OAWN,OANK6N,IAEHA,EAAYT,EAAepN,GAC3BtF,QAAQwT,UAAUN,EAAYC,IAGzBrN,EAAS,CAACiN,EAAYpH,MAAK,SAAA5F,GAAQ,OAAAA,EAAKT,KAAO6N,QCtGxDM,eAAA,SAAA9K,QAAA,SAAA8K,iBAAA,IA4SC7K,MAAA,OAAAD,QAAAA,OAAAvH,MAAA5E,KAAAlB,YAAAkB,YAzSCoM,MAAG8K,IAA0B,KAoD7B9K,MAAA7I,MAAQ,CACN4T,SAAU/K,MAAK3C,MAAMrC,QACrBtJ,KAAMsZ,mBAAmBhL,MAAK3C,MAAMrC,SACpCmF,QAAS,GAGXH,MAAeK,gBAAG,SAACC,iBACX2K,UAAYtV,QAAQuV,sBAAsB5K,OAChD,GAAK2K,UAAL,CAEA,IAAM9S,QAAUmI,MAAM5O,KACtB,GAAKyG,QAGL,OAAQA,QAAQ1G,MACd,IAAK,uBACH,GAAsB,QAAlBH,GAAA0O,MAAK3C,MAAML,eAAO,IAAA1L,QAAA,EAAAA,GAAE6Z,gBACtB,OAEM,IAAAzZ,KAASyG,QAAOzG,KACxB,IAAMA,OAAQA,KAAKA,KACjB,MAEF,IAAMiP,QAAUjP,KAAKA,KAAsB,QAAjB2Q,GAAArC,MAAK7I,MAAMzF,YAAM,IAAA2Q,QAAA,EAAAA,GAAA3F,IAC3C,IAAMiE,UAAWA,QAAQhO,OACvB,OAGEiO,SAASC,KAAK/J,SAAS,uBACzBjB,KAAK,YAGP,IADA,IAAI4T,QAAUzJ,MAAK7I,MAAMzF,UACLoP,UAAAH,QAAAlO,GAAOqO,UAAAnO,OAAPF,KAAS,CAAxB,IAAM4I,MAAKyF,UAAArO,IACdgX,QAAUrO,mCAAmCqO,QAASpO,OAAO,GAE/D2E,MAAKe,SAAS,CACZZ,QAASH,MAAK7I,MAAMgJ,QAAU,EAC9BzO,KAAM+X,UAEJzJ,MAAK3C,MAAM+N,eACbpL,MAAK3C,MAAM+N,cAAc3B,QAAQ/X,KAAM+X,YAO/CzJ,MAAAqL,cAAgB,IAAIC,aAEpBtL,MAASuL,WAAG,EACZvL,MAAOwL,SAAG,EACVxL,MAAiByL,mBAAG,EAEpBzL,MAAoB0L,qBAAgC,KA0HpD1L,MAAO4I,QAAG,SAAC+C,GAET,IAAMrL,EAAQqL,EAAWC,YAEnB5Q,EAAUgF,MAAKtO,KAChBsJ,IAGD5D,QAAQyU,WACV7L,MAAK5I,QAAQ0U,iBAAiB9Q,EAAQ0B,GAAKsD,MAAK+L,kBAAmB/L,MAAKwL,QAASlL,EAAO,CACtFtF,QAAOA,IAGNgF,MAAKwL,UACRxL,MAAKwL,SAAU,WAwDrB,OA5SsExK,UAErE6J,eAAA9K,QAGClN,OAAAoO,eAAI4J,eAAOzL,UAAA,UAAA,CAAX8B,IAAA,WACE,OAAOtN,KAAKyJ,MAAMjG,SAAWA,yCAE/BvE,OAAAoO,eAAI4J,eAAIzL,UAAA,OAAA,CAAR8B,IAAA,WACE,IAAM7D,EAAQzJ,KAAKyJ,MAEnB,MAAI,UAAWA,EACNA,EAAM2O,MAEN3O,EAAM4O,2CAIjBpZ,OAAAoO,eAAI4J,eAAiBzL,UAAA,oBAAA,CAArB8B,IAAA,mBACQxE,EAAK9I,KAAKyJ,MAAM6O,SAClBtY,KAAKwD,QAAQoT,UAAU,iBAAiBxS,OAAW,QAAX1G,EAAAsC,KAAKlC,YAAM,IAAAJ,OAAA,EAAAA,EAAAoL,KAC1C,QAAT2F,EAAAzO,KAAKlC,YAAI,IAAA2Q,OAAA,EAAAA,EAAE8J,YACf,GAAW,OAAPzP,EACF,OAAOA,mCAIX7J,OAAAoO,eAAI4J,eAAOzL,UAAA,UAAA,CAAX8B,IAAA,mBACMlE,EAAOpB,SAAA,GACLhI,KAAKyJ,MAAML,SAAY,IAa7B,OAXKA,EAAQhK,OAAyB,UAAlBY,KAAKyJ,MAAMrC,eAAO,IAAA1J,OAAA,EAAAA,EAAEoL,KAAO/G,QAAQ4N,WAAc5N,QAAQyW,eAC3EpP,EAAQhK,IAAMY,KAAKyJ,MAAMrC,QAAQ0B,KAGjC9I,KAAKyJ,MAAMrC,UACY,QAAtBqH,EAAArF,EAAQ8M,sBAAc,IAAAzH,OAAA,EAAAA,EAAE1P,UACxBiB,KAAKyJ,MAAMgP,QAAW1W,QAAQyW,eAE/BpP,EAAQ8M,eAAiB,CAAClW,KAAKyJ,MAAMrC,UAGhCgC,mCAGTnK,OAAAoO,eAAI4J,eAAIzL,UAAA,OAAA,CAAR8B,IAAA,WACE,IAAMlG,GACFpH,KAAKyJ,MAAMgP,SAAW1W,QAAQmC,WAAalE,KAAK2X,YAChD3X,KAAKoJ,QAAQ8M,gBACblW,KAAKoJ,QAAQ8M,eAAe,IAC9BlW,KAAKuD,MAAMzF,KAEb,OAAOsZ,mBAAmBhQ,oCA2D5B6P,eAAAzL,UAAAqE,kBAAA,mBAIE,IAAK7P,KAAKyJ,MAAMgP,QAAU1W,QAAQ4N,WAAa5N,QAAQyW,aACrDxY,KAAK0Y,0BACA,GAAI1Y,KAAKyJ,MAAMgP,SAAwC,QAA9BhK,EAAc,QAAd/Q,EAAAsC,KAAKoJ,eAAS,IAAA1L,OAAA,EAAAA,EAAAwY,sBAAgB,IAAAzH,OAAA,EAAAA,EAAA1P,QAAQ,CACpE,IAAM4Z,EAAc3Y,KAAKoJ,QAAQ8M,eAAe,IAE5CyC,MAAAA,SAAAA,EAAa7P,MACf9I,KAAKwD,QAAQwS,UAAY2C,EAAY7P,GACrC9I,KAAKwD,QAAQoV,gBAAgBD,EAAY7P,GAAI9I,KAAKmY,uBAAmBvN,EAAW,CAC9ExD,QAASuR,KAKX5W,QAAQ4N,WACVG,iBAAiB,UAAW9P,KAAKyM,kBAMrCwK,eAAAzL,UAAAkN,mBAAA,WAAA,IAkFCtM,EAAApM,KAjFmB,YAAdA,KAAKmJ,MAEPnJ,KAAKyX,cAAcvN,IACjBlK,KAAKwD,QAAQqV,gBAAgB7Y,KAAKmJ,KAAMnJ,KAAKoJ,SAAS0P,WACpD,SAAAC,GACE,IAAM5X,EAAQ4X,GAAWA,EAAQ,GACjC3M,EAAKe,SAAS,CACZrP,KAAMqD,EACNgW,SAAS,IAMX,IAAMqB,GACHpM,EAAK5I,QAAQwV,cAAgB5M,EAAK5I,QAAQyV,mBAAqB7M,EAAKjD,KAOvE,IANKiD,EAAK3C,MAAMgP,QAAUrM,EAAK3C,MAAMrC,SAAWgF,EAAKuL,WAAaa,IAChEpM,EAAKuL,WAAY,EACjBvL,EAAKqL,cAAcyB,cACnB9M,EAAKsM,sBAGHvX,GAASiL,EAAKuL,YAChBvL,EAAKuL,WAAY,EAEbnU,QAAQyU,YAAclW,QAAQ4N,WAAW,CAC3C,IAAIwJ,GAAgB,EACpB,GAAoC,mBAAzBC,sBAAuChN,EAAK8K,IACrD,KACoB9K,EAAK0L,qBAAuB,IAAIsB,sBAChD,SAAC/O,EAASgP,GACRhP,EAAQF,SAAQ,SAAAmP,GAEVA,EAAMC,kBAAoB,IAAMnN,EAAKyL,oBACvCzL,EAAK5I,QAAQoV,gBACXzX,EAAM2H,GACNsD,EAAK+L,uBACLvN,EACA,CACExD,QAASgF,EAAKtO,OAGLsO,EAAKtO,KAClBsO,EAAKyL,mBAAoB,EACrBzL,EAAK8K,KACPmC,EAASG,UAAUpN,EAAK8K,aAOzBuC,QAAQrN,EAAK8K,KACtBiC,GAAgB,EAChB,MAAOO,GACPvW,QAAQsB,KAAK,wCAGZ0U,IACH/M,EAAKyL,mBAAoB,EACzBzL,EAAK5I,QAAQoV,gBAAgBzX,EAAM2H,GAAKsD,EAAK+L,uBAAmBvN,EAAW,CACzExD,QAASjG,KAKbiL,EAAK3C,MAAM+N,eACbpL,EAAK3C,MAAM+N,cAAcrW,GAASA,EAAMrD,KAAMqD,MAGlD,SAAAkD,GACM+H,EAAK3C,MAAMkQ,eACbvN,EAAK3C,MAAMkQ,aAAatV,GACxB+H,EAAKe,SAAS,CACZgK,SAAS,UASvBF,eAAAzL,UAAAkE,qBAAA,WACM3N,QAAQ4N,WACVC,oBAAoB,UAAW5P,KAAKyM,iBAGtCzM,KAAKyX,cAAcyB,cACflZ,KAAK8X,sBAAwB9X,KAAKkX,KACpClX,KAAK8X,qBAAqB0B,UAAUxZ,KAAKkX,MAsB7CD,eAAAzL,UAAAmI,OAAA,WAAA,IAmDCvH,EAAApM,KAlDC,GAAIA,KAAKyJ,MAAMmQ,SACb,OAAO,KAED,IAAAzC,EAAYnX,KAAKuD,cAEnBsW,EAAe7Z,KAAKlC,KACpB2S,EAAUzQ,KAAKyJ,MAAMmQ,SAAWnE,OAAS,MAC/C,OACE1O,eAAC6C,cAAAqM,kBAAiBC,eAAgB2D,EAAS1D,MAAOnW,KAAKyJ,MAAM0M,QAC1D,SAACG,EAAUwD,GACV,OACE/S,eAAA6C,cAAC7C,eAAMsL,SAAQ,KACZiE,EAASnR,KAAI,SAACiC,EAAS/B,GAGtB,IAAM0U,EAAM1U,IAAUiR,EAASvX,OAAS,EAAIgI,eAAMsL,SAAW,WAC7D,OACEtL,6BAACA,eAAMsL,SAAS,CAAAjT,IAAKmJ,QAAOnB,MAAAA,OAAA,EAAAA,EAAS0B,IAAMzD,IAChC,aAAR0U,IAAsBD,MAAAA,OAAY,EAAZA,KACvB/S,eAAC6C,cAAAmQ,YACC3a,IAAKmJ,QAAOnB,MAAAA,OAAO,EAAPA,EAAS0B,IAAMzD,IACd,aAAR0U,GAAsB,CACzBC,2BAA4B5S,MAAAA,OAAA,EAAAA,EAAS0B,KAGvC/B,eAAA6C,cAAC6G,EAAOzI,SAAA,GACS,IAAV3C,IACF+G,EAAK3C,MAAMmQ,UAAY,CACtB1C,IAAK,SAACA,GAAa,OAAC9K,EAAK8K,IAAMA,IAC/B,CACJxE,UAAU,kBACVsC,QAAS5I,EAAK4I,QAAOiF,qBACD7S,MAAAA,OAAA,EAAAA,EAAS0B,GACdoR,gBAAA9N,EAAKjD,OAEnBiD,EAAK3C,MAAMH,SACVlC,MAAAA,OAAO,EAAPA,EAAStJ,MACTsO,EAAK3C,MAAMgP,QAAiBtB,EAC5B0C,cAazB5C,eA5SD,CAAsElQ,eAAMkN,WA8S/DmD,mBAAqB,SAAChQ,SACjC,GAAIA,EAAS,CACX,IAAM+S,EAAc3W,QAAQoT,UAAU,iBAAiBxS,OAAAgD,EAAQ0B,KACzDsR,EACJD,IAAgB/S,EAAQ0B,GAAK1B,EAA4B,QAAlB1J,EAAA0J,EAAQiP,kBAAU,IAAA3Y,OAAA,EAAAA,EAAGyc,GACxDE,GACJD,MAAAA,OAAe,EAAfA,EAAiBjR,SAASiR,MAAAA,OAAA,EAAAA,EAAiBtR,MAAO1B,EAAQ0B,GAAK,oBAAsB,IAEvF,OAAAd,SAAAA,SAAA,GACKZ,GAAO,CACVmR,YAAa4B,EACbG,gBAAiBH,EACjBI,kBAAmBF,IAGvB,OAAO,yPCzXTpb,OAAOoO,eAAemN,EAAS,aAAc,CAAEzc,OAAO,IAEtD,IACI0c,EAASC,OAAO,UAChBC,EAAcD,OAAO,eAUrBE,EAAa,SAAU7Z,EAAMoH,GAO/B,OANIA,GAAYA,EAASjH,WACnBH,IACFA,GAfe,KAiBjBA,GAAQoH,EAASjH,YAEZH,GAaL8Z,EAAe,SAAU9c,GAC3B,OAAIiD,MAAMC,QAAQlD,GACTA,EAAMqD,QAERnC,OAAOC,OAAO,GAAInB,IAEvB+c,EAAW,SAAUC,EAAQD,EAAU1R,GACzC,GAAqB,oBAAVmI,MAET,OAAOwJ,OAEO,IAAZ3R,IACFA,EAAU,IAEZ,IAGI4R,EACAC,EAJAC,EAAcR,OAAO,eACrBS,GAAU,EACVC,GAAU,EAGVC,GAAiB,EACjBC,EAASlS,EAAQkS,QAAUrc,OAAOsc,GAClCC,EAAY,IAAIC,QAChBC,EAAY,IAAID,QAChBE,EAAa,IAAIF,QACjBG,EAAe,SAAU7a,EAAMoH,EAAU0T,EAAU9d,GACrD,IAAIsd,EAGJ,GAAKF,EAAL,CAIA,GACEA,GACAF,QACarQ,IAAbiR,QACUjR,IAAV7M,GACa,WAAboK,EACA,CACA,IAAI2T,EAASb,EACTla,IAASia,GAnDJ,SAAUja,EAAM+I,GAE7B,IADA,IAAIzE,EACGtE,IAEU,KADfsE,EAAQtE,EAAKyD,QAxBI,QA0Bfa,EAAQtE,EAAKhC,QAEf+K,EAAS/I,EAAKK,MAAM,EAAGiE,IACvBtE,EAAOA,EAAKK,MAAMiE,EAAQ,GA6CtB0W,CADAhb,EAAOA,EAAK2H,QAAQsS,EAAW,IAAI5Z,MAAM,IAC1B,SAAUhC,GACvB0c,EAAO1c,GAAOyb,EAAaiB,EAAO1c,IAClC0c,EAASA,EAAO1c,MAGpB0c,EAAO3T,GAAY0T,EAErBT,GAAU,OApBRN,EAASF,EAAW7Z,EAAMoH,GAAWpK,EAAO8d,IAoC5CG,EAA6B,SAAUC,EAAQ9T,GACjD,IAAIsB,EAAQ+R,EAAYA,EAAUlO,IAAI2O,QAAUrR,EAC5CnB,GACFA,EAAMyS,OAAO/T,IAGbgU,EAAa,SAAUpe,EAAOgD,GAChC,GAAIsa,EACF,OAAOtd,EAET2d,EAAU7a,IAAI9C,EAAOgD,GACrB,IAAIqb,EAAQT,EAAWrO,IAAIvP,GAK3B,YAJc6M,IAAVwR,IACFA,EAAQ,IAAI7K,MAAMxT,EAAOse,GACzBV,EAAW9a,IAAI9C,EAAOqe,IAEjBA,GASLE,EAAe,SAAUnU,GAC3B,OAAOkT,IAA6C,IAA1BjS,EAAQmT,eAA8C,iBAAbpU,GAEjEkU,EAAU,CACZ/O,IAAK,SAAU2O,EAAQ9T,EAAUqU,GAC/B,GAAIrU,IAAa+S,GAAe/S,IAAasS,EAC3C,OAAOwB,EAET,GAAI9T,IAAawS,GAAyC,KAA1Be,EAAUpO,IAAI2O,GAC5C,OAhBY,SAAUA,GAK1B,OAJAZ,GAAiB,EACjBG,EAAY,KACZE,EAAY,KACZC,EAAa,KACNM,EAWI/C,CAAY+C,GAErB,IAAIle,EAAQ0e,QAAQnP,IAAI2O,EAAQ9T,EAAUqU,GAC1C,GAnIY,SAAUze,GAC1B,OAAiB,OAAVA,GAAoC,iBAAVA,GAAuC,mBAAVA,EAmIxD2e,CAAY3e,IAjIiB,SAAUA,GAC7C,OAAOA,aAAiB4e,QAAU5e,aAAiB2D,OAiI7Ckb,CAA+B7e,IAClB,gBAAboK,IACsB,IAAtBiB,EAAQyT,UAER,OAAO9e,EAGT,IAAI+e,EA5DuB,SAAUb,EAAQ9T,GAC/C,IAAIsB,EAAQ+R,EAAYA,EAAUlO,IAAI2O,QAAUrR,EAChD,GAAInB,EACF,OAAOA,EAETA,EAAQ,IAAIsT,IACZvB,EAAU3a,IAAIob,EAAQxS,GACtB,IAAI+H,EAAO/H,EAAM6D,IAAInF,GAKrB,OAJKqJ,IACHA,EAAOiL,QAAQO,yBAAyBf,EAAQ9T,GAChDsB,EAAM5I,IAAIsH,EAAUqJ,IAEfA,EAgDYwL,CAAyBf,EAAQ9T,GAClD,GAAI2U,IAAeA,EAAWG,aAAc,CAC1C,GAAIH,EAAWjc,MAAQic,EAAWxP,IAChC,OAEF,IAA4B,IAAxBwP,EAAWI,SACb,OAAOnf,EAGX,OAAOoe,EAAWpe,EAAO6c,EAAWc,EAAUpO,IAAI2O,GAAS9T,KAE7DtH,IAAK,SAAUob,EAAQ9T,EAAUpK,EAAOye,GAClCze,QAAgC6M,IAAvB7M,EAAMmd,KACjBnd,EAAQA,EAAMmd,IAEhB,IAAIiC,EAASb,EAAanU,GACtB0T,EAAWsB,EAAS,KAAOV,QAAQnP,IAAI2O,EAAQ9T,EAAUqU,GACzDY,EAASX,QAAQ5b,IAAIob,EAAOf,IAAgBe,EAAQ9T,EAAUpK,GAIlE,OAHKof,GAAW7B,EAAOO,EAAU9d,IAC/B6d,EAAaF,EAAUpO,IAAI2O,GAAS9T,EAAU0T,EAAU9d,GAEnDqf,GAET/P,eAAgB,SAAU4O,EAAQ9T,EAAU2U,GAC1C,IAAIM,EAASX,QAAQpP,eAAe4O,EAAQ9T,EAAU2U,GAKtD,OAJKR,EAAanU,KAChB6T,EAA2BC,EAAQ9T,GACnCyT,EAAaF,EAAUpO,IAAI2O,GAAS9T,OAAUyC,EAAWkS,EAAW/e,QAE/Dqf,GAETC,eAAgB,SAAUpB,EAAQ9T,GAChC,IAAKsU,QAAQxS,IAAIgS,EAAQ9T,GACvB,OAAO,EAET,IAAIgV,EAASb,EAAanU,GACtB0T,EAAWsB,EAAS,KAAOV,QAAQnP,IAAI2O,EAAQ9T,GAC/CiV,EAASX,QAAQY,eAAepB,EAAQ9T,GAK5C,OAJKgV,IACHnB,EAA2BC,EAAQ9T,GACnCyT,EAAaF,EAAUpO,IAAI2O,GAAS9T,EAAU0T,IAEzCuB,GAETxY,MAAO,SAAUqX,EAAQqB,EAASC,GAChC,IAAIC,EAAsCF,aAlLtBG,KAsLpB,GAHID,IACFF,EAAUA,EAAQpC,KAEfC,EAAS,CACZA,GAAU,EACNqC,IACFvC,EAAgBqC,EAAQI,YAEtB1c,MAAMC,QAAQqc,IAAuC,oBAA3Bpc,SAASwK,KAAK4R,MAC1CrC,EAAgBJ,EAAayC,EAAQpC,KAGvCF,GADAA,EAAYU,EAAUpO,IAAI2O,IACJ7a,MAAM,EAAGZ,KAAKd,IAAIsb,EAAU2C,YAzMrC,KAyMkE,IAC/E,IAAIP,EAASX,QAAQ7X,MAAMqX,EAAQqB,EAASC,GAO5C,OANApC,GAAU,GACNC,GAAYoC,IAAYlC,EAAOL,EAAeqC,EAAQI,cACxD9B,EAAaZ,EAAW,GAAIC,EAAeqC,EAAQpC,IAAgBoC,GACnErC,EAAgB,KAChBG,GAAU,GAELgC,EAET,OAAOX,QAAQ7X,MAAMqX,EAAQqB,EAASC,KAGtCnB,EAAQD,EAAWpB,EAAQ,IAE/B,OADAD,EAAWA,EAAS8C,KAAKxB,GAClBA,GAETtB,EAASmB,OAAS,SAAUG,GAC1B,OAAOA,EAAM3B,IAAW2B,GAE1BtB,EAAS5B,YAAc,SAAUkD,GAC/B,OAAOA,EAAMzB,IAAgByB,GAE/ByB,EAAcrD,QAAGM,EACjBN,EAAA/a,QAAkBqb,wCCrOZgD,SAAW/b,QAAQ+b,kBAUTC,iBACd9B,EACA7c,EACA0d,GAEA,YAAmB,IAAR1d,GAAyC,mBAAX6c,EAChC+B,qBAAqB/B,GAEvB,CACLgB,cAAc,EACdgB,WAAYnB,EAAYmB,WACxB3Q,IAAK,WAQH,OANArO,OAAOoO,eAAerN,KAAMZ,EAAM,CAChC6d,cAAc,EACdgB,WAAYnB,EAAYmB,WACxBlgB,MAAOigB,qBAAqBlB,EAAY/e,SAGlCiC,KAAaZ,KAK3B,SAAS4e,qBAAqB/Z,GAC5B,IAAIU,EAAqB,KACrB0C,EAAe,KAEnB,OAEA,WACE,IAAMwU,EAAWlX,EAGjB,GAFAA,EAAO,GAAGvD,MAAMsK,KAAK5M,WACrBuI,EAAUrH,KACO,OAAb6b,EAAmB,OACvBiC,SAASI,IAGX,SAASA,IACPja,EAAGW,MAAMyC,EAAS1C,GAClBA,EAAO,KACP0C,EAAU,eCrDE8W,SAASC,EAAgBC,EAAcjV,GACrD,IAAI/B,EACA1C,EACAyY,OAHiD,IAAAhU,IAAAA,EAAiB,IAItE,IAAIkV,EAAU,KACVzC,EAAW,EACT0C,EAAQ,WACZ1C,GAA+B,IAApBzS,EAAQoV,QAAoB,EAAIf,KAAKgB,MAChDH,EAAU,KACVlB,EAASgB,EAAKxZ,MAAMyC,EAAS1C,GACxB2Z,IAASjX,EAAU1C,EAAO,OAEjC,OAAO,WACL,IAAM8Z,EAAMhB,KAAKgB,MACZ5C,IAAgC,IAApBzS,EAAQoV,UAAmB3C,EAAW4C,GACvD,IAAMC,EAAYL,GAAQI,EAAM5C,GAchC,OAbAxU,EAAUrH,KACV2E,EAAO7F,UACH4f,GAAa,GAAKA,EAAYL,GAC5BC,IACFK,aAAaL,GACbA,EAAU,MAEZzC,EAAW4C,EACXrB,EAASgB,EAAKxZ,MAAMyC,EAAS1C,GACxB2Z,IAASjX,EAAU1C,EAAO,OACrB2Z,IAAgC,IAArBlV,EAAQwV,WAC7BN,EAAU1R,WAAW2R,EAAOG,IAEvBtB,GC3BE,IAAAyB,mBAAqB9X,eAAMC,cAAc,CACpD6H,WAAW,EACXiQ,SAAS,EACT9c,UAAU,ICEC+c,QAAU,SAACrb,EAAc5F,EAAgB8F,QAAhB,IAAA9F,IAAAA,EAAc,IAClD,IAAMC,EAAQ2F,EACd,GAAuB,iBAAV3F,GAAsBA,EAAM+F,OAAzC,CAGA,IAAME,IAAcjG,EAAMmF,SAAS,MAAQnF,EAAMmF,SAAS,aACtDe,EAAe,aAGnB,IACMlC,QAAQmC,YAGVD,EAAK,IAAIE,SACP,QAEA,qbAAAC,OAeIJ,EAAY,WAAWI,OAAAV,EAAO,MAAGA,EAAG,kBAI5C,MAAOW,GACHtC,QAAQmC,WACVf,QAAQsB,KAAK,+BAAgCJ,GAKjD,IACE,GAAItC,QAAQmC,WAAavB,kCACvB,OAAOsB,EAAGnG,GAAQ,IAKlB,IAAMiH,EAAMnD,mBAAmB,eACzBod,EAAUla,oBAEhB7F,OAAO+J,KAAKlL,GAAMqM,SAAQ,SAAA/K,GACxB,OAAQA,GACN,IAAK,QACL,IAAK,SACL,IAAK,MACH+D,QAAQsB,KAAK,qBAAAL,OAAqBhF,EAAiB,eAAAgF,OAAAhF,EAAoB,oBACvE,MACF,QACE,QAAkBwL,IAAd9M,EAAKsB,GACP,OAEF,IAC2B,iBAAdtB,EAAKsB,IAAmC,OAAdtB,EAAKsB,GACxC4f,EAAQzY,OAAOC,QAAQpH,EAAK,IAAI2F,EAAIka,aAAanhB,EAAKsB,IAAM8f,YAE5DF,EAAQzY,OAAOC,QAAQpH,EAAKtB,EAAKsB,IAEnC,MAAOiF,GACPlB,QAAQsB,KAAK,iBAAAL,OAAiBhF,EAAsB,qBAAEiF,QAI9D,IAAM8a,EAAWja,OAAOxB,EAAMM,EAAW,CAAC,UACpCgB,EAAYga,EAAQ/Z,gBAAgBka,EAAU,CAAC,IAAIpa,EAAIO,UAAUxH,GAAQ,MAC/E,IAEE,OAAOU,KAAKC,MAAMuG,GAClB,MAAOU,GACP,OAAOV,GAGX,MAAOX,GACHT,GACFA,EAAOU,KAAKD,GAGVtC,QAAQmC,UACVf,QAAQsB,KAAK,6BAA8BJ,EAAME,QAAS,KAAMb,EAAKW,EAAMsB,OAEvExD,WACFgB,QAAQyC,MAAM,6BAA8BvB,EAAME,QAAS,KAAMb,EAAKW,EAAMsB,OAIxE,QACR,IAAM5D,QAAQmC,YAAavB,kCAAoC,CAC7D,IAAMyc,EAAUta,oBAGhB7F,OAAO+J,KAAKlL,GAAMqM,SAAQ,SAAA/K,GACxB,OAAQA,GACN,IAAK,QACL,IAAK,SACL,IAAK,MACH,MACF,QACEggB,EAAQ7Y,OAAO8Y,WAAWjgB,WCvGhC,SAAUkgB,QAAQ5F,GACtB,OAAIA,aAAe6F,MAAc7F,EAC1B,IAAI6F,MAAMhX,OAAOmR,ICZpB,SAAU8F,gBAAgBC,GAC9B,MAAO,CACL3W,GAAI,iBAAmBtI,KAAKsW,SAAS5V,SAAS,IAAI2G,MAAM,KAAK,GAC7D6X,QAAS,0BACT7W,QAAS,MACTI,WAAY,CACV0W,KAAM,eACNC,cAAe,OACfC,IAAK,8CAA8Czb,OAAAqb,IAErD5R,iBAAkB,CAChBhO,MAAO,CACLigB,OAAQ,IACR5f,MAAO,IACP0T,QAAS,eACTmM,QAAS,IACTC,SAAU,SACVC,cAAe,UCuBvB,SAASC,KAA2B3hB,OAAQ,IAAYyK,EAAA,GAAAnK,EAAA,EAAZA,EAAYC,UAAAC,OAAZF,IAAAmK,EAAYnK,EAAA,GAAAC,UAAAD,GACtD,IAAMshB,EAAW,GAIjB,OAHAnX,EAAKmB,SAAQ,SAAA/K,GACX+gB,EAAI/gB,GAAOb,EAAIa,MAEV+gB,EAET,SAASxhB,KAA2BJ,OAAQ,IAAYyK,EAAA,GAAAnK,EAAA,EAAZA,EAAYC,UAAAC,OAAZF,IAAAmK,EAAYnK,EAAA,GAAAC,UAAAD,GACtD,IAAMshB,EAAGnY,SAAA,GAAazJ,GAItB,OAHAyK,EAAKmB,SAAQ,SAAA/K,UACJ+gB,EAAI/gB,MAEN+gB,EAGT,IAAMC,aAAe,IAAIrD,IAEnBsD,cAAgB,SAACC,GACrB,OAAO,SAAC7W,SAEAsQ,EAAMtQ,EAAM8W,YAAc,MAC1BC,EAAa,CAAC,YAAYpc,QACnB,QAAX1G,EAAA4iB,EAAKG,cAAM,IAAA/iB,OAAA,EAAAA,EAAEyH,KAAI,SAACoE,GAAc,OAAAA,EAAKJ,UAAmB,IAGpDuX,EAAY/hB,KAAKiG,WAAA,EAAA4D,cAAAA,cAAA,CAAAiB,GAAU+W,GAAU,GAAA,CAAE,eAAY,IACnDG,EAAalX,EAEnB,OAAI6W,EAAK3O,OACA5K,eAAA6C,cAAC0W,EAAKvX,MAAKf,SAAA,CAAC4K,WAAY8N,GAAeC,IAI9C5Z,eAAA6C,cAACmQ,EAAG/R,SAAA,GAAK0Y,GACP3Z,eAAC6C,cAAA0W,EAAKvX,MAAKf,SAAA,GAAK2Y,OAMlB5gB,OAAO,SAAC4G,GAAkB,OAAA1H,OAAO+J,KAAKrC,GAAO5H,QAEnD,SAAS6hB,SAASxC,EAAgBC,EAAcwC,GAC9C,IAAIvC,EACJ,YAF8C,IAAAuC,IAAAA,GAAiB,GAExD,WACL,IAAMxZ,EAAUrH,KACV2E,EAAO7F,UACb6f,aAAaL,GACbA,EAAU1R,YAAW,WACnB0R,EAAU,KACLuC,GAAWzC,EAAKxZ,MAAMyC,EAAS1C,KACnC0Z,GACCwC,IAAcvC,GAASF,EAAKxZ,MAAMyC,EAAS1C,IAInD,IAAMmc,YAAc,IAAIjV,IAEpBkV,QACAlf,WAAWkf,QAAOA,QAAQlf,WAAWkf,OACzCA,MAAAA,UAAAA,QAAUjf,QAAQ,eAElB,IAAMkf,QAAU,CACd7V,QAAS,QACTC,OAAQ,SACRC,OAAQ,QACR9L,OAAQ,UAGJ0hB,WAAqC,GA0N3C,SAASC,iBAAelU,GACtB,IAAMmU,GAASnU,EAASoU,QAAU,IAAIC,UAAU,GAAGxZ,MAAM,KACnDtJ,EAAiC,GAEvC,IAAK,IAAMiD,KAAK2f,EACd,GAAMA,EAAM3f,IAA0B,iBAAb2f,EAAM3f,GAA/B,CAGA,IAAM8f,EAAOH,EAAM3f,GAAGqG,MAAM,KAC5BtJ,EAAIgjB,mBAAmBD,EAAK,KAAOC,mBAAmBD,EAAK,IAG7D,OAAO/iB,EAeT,IAAAijB,iBAAA,SAAArV,GAuDE,SAAAqV,EAAY/X,GAAZ,QAoEC2C,EAAApM,MAnECoM,EAAAD,EAAAT,KAAA1L,KAAMyJ,IAAMzJ,MAhDdyX,cAA8B,IAAIC,aAElCtL,EAAAqV,cAAgB,IAAIC,gBAAqB,MACzCtV,EAAAuV,SAAW5f,QAAQC,SAEnBoK,EAAUwV,WAA0B,KAEpCxV,EAAQyV,SAA4B,KAEpCzV,EAASjF,UAAGpF,QAAQC,SAAW,GAAK8Y,SAAS,IAAI,WAAM,OAAA1O,EAAK0V,iBAE5D1V,EAAU2V,WAAG,GACb3V,EAAgB4V,iBAA0C,GAC1D5V,EAAsB6V,uBAAgD,GACtE7V,EAASuL,WAAG,EACZvL,EAAG8K,IAAuB,KAwJ1B9K,EAAe8V,gBAAG,SAACxV,SAEjB,GADkB3K,QAAQuV,sBAAsB5K,GAChD,CAEA,IAAM4T,EAAO5T,EAAM5O,KACnB,OAAQwiB,EAAKziB,MACX,IAAK,uBACH,IAAMC,EAAOwiB,EAAKxiB,KAElB,IAAKA,EAAKkY,WAAalY,EAAKkY,aAA+B,QAAjBtY,EAAA0O,EAAK+V,kBAAY,IAAAzkB,OAAA,EAAAA,EAAAoL,IACzD,OAGFsD,EAAK9M,MAAQc,uBAAuBtC,EAAKuC,aAAe,IAExD+L,EAAKe,SAAS,CACZ5J,MAAOtE,OAAOC,OAAOkN,EAAKjF,UAAW,CACnCib,WAAYhW,EAAKiW,gBAEjBC,OAAQlW,EAAKkW,SAEf/V,SAAWH,EAAK7I,OAAS6I,EAAK7I,MAAMgJ,SAAY,GAAK,EACrDlM,YAAavC,EAAKuC,cAGpB,MAGF,IAAK,uBACH,IAAMkiB,EAAOjC,EAAKxiB,KACIsO,EAAKjF,UAAU+K,QACrC9F,EAAK0V,aAAY,SAAAve,GACfA,EAAM2O,QAAUqQ,KAElB,MAEF,IAAK,qBACG,IAAA9T,EAAmB6R,EAAKxiB,KAAtByF,EAAKkL,EAAAlL,MACb,GADoBkL,EAAA2J,QACNhM,EAAKjD,KAAM,CACvB,IAAK,IAAM/J,KAAOgN,EAAKjF,UAEc,mBAAxBiF,EAAKjF,UAAU/H,WACjBgN,EAAKjF,UAAU/H,GAG1BH,OAAOC,OAAOkN,EAAKjF,UAAW5D,GAC9B6I,EAAKe,SACAnF,SAAAA,SAAA,GAAAoE,EAAK7I,OAAK,CACbA,MAAO6I,EAAKjF,UACZoF,SAAWH,EAAK7I,OAAS6I,EAAK7I,MAAMgJ,SAAY,GAAK,KAGzD,MAEF,IAAK,2BACG,IAAAoC,EAAuB2R,EAAKxiB,KAAKyF,MAAjBuF,GAAdvF,EAAKoL,EAAApL,MAAOoL,EAAAyJ,YACpB,GAAIhM,EAAK3C,MAAMoJ,cAAgBzG,EAAK3C,MAAMoJ,eAAiB/J,EAAI,CAC7D,IAAK,IAAM1J,KAAOgN,EAAKjF,iBACdiF,EAAKjF,UAAU/H,GAExBH,OAAOC,OAAOkN,EAAKjF,UAAW5D,GAC9B6I,EAAKe,SACAnF,SAAAA,SAAA,GAAAoE,EAAK7I,OAAK,CACbA,MAAO6I,EAAKjF,UACZoF,SAAWH,EAAK7I,OAAS6I,EAAK7I,MAAMgJ,SAAY,GAAK,SAQ/DH,EAAAoW,SAAW,WACT,IAAMJ,EAAahW,EAAKiW,gBACpBD,IAAehW,EAAK7I,MAAMA,MAAM6e,YAClChW,EAAKe,SACAnF,SAAAA,SAAA,GAAAoE,EAAK7I,OAAK,CACbgJ,SAAWH,EAAK7I,OAAS6I,EAAK7I,MAAMgJ,SAAY,GAAK,EACrDhJ,MAAOtE,OAAOC,OAAOkN,EAAKjF,+BACrBiF,EAAK7I,MAAMA,QACd6e,WAAUA,SAMlBhW,EAAcqW,eAAG1gB,QAAQ4N,UAAYwO,SAAS/R,EAAKoW,SAAU,KAAO5B,SAASxU,EAAKoW,SAAU,KAiH5FpW,EAAOsW,SAAG,EA2DVtW,EAAW0V,YAAG,SAAC7d,GACb,IAAMV,EAAQ6I,EAAKjF,UACflD,GACFA,EAAGV,GAED6I,EAAKsW,QACPtW,EAAKe,SAAS,CACZ7F,OAAQ8E,EAAK0V,YACbve,MAAKA,EACLgJ,SAAWH,EAAK7I,OAAS6I,EAAK7I,MAAMgJ,SAAY,GAAK,IAGvDH,EAAK7I,MAAKyE,SAAAA,SAAA,GACLoE,EAAK7I,OACR,CAAA+D,OAAQ8E,EAAK0V,YACbve,MAAKA,EACLgJ,SAAWH,EAAK7I,OAAS6I,EAAK7I,MAAMgJ,SAAY,GAAK,IAIzDH,EAAKuW,qBAsjBPvW,EAAAwW,gBAAkB,SAAC9kB,EAAWsJ,GAC5B,GAAkB,SAAdgF,EAAKjD,MAAmBpH,QAAQmC,WAC9BpG,EAAM,CACA,IAAA+kB,EAAmD/kB,QAA5CglB,EAA4ChlB,EAAIglB,UAArCC,EAAiCjlB,EAAtBilB,YAAEC,EAAoBllB,kBAM3D,IAJI+kB,GAASC,KACXzN,SAASwN,MAAQA,GAASC,GAGxBC,GAAeC,EAAiB,CAClC,IAAIC,EAAiB5N,SAASC,cAAc,4BAEvC2N,KACHA,EAAiB5N,SAASzL,cAAc,SACzBsZ,aAAa,OAAQ,eACpC7N,SAAS8N,KAAKC,YAAYH,IAG5BA,EAAeC,aAAa,UAAWH,GAAeC,IA+B5D,GA1BIjhB,QAAQ4N,WACVvD,EAAKuW,oBAGHvW,EAAK3C,MAAM+N,eACbpL,EAAK3C,MAAM+N,cAAc1Z,EAAMsJ,GAG7BtJ,GAAQA,EAAK2iB,QAAUzf,MAAMC,QAAQnD,EAAK2iB,SAAW3iB,EAAK2iB,OAAO1hB,SAC9DjB,EAAKyF,QACRzF,EAAKyF,MAAQ,IAGfzF,EAAK2iB,OAAOtW,SAAQ,SAACkZ,GACfA,GAEAA,EAAMla,WACiByB,IAAvByY,EAAMC,mBACqB1Y,IAA3B9M,EAAKyF,MAAM8f,EAAMla,QAEjBrL,EAAKyF,MAAM8f,EAAMla,MAAQka,EAAMC,kBAMnCxlB,GAAQA,EAAKyF,MAAO,CACtB,IAAMggB,EAAQvb,SAAAA,SAAA,GACToE,EAAK7I,OACR,CAAAgJ,SAAWH,EAAK7I,OAAS6I,EAAK7I,MAAMgJ,SAAY,GAAK,EACrDhJ,MAAOtE,OAAOC,OAAOkN,EAAKjF,UAASa,SAAAA,SAAAA,SAAAA,SAAAA,SAAA,GAC9BoE,EAAK7I,MAAMA,OACd,CAAAyJ,SAAUZ,EAAKoX,cACflB,OAAQlW,EAAKkW,SACVxkB,EAAKyF,OACL6I,EAAKqX,eACR,CAAArB,WAAYhW,EAAKiW,qBAGjBjW,EAAKsW,QACPtW,EAAKe,SAASoW,GAEdnX,EAAK7I,MAAQggB,EAKjB,GAAIzlB,GAAQA,EAAK4lB,SAAWtX,EAAKhD,QAAQua,QAAS,CAEhD,IAAIC,GAAO,EASX,GARI7hB,QAAQ4N,YACNvD,EAAK2V,aAAejkB,EAAK4lB,OAC3BE,GAAO,EAEPxX,EAAK2V,WAAajkB,EAAK4lB,SAItBE,EAAM,CACT,IAAMrgB,EAAQ6I,EAAK7I,MAAMA,MAGzB,IACiB,IAAIY,SACjB,OACA,MACA,QACA,SACA,UACA,UACA,UACA,UACArG,EAAK4lB,OATQ,CAUb5lB,EAAMsO,EAAM7I,EAAO6I,EAAK7I,MAAM+D,OAAQ8E,EAAK8K,IAAKnV,QAASyB,QAAS4I,EAAK7I,MAAM8D,SAI/E,MAAOqS,GACP,IAAMrV,EAAQib,QAAQ5F,GAClB3X,QAAQmC,UACVf,QAAQsB,KACN,6BACAJ,EAAME,QACN,KACAzG,EAAK4lB,OACLrf,EAAMsB,OAGJxD,WACFgB,QAAQyC,MACN,6BACAvB,EAAME,QACN,KACAzG,EAAK4lB,OACLrf,EAAMsB,SASlB,GAAI7H,GAAQA,EAAK+lB,eAAuDzX,EAAK3C,MAAMqa,WAG7EF,GAAO,GAEA,gBAEExkB,GACT,IAAM2kB,EAAmDjmB,EAAK+lB,aAAazkB,GAC3E,GAAI2kB,KAAiB3X,EAAKtO,KAAKsB,IAAQ2C,QAAQ4N,WAAY,CACzD,IAAMqU,EACmB,iBAAhBD,GACkB,6BAAzBA,EAAY,SACd,GAAIhiB,QAAQmC,UAAW,CACrB,IAAM+f,EAAWD,EACb5X,EAAK8X,eAAeH,EAAYI,QAAQC,KACxChY,EAAK8X,eAAeH,GAExB,GAAIhiB,QAAQ4N,WAAavD,EAAK4V,iBAAiB5iB,KAAS6kB,mBAGxD7X,EAAK4V,iBAAiB5iB,GAAO6kB,EAEzBD,EACF5X,EAAKiY,cAAcjlB,EAAK,CACtBglB,IAAKH,EACLK,OAAQP,EAAYI,QAAQG,OAC5BC,KAAMR,EAAYI,QAAQI,KAC1BC,QAAST,EAAYI,QAAQK,UAG/BpY,EAAKiY,cAAcjlB,EAAK,CACtBglB,IAAKH,EACLK,OAAQ,QAGZ,IAAMG,EAAsBrY,EAAK6V,uBAAuB7iB,GACpDqlB,GACFA,EAAoBvL,cAItB,IAAMwL,EAAmBtY,EAAK6V,uBAAuB7iB,GACnDgN,EAAKqV,cAAc3I,WAAU,WAC3B,IAAM6L,EAASX,EACX5X,EAAK8X,eAAeH,EAAYI,QAAQC,KACxChY,EAAK8X,eAAeH,GACpBY,IAAWV,IACTD,EACF5X,EAAKiY,cAAcjlB,EAAK,CACtBglB,IAAKO,EACLL,OAAQP,EAAYI,QAAQG,OAC5BC,KAAMR,EAAYI,QAAQI,KAC1BC,QAAST,EAAYI,QAAQK,UAG/BpY,EAAKiY,cAAcjlB,EAAK,CACtBglB,IAAKO,EACLL,OAAQ,QAGZlY,EAAK4V,iBAAiB5iB,GAAOulB,MAGnCvY,EAAKqL,cAAcvN,IAAIwa,QAEnBV,EACF5X,EAAKiY,cAAcjlB,EAAK,CACtBglB,IAAKhY,EAAK8X,eAAeH,EAAYI,QAAQC,KAC7CE,OAAQP,EAAYI,QAAQG,OAC5BC,KAAMR,EAAYI,QAAQI,KAC1BC,QAAST,EAAYI,QAAQK,UAG/BpY,EAAKiY,cAAcjlB,EAAK,CACtBglB,IAAKhY,EAAK8X,eAAeH,GACzBO,OAAQ,UArElB,IAAK,IAAMllB,KAAOtB,EAAK+lB,eAAZzkB,KAtkCf,IAAIwlB,EAAgBxY,EAAKyY,eACrBD,GAAYA,EAASxd,UACvBwd,EAAWA,EAASxd,SAGtBgF,EAAK9M,MAAQc,wBAAqC,UAAdwkB,MAAAA,OAAA,EAAAA,EAAUjZ,YAAI,IAAAjO,OAAA,EAAAA,EAAE2C,cAAe,IAInE,IAAMsY,EAAiC,QAAnBlK,EAAArC,EAAKyY,sBAAc,IAAApW,OAAA,EAAAA,EAAE3Q,KACrC6a,GAAe3X,MAAMC,QAAQ0X,EAAY8H,SAAW9H,EAAY8H,OAAO1hB,OAAS,IAC7E4Z,EAAYpV,QACfoV,EAAYpV,MAAQ,IAGtBoV,EAAY8H,OAAOtW,SAAQ,SAACkZ,GACtBA,GAEAA,EAAMla,WACiByB,IAAvByY,EAAMC,mBAC6B1Y,IAAnC+N,EAAYpV,MAAO8f,EAAMla,QAEzBwP,EAAYpV,MAAO8f,EAAMla,MAAQka,EAAMC,kBAK/ClX,EAAK7I,MAAQ,CAEX8D,QAAOW,SAAAA,SAAA,GACFyB,EAAMpC,SAAO,CAChBoY,OAAQrT,EAAK3C,MAAMgW,QAAUjc,QAAQic,OACrCtJ,MAAO/J,EAAK3C,MAAM0M,QAEpB5S,MAAOtE,OAAOC,OAAOkN,EAAKjF,UAASa,SAAAA,SAAAA,SAAAA,SAAA,GAC7BoE,EAAKyY,gBAAkBzY,EAAKyY,eAAe/mB,MAAQsO,EAAKyY,eAAe/mB,KAAKyF,OAAM,CACtFW,UAAWnC,QAAQmC,UACnBlC,UAAWD,QAAQmC,UACnB4gB,SAAUrb,EAAMsb,QAChB/X,SAAUZ,EAAKoX,cACfpB,WAAYhW,EAAKiW,gBAEjBC,OAAQlW,EAAKkW,SACVlW,EAAK4Y,eACLvb,EAAM3L,OAEXyO,QAAS,EACTnN,IAAK,EACLkI,OAAQ8E,EAAK0V,aAGf,IAAM1iB,EAAMgN,EAAK3C,MAAMgW,OACvB,GAAIrgB,GAAOA,IAAQgN,EAAK5I,QAAQic,SAAWW,aAAanW,IAAI7K,GAAM,CAEhE,IAAM6lB,EAAW,IAAIljB,QAAQ3C,OAAKwL,OAAWA,GAAW,GACxDwV,aAAavf,IAAIzB,EAAK6lB,GAGxB,GAAI7Y,EAAKyY,eAAgB,CAEvB,IAAMzd,EAAWgF,EAAKyY,eAAuBzd,SAAWgF,EAAKyY,eAC7DzY,EAAKwW,gBAAgBxb,MAAAA,OAAA,EAAAA,EAAStJ,KAAMsZ,mBAAmBhQ,WAGzDgF,EAAK8Y,6BAolCT,OA9sCsC9X,UAGrCoU,EAAArV,GAwBClN,OAAAoO,eAAImU,EAAOhW,UAAA,UAAA,CAAX8B,IAAA,WAEE,OAAAtF,SAAAA,SAAA,GACKwZ,EAAiB2D,UACjBnlB,KAAKyJ,wCAIZxK,OAAAoO,eAAImU,EAAIhW,UAAA,OAAA,CAAR8B,IAAA,WACE,OAAOtN,KAAKyJ,MAAM2O,OAASpY,KAAKyJ,MAAM4O,WAAarY,KAAKyJ,MAAMN,sCAQhElK,OAAAoO,eAAImU,EAAOhW,UAAA,UAAA,CAAX8B,IAAA,WACE,OAAOtN,KAAKkX,qCAGdjY,OAAAoO,eAAImU,EAAchW,UAAA,iBAAA,CAAlB8B,IAAA,WACE,IAAItN,KAAKwY,cAAiBxY,KAAKyJ,MAAM2b,cAGrC,OAAOplB,KAAKyJ,MAAMrC,yCAyEpBnI,OAAAoO,eAAImU,EAAOhW,UAAA,UAAA,CAAX8B,IAAA,WAEE,OADiBtN,KAAKyJ,MAAMgW,QAAUW,aAAa9S,IAAItN,KAAKyJ,MAAMgW,SAC/Czf,KAAKyJ,MAAMjG,SAAWA,yCAG3Cge,EAAAhW,UAAAwZ,YAAA,WACE,IAAMlc,EAAM9I,KAAK6kB,gBAAkB7kB,KAAK6kB,eAAe/b,IAAO9I,KAAKyJ,MAAM6P,MACnE+L,EACJvc,GACA/G,QAAQmC,WACRmR,SAASC,cACP,6BAAAlR,OAA6B0E,EAAmC,kCAAA1E,OAAA0E,EAAM,OAE1E,GAAIuc,EACF,IAEE,OADa7mB,KAAKC,MAAO4mB,EAAuBC,WAEhD,MAAO5L,GACPvW,QAAQsB,KACN,gDACAiV,EACC2L,EAAuBC,WAI9B,MAAO,IAITrmB,OAAAoO,eAAImU,EAAMhW,UAAA,SAAA,CAAV8B,IAAA,WACE,OAAOtN,KAAKwD,QAAQgC,oBAAoB8c,QAAU,2CAGpDrjB,OAAAoO,eAAImU,EAAahW,UAAA,gBAAA,CAAjB8B,IAAA,WACE,OAEKtF,SAAAA,SAAA,GAAAkY,KAAKlgB,KAAKgN,SAAU,WAAY,WAAY,SAAU,SACzD,CAAAjM,KAAOf,KAAKgN,SAASuY,UAAYvlB,KAAKgN,SAASuY,SAAS1d,MAAM,KAAKzG,MAAM,IAAO,GAChFokB,MAAOtE,iBAAelhB,KAAKgN,6CAK/B/N,OAAAoO,eAAImU,EAAehW,UAAA,kBAAA,CAAnB8B,IAAA,WAEE,OAAOvL,QAAQmC,UACXlE,KAAKV,MAAMW,gBAAgBxC,OAAOgoB,YAClCzE,QAAQhhB,KAAKsiB,SAAW,yCA2FvBd,EAAUtM,WAAjB,SACEC,EACA1L,EACAsb,EACAW,GAIA,QANA,IAAAjc,IAAAA,EAAiC,SACjC,IAAAsb,IAAAA,GAAc,QACd,IAAAW,IAAAA,GAAa,GAEbviB,QAAQyC,MAAM,yBAA0BuP,EAAmB1L,EAAOsb,EAAS/kB,MAEtEmV,EAAL,CAIA,IAAIC,EAA0B,KAU9B,GARiC,iBAAtBD,EACTC,EAAUC,SAASC,cAAcH,GAE7BA,aAA6BI,UAC/BH,EAAUD,GAITC,EAAL,CAIA,IAAMuQ,EAASvQ,EAAQwQ,UAAUC,SAAS,oBAC1C,IAAIF,GAAWD,EAAf,CAIAtQ,EAAQwQ,UAAU1b,IAAI,oBAEtB,IAAI4b,EAAgBf,GAAW3P,EAAQ2Q,UAAU7iB,SAAS,iBAE1D,IAAKkS,EAAQwQ,UAAUC,SAAS,qBAAsB,CAEpD,IAAMG,EACJ5Q,EAAQE,cAAc,yBACrBF,EAAQ6Q,wBACT7Q,EAAQ6Q,uBAAuBlN,QAAQ,uBACnC3D,EAAQ6Q,uBACR,MACFC,EAAa,GACjB,GAAIF,EACWA,EAAUD,UAClBrd,QACH,2DACA,SAACvH,EAAO2H,EAAI1B,GACV,IAAI+e,EAAyB,KAC7B,IACEA,EAAK9Q,SAASC,cAAc,sBAAsBlR,OAAA0E,EAAM,OACxD,MAAO4Q,GACPvW,QAAQsB,KAAKiV,GAQf,OANIyM,EACFA,EAAGJ,UAAY3e,EACLrF,QAAQ4N,YAClBuW,GAAc/kB,GAGTA,KAIXY,QAAQ+b,UAAS,WACfkI,EAAUD,UAAYG,KAG1B,IAAME,EAAahR,EAAQE,cAAc,sBACrC8Q,EACFhR,EAAUgR,EAEVN,GAAgB,EAIhB9Y,SAASoU,OAAOle,SAAS,uBAC3BC,QAAQyC,MAAM,UAAWkgB,EAAe1Q,GAG1C,IAAIiR,EAAQjR,EACZ,IAAKuQ,EAAQ,CACX,IAAMW,EAAMjR,SAASzL,cAAc,OACnCwL,EAAQmR,sBAAsB,cAAeD,GAC7CA,EAAIlD,YAAYhO,GAChBiR,EAAQC,EAMV,IAHIvkB,QAAQ4N,WAAc5N,QAAQmC,WAAa8I,SAASoU,OAAOle,SAAS,uBACtE4iB,GAAgB,GAEdA,GAAiB1Q,EAAS,CAE5B,IAAMoR,EAAMhR,SAAS7B,OACnB5M,6BAACya,EAAgBxZ,SAAA,GAAKyB,IACtB4c,EACCA,EAAcI,gBAGjB,OADCJ,EAAcI,eAAiBD,EACzBA,EAET,IAAME,EAAMlR,SAAS7B,OACnB5M,6BAACya,EAAgBxZ,SAAA,GAAKyB,IACtB4c,EACCA,EAAcI,gBAGjB,OADCJ,EAAcI,eAAiBC,EACzBA,EAhFLvjB,QAAQyC,MAAM,sCAqFlB4b,EAAAhW,UAAA0Z,yBAAA,WACE,GAAIllB,KAAKyJ,MAAMkd,iBACb,IAA8B,IAA2B9nB,EAAA,EAA3BnB,EAAAsC,KAAKyJ,MAAMkd,iBAAX9nB,EAAAnB,EAAAqB,OAAAF,IAA6B,CAAtD,IAAM+nB,EAAelpB,EAAAmB,GACxB,GAAI+nB,EAAiB,CACX,IAAA1d,EAA+B0d,EAAtB1d,UAAK2d,EAAYC,OAAKF,EAAjC,CAA8B,cACpC7kB,QAAQglB,kBAAkB7d,EAAW2d,MAM7CrF,EAAAhW,UAAAqE,kBAAA,WAAA,MA4CCzD,EAAApM,KA3CCA,KAAK0iB,SAAU,EACX1iB,KAAK2hB,WACP3hB,KAAK2hB,UAAW,EAChB3hB,KAAK8hB,aAAY,SAAAve,GACfA,EAAMW,WAAY,EAClBX,EAAMvB,UAAW,MAIjBD,QAAQqS,WACG,QAAb1W,EAAAD,OAAOE,cAAM,IAAAD,GAAAA,EAAEE,YACb,CACEC,KAAM,sBACNC,KAAM,CAAEua,UAAWrY,KAAKmJ,KAAMsW,OAAQzf,KAAKyJ,MAAMgW,QAAUjc,QAAQic,SAErE,MAIA1d,QAAQmC,YAEVzG,OAAOqS,iBAAiB,SAAU9P,KAAKyiB,gBACnC1gB,QAAQ4N,WACVlS,OAAOqS,iBAAiB,UAAW9P,KAAKkiB,kBAGtCngB,QAAQ4N,WAAa5N,QAAQyW,eAC/BzW,QAAQ+b,UAAS,WACf1R,EAAKuL,WAAY,EACjBvL,EAAK4a,YAITpa,YAAW,WACTnP,OAAOwpB,cACL,IAAIC,YAAY,yBAA0B,CACxCC,OAAQ,CACNjQ,IAAK9K,WA+BjBnN,OAAAoO,eAAImU,EAAYhW,UAAA,eAAA,CAAhB8B,IAAA,WACE,OACGvL,QAAQC,UAAaD,QAAQmC,WAAanC,QAAQyW,eAAiBxY,KAAK2X,aACxEnU,QAAQyV,kBAAoBjZ,KAAKmJ,MAAoC,mBAA5B3F,QAAQyV,kDAKtDuI,EAAAhW,UAAAmX,kBADA,WAEE,IAAI5gB,QAAQC,UAGNhC,MAAQA,KAAKuD,MAAnB,CAGA,IAAM6jB,EAAYpnB,KAAKuD,MAAMA,MAEzBvD,KAAKyJ,MAAMgY,eACbzhB,KAAKyJ,MAAMgY,cAAc2F,GAGvBrlB,QAAQmC,WACVzG,OAAOwpB,cACL,IAAIC,YAAY,gCAAiC,CAC/CC,OAAQ,CACN5jB,MAAO6jB,EACPlQ,IAAKlX,SAKbA,KAAKyhB,cAAcvD,KAAKkJ,KAG1B5F,EAAmBhW,UAAA6b,oBAAnB,SAAoB9jB,GAClB,OAAOA,GAGTtE,OAAAoO,eAAImU,EAAQhW,UAAA,WAAA,CAAZ8B,IAAA,WACE,OAAOtN,KAAKyJ,MAAMuD,WAAajL,QAAQmC,UAAY8I,SAAY,qCAGjEwU,EAAAhW,UAAA8b,eAAA,SAAeC,EAAWzpB,GAExB,IAAM0pB,EAASD,EAAKC,QAAUD,EAAKE,OAASF,EAAKE,KAAKvkB,SAAS,KAAO,KAAOqkB,EAAKE,KAAO,IACnFte,EAAOqe,EAAO3f,MAAM,KAAK,GACzBuc,EAAMmD,EAAKG,QAAUH,EAAKG,QAAUH,EAAKI,OAASJ,EAAKI,MAAMC,QAC/DlkB,EAAM,GAYV,GAXI0gB,GAAOoD,GAAUre,IACnBzF,GAAO,mCAEKU,OAAAojB,EACF,sBAAApjB,OAAA+E,EAAgB,cAAA/E,OAAAggB,EAIvB,oFAACtgB,QAGFyjB,EAAKI,MACP,IAAK,IAAME,KAAUN,EAAKI,MAAO,CAE/B,GADiBpf,OAAO7G,OAAOmmB,MAAaA,EAC5C,CAIA,IAAMC,EAAYP,EAAKI,MAAME,GACzBC,GAAaA,IAAc1D,IAC7B1gB,GAAO,mCAECU,OAAAojB,EACJ,qBAAApjB,OAAA0jB,EAEG,mEAAA1jB,OAAAyjB,EAEN,oBAAC/jB,SAIR,OAAOJ,GAGT8d,EAAAhW,UAAAkE,qBAAA,WACE1P,KAAKkZ,cACDnX,QAAQmC,YACVzG,OAAOmS,oBAAoB,SAAU5P,KAAKyiB,gBAC1ChlB,OAAOmS,oBAAoB,UAAW5P,KAAKkiB,mBAI/CV,EAAUhW,UAAAuc,WAAV,SAAWjqB,GAAX,IAWCsO,EAAApM,KAVC,OAAKA,KAAKwD,QAAQwkB,mBAKflqB,MAAAA,OAAI,EAAJA,EAAMmqB,cACLnqB,EAAKmqB,YAAYlpB,QACjBjB,EAAKmqB,YAAY9iB,KAAI,SAACoiB,GAAc,OAAAnb,EAAKkb,eAAeC,EAAMzpB,MAAOiI,KAAK,MANrE,IAWXyb,EAAiBhW,UAAA0c,kBAAjB,SAAkBpqB,GAChB,GAAIkC,KAAKwD,QAAQwkB,mBAAoBlqB,MAAAA,OAAA,EAAAA,EAAMmqB,cAAejnB,MAAMC,QAAQnD,EAAKmqB,aAC3E,IAAmB,IAAAppB,EAAA,EAAAnB,EAAAI,EAAKmqB,YAALppB,EAAAnB,EAAAqB,OAAAF,IAAkB,CAAhC,IAAM0oB,EAAI7pB,EAAAmB,GACPulB,EAAMmD,EAAKG,QAAUH,EAAKG,QAAUH,EAAKI,OAASJ,EAAKI,MAAMC,QACnE,IAAK9G,YAAY7W,IAAIma,GAAM,CACzB,IAAM1T,EAAO1Q,KAAKsnB,eAAeC,EAAMzpB,GAEvC,GADAgjB,YAAY5W,IAAIka,IACX1T,EACH,SAEF,IAAMQ,EAAQmE,SAASzL,cAAc,SACrCsH,EAAMwB,UAAY,sBAClBxB,EAAMgS,aAAa,2BAA4BkB,GAC/ClT,EAAM6U,UAAYrV,EAClB2E,SAAS8N,KAAKC,YAAYlS,MAMlCsQ,EAAMhW,UAAA2c,OAAN,SAAOrqB,SACCkY,EAA2B,QAAftY,EAAAsC,KAAKmiB,kBAAU,IAAAzkB,OAAA,EAAAA,EAAEoL,GAC/Bsf,GAAUtqB,MAAAA,OAAA,EAAAA,EAAMsqB,UAAW,GAQ/B,OAPIpS,IAIFoS,EAAUA,EAAQ1f,QAAQ,KAAM,sBAAsBtE,OAAA4R,KAGjDoS,EAAUpoB,KAAK+nB,WAAWjqB,IAGnCmB,OAAAoO,eAAImU,EAAIhW,UAAA,OAAA,CAAR8B,IAAA,iBACQxP,EAAIkK,SAAAA,SAAAA,SAAA,GACJhI,KAAK6kB,iBAA0C,QAAxBnnB,EAAAsC,KAAK6kB,eAAe/mB,YAAI,IAAAJ,OAAA,EAAAA,EAAE6F,QAClDvD,KAAKyjB,eACLzjB,KAAKuD,MAAMA,OAGhB,OADAtE,OAAOC,OAAOc,KAAKmH,UAAWrJ,GACvBA,mCAGT0jB,EAAkBhW,UAAA6c,mBAAlB,SAAmBC,GAAnB,IAiBClc,EAAApM,KAfKA,KAAKyJ,MAAM3L,MAAQwqB,EAAUxqB,OAASkC,KAAKyJ,MAAM3L,MACnDkC,KAAKuD,MAAM+D,QAAO,SAAC/D,GACjBtE,OAAOC,OAAOqE,EAAO6I,EAAKqX,kBAI1BzjB,KAAKyJ,MAAMkd,kBAAoB3mB,KAAKyJ,MAAMkd,mBAAqB2B,EAAU3B,kBAC3E3mB,KAAKklB,2BAGHnjB,QAAQ4N,WACN3P,KAAK6kB,gBAAkByD,EAAUlhB,UAAYpH,KAAK6kB,gBACpD7kB,KAAK4iB,gBAAgB5iB,KAAK6kB,eAAe/mB,KAAMkC,KAAK6kB,iBAO1DrD,EAAWhW,UAAA+c,YAAX,SAAYzqB,GACV,GAAIkC,KAAK6hB,SAAU,CACjB,IAAM2G,EAAMxoB,KAAKmoB,OAAOrqB,GACpBkC,KAAK6hB,SAASkE,YAAcyC,IAC9BxoB,KAAK6hB,SAASkE,UAAYyC,KAKhChH,EAAAhW,UAAAwb,OAAA,WACEhnB,KAAKmN,SAAS,CACZ/N,IAAKY,KAAKuD,MAAMnE,IAAM,KAI1BH,OAAAoO,eAAImU,EAAOhW,UAAA,UAAA,CAAX8B,IAAA,WACE,IAAIlG,EAAUpH,KAAK6kB,eAQnB,OAPIzd,GAAYA,EAAgBA,UAE9BA,EAAOY,SAAAA,SAAA,GACFZ,GACH,CAAAtJ,KAAOsJ,EAAgBA,WAGpBA,mCAGTnI,OAAAoO,eAAImU,EAAahW,UAAA,gBAAA,CAAjB8B,IAAA,WACE,OAAAtF,SAAAA,SAAA,GACKhI,KAAKyJ,MAAM3L,MACVkC,KAAKyJ,MAAMkB,OAAS,CAAEA,OAAQ3K,KAAKyJ,MAAMkB,QAAW,qCAI5D1L,OAAAoO,eAAImU,EAAUhW,UAAA,aAAA,CAAd8B,IAAA,WACE,OAAOtN,KAAKoH,SAAWpH,KAAKuD,MAAM8D,QAAQqH,gDAG5C8S,EAAAhW,UAAAmI,OAAA,WAAA,MAqOCvH,EAAApM,KApOOoH,EAAUpH,KAAKoH,QAEfqhB,EACJ1mB,QAAQmC,WACRlE,KAAKyjB,eACL1jB,OAAKC,KAAKyjB,gBACViF,KAAK1oB,KAAKyjB,eACRrkB,EAAM2C,QAAQ4N,UAAY3P,KAAKmJ,KAAOnJ,KAAKyJ,MAAM6P,MACjDla,IAAQ2C,QAAQ4N,WAAa8Y,GAAcA,EAAW1pB,OAAS,MACjEK,GAAO,IAAMqpB,GAGf,IAAME,EAAgB3oB,KAAKyJ,MAAMmQ,SAAW7S,eAAMsL,SAAW,MAEvD2D,EAA2B,QAAftY,EAAAsC,KAAKmiB,kBAAU,IAAAzkB,OAAA,EAAAA,EAAEoL,GAEnC,OAEE/B,eAAA6C,cAAC+e,EAAa,CACZ3T,QAAS,SAAAtI,IAKL3K,QAAQ4N,WACPvD,EAAK3C,MAAMmf,SACXxc,EAAK3C,MAAMof,iCAEZnc,EAAMoc,mBAGVpW,UAAW,qBAAAtO,OAAqB4R,EAAY,qBAAqB5R,OAAA4R,GAAc,gBACpEhW,KAAKmJ,KACJ4f,cAAA,yBACZ3pB,IAAKY,KAAKuD,MAAMnE,IAChB8X,IAAK,SAAAA,GAAO,OAAC9K,EAAK8K,IAAMA,IAExBnQ,eAAC6C,cAAAiV,mBAAmBnV,SAAQ,MACzB,SAAA3L,GAAS,OACRgJ,eAAC6C,cAAAiV,mBAAmBnL,SAAQ,CAC1B3V,MACgC,kBAAvBqO,EAAK3C,MAAMqV,QAET9W,SAAAA,SAAA,GAAAjK,GACH,CAAA+gB,QAAS1S,EAAK3C,MAAMqV,UAEtB/gB,GAGNgJ,eAAA6C,cAAC9C,4BAA4B4C,SAAQ,MAClC,SAAA3L,SAKC,OAJAqO,EAAKuG,eAAiB5U,GAASA,EAAMkJ,SACrCmF,EAAKsB,QAAU3P,GAASA,EAAM6F,OAC9BwI,EAAKuB,MAAQ5P,GAASA,EAAM8F,KAG1BkD,eAAC6C,cAAAqN,eACC,CAAAqB,SAAUlM,EAAK3C,MAAM6O,UAAYvW,QAAQuW,SACzClZ,KACqB,UAAnBgN,EAAKyY,sBAAc,IAAAnnB,OAAA,EAAAA,EAAEoL,MACpB,YAAasD,EAAK3C,QAAU2C,EAAKoM,aAC9B,oBACA,mBAENhV,QAAS4I,EAAK5I,QACd0T,IAAK,SAAAA,GAAO,OAAC9K,EAAKwV,WAAa1K,GAE/BM,cAAe,SAAC1Z,EAAMsJ,GAAY,OAAAgF,EAAKwW,gBAAgB9kB,EAAMsJ,IAC7DgC,+DACEhK,IAAGA,EACHka,MAAOlN,EAAK3C,MAAM6P,OACdlS,GAAW,CAAE8O,eAAgB,CAAC9O,MAC7BA,GACH,YAAagF,EAAK3C,QACjB2C,EAAKoM,cAAgB,CAAEtC,eAAgB,KACtC9J,EAAK3C,MAAM2a,KAAO,CAAEA,IAAKhY,EAAK3C,MAAM2a,MACrChY,EAAK3C,MAAML,SACVgD,EAAK3C,MAAMkB,OAAS,CAAEA,OAAQyB,EAAK3C,MAAMkB,QAAW,IACpDyB,EAAKhD,QAAQua,SAAW,CAC1BqF,OAAQ,UAGZvQ,OACErM,EAAK3C,MAAM2b,gBAAmBhZ,EAAKoM,cAAgB,YAAapM,EAAK3C,MAEvEkQ,aAAcvN,EAAK3C,MAAMkQ,aACzBtB,UAAWjM,EAAKjD,MAAQ,OACxBgN,MAAO/J,EAAK3C,MAAM0M,QAEjB,SAACrY,EAAMqZ,EAAS8R,SACf,GAAI7c,EAAK3C,MAAMmQ,SACb,OAAO,KAELqP,GAAYA,EAASngB,KACnBsD,EAAK7I,MAAMlD,cACb4oB,EAAStd,KAAOsd,EAAStd,MAAQ,GACjCsd,EAAStd,KAAKtL,YAAc+L,EAAK7I,MAAMlD,aAEzC+L,EAAK7I,MAAM8D,QAAQqH,eAAiBua,GAElClnB,QAAQmC,WACVnC,QAAQ+b,UAAS,WACf1R,EAAKmc,YAAYzqB,MAIb,IAAA6lB,EAAYvX,EAAKhD,gBAEzB,GAAIua,IAAYvX,EAAK6H,YAAanW,MAAAA,OAAA,EAAAA,EAAMorB,UAAU,CAChD,IAAMC,EAAkCnoB,MAAMooB,KAC5C,IAAIvd,IAAI9J,QAAQkP,WAAW9L,KAAI,SAACoE,GAAc,OAAAA,EAAKJ,UAE/CkgB,EAAqBtnB,QAAQkP,WAAW7P,QAAQmN,UAEhD+a,EAAoBH,EAAsBhkB,KAAI,SAAAgE,GAClD,OAAAkgB,EAAmBla,MAAK,SAAC5F,GAAc,OAAAA,EAAKR,OAASQ,EAAKJ,OAASA,QAc/DogB,EAAuBJ,EAAsBhkB,KAAI,SAAAgE,GACrD,OAACA,GAAQ,IAAIT,QAAQ,WAAY,OAG7B8gB,EAAsBF,EAAkBnkB,KAAI,SAAAmb,GAChD,OAAAD,cAAcC,MAGhBlU,EAAK6H,WAAS,IAAO9P,SAAAyZ,KAAAhZ,MAAAT,6CACnB,MACA,OACA,UACA,UACA,QACA,mBACGolB,GAAoB,GAAA,CACvBzrB,EAAKorB,6CAELvY,IACA4B,IACAxQ,QACAyB,QACAuD,eAjCsB,SAAC0iB,GACjB,IAAGC,EAAW3iB,eAAMuK,SAAS,GAAnB,GAOhB,OANgBvK,eAAMuK,UAAS,WAC7B,OAAAwJ,SAAS2O,GAAc,WACrBC,GAAQ,SAAAC,GAAQ,OAAAA,EAAO,gBA+BxBH,GAAmB,IAI1B,IAAM9U,GAAS5W,MAAAA,OAAA,EAAAA,EAAM4W,SAAU,GAEzBkV,EAAWlV,EAAOvF,MAAK,SAACvG,GAAqB,IAAAlL,EACjD,eAAAA,EAAAkL,EAAME,yBAAI/F,WAAW,oBASvB,OANIjF,IAAS8rB,GAAYlV,EAAO3V,OAAS,GACvC2V,EAAOpQ,KAAKkb,gBAAgBhc,QAAQic,SAK/B3hB,EACLiJ,sEAC0BqF,EAAKjD,KAAI0gB,0BACRZ,EAASngB,IAC7BsD,EAAKoM,aACN,CACEsR,4BACEb,EAAS3O,iBAAmB2O,EAAS1Q,aAAe0Q,EAASngB,IAEjE,KAEF6a,GAAWvX,EAAK+b,OAAOrqB,IACvBiJ,eAAA6C,cAAA,QAAA,CACEuM,MAAO/J,EAAK3C,MAAM0M,MAClBe,IAAK,SAAAA,GAAO,OAAC9K,EAAKyV,SAAW3K,GAC7BxE,UAAU,wBACV9B,wBAAyB,CACvBC,OAAQzE,EAAK+b,OAAOrqB,MAI1BiJ,eAAA6C,cAAC1C,oBAAoBwM,SAAQ,CAC3B3V,MACKiK,SAAAA,SAAA,GAAAoE,EAAK7I,QACR4D,UAAWiF,EAAKjF,UAChB5D,MAAO6I,EAAKtO,KACZsJ,QAAS6hB,EACTtf,WAAYyC,EAAK3C,MAAME,cAGxBga,GAAWvX,EAAK6H,UACflN,eAAC6C,cAAAwC,EAAK6H,WAAUnW,KAAMsO,EAAKtO,KAAMuJ,QAAS+E,EAAK7I,MAAM8D,UAErDN,eAAC6C,cAAAsK,cACC,CAAA9U,IAAKmJ,kBAAS7K,EAAAI,MAAAA,OAAA,EAAAA,EAAM4W,6BAAQ3V,SAC5B8P,UAAWzC,EAAK3C,MAAMoF,UACtB0B,UAAU,SACVmE,OAAQA,MAKdyC,EACFpQ,6DAA6BqF,EAAKjD,KAAMuJ,UAAU,mBAC/CtG,EAAK3C,MAAMH,UAGdvC,eAA6B6C,cAAA,MAAA,CAAAmgB,yBAAA3d,EAAKjD,KAAMuJ,UAAU,mCAc1E8O,EAAchW,UAAA0Y,eAAd,SAAevgB,GAAf,IAKCyI,EAAApM,KAJSlC,EAASkC,KAAIlC,KACrB,OAAOyK,OAAO5E,GAAY+E,QAAQ,gBAAgB,SAACvH,EAAO6oB,GACxD,OAAAjL,QAAQiL,EAAOlsB,EAAMsO,EAAKsB,aAIxB8T,EAAAhW,UAAA6Y,cAAN,SACE4F,EACAlG,qHAWA,OAJQK,EAA+BL,EAAWK,IAArCE,EAA0BP,EAApBO,OAAEC,EAAkBR,EAAdQ,KAAEC,EAAYT,UAEjCmG,EAAgB1rB,KAAKE,UAAU,CAAE0lB,IAAGA,EAAEE,OAAMA,EAAEC,KAAIA,EAAEC,QAAOA,IAE7DziB,QAAQqS,UAAY6M,WAAWiJ,IACjClqB,KAAK8hB,aAAY,SAAAqI,GACfA,EAAIF,GAAgBhJ,WAAWiJ,MAEjC,CAAA,EAAOjJ,WAAWiJ,MAEd/F,EAAU,WAAA,OAAAiG,UAAAhe,OAAA,OAAA,GAAA,qFACRie,EAAe5M,KAAKgB,MACrB1c,QAAQmC,WACXf,QAAQmnB,KAAK,SAAWJ,oBAYT,8BARTK,EAAe,CACnBjG,OAAMA,EACNE,QAAOA,EACPD,KAAIA,GAES,QAAXD,UACKiG,EAAahG,KAEP,CAAA,EAAMxD,QAAMqD,EAAKmG,WACzB,MAAA,CAAA,EADQ7sB,EAA8B8sB,OACzBC,sBAApBA,EAAO/sB,sBASP,kBAPM2G,EAAQib,QAAQoL,GAClB1qB,KAAK0N,SACP1N,KAAK0N,QAAQpJ,KAAKD,GAEhBrE,KAAK2N,OACP3N,KAAK2N,MAAMrJ,KAAK,mBAAY4lB,EAAa,gBAAA9lB,OAAeqZ,KAAKgB,MAAQ4L,EAAY,OAE5E,CAAA,iBAEFtoB,QAAQmC,YACXf,QAAQwnB,QAAQ,SAAWT,GACvBlqB,KAAK2N,OACP3N,KAAK2N,MAAMrJ,KAAK,kBAAW4lB,EAAa,QAAA9lB,OAAOqZ,KAAKgB,MAAQ4L,EAAY,mBAe9E,OAVII,IACE1oB,QAAQqS,WACV6M,WAAWiJ,GAAiBO,GAG9BzqB,KAAK8hB,aAAY,SAAAqI,GACfA,EAAIF,GAAgBQ,MAIxB,CAAA,EAAOA,YAEHG,EACJ5qB,KAAK2S,gBACJ3S,KAAK2S,eAAexD,MACnB,SAAA0b,GAAO,OAAAhkB,cAAcgkB,IAAQA,EAAIzG,MAAQA,QAGrC0G,EAAUF,EAASG,SACjBnkB,MAAK,SAAA6jB,GACPA,GACFre,EAAK0V,aAAY,SAAAqI,GACfA,EAAIF,GAAgBQ,QAI1B,CAAA,EAAOK,KAEHC,EAAU5G,IAChBpiB,QAAQ+b,UAAS,WACX1R,EAAKuG,gBACPvG,EAAKuG,eAAerO,KAAKymB,MAG7B,CAAA,EAAOA,YAGTvJ,EAAAhW,UAAA0N,YAAA,WACMlZ,KAAKyX,gBACPzX,KAAKyX,cAAcyB,cACnBlZ,KAAKyX,cAAgB,IAAIC,eAI7B8J,EAAAhW,UAAAwf,qBAAA,SAAqBf,EAAsBgB,GAA3C,IAoBC7e,EAAApM,KAnBOoJ,EAAU2V,QAAQkM,EAAejrB,KAAKlC,KAAMkC,KAAK0N,SAEnD1N,KAAKyX,eACPzX,KAAKkZ,cAIH9P,GAEFpJ,KAAKyX,cAAcvN,IACjBlK,KAAKwD,QAAQqV,gBAAgBzP,EAAQgP,MAAOhP,GAAS0P,WAAU,SAAAC,GACzDA,GACF3M,EAAK0V,aAAY,SAAAqI,GACfA,EAAIF,GAAgBlR,UA/+BzByI,EAAA2D,SAAmD,CACxDxB,QAASvhB,QAAQL,QAAQmC,WAAa8I,SAASC,KAAK/J,SAAS,0BA0c/DgoB,WAAA,CAACnN,+HAyBAyD,EAAAhW,UAAA,oBAAA,MAsuBFgW,EA9sCD,CAAsCza,eAAMkN,WChWtC,SAAU/H,aAAa9C,GAG3B,OAFAA,EAAQvL,KAAO,QAERkE,QAAQkS,UAAU7K,GCUX,SAAA+hB,eACdjiB,EACAjF,GAEA,IAAM9C,EACJY,QAAQkP,WAAW9B,MAAK,SAAA5F,GACtB,MAAyB,iBAAdL,EACFK,EAAKJ,OAASD,EAEdK,EAAKR,QAAUQ,MAEpB,KAEF6hB,EAAUnnB,EAAG9C,GACfA,GAASiqB,EAEXrpB,QAAQglB,kBAAkBqE,EAAQriB,OAAS5H,EAAM4H,MAAOqiB,GAC/CjqB,IAAUiqB,IAETjqB,GAASiqB,GACnBrpB,QAAQglB,kBAAkBqE,EAAQriB,MAAOqiB,GClC7B,SAAAC,YAAYniB,EAAqBE,GAE/C,OADA8C,aAAa9C,EAAb8C,CAAsBhD,GACfA,ECAT,IAAMoiB,iBAAmB,SAAC/hB,GACxB,OAAOnH,QACW,iBAATmH,GAAqBA,GAAqC,6BAA5BA,MAAAA,SAAAA,EAAe,YA0B3CgiB,aAAe,SAAmBtX,GAC7C,IAAMuX,EAAMzkB,eAAM0kB,YAChB,SAAChiB,EAAOyN,WACAwU,EAAQ1jB,SAAA,GAAQyB,GAChBH,EACJG,EAAMH,UACLG,EAAMoJ,cACLpJ,EAAMoJ,aAAavJ,UACnBG,EAAMoJ,aAAavJ,SAASnE,KAAI,SAAAmL,GAAS,OAAAvJ,eAAA6C,cAACsC,eAAY,CAAC9M,IAAKkR,EAAMxH,GAAIF,MAAO0H,OAE3Eqb,EAAkD,QAA/Bld,EAAoB,QAApB/Q,EAAA+L,EAAMoJ,oBAAc,IAAAnV,OAAA,EAAAA,EAAAwL,iBAAW,IAAAuF,OAAA,EAAAA,EAAArF,QAYxD,OAXMuiB,GACJ1sB,OAAO+J,KAAK2iB,GAAkBxhB,SAAQ,SAAA/K,GACpC,IAAMrB,EAAQ4tB,EAAiBvsB,GAC3B4B,MAAMC,QAAQlD,IAAUA,EAAM6tB,MAAMN,kBACtCI,EAAStsB,GAAOrB,EAAMoH,KAAI,SAAAmL,GAAS,OAAAvJ,eAAC6C,cAAAsC,eAAa,CAAA9M,IAAKkR,EAAMxH,GAAIF,MAAO0H,OAC9Dgb,iBAAiBvtB,KAC1B2tB,EAAStsB,GAAO2H,eAAA6C,cAACsC,eAAY,CAACtD,MAAO7K,QAQzCgJ,eAAC6C,cAAAqK,EAAcjM,SAAA,GAAA0jB,EAAU,CAAAxU,IAAKA,IAC3B5N,MAUT,OAJCkiB,EAAYK,eAAiB,CAC5BC,iBAAiB,GAGZN,GCrCI7Z,OAAS,SAAmBsC,GACvC,IAAMuX,EAAMzkB,eAAM0kB,YAAW,SAAChiB,EAA0DyN,GACtF,IAAM6U,uBACDtiB,GACAA,EAAMmJ,YAIX,OAAO7L,eAAA6C,cAACqK,EAAcjM,SAAA,GAAA+jB,GAAY7U,IAAKA,QAMzC,OAJCsU,EAAYK,eAAiB,CAC5Bla,QAAQ,GAGH6Z,GCtCHQ,QACJ,4KAOFC,cAAA,SAAA9f,GAAA,SAAA8f,IAAA,IAoFC7f,EAAA,OAAAD,GAAAA,EAAAvH,MAAA5E,KAAAlB,YAAAkB,YAnFCoM,EAAO8f,QAA2B,OAmFpC,OApF4B9e,UAA0B6e,EAAA9f,GAGpD8f,EAAAzgB,UAAAqE,kBAAA,WAEM7P,KAAKksB,UAAY,cAAcC,KAAKnsB,KAAKyJ,MAAMJ,QACjDrJ,KAAKksB,QAAQnG,UAAY/lB,KAAKyJ,MAAMJ,OAIxC4iB,EAAAzgB,UAAA0Y,eAAA,SAAevgB,EAAoBJ,GAEjC,OAAIvD,KAAKosB,cACA7jB,OAAO5E,GAET4E,OAAO5E,GAAY+E,QAAQ,gBAAgB,SAACvH,EAAO6oB,GAAU,OAAAjL,QAAQiL,EAAOzmB,OAGrFtE,OAAAoO,eAAI4e,EAAazgB,UAAA,gBAAA,CAAjB8B,IAAA,WACE,OACEvL,QAAQmC,WACRnC,QAAQ4N,WACR3C,SAASoU,OAAOle,SAAS,iCAEvBlD,KAAKyJ,MAAMoJ,cACX7S,KAAKyJ,MAAMoJ,aAAa9C,WACvB/P,KAAKyJ,MAAMoJ,aAAa9C,SAAS,2BAChC/P,KAAKyJ,MAAMoJ,aAAa9C,SAAS,iBACjC/P,KAAKyJ,MAAMoJ,aAAa9C,SAAe,wCAK/Ckc,EAAAzgB,UAAAmI,OAAA,WAAA,IAkDCvH,EAAApM,KAjDOqsB,EAAuC,CAC3CC,QAAS,OACTC,wDAAyD,CACvDC,OAAQ,GAEVC,8BAA+B,CAC7B3Y,MAAO,UACP4Y,WAAY,UACZC,cAAe,UACfC,WAAY,UACZ7Y,SAAU,UACV8Y,UAAW,UACXC,WAAY,YAIhB,OACEnc,IAACzJ,oBAAoBwC,SAAQ,MAC1B,SAAAnG,SAKC,OAJsB,QAAlB7F,EAAA6F,EAAM6D,QAAQuE,YAAI,IAAAjO,OAAA,EAAAA,EAAEqvB,WACtBV,EAAQW,UAAY,OAIpBrc,IAAC5J,eAAMsL,SAAQ,KAEb1B,IACE,OAAA3I,SAAA,CAAAkP,IAAK,SAAAA,GACH9K,EAAK8f,QAAUhV,GAEjB3E,IAAK8Z,EACL3Z,UAEE,gBAEE,CACF9B,wBAAyB,CACvBC,OAAQzE,EAAK8X,eACX9X,EAAK3C,MAAMJ,MAAS+C,EAAK3C,MAAcrC,SAAW,GAClD7D,EAAMA,gBAW3B0oB,EApFD,CAA4BllB,eAAMkN,WAsFrBgZ,KAAO5B,YAAYY,cAAe,CAC7C9iB,KAAM,OACN+jB,QAAQ,EACRC,MAAOnB,QACPvL,OAAQ,CACN,CACEtX,KAAM,OACNtL,KAAM,OACNuvB,UAAU,EACVC,WAAW,EACXC,QAAQ,EACRhK,aAAc,uBAIlBiK,cAAe,CACbb,WAAY,SACZ5M,OAAQ,OACR+M,UAAW,YClGT,SAAUW,KAAK/jB,GACX,IAAAN,EAASM,EAAKN,KAChB9B,EAAUomB,WAAWvmB,qBAErBwmB,GAAqBrmB,EAAQA,QAAQsmB,SAE3C,OACEhd,IACE,MAAA3I,SAAA,CAAAuK,IAAK,CACH0N,cAAe,SAEZyN,GAAqB,CACxBE,eAAgBzkB,IAGlBwH,IAACuD,cAAa,CACZ5D,OAAK,EACLgE,gBAAiBjN,EAAQA,QAAQsmB,SACjCnZ,SAAU,eAAApQ,OAAe+E,GACzBuL,OAAQrN,EAAQ9D,MAAM4F,IAAS,MAlCvCpH,QAAQglB,kBAAkByG,KAAM,CAC9BrkB,KAAM,OACN4Z,YAAa,4EACb8K,SAAU,oDACVV,MACE,uGAGF1M,OAAQ,CAAC,CAAEtX,KAAM,OAAQtL,KAAM,SAAUuvB,UAAU,EAAM9J,aAAc,eCLzE,IAAAwK,kBAAA,SAAA3hB,GAAA,SAAA2hB,mDAUA,OAVgC1gB,UAA8B0gB,EAAA3hB,GAC5D2hB,EAAAtiB,UAAAmI,OAAA,WACE,OACE3T,KAAKyJ,MAAMoJ,cACX7S,KAAKyJ,MAAMoJ,aAAavJ,UACxBtJ,KAAKyJ,MAAMoJ,aAAavJ,SAASnE,KAAI,SAACyD,EAAOvD,GAAU,OACrD0B,6BAACgnB,eAAqB,CAACnlB,MAAOA,EAAOxJ,IAAKwJ,EAAME,GAAIzD,MAAOA,QAIlEyoB,EAVD,CAAgC/mB,eAAMkN,WAYzB5B,SAAWgZ,YAAYyC,kBAAmB,CACrD3kB,KAAM,gBACN2iB,iBAAiB,EACjBna,QAAQ,EACRub,QAAQ,EACRc,oBAAoB,ICjBhBC,uBAAuB,kBAEvBC,cAAkC,CACtC,CACExO,QAAS,0BACT7R,iBAAkB,CAChBhO,MAAO,CACL+T,QAAS,OACTkB,cAAe,SACfC,WAAY,UACZoZ,WAAY,IACZC,SAAU,WACVC,UAAW,OACXxB,UAAW,SACXH,WAAY,SACZ5M,OAAQ,OACRwO,UAAW,OACXC,SAAU,OACVvO,SAAU,WAGd9W,UAAW,CACTC,KAAM,QACNC,QAAS,CACP+jB,MACE,2GACFqB,mBAAoB,SACpBC,eAAgB,QAChBC,YAAaT,0BAInB,CACEvO,QAAS,0BACT7R,iBAAkB,CAChBhO,MAAO,CACL+T,QAAS,OACTkB,cAAe,SACfC,WAAY,UACZoZ,WAAY,IACZC,SAAU,WACVC,UAAW,OACXxB,UAAW,SACXH,WAAY,SACZ5M,OAAQ,SAGZ5W,UAAW,CACTC,KAAM,OACNC,QAAS,CACPC,KAAM,gCAMdslB,iBAAA,SAAAxiB,GAAA,SAAAwiB,mDAmGA,OAnG+BvhB,UAAoBuhB,EAAAxiB,GAEjDlN,OAAAoO,eAAIshB,EAAOnjB,UAAA,UAAA,CAAX8B,IAAA,WACE,OAAOtN,KAAKyJ,MAAMmlB,SAAW,oCAG/B3vB,OAAAoO,eAAIshB,EAAUnjB,UAAA,aAAA,CAAd8B,IAAA,WACE,MAAmC,iBAArBtN,KAAKyJ,MAAMolB,MAAqB7uB,KAAKyJ,MAAMolB,OAAS,EAAI,oCAGxEF,EAAQnjB,UAAAsjB,SAAR,SAASzpB,GACP,OAAQrF,KAAK4uB,QAAQvpB,IAAUrF,KAAK4uB,QAAQvpB,GAAOnF,OAAU,IAAMF,KAAK4uB,QAAQ7vB,QAGlF4vB,EAAcnjB,UAAAujB,eAAd,SAAe1pB,GACP,IAAEupB,EAAwB5uB,aAAfgvB,EAAehvB,gBAC1BE,EAAQF,KAAK8uB,SAASzpB,GAEtB4pB,EAAgBD,GAAcJ,EAAQ7vB,OAAS,IAAMmB,EAAQ,KAEnE,MAAO,QAAQkE,OAAAlE,EAAY,QAAAkE,OAAA6qB,UAG7BN,EAAAnjB,UAAAmI,OAAA,uBA2ECvH,EAAApM,KA1ES4uB,EAAwB5uB,aAAfgvB,EAAehvB,gBAC1BkvB,GACmD,QAAvDlgB,EAA+C,UAAtB,QAAzBP,EAAAzO,KAAKyJ,MAAMqJ,oBAAc,IAAArE,OAAA,EAAAA,EAAApH,QAAQqH,sBAAc,IAAAC,OAAA,EAAAA,EAAEhD,YAAM,IAAAqD,OAAA,EAAAA,EAAA3O,cAAe,GAClE8uB,EAAkB/uB,uBAAuB8uB,GAE/C,OAEEve,IAAC5J,eAAMsL,SAAQ,KACb1B,IACE,MAAA,CAAA+B,UAAU,kBACVH,IACEvK,SAAA,CAAA4L,QAAS,OACTkM,OAAQ,QAC0B,UAA9B9f,KAAKyJ,MAAM2lB,iBAA0B1xB,EAAA,GACvCA,EAAC,6BAC+B,WAA9BsC,KAAKyJ,MAAM2lB,eACPD,EAAgBxvB,MAAMD,IACtByvB,EAAgBvvB,OAAOF,YACrB,CACNoV,cAAe9U,KAAKyJ,MAAM4lB,0BAA4B,iBAAmB,SACzEta,WAAY,gBAKjB6Z,EAAQzpB,KAAI,SAACmqB,EAAKjqB,WACXoL,EAAU6e,EAAIC,KAAO/lB,KAAO,MAIlC,OACEmH,IAAC5J,eAAMsL,SAAS,CAAAjT,IAAKiG,GACnBsL,IAACF,EACCzI,SAAA,CAAA0K,UAAU,kBACL4c,EAAIC,KAAO,CAAEtiB,KAAMqiB,EAAIC,MAAS,KAAK,CAG1Chd,iBACEqB,QAAS,OACTkB,cAAe,SACfC,WAAY,UACZ2X,WAAY,UAAQhvB,EACnB,uBAAwB,CACvB8xB,SAAU,GAEZ9xB,EAAKwC,MAAEkM,EAAK2iB,eAAe1pB,GAC3B3H,EAAA+xB,WAAsB,IAAVpqB,EAAc,EAAI2pB,EAAUtxB,GACN,UAA9B0O,EAAK3C,MAAM2lB,iBAA0B3gB,EAAA,GACvCA,EAAC,6BAC+B,WAA9BrC,EAAK3C,MAAM2lB,eACPD,EAAgBxvB,MAAMD,IACtByvB,EAAgBvvB,OAAOF,YACrB,CACNQ,MAAO,OACPuvB,WAAY,SAKlB9e,IAACuD,cAAa,CACZ9U,IAAKiG,EAELiL,OACA,EAAAgE,gBAAiBlI,EAAK3C,MAAMoJ,cAAgBzG,EAAK3C,MAAMoJ,aAAa/J,GACpE4L,OAAQ4a,EAAI5a,OACZF,SAAU,6BAA6BpQ,OAAAiB,EAAc,qBAUxEspB,EAnGD,CAA+B5nB,eAAMkN,WAqGxByb,QAAUrE,YAAYsD,iBAAkB,CACnDxlB,KAAM,UACN+jB,QAAQ,EACRzM,OAAQ,CACN,CACEtX,KAAM,UACNtL,KAAM,QACN8xB,WAAW,EACXC,UAAW,CACT,CACEzmB,KAAM,SACNtL,KAAM,QACNgyB,YAAY,EACZvM,aAAc4K,eAEhB,CACE/kB,KAAM,QACNtL,KAAM,SACNgyB,YAAY,EACZC,WAAY,qDAEd,CACE3mB,KAAM,OACNtL,KAAM,MACNiyB,WAAY,gEAGhBxM,aAAc,CAAC,CAAE5O,OAAQwZ,eAAiB,CAAExZ,OAAQwZ,gBACpDpT,SAAU,SAAC1R,GACT,SAAS2mB,IACPnB,EAAQzkB,SAAQ,SAAAmlB,GACdA,EAAIpT,OAAO,YAIf,IAAM0S,EAAUxlB,EAAQkE,IAAI,WAExBtM,MAAMC,QAAQ2tB,MACkBA,EAAQzf,MAAK,SAAAmgB,GAAO,OAAAA,EAAIhiB,IAAI,cAGvBshB,EAAQzf,MAAK,SAAAmgB,GAAO,OAACA,EAAIhiB,IAAI,aAO1B,MAHpBshB,EAAQvtB,QAAO,SAAC+Q,EAAMkd,GACtC,OAAOld,EAAOkd,EAAIhiB,IAAI,WACrB,KAJHyiB,OAcV,CACE5mB,KAAM,QACNtL,KAAM,SACNylB,aAAc,GACdwM,WAAY,8BACZE,UAAU,GAEZ,CACE7mB,KAAM,iBACNtL,KAAM,SACNylB,aAAc,SACdwM,WAAY,6DACZG,KAAM,CAAC,SAAU,SAAU,SAC3BD,UAAU,GAEZ,CACE7mB,KAAM,4BACNtL,KAAM,UACNylB,cAAc,EACdwM,WAAY,iEACZE,UAAU,MC/OhBE,eAAA,SAAA/jB,GAAA,SAAA+jB,IAAA,IAoEC9jB,EAAA,OAAAD,GAAAA,EAAAvH,MAAA5E,KAAAlB,YAAAkB,YAnECoM,EAAU+jB,WAAuB,KAEjC/jB,EAAAgkB,gBAAkB,IAAIvkB,IACtBO,EAAAikB,WAAa,IAAIxkB,MAgEnB,OApE6BuB,UAAoB8iB,EAAA/jB,GAM/C+jB,EAAqB1kB,UAAA8kB,sBAArB,SAAsBC,GACpB,OAAOA,EAAUnpB,UAAYpH,KAAKyJ,MAAMrC,SAG1C8oB,EAAkB1kB,UAAA6c,mBAAlB,SAAmBC,GACbtoB,KAAKyJ,MAAMrC,UAAYkhB,EAAUlhB,SACnCpH,KAAKwwB,qBAITN,EAAA1kB,UAAAqE,kBAAA,WACE7P,KAAKwwB,qBAGPN,EAAA1kB,UAAAglB,kBAAA,WACE,GAAIxwB,KAAKmwB,YAAgC,oBAAX1yB,OAE5B,IADA,IAAMgzB,EAAUzwB,KAAKmwB,WAAWO,qBAAqB,UAC5ClvB,EAAI,EAAGA,EAAIivB,EAAQ1xB,OAAQyC,IAAK,CACvC,IAAM6jB,EAASoL,EAAQjvB,GACvB,GAAI6jB,EAAOxF,IAAK,CACd,GAAI7f,KAAKowB,gBAAgBnmB,IAAIob,EAAOxF,KAClC,SAEF7f,KAAKowB,gBAAgBlmB,IAAImb,EAAOxF,KAChC,IAAM8Q,EAAYtb,SAASzL,cAAc,UACzC+mB,EAAUC,OAAQ,EAClBD,EAAU9Q,IAAMwF,EAAOxF,IACvBxK,SAAS8N,KAAKC,YAAYuN,OACrB,CACL,GAAI3wB,KAAKqwB,WAAWpmB,IAAIob,EAAOC,WAC7B,SAEFtlB,KAAKqwB,WAAWnmB,IAAImb,EAAOC,WAC3B,IACE,IAAInhB,SAASkhB,EAAOC,UAApB,GACA,MAAOjhB,GACPlB,QAAQsB,KAAK,uCAAwCJ,OAO/DpF,OAAAoO,eAAI6iB,EAAO1kB,UAAA,UAAA,CAAX8B,IAAA,WAIE,OAAIvL,QAAQC,UACFhC,KAAKyJ,MAAMrC,SAAW,IAAIsB,QAAQ,6BAA8B,IAEnE1I,KAAKyJ,MAAMrC,yCAGpB8oB,EAAA1kB,UAAAmI,OAAA,WAAA,IAQCvH,EAAApM,KAPC,OACE+G,eAAA6C,cAAA,MAAA,CACEsN,IAAK,SAAAA,GAAO,OAAC9K,EAAK+jB,WAAajZ,GAC/BxE,UAAU,gBACV9B,wBAAyB,CAAEC,OAAQ7Q,KAAKoH,YAI/C8oB,EApED,CAA6BnpB,eAAMkN,WAsEtB4c,MAAQxF,YAAY6E,eAAgB,CAC/C/mB,KAAM,QACN+jB,QAAQ,EACRzM,OAAQ,CACN,CACEtX,KAAM,MACNtL,KAAM,MACNuvB,UAAU,EACV9J,aAAc,GACdwM,WAAY,6CAEd,CACE3mB,KAAM,UACNtL,KAAM,OACNylB,aAAc,4EACduM,YAAY,MC7EZiB,mBAAsB,IAAoC,KAE1DC,YAAYhvB,QAAQmC,WAAa,YAAazG,OAEpD,GAAIsE,QAAQmC,WAAa4sB,mBAAoB,CAC3C,IAAME,0BAA0B,uBAEhC,IACE,IAAIC,wBAAwBjwB,MAAMooB,KAAK/T,SAAS6b,iBAAiBF,4BAK3DG,iBAAmB9b,SAAS6b,iBAAiB,sCAC/CC,iBAAiBpyB,QACnBiC,MAAMooB,KAAK+H,kBAAkBhnB,SAAQ,SAAAinB,GACnC,IACMC,EAD6BD,EAAiBhqB,QACvB8pB,iBAAiBF,2BAC1CK,EAAatyB,SACfkyB,wBAAwBA,wBAAsB7sB,OAAOpD,MAAMooB,KAAKiI,QAKtEJ,wBAAsB9mB,SAAQ,SAAAgc,GAC5B,IAAMxoB,EAASwoB,EAAGmL,cACZxoB,EAAKnL,GAAUA,EAAO4zB,aAAa,cACrCzoB,IACFgoB,mBAAmBhoB,GAAMgoB,mBAAmBhoB,IAAO,GACnDgoB,mBAAmBhoB,GAAIxE,KAAKysB,YAAY5K,EAAKA,EAAGqL,WAAU,QAG9D,MAAO9X,GACPvW,QAAQkB,MAAM,+BAAgCqV,IAIlD,IAAA+X,oBAAA,SAAAtlB,GAaE,SAAAslB,EAAYhoB,GAAZ,MA2BC2C,EAAApM,KAzBC,IADAoM,EAAAD,EAAAT,KAAA1L,KAAMyJ,IAAMzJ,MAbJmwB,WAAmB,KAC7B/jB,EAAWslB,YAA0B,KAErCtlB,EAAAgkB,gBAAkB,IAAIvkB,IACtBO,EAAAikB,WAAa,IAAIxkB,IAEjBO,EAASuL,WAAG,EACZvL,EAAYulB,cAAG,EACfvlB,EAAA7I,MAAQ,CACN8I,UAAU,GAKNtK,QAAQmC,UAAW,CACrB,IAAM4E,EAA8B,QAAzBpL,EAAA0O,EAAK3C,MAAMoJ,oBAAc,IAAAnV,OAAA,EAAAA,EAAAoL,GAKpC,GAJAsD,EAAKulB,aAAevvB,QAClBL,QAAQmC,YAAcuF,EAAMkoB,cAAgBZ,cAAcjoB,IAAMgoB,MAAAA,wBAAA,EAAAA,mBAAqBhoB,KAGnFsD,EAAKuL,WAAavL,EAAK3C,MAAMoJ,aAC/B,GAAI/J,IAAMgoB,MAAAA,wBAAA,EAAAA,mBAAqBhoB,IAAK,CAClC,IAAMqd,EAAK2K,mBAAmBhoB,GAAIhB,SAAW,KAC7CsE,EAAKslB,YAAcvL,EACmB,IAAlC2K,mBAAmBhoB,GAAI/J,eAClB+xB,mBAAmBhoB,QAEvB,GAAIsD,EAAKulB,aAAc,CAC5B,IAAM/G,EAAWvV,SAAS6b,iBACxB,IAAI9sB,OAAAgI,EAAK3C,MAAMoJ,aAAa/J,GAAE,0BAEhC,GAAwB,IAApB8hB,EAAS7rB,OAAc,CACzB,IAAM2D,EAAOkoB,EAAS,GACtBxe,EAAKslB,YAAchvB,EAClB0J,EAAKslB,YAAwBE,oBA2G1C,OA9IkCxkB,UAAsBqkB,EAAAtlB,GA0CtDslB,EAAqBjmB,UAAA8kB,sBAArB,SAAsBC,GACpB,OAAOA,EAAU1qB,OAAS7F,KAAKyJ,MAAM5D,MAGvC5G,OAAAoO,eAAIokB,EAAajmB,UAAA,gBAAA,CAAjB8B,IAAA,iBAEE,OAAOlL,QAAQ2uB,sBAAarzB,EAAAsC,KAAKyJ,MAAM5D,2BAAM1E,MAAM,6CAGrDlC,OAAAoO,eAAIokB,EAAWjmB,UAAA,cAAA,CAAf8B,IAAA,WACE,OAAQyjB,aAAa/wB,KAAK0xB,6CAG5BD,EAAkBjmB,UAAA6c,mBAAlB,SAAmBC,GACbtoB,KAAKyJ,MAAM5D,OAASyiB,EAAUziB,MAChC7F,KAAKwwB,qBAITiB,EAAAjmB,UAAAqE,kBAAA,WAAA,IAgBCzD,EAAApM,KAfCA,KAAK2X,WAAY,EACZ3X,KAAK2xB,eACJ3xB,KAAK6xB,aAEP7xB,KAAKmN,SAAS,CACZd,UAAU,IAEZtK,QAAQ+b,UAAS,WAAM,OAAA1R,EAAKokB,wBAE5BxwB,KAAKwwB,qBAGLzuB,QAAQmC,WAAalE,KAAK2xB,cAAgB3xB,KAAK0xB,aAAe1xB,KAAKmwB,YACrEnwB,KAAKmwB,WAAW/M,YAAYpjB,KAAK0xB,cAIrCD,EAAAjmB,UAAAglB,kBAAA,WACE,GAAIxwB,KAAKmwB,YAAgC,oBAAX1yB,OAE5B,IADA,IAAMgzB,EAAUzwB,KAAKmwB,WAAWO,qBAAqB,UAC5ClvB,EAAI,EAAGA,EAAIivB,EAAQ1xB,OAAQyC,IAAK,CACvC,IAAM6jB,EAASoL,EAAQjvB,GACvB,GAAI6jB,EAAOxF,IAAK,CACd,GAAI7f,KAAKowB,gBAAgBnmB,IAAIob,EAAOxF,KAClC,SAEF7f,KAAKowB,gBAAgBlmB,IAAImb,EAAOxF,KAChC,IAAM8Q,EAAYtb,SAASzL,cAAc,UACzC+mB,EAAUC,OAAQ,EAClBD,EAAU9Q,IAAMwF,EAAOxF,IACvBxK,SAAS8N,KAAKC,YAAYuN,QACrB,IACJtL,EAAOxnB,MACR,CAAC,kBAAmB,yBAA0B,0BAA0BqF,SACtEmiB,EAAOxnB,MAET,CACA,GAAImC,KAAKqwB,WAAWpmB,IAAIob,EAAOC,WAC7B,SAEF,IACEtlB,KAAKqwB,WAAWnmB,IAAImb,EAAOC,WAC3B,IAAInhB,SAASkhB,EAAOC,UAApB,GACA,MAAOjhB,GACPlB,QAAQsB,KAAK,uCAAwCJ,OAO/DpF,OAAAoO,eAAIokB,EAAIjmB,UAAA,OAAA,CAAR8B,IAAA,WAEE,OACGvL,QAAQC,UAAahC,KAAK6xB,aAAe7xB,KAAK2X,YAC/C3X,KAAKyJ,MAAMqoB,mBAEH9xB,KAAKyJ,MAAM5D,MAAQ,IAAI6C,QAC7B,sDACA,IAGG1I,KAAKyJ,MAAM5D,sCAGpB4rB,EAAAjmB,UAAAmI,OAAA,WAAA,IAcCvH,EAAApM,KAXC,OACE+G,eACE6C,cAAA,MAAA5B,SAAA,CAAAkP,IAAK,SAAAA,GAAO,OAAC9K,EAAK+jB,WAAajZ,GAE/BxE,UAAU,wBACJ1S,KAAK2xB,eACR3xB,KAAK+xB,eAAiB,CACrBnhB,wBAAyB,CAAEC,OAAQ7Q,KAAK6F,UAKnD4rB,EA9ID,CAAkC1qB,eAAMkN,WAgJ3B+d,WAAa3G,YAAYoG,oBAAqB,CACzDtoB,KAAM,cACN+jB,QAAQ,EACR+E,oBAAqB,CAAC,YACtBxR,OAAQ,CACN,CACEtX,KAAM,OACNtL,KAAM,OACNuvB,UAAU,EACV9J,aAAc,6CACdzd,MAAM,GAGNmC,SAAA,CAAAmB,KAAM,eACNtL,KAAM,UACNiyB,WAAY,qCACZE,UAAU,GACNe,aAAa,CACfzN,cAAc,IAIhBtb,SAAA,CAAAmB,KAAM,oBACNtL,KAAM,UACNiyB,WACE,0HACFE,UAAU,IACLe,aAAa,CAChBzN,cAAc,OC9NT4O,iBAAmB,CAC9B,OACA,MACA,MACA,MACA,OACA,MACA,OACA,QACA,MACA,OACA,OACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MAGWC,iBAAmB,CAC9B,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,KACA,MACA,OACA,KACA,MACA,MACA,KACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OCvDIC,WAAa,QAASrrB,eAI5B,SAASsrB,eAAetxB,GACtB,OAAOA,EAAK2H,QAAQ,YAAa,IAGnC,SAAS4pB,oBAAoBnM,GAC3B,IAAMoM,EAAOpM,EAAGqM,wBAEhB,OACED,EAAKE,KAAO,GACZF,EAAKG,MAAQ,GACbH,EAAKI,SAAWl1B,OAAOm1B,aAAevd,SAASwd,gBAAgBC,eAC/DP,EAAKQ,QAAUt1B,OAAOgoB,YAAcpQ,SAASwd,gBAAgBG,aAIjE,SAASC,mBAAmBpT,EAAa9f,GACvC,IAAK8f,KAAQA,MAAAA,OAAG,EAAHA,EAAK1e,MAAM,wBAAyBpB,EAC/C,OAAO8f,EAGT,GAAa,WAAT9f,EACF,OAAOsyB,eAAexS,GAGxB,IAAM1e,EAAQ0e,EAAI1e,MAAM,uEAExB,GAAIA,EAAO,CACT,IAAM+xB,EAASrT,EAAIhY,MAAM1G,EAAM,IACzBgyB,EAAShyB,EAAM,GACfiyB,EAAUrzB,EAAKoB,MAAM,KAAOpB,EAAO,GAAGqE,OAAArE,OAE5C,OAAOsyB,eAAe,GAAGjuB,OAAA8uB,EAAO,GAAE,KAAA9uB,OAAIgvB,GAAOhvB,OAAG+uB,IAGlD,OAAO,KAGT,IAAMlF,uBAAuB,eAEboF,iBAAiBC,EAAUl0B,EAAarB,QAAvB,IAAAu1B,IAAAA,EAAQ,IACvC,IAAMC,EAAK,IAAI5W,OAAO,SAAWvd,EAAM,YAAa,KAC9Co0B,GAAkC,IAAtBF,EAAI9uB,QAAQ,KAAc,IAAM,IAClD,OAAI8uB,EAAInyB,MAAMoyB,GACLD,EAAI5qB,QAAQ6qB,EAAI,KAAOn0B,EAAM,IAAMq0B,mBAAmB11B,GAAS,MAGjEu1B,EAAME,EAAYp0B,EAAM,IAAMq0B,mBAAmB11B,GAGpD,SAAU21B,UAAUtP,GACxB,IAAKA,EACH,OAAOA,EAGT,IAAM9kB,EAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAE/C,GAAI8kB,EAAIjjB,MAAM,eAAgB,CAC5B,IAAIwyB,EAASvP,EACPwP,EAAalyB,OAAO0iB,EAAIvc,MAAM,WAAW,IAK/C,OAJKgsB,MAAMD,KACTD,EAAS,GAAGvvB,OAAAuvB,EAAU,KAAAvvB,OAAAwvB,QAGjBt0B,EACJ4Q,QAAO,SAAAnQ,GAAQ,OAAAA,IAAS6zB,KACxBzuB,KAAI,SAAApF,GAAQ,MAAA,GAAAqE,OAAGivB,iBAAiBjP,EAAK,QAASrkB,GAAK,KAAAqE,OAAIrE,EAAO,QAC9DqE,OAAO,CAACuvB,IACR5tB,KAAK,MAGV,OAAIqe,EAAIjjB,MAAM,qBACL7B,EACJ6F,KAAI,SAAApF,GAAQ,MAAA,CAACkzB,mBAAmB7O,EAAK,UAAGrkB,EAAI,KAAAqE,OAAIrE,IAASA,MACzDmQ,QAAO,SAACxS,GAAc,QAANA,EAAA,MAChByH,KAAI,SAACzH,OAACo2B,EAAOp2B,EAAA,GAAEqC,EAAIrC,EAAA,GAAM,MAAA,GAAG0G,OAAA0vB,EAAW,KAAA1vB,OAAArE,EAAO,QAC9CqE,OAAO,CAACggB,IACRre,KAAK,MAGHqe,EAGF,IAAM2P,SAAW,SACtBz0B,EACAsJ,EACAsmB,4BAAA,IAAAA,IAAAA,EAAoC,IAEpC,IAAI8E,EAAW,GAEf,GAAI10B,EAAO,CACT,IAAM20B,EAAa30B,EAAMuI,MAAM,KACzBqsB,EAAcD,EAAWl1B,OAC/Bi1B,EAAWC,EACR9uB,KAAI,SAACpF,EAAcsF,GAClB,OAAI6uB,IAAgB7uB,EAAQ,EAMnBtF,EAAK2I,QAAQ,gBAAiB,IAAI5E,OAElC/D,KAGVgG,KAAK,WACH,GAAI6C,GAASA,EAAMiF,iBAAkB,CAC1C,IAAMsmB,EAA2B,GAC7BC,GAAuB,EACrBC,EAAY,OAEZlF,EAAkB/uB,uBAAuB8uB,GAC/C,GAA0C,QAAtCvgB,EAA6B,QAA7BF,EAAsB,QAAtB/Q,EAAAkL,EAAMiF,wBAAgB,IAAAnQ,OAAA,EAAAA,EAAEiC,aAAK,IAAA8O,OAAA,EAAAA,EAAEvO,aAAO,IAAAyO,OAAA,EAAAA,EAAAxN,MAAMkzB,GAAY,CAC1DD,GAAuB,EACvB,IAAME,EAAa,eAAelwB,OAAA+qB,EAAgBxvB,MAAMD,IAAG,OACrD60B,EAAgB,GAAGnwB,OAAAkwB,cAAc1rB,EAAMiF,iBAAiBlO,MAAMO,MAAMwI,QACxE,IACA,OAEFyrB,EAAe7vB,KAAKiwB,GAGtB,GAA2C,QAAvCnlB,EAA8B,QAA9BL,EAAsB,QAAtBC,EAAApG,EAAMiF,wBAAgB,IAAAmB,OAAA,EAAAA,EAAEpP,cAAM,IAAAmP,OAAA,EAAAA,EAAE7O,aAAO,IAAAkP,OAAA,EAAAA,EAAAjO,MAAMkzB,GAAY,CAC3DD,GAAuB,EACjBE,EAAa,eAAelwB,OAAA+qB,EAAgBvvB,OAAOF,IAAG,OACtD60B,EAAgB,GAAGnwB,OAAAkwB,cAAc1rB,EAAMiF,iBAAiBjO,OAAOM,MAAMwI,QACzE,IACA,OAEFyrB,EAAe7vB,KAAKiwB,GAGtB,GAAmC,QAA/BC,EAAwB,UAAxB5rB,EAAMiF,wBAAkB,IAAAwC,OAAA,EAAAA,EAAAxQ,aAAO,IAAA20B,OAAA,EAAAA,EAAAt0B,MAAO,CACxC,IAAMA,EAAQ0I,EAAMiF,iBAAiBhO,MAAMK,MAAMwI,QAAQ,IAAK,MAC9DyrB,EAAe7vB,KAAKpE,QACXk0B,GACTD,EAAe7vB,KAAK,SAGlB6vB,EAAep1B,SACjBi1B,EAAWG,EAAepuB,KAAK,OAInC,OAAOiuB,GAITS,eAAA,SAAAtoB,GAAA,SAAAsoB,IAAA,IAgRCroB,EAAA,OAAAD,GAAAA,EAAAvH,MAAA5E,KAAAlB,YAAAkB,YAlQCoM,EAAA7I,MAAQ,CACNmxB,aAActoB,EAAKuoB,eACnBC,MAAOxoB,EAAKuoB,gBAGdvoB,EAAUyoB,WAA8B,KAExCzoB,EAAc0oB,eAAgC,KAC9C1oB,EAAoB0L,qBAAgC,OA0PtD,OAhR6B1K,UAA6DqnB,EAAAtoB,GACxFlN,OAAAoO,eAAIonB,EAAcjpB,UAAA,iBAAA,CAAlB8B,IAAA,WACE,OAAItN,KAAKyJ,MAAMsrB,iBAIRhzB,QAAQmC,YAAa8I,SAASoU,OAAOle,SAAS,sCAEjDnB,QAAQmC,YAAa8I,SAASC,KAAK/J,SAAS,iCAE1ClD,KAAKyJ,MAAMurB,wCAcnBP,EAAAjpB,UAAAkE,qBAAA,WACM3N,QAAQmC,YACNlE,KAAK80B,iBACPr3B,OAAOmS,oBAAoB,SAAU5P,KAAK80B,gBAC1C90B,KAAK80B,eAAiB,MAGpB90B,KAAK8X,sBAAwB9X,KAAK60B,YACpC70B,KAAK8X,qBAAqB0B,UAAUxZ,KAAK60B,cAK/CJ,EAAAjpB,UAAAqE,kBAAA,WAAA,IAwDCzD,EAAApM,KAvDC,GAAIA,KAAKyJ,MAAMurB,MAAQjzB,QAAQmC,UAC7B,GAAIlE,KAAK60B,YAAcvC,oBAAoBtyB,KAAK60B,YAC9C70B,KAAKmN,SAAS,CACZynB,MAAM,SAEH,GAAoC,mBAAzBxb,sBAAuCpZ,KAAK60B,WAAY,EACtD70B,KAAK8X,qBAAuB,IAAIsB,sBAChD,SAAC/O,EAASgP,GACRhP,EAAQF,SAAQ,SAAAmP,GAEVA,EAAMC,kBAAoB,IAC5BnN,EAAKe,SAAS,CACZynB,MAAM,IAEJxoB,EAAKyoB,YACPxb,EAASG,UAAUpN,EAAKyoB,oBAOzBpb,QAAQzZ,KAAK60B,gBACjB,CAEL,IAAMI,EAAW9W,UACf,SAACzR,GACC,GAAIN,EAAKyoB,WAAY,CACnB,IAAMtC,EAAOnmB,EAAKyoB,WAAWrC,wBACvB0C,EAASz3B,OAAOm1B,YAAc,EAChCL,EAAKE,IAAMh1B,OAAOm1B,YAAcsC,IAClC9oB,EAAKe,SAAQnF,SAAAA,SAAA,GACRoE,EAAK7I,OAAK,CACbqxB,MAAM,KAERn3B,OAAOmS,oBAAoB,SAAUqlB,GACrC7oB,EAAK0oB,eAAiB,SAI5B,IACA,CACEtW,SAAS,EACTI,UAAU,IAGd5e,KAAK80B,eAAiBG,EAEtBx3B,OAAOqS,iBAAiB,SAAUmlB,EAAU,CAC1CE,SAAS,EACTC,SAAS,IAEXH,MAONh2B,OAAAoO,eAAIonB,EAAKjpB,UAAA,QAAA,CAAT8B,IAAA,WACE,OAAOtN,KAAKyJ,MAAM0jB,OAASntB,KAAKyJ,MAAMoW,qCAGxC5gB,OAAAoO,eAAIonB,EAAWjpB,UAAA,cAAA,CAAf8B,IAAA,iBACE,iBAAOtN,KAAKyJ,MAAMoJ,mCAAc/J,GAAG/F,WAAW,oBAAqB/C,KAAKyJ,MAAMsrB,8CAGhF91B,OAAAoO,eAAIonB,EAAiBjpB,UAAA,oBAAA,CAArB8B,IAAA,iBAEE,OAAA5P,EAAA,IADsB00B,WAAa,gBAAkB,iBAElCpyB,KAAKq1B,YAAc,OAAS,OAC7C33B,mCAGJ+2B,EAAAjpB,UAAAkoB,UAAA,WACE,IAAMtP,EAAMpkB,KAAKmtB,MACjB,GAAK/I,GAAsB,iBAARA,IAIfpkB,KAAKyJ,MAAM6rB,SAMTlR,EAAIjjB,MAAM,gBAAkBijB,EAAIjjB,MAAM,sBAI5C,OAAOuyB,UAAUtP,IAGnBqQ,EAAAjpB,UAAAmI,OAAA,WAAA,QA4ICvH,EAAApM,KA3IO2O,EAAoD3O,KAAKyJ,MAAvDilB,EAAW/f,EAAA+f,YAAEsG,EAAIrmB,EAAAqmB,KAAEniB,EAAYlE,EAAAkE,aAAEC,iBACnCxJ,EAAWtJ,KAAKyJ,MAAMoJ,cAAgB7S,KAAKyJ,MAAMoJ,aAAavJ,SAEhEisB,EAASv1B,KAAKyJ,MAAM8rB,OAClBj2B,EAAQy0B,SACZ/zB,KAAKyJ,MAAMnK,MACXuT,GAC4C,QAA5CpE,EAAsC,QAAtC/Q,EAAAoV,MAAAA,OAAY,EAAZA,EAAczL,QAAQqH,sBAAgB,IAAAhR,OAAA,EAAAA,EAAAiO,YAAM,IAAA8C,OAAA,EAAAA,EAAApO,cAAe,IAEvD8sB,EAAQntB,KAAKmtB,MAEfoI,GAAUpI,GAASA,EAAMjqB,SAAS,2BAC/BqyB,EAAOryB,SAASiqB,EAAMtlB,MAAM,KAAK,MACpC1E,QAAQyC,MAAM,wBACd2vB,EAASv1B,KAAK0zB,aAEPvG,IAAUoI,IACnBA,EAASv1B,KAAK0zB,aAGR,IAAA8B,EAAex1B,KAAKyJ,iBAE5B,OACEkH,IAACkO,mBAAmBnV,SAAQ,MACzB,SAAA3L,SACO03B,EAAM13B,EAAM+gB,QACZ/E,EAAa0b,EAAO,UAAoB,MAExCC,IAAkBV,GAAQ5oB,EAAK7I,MAAMqxB,MAAQa,IACjD9kB,IAACoJ,EAAG/R,SAAA,GACGytB,EACA,CACCE,OAAQ,aACR7V,OACE1T,EAAK3C,MAAMqW,SACV4O,EAAcluB,KAAKo1B,MAAoB,IAAdlH,QAAsB9jB,GAClD1K,MACEkM,EAAK3C,MAAMvJ,QACVwuB,EAAcluB,KAAKo1B,MAAM,IAAOlH,QAAe9jB,IAEpD,KACJ,CAAAirB,IAAKzpB,EAAK3C,MAAMqsB,QAChBjT,MAAOzW,EAAK3C,MAAMoZ,MAClBzjB,IACE2C,QAAQ4N,WACmB,iBAAfvD,EAAK+gB,OAAsB/gB,EAAK+gB,MAAMtlB,MAAM,KAAK,SACzD+C,EAEN+U,KAAOvT,EAAK3C,MAAMqsB,aAA2BlrB,EAAjB,eAC5B2H,IACEvK,SAAAA,SAAA,CAAA+X,QAAS0V,EAAM,EAAIrpB,EAAKuoB,iBAAmBvoB,EAAK7I,MAAMmxB,YAAc,EAAI,EACxErlB,WAAY,2BACZ0mB,UAAW3pB,EAAK3C,MAAMglB,gBAAkB,QACxCuH,eAAgB5pB,EAAK3C,MAAM+kB,oBAAsB,UAC7CE,IACD+G,GAAO,CACNrH,SAAU,WACVtO,OAAQ,OACR5f,MAAO,OACPwyB,KAAM,EACND,IAAK,IAELgD,IAAG/3B,EAAA,GACLA,EAAC,SAAU,CACTq4B,UAAW3pB,EAAK3C,MAAMglB,eACtBuH,eAAgB5pB,EAAK3C,MAAM+kB,wBAIjCrX,QAAS/K,EAAKipB,YAAc,QAAU,QAClCjpB,EAAK6pB,kBAAiB,CAC1BvjB,UAAW,iBAAmBtG,EAAK3C,MAAMiJ,UAAY,IAAMtG,EAAK3C,MAAMiJ,UAAY,IAClFmN,IAAKzT,EAAK+gB,QACJsI,GAAO,CAEXS,OAAQ,WAAM,OAAA9pB,EAAKe,SAAS,CAAEunB,aAAa,MAC3C,CAEFyB,OAAQZ,EACRj2B,OAAQm2B,GAAOn2B,EAAQA,OAAQsL,KAInC,OACE+F,IAAC5J,eAAMsL,SAAQ,KACZojB,IAGC9kB,IAAS,UAAA,CAAAuG,IAAK,SAAAA,GAAO,OAAC9K,EAAKyoB,WAAa3d,IACrCqe,GAAUA,EAAOp0B,MAAM,iBAAmBiL,EAAK3C,MAAM6rB,QACpD3kB,IAAQ,SAAA,CAAAwlB,OAAQZ,EAAO7sB,QAAQ,MAAO,iBAAkB7K,KAAK,eAE9D63B,IAGJhH,GAAgB+G,GAASD,GAAclsB,GAAYA,EAASvK,OAYzD,KAXF4R,IAAA,MAAA,CACE+B,UAAU,sBACVH,IAAK,CACHrS,MAAO,OACPk2B,WAA0B,IAAd1H,EAAoB,IAChCzO,cAAe,OACflM,SAAU,IAGX,KAGJzK,GAAYA,EAASvK,OACpBy2B,EACElsB,EAASnE,KAAI,SAACyD,EAAuBvD,GAAkB,OACrDsL,IAACod,eAAsB,CAAA3uB,IAAKwJ,EAAME,GAAIF,MAAOA,OAK/C+H,IAAA,MAAA,CACE4B,IAAK,CACHqB,QAAS,OACTkB,cAAe,SACfC,WAAY,UACZqZ,SAAU,WACVqE,IAAK,EACLC,KAAM,EACNxyB,MAAO,OACP4f,OAAQ,SAGTxW,EAASnE,KAAI,SAACyD,EAAuBvD,GAAkB,OACtDsL,IAACod,eAAsB,CAAA3uB,IAAKwJ,EAAME,GAAIF,MAAOA,QAIjD,UAOjB6rB,EAhRD,CAA6B1tB,eAAMkN,WAkRtBoiB,MAAQhL,YAAYoJ,eAAgB,CAC/CtrB,KAAM,QACN+jB,QAAQ,EACRC,MACE,uKACFI,cAAe,CACba,SAAU,WACVE,UAAW,OACXC,SAAU,OACVvO,SAAU,UAEZ8L,iBAAiB,EACjBrL,OAAQ,CACN,CAGEtX,KAAM,QACNtL,KAAM,OACNyvB,QAAQ,EACRgJ,iBAAkBpE,iBAClB9E,UAAU,EACV9J,aACE,uGACFxI,SAAU,SAAC1R,GAETA,EAAQ8S,OAAO,UACf9S,EAAQ8S,OAAO,UA4Bf,IA3BmBkI,EAAa9F,EA2B1BvgB,EAAQqL,EAAQkE,IAAI,SACpBohB,EAActlB,EAAQkE,IAAI,eAWhC,GARAyT,MAAMhjB,GACH6I,MAAK,SAAAnB,GAAO,OAAAA,EAAI8wB,UAChB3vB,MAAK,SAAA2vB,GACAA,EAAK14B,KAAKqF,SAAS,QACrBkG,EAAQvI,IAAI,UAAU,MAIxB9C,KAAW2wB,GA1Cc,QA0CCA,GAC5B,OAxCiBtK,EAwCArmB,OAxCa,IAAAugB,IAAAA,EAAe,KACtC,IAAIkY,SAAQ,SAACC,EAASC,GAC3B,IAAMC,EAAMthB,SAASzL,cAAc,OAC/BgtB,GAAS,EACbD,EAAIE,OAAS,WACXD,GAAS,EACTH,EAAQE,IAGVA,EAAI7mB,iBAAiB,SAAS,SAAApD,GAC5BvJ,QAAQsB,KAAK,oBAAqBiI,EAAMrI,OACxCqyB,EAAOhqB,EAAMrI,UAGfsyB,EAAI9W,IAAMuE,EACVxX,YAAW,WACJgqB,GACHF,EAAO,IAAInX,MAAM,2BAElBjB,OAqBmB1X,MAAK,SAAA+vB,GAC3B,IAlBWG,EAkBLC,EAA6B3tB,EAAQkE,IAAI,eAE7ClE,EAAQkE,IAAI,WAAavP,GACvBg5B,GA/CqB,QA+CSA,GAE5BJ,EAAIz2B,OAASy2B,EAAI7W,SACnB1W,EAAQvI,IAAI,eAxBLi2B,EAwB0BH,EAAI7W,OAAS6W,EAAIz2B,MAvBjDM,KAAKo1B,MAAY,IAANkB,GAAc,MAwB1B1tB,EAAQvI,IAAI,SAAU81B,EAAI7W,QAC1B1W,EAAQvI,IAAI,QAAS81B,EAAIz2B,aAOrC,CACEiJ,KAAM,iBACNtL,KAAM,OACNylB,aAAc,QACd2M,KAAM,CACJ,CACE+G,MAAO,UACPj5B,MAAO,UACP+xB,WAAY,sCAEd,CACEkH,MAAO,QACPj5B,MAAO,QACP+xB,WAAY,yDAOlB,CACE3mB,KAAM,qBACNtL,KAAM,OACNylB,aAAc,SACd2M,KAAM,CACJ,SACA,MACA,OACA,QACA,SACA,WACA,YACA,cACA,iBAGJ,CACE9mB,KAAM,UACNtL,KAAM,SACNiyB,WAAY,gDAEd,CACE3mB,KAAM,QACNtL,KAAM,SACNiyB,WAAY,gDAEd,CACE3mB,KAAM,eACNtL,KAAM,UACNmyB,UAAU,EACVF,WACE,sLAEJ,CACE3mB,KAAM,SACNtL,KAAM,SACNgyB,YAAY,GAEd,CACE1mB,KAAM,QACNtL,KAAM,SACNgyB,YAAY,GAEd,CACE1mB,KAAM,QACNtL,KAAM,SACNgyB,YAAY,GAEd,CACE1mB,KAAM,SACNtL,KAAM,SACNgyB,YAAY,GAGd,CACE1mB,KAAM,OACNtL,KAAM,UACNylB,cAAc,EACduM,YAAY,GAEd,CACE1mB,KAAM,aACNtL,KAAM,UACNiyB,WACE,wFACFxM,cAAc,GAEhB,CACEna,KAAM,cACNtL,KAAM,SACNiyB,WACE,0JACFE,UAAU,EACV1M,aAAc2K,2BC9lBdA,qBAAuB,kBAE7BgJ,eAAA,SAAA9qB,GAAA,SAAA8qB,IAAA,IAgKC7qB,EAAA,OAAAD,GAAAA,EAAAvH,MAAA5E,KAAAlB,YAAAkB,YA7ICoM,EAAK8qB,MAA4B,KACjC9qB,EAAY+qB,aAAuB,KACnC/qB,EAAiBgrB,kBAAgC,KAQjDhrB,EAAA7I,MAAQ,CACNqxB,MAAOxoB,EAAKirB,YAkIhB,OAhK6BjqB,UAkB5B6pB,EAAA9qB,GAKClN,OAAAoO,eAAI4pB,EAAQzrB,UAAA,WAAA,CAAZ8B,IAAA,WAGE,OAA+B,IAAxBtN,KAAKyJ,MAAM4tB,0CAOpBJ,EAAAzrB,UAAA8rB,YAAA,WAAA,IAmBClrB,EAAApM,KAlBOk3B,EAAQl3B,KAAKk3B,MACnB,GAAIA,EAAO,CAGsD,CAC7D,QACA,cACA,YAEQ/sB,SAAQ,SAAAqH,GAChB,IAAMM,EAAON,EAAKzG,cACdqB,EAAK3C,MAAM+H,GACb0lB,EAAMhU,aAAapR,EAAMA,GAEzBolB,EAAMK,gBAAgBzlB,QAM9BmlB,EAAAzrB,UAAA6c,mBAAA,WACEroB,KAAKs3B,eAGPL,EAAAzrB,UAAAqE,kBAAA,WAAA,IAyBCzD,EAAApM,KAtBC,GAFAA,KAAKs3B,cAEDt3B,KAAKq3B,UAAYt1B,QAAQmC,UAAW,CACtC,IAAMmV,EAAW,IAAID,sBAAqB,SAAA/O,GACxCA,EAAQF,SAAQ,SAAAmP,GACTA,EAAMke,iBAEXprB,EAAKe,UAAS,SAAA5J,GAAS,OAAAyE,SAAAA,SAAA,GAClBzE,GAAK,CACRqxB,MAAM,OAGJxoB,EAAKgrB,oBACPhrB,EAAKgrB,kBAAkBK,aACvBrrB,EAAKgrB,kBAAoB,aAK3Bp3B,KAAKm3B,eACP9d,EAASI,QAAQzZ,KAAKm3B,cACtBn3B,KAAKo3B,kBAAoB/d,KAK/B4d,EAAAzrB,UAAAkE,qBAAA,WACM1P,KAAKo3B,oBACPp3B,KAAKo3B,kBAAkBK,aACvBz3B,KAAKo3B,kBAAoB,OAI7BH,EAAAzrB,UAAAmI,OAAA,WAAA,IAmECvH,EAAApM,KAlEOtC,EAA4BsC,KAAKyJ,MAA/BilB,EAAWhxB,EAAAgxB,YAAEplB,EAAQ5L,EAAA4L,SAC7B,OACEqH,IAAK,MAAA,CAAAuG,IAAK,SAAAA,GAAO,OAAC9K,EAAK+qB,aAAejgB,GAAM3E,IAAK,CAAE6b,SAAU,aAE3Dzd,IACE,QAAA,CAAAvR,IAAKY,KAAKyJ,MAAMytB,OAAS,SACzBQ,OAAQ13B,KAAKyJ,MAAMkuB,YACnBzgB,IAAK,SAAAA,GAAO,OAAC9K,EAAK8qB,MAAQhgB,GAC1B0gB,SAAU53B,KAAKyJ,MAAMmuB,SACrBC,MAAO73B,KAAKyJ,MAAMouB,MAClBC,SAAU93B,KAAKyJ,MAAMquB,SACrBC,KAAM/3B,KAAKyJ,MAAMsuB,KACjBC,QAASh4B,KAAKyJ,MAAMuuB,SAAW,WAC/BtlB,UAAU,gBACVH,IAAGvK,SAAA,CACD9H,MAAO,OACP4f,OAAQ,OACRiW,UAAW/1B,KAAKyJ,MAAMwuB,IACtBjC,eAAgBh2B,KAAKyJ,MAAM2kB,SAG3B8J,aAAc,GACVxJ,EACA,CACEN,SAAU,YAEZ,SAGHpuB,KAAKq3B,UAAYr3B,KAAKuD,MAAMqxB,OAC7BjkB,IAAQ,SAAA,CAAA9S,KAAK,YAAYgiB,IAAK7f,KAAKyJ,MAAMytB,UAG5CxI,GAAiB1uB,KAAKyJ,MAAM+rB,YAAclsB,EASvC,KARFqH,IAAA,MAAA,CACE4B,IAAK,CACHrS,MAAO,OACPk2B,WAA0B,IAAd1H,EAAoB,IAChCzO,cAAe,OACflM,SAAU,KAIfzK,GAAYtJ,KAAKyJ,MAAM+rB,WACtB7kB,IAAA,MAAA,CAAK4B,IAAK,CAAEqB,QAAS,OAAQkB,cAAe,SAAUC,WAAY,YAC/DzL,GAEDA,EACFqH,IAAA,MAAA,CACE4B,IAAK,CACH0N,cAAe,OACfrM,QAAS,OACTkB,cAAe,SACfC,WAAY,UACZqZ,SAAU,WACVqE,IAAK,EACLC,KAAM,EACNxyB,MAAO,OACP4f,OAAQ,SAGTxW,GAED,OAIX2tB,EAhKD,CAA6BlwB,eAAMkN,WAkKtBkkB,MAAQp2B,QAAQglB,kBAAkBwE,aAAa0L,gBAAiB,CAC3E9tB,KAAM,QACN2iB,iBAAiB,EACjByB,cAAe,CACbe,UAAW,OACXC,SAAU,QAEZpB,MACE,yKACF1M,OAAQ,CACN,CACEtX,KAAM,QACNtL,KAAM,OACNy4B,iBAAkBnE,iBAClB7E,QAAQ,EACRhK,aACE,qMACF8J,UAAU,GAEZ,CACEjkB,KAAM,cACNtL,KAAM,OACNy4B,iBAAkBpE,iBAClBpC,WAAY,wCAEd,CACE3mB,KAAM,WACNtL,KAAM,UACNylB,cAAc,GAEhB,CACEna,KAAM,WACNtL,KAAM,UACNylB,cAAc,GAEhB,CACEna,KAAM,QACNtL,KAAM,UACNylB,cAAc,GAEhB,CACEna,KAAM,OACNtL,KAAM,UACNylB,cAAc,GAEhB,CACEna,KAAM,cACNtL,KAAM,UACNylB,cAAc,GAEhB,CACEna,KAAM,MACNtL,KAAM,OACNylB,aAAc,QACd2M,KAAM,CAAC,UAAW,QAAS,OAAQ,SAErC,CACE9mB,KAAM,UACNtL,KAAM,OACNylB,aAAc,WACd2M,KAAM,CAAC,OAAQ,WAAY,SAE7B,CACE9mB,KAAM,aACNtL,KAAM,UACNiyB,WAAY,gFACZxM,cAAc,EACd0M,UAAU,GAEZ,CACE7mB,KAAM,WACNtL,KAAM,OACNylB,aAAc,SACd2M,KAAM,CACJ,SACA,MACA,OACA,QACA,SACA,WACA,YACA,cACA,iBAGJ,CACE9mB,KAAM,SACNtL,KAAM,SACNmyB,UAAU,GAEZ,CACE7mB,KAAM,QACNtL,KAAM,SACNmyB,UAAU,GAEZ,CACE7mB,KAAM,cACNtL,KAAM,SACNmyB,UAAU,EACV1M,aAAc2K,sBAEhB,CACE9kB,KAAM,WACNtL,KAAM,UACNiyB,WACE,2IACFxM,cAAc,EACd0M,UAAU,MC5QVjwB,KAAO,SAAC4G,GAAkB,OAAA1H,OAAO+J,KAAKrC,GAAO5H,QAE7CgyB,UAAYhvB,QAAQmC,WAAa,YAAazG,OAE9C26B,KAAgC,GAEtC,GAAIr2B,QAAQmC,UACV,IACElD,MAAMooB,KAAK/T,SAAS6b,iBAAiB,4BAA4B/mB,SAAQ,SAAAgc,GACvE,IAAMrd,EAAMqd,EAAsBoL,aAAa,yBAC3CzoB,IACFsvB,KAAKtvB,GAAMqd,MAGf,MAAOzM,GACPvW,QAAQkB,MAAM,+BAAgCqV,GAuBlD,IAAA2e,gBAAA,SAAAlsB,GAAA,SAAAksB,IAAA,IAyICjsB,EAAA,OAAAD,GAAAA,EAAAvH,MAAA5E,KAAAlB,YAAAkB,YAxICoM,EAAG8K,IAA4B,KAC/B9K,EAASksB,UAA0B,KACnClsB,EAAmBmsB,qBAAG,IAsIxB,OAzI8BnrB,UAA+CirB,EAAAlsB,GAK3ElN,OAAAoO,eAAIgrB,EAAW7sB,UAAA,cAAA,CAAf8B,IAAA,WACE,OACEqD,IAAK,MAAA,CAAA4B,IAAK,CAAEsB,QAAS,KAGf,iJAIVwkB,EAAA7sB,UAAAqE,kBAAA,WAAA,UAcCzD,EAAApM,KAbKA,KAAKw4B,WAAax4B,KAAKs4B,WAAaF,KAA8B,QAAzB16B,EAAAsC,KAAKyJ,MAAMoJ,oBAAc,IAAAnV,OAAA,EAAAA,EAAAoL,cACpE2F,EAAAzO,KAAKs4B,UAAUG,2BAAYC,aAAaN,KAA4B,QAAvBzpB,EAAA3O,KAAKyJ,MAAMoJ,oBAAY,IAAAlE,OAAA,EAAAA,EAAE7F,IAAM9I,KAAKs4B,YAEnFv2B,QAAQ+b,UAAS,WACT,IAAApgB,EAAmB0O,EAAK3C,MAAMkvB,QAAU,GAAtCvgB,EAAK1a,EAAA0a,MAAEkB,UAEflN,EAAKmsB,oBAAsBn2B,QACzBL,QAAQ4N,WACNyI,IAAU5U,QAAQwV,cAClBM,GACAtM,SAASoU,OAAOle,SAAS,oBAAaoW,SAK9Cra,OAAAoO,eAAIgrB,EAAS7sB,UAAA,YAAA,CAAb8B,IAAA,iBACE,OAAOlL,QACLL,QAAQmC,WACNk0B,KAA8B,UAAzBp4B,KAAKyJ,MAAMoJ,oBAAc,IAAAnV,OAAA,EAAAA,EAAAoL,OAC5B/G,QAAQ4N,WAAa5N,QAAQyW,gDAIrC6f,EAAA7sB,UAAAmI,OAAA,WAAA,QAkGCvH,EAAApM,KAjGC,GAAIA,KAAKw4B,UACP,OAAO7nB,WAAKuG,IAAK,SAAAiP,GAAM,OAAC/Z,EAAKksB,UAAYnS,KAG3C,IAAMwS,EAAS34B,KAAKyJ,MAAMkvB,OAEtBC,GAAkB,EAEjBD,IACHC,GAAkB,GAGpB,IAAMnoB,EAAUzQ,KAAKyJ,MAAMmQ,SACvBnE,OACCzV,KAAKyJ,MAAMoJ,cAAgB7S,KAAKyJ,MAAMoJ,aAAahK,SAAY,MAE9D8F,EAAmDgqB,GAAU,GAA3DvgB,EAAKzJ,EAAAyJ,MAAEkB,EAAK3K,EAAA2K,MAAExb,EAAI6Q,EAAA7Q,KAAEsJ,EAAOuH,EAAAvH,QAAEqR,EAAM9J,EAAA8J,OAAEogB,EAAOlqB,EAAAkqB,QAC9CC,GAAUH,MAAAA,OAAA,EAAAA,EAAQG,UAAW94B,KAAKyJ,MAAMqvB,QACxC1gB,IAAUkB,GAASwf,KAA6B,QAAfp7B,EAAA0J,MAAAA,OAAA,EAAAA,EAAStJ,YAAM,IAAAJ,OAAA,EAAAA,EAAAwrB,WAAazQ,IACjEmgB,GAAkB,GAGhB54B,KAAKu4B,sBACPK,GAAkB,GAGpB,IAAIx5B,EAAM05B,EAAiC,QAAvBrqB,EAAAzO,KAAKyJ,MAAMoJ,oBAAY,IAAApE,OAAA,EAAAA,EAAE3F,GAAK,CAACsP,EAAOkB,GAAOvT,KAAK,KAChE0iB,EAAa3qB,GAAQiC,KAAKjC,IAAS4qB,KAAK5qB,GAE1CsB,GAAOqpB,GAAcA,EAAW1pB,OAAS,MAC3CK,GAAO,IAAMqpB,GAEf,IAAM7V,EAAa5S,KAAKyJ,MAAMmJ,YAAc,GAC5C,OACEjC,IAACzJ,oBAAoBwC,SACnB,CAAAtK,KAAMgZ,GAAS,YAAc,KAAOkB,GAAS,WAAatZ,KAAKu4B,uBAE9D,SAAAh1B,6BACOw1B,EAAsB,GAAA30B,OAAGhF,EAAO,KAAAgF,QAAY,UAAZb,MAAAA,OAAA,EAAAA,EAAOA,aAAK,IAAA7F,OAAA,EAAAA,EAAEiN,SAAU,WAC9D,OACEgG,IAACF,EAAOzI,SAAA,CAAAgxB,aACM5gB,GACRxF,GACJF,WACGE,EAAW7J,OAAS6J,EAAWF,WAAa,IAC7C,oBACCimB,MAAAA,OAAM,EAANA,EAAQlgB,QAAS,yBAA2B,MAC5CkgB,MAAAA,SAAAA,EAAQG,UAAW1sB,EAAK3C,MAAMqvB,QAAU,0BAA4B,MAGtEF,EACCxsB,EAAgB,YAEhBuE,IAAC6Q,iBACKxZ,SAAA,GAAC6wB,GAAW,CAAEpZ,OAAQoZ,IACV,QAAXpqB,EAAAlL,EAAMA,aAAK,IAAAkL,OAAA,EAAAA,EAAE9D,SAAU,CAAEA,OAAQpH,EAAMA,MAAMoH,QAClD,CAAAie,SACA,EAAA1R,IAAK,SAACA,GAAa,OAAC9K,EAAK8K,IAAMA,GAC/B7P,QAAcW,SAAAA,SAAA,GAAAzE,EAAM8D,SAAO,CAAEsmB,SAAmC,QAAzBhf,EAAAvC,EAAK3C,MAAMoJ,oBAAc,IAAAlE,OAAA,EAAAA,EAAA7F,KAChEsP,MAAOA,EACPkB,MAAOA,EACPxb,KACKkK,SAAAA,SAAAA,SAAA,GAAAlK,KACGsO,EAAK3C,MAAMwvB,cAAgBt6B,OAAK4E,EAAMA,MAAO,qBAChD21B,EAA8D,QAA9D1E,EAAmD,kBAAnDplB,EAAoC,QAApCL,EAAuB,UAAvB3C,EAAK3C,MAAMoJ,oBAAY,IAAA7D,OAAA,EAAAA,EAAE9F,iBAAW,IAAA6F,OAAA,EAAAA,EAAA3F,8BAASuvB,cAAM,IAAAtoB,OAAA,EAAAA,EAAEjJ,eAAS,IAAAotB,OAAA,EAAAA,EAAA12B,2BAAMyF,OAEzEoG,WAAYpG,EAAMoG,WAClByb,cAAeuT,MAAAA,OAAA,EAAAA,EAAQlgB,QAClBrR,GAAW,CAAEA,QAAOA,GAAG,CAC5BhI,IAAK25B,EACL3vB,QAAOpB,SAAAA,SAAA,IACAoE,EAAKmsB,qBAAuB,CAC/Bn5B,IAAK25B,EACLxhB,iBAAiB,IAE2B,YAA1CxV,QAAQo3B,kBAAkBC,aAC5B9f,GAAS,CACPkM,MAAO,CACL1c,GAAIwQ,KAIZqK,WAA0B,QAAf0V,EAAAjyB,MAAAA,OAAA,EAAAA,EAAStJ,YAAM,IAAAu7B,OAAA,EAAAA,EAAAnQ,UAC1BnE,QAAsB,QAAbuU,EAAA/1B,EAAMA,aAAO,IAAA+1B,OAAA,EAAAA,EAAAxU,SACtBjS,aAAczG,EAAK3C,MAAMoJ,aACzB+G,SAAUxN,EAAK3C,MAAMmQ,SACrBzD,MAAO5S,EAAM8D,QAAQ8O,QAGpB/J,EAAK3C,MAAMH,eAS7B+uB,EAzID,CAA8BtxB,eAAMkN,WA2IvByG,SAAS2Q,YAAYgN,gBAAiB,CAEjDlvB,KAAM,SACNwI,QAAQ,EACRub,QAAQ,EAMRzM,OAAQ,CACN,CACEtX,KAAM,SACNtL,KAAM,YAER,CACEsL,KAAM,WACN2mB,WAAY,sDACZjyB,KAAM,UACNylB,cAAc,EACd0M,UAAU,EACVH,YAAY,GAEd,CACE1mB,KAAM,eACN2mB,WAAY,8CACZjyB,KAAM,UACNylB,aAAcyN,UACdf,UAAU,GAEZ,CACE7mB,KAAM,iBACN2mB,WACE,qGACFjyB,KAAM,UACNylB,aAAcyN,UACdf,UAAU,EACVH,YAAY,GAEd,CACE1mB,KAAM,cACN0mB,YAAY,EACZhyB,KAAM,cC1NZ07B,gBAAA,SAAAptB,GAAA,SAAAotB,mDAcA,OAd8BnsB,UAA4BmsB,EAAAptB,GACxDotB,EAAA/tB,UAAAmI,OAAA,WACE,IAAMoG,EAAM/Z,KAAKyJ,MAAM8lB,KAAO/lB,KAAO,OACrC,OACEzC,6BAACgT,EAAG/R,SAAA,CACF2X,KAAK,SACL1S,KAAMjN,KAAKyJ,MAAM8lB,KACjBtT,OAAQjc,KAAKyJ,MAAM+vB,iBAAmB,cAAW5uB,GAC7C5K,KAAKyJ,MAAMmJ,YAEd5S,KAAKyJ,MAAMJ,OAInBkwB,EAdD,CAA8BxyB,eAAMkN,WAgBvBwlB,OAASpO,YAAYkO,gBAAiB,CACjDpwB,KAAM,cACNgkB,MACE,+GACFI,cAAe,CAEbmM,WAAY,OACZtD,WAAY,OACZuD,cAAe,OACfC,YAAa,OACbC,aAAc,OACdC,gBAAiB,UACjBhmB,MAAO,QACPokB,aAAc,MACdrL,UAAW,SACXkN,OAAQ,WAEVtZ,OAAQ,CACN,CACEtX,KAAM,OACNtL,KAAM,OACNylB,aAAc,YACdgK,QAAQ,GAEV,CACEnkB,KAAM,OACNtL,KAAM,MACNyvB,QAAQ,GAEV,CACEnkB,KAAM,mBACNtL,KAAM,UACNylB,cAAc,EACd0W,aAAc,yBAGlB9M,QAAQ,EACRvb,QAAQ,ICjDVsoB,iBAAA,SAAA9tB,GAAA,SAAA8tB,IAAA,IA2FC7tB,EAAA,OAAAD,GAAAA,EAAAvH,MAAA5E,KAAAlB,YAAAkB,YAvFCoM,EAAG8K,IAAuB,KAE1B9K,EAAgB8tB,iBAAe,GAE/B9tB,EAAA7I,MAAQ,CACN42B,QAAQ,KAkFZ,OA3F+B/sB,UAG9B6sB,EAAA9tB,GASClN,OAAAoO,eAAI4sB,EAAczuB,UAAA,iBAAA,CAAlB8B,IAAA,WACE,OAA4B,IAAxBtN,KAAKyJ,MAAM4tB,UAIRr3B,KAAKuD,MAAM42B,wCAGpBF,EAAAzuB,UAAAkE,qBAAA,WACE1P,KAAKk6B,iBAAiB/vB,SAAQ,SAAAiwB,GAAM,OAAAA,QAGtCH,EAAAzuB,UAAAqE,kBAAA,WAAA,IAgCCzD,EAAApM,KA/BC,GAAIA,KAAKyJ,MAAM4tB,SACb,GAAoC,oBAAzBje,sBAAyCpZ,KAAKkX,IAElD,CACL,IAAMmjB,EAAW,IAAIjhB,sBACnB,SAAC/O,EAASgP,GACRhP,EAAQF,SAAQ,SAAAmP,GACVA,EAAMC,kBAAoB,IAC5BnN,EAAKe,SAAS,CACZgtB,QAAQ,IAEN/tB,EAAK8K,KACPmC,EAASG,UAAUpN,EAAK8K,WAKhC,CACEojB,WAAY,SAIhBD,EAAS5gB,QAAQzZ,KAAKkX,KAEtBlX,KAAKk6B,iBAAiB51B,MAAK,WACrB8H,EAAK8K,KACPmjB,EAAS7gB,UAAUpN,EAAK8K,aAxB5BlX,KAAKmN,SAAS,CAAEgtB,QAAQ,KA+B9BF,EAAAzuB,UAAAmI,OAAA,WAAA,IAgCCvH,EAAApM,KA/BC,OACE2Q,eACEuG,IAAK,SAAAA,GAAO,OAAC9K,EAAK8K,IAAMA,GACxB3E,IAAGvK,SAAA,CACD9H,MAAO,OAGPq6B,UAAW,UACX/K,SAAU,EACVgL,UAAW,aACXC,SAAUz6B,KAAKyJ,MAAMgxB,SACrB7mB,QAAS,OACTkB,cAAe,SACfC,WAAY,UACZ0a,WAAY,OACZiL,YAAa,QACT16B,KAAK26B,eAAiB,KAAO36B,KAAKyJ,MAAMmxB,aAG7C56B,KAAK26B,eACJhqB,IAAC5J,eAAMsL,SAAQ,KACZrS,KAAKyJ,MAAMH,SACXtJ,KAAKyJ,MAAMoJ,cACV7S,KAAKyJ,MAAMoJ,aAAavJ,UACxBtJ,KAAKyJ,MAAMoJ,aAAavJ,SAASnE,KAAI,SAACyD,EAAOvD,GAAU,OACrDsL,IAACod,eAAsB,CAAA3uB,IAAKwJ,EAAME,GAAIF,MAAOA,QAGjD,OAIXqxB,EA3FD,CAA+BlzB,eAAMkN,WA6FxB4mB,QAAUxP,YAAY4O,iBAAkB,CACnD9wB,KAAM,eACN+jB,QAAQ,EACRC,MACE,+GACF1M,OAAQ,CACN,CACEtX,KAAM,WACNtL,KAAM,SACNylB,aAAc,MAEhB,CACEna,KAAM,WACNtL,KAAM,UACNylB,cAAc,EACd0M,UAAU,EACVjN,YAAa,0CAGjBwK,cAAe,CACbqM,YAAa,OACbC,aAAc,OACdzD,WAAY,OACZuD,cAAe,OACftL,UAAW,MACXnuB,MAAO,QACPuvB,WAAY,oBAEd3D,iBAAiB,EAEjBgP,gBAAiB,CACf,CACEpb,QAAS,0BACT7R,iBAAkB,CAChBhO,MAAO,CACLgtB,UAAW,WAGf3jB,UAAW,CACTC,KAAM,OACNC,QAAS,CACPC,KAAM,idCzIhB0xB,uBAAA,SAAA5uB,GAAA,SAAA4uB,mDA6BA,OA7BqC3tB,UAAsD2tB,EAAA5uB,GACzF4uB,EAAAvvB,UAAAmI,OAAA,WAAA,IA2BCvH,EAAApM,KA1BC,OACE+G,eAAC6C,cAAA1C,oBAAoBwC,SAAQ,MAC1B,SAAAnG,GAAS,OACRwD,eAAA6C,cAAC1C,oBAAoBwM,UACnB3V,MAAKiK,SAAAA,SAAA,GACAzE,GACH,CAAAA,MACKyE,SAAAA,SAAA,GAAAzE,EAAMA,OACN6I,EAAK3C,MAAMlG,OAEhB8D,QACKW,SAAAA,SAAA,GAAAzE,EAAM8D,SACN+E,EAAK3C,MAAMpC,YAIjB+E,EAAK3C,MAAMoJ,cACVzG,EAAK3C,MAAMoJ,aAAavJ,UACxB8C,EAAK3C,MAAMoJ,aAAavJ,SAASnE,KAAI,SAACyD,EAAOvD,GAAU,OACrD0B,eAAA6C,cAACmkB,eAAsB,CAAAnlB,MAAOA,EAAOxJ,IAAKwJ,EAAME,GAAIzD,MAAOA,EAAOiL,OAAO,OAE5ElE,EAAK3C,MAAMH,cAMvByxB,EA7BD,CAAqCh0B,eAAMkN,WA+B9B+mB,cAAgB3P,YAAY0P,uBAAwB,CAC/D5xB,KAAM,wBAEN2iB,iBAAiB,EACjBoB,QAAQ,EACRvb,QAAQ,EACRqc,oBAAoB,IChChBiN,WAAa,IAAIpvB,IAEvB,SAASqV,eAAelU,GACtB,IAAMmU,GAASnU,EAASoU,QAAU,IAAIC,UAAU,GAAGxZ,MAAM,KACnDtJ,EAAiC,GAEvC,IAAK,IAAMiD,KAAK2f,EACd,GAAMA,EAAM3f,IAA0B,iBAAb2f,EAAM3f,GAA/B,CAGA,IAAM8f,EAAOH,EAAM3f,GAAGqG,MAAM,KAC5BtJ,EAAIgjB,mBAAmBD,EAAK,KAAOC,mBAAmBD,EAAK,IAG7D,OAAO/iB,EAyBT,IAAA28B,gBAAA,SAAA/uB,GAAA,SAAA+uB,IAAA,IAqTC9uB,EAAA,OAAAD,GAAAA,EAAAvH,MAAA5E,KAAAlB,YAAAkB,YApTCoM,EAAO5I,QAAGA,QAEV4I,EAAM+uB,QAAG,EAED/uB,EAAYgvB,aAAG,EAwDfhvB,EAAUivB,WAAG,SAAC3uB,GACpBN,EAAKkvB,uBAGClvB,EAAuBmvB,wBAAG,SAAC7uB,GACjC,KAAIN,EAAKgvB,aAAe,KAIU,IAA9BhvB,EAAK3C,MAAM+xB,eAAf,CAIA,IAAMC,EAAarvB,EAAKsvB,eAAehvB,GACvC,GAAK+uB,EAAL,CAIA,IAAIxuB,EAAOwuB,EAAWlK,aAAa,QACnC,GAAKtkB,EAAL,CAMA,IAAKb,EAAKuvB,WAAW1uB,GAAO,CAC1B,IAAM2uB,EAAYxvB,EAAKyvB,kBAAkB5uB,GACzC,IAAI2uB,EAGF,OAFA3uB,EAAO2uB,EAMX,IAAI3uB,EAAKlK,WAAW,OAIhBk4B,WAAWhxB,IAAIgD,GAAnB,CAGAguB,WAAW/wB,IAAI+C,GAEf,IAAM6uB,EAAY1vB,EAAK2vB,SAAS9uB,GAGhCb,EAAKgvB,eAGL,IAAMxoB,EAAapP,QAAQgC,oBAC3BoN,EAAWopB,QAAUF,EAAUvW,SAC/B3S,EAAWqpB,YAAcH,EAAU1a,OAGnC,IAAM8a,EAAe14B,QAClB8J,IAAIlB,EAAKgM,MAAO,CACf+jB,eAAgBvpB,EAChBxT,IAAKgN,EAAKgM,MAAQ,IAAM0jB,EAAUvW,SAAWuW,EAAU1a,SAExDtI,WAAU,WACT1M,EAAKgvB,eACLc,EAAahjB,sBAIX9M,EAAO4I,QAAG,SAAOtI,GAAiB,OAAA0d,UAAAhe,OAAA,OAAA,GAAA,4DACxC,IAAiC,IAA7BpM,KAAKyJ,MAAM2yB,cACb,MAAO,CAAA,GAGT,GAAqB,IAAjB1vB,EAAM2vB,QAAgB3vB,EAAM4vB,SAAW5vB,EAAM6vB,kBAAoB7vB,EAAM8vB,QAIzE,MAAO,CAAA,GAIT,KADMf,EAAaz7B,KAAK07B,eAAehvB,IAErC,MAAO,CAAA,GAIT,GAAI+uB,EAAWxf,QAAgC,YAAtBwf,EAAWxf,OAClC,MAAO,CAAA,GAIT,KADIhP,EAAOwuB,EAAWlK,aAAa,SAEjC,MAAO,CAAA,GAGT,GAAIvxB,KAAKyJ,MAAMgzB,UACPC,EAAyB,CAC7BtY,IAAKnX,EACL0vB,WAAYlB,EACZmB,eAAc,WACZ58B,KAAKu8B,kBAAmB,GAE1BA,kBAAkB,GAGpBv8B,KAAKyJ,MAAMgzB,QAAQC,GAEfA,EAAWH,kBAGb,MAAO,CAAA,GAIX,IAAKv8B,KAAK27B,WAAW1uB,GAAO,CAE1B,KADM2uB,EAAY57B,KAAK67B,kBAAkB5uB,IAIvC,MAAO,CAAA,GAFPA,EAAO2uB,EAMX,OAAI3uB,EAAKlK,WAAW,OAKpB2J,EAAMkwB,iBAEN58B,KAAK68B,MAAM5vB,IANF,CAAA,UAoGHb,EAAYI,aAGT,OAwBb,OArT8BY,UAA+C8tB,EAAA/uB,GASpE+uB,EAAK1vB,UAAAqxB,MAAZ,SAAazY,SAIX,OAHApkB,KAAKm7B,QAAS,EAG2B,mBAAhB,QAAdz9B,EAAAD,OAAOq/B,eAAO,IAAAp/B,OAAA,EAAAA,EAAEq/B,YACzBD,QAAQC,UAAU,KAAM,GAAI3Y,GAC5BpkB,KAAKs7B,uBACE,IAEPtuB,SAASC,KAAOmX,GACT,IAIH8W,EAAA1vB,UAAA8vB,oBAAR,WACMt7B,KAAKwM,cAEPxM,KAAKwM,aAAalF,QAAO,SAAA/I,GAEvBA,EAAIyO,SAAQhF,SAAAA,SAAA,GACPzJ,EAAIyO,WACPuY,SAAUvY,SAASuY,SACnBnE,OAAQpU,SAASoU,OACjBrgB,KAAMiM,SAASuY,SAAS1d,MAAM,KAAKzG,MAAM,GACzCokB,MAAOtE,eAAelU,gBAM9B/N,OAAAoO,eAAY6tB,EAAK1vB,UAAA,QAAA,CAAjB8B,IAAA,WACE,OAAOtN,KAAKyJ,MAAM2O,OAAS,wCAG7B8iB,EAAA1vB,UAAAqE,kBAAA,WAC0B,oBAAbwF,WACTA,SAASvF,iBAAiB,QAAS9P,KAAKgV,SACxCvX,OAAOqS,iBAAiB,WAAY9P,KAAKq7B,YACzChmB,SAASvF,iBAAiB,YAAa9P,KAAKu7B,yBAC5ClmB,SAASvF,iBAAiB,aAAc9P,KAAKu7B,2BAIjDL,EAAA1vB,UAAAkE,qBAAA,WAC0B,oBAAb2F,WACTA,SAASzF,oBAAoB,QAAS5P,KAAKgV,SAC3CK,SAASzF,oBAAoB,YAAa5P,KAAKu7B,yBAC/C99B,OAAOmS,oBAAoB,WAAY5P,KAAKq7B,YAC5ChmB,SAASzF,oBAAoB,aAAc5P,KAAKu7B,2BAsIpDL,EAAA1vB,UAAAmI,OAAA,WAAA,IAkECvH,EAAApM,KAjESoY,EAAUpY,KAAIoY,MACtB,OACEzH,IAACzJ,oBAAoBwC,SAAQ,MAC1B,SAAAnG,GACC6I,EAAKI,aAAejJ,EAGpB,IAAM6gB,EACJ7gB,EAAMA,OACNA,EAAMA,MAAMyJ,UACZzJ,EAAMA,MAAMyJ,SAASuY,SAAWhiB,EAAMA,MAAMyJ,SAASoU,OAEvD,OACEzQ,IAAK,MAAA,CAAA+B,UAAU,8BAA6B0F,GAE1CzH,IAAO,QAAA,CAAAwF,MAAO5S,EAAM8D,QAAQ8O,OAAQ,i5BAwBpCxF,IAAC6Q,kBAICpiB,IAAKglB,EACLtmB,KAAMsO,EAAK3C,MAAM3L,KACjBsJ,QAASgF,EAAK+uB,YAASvwB,EAAYwB,EAAK3C,MAAMrC,QAC9CiR,UAAWD,EACXhP,QAAS,CACPhK,IAAK2C,QAAQ4N,eAAY/E,EAAYwB,EAAKgM,MAAQ,IAAMgM,GAE1DjO,MAAO5S,EAAM8D,QAAQ8O,OAIpB/J,EAAK3C,MAAMH,UACVqH,IAAK,MAAA,CAAA4B,IAAK,CAAEqB,QAAS,SACnBjD,IAAA,MAAA,CAAK4B,IAAK,CAAEia,OAAQ,aAAe9Z,UAAU,gCAWvDwoB,EAAc1vB,UAAAkwB,eAAtB,SAAuBhvB,GAIrB,IAFA,IAAI0I,EAAU1I,EAAMuP,OAEb7G,GAAS,CACd,GAAIA,aAAmB4nB,mBAAqB5nB,EAAQmc,aAAa,QAC/D,OAAOnc,EAGT,GAAIA,IAAY1I,EAAMuwB,cACpB,MAGF7nB,EAAUA,EAAQkc,cAGpB,OAAO,MAGD4J,EAAU1vB,UAAAmwB,WAAlB,SAAmB1uB,GACjB,OAAQA,EAAK9L,MAAM,yBASb+5B,EAAQ1vB,UAAAuwB,SAAhB,SAAiB3X,GACf,IAAM9iB,EAAI+T,SAASzL,cAAc,KAEjC,OADAtI,EAAE2L,KAAOmX,EACF9iB,GAGD45B,EAAiB1vB,UAAAqwB,kBAAzB,SAA0B5uB,GACxB,IAAMiwB,EAAal9B,KAAK+7B,SAAS/uB,SAASC,MACpCkwB,EAAUn9B,KAAK+7B,SAAS9uB,GAE9B,GAAIiwB,EAAWE,OAASD,EAAQC,KAAM,CACpC,IAAMC,EAAcF,EAAQ5X,UAAY4X,EAAQ/b,OAAS+b,EAAQ/b,OAAS,IAE1E,OAAIic,EAAYt6B,WAAW,KAClB,KAEFs6B,GAAe,IAGxB,OAAO,MAEVnC,EArTD,CAA8Bn0B,eAAMkN,WAuTvBqpB,OAASjS,YAAY6P,gBAAiB,CACjD/xB,KAAM,cACN6kB,oBAAoB,EAEpBvN,OAAQ,CACN,CAEEtX,KAAM,QACNtL,KAAM,SACNylB,aAAc,OACd0M,UAAU,GAEZ,CACE7mB,KAAM,gBACNtL,KAAM,UACNylB,cAAc,EACd0M,UAAU,GAEZ,CACE7mB,KAAM,iBACNtL,KAAM,UACNylB,cAAc,EACd0M,UAAU,GAEZ,CACE7mB,KAAM,UACNtL,KAAM,WACNmyB,UAAU,MChWV,SAAUuN,SAAS9zB,WACjByN,EAAMnQ,eAAMy2B,OAA8B,MAEhDC,mBAAmBh0B,EAAMi0B,UAAU,SAAAh7B,GAEd,aAAf+G,EAAM5L,OACR6E,EAAKqjB,UAAY,IAEnBrjB,EAAK0gB,YAAYlM,EAAIymB,QAASC,sBAGhC,IAAMt0B,EAA6B,QAAlB5L,EAAA+L,EAAMoJ,oBAAY,IAAAnV,OAAA,EAAAA,EAAE4L,SAErC,OACEqH,IAAA,OAAA,CAAMO,MAAO,CAAE0C,QAAS,QAAUsD,IAAKA,GACrCvG,IAACuD,cACC,CAAAhD,MAAO,CACL0C,QAAS,UAEXtD,SACAgE,gBAAqC,UAApB7K,EAAMoJ,oBAAc,IAAApE,OAAA,EAAAA,EAAA3F,GACrC0L,SAAS,gBACTE,OAAQpL,KAMhB,SAASm0B,mBAAmBC,EAAkBtD,GAC5CrzB,eAAM82B,iBAAgB,WACpB,IACE,IAAMC,EAAkBzoB,SAASC,cAAcooB,GAC/C,GAAII,EAEF,YADA1D,EAAG0D,GAGL,MAAOpkB,GACPvW,QAAQsB,KAAKiV,GAGf,IAAML,EAAW,IAAI0kB,kBAAiB,WACpC,IACE,IAAMC,EAAe3oB,SAASC,cAAcooB,GACxCM,IACF3kB,EAASoe,aACT2C,EAAG4D,IAEL,MAAOtkB,GACPvW,QAAQsB,KAAKiV,OAUjB,OANAL,EAASI,QAAQpE,SAASkP,KAAM,CAC9B3R,YAAY,EACZqrB,SAAS,EACTC,eAAe,IAGV,WACL7kB,EAASoe,gBAEV,CAACiG,IAlGN37B,QAAQglB,kBAAkBwW,SAAU,CAClCp0B,KAAM,mBACN2iB,iBAAiB,EACjBna,QAAQ,EACRqc,oBAAoB,EACpBvN,OAAQ,CACN,CACEtX,KAAM,OACNtL,KAAM,SACNylB,aAAc,UACd2M,KAAM,CACJ,CACE+G,MAAO,UACPj5B,MAAO,UACP+xB,WAAY,sEAEd,CACEkH,MAAO,SACPj5B,MAAO,WACP+xB,WAAY,yDAIlB,CACE3mB,KAAM,WAENtL,KAAM,0BChCL,IAAMyP,IAAM,SAAC/O,EAAUwC,EAAcuiB,GAC1C,IAAMlG,EAAS7U,OAAOiD,UAAU3D,MAC7B6D,KAAK3K,EAAM,aACXmP,OAAO9N,SACPf,QAAO,SAACoE,EAAKrG,GAAQ,OAACqG,MAAAA,EAAoCA,EAAIrG,GAAOqG,IAAMlH,GAC9E,YAAkBqM,IAAXwS,GAAwBA,IAAW7e,EAAM+kB,EAAelG,GC2B3D+gB,uBAAyB,sBACzBC,kBAAoB,mBACpBC,qBAAuB,oCAE7BC,cAAA,SAAAnyB,GAAA,SAAAmyB,IAAA,IAyTClyB,EAAA,OAAAD,GAAAA,EAAAvH,MAAA5E,KAAAlB,YAAAkB,YAxTCoM,EAAG8K,IAA2B,KAK9B9K,EAAA7I,MAAQ,CACNA,MAAO,cAEPg7B,aAAc,KACdC,iBAAkB,MA+StB,OAzT4BpxB,UAA0BkxB,EAAAnyB,GAapDlN,OAAAoO,eAAIixB,EAAe9yB,UAAA,kBAAA,CAAnB8B,IAAA,WACE,OAAQvL,QAAQ4N,WAAa3P,KAAKyJ,MAAMg1B,cAAiBz+B,KAAKuD,MAAMA,uCAGtE+6B,EAAA9yB,UAAAmI,OAAA,WAAA,IAuSCvH,EAAApM,KAtSC,OAEE2Q,IAACzJ,oBAAoBwC,SAAQ,MAC1B,SAAAnG,GAAS,OACRoN,IAACzJ,oBAAoBwM,SACnB,CAAA3V,MACKiK,SAAAA,SAAA,GAAAzE,GACH,CAAAA,MACKyE,SAAAA,SAAA,GAAAzE,EAAMA,OACT,CAAAi7B,iBAAkBpyB,EAAK7I,MAAMi7B,sBAIjC7tB,IAAA,OAAA3I,SAAA,GACQoE,EAAK3C,MAAMi1B,SAAkC,GAAvB,CAAEC,YAAY,GAAY,CACtDznB,IAAK,SAAAA,GAAO,OAAC9K,EAAK8K,IAAMA,GACxB0nB,QAASxyB,EAAK3C,MAAMo1B,YAAczyB,EAAK3C,MAAMm1B,OAASxyB,EAAK3C,MAAMm1B,YAASh0B,EAC1E0Z,OAAQlY,EAAK3C,MAAM6a,OACnBnb,KAAMiD,EAAK3C,MAAMN,KACjB21B,SAAU,SAAApyB,SACFmyB,EACJzyB,EAAK3C,MAAMo1B,YAA+C,UAAjCzyB,EAAK3C,MAAMs1B,kBAGtC,GAAqC,WAAjC3yB,EAAK3C,MAAMs1B,kBACbryB,EAAMkwB,sBAED,GAAIiC,EAAY,CACrB,IAAMzyB,EAAK3C,MAAMm1B,QAA2C,UAAjCxyB,EAAK3C,MAAMs1B,kBAEpC,YADAryB,EAAMkwB,iBAGRlwB,EAAMkwB,iBAGN,IAAMzW,EAAKzZ,EAAMuwB,cACXzY,EAAUpY,EAAK3C,MAAMu1B,eAAiB,GAExCza,SAEE0a,EAAW,IAAIC,SAAS/Y,GAGxBgZ,EAGAn+B,MAAMooB,KAAK1c,EAAMuwB,cAAc/L,iBAAiB,0BACnDhhB,QAAO,SAAAiW,GAAM,QAAGA,EAAwBhd,QACxC+G,QACC,SAAAiW,GACE,QAAGA,EAAwBhd,OACQ,UAAjCgd,EAAwBtoB,MACvBsoB,EAAwBiZ,YAE9Bj6B,KAAI,SAAAghB,GACH,IAAIpoB,EACEqB,EAAO+mB,EAAwBhd,KACrC,GAAIgd,aAAckZ,iBAChB,GAAgB,UAAZlZ,EAAGtoB,MACL,GAAIsoB,EAAGiZ,QAEL,MAAO,CAAEhgC,IAAGA,EAAErB,MADdA,EAAQooB,EAAGpoB,YAGR,GAAgB,aAAZooB,EAAGtoB,KACZE,EAAQooB,EAAGiZ,aACN,GAAgB,WAAZjZ,EAAGtoB,MAAiC,UAAZsoB,EAAGtoB,KAAkB,CACtD,IAAMi5B,EAAM3Q,EAAGmZ,cACVzL,MAAMiD,KACT/4B,EAAQ+4B,QAIV/4B,EAFqB,SAAZooB,EAAGtoB,KAEJsoB,EAAGwB,MAEHxB,EAAGpoB,WAGbA,EAASooB,EAAwBpoB,MAGnC,MAAO,CAAEqB,IAAGA,EAAErB,MAAKA,MAGnBwhC,EAAcnzB,EAAK3C,MAAM+1B,YAgB7B,GAdqC,UAAjCpzB,EAAK3C,MAAMs1B,oBACbQ,EAAcpB,wBAGhBn9B,MAAMooB,KAAK+V,GAAWh1B,SAAQ,SAACzM,GAAE,IAAAK,EAAKL,EAAAK,OAElCA,aAAiB0hC,MAChBz+B,MAAMC,QAAQlD,IAAUA,EAAM,aAAc0hC,MAC7C1hC,aAAiB2hC,YAEjBH,EAAcpB,2BAIdoB,IAAgBpB,uBAClB5Z,EAAO0a,OACF,GAAIM,IAAgBnB,kBAAmB,CAC5C,IAAMuB,EAAO,GAEb3+B,MAAMooB,KAAK+V,GAAWh1B,SAAQ,SAACzM,OAAEK,EAAKL,EAAAK,MAAEqB,EAAG1B,EAAA0B,IACzCyB,IAAI8+B,EAAMvgC,EAAKrB,MAGjBwmB,EAAO/lB,KAAKE,UAAUihC,OACjB,CAAA,GAAIJ,IAAgBlB,qBAazB,YADAl7B,QAAQkB,MAAM,6BAA8Bk7B,GAX5Chb,EAAOvjB,MAAMooB,KAAK+V,GACfh6B,KAAI,SAACzH,OAAEK,EAAKL,EAAAK,MAAEqB,EAAG1B,EAAA0B,IAChB,OACEq0B,mBAAmBr0B,GACnB,IACAq0B,mBAAmB11B,MAGtBgI,KAAK,KAONw5B,GAAeA,IAAgBpB,yBAG7BU,IAA+B,QAAjBnhC,EAAA0O,EAAK3C,MAAMm1B,cAAM,IAAAlhC,OAAA,EAAAA,EAAEwF,SAAS,iBAE5CshB,EAAQ,gBAAkB+a,IAI9B,IAAMK,EAAiB,IAAI1Y,YAAY,YAAa,CAClDC,OAAQ,CACN5C,KAAIA,KAGR,GAAInY,EAAK8K,MACP9K,EAAK8K,IAAI+P,cAAc2Y,GACnBA,EAAerD,kBACjB,OAIJnwB,EAAKe,SAAQnF,SAAAA,SAAA,GACRoE,EAAK7I,OAAK,CACbA,MAAO,aAGT,IAAMs8B,EAAU,GAAAz7B,OACE,QAAhBZ,QAAQlB,IAAgB,wBAA0B,qBACtB,+BAAA8B,OAAAZ,QAAQic,OAAM,QAAArb,OAAO07B,KACjD1zB,EAAK3C,MAAMs2B,wBAA0B,IAC7B,UAAA37B,OAAAqvB,mBAAmBrnB,EAAK3C,MAAMN,MAAQ,KAEhD4X,MACmC,UAAjC3U,EAAK3C,MAAMs1B,kBAAgCc,EAAUzzB,EAAK3C,MAAMm1B,OAChE,CACEra,KAAIA,EACJC,QAAOA,EACPF,OAAQlY,EAAK3C,MAAM6a,QAAU,SAE/B1d,MACA,SAAMnB,GAAG,OAAA2kB,UAAAhe,OAAA,OAAA,GAAA,qFAGH,OADEozB,EAAc/5B,EAAI+e,QAAQlX,IAAI,mBAC2B,IAA5CkyB,EAAYh7B,QAAQ45B,mBAC9B,CAAA,EAAM34B,EAAIglB,QAD6C,CAAA,EAAA,iBAC9DlG,EAAO7mB,eAEA,KAAA,EAAA,MAAA,CAAA,EAAM+H,EAAI4D,eAAjBkb,EAAO7mB,0BA0BT,IAvBK+H,EAAIu6B,IAAMhgC,KAAKyJ,MAAMw2B,mBAEpB17B,EAAU+I,IAAIiX,EAAMvkB,KAAKyJ,MAAMw2B,qBAGV,iBAAZ17B,IAGTA,EAAU/F,KAAKE,UAAU6F,IAE3BvE,KAAKmN,SAAQnF,SAAAA,SAAA,GACRhI,KAAKuD,OAAK,CACbi7B,iBAAkBj6B,MAKxBvE,KAAKmN,SAAQnF,SAAAA,SAAA,GACRhI,KAAKuD,OACR,CAAAg7B,aAAcha,EACdhhB,MAAOkC,EAAIu6B,GAAK,UAAY,WAG1Bv6B,EAAIu6B,GAAI,CASV,GANME,EAAqB,IAAIhZ,YAAY,iBAAkB,CAC3DC,OAAQ,CACN1hB,IAAGA,EACH8e,KAAIA,KAGJvkB,KAAKkX,IAAK,CAEZ,GADAlX,KAAKkX,IAAI+P,cAAciZ,GACnBA,EAAmB3D,iBACrB,MAAO,CAAA,IAG4B,IAAjCv8B,KAAKyJ,MAAM02B,mBACbngC,KAAKkX,IAAIkpB,QAKTpgC,KAAKyJ,MAAM42B,aACTrgC,KAAKkX,KACDopB,EAAQ,IAAIpZ,YAAY,QAAS,CACrCC,OAAQ,CACN/C,IAAKpkB,KAAKyJ,MAAM42B,cAGpBrgC,KAAKkX,IAAI+P,cAAcqZ,GAClBA,EAAM/D,mBACTvvB,SAASC,KAAOjN,KAAKyJ,MAAM42B,aAG7BrzB,SAASC,KAAOjN,KAAKyJ,MAAM42B,gCAKnC,SAAA3mB,GACE,IAAM6mB,EAAmB,IAAIrZ,YAAY,eAAgB,CACvDC,OAAQ,CACN9iB,MAAOqV,KAGPtN,EAAK8K,MACP9K,EAAK8K,IAAI+P,cAAcsZ,GACnBA,EAAiBhE,mBAMvBnwB,EAAKe,SACAnF,SAAAA,SAAA,GAAAoE,EAAK7I,OAAK,CACbg7B,aAAc7kB,EACdnW,MAAO,iBAMb6I,EAAK3C,MAAMmJ,YAGdxG,EAAK3C,MAAMoJ,cACVzG,EAAK3C,MAAMoJ,aAAavJ,UACxB8C,EAAK3C,MAAMoJ,aAAavJ,SAASnE,KAAI,SAACyD,EAAOvD,GAAU,OACrDsL,IAACod,eAAsB,CAAA3uB,IAAKwJ,EAAME,GAAIF,MAAOA,OAGvB,UAAzBwD,EAAKo0B,iBACJ7vB,IAACuD,cAAc,CAAAM,SAAS,eAAeE,OAAQtI,EAAK3C,MAAMg3B,eAGlC,YAAzBr0B,EAAKo0B,iBACJ7vB,IAACuD,cAAc,CAAAM,SAAS,iBAAiBE,OAAQtI,EAAK3C,MAAMi3B,iBAIpC,UAAzBt0B,EAAKo0B,iBAA+Bp0B,EAAK7I,MAAMg7B,cAE9C5tB,IAAA,MAAA,CACE+B,UAAU,0BACVH,IAAK,CAAEsB,QAAS,GAAIC,MAAO,MAAO+Y,UAAW,WAE5CruB,KAAKE,UAAU0N,EAAK7I,MAAMg7B,aAAc,KAAM,IAIzB,YAAzBnyB,EAAKo0B,iBACJ7vB,IAACuD,cAAc,CAAAM,SAAS,iBAAiBE,OAAQtI,EAAK3C,MAAMk3B,uBAQ3ErC,EAzTD,CAA4Bv3B,eAAMkN,WA2TrB2sB,KAAOvV,YAAYiT,cAAe,CAC7Cn1B,KAAM,YAENgc,SAAU,CACRtX,iBAAkB,CAChBhO,MAAO,CACLwuB,UAAW,OACXsL,cAAe,UAIrBxM,MACE,+GACF1M,OAAQ,CACN,CACEtX,KAAM,oBACNtL,KAAM,SAMNoyB,KAAM,CACJ,CACE+G,MAAO,gBACPj5B,MAAO,QACP+xB,WAAY,+DAEd,CACEkH,MAAO,SACPj5B,MAAO,SACP+xB,WACE,mGAGNxM,aAAc,SAEhB,CACEna,KAAM,yBACNtL,KAAM,SACNuvB,UAAU,EACV9J,aAAc,iBACdud,OAAQ,gDAEV,CACE13B,KAAM,aACNtL,KAAM,UACNiyB,WAAY,6CACZxM,cAAc,EACdud,OAAQ,iDAEV,CACE13B,KAAM,OACNtL,KAAM,SACNylB,aAAc,WAGhB,CACEna,KAAM,SACNtL,KAAM,SACNiyB,WAAY,+BACZ+Q,OAAQ,iDAEV,CACE13B,KAAM,cACNtL,KAAM,SACNylB,aAAc8a,kBACdpO,UAAU,EAEVC,KAAM,CAACmO,kBAAmBD,uBAAwBE,sBAClDwC,OAAQ,uFAEV,CACE13B,KAAM,SACNtL,KAAM,SACNgjC,OAAQ,gDACRvd,aAAc,OACd0M,UAAU,GAEZ,CACE7mB,KAAM,eACNtL,KAAM,SAENoyB,KAAM,CAAC,cAAe,UAAW,UAAW,SAC5C3M,aAAc,cACdwM,WACE,uGACF+Q,OAAQ,uFAEV,CACE13B,KAAM,aACNtL,KAAM,MACNiyB,WAAY,kEACZ+Q,OAAQ,uFAEV,CACE13B,KAAM,oBACNtL,KAAM,UACNgjC,OAAQ,SAAAz3B,GACN,MAAqC,WAArCA,EAAQkE,IAAI,uBAAmE,IAA9BlE,EAAQkE,IAAI,eAC/D0iB,UAAU,GAEZ,CACE7mB,KAAM,iBACNtL,KAAM,WACNgyB,YAAY,EACZvM,aAAc,CACZ,CACE5D,QAAS,0BACT7R,iBAAkB,CAChBhO,MAAO,CACLwuB,UAAW,SAGfnlB,UAAW,CACTC,KAAM,OACNC,QAAS,CACPC,KAAM,4BAMhB,CACEF,KAAM,WACNtL,KAAM,UACNylB,cAAc,EACd0M,UAAU,GAEZ,CACE7mB,KAAM,mBACNtL,KAAM,OACNmyB,UAAU,EACVF,WACE,uLAEJ,CACE3mB,KAAM,eACNtL,KAAM,WACNgyB,YAAY,EACZvM,aAAc,CACZ,CACE5D,QAAS,0BACT7R,iBAAkB,CAChBhO,MAAO,CACLwuB,UAAW,SAGfte,SAAU,CACR+wB,yBAA0B,0DAE5B53B,UAAW,CACTC,KAAM,OACNC,QAAS,CAEPC,KAAM,qFAMhB,CACEF,KAAM,iBACNtL,KAAM,WACNgyB,YAAY,EACZvM,aAAc,CACZ,CACE5D,QAAS,0BACT7R,iBAAkB,CAChBhO,MAAO,CACLwuB,UAAW,SAGfnlB,UAAW,CACTC,KAAM,OACNC,QAAS,CAEPC,KAAM,+BAOdrB,SAAAA,SAAA,CAAAmB,KAAM,gBACNtL,KAAM,OAEF,CACFkjC,UAAW,CACTljC,KAAM,YAED,CACTmyB,UAAU,EACV6Q,OAAQ,yFAMZlvB,QAAQ,EAERma,iBAAiB,EACjBgP,gBAAiB,CACf,CACEpb,QAAS,0BACT7R,iBAAkB,CAChBhO,MAAO,CACLwuB,UAAW,SAGfnlB,UAAW,CACTC,KAAM,OACNC,QAAS,CACPC,KAAM,kCAIZ,CACEqW,QAAS,0BACT7R,iBAAkB,CAChBhO,MAAO,CACLwuB,UAAW,SAGfnlB,UAAW,CACTC,KAAM,aACNC,QAAS,CACPD,KAAM,OACN63B,YAAa,cAInB,CACEthB,QAAS,0BACT7R,iBAAkB,CAChBhO,MAAO,CACLwuB,UAAW,SAGfnlB,UAAW,CACTC,KAAM,OACNC,QAAS,CACPC,KAAM,mCAIZ,CACEqW,QAAS,0BACT7R,iBAAkB,CAChBhO,MAAO,CACLwuB,UAAW,SAGfnlB,UAAW,CACTC,KAAM,aACNC,QAAS,CACPD,KAAM,QACN63B,YAAa,kBAInB,CACEthB,QAAS,0BACT7R,iBAAkB,CAChBhO,MAAO,CACLwuB,UAAW,SAGfnlB,UAAW,CACTC,KAAM,oBACNC,QAAS,CACPC,KAAM,eC3lBhB43B,mBAAA,SAAA90B,GAAA,SAAA80B,mDAoBA,OApBiC7zB,UAA+B6zB,EAAA90B,GAC9D80B,EAAAz1B,UAAAmI,OAAA,WACE,OACE5M,eACE6C,cAAA,QAAA5B,SAAA,CAAA5I,IAAK2C,QAAQ4N,WAAa3P,KAAKyJ,MAAM6Z,aAAetjB,KAAKyJ,MAAM6Z,aAAe,cAC9E0d,YAAahhC,KAAKyJ,MAAMu3B,YACxBnjC,KAAMmC,KAAKyJ,MAAM5L,KACjBsL,KAAMnJ,KAAKyJ,MAAMN,WACgB,IAArBnJ,KAAKyJ,MAAM1L,MACnB,CACEulB,aAActjB,KAAKyJ,MAAM6Z,cAE3B,CACEvlB,MAAOiC,KAAKyJ,MAAM1L,QAExBqvB,SAAUptB,KAAKyJ,MAAM2jB,UACjBptB,KAAKyJ,MAAMmJ,cAItBquB,EApBD,CAAiCl6B,eAAMkN,WAsB1BitB,UAAY7V,YAAY4V,mBAAoB,CACvD93B,KAAM,aACNgkB,MACE,+GACF1M,OAAQ,CACN,CACEtX,KAAM,OACNtL,KAAM,OACNoyB,KAAM,CACJ,OACA,SACA,QACA,MACA,WACA,QACA,QACA,OACA,iBACA,SACA,MACA,OACA,OACA,QACA,OACA,WACA,QACA,UAEF3M,aAAc,QAEhB,CACEna,KAAM,OACNtL,KAAM,SACNuvB,UAAU,EACV0C,WACE,oFAEJ,CACE3mB,KAAM,cACNtL,KAAM,SACNylB,aAAc,cACdwM,WAAY,0CAGd,CACE3mB,KAAM,eACNtL,KAAM,UAER,CACEsL,KAAM,QACNtL,KAAM,SACNmyB,UAAU,GAGZ,CACE7mB,KAAM,WACNtL,KAAM,UACNiyB,WAAY,2DACZxM,cAAc,IAYlB3R,QAAQ,EACRub,QAAQ,EACRK,cAAe,CACb6I,WAAY,OACZuD,cAAe,OACfC,YAAa,OACbC,aAAc,OACd3B,aAAc,MACdiJ,YAAa,MACbC,YAAa,QACbC,YAAa,UChHjBC,0BAAA,SAAAn1B,GAAA,SAAAm1B,mDAQA,OARwCl0B,UAA4Bk0B,EAAAn1B,GAClEm1B,EAAA91B,UAAAmI,OAAA,WACE,OACE5M,eAAQ6C,cAAA,SAAA5B,SAAA,CAAAnK,KAAK,UAAamC,KAAKyJ,MAAMmJ,YAClC5S,KAAKyJ,MAAMJ,OAInBi4B,EARD,CAAwCv6B,eAAMkN,WAUjCstB,iBAAmBlW,YAAYiW,0BAA2B,CACrEn4B,KAAM,oBACNgkB,MACE,+GACFI,cAAe,CACbmM,WAAY,OACZtD,WAAY,OACZuD,cAAe,OACfC,YAAa,OACbC,aAAc,OACdC,gBAAiB,UACjBhmB,MAAO,QACPokB,aAAc,MACd6B,OAAQ,WAEVtZ,OAAQ,CACN,CACEtX,KAAM,OACNtL,KAAM,OACNylB,aAAc,aAGlB4J,QAAQ,EACRvb,QAAQ,IC7BV6vB,eAAA,SAAAr1B,GAAA,SAAAq1B,mDAoBA,OApB6Bp0B,UAA2Bo0B,EAAAr1B,GACtDq1B,EAAAh2B,UAAAmI,OAAA,WACE,OACE5M,eAAA6C,cAAA,QAAA5B,SAAA,CAAOy5B,QAASzhC,KAAKyJ,MAAMi4B,KAAS1hC,KAAKyJ,MAAMmJ,YAC5C5S,KAAKyJ,MAAMJ,MACVtC,eACE6C,cAAA,OAAA,CAAA8I,UAAU,qBACV9B,wBAAyB,CACvBC,OAAQ7Q,KAAKyJ,MAAMJ,QAIxBrJ,KAAKyJ,MAAMoJ,cACV7S,KAAKyJ,MAAMoJ,aAAavJ,UACxBtJ,KAAKyJ,MAAMoJ,aAAavJ,SAASnE,KAAI,SAAAoE,GAAQ,OAC3CxC,eAAC6C,cAAAmkB,eAAsB,CAAA3uB,IAAKmK,EAAKT,GAAIF,MAAOW,SAKvDi4B,EApBD,CAA6Bz6B,eAAMkN,WAwBtB0tB,MAAQtW,YAAYmW,eAAgB,CAC/Cr4B,KAAM,aACNgkB,MACE,+GACF1M,OAAQ,CACN,CACEtX,KAAM,OACNtL,KAAM,OACN+jC,UAAU,EACVte,aAAc,SAEhB,CACEna,KAAM,MACNtL,KAAM,OACNiyB,WAAY,0CACZE,UAAU,IAGdre,QAAQ,EACRub,QAAQ,EACRpB,iBAAiB,IC3CnB+V,oBAAA,SAAA11B,GAAA,SAAA01B,mDAmBA,OAnBkCz0B,UAAgCy0B,EAAA11B,GAChE01B,EAAAr2B,UAAAmI,OAAA,WACU,IAAAvK,EAAYpJ,KAAKyJ,cACzB,OACE1C,eAAA6C,cAAA,SAAA5B,SAAA,CACEjK,MAAOiC,KAAKyJ,MAAM1L,MAClBqB,IAAK2C,QAAQ4N,WAAa3P,KAAKyJ,MAAM6Z,aAAetjB,KAAKyJ,MAAM6Z,aAAe,cAC9EA,aAActjB,KAAKyJ,MAAM6Z,aACzBna,KAAMnJ,KAAKyJ,MAAMN,KACjBikB,SAAUptB,KAAKyJ,MAAM2jB,UACjBptB,KAAKyJ,MAAMmJ,YAEdxJ,GACCA,EAAQjE,KAAI,SAAA28B,GAAU,OACpB/6B,eAAQ6C,cAAA,SAAA,CAAA7L,MAAO+jC,EAAO/jC,OAAQ+jC,EAAO34B,MAAQ24B,EAAO/jC,YAK/D8jC,EAnBD,CAAkC96B,eAAMkN,WAqB3B8tB,WAAa1W,YAAYwW,oBAAqB,CACzD14B,KAAM,cACNgkB,MACE,+GACFI,cAAe,CACbgN,UAAW,cAEb9Z,OAAQ,CACN,CACEtX,KAAM,UACNtL,KAAM,OACNuvB,UAAU,EACVwC,UAAW,CACT,CACEzmB,KAAM,QACNtL,KAAM,OACNuvB,UAAU,GAEZ,CACEjkB,KAAM,OACNtL,KAAM,SAGVylB,aAAc,CACZ,CACEvlB,MAAO,YAET,CACEA,MAAO,cAIb,CACEoL,KAAM,OACNtL,KAAM,SACNuvB,UAAU,EACV0C,WACE,oFAEJ,CACE3mB,KAAM,eACNtL,KAAM,UAER,CACEsL,KAAM,QACNtL,KAAM,SACNmyB,UAAU,GAGZ,CACE7mB,KAAM,WACNtL,KAAM,UACNylB,cAAc,IAGlB4J,QAAQ,EACRvb,QAAQ,IC9EVqwB,kBAAA,SAAA71B,GAAA,SAAA61B,mDAaA,OAbgC50B,UAAkC40B,EAAA71B,GAChE61B,EAAAx2B,UAAAmI,OAAA,WACE,OACE5M,kDACEi6B,YAAahhC,KAAKyJ,MAAMu3B,YACxB73B,KAAMnJ,KAAKyJ,MAAMN,KACjBpL,MAAOiC,KAAKyJ,MAAM1L,MAClBulB,aAActjB,KAAKyJ,MAAM6Z,aACzB8J,SAAUptB,KAAKyJ,MAAM2jB,UACjBptB,KAAKyJ,MAAMmJ,cAItBovB,EAbD,CAAgCj7B,eAAMkN,WAezBguB,SAAW5W,YAAY2W,kBAAmB,CACrD74B,KAAM,gBACNgkB,MACE,+GACF1M,OAAQ,CACN,CACEuP,UAAU,EACV7mB,KAAM,QACNtL,KAAM,UAER,CACEsL,KAAM,OACNtL,KAAM,SACNuvB,UAAU,EACV0C,WAAY,mFAEd,CACE3mB,KAAM,eACNtL,KAAM,UAER,CACEsL,KAAM,cACNtL,KAAM,SACNylB,aAAc,eAEhB,CACEna,KAAM,WACNtL,KAAM,UACNylB,cAAc,IAGlBiK,cAAe,CACb6I,WAAY,OACZuD,cAAe,OACfC,YAAa,OACbC,aAAc,OACd3B,aAAc,MACdiJ,YAAa,MACbC,YAAa,QACbC,YAAa,QAEfnU,QAAQ,EACRvb,QAAQ,IClDVuwB,aAAA,SAAA/1B,GAAA,SAAA+1B,mDA6CA,OA7C2B90B,UAAyB80B,EAAA/1B,GAClD+1B,EAAA12B,UAAAkoB,UAAA,WACE,IAAMtP,EAAMpkB,KAAKyJ,MAAM0jB,MACvB,GAAK/I,GAAsB,iBAARA,GAKdA,EAAIjjB,MAAM,eAIf,OAAOuyB,UAAUtP,IAGnB8d,EAAA12B,UAAAmI,OAAA,WACE,IAAMf,EAAa5S,KAAKyJ,MAAMmJ,YAAc,GACtC2iB,EAASv1B,KAAK0zB,YAELyO,EAAiCvvB,EAAxB1B,MAAKkxB,EAActb,OAAKlU,EAA1C,CAAuC,UAEvCyvB,EAAoC,CACxCtM,UAAW/1B,KAAKyJ,MAAMglB,eACtBuH,eAAgBh2B,KAAKyJ,MAAM+kB,mBAC3BE,YAAa1uB,KAAKyJ,MAAMilB,aAGpB4T,EACDt6B,SAAAA,SAAA,GAAAq6B,GACCF,GAGN,OACEp7B,6CACEoQ,QAAQ,QACJirB,EACJ,CAAAviB,IAAK7f,KAAKyJ,MAAM0jB,OAASva,EAAWiN,IACpCsW,OAAQZ,EACRM,IAAK71B,KAAKyJ,MAAMqsB,QAChBjT,MAAO7iB,KAAKyJ,MAAMoZ,MAClB3R,MAAOoxB,EACP5vB,UAAU,sBAIjBwvB,EA7CD,CAA2Bn7B,eAAMkN,WA+CpBsuB,IAAMlX,YAAY6W,aAAc,CAC3C/4B,KAAM,UACN6kB,oBAAoB,EAEpBb,MACE,uKACF1M,OAAQ,CACN,CACEtX,KAAM,QACNmkB,QAAQ,EACRzvB,KAAM,OACNy4B,iBAAkBpE,iBAClB9E,UAAU,GAEZ,CACEjkB,KAAM,iBACNtL,KAAM,OACNylB,aAAc,QACd2M,KAAM,CACJ,CACE+G,MAAO,UACPj5B,MAAO,UACP+xB,WAAY,sCAEd,CACEkH,MAAO,QACPj5B,MAAO,QACP+xB,WAAY,0DAIlB,CACE3mB,KAAM,qBACNtL,KAAM,OACNylB,aAAc,SACd2M,KAAM,CACJ,SACA,MACA,OACA,QACA,SACA,WACA,YACA,cACA,iBAGJ,CACE9mB,KAAM,UACNtL,KAAM,SACNiyB,WAAY,gDAEd,CACE3mB,KAAM,QACNtL,KAAM,SACNiyB,WAAY,gDAEd,CACE3mB,KAAM,cACNtL,KAAM,SACNiyB,WACE,0JACFE,UAAU,EACV1M,aAAc,QAIlB3R,QAAQ,IC5HG6wB,QAAU,SAAC/4B,GACtB,IAAMmJ,EAAanJ,EAAMmJ,YAAc,GACvC,OACE7L,MAAA6C,cAAA,OAAA,CACE8I,WAAWE,MAAAA,OAAU,EAAVA,EAAY7J,SAAS6J,MAAAA,OAAU,EAAVA,EAAYF,WAC5C9B,wBAAyB,CAAEC,OAAQpH,EAAMJ,MAAQ,OAKvDtH,QAAQglB,kBAAkByb,QAAS,CACjCr5B,KAAM,kBACN6kB,oBAAoB,EACpBvN,OAAQ,CACN,CACEtX,KAAM,OACNmkB,QAAQ,EACRzvB,KAAM,WACNuvB,UAAU,MCDT,IAAMqV,gCAAkC,s2CAEzC,SAAUC,0BACdvG,EACA3W,EACAmd,EACAC,GAEA,IAAMr5B,EAAO,CACXic,MAAKA,EACLmd,UAASA,EACTC,QAAOA,GAGHnkB,EAAO0d,EAAe0G,MAAQ,IAAIplB,KAAK0e,EAAe0G,OAAU,IAAIplB,KAE1E,QAAIlU,EAAKo5B,WAAa,IAAIllB,KAAKlU,EAAKo5B,WAAalkB,OAEtClV,EAAKq5B,SAAW,IAAInlB,KAAKlU,EAAKq5B,SAAWnkB,MAI/ClV,EAAKic,QAAUjc,EAAKic,MAAMzmB,QAIxBwK,EAAKic,MAAMoG,OAAM,SAAC1b,GACvB,OAAO4yB,mBAAmB3G,EAAgBjsB,QAI9C,SAAS6yB,SAASrc,GAChB,MAAsB,iBAARA,EAGhB,SAASsc,SAAStc,GAChB,MAAsB,iBAARA,EAGhB,SAASoc,mBAAmBG,EAA0Bzd,GA6DpD,OA5De,WACb,IAAMrd,EAAWqd,EAAMrd,SACjB+6B,EAAW1d,EAAM0d,SACnBC,EAAY3d,EAAMznB,MActB,GAXEynB,GACmB,YAAnBA,EAAMrd,UACNqd,EAAMznB,OACiB,iBAAhBynB,EAAMznB,OACG,MAAhBynB,EAAMznB,OACNynB,EAAMznB,MAAMqlC,SAAS,OAErBD,EAAY3d,EAAMznB,MAAMqD,MAAM,GAAI,KAI9B+G,IAAY+6B,EAChB,OAAO,EAGT,GAAIliC,MAAMC,QAAQkiC,GAChB,MAAiB,UAAbD,EACKC,EAAUvX,OAAM,SAAAlF,GACrB,OAAAoc,mBAAmBG,EAAU,CAAE96B,SAAQA,EAAE+6B,WAAUnlC,MAAO2oB,SAGrDyc,EAAUh0B,MAAK,SAAAuX,GACtB,OAAAoc,mBAAmBG,EAAU,CAAE96B,SAAQA,EAAE+6B,WAAUnlC,MAAO2oB,OAG9D,IAAM3oB,EAAQklC,EAAS96B,GAEvB,GAAInH,MAAMC,QAAQlD,GAChB,OAAOA,EAAMmF,SAASigC,GAGxB,OAAQD,GACN,IAAK,KACH,OAAOnlC,IAAUolC,EACnB,IAAK,QACH,OAAOplC,IAAUolC,EACnB,IAAK,WACH,OAAQJ,SAAShlC,IAAUiD,MAAMC,QAAQlD,KAAWA,EAAMmF,SAASqF,OAAO46B,IAC5E,IAAK,aACH,OAAOJ,SAAShlC,IAAUA,EAAMgF,WAAWwF,OAAO46B,IACpD,IAAK,WACH,OAAOJ,SAAShlC,IAAUA,EAAMqlC,SAAS76B,OAAO46B,IAClD,IAAK,cACH,OAAOH,SAASjlC,IAAUilC,SAASG,IAAcplC,EAAQolC,EAC3D,IAAK,WACH,OAAOH,SAASjlC,IAAUilC,SAASG,IAAcplC,EAAQolC,EAC3D,IAAK,uBACH,OAAOH,SAASjlC,IAAUilC,SAASG,IAAcplC,GAASolC,EAC5D,IAAK,oBACH,OAAOH,SAASjlC,IAAUilC,SAASG,IAAcplC,GAASolC,EAE9D,OAAO,EAzDM,GCxCX,SAAUE,yBAAyB55B,iDACjC65B,EAAkBlhC,QACtBL,QAAQmC,YAA0C,QAA7BxG,EAACD,OAAe8lC,kBAAa,IAAA7lC,OAAA,EAAAA,UAAA+Q,EAAAhF,EAAMoJ,mCAAc/J,MAElE06B,EAAUhG,OAAuB,MACjCiG,EAA0BnyB,SAASgyB,GAAlCI,EAAQD,EAAA,GAAEE,EAAWF,EAAA,GACtBG,EAA8BtyB,UAAS,GAAtCuyB,EAAUD,EAAA,GAAEE,EAAaF,EAAA,GAC1BG,EAAiBzyB,SAAS,GAAxByyB,EAAA,GAAE,IAAAC,EAASD,EAAA,GACbE,EAAexW,WAAWvmB,qBAiDhC,GA/CAg9B,WAAU,iBACRP,GAAY,GACZG,GAAc,GACd,IAAMK,EAAa3gC,QAAQ4gC,sBAAsBtrB,WAAU,WACzDkrB,GAAU,SAAAK,GAAQ,OAAAA,EAAO,QAEvBC,EAAS,CAAC,WAAM,OAAAH,EAAWjrB,gBAE/B,IAAMnX,QAAQ4N,YAAa5N,QAAQyW,aAAe,CAChD,IAAM+rB,EAAUC,EAAiB,GAEhB,QAAjB9mC,EAAA8lC,EAAQ7F,eAAS,IAAAjgC,GAAAA,EAAAupB,cACf,IAAIC,YAAY,wBAAyB,CACvCC,OAAQ,CACNpQ,QAASwtB,GAAW,UACpBn9B,QAAS68B,EAAa78B,SAExBq9B,SAAS,KAKb,IAAMpK,EAAW,IAAIjhB,sBAAqB,SAAA/O,GACxCA,EAAQF,SAAQ,SAAAmP,SACVA,EAAMke,iBACS,QAAjB95B,EAAA8lC,EAAQ7F,eAAS,IAAAjgC,GAAAA,EAAAupB,cACf,IAAIC,YAAY,2BAA4B,CAC1CC,OAAQ,CACNpQ,QAASwtB,GAAW,UACpBn9B,QAAS68B,EAAa78B,SAExBq9B,SAAS,YAOnBpK,EAAS5gB,QAAQ+pB,EAAQ7F,SACzB2G,EAAOhgC,MAAK,WAAM,OAAA+1B,EAAS5C,gBAG7B,OAAO,WACL6M,EAAOn6B,SAAQ,SAAAlG,GAAM,OAAAA,UAEtB,IAEClC,QAAQC,SACV,OACE+E,eAAA6C,cAAC7C,eAAMsL,SAAQ,KACbtL,eACM6C,cAAA,MAAA5B,SAAA,GAAAyB,EAAMmJ,WAAU,CAEpB1B,MACElJ,SAAA,CAAA+X,QAAS,EACT1Q,WAAY,4BACO,QAAhBV,EAAAlF,EAAMmJ,kBAAU,IAAAjE,OAAA,EAAAA,EAAEuC,OAEvBwB,UAAW,qCAAqCtO,OAAAqF,EAAMmJ,WAAWF,aAElD,QAAd1D,EAAAvF,EAAM6M,gBAAQ,IAAAtH,OAAA,EAAEA,EAAA7J,KAAI,SAAC4R,EAAS1R,WAAU,OACvC0B,eAAA6C,cAAA,WAAA,CAAUxK,IAAKiG,EAAwBq/B,mBAAoB,QAApBhnC,EAAA+L,EAAMoJ,oBAAc,IAAAnV,OAAA,EAAAA,EAAAoL,IAAMzD,GAC/D0B,eAAC6C,cAAAsK,cACC,CAAAQ,OAAQqC,EAAQrC,OAChBJ,gBAAmC,QAAlB7F,EAAAhF,EAAMoJ,oBAAY,IAAApE,OAAA,EAAAA,EAAE3F,GACrC0L,SAAU,8BAA8BpQ,OAAAiB,EAAc,WACtDiL,OAAK,QAIXvJ,eACE6C,cAAA,SAAA,CAAAuM,MAAO8tB,EAAa58B,QAAQ8O,MAC5BrN,GAAI,0BAAqC,QAAlBiG,EAAAtF,EAAMoJ,oBAAY,IAAA9D,OAAA,EAAAA,EAAEjG,IAC3C8H,wBAAyB,CACvBC,OAAQ8zB,yBACNl7B,EAAM6M,kBACNlH,EAAA3F,EAAMoJ,mCAAc/J,KAAM,OACA,QAA1BuH,EAAA5G,EAAMqJ,aAAavP,aAAO,IAAA8M,OAAA,EAAAA,EAAA1F,WAIhC5D,eAAC6C,cAAAsK,cACC,CAAAQ,OAA0B,QAAlB8f,EAAA/qB,EAAMoJ,oBAAY,IAAA2hB,OAAA,EAAAA,EAAElrB,SAC5BgL,gBAAmC,UAAlB7K,EAAMoJ,oBAAY,IAAAqmB,OAAA,EAAAA,EAAEpwB,GACrC0L,SAAS,gBACTlE,OAAK,KAGTvJ,eACE6C,cAAA,SAAA,CAAAuM,MAAO8tB,EAAa58B,QAAQ8O,MAC5BvF,wBAAyB,CACvBC,OAAQ,wFAAAzM,OAE4B,QAAlBi1B,EAAA5vB,EAAMoJ,oBAAY,IAAAwmB,OAAA,EAAAA,EAAEvwB,GAAE,wBAC1CJ,QAAQ,OAAQ,SAOxB,IAAM87B,GAAoB/6B,EAAM6M,UAAY,IAAIpG,QAAO,SAAA6G,SACrD,OAAO2rB,gDAEyB,UAAxBj5B,EAAMqJ,aAAavP,aAAK,IAAA7F,OAAA,EAAAA,EAAEiN,QAAS,CAAEA,OAAQlB,EAAMqJ,aAAavP,MAAMoH,QAAW,IAClFnH,QAAQgC,qBAEbuR,EAAQyO,MACRzO,EAAQ4rB,UACR5rB,EAAQ6rB,YAIZ,OACE77B,eAAA6C,cAAC7C,eAAMsL,SAAQ,KACbtL,eACE6C,cAAA,MAAA5B,SAAA,CAAAkP,IAAKssB,GACD/5B,EAAMmJ,WAAU,CACpB1B,MAAKlJ,SAAA,CACH+X,QAAS2jB,EAAW,EAAI,EACxBr0B,WAAY,4BACO,UAAhB5F,EAAMmJ,kBAAU,IAAA0mB,OAAA,EAAAA,EAAEpoB,OAEvBwB,UAAW,qCAAAtO,OACTqF,EAAMmJ,WAAWF,WAChBtO,OAAAs/B,EAAW,GAAK,gDAGlBG,GACD9hC,QAAQ4N,WACyB,iBAA1BlG,EAAMm7B,iBACbn7B,EAAMm7B,kBAAmC,QAAhBC,EAAAp7B,EAAM6M,gBAAU,IAAAuuB,OAAA,EAAAA,EAAA9lC,SAAU,GACjDgI,eAAA6C,cAACsK,cAAa,CACZQ,OAAiD,QAAzCowB,EAAc,QAAdC,EAAAt7B,EAAM6M,gBAAQ,IAAAyuB,OAAA,EAAAA,EAAGt7B,EAAMm7B,wBAAkB,IAAAE,OAAA,EAAAA,EAAApwB,OACjDJ,gBAAmC,QAAlB0wB,EAAAv7B,EAAMoJ,oBAAY,IAAAmyB,OAAA,EAAAA,EAAEl8B,GACrC0L,SAAU,8BAA8BpQ,OAAAqF,EAAMm7B,gBAAwB,WACtEt0B,OAAK,IAGRuzB,GAAc9hC,QAAQ4N,WAA8C,iBAA1BlG,EAAMm7B,kBAC9ClB,IACAc,EAAiBzlC,OAClBgI,eAAA6C,cAACsK,cAAa,CACZQ,OAA4B,QAApBuwB,EAAAx7B,EAAMoJ,oBAAc,IAAAoyB,OAAA,EAAAA,EAAA37B,SAC5BgL,wBAAiB4wB,EAAAz7B,EAAMoJ,mCAAc/J,GACrC0L,SAAS,gBACTlE,WAIFvJ,eAAA6C,cAACsK,cACC,CAAAQ,OAA6B,QAArBywB,EAAAX,EAAiB,UAAI,IAAAW,OAAA,EAAAA,EAAAzwB,OAC7BJ,gBAAqC,UAApB7K,EAAMoJ,oBAAc,IAAAuyB,OAAA,EAAAA,EAAAt8B,GACrC0L,SAAU,8BAA8BpQ,eAAAihC,EAAA57B,EAAM6M,+BAAU9R,QACtDggC,EAAiB,IAClB,WACDl0B,OAAK,KAIXvJ,eACE6C,cAAA,SAAA,CAAAuM,MAAO8tB,EAAa58B,QAAQ8O,MAC5BvF,wBAAyB,CACvBC,OAAQ,wFAAAzM,OAE8B,QAAlBkhC,EAAA77B,EAAMoJ,oBAAY,IAAAyyB,OAAA,EAAAA,EAAEx8B,GAAE,wBAC1CJ,QAAQ,OAAQ,SAsD1B,SAASi8B,yBACPruB,EACAivB,EACA56B,GAEA,MAAO,6kBAc4DvG,OAAAmhC,EAEhB,qGAAAnhC,OAAAmhC,wFAGJxjC,QAAQyjC,qBAAoB,0BAAAphC,OACnEuG,EAAS,wBAAAvG,OAAwBuG,EAAU,MAAG,GAC/B,6BAAAvG,OAAA5F,KAAKE,UAAU4X,MAAAA,OAAQ,EAARA,EAAUnR,KAAI,SAAAsgC,GAAK,MAAC,CAAEjgB,MAAOigB,EAAEjgB,MAAOmd,UAAW8C,EAAE9C,UAAWC,QAAS6C,EAAE7C,aAAY,2rBAAAx+B,OAkBrCmhC,EAa9E,qkBAAAnhC,OAAAq+B,gCAEL,uBAAC/5B,QAAQ,OAAQ,cCzTNg9B,kBACR,IAAAhoC,EAAkC4T,UAAS,GAA1CkH,EAAY9a,EAAA,GAAEioC,EAAejoC,EAAA,GAQpC,OANAwmC,WAAU,YACJniC,QAAQ4N,WAAa5N,QAAQyW,eAC/BmtB,GAAgB,KAEjB,IAEIntB,EDsMTzW,QAAQglB,kBAAkBsc,yBAA0B,CAClDl6B,KAAM,2BACNwI,QAAQ,EACRqoB,aAAc,oBACd7M,MACE,uGACFrB,iBAAiB,EACjBrL,OAAQ,CACN,CACEtX,KAAM,WACNma,aAAc,GACdsiB,SAAU,6BACV/nC,KAAM,OACN+xB,UAAW,CACT,CACEzmB,KAAM,OACNtL,KAAM,OACNgoC,WAAW,GAEb,CACE18B,KAAM,QACN6wB,aAAc,kBACdn8B,KAAM,eACNylB,aAAc,GACduiB,WAAW,GAEb,CACE18B,KAAM,YACNtL,KAAM,OACNgoC,WAAW,GAEb,CACE18B,KAAM,UACNtL,KAAM,OACNgoC,WAAW,GAEb,CACE18B,KAAM,SACNtL,KAAM,WACNgyB,YAAY,EACZvM,aAAc,SEpPxBvhB,QAAQ+jC,SAAU,EAClB/jC,QAAQgkC,QAAU,CAChB58B,KAAM,QACN9K,QAASb"}
|