{"version":3,"file":"static/js/main-f79d41fa.a64bef56.js","mappings":"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A,QACA,WACA,SACA,WACA,UACA,SACA,SACA,SACA,QACA,MACA,YACA,UACA,MACA,UACA,SACA,SACA,SACA,aACA,SACA,UACA,QACA,SACA,YACA,SACA,OACA,SACA,YACA,OACA,YACA,WACA,OACA,SACA,YACA,QACA,UAGKC,EAAoBzC,KAAKC,MAAMD,KAAKE,SAAWoC,EAAejL,QAC9DqL,EAAoB1C,KAAKC,MAAMD,KAAKE,SAAWqC,EAAelL,QAC9DsL,EAAkB3C,KAAKC,MAAMD,KAAKE,SAAWsC,EAAYnL,QAEzDuL,EAASN,EAAeG,GACxBI,EAASN,EAAeG,GACxBhI,EAAO8H,EAAYG,GAEzB,MAAO,GAAPxJ,QAAU2J,EAAAA,EAAAA,IAAa,IAAM,OAAM,KAAA3J,OAAIyJ,EAAM,KAAAzJ,OAAIuB,EAAI,KAAAvB,OAAI0J,EAC1D,CAkFO,SAASE,IAAuC,IAApBxI,EAAU+G,UAAAjK,OAAA,QAAAJ,IAAAqK,UAAA,IAAAA,UAAA,GACtCjB,EAAcL,KAAKC,MAAMD,KAAKE,SAAW8C,EAAS3L,QAClDkC,EAAOyJ,EAAS3C,GACtB,OAAO9F,EAAahB,EAAKC,OAAO,GAAGC,cAAgBF,EAAKG,MAAM,GAAKH,CACpE,CAzEA0J,OAAgC,wBA1UzB,WACN,IAAMpD,EAAa,CAClB,QACA,QACA,QACA,OACA,YACA,SACA,YACA,WACA,WACA,UACA,YACA,WACA,SACA,UACA,YACA,UACA,cACA,SACA,YACA,YACA,SACA,SACA,WACA,UACA,SACA,SACA,cACA,UACA,SACA,WACA,SACA,WACA,UACA,UACA,YACA,WACA,SACA,OACA,SACA,WACA,YACA,WACA,WACA,aACA,aACA,SACA,aAEKC,EAAQ,CACb,SACA,UACA,QACA,SACA,QACA,WACA,OACA,UACA,SACA,YACA,WACA,SACA,WACA,MACA,QACA,QACA,SACA,SACA,WACA,UACA,QACA,WACA,SACA,QACA,QACA,aACA,QACA,WACA,OACA,UACA,WACA,UACA,UACA,aACA,UACA,SACA,MACA,QACA,WACA,SACA,SACA,UACA,QACA,SACA,SACA,aAGKC,EAAuBC,KAAKC,MAAMD,KAAKE,SAAWL,EAAWxI,QAG7D8I,EAAaL,EAFKE,KAAKC,MAAMD,KAAKE,SAAWJ,EAAMzI,SAIzD,MAAO,GAAP8B,OAHwB0G,EAAWE,GAGV,KAAA5G,OAAIgH,EAC9B,EAmOA8C,OAA+B,uBAbO,WACrC,MAAO,CACN3K,OAAQ+J,IACR9J,KAAMsI,IACNrI,MAAOuI,IACPtI,QAtKiBuH,KAAKC,MAAsB,IAAhBD,KAAKE,SAHtB,KAIKzI,WAAWyL,SAAS,EAAG,KAsKvCxK,QAASyI,IAEX,EAuGA,IA6FMgC,EAAe,CACpB,OACA,QACA,UACA,YACA,SACA,SACA,YACA,SACA,aACA,SACA,OACA,QACA,WACA,QACA,UACA,UACA,aACA,gBACA,MACA,QACA,SACA,OACA,OACA,mBACA,OACA,SACA,UACA,QACA,UACA,QAIKC,EAAa,CAClB,gBACA,UACA,OACA,yBACA,WACA,mBACA,aACA,cACA,WACA,MACA,8BACA,eACA,SACA,aACA,iBACA,aACA,kBACA,kBACA,aACA,sBACA,kBACA,mBACA,aACA,kBACA,aACA,aACA,eACA,oBACA,eACA,eACA,iBACA,mBACA,mBACA,UACA,WACA,aACA,UACA,OACA,SACA,iBACA,QACA,aACA,uBACA,SACA,QACA,cACA,UACA,iBACA,eACA,QAMKhC,GAFmB,GAAHjI,OAAOgK,EAAiBC,GAE5B,CACjB,gBACA,iBACA,SACA,QACA,YACA,UACA,QACA,SACA,SACA,uBACA,QACA,QACA,SACA,eACA,SACA,YACA,QACA,QACA,WACA,gBAGKJ,EAAW,CAChB,QACA,SACA,SACA,QACA,aACA,OACA,YACA,OACA,aACA,QACA,YACA,QACA,QACA,OACA,UACA,SACA,cACA,UACA,aACA,OACA,YACA,QACA,MACA,YACA,QACA,aACA,UACA,aACA,SACA,eACA,cACA,YACA,SACA,SACA,WACA,WACA,YACA,YACA,YACA,cACA,OACA,aACA,aACA,YACA,cACA,WACA,aACA,UACA,OACA,SACA,SACA,SACA,QACA,WACA,WACA,YACA,SACA,YACA,SACA,SACA,WACA,cACA,UACA,YACA,UACA,OACA,UACA,SACA,QACA,SACA,SACA,WACA,SACA,UACA,SACA,eACA,MACA,WACA,SACA,cACA,WACA,WACA,WACA,OACA,OACA,QACA,SACA,WACA,SACA,OACA,SACA,OACA,QACA,MACA,QACA,SACA,SACA,YACA,SACA,SACA,YACA,WACA,YACA,WACA,YACA,UACA,YACA,UACA,SACA,WACA,aACA,WACA,UACA,UACA,YACA,YACA,UACA,YACA,YACA,WACA,UACA,YACA,YACA,QACA,WACA,YACA,SACA,SACA,SACA,OACA,SACA,UACA,YACA,SACA,SACA,QACA,SACA,SACA,cACA,QACA,OACA,QACA,cACA,aACA,UACA,WACA,aACA,YACA,QACA,OACA,SACA,YACA,SACA,YACA,QACA,YACA,YACA,UACA,aACA,cACA,cACA,cACA,UACA,eACA,aACA,UACA,YACA,YACA,WACA,UACA,WACA,WACA,aACA,QACA,UACA,WACA,cACA,UACA,YACA,UACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,UACA,WACA,WACA,WACA,eACA,aACA,WACA,cACA,QACA,SACA,SACA,SACA,WACA,UACA,UACA,YACA,aACA,WACA,YACA,WACA,WACA,SACA,cACA,SACA,OACA,SACA,cACA,QACA,aACA,aACA,QACA,UACA,UACA,aACA,YACA,UACA,QACA,SACA,WACA,UACA,WACA,UACA,UACA,UACA,YACA,UACA,SACA,UACA,SACA,UACA,QACA,UACA,YACA,SACA,UACA,UACA,SACA,WACA,WACA,QACA,UACA,SACA,aACA,YACA,aACA,UACA,YACA,aACA,UACA,WACA,UACA,YACA,SACA,SACA,aACA,WACA,SACA,WACA,UACA,UACA,WACA,WACA,YACA,YACA,SACA,UACA,SACA,UACA,YACA,SACA,QACA,SACA,UACA,aACA,YACA,YACA,YACA,UACA,UACA,aACA,WACA,aACA,WACA,YACA,QACA,UACA,aACA,WACA,iBACA,YACA,WACA,YACA,QACA,QACA,WACA,SACA,WACA,SACA,QACA,SACA,UACA,SACA,SACA,UACA,SACA,WACA,UACA,SACA,SACA,QACA,SACA,SACA,QACA,QACA,QACA,OACA,SACA,UACA,UACA,SACA,SACA,YACA,OACA,QACA,QACA,SACA,SACA,QACA,QACA,QACA,SACA,SACA,QACA,OACA,YACA,YACA,aACA,cAiSKpC,EAAe,CACpB,cACA,aACA,UACA,qBACA,cACA,kBACA,aACA,gBACA,oBACA,eACA,QACA,cACA,eACA,SACA,eACA,aACA,SACA,aACA,mBACA,oBACA,UACA,eACA,oCACA,aACA,kBACA,WACA,aACA,WACA,WACA,oBACA,qBACA,mBACA,iBACA,cACA,eACA,eACA,WACA,kBACA,oBACA,YACA,YACA,SACA,iBACA,UACA,cACA,WAGKJ,EAAmB,CACxB,cACA,WACA,OACA,SACA,QACA,SACA,aACA,SACA,OACA,SACA,OACA,UACA,QACA,OACA,QACA,SACA,aACA,YACA,UACA,UACA,MACA,QACA,aACA,QACA,WACA,SACA,SACA,eACA,SACA,cACA,UACA,UACA,OACA,UACA,QACA,cACA,UACA,WACA,UACA,QACA,OACA,cACA,UAGKE,EAAiB,CACtB,SACA,UACA,eACA,YACA,QACA,WACA,YACA,cACA,eACA,QACA,iBACA,WACA,QACA,WACA,QACA,iBACA,qBACA,YAKKJ,GAFuB,GAAHnH,OAAOqH,EAAqBE,GAE3B,CAC1B,SACA,UACA,aACA,aACA,WACA,aACA,SACA,WACA,QACA,iBACA,OACA,eACA,UACA,gBACA,oBACA,aACA,aACA,iBACA,aACA,WACA,SACA,iBACA,eACA,mBACA,eACA,gBACA,aACA,aACA,eACA,kBACA,mBACA,mBACA,SACA,UACA,gBACA,gBACA,cACA,sBACA,oBACA,eACA,eACA,iBACA,aACA,eACA,YACA,gBACA,iBACA,cACA,gBACA,aACA,iBACA,eACA,iBACA,eACA,SACA,mBACA,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","sources":["helpers/dataUtil.ts","helpers/format.tsx","helpers/user-settings.ts","helpers/sandboxData.ts","helpers/telynxSettings.tsx","helpers/validation.ts","helpers/timeline.ts","helpers/messages.ts","helpers/sandbox.ts","helpers/index.ts","helpers/load.ts","helpers/math/index.ts","helpers/timeUtils.ts","helpers/url.ts","helpers/userUtils.ts","helpers/utils.tsx","history.js"],"sourcesContent":["import * as msgpack from 'msgpack-lite';\n\nexport type DefaultObject = Record;\n\nexport function encodeMSGPack(data: T): Uint8Array {\n\treturn msgpack.encode(data);\n}\n\nexport function decodeMSGPack(data: Uint8Array): T | undefined {\n\ttry {\n\t\treturn msgpack.decode(data);\n\t} catch (e) {\n\t\treturn undefined as T;\n\t}\n}\n\n// type Join = K extends string | number ? (P extends string | number ? `${K}${'' extends P ? '' : '.'}${P}` : never) : never;\n\n// type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...0[]];\n\n// export type Paths = [D] extends [never]\n// \t? never\n// \t: T extends object\n// \t\t? {\n// \t\t\t\t[K in keyof T]-?: K extends string | number ? `${K}` | Join> : never;\n// \t\t\t}[keyof T]\n// \t\t: '';\n\n// type Split = S extends `${infer T}${D}${infer U}` ? [T, ...Split] : [S];\n\n// type PathValue> = P extends [infer K, ...infer Rest]\n// \t? K extends keyof T\n// \t\t? Rest extends Array\n// \t\t\t? PathValue\n// \t\t\t: T[K]\n// \t\t: T extends Array\n// \t\t\t? K extends number\n// \t\t\t\t? Rest extends Array\n// \t\t\t\t\t? PathValue\n// \t\t\t\t\t: U\n// \t\t\t\t: never\n// \t\t\t: never\n// \t: T;\n\n// Use these when TS is slow\nexport type Paths = string;\nexport type PathValue = any;\nexport type Split = string[];\n\nexport function getValue>(obj: T, path: P, defaultValue?: PathValue>): PathValue> | undefined {\n\tconst keys = path.split('.');\n\tlet result: any = obj;\n\tfor (const key of keys) {\n\t\tif (result == null) {\n\t\t\treturn defaultValue;\n\t\t}\n\t\tresult = result[key];\n\t}\n\treturn result === undefined ? defaultValue : result;\n}\n\nexport function getFirstValue[]>(obj: T, paths: P): PathValue> | undefined {\n\tfor (const path of paths) {\n\t\tconst value = getValue(obj, path);\n\t\tif (isValidValue(value)) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nconst isValidValue = (value: any) => value !== undefined && value !== null && value !== '';\n\nexport function getValueOrDefault>(obj: T, defaultValue: PathValue>, path: P): PathValue> {\n\tconst value = getValue(obj, path, defaultValue);\n\treturn value !== undefined ? value : defaultValue;\n}\n\n// Set value at path\nexport function setValue>(obj: T, path: P, value: PathValue>): void {\n\tconst keys = path.split('.');\n\tlet result: any = obj;\n\tfor (let i = 0; i < keys.length - 1; i++) {\n\t\tconst key = keys[i];\n\t\tif (result[key] == null) {\n\t\t\tresult[key] = {};\n\t\t}\n\t\tresult = result[key];\n\t}\n\tresult[keys[keys.length - 1]] = value;\n}\n","import { ActionType, MailingAddress, PointsEventType, Store } from '@/types';\nimport { Typography } from '@alpine-iq/ui-library';\nimport { capitalize } from 'lodash';\nimport React from 'react';\nimport utils from './utils';\n\nexport function cleanString(str: string) {\n\tif (typeof str === 'string') return str.toString().replace(/\\s+/g, '').toLowerCase().trim();\n\tif (React.isValidElement(str)) return str;\n\tif (Array.isArray(str) || (typeof str === 'object' && str !== null)) return JSON.stringify(str || {});\n\treturn str || '';\n}\n\n// Clean any input\nexport function clean(input: any) {\n\tif (typeof input === 'string') return cleanString(input);\n\treturn input;\n}\n\nexport function addressToString(\n\taddress: Partial | MailingAddress | undefined,\n\toptions?: {\n\t\tuseRaw?: boolean;\n\t\tuseLatLong?: boolean;\n\t\tuseCountry?: boolean;\n\t\tclean?: boolean;\n\t},\n): string {\n\tif (!address) return '';\n\n\tconst { street, city, state, zipCode, country, lat, long, raw } = address;\n\tconst { useRaw, useLatLong, useCountry, clean = true } = options || {};\n\n\tif (raw && useRaw) return raw;\n\tif (lat && long && useLatLong) return `${lat},${long}`;\n\tif (country && useCountry) return country;\n\n\tconst formatAddressPart = (part: string | undefined): string => {\n\t\tif (!part) return '';\n\t\treturn part\n\t\t\t.split(' ')\n\t\t\t.map((word) => {\n\t\t\t\treturn word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n\t\t\t})\n\t\t\t.join(' ');\n\t};\n\n\tconst formattedStreet = clean ? formatAddressPart(street) : street || '';\n\tconst formattedCity = clean ? formatAddressPart(city) : city || '';\n\tconst formattedState = clean ? formatAddressPart(state) : state || '';\n\n\treturn `${formattedStreet}, ${formattedCity}, ${formattedState} ${zipCode || ''}`.trim();\n}\n\nexport function cleanPhone(phone: string | undefined): string {\n\tif (!phone) return '';\n\treturn phone?.trim().replaceAll('+', '');\n}\n\nexport function cleanEmail(email: string | undefined): string {\n\tif (!email) return '';\n\treturn email.trim().toLowerCase();\n}\n\nexport function getFormattedPointsEventType(eventType: PointsEventType, isBlock?: boolean): string {\n\tif (isBlock) return 'Block Adjustment';\n\tswitch (eventType) {\n\t\tcase 'point_freeze_end':\n\t\t\treturn 'Point Freeze End';\n\t\tcase 'point_freeze_start':\n\t\t\treturn 'Point Freeze Start';\n\t\tdefault:\n\t\t\treturn capitalize(eventType);\n\t}\n}\n\nexport function getEmployeeTitle(employee: { id: string; name: string }) {\n\tif (employee.name.length > 3) return employee.name;\n\treturn `${employee.name} (${employee.id})`;\n}\n\nexport function getFormattedStoreName(store: Partial): string {\n\treturn `${store.nickname || store.name} (${[store.addr?.city, store.addr?.state].join(', ')})`;\n}\n\nexport function getFormattedStoreNameForSelect(store: Partial | undefined): React.ReactNode {\n\tif (!store) return null;\n\treturn (\n\t\t\n\t\t\t{store.nickname || store.name} {store.addr ? ({[store.addr?.city, store.addr?.state].join(', ')}) : null}\n\t\t\n\t);\n}\n\nexport function getFullName(firstName: string | undefined, lastName: string | undefined): string {\n\treturn [firstName, lastName]\n\t\t.filter((name) => name)\n\t\t.map((name) => capitalize(name))\n\t\t.join(' ');\n}\n\nexport function formatPhoneNumber(phone: string | undefined): string {\n\tif (!phone) return '';\n\tconst cleanedPhone = cleanPhone(phone);\n\n\tif (cleanedPhone.length < 10) {\n\t\treturn '';\n\t}\n\n\tconst nationalNumber = cleanedPhone.slice(-10);\n\tconst countryCode = cleanedPhone.slice(0, -10);\n\n\tif (countryCode) {\n\t\treturn `+${countryCode} (${nationalNumber.slice(0, 3)}) ${nationalNumber.slice(3, 6)}-${nationalNumber.slice(6)}`;\n\t} else {\n\t\treturn `(${nationalNumber.slice(0, 3)}) ${nationalNumber.slice(3, 6)}-${nationalNumber.slice(6)}`;\n\t}\n}\n\n// Input can be a phone.. email.., or name\nexport function formatSender(input: string | undefined): string {\n\tif (!input) return '';\n\tif (utils.phoneRex.test(input)) return formatPhoneNumber(input);\n\tif (utils.emailRE.test(input)) return cleanEmail(input);\n\treturn capitalize(input);\n}\n\ntype ActionConfig = {\n\tdefaultEnabled: boolean;\n\tname: string;\n\tdescription: string;\n\ttemplate: string | undefined;\n};\nexport const ConversionActionMap: Record = {\n\ttext_received: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Text received',\n\t\tdescription: 'After a text is sent',\n\t\ttemplate: 'templates',\n\t},\n\ttext_click_to_open: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Opened text',\n\t\tdescription: 'After they open a text',\n\t\ttemplate: 'templates',\n\t},\n\ttext_sent: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Customer response via text',\n\t\tdescription: 'After customer responds to a text',\n\t\ttemplate: 'templates',\n\t},\n\ttext_click: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Landing page viewed',\n\t\tdescription: 'After landing page link was clicked',\n\t\ttemplate: 'templates',\n\t},\n\temail_received: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Email received',\n\t\tdescription: 'After email is sent',\n\t\ttemplate: 'emailTemplate',\n\t},\n\temail_open: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Opened email',\n\t\tdescription: 'After an email was opened',\n\t\ttemplate: 'emailTemplate',\n\t},\n\tpush_received: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Native push received',\n\t\tdescription: 'After native app push delivered',\n\t\ttemplate: 'pushTemplate',\n\t},\n\tpush_open: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Opened native push',\n\t\tdescription: 'After a push was opened',\n\t\ttemplate: 'pushTemplate',\n\t},\n\t// ad_received: {\n\t// \tdefaultEnabled: false,\n\t// \tname: 'Screen ad received',\n\t// \tdescription: 'After an app ad or screen ad was shown',\n\t// \ttemplate: 'adTemplate',\n\t// },\n\tbrowser_received: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Browser push received',\n\t\tdescription: 'After browser push delivered',\n\t\ttemplate: 'browserTemplate',\n\t},\n\tdirect_mail_received: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Direct mail received',\n\t\tdescription: 'After a direct mail letter was delievered',\n\t\ttemplate: 'snailMailTemplate',\n\t},\n\tTerpliReview: {\n\t\tdefaultEnabled: false,\n\t\tname: 'Terpli review left',\n\t\tdescription: 'After a Terpli review',\n\t\ttemplate: undefined,\n\t},\n\tTerpliRecommendation: {\n\t\tdefaultEnabled: false,\n\t\tname: 'Terpli recommendation left',\n\t\tdescription: 'After a Terpli recommendation',\n\t\ttemplate: undefined,\n\t},\n\tTerpliReviewDiscount: {\n\t\tdefaultEnabled: false,\n\t\tname: 'Terpli review discount',\n\t\tdescription: 'After a Terpli review discount',\n\t\ttemplate: undefined,\n\t},\n\tTerpliRecommendationDiscount: {\n\t\tdefaultEnabled: false,\n\t\tname: 'Terpli recommendation discount',\n\t\tdescription: 'After a Terpli recommendation discount',\n\t\ttemplate: undefined,\n\t},\n\tcall_answer: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Voice drop answered',\n\t\tdescription: 'After call was answered by a person',\n\t\ttemplate: 'voiceTemplate',\n\t},\n\tcall_vm: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Voice drop hit voicemail',\n\t\tdescription: 'After call went to voicemail',\n\t\ttemplate: 'voiceTemplate',\n\t},\n\tcall_complete: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Voice drop completed',\n\t\tdescription: 'After a voice drop is completed',\n\t\ttemplate: 'voiceTemplate',\n\t},\n\tdiscount_redemption: {\n\t\tdefaultEnabled: true,\n\t\tname: 'Discount redeemed',\n\t\tdescription: 'After a discount is redeemed',\n\t\ttemplate: 'discountTemplate',\n\t},\n} as const;\n\n/**\n * Returns a formatted title for a given action. (Conversion action)\n *\n * @param {ActionType} action - The action type to format.\n * @returns {string} The formatted action title.\n */\nexport function getFormattedActionTitle(action: ActionType): string {\n\treturn ConversionActionMap[action]?.name || capitalize(action?.replace(/_/g, ' '));\n}\nexport function getFormattedAddress(address: Partial) {\n\tif (!address) return;\n\n\tconst { street, city, state, zipCode } = address;\n\tconst presentAC = [street, city, state].filter((comp) => comp);\n\n\tconst joined = presentAC.join(', ');\n\tif (zipCode) return [joined, zipCode].join(' ');\n\n\treturn joined;\n}\n","import { getValueByPath, setValueByPath } from \"./utils\";\n\n// Returns the default parser function based on the type\nfunction getDefaultParser(opts: Partial>): ParseFunction {\n switch (opts.type) {\n case 'int':\n return Number.parseInt;\n case 'float':\n return Number.parseFloat;\n default:\n return (v: any) => v;\n }\n}\n\n// Returns the default value name based on the type\nfunction getDefaultValueName(opts: Partial>): string {\n switch (opts.type) {\n case 'boolean':\n return 'toggled';\n case 'color':\n return 'color';\n default:\n return 'value';\n }\n}\n\n// Returns the default event name\nfunction getDefaultEventName(opts: Partial>): string {\n return 'onChange';\n}\n\n\n// type GetDataFunction = (store?: boolean) => T;\ntype SetDataFunction = (data: T) => void;\ntype ParseFunction = (value: any) => any;\ntype ValueType = string | number | boolean | undefined | null;\n\ninterface BinderData {\n data: T;\n setData: SetDataFunction;\n}\n\ninterface BinderOptions {\n type: 'string' | 'int' | 'float' | 'boolean' | 'color';\n eventName: string;\n valueName: string;\n parse?: ParseFunction;\n defaultValue?: ValueType;\n}\n\ntype BinderInput = BinderData & Partial;\n\nexport function componentBinder(\n key: string,\n { data, setData, ...opts }: BinderInput,\n): Record {\n const options: BinderOptions = {\n eventName: getDefaultEventName(opts),\n valueName: getDefaultValueName(opts),\n type: 'string',\n parse: getDefaultParser(opts),\n defaultValue: undefined,\n ...opts,\n };\n const out: Record = {\n [options.valueName]: getValueByPath(data, key, options.defaultValue),\n [options.eventName]: (e: unknown) => {\n let value: any;\n if (isEvent(e)) {\n value = e.target.value;\n } else {\n value = e;\n }\n\n const parsedValue = options?.parse?.(value) ?? value;\n const newData = { ...data };\n setValueByPath(newData, key, parsedValue);\n setData(newData);\n }\n };\n\n if (options.defaultValue) out.def = options.defaultValue;\n\n return out;\n}\n\n// Helper function to check if the input is an event\nfunction isEvent(e: any): e is { target: { value: any } } {\n return e && e.target && typeof e.target.value !== 'undefined';\n}\n","import { randomNumber, utils } from '.';\nimport states from '../assets/states';\nimport { MailingAddress } from '@/legacy-types';\n\nexport function generateRandomWeedStoreName() {\n\tconst adjectives = [\n\t\t'Green',\n\t\t'Bud',\n\t\t'High',\n\t\t'Blissful',\n\t\t'Cannabis',\n\t\t'Dank',\n\t\t'Herbal',\n\t\t'Sticky',\n\t\t'Puff',\n\t\t'Blazed',\n\t\t'Sativa',\n\t\t'Indica',\n\t\t'Mellow',\n\t\t'Elevated',\n\t\t'Lush',\n\t\t'Smoky',\n\t\t'Aromatic',\n\t\t'Frosty',\n\t\t'Chill',\n\t\t'Zen',\n\t\t'Peaceful',\n\t\t'Giggle',\n\t\t'Mystic',\n\t\t'Tropical',\n\t\t'Soothing',\n\t\t'Euphoric',\n\t\t'Tranquil',\n\t\t'Golden',\n\t\t'Vivid',\n\t\t'Dreamy',\n\t\t'Velvet',\n\t\t'Enlightened',\n\t\t'Spicy',\n\t\t'Sensual',\n\t\t'Divine',\n\t\t'Majestic',\n\t\t'Harmonious',\n\t\t'Sacred',\n\t\t'Astral',\n\t\t'Mystical',\n\t\t'Velvet',\n\t\t'Cosmic',\n\t\t'Starlight',\n\t\t'Luminous',\n\t\t'Whimsical',\n\t\t'Ethereal',\n\t\t'Radiant',\n\t];\n\tconst nouns = [\n\t\t'Leaf',\n\t\t'Joint',\n\t\t'Dispensary',\n\t\t'420',\n\t\t'Ganja',\n\t\t'Bud',\n\t\t'Herb',\n\t\t'Stash',\n\t\t'Medicine',\n\t\t'Dope',\n\t\t'Bliss',\n\t\t'Harvest',\n\t\t'Nugget',\n\t\t'Magic',\n\t\t'Heaven',\n\t\t'Tonic',\n\t\t'Wellness',\n\t\t'Relief',\n\t\t'Serenity',\n\t\t'Dream',\n\t\t'Potion',\n\t\t'Palm',\n\t\t'Sorcery',\n\t\t'Serenade',\n\t\t'Infinity',\n\t\t'Breeze',\n\t\t'Vortex',\n\t\t'Secret',\n\t\t'Nectar',\n\t\t'Crystal',\n\t\t'Nirvana',\n\t\t'Fusion',\n\t\t'Shangri-La',\n\t\t'Elixir',\n\t\t'Alchemy',\n\t\t'Voyage',\n\t\t'Paradox',\n\t\t'Whisper',\n\t\t'Panacea',\n\t\t'Symphony',\n\t\t'Echo',\n\t\t'Spectrum',\n\t\t'Rapture',\n\t\t'Pulse',\n\t\t'Abyss',\n\t\t'Utopia',\n\t];\n\n\tconst randomAdjectiveIndex = Math.floor(Math.random() * adjectives.length);\n\tconst randomNounIndex = Math.floor(Math.random() * nouns.length);\n\tconst randomAdjective = adjectives[randomAdjectiveIndex];\n\tconst randomNoun = nouns[randomNounIndex];\n\n\treturn `${randomAdjective} ${randomNoun} Shop`;\n}\nexport function generateRandomStoreLocationName() {\n\tconst adjectives = [\n\t\t'Happy',\n\t\t'Sunny',\n\t\t'Green',\n\t\t'Cozy',\n\t\t'Delicious',\n\t\t'Bright',\n\t\t'Sparkling',\n\t\t'Charming',\n\t\t'Friendly',\n\t\t'Magical',\n\t\t'Enchanted',\n\t\t'Tranquil',\n\t\t'Quaint',\n\t\t'Radiant',\n\t\t'Whimsical',\n\t\t'Idyllic',\n\t\t'Picturesque',\n\t\t'Serene',\n\t\t'Candlelit',\n\t\t'Enchanted',\n\t\t'Lively',\n\t\t'Scenic',\n\t\t'Peaceful',\n\t\t'Vibrant',\n\t\t'Gentle',\n\t\t'Rustic',\n\t\t'Serendipity',\n\t\t'Bucolic',\n\t\t'Dreamy',\n\t\t'Quixotic',\n\t\t'Placid',\n\t\t'Pastoral',\n\t\t'Elysian',\n\t\t'Halcyon',\n\t\t'Cherished',\n\t\t'Heavenly',\n\t\t'Sylvan',\n\t\t'Cosy',\n\t\t'Solemn',\n\t\t'Seraphic',\n\t\t'Unspoiled',\n\t\t'Mirthful',\n\t\t'Alluring',\n\t\t'Harmonious',\n\t\t'Enraptured',\n\t\t'Joyful',\n\t\t'Ineffable',\n\t];\n\tconst nouns = [\n\t\t'Garden',\n\t\t'Cottage',\n\t\t'Haven',\n\t\t'Corner',\n\t\t'Oasis',\n\t\t'Paradise',\n\t\t'Nook',\n\t\t'Retreat',\n\t\t'Hearth',\n\t\t'Sanctuary',\n\t\t'Emporium',\n\t\t'Market',\n\t\t'Boutique',\n\t\t'Den',\n\t\t'Shack',\n\t\t'Shire',\n\t\t'Hollow',\n\t\t'Meadow',\n\t\t'Hillside',\n\t\t'Village',\n\t\t'Villa',\n\t\t'Hacienda',\n\t\t'Domain',\n\t\t'Grove',\n\t\t'Lodge',\n\t\t'Hinterland',\n\t\t'Perch',\n\t\t'Mystique',\n\t\t'Eden',\n\t\t'Arcadia',\n\t\t'Pinnacle',\n\t\t'Edifice',\n\t\t'Sanctum',\n\t\t'Rendezvous',\n\t\t'Respite',\n\t\t'Asylum',\n\t\t'Elm',\n\t\t'Bower',\n\t\t'Crescent',\n\t\t'Zenith',\n\t\t'Temple',\n\t\t'Chateau',\n\t\t'Henge',\n\t\t'Vortex',\n\t\t'Voyage',\n\t\t'Sculpture',\n\t];\n\n\tconst randomAdjectiveIndex = Math.floor(Math.random() * adjectives.length);\n\tconst randomNounIndex = Math.floor(Math.random() * nouns.length);\n\tconst randomAdjective = adjectives[randomAdjectiveIndex];\n\tconst randomNoun = nouns[randomNounIndex];\n\n\treturn `${randomAdjective} ${randomNoun}`;\n}\nexport function generateRandomSnonymForPersona() {\n\tconst randomIndex = Math.floor(Math.random() * synonyms.length);\n\treturn synonyms[randomIndex];\n}\nexport function generateRandomTimezone() {\n\tconst randomIndex = Math.floor(Math.random() * timezones.length);\n\treturn timezones[randomIndex];\n}\nexport function generateRandomProductName() {\n\tconst randomIndex = Math.floor(Math.random() * commonProductNames.length);\n\treturn commonProductNames[randomIndex];\n}\nexport function generateRandomCategory() {\n\tconst randomIndex = Math.floor(Math.random() * commonCategories.length);\n\treturn commonCategories[randomIndex];\n}\nexport function generateRandomWeedCategory() {\n\tconst randomIndex = Math.floor(Math.random() * weedCategories.length);\n\treturn weedCategories[randomIndex];\n}\nexport function generateRandomWeedBrand() {\n\tconst randomIndex = Math.floor(Math.random() * weedBrands.length);\n\treturn weedBrands[randomIndex];\n}\nexport function generateRandomWeedProduct() {\n\tconst randomIndex = Math.floor(Math.random() * weedProducts.length);\n\treturn weedProducts[randomIndex];\n}\nexport function generateRandomBrand() {\n\tconst randomIndex = Math.floor(Math.random() * commonBrands.length);\n\treturn commonBrands[randomIndex];\n}\nexport function generateRandomCity() {\n\tconst randomIndex = Math.floor(Math.random() * cities.length);\n\treturn cities[randomIndex];\n}\nexport function generateRandomState() {\n\tconst randomIndex = Math.floor(Math.random() * Object.keys(states).length);\n\treturn Object.keys(states)[randomIndex];\n}\nexport function generateRandomStateAbbreviation() {\n\tconst randomIndex = Math.floor(Math.random() * Object.keys(states).length);\n\treturn states[Object.keys(states)[randomIndex]];\n}\nexport function generateRandomCountry() {\n\tconst randomIndex = Math.floor(Math.random() * countries.length);\n\treturn countries[randomIndex];\n}\nexport function generateRandomZipCode() {\n\tconst min = 10000; // Minimum zip code value\n\tconst max = 99999; // Maximum zip code value\n\n\tconst randomZip = Math.floor(Math.random() * (max - min + 1) + min);\n\treturn randomZip.toString().padStart(5, '0'); // Convert to string and pad with leading zeros if necessary\n}\n\nexport function generateRandomString(length = 8) {\n\tconst characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\tlet randomString = '';\n\n\tfor (let i = 0; i < length; i++) {\n\t\tconst randomIndex = Math.floor(Math.random() * characters.length);\n\t\trandomString += characters.charAt(randomIndex);\n\t}\n\n\treturn randomString;\n}\nexport function generateRandomId() {\n\tconst min = 10000; // Minimum value (inclusive)\n\tconst max = 999999; // Maximum value (inclusive)\n\n\tconst randomId = Math.floor(Math.random() * (max - min + 1)) + min;\n\treturn randomId.toString();\n}\n\nexport function generateRandomContactId() {\n\tconst characters = 'abcdef0123456789';\n\tconst sections = [8, 4, 4, 4, 12];\n\n\tlet contactId = '';\n\tsections.forEach((sectionLength, index) => {\n\t\tfor (let i = 0; i < sectionLength; i++) {\n\t\t\tconst randomIndex = Math.floor(Math.random() * characters.length);\n\t\t\tcontactId += characters.charAt(randomIndex);\n\t\t}\n\t\tif (index < sections.length - 1) {\n\t\t\tcontactId += '-';\n\t\t}\n\t});\n\n\treturn contactId;\n}\nexport function generateRandomDays() {\n\tconst randDays = [0, 7, 14, 30, 60, 90, 180, 365];\n\tconst randDayOneIndex = Math.floor(Math.random() * (randDays.length - 1));\n\tconst randDaysTwoIndex = Math.floor(Math.random() * (randDays.length - randDayOneIndex - 1)) + randDayOneIndex + 1;\n\tconst toRolling = randDays[randDayOneIndex];\n\tconst fromRolling = randDays[randDaysTwoIndex];\n\treturn [toRolling, fromRolling];\n}\nexport function generateRandomGender() {\n\tconst genders = ['Male', 'Female', 'Other'];\n\tconst randomIndex = Math.floor(Math.random() * genders.length);\n\treturn genders[randomIndex];\n}\nexport function generateRandomUrl() {\n\tconst characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\n\tconst length = 10; // Change the desired length of the random URL\n\n\tlet randomUrl = '';\n\tfor (let i = 0; i < length; i++) {\n\t\trandomUrl += characters.charAt(Math.floor(Math.random() * characters.length));\n\t}\n\n\treturn `https://example.com/${randomUrl}`;\n}\nexport function generateRandomDate() {\n\tconst startDate = new Date(1900, 0, 1);\n\tconst endDate = new Date();\n\tconst randomTimestamp = startDate.getTime() + Math.random() * (endDate.getTime() - startDate.getTime());\n\treturn new Date(randomTimestamp);\n}\n\n// Generate random phone number\nexport function generateRandomPhoneNumber() {\n\tconst min = 1000000000; // Minimum value (inclusive)\n\tconst max = 9999999999; // Maximum value (inclusive)\n\n\tconst randomPhoneNumber = Math.floor(Math.random() * (max - min + 1)) + min;\n\treturn randomPhoneNumber.toString();\n}\n\n// Generate random email with realistic looking domain\nexport function generateRandomEmail() {\n\tconst randomString = generateRandomString();\n\tconst randomDomain = generateRandomDomain();\n\treturn `${randomString}@${randomDomain}`;\n}\n\n// Generate random domain\nexport function generateRandomDomain() {\n\tconst domains = ['gmail.com', 'yahoo.com', 'hotmail.com', 'outlook.com', 'aol.com', 'icloud.com', 'protonmail.com', 'zoho.com', 'gmx.com', 'mail.com'];\n\tconst randomIndex = Math.floor(Math.random() * domains.length);\n\treturn domains[randomIndex];\n}\n\nfunction generateStreetAddress(): string {\n\tconst streetPrefixes = ['North', 'South', 'East', 'West', 'Old', 'New', 'First', 'Second', 'Third', 'Fourth'];\n\n\tconst streetSuffixes = ['Street', 'Avenue', 'Lane', 'Road', 'Drive', 'Boulevard', 'Circle', 'Court', 'Place', 'Terrace'];\n\n\tconst streetNames = [\n\t\t'Main',\n\t\t'Elm',\n\t\t'Maple',\n\t\t'Oak',\n\t\t'Cedar',\n\t\t'Pine',\n\t\t'Birch',\n\t\t'Willow',\n\t\t'Hickory',\n\t\t'Cypress',\n\t\t'Spruce',\n\t\t'Sycamore',\n\t\t'Juniper',\n\t\t'Alder',\n\t\t'Magnolia',\n\t\t'Poplar',\n\t\t'Chestnut',\n\t\t'Redwood',\n\t\t'Walnut',\n\t\t'Cherry',\n\t\t'Locust',\n\t\t'Beech',\n\t\t'Ash',\n\t\t'Sassafras',\n\t\t'Dogwood',\n\t\t'Fir',\n\t\t'Hemlock',\n\t\t'Acacia',\n\t\t'Bamboo',\n\t\t'Cactus',\n\t\t'Eucalyptus',\n\t\t'Ginkgo',\n\t\t'Jasmine',\n\t\t'Lilac',\n\t\t'Mimosa',\n\t\t'Nectarine',\n\t\t'Orange',\n\t\t'Palm',\n\t\t'Quince',\n\t\t'Raspberry',\n\t\t'Sage',\n\t\t'Tangerine',\n\t\t'Umbrella',\n\t\t'Vine',\n\t\t'Willow',\n\t\t'Xylophone',\n\t\t'Yucca',\n\t\t'Zinnia',\n\t];\n\n\tconst randomPrefixIndex = Math.floor(Math.random() * streetPrefixes.length);\n\tconst randomSuffixIndex = Math.floor(Math.random() * streetSuffixes.length);\n\tconst randomNameIndex = Math.floor(Math.random() * streetNames.length);\n\n\tconst prefix = streetPrefixes[randomPrefixIndex];\n\tconst suffix = streetSuffixes[randomSuffixIndex];\n\tconst name = streetNames[randomNameIndex];\n\n\treturn `${randomNumber(1000, 99999)} ${prefix} ${name} ${suffix}`;\n}\n\nexport const generateMailingAddress = (): MailingAddress => {\n\treturn {\n\t\tstreet: generateStreetAddress(),\n\t\tcity: generateRandomCity(),\n\t\tstate: generateRandomState(),\n\t\tzipCode: generateRandomZipCode(),\n\t\tcountry: generateRandomCountry(),\n\t};\n};\n\n// @ts-ignore\nwindow['generateRandomStoreName'] = generateRandomStoreLocationName;\n// @ts-ignore\nwindow['generateMailingAddress'] = generateMailingAddress;\n\nfunction formatDate(date = undefined as Date | undefined, randomize = false) {\n\tif (date === undefined) date = generateRandomDate();\n\tconst options = { month: '2-digit', day: '2-digit', year: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false } as any;\n\n\tif (randomize) {\n\t\tconst randomMinutes = Math.floor(Math.random() * 60);\n\t\tconst randomHours = Math.floor(Math.random() * 24);\n\n\t\tdate.setMinutes(randomMinutes);\n\t\tdate.setHours(randomHours);\n\n\t\tconst randomFormat = Math.random() < 0.5 ? 'MM-DD-YY' : 'default';\n\t\tif (randomFormat === 'MM-DD-YY') {\n\t\t\toptions.month = '2-digit';\n\t\t\toptions.day = '2-digit';\n\t\t\toptions.year = '2-digit';\n\t\t}\n\t}\n\n\tconst formattedDate = date.toLocaleString('en-US', options).replace(',', ' at');\n\treturn formattedDate;\n}\nexport function generateRandomDates(minDaysApart = 1, maxDaysApart = 30, format = true) {\n\tconst minDate = new Date();\n\tminDate.setDate(minDate.getDate() - maxDaysApart);\n\n\tconst maxDate = new Date();\n\tmaxDate.setDate(maxDate.getDate() - minDaysApart);\n\n\tconst randomTimestamp1 = Math.random() * (maxDate.getTime() - minDate.getTime()) + minDate.getTime();\n\tconst randomTimestamp2 = Math.random() * (maxDate.getTime() - minDate.getTime()) + minDate.getTime();\n\n\tconst randomDate1 = new Date(randomTimestamp1);\n\tconst randomDate2 = new Date(randomTimestamp2);\n\n\tif (format) {\n\t\treturn [formatDate(randomDate1), formatDate(randomDate2)];\n\t}\n\n\treturn [randomDate1, randomDate2];\n}\nexport function generateRandomNumberRange(min = 0, max = 100) {\n\tif (min > max) {\n\t\t[min, max] = [max, min];\n\t}\n\n\tconst randomNumber1 = Math.floor(Math.random() * (max - min + 1)) + min;\n\tconst randomNumber2 = Math.floor(Math.random() * (max - min + 1)) + min;\n\n\treturn [randomNumber1, randomNumber2];\n}\nexport function generateRandomCommonName(both = true, prev?: string): string {\n\tconst combinedNames = [...firstNames, ...lastNames];\n\n\tconst randomIndex = Math.floor(Math.random() * combinedNames.length);\n\tlet randomName = combinedNames[randomIndex];\n\n\t// make sure we don't get the same name twice in a row\n\twhile (randomName === prev || utils.strify(prev)?.includes(utils.strify(randomName))) {\n\t\trandomName = generateRandomCommonName(false, prev);\n\t}\n\tif (both) return `${randomName} ${generateRandomCommonName(false, randomName)}`;\n\n\treturn randomName;\n}\nexport function generateRandomWord(capitalize = false) {\n\tconst randomIndex = Math.floor(Math.random() * wordList.length);\n\tconst word = wordList[randomIndex];\n\treturn capitalize ? word.charAt(0).toUpperCase() + word.slice(1) : word;\n}\n\nexport function generateRandomName() {\n\tconst nameLength = Math.floor(Math.random() * 2) + 2;\n\tlet name = '';\n\n\tfor (let i = 0; i < nameLength; i++) {\n\t\tconst randomSyllableIndex = Math.floor(Math.random() * syllables.length);\n\t\tname += syllables[randomSyllableIndex];\n\t}\n\n\treturn name.charAt(0).toUpperCase() + name.slice(1);\n}\n\n// Generate random paragraph of text\nexport function generateRandomParagraph(minLength = 3, maxLength = 10) {\n\tconst paragraphLength = Math.floor(Math.random() * (maxLength - minLength + 1)) + minLength;\n\tlet paragraph = '';\n\n\tfor (let i = 0; i < paragraphLength; i++) {\n\t\tconst randomWordIndex = Math.floor(Math.random() * wordList.length);\n\t\tparagraph += `${wordList[randomWordIndex]} `;\n\t}\n\n\treturn paragraph;\n}\n\nconst syllables = [\n\t'ba',\n\t'be',\n\t'bi',\n\t'bo',\n\t'bu',\n\t'da',\n\t'de',\n\t'di',\n\t'do',\n\t'du',\n\t'fa',\n\t'fe',\n\t'fi',\n\t'fo',\n\t'fu',\n\t'ga',\n\t'ge',\n\t'gi',\n\t'go',\n\t'gu',\n\t'ha',\n\t'he',\n\t'hi',\n\t'ho',\n\t'hu',\n\t'ja',\n\t'je',\n\t'ji',\n\t'jo',\n\t'ju',\n\t'ka',\n\t'ke',\n\t'ki',\n\t'ko',\n\t'ku',\n\t'la',\n\t'le',\n\t'li',\n\t'lo',\n\t'lu',\n\t'ma',\n\t'me',\n\t'mi',\n\t'mo',\n\t'mu',\n\t'na',\n\t'ne',\n\t'ni',\n\t'no',\n\t'nu',\n\t'pa',\n\t'pe',\n\t'pi',\n\t'po',\n\t'pu',\n\t'ra',\n\t're',\n\t'ri',\n\t'ro',\n\t'ru',\n\t'sa',\n\t'se',\n\t'si',\n\t'so',\n\t'su',\n\t'ta',\n\t'te',\n\t'ti',\n\t'to',\n\t'tu',\n\t'va',\n\t've',\n\t'vi',\n\t'vo',\n\t'vu',\n\t'wa',\n\t'we',\n\t'wi',\n\t'wo',\n\t'wu',\n\t'ya',\n\t'ye',\n\t'yi',\n\t'yo',\n\t'yu',\n\t'za',\n\t'ze',\n\t'zi',\n\t'zo',\n\t'zu',\n];\n\nconst commonBrands = [\n\t'Nike',\n\t'Apple',\n\t'Samsung',\n\t'Microsoft',\n\t'Amazon',\n\t'Google',\n\t'Coca-Cola',\n\t'Toyota',\n\t\"McDonald's\",\n\t'Adidas',\n\t'Sony',\n\t'Honda',\n\t'Facebook',\n\t'Intel',\n\t'Netflix',\n\t'Walmart',\n\t'Volkswagen',\n\t'Mercedes-Benz',\n\t'BMW',\n\t'Pepsi',\n\t'Target',\n\t'Ford',\n\t'Lego',\n\t'General Electric',\n\t'Uber',\n\t'Airbnb',\n\t'Twitter',\n\t'Canon',\n\t'Spotify',\n\t'Visa',\n\t// Add more common brands...\n];\n\nconst weedBrands = [\n\t'Columbia Care',\n\t'Cookies',\n\t'Wana',\n\t'Green Thumb Industries',\n\t'Curaleaf',\n\t'Acreage Holdings',\n\t'Grassroots',\n\t'Cresco Labs',\n\t'Trulieve',\n\t'GTI',\n\t'Harvest Health & Recreation',\n\t'Vireo Health',\n\t'MedMen',\n\t'TerrAscend',\n\t'Jushi Holdings',\n\t'Calyx Peak',\n\t\"Charlotte's Web\",\n\t'Verano Holdings',\n\t'Harborside',\n\t'Holistic Industries',\n\t'4Front Ventures',\n\t'Harmony Extracts',\n\t'High Times',\n\t'KushCo Holdings',\n\t'Terra Tech',\n\t'PharmaCann',\n\t'The Botanist',\n\t'Revolution Global',\n\t'RYAH Medtech',\n\t'Apothecarium',\n\t'Humboldt Farms',\n\t\"Willie's Reserve\",\n\t'Kiva Confections',\n\t'Kurvana',\n\t'PAX Labs',\n\t'Raw Garden',\n\t'STIIIZY',\n\t'WYLD',\n\t'Vangst',\n\t'Marley Natural',\n\t'Viola',\n\t'Dr. Dabber',\n\t'Lagunitas Hi-Fi Hops',\n\t'Dosist',\n\t'Moxie',\n\t'Canndescent',\n\t'Old Pal',\n\t'Jetty Extracts',\n\t'Lowell Farms',\n\t'Eaze',\n\t// Add more actual weed brands...\n];\n\nexport const allBrands = [...commonBrands, ...weedBrands];\n\nconst countries = [\n\t'United States',\n\t'United Kingdom',\n\t'France',\n\t'Japan',\n\t'Australia',\n\t'Germany',\n\t'Italy',\n\t'Russia',\n\t'Canada',\n\t'United Arab Emirates',\n\t'China',\n\t'India',\n\t'Brazil',\n\t'South Africa',\n\t'Mexico',\n\t'Argentina',\n\t'Egypt',\n\t'Kenya',\n\t'Thailand',\n\t'Switzerland',\n\t// Add more countries...\n];\nconst wordList = [\n\t'apple',\n\t'banana',\n\t'orange',\n\t'grape',\n\t'watermelon',\n\t'kiwi',\n\t'pineapple',\n\t'pear',\n\t'strawberry',\n\t'mango',\n\t'blueberry',\n\t'peach',\n\t'lemon',\n\t'lime',\n\t'coconut',\n\t'cherry',\n\t'pomegranate',\n\t'apricot',\n\t'blackberry',\n\t'plum',\n\t'raspberry',\n\t'melon',\n\t'fig',\n\t'nectarine',\n\t'guava',\n\t'cantaloupe',\n\t'avocado',\n\t'grapefruit',\n\t'papaya',\n\t'passionfruit',\n\t'dragonfruit',\n\t'persimmon',\n\t'quince',\n\t'lychee',\n\t'mulberry',\n\t'honeydew',\n\t'cranberry',\n\t'tangerine',\n\t'kiwifruit',\n\t'boysenberry',\n\t'date',\n\t'elderberry',\n\t'gooseberry',\n\t'starfruit',\n\t'marionberry',\n\t'plantain',\n\t'breadfruit',\n\t'rhubarb',\n\t'pine',\n\t'almond',\n\t'cashew',\n\t'walnut',\n\t'pecan',\n\t'hazelnut',\n\t'chestnut',\n\t'macadamia',\n\t'peanut',\n\t'pistachio',\n\t'celery',\n\t'carrot',\n\t'broccoli',\n\t'cauliflower',\n\t'cabbage',\n\t'asparagus',\n\t'spinach',\n\t'kale',\n\t'lettuce',\n\t'radish',\n\t'onion',\n\t'garlic',\n\t'ginger',\n\t'beetroot',\n\t'turnip',\n\t'parsnip',\n\t'potato',\n\t'sweet potato',\n\t'yam',\n\t'mushroom',\n\t'tomato',\n\t'bell pepper',\n\t'cucumber',\n\t'zucchini',\n\t'eggplant',\n\t'corn',\n\t'peas',\n\t'beans',\n\t'lentil',\n\t'chickpea',\n\t'quinoa',\n\t'rice',\n\t'barley',\n\t'oats',\n\t'wheat',\n\t'rye',\n\t'spelt',\n\t'millet',\n\t'bulgur',\n\t'buckwheat',\n\t'abacus',\n\t'anchor',\n\t'butterfly',\n\t'carousel',\n\t'dandelion',\n\t'elephant',\n\t'fireworks',\n\t'giraffe',\n\t'hurricane',\n\t'iceberg',\n\t'jigsaw',\n\t'kangaroo',\n\t'lighthouse',\n\t'magnolia',\n\t'narwhal',\n\t'octopus',\n\t'parachute',\n\t'quicksand',\n\t'rainbow',\n\t'sunflower',\n\t'telescope',\n\t'umbrella',\n\t'volcano',\n\t'waterfall',\n\t'xylophone',\n\t'yacht',\n\t'zeppelin',\n\t'avalanche',\n\t'breeze',\n\t'cactus',\n\t'desert',\n\t'echo',\n\t'fossil',\n\t'glacier',\n\t'hailstorm',\n\t'island',\n\t'jungle',\n\t'kayak',\n\t'lagoon',\n\t'meadow',\n\t'nightingale',\n\t'oasis',\n\t'palm',\n\t'quail',\n\t'rattlesnake',\n\t'sandcastle',\n\t'thunder',\n\t'universe',\n\t'volleyball',\n\t'whirlpool',\n\t'x-ray',\n\t'yoga',\n\t'zodiac',\n\t'astronomy',\n\t'ballet',\n\t'chemistry',\n\t'drama',\n\t'economics',\n\t'geography',\n\t'history',\n\t'journalism',\n\t'kinesiology',\n\t'linguistics',\n\t'mathematics',\n\t'nursing',\n\t'oceanography',\n\t'philosophy',\n\t'quantum',\n\t'radiology',\n\t'sociology',\n\t'theology',\n\t'uranium',\n\t'virology',\n\t'wildlife',\n\t'xenophobia',\n\t'youth',\n\t'zoology',\n\t'altruism',\n\t'benevolence',\n\t'courage',\n\t'diligence',\n\t'empathy',\n\t'fortitude',\n\t'gratitude',\n\t'humility',\n\t'integrity',\n\t'justice',\n\t'kindness',\n\t'loyalty',\n\t'modesty',\n\t'nobility',\n\t'optimism',\n\t'patience',\n\t'quintessence',\n\t'resilience',\n\t'serenity',\n\t'tranquility',\n\t'unity',\n\t'virtue',\n\t'wisdom',\n\t'xenial',\n\t'youthful',\n\t'zealous',\n\t'amazing',\n\t'brilliant',\n\t'courageous',\n\t'dazzling',\n\t'energetic',\n\t'fearless',\n\t'graceful',\n\t'humble',\n\t'intelligent',\n\t'jovial',\n\t'keen',\n\t'lively',\n\t'magnificent',\n\t'noble',\n\t'optimistic',\n\t'passionate',\n\t'quiet',\n\t'radiant',\n\t'sincere',\n\t'triumphant',\n\t'uplifting',\n\t'vibrant',\n\t'witty',\n\t'xenial',\n\t'youthful',\n\t'zealous',\n\t'aardvark',\n\t'blossom',\n\t'cascade',\n\t'dolphin',\n\t'evergreen',\n\t'firefly',\n\t'galaxy',\n\t'harmony',\n\t'iguana',\n\t'jubilee',\n\t'koala',\n\t'lullaby',\n\t'moonlight',\n\t'nectar',\n\t'opulent',\n\t'penguin',\n\t'quasar',\n\t'raindrop',\n\t'serenade',\n\t'tiger',\n\t'unicorn',\n\t'volley',\n\t'waterfront',\n\t'xylograph',\n\t'yesteryear',\n\t'zestful',\n\t'abundance',\n\t'benevolent',\n\t'conquer',\n\t'diligent',\n\t'ecstasy',\n\t'fascinate',\n\t'gentle',\n\t'humble',\n\t'illuminate',\n\t'jubilant',\n\t'kindle',\n\t'luminous',\n\t'mystify',\n\t'nurture',\n\t'optimism',\n\t'paradise',\n\t'quiescent',\n\t'resilient',\n\t'serene',\n\t'triumph',\n\t'utopia',\n\t'valiant',\n\t'whimsical',\n\t'xyloid',\n\t'yearn',\n\t'zealot',\n\t'amiable',\n\t'brilliance',\n\t'captivate',\n\t'dexterity',\n\t'eloquence',\n\t'fervent',\n\t'glisten',\n\t'harmonious',\n\t'innocent',\n\t'jubilation',\n\t'kindness',\n\t'luxuriant',\n\t'mirth',\n\t'nourish',\n\t'optimistic',\n\t'profound',\n\t'quintessential',\n\t'ravishing',\n\t'serenity',\n\t'tantalize',\n\t'unite',\n\t'vivid',\n\t'wondrous',\n\t'xenial',\n\t'youthful',\n\t'zealot',\n\t'acorn',\n\t'breeze',\n\t'crystal',\n\t'dragon',\n\t'eleven',\n\t'feather',\n\t'goblin',\n\t'hedgehog',\n\t'isolate',\n\t'jungle',\n\t'kitten',\n\t'lemon',\n\t'marble',\n\t'noodle',\n\t'ocean',\n\t'panda',\n\t'quilt',\n\t'rain',\n\t'sailor',\n\t'thunder',\n\t'unicorn',\n\t'violet',\n\t'wander',\n\t'xylophone',\n\t'yoga',\n\t'zebra',\n\t'apple',\n\t'banana',\n\t'cherry',\n\t'grape',\n\t'lemon',\n\t'mango',\n\t'orange',\n\t'papaya',\n\t'peach',\n\t'pear',\n\t'pineapple',\n\t'raspberry',\n\t'strawberry',\n\t'watermelon',\n];\n\nconst firstNames = [\n\t'James',\n\t'John',\n\t'Robert',\n\t'Michael',\n\t'William',\n\t'David',\n\t'Joseph',\n\t'Charles',\n\t'Thomas',\n\t'Daniel',\n\t'Matthew',\n\t'Anthony',\n\t'Donald',\n\t'Mark',\n\t'Paul',\n\t'Steven',\n\t'Andrew',\n\t'Kenneth',\n\t'George',\n\t'Joshua',\n\t'Emily',\n\t'Emma',\n\t'Olivia',\n\t'Ava',\n\t'Isabella',\n\t'Sophia',\n\t'Mia',\n\t'Charlotte',\n\t'Amelia',\n\t'Harper',\n\t'Mary',\n\t'Jennifer',\n\t'Linda',\n\t'Patricia',\n\t'Susan',\n\t'Karen',\n\t'Nancy',\n\t'Lisa',\n\t'Margaret',\n\t'Betty',\n\t'Richard',\n\t'Edward',\n\t'Henry',\n\t'Frank',\n\t'Jack',\n\t'Albert',\n\t'Walter',\n\t'Harold',\n\t'Raymond',\n\t'Harry',\n\t'Dorothy',\n\t'Elizabeth',\n\t'Maria',\n\t'Susan',\n\t'Donna',\n\t'Deborah',\n\t'Jessica',\n\t'Sharon',\n\t'Michelle',\n\t'Cynthia',\n\t'Sarah',\n\t'Rebecca',\n\t'Laura',\n\t'Helen',\n\t'Natalie',\n\t'Grace',\n\t'Madison',\n\t'Alyssa',\n\t'Sophie',\n\t'Zoe',\n\t'Ethan',\n\t'Sophie',\n\t'Liam',\n\t'Lucas',\n\t'Grace',\n\t'Ella',\n\t'Aiden',\n\t'Noah',\n\t'Harper',\n\t'Chloe',\n\t'Aiden',\n\t'Benjamin',\n\t'Charlotte',\n\t'David',\n\t'Edward',\n\t'Evelyn',\n\t'Zoe',\n\t'Gabriel',\n\t'Hannah',\n\t'Isaac',\n\t'Julia',\n\t'Kennedy',\n\t'Lillian',\n\t'Madeline',\n\t'Natalie',\n\t'Oliver',\n\t'Parker',\n\t'Quinn',\n\t'Riley',\n\t'Samuel',\n\t'Tristan',\n\t'Ulysses',\n\t'Victoria',\n\t'Wesley',\n\t'Xander',\n\t'Yasmine',\n\t'Zachary',\n\t'Alison',\n\t'Brianna',\n\t'Caleb',\n\t'Daisy',\n\t'Eli',\n\t'Fiona',\n\t'George',\n\t'Hazel',\n\t'Ian',\n\t'Juliette',\n\t'Kaden',\n\t'Layla',\n\t'Mason',\n\t'Nora',\n\t'Oscar',\n\t'Penelope',\n\t'Quincy',\n\t'Rebecca',\n\t'Samantha',\n\t'Theodore',\n\t'Uma',\n\t'Violet',\n\t'Wyatt',\n\t'Xavier',\n\t'Yara',\n\t'Zara',\n\t'Aaron',\n\t'Bianca',\n\t'Cameron',\n\t'Delilah',\n\t'Ezra',\n\t'Felix',\n\t'Gemma',\n\t'Harrison',\n\t'Ivy',\n\t'Jack',\n\t'Katherine',\n\t'Luna',\n\t'Milo',\n\t'Nina',\n\t'Owen',\n\t'Poppy',\n\t'Quinn',\n\t'Rowan',\n\t'Stella',\n\t'Thea',\n\t'Uriah',\n\t'Vivian',\n\t'Weston',\n\t'Xena',\n\t'Yasmin',\n\t'Zane',\n\t// Add more common first names...\n];\n\nconst lastNames = [\n\t'Smith',\n\t'Johnson',\n\t'Williams',\n\t'Jones',\n\t'Brown',\n\t'Davis',\n\t'Miller',\n\t'Wilson',\n\t'Moore',\n\t'Taylor',\n\t'Anderson',\n\t'Thomas',\n\t'Jackson',\n\t'White',\n\t'Harris',\n\t'Martin',\n\t'Thompson',\n\t'Garcia',\n\t'Martinez',\n\t'Robinson',\n\t'Lee',\n\t'Walker',\n\t'Hall',\n\t'Allen',\n\t'Young',\n\t'King',\n\t'Wright',\n\t'Scott',\n\t'Green',\n\t'Baker',\n\t'Adams',\n\t'Clark',\n\t'Lewis',\n\t'Hill',\n\t'Carter',\n\t'Mitchell',\n\t'Perez',\n\t'Roberts',\n\t'Turner',\n\t'Phillips',\n\t'Campbell',\n\t'Parker',\n\t'Evans',\n\t'Edwards',\n\t'Collins',\n\t'Stewart',\n\t'Morris',\n\t'Nguyen',\n\t'Murphy',\n\t'Watson',\n\t'Gonzalez',\n\t'Rodriguez',\n\t'Lopez',\n\t'Hernandez',\n\t'Diaz',\n\t'Martin',\n\t'Wood',\n\t'Allen',\n\t'Hall',\n\t'Rivera',\n\t'Long',\n\t'Reyes',\n\t'Foster',\n\t'Sanders',\n\t'Butler',\n\t'Perry',\n\t'Price',\n\t'Barnes',\n\t'Ross',\n\t'Adams',\n\t'Bennett',\n\t'Clark',\n\t'Diaz',\n\t'Evans',\n\t'Foster',\n\t'Gomez',\n\t'Harrison',\n\t'Irwin',\n\t'Johnson',\n\t'Keller',\n\t'Lopez',\n\t'Morgan',\n\t'Nguyen',\n\t'Ortega',\n\t'Perez',\n\t'Quinn',\n\t'Reyes',\n\t'Smith',\n\t'Turner',\n\t'Underwood',\n\t'Vargas',\n\t'Watson',\n\t'Xiong',\n\t'Yates',\n\t'Zimmerman',\n\t'Avery',\n\t'Blake',\n\t'Cole',\n\t'Dawson',\n\t'Ellis',\n\t'Ferguson',\n\t'Gordon',\n\t'Hayes',\n\t'Ingram',\n\t'Jensen',\n\t'Knox',\n\t'Lawrence',\n\t'McCarthy',\n\t'Newton',\n\t'Owens',\n\t'Porter',\n\t'Quinn',\n\t'Reid',\n\t'Stewart',\n\t'Torres',\n\t'Vaughn',\n\t'Wheeler',\n\t'Xu',\n\t'Zhang',\n\t// Add more common last names...\n];\n\nconst weedProducts = [\n\t'Sour Diesel',\n\t'Blue Dream',\n\t'OG Kush',\n\t'Girl Scout Cookies',\n\t'White Widow',\n\t'Northern Lights',\n\t'Jack Herer',\n\t'Durban Poison',\n\t'Pineapple Express',\n\t'Gorilla Glue',\n\t'AK-47',\n\t'Purple Haze',\n\t'Wedding Cake',\n\t'Gelato',\n\t'Bruce Banner',\n\t'Cherry Pie',\n\t'Tangie',\n\t'Lemon Haze',\n\t'Strawberry Cough',\n\t'Granddaddy Purple',\n\t'Sour OG',\n\t'Amnesia Haze',\n\t'GSC (formerly Girl Scout Cookies)',\n\t'Gelato #33',\n\t'Forbidden Fruit',\n\t'Zkittlez',\n\t'Lemon Kush',\n\t'Tahoe OG',\n\t'Chemdawg',\n\t'Cookies and Cream',\n\t'Northern Lights #5',\n\t'Super Lemon Haze',\n\t'Pineapple Kush',\n\t'Black Widow',\n\t'Cherry AK-47',\n\t'Purple Punch',\n\t'Ghost OG',\n\t'Bruce Banner #3',\n\t'L.A. Confidential',\n\t'Candyland',\n\t'Chocolope',\n\t'Mimosa',\n\t'Sunset Sherbet',\n\t'Dosidos',\n\t'Platinum OG',\n\t'WiFi OG',\n];\n\nconst commonCategories = [\n\t'Electronics',\n\t'Clothing',\n\t'Home',\n\t'Beauty',\n\t'Books',\n\t'Sports',\n\t'Automotive',\n\t'Health',\n\t'Toys',\n\t'Office',\n\t'Pets',\n\t'Grocery',\n\t'Tools',\n\t'Baby',\n\t'Music',\n\t'Movies',\n\t'Industrial',\n\t'Furniture',\n\t'Jewelry',\n\t'Fitness',\n\t'Art',\n\t'Shoes',\n\t'Appliances',\n\t'Party',\n\t'Software',\n\t'Camera',\n\t'Phones',\n\t'Collectibles',\n\t'Garden',\n\t'Instruments',\n\t'Watches',\n\t'Luggage',\n\t'Food',\n\t'Hobbies',\n\t'Decor',\n\t'Instruments',\n\t'Kitchen',\n\t'Supplies',\n\t'Outdoor',\n\t'Audio',\n\t'Care',\n\t'Accessories',\n\t'School',\n];\n\nconst weedCategories = [\n\t'Flower',\n\t'Edibles',\n\t'Concentrates',\n\t'Pre-Rolls',\n\t'Vapes',\n\t'Topicals',\n\t'Tinctures',\n\t'Accessories',\n\t'CBD Products',\n\t'Seeds',\n\t'Grow Equipment',\n\t'Dab Rigs',\n\t'Pipes',\n\t'Grinders',\n\t'Bongs',\n\t'Rolling Papers',\n\t'Storage Containers',\n\t'Lighters',\n];\n\nexport const allCategories = [...commonCategories, ...weedCategories];\n\nconst commonProductNames = [\n\t'Laptop',\n\t'T-Shirt',\n\t'Coffee Mug',\n\t'Headphones',\n\t'Sneakers',\n\t'Smartphone',\n\t'Camera',\n\t'Backpack',\n\t'Watch',\n\t'Gaming Console',\n\t'Book',\n\t'Dumbbell Set',\n\t'Blender',\n\t'Running Shoes',\n\t'Bluetooth Speaker',\n\t'Sunglasses',\n\t'Wristwatch',\n\t'Digital Camera',\n\t'Pencil Set',\n\t'Yoga Mat',\n\t'Guitar',\n\t'Vacuum Cleaner',\n\t'Hiking Boots',\n\t'Wireless Earbuds',\n\t'Water Bottle',\n\t'E-book Reader',\n\t'Hair Dryer',\n\t'Toothbrush',\n\t'Cookware Set',\n\t'Fitness Tracker',\n\t'Desktop Computer',\n\t'Portable Charger',\n\t'Hoodie',\n\t'Printer',\n\t'Folding Chair',\n\t'Crossbody Bag',\n\t'Dress Shoes',\n\t'External Hard Drive',\n\t'Kitchen Knife Set',\n\t'Camping Tent',\n\t'Office Chair',\n\t'Running Shorts',\n\t'Smartwatch',\n\t'Air Purifier',\n\t'Projector',\n\t'Travel Pillow',\n\t'Blu-ray Player',\n\t'Power Drill',\n\t'Back Massager',\n\t'Yoga Block',\n\t'Wireless Mouse',\n\t'Sleeping Bag',\n\t'Protein Powder',\n\t'Coffee Maker',\n\t'Tablet',\n\t'Artificial Plant',\n\t'Tennis Shoes',\n\t'Wireless Keyboard',\n\t'Instant Pot',\n\t'Alarm Clock',\n\t'Gaming Mouse',\n\t'Fitness Band',\n\t'Resistance Bands',\n\t'Gaming Headset',\n\t'Portable Speaker',\n\t'Wall Clock',\n\t'Travel Backpack',\n\t'LED Light Bulbs',\n\t'Pedometer',\n\t'Electric Toothbrush',\n\t'Cutting Board',\n\t'Jump Rope',\n\t'Resistance Bands',\n\t'Flashlight',\n];\n\nexport const allProducts = [...commonProductNames, ...weedProducts];\n\nconst cities = [\n\t'New York',\n\t'Los Angeles',\n\t'Chicago',\n\t'Houston',\n\t'Phoenix',\n\t'Philadelphia',\n\t'San Antonio',\n\t'San Diego',\n\t'Dallas',\n\t'San Jose',\n\t'Austin',\n\t'Jacksonville',\n\t'San Francisco',\n\t'Indianapolis',\n\t'Columbus',\n\t'Fort Worth',\n\t'Charlotte',\n\t'Seattle',\n\t'Denver',\n\t'Washington',\n\t'Boston',\n\t'El Paso',\n\t'Detroit',\n\t'Nashville',\n\t'Portland',\n\t'Memphis',\n\t'Oklahoma City',\n\t'Las Vegas',\n\t'Louisville',\n\t'Baltimore',\n\t'Milwaukee',\n\t'Albuquerque',\n\t'Tucson',\n\t'Fresno',\n\t'Sacramento',\n\t'Mesa',\n\t'Kansas City',\n\t'Atlanta',\n\t'Long Beach',\n\t'Colorado Springs',\n\t'Raleigh',\n\t'Miami',\n\t'Virginia Beach',\n\t'Omaha',\n\t'Oakland',\n\t'Minneapolis',\n\t'Tulsa',\n\t'Arlington',\n\t'New Orleans',\n\t'Wichita',\n\t'Cleveland',\n\t'Tampa',\n\t'Bakersfield',\n\t'Aurora',\n\t'Anaheim',\n\t'Honolulu',\n\t'Santa Ana',\n\t'Riverside',\n\t'Corpus Christi',\n\t'Lexington',\n\t// Add more cities...\n];\n\nconst synonyms = [\n\t// Synonyms for \"individuals\"\n\t'Contacts',\n\t'People',\n\t'Personas',\n\t'Members',\n\t'Shoppers',\n\t'Patrons',\n\t'Persons',\n\t'Individuals',\n\t'Folks',\n\t'Persons of interest',\n\t'Personalities',\n\t'Entities',\n\t'Individuals',\n\t'Subjects',\n\t'Viewers',\n\t'Prospects',\n\t'Promising leads',\n\t'Candidates',\n\t'Suitors',\n\t'Records',\n\t'Entries',\n\t'Accounts',\n];\n\nconst timezones = [\n\t'Africa/Abidjan',\n\t'Africa/Accra',\n\t'Africa/Addis_Ababa',\n\t'Africa/Algiers',\n\t'Africa/Asmara',\n\t'Africa/Asmera',\n\t'Africa/Bamako',\n\t'Africa/Bangui',\n\t'Africa/Banjul',\n\t'Africa/Bissau',\n\t'Africa/Blantyre',\n\t'Africa/Brazzaville',\n\t'Africa/Bujumbura',\n\t'Africa/Cairo',\n\t'Africa/Casablanca',\n\t'Africa/Ceuta',\n\t'Africa/Conakry',\n\t'Africa/Dakar',\n\t'Africa/Dar_es_Salaam',\n\t'Africa/Djibouti',\n\t'Africa/Douala',\n\t'Africa/El_Aaiun',\n\t'Africa/Freetown',\n\t'Africa/Gaborone',\n\t'Africa/Harare',\n\t'Africa/Johannesburg',\n\t'Africa/Juba',\n\t'Africa/Kampala',\n\t'Africa/Khartoum',\n\t'Africa/Kigali',\n\t'Africa/Kinshasa',\n\t'Africa/Lagos',\n\t'Africa/Libreville',\n\t'Africa/Lome',\n\t'Africa/Luanda',\n\t'Africa/Lubumbashi',\n\t'Africa/Lusaka',\n\t'Africa/Malabo',\n\t'Africa/Maputo',\n\t'Africa/Maseru',\n\t'Africa/Mbabane',\n\t'Africa/Mogadishu',\n\t'Africa/Monrovia',\n\t'Africa/Nairobi',\n\t'Africa/Ndjamena',\n\t'Africa/Niamey',\n\t'Africa/Nouakchott',\n\t'Africa/Ouagadougou',\n\t'Africa/Porto-Novo',\n\t'Africa/Sao_Tome',\n\t'Africa/Timbuktu',\n\t'Africa/Tripoli',\n\t'Africa/Tunis',\n\t'Africa/Windhoek',\n\t'America/Adak',\n\t'America/Anchorage',\n\t'America/Anguilla',\n\t'America/Antigua',\n\t'America/Araguaina',\n\t'America/Argentina/Buenos_Aires',\n\t'America/Argentina/Catamarca',\n\t'America/Argentina/ComodRivadavia',\n\t'America/Argentina/Cordoba',\n\t'America/Argentina/Jujuy',\n\t'America/Argentina/La_Rioja',\n\t'America/Argentina/Mendoza',\n\t'America/Argentina/Rio_Gallegos',\n\t'America/Argentina/Salta',\n\t'America/Argentina/San_Juan',\n\t'America/Argentina/San_Luis',\n\t'America/Argentina/Tucuman',\n\t'America/Argentina/Ushuaia',\n\t'America/Aruba',\n\t'America/Asuncion',\n\t'America/Atikokan',\n\t'America/Atka',\n\t'America/Bahia',\n\t'America/Bahia_Banderas',\n\t'America/Barbados',\n\t'America/Belem',\n\t'America/Belize',\n\t'America/Blanc-Sablon',\n\t'America/Boa_Vista',\n\t'America/Bogota',\n\t'America/Boise',\n\t'America/Buenos_Aires',\n\t'America/Cambridge_Bay',\n\t'America/Campo_Grande',\n\t'America/Cancun',\n\t'America/Caracas',\n\t'America/Catamarca',\n\t'America/Cayenne',\n\t'America/Cayman',\n\t'America/Chicago',\n\t'America/Chihuahua',\n\t'America/Coral_Harbour',\n\t'America/Cordoba',\n\t'America/Costa_Rica',\n\t'America/Creston',\n\t'America/Cuiaba',\n\t'America/Curacao',\n\t'America/Danmarkshavn',\n\t'America/Dawson',\n\t'America/Dawson_Creek',\n\t'America/Denver',\n\t'America/Detroit',\n\t'America/Dominica',\n\t'America/Edmonton',\n\t'America/Eirunepe',\n\t'America/El_Salvador',\n\t'America/Ensenada',\n\t'America/Fort_Wayne',\n\t'America/Fortaleza',\n\t'America/Glace_Bay',\n\t'America/Godthab',\n\t'America/Goose_Bay',\n\t'America/Grand_Turk',\n\t'America/Grenada',\n\t'America/Guadeloupe',\n\t'America/Guatemala',\n\t'America/Guayaquil',\n\t'America/Guyana',\n\t'America/Halifax',\n\t'America/Havana',\n\t'America/Hermosillo',\n\t'America/Indiana/Indianapolis',\n\t'America/Indiana/Knox',\n\t'America/Indiana/Marengo',\n\t'America/Indiana/Petersburg',\n\t'America/Indiana/Tell_City',\n\t'America/Indiana/Vevay',\n\t'America/Indiana/Vincennes',\n\t'America/Indiana/Winamac',\n\t'America/Indianapolis',\n\t'America/Inuvik',\n\t'America/Iqaluit',\n\t'America/Jamaica',\n\t'America/Jujuy',\n\t'America/Juneau',\n\t'America/Kentucky/Louisville',\n\t'America/Kentucky/Monticello',\n\t'America/Knox_IN',\n\t'America/Kralendijk',\n\t'America/La_Paz',\n\t'America/Lima',\n\t'America/Los_Angeles',\n\t'America/Louisville',\n\t'America/Lower_Princes',\n\t'Pacific/Pago_Pago',\n\t'Pacific/Midway',\n\t'Pacific/Honolulu',\n\t'America/Juneau',\n\t'America/Los_Angeles',\n\t'America/Tijuana',\n\t'America/Denver',\n\t'America/Phoenix',\n\t'America/Chihuahua',\n\t'America/Mazatlan',\n\t'America/Chicago',\n\t'America/Regina',\n\t'America/Mexico_City',\n\t'America/Monterrey',\n\t'America/Guatemala',\n\t'America/New_York',\n\t'America/Indiana/Indianapolis',\n\t'America/Bogota',\n\t'America/Lima',\n\t'America/Halifax',\n\t'America/Caracas',\n\t'America/Guyana',\n\t'America/La_Paz',\n\t'America/Santiago',\n\t'America/St_Johns',\n\t'America/Sao_Paulo',\n\t'America/Argentina/Buenos_Aires',\n\t'America/Godthab',\n\t'Atlantic/South_Georgia',\n\t'Atlantic/Azores',\n\t'Atlantic/Cape_Verde',\n\t'Africa/Casablanca',\n\t'Europe/London',\n\t'Etc/GMT+1',\n\t'Europe/Berlin',\n\t'Europe/Paris',\n\t'Africa/Lagos',\n\t'Europe/Rome',\n\t'Europe/Athens',\n\t'Europe/Bucharest',\n\t'Africa/Cairo',\n\t'Europe/Helsinki',\n\t'Asia/Jerusalem',\n\t'Europe/Moscow',\n\t'Africa/Nairobi',\n\t'Asia/Baghdad',\n\t'Asia/Tehran',\n\t'Asia/Dubai',\n\t'Asia/Baku',\n\t'Asia/Kabul',\n\t'Asia/Karachi',\n\t'Asia/Kolkata',\n\t'Asia/Kathmandu',\n\t'Asia/Dhaka',\n\t'Asia/Colombo',\n\t'Asia/Almaty',\n\t'Asia/Rangoon',\n\t'Asia/Bangkok',\n\t'Asia/Krasnoyarsk',\n\t'Asia/Shanghai',\n\t'Asia/Kuala_Lumpur',\n\t'Asia/Taipei',\n\t'Australia/Perth',\n\t'Asia/Irkutsk',\n\t'Asia/Seoul',\n\t'Asia/Tokyo',\n\t'Asia/Yakutsk',\n\t'Australia/Darwin',\n\t'Australia/Adelaide',\n\t'Australia/Sydney',\n\t'Australia/Brisbane',\n\t'Australia/Hobart',\n\t'Asia/Vladivostok',\n\t'Pacific/Guam',\n\t'Pacific/Port_Moresby',\n\t'Asia/Magadan',\n\t'Asia/Kamchatka',\n\t'Pacific/Fiji',\n\t'Pacific/Auckland',\n\t'Pacific/Tongatapu',\n];\n","import React from 'react';\nimport { z } from 'zod';\nimport { TelnyxVerticalTypes, TelynxEntityTypes, TelynxStockExchanges, TelynxUseCaseTypes } from '../constants';\nimport {\n\tisRestricted,\n\tTelnyxBrand,\n\tTelnyxBrandSchema,\n\tTelnyxGetBrand,\n\tTelnyxGetCampaign,\n\tTelnyxVerticalType,\n\tTelynxEntityType,\n\tTelynxStockExchange,\n\tTelynxUseCaseType,\n} from '@/legacy-types';\nimport utils from './utils';\nimport { InfoBoxProps, Link } from '@alpine-iq/ui-library';\nimport userUtils from './userUtils';\n\nexport type ValidResponse = undefined;\nexport type InvalidResponse = Record;\nexport type ValidationResult = ValidResponse | InvalidResponse;\n\nexport function validateTelynxBrandSettings(telnyxSettings: Partial): ValidationResult {\n\tconst errors: InvalidResponse = {};\n\n\ttry {\n\t\t// If entity type is for profit, require additional fields\n\t\tif (telnyxSettings.entityType === 'PUBLIC_PROFIT') {\n\t\t\tz.object({\n\t\t\t\tstockSymbol: z.string(),\n\t\t\t\tstockExchange: z.string().refine((value) => isValidTelnyxStockExchange(value as TelynxStockExchange), {\n\t\t\t\t\tmessage: 'Invalid stock exchange',\n\t\t\t\t}),\n\t\t\t}).parse(telnyxSettings);\n\t\t}\n\n\t\t// Perform validation\n\t\tTelnyxBrandSchema.parse(telnyxSettings);\n\t} catch (e) {\n\t\tif (e instanceof z.ZodError) {\n\t\t\te.errors.forEach((error) => {\n\t\t\t\terrors[error.path.join('.')] = error.message;\n\t\t\t});\n\t\t} else if (e instanceof Error) {\n\t\t\terrors._ = e.message;\n\t\t}\n\t}\n\n\tif (userUtils.debugMode()) console.log('errors', errors);\n\treturn Object.keys(errors ?? {}).length > 0 ? errors : undefined;\n}\n\nexport function isTelnyxCampaignApproved(campaign: TelnyxGetCampaign | undefined): boolean {\n\treturn !!campaign?.isTMobileRegistered;\n}\n\nexport function getDefaultTelnyxSettings(): Partial | undefined {\n\tif (isRestricted()) {\n\t\treturn {\n\t\t\tvertical: 'RETAIL',\n\t\t};\n\t}\n\treturn undefined;\n}\n\nexport function isValidTelynxVerticalType(verticalType?: TelnyxVerticalType): boolean {\n\tif (!verticalType) return false;\n\tif (isRestricted() && verticalType !== 'RETAIL') {\n\t\treturn false;\n\t}\n\treturn !!TelnyxVerticalTypes?.[verticalType];\n}\n\nexport function isValidTelnyxEntityType(entityType?: TelynxEntityType): boolean {\n\tif (!entityType) return false;\n\treturn !!TelynxEntityTypes?.[entityType];\n}\n\nexport function isValidTelnyxStockExchange(entityType?: TelynxStockExchange): boolean {\n\tif (!entityType) return false;\n\treturn !!TelynxStockExchanges?.[entityType];\n}\n\nexport function isValidTelnyxUseCase(entityType?: TelynxUseCaseType): boolean {\n\tif (!entityType) return false;\n\treturn !!TelynxUseCaseTypes?.[entityType];\n}\n\n// Who is able to view the telnyx registration form\nexport function canSeeRegistrationForm(): boolean {\n\tif (!userUtils.hasRoleView('owner')) {\n\t\treturn false;\n\t}\n\t// Canada cannot view\n\tif (utils.isCanadaBilling()) {\n\t\treturn false;\n\t}\n\t// Message Digital cannot view\n\tif (utils.isMessageDigital() || utils.isWAB()) {\n\t\treturn false;\n\t}\n\t// Demo acconts will always be able to view\n\tif (utils.isDemo()) {\n\t\treturn true;\n\t}\n\t// If the user has a infobipCmpID they cannot view\n\treturn !utils.user.infobipCmpID;\n}\n\ntype AlertInfo = {\n\ttype: InfoBoxProps['type'];\n\tmessage: React.ReactNode;\n};\n\nexport function getAlertInfoForTelynxBrandSettings(\n\ttelnyxSettings: Partial | Partial | undefined,\n\tcampaign: TelnyxGetCampaign | undefined,\n): AlertInfo | undefined {\n\tconst asGetBrand = (telnyxSettings ?? {}) as Partial;\n\tconst status = asGetBrand?.status ?? undefined;\n\n\tconst hasFailed = !!asGetBrand?.failureReasons?.length || !!asGetBrand?.failureData;\n\n\tif (status === 'REGISTRATION_FAILED' || hasFailed) {\n\t\tconst { failureData } = asGetBrand;\n\t\treturn {\n\t\t\ttype: 'danger',\n\t\t\tmessage: (\n\t\t\t\t<>\n\t\t\t\t\tYour information has been reviewed and did not meet the requirements for registration. Please review the information you submitted and make any necessary\n\t\t\t\t\tchanges. If you have any questions, please contact support.\n\t\t\t\t\t{failureData?.category?.length && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\tReasons for failure:\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t{failureData.category.map((category, i) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{category.description}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t),\n\t\t};\n\t}\n\n\tif (status === 'REGISTRATION_PENDING') {\n\t\treturn {\n\t\t\ttype: 'info',\n\t\t\tmessage: (\n\t\t\t\t<>\n\t\t\t\t\t{/* Your information has been submitted for audit. Depending on your industry and use case this can take up to 7 days. However, in most cases you can expect\n\t\t\t\t\tsub 48 hour completion. We will notify you if your registration fails or information does not meet requirements. Otherwise, you will automatically be\n\t\t\t\t\tassigned a campaign registration ID and be able to create campaigns without interference. */}\n\t\t\t\t\tYour information has been submitted for review. Due to high demand, this process can take up to 14 days. We will notify you if your registration fails or\n\t\t\t\t\tinformation does not meet requirements. Otherwise, you will automatically be assigned a campaign registration ID and be able to create campaigns without\n\t\t\t\t\tinterference.\n\t\t\t\t\n\t\t\t),\n\t\t};\n\t}\n\n\tconst isApproved = isTelnyxCampaignApproved(campaign);\n\n\tif (isApproved || utils.user.approvedTelnyxCampaign) {\n\t\treturn {\n\t\t\ttype: 'success',\n\t\t\tmessage: (\n\t\t\t\t<>\n\t\t\t\t\tYour information has been approved. You can now create and send campaigns. Keep in mind that you are responsible for ensuring that your campaigns are\n\t\t\t\t\tcompliant with all applicable laws and regulations.\n\t\t\t\t\t{utils.isRestrictedIndustry() && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{/* Provide link to docs */}\n\t\t\t\t\t\t\tNeed help? Check out our{' '}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tdocumentation\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t),\n\t\t};\n\t}\n\n\tif (status === 'OK') {\n\t\treturn {\n\t\t\ttype: 'info',\n\t\t\tmessage: (\n\t\t\t\t<>\n\t\t\t\t\tYour information has been proccessed and we are now provisioning your campaign ID. Once your campaign ID is ready, you will be able to create and send\n\t\t\t\t\tcampaigns.\n\t\t\t\t\n\t\t\t),\n\t\t};\n\t}\n\n\t// Cannabis operators get a special message about 10DLC registration prior to registration\n\tif (!status && utils.isCannabis()) {\n\t\treturn {\n\t\t\ttype: 'danger',\n\t\t\tmessage: (\n\t\t\t\t<>\n\t\t\t\t\tCannabis operators: You may now register for 10DLC cannabis messaging within the AIQ system. We have received approval from carrier aggregators to use a\n\t\t\t\t\tspecific age gated message delivery flow. AIQ has automated this flow so that you are cleanly transitioned to our new methodology. Previously saved\n\t\t\t\t\tcampaigns will be set to “Inactive” status automatically and you will not be able to turn them on until you have edited the raw notice message within the\n\t\t\t\t\tcampaign builder. Net new campaigns created will automatically force the required/ compliant setup.\n\t\t\t\t\n\t\t\t),\n\t\t};\n\t}\n\n\treturn undefined;\n}\n","import utils from './utils';\n\nexport * from './telynxSettings'\n\n\nexport const validateURL = (url?: string): boolean => {\n if (!url) {\n return false;\n }\n const urlRegex = /^(http|https):\\/\\/[^ \"]+$/;\n return urlRegex.test(url);\n};\n\nexport const validateEmail = (email?: string): boolean => {\n if (!email) {\n return false\n }\n return utils.emailRE.test(email);\n};\n\nexport const validatePhoneNumber = (phone?: string): boolean => {\n if (!phone) {\n return false;\n }\n\n // E.164 format: +[country code][national number]\n const e164Regex = /^\\+[1-9]\\d{1,3}\\d{7,14}$/;\n return e164Regex.test(phone);\n};\n","import { Order, PointEvent, Sale, Tax } from '@/types';\n\nexport interface SaleStats {\n\tsubTotal: number;\n\ttax: number;\n\tdiscount: number;\n\tgrandTotal: number;\n\ttotalSaleAmount?: number;\n\ttotalAfterTax?: number;\n\tprofitPerItem?: number;\n\tprofitPercent?: number;\n\ttotalProfit?: number;\n\ttotalCost?: number;\n\ttotalMinusTax?: number;\n\ttotalItems?: number;\n\tordersList?: (Order & { key: number })[];\n\ttaxList?: (Tax & { key: number })[];\n}\n\nexport function getSaleStats(event: PointEvent): SaleStats {\n\tconst totals = {\n\t\ttotalSaleAmount: event.saleAmount || 0,\n\t\ttotalTax: 0,\n\t\ttotalItems: 0,\n\t\ttotalMinusTax: 0,\n\t\ttotalDiscounted: 0,\n\t\ttotalCost: 0,\n\t\tprofitPerItem: 0,\n\t\tprofitPercent: 0,\n\t\ttotalProfit: 0,\n\t};\n\n\tconst sale = (event.sale as Sale) || {};\n\n\tconst ordersList = sale?.orders?.map((order, i) => {\n\t\ttotals.totalCost += order.totalCost || 0;\n\t\ttotals.totalDiscounted += order.totalDiscount || 0;\n\t\ttotals.totalMinusTax += order.totalPrice || 0;\n\t\ttotals.totalItems += order.quantity || 0;\n\t\treturn { ...order, key: i };\n\t});\n\n\tconst taxList = sale?.taxes?.map((tax, i) => {\n\t\ttotals.totalTax += tax.amount || 0;\n\t\treturn { ...tax, key: i };\n\t});\n\n\tconst totalAfterTax = totals.totalMinusTax + totals.totalTax;\n\tconst grandTotal = totalAfterTax - totals.totalDiscounted;\n\n\tif (totals.totalCost !== 0) {\n\t\ttotals.totalProfit = totals.totalMinusTax - totals.totalCost;\n\t\ttotals.profitPerItem = totals.totalProfit / totals.totalItems;\n\t\ttotals.profitPercent = totals.totalProfit / totals.totalMinusTax;\n\t}\n\n\treturn {\n\t\tsubTotal: totals.totalMinusTax,\n\t\ttax: totals.totalTax,\n\t\tdiscount: totals.totalDiscounted,\n\t\tgrandTotal,\n\t\ttotalSaleAmount: totals.totalSaleAmount,\n\t\ttotalAfterTax,\n\t\tprofitPerItem: totals.profitPerItem,\n\t\tprofitPercent: totals.profitPercent,\n\t\ttotalProfit: totals.totalProfit,\n\t\ttotalCost: totals.totalCost,\n\t\ttotalMinusTax: totals.totalMinusTax,\n\t\ttotalItems: totals.totalItems,\n\t\tordersList,\n\t\ttaxList,\n\t};\n}\n","import { FullContact, MessageOut } from '@/types';\nimport { getFullName } from './format.tsx';\nimport utils from './utils';\n\nexport const MessageTypes = {\n\tisAd: 'Ad',\n\tsnailMail: 'Direct mail',\n\tvoice: 'Voice memo',\n\tisMMS: 'MMS',\n\tisSMS: 'SMS',\n\tisEmail: 'Email',\n\tisPush: 'Native push',\n\tisBrowser: 'Browser push',\n} as const;\n\nexport type MessageTableType = keyof typeof MessageTypes;\n\nexport function getMessageTableType(message: MessageOut): MessageTableType {\n\tif (message.isAd) return 'isAd';\n\tif (message.isEmail) return 'isEmail';\n\tif (message.isPush) return 'isPush';\n\tif (message.isBrowser) return 'isBrowser';\n\tif (message.platform === 'telnyx-voice') return 'voice';\n\tif (message.platform === 'telnyx') return 'isSMS';\n\tif (message.isMMS) return 'isMMS';\n\tif (message.snailMail) return 'snailMail';\n\treturn 'isSMS';\n}\n\nexport function getFormattedMessageType(message: MessageOut): string {\n\tlet type = 'SMS';\n\tif (message.isAd) type = 'Ad';\n\tif (message?.isEmail) type = 'Email';\n\tif (message.isPush) type = 'Native push';\n\tif (message.isBrowser) type = 'Browser push';\n\tif (message?.platform === 'telnyx-voice') type = 'Voice drop';\n\tif (message?.platform === 'telnyx') type = 'SMS';\n\tif (message?.isMMS) type = 'MMS';\n\treturn type;\n}\n\nexport function isMessageFromClient(message: MessageOut): boolean {\n\treturn message.direction === 'inbound';\n}\n\nexport function isMessageFailed(message: MessageOut): boolean {\n\tif (message.isEmail && message.errorMsg) {\n\t\treturn true;\n\t}\n\tconst isFailed = ['undelivered', 'failed', 'gw_timeout', 'dlr_timeout', 'sending_failed', 'delivery_failed'].includes(message.twilioStatus || '');\n\treturn isFailed;\n}\n\nexport function getFailedMessageReason(message: MessageOut): string {\n\tif (message.isEmail && message.errorMsg) {\n\t\treturn message.errorMsg;\n\t}\n\treturn message.twilioStatus || '';\n}\n\nexport function getFormattedMessageDirection(message: MessageOut): string {\n\tif (isMessageFailed(message)) return 'failed';\n\treturn isMessageFromClient(message) ? 'delivered' : 'received';\n}\n\nexport function getFormattedMessageTo(message: MessageOut, fullContact?: FullContact): string {\n\tconst fromClient = isMessageFromClient(message);\n\tif (!fromClient) {\n\t\tconst profileName = utils.user.profile?.name;\n\t\treturn profileName || message.from || 'You';\n\t}\n\n\tif (fullContact) {\n\t\tconst fullName = getFullName(fullContact.firstName, fullContact.lastName);\n\t\tif (fullName) return fullName;\n\t}\n\n\treturn message.to || 'Customer';\n}\n\nexport function getFormattedMessageFrom(message: MessageOut, fullContact?: FullContact): string {\n\tconst fromClient = isMessageFromClient(message);\n\tif (fromClient) {\n\t\tconst profileName = utils.user.profile?.name;\n\t\treturn profileName || message.from || 'You';\n\t}\n\n\tif (fullContact) {\n\t\tconst fullName = getFullName(fullContact.firstName, fullContact.lastName);\n\t\tif (fullName) return fullName;\n\t}\n\n\treturn message.from || 'Customer';\n}\n","import { OverrideContact } from '@/types';\n\nexport const SAMPLE_MERGE_DATA = [\n\t{\n\t\tfn: 'Antoinette',\n\t\tln: 'Williams',\n\t\tpl: 'loyalty',\n\t\tcn: 'ff0539bf-2f65-4479-a748-5068c0ed33fb',\n\t\tsr: '7c4e53c2-3644-4141-be2c-ea6d5347ce73',\n\t\teph: '9999999999',\n\t\tem: 'email@gmail.com',\n\t\trg: 'NV',\n\t\tfs: 1723532107,\n\t\tdm: true,\n\t\tlts: 1723532107,\n\t},\n\t{\n\t\tfn: 'Antoinette',\n\t\tln: 'Williams',\n\t\tpl: 'leaflogix',\n\t\tcn: '8334e091-14ef-4c2f-a04e-d397f01b3eed',\n\t\tsr: '123453243:::Cookies Flamingo',\n\t\thph: '9999999999',\n\t\teph: '9999999999',\n\t\tem: 'email@gmail.com',\n\t\trg: 'NV',\n\t\tfs: 1723600753,\n\t\tcty: 2,\n\t\tdm: true,\n\t},\n\t{\n\t\tfn: 'Antoinette',\n\t\tln: 'Williams',\n\t\tpl: 'loyalty',\n\t\tcn: '3aced113-d207-4078-8fd1-d0c746b1f3d1',\n\t\tsr: '3ee545b3-cefc-4bb5-ab32-1b11b08c8bf4',\n\t\teph: '9999999999',\n\t\tem: 'email@gmail.com',\n\t\trg: 'NV',\n\t\tfs: 1725284148,\n\t\tlts: 1725284148,\n\t},\n];\n\nexport const SAMPLE_OVERRIDE_DATA: Record = {\n\t'1099:::8334e091-14ef-4c2f-a04e-d397f01b3eed': {\n\t\taddress: { city: 'Las vegas', country: 'US', zipCode: '89130', state: 'NV', street: '123 abc street', raw: null, lat: 0, long: 0 },\n\t\tmobilePhone: '9999999999',\n\t\temail: 'email@gmail.com',\n\t\tlastName: 'Williams',\n\t\tfirstName: 'Antoinette',\n\t\tfavoriteStoreID: 18,\n\t\tbirthdate: 516448800,\n\t\tts: 1725287933,\n\t},\n\t'1099:::ff0539bf-2f65-4479-a748-5068c0ed33fb': {\n\t\taddress: { city: 'Las vegas', country: 'US', zipCode: '89130', state: 'NV', street: '123 abc street', raw: null, lat: 0, long: 0 },\n\t\tmobilePhone: '9999999999',\n\t\temail: 'email@gmail.com',\n\t\tlastName: 'Williams',\n\t\tfirstName: 'Antoinette',\n\t\tfavoriteStoreID: 18,\n\t\tbirthdate: 516448800,\n\t\tts: 1725287933,\n\t},\n};\n","import LocalStorageManager from './LocalStorageManager.ts';\n\nexport * from './utils';\nexport * from './allStyles';\nexport * from './admin';\nexport { colorUtils, colors, allStyles } from './allStyles';\nexport * from './userUtils';\nexport * from './load';\nexport * from './dataUtil';\nexport * from './math';\nexport * from './timeUtils';\nexport * from '../pages/alerts/user.alerts.helpers';\nexport * from './format.tsx';\nexport * from './alerts';\nexport * from './user-settings';\nexport * from './sandboxData';\nexport * from '../pages/surveysAndReviews/helpers/index';\nexport * from '../components/global/input/helpers';\nexport * from '../pages/crew/helpers/index';\nexport * from './validation';\nexport * from './timeline';\nexport * from './messages';\nexport * from './url';\nexport * from './sandbox';\n\nexport const storage = new LocalStorageManager();\n","import posthog from 'posthog-js';\nimport utils from './utils';\nimport userUtils from './userUtils';\n\nexport function executeIfPosthog(callback: () => void): void {\n\tif (canLoadPosthog()) {\n\t\tcallback();\n\t}\n}\n\n// For testing posthog is only loaded on the dashboard some pages/paths will be disabled\nexport function canLoadPosthog(): boolean {\n\t// If utils.local\n\tif (utils.isLocal()) {\n\t\treturn userUtils.isDebugging('posthog');\n\t}\n\t// Temporailty disable for non-logged in users\n\tif (!utils.auth.loggedIn()) {\n\t\treturn false;\n\t}\n\n\tconst ignorePages: string[] = [];\n\tif (ignorePages.some((path) => location.pathname.toLowerCase().includes(path))) {\n\t\treturn false;\n\t}\n\n\tconst isNonShortyDashboard = utils.isAlpineMain() || utils.isDevEnv();\n\treturn isNonShortyDashboard;\n}\n\nexport function capturePosthogEvent(event: string, properties?: Record): void {\n\texecuteIfPosthog(() => {\n\t\tposthog.capture(event, properties);\n\t});\n}\n","\n// Exports all of the math helper functions\nexport * from './random';\n\n// Generate a random UUID\n// EX: 8b3c4b9a-8f5c-4b9a-8f5c-3c4b9a8f5c4b\nexport const randomUUID = (alt?: boolean) => {\n if (!alt) { // @ts-ignore\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) => (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16))\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {\n const random = Math.random() * 16 | 0;\n const value = char === 'x' ? random : (random & 0x3 | 0x8);\n return value.toString(16);\n });\n}\n\nexport type UnparsedNumberType = (number | string | undefined | any);\n\n// Generate a random number between two numbers\n// EX: Generate a random number between 1 and 10\nexport const randomNumber = (min = 1, max = 10) => {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\n// Generate a random number between two numbers, excluding a number\n// EX: Generate a random number between 1 and 10, excluding 5\nexport const randomNumberExcluding = (min = 1, max = 10, exclude: number) => {\n let num = randomNumber(min, max);\n while (num === exclude) {\n num = randomNumber(min, max);\n }\n return num;\n}\n\n// Generate a random number between two numbers, excluding an array of numbers\n// EX: Generate a random number between 1 and 10, excluding 5, 6, and 7\nexport const randomNumberExcludingArray = (min = 1, max = 10, exclude: number[]) => {\n let num = randomNumber(min, max);\n while (exclude.includes(num)) {\n num = randomNumber(min, max);\n }\n return num;\n}\n\n// Select a random item from an array\n// EX: Select a random item from an array of strings\nexport const getRandomItem = (arr: (T[] | readonly T[])): T => {\n return arr[randomNumber(0, arr.length - 1)];\n}\n\n// Select x number of random items from an array\n// EX: Select 5 random items from an array of strings\nexport const getRandomItems = (arr: (T[] | readonly T[]), count: number): T[] => {\n const items: T[] = [];\n for (let i = 0; i < count; i++) {\n items.push(getRandomItem(arr));\n }\n return items;\n}\n\n// Generate a random number within x% of a number, optionally include a bias to skew the number towards the min or max\n// EX: Generate a random number within 10% of 100\nexport const randomNumberWithinPercent = (num: number, percent: number, bias?: 'min' | 'max') => {\n const min = num - getPercentOf(percent, num);\n const max = num + getPercentOf(percent, num);\n if (bias === 'min') {\n return randomNumber(min, num);\n } else if (bias === 'max') {\n return randomNumber(num, max);\n } else {\n return randomNumber(min, max);\n }\n}\n\n// Calculate what percent number is x of another number\n// EX: what is x% of y\nexport const getPercentOf = (percent: number, num: number) => {\n return (percent / 100) * num;\n}\n\n// Calculate the percent of a number\n// EX: x is what percent of y\nexport const percent = (num1?: number, num2?: number) => {\n if (!num1 || !num2) return 0;\n return (num1 / num2) * 100;\n}\n\n// Calculate the percent difference between two numbers\n// EX: What is the percentage difference between num1 and num2\n// num1 is the original number, num2 is the new number\nexport const percentDifference = (num1: number, num2: number) => {\n return ((num1 - num2) / num1) * 100;\n}\n\n// Calculate the percent change between two numbers\n// EX: What is the percentage increase/decrease from num1 to num2\n// num1 is the original number, num2 is the new number\nexport const percentChange = (num1: number, num2: number) => {\n return ((num2 - num1) / num1) * 100;\n}\n\n// Calculate statistics for an array of numbers\n// Returns an object with the variance, average variance, and standard deviation\nexport function calculateStatistics(arr: number[]) {\n if (arr.length === 0) {\n return {\n variance: 0,\n avgVariance: 0,\n standardDeviation: 0,\n }\n }\n\n // Calculate the mean (average)\n const mean = arr.reduce((sum, num) => sum + num, 0) / arr.length;\n\n // Calculate the sum of squared differences for variance\n const sumSquaredDiff = arr.reduce((sum, num) => sum + Math.pow(num - mean, 2), 0);\n\n // Calculate the variance\n const variance = sumSquaredDiff / (arr.length - 1);\n\n // Calculate the average variance\n const avgVariance = variance / arr.length;\n\n // Calculate the standard deviation (square root of the variance)\n const standardDeviation = Math.sqrt(variance);\n\n return {\n variance: variance,\n avgVariance: avgVariance,\n standardDeviation: standardDeviation,\n };\n}\n\n\n// Parse a number from a string, or return 0 if it can't be parsed\nexport const parseNumber = (num: UnparsedNumberType): number => {\n try {\n if (typeof num === 'number') {\n return num;\n }\n\n if (typeof num === 'string') {\n // Remove commas, dollarsigns, and spaces\n num = num.replace(/,|\\$| /g, '');\n const parsed = parseFloat(num);\n if (!isNaN(parsed)) {\n return parsed;\n }\n }\n return 0;\n } catch (err) {\n return 0;\n }\n}\n\n// Safely add numbers\nexport const addNumbers = (...nums: UnparsedNumberType[]) => {\n return (nums || []).reduce((sum, num) => (sum || 0) + parseNumber(num), 0);\n}\n\n// Safely subtract numbers\nexport const subtract = (...nums: UnparsedNumberType[]) => {\n return (nums || []).reduce((sum, num) => (sum || 0) - parseNumber(num), 0);\n}\n\n","import moment from 'moment';\n\nimport utils from './utils';\nimport { parseNumber } from './math';\n\ninterface Config {\n\tdataFormat: boolean; // * YYYY-MM-DD format used in charts and what not\n\thideTime: boolean; // * hide hour, minute, second, am/pm\n\tfriendly: boolean; // * allow for \"last Wednesday at 12 pm\" and \"This Monday at 4am\" formats\n\tday: boolean | string;\n\tmonth: boolean | string;\n\tsecond: boolean | string;\n\tminute: boolean | string;\n\thour: boolean | string;\n\tyear: boolean | string;\n\thour12: boolean;\n\thour12Lower: boolean;\n\tcalendar: boolean;\n\tstandard: Intl.DateTimeFormatOptions;\n\ttimezone: string;\n\tshowNameDay: boolean; // Show the day of the week name, IE \"Monday\", \"Tuesday\", etc\n\tfile?: boolean;\n\tformat?: string; // MM/DD/YYYY, YYYY-MM-DD, etc\n\tappendDay?: boolean; // add day to the front of the date, IE Sat, 12/12/2020\n}\n\nconst defaultConfig = {\n\tday: true,\n\tyear: true,\n\thour: true,\n\tmonth: true,\n\tminute: true,\n\tsecond: false,\n\thour12: true,\n\tcalendar: false,\n\tfriendly: true,\n\tstandard: {},\n} as Partial;\n\nexport const formatTimestamp = (date: any, config?: Partial) => {\n\tif (!!config?.file) config = { ...config, friendly: false, calendar: true, hideTime: true };\n\tconfig = { ...defaultConfig, ...config };\n\n\tlet { realDate, valid }: { realDate: Date; valid: boolean } = parseDate(date);\n\tif (!valid) return 'N/A';\n\n\tconst getFormat = (v: string | boolean | undefined, def: string | undefined) => (typeof v === 'string' ? v || def : v ? def : undefined);\n\n\tif (config.dataFormat) return formatDateShort(realDate);\n\n\tlet format = utils.trimObject(\n\t\t\tconfig?.format\n\t\t\t\t? parseCustomFormat(config.format)\n\t\t\t\t: ({\n\t\t\t\t\t\tcalendar: config.hideTime ? false : config.calendar,\n\t\t\t\t\t\tday: getFormat(config?.day, config.calendar ? '2-digit' : 'numeric'),\n\t\t\t\t\t\tmonth: getFormat(config?.month, config.calendar ? '2-digit' : 'short'),\n\t\t\t\t\t\tyear: getFormat(config.year, 'numeric'),\n\t\t\t\t\t\thour12: config.hideTime ? undefined : config.hour12,\n\t\t\t\t\t\thour: getFormat(config.hour, config.hideTime ? undefined : 'numeric'),\n\t\t\t\t\t\tminute: getFormat(config.minute, config.hideTime ? undefined : '2-digit'),\n\t\t\t\t\t\tsecond: getFormat(config.second, config.hideTime ? undefined : '2-digit'),\n\t\t\t\t\t\ttimeZone: config.timezone,\n\t\t\t\t\t\t...config?.standard,\n\t\t\t\t\t} as Intl.DateTimeFormatOptions),\n\t\t),\n\t\tformatDate = `${realDate.toLocaleString('default', format)}`;\n\n\tif (config.showNameDay) {\n\t\tconst day = realDate.toLocaleString('default', { weekday: 'long', ...config.standard });\n\t\tformatDate = `${day}, ${formatDate}`;\n\t}\n\n\tif (config.format) return formatDate;\n\n\tconst lastWeek = isLastWeek(realDate),\n\t\tthisWeek = isThisWeek(realDate);\n\n\tif (config.friendly && (lastWeek || thisWeek)) {\n\t\tlet weekDay = realDate.toLocaleString('default', { weekday: 'long', ...config.standard }),\n\t\t\ttimeRange = realDate.toLocaleString('default', { hour: 'numeric', minute: '2-digit', ...config.standard });\n\t\tformatDate = `${lastWeek ? 'Last ' : thisWeek ? '' : ''}${isToday(realDate) ? 'Today' : isYesterday(realDate) ? 'Yesterday' : weekDay} ${\n\t\t\tconfig.hideTime ? '' : `at ${timeRange}`\n\t\t}`;\n\t}\n\n\tif (config.appendDay) {\n\t\tconst day = realDate.toLocaleString('default', { weekday: 'short', ...config.standard });\n\t\tformatDate = `${day}, ${formatDate}`;\n\t}\n\n\tconst formatted = config.hour12Lower ? formatDate.replace('AM', 'am').replace('PM', 'pm') : formatDate;\n\n\t// If file, we replace spaces with _'s and : with _'s\n\tif (config.file) return formatted.replaceAll(/ /g, '_').replaceAll(/:/g, '_');\n\treturn formatted;\n};\n\n// returns the timestamp formatted as an excel-compatible string (YYYY-MM-DD hh:mm:ss)\nconst formatTimestampCSV = (date: any): string => {\n\tconst { realDate, valid }: { realDate: Date; valid: boolean } = parseDate(date);\n\tif (!valid) return 'N/A';\n\tconst formatted = new Intl.DateTimeFormat('default', {\n\t\tyear: 'numeric',\n\t\tmonth: '2-digit',\n\t\tday: '2-digit',\n\t\thour: '2-digit',\n\t\tminute: '2-digit',\n\t\tsecond: '2-digit',\n\t\thour12: false,\n\t}).format(realDate);\n\tconst [monthDayYear, time] = formatted.split(', ');\n\tconst [month, day, year] = monthDayYear.split('/');\n\treturn `${year}-${month}-${day} ${time}`;\n};\n\n// Helper function to parse custom format string\nconst parseCustomFormat = (format: string): Intl.DateTimeFormatOptions => {\n\tconst options: Intl.DateTimeFormatOptions = {};\n\n\tif (format.includes('YYYY')) {\n\t\toptions.year = 'numeric';\n\t} else if (format.includes('YY')) {\n\t\toptions.year = '2-digit';\n\t}\n\n\tif (format.includes('MM')) {\n\t\toptions.month = '2-digit';\n\t} else if (format.includes('M')) {\n\t\toptions.month = 'numeric';\n\t}\n\n\tif (format.includes('DD')) {\n\t\toptions.day = '2-digit';\n\t} else if (format.includes('D')) {\n\t\toptions.day = 'numeric';\n\t}\n\n\tif (format.includes('h')) {\n\t\toptions.hour = 'numeric';\n\t}\n\n\tif (format.includes('mm')) {\n\t\toptions.minute = '2-digit';\n\t} else if (format.includes('m')) {\n\t\toptions.minute = 'numeric';\n\t}\n\n\tif (format.includes('ss')) {\n\t\toptions.second = '2-digit';\n\t} else if (format.includes('s')) {\n\t\toptions.second = 'numeric';\n\t}\n\n\tif (format.includes('a')) {\n\t\toptions.hour12 = true;\n\t}\n\n\treturn options;\n};\n\nconst defaultTimes = ['0001-01-01T00:00:00Z'];\n// * This function should convert any invalid dates a valid one or return 'N/A'\nconst parseDate = (date: any): { valid: boolean; realDate: Date } => {\n\tlet realDate: Date = new Date(),\n\t\tvalid = false;\n\tif (date === 0) return { valid: false, realDate };\n\ttry {\n\t\tlet fmtDate: any = date instanceof Date ? date : JSON.parse(JSON.stringify(date || 0));\n\t\tif (moment.isMoment(fmtDate)) fmtDate = fmtDate.toDate();\n\t\tif (typeof date === 'number') {\n\t\t\tconst isMiliseconds = date > 1000000000000;\n\t\t\tfmtDate = new Date(isMiliseconds ? date : date * 1000);\n\t\t}\n\t\tif (typeof date === 'string' && !defaultTimes?.includes(date)) fmtDate = new Date(date);\n\t\tif (typeof date === 'object' && !moment.isMoment(fmtDate)) fmtDate = new Date(fmtDate);\n\t\tif (fmtDate instanceof Date) {\n\t\t\trealDate = fmtDate;\n\t\t\tvalid = true;\n\t\t}\n\t} catch (error) {\n\t\tvalid = false;\n\t\tif (!realDate) realDate = new Date();\n\t\tconsole.warn('Invalid date', date, error);\n\t}\n\treturn { valid, realDate };\n};\n\nexport function isZeroDate(date: any): boolean {\n\tif (typeof date === 'string') return date === '0001-01-01T00:00:00Z';\n\tconst { valid, realDate } = parseDate(date);\n\tif (!valid) return false;\n\treturn realDate.getTime() === 0;\n}\n\nexport function getDate(date: any): Date | { getTime: () => number } {\n\tconst { valid, realDate } = parseDate(date);\n\tif (!valid) return { getTime: () => 0 };\n\treturn realDate;\n}\n\n// * Function used with date picker to get a safe unix date\nexport const safeDate = (value: any, startOf?: boolean) => {\n\tif (!value) return 0;\n\tconst m = value.unix ? value : moment(value);\n\treturn startOf ? m.startOf('day').unix() : (m.unix() as number);\n};\n\nconst isThisWeek = (date: Date) => {\n\tconst todayObj = new Date(),\n\t\ttodayDate = todayObj.getDate(),\n\t\ttodayDay = todayObj.getDay();\n\tconst fd = new Date(todayObj.setDate(todayDate - todayDay)),\n\t\tld = new Date(fd);\n\tld.setDate(ld.getDate() + 6);\n\treturn date >= fd && date <= ld;\n};\n\nconst isLastWeek = (date: Date) => {\n\tconst todayObj = new Date(),\n\t\ttodayDate = todayObj.getDate(),\n\t\ttodayDay = todayObj.getDay();\n\tconst fd = new Date(todayObj.setDate(todayDate - todayDay - 7)),\n\t\tld = new Date(fd);\n\tld.setDate(ld.getDate() + 6);\n\treturn date >= fd && date <= ld;\n};\n\nconst isToday = (date: Date, today = new Date()) => {\n\treturn date.setHours(0, 0, 0, 0) == today.setHours(0, 0, 0, 0);\n};\n\nconst isYesterday = (date: Date, yesterday = new Date()) => {\n\tyesterday.setDate(yesterday.getDate() - 1);\n\treturn yesterday.getDate() === date.getDate();\n};\n\nconst isSameDate = (date: Date, compare = new Date()) => {\n\treturn date.getDate() == compare.getDate() && date.getMonth() == compare.getMonth() && date.getFullYear() == compare.getFullYear();\n};\n\nconst formatDateShort = (date: Date) => {\n\tvar d = new Date(date),\n\t\tmonth = '' + (d.getMonth() + 1),\n\t\tday = '' + d.getDate(),\n\t\tyear = d.getFullYear();\n\treturn [year, `${month.length < 2 ? '0' : ''}${month}`, `${day.length < 2 ? '0' : ''}${day}`].join('-');\n};\n\nconst getDaysSince = (x: Date, date: string) => Math.abs(x.getTime() - new Date(date).getTime()) / (24 * 60 * 60 * 1000);\n\nconst getCountDownTime = (endDate: Date) => {\n\tconst now = new Date().getTime(),\n\t\tdistance = endDate.getTime() - now,\n\t\tdays = Math.floor(distance / (1000 * 60 * 60 * 24)),\n\t\thours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)),\n\t\tminutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)),\n\t\tseconds = Math.floor((distance % (1000 * 60)) / 1000);\n\tif (distance < 0) return null;\n\tlet string = '';\n\tif (days > 0) string += `${days}d `;\n\tif (hours > 0) string += `${hours}h `;\n\tif (minutes > 0) string += `${minutes}m `;\n\tif (seconds > 0) string += `${seconds}s `;\n\tstring = string.trim();\n\treturn { days, hours, minutes, seconds, string };\n};\n\nfunction getDatesBetween(startDate: Date, endDate: Date) {\n\tconst dates = [];\n\tlet currentDate = startDate;\n\tconst addDays = function (days: any) {\n\t\t// @ts-ignore\n\t\tconst date = new Date(this.valueOf());\n\t\tdate.setDate(date.getDate() + days);\n\t\treturn date;\n\t};\n\twhile (currentDate <= endDate) {\n\t\tdates.push(currentDate);\n\t\tcurrentDate = addDays.call(currentDate, 1);\n\t}\n\treturn dates;\n}\n\ntype Func = (...args: T) => R;\ntype AsyncFunc = (...args: T) => R | Promise;\n\nconst getTimeSinceMilliseconds = (start: number, end: number = Date.now(), showMS = false, short = false): string => {\n\tconst diff = end - start; // difference in milliseconds\n\n\tif (!start) return 'N/A';\n\n\t// if diff is less than 1 second return formatted milliseconds\n\tif (diff < 1000) {\n\t\treturn showMS ? `${diff} milliseconds ago` : 'Just now';\n\t}\n\n\t// convert milliseconds to seconds\n\tconst totalSeconds = Math.floor(diff / 1000);\n\n\t// convert seconds to a friendly format\n\tlet friendly;\n\tif (totalSeconds < 60) {\n\t\tfriendly = `${totalSeconds} seconds ago`;\n\t} else if (totalSeconds < 3600) {\n\t\tconst minutes = Math.floor(totalSeconds / 60);\n\t\tconst remainingSeconds = totalSeconds % 60;\n\t\tfriendly = `${minutes} minute${minutes > 1 ? 's' : ''}`;\n\t\tif (remainingSeconds > 0 && !short) {\n\t\t\tfriendly += `, ${remainingSeconds} seconds ago`;\n\t\t} else {\n\t\t\tfriendly += ` ago`;\n\t\t}\n\t} else if (totalSeconds < 86400) {\n\t\tconst hours = Math.floor(totalSeconds / 3600);\n\t\tconst remainingMinutes = Math.floor((totalSeconds % 3600) / 60);\n\t\tfriendly = `${hours} hour${hours > 1 ? 's' : ''}`;\n\t\tif (remainingMinutes > 0 && !short) {\n\t\t\tfriendly += `, ${remainingMinutes} minutes ago`;\n\t\t} else {\n\t\t\tfriendly += ` ago`;\n\t\t}\n\t} else {\n\t\tconst days = Math.floor(totalSeconds / 86400);\n\t\tconst remainingHours = Math.floor((totalSeconds % 86400) / 3600);\n\t\tfriendly = `${days} day${days > 1 ? 's' : ''}`;\n\t\tif (remainingHours > 0 && !short) {\n\t\t\tfriendly += `, ${remainingHours} hours ago`;\n\t\t} else {\n\t\t\tfriendly += ` ago`;\n\t\t}\n\t}\n\n\treturn friendly;\n};\n\n/**\n * Calculate the number of days between two dates.\n * @param startDate - The start date.\n * @param endDate - The end date.\n * @returns The number of days between the two dates.\n */\nfunction getDaysBetween(startDate: Date, endDate: Date): number {\n\t// Strip time information for comparison\n\tconst start = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n\tconst end = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n\n\t// Calculate the difference in full days\n\tconst differenceMs = end.getTime() - start.getTime();\n\tconst differenceDays = differenceMs / (1000 * 60 * 60 * 24);\n\n\t// If startDate and endDate are on different days, but less than 24 hours apart, include both days\n\tif (differenceDays > 0 && differenceDays < 1) {\n\t\treturn 1;\n\t}\n\n\treturn Math.ceil(differenceDays);\n}\n\nconst formatTimeMinSec = (time: number, mili?: boolean) => {\n\tif (mili) time = time / 1000;\n\tconst minutes = Math.floor(time / 60);\n\tconst seconds = Math.floor(time % 60);\n\treturn `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;\n};\n\nexport function formatHours(hrs?: number, alwaysDaysIfApplys?: boolean): [string, string] {\n\t// This function simplifies the original by reducing conditionals and using early returns.\n\tif (hrs === undefined || hrs === 0) {\n\t\treturn ['0', ''];\n\t}\n\n\tconst hoursIn100Years = 24 * 365 * 100;\n\tif (hrs > hoursIn100Years) {\n\t\tconst foreverWords = ['forever', 'infinite'];\n\t\tconst foreverWord = foreverWords[Math.floor(Math.random() * foreverWords.length)];\n\t\treturn [foreverWord, ''];\n\t}\n\n\tif (hrs === 1) {\n\t\treturn ['1 hour', 'hour'];\n\t}\n\n\tif (hrs % 24 === 0) {\n\t\tconst numDays = hrs / 24;\n\t\tconst specialCases: { [key: number]: [string, string] } = {\n\t\t\t1: ['1 day', 'day'],\n\t\t\t7: Math.random() < 0.5 || alwaysDaysIfApplys ? ['7 days', 'days'] : ['1 week', 'week'],\n\t\t\t30: Math.random() < 0.5 || alwaysDaysIfApplys ? ['30 days', 'days'] : ['1 month', 'month'],\n\t\t\t365: Math.random() < 0.5 || alwaysDaysIfApplys ? ['365 days', 'days'] : ['1 year', 'year'],\n\t\t\t730: ['2 years', 'years'],\n\t\t\t1095: ['3 years', 'years'],\n\t\t};\n\n\t\tif (specialCases[numDays]) {\n\t\t\treturn specialCases[numDays];\n\t\t} else if (numDays % 365 === 0) {\n\t\t\tconst years = numDays / 365;\n\t\t\treturn [`${years} ${years > 1 ? 'years' : 'year'}`, years > 1 ? 'years' : 'year'];\n\t\t} else if (numDays > 30) {\n\t\t\tconst months = Math.floor(numDays / 30);\n\t\t\tconst isNotEvenMonth = numDays % 30 !== 0;\n\t\t\t// 50/50 of returning \"x months\" or \"x days\"\n\t\t\tif (Math.random() < 0.5 || isNotEvenMonth || alwaysDaysIfApplys) {\n\t\t\t\treturn [`${numDays} days`, 'days'];\n\t\t\t}\n\t\t\treturn [`${months} ${months > 1 ? 'months' : 'month'}`, months > 1 ? 'months' : 'month'];\n\t\t} else {\n\t\t\treturn [`${numDays} ${numDays > 1 ? 'days' : 'day'}`, numDays > 1 ? 'days' : 'day'];\n\t\t}\n\t}\n\n\treturn [`${hrs} hours`, 'hours'];\n}\n\n// Returns the start and end of the day TS in unix seconds\nconst getTodayUnix = (date: Date = new Date()) => {\n\tconst start = new Date(date),\n\t\tend = new Date(date);\n\tstart.setHours(0, 0, 0, 0);\n\tend.setHours(23, 59, 59, 999);\n\treturn {\n\t\tstart: Math.floor(start.getTime() / 1000),\n\t\tnow: Math.floor(date.getTime() / 1000),\n\t\tend: Math.floor(end.getTime() / 1000),\n\t};\n};\n\nexport function getAge(date: Date) {\n\tconst now = new Date();\n\tconst diff = now.getTime() - date.getTime();\n\tconst age = new Date(diff);\n\treturn Math.abs(age.getUTCFullYear() - 1970);\n}\n\nexport const timeUtils = {\n\tformatHours,\n\tformatTimeMinSec,\n\tformatTimestamp,\n\tformatTimestampCSV,\n\tparseDate,\n\tgetTodayUnix,\n\tgetDateMinusDays(days: number): string {\n\t\tconst date = new Date();\n\t\tdate.setDate(date.getDate() - days);\n\n\t\tconst month = (date.getMonth() + 1).toString().padStart(2, '0');\n\t\tconst day = date.getDate().toString().padStart(2, '0');\n\t\tconst year = date.getFullYear().toString();\n\n\t\treturn `${month}-${day}-${year}`;\n\t},\n\n\tfmtWord: (v: string) => {\n\t\tswitch (v) {\n\t\t\tcase 'day':\n\t\t\t\treturn 'Daily';\n\t\t\tcase 'week':\n\t\t\t\treturn 'Weekly';\n\t\t\tcase 'month':\n\t\t\t\treturn 'Monthly';\n\t\t\tcase 'quarter':\n\t\t\t\treturn 'Quarterly';\n\t\t\tcase 'year':\n\t\t\t\treturn 'Yearly';\n\t\t\tcase 'yesterdays':\n\t\t\t\treturn 'Yesterday';\n\t\t\tcase 'lastWeeks':\n\t\t\t\treturn 'Last Week';\n\t\t\tcase 'lastMonths':\n\t\t\t\treturn 'Last Month';\n\t\t\tcase 'lastQuarters':\n\t\t\t\treturn 'Last Quarter';\n\t\t\tcase 'lastYears':\n\t\t\t\treturn 'Last Year';\n\t\t\tcase 'nothing':\n\t\t\t\treturn 'No Other Time';\n\t\t\tcase 'oneDay':\n\t\t\t\treturn '1 Day Before';\n\t\t\tcase 'oneWeek':\n\t\t\t\treturn '1 Week Before';\n\t\t\tcase 'oneMonth':\n\t\t\t\treturn '1 Month Before';\n\t\t\tcase 'oneQuarter':\n\t\t\t\treturn '1 Quarter Before';\n\t\t\tcase 'oneYear':\n\t\t\t\treturn '1 Year Before';\n\t\t\tdefault:\n\t\t\t\treturn v;\n\t\t}\n\t},\n\n\tunits: {\n\t\tSECOND_MS: 1000,\n\t\tMINUTE_MS: 1000 * 60,\n\t\tHOUR_MS: 1000 * 60 * 60,\n\t\tDAY_MS: 1000 * 60 * 60 * 24,\n\t\tWEEK_MS: 1000 * 60 * 60 * 24 * 7,\n\t\tMONTH_MS: 1000 * 60 * 60 * 24 * 30,\n\t\tYEAR_MS: 1000 * 60 * 60 * 24 * 365,\n\n\t\tSECOND_S: 1,\n\t\tMINUTE_S: 60,\n\t\tHOUR_S: 60 * 60,\n\t\tDAY_S: 60 * 60 * 24,\n\t\tWEEK_S: 60 * 60 * 24 * 7,\n\t\tMONTH_S: 60 * 60 * 24 * 30,\n\t\tYEAR_S: 60 * 60 * 24 * 365,\n\t},\n\n\tvalidateDate: parseDate,\n\tsafeDate,\n\tisThisWeek,\n\tisLastWeek,\n\tisToday,\n\tisYesterday,\n\tisSameDate,\n\tformatDateShort,\n\tgetDaysSince,\n\tgetCountDownTime,\n\tgetDatesBetween,\n\tgetDaysBetween,\n\tgetTimeSinceMilliseconds,\n\n\tareDatesInSameMonth: (date1: Date, date2: Date) => date1.getMonth() === date2.getMonth() && date1.getFullYear() === date2.getFullYear(),\n\tgetOrdinalSuffix(day: number) {\n\t\tif (day >= 11 && day <= 13) return 'th';\n\t\tswitch (day % 10) {\n\t\t\tcase 1:\n\t\t\t\treturn 'st';\n\t\t\tcase 2:\n\t\t\t\treturn 'nd';\n\t\t\tcase 3:\n\t\t\t\treturn 'rd';\n\t\t\tdefault:\n\t\t\t\treturn 'th';\n\t\t}\n\t},\n\tcalendarRange: (date1: Date, date2: Date) => {\n\t\tconst options: any = { month: 'short', day: 'numeric' };\n\t\tconst formatter = new Intl.DateTimeFormat('en-US', options);\n\n\t\tconst month1 = date1.getMonth();\n\t\tconst month2 = date2.getMonth();\n\n\t\tconst day1 = date1.getDate();\n\t\tconst day2 = date2.getDate();\n\n\t\tif (month1 === month2) {\n\t\t\tif (day1 === day2) {\n\t\t\t\treturn `${formatter.format(date1)}${timeUtils.getOrdinalSuffix(day1)}`;\n\t\t\t} else {\n\t\t\t\treturn `${formatter.format(date1)}${timeUtils.getOrdinalSuffix(day1)} - ${day2}${timeUtils.getOrdinalSuffix(day2)}`;\n\t\t\t}\n\t\t} else {\n\t\t\treturn `${formatter.format(date1)}${timeUtils.getOrdinalSuffix(day1)} - ${formatter.format(date2)} ${timeUtils.getOrdinalSuffix(day2)}`;\n\t\t}\n\t},\n\n\t// * This function will time any async function and log the time it took to execute\n\ttimeAsync(fn: AsyncFunc, name?: string): AsyncFunc {\n\t\treturn async function (...args: T): Promise {\n\t\t\tlet startTime = performance.now();\n\t\t\tlet result = await fn(...args);\n\t\t\tconsole.info(`Function \"${name || fn.name}\" took ${timeUtils.formatTimedResult(startTime).trim()} to execute.`);\n\t\t\treturn result;\n\t\t};\n\t},\n\t// * This function will time any function and log the time it took to execute\n\ttimeFunction(fn: Func, name?: string, opts?: { ignore?: boolean }): Func {\n\t\treturn function (...args: T) {\n\t\t\tlet startTime = performance.now();\n\t\t\tlet result = fn(...args);\n\t\t\tconsole.info(`Function \"${fn.name || name}\" took ${timeUtils.formatTimedResult(startTime).trim()} to execute.`);\n\t\t\treturn result;\n\t\t};\n\t},\n\tformatTimedResult: (\n\t\tstartTime: number,\n\t\tendTime = performance.now(),\n\t\toptions?: { showFull?: boolean; hideMilliseconds?: boolean; hideSeconds?: boolean; hideMinutes?: boolean },\n\t) => {\n\t\tlet executionTime = endTime - startTime;\n\t\treturn timeUtils.formatMilliseconds(executionTime, { hideMilliseconds: false, ...options });\n\t},\n\n\t// for cooldowns\n\tformatMilliseconds: (\n\t\tmilliseconds: number,\n\t\toptions: {\n\t\t\thideMilliseconds?: boolean;\n\t\t\tshowFull?: boolean;\n\t\t\thideSeconds?: boolean;\n\t\t\thideMinutes?: boolean;\n\t\t} = { hideMilliseconds: true },\n\t) => {\n\t\tif (milliseconds < timeUtils.units.SECOND_MS) return `${milliseconds}ms`;\n\t\t// round for performance.now\n\t\tmilliseconds = Math.round(milliseconds);\n\t\tconst days = Math.floor(milliseconds / timeUtils.units.DAY_MS);\n\t\tmilliseconds %= timeUtils.units.DAY_MS;\n\t\tconst hours = Math.floor(milliseconds / timeUtils.units.HOUR_MS);\n\t\tmilliseconds %= timeUtils.units.HOUR_MS;\n\t\tconst minutes = Math.floor(milliseconds / timeUtils.units.MINUTE_MS);\n\t\tmilliseconds %= timeUtils.units.MINUTE_MS;\n\t\tconst seconds = Math.floor(milliseconds / timeUtils.units.SECOND_MS);\n\t\tmilliseconds %= timeUtils.units.SECOND_MS;\n\t\tlet timeString = '';\n\t\tif (days > 0) timeString += `${days}${options?.showFull ? ` day${days > 1 ? 's' : ''}` : 'd'} `;\n\t\tif (hours > 0) timeString += `${hours}${options?.showFull ? ` hour${hours > 1 ? 's' : ''}` : 'h'} `;\n\t\t// if (minutes > 0) timeString += `${minutes}${options?.showFull ? ` min${minutes > 1 ? 's' : ''}` : 'm'} `;\n\t\tif (!options.hideMinutes && minutes > 0) timeString += `${minutes}${options?.showFull ? ` min${minutes > 1 ? 's' : ''}` : 'm'} `;\n\t\t// if (seconds > 0) timeString += `${seconds}${options?.showFull ? ` sec${seconds > 1 ? 's' : ''}` : 's'} `;\n\t\tif (!options.hideSeconds && seconds > 0) timeString += `${seconds}${options?.showFull ? ` sec${seconds > 1 ? 's' : ''}` : 's'} `;\n\t\tif (!options.hideMilliseconds && milliseconds > 0) timeString += `${milliseconds}ms `;\n\t\treturn timeString.trim();\n\t},\n\n\tareDatesMoreThanAYearApart: (date1: Date, date2: Date) => {\n\t\tconst oneYearInMilliseconds: number = 365 * 24 * 60 * 60 * 1000; // Assuming a year has 365 days\n\n\t\tconst differenceInMilliseconds: number = Math.abs(date1.getTime() - date2.getTime());\n\t\tconst differenceInYears: number = differenceInMilliseconds / oneYearInMilliseconds;\n\n\t\treturn differenceInYears >= 1;\n\t},\n\tformatHourNumber: (hour?: number | string): string => {\n\t\tif (hour === undefined) return 'N/A';\n\t\thour = parseNumber(hour);\n\t\tif (hour === 0) return '12 AM';\n\t\tif (hour === 12) return '12 PM';\n\t\tif (hour < 12) return `${hour} AM`;\n\t\treturn `${hour - 12} PM`;\n\t},\n\tgetTimeFor,\n};\n\ntype DateFinderOpts = {\n\tstartOf?: boolean; // * If true, will return the start of the time frame, IE if today, will return 12:00 AM\n\tendOf?: boolean; // * If true, will return the end of the time frame, IE if today, will return 11:59 PM\n};\n\n// Returns Milliseconds timestamp for the start of the given date\nconst DateFinders = {\n\ttoday: (options?: DateFinderOpts) => {\n\t\tconst today = new Date();\n\t\tif (options?.startOf) today.setHours(0, 0, 0, 0);\n\t\tif (options?.endOf) today.setHours(23, 59, 59, 999);\n\t\treturn today.getTime();\n\t},\n\tyesterday: (options?: DateFinderOpts) => {\n\t\tconst yesterday = new Date();\n\t\tyesterday.setDate(yesterday.getDate() - 1);\n\t\tif (options?.startOf) yesterday.setHours(0, 0, 0, 0);\n\t\tif (options?.endOf) yesterday.setHours(23, 59, 59, 999);\n\t\treturn yesterday.getTime();\n\t},\n\ttomorrow: (options?: DateFinderOpts) => {\n\t\tconst tomorrow = new Date();\n\t\ttomorrow.setDate(tomorrow.getDate() + 1);\n\t\tif (options?.startOf) tomorrow.setHours(0, 0, 0, 0);\n\t\tif (options?.endOf) tomorrow.setHours(23, 59, 59, 999);\n\t\treturn tomorrow.getTime();\n\t},\n\tlast7Days: (options?: DateFinderOpts) => {\n\t\tconst today = new Date();\n\t\tconst last7Days = new Date(today.setDate(today.getDate() - 7));\n\t\tif (options?.startOf) last7Days.setHours(0, 0, 0, 0);\n\t\tif (options?.endOf) last7Days.setHours(23, 59, 59, 999);\n\t\treturn last7Days.getTime();\n\t},\n\tlast30Days: (options?: DateFinderOpts) => {\n\t\tconst today = new Date();\n\t\tconst last30Days = new Date(today.setDate(today.getDate() - 30));\n\t\tif (options?.startOf) last30Days.setHours(0, 0, 0, 0);\n\t\tif (options?.endOf) last30Days.setHours(23, 59, 59, 999);\n\t\treturn last30Days.getTime();\n\t},\n\tlast90Days: (options?: DateFinderOpts) => {\n\t\tconst today = new Date();\n\t\tconst last90Days = new Date(today.setDate(today.getDate() - 90));\n\t\tif (options?.startOf) last90Days.setHours(0, 0, 0, 0);\n\t\tif (options?.endOf) last90Days.setHours(23, 59, 59, 999);\n\t\treturn last90Days.getTime();\n\t},\n\tlast12months: (options?: DateFinderOpts) => {\n\t\tconst today = new Date();\n\t\tconst last12months = new Date(today.setMonth(today.getMonth() - 12));\n\t\tif (options?.startOf) last12months.setHours(0, 0, 0, 0);\n\t\tif (options?.endOf) last12months.setHours(23, 59, 59, 999);\n\t\treturn last12months.getTime();\n\t},\n} as const;\n\nexport type DateFinder = keyof typeof DateFinders;\n\nfunction getTimeFor(\n\tfinder: DateFinder,\n\toptions?: DateFinderOpts & {\n\t\tunix?: boolean;\n\t},\n) {\n\tconst value = DateFinders[finder](options);\n\tif (options?.unix) return Math.floor(value / 1000);\n\treturn value;\n}\n\n(window as any)['timeUtils'] = timeUtils;\nexport default timeUtils;\n\nexport const calculateAge = (birthDate: Date): number => {\n\tconst today = new Date();\n\tconst birthYear = birthDate.getFullYear();\n\tconst birthMonth = birthDate.getMonth();\n\tconst birthDay = birthDate.getDate();\n\n\tlet age = today.getFullYear() - birthYear;\n\n\tif (today.getMonth() < birthMonth || (today.getMonth() === birthMonth && today.getDate() < birthDay)) {\n\t\tage--;\n\t}\n\n\treturn age;\n};\n","import history from '@/history';\nimport utils from './utils';\n\nexport class Linker {\n\tprivate url: URL;\n\n\tconstructor(path: string, noOrigin = false) {\n\t\tconst base = Linker.getBaseURL(noOrigin);\n\t\tthis.url = Linker.createURL(path, base);\n\t}\n\n\tprivate static getBaseURL(noOrigin: boolean): string {\n\t\tif (typeof window === 'undefined') return '';\n\t\treturn noOrigin ? window.location.href : window.location.origin;\n\t}\n\n\tprivate static createURL(path: string, base: string): URL {\n\t\ttry {\n\t\t\treturn new URL(path, base);\n\t\t} catch (error) {\n\t\t\tconsole.error('Invalid URL:', error);\n\t\t\tthrow new Error('Failed to construct URL.');\n\t\t}\n\t}\n\n\tprivate formatURL(url: string, replacements: Record = {}): string {\n\t\tconst defaultReplacements: Record = { ':uid': utils.uid };\n\t\tconst mergedReplacements = { ...defaultReplacements, ...replacements };\n\n\t\tlet formattedURL = url;\n\t\tfor (const [key, value] of Object.entries(mergedReplacements)) {\n\t\t\tformattedURL = formattedURL.replace(key, value);\n\t\t}\n\t\treturn formattedURL;\n\t}\n\n\tget searchParams(): URLSearchParams {\n\t\treturn this.url.searchParams;\n\t}\n\n\taddParam(key: string, value: string | number | boolean): this {\n\t\tthis.url.searchParams.append(key, value.toString());\n\t\treturn this;\n\t}\n\n\taddParams(params: Record): this {\n\t\tObject.entries(params).forEach(([key, value]) => {\n\t\t\tthis.url.searchParams.append(key, value.toString());\n\t\t});\n\t\treturn this;\n\t}\n\n\tsetParam(key: string, value: string | number): this {\n\t\tthis.url.searchParams.set(key, value.toString());\n\t\treturn this;\n\t}\n\n\tremoveParam(key: string): this {\n\t\tthis.url.searchParams.delete(key);\n\t\treturn this;\n\t}\n\n\topen(inNewTab = false): this {\n\t\tconst target = inNewTab ? '_blank' : '_self';\n\t\tconst formattedURL = this.formatURL(this.url.toString());\n\t\twindow.open(formattedURL, target, 'noopener,noreferrer');\n\t\treturn this;\n\t}\n\n\topenWithHistory(): void {\n\t\tconst historyInstance = history || utils.history;\n\t\tif (!historyInstance) {\n\t\t\tconsole.error('History instance not available.');\n\t\t\tthrow new Error('Cannot open URL with history.');\n\t\t}\n\t\tconst formattedURL = this.formatURL(this.url.toString());\n\t\tconst relativePath = formattedURL.replace(window.location.origin, '');\n\t\thistoryInstance.push(relativePath);\n\t}\n\n\ttoString(): string {\n\t\treturn this.url.toString();\n\t}\n}\n\nexport default Linker;\n","import moment from 'moment';\n\nimport { CustomForm } from '../components/settings/admin/AdminBillingPage';\nimport { RollingBilling } from '@/legacy-types';\nimport { Role } from '@/legacy-types';\nimport { AllTiers, Fees, FeesV2, MessagingCreditPlans, PackageTypes, User } from '@/legacy-types';\nimport utils from './utils';\n\nexport const userUtils = {\n\t// get user name from profile\n\tgetName: () => utils.user?.profile?.name || '',\n\t//* Get users real role\n\tgetRealRole: () => utils.auth.getRole(),\n\t// * Is input role exactly = to real role\n\tisRealRole: (x?: Role) => userUtils.getRealRole() === x,\n\t// * Get users role (role_view) || real role\n\tgetRoleView: () => {\n\t\tif (!userUtils.isAdmin(true)) return userUtils.getRealRole();\n\t\tconst itemStr = utils.local.get('role_view');\n\t\tif (!!itemStr) return itemStr || userUtils.getRealRole();\n\t\treturn userUtils.getRealRole();\n\t},\n\t// * Set the role the current admin/user is viewing as\n\tsetRoleView: (role?: Role) => {\n\t\tif (userUtils.isAdmin(true)) {\n\t\t\tif (userUtils.isRealRole(role)) utils.local.remove('role_view');\n\t\t\telse utils.local.set('role_view', role);\n\t\t\tutils.reload();\n\t\t}\n\t},\n\t// * Is input role exactly = to preview/role_view\n\tisRoleView: (x?: Role) => userUtils.getRoleView() === x,\n\t// * has access to the given role\n\thasRoleView: (x: Role) => {\n\t\tif (userUtils.isRoleView(x)) return true;\n\t\tconst currentWeight = roleWeight[userUtils.getRoleView()];\n\t\treturn currentWeight >= roleWeight[x];\n\t},\n\thasRealRole: (x: Role) => {\n\t\tif (userUtils.isRealRole(x)) return true;\n\t\tconst currentWeight = roleWeight[userUtils.getRealRole()];\n\t\treturn currentWeight >= roleWeight[x];\n\t},\n\troleHasRole: (currRole: Role, x: Role) => {\n\t\tconst currentWeight = roleWeight[currRole];\n\t\treturn currentWeight >= roleWeight[x];\n\t},\n\t// * Is this user a super admin (check real role or preview role)\n\tisSuperAdmin: (real?: boolean) => utils.auth.isSuperAdmin(real ? userUtils.getRealRole() : userUtils.getRoleView()),\n\t// * Is this user an admin (check real role or preview role)\n\tisAdmin: (real?: boolean) => !!utils.auth.isAdmin(real ? userUtils.getRealRole() : userUtils.getRoleView()),\n\t// * Does this user have legacy pricing vs 2023 pricing plan\n\thasLegacyBilling: (user?: User) =>\n\t\t((user || utils.user).fees === undefined && (user || utils.user).feesV2 === undefined) ||\n\t\t(Object.keys((user || utils.user).fees || {}).length !== 0 && Object.keys((user || utils.user).feesV2 || {}).length === 0),\n\t// * Get correct user Fees or FeesV2 object\n\tgetUserFees: (user?: User) => {\n\t\tif (userUtils.hasLegacyBilling(user)) return ((user || utils.user).fees || {}) as Fees;\n\t\treturn ((user || utils.user).feesV2 || {}) as FeesV2;\n\t},\n\t//* Get users real package\n\tgetRealPackage: (pack: PackageTypes, user?: User) => {\n\t\tif (userUtils.hasLegacyBilling(user)) return 'enterprise' as AllTiers;\n\t\treturn ((userUtils.getUserFees(user) as FeesV2).packages || {})[pack]?.type as AllTiers;\n\t},\n\t// * Is input packages exactly = to real packages\n\tisRealPackage: (pack: PackageTypes, tier: AllTiers, user?: User) => {\n\t\treturn userUtils.getRealPackage(pack, user) === tier;\n\t},\n\t// * Get users packages (package_view) || real packages\n\tgetPackageView: (pack: PackageTypes) => {\n\t\tif (!userUtils.isAdmin(true)) return userUtils.getRealPackage(pack);\n\t\tlet itemStr = utils.local.get(`package_${pack}`);\n\t\tif (!!itemStr) return (itemStr || userUtils.getRealPackage(pack)) as AllTiers;\n\t\treturn userUtils.getRealPackage(pack);\n\t},\n\t// * Set the packages the current admin/user is viewing as\n\tsetPackageView: (pack: PackageTypes, tier?: AllTiers) => {\n\t\tif (userUtils.isAdmin(true)) {\n\t\t\tif (!tier) utils.local.remove(`package_${pack}`);\n\t\t\telse utils.local.set(`package_${pack}`, tier);\n\t\t\tutils.reload();\n\t\t}\n\t},\n\t// * Check if input tier exactly = current tier\n\tisPackageTier: (pack: PackageTypes, tier: AllTiers, user?: User) => {\n\t\t// * Legacy users get access to all for now\n\t\tif (userUtils.hasLegacyBilling(user)) return true;\n\t\treturn userUtils.getPackageTier(pack, user) === tier;\n\t},\n\t// * Check if tier is equal to or lower than current tier\n\thasPackageTier: (pack: PackageTypes, tier: AllTiers, user?: User) => {\n\t\t// * Legacy users get access to all for now && same with those viewing as admin\n\t\tif (userUtils.isAdmin() || userUtils.hasLegacyBilling(user)) return true;\n\t\tconst currentWeight = userUtils.getTierWeight(userUtils.getPackageTier(pack, user));\n\t\treturn currentWeight >= userUtils.getTierWeight(tier);\n\t},\n\t// * Get user's current package tier\n\tgetPackageTier: (pack: PackageTypes, user?: User, ignoreAdmin?: boolean) => {\n\t\tif (userUtils.hasLegacyBilling(user)) return 'enterprise' as AllTiers;\n\t\tlet packageTier = (userUtils.getUserFees(user) as FeesV2)?.packages?.[pack]?.type as AllTiers;\n\t\tif (!ignoreAdmin && userUtils.isAdmin(true)) packageTier = userUtils.getPackageView(pack) || packageTier;\n\t\treturn packageTier;\n\t},\n\tgetTierWithoutSuffix: (tier: AllTiers | '') => tier.replace(/-nm|-brand/g, ''),\n\tgetTierWeight: (tier: AllTiers | '') => tierWeight[userUtils.getTierWithoutSuffix(tier) as AllTiers] || 0,\n\t// * Check if tier -> pendingTier is upgrade or downgrade (currentTier < pendingTier)\n\tisUpgrade: (tier: AllTiers | '', pendingTier: AllTiers | '') => userUtils.getTierWeight(tier) < userUtils.getTierWeight(pendingTier),\n\t// * Does this user have the native app\n\thasNativeApp: (user?: User) => {\n\t\tconst legacy = userUtils.hasLegacyBilling(user),\n\t\t\tfees = userUtils.getUserFees(user),\n\t\t\thasMeta = user?.metadata?.hasNativeApp;\n\t\tif (legacy) return (!!(fees as Fees)?.nativeAppCharge && !!(fees as Fees).nativeAppStartDate) || hasMeta;\n\t\treturn (!!(fees as FeesV2)?.nativeAppStartDate && !!(fees as FeesV2).nativeAppTermLength) || hasMeta;\n\t},\n\n\t// * Is the user bundling their V2 Fees packages\n\tisBundling: (user?: User) => {\n\t\tif (userUtils.hasLegacyBilling(user || utils.user)) return false;\n\t\tconst mTier = userUtils.getPackageTier('marketing', user, true),\n\t\t\taTier = userUtils.getPackageTier('analytics', user, true),\n\t\t\tbaTier = userUtils.getPackageTier('brandAnalytics', user, true),\n\t\t\tlTier = userUtils.getPackageTier('loyalty', user, true),\n\t\t\tdTier = userUtils.getPackageTier('dataops', user, true);\n\n\t\treturn !!mTier && !!lTier && !!dTier && (!!aTier || !!baTier);\n\t},\n\n\tvalidateBilling: (user: User, config = {} as { customForm?: CustomForm; fees?: Fees; feesV2: FeesV2 }, hasLegacyBilling: boolean) => {\n\t\tconst errors: string[] = [];\n\t\tlet newFees: Fees | FeesV2 = {};\n\n\t\t// * Verify legacy billing\n\t\tif (hasLegacyBilling) {\n\t\t\tconst customForm: CustomForm = config.customForm || {};\n\t\t\t// * Loop over custom form keys, check if each key is required. If required && has no value add an err\n\t\t\tconst builtFees = Object.keys(customForm || {}).reduce((payload: Fees, name) => {\n\t\t\t\tconst { value, required } = customForm[name as keyof Fees] || {};\n\t\t\t\tpayload[name as keyof Fees] = value;\n\t\t\t\tif (required && (value === '' || value === null || value === undefined)) errors.push(`${name} field is required`);\n\t\t\t\treturn payload;\n\t\t\t}, {});\n\n\t\t\tnewFees = { ...config?.fees, ...builtFees };\n\n\t\t\tlet billingCreation = newFees.billingCreation || 0;\n\t\t\tif (billingCreation && moment().unix() - billingCreation < 60 * 60) billingCreation += 60 * 60;\n\n\t\t\tlet nativeAppStartDate = newFees.nativeAppStartDate || 0;\n\t\t\tif (nativeAppStartDate && moment().unix() - nativeAppStartDate < 60 * 60) nativeAppStartDate += 60 * 60;\n\n\t\t\tnewFees.billingCreation = billingCreation;\n\t\t\tnewFees.nativeAppStartDate = nativeAppStartDate;\n\t\t}\n\t\t// * Verify V2 billing\n\t\tif (!hasLegacyBilling) {\n\t\t\tnewFees = Object.assign({}, config.feesV2) as FeesV2;\n\n\t\t\t// * check and update bundle value only if it's not already set\n\t\t\tif (!newFees.coupon) {\n\t\t\t\t// Get coupon currently on fees object, not that which was passed in\n\t\t\t\tconst currentCoupon = userUtils.getUserFees().coupon;\n\t\t\t\tif (currentCoupon !== '5OFFBUNDLES' && userUtils.isBundling({ feesV2: newFees } as User)) (newFees as FeesV2).coupon = '5OFFBUNDLES';\n\t\t\t\telse (newFees as FeesV2).coupon = undefined;\n\t\t\t}\n\t\t}\n\t\t// @ts-ignore\n\t\tif (!newFees.address && !newFees.address?.street) errors.push(`Invalid billing address`);\n\t\tif ((newFees as Fees).planType === 2 && ((newFees as Fees)?.firstMonthTransactions || 0) < 10)\n\t\t\terrors.push('You must set the customers estimate for month 1 transactions in order to use the per transaction billing plan type.');\n\n\t\treturn [errors as string[], newFees as Fees | FeesV2] as [string[], Fees | FeesV2];\n\t},\n\n\t// * debug mode getter & setter\n\tdebugMode: () => userUtils.isAdmin(true) && utils.local.get('debugMode', false) === true,\n\tsetDebugMode: (bool?: boolean) => {\n\t\tif (bool === undefined) bool = !userUtils.debugMode();\n\t\tif (userUtils.isAdmin(true)) {\n\t\t\tif (!bool) utils.local.remove('debugMode');\n\t\t\telse utils.local.set('debugMode', bool);\n\t\t\tutils.reload();\n\t\t}\n\t},\n\n\t// * use experimental features getter & setter\n\tisExperimental: () => userUtils.isAdmin(true) && utils.local.get('experimental', false) === true,\n\tsetExperimental: (bool?: boolean) => {\n\t\tif (bool === undefined) bool = !userUtils.isExperimental();\n\t\tif (userUtils.isAdmin(true)) {\n\t\t\tif (!bool) utils.local.remove('experimental');\n\t\t\telse utils.local.set('experimental', bool);\n\t\t\tutils.reload();\n\t\t}\n\t},\n\n\tisMessageUpgrade: (currPlan?: MessagingCreditPlans, newPlan?: MessagingCreditPlans) => {\n\t\t// * If new plan is greater than current plan, return its an upgrade\n\t\treturn messagingWeight[newPlan || 'messaging-0k'] > messagingWeight[currPlan || 'messaging-0k'];\n\t},\n\n\tgetMaxCredits: (plan?: MessagingCreditPlans) => {\n\t\treturn messagingWeight[plan || 'messaging-0k'];\n\t},\n\n\t// * -------------\n\t// * DEBUGGING helpers\n\t// * These are used to trigger debugging console logs & optional rendering for devs/admins\n\t// * -------------\n\t// * is debugging item(s)\n\tisDebugging: (...args: string[]) => {\n\t\tconst debugList = userUtils.getDebugging();\n\t\tif (debugList.includes('all')) return true;\n\t\tfor (const arg of args) if (debugList.includes(arg)) return true;\n\t\treturn false;\n\t},\n\t// * add a debugging item\n\taddDebugging: (...args: string[]) => {\n\t\tif (userUtils.isAdmin(true)) {\n\t\t\tconst currentDebugging = userUtils.getDebugging(); // @ts-ignore\n\t\t\tconst uniqueDebugging = [...new Set([...currentDebugging, ...args])];\n\t\t\tutils.local.set('debugging', uniqueDebugging);\n\t\t\tutils.reload();\n\t\t}\n\t},\n\t// * add a debugging item\n\tdelDebugging: (...args: string[]) => {\n\t\tif (userUtils.isAdmin(true)) {\n\t\t\tutils.local.set(\n\t\t\t\t'debugging',\n\t\t\t\tuserUtils.getDebugging().filter((x: string) => !args.includes(x)),\n\t\t\t);\n\t\t\tutils.reload();\n\t\t}\n\t},\n\t// * get debugging items\n\tgetDebugging: () => {\n\t\tif (userUtils.isAdmin(true)) return utils.local.get('debugging', []);\n\t\treturn [] as string[];\n\t},\n\t// * clear debugging items\n\tclearDebugging: () => {\n\t\tif (userUtils.isAdmin(true)) utils.local.remove('debugging');\n\t},\n\n\tgetTotalCreditsUsed: (billing?: Partial) => {\n\t\tif (!billing) return 0;\n\t\treturn (['MMSCredits', 'SMSCredits', 'EmailCredits', 'PushCredits', 'DirectMailCredits'] as (keyof RollingBilling)[]).reduce((acc, key) => {\n\t\t\tlet value = (billing as RollingBilling)[key as keyof RollingBilling] || 0;\n\t\t\tif (typeof value !== 'number') value = value.Count || 0;\n\t\t\treturn acc + (value || 0);\n\t\t}, 0);\n\t},\n};\n\nconst tierWeight: { [key in AllTiers | '']: number } = {\n\t'enterprise': 2,\n\t'pro': 1,\n\t'brand-pro': 1,\n\t'starter': 0,\n\t'brand-starter': 0,\n\t'': -1,\n};\n\nconst roleWeight: { [x: string]: number } = {\n\tadmin_superuser: 10,\n\tadmin_director: 9,\n\tadmin_accountmanager: 8,\n\towner: 7,\n\toperator: 6,\n\tmarketinganalyst: 5,\n\tmarketing: 4,\n\tanalyst: 3,\n\tmanager: 2,\n\tbudtender: 1,\n\tfinancial: 0,\n};\n\nconst messagingWeight: { [x: string]: number } = {\n\t'messaging-0k': 0,\n\t'messaging-8k': 8000,\n\t'messaging-20k': 20000,\n\t'messaging-60k': 60000,\n\t'messaging-125k': 125000,\n\t'messaging-300k': 300000,\n\t'messaging-525k': 525000,\n\t'messaging-825k': 825000,\n\t'messaging-1175k': 1175000,\n\t'messaging-1500k': 1500000,\n\t'messaging-2000k': 2000000,\n\t'messaging-2500k': 2500000,\n\t'messaging-3000k': 3000000,\n\t'messaging-3500k': 3500000,\n\t'messaging-6000k': 6000000,\n\t'messaging-10000k': 10000000,\n\t'messaging-15000k': 15000000,\n\t'messaging-20000k': 20000000,\n\t'messaging-30000k': 30000000,\n\t'messaging-50000k': 50000000,\n\t'messaging-0k-nm': 0,\n\t'messaging-8k-nm': 8000,\n\t'messaging-20k-nm': 20000,\n\t'messaging-60k-nm': 60000,\n\t'messaging-125k-nm': 125000,\n\t'messaging-300k-nm': 300000,\n\t'messaging-525k-nm': 525000,\n\t'messaging-825k-nm': 825000,\n\t'messaging-1175k-nm': 1175000,\n\t'messaging-1500k-nm': 1500000,\n\t'messaging-2000k-nm': 2000000,\n\t'messaging-2500k-nm': 2500000,\n\t'messaging-3000k-nm': 3000000,\n\t'messaging-3500k-nm': 3500000,\n\t'messaging-6000k-nm': 6000000,\n\t'messaging-10000k-nm': 10000000,\n\t'messaging-15000k-nm': 15000000,\n\t'messaging-20000k-nm': 20000000,\n\t'messaging-30000k-nm': 30000000,\n\t'messaging-50000k-nm': 50000000,\n\t'messaging-0k-discount': 0,\n\t'messaging-8k-discount': 8000,\n\t'messaging-20k-discount': 20000,\n\t'messaging-60k-discount': 60000,\n\t'messaging-125k-discount': 125000,\n\t'messaging-300k-discount': 300000,\n\t'messaging-525k-discount': 525000,\n\t'messaging-825k-discount': 825000,\n\t'messaging-1175k-discount': 1175000,\n\t'messaging-1500k-discount': 1500000,\n\t'messaging-2000k-discount': 2000000,\n\t'messaging-2500k-discount': 2500000,\n\t'messaging-3000k-discount': 3000000,\n\t'messaging-3500k-discount': 3500000,\n\t'messaging-6000k-discount': 6000000,\n\t'messaging-10000k-discount': 10000000,\n\t'messaging-15000k-discount': 15000000,\n\t'messaging-20000k-discount': 20000000,\n\t'messaging-30000k-discount': 30000000,\n\t'messaging-50000k-discount': 50000000,\n};\n\ntype EmailListFunc = T extends boolean ? string[] : T extends string ? boolean : never;\n\nexport const adminUtils = {\n\tcanSeeAll: (email?: T): EmailListFunc => {\n\t\tconst emails = ['admin@alpineiq.com', 'nick@alpineiq.com', 'shahzil@alpineiq.com', 'brynner.doyle@alpineiq.com'];\n\t\t// Add a duplicate for each email with .aiq instead of .alpineiq\n\t\temails.push(...emails.map((x) => x.replace('alpineiq', 'aiq')));\n\t\tif (typeof email === 'boolean') {\n\t\t\treturn emails as EmailListFunc;\n\t\t}\n\t\treturn emails.includes(email || utils.auth.getEmail()) as EmailListFunc;\n\t},\n\tengineeringTeam: (email?: T): EmailListFunc => {\n\t\tconst emails = [\n\t\t\t...adminUtils.canSeeAll(true),\n\t\t\t'ahmed@alpineiq.com',\n\t\t\t'matthew.auretta@alpineiq.com',\n\t\t\t'robert.lappert@alpineiq.com',\n\t\t\t'cole.yeager@alpineiq.com',\n\t\t\t'mike.knowles@alpineiq.com',\n\t\t];\n\t\tif (typeof email === 'boolean') {\n\t\t\treturn emails as EmailListFunc;\n\t\t}\n\t\treturn emails.includes(email || utils.auth.getEmail()) as EmailListFunc;\n\t},\n\tsupportTeam: (email?: T): EmailListFunc => {\n\t\tconst emails = [\n\t\t\t...adminUtils.canSeeAll(true),\n\t\t\t'ben.thedford@alpineiq.com',\n\t\t\t'justin.sevik@alpineiq.com',\n\t\t\t'lindsay.breckheimer@alpineiq.com',\n\t\t\t'taizun@alpineiq.com',\n\t\t\t'juna.branca@alpineiq.com',\n\t\t\t'cameron.patch@alpineiq.com',\n\t\t];\n\t\t// Add a duplicate for each email with .aiq instead of .alpineiq\n\t\temails.push(...emails.map((x) => x.replace('alpineiq', 'aiq')));\n\t\tif (typeof email === 'boolean') {\n\t\t\treturn emails as EmailListFunc;\n\t\t}\n\t\treturn emails.includes(email || utils.auth.getEmail()) as EmailListFunc;\n\t},\n\tbillingTeam: (email?: T): EmailListFunc => {\n\t\tconst emails: string[] = ['dawn.mason@alpineiq.com', 'katya.reeve@alpineiq.com', 'shantay.barrett@alpineiq.com', 'steve.bastian@aiq.com', 'andrew.cook@alpineiq.com'];\n\t\t// Add a duplicate for each email with .aiq instead of .alpineiq\n\t\temails.push(...emails.map((x) => x.replace('alpineiq', 'aiq')));\n\t\tif (typeof email === 'boolean') {\n\t\t\treturn emails as EmailListFunc;\n\t\t}\n\t\treturn emails.includes(email || utils.auth.getEmail()) as EmailListFunc;\n\t},\n\tmarketingTeam: (email?: T): EmailListFunc => {\n\t\tconst emails: string[] = ['daniel.aversa@alpineiq.com', 'jordie.lowe@alpineiq.com', 'matt.semyck@aiq.com', 'katie.howe@aiq.com'];\n\t\t// Add a duplicate for each email with .aiq instead of .alpineiq\n\t\temails.push(...emails.map((x) => x.replace('alpineiq', 'aiq')));\n\t\tif (typeof email === 'boolean') {\n\t\t\treturn emails as EmailListFunc;\n\t\t}\n\t\treturn emails.includes(email || utils.auth.getEmail()) as EmailListFunc;\n\t},\n\thubspotWhitelist: (email?: T): EmailListFunc => {\n\t\tconst emails: string[] = [...adminUtils.canSeeAll(true), 'ben.thedford@alpineiq.com', 'cole.yeager@alpineiq.com'];\n\t\t// Add a duplicate for each email with .aiq instead of .alpineiq\n\t\temails.push(...emails.map((x) => x.replace('alpineiq', 'aiq')));\n\t\tif (typeof email === 'boolean') {\n\t\t\treturn emails as EmailListFunc;\n\t\t}\n\t\treturn emails.includes(email || utils.auth.getEmail()) as EmailListFunc;\n\t},\n\tcanViewBilling: (email?: T): EmailListFunc => {\n\t\tconst emails: string[] = [...adminUtils.canSeeAll(true), ...adminUtils.billingTeam(true), 'jacob.francis@alpineiq.com'];\n\t\t// Add a duplicate for each email with .aiq instead of .alpineiq\n\t\temails.push(...emails.map((x) => x.replace('alpineiq', 'aiq')));\n\t\tif (typeof email === 'boolean') {\n\t\t\treturn emails as EmailListFunc;\n\t\t}\n\t\treturn emails.includes(email || utils.auth.getEmail()) as EmailListFunc;\n\t},\n\tisBillingAdmin: (email?: T): EmailListFunc => {\n\t\tconst emails: string[] = [...adminUtils.canSeeAll(true), ...adminUtils.billingTeam(true)];\n\t\tif (typeof email === 'boolean') {\n\t\t\treturn emails as EmailListFunc;\n\t\t}\n\t\treturn emails.includes(email || utils.auth.getEmail()) as EmailListFunc;\n\t},\n\tcanViewUserAlerts: (email?: T): EmailListFunc => {\n\t\tconst emails: string[] = [\n\t\t\t...adminUtils.canSeeAll(true),\n\t\t\t...adminUtils.marketingTeam(true),\n\t\t\t'ben.thedford@alpineiq.com',\n\t\t\t'ben.cooper@alpineiq.com',\n\t\t\t'sydney.harris@alpineiq.com',\n\t\t\t'justin.baker@alpineiq.com',\n\t\t];\n\t\t// Add a duplicate for each email with .aiq instead of .alpineiq\n\t\temails.push(...emails.map((x) => x.replace('alpineiq', 'aiq')));\n\t\tif (typeof email === 'boolean') {\n\t\t\treturn emails as EmailListFunc;\n\t\t}\n\t\treturn emails.includes(email || utils.auth.getEmail()) as EmailListFunc;\n\t},\n\tcanActivateUserAlerts: (email?: T): EmailListFunc => {\n\t\tconst emails: string[] = [...adminUtils.canSeeAll(true), ...adminUtils.marketingTeam(true), 'ben.cooper@alpineiq.com'];\n\t\t// Add a duplicate for each email with .aiq instead of .alpineiq\n\t\temails.push(...emails.map((x) => x.replace('alpineiq', 'aiq')));\n\t\tif (typeof email === 'boolean') {\n\t\t\treturn emails as EmailListFunc;\n\t\t}\n\t\treturn emails.includes(email || utils.auth.getEmail()) as EmailListFunc;\n\t},\n};\n\n// @ts-ignore\n// biome-ignore lint/complexity/useLiteralKeys: \nwindow['userUtils'] = userUtils;\n\nexport default userUtils;\n","import { notification, Row, Space, Tag, Tooltip } from 'antd';\nimport { cloneDeep } from 'lodash';\nimport moment from 'moment';\nimport React, { useEffect, useState } from 'react';\n\nimport { CampaignConversionActionMap, ConversionAction, Role, User } from '@/legacy-types';\nimport { ToastProps } from '@alpine-iq/ui-library';\nimport Break from '../components/Break';\nimport { DEMO_ACCT_UIDS, DEMO_AGENCY_UID, DEV_TEST_UIDS } from '../constants';\nimport { PublicCSS } from '../cssData';\nimport history from '../history';\nimport { TemplateType } from '../pages/campaigns/legacyBuilder/WaterfallSelector';\nimport { NotificationConfig } from './alerts';\nimport AuthService from './auth/authService';\nimport { timeUtils } from './timeUtils';\nimport userUtils from './userUtils';\nimport { storage } from '.';\n\nconst colors: any = {\n\tinfo: '#1890FF',\n\tsuccess: '#6262F5',\n\terror: '#ff4d7e',\n\twarn: '#E89C56',\n\twarning: '#E89C56',\n};\n\nconst defaultMessage: any = {\n\tsuccess: 'Success',\n\terror: 'Error',\n\twarn: 'Warning',\n\tinfo: 'Info',\n};\n\nclass PromiseAny {\n\tq: any[];\n\tconstructor() {\n\t\tthis.q = [];\n\t}\n\n\tpush = (p: any) => this.q.push(p);\n\n\texecAll = () => Promise.all(this.q);\n\n\texec = async () => {\n\t\tconst all = await Promise.allSettled(this.q);\n\t\tthis.q = [];\n\t\treturn all.map((res) => (res.status === 'fulfilled' ? res.value : undefined));\n\t};\n}\n\nexport const utils = {\n\t// ! token for testing with eps (not used for PUT/POST/DELETE, only GET requests or POST that just return data)\n\tTEST_UID: '', // '1099',\n\tTOKEN: '',\n\ttemplateTypes: ['pushTemplate', 'emailTemplate', 'templates', 'adTemplate', 'browserTemplate', 'snailMailTemplate'] as TemplateType[],\n\tuid: '' as string,\n\trealID: '',\n\tauth: new AuthService() as AuthService,\n\tuser: { profile: { name: '' } } as User,\n\tdashData: {\n\t\tplans: [],\n\t\tposList: [],\n\t},\n\tasHost: '',\n\tparams: {} as any,\n\thistory: history,\n\ttoaster: {} as ToastContextProps, // For cases where we NEED toasts outside of React components\n\n\tisDevUID: (uid?: string) => DEV_TEST_UIDS.includes(uid || utils.uid),\n\tisDemo: (uid?: string) => [...DEMO_ACCT_UIDS, ...DEV_TEST_UIDS].includes(uid || utils.uid) || utils.user.agencyID === DEMO_AGENCY_UID,\n\tAYR: ['1197', '1230', '1205', '1361', '1362', '1540', '1487', '1392', '1851', '1382', '2496', '2736'],\n\thideVoiceConvs: ['1395', '1429', '1390', '1210'],\n\n\tisAYR: () => {\n\t\tconst agencyID = '1196';\n\t\treturn utils.AYR.includes(utils.uid) || utils.user.agencyID === agencyID;\n\t},\n\tisDispojoy: () => {\n\t\tconst agencyID = '3579';\n\t\treturn utils.uid === agencyID || utils.user.agencyID === agencyID;\n\t},\n\tisMessageDigital: () => {\n\t\tconst agencyID = '3490';\n\t\treturn utils.uid === agencyID || utils.user.agencyID === agencyID;\n\t},\n\tisWAB: () => {\n\t\tconst agencyID = '3840';\n\t\tconst sandboxID = '3893';\n\t\tconst isAgency = utils.uid === agencyID || utils.user.agencyID === agencyID;\n\t\tconst isSandbox = utils.uid === sandboxID || utils.user.agencyID === sandboxID;\n\t\treturn isAgency || isSandbox;\n\t},\n\tspecialPoliticalAgencies: ['3490', '3579'],\n\tisPolitical() {\n\t\treturn utils.user?.profile?.industry === 'political';\n\t},\n\thasInfoBipCampaignID(user?: Partial) {\n\t\treturn !!(user ?? utils.user)?.infobipCmpID;\n\t},\n\thasTelnyxCampaignID(user?: Partial) {\n\t\t// This is enabled always for 1091 demo account\n\t\tif (utils.uid === '1091') return true;\n\t\treturn !!(user ?? utils.user)?.tcmpID;\n\t},\n\thasApprovedTelnyxCampaign(user?: Partial) {\n\t\tif (utils.uid === '1091') return true;\n\t\treturn (user ?? utils.user)?.approvedTelnyxCampaign;\n\t},\n\thas10DLC(user?: Partial) {\n\t\treturn !!utils.hasApprovedTelnyxCampaign(user) || !!utils.hasInfoBipCampaignID(user);\n\t},\n\thasRestrictedIndustry10DLC(user?: Partial) {\n\t\t// if (utils.isStagingDev() && utils.isDevUID()) return true;\n\t\tconst has10DLC = utils.has10DLC(user);\n\t\tconst isRestrictedIndustry = utils.isRestrictedIndustry(user);\n\t\treturn has10DLC && isRestrictedIndustry;\n\t},\n\n\tprodDomain: 'https://lab.alpineiq.com',\n\tstagingDomain: 'https://lab.aiqstaging.net',\n\trealDomain: () => {\n\t\tif (utils.isStagingDev()) return utils.stagingDomain;\n\t\tif (utils.isStaging()) return utils.stagingDomain;\n\t\treturn utils.prodDomain;\n\t},\n\tapiDomain: (force?: boolean) => {\n\t\tif (force) return utils.prodDomain;\n\t\tif (utils.isStagingDev()) return utils.stagingDomain;\n\t\treturn '';\n\t},\n\tisLocal: () => location.hostname === 'localhost',\n\tisAlpineMain: () => location.hostname === 'lab.alpineiq.com',\n\tisStaging: () => location.hostname.includes('aiqstaging.net'),\n\tisStagingDev: () => location.hostname.includes('lab-dev.aiqstaging.net'),\n\tisVercelPreview: () => location.hostname?.includes('vercel.app'),\n\tisAPI: () => location.hostname.includes('api.alpineiq.com'),\n\tisShortyDomain(url?: string): boolean {\n\t\tif (utils.isLocal()) return false;\n\t\tif (utils.isStagingDev()) return false;\n\t\tif (utils.isAlpineMain()) return false;\n\t\ttry {\n\t\t\tconst parsedUrl = new URL(url || location.href);\n\t\t\tif (parsedUrl.protocol !== 'https:' && parsedUrl.protocol !== 'http:') {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst domain = parsedUrl.hostname;\n\t\t\tif (!domain.endsWith('.com')) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst domainName = domain.replace('.com', '').replace(/^www\\./, '');\n\n\t\t\t// Check overall domain name length (<= 11 characters)\n\t\t\tif (domainName.length > 11) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Split by hyphen if present\n\t\t\tconst parts = domainName.split('-');\n\n\t\t\t// Check that each part (if any) is short enough (no more than 7 characters)\n\t\t\tif (parts.length > 1) {\n\t\t\t\tfor (const part of parts) {\n\t\t\t\t\tif (part.length > 7) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check for underscores, which are not allowed\n\t\t\tif (domainName.includes('_')) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// If the URL is invalid or can't be parsed, return false\n\t\t\treturn false;\n\t\t}\n\t},\n\t// True if env is staging, stagingDev, or local\n\tisDevEnv: () => {\n\t\treturn utils.isLocal() || utils.isStaging() || utils.isStagingDev();\n\t},\n\tgetUIDFromPath: (path = location.pathname) => {\n\t\tconst uid = path.match(/\\d{4,5}/);\n\t\treturn uid ? uid[0] : '';\n\t},\n\tgetCorsRedirectByURL: (url = location.href) => {\n\t\tif (url.includes('/wallet')) {\n\t\t\tconst uid = utils.getUIDFromPath(url);\n\t\t\treturn `http://${uid}.w.alpineiq.com/`;\n\t\t}\n\t\tif (url.includes('/join')) {\n\t\t\treturn url.replace(location.hostname, 'lab.alpineiq.com');\n\t\t}\n\t\treturn null;\n\t},\n\tisSuperAdmin: () => utils.auth.isSuperAdmin(utils.auth.getRole()),\n\tisAdmin: () => utils.auth.isAdmin(utils.auth.getRole()),\n\n\tcurrentUser: () => (utils.auth.currentUser || {}) as User,\n\tinitialUser: () => (utils.auth.initialUser || {}) as User,\n\n\tgetSubType: () => utils.user?.subType || 'retail',\n\tisVertical: (str?: string) => (str || utils.getSubType()) === 'vertical',\n\tisRetailOnly: (str?: string) => (str || utils.getSubType()) === 'retail' || (str || utils.getSubType()) === undefined,\n\tisBrandOnly: (str?: string) => (str || utils.getSubType()) === 'brand',\n\tisFreemiumVertical: (str?: string) => (str || utils.getSubType()) === 'freemium-vertical',\n\tisFreemiumRetail: (str?: string) => (str || utils.getSubType()) === 'freemium-retail' || utils.isFreemiumVertical(),\n\tisFreemiumBrand: (str?: string) => (str || utils.getSubType()) === 'freemium-brand' || utils.isFreemiumVertical(),\n\tisSandbox: (str?: string) => (str || utils.getSubType()) === 'sandbox',\n\n\tisFreemium: (str?: string) => (str || utils.getSubType()).includes('freemium'),\n\tisBrand: (str?: string) =>\n\t\tutils.isBrandOnly(str) || utils.isVertical(str) || ['1034', '1683'].includes(utils.uid) || (utils.user?.fees?.brandLicenseCharge || 0) > 0,\n\tisRetail: (str?: string) => utils.isRetailOnly(str) || utils.isVertical(str) || ['1034'].includes(utils.uid),\n\n\tisCannabis: (user?: Partial) => (user ?? utils.user).profile?.industry === 'cannabis',\n\tisBevAlc: (user?: Partial) => (user ?? utils.user).profile?.industry === 'brewery',\n\tisCoffee: (user?: Partial) => (user ?? utils.user).profile?.industry === 'coffee',\n\tisRestrictedIndustry: (user?: Partial) => utils.isCannabis(user) || utils.isBevAlc(user),\n\tgetBudtenderTerm: () => (utils.isCannabis() ? 'Budtender' : utils.isBevAlc() ? 'Bartender' : 'Staff Member'),\n\n\tisAgency: () => utils.user.type === 'agency',\n\tisAdminAgency: () => {\n\t\treturn utils.uid === '1';\n\t},\n\n\tnow: (useMoment = false) => (useMoment ? moment().unix() : Math.floor(new Date().getTime() / 1000)),\n\n\tisSubUser() {\n\t\tconst p = utils.initialUser().profile;\n\t\treturn !!p && p.isSub;\n\t},\n\n\tisSuper() {\n\t\tif (utils.realID !== utils.uid) return true;\n\t\tconst { type } = utils.initialUser() || utils.currentUser() || { type: '' };\n\t\treturn type === 'admin' || type === 'agency';\n\t},\n\n\treload: async (path = '', wait = 0) => {\n\t\t/* eslint no-restricted-globals: 0 */\n\t\tconst loc = path || location.pathname,\n\t\t\thist = utils.history || history;\n\t\tif (wait === 0) {\n\t\t\tif (!path || path === location.pathname) {\n\t\t\t\tawait hist.go(0);\n\t\t\t} else {\n\t\t\t\tawait hist.replace(loc);\n\t\t\t}\n\t\t} else setTimeout(() => utils.reload(path), wait);\n\t},\n\n\tvalidLoginPath: (path: any) => {\n\t\tconst inValidPaths = ['login', 'logout', 'resetpassword', 'forgotpassword', 'register'];\n\t\tif (inValidPaths.some((p) => utils.strify(path).includes(p))) return '';\n\t\treturn path;\n\t},\n\n\tisCanadaBilling: () => {\n\t\tconst fees = userUtils.getUserFees();\n\t\tconst country = (fees.address?.country || utils.user?.address?.country || '').toLowerCase();\n\t\treturn country === 'canada' || country === 'ca';\n\t},\n\n\thome: (u?: User) => {\n\t\tconst user: User | undefined = u || utils.auth.currentUser || undefined;\n\t\tconst role = userUtils.getRoleView() as Role;\n\t\tconst path = utils.validLoginPath(location.pathname + location.search);\n\n\t\tconst loginURL = `/login${path ? `?p=${path}` : ''}`;\n\t\tif (!user) return loginURL;\n\t\tif (utils.auth.isSuperAdmin(role)) return '/admin';\n\t\tif (utils.auth.isAdmin(role)) return '/search';\n\t\tif (role === Role.BUDTENDER) return '/walletsearch/' + user.id;\n\t\tif (role === Role.MANAGER) return `/personas/${user.id}`;\n\t\tif (role === Role.FINANCIAL) return `/settings/${user.id}/loyalty/reporting`;\n\t\tif (user.type === 'agency') return '/agency/' + user.id;\n\t\tif (user.type === 'advertiser') return '/missionControl/' + user.id;\n\t\treturn loginURL;\n\t},\n\n\tgetWalletURL: (uid: any, cnt: any) => {\n\t\tconst kw = cnt.mobilePhone || cnt.homePhone || cnt.email || cnt.secondaryEmail;\n\t\tif (kw) return `/walletsearch/${uid}/${kw}`;\n\t\treturn `/walletsearch/byID/${uid}/${cnt.contactID || encodeURIComponent(cnt.srcID)}`;\n\t},\n\n\tappendQueryParam: (k: any, v: any, replace = true) => {\n\t\tconst pathname = location.pathname,\n\t\t\tquery = new URLSearchParams(location.search);\n\t\tif (v === null || v === undefined) query.delete(k);\n\t\telse query.set(k, v);\n\t\tconst o = {\n\t\t\tpathname,\n\t\t\tsearch: query.toString(),\n\t\t};\n\t\tif (replace) history.replace(o);\n\t\telse history.push(o);\n\t},\n\n\tqueryParam: (p: any, s = location.search) => {\n\t\tconst re = new RegExp('(?:[?&]|^)' + p + '=([^&]+)(?:[&]|$)'),\n\t\t\tm = s.match(re);\n\t\treturn (m && m.length === 2 ? decodeURIComponent(decodeURI(m[1])) : '') as any;\n\t},\n\n\tshowErr: (err: any, timeout?: any, debugOnly?: boolean, key?: string) => {\n\t\tif (!err || (debugOnly && !userUtils.debugMode())) return;\n\t\tconsole.error(typeof err, err);\n\t\tif (err instanceof Error) err = err.message;\n\t\tif (typeof err === 'object') {\n\t\t\tconst all = utils\n\t\t\t\t.map(err, (v: any, k: any) => {\n\t\t\t\t\tif (v.error) return `${k}: ${v}`;\n\t\t\t\t\tlet e = '';\n\t\t\t\t\ttry {\n\t\t\t\t\t\te = utils.map(v.errors, (v1: any) => v1.message).join('\\n');\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\te = v;\n\t\t\t\t\t}\n\t\t\t\t\treturn `${e}`;\n\t\t\t\t})\n\t\t\t\t.filter(Boolean);\n\t\t\tif (all.length) err = all.join('\\n');\n\t\t}\n\t\tif (typeof err.toString === 'function') err = err.toString();\n\t\tif (typeof err !== 'string') err = JSON.stringify(err);\n\t\t// Ignore the openAI errors in cmp builder, can bb remove after we decide what to do w it\n\t\tif (err.includes(`https://platform.openai.com/account/api-keys`) && utils.isLocal()) return;\n\t\tif (err && err?.includes(`. Please try again in 30-60 minutes`)) err = `This action is temporarily unavailable. Please try again later`;\n\t\tif (err && err.includes('&texty')) return;\n\t\tutils.sendNotification({\n\t\t\tkey,\n\t\t\ttype: 'error',\n\t\t\tmessage: 'Error',\n\t\t\tdescription: utils.capitalize(err),\n\t\t\tduration: timeout || err.indexOf('://') > -1 ? 45 : 10,\n\t\t\tplacement: debugOnly ? 'top' : 'topRight',\n\t\t});\n\t},\n\n\tshowErrs: (errors: string[], prefix?: string) => {\n\t\tif (!errors.length) return;\n\t\treturn utils.notify(\n\t\t\tprefix || `Error${errors.length ? 's' : ''} while saving`,\n\t\t\terrors.map((err: string, key) => (\n\t\t\t\t
\n\t\t\t\t\t{!!key ? (\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\t{err}\n\t\t\t\t
\n\t\t\t)),\n\t\t\t10,\n\t\t\t'error',\n\t\t);\n\t},\n\n\tshowSuccess: (msg: any) => {\n\t\tif (!msg) return;\n\t\tif (typeof msg !== 'string') msg = JSON.stringify(msg);\n\t\tutils.notify('Success', msg);\n\t},\n\n\tsetLoading: (comp: any, key: any, v: any) => comp.setState({ ...(comp.state || {}), [key]: v }),\n\n\tcapitalize: (s: any) => {\n\t\tif (typeof s !== 'string') return '';\n\t\treturn s.charAt(0).toUpperCase() + s.slice(1);\n\t},\n\n\tmath: {\n\t\tpercentOf: (a: any, b: any) => (a || 0) / (b || 0) || 0,\n\t\tpercentDiff: (A: any, B = A) => 100 * Math.abs((A - B) / ((A + B) / 2)),\n\t\trealPercDiff: (new_value = 0, original_value = new_value) => ((new_value - original_value) / Math.abs(original_value)) * 100,\n\t\tpercentInc: (A: any, B = A) => ((A - B) / B) * 100,\n\t\t// * Find variance and standardDeviation in array of numbers\n\t\tfindVariance: (arr = [] as any[]) => {\n\t\t\tlet mean: any = arr.reduce((acc, curr) => acc + curr, 0) / arr.length; // @ts-ignore\n\t\t\tarr = arr.map((k: any) => (k - mean) ** 2);\n\t\t\tlet sum: any = arr.reduce((acc, curr) => acc + curr, 0),\n\t\t\t\tvariance = sum / arr.length || 0,\n\t\t\t\tavgVariance = variance / arr.length || 0;\n\t\t\treturn { variance, avgVariance, standardDeviation: Math.sqrt(sum / arr.length) || 0 };\n\t\t},\n\t},\n\n\tlocal: {\n\t\tset: (key: any, value: any, time?: number) => storage.set(key, value, time),\n\t\tget: (key: any, backup?: any) => storage.get(key, backup),\n\t\tremove: (key: any) => storage.remove(key),\n\t\texpiryTime: (x: number, v: 's' | 'm' | 'h' | 'd') => {\n\t\t\tif (!x || !v) return x;\n\t\t\tif (v == 's') return x * 1000;\n\t\t\tif (v == 'm') return x * (60 * 1000);\n\t\t\tif (v == 'h') return x * 60 * (60 * 1000);\n\t\t\tif (v == 'd') return x * 24 * (60 * (60 * 1000));\n\t\t\treturn x;\n\t\t},\n\t},\n\n\t// Helper to parse the custom input value since it's converted to JSON\n\tparseValueOrUndefined: (v: any) => {\n\t\tif (typeof v === 'string')\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(v);\n\t\t\t} catch (e) {}\n\t\treturn v;\n\t},\n\n\tdarkMode: (localStorage.getItem('darkMode') === 'true' || false) as boolean,\n\ttoggleTheme: () => {\n\t\t// @ts-ignore\n\t\tlocalStorage.setItem('darkMode', !utils.darkMode);\n\t\tutils.reload();\n\t},\n\n\tfmtTS: (ts: any, short = false, slash = false, showAm = false, readable = false) => {\n\t\tif (!ts) return 'N/A';\n\t\tif (readable)\n\t\t\treturn (ts instanceof Date ? ts : new Date(typeof ts === 'number' ? ts * 1000 : ts)).toLocaleString('default', {\n\t\t\t\tmonth: 'short',\n\t\t\t\tday: '2-digit',\n\t\t\t\tyear: 'numeric',\n\t\t\t\t...(showAm ? { hour: '2-digit', minute: '2-digit' } : {}),\n\t\t\t});\n\t\tconst fTs = moment\n\t\t\t.unix(ts)\n\t\t\t.local()\n\t\t\t.format(short ? 'YYYY-MM-DD' : `YYYY-MM-DD ${showAm ? 'hh:mm:a' : 'HH:mm'}`);\n\t\treturn slash ? fTs.replaceAll('-', '/') : fTs;\n\t},\n\tfmtTSFlipped: (ts: any, def = '') => (ts > 0 ? moment.unix(ts).local().format('MM-DD-YYYY HH:mm') : def),\n\tfmtDateToEpoch: (date: any) => moment(date, 'YYYY-MM-DD HH:mm').valueOf(),\n\tfmtPrice: (am: any, curr: any, trim = false) => `${curr === 'USD' ? '$' : 'CA$'}${parseFloat(trim ? am : am / 100).toLocaleString()}`,\n\n\tunique: (arr: any) => {\n\t\tconst o: any = {};\n\t\tfor (const k of arr) o[k] = true;\n\t\treturn Object.keys(o).sort();\n\t},\n\n\tforEach: (data: any, fn: any) => {\n\t\tif (!data || typeof data !== 'object') return;\n\n\t\tif (typeof data.forEach === 'function') return data.forEach(fn);\n\n\t\tfor (const key of Object.keys(data)) {\n\t\t\tif (fn(data[key], key) === false) return;\n\t\t}\n\t},\n\n\tmap: (data: any, fn: any) => {\n\t\tif (typeof data === 'string') {\n\t\t\ttry {\n\t\t\t\tdata = JSON.parse(data); // wtf man..\n\t\t\t} catch (err) {\n\t\t\t\treturn data;\n\t\t\t}\n\t\t}\n\t\tif (!data || typeof data !== 'object') return data;\n\t\tif (typeof data.map === 'function') return data.map(fn);\n\t\treturn Object.keys(data).map((k) => fn(data[k], k));\n\t},\n\n\tfilterObj: (obj: any, fn: any) => {\n\t\tif (typeof obj !== 'object') return obj;\n\t\tconst out: any = {};\n\t\tfor (const [k, v] of Object.entries(obj)) {\n\t\t\tif (fn(k, v, obj)) out[k] = v;\n\t\t}\n\t\treturn out;\n\t},\n\n\ttoFixedLocale: (n?: any, acc = 2, money = false) =>\n\t\tn === null || n === undefined || isNaN(n)\n\t\t\t? money\n\t\t\t\t? '$0'\n\t\t\t\t: '0'\n\t\t\t: money\n\t\t\t\t? `$${parseFloat(n.toFixed(acc)).toLocaleString()}`\n\t\t\t\t: parseFloat(n.toFixed(acc)).toLocaleString(),\n\n\tformatNumber,\n\tdoCompare: (a: any, b: any) => {\n\t\tif (a === b) return 0;\n\t\tif (a == null) return 1;\n\t\tif (typeof a === 'string') return a.localeCompare(b);\n\t\treturn a > b ? 1 : -1;\n\t},\n\n\treplaceConversionLabel: (conversionActionName: any) => {\n\t\tlet actions: { [key: string]: string } = (Object.keys(CampaignConversionActionMap) as ConversionAction[]).reduce(\n\t\t\t(acc, key) => ({ ...acc, [key]: CampaignConversionActionMap[key].description }),\n\t\t\t{},\n\t\t);\n\t\treturn conversionActionName in actions ? actions[conversionActionName] : conversionActionName;\n\t},\n\n\t// @ts-ignore\n\tisPuppy: () => document.body.classList.has('puppy'),\n\t// emailRE: /^\\w+([.-]?\\w+)*@\\w+([.-]?\\w+)*(\\.\\w{2,6})+$/,\n\temailRE: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<,>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n\tphoneRex: /^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$/,\n\t// UUID RE, to find contactIDs / uuids\n\tuuidRE: /\\b(uuid:){0,1}\\s*([a-f0-9\\\\-]*){1}\\s*/,\n\n\tgetRandomArbitrary: (min = 0, max = 100) => Math.random() * (max - min) + min,\n\tstrify,\n\tsorter: (fld: any = 'null', ascended = true) => {\n\t\tif (fld == 'null') fld = null;\n\t\tconst ffn = (v: any) => {\n\t\t\ttry {\n\t\t\t\tif (fld == null) return v;\n\t\t\t\tif (typeof fld === 'function') return fld(v);\n\t\t\t\treturn v ? v[fld] : null;\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(e);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\tconst clean = (v: any) => {\n\t\t\tv = ffn(v);\n\t\t\tif (v == null) return null;\n\t\t\tif (typeof v === 'boolean') return v ? 1 : 0;\n\t\t\tif (typeof v === 'number' && isNaN(v)) return -1;\n\t\t\tif (typeof v === 'string') {\n\t\t\t\t// @ts-ignore\n\t\t\t\tif (isNaN(v)) return v;\n\t\t\t\tconst fv = parseFloat(v);\n\t\t\t\tv = isNaN(fv) ? v : fv;\n\t\t\t}\n\t\t\treturn v;\n\t\t};\n\n\t\treturn ((a: any, b: any) => {\n\t\t\tlet av = clean(ascended ? a : b),\n\t\t\t\tbv = clean(ascended ? b : a);\n\n\t\t\tif (bv == null && typeof av === 'number') bv = 0;\n\t\t\tif (av == null && typeof bv === 'number') av = 0;\n\n\t\t\tif (typeof av === 'number' && typeof bv === 'number') return av - bv;\n\n\t\t\tif (typeof av === 'string' || typeof bv === 'string') {\n\t\t\t\tav = (av + '' || '').toLocaleLowerCase();\n\t\t\t\tbv = (bv + '' || '').toLocaleLowerCase();\n\t\t\t\treturn av.localeCompare(bv);\n\t\t\t}\n\n\t\t\tif (av < bv) return -1;\n\t\t\tif (av > bv) return 1;\n\t\t\treturn 0;\n\t\t}) as any;\n\t},\n\n\tsort: (inp: any, fld = null as any, ascended = true) => (inp || []).sort(utils.sorter(fld, ascended)),\n\n\tequal: (a: any, b: any) => {\n\t\tif (a === b) return true;\n\t\tif (a == null || b == null) return false;\n\t\tif (typeof a !== 'object') return false;\n\t\tif (typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n\n\t\tconst aks = Object.keys(a).sort(),\n\t\t\tblen = Object.keys(b).length;\n\n\t\tif (aks.length !== blen) return false;\n\t\tfor (const k of aks) {\n\t\t\tif (!utils.equal(a[k], b[k])) return false;\n\t\t}\n\n\t\treturn true;\n\t},\n\t// @ts-ignore\n\tremoveDuplicates: (arr = []) => [...new Set(arr)],\n\n\tfilterSelect: (inputValue: any, option: any) =>\n\t\toption!.value.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1 || option!.label.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1,\n\n\tclone: (object: any) => {\n\t\ttry {\n\t\t\tif (object instanceof Date) return new Date(object);\n\t\t\tif (object == null || typeof object !== 'object' || '__clone' in object) {\n\t\t\t\treturn object;\n\t\t\t}\n\n\t\t\tconst parseify = (v: any) => JSON.parse(JSON.stringify(v));\n\t\t\tconst cloneFunc = cloneDeep ?? structuredClone ?? parseify;\n\t\t\treturn cloneFunc(object);\n\t\t} catch (err) {\n\t\t\treturn cloneDeep(object);\n\t\t}\n\t},\n\tfileExists: async (fp: any) => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst img = new Image();\n\t\t\timg.onerror = () => resolve(false);\n\t\t\timg.onload = () => resolve(true);\n\t\t\timg.src = fp;\n\t\t});\n\t},\n\n\ttoCamel: (s: any) => {\n\t\treturn s.replace(/([-_][a-z])/gi, ($1: any) => {\n\t\t\treturn $1.toUpperCase().replace('-', '').replace('_', '');\n\t\t});\n\t},\n\n\timageInfo: async (src: any) => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst img = new Image();\n\t\t\timg.src = src;\n\t\t\timg.onload = () => resolve({ src, width: img.width, height: img.height });\n\t\t\timg.onerror = reject;\n\t\t});\n\t},\n\n\treadFile: (file: any, type = 'text') => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst rd = new FileReader();\n\n\t\t\trd.onload = () => resolve(rd.result);\n\t\t\trd.onerror = reject;\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'text':\n\t\t\t\t\treturn rd.readAsText(file); // @ts-ignore\n\t\t\t\tcase 'b64image':\n\t\t\t\t\trd.onload = () => utils.imageInfo(rd.result).then(resolve);\n\t\t\t\t// fallthrough\n\t\t\t\tcase 'b64':\n\t\t\t\t\treturn rd.readAsDataURL(file);\n\t\t\t\tdefault:\n\t\t\t\t\treturn rd.readAsBinaryString(file);\n\t\t\t}\n\t\t});\n\t},\n\n\tloadFonts: (fonts: string[]) => {\n\t\tconst all = (fonts || []).map((v: any) => v.replace(/\\s+/g, '+')).join('|');\n\t\tconst ele = document.createElement('link');\n\t\tele.rel = 'stylesheet';\n\t\tele.type = 'text/css';\n\t\tele.href = `https://fonts.googleapis.com/css?family=${all}`;\n\t\tele.media = 'all';\n\t\tdocument.head.appendChild(ele);\n\t\treturn () => document.head.removeChild(ele);\n\t},\n\n\tmerge: require('deepmerge'),\n\n\ttrimObject,\n\tsearchObject: (obj: any, search: any, config: any) => {\n\t\tif (!obj || !search) return false;\n\n\t\tconst { vOnly = false, kOnly = false, recursion = true }: any = config;\n\t\tsearch = search.toLowerCase().trim();\n\n\t\tconst keys = Object.keys(obj),\n\t\t\tvalues = Object.values(obj);\n\t\tlet kcontains: any = false,\n\t\t\tvcontains: any = false;\n\n\t\tif (!vOnly) kcontains = keys.filter((str) => str.toLowerCase().includes(search)).length;\n\t\tif (!kOnly) {\n\t\t\tvcontains = values.filter((val: any) => {\n\t\t\t\tconst type = typeof val;\n\t\t\t\tif (type === 'number') return val == search;\n\t\t\t\tif (type === 'string') return val.toLowerCase().includes(search);\n\t\t\t\tif (type === 'object') {\n\t\t\t\t\t// if (!recursion)\n\t\t\t\t\treturn JSON.stringify(obj).toLowerCase().includes(search);\n\t\t\t\t\t// return searchObject(obj, search, config)\n\t\t\t\t}\n\t\t\t}).length;\n\t\t}\n\n\t\treturn kcontains || vcontains;\n\t},\n\n\tgetTooltip: (text: any, tooltip: any) => {text},\n\n\taddStyle: (css: any, id: any = null) => {\n\t\tid = id || `css${css.length}`;\n\t\tlet ele: any = document.getElementById(id),\n\t\t\tfound = !!ele;\n\t\tif (!found) {\n\t\t\tele = document.createElement('style');\n\t\t\tele.rel = 'text/css';\n\t\t\tele.media = 'all';\n\t\t\tele.id = id;\n\t\t} else {\n\t\t\tele.innerText = '';\n\t\t}\n\t\tele.appendChild(document.createTextNode(css));\n\t\tif (!found) document.body.appendChild(ele);\n\t},\n\n\tgetCookie: (key: any) => {\n\t\treturn (\n\t\t\tdocument.cookie\n\t\t\t\t?.split('; ')\n\t\t\t\t?.find((row) => row.startsWith(`${key}=`))\n\t\t\t\t?.split('=')[1] || ''\n\t\t);\n\t},\n\n\tloadScript: (id: string, src: string, once = true) => {\n\t\t// Check if the script is already loaded\n\t\tif (once && document.head.querySelector('#' + id) != null) return;\n\n\t\t// Create a new script element\n\t\tconst ele = document.createElement('script');\n\t\tif (id) ele.setAttribute('id', id);\n\t\tele.setAttribute('src', src);\n\n\t\tele.onload = () => {\n\t\t\tif (userUtils.debugMode()) console.info(`Script with ID '${id}' loaded successfully.`);\n\t\t};\n\n\t\tele.onerror = (error) => {\n\t\t\tif (userUtils.debugMode()) console.info(`Failed to load script with ID '${id}':`, error);\n\t\t};\n\n\t\t// Append the script element to the document head\n\t\tdocument.head.appendChild(ele);\n\t},\n\n\tremoveScript: (id: any, noRefresh?: boolean): any => {\n\t\tconst ele = document.getElementById(id);\n\t\tif (ele) {\n\t\t\ttry {\n\t\t\t\tele.remove();\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(err);\n\t\t\t}\n\t\t\tif (!noRefresh) utils.reload();\n\t\t}\n\t},\n\n\tcenterRow: (children: any) => (\n\t\t\n\t\t\t{children}\n\t\t\n\t),\n\n\tnoPadding: { paddingBottom: 0, paddingLeft: 0, paddingRight: 0, paddingTop: 0 },\n\tnoMargin: { marginBottom: 0, marginLeft: 0, marginRight: 0, marginTop: 0 },\n\n\tgetBrandSettings: (st: any) => {\n\t\tif (st && Object.keys(st).length > 0) {\n\t\t\tst = { ...st, __set: true };\n\t\t} else {\n\t\t\tst = {};\n\t\t}\n\t\tif (!st.css) st.css = {};\n\t\tif (!st.fonts) st.fonts = [];\n\t\tif (!st.icons) st.icons = {};\n\t\tif (!st.toggles) st.toggles = {};\n\t\tif (!st.data) st.data = {};\n\t\tfor (const k of Object.keys(st.css)) {\n\t\t\tlet v = st.css[k];\n\t\t\tif (typeof v === 'string') continue;\n\t\t\tst.css[k] = v = { ...v };\n\t\t\tfor (const k of Object.keys(v)) {\n\t\t\t\tif (k.indexOf('-') === -1) continue;\n\t\t\t\tv[utils.toCamel(k)] = v[k];\n\t\t\t\tdelete v[k];\n\t\t\t}\n\t\t}\n\t\treturn st;\n\t},\n\n\tcssToText: (v: any) => {\n\t\tif (!v) return '';\n\t\tif (typeof v !== 'object') return v;\n\t\tconst out = [];\n\t\tfor (const k of Object.keys(v)) {\n\t\t\tconst ckey = k.replace(/([A-Z])/g, (m) => '-' + m.toLowerCase());\n\t\t\tout.push(`${ckey}: ${v[k]};\\n`);\n\t\t}\n\t\treturn out.length ? out.join('') : '';\n\t},\n\n\thackCSS: (css: any) => {\n\t\tconst extraCSS = [];\n\t\tif (css.borderColor) {\n\t\t\textraCSS.push(`\n\t\t\t.ccss .ant-tabs-top > .ant-tabs-nav::before, .ccss .ant-tabs-bottom > .ant-tabs-nav::before,\n\t\t\t.ccss .ant-tabs-top > div > .ant-tabs-nav::before, .ccss .ant-tabs-bottom > div > .ant-tabs-nav::before {\n\t\t\t\tborder-bottom: 1px solid ${css.borderColor};\n\t\t\t}\n\t\t\t.ccss .ant-divider-horizontal.ant-divider-with-text::before, .ccss .ant-divider-horizontal.ant-divider-with-text::after {\n\t\t\t\tborder-top: 1px solid ${css.borderColor};\n\t\t\t}\n\t\t\t.ccss .ant-tabs-tab-active {\n\t\t\t\tborder: 1px solid ${css.borderColor} !important;\n\t\t\t\tborder-bottom: 1px solid ${css.borderColor} !important;\n\t\t\t\tbackground-color: inherit !important;\n\t\t\t}\n\t\t\t.ccss .ant-divider { border-color: ${css.borderColor}; }\n\t\t\t.ccss .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn { color: ${css.borderColor} }\n\t\t\t`);\n\t\t}\n\n\t\t// if (css.progressColor) extraCSS.push(`.ant-progress-success-bg, .ant-progress-bg { background-color: ${css.progressColor}; }`);\n\t\tif (css.progressSuccessColor) extraCSS.push(`.ccss .ant-progress-status-success .ant-progress-text { color: ${css.progressSuccessColor}; }`);\n\n\t\tif (css.body) {\n\t\t\textraCSS.push(`\n\t\t\t.ccss {\n\t\t\t\t${utils.cssToText(css.body)}\n\t\t\t}\n\t\t\t`);\n\t\t}\n\t\tif (css.button) {\n\t\t\textraCSS.push(`\n\t\t\t.ccss .ant-btn {\n\t\t\t\t${utils.cssToText(css.button)};\n\t\t\t}\n\t\t\t`);\n\t\t}\n\t\tif (css.disabledButton) {\n\t\t\textraCSS.push(`\n\t\t\t.ccss .ant-btn[disabled] {\n\t\t\t\t${utils.cssToText(css.disabledButton)};\n\t\t\t}\n\t\t\t`);\n\t\t}\n\t\tif (css.card) {\n\t\t\textraCSS.push(`\n\t\t\t.ccss .ant-card {\n\t\t\t\t${utils.cssToText(css.card)}\n\t\t\t}\n\t\t\t`);\n\t\t}\n\t\tif (css.cover) {\n\t\t\textraCSS.push(`\n\t\t\t.ccss .coverRow {\n\t\t\t\t${utils.cssToText(css.cover)}\n\t\t\t}\n\t\t\t`);\n\t\t}\n\t\tif (css.h1) {\n\t\t\textraCSS.push(`\n\t\t\t.ccss .storeName, .ccss .totalPoints, .ccss .clientName {\n\t\t\t\t${utils.cssToText(css.h1)}\n\t\t\t}\n\t\t\t`);\n\t\t}\n\t\tif (css.override) extraCSS.push(css.override);\n\t\tutils.addStyle(PublicCSS, 'publicCSS');\n\t\tif (extraCSS.length) utils.addStyle(extraCSS.join('\\n'), 'extraCSS');\n\t},\n\n\tsleep: (ms: number) => new Promise((r) => setTimeout(r, ms)),\n\n\tsortArrObjectKeys: (arr?: any, ignoreTS?: any) =>\n\t\tarr\n\t\t\t.map((item: any) =>\n\t\t\t\ttypeof item === 'object' ? (Array.isArray(item) ? (item = utils.sortArrObjectKeys(item, ignoreTS)) : (item = utils.sortObjectKeys(item, ignoreTS))) : item,\n\t\t\t)\n\t\t\t.sort(),\n\tsortObjectKeys: (object?: any, ignoreTS?: any) =>\n\t\tObject.keys(object)\n\t\t\t.sort()\n\t\t\t.reduce((obj: any, key) => {\n\t\t\t\tlet sortedKey: any = object[key];\n\t\t\t\tif (!!sortedKey && typeof sortedKey === 'object')\n\t\t\t\t\tArray.isArray(sortedKey) ? (sortedKey = utils.sortArrObjectKeys(sortedKey, ignoreTS)) : (sortedKey = utils.sortObjectKeys(sortedKey, ignoreTS));\n\t\t\t\tif (!ignoreTS || key !== 'timestamp') obj[key] = sortedKey;\n\t\t\t\treturn obj;\n\t\t\t}, {}),\n\n\t// @ts-ignore\n\tgetUUID: () => ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) => (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16)),\n\n\t// If the target is found, it is removed from the array and added to the front\n\tmoveStringToFront: (arr: string[], target: string, moveAs?: string) => {\n\t\tconst index = arr.indexOf(target),\n\t\t\tv: any = index !== -1 ? arr?.splice(index, 1)[0] : undefined;\n\t\treturn index !== -1 ? [moveAs || v, ...arr] : arr;\n\t},\n\n\t// Define base64 characters\n\tchars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n\t// Function to convert Base64 to string\n\tbase64ToString(input: any) {\n\t\tif (!input) return '';\n\t\tconst padding = input.endsWith('==') ? 2 : input.endsWith('=') ? 1 : 0;\n\t\tconst length = (input.length / 4) * 3 - padding;\n\t\tconst data = new Uint8Array(length);\n\t\tconst characters = utils.chars;\n\t\tfor (let i = 0, j = 0; i < length; j += 4) {\n\t\t\tconst [a, b, c, d] = [characters.indexOf(input[j]), characters.indexOf(input[j + 1]), characters.indexOf(input[j + 2]), characters.indexOf(input[j + 3])];\n\t\t\tdata[i++] = (a << 2) | (b >> 4);\n\t\t\tif (i < length) data[i++] = ((b & 15) << 4) | (c >> 2);\n\t\t\tif (i < length) data[i++] = ((c & 3) << 6) | d;\n\t\t}\n\t\tconst decoder = new TextDecoder();\n\t\treturn decoder.decode(data);\n\t},\n\n\t// Function to convert string to Base64\n\tstringToBase64(input: any) {\n\t\tif (!input) return '';\n\t\tconst encoder = new TextEncoder();\n\t\tconst data = encoder.encode(input);\n\t\tlet base64 = '';\n\t\tconst characters = utils.chars;\n\t\tconst padding = data.length % 3;\n\t\tfor (let i = 0; i < data.length - padding; i += 3) {\n\t\t\tconst [a, b, c] = [data[i], data[i + 1], data[i + 2]];\n\t\t\tbase64 += characters[a >> 2] + characters[((a & 3) << 4) | (b >> 4)] + characters[((b & 15) << 2) | (c >> 6)] + characters[c & 63];\n\t\t}\n\t\tif (padding === 2) {\n\t\t\tconst [a, b] = [data[data.length - 2], data[data.length - 1]];\n\t\t\tbase64 += characters[a >> 2] + characters[((a & 3) << 4) | (b >> 4)] + characters[(b & 15) << 2] + '=';\n\t\t} else if (padding === 1) {\n\t\t\tconst a = data[data.length - 1];\n\t\t\tbase64 += characters[a >> 2] + characters[(a & 3) << 4] + '==';\n\t\t}\n\t\treturn base64;\n\t},\n\n\t// Your functions using the above methods\n\tencodeObject(object: any) {\n\t\ttry {\n\t\t\tconst jsonString = JSON.stringify(object);\n\t\t\tconst base64String = utils.stringToBase64(jsonString);\n\t\t\tconst encoded = encodeURIComponent(base64String);\n\t\t\treturn encoded;\n\t\t} catch (error) {\n\t\t\tif (utils.isAdmin()) utils.showErr(error);\n\t\t\treturn undefined;\n\t\t}\n\t},\n\n\tdecodeObject(encodedString: any) {\n\t\ttry {\n\t\t\tif (encodedString === '{}') return {};\n\t\t\tconst decoded = decodeURIComponent(encodedString);\n\t\t\tconst base64String = utils.base64ToString(decoded);\n\t\t\tconst object = JSON.parse(base64String);\n\t\t\treturn object;\n\t\t} catch (error) {\n\t\t\tif (utils.isAdmin()) utils.showErr(error);\n\t\t\treturn undefined;\n\t\t}\n\t},\n\n\tsecondsToHms: (d: any) => {\n\t\td = Number(d);\n\t\tlet h = Math.floor(d / 3600);\n\t\tlet m = Math.floor((d % 3600) / 60);\n\t\tlet s = Math.floor((d % 3600) % 60);\n\n\t\tlet hDisplay = h > 0 ? h + (h == 1 ? ' hour, ' : ` hours${m > 0 ? ',' : ''} `) : '';\n\t\tlet mDisplay = m > 0 ? m + (m == 1 ? ' minute, ' : ` minutes${s > 0 ? ',' : ''} `) : '';\n\t\tlet sDisplay = s > 0 ? s + (s == 1 ? ' second' : ' seconds') : '';\n\t\treturn hDisplay + mDisplay + sDisplay;\n\t},\n\tloadImage: (cb: any, imageUrl: any) => {\n\t\tconst img = new Image();\n\t\timg.src = imageUrl;\n\t\timg.onload = () => cb({ height: img.height, width: img.width });\n\t\timg.onerror = (err) => utils.showErr(err);\n\t\treturn;\n\t},\n\tloadImageFromFile: async (cb: any, file: any) => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst reader = new FileReader();\n\t\t\treader.onload = async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst image: any = new Image();\n\t\t\t\t\timage.onload = async () => {\n\t\t\t\t\t\tcb(image.height, image.width);\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t};\n\t\t\t\t\timage.src = reader.result;\n\t\t\t\t} catch (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t}\n\t\t\t};\n\t\t\treader.onerror = (error) => {\n\t\t\t\treject(error);\n\t\t\t};\n\t\t\treader.readAsDataURL(file);\n\t\t});\n\t},\n\n\tloadImageDimensionsFromFile: (file: File): Promise<{ width: number; height: number }> => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst reader = new FileReader();\n\t\t\treader.onload = (event) => {\n\t\t\t\tconst image = new Image();\n\t\t\t\timage.onload = () => {\n\t\t\t\t\tresolve({ width: image.width, height: image.height });\n\t\t\t\t};\n\t\t\t\timage.onerror = reject;\n\t\t\t\timage.src = event.target?.result as string;\n\t\t\t};\n\t\t\treader.onerror = reject;\n\t\t\treader.readAsDataURL(file);\n\t\t});\n\t},\n\n\tloadImageDimensionsFromURL: (url: string): Promise<{ width: number; height: number }> => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst image = new Image();\n\t\t\timage.onload = () => {\n\t\t\t\tresolve({ width: image.width, height: image.height });\n\t\t\t};\n\t\t\timage.onerror = reject;\n\t\t\timage.src = url;\n\t\t});\n\t},\n\n\t// Triggers a download of fileName with data as mimeType.\n\tdownloadData: async (data: any, fileName: any, mimeType: any) => {\n\t\tconst file = new File([data], fileName, { type: mimeType });\n\t\tlet link = document.createElement('a');\n\t\tconst url = URL.createObjectURL(file);\n\t\tlink.href = url;\n\t\tlink.download = file.name;\n\t\tdocument.body.appendChild(link);\n\t\tlink.click();\n\t\tdocument.body.removeChild(link);\n\t\twindow.URL.revokeObjectURL(url);\n\t},\n\n\t// pass async func in useEffect to make my life eaiser\n\tasyncFetch: async (\n\t\tcb: () => any,\n\t\terrCb?: (err: any) => void,\n\t\tcancel?: boolean,\n\t\tresults?: boolean,\n\t\toptions = {\n\t\t\tperformance: false,\n\t\t},\n\t) => {\n\t\ttry {\n\t\t\tconst callBack = options.performance ? timeUtils.timeAsync(cb) : cb;\n\t\t\tif (results) return await callBack();\n\t\t\telse await callBack();\n\t\t\treturn false;\n\t\t} catch (error) {\n\t\t\tif (!cancel) utils.showErr(error);\n\t\t\tif (errCb) {\n\t\t\t\tif (results) return errCb(error);\n\t\t\t\telse errCb(error);\n\t\t\t}\n\t\t\tif (results) return null;\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t// * Get notifications queued to send after reloading page\n\tgetNotifyQueue: () => utils.local.get('notify:queue', {}),\n\taddNotifyQueue: (type: any, notify: any) => utils.local.set('notify:queue', { type, notify }),\n\tdelNotifyQueue: () => utils.local.set('notify:queue', {}),\n\n\tnotify: (message: any, description?: any, duration?: any, type = 'success', config = {} as any) => {\n\t\tconst notify = {\n\t\t\tkey: utils.strify(description),\n\t\t\tstyle: { borderLeft: colors[type] ? `3px solid ${colors[type]}` : '' },\n\t\t\tmessage: typeof message === 'string' ? {message} : message,\n\t\t\tdescription: typeof description === 'string' ? {description} : description,\n\t\t\tduration: duration,\n\t\t\tmaxCount: 1,\n\t\t\t...config,\n\t\t};\n\t\tif (config?.queue === true) utils.addNotifyQueue(type, notify);\n\t\t// @ts-ignore\n\t\tnotification[type](notify);\n\t},\n\tformatTime: (mili: any, includeMs = false) => {\n\t\tconst pad = (n: any, z = 2) => ('0' + n).slice(-z);\n\t\tconst h = pad((mili / 3.6e6) | 0),\n\t\t\tm = pad(((mili % 3.6e6) / 6e4) | 0),\n\t\t\ts = pad(((mili % 6e4) / 1000) | 0),\n\t\t\tms = pad(mili % 1000, 3);\n\t\treturn (\n\t\t\t(h != '00' ? h + 'h:' : '') +\n\t\t\t(m != '00' ? m + 'm:' : '') +\n\t\t\t(s != '00' ? s + (includeMs ? '.' : 's') : '') +\n\t\t\t(includeMs ? '' + ms + (s != '00' ? 's' : 'ms') : '')\n\t\t);\n\t},\n\n\tinIFrame: () => {\n\t\ttry {\n\t\t\treturn window.location !== window.parent.location;\n\t\t} catch (_) {\n\t\t\t// security error === iframe\n\t\t\treturn true;\n\t\t}\n\t},\n\n\tpromiseQ: () => new PromiseAny(),\n\n\tcalculateRatio: (numerator: number, denominator: number): string => {\n\t\tfor (let num = denominator; num > 1; num--) {\n\t\t\tif (numerator % num === 0 && denominator % num === 0) {\n\t\t\t\tnumerator /= num;\n\t\t\t\tdenominator /= num;\n\t\t\t}\n\t\t}\n\n\t\treturn `${numerator}:${denominator}`;\n\t},\n\n\tisStandalone: () => {\n\t\ttry {\n\t\t\t// @ts-ignore\n\t\t\treturn !!window?.navigator?.standalone || window.matchMedia('(display-mode: standalone)').matches;\n\t\t} catch (err) {\n\t\t\tconsole.warn(err);\n\t\t\treturn false;\n\t\t}\n\t},\n\n\tgetUserAgent: () => {\n\t\ttry {\n\t\t\treturn window.navigator.userAgent;\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t\treturn '';\n\t},\n\n\t/**\n\t * useScript loads an external script and returns the status.\n\t * @param {string} src\n\t * @return {string} [ \"idle\", \"loading\", \"ready\", \"error\" ]\n\t */\n\tuseScript: (src: any) => {\n\t\tconst [status, setStatus] = useState(src ? 'loading' : 'idle');\n\n\t\tuseEffect(() => {\n\t\t\t// Allow falsy src value if waiting on other data needed for\n\t\t\t// constructing the script URL passed to this hook.\n\t\t\tif (!src) {\n\t\t\t\tsetStatus('idle');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fetch existing script element by src\n\t\t\t// It may have been added by another intance of this hook\n\t\t\tlet script: any = document.querySelector(`script[src=\"${src}\"]`);\n\n\t\t\tif (!script) {\n\t\t\t\t// Create script\n\t\t\t\tscript = document.createElement('script');\n\t\t\t\tscript.src = src;\n\t\t\t\tscript.async = true;\n\t\t\t\tscript.setAttribute('data-status', 'loading');\n\t\t\t\t// Add script to document body\n\t\t\t\tdocument.body.appendChild(script);\n\n\t\t\t\t// Store status in attribute on script\n\t\t\t\t// This can be read by other instances of this hook\n\t\t\t\tconst setAttributeFromEvent = (event: any) => {\n\t\t\t\t\tscript.setAttribute('data-status', event.type === 'load' ? 'ready' : 'error');\n\t\t\t\t};\n\n\t\t\t\tscript.addEventListener('load', setAttributeFromEvent);\n\t\t\t\tscript.addEventListener('error', setAttributeFromEvent);\n\t\t\t} else {\n\t\t\t\t// Grab existing script status from attribute and set to state.\n\t\t\t\tsetStatus(script.getAttribute('data-status'));\n\t\t\t}\n\n\t\t\t// Script event handler to update status in state\n\t\t\t// Note: Even if the script already exists we still need to add\n\t\t\t// event handlers to update the state for *this* hook instance.\n\t\t\tconst setStateFromEvent = (event: any) => {\n\t\t\t\tsetStatus(event.type === 'load' ? 'ready' : 'error');\n\t\t\t};\n\n\t\t\t// Add event listeners\n\t\t\tscript.addEventListener('load', setStateFromEvent);\n\t\t\tscript.addEventListener('error', setStateFromEvent);\n\n\t\t\t// Remove event listeners on cleanup\n\t\t\treturn () => {\n\t\t\t\tif (script) {\n\t\t\t\t\tscript.removeEventListener('load', setStateFromEvent);\n\t\t\t\t\tscript.removeEventListener('error', setStateFromEvent);\n\t\t\t\t}\n\t\t\t};\n\t\t}, [src]); // Only re-run effect if script src changes\n\n\t\treturn status;\n\t},\n\n\tisMarkdown: (str: string) => /(\\*\\*|__|\\*|_|`|~|\\[.*\\]\\(.*\\)|!\\[.*\\]\\(.*\\)|#{1,6}\\s|\\n\\d+\\.(\\s|$)|\\n[-+*]\\s|\\n`{3}.*\\n|>\\s|\\|.*\\|[-:| ]*)/.test(str),\n\n\tsendNotification: (config = {} as Partial) => {\n\t\tconst type = config.type || 'success';\n\t\tconst description = config.description || '',\n\t\t\tmessage = config.message || defaultMessage[type];\n\t\tconst color = config?.color || colors[type] || '';\n\t\tnotification[type]({\n\t\t\t...config,\n\t\t\tduration: config.duration ?? 8,\n\t\t\tmaxCount: config.maxCount || 1,\n\t\t\tstyle: { borderLeft: color ? `3px solid ${color}` : '', ...config.style },\n\t\t\tmessage: typeof message === 'string' ? {message} : message,\n\t\t\tdescription: typeof description === 'string' ? {description} : description,\n\t\t\tkey: config.key || utils.strify(description),\n\t\t});\n\t},\n\n\t// reduce an array of objects into an object with the id as the key\n\treduceByID: (arr: any) => {\n\t\tif (!arr) return {};\n\t\tif (!Array.isArray(arr)) return {};\n\t\treturn arr.reduce((acc: any, cur: any) => ({ ...acc, [cur.id]: cur }), {});\n\t},\n\n\tgetUrlSearchParams: (url: string): Params => {\n\t\tconst params: Params = {};\n\t\tnew URL(url, location.origin).searchParams.forEach((value, key) => (params[key] = value));\n\t\treturn params;\n\t},\n\tupdateUrlSearchParams: (url: string, params: Params): string => {\n\t\tconst urlObj = new URL(url, location.origin);\n\t\tObject.entries(params).forEach(([key, value]) => {\n\t\t\tvalue === null ? urlObj.searchParams.delete(key) : urlObj.searchParams.set(key, value);\n\t\t});\n\t\treturn urlObj.href;\n\t},\n\n\t// getPropertyByPath: Retrieves the value of a nested property from an object using a dot-separated path.\n\t// Parameters:\n\t// - obj: The object to traverse.\n\t// - path: The dot-separated path to the desired property.\n\t// - delimiter: The delimiter used to separate path segments. Defaults to '.'.\n\t// Returns:\n\t// - The value of the property if found, or undefined if the property or any intermediate object in the path is undefined.\n\tgetPropertyByPath(obj: any, path: string, delimiter = '.'): any {\n\t\tconst keys: string[] = path.split(delimiter);\n\t\tlet value: any = obj;\n\t\tfor (const key of keys) {\n\t\t\tvalue = value?.[key];\n\t\t\tif (value === undefined) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\t// setPropertyByPath: Sets the value of a nested property in an object using a dot-separated path.\n\t// If intermediate objects in the path do not exist, they are created as empty objects.\n\t// Parameters:\n\t// - obj: The object to traverse and modify.\n\t// - path: The dot-separated path to the target property.\n\t// - value: The value to set at the target property.\n\t// - delimiter: The delimiter used to separate path segments. Defaults to '.'.\n\tsetPropertyByPath(obj: any, path: string, value: any, delimiter = '.'): any {\n\t\tconst keys: string[] = path.split(delimiter);\n\t\tconst lastKey: string = keys.pop()!;\n\t\tlet target: any = obj;\n\t\tfor (const key of keys) {\n\t\t\tif (target[key] === undefined) {\n\t\t\t\ttarget[key] = {};\n\t\t\t}\n\t\t\ttarget = target[key];\n\t\t}\n\t\ttarget[lastKey] = value;\n\t\treturn obj;\n\t},\n\n\ttagRender: (props: any) => {\n\t\tconst { label, value, closable, onClose } = props;\n\t\tif (value === '-1' || value === 'all')\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{label}\n\t\t\t\t\t\t{closable && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t);\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{label}\n\t\t\t\t\t{closable && (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t\n\t\t);\n\t},\n\n\tpickDate: (d: moment.Moment, index: number, asString?: boolean): string | number | undefined => {\n\t\tif (!d) return asString ? '' : undefined;\n\t\tconst f = index === 0 ? d?.startOf('day') : d?.endOf('day');\n\t\treturn asString ? f?.toISOString() : f?.unix();\n\t},\n\n\tadd: (...args: number[]): number => args.reduce((a, b) => (a || 0) + (b || 0), 0),\n\n\tisRegexPattern(input: string | undefined): { valid: boolean; error?: string } {\n\t\tif (!input) return { valid: false, error: 'No input' };\n\t\ttry {\n\t\t\tnew RegExp(input);\n\t\t\treturn { valid: true };\n\t\t} catch (error) {\n\t\t\treturn { valid: false, error: `Invalid regex pattern. ${error?.toString()}` };\n\t\t}\n\t},\n\n\tlog(args: string[] | [string, string][] | ({ [key: string]: any } | any)): void {\n\t\ttry {\n\t\t\tconsole.log('%c--------------------%cutils%c--------------------', 'color: green', 'color: aqua', 'color: green');\n\t\t\tif (Array.isArray(args)) {\n\t\t\t\tfor (const arg of args) {\n\t\t\t\t\tif (Array.isArray(arg)) {\n\t\t\t\t\t\tconsole.log(`${arg[0]}:`, arg[1]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log(arg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (typeof args === 'object') {\n\t\t\t\tfor (const [key, value] of Object.entries(args)) {\n\t\t\t\t\tconsole.log(`${key}:`, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (userUtils.debugMode() && userUtils.isExperimental() && !utils.isLocal()) {\n\t\t\t\tconst stackInfo = new Error().stack?.split('\\n')?.map((str) => {\n\t\t\t\t\tconst [func, path] = str.split('@http'),\n\t\t\t\t\t\tline = `${str}`.match(/:\\d+:\\d+/)?.[0];\n\t\t\t\t\treturn { func, path: `http${path}`, line };\n\t\t\t\t});\n\t\t\t\tconsole.log('StackInfo:', stackInfo);\n\t\t\t}\n\t\t\tconsole.log('%c--------------------%cutils%c--------------------', 'color: green', 'color: aqua', 'color: green');\n\t\t} catch (err) {}\n\t},\n\n\tfilterOption,\n\tnormalizeSearch,\n};\n\nfunction strify(value: any): string {\n\ttry {\n\t\tif (typeof value === 'number') value = value.toString();\n\t\tif (typeof value === 'string') return value.toString().replace(/\\s+/g, '').toLowerCase().trim();\n\t\tif (React.isValidElement(value)) {\n\t\t\tif ((value.props as any)?.text) return utils.strify((value.props as any)?.text?.toString());\n\t\t\tif (value.key) return utils.strify(value.key.toString());\n\t\t\treturn utils.strify(value.toString());\n\t\t}\n\t\tif (Array.isArray(value) || (typeof value === 'object' && value !== null)) return JSON.stringify(value || {});\n\t\treturn value || '';\n\t} catch (e) {\n\t\treturn '';\n\t}\n}\n\nfunction filterOption(inputValue: string | undefined, option: any | any[]): boolean {\n\tif (Array.isArray(option)) {\n\t\treturn !!(option || []).some((option) => filterOption(inputValue, option));\n\t}\n\tconst qv: string[] = [option.value, option.label].filter((x) => x !== undefined).map((x: any) => utils.strify(x));\n\treturn !!qv.find((x) => x.includes(utils.strify(inputValue)));\n}\n\nexport interface Params {\n\t[key: string]: string;\n}\n\nconst isEvent = (e: any) => e instanceof Object && 'target' in e;\n\nexport const binder = (key: any, opts: any, overrides: any, store?: boolean) => {\n\topts = {\n\t\teventName: 'onChange',\n\t\tvalueName: 'value',\n\t\tparse: null,\n\t\t...opts,\n\t\t...overrides,\n\t};\n\n\tif (!opts.getData || !opts.setData) throw new Error('missing get/setData');\n\tif (opts.number && !opts.parse) opts.parse = (v: any) => parseInt(v);\n\tif (opts.float && !opts.parse) opts.parse = (v: any) => parseFloat(v);\n\tif (opts.color) opts.valueName = 'color';\n\tif (opts.bool) opts.valueName = 'checked';\n\n\tconst dirs = key.split('/'),\n\t\tfinDir = dirs[dirs.length - 1],\n\t\tgetVal = (data: any, parent = false) => {\n\t\t\tlet o = data;\n\t\t\tif (key === '') return o;\n\t\t\tfor (let i = 0; i < dirs.length - 1; i++) {\n\t\t\t\tconst dir = dirs[i],\n\t\t\t\t\ttmp = o[dir];\n\t\t\t\to[dir] = { ...tmp };\n\t\t\t\to = o[dir];\n\t\t\t}\n\t\t\tif (parent) return o;\n\n\t\t\tlet updated = false;\n\t\t\tif (overrides?.value === 'custom' && overrides?.realStyle) {\n\t\t\t\tlet ob = overrides?.realStyle;\n\t\t\t\tfor (let i = 0; i < dirs.length - 1; i++) {\n\t\t\t\t\tconst dir = dirs[i],\n\t\t\t\t\t\ttmp = ob[dir];\n\t\t\t\t\tob[dir] = { ...tmp };\n\t\t\t\t\tob = ob[dir];\n\t\t\t\t}\n\t\t\t\toverrides.value = ob[finDir];\n\t\t\t\tupdated = true;\n\t\t\t}\n\n\t\t\tif ((overrides?.value === 'custom' || updated) && overrides?.defaultStyle) {\n\t\t\t\tlet ob = overrides?.defaultStyle;\n\t\t\t\tfor (let i = 0; i < dirs.length - 1; i++) {\n\t\t\t\t\tconst dir = dirs[i],\n\t\t\t\t\t\ttmp = ob[dir];\n\t\t\t\t\tob[dir] = { ...tmp };\n\t\t\t\t\tob = ob[dir];\n\t\t\t\t}\n\t\t\t\topts.def = ob[finDir];\n\t\t\t}\n\n\t\t\treturn o[finDir] ?? overrides?.value;\n\t\t};\n\n\tconst out: any = {\n\t\t[opts.valueName]: getVal(opts.getData(store)),\n\t\t[opts.eventName]: (e: any) => {\n\t\t\tconst { ...data } = opts.getData(store),\n\t\t\t\to = getVal(data, true);\n\n\t\t\tlet v = isEvent(e) ? e.target.value : e;\n\t\t\tif (v == null) {\n\t\t\t\tif (opts.alwaysParse && opts.parse) opts.parse(v, o[finDir]);\n\t\t\t\tdelete o[finDir];\n\t\t\t} else {\n\t\t\t\tif (v.hex) v = v.hex;\n\t\t\t\tif (opts.parse) v = opts.parse(v, o[finDir]);\n\t\t\t\to[finDir] = v;\n\t\t\t}\n\t\t\tif (userUtils.debugMode()) {\n\t\t\t\tconsole.debug(key, e, v, o[finDir], o);\n\t\t\t}\n\t\t\topts.setData(data, store);\n\t\t},\n\t};\n\n\tif (opts.def) out.def = opts.def;\n\n\tif (opts.color) {\n\t\tout.styles = { default: { card: { background: out[opts.valueName] } } };\n\t}\n\n\treturn out;\n};\n\nfunction trimObject(obj: T, emptyString = false, makeCopy = false, emptyVals = false, recursive = false): T {\n\tconst copy: T = utils.clone(obj) as any;\n\tif (typeof obj !== 'object' || obj === null) return obj;\n\tif (makeCopy) return utils.trimObject(copy, emptyString);\n\telse\n\t\t(Object.keys(obj) as Array).forEach((key: keyof T) => {\n\t\t\tif (obj[key] === undefined) {\n\t\t\t\tdelete obj[key];\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (emptyVals && (obj[key] === null || obj[key] === 0)) {\n\t\t\t\tdelete obj[key];\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (emptyVals && typeof obj[key] === 'object') {\n\t\t\t\t// Is it an array?\n\t\t\t\tif (Array.isArray(obj[key])) {\n\t\t\t\t\tif ((obj[key] as any[]).length === 0) {\n\t\t\t\t\t\tdelete obj[key];\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst keys = Object.keys(obj[key] as any);\n\t\t\t\tif (keys.length === 0) {\n\t\t\t\t\tdelete obj[key];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (recursive) {\n\t\t\t\t\tobj[key] = utils.trimObject(obj[key], emptyString, false, emptyVals, recursive);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (typeof obj[key] === 'string') {\n\t\t\t\tconst cleaned = (obj[key] as string).trim();\n\t\t\t\tif (emptyString && cleaned === '') {\n\t\t\t\t\tdelete obj[key];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t});\n\treturn makeCopy ? copy : obj;\n}\n\n// Get change set between two objects\nexport const deepDiffMapper = (function () {\n\treturn {\n\t\tVALUE_CREATED: 'created',\n\t\tVALUE_UPDATED: 'updated',\n\t\tVALUE_DELETED: 'deleted',\n\t\tVALUE_UNCHANGED: 'unchanged',\n\t\tmap: (obj1: any, obj2: any) => {\n\t\t\t// @ts-ignore\n\t\t\tif (this.isFunction(obj1) || this.isFunction(obj2)) return {};\n\t\t\t// @ts-ignore\n\t\t\tif (this.isValue(obj1) || this.isValue(obj2)) {\n\t\t\t\treturn {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\ttype: this.compareValues(obj1, obj2),\n\t\t\t\t\tdata: obj1 === undefined ? obj2 : obj1,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet diff = {};\n\t\t\tfor (const key in obj1) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tif (this.isFunction(obj1[key])) continue;\n\t\t\t\tlet value2: any = undefined;\n\t\t\t\tif (obj2[key] !== undefined) value2 = obj2[key]; // @ts-ignore\n\t\t\t\tdiff[key] = this.map(obj1[key], value2);\n\t\t\t}\n\t\t\tfor (const key in obj2) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tif (this.isFunction(obj2[key]) || diff[key] !== undefined) continue; // @ts-ignore\n\t\t\t\tdiff[key] = this.map(undefined, obj2[key]);\n\t\t\t}\n\t\t\treturn diff;\n\t\t},\n\t\tcompareValues: (value1: any, value2: any) => {\n\t\t\t// @ts-ignore\n\t\t\tif (value1 === value2) return this.VALUE_UNCHANGED; // @ts-ignore\n\t\t\tif (value1 === undefined) return this.VALUE_CREATED; // @ts-ignore\n\t\t\tif (value2 === undefined) this.VALUE_DELETED; // @ts-ignore\n\t\t\tif (this.isDate(value1) && this.isDate(value2) && value1.getTime() === value2.getTime()) {\n\t\t\t\t// @ts-ignore\n\t\t\t\treturn this.VALUE_UNCHANGED;\n\t\t\t} // @ts-ignore\n\t\t\treturn this.VALUE_UPDATED;\n\t\t},\n\t\tisFunction: (x: any) => Object.prototype.toString.call(x) === '[object Function]',\n\t\tisArray: (x: any) => Object.prototype.toString.call(x) === '[object Array]',\n\t\tisDate: (x: any) => Object.prototype.toString.call(x) === '[object Date]',\n\t\tisObject: (x: any) => Object.prototype.toString.call(x) === '[object Object]', // @ts-ignore\n\t\tisValue: (x: any) => !this.isObject(x) && !this.isArray(x),\n\t} as any;\n})();\n\nexport const mockSlowImport = >(\n\tfactory: () => Promise<{ default: T }>,\n\tdelay?: number, // Delay in milliseconds\n): (() => Promise<{ default: T }>) => {\n\tif (!utils.isLocal() || !userUtils.debugMode()) return factory;\n\tif (!delay) delay = Math.floor(Math.random() * 4000) + 1000;\n\treturn () =>\n\t\tnew Promise((resolve) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tresolve(factory());\n\t\t\t}, delay);\n\t\t});\n};\n\n// Get a value from an object based on a path string\nexport function getValueByPath(obj: any, path: string, defaultValue?: T): T | undefined {\n\tconst keys = path.split('.');\n\tlet value: any = obj;\n\n\tfor (const key of keys) {\n\t\tif (value && typeof value === 'object') {\n\t\t\tvalue = (value as Record)[key];\n\t\t} else {\n\t\t\treturn defaultValue;\n\t\t}\n\t}\n\n\treturn value ?? defaultValue;\n}\n\n// Set a value on an object based on a path string\nexport function setValueByPath(obj: any, path: string, value: any) {\n\tconst keys = path.split('.');\n\tlet current = obj ?? {};\n\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key = keys[i];\n\t\tif (i === keys.length - 1) {\n\t\t\tcurrent[key] = value;\n\t\t} else {\n\t\t\tif (!current[key]) {\n\t\t\t\tcurrent[key] = {};\n\t\t\t}\n\t\t\tcurrent = current[key];\n\t\t}\n\t}\n}\n\nexport function getErrorMessage(error: unknown): string {\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\n\tif (typeof error === 'string') {\n\t\treturn error;\n\t}\n\n\treturn 'An error occurred';\n}\n\nexport function isChromiumBased() {\n\tvar userAgent = navigator.userAgent;\n\treturn userAgent.indexOf('Chrome') > -1 && userAgent.indexOf('Chromium') === -1;\n}\n/**\n * Formats a number to a string with optional precision, currency symbol, handling for infinity values, and percentage symbol.\n * @param num - The number to format. Defaults to `undefined`.\n * @param options - Additional formatting options.\n * @param options.precision - The number of decimal places to round to. Defaults to `2`.\n * @param options.currency - Whether or not to include a currency symbol. Defaults to `false`.\n * @param options.allowInfinity - Whether or not to allow infinity values. Defaults to `false`.\n * @param options.percent - Whether or not to include a percentage symbol. Defaults to `false`.\n * @returns The formatted number as a string.\n */\nexport function formatNumber(num?: any, options?: { precision?: number; currency?: boolean; allowInfinity?: boolean; percent?: boolean }): string {\n\toptions = { precision: 2, currency: false, allowInfinity: false, percent: false, ...options };\n\tconst wrapPercent = (str: any) => (options?.percent ? `${str}%` : str);\n\tconst wrapCurrency = (str: any) => (options?.currency ? `$${str}` : str);\n\t// Replace percents, commas, and dollar signs\n\tnum = num?.toString().replace(/%|,|\\$/g, '');\n\tif (num === Infinity && !options?.allowInfinity) return 'N/A';\n\tif (num === '' || num === null || num === undefined || isNaN(num)) return wrapCurrency(wrapPercent('0'));\n\tlet formattedNumber = '0';\n\ttry {\n\t\tif (typeof num === 'string') num = parseFloat(num);\n\t\tformattedNumber = parseFloat(num.toFixed(options?.precision)).toLocaleString();\n\t} catch (e) {\n\t\tconsole.log('num:', num);\n\t\tconsole.log('failed to parse number:', e);\n\t}\n\treturn wrapCurrency(wrapPercent(formattedNumber));\n}\n\nexport function isValidUrl(url: string, reqHTTPs?: boolean): string | undefined {\n\t// First, ensure the URL has a protocol\n\tlet urlToTest = url.toLowerCase();\n\tif (!urlToTest.startsWith('http://') && !urlToTest.startsWith('https://')) {\n\t\tif (reqHTTPs) return 'URL must start with \"http://\" or \"https://\".';\n\t\turlToTest = `https://${urlToTest}`;\n\t}\n\n\ttry {\n\t\t// Check if URL is valid using URL constructor\n\t\tconst parsedUrl = new URL(urlToTest);\n\n\t\t// Ensure the hostname has at least one dot and valid TLD\n\t\tconst hasValidDomain = parsedUrl.hostname.includes('.') && parsedUrl.hostname.length > parsedUrl.hostname.lastIndexOf('.') + 1;\n\n\t\t// Common TLD pattern (2-63 characters)\n\t\tconst validTLD = /^[a-z]{2,63}$/i.test(parsedUrl.hostname.slice(parsedUrl.hostname.lastIndexOf('.') + 1));\n\n\t\t// Additional checks for common invalid patterns\n\t\tconst hasInvalidChars = /[<>{}|\\\\\\^~\\[\\]`]/.test(urlToTest);\n\n\t\tif (!hasValidDomain) return 'Invalid domain.';\n\t\tif (!validTLD) return 'Invalid top-level domain.';\n\t\tif (hasInvalidChars) return 'URL contains invalid characters.';\n\t\treturn undefined;\n\t} catch {\n\t\treturn 'Failed to parse URL.';\n\t}\n}\n\nexport default utils;\n// @ts-ignore\nwindow['API'] = utils;\n// @ts-ignore\nwindow['aget'] = (ep: string, opts: any) => {\n\tutils.auth.get(ep, opts).then((res: any) => console.log(res));\n};\n// @ts-ignore\nwindow['aput'] = (ep: string, opts: any) => {\n\tutils.auth.put(ep, opts).then((res: any) => console.log(res));\n};\n// @ts-ignore\nwindow['apost'] = (ep: string, opts: any) => {\n\tutils.auth.post(ep, opts).then((res: any) => console.log(res));\n};\n// @ts-ignore\nwindow['adelete'] = (ep: string, opts: any) => {\n\tutils.auth.delete(ep, opts).then((res: any) => console.log(res));\n};\n// @ts-ignore\nwindow['aauth'] = () => console.log(utils.auth.getToken());\n\ninterface ToastContextProps {\n\tgetToasts?: () => Map | undefined;\n\tgetToast?: (key: string) => ToastProps | undefined;\n\taddToast?: (toast: ToastProps) => void;\n\tremoveToast?: (key: string) => void;\n}\n\n/**\n * Normalizes search input by:\n * 1. Stripping non-numeric characters from valid phone numbers\n * 2. Adding quotes around valid names with special character support\n * 3. Preserving emails and other input types\n *\n * @param str - The search string to normalize\n * @returns The normalized search string\n *\n * @example\n * normalizeSearch(\"(555) 123-4567\") // \"5551234567\"\n * normalizeSearch(\"Anne-Marie O'Neill\") // \"\\\"Anne-Marie O'Neill\\\"\"\n * normalizeSearch(\"user123@example.com\") // \"user123@example.com\"\n */\nexport function normalizeSearch(str: string): string {\n\tif (!str) return '';\n\tlet normalizedSearch = str.trim();\n\n\t// Check if input is a valid phone number and not an email\n\tif (utils.phoneRex.test(normalizedSearch) && !utils.emailRE.test(normalizedSearch)) {\n\t\tnormalizedSearch = normalizedSearch.replace(/\\D+/g, '');\n\t} else {\n\t\t// // Enhanced regex for international names with special characters\n\t\t// const nameRegex = /^[A-Za-zÀ-ÿ\\u0080-\\u024F](?:[A-Za-zÀ-ÿ\\u0080-\\u024F'\\-.\\s]|(?<=[\\s-])[A-Za-zÀ-ÿ\\u0080-\\u024F])*$/;\n\t\t// // Only quote if it's a name pattern and not already quoted\n\t\t// if (nameRegex.test(normalizedSearch) && !/^\".*\"$/.test(normalizedSearch)) {\n\t\t// normalizedSearch = `\"${normalizedSearch}\"`;\n\t\t// }\n\t}\n\n\treturn normalizedSearch;\n}\n","import { createBrowserHistory } from 'history';\n\nexport default createBrowserHistory();\n"],"names":["encodeMSGPack","data","msgpack","decodeMSGPack","e","getValue","obj","path","defaultValue","_step","result","_iterator","_createForOfIteratorHelper","split","s","n","done","key","value","err","f","undefined","setValue","keys","i","length","clean","input","str","toString","replace","toLowerCase","trim","React","Array","isArray","_typeof","JSON","stringify","addressToString","address","options","street","city","state","zipCode","country","lat","long","raw","_ref","useRaw","useLatLong","useCountry","_ref$clean","concat","formatAddressPart","part","map","word","charAt","toUpperCase","slice","join","formattedStreet","formattedCity","formattedState","cleanPhone","phone","replaceAll","cleanEmail","email","getFormattedPointsEventType","eventType","isBlock","capitalize","getEmployeeTitle","employee","name","id","getFormattedStoreName","store","_store$addr","_store$addr2","nickname","addr","getFormattedStoreNameForSelect","_store$addr3","_store$addr4","Typography","variant","getFullName","firstName","lastName","filter","formatSender","utils","phoneRex","test","cleanedPhone","nationalNumber","countryCode","formatPhoneNumber","emailRE","ConversionActionMap","text_received","defaultEnabled","description","template","text_click_to_open","text_sent","text_click","email_received","email_open","push_received","push_open","browser_received","direct_mail_received","TerpliReview","TerpliRecommendation","TerpliReviewDiscount","TerpliRecommendationDiscount","call_answer","call_vm","call_complete","discount_redemption","getFormattedActionTitle","action","_ConversionActionMap$","getFormattedAddress","joined","comp","getDefaultParser","opts","type","Number","parseInt","parseFloat","v","getDefaultValueName","componentBinder","setData","_objectWithoutProperties","_excluded","_objectSpread","eventName","valueName","parse","out","_defineProperty","getValueByPath","_options$parse","_options$parse2","target","isEvent","parsedValue","call","newData","setValueByPath","def","generateRandomWeedStoreName","adjectives","nouns","randomAdjectiveIndex","Math","floor","random","randomNoun","generateRandomProductName","randomIndex","commonProductNames","generateRandomCategory","commonCategories","generateRandomWeedCategory","weedCategories","generateRandomWeedProduct","weedProducts","generateRandomCity","cities","generateRandomState","Object","states","generateRandomStateAbbreviation","generateRandomCountry","countries","generateRandomString","arguments","characters","randomString","generateRandomDate","startDate","Date","endDate","randomTimestamp","getTime","generateRandomPhoneNumber","min","generateRandomEmail","randomDomain","domains","generateRandomDomain","generateStreetAddress","streetPrefixes","streetSuffixes","streetNames","randomPrefixIndex","randomSuffixIndex","randomNameIndex","prefix","suffix","randomNumber","generateRandomWord","wordList","window","padStart","commonBrands","weedBrands","validateTelynxBrandSettings","telnyxSettings","errors","entityType","z","object","stockSymbol","string","stockExchange","refine","TelynxStockExchanges","message","TelnyxBrandSchema","ZodError","forEach","error","Error","_","userUtils","debugMode","console","log","getDefaultTelnyxSettings","isRestricted","vertical","isValidTelynxVerticalType","verticalType","TelnyxVerticalTypes","isValidTelnyxEntityType","TelynxEntityTypes","canSeeRegistrationForm","hasRoleView","isCanadaBilling","isMessageDigital","isWAB","isDemo","user","infobipCmpID","getAlertInfoForTelynxBrandSettings","campaign","_asGetBrand$status","_asGetBrand$failureRe","asGetBrand","status","hasFailed","failureReasons","failureData","_failureData$category","category","style","marginLeft","listStyleType","isApproved","isTMobileRegistered","isTelnyxCampaignApproved","approvedTelnyxCampaign","isRestrictedIndustry","Link","href","rel","isCannabis","validateURL","url","validateEmail","validatePhoneNumber","getSaleStats","event","_sale$orders","_sale$taxes","totals","totalSaleAmount","saleAmount","totalTax","totalItems","totalMinusTax","totalDiscounted","totalCost","profitPerItem","profitPercent","totalProfit","sale","ordersList","orders","order","totalDiscount","totalPrice","quantity","taxList","taxes","tax","amount","totalAfterTax","grandTotal","subTotal","discount","MessageTypes","isAd","snailMail","voice","isMMS","isSMS","isEmail","isPush","isBrowser","getMessageTableType","platform","getFormattedMessageType","isMessageFromClient","direction","getFormattedMessageDirection","errorMsg","includes","twilioStatus","isMessageFailed","getFormattedMessageTo","fullContact","_utils$user$profile","profile","from","fullName","to","getFormattedMessageFrom","_utils$user$profile2","SAMPLE_MERGE_DATA","fn","ln","pl","cn","sr","eph","em","rg","fs","dm","lts","hph","cty","SAMPLE_OVERRIDE_DATA","mobilePhone","favoriteStoreID","birthdate","ts","storage","LocalStorageManager","executeIfPosthog","callback","canLoadPosthog","isLocal","isDebugging","auth","loggedIn","some","location","pathname","isAlpineMain","isDevEnv","capturePosthogEvent","properties","posthog","capture","max","percent","num1","num2","parseNumber","num","parsed","isNaN","addNumbers","_len","nums","_key","reduce","sum","_regeneratorRuntime","t","r","prototype","hasOwnProperty","o","defineProperty","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","arg","h","l","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","resolve","__await","then","callInvokeWithMethodAndArg","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","displayName","isGeneratorFunction","constructor","mark","setPrototypeOf","__proto__","awrap","async","Promise","reverse","pop","prev","stop","rval","handle","complete","finish","catch","delegateYield","asyncGeneratorStep","_asyncToGenerator","apply","_next","_throw","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_arrayLikeToArray","_unsupportedIterableToArray","_nonIterableRest","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","toPrimitive","String","_toPrimitive","_toPropertyKey","defaultConfig","day","year","hour","month","minute","second","hour12","calendar","friendly","standard","formatTimestamp","date","config","_config","_config2","_config3","_config4","_config5","file","hideTime","_parseDate","parseDate","realDate","valid","getFormat","dataFormat","formatDateShort","format","trimObject","parseCustomFormat","timeZone","timezone","formatDate","toLocaleString","showNameDay","weekday","lastWeek","isLastWeek","thisWeek","isThisWeek","weekDay","timeRange","isToday","isYesterday","appendDay","formatted","hour12Lower","defaultTimes","fmtDate","moment","toDate","warn","isZeroDate","_parseDate3","getDate","_parseDate4","todayObj","todayDate","todayDay","getDay","fd","setDate","ld","today","setHours","yesterday","getMonth","getFullYear","formatHours","hrs","alwaysDaysIfApplys","foreverWords","numDays","specialCases","years","months","isNotEvenMonth","getAge","diff","age","abs","getUTCFullYear","timeUtils","formatTimeMinSec","time","mili","minutes","seconds","formatTimestampCSV","_parseDate2","_formatted$split2","Intl","DateTimeFormat","monthDayYear","_monthDayYear$split2","getTodayUnix","start","end","now","getDateMinusDays","days","fmtWord","units","SECOND_MS","MINUTE_MS","HOUR_MS","DAY_MS","WEEK_MS","MONTH_MS","YEAR_MS","SECOND_S","MINUTE_S","HOUR_S","DAY_S","WEEK_S","MONTH_S","YEAR_S","validateDate","safeDate","startOf","m","unix","isSameDate","compare","getDaysSince","x","getCountDownTime","distance","hours","getDatesBetween","dates","currentDate","addDays","this","valueOf","getDaysBetween","differenceDays","ceil","getTimeSinceMilliseconds","short","totalSeconds","remainingSeconds","remainingMinutes","remainingHours","areDatesInSameMonth","date1","date2","getOrdinalSuffix","calendarRange","formatter","month1","month2","day1","day2","timeAsync","_callee","startTime","_args","_context","performance","info","formatTimedResult","timeFunction","endTime","executionTime","formatMilliseconds","hideMilliseconds","milliseconds","round","timeString","showFull","hideMinutes","hideSeconds","areDatesMoreThanAYearApart","formatHourNumber","getTimeFor","finder","DateFinders","endOf","tomorrow","last7Days","last30Days","last90Days","last12months","setMonth","calculateAge","birthDate","birthYear","birthMonth","birthDay","Linker","noOrigin","_classCallCheck","base","getBaseURL","createURL","replacements","mergedReplacements","uid","formattedURL","_i","_Object$entries","entries","_Object$entries$_i","get","searchParams","append","params","_this","_ref2","set","delete","formatURL","open","historyInstance","history","relativePath","origin","URL","getName","_utils$user","getRealRole","getRole","isRealRole","getRoleView","isAdmin","itemStr","local","setRoleView","role","remove","reload","isRoleView","roleWeight","hasRealRole","roleHasRole","currRole","isSuperAdmin","real","hasLegacyBilling","fees","feesV2","getUserFees","getRealPackage","pack","_pack","packages","isRealPackage","tier","getPackageView","setPackageView","isPackageTier","getPackageTier","hasPackageTier","getTierWeight","ignoreAdmin","_userUtils$getUserFee","packageTier","getTierWithoutSuffix","tierWeight","isUpgrade","pendingTier","hasNativeApp","_user$metadata","legacy","hasMeta","metadata","nativeAppCharge","nativeAppStartDate","nativeAppTermLength","isBundling","mTier","aTier","baTier","lTier","dTier","validateBilling","_newFees$address","_newFees","newFees","customForm","builtFees","payload","required","billingCreation","assign","coupon","planType","firstMonthTransactions","setDebugMode","bool","isExperimental","setExperimental","isMessageUpgrade","currPlan","newPlan","messagingWeight","getMaxCredits","plan","debugList","getDebugging","args","addDebugging","currentDebugging","_len2","_key2","uniqueDebugging","_toConsumableArray","Set","delDebugging","_len3","_key3","clearDebugging","getTotalCreditsUsed","billing","acc","Count","admin_superuser","admin_director","admin_accountmanager","owner","operator","marketinganalyst","marketing","analyst","manager","budtender","financial","adminUtils","canSeeAll","emails","getEmail","engineeringTeam","supportTeam","billingTeam","marketingTeam","hubspotWhitelist","canViewBilling","isBillingAdmin","canViewUserAlerts","canActivateUserAlerts","_defineProperties","_createClass","colors","success","warning","defaultMessage","PromiseAny","q","all","allSettled","res","TEST_UID","TOKEN","templateTypes","realID","AuthService","dashData","plans","posList","asHost","toaster","isDevUID","DEV_TEST_UIDS","DEMO_ACCT_UIDS","agencyID","DEMO_AGENCY_UID","AYR","hideVoiceConvs","isAYR","isDispojoy","sandboxID","isAgency","isSandbox","specialPoliticalAgencies","isPolitical","industry","hasInfoBipCampaignID","hasTelnyxCampaignID","_ref3","tcmpID","hasApprovedTelnyxCampaign","_ref4","has10DLC","hasRestrictedIndustry10DLC","prodDomain","stagingDomain","realDomain","isStagingDev","isStaging","apiDomain","force","hostname","isVercelPreview","_location$hostname","isAPI","isShortyDomain","parsedUrl","protocol","domain","endsWith","domainName","parts","getUIDFromPath","match","getCorsRedirectByURL","currentUser","initialUser","getSubType","_utils$user2","subType","isVertical","isRetailOnly","isBrandOnly","isFreemiumVertical","isFreemiumRetail","isFreemiumBrand","isFreemium","isBrand","_utils$user3","brandLicenseCharge","isRetail","_profile","isBevAlc","_profile2","isCoffee","_profile3","getBudtenderTerm","isAdminAgency","isSubUser","isSub","isSuper","_reload","_callee2","wait","loc","hist","_args2","_context2","go","setTimeout","validLoginPath","strify","_fees$address","_utils$user4","home","search","loginURL","Role","BUDTENDER","MANAGER","FINANCIAL","getWalletURL","cnt","kw","homePhone","secondaryEmail","contactID","encodeURIComponent","srcID","appendQueryParam","k","query","URLSearchParams","queryParam","re","RegExp","decodeURIComponent","decodeURI","showErr","timeout","debugOnly","_err","v1","Boolean","sendNotification","duration","indexOf","placement","showErrs","notify","Break","dashed","air","showSuccess","msg","setLoading","setState","math","percentOf","b","percentDiff","A","B","realPercDiff","new_value","original_value","percentInc","findVariance","arr","mean","curr","pow","variance","avgVariance","standardDeviation","sqrt","backup","expiryTime","parseValueOrUndefined","darkMode","localStorage","getItem","toggleTheme","setItem","fmtTS","slash","showAm","fTs","fmtTSFlipped","fmtDateToEpoch","fmtPrice","am","unique","_step2","_iterator2","sort","_Object$keys","filterObj","_i2","toFixedLocale","money","toFixed","formatNumber","doCompare","localeCompare","replaceConversionLabel","conversionActionName","actions","CampaignConversionActionMap","isPuppy","document","body","classList","has","uuidRE","getRandomArbitrary","_value$props","props","text","_value$props2","sorter","fld","ascended","ffn","fv","av","bv","toLocaleLowerCase","inp","equal","aks","blen","_step3","_iterator3","removeDuplicates","filterSelect","inputValue","option","label","clone","_ref6","cloneDeep","structuredClone","fileExists","_fileExists","_callee3","fp","_context3","reject","img","Image","onerror","onload","src","_x","toCamel","$1","imageInfo","_imageInfo","_callee4","_context4","width","height","_x2","readFile","rd","FileReader","readAsText","readAsDataURL","readAsBinaryString","loadFonts","fonts","ele","createElement","media","head","appendChild","removeChild","merge","require","emptyString","makeCopy","emptyVals","recursive","copy","cleaned","searchObject","_config$vOnly","vOnly","_config$kOnly","kOnly","recursion","kcontains","vcontains","val","getTooltip","tooltip","Tooltip","title","addStyle","css","getElementById","found","innerText","createTextNode","getCookie","_document$cookie","cookie","find","row","startsWith","loadScript","querySelector","setAttribute","removeScript","noRefresh","centerRow","children","Row","justify","noPadding","paddingBottom","paddingLeft","paddingRight","paddingTop","noMargin","marginBottom","marginRight","marginTop","getBrandSettings","st","__set","icons","toggles","_i3","_Object$keys2","_i4","_Object$keys3","cssToText","_i5","_Object$keys4","ckey","hackCSS","extraCSS","borderColor","progressSuccessColor","button","disabledButton","card","cover","h1","override","PublicCSS","sleep","ms","sortArrObjectKeys","ignoreTS","item","sortObjectKeys","sortedKey","getUUID","crypto","getRandomValues","Uint8Array","moveStringToFront","moveAs","index","splice","chars","base64ToString","padding","j","_ref7","TextDecoder","decode","stringToBase64","TextEncoder","encode","base64","_ref8","_ref9","encodeObject","jsonString","base64String","decodeObject","encodedString","decoded","secondsToHms","loadImage","cb","imageUrl","loadImageFromFile","_loadImageFromFile","_callee7","_context7","reader","_callee6","image","_context6","_callee5","_context5","_x3","_x4","loadImageDimensionsFromFile","_event$target","loadImageDimensionsFromURL","downloadData","_downloadData","_callee8","fileName","mimeType","link","_context8","File","createObjectURL","download","click","revokeObjectURL","_x5","_x6","_x7","asyncFetch","_asyncFetch","_callee9","errCb","cancel","results","callBack","_args9","_context9","t0","_x8","_x9","_x10","_x11","getNotifyQueue","addNotifyQueue","delNotifyQueue","borderLeft","fontSize","fontWeight","maxCount","queue","notification","formatTime","includeMs","pad","inIFrame","parent","promiseQ","calculateRatio","numerator","denominator","isStandalone","_window","navigator","standalone","matchMedia","matches","getUserAgent","userAgent","useScript","_useState2","useState","setStatus","useEffect","script","getAttribute","setAttributeFromEvent","addEventListener","setStateFromEvent","removeEventListener","isMarkdown","_config$duration","color","reduceByID","cur","getUrlSearchParams","updateUrlSearchParams","urlObj","_ref12","_ref13","getPropertyByPath","_step4","delimiter","_iterator4","_value","setPropertyByPath","_step5","lastKey","_iterator5","tagRender","closable","onClose","Tag","Space","className","cursor","onClick","size","pickDate","asString","toISOString","add","_key4","isRegexPattern","_step6","_iterator6","_i6","_Object$entries2","_Object$entries2$_i","_Error$stack","stackInfo","stack","_match","_str$split2","func","line","filterOption","normalizeSearch","normalizedSearch","binder","overrides","getData","number","float","dirs","finDir","getVal","_o$finDir","dir","tmp","updated","realStyle","ob","defaultStyle","_opts$getData","_extends","_objectDestructuringEmpty","alwaysParse","hex","debug","styles","default","background","_this2","_value2","_step7","_iterator7","current","getErrorMessage","isChromiumBased","_num","_options3","precision","currency","allowInfinity","wrapPercent","_options","wrapCurrency","_options2","Infinity","formattedNumber","_options4","isValidUrl","reqHTTPs","urlToTest","hasValidDomain","lastIndexOf","validTLD","hasInvalidChars","_unused","ep","put","post","getToken","createBrowserHistory"],"sourceRoot":""}