{"version":3,"file":"js/5774.545a34a9.js","sources":["../../frontend/src/base/components/common/inputs/MaskInput.tsx","../../frontend/src/base/components/common/inputs/SelectDropdown.tsx","../../frontend/src/base/utils/arrayUtils.ts","../../frontend/src/base/utils/images.ts","../../frontend/src/base/utils/stringFormatter.ts"],"sourcesContent":["import { MAX_DECIMAL_INPUT } from \"@base/core/numericLimits\";\nimport { useOrgStore } from \"@base/hooks/useOrgStore\";\nimport { getCurrencySymbol } from \"@base/utils/stringFormatter\";\nimport { MaskitoOptions, maskitoUpdateElement } from \"@maskito/core\";\nimport {\n\tmaskitoCaretGuard,\n\tmaskitoEventHandler,\n\tmaskitoNumberOptionsGenerator,\n\tMaskitoNumberParams,\n\tmaskitoParseNumber,\n\tmaskitoStringifyNumber,\n} from \"@maskito/kit\";\nimport { useMaskito } from \"@maskito/react\";\nimport React, {\n\tforwardRef,\n\tRefCallback,\n\tuseCallback,\n\tuseImperativeHandle,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\n\nexport type MaskTypes = \"number\" | \"currency\" | \"percentage\";\n/** MaskInput emits an already-parsed value, not a DOM event; a cleared input sends null. */\nexport type MaskInputChangeHandler = (event: { target: { value: number | null } }) => void;\n\n/**\n * MaskInput's imperative handle. `valueAsNumber` is undefined when the input is empty or\n * unparseable, which is why this cannot be an HTMLInputElement (whose valueAsNumber is `number`).\n */\nexport type MaskInputRef = {\n\tvalueAsNumber: number | undefined;\n\tfocus: () => void;\n};\n\ninterface Props {\n\tmaskType: MaskTypes;\n\tonChange?: MaskInputChangeHandler;\n\tprefix?: string;\n\tsufix?: string;\n\tshowThousandSeparator?: boolean;\n\tallowDecimal?: boolean;\n\tallowNegative?: boolean;\n\tdecimalLimit?: number;\n\tintegerLimit?: number;\n\tdataTest?: string;\n\tcurrency?: string;\n\tcountry?: string;\n\tdisabled?: boolean;\n\t/** Controlled value (number) */\n\tvalue?: number | null;\n\t/** Uncontrolled initial value */\n\tdefaultValue?: number | null;\n}\n\ntype SharedMaskInputProps = Omit<React.HTMLProps<HTMLInputElement>, \"onChange\" | \"value\" | \"defaultValue\">;\n\ntype ControlledMaskInputProps = Props & {\n\tvalue: number | null;\n};\n\ntype UncontrolledMaskInputProps = Props & {\n\tvalue?: never;\n\tdefaultValue?: number | null;\n};\n\ntype MaskInputProps = (ControlledMaskInputProps | UncontrolledMaskInputProps) & SharedMaskInputProps;\n\nconst getLocaleSeparators = (country: string, currency: string) => {\n\ttry {\n\t\tconst locale = `en-${country.toUpperCase()}`;\n\t\tconst parts = new Intl.NumberFormat(locale, { style: \"currency\", currency }).formatToParts(1000.1);\n\t\treturn {\n\t\t\tdecimal: parts.find((p) => p.type === \"decimal\")?.value || \".\",\n\t\t\tthousand: parts.find((p) => p.type === \"group\")?.value || \",\",\n\t\t};\n\t} catch (e) {\n\t\tconsole.warn(\"Error determining locale separators, falling back to defaults.\", e);\n\t\treturn { decimal: \".\", thousand: \",\" };\n\t}\n};\n\nconst normalizeLeadingIntegerZeros = (display: string, prefix = \"\", postfix = \"\", decimalSeparator = \".\"): string => {\n\tconst hasPrefix = Boolean(prefix && display.startsWith(prefix));\n\tconst displayWithoutPrefix = hasPrefix ? display.slice(prefix.length) : display;\n\tconst hasPostfix = Boolean(postfix && displayWithoutPrefix.endsWith(postfix));\n\tconst displayWithoutAffixes = hasPostfix ? displayWithoutPrefix.slice(0, -postfix.length) : displayWithoutPrefix;\n\tconst sign = displayWithoutAffixes.startsWith(\"-\") ? \"-\" : \"\";\n\tconst unsignedValue = sign ? displayWithoutAffixes.slice(sign.length) : displayWithoutAffixes;\n\tconst decimalIndex = unsignedValue.indexOf(decimalSeparator);\n\tconst integerPart = decimalIndex === -1 ? unsignedValue : unsignedValue.slice(0, decimalIndex);\n\tconst fractionalPart = decimalIndex === -1 ? \"\" : unsignedValue.slice(decimalIndex);\n\n\treturn `${hasPrefix ? prefix : \"\"}${sign}${integerPart.replace(/^0+(?=\\d)/, \"\")}${fractionalPart}${hasPostfix ? postfix : \"\"}`;\n};\n\nconst MaskInput = forwardRef<MaskInputRef, MaskInputProps>(\n\t(\n\t\t{\n\t\t\tmaskType = \"number\",\n\t\t\tshowThousandSeparator = true,\n\t\t\tallowDecimal = false,\n\t\t\tallowNegative = true,\n\t\t\tdecimalLimit,\n\t\t\tintegerLimit,\n\t\t\tprefix,\n\t\t\tsufix,\n\t\t\tcurrency,\n\t\t\tcountry,\n\t\t\tdataTest,\n\t\t\tvalue: controlledValue,\n\t\t\tdefaultValue,\n\t\t\tmax,\n\t\t\tmin,\n\t\t\tonChange,\n\t\t\tonBlur: onBlurProp,\n\t\t\t...props\n\t\t}: MaskInputProps,\n\t\tref\n\t) => {\n\t\tconst orgData = useOrgStore((state) => state.organisationData);\n\n\t\tconst finalCountry = country || orgData?.country || \"US\";\n\t\tconst finalCurrency = currency || orgData?.currency || \"USD\";\n\t\tconst currencySymbol = getCurrencySymbol(finalCurrency);\n\n\t\tconst elementRef = useRef<HTMLInputElement>(null);\n\n\t\tconst isControlled = controlledValue !== undefined;\n\t\tconst localeSeparators = useMemo(\n\t\t\t() => getLocaleSeparators(finalCountry, finalCurrency),\n\t\t\t[finalCountry, finalCurrency]\n\t\t);\n\n\t\tconst maskitoConfig = useMemo(() => {\n\t\t\tconst shouldAllowDecimal = maskType === \"percentage\" || maskType === \"currency\" ? true : allowDecimal;\n\t\t\tconst calculatedDecimalLimit = maskType === \"percentage\" ? (decimalLimit ?? 2) : (decimalLimit ?? 5);\n\t\t\tconst calculatedSuffix = maskType === \"percentage\" ? \"%\" : (sufix ?? \"\");\n\t\t\tconst calculatedPrefix = maskType === \"currency\" ? currencySymbol : (prefix ?? \"\");\n\t\t\tconst calculatedIntegerLimit = maskType === \"currency\" ? 20 : (integerLimit ?? 20);\n\t\t\tconst integerLimitMax = Number(\"9\".repeat(calculatedIntegerLimit));\n\t\t\tconst calculatedMax = maskType === \"percentage\" ? 100 : Math.min(MAX_DECIMAL_INPUT, integerLimitMax);\n\t\t\tconst calculatedMin = maskType === \"percentage\" ? 0 : allowNegative ? Number.MIN_SAFE_INTEGER : 0;\n\n\t\t\tconst numberParams: MaskitoNumberParams = {\n\t\t\t\tprefix: calculatedPrefix,\n\t\t\t\tpostfix: calculatedSuffix,\n\t\t\t\tthousandSeparator: showThousandSeparator ? localeSeparators.thousand : undefined,\n\t\t\t\tmaximumFractionDigits: shouldAllowDecimal ? calculatedDecimalLimit : 0,\n\t\t\t\tdecimalSeparator: shouldAllowDecimal ? localeSeparators.decimal : undefined,\n\t\t\t\tmax: (max !== undefined && max !== null ? Number(max) : null) ?? calculatedMax,\n\t\t\t\tmin: (min !== undefined && min !== null ? Number(min) : null) ?? calculatedMin,\n\t\t\t};\n\n\t\t\tconst { plugins, ...otherOpts } = maskitoNumberOptionsGenerator(numberParams);\n\t\t\tconst maskitoOptions: MaskitoOptions = {\n\t\t\t\t...otherOpts,\n\t\t\t\tplugins: [\n\t\t\t\t\t...plugins,\n\t\t\t\t\t// Forbids caret to be placed after postfix\n\t\t\t\t\tmaskitoCaretGuard((value) => {\n\t\t\t\t\t\tif (calculatedSuffix.trim().length === 0) {\n\t\t\t\t\t\t\treturn [0, value.length];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn [0, value.length - 1];\n\t\t\t\t\t}),\n\t\t\t\t\tmaskitoEventHandler(\"input\", (element) => {\n\t\t\t\t\t\tif (element.value === calculatedSuffix || element.value === calculatedPrefix) {\n\t\t\t\t\t\t\tmaskitoUpdateElement(element, \"\");\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\treturn { maskitoOptions, numberParams };\n\t\t}, [\n\t\t\tmaskType,\n\t\t\tshowThousandSeparator,\n\t\t\tallowDecimal,\n\t\t\tallowNegative,\n\t\t\tdecimalLimit,\n\t\t\tintegerLimit,\n\t\t\tprefix,\n\t\t\tsufix,\n\t\t\tcurrencySymbol,\n\t\t\tlocaleSeparators,\n\t\t\tmin,\n\t\t\tmax,\n\t\t]);\n\n\t\tconst normalizeDisplayValue = useCallback(\n\t\t\t(display: string): string => {\n\t\t\t\t// Percentage fields are common free-text entry points where users type either\n\t\t\t\t// separator regardless of locale. Normalize to the active locale decimal separator\n\t\t\t\t// before parsing so both \".\" and \",\" are accepted.\n\t\t\t\tif (maskType !== \"percentage\") {\n\t\t\t\t\treturn display;\n\t\t\t\t}\n\t\t\t\tconst decimal = localeSeparators.decimal;\n\t\t\t\tconst alternateDecimal = decimal === \".\" ? \",\" : \".\";\n\t\t\t\tif (!display.includes(alternateDecimal) || display.includes(decimal)) {\n\t\t\t\t\treturn display;\n\t\t\t\t}\n\t\t\t\treturn display.replaceAll(alternateDecimal, decimal);\n\t\t\t},\n\t\t\t[localeSeparators.decimal, maskType]\n\t\t);\n\n\t\t// Convert number to display string\n\t\tconst numberToDisplay = useCallback(\n\t\t\t(num: number | null | undefined): string => {\n\t\t\t\tif (num === null || num === undefined) return \"\";\n\t\t\t\treturn maskitoStringifyNumber(num, maskitoConfig.numberParams);\n\t\t\t},\n\t\t\t[maskitoConfig.numberParams]\n\t\t);\n\n\t\t// Convert display string to number\n\t\tconst displayToNumber = useCallback(\n\t\t\t(display: string): number | undefined => {\n\t\t\t\tif (!display || display.trim() === \"\") return undefined;\n\t\t\t\tconst parsed = maskitoParseNumber(display, maskitoConfig.numberParams);\n\t\t\t\treturn isNaN(parsed) ? undefined : parsed;\n\t\t\t},\n\t\t\t[maskitoConfig.numberParams]\n\t\t);\n\n\t\t// --- Display state ---\n\t\t//\n\t\t// MaskInput supports two modes:\n\t\t//  - Uncontrolled (defaultValue): display managed by internal useState.\n\t\t//  - Controlled (value prop):     display derived from numberToDisplay(value).\n\t\t//\n\t\t// Problem with controlled mode: onChange always sends *parsed* numbers. Typing\n\t\t// \"25.\" parses to 25, the parent stores 25, and numberToDisplay(25) = \"25\" —\n\t\t// the trailing decimal is lost, making it impossible to type \"25.5\".\n\t\t//\n\t\t// Fix: controlledDisplayDraft. When the raw display string can't survive a\n\t\t// number → string round-trip (e.g. trailing decimal, trailing zeros like \"25.0\"),\n\t\t// we stash it as a \"draft\" and render it instead of the derived value. The draft\n\t\t// is cleared on blur (clean display) or when the controlled value changes\n\t\t// externally (e.g. a linked amount field updates the percentage).\n\n\t\tconst [uncontrolledDisplayValue, setUncontrolledDisplayValue] = useState<string>(() =>\n\t\t\tnumberToDisplay(defaultValue ?? undefined)\n\t\t);\n\t\tconst [controlledDisplayDraft, setControlledDisplayDraft] = useState<string | null>(null);\n\t\tconst wasControlledRef = useRef(isControlled);\n\n\t\tuseLayoutEffect(() => {\n\t\t\tif (!wasControlledRef.current && isControlled) {\n\t\t\t\t// RHF controllers often start with `undefined` and then provide a value after\n\t\t\t\t// the first keystroke. Preserve the live DOM value when that happens so the\n\t\t\t\t// input does not reformat mid-typing and drop characters.\n\t\t\t\tsetControlledDisplayDraft(uncontrolledDisplayValue);\n\t\t\t}\n\t\t\twasControlledRef.current = isControlled;\n\t\t}, [isControlled, uncontrolledDisplayValue]);\n\n\t\t// Clear draft when the controlled value diverges from what the draft represents.\n\t\t// This handles external updates — e.g. when an amount input recalculates the\n\t\t// percentage, controlledValue changes to a new number and the old draft is stale.\n\t\tlet currentControlledDisplayDraft = controlledDisplayDraft;\n\t\tif (isControlled && controlledDisplayDraft != null) {\n\t\t\tconst draftNumber = displayToNumber(controlledDisplayDraft);\n\t\t\tconst controlledNumber = controlledValue ?? undefined;\n\t\t\tif (draftNumber !== controlledNumber) {\n\t\t\t\tcurrentControlledDisplayDraft = null;\n\t\t\t\tsetControlledDisplayDraft(null);\n\t\t\t}\n\t\t}\n\n\t\tconst displayValue = isControlled\n\t\t\t? (currentControlledDisplayDraft ?? numberToDisplay(controlledValue))\n\t\t\t: uncontrolledDisplayValue;\n\n\t\tconst handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst newDisplayValue = normalizeLeadingIntegerZeros(\n\t\t\t\tnormalizeDisplayValue(e.target.value),\n\t\t\t\tmaskitoConfig.numberParams.prefix,\n\t\t\t\tmaskitoConfig.numberParams.postfix,\n\t\t\t\tmaskitoConfig.numberParams.decimalSeparator\n\t\t\t);\n\t\t\tconst newNumericValue = displayToNumber(newDisplayValue);\n\n\t\t\tif (!isControlled) {\n\t\t\t\tsetUncontrolledDisplayValue(newDisplayValue);\n\t\t\t} else {\n\t\t\t\t// Keep draft when the display can't round-trip through number → string\n\t\t\t\t// without loss. Covers trailing decimals (\"25.\"), trailing zeros (\"25.0\"),\n\t\t\t\t// and any other intermediate typing state.\n\t\t\t\tconst canRoundTrip = newDisplayValue === numberToDisplay(newNumericValue ?? null);\n\t\t\t\tsetControlledDisplayDraft(canRoundTrip ? null : newDisplayValue);\n\t\t\t}\n\n\t\t\tonChange?.({ target: { value: newNumericValue ?? null } });\n\t\t};\n\n\t\t// On blur, discard the draft so the display snaps to the clean numeric\n\t\t// representation (e.g. \"25.\" → \"25\", \"25.0\" → \"25\").\n\t\tconst handleBlur = useCallback(\n\t\t\t(e: React.FocusEvent<HTMLInputElement>) => {\n\t\t\t\tsetControlledDisplayDraft(null);\n\t\t\t\tonBlurProp?.(e);\n\t\t\t},\n\t\t\t[onBlurProp]\n\t\t);\n\n\t\tconst maskitoRef = useMaskito({ options: maskitoConfig.maskitoOptions }) as RefCallback<HTMLInputElement>;\n\t\tconst setInputRef = useCallback(\n\t\t\t(node: HTMLInputElement | null) => {\n\t\t\t\telementRef.current = node;\n\t\t\t\tmaskitoRef(node);\n\t\t\t},\n\t\t\t[maskitoRef]\n\t\t);\n\n\t\tuseImperativeHandle(ref, () => ({\n\t\t\tget valueAsNumber() {\n\t\t\t\treturn displayToNumber(elementRef.current?.value ?? \"\");\n\t\t\t},\n\t\t\tfocus: () => elementRef.current?.focus(),\n\t\t}));\n\n\t\treturn (\n\t\t\t<input\n\t\t\t\t{...props}\n\t\t\t\tref={setInputRef}\n\t\t\t\tdata-test={dataTest}\n\t\t\t\tvalue={displayValue}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tonBlur={handleBlur}\n\t\t\t\tdata-is=\"input\"\n\t\t\t/>\n\t\t);\n\t}\n);\n\nMaskInput.displayName = \"MaskInput\";\n\nexport { MaskInput };\n","import { BaseSizeList, Box, Icon, Text } from \"@base/components/common/primitives\";\nimport { DynamicIcons } from \"@base/utils/images\";\nimport { normalizeProps, Portal, useMachine } from \"@zag-js/react\";\nimport * as select from \"@zag-js/select\";\nimport clsx from \"clsx\";\nimport React, { useId, useRef } from \"react\";\nimport styles from \"./SelectDropdown.module.scss\";\n\ntype Data = {\n\tlabel: string | number;\n\tvalue: string;\n};\n\ninterface SelectDropdownProps {\n\tvariant?: \"default\" | \"cell\";\n\tdata: Array<Data>;\n\tplaceholder?: string;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\tdataTest?: string;\n\tvalue?: string;\n\tdefaultValue?: string;\n\tonValueChange?: (value: select.ValueChangeDetails<Data>) => void;\n\tclassName?: string;\n\tsize?: \"small\" | \"medium\" | \"large\";\n}\n\nconst dropdownSizes = {\n\tsmall: styles.small,\n\tmedium: styles.medium,\n\tlarge: styles.large,\n};\n\nconst iconSizes = {\n\tsmall: \"4x\",\n\tmedium: \"4x\",\n\tlarge: \"5x\",\n};\n\nconst selectTextSizes = {\n\tsmall: 12,\n\tmedium: 14,\n\tlarge: 14,\n} as const;\n\nexport interface SelectRef {\n\tvalue: string;\n\treadonly selectedIndex: number;\n}\n\nconst SelectDropdown = React.forwardRef<SelectRef, SelectDropdownProps>(\n\t(\n\t\t{\n\t\t\tdata,\n\t\t\trequired,\n\t\t\tplaceholder,\n\t\t\tdisabled,\n\t\t\tdataTest,\n\t\t\tvalue,\n\t\t\tdefaultValue,\n\t\t\tonValueChange,\n\t\t\tclassName,\n\t\t\tsize = \"medium\",\n\t\t\tvariant = \"default\",\n\t\t},\n\t\tref\n\t) => {\n\t\tconst holder = useRef(document.getElementById(\"reactDropdownHolder\") as HTMLElement);\n\t\tconst cssClasses = clsx([styles[`variant-${variant}`], className]);\n\n\t\tconst service = useMachine(select.machine, {\n\t\t\tid: useId(),\n\t\t\tcollection: select.collection({\n\t\t\t\titems: data,\n\t\t\t}),\n\t\t\trequired,\n\t\t\tdisabled,\n\t\t\tvalue: value !== undefined ? [value] : undefined,\n\t\t\tdefaultValue: defaultValue !== undefined ? [defaultValue] : undefined,\n\t\t\tonValueChange,\n\t\t\tonPointerDownOutside: () => {\n\t\t\t\tapi.setOpen(false); // For Safari, we need to force to close the dropdown manually since we prevent the default behavior on outside interaction\n\t\t\t},\n\t\t\tonInteractOutside: (e: select.InteractOutsideEvent) => {\n\t\t\t\te.preventDefault(); // For Safari, when this component is inside a modal, it doesnt know how to deal with the outside click, and dismisses everything\n\t\t\t},\n\t\t});\n\n\t\tconst api = select.connect(service, normalizeProps);\n\n\t\tReact.useImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tget value() {\n\t\t\t\t\treturn api.value?.[0] || \"\";\n\t\t\t\t},\n\t\t\t\tset value(newValue: string) {\n\t\t\t\t\tconst item = data.find((item) => item.value === newValue);\n\n\t\t\t\t\tif (item) {\n\t\t\t\t\t\tapi.setValue([newValue]);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tget selectedIndex() {\n\t\t\t\t\treturn data.findIndex((item) => item.value === api.value?.[0]);\n\t\t\t\t},\n\t\t\t}),\n\t\t\t[api, data]\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Box {...api.getRootProps()} className={cssClasses}>\n\t\t\t\t\t<Box {...api.getControlProps()} data-is=\"selectdropdown\">\n\t\t\t\t\t\t<button {...api.getTriggerProps()} data-test={dataTest} className={dropdownSizes[size]}>\n\t\t\t\t\t\t\t<Box orientation=\"horizontal\" align=\"left\" width=\"full\" gap=\"2x\" wrap=\"wrap\">\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\tsize={selectTextSizes[size]}\n\t\t\t\t\t\t\t\t\tcolor={placeholder && !api.valueAsString ? \"gray-light\" : \"black\"}\n\t\t\t\t\t\t\t\t\tweight=\"regular\"\n\t\t\t\t\t\t\t\t\ttruncate>\n\t\t\t\t\t\t\t\t\t{api.valueAsString || placeholder}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\tsource={DynamicIcons.caret}\n\t\t\t\t\t\t\t\trotate={api.open ? \"bottom\" : \"top\"}\n\t\t\t\t\t\t\t\tsize={iconSizes[size] as BaseSizeList}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</Box>\n\t\t\t\t\t<Portal container={holder}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={styles.selectResultsHolder}\n\t\t\t\t\t\t\t{...api.getPositionerProps()}\n\t\t\t\t\t\t\tdata-test={`${dataTest}-results`}\n\t\t\t\t\t\t\tdata-is=\"selectdropdown-results\">\n\t\t\t\t\t\t\t<ul {...api.getContentProps()}>\n\t\t\t\t\t\t\t\t{data.length > 0 ? (\n\t\t\t\t\t\t\t\t\tdata.map((item) => (\n\t\t\t\t\t\t\t\t\t\t<li key={item.value} {...api.getItemProps({ item })}>\n\t\t\t\t\t\t\t\t\t\t\t<span {...api.getItemTextProps({ item })}>{item.label}</span>\n\t\t\t\t\t\t\t\t\t\t</li>\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\t\t<li className=\"padding-vertical-2x padding-horizontal-3x\">\n\t\t\t\t\t\t\t\t\t\t<Text color=\"gray\">No options available</Text>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Portal>\n\t\t\t\t</Box>\n\n\t\t\t\t<select {...api.getHiddenSelectProps()}>\n\t\t\t\t\t{data.length > 0 ? (\n\t\t\t\t\t\tdata.map((option) => (\n\t\t\t\t\t\t\t<option key={option.value} value={option.value}>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<option value=\"\" disabled>\n\t\t\t\t\t\t\tNo options available\n\t\t\t\t\t\t</option>\n\t\t\t\t\t)}\n\t\t\t\t</select>\n\t\t\t</>\n\t\t);\n\t}\n);\n\nSelectDropdown.displayName = \"SelectDropdown\";\n\nexport { SelectDropdown };\n","export const compactNullableArray = <T>(items: ReadonlyArray<T | null | undefined> | null | undefined): T[] =>\n\t(items ?? []).filter((item) => item != null);\n\nexport type NonNullableFields<T, K extends keyof T> = T & {\n\t[P in K]-?: NonNullable<T[P]>;\n};\n\nexport const nonNullableKeys =\n\t<K extends PropertyKey>(...keys: K[]) =>\n\t<T extends Partial<Record<K, unknown>>>(item: T): item is NonNullableFields<T, K> =>\n\t\tkeys.every((key) => item[key] != null);\n","export type DynamicIconsTypes = keyof typeof DynamicIcons;\n\n// Dynamic icons\nimport archive from \"@base/assets/images/dynamic_icons/icon_archive.svg\";\nimport filterFlag from \"@base/assets/images/dynamic_icons/icon_filter_flag.svg\";\nimport idBadge from \"@base/assets/images/dynamic_icons/icon_id_badge.svg\";\nimport mapPin from \"@base/assets/images/dynamic_icons/icon_map_pin.svg\";\nimport phone from \"@base/assets/images/dynamic_icons/icon_phone.svg\";\nimport unarchive from \"@base/assets/images/dynamic_icons/icon_unarchive.svg\";\nimport users from \"@base/assets/images/dynamic_icons/icon_users.svg\";\nimport add from \"../assets/images/dynamic_icons/icon_add.svg\";\nimport addCircle from \"../assets/images/dynamic_icons/icon_add_circle.svg\";\nimport alarm from \"../assets/images/dynamic_icons/icon_alarm.svg\";\nimport alertDynamic from \"../assets/images/dynamic_icons/icon_alert.svg\";\nimport alertTriangle from \"../assets/images/dynamic_icons/icon_alert_triangle.svg\";\nimport arrow from \"../assets/images/dynamic_icons/icon_arrow.svg\";\nimport arrowBeneficiary from \"../assets/images/dynamic_icons/icon_arrow_beneficiary.svg\";\nimport arrowCircle from \"../assets/images/dynamic_icons/icon_arrow_circle.svg\";\nimport arrowSort from \"../assets/images/dynamic_icons/icon_arrow_sort.svg\";\nimport arrowSwitch from \"../assets/images/dynamic_icons/icon_arrow_switch.svg\";\nimport arrowsTriangle from \"../assets/images/dynamic_icons/icon_arrows_triangle.svg\";\nimport attachment from \"../assets/images/dynamic_icons/icon_attachment.svg\";\nimport bookOpen from \"../assets/images/dynamic_icons/icon_book_open.svg\";\nimport claude from \"../assets/images/dynamic_icons/icon_claude.svg\";\nimport codex from \"../assets/images/dynamic_icons/icon_codex.svg\";\nimport cursor from \"../assets/images/dynamic_icons/icon_cursor.svg\";\nimport grok from \"../assets/images/dynamic_icons/icon_grok.svg\";\nimport cakeStroke from \"../assets/images/dynamic_icons/icon_cake_stroke.svg\";\nimport cakeSealPen from \"../assets/images/dynamic_icons/icon_cakeseal_pen.svg\";\nimport calc from \"../assets/images/dynamic_icons/icon_calc.svg\";\nimport calculator from \"../assets/images/dynamic_icons/icon_calculator.svg\";\nimport calendar from \"../assets/images/dynamic_icons/icon_calendar.svg\";\nimport caret from \"../assets/images/dynamic_icons/icon_caret.svg\";\nimport certificate from \"../assets/images/dynamic_icons/icon_certificate.svg\";\nimport chartBar from \"../assets/images/dynamic_icons/icon_chart_bar.svg\";\nimport chartLineUp from \"../assets/images/dynamic_icons/icon_chart_line_up.svg\";\nimport checkBg from \"../assets/images/dynamic_icons/icon_check_bg.svg\";\nimport checkmark from \"../assets/images/dynamic_icons/icon_checkmark.svg\";\nimport checkmarkCircle from \"../assets/images/dynamic_icons/icon_checkmark_circle.svg\";\nimport checkmarkDashedCircle from \"../assets/images/dynamic_icons/icon_checkmark_dashed_circle.svg\";\nimport chevron from \"../assets/images/dynamic_icons/icon_chevron.svg\";\nimport circleDashed from \"../assets/images/dynamic_icons/icon_circle_dashed.svg\";\nimport clipboardText from \"../assets/images/dynamic_icons/icon_clipboard_text.svg\";\nimport close from \"../assets/images/dynamic_icons/icon_close.svg\";\nimport closeCircle from \"../assets/images/dynamic_icons/icon_close_circle.svg\";\nimport coins from \"../assets/images/dynamic_icons/icon_coins.svg\";\nimport comment from \"../assets/images/dynamic_icons/icon_comment.svg\";\nimport commentActive from \"../assets/images/dynamic_icons/icon_comment_active.svg\";\nimport copy from \"../assets/images/dynamic_icons/icon_copy.svg\";\nimport copyPaste from \"../assets/images/dynamic_icons/icon_copy_paste.svg\";\nimport creditCard from \"../assets/images/dynamic_icons/icon_credit_card.svg\";\nimport currencyDollar from \"../assets/images/dynamic_icons/icon_currency_dollar.svg\";\nimport date from \"../assets/images/dynamic_icons/icon_date.svg\";\nimport deleteIcon from \"../assets/images/dynamic_icons/icon_delete.svg\";\nimport document from \"../assets/images/dynamic_icons/icon_document.svg\";\nimport documentAdd from \"../assets/images/dynamic_icons/icon_document_add.svg\";\nimport documentAttachment from \"../assets/images/dynamic_icons/icon_document_attachment.svg\";\nimport documentCheckmark from \"../assets/images/dynamic_icons/icon_document_checkmark.svg\";\nimport dollarCircle from \"../assets/images/dynamic_icons/icon_dollar_circle.svg\";\nimport done from \"../assets/images/dynamic_icons/icon_done.svg\";\nimport doneEggplant from \"../assets/images/dynamic_icons/icon_done_eggplant.svg\";\nimport downgrade from \"../assets/images/dynamic_icons/icon_downgrade.svg\";\nimport download from \"../assets/images/dynamic_icons/icon_download.svg\";\nimport drag from \"../assets/images/dynamic_icons/icon_drag.svg\";\nimport edit from \"../assets/images/dynamic_icons/icon_edit.svg\";\nimport editSquare from \"../assets/images/dynamic_icons/icon_edit_square.svg\";\nimport envelope from \"../assets/images/dynamic_icons/icon_envelope.svg\";\nimport envelopeSimple from \"../assets/images/dynamic_icons/icon_envelope_simple.svg\";\nimport feature from \"../assets/images/dynamic_icons/icon_feature.svg\";\nimport fileArrowUp from \"../assets/images/dynamic_icons/icon_file_arrow_up.svg\";\nimport files from \"../assets/images/dynamic_icons/icon_files.svg\";\nimport filter from \"../assets/images/dynamic_icons/icon_filter.svg\";\nimport filterStatus from \"../assets/images/dynamic_icons/icon_filter_status.svg\";\nimport filters from \"../assets/images/dynamic_icons/icon_filters.svg\";\nimport flag from \"../assets/images/dynamic_icons/icon_flag.svg\";\nimport folderFilled from \"../assets/images/dynamic_icons/icon_folder_filled.svg\";\nimport gear from \"../assets/images/dynamic_icons/icon_gear.svg\";\nimport gift from \"../assets/images/dynamic_icons/icon_gift.svg\";\nimport graduationCap from \"../assets/images/dynamic_icons/icon_graduation_cap.svg\";\nimport grid from \"../assets/images/dynamic_icons/icon_grid.svg\";\nimport handCoins from \"../assets/images/dynamic_icons/icon_hand_coins.svg\";\nimport handshake from \"../assets/images/dynamic_icons/icon_handshake.svg\";\nimport headset from \"../assets/images/dynamic_icons/icon_headset.svg\";\nimport help from \"../assets/images/dynamic_icons/icon_help.svg\";\nimport info from \"../assets/images/dynamic_icons/icon_info.svg\";\nimport infoFill from \"../assets/images/dynamic_icons/icon_info_fill.svg\";\nimport installApp from \"../assets/images/dynamic_icons/icon_install_app.svg\";\nimport lifeBuoy from \"../assets/images/dynamic_icons/icon_lifebuoy.svg\";\nimport lineChart from \"../assets/images/dynamic_icons/icon_line_chart.svg\";\nimport listChecks from \"../assets/images/dynamic_icons/icon_list_checks.svg\";\nimport listMagnifyingGlass from \"../assets/images/dynamic_icons/icon_list_magnifying_glass.svg\";\nimport iconLoader from \"../assets/images/dynamic_icons/icon_loader.svg\";\nimport lock from \"../assets/images/dynamic_icons/icon_lock.svg\";\nimport medal from \"../assets/images/dynamic_icons/icon_medal.svg\";\nimport megaphone from \"../assets/images/dynamic_icons/icon_megaphone.svg\";\nimport minusCircle from \"../assets/images/dynamic_icons/icon_minus_circle.svg\";\nimport money from \"../assets/images/dynamic_icons/icon_money.svg\";\nimport more from \"../assets/images/dynamic_icons/icon_more.svg\";\nimport move from \"../assets/images/dynamic_icons/icon_move.svg\";\nimport notePencil from \"../assets/images/dynamic_icons/icon_note_pencil.svg\";\nimport offline from \"../assets/images/dynamic_icons/icon_offline.svg\";\nimport pause from \"../assets/images/dynamic_icons/icon_pause.svg\";\nimport pen from \"../assets/images/dynamic_icons/icon_pen.svg\";\nimport penWriting from \"../assets/images/dynamic_icons/icon_pen_writing.svg\";\nimport percent from \"../assets/images/dynamic_icons/icon_percent.svg\";\nimport pieChart from \"../assets/images/dynamic_icons/icon_pie_chart.svg\";\nimport play from \"../assets/images/dynamic_icons/icon_play.svg\";\nimport playCircle from \"../assets/images/dynamic_icons/icon_play_circle.svg\";\nimport presentation from \"../assets/images/dynamic_icons/icon_presentation.svg\";\nimport profileCircular from \"../assets/images/dynamic_icons/icon_profile_circular.svg\";\nimport questionCircle from \"../assets/images/dynamic_icons/icon_question_circle.svg\";\nimport refresh from \"../assets/images/dynamic_icons/icon_refresh.svg\";\nimport reminder from \"../assets/images/dynamic_icons/icon_reminder.svg\";\nimport reply from \"../assets/images/dynamic_icons/icon_reply.svg\";\nimport reset from \"../assets/images/dynamic_icons/icon_reset.svg\";\nimport resume from \"../assets/images/dynamic_icons/icon_resume.svg\";\nimport rocket from \"../assets/images/dynamic_icons/icon_rocket.svg\";\nimport RSA from \"../assets/images/dynamic_icons/icon_rsa.svg\";\nimport RSU from \"../assets/images/dynamic_icons/icon_rsu.svg\";\nimport save from \"../assets/images/dynamic_icons/icon_save.svg\";\nimport scale from \"../assets/images/dynamic_icons/icon_scale.svg\";\nimport scribble from \"../assets/images/dynamic_icons/icon_scribble.svg\";\nimport search from \"../assets/images/dynamic_icons/icon_search.svg\";\nimport send from \"../assets/images/dynamic_icons/icon_send.svg\";\nimport settings from \"../assets/images/dynamic_icons/icon_settings.svg\";\nimport shield from \"../assets/images/dynamic_icons/icon_shield.svg\";\nimport shoppingCart from \"../assets/images/dynamic_icons/icon_shopping_cart.svg\";\nimport split from \"../assets/images/dynamic_icons/icon_split.svg\";\nimport square from \"../assets/images/dynamic_icons/icon_square.svg\";\nimport stackPlus from \"../assets/images/dynamic_icons/icon_stack_plus.svg\";\nimport starOutline from \"../assets/images/dynamic_icons/icon_star_outline.svg\";\nimport table from \"../assets/images/dynamic_icons/icon_table.svg\";\nimport tableBig from \"../assets/images/dynamic_icons/icon_table_big.svg\";\nimport tag from \"../assets/images/dynamic_icons/icon_tag.svg\";\nimport tagDiscount from \"../assets/images/dynamic_icons/icon_tag_discount.svg\";\nimport thumbs from \"../assets/images/dynamic_icons/icon_thumbs.svg\";\nimport time from \"../assets/images/dynamic_icons/icon_time.svg\";\nimport trendUp from \"../assets/images/dynamic_icons/icon_trend_up.svg\";\nimport upload from \"../assets/images/dynamic_icons/icon_upload.svg\";\nimport user from \"../assets/images/dynamic_icons/icon_user.svg\";\nimport userCircle from \"../assets/images/dynamic_icons/icon_user_circle.svg\";\nimport userDashed from \"../assets/images/dynamic_icons/icon_user_dashed.svg\";\nimport userMultiple from \"../assets/images/dynamic_icons/icon_user_multiple.svg\";\nimport userPlus from \"../assets/images/dynamic_icons/icon_user_plus.svg\";\nimport usersAdd from \"../assets/images/dynamic_icons/icon_users_add.svg\";\nimport usersCheckmark from \"../assets/images/dynamic_icons/icon_users_checkmark.svg\";\nimport valuationUpload from \"../assets/images/dynamic_icons/icon_valuation_upload.svg\";\nimport van from \"../assets/images/dynamic_icons/icon_van.svg\";\nimport vest from \"../assets/images/dynamic_icons/icon_vest.svg\";\nimport vestStop from \"../assets/images/dynamic_icons/icon_vest_stop.svg\";\nimport warningOctagon from \"../assets/images/dynamic_icons/icon_warning_octagon.svg\";\nimport cake from \"../assets/images/dynamic_icons/icon_cake.svg\";\n\n// Icons Menu\nimport menuClipboard from \"../assets/images/dynamic_icons/menu/icon_menu_clipboard.svg\";\nimport menuClock from \"../assets/images/dynamic_icons/menu/icon_menu_clock.svg\";\nimport menuPeople from \"../assets/images/dynamic_icons/menu/icon_menu_people.svg\";\n\n// Icons Signature Select\nimport checkChecked from \"../assets/images/dynamic_icons/signature_select/icon_check_checked.svg\";\nimport checkEmpty from \"../assets/images/dynamic_icons/signature_select/icon_check_empty.svg\";\nimport signatureDraw from \"../assets/images/dynamic_icons/signature_select/icon_signature_draw.svg\";\nimport signatureDrawActive from \"../assets/images/dynamic_icons/signature_select/icon_signature_draw_active.svg\";\nimport signatureSelect from \"../assets/images/dynamic_icons/signature_select/icon_signature_select.svg\";\nimport signatureSelectActive from \"../assets/images/dynamic_icons/signature_select/icon_signature_select_active.svg\";\n\n// Icons Text Editor\nimport tipTapAlignCenterIcon from \"../assets/images/dynamic_icons/rich_text_editor/align_center_icon.svg\";\nimport tipTapAlignJustifyIcon from \"../assets/images/dynamic_icons/rich_text_editor/align_justify_icon.svg\";\nimport tipTapAlignLeftIcon from \"../assets/images/dynamic_icons/rich_text_editor/align_left_icon.svg\";\nimport tipTapAlignRightIcon from \"../assets/images/dynamic_icons/rich_text_editor/align_right_icon.svg\";\nimport tipTapBlockQuoteIcon from \"../assets/images/dynamic_icons/rich_text_editor/block_quote_icon.svg\";\nimport tipTapBoldIcon from \"../assets/images/dynamic_icons/rich_text_editor/bold_icon.svg\";\nimport tipTapChevronDownIcon from \"../assets/images/dynamic_icons/rich_text_editor/chevron_down_icon.svg\";\nimport tipTapCloseIcon from \"../assets/images/dynamic_icons/rich_text_editor/close_icon.svg\";\nimport tipTapCode2Icon from \"../assets/images/dynamic_icons/rich_text_editor/code2_icon.svg\";\nimport tipTapCodeBlockIcon from \"../assets/images/dynamic_icons/rich_text_editor/code_block_icon.svg\";\nimport tipTapCornerDownLeftIcon from \"../assets/images/dynamic_icons/rich_text_editor/corner_down_left_icon.svg\";\nimport tipTapEmojiIcon from \"../assets/images/dynamic_icons/rich_text_editor/emoji_icon.svg\";\nimport tipTapExternalLinkIcon from \"../assets/images/dynamic_icons/rich_text_editor/external_link_icon.svg\";\nimport tipTapHeadingFiveIcon from \"../assets/images/dynamic_icons/rich_text_editor/heading_five_icon.svg\";\nimport tipTapHeadingFourIcon from \"../assets/images/dynamic_icons/rich_text_editor/heading_four_icon.svg\";\nimport tipTapHeadingIcon from \"../assets/images/dynamic_icons/rich_text_editor/heading_icon.svg\";\nimport tipTapHeadingOneIcon from \"../assets/images/dynamic_icons/rich_text_editor/heading_one_icon.svg\";\nimport tipTapHeadingSixIcon from \"../assets/images/dynamic_icons/rich_text_editor/heading_six_icon.svg\";\nimport tipTapHeadingThreeIcon from \"../assets/images/dynamic_icons/rich_text_editor/heading_three_icon.svg\";\nimport tipTapHeadingTwoIcon from \"../assets/images/dynamic_icons/rich_text_editor/heading_two_icon.svg\";\nimport tipTapImagePlusIcon from \"../assets/images/dynamic_icons/rich_text_editor/image_plus_icon.svg\";\nimport tipTapItalicIcon from \"../assets/images/dynamic_icons/rich_text_editor/italic_icon.svg\";\nimport tipTapLinkIcon from \"../assets/images/dynamic_icons/rich_text_editor/link_icon.svg\";\nimport tipTapListIcon from \"../assets/images/dynamic_icons/rich_text_editor/list_icon.svg\";\nimport tipTapListOrderedIcon from \"../assets/images/dynamic_icons/rich_text_editor/list_ordered_icon.svg\";\nimport tipTapListTodoIcon from \"../assets/images/dynamic_icons/rich_text_editor/list_todo_icon.svg\";\nimport tipTapRedo2Icon from \"../assets/images/dynamic_icons/rich_text_editor/redo2_icon.svg\";\nimport tipTapStrikeIcon from \"../assets/images/dynamic_icons/rich_text_editor/strike_icon.svg\";\nimport tipTapSubscriptIcon from \"../assets/images/dynamic_icons/rich_text_editor/subscript_icon.svg\";\nimport tipTapSuperscriptIcon from \"../assets/images/dynamic_icons/rich_text_editor/superscript_icon.svg\";\nimport tipTapTableIcon from \"../assets/images/dynamic_icons/rich_text_editor/table_icon.svg\";\nimport tipTapTrashIcon from \"../assets/images/dynamic_icons/rich_text_editor/trash_icon.svg\";\nimport tipTapUnderlineIcon from \"../assets/images/dynamic_icons/rich_text_editor/underline_icon.svg\";\nimport tipTapUndo2Icon from \"../assets/images/dynamic_icons/rich_text_editor/undo2_icon.svg\";\nimport tipTapVideoIcon from \"../assets/images/dynamic_icons/rich_text_editor/video_icon.svg\";\n\n// Illustrations\nimport blockSignatures from \"../assets/images/illustrations/blocks/signatures_holder.svg\";\nimport cardBackgroundEllipse from \"../assets/images/illustrations/card_background_ellipse.svg\";\nimport cardBackgroundEllipseBlue from \"../assets/images/illustrations/card_background_ellipse_blue.svg\";\nimport documentList from \"../assets/images/illustrations/document_list.svg\";\nimport documentScan from \"../assets/images/illustrations/document_scan.svg\";\nimport documentUpload from \"../assets/images/illustrations/document_upload.svg\";\nimport documentValuation from \"../assets/images/illustrations/document_valuation.svg\";\nimport illustrationActionsEmpty from \"../assets/images/illustrations/illustration_actions_empty.png\";\nimport shannon from \"../assets/images/illustrations/illustration_shannon.png\";\nimport kudosBadge from \"../assets/images/illustrations/kudos_badge.svg\";\nimport messageEmpty from \"../assets/images/illustrations/message_empty.svg\";\nimport signaturePadPlaceholder from \"../assets/images/illustrations/signature_pad_placeholder.svg\";\n\nimport cakeStartup from \"../assets/cake_startup_icon.svg\";\nimport cakeLogo from \"../assets/cake_logo.png\";\n\n// Dynamic menu icons\nimport menuBeginner409a from \"../assets/images/dynamic_icons/menu_beginner/icon_menu_409a.svg\";\nimport menuBeginnerAsc from \"../assets/images/dynamic_icons/menu_beginner/icon_menu_asc.svg\";\nimport menuBeginnerForm3921 from \"../assets/images/dynamic_icons/menu_beginner/icon_menu_form_3921.svg\";\nimport menuBeginnerQsbs from \"../assets/images/dynamic_icons/menu_beginner/icon_menu_qsbs.svg\";\nimport menuBeginnerTransfers from \"../assets/images/dynamic_icons/menu_beginner/icon_menu_transfers.svg\";\n\nconst DynamicIcons = {\n\tarchive,\n\tunarchive,\n\tadd,\n\tarrowBeneficiary,\n\taddCircle,\n\talarm,\n\tattachment,\n\tarrowCircle,\n\tarrowsTriangle,\n\tarrow,\n\tarrowSwitch,\n\tarrowSort,\n\tcakeStroke,\n\t// Assistant brand marks, for the MCP connection instructions.\n\tclaude,\n\tcodex,\n\tcursor,\n\tgrok,\n\tchartBar,\n\tchartLineUp,\n\tcheckBg,\n\tcheckmark,\n\tcheckEmpty,\n\tcheckChecked,\n\tcheckmarkCircle,\n\tchevron,\n\tclose,\n\tcomment,\n\tcommentActive,\n\tcopy,\n\tdeleteIcon,\n\tdocument,\n\tdocumentAdd,\n\tdocumentAttachment,\n\tdocumentCheckmark,\n\tdone,\n\tdoneEggplant,\n\tdownload,\n\tedit,\n\teditSquare,\n\tfiles,\n\tfilters,\n\tfilterStatus,\n\thelp,\n\theadset,\n\tinfo,\n\tinfoFill,\n\tinstallApp,\n\tpieChart,\n\tpercent,\n\tquestionCircle,\n\tlineChart,\n\tlistChecks,\n\tclipboardText,\n\tminusCircle,\n\tmoney,\n\tmore,\n\tmove,\n\trefresh,\n\tsearch,\n\tsignatureDraw,\n\tsignatureDrawActive,\n\tsignatureSelect,\n\tsignatureSelectActive,\n\tshield,\n\tusersAdd,\n\tusersCheckmark,\n\tpen,\n\tpenWriting,\n\tcakeSealPen,\n\tsend,\n\tmenuPeople,\n\tmenuClock,\n\tmenuClipboard,\n\tfilter,\n\tdate,\n\talertDynamic,\n\talertTriangle,\n\tflag,\n\ttable,\n\ttableBig,\n\tstackPlus,\n\ttagDiscount,\n\tsettings,\n\tcalc,\n\tcalculator,\n\tcalendar,\n\tcloseCircle,\n\tcoins,\n\tthumbs,\n\tvest,\n\tvestStop,\n\tpause,\n\tresume,\n\tcopyPaste,\n\tcreditCard,\n\treset,\n\treminder,\n\toffline,\n\tcaret,\n\ttime,\n\tuserCircle,\n\tuserDashed,\n\thandshake,\n\thandCoins,\n\tpresentation,\n\tlifeBuoy,\n\tplay,\n\tplayCircle,\n\tsquare,\n\tgraduationCap,\n\tgrid,\n\tscribble,\n\tuser,\n\tuserMultiple,\n\tuserPlus,\n\tfileArrowUp,\n\tgear,\n\tnotePencil,\n\tstarOutline,\n\ttrendUp,\n\tcurrencyDollar,\n\tdollarCircle,\n\tlistMagnifyingGlass,\n\tcheckmarkDashedCircle,\n\tcircleDashed,\n\ticonLoader,\n\tdrag,\n\tenvelope,\n\tenvelopeSimple,\n\treply,\n\ttag,\n\trocket,\n\tdowngrade,\n\tlock,\n\tsave,\n\tscale,\n\tupload,\n\tshoppingCart,\n\tprofileCircular,\n\tmedal,\n\tcertificate,\n\tRSU,\n\tRSA,\n\tgift,\n\tvaluationUpload,\n\twarningOctagon,\n\tfeature,\n\tbookOpen,\n\tmegaphone,\n\tsplit,\n\tvan,\n\tfolderFilled,\n\tcake,\n};\n\nconst DynamicMenuIcons = {\n\tmenuBeginnerTransfers,\n\tmenuBeginner409a,\n\tmenuBeginnerAsc,\n\tmenuBeginnerForm3921,\n\tmenuBeginnerQsbs,\n\tmapPin,\n\tfilterFlag,\n\tidBadge,\n\tphone,\n\tusers,\n};\n\nconst RichTextEditorIcons = {\n\ttipTapAlignCenterIcon,\n\ttipTapAlignJustifyIcon,\n\ttipTapAlignLeftIcon,\n\ttipTapAlignRightIcon,\n\ttipTapBlockQuoteIcon,\n\ttipTapBoldIcon,\n\ttipTapChevronDownIcon,\n\ttipTapCloseIcon,\n\ttipTapCodeBlockIcon,\n\ttipTapCode2Icon,\n\ttipTapCornerDownLeftIcon,\n\ttipTapExternalLinkIcon,\n\ttipTapHeadingFiveIcon,\n\ttipTapHeadingFourIcon,\n\ttipTapHeadingIcon,\n\ttipTapHeadingOneIcon,\n\ttipTapHeadingSixIcon,\n\ttipTapHeadingThreeIcon,\n\ttipTapHeadingTwoIcon,\n\ttipTapImagePlusIcon,\n\ttipTapItalicIcon,\n\ttipTapLinkIcon,\n\ttipTapListIcon,\n\ttipTapListOrderedIcon,\n\ttipTapListTodoIcon,\n\ttipTapRedo2Icon,\n\ttipTapStrikeIcon,\n\ttipTapSubscriptIcon,\n\ttipTapSuperscriptIcon,\n\ttipTapTableIcon,\n\ttipTapTrashIcon,\n\ttipTapUndo2Icon,\n\ttipTapUnderlineIcon,\n\ttipTapEmojiIcon,\n\ttipTapVideoIcon,\n};\n\nconst Illustrations = {\n\tkudosBadge,\n\tsignaturePadPlaceholder,\n\tdocumentScan,\n\tdocumentList,\n\tmessageEmpty,\n\tillustrationActionsEmpty,\n\tdocumentUpload,\n\tdocumentValuation,\n\tcardBackgroundEllipse,\n\tcardBackgroundEllipseBlue,\n\tshannon,\n\tblockSignatures,\n};\n\nconst Logos = {\n\tcakeStartup,\n\tcakeLogo,\n};\n\nexport { DynamicIcons, DynamicMenuIcons, Illustrations, Logos, RichTextEditorIcons };\n","import { getAppContext } from \"@base/core/CakeStore\";\nimport { GetPeopleQuery, InternationalAddressFragment, SeEmployeeDataLevelChoices } from \"@base/core/graphql\";\nimport Decimal from \"decimal.js\";\nimport { DateTime } from \"luxon\";\nimport { formatValue } from \"react-currency-input-field\";\n\nexport const emailRegex = new RegExp(\n\t// eslint-disable-next-line max-len\n\t/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i\n);\n\nexport function formatAddress(address: InternationalAddressFragment | null | undefined) {\n\tif (address != null) {\n\t\treturn (\n\t\t\t(address.line1 || \"\") +\n\t\t\t\", \" +\n\t\t\t(address.line2 ? address.line2 + \", \" : \"\") +\n\t\t\taddress.locality +\n\t\t\t\" \" +\n\t\t\t(address.administrativeArea1 || \"\") +\n\t\t\t\" \" +\n\t\t\taddress.postcode +\n\t\t\t\", \" +\n\t\t\taddress.country // TODO(henrique) get country name instead if code\n\t\t);\n\t}\n\treturn \"-\";\n}\n\nconst roundToMaxDecimalPlaces = (n: number, maxDecimalPlaces = 5) => {\n\tconst p = Math.pow(10, maxDecimalPlaces);\n\treturn Math.round(n * p) / p;\n};\n\nexport function formatNumber(value: number | null | undefined, prefix = \"# \", suffix = \"\") {\n\tif (value === null || value === undefined) {\n\t\treturn \"\";\n\t}\n\treturn formatValue({\n\t\tvalue: `${value}`,\n\t\tdecimalScale: 0,\n\t\tgroupSeparator: \",\",\n\t\tprefix: prefix,\n\t\tsuffix: suffix,\n\t});\n}\n\nexport function formatMonetaryValue(\n\tvalue: number | Decimal | null | undefined,\n\tcurrencySymbol: string,\n\tnoDecimal = false,\n\tnoSpace = false\n) {\n\tif (value === null || value === undefined) {\n\t\treturn \"-\";\n\t}\n\n\treturn formatValue({\n\t\tvalue: `${String(value)}`,\n\t\tdecimalScale: noDecimal ? 0 : 2,\n\t\tgroupSeparator: \",\",\n\t\tdecimalSeparator: \".\",\n\t\tprefix: noSpace ? currencySymbol : currencySymbol + \" \",\n\t});\n}\n\nexport function formatPrice(value: number | null | undefined, currencySymbol: string): string {\n\tconst roundedValue = value ? roundToMaxDecimalPlaces(value) : 0;\n\treturn formatValue({\n\t\tvalue: `${roundedValue}`,\n\t\tdecimalScale: Number.isInteger(roundedValue) ? 2 : undefined, // i question this 2, why not zero? if integer why do we force .00 ?\n\t\tgroupSeparator: \",\",\n\t\tdecimalSeparator: \".\",\n\t\tprefix: currencySymbol + \" \",\n\t});\n}\n\nexport function formatPercentage(value: number, decimals: number = 5): string {\n\treturn formatValue({\n\t\tvalue: `${roundToMaxDecimalPlaces(value, decimals)}`,\n\t\tdecimalSeparator: \".\",\n\t\tsuffix: \"%\",\n\t});\n}\n\nexport function formatPercentageSane(value: number): string {\n\treturn formatValue({\n\t\tvalue: `${value}`,\n\t\tdecimalSeparator: \".\",\n\t\tsuffix: \"%\",\n\t\tdecimalScale: 0,\n\t});\n}\n\nexport const getCountryFullName = (countryCode: string): string => {\n\tif (!countryCode) return \"\";\n\tconst displayNames = new Intl.DisplayNames([\"en\"], { type: \"region\" });\n\treturn displayNames.of(countryCode) || countryCode;\n};\n\nexport function getFlagEmoji(countryCode: string | null | undefined): string {\n\tif (!countryCode) {\n\t\treturn \"\";\n\t}\n\tconst codePoints = countryCode\n\t\t.toUpperCase()\n\t\t.split(\"\")\n\t\t.map((char) => 127397 + char.charCodeAt(0));\n\treturn String.fromCodePoint(...codePoints);\n}\n\nexport const getEmployeeLevelName = (code: SeEmployeeDataLevelChoices) => {\n\treturn window?.riot?.employeeLevels.find((r) => r.code === code)?.name;\n};\n\nexport const getEmployeeRoleName = (code: string) => {\n\treturn window?.riot?.employeeRoles.find((r) => r.code === code)?.name;\n};\n\nexport const capitalizeString = (string: string) => {\n\treturn string.charAt(0).toUpperCase() + string.toLowerCase().slice(1);\n};\n\ntype AddressType = NonNullable<\n\tNonNullable<NonNullable<GetPeopleQuery[\"getPeople\"]>[\"pageData\"]>[number]\n>[\"primaryAddress\"];\nexport const formatAddressSimple = (address?: AddressType): string => {\n\tif (!address) return \"\";\n\n\treturn [address.line1, address.line2, address.line3, address.postcode, address.locality]\n\t\t.filter(Boolean) // Remove undefined or empty fields\n\t\t.join(\", \");\n};\n\nexport function formatDate(date: string | null | undefined, includeTime = false): string {\n\tif (!date) {\n\t\treturn \"-\"; // if no date, return a dash\n\t}\n\n\tconst outputFormat = includeTime ? \"dd MMM yyyy, HH:mm\" : \"dd MMM yyyy\";\n\n\tconst SUPPORTED_DATE_FORMATS = [\"yyyy-MM-dd\", \"dd-MM-yyyy\", \"dd/MM/yyyy\", \"dd MMM yyyy\", \"dd/MM/yy\"];\n\tfor (const format of SUPPORTED_DATE_FORMATS) {\n\t\tconst parsedDate = DateTime.fromFormat(date, format);\n\t\tif (parsedDate.isValid) {\n\t\t\treturn parsedDate.toFormat(outputFormat);\n\t\t}\n\t}\n\tconst ISO_DATE_REGEX = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?$/;\n\tif (ISO_DATE_REGEX.test(date)) {\n\t\tconst parsedDate = DateTime.fromISO(date);\n\t\tif (parsedDate.isValid) {\n\t\t\treturn parsedDate.toFormat(outputFormat);\n\t\t}\n\t}\n\n\treturn date; // returns raw date if no format is matched\n}\n\nexport function truncate(string: string | null | undefined, maxLength: number): string {\n\tif (!string) return \"\";\n\tif (maxLength < 1) return string;\n\tif (string.length <= maxLength + 1) {\n\t\treturn string;\n\t}\n\treturn string.slice(0, maxLength).trim() + \"…\";\n}\n\nexport function truncateMiddle(string: string | null | undefined, maxLength: number): string {\n\tif (!string) return \"\";\n\tif (maxLength < 1) return string;\n\tif (string.length <= maxLength) return string;\n\tif (maxLength == 1) return string.substring(0, 1) + \"…\";\n\n\tconst midpoint = Math.ceil(string.length / 2);\n\tconst toremove = string.length - maxLength;\n\tconst lstrip = Math.ceil(toremove / 2);\n\tconst rstrip = toremove - lstrip;\n\treturn string.substring(0, midpoint - lstrip) + \"…\" + string.substring(midpoint + rstrip);\n}\n\nexport const getCurrencySymbol = (currency: string | null | undefined): string => {\n\treturn getAppContext().CURRENCY_SYMBOLS?.[currency || \"USD\"] || \"$\";\n};\n"],"names":["MaskInput","forwardRef","maskType","showThousandSeparator","allowDecimal","allowNegative","decimalLimit","integerLimit","prefix","sufix","currency","country","dataTest","controlledValue","defaultValue","max","min","onChange","onBlurProp","props","ref","orgData","useOrgStore","state","finalCountry","finalCurrency","currencySymbol","getCurrencySymbol","elementRef","useRef","isControlled","undefined","localeSeparators","useMemo","getLocaleSeparators","locale","parts","Intl","p","e","console","maskitoConfig","shouldAllowDecimal","calculatedDecimalLimit","calculatedSuffix","calculatedPrefix","calculatedIntegerLimit","integerLimitMax","Number","calculatedMax","Math","MAX_DECIMAL_INPUT","calculatedMin","numberParams","plugins","otherOpts","maskitoNumberOptionsGenerator","maskitoOptions","maskitoCaretGuard","value","maskitoEventHandler","element","maskitoUpdateElement","normalizeDisplayValue","useCallback","display","decimal","alternateDecimal","numberToDisplay","num","maskitoStringifyNumber","displayToNumber","parsed","maskitoParseNumber","isNaN","uncontrolledDisplayValue","setUncontrolledDisplayValue","useState","controlledDisplayDraft","setControlledDisplayDraft","wasControlledRef","useLayoutEffect","currentControlledDisplayDraft","displayValue","handleBlur","maskitoRef","useMaskito","setInputRef","node","useImperativeHandle","newDisplayValue","normalizeLeadingIntegerZeros","postfix","decimalSeparator","hasPrefix","Boolean","displayWithoutPrefix","hasPostfix","displayWithoutAffixes","sign","unsignedValue","decimalIndex","integerPart","fractionalPart","newNumericValue","canRoundTrip","dropdownSizes","styles","iconSizes","selectTextSizes","SelectDropdown","React","data","required","placeholder","disabled","onValueChange","className","size","variant","holder","document","cssClasses","clsx","service","useMachine","select","useId","api","normalizeProps","newValue","item","Box","Text","Icon","DynamicIcons","Portal","option","items","cakeStartup","cakeLogo","archive","unarchive","add","arrowBeneficiary","addCircle","alarm","attachment","arrowCircle","arrowsTriangle","arrow","arrowSwitch","arrowSort","cakeStroke","claude","codex","cursor","grok","chartBar","chartLineUp","checkBg","checkmark","checkEmpty","checkChecked","checkmarkCircle","chevron","close","comment","commentActive","copy","deleteIcon","documentAdd","documentAttachment","documentCheckmark","done","doneEggplant","download","edit","editSquare","files","filters","filterStatus","help","headset","info","infoFill","installApp","pieChart","percent","questionCircle","lineChart","listChecks","clipboardText","minusCircle","money","more","move","refresh","search","signatureDraw","signatureDrawActive","signatureSelect","signatureSelectActive","shield","usersAdd","usersCheckmark","pen","penWriting","cakeSealPen","send","menuPeople","menuClock","menuClipboard","filter","date","alertDynamic","alertTriangle","flag","table","tableBig","stackPlus","tagDiscount","settings","calc","calculator","calendar","closeCircle","coins","thumbs","vest","vestStop","pause","resume","copyPaste","creditCard","reset","reminder","offline","caret","time","userCircle","userDashed","handshake","handCoins","presentation","lifeBuoy","play","playCircle","square","graduationCap","grid","scribble","user","userMultiple","userPlus","fileArrowUp","gear","notePencil","starOutline","trendUp","currencyDollar","dollarCircle","listMagnifyingGlass","checkmarkDashedCircle","circleDashed","iconLoader","drag","envelope","envelopeSimple","reply","tag","rocket","downgrade","lock","save","scale","upload","shoppingCart","profileCircular","medal","certificate","RSU","RSA","gift","valuationUpload","warningOctagon","feature","bookOpen","megaphone","split","van","folderFilled","cake","RegExp","capitalizeString","string","getAppContext"],"mappings":"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"}