@portalduct/react-sdk-factorcloud-legacy 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +271 -0
- package/dist/api/connectionSync.d.ts +51 -0
- package/dist/api/factorcloud.d.ts +13 -0
- package/dist/api/portalduct.d.ts +33 -0
- package/dist/components/ClientSelectionModal.d.ts +10 -0
- package/dist/components/ConfigModal.d.ts +10 -0
- package/dist/components/ConnectDebtorModal.d.ts +16 -0
- package/dist/components/InterestSyncModal.d.ts +5 -0
- package/dist/components/PortalIntegration.d.ts +8 -0
- package/dist/components/RequestPortalModal.d.ts +8 -0
- package/dist/components/SyncBanner.d.ts +16 -0
- package/dist/components/SyncProgressModal.d.ts +31 -0
- package/dist/components/SyncWorkflow.d.ts +15 -0
- package/dist/components/UpdateCredentialsModal.d.ts +11 -0
- package/dist/components/ui/accordion.d.ts +7 -0
- package/dist/components/ui/alert-dialog.d.ts +20 -0
- package/dist/components/ui/alert.d.ts +8 -0
- package/dist/components/ui/aspect-ratio.d.ts +3 -0
- package/dist/components/ui/avatar.d.ts +6 -0
- package/dist/components/ui/badge.d.ts +9 -0
- package/dist/components/ui/breadcrumb.d.ts +19 -0
- package/dist/components/ui/button.d.ts +11 -0
- package/dist/components/ui/calendar.d.ts +8 -0
- package/dist/components/ui/card.d.ts +8 -0
- package/dist/components/ui/carousel.d.ts +18 -0
- package/dist/components/ui/chart.d.ts +61 -0
- package/dist/components/ui/checkbox.d.ts +4 -0
- package/dist/components/ui/collapsible.d.ts +5 -0
- package/dist/components/ui/command.d.ts +82 -0
- package/dist/components/ui/context-menu.d.ts +27 -0
- package/dist/components/ui/dialog.d.ts +19 -0
- package/dist/components/ui/drawer.d.ts +22 -0
- package/dist/components/ui/dropdown-menu.d.ts +27 -0
- package/dist/components/ui/form.d.ts +23 -0
- package/dist/components/ui/hover-card.d.ts +6 -0
- package/dist/components/ui/input-otp.d.ts +34 -0
- package/dist/components/ui/input.d.ts +3 -0
- package/dist/components/ui/label.d.ts +5 -0
- package/dist/components/ui/menubar.d.ts +33 -0
- package/dist/components/ui/navigation-menu.d.ts +12 -0
- package/dist/components/ui/pagination.d.ts +28 -0
- package/dist/components/ui/popover.d.ts +6 -0
- package/dist/components/ui/progress.d.ts +4 -0
- package/dist/components/ui/radio-group.d.ts +5 -0
- package/dist/components/ui/resizable.d.ts +23 -0
- package/dist/components/ui/scroll-area.d.ts +5 -0
- package/dist/components/ui/select.d.ts +13 -0
- package/dist/components/ui/separator.d.ts +4 -0
- package/dist/components/ui/sheet.d.ts +25 -0
- package/dist/components/ui/sidebar.d.ts +66 -0
- package/dist/components/ui/skeleton.d.ts +2 -0
- package/dist/components/ui/slider.d.ts +4 -0
- package/dist/components/ui/sonner.d.ts +5 -0
- package/dist/components/ui/switch.d.ts +4 -0
- package/dist/components/ui/table.d.ts +10 -0
- package/dist/components/ui/tabs.d.ts +7 -0
- package/dist/components/ui/textarea.d.ts +5 -0
- package/dist/components/ui/toast.d.ts +15 -0
- package/dist/components/ui/toaster.d.ts +1 -0
- package/dist/components/ui/toggle-group.d.ts +12 -0
- package/dist/components/ui/toggle.d.ts +12 -0
- package/dist/components/ui/tooltip.d.ts +7 -0
- package/dist/components/ui/use-toast.d.ts +3 -0
- package/dist/hooks/use-customer-status.d.ts +15 -0
- package/dist/hooks/use-mobile.d.ts +1 -0
- package/dist/hooks/use-toast.d.ts +44 -0
- package/dist/index.cjs +113 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +6874 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/pages/Index.d.ts +2 -0
- package/dist/pages/NotFound.d.ts +2 -0
- package/dist/placeholder.svg +1 -0
- package/dist/sdk/index.d.ts +66 -0
- package/dist/services/orchestration.d.ts +26 -0
- package/dist/types/config.d.ts +47 -0
- package/dist/types/factorcloud.d.ts +98 -0
- package/dist/types/merged.d.ts +16 -0
- package/dist/types/portalduct.d.ts +139 -0
- package/package.json +122 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/class-variance-authority/dist/index.mjs","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts","../src/components/ui/button.tsx","../src/hooks/use-toast.ts","../src/types/config.ts","../src/api/factorcloud.ts","../src/api/portalduct.ts","../src/api/connectionSync.ts","../src/services/orchestration.ts","../src/components/ui/dialog.tsx","../node_modules/whatwg-fetch/fetch.js","../node_modules/@formspark/use-formspark/dist/use-formspark.esm.js","../src/components/InterestSyncModal.tsx","../src/components/ui/input.tsx","../src/components/ui/label.tsx","../src/components/UpdateCredentialsModal.tsx","../src/components/ui/alert-dialog.tsx","../src/components/ui/tabs.tsx","../src/components/ui/separator.tsx","../src/components/SyncProgressModal.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/badge.tsx","../src/components/ConnectDebtorModal.tsx","../src/components/RequestPortalModal.tsx","../src/hooks/use-customer-status.ts","../src/components/SyncWorkflow.tsx","../src/components/PortalIntegration.tsx","../src/components/SyncBanner.tsx","../src/components/ui/alert.tsx","../src/components/ConfigModal.tsx","../src/components/ui/card.tsx","../src/components/ClientSelectionModal.tsx","../src/sdk/index.ts"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryWeight = value => getIsArbitraryValue(value, isLabelWeight, isAny);\nconst isArbitraryFamilyName = value => getIsArbitraryValue(value, isLabelFamilyName, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\nconst isArbitraryVariableWeight = value => getIsArbitraryVariable(value, isLabelWeight, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelWeight = label => label === 'number' || label === 'weight';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingInline = () => [isFraction, 'screen', 'full', 'dvw', 'lvw', 'svw', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingBlock = () => [isFraction, 'screen', 'full', 'lh', 'dvh', 'lvh', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [{\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset()\n }],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [{\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset()\n }],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{\n 'inset-bs': scaleInset()\n }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{\n 'inset-be': scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{\n pbs: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{\n pbe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{\n mbs: scaleMargin()\n }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{\n mbe: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{\n inline: ['auto', ...scaleSizingInline()]\n }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{\n 'min-inline': ['auto', ...scaleSizingInline()]\n }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{\n 'max-inline': ['none', ...scaleSizingInline()]\n }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{\n block: ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{\n 'min-block': ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{\n 'max-block': ['none', ...scaleSizingBlock()]\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]\n }],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{\n 'font-features': [isArbitraryValue]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{\n 'border-bs': scaleBorderWidth()\n }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{\n 'border-be': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{\n 'border-bs': scaleColor()\n }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{\n 'border-be': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{\n 'scroll-mbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{\n 'scroll-mbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{\n 'scroll-pbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{\n 'scroll-pbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'inset-bs', 'inset-be', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-bs', 'border-w-be', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-bs', 'border-color-be', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\nexport function formatLastSync(lastSync: string | null | undefined): string {\n if (!lastSync) return \"Never\";\n \n const date = new Date(lastSync);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n \n if (diffMins < 1) return \"Just now\";\n if (diffMins < 60) return `${diffMins} minute${diffMins > 1 ? 's' : ''} ago`;\n if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;\n if (diffDays < 7) return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;\n \n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });\n}\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n factorcloud: \"bg-factorcloud-primary text-factorcloud-primary-foreground hover:bg-factorcloud-primary/90\",\n success: \"bg-factorcloud-success text-factorcloud-success-foreground hover:bg-factorcloud-success/90\",\n tab: \"bg-transparent border-b-2 border-transparent hover:bg-muted/50 data-[state=active]:border-factorcloud-primary data-[state=active]:bg-background data-[state=active]:shadow-sm rounded-b-none\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n tab: \"h-12 px-6 rounded-t-lg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\n\nimport type {\n ToastActionElement,\n ToastProps,\n} from \"@/components/ui/toast\"\n\nconst TOAST_LIMIT = 1\nconst TOAST_REMOVE_DELAY = 1000000\n\ntype ToasterToast = ToastProps & {\n id: string\n title?: React.ReactNode\n description?: React.ReactNode\n action?: ToastActionElement\n}\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const\n\nlet count = 0\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER\n return count.toString()\n}\n\ntype ActionType = typeof actionTypes\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"]\n toast: ToasterToast\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"]\n toast: Partial<ToasterToast>\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"]\n toastId?: ToasterToast[\"id\"]\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"]\n toastId?: ToasterToast[\"id\"]\n }\n\ninterface State {\n toasts: ToasterToast[]\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>()\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId)\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n })\n }, TOAST_REMOVE_DELAY)\n\n toastTimeouts.set(toastId, timeout)\n}\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n }\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n }\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId)\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id)\n })\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t\n ),\n }\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n }\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n }\n }\n}\n\nconst listeners: Array<(state: State) => void> = []\n\nlet memoryState: State = { toasts: [] }\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action)\n listeners.forEach((listener) => {\n listener(memoryState)\n })\n}\n\ntype Toast = Omit<ToasterToast, \"id\">\n\nfunction toast({ ...props }: Toast) {\n const id = genId()\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n })\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id })\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss()\n },\n },\n })\n\n return {\n id: id,\n dismiss,\n update,\n }\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState)\n\n React.useEffect(() => {\n listeners.push(setState)\n return () => {\n const index = listeners.indexOf(setState)\n if (index > -1) {\n listeners.splice(index, 1)\n }\n }\n }, [state])\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n }\n}\n\nexport { useToast, toast }\n","export interface SDKConfig {\n // PortalDuct Configuration\n portalduct: {\n bearer_token: string;\n env_url: string; // e.g., \"https://sandbox.portalduct.com\"\n customer_id: string;\n /**\n * Dedicated bearer token used exclusively for Supabase webhook calls.\n */\n webhook_bearer_token?: string;\n /**\n * Deployment environment identifier used by webhook integrations.\n * Defaults to \"sandbox\" when the PortalDuct environment URL contains\n * \"sandbox\" and \"production\" otherwise.\n */\n environment?: string;\n /**\n * Optional override for the webhook endpoint used to trigger connection syncs.\n */\n sync_webhook_url?: string;\n /**\n * Optional override for the webhook endpoint used to trigger connection verification.\n */\n verify_webhook_url?: string;\n };\n \n // FactorCloud Configuration\n factorcloud: {\n bearer_token: string;\n factorId: string;\n env_url: string; // e.g., \"https://api.int.factorcloud.com\"\n client_id?: string; // Optional - if not provided, user selects from list\n };\n}\n\nexport interface CustomerStatusPayload {\n active: boolean;\n customer?: {\n portalduct_customer_uuid?: string | null;\n } | null;\n factorcloud?: {\n bearer_token?: string | null;\n api_url?: string | null;\n } | null;\n portalduct?: {\n bearer_token?: string | null;\n api_url?: string | null;\n } | null;\n}\n\nconst deriveEnvironmentFromUrl = (url?: string): string | undefined => {\n if (!url) {\n return undefined;\n }\n\n return url.toLowerCase().includes(\"sandbox\") ? \"sandbox\" : \"production\";\n};\n\nexport const isConfigComplete = (config: Partial<SDKConfig> | null): config is SDKConfig => {\n if (!config) return false;\n\n return !!(\n config.portalduct?.bearer_token &&\n config.portalduct?.env_url &&\n config.portalduct?.customer_id &&\n config.factorcloud?.bearer_token &&\n config.factorcloud?.factorId &&\n config.factorcloud?.env_url\n );\n};\n\nexport const mergeCustomerStatusWithConfig = (\n config: Partial<SDKConfig> | null | undefined,\n status: CustomerStatusPayload\n): SDKConfig | null => {\n if (!config?.factorcloud?.factorId) {\n return null;\n }\n\n const portalductApiUrl =\n status.portalduct?.api_url ?? config.portalduct?.env_url ?? \"\";\n const portalductEnvironment =\n config.portalduct?.environment ?? deriveEnvironmentFromUrl(portalductApiUrl);\n\n return {\n portalduct: {\n bearer_token:\n status.portalduct?.bearer_token ?? config.portalduct?.bearer_token ?? \"\",\n env_url: portalductApiUrl,\n customer_id:\n status.customer?.portalduct_customer_uuid ??\n config.portalduct?.customer_id ??\n \"\",\n webhook_bearer_token: config.portalduct?.webhook_bearer_token,\n environment: portalductEnvironment,\n sync_webhook_url: config.portalduct?.sync_webhook_url,\n verify_webhook_url: config.portalduct?.verify_webhook_url,\n },\n factorcloud: {\n bearer_token:\n status.factorcloud?.bearer_token ?? config.factorcloud?.bearer_token ?? \"\",\n factorId: config.factorcloud.factorId,\n env_url:\n status.factorcloud?.api_url ?? config.factorcloud?.env_url ?? \"\",\n client_id: config.factorcloud?.client_id,\n },\n };\n};\n","import {\n FactorCloudClient,\n FactorCloudClientDetail,\n FactorCloudClientsResponse,\n FactorCloudClientDetailResponse,\n FactorCloudDebtor,\n FactorCloudDebtorsResponse,\n} from \"@/types/factorcloud\";\n\nexport class FactorCloudAPI {\n private baseUrl: string;\n private factorId: string;\n private token: string;\n\n constructor(baseUrl: string, factorId: string, bearerToken: string) {\n this.baseUrl = baseUrl;\n this.factorId = factorId;\n this.token = bearerToken;\n }\n\n async getClients(limit = 100, page = 0): Promise<FactorCloudClient[]> {\n if (!this.token) {\n throw new Error(\"No bearer token provided.\");\n }\n\n const response = await fetch(\n `${this.baseUrl}/companies?active=true&type=client`,\n {\n method: \"GET\",\n headers: {\n \"Authorization\": `Bearer ${this.token}`,\n \"X-PAGINATION-LIMIT\": limit.toString(),\n \"X-PAGINATION-NUM\": page.toString(),\n \"accept\": \"application/json\",\n \"factorId\": this.factorId,\n },\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch clients: ${response.statusText}`);\n }\n\n const data: FactorCloudClientsResponse = await response.json();\n return data.companies;\n }\n\n async getClientById(clientId: string): Promise<FactorCloudClientDetail> {\n if (!this.token) {\n throw new Error(\"No bearer token provided.\");\n }\n\n const response = await fetch(`${this.baseUrl}/clients/${clientId}`, {\n method: \"GET\",\n headers: {\n \"Authorization\": `Bearer ${this.token}`,\n \"accept\": \"application/json\",\n \"factorId\": this.factorId,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch client details: ${response.statusText}`);\n }\n\n const data: FactorCloudClientDetailResponse = await response.json();\n return data.client;\n }\n\n async getDebtors(clientId: string, limit = 100, page = 0): Promise<FactorCloudDebtor[]> {\n if (!this.token) {\n throw new Error(\"No bearer token provided.\");\n }\n\n const response = await fetch(\n `${this.baseUrl}/clients/${clientId}/debtors`,\n {\n method: \"GET\",\n headers: {\n \"Authorization\": `Bearer ${this.token}`,\n \"X-PAGINATION-LIMIT\": limit.toString(),\n \"X-PAGINATION-NUM\": page.toString(),\n \"accept\": \"application/json\",\n \"factorId\": this.factorId,\n },\n }\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch debtors: ${response.statusText}`);\n }\n\n const data: FactorCloudDebtorsResponse = await response.json();\n return data.clientDebtors;\n }\n\n setToken(token: string) {\n this.token = token;\n }\n\n getToken(): string {\n return this.token;\n }\n}\n","import {\n PortalDuctCompany,\n PortalDuctCompaniesResponse,\n PortalDuctCompanyResponse,\n PortalDuctConnection,\n PortalDuctConnectionsResponse,\n PortalDuctConnectionResponse,\n CreateCompanyRequest,\n CreateConnectionRequest,\n UpdateConnectionRequest,\n ActivationRequest,\n PortalMapping,\n PortalMappingsResponse,\n PortalMappingResponse,\n CreatePortalMappingRequest,\n} from \"@/types/portalduct\";\n\nexport class PortalDuctAPIError extends Error {\n status: number;\n code?: string;\n type?: string;\n requestId?: string;\n\n constructor({\n message,\n status,\n code,\n type,\n requestId,\n }: {\n message: string;\n status: number;\n code?: string;\n type?: string;\n requestId?: string;\n }) {\n super(message);\n this.name = \"PortalDuctAPIError\";\n this.status = status;\n this.code = code;\n this.type = type;\n this.requestId = requestId;\n }\n}\n\nexport class PortalDuctAPI {\n private baseUrl: string;\n private token: string;\n\n constructor(\n baseUrl: string,\n bearerToken: string\n ) {\n this.baseUrl = baseUrl;\n this.token = bearerToken;\n }\n\n private async buildError(\n response: Response,\n fallbackMessage: string\n ): Promise<PortalDuctAPIError> {\n let message = fallbackMessage;\n let code: string | undefined;\n let type: string | undefined;\n let requestId: string | undefined;\n\n try {\n const body = await response.json();\n if (body && typeof body === \"object\") {\n message =\n (\"error_message\" in body && typeof body.error_message === \"string\"\n ? body.error_message\n : undefined) ??\n (\"message\" in body && typeof body.message === \"string\"\n ? body.message\n : undefined) ??\n message;\n code =\n (\"error_code\" in body && typeof body.error_code === \"string\"\n ? body.error_code\n : undefined) ??\n (\"code\" in body && typeof body.code === \"string\"\n ? body.code\n : undefined) ??\n code;\n type =\n (\"error_type\" in body && typeof body.error_type === \"string\"\n ? body.error_type\n : undefined) ??\n (\"type\" in body && typeof body.type === \"string\"\n ? body.type\n : undefined) ??\n type;\n requestId =\n (\"request_id\" in body && typeof body.request_id === \"string\"\n ? body.request_id\n : undefined) ??\n (\"requestId\" in body && typeof body.requestId === \"string\"\n ? body.requestId\n : undefined) ??\n requestId;\n }\n } catch (error) {\n console.debug(\"Failed to parse PortalDuct error response\", error);\n }\n\n return new PortalDuctAPIError({\n message,\n status: response.status,\n code,\n type,\n requestId,\n });\n }\n\n async getCompanies(customerId: string): Promise<PortalDuctCompany[]> {\n if (!this.token) {\n throw new Error(\"No bearer token provided.\");\n }\n\n const filter = encodeURIComponent(`customer_id eq ${customerId}`);\n const response = await fetch(`${this.baseUrl}/v2/companies?filter=${filter}`, {\n method: \"GET\",\n headers: {\n \"accept\": \"application/json\",\n \"authorization\": `Bearer ${this.token}`,\n },\n });\n\n if (!response.ok) {\n throw await this.buildError(response, \"Failed to fetch companies\");\n }\n\n const data: PortalDuctCompaniesResponse = await response.json();\n return data.data;\n }\n\n async createCompany(request: CreateCompanyRequest): Promise<PortalDuctCompany> {\n if (!this.token) {\n throw new Error(\"No bearer token provided.\");\n }\n\n const response = await fetch(`${this.baseUrl}/v2/companies`, {\n method: \"POST\",\n headers: {\n \"accept\": \"application/json\",\n \"authorization\": `Bearer ${this.token}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw await this.buildError(response, \"Failed to create company\");\n }\n\n const data: PortalDuctCompanyResponse = await response.json();\n return data.data;\n }\n\n async getConnections(companyId: string): Promise<PortalDuctConnection[]> {\n if (!this.token) {\n throw new Error(\"No bearer token provided.\");\n }\n\n const filter = encodeURIComponent(`company.company_id eq '${companyId}'`);\n const response = await fetch(`${this.baseUrl}/v2/connections?filter=${filter}`, {\n method: \"GET\",\n headers: {\n \"accept\": \"application/json\",\n \"authorization\": `Bearer ${this.token}`,\n },\n });\n\n if (!response.ok) {\n throw await this.buildError(response, \"Failed to fetch connections\");\n }\n\n const data: PortalDuctConnectionsResponse = await response.json();\n return data.data;\n }\n\n async createConnection(request: CreateConnectionRequest): Promise<PortalDuctConnection> {\n if (!this.token) {\n throw new Error(\"No bearer token provided.\");\n }\n\n const response = await fetch(`${this.baseUrl}/v2/connections`, {\n method: \"POST\",\n headers: {\n \"accept\": \"application/json\",\n \"authorization\": `Bearer ${this.token}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw await this.buildError(response, \"Failed to create connection\");\n }\n\n const data: PortalDuctConnectionResponse = await response.json();\n return data.data;\n }\n\n async updateConnection(\n connectionId: string,\n request: UpdateConnectionRequest\n ): Promise<PortalDuctConnection> {\n if (!this.token) {\n throw new Error(\"No bearer token provided.\");\n }\n\n const response = await fetch(`${this.baseUrl}/v2/connections/${connectionId}`, {\n method: \"PATCH\",\n headers: {\n \"accept\": \"application/json\",\n \"authorization\": `Bearer ${this.token}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw await this.buildError(response, \"Failed to update connection\");\n }\n\n const data: PortalDuctConnectionResponse = await response.json();\n return data.data;\n }\n\n async activateConnection(connectionId: string): Promise<PortalDuctConnection> {\n return this.updateActivationStatus(connectionId, \"activate\");\n }\n\n async deactivateConnection(connectionId: string): Promise<PortalDuctConnection> {\n return this.updateActivationStatus(connectionId, \"deactivate\");\n }\n\n private async updateActivationStatus(\n connectionId: string,\n status: \"activate\" | \"deactivate\"\n ): Promise<PortalDuctConnection> {\n if (!this.token) {\n throw new Error(\"No bearer token provided.\");\n }\n\n const request: ActivationRequest = { activation_status: status };\n const response = await fetch(\n `${this.baseUrl}/v2/connections/${connectionId}/activation`,\n {\n method: \"POST\",\n headers: {\n \"accept\": \"application/json\",\n \"authorization\": `Bearer ${this.token}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(request),\n }\n );\n\n if (!response.ok) {\n throw await this.buildError(\n response,\n `Failed to ${status} connection`\n );\n }\n\n const data: PortalDuctConnectionResponse = await response.json();\n return data.data;\n }\n\n setToken(token: string) {\n this.token = token;\n }\n\n getToken(): string {\n return this.token;\n }\n\n async getPortalMappings(): Promise<PortalMapping[]> {\n if (!this.token) {\n throw new Error(\"No bearer token provided.\");\n }\n\n const response = await fetch(`${this.baseUrl}/v2/portal_mappings`, {\n method: \"GET\",\n headers: {\n \"accept\": \"application/json\",\n \"authorization\": `Bearer ${this.token}`,\n },\n });\n\n if (!response.ok) {\n throw await this.buildError(response, \"Failed to fetch portal mappings\");\n }\n\n const data: PortalMappingsResponse = await response.json();\n return data.data;\n }\n\n async createPortalMapping(request: CreatePortalMappingRequest): Promise<PortalMapping> {\n if (!this.token) {\n throw new Error(\"No bearer token provided.\");\n }\n\n const response = await fetch(`${this.baseUrl}/v2/portal_mappings`, {\n method: \"POST\",\n headers: {\n \"accept\": \"application/json\",\n \"authorization\": `Bearer ${this.token}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw await this.buildError(response, \"Failed to create portal mapping\");\n }\n\n const data: PortalMappingResponse = await response.json();\n return data.data;\n }\n}\n","import { CustomerStatusPayload } from \"@/types/config\";\nimport { ResyncResponse } from \"@/types/portalduct\";\n\nconst DEFAULT_SYNC_WEBHOOK_URL =\n \"https://khzfuhxnbjlyjvdvxdeg.supabase.co/functions/v1/webhook-sync-connection\";\nconst DEFAULT_VERIFY_WEBHOOK_URL =\n \"https://khzfuhxnbjlyjvdvxdeg.supabase.co/functions/v1/webhook-verify-connection\";\nconst DEFAULT_CUSTOMER_STATUS_WEBHOOK_URL =\n \"https://khzfuhxnbjlyjvdvxdeg.supabase.co/functions/v1/check-customer-status\";\n\ntype Environment = \"sandbox\" | \"production\" | string;\n\ninterface ConnectionSyncOptions {\n webhookToken?: string;\n customerId?: string;\n /**\n * Optional override for the sync webhook URL. Defaults to the Supabase function.\n */\n webhookUrl?: string;\n /**\n * Optional override for the verification webhook URL. Defaults to the Supabase function.\n */\n verifyWebhookUrl?: string;\n /**\n * Explicit environment identifier to send to the webhook.\n */\n environment?: Environment;\n /**\n * PortalDuct environment URL, used for automatic environment detection when\n * an explicit environment value isn't provided.\n */\n portalductBaseUrl?: string;\n /**\n * Optional override for the customer status webhook URL. Defaults to the Supabase function.\n */\n customerStatusUrl?: string;\n}\n\nexport class ConnectionSyncAPI {\n private syncWebhookUrl: string;\n private verifyWebhookUrl: string;\n private webhookToken?: string;\n private customerId?: string;\n private environment: Environment;\n private customerStatusUrl: string;\n\n constructor({\n webhookToken,\n customerId,\n webhookUrl = DEFAULT_SYNC_WEBHOOK_URL,\n verifyWebhookUrl = DEFAULT_VERIFY_WEBHOOK_URL,\n environment,\n portalductBaseUrl,\n customerStatusUrl = DEFAULT_CUSTOMER_STATUS_WEBHOOK_URL,\n }: ConnectionSyncOptions) {\n this.syncWebhookUrl = webhookUrl;\n this.verifyWebhookUrl = verifyWebhookUrl;\n this.webhookToken = webhookToken;\n this.customerId = customerId;\n this.environment =\n environment ?? this.deriveEnvironmentFromBaseUrl(portalductBaseUrl);\n this.customerStatusUrl = customerStatusUrl;\n }\n\n setWebhookToken(token: string) {\n this.webhookToken = token;\n }\n\n setCustomerId(customerId: string) {\n this.customerId = customerId;\n }\n\n setEnvironment(environment: Environment) {\n this.environment = environment;\n }\n\n setWebhookUrl(webhookUrl: string) {\n this.syncWebhookUrl = webhookUrl;\n }\n\n setVerifyWebhookUrl(webhookUrl: string) {\n this.verifyWebhookUrl = webhookUrl;\n }\n\n setCustomerStatusUrl(webhookUrl: string) {\n this.customerStatusUrl = webhookUrl;\n }\n\n async triggerConnectionSync(connectionId: string): Promise<ResyncResponse> {\n return this.callWebhook(this.syncWebhookUrl, connectionId, \"Resync\");\n }\n\n async triggerConnectionVerification(\n connectionId: string\n ): Promise<ResyncResponse> {\n return this.callWebhook(\n this.verifyWebhookUrl,\n connectionId,\n \"Verification\"\n );\n }\n\n private async callWebhook(\n url: string,\n connectionId: string,\n operationLabel: string\n ): Promise<ResyncResponse> {\n if (!this.customerId) {\n throw new Error(\n `No PortalDuct customer ID provided for ${operationLabel.toLowerCase()} webhook.`\n );\n }\n\n if (!this.webhookToken) {\n throw new Error(\n `No webhook bearer token provided for ${operationLabel.toLowerCase()} webhook.`\n );\n }\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n authorization: `Bearer ${this.webhookToken}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n portalductCustomerId: this.customerId,\n connectionId,\n environment: this.environment,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `${operationLabel} failed: ${response.status} ${errorText}`\n );\n }\n\n const data: ResyncResponse = await response.json();\n return data;\n }\n\n private deriveEnvironmentFromBaseUrl(baseUrl?: string): Environment {\n if (!baseUrl) {\n return \"production\";\n }\n\n return baseUrl.toLowerCase().includes(\"sandbox\") ? \"sandbox\" : \"production\";\n }\n\n async fetchCustomerStatus(factorId: string): Promise<CustomerStatusPayload> {\n if (!this.webhookToken) {\n throw new Error(\n \"No webhook bearer token provided for customer status webhook.\"\n );\n }\n\n const response = await fetch(this.customerStatusUrl, {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n authorization: `Bearer ${this.webhookToken}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n factorId,\n environment: this.environment,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `Customer status check failed: ${response.status} ${errorText}`\n );\n }\n\n const data = (await response.json()) as CustomerStatusPayload;\n if (typeof data.active !== \"boolean\") {\n throw new Error(\"Customer status webhook returned an invalid response.\");\n }\n\n return data;\n }\n\n async isCustomerActive(factorId: string): Promise<boolean> {\n const status = await this.fetchCustomerStatus(factorId);\n return status.active;\n }\n}\n","import { FactorCloudAPI } from \"@/api/factorcloud\";\nimport { PortalDuctAPI } from \"@/api/portalduct\";\nimport { ConnectionSyncAPI } from \"@/api/connectionSync\";\nimport { SDKConfig } from \"@/types/config\";\nimport { FactorCloudClient, FactorCloudClientDetail, FactorCloudDebtor } from \"@/types/factorcloud\";\nimport { PortalDuctCompany, PortalDuctConnection, ResyncResponse } from \"@/types/portalduct\";\nimport { MergedDebtor } from \"@/types/merged\";\n\nexport class DataOrchestrationService {\n private factorcloudAPI: FactorCloudAPI;\n private portalductAPI: PortalDuctAPI;\n private connectionSyncAPI: ConnectionSyncAPI;\n private config: SDKConfig;\n\n constructor(config: SDKConfig) {\n this.config = config;\n this.factorcloudAPI = new FactorCloudAPI(\n config.factorcloud.env_url,\n config.factorcloud.factorId,\n config.factorcloud.bearer_token\n );\n this.portalductAPI = new PortalDuctAPI(\n config.portalduct.env_url,\n config.portalduct.bearer_token\n );\n this.connectionSyncAPI = new ConnectionSyncAPI({\n webhookToken: config.portalduct.webhook_bearer_token,\n customerId: config.portalduct.customer_id,\n environment: config.portalduct.environment,\n webhookUrl: config.portalduct.sync_webhook_url,\n verifyWebhookUrl: config.portalduct.verify_webhook_url,\n portalductBaseUrl: config.portalduct.env_url,\n });\n }\n\n async getFactorCloudClients(): Promise<FactorCloudClient[]> {\n return this.factorcloudAPI.getClients();\n }\n\n async getFactorCloudClient(clientId?: string): Promise<FactorCloudClient> {\n if (clientId) {\n const clientDetail = await this.factorcloudAPI.getClientById(clientId);\n return clientDetail as FactorCloudClient;\n }\n\n const clients = await this.factorcloudAPI.getClients();\n if (clients.length === 0) {\n throw new Error(\"No FactorCloud clients found\");\n }\n\n return clients[0];\n }\n\n async ensurePortalDuctCompany(\n fcClient: FactorCloudClient | FactorCloudClientDetail\n ): Promise<PortalDuctCompany> {\n const companies = await this.portalductAPI.getCompanies(\n this.config.portalduct.customer_id\n );\n\n const existingCompany = companies.find(\n (company) => company.tags.factorcloud_id === fcClient.id\n );\n\n if (existingCompany) {\n return existingCompany;\n }\n\n const clientDetail = await this.factorcloudAPI.getClientById(fcClient.id);\n\n const newCompany = await this.portalductAPI.createCompany({\n name: clientDetail.companyName,\n email: clientDetail.email,\n customer_id: this.config.portalduct.customer_id,\n tags: {\n factorcloud_id: clientDetail.id,\n },\n });\n\n return newCompany;\n }\n\n async fetchMergedDebtors(\n fcClientId: string,\n pdCompanyId: string\n ): Promise<MergedDebtor[]> {\n const [debtors, connections] = await Promise.all([\n this.factorcloudAPI.getDebtors(fcClientId),\n this.portalductAPI.getConnections(pdCompanyId),\n ]);\n\n return this.matchConnectionsToDebtors(debtors, connections);\n }\n\n private matchConnectionsToDebtors(\n debtors: FactorCloudDebtor[],\n connections: PortalDuctConnection[]\n ): MergedDebtor[] {\n return debtors.map((debtor) => {\n const connection = connections.find(\n (conn) => conn.tags.factorcloud_debtor_id === debtor.companyDebtorId\n );\n\n let status: MergedDebtor[\"status\"] = \"not_connected\";\n if (connection) {\n if (connection.activation_status === \"deactivated\") {\n status = \"deactivated\";\n } else if (connection.activation_status === \"pending\") {\n status = \"pending\";\n } else {\n status = \"connected\";\n }\n }\n\n return {\n factorcloudDebtorId: debtor.companyDebtorId,\n factorcloudClientId: debtor.companyClientId,\n debtorName: debtor.companyDebtorName,\n creditLimit: debtor.creditLimit,\n termName: debtor.termName,\n connection,\n status,\n portalName: connection?.portal_name || undefined,\n lastSync: connection?.last_sync || undefined,\n autoSyncEnabled: connection?.auto_sync_status === \"enabled\",\n lastSyncSummary: undefined,\n };\n });\n }\n\n getFactorCloudAPI(): FactorCloudAPI {\n return this.factorcloudAPI;\n }\n\n getPortalDuctAPI(): PortalDuctAPI {\n return this.portalductAPI;\n }\n\n getConnectionSyncAPI(): ConnectionSyncAPI {\n return this.connectionSyncAPI;\n }\n\n async isCustomerActive(): Promise<boolean> {\n return this.connectionSyncAPI.isCustomerActive(\n this.config.factorcloud.factorId\n );\n }\n\n async triggerConnectionSync(connectionId: string): Promise<ResyncResponse> {\n return this.connectionSyncAPI.triggerConnectionSync(connectionId);\n }\n\n async triggerConnectionVerification(\n connectionId: string\n ): Promise<ResyncResponse> {\n return this.connectionSyncAPI.triggerConnectionVerification(connectionId);\n }\n}\n","import * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","/* eslint-disable no-prototype-builtins */\nvar g =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n // eslint-disable-next-line no-undef\n (typeof global !== 'undefined' && global) ||\n {}\n\nvar support = {\n searchParams: 'URLSearchParams' in g,\n iterable: 'Symbol' in g && 'iterator' in Symbol,\n blob:\n 'FileReader' in g &&\n 'Blob' in g &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in g,\n arrayBuffer: 'ArrayBuffer' in g\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nexport function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n if (header.length != 2) {\n throw new TypeError('Headers constructor: expected name/value pair to be length 2, found' + header.length)\n }\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body._noBody) return\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n var match = /charset=([A-Za-z0-9_-]+)/.exec(blob.type)\n var encoding = match ? match[1] : 'utf-8'\n reader.readAsText(blob, encoding)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n // eslint-disable-next-line no-self-assign\n this.bodyUsed = this.bodyUsed\n this._bodyInit = body\n if (!body) {\n this._noBody = true;\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this)\n if (isConsumed) {\n return isConsumed\n } else if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else if (support.blob) {\n return this.blob().then(readBlobAsArrayBuffer)\n } else {\n throw new Error('could not read as ArrayBuffer')\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal || (function () {\n if ('AbortController' in g) {\n var ctrl = new AbortController();\n return ctrl.signal;\n }\n }());\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime())\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime()\n }\n }\n }\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function(header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n try {\n headers.append(key, value)\n } catch (error) {\n console.warn('Response ' + error.message)\n }\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n if (this.status < 200 || this.status > 599) {\n throw new RangeError(\"Failed to construct 'Response': The status provided (0) is outside the range [200, 599].\")\n }\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 200, statusText: ''})\n response.ok = false\n response.status = 0\n response.type = 'error'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = g.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n // This check if specifically for when a user fetches a file locally from the file system\n // Only if the status is out of a normal range\n if (request.url.indexOf('file://') === 0 && (xhr.status < 200 || xhr.status > 599)) {\n options.status = 200;\n } else {\n options.status = xhr.status;\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n setTimeout(function() {\n resolve(new Response(body, options))\n }, 0)\n }\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'))\n }, 0)\n }\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request timed out'))\n }, 0)\n }\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new DOMException('Aborted', 'AbortError'))\n }, 0)\n }\n\n function fixUrl(url) {\n try {\n return url === '' && g.location.href ? g.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob'\n } else if (\n support.arrayBuffer\n ) {\n xhr.responseType = 'arraybuffer'\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers || (g.Headers && init.headers instanceof g.Headers))) {\n var names = [];\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n names.push(normalizeName(name))\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n })\n request.headers.forEach(function(value, name) {\n if (names.indexOf(name) === -1) {\n xhr.setRequestHeader(name, value)\n }\n })\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n}\n\nfetch.polyfill = true\n\nif (!g.fetch) {\n g.fetch = fetch\n g.Headers = Headers\n g.Request = Request\n g.Response = Response\n}\n","import 'whatwg-fetch';\nimport { useState } from 'react';\n\nvar BASE_URL = 'https://submit-form.com';\nvar useFormspark = function useFormspark(args) {\n var _useState = useState(false),\n submitting = _useState[0],\n setSubmitting = _useState[1];\n var submit = function submit(payload) {\n return new Promise(function (resolve, reject) {\n var url = BASE_URL + \"/\" + args.formId;\n var method = 'POST';\n var headers = {\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n };\n var body = JSON.stringify(payload);\n setSubmitting(true);\n fetch(url, {\n method: method,\n headers: headers,\n body: body\n }).then(function (response) {\n return response.json();\n }).then(function (json) {\n resolve(json);\n })[\"catch\"](function (error) {\n reject(error);\n })[\"finally\"](function () {\n setSubmitting(false);\n });\n });\n };\n return [submit, submitting];\n};\n\nexport { useFormspark };\n//# sourceMappingURL=use-formspark.esm.js.map\n","import { useState } from \"react\";\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { CheckCircle2 } from \"lucide-react\";\nimport { useFormspark } from \"@formspark/use-formspark\";\n\nexport interface InterestSyncModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nconst FORMSPARK_FORM_ID = \"wXZIqo61i\";\n\nexport function InterestSyncModal({ open, onOpenChange }: InterestSyncModalProps) {\n const [submit, submitting] = useFormspark({ formId: FORMSPARK_FORM_ID });\n\n const [name, setName] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [company, setCompany] = useState(\"\");\n\n const [submitted, setSubmitted] = useState(false);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n await submit({ name, email, company });\n setSubmitted(true);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-4xl p-0 overflow-hidden\">\n <DialogHeader className=\"sr-only\">\n <DialogTitle>Register your interest</DialogTitle>\n <DialogDescription>Submit your details for invoice syncing.</DialogDescription>\n </DialogHeader>\n\n <div className=\"flex flex-col md:flex-row h-full\">\n\n {/* LEFT SIDE (matching SyncProgressModal, minus support box) */}\n <aside className=\"w-full md:w-1/2 bg-black text-white p-8 flex flex-col justify-center space-y-10 relative overflow-hidden\">\n\n <div className=\"space-y-3\">\n <h2 className=\"text-3xl font-bold leading-snug tracking-tight\">\n Connect & Sync your Invoices\n </h2>\n <p className=\"text-base text-white/90 leading-relaxed max-w-sm\">\n Connect your debtor portals once and we’ll sync your invoices automatically\n </p>\n </div>\n\n <ul className=\"space-y-5 text-sm\">\n {[\n \"Connect once, stay synced forever. No more uploads.\",\n \"Work smarter, not harder. Automate the boring stuff and focus on what moves the needle.\",\n \"Always up to date. Every debtor portal, every invoice — perfectly in sync.\"\n ].map((text, idx) => (\n <li key={idx} className=\"flex items-start gap-3\">\n <CheckCircle2 className=\"mt-0.5 h-5 w-5 text-emerald-300 flex-shrink-0\" />\n <span className=\"leading-relaxed\">{text}</span>\n </li>\n ))}\n </ul>\n </aside>\n\n {/* RIGHT SIDE — Form */}\n <div className=\"w-full md:w-1/2 p-8 bg-white\">\n {!submitted ? (\n <>\n <h3 className=\"text-lg font-semibold mb-2\">Register your interest</h3>\n\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div>\n <label className=\"text-sm font-medium\">Name</label>\n <input\n required\n type=\"text\"\n className=\"w-full border p-2 rounded mt-1\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n />\n </div>\n\n <div>\n <label className=\"text-sm font-medium\">Email</label>\n <input\n required\n type=\"email\"\n className=\"w-full border p-2 rounded mt-1\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n />\n </div>\n\n <div>\n <label className=\"text-sm font-medium\">Company Name</label>\n <input\n required\n type=\"text\"\n className=\"w-full border p-2 rounded mt-1\"\n value={company}\n onChange={(e) => setCompany(e.target.value)}\n />\n </div>\n\n <Button type=\"submit\" className=\"w-full\" disabled={submitting}>\n {submitting ? \"Submitting…\" : \"Register interest\"}\n </Button>\n </form>\n </>\n ) : (\n <div className=\"text-center py-12\">\n <h3 className=\"text-xl font-semibold mb-3\">Thank you!</h3>\n <p className=\"text-gray-600\">\n We've received your interest. Our team will be in touch in the coming days.\n </p>\n <Button className=\"mt-6\" onClick={() => onOpenChange(false)}>\n Close\n </Button>\n </div>\n )}\n </div>\n\n </div>\n </DialogContent>\n </Dialog>\n );\n}","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { useState } from \"react\";\nimport { MergedDebtor } from \"@/types/merged\";\n\ninterface UpdateCredentialsModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n debtor: MergedDebtor | null;\n onUpdate: (username: string, password: string) => void;\n loading?: boolean;\n}\n\nexport function UpdateCredentialsModal({\n open,\n onOpenChange,\n debtor,\n onUpdate,\n loading = false,\n}: UpdateCredentialsModalProps) {\n const [username, setUsername] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n\n const handleSubmit = () => {\n if (username.trim() || password.trim()) {\n onUpdate(username, password);\n setUsername(\"\");\n setPassword(\"\");\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Update Portal Credentials</DialogTitle>\n <DialogDescription>\n Update the login credentials for {debtor?.debtorName}\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"update-username\">Username</Label>\n <Input\n id=\"update-username\"\n type=\"email\"\n value={username}\n onChange={(e) => setUsername(e.target.value)}\n placeholder=\"Enter new username (leave empty to keep current)\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"update-password\">Password</Label>\n <Input\n id=\"update-password\"\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"Enter new password (leave empty to keep current)\"\n />\n </div>\n\n <div className=\"text-sm text-muted-foreground\">\n Leave fields empty to keep existing values. Only fields with values will be updated.\n </div>\n </div>\n\n <div className=\"flex justify-end gap-2 pt-4\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={loading || (!username && !password)}>\n {loading ? \"Updating...\" : \"Update Credentials\"}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","import * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants } from \"@/components/ui/button\"\n\nconst AlertDialog = AlertDialogPrimitive.Root\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n))\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n))\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nAlertDialogHeader.displayName = \"AlertDialogHeader\"\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nAlertDialogFooter.displayName = \"AlertDialogFooter\"\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n))\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nAlertDialogDescription.displayName =\n AlertDialogPrimitive.Description.displayName\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...props}\n />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(\n buttonVariants({ variant: \"outline\" }),\n \"mt-2 sm:mt-0\",\n className\n )}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","import * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n","import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from \"@/components/ui/dialog\";\nimport { AlertDialog, AlertDialogAction, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from \"@/components/ui/alert-dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { Input } from \"@/components/ui/input\";\nimport { Separator } from \"@/components/ui/separator\";\nimport {\n Loader2,\n CheckCircle2,\n XCircle,\n FileText,\n Building2,\n Mail,\n ArrowLeft,\n RefreshCw,\n ShieldCheck,\n} from \"lucide-react\";\nimport type { FactorCloudClient } from \"@/types/factorcloud\";\nimport type { MergedDebtor } from \"@/types/merged\";\nimport { useMemo, useState, useDeferredValue, useCallback } from \"react\";\nimport { formatLastSync } from \"@/lib/utils\";\n\nexport type SyncStep =\n | \"idle\"\n | \"checking-config\"\n | \"authenticating\"\n | \"loading-clients\"\n | \"selecting-client\"\n | \"selecting-debtor\"\n | \"loading-data\"\n | \"review\"\n | \"complete\"\n | \"error\";\n\ninterface SyncProgressModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n currentStep: SyncStep;\n error?: string;\n clients?: FactorCloudClient[];\n debtors?: MergedDebtor[];\n selectedDebtor?: MergedDebtor | null;\n selectedClient?: FactorCloudClient | null;\n onSelectClient?: (client: FactorCloudClient) => void;\n onSelectDebtor?: (debtor: MergedDebtor) => void;\n onConnectDebtor?: (debtor: MergedDebtor) => void;\n onEditCredentials?: (debtor: MergedDebtor) => void;\n onChangePortal?: (debtor: MergedDebtor) => void;\n onToggleActivation?: (debtor: MergedDebtor) => void;\n onSyncDebtor?: (debtor: MergedDebtor) => void;\n onVerifyDebtor?: (debtor: MergedDebtor) => void;\n togglingDebtorId?: string | null;\n syncingDebtorId?: string | null;\n verifyingDebtorId?: string | null;\n allowBackToClientSelection?: boolean;\n onBackToClientSelection?: () => void;\n activeTab?: MergedDebtor[\"status\"];\n onActiveTabChange?: (tab: MergedDebtor[\"status\"]) => void;\n}\n\nconst stepLabels: Record<SyncStep, string> = {\n idle: \"Ready to sync\",\n \"checking-config\": \"Checking configuration...\",\n \"authenticating\": \"Authenticating with services...\",\n \"loading-clients\": \"Loading clients...\",\n \"selecting-client\": \"Choose which client to manage\",\n \"selecting-debtor\": \"Connect debtor portals to sync invoices\",\n \"loading-data\": \"Loading debtors...\",\n \"review\": \"Review invoices\",\n \"complete\": \"Sync complete!\",\n \"error\": \"Sync failed\",\n};\n\nexport function SyncProgressModal({\n open,\n onOpenChange,\n currentStep,\n error,\n clients = [],\n debtors = [],\n selectedDebtor = null,\n selectedClient = null,\n onSelectClient,\n onSelectDebtor,\n onConnectDebtor,\n onEditCredentials,\n onChangePortal,\n onToggleActivation,\n onSyncDebtor,\n onVerifyDebtor,\n togglingDebtorId,\n syncingDebtorId,\n verifyingDebtorId,\n allowBackToClientSelection = false,\n onBackToClientSelection,\n activeTab,\n onActiveTabChange,\n }: SyncProgressModalProps) {\n const isLoading = [\"checking-config\", \"authenticating\", \"loading-clients\", \"loading-data\"].includes(currentStep);\n const isError = currentStep === \"error\";\n const isComplete = currentStep === \"complete\";\n const isSelectingClient = currentStep === \"selecting-client\";\n const isSelectingDebtor = currentStep === \"selecting-debtor\";\n const isReviewing = currentStep === \"review\";\n\n // Debtor selection UI state\n const [localActiveTab, setLocalActiveTab] = useState<MergedDebtor[\"status\"]>(\"not_connected\");\n const activeDebtorTab = activeTab ?? localActiveTab;\n const setActiveDebtorTab = onActiveTabChange ?? setLocalActiveTab;\n\n // Sync confirmation modal\n const [syncConfirmOpen, setSyncConfirmOpen] = useState(false);\n const [debtorToSync, setDebtorToSync] = useState<MergedDebtor | null>(null);\n const [verifyConfirmOpen, setVerifyConfirmOpen] = useState(false);\n const [debtorToVerify, setDebtorToVerify] = useState<MergedDebtor | null>(null);\n\n const [searchTerm, setSearchTerm] = useState(\"\");\n const deferredSearch = useDeferredValue(searchTerm);\n\n const filteredDebtors = useMemo(() => {\n const q = deferredSearch.trim().toLowerCase();\n if (!q) return debtors;\n return debtors.filter((d) => d.debtorName.toLowerCase().includes(q));\n }, [debtors, deferredSearch]);\n\n const groups = useMemo(() => ({\n not_connected: filteredDebtors.filter((d) => d.status === \"not_connected\"),\n pending: filteredDebtors.filter((d) => d.status === \"pending\"),\n connected: filteredDebtors.filter((d) => d.status === \"connected\"),\n deactivated: filteredDebtors.filter((d) => d.status === \"deactivated\"),\n }), [filteredDebtors]);\n\n const counts = {\n not_connected: groups.not_connected.length,\n pending: groups.pending.length,\n connected: groups.connected.length,\n deactivated: groups.deactivated.length,\n };\n\n const handleConnect = useCallback((debtor: MergedDebtor) => {\n onConnectDebtor?.(debtor);\n }, [onConnectDebtor]);\n\n const handleSyncClick = useCallback((debtor: MergedDebtor) => {\n setDebtorToSync(debtor);\n setSyncConfirmOpen(true);\n }, []);\n\n const handleSyncConfirm = useCallback(() => {\n if (debtorToSync) {\n onSyncDebtor?.(debtorToSync);\n setSyncConfirmOpen(false);\n setDebtorToSync(null);\n }\n }, [debtorToSync, onSyncDebtor]);\n\n const handleVerifyClick = useCallback((debtor: MergedDebtor) => {\n setDebtorToVerify(debtor);\n setVerifyConfirmOpen(true);\n }, []);\n\n const handleVerifyConfirm = useCallback(() => {\n if (debtorToVerify) {\n onVerifyDebtor?.(debtorToVerify);\n setVerifyConfirmOpen(false);\n setDebtorToVerify(null);\n }\n }, [debtorToVerify, onVerifyDebtor]);\n\n const marketingHighlights = [\n \"Instantly sync invoices without downloading files\",\n \"Save countless hours with automated data pulls\",\n \"Keep your buyer portals connected and up to date\",\n ];\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-5xl max-h-[90vh] overflow-hidden p-0\">\n <div className=\"flex h-full flex-col md:flex-row\">\n <aside\n className=\"md:w-1/3 bg-black text-white p-8 flex flex-col justify-between relative overflow-hidden\">\n\n {/* Decorative Gradient Overlay */}\n <div\n className=\"absolute inset-0 bg-[radial-gradient(circle_at_top_right,rgba(255,255,255,0.1),transparent_70%)] pointer-events-none\"/>\n\n <div className=\"space-y-8 relative z-10\">\n {/* Headline */}\n <div className=\"space-y-3\">\n <h2 className=\"text-3xl font-bold leading-snug tracking-tight\">\n Connect & Sync your Invoices\n </h2>\n <p className=\"text-base text-white/90 leading-relaxed max-w-sm\">\n Connect your debtor portals once and we’ll sync your invoices automatically\n </p>\n </div>\n\n {/* Highlights */}\n <ul className=\"space-y-5 text-sm\">\n {[\n \"Connect once, stay synced forever. No more uploads.\",\n \"Work smarter, not harder. Automate the boring stuff and focus on what moves the needle.\",\n \"Always up to date. Every debtor portal, every invoice — perfectly in sync.\"\n ].map((text, idx) => (\n <li key={idx} className=\"flex items-start gap-3\">\n <CheckCircle2 className=\"mt-0.5 h-5 w-5 text-emerald-300 flex-shrink-0\"/>\n <span className=\"leading-relaxed\">{text}</span>\n </li>\n ))}\n </ul>\n </div>\n\n {/* Support Box */}\n <div\n className=\"relative z-10 mt-10 rounded-lg border border-white/15 bg-white/10 p-4 text-xs text-white/80 backdrop-blur-sm shadow-inner\">\n <p className=\"font-semibold text-white\">Need help connecting your portals?</p>\n <p className=\"mt-1\">\n Our support team can guide you through setup — or do it for you.\n </p>\n </div>\n </aside>\n\n <div className=\"flex-1 md:w-2/3\">\n <div className=\"flex h-full flex-col\">\n <div className=\"p-6 pb-4\">\n <DialogHeader className=\"text-left\">\n <DialogTitle>\n {isSelectingDebtor && selectedClient\n ? `Connect Debtor Portals for ${selectedClient.companyName}`\n : \"Connect Debtor Portals to Sync Invoices\"}\n </DialogTitle>\n <DialogDescription>\n {isError\n ? \"An error occurred during sync\"\n : isSelectingDebtor && selectedClient\n ? \"Connect debtor portals to automatically sync invoices\"\n : \"Connect debtor portals to automatically sync invoices and save time\"}\n </DialogDescription>\n </DialogHeader>\n {!isSelectingDebtor && <Separator className=\"mt-4\"/>}\n </div>\n\n <div className=\"flex-1 overflow-y-auto px-6 pb-6\">\n {(isLoading || isComplete || isError) && (\n <div className=\"flex items-center gap-3\">\n {isLoading && <Loader2 className=\"w-5 h-5 animate-spin text-primary\"/>}\n {isComplete && <CheckCircle2 className=\"w-5 h-5 text-primary\"/>}\n {isError && <XCircle className=\"w-5 h-5 text-destructive\"/>}\n <span className=\"text-sm text-muted-foreground\">\n {currentStep === \"loading-data\" && selectedClient\n ? `Loading debtors for ${selectedClient.companyName}...`\n : stepLabels[currentStep]\n }\n </span>\n </div>\n )}\n\n {isSelectingClient && (\n <div className=\"mt-6 space-y-4\">\n <div className=\"text-base font-medium\">Step 1 : Select a Client</div>\n\n <div className=\"max-h-64 overflow-auto rounded-md border\">\n <ul className=\"divide-y\">\n {clients.length === 0 && (\n <li className=\"p-3 text-sm text-muted-foreground\">No clients found.</li>\n )}\n {clients.map((client) => (\n <li key={client.id}>\n <button\n className=\"w-full text-left p-3 transition-colors hover:bg-muted/70\"\n onClick={() => onSelectClient?.(client)}\n >\n <div className=\"flex items-center gap-2\">\n <Building2 className=\"h-5 w-5 flex-shrink-0 text-primary\"/>\n <div className=\"flex-1\">\n <div className=\"flex items-center justify-between\">\n <span className=\"font-medium\">{client.companyName}</span>\n {client.active && (\n <span\n className=\"rounded bg-green-500/10 px-2 py-1 text-xs text-green-500\">\n Active\n </span>\n )}\n </div>\n <div className=\"mt-1 flex items-center gap-1 text-xs text-muted-foreground\">\n <Mail className=\"h-3 w-3\"/>\n {client.email}\n </div>\n </div>\n </div>\n </button>\n </li>\n ))}\n </ul>\n </div>\n </div>\n )}\n\n {isSelectingDebtor && (\n <div className=\"mt-6 space-y-4\">\n <Input\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n placeholder=\"Search debtors...\"\n className=\"w-full\"\n />\n\n <Tabs value={activeDebtorTab}\n onValueChange={(v) => setActiveDebtorTab(v as MergedDebtor[\"status\"])} className=\"w-full\">\n <TabsList className=\"grid w-full grid-cols-4 gap-2 bg-muted\">\n <TabsTrigger value=\"not_connected\">Not Connected ({counts.not_connected})</TabsTrigger>\n <TabsTrigger value=\"pending\">Pending ({counts.pending})</TabsTrigger>\n <TabsTrigger value=\"connected\">Connected ({counts.connected})</TabsTrigger>\n <TabsTrigger value=\"deactivated\">Deactivated ({counts.deactivated})</TabsTrigger>\n </TabsList>\n\n {([\"not_connected\", \"pending\", \"connected\", \"deactivated\"] as MergedDebtor[\"status\"][]).map((status) => (\n <TabsContent key={status} value={status} className=\"mt-4\">\n <div className=\"max-h-64 overflow-auto rounded-md border\">\n <ul className=\"divide-y\">\n {groups[status].length === 0 && (\n <li className=\"p-3 text-sm text-muted-foreground\">No debtors found.</li>\n )}\n {groups[status].map((debtor) => (\n <li key={debtor.factorcloudDebtorId}\n className=\"flex items-center justify-between gap-4 p-3 transition-colors hover:bg-muted/70\">\n <div className=\"flex-1\">\n <div className=\"font-medium\">{debtor.debtorName}</div>\n <div className=\"mt-1 space-y-0.5 text-xs text-muted-foreground\">\n <div>Last Sync: {formatLastSync(debtor.lastSync)}</div>\n {debtor.lastSyncSummary && (\n <div>\n Last Sync Records: {debtor.lastSyncSummary.synced} synced /\n {\" \"}\n {debtor.lastSyncSummary.processed} processed\n {debtor.lastSyncSummary.failed > 0\n ? ` (${debtor.lastSyncSummary.failed} failed)`\n : \"\"}\n </div>\n )}\n {debtor.lastVerificationSummary && (\n <div>\n Last\n Verification: {formatLastSync(debtor.lastVerificationSummary.timestamp)} —\n {\" \"}\n {debtor.lastVerificationSummary.synced} verified /\n {\" \"}\n {debtor.lastVerificationSummary.processed} processed\n {debtor.lastVerificationSummary.failed > 0\n ? ` (${debtor.lastVerificationSummary.failed} failed)`\n : \"\"}\n </div>\n )}\n {debtor.portalName && (\n <div>Portal: {debtor.portalName}</div>\n )}\n </div>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {status === \"not_connected\" && (\n <Button onClick={() => handleConnect(debtor)}>\n CONNECT\n </Button>\n )}\n {status === \"connected\" && (\n <>\n <Button\n variant=\"success\"\n size=\"sm\"\n onClick={() => handleSyncClick(debtor)}\n disabled={syncingDebtorId === debtor.factorcloudDebtorId}\n >\n {syncingDebtorId === debtor.factorcloudDebtorId ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\"/>\n Syncing...\n </>\n ) : (\n <>\n <RefreshCw className=\"mr-2 h-4 w-4\"/>\n Sync Now\n </>\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleVerifyClick(debtor)}\n disabled={verifyingDebtorId === debtor.factorcloudDebtorId}\n >\n {verifyingDebtorId === debtor.factorcloudDebtorId ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\"/>\n Verifying...\n </>\n ) : (\n <>\n <ShieldCheck className=\"mr-2 h-4 w-4\"/>\n Verify Invoices\n </>\n )}\n </Button>\n <Button variant=\"outline\" size=\"sm\"\n onClick={() => onEditCredentials?.(debtor)}>\n Edit Credentials\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onToggleActivation?.(debtor)}\n disabled={togglingDebtorId === debtor.factorcloudDebtorId}\n >\n {togglingDebtorId === debtor.factorcloudDebtorId ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\"/>\n Deactivating...\n </>\n ) : (\n \"Deactivate\"\n )}\n </Button>\n </>\n )}\n {(status === \"pending\" || status === \"deactivated\") && (\n <>\n <Button variant=\"outline\" size=\"sm\"\n onClick={() => onEditCredentials?.(debtor)}>\n Edit Credentials\n </Button>\n <Button\n variant={status === \"deactivated\" ? \"default\" : \"outline\"}\n size=\"sm\"\n onClick={() => onToggleActivation?.(debtor)}\n disabled={togglingDebtorId === debtor.factorcloudDebtorId}\n >\n {togglingDebtorId === debtor.factorcloudDebtorId ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\"/>\n {status === \"deactivated\" ? \"Activating...\" : \"Deactivating...\"}\n </>\n ) : (\n status === \"deactivated\" ? \"Activate\" : \"Deactivate\"\n )}\n </Button>\n </>\n )}\n </div>\n </li>\n ))}\n </ul>\n </div>\n </TabsContent>\n ))}\n </Tabs>\n </div>\n )}\n\n {isReviewing && (\n <div className=\"mt-6 space-y-4\">\n <div className=\"text-sm\">\n Selected debtor: <span className=\"font-medium\">{selectedDebtor?.debtorName}</span>\n </div>\n <Tabs defaultValue=\"pending\" className=\"w-full\">\n <TabsList className=\"bg-muted\">\n <TabsTrigger value=\"pending\">Pending</TabsTrigger>\n <TabsTrigger value=\"approved\">Approved</TabsTrigger>\n <TabsTrigger value=\"funded\">Funded</TabsTrigger>\n <TabsTrigger value=\"closed\">Closed</TabsTrigger>\n <TabsTrigger value=\"rejected\">Rejected</TabsTrigger>\n <TabsTrigger value=\"all\">All</TabsTrigger>\n </TabsList>\n <TabsContent value=\"pending\" className=\"mt-4\">\n <div\n className=\"flex flex-col items-center rounded-lg border p-8 text-center text-sm text-muted-foreground\">\n <div className=\"mb-3 flex h-10 w-10 items-center justify-center rounded-full bg-muted\">\n <FileText className=\"h-5 w-5\"/>\n </div>\n No records found for Pending\n </div>\n </TabsContent>\n <TabsContent value=\"approved\" className=\"mt-4\">\n <div className=\"rounded-lg border p-8 text-center text-sm text-muted-foreground\">No records\n found for Approved\n </div>\n </TabsContent>\n <TabsContent value=\"funded\" className=\"mt-4\">\n <div className=\"rounded-lg border p-8 text-center text-sm text-muted-foreground\">No records\n found for Funded\n </div>\n </TabsContent>\n <TabsContent value=\"closed\" className=\"mt-4\">\n <div className=\"rounded-lg border p-8 text-center text-sm text-muted-foreground\">No records\n found for Closed\n </div>\n </TabsContent>\n <TabsContent value=\"rejected\" className=\"mt-4\">\n <div className=\"rounded-lg border p-8 text-center text-sm text-muted-foreground\">No records\n found for Rejected\n </div>\n </TabsContent>\n <TabsContent value=\"all\" className=\"mt-4\">\n <div className=\"rounded-lg border p-8 text-center text-sm text-muted-foreground\">No records\n found\n </div>\n </TabsContent>\n </Tabs>\n </div>\n )}\n\n {error && (\n <div className=\"mt-6 rounded-lg bg-destructive/10 p-3 text-sm text-destructive\">\n {error}\n </div>\n )}\n </div>\n\n <div className=\"flex items-center justify-between border-t px-6 py-4\">\n {isSelectingDebtor && allowBackToClientSelection ? (\n <Button variant=\"outline\" onClick={onBackToClientSelection}>\n <ArrowLeft className=\"mr-2 h-4 w-4\"/>\n Change Client\n </Button>\n ) : (\n <div/>\n )}\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n Close\n </Button>\n </div>\n </div>\n </div>\n </div>\n </DialogContent>\n\n <AlertDialog open={syncConfirmOpen} onOpenChange={setSyncConfirmOpen}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Sync Scheduled Successfully!</AlertDialogTitle>\n <AlertDialogDescription>\n We're syncing invoices for <span className=\"font-medium\">{debtorToSync?.debtorName}</span> in the\n background.\n This usually takes a few minutes. You'll receive an email notification once the sync is complete and\n your invoices are ready to review.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogAction onClick={handleSyncConfirm}>Got it!</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n\n <AlertDialog open={verifyConfirmOpen} onOpenChange={setVerifyConfirmOpen}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Verification Started!</AlertDialogTitle>\n <AlertDialogDescription>\n We're verifying invoices for <span className=\"font-medium\">{debtorToVerify?.debtorName}</span>. We'll\n let you know if any issues come up during the verification.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogAction onClick={handleVerifyConfirm}>Understood</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </Dialog>\n );\n}","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }\n","import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { MergedDebtor } from \"@/types/merged\";\nimport { PortalMapping } from \"@/types/portalduct\";\nimport { useState, useEffect } from \"react\";\nimport { Loader2, Search, ArrowLeft } from \"lucide-react\";\n\ninterface ConnectDebtorModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n debtor: MergedDebtor | null;\n availablePortals: PortalMapping[];\n loadingPortals?: boolean;\n loading?: boolean;\n isChangingPortal?: boolean;\n onConnect: (portalId: string, username: string, password: string) => void;\n onRequestNewPortal: () => void;\n}\n\nexport function ConnectDebtorModal({ \n open, \n onOpenChange, \n debtor,\n availablePortals,\n loadingPortals = false,\n loading = false,\n isChangingPortal = false,\n onConnect,\n onRequestNewPortal\n}: ConnectDebtorModalProps) {\n const [step, setStep] = useState<\"selecting-portal\" | \"entering-credentials\">(\"selecting-portal\");\n const [selectedPortal, setSelectedPortal] = useState<PortalMapping | null>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [username, setUsername] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n\n useEffect(() => {\n if (!open) {\n setStep(\"selecting-portal\");\n setSelectedPortal(null);\n setSearchQuery(\"\");\n setUsername(\"\");\n setPassword(\"\");\n }\n }, [open]);\n\n const filteredPortals = availablePortals\n .filter(portal => \n portal.description !== \"Failed\" &&\n (portal.name.toLowerCase().includes(searchQuery.toLowerCase()) ||\n portal.host.toLowerCase().includes(searchQuery.toLowerCase()))\n )\n .sort((a, b) => {\n // Active portals first\n if (a.is_active && !b.is_active) return -1;\n if (!a.is_active && b.is_active) return 1;\n return 0;\n });\n\n const handlePortalSelect = (portal: PortalMapping) => {\n setSelectedPortal(portal);\n setStep(\"entering-credentials\");\n };\n\n const handleBack = () => {\n setStep(\"selecting-portal\");\n setSelectedPortal(null);\n setUsername(\"\");\n setPassword(\"\");\n };\n\n const handleConnect = () => {\n if (selectedPortal && username && password) {\n onConnect(selectedPortal.portal_id, username, password);\n }\n };\n\n const canSubmit = username.trim().length > 0 && password.trim().length > 0;\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-2xl h-[85vh] min-h-0 flex flex-col gap-4 overflow-hidden\">\n {step === \"selecting-portal\" ? (\n <>\n <DialogHeader>\n <DialogTitle>{isChangingPortal ? 'Change Portal' : 'Select Portal'}</DialogTitle>\n <DialogDescription>\n Choose the portal you want to {isChangingPortal ? 'change to' : 'connect to'} for {debtor?.debtorName}.\n </DialogDescription>\n </DialogHeader>\n\n {loadingPortals ? (\n <div className=\"flex items-center justify-center py-8\">\n <Loader2 className=\"w-8 h-8 animate-spin text-primary\" />\n </div>\n ) : (\n <>\n <div className=\"relative flex-shrink-0\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground\" />\n <Input\n placeholder=\"Search portals...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"pl-9\"\n />\n </div>\n\n <ScrollArea className=\"flex-1 min-h-0 -mx-6 px-6\">\n <div className=\"grid grid-cols-2 gap-4 pb-4\">\n {filteredPortals.map((portal) => (\n <button\n key={portal.mapping_id}\n onClick={() => handlePortalSelect(portal)}\n className=\"flex flex-col items-center gap-3 p-4 border rounded-lg hover:bg-muted/50 transition-colors relative\"\n >\n <Badge \n variant=\"secondary\"\n className={`absolute top-2 right-2 ${portal.is_active ? 'bg-green-100 text-green-700 hover:bg-green-200' : 'bg-yellow-100 text-yellow-700 hover:bg-yellow-200'}`}\n >\n {portal.is_active ? \"Active\" : \"Pending\"}\n </Badge>\n <div className=\"w-16 h-16 flex items-center justify-center bg-muted rounded-lg\">\n {portal.logo && portal.logo !== \"NA\" ? (\n <img \n src={portal.logo} \n alt={portal.name}\n className=\"w-12 h-12 object-contain\"\n onError={(e) => {\n e.currentTarget.style.display = 'none';\n }}\n />\n ) : (\n <span className=\"text-2xl font-bold text-muted-foreground\">\n {portal.name.charAt(0)}\n </span>\n )}\n </div>\n <div className=\"text-sm font-medium text-center\">{portal.name}</div>\n <div className=\"text-xs text-muted-foreground truncate w-full text-center\">\n {portal.host}\n </div>\n </button>\n ))}\n </div>\n </ScrollArea>\n\n <div className=\"flex items-center justify-between gap-3 pt-4 border-t flex-shrink-0\">\n <p className=\"text-sm text-muted-foreground\">Can't find your portal?</p>\n <Button variant=\"outline\" onClick={onRequestNewPortal} size=\"sm\">\n Request New Portal\n </Button>\n </div>\n </>\n )}\n\n <div className=\"flex justify-end pt-2 flex-shrink-0\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n </div>\n </>\n ) : (\n <>\n <DialogHeader>\n <DialogTitle>{isChangingPortal ? 'Change Portal' : 'Enter Credentials'}</DialogTitle>\n <DialogDescription>\n Enter your credentials for {selectedPortal?.name} to {isChangingPortal ? 'update' : 'connect'} {debtor?.debtorName}.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <div className=\"flex items-center gap-3 p-3 border rounded-lg bg-muted/50\">\n {selectedPortal?.logo && selectedPortal.logo !== \"NA\" && (\n <img \n src={selectedPortal.logo} \n alt={selectedPortal.name}\n className=\"w-10 h-10 object-contain\"\n />\n )}\n <div>\n <div className=\"font-medium\">{selectedPortal?.name}</div>\n <div className=\"text-xs text-muted-foreground\">{selectedPortal?.host}</div>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"portal-username\">Username</Label>\n <Input \n id=\"portal-username\" \n value={username} \n onChange={(e) => setUsername(e.target.value)} \n placeholder=\"Enter portal username\" \n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"portal-password\">Password</Label>\n <Input \n id=\"portal-password\" \n type=\"password\" \n value={password} \n onChange={(e) => setPassword(e.target.value)} \n placeholder=\"Enter portal password\" \n />\n </div>\n </div>\n\n <div className=\"flex justify-between gap-2 pt-4\">\n <Button variant=\"outline\" onClick={handleBack} disabled={loading}>\n <ArrowLeft className=\"w-4 h-4 mr-2\" />\n Back\n </Button>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleConnect} disabled={loading || !canSubmit}>\n {loading ? (isChangingPortal ? \"Updating...\" : \"Connecting...\") : (isChangingPortal ? \"Update Portal\" : \"Connect\")}\n </Button>\n </div>\n </div>\n </>\n )}\n </DialogContent>\n </Dialog>\n );\n}\n","import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { useState, useEffect } from \"react\";\n\ninterface RequestPortalModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n loading?: boolean;\n onSubmit: (name: string, host: string) => void;\n}\n\nexport function RequestPortalModal({ open, onOpenChange, loading = false, onSubmit }: RequestPortalModalProps) {\n const [name, setName] = useState(\"\");\n const [host, setHost] = useState(\"\");\n\n useEffect(() => {\n if (!open) {\n setName(\"\");\n setHost(\"\");\n }\n }, [open]);\n\n const canSubmit = name.trim().length > 0 && host.trim().length > 0;\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Request New Portal</DialogTitle>\n <DialogDescription>\n Enter the details of the portal you'd like to connect to.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"portal-name\">Portal Name</Label>\n <Input \n id=\"portal-name\" \n value={name} \n onChange={(e) => setName(e.target.value)} \n placeholder=\"e.g. My Portal Name\" \n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"portal-host\">Portal URL</Label>\n <Input \n id=\"portal-host\" \n value={host} \n onChange={(e) => setHost(e.target.value)} \n placeholder=\"e.g. https://portal.example.com\" \n />\n </div>\n </div>\n\n <div className=\"flex justify-end gap-2 pt-4\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={() => onSubmit(name, host)} disabled={loading || !canSubmit}>\n {loading ? \"Creating...\" : \"Create Portal\"}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { ConnectionSyncAPI } from \"@/api/connectionSync\";\nimport {\n CustomerStatusPayload,\n SDKConfig,\n isConfigComplete,\n mergeCustomerStatusWithConfig,\n} from \"@/types/config\";\n\nexport interface CustomerStatusState {\n isActive: boolean | null;\n loading: boolean;\n error: Error | null;\n resolvedConfig: SDKConfig | null;\n refetch: () => Promise<CustomerStatusPayload | null>;\n}\n\ninterface UseCustomerStatusOptions {\n skip?: boolean;\n customerStatusUrl?: string;\n}\n\nexport function useCustomerStatus(\n config?: SDKConfig | null,\n options?: UseCustomerStatusOptions\n): CustomerStatusState {\n const skip = options?.skip ?? false;\n const customerStatusUrl = options?.customerStatusUrl;\n\n const isMountedRef = useRef(true);\n const [isActive, setIsActive] = useState<boolean | null>(null);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n const [resolvedConfig, setResolvedConfig] = useState<SDKConfig | null>(\n config && isConfigComplete(config) ? config : null\n );\n\n useEffect(() => {\n if (!config) {\n setResolvedConfig(null);\n return;\n }\n\n if (isConfigComplete(config)) {\n setResolvedConfig(config);\n }\n }, [config]);\n\n const combinedConfig = useMemo<Partial<SDKConfig> | undefined>(() => {\n if (!config && !resolvedConfig) {\n return undefined;\n }\n\n return {\n portalduct: {\n ...(resolvedConfig?.portalduct ?? {}),\n ...(config?.portalduct ?? {}),\n },\n factorcloud: {\n ...(resolvedConfig?.factorcloud ?? {}),\n ...(config?.factorcloud ?? {}),\n },\n } as Partial<SDKConfig>;\n }, [config, resolvedConfig]);\n\n const factorId = combinedConfig?.factorcloud?.factorId;\n const webhookToken = combinedConfig?.portalduct?.webhook_bearer_token;\n const customerId = combinedConfig?.portalduct?.customer_id;\n const environment = combinedConfig?.portalduct?.environment;\n const portalductEnvUrl = combinedConfig?.portalduct?.env_url;\n const syncWebhookUrl = combinedConfig?.portalduct?.sync_webhook_url;\n const verifyWebhookUrl = combinedConfig?.portalduct?.verify_webhook_url;\n\n const latestConfigRef = useRef<Partial<SDKConfig> | undefined>(combinedConfig);\n\n useEffect(() => {\n latestConfigRef.current = combinedConfig;\n }, [combinedConfig]);\n\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const refetch = useCallback(async () => {\n if (skip) {\n return null;\n }\n\n const latestConfig = latestConfigRef.current;\n const latestFactorId = latestConfig?.factorcloud?.factorId;\n const latestWebhookToken = latestConfig?.portalduct?.webhook_bearer_token;\n const latestCustomerId = latestConfig?.portalduct?.customer_id;\n const latestEnvironment = latestConfig?.portalduct?.environment;\n const latestPortalductEnvUrl = latestConfig?.portalduct?.env_url;\n const latestSyncWebhookUrl = latestConfig?.portalduct?.sync_webhook_url;\n const latestVerifyWebhookUrl = latestConfig?.portalduct?.verify_webhook_url;\n\n if (!latestFactorId) {\n if (isMountedRef.current) {\n setIsActive(null);\n setLoading(false);\n setError(null);\n }\n return null;\n }\n\n if (!latestWebhookToken) {\n if (isMountedRef.current) {\n setIsActive(false);\n setLoading(false);\n setError(null); //\n }\n return null;\n }\n\n if (isMountedRef.current) {\n setLoading(true);\n setError(null);\n }\n\n try {\n const api = new ConnectionSyncAPI({\n webhookToken: latestWebhookToken,\n customerId: latestCustomerId,\n environment: latestEnvironment,\n webhookUrl: latestSyncWebhookUrl,\n verifyWebhookUrl: latestVerifyWebhookUrl,\n portalductBaseUrl: latestPortalductEnvUrl,\n customerStatusUrl,\n });\n\n const status = await api.fetchCustomerStatus(latestFactorId);\n const mergedConfig = mergeCustomerStatusWithConfig(\n latestConfig,\n status\n );\n\n if (isMountedRef.current) {\n setIsActive(status.active);\n if (mergedConfig) {\n setResolvedConfig(mergedConfig);\n }\n }\n\n return status;\n } catch (err) {\n const errorInstance =\n err instanceof Error\n ? err\n : new Error(\"Unable to determine FactorCloud customer status.\");\n\n if (isMountedRef.current) {\n setIsActive(false);\n setError(errorInstance);\n }\n\n return null;\n } finally {\n if (isMountedRef.current) {\n setLoading(false);\n }\n }\n }, [customerStatusUrl, skip]);\n\n useEffect(() => {\n if (skip) {\n return;\n }\n\n if (!factorId || !webhookToken) {\n return;\n }\n\n refetch();\n }, [\n customerStatusUrl,\n factorId,\n portalductEnvUrl,\n refetch,\n skip,\n syncWebhookUrl,\n verifyWebhookUrl,\n webhookToken,\n ]);\n\n return {\n isActive,\n loading,\n error,\n resolvedConfig,\n refetch,\n };\n}\n","import { useState, useEffect, ReactNode } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { useToast } from \"@/hooks/use-toast\";\nimport { SDKConfig, isConfigComplete } from \"@/types/config\";\nimport { FactorCloudClient } from \"@/types/factorcloud\";\nimport { PortalDuctCompany } from \"@/types/portalduct\";\nimport { MergedDebtor } from \"@/types/merged\";\nimport { DataOrchestrationService } from \"@/services/orchestration\";\nimport { PortalDuctAPIError } from \"@/api/portalduct\";\nimport { InterestSyncModal } from \"./InterestSyncModal\";\nimport { UpdateCredentialsModal } from \"./UpdateCredentialsModal\";\nimport { SyncProgressModal, SyncStep } from \"./SyncProgressModal\";\nimport { ConnectDebtorModal } from \"./ConnectDebtorModal\";\nimport { RequestPortalModal } from \"./RequestPortalModal\";\nimport { PortalMapping } from \"@/types/portalduct\";\nimport {\n CustomerStatusState,\n useCustomerStatus,\n} from \"@/hooks/use-customer-status\";\n\nexport interface SyncWorkflowProps {\n config: SDKConfig;\n onTokenExpired?: (service: 'factorcloud' | 'portalduct') => void;\n trigger?: ReactNode;\n onSyncComplete?: (debtors: MergedDebtor[]) => void;\n onSyncError?: (error: Error) => void;\n autoStart?: boolean;\n customerStatus?: CustomerStatusState;\n}\n\nexport const SyncWorkflow = ({\n config,\n onTokenExpired,\n trigger,\n onSyncComplete,\n onSyncError,\n autoStart = false,\n customerStatus,\n }: SyncWorkflowProps) => {\n // Orchestration Service State\n const [orchestrationService, setOrchestrationService] = useState<DataOrchestrationService | null>(null);\n\n // Client Selection State\n const [factorcloudClient, setFactorcloudClient] = useState<FactorCloudClient | null>(null);\n const [portalductCompany, setPortalductCompany] = useState<PortalDuctCompany | null>(null);\n const [availableClients, setAvailableClients] = useState<FactorCloudClient[]>([]);\n\n // Debtor & Connection State\n const [mergedDebtors, setMergedDebtors] = useState<MergedDebtor[]>([]);\n const [selectedDebtor, setSelectedDebtor] = useState<MergedDebtor | null>(null);\n const [loading, setLoading] = useState(false);\n\n // Portal & Connection State\n const [availablePortals, setAvailablePortals] = useState<PortalMapping[]>([]);\n const [loadingPortals, setLoadingPortals] = useState(false);\n const [connectOpen, setConnectOpen] = useState(false);\n const [debtorToConnect, setDebtorToConnect] = useState<MergedDebtor | null>(null);\n const [connecting, setConnecting] = useState(false);\n const [isChangingPortal, setIsChangingPortal] = useState(false);\n\n // Request Portal Modal State\n const [requestPortalOpen, setRequestPortalOpen] = useState(false);\n const [creatingPortal, setCreatingPortal] = useState(false);\n const [showInterestModal, setShowInterestModal] = useState(false);\n\n // Edit Credentials State\n const [editCredentialsOpen, setEditCredentialsOpen] = useState(false);\n const [debtorToEdit, setDebtorToEdit] = useState<MergedDebtor | null>(null);\n const [updatingCredentials, setUpdatingCredentials] = useState(false);\n\n // Toggle Activation State\n const [togglingDebtorId, setTogglingDebtorId] = useState<string | null>(null);\n\n // Sync State\n const [syncingDebtorId, setSyncingDebtorId] = useState<string | null>(null);\n const [syncTimeouts, setSyncTimeouts] = useState<Map<string, number>>(new Map());\n\n // Verification State\n const [verifyingDebtorId, setVerifyingDebtorId] = useState<string | null>(null);\n const [verifyTimeouts, setVerifyTimeouts] = useState<Map<string, number>>(new Map());\n\n // Sync Progress State\n const [showSyncModal, setShowSyncModal] = useState(false);\n const [syncStep, setSyncStep] = useState<SyncStep>(\"idle\");\n const [syncError, setSyncError] = useState<string>();\n const [activeDebtorTab, setActiveDebtorTab] = useState<MergedDebtor[\"status\"]>(\"not_connected\");\n\n const { toast } = useToast();\n\n // Customer status state\n const localCustomerStatus = useCustomerStatus(config, {\n skip: !!customerStatus,\n });\n const resolvedCustomerStatus = customerStatus ?? localCustomerStatus;\n const isCustomerActive = resolvedCustomerStatus.isActive;\n const customerStatusLoading = resolvedCustomerStatus.loading;\n const customerStatusError = resolvedCustomerStatus.error;\n const resolvedConfigFromStatus = resolvedCustomerStatus.resolvedConfig;\n const fallbackConfig = isConfigComplete(config) ? config : null;\n const runtimeConfig = resolvedConfigFromStatus ?? fallbackConfig;\n const configuredClientId =\n runtimeConfig?.factorcloud?.client_id ?? config?.factorcloud?.client_id;\n\n // Initialize orchestration service when config is provided\n useEffect(() => {\n if (runtimeConfig && isConfigComplete(runtimeConfig)) {\n const service = new DataOrchestrationService(runtimeConfig);\n setOrchestrationService(service);\n } else {\n setOrchestrationService(null);\n }\n }, [runtimeConfig]);\n\n // Auto-start sync if enabled\n useEffect(() => {\n if (\n autoStart &&\n orchestrationService &&\n !showSyncModal &&\n isCustomerActive === true &&\n !customerStatusLoading\n ) {\n handleAutoSync();\n }\n }, [\n autoStart,\n orchestrationService,\n showSyncModal,\n isCustomerActive,\n customerStatusLoading,\n ]);\n\n // Cleanup sync/verify timeouts on unmount\n useEffect(() => {\n return () => {\n syncTimeouts.forEach((timeoutId) => {\n window.clearTimeout(timeoutId);\n });\n verifyTimeouts.forEach((timeoutId) => {\n window.clearTimeout(timeoutId);\n });\n };\n }, [syncTimeouts, verifyTimeouts]);\n\n // Load Data Handler\n const loadDebtorData = async (service?: DataOrchestrationService) => {\n const svc = service || orchestrationService;\n if (!svc || !runtimeConfig) return;\n\n setLoading(true);\n try {\n // If no client_id configured, show client selection in sync modal\n if (!runtimeConfig.factorcloud?.client_id) {\n setSyncStep(\"loading-clients\");\n const clients = await svc.getFactorCloudClients();\n setAvailableClients(clients);\n setSyncStep(\"selecting-client\");\n return;\n }\n\n setSyncStep(\"loading-data\");\n\n // Get or create client\n const fcClient = await svc.getFactorCloudClient(\n runtimeConfig.factorcloud.client_id\n );\n setFactorcloudClient(fcClient);\n\n // Ensure PortalDuct company exists\n const pdCompany = await svc.ensurePortalDuctCompany(fcClient);\n setPortalductCompany(pdCompany);\n\n // Fetch merged debtors\n const debtors = await svc.fetchMergedDebtors(fcClient.id, pdCompany.company_id);\n setMergedDebtors(debtors);\n\n setSyncStep(\"selecting-debtor\");\n\n toast({\n title: \"Data Loaded\",\n description: `Loaded ${debtors.length} debtors. Select a debtor to continue.`,\n });\n\n onSyncComplete?.(debtors);\n } catch (error) {\n console.error(\"Failed to load data:\", error);\n const err = error instanceof Error ? error : new Error(\"An error occurred\");\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n }\n\n setSyncStep(\"error\");\n setSyncError(err.message);\n\n toast({\n title: \"Failed to Load Data\",\n description: err.message,\n variant: \"destructive\",\n });\n onSyncError?.(err);\n } finally {\n setLoading(false);\n }\n };\n\n // Auto-Sync Handler\n const handleAutoSync = async () => {\n if (!orchestrationService) {\n toast({\n title: \"Service Not Ready\",\n description: \"Please wait for the service to initialize.\",\n variant: \"destructive\",\n });\n return;\n }\n\n if (customerStatusLoading) {\n toast({\n title: \"Checking Customer Status\",\n description:\n \"Please wait while we confirm your FactorCloud account is active.\",\n });\n return;\n }\n\n if (isCustomerActive !== true) {\n toast({\n title: \"Sync Unavailable\",\n description:\n customerStatusError?.message ??\n \"This FactorCloud account is not active yet.\",\n variant: \"destructive\",\n });\n return;\n }\n\n setShowSyncModal(true);\n setSyncStep(\"checking-config\");\n setSyncError(undefined);\n\n try {\n await loadDebtorData(orchestrationService);\n } catch (error) {\n setSyncStep(\"error\");\n const err = error instanceof Error ? error : new Error(\"An unexpected error occurred\");\n setSyncError(err.message);\n onSyncError?.(err);\n }\n };\n\n // Client Selection Handler\n const handleClientSelection = async (client: FactorCloudClient) => {\n setFactorcloudClient(client);\n\n if (!orchestrationService) return;\n\n setSyncStep(\"loading-data\");\n setLoading(true);\n try {\n const pdCompany = await orchestrationService.ensurePortalDuctCompany(client);\n setPortalductCompany(pdCompany);\n\n const debtors = await orchestrationService.fetchMergedDebtors(client.id, pdCompany.company_id);\n setMergedDebtors(debtors);\n\n setSyncStep(\"selecting-debtor\");\n toast({\n title: \"Client Selected\",\n description: `Loaded ${debtors.length} debtors for ${client.companyName}. Select a debtor to continue.`,\n });\n } catch (error) {\n console.error(\"Failed to load client data:\", error);\n const err = error instanceof Error ? error : new Error(\"Failed to load client data\");\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n }\n\n setSyncStep(\"error\");\n setSyncError(err.message);\n toast({\n title: \"Failed to load client data\",\n description: err.message,\n variant: \"destructive\",\n });\n onSyncError?.(err);\n } finally {\n setLoading(false);\n }\n };\n\n // Debtor Selection Handler\n const handleDebtorSelection = async (debtor: MergedDebtor) => {\n setSelectedDebtor(debtor);\n setSyncStep(\"review\");\n toast({\n title: \"Debtor Selected\",\n description: `${debtor.debtorName} selected. Review invoices in the tabs below.`,\n });\n };\n\n // Request connect from modal flow - fetch portals and open modal\n const requestConnectDebtor = async (debtor: MergedDebtor) => {\n if (!orchestrationService) return;\n\n setDebtorToConnect(debtor);\n setIsChangingPortal(false);\n setLoadingPortals(true);\n setShowSyncModal(false);\n setConnectOpen(true);\n\n try {\n const pd = orchestrationService.getPortalDuctAPI();\n const portals = await pd.getPortalMappings();\n setAvailablePortals(portals);\n } catch (error) {\n console.error(\"Failed to fetch portals\", error);\n const err = error instanceof Error ? error : new Error(\"Unable to fetch portals.\");\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n }\n\n setSyncStep(\"error\");\n setSyncError(err.message);\n toast({\n title: \"Failed to fetch portals\",\n description: err.message,\n variant: \"destructive\"\n });\n setShowSyncModal(true);\n setConnectOpen(false);\n } finally {\n setLoadingPortals(false);\n }\n };\n\n // Request change portal - fetch portals and open modal\n const requestChangePortal = async (debtor: MergedDebtor) => {\n if (!orchestrationService) return;\n\n setDebtorToConnect(debtor);\n setIsChangingPortal(true);\n setLoadingPortals(true);\n setShowSyncModal(false);\n setConnectOpen(true);\n\n try {\n const pd = orchestrationService.getPortalDuctAPI();\n const portals = await pd.getPortalMappings();\n setAvailablePortals(portals);\n } catch (error) {\n console.error(\"Failed to fetch portals\", error);\n const err = error instanceof Error ? error : new Error(\"Unable to fetch portals.\");\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n }\n\n setSyncStep(\"error\");\n setSyncError(err.message);\n toast({\n title: \"Failed to fetch portals\",\n description: err.message,\n variant: \"destructive\"\n });\n setShowSyncModal(true);\n setConnectOpen(false);\n } finally {\n setLoadingPortals(false);\n }\n };\n\n // Handle connect modal close - reopen sync modal\n const handleConnectModalClose = (open: boolean) => {\n setConnectOpen(open);\n if (!open) {\n setShowSyncModal(true);\n }\n };\n\n // Request new portal from ConnectDebtorModal\n const handleRequestNewPortal = () => {\n setConnectOpen(false);\n setRequestPortalOpen(true);\n };\n\n // Create new portal mapping\n const handleCreatePortal = async (name: string, host: string) => {\n if (!orchestrationService || !runtimeConfig?.portalduct?.customer_id) return;\n\n try {\n setCreatingPortal(true);\n const pd = orchestrationService.getPortalDuctAPI();\n const newPortal = await pd.createPortalMapping({\n customer_id: runtimeConfig.portalduct.customer_id,\n name,\n host,\n });\n\n // Refresh portals list\n const portals = await pd.getPortalMappings();\n setAvailablePortals(portals);\n\n setRequestPortalOpen(false);\n setConnectOpen(true);\n\n toast({\n title: \"Portal created\",\n description: `${newPortal.name} has been added to your portals.`\n });\n } catch (error) {\n console.error(\"Failed to create portal\", error);\n const err = error instanceof Error ? error : new Error(\"Unable to create portal.\");\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n setSyncStep(\"error\");\n setSyncError(err.message);\n }\n\n toast({\n title: \"Failed to create portal\",\n description: err.message,\n variant: \"destructive\"\n });\n } finally {\n setCreatingPortal(false);\n }\n };\n\n // Perform actual connection creation or update\n const handlePerformConnect = async (portalId: string, username: string, password: string) => {\n if (!orchestrationService || !portalductCompany || !factorcloudClient || !debtorToConnect) {\n toast({ title: \"Cannot connect\", description: \"Missing context to create connection.\", variant: \"destructive\" });\n return;\n }\n\n try {\n setConnecting(true);\n const pd = orchestrationService.getPortalDuctAPI();\n\n const portal = availablePortals.find(p => p.portal_id === portalId);\n\n if (isChangingPortal && debtorToConnect.connection) {\n await pd.updateConnection(debtorToConnect.connection.connection_id, {\n portal_id: portalId,\n user_name: username,\n password,\n });\n toast({ title: \"Portal changed\", description: `${debtorToConnect.debtorName} portal updated to ${portal?.name}.` });\n } else {\n await pd.createConnection({\n company_id: portalductCompany.company_id,\n portal_id: portalId,\n user_name: username,\n password,\n tags: {\n factorcloud_id: factorcloudClient.id,\n factorcloud_debtor_id: debtorToConnect.factorcloudDebtorId,\n },\n });\n toast({ title: \"Connection created\", description: `${debtorToConnect.debtorName} is now connected (pending).` });\n }\n\n // Refresh merged debtors\n const updated = await orchestrationService.fetchMergedDebtors(factorcloudClient.id, portalductCompany.company_id);\n setMergedDebtors(updated);\n\n setConnectOpen(false);\n setShowSyncModal(true);\n setActiveDebtorTab(\"connected\");\n setDebtorToConnect(null);\n setIsChangingPortal(false);\n } catch (error) {\n console.error(isChangingPortal ? \"Change portal failed\" : \"Create connection failed\", error);\n const err =\n error instanceof Error\n ? error\n : new Error(\n `Unable to ${isChangingPortal ? \"change portal\" : \"create connection\"}.`\n );\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n setSyncStep(\"error\");\n setSyncError(err.message);\n }\n\n toast({\n title: isChangingPortal ? \"Change portal failed\" : \"Connection failed\",\n description: err.message,\n variant: \"destructive\"\n });\n } finally {\n setConnecting(false);\n }\n };\n\n // Edit credentials\n const handleEditCredentials = (debtor: MergedDebtor) => {\n setDebtorToEdit(debtor);\n setEditCredentialsOpen(true);\n };\n\n // Update credentials\n const handleUpdateCredentials = async (username: string, password: string) => {\n if (!orchestrationService || !portalductCompany || !factorcloudClient || !debtorToEdit?.connection) return;\n\n try {\n setUpdatingCredentials(true);\n const pd = orchestrationService.getPortalDuctAPI();\n\n const updatePayload: any = {};\n if (username) updatePayload.user_name = username;\n if (password) updatePayload.password = password;\n\n await pd.updateConnection(debtorToEdit.connection.connection_id, updatePayload);\n\n // Refresh merged debtors\n const updated = await orchestrationService.fetchMergedDebtors(factorcloudClient.id, portalductCompany.company_id);\n setMergedDebtors(updated);\n\n setEditCredentialsOpen(false);\n setDebtorToEdit(null);\n toast({ title: \"Credentials updated\", description: `Updated credentials for ${debtorToEdit.debtorName}.` });\n } catch (error) {\n console.error(\"Update credentials failed\", error);\n const err = error instanceof Error ? error : new Error(\"Unable to update credentials.\");\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n setSyncStep(\"error\");\n setSyncError(err.message);\n }\n\n toast({ title: \"Update failed\", description: err.message, variant: \"destructive\" });\n } finally {\n setUpdatingCredentials(false);\n }\n };\n\n // Toggle activation status\n const handleToggleActivation = async (debtor: MergedDebtor) => {\n if (!orchestrationService || !portalductCompany || !factorcloudClient || !debtor.connection) return;\n\n const isDeactivated = debtor.status === \"deactivated\";\n const action = isDeactivated ? \"activate\" : \"deactivate\";\n\n try {\n setTogglingDebtorId(debtor.factorcloudDebtorId);\n const pd = orchestrationService.getPortalDuctAPI();\n\n if (isDeactivated) {\n await pd.activateConnection(debtor.connection.connection_id);\n } else {\n await pd.deactivateConnection(debtor.connection.connection_id);\n }\n\n // Refresh merged debtors\n const updated = await orchestrationService.fetchMergedDebtors(factorcloudClient.id, portalductCompany.company_id);\n setMergedDebtors(updated);\n\n // Switch to appropriate tab\n setActiveDebtorTab(isDeactivated ? \"connected\" : \"deactivated\");\n\n toast({\n title: `Connection ${action}d`,\n description: `${debtor.debtorName} connection has been ${action}d.`\n });\n } catch (error) {\n console.error(`Failed to ${action} connection`, error);\n const err =\n error instanceof Error\n ? error\n : new Error(`Unable to ${action} connection.`);\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n setSyncStep(\"error\");\n setSyncError(err.message);\n }\n\n toast({\n title: `Failed to ${action}`,\n description: err.message,\n variant: \"destructive\"\n });\n } finally {\n setTogglingDebtorId(null);\n }\n };\n\n // Handle sync debtor\n const handleSyncDebtor = async (debtor: MergedDebtor) => {\n if (!debtor.connection) {\n toast({\n title: \"Cannot Sync\",\n description: `${debtor.debtorName} is not connected to a portal`,\n variant: \"destructive\",\n });\n return;\n }\n\n const service = orchestrationService;\n if (!service) {\n toast({\n title: \"Service Not Ready\",\n description: \"PortalDuct service is not available yet.\",\n variant: \"destructive\",\n });\n return;\n }\n\n setSyncingDebtorId(debtor.factorcloudDebtorId);\n\n const timeoutId = window.setTimeout(() => {\n setSyncingDebtorId(null);\n setSyncTimeouts((prev) => {\n const next = new Map(prev);\n next.delete(debtor.factorcloudDebtorId);\n return next;\n });\n }, 15 * 60 * 1000);\n\n setSyncTimeouts((prev) => {\n const next = new Map(prev);\n next.set(debtor.factorcloudDebtorId, timeoutId);\n return next;\n });\n\n try {\n const result = await service.triggerConnectionSync(debtor.connection.connection_id);\n\n const timestamp = new Date().toISOString();\n\n setMergedDebtors((prev) => prev.map((item) => item.factorcloudDebtorId === debtor.factorcloudDebtorId\n ? {\n ...item,\n lastSync: timestamp,\n lastSyncSummary: {\n processed: result.processed,\n synced: result.synced,\n failed: result.failed,\n timestamp,\n },\n }\n : item));\n\n setSyncingDebtorId(null);\n const timeout = syncTimeouts.get(debtor.factorcloudDebtorId);\n if (timeout !== undefined) {\n window.clearTimeout(timeout);\n }\n setSyncTimeouts((prev) => {\n const next = new Map(prev);\n next.delete(debtor.factorcloudDebtorId);\n return next;\n });\n\n toast({\n title: result.failed > 0 ? \"Sync Completed with Warnings\" : \"Sync Completed\",\n description: `Processed ${result.processed} records. Synced ${result.synced}. Failed ${result.failed}.`,\n });\n } catch (error) {\n setSyncingDebtorId(null);\n\n const timeoutId = syncTimeouts.get(debtor.factorcloudDebtorId);\n if (timeoutId) {\n window.clearTimeout(timeoutId);\n setSyncTimeouts((prev) => {\n const next = new Map(prev);\n next.delete(debtor.factorcloudDebtorId);\n return next;\n });\n }\n\n console.error(\"Sync failed\", error);\n toast({\n title: \"Sync Failed\",\n description: error instanceof Error ? error.message : `Unable to sync ${debtor.debtorName}`,\n variant: \"destructive\",\n });\n }\n };\n\n const handleVerifyDebtor = async (debtor: MergedDebtor) => {\n if (!debtor.connection) {\n toast({\n title: \"Cannot Verify\",\n description: `${debtor.debtorName} is not connected to a portal`,\n variant: \"destructive\",\n });\n return;\n }\n\n const service = orchestrationService;\n if (!service) {\n toast({\n title: \"Service Not Ready\",\n description: \"PortalDuct service is not available yet.\",\n variant: \"destructive\",\n });\n return;\n }\n\n setVerifyingDebtorId(debtor.factorcloudDebtorId);\n\n const timeoutId = window.setTimeout(() => {\n setVerifyingDebtorId(null);\n setVerifyTimeouts((prev) => {\n const next = new Map(prev);\n next.delete(debtor.factorcloudDebtorId);\n return next;\n });\n }, 15 * 60 * 1000);\n\n setVerifyTimeouts((prev) => {\n const next = new Map(prev);\n next.set(debtor.factorcloudDebtorId, timeoutId);\n return next;\n });\n\n try {\n const result = await service.triggerConnectionVerification(debtor.connection.connection_id);\n\n const timestamp = new Date().toISOString();\n\n setMergedDebtors((prev) => prev.map((item) => item.factorcloudDebtorId === debtor.factorcloudDebtorId\n ? {\n ...item,\n lastVerificationSummary: {\n processed: result.processed,\n synced: result.synced,\n failed: result.failed,\n timestamp,\n },\n }\n : item));\n\n setVerifyingDebtorId(null);\n const timeout = verifyTimeouts.get(debtor.factorcloudDebtorId);\n if (timeout !== undefined) {\n window.clearTimeout(timeout);\n }\n setVerifyTimeouts((prev) => {\n const next = new Map(prev);\n next.delete(debtor.factorcloudDebtorId);\n return next;\n });\n\n toast({\n title: result.failed > 0 ? \"Verification Completed with Warnings\" : \"Verification Completed\",\n description: `Processed ${result.processed} records. Verified ${result.synced}. Failed ${result.failed}.`,\n });\n } catch (error) {\n setVerifyingDebtorId(null);\n\n const timeoutId = verifyTimeouts.get(debtor.factorcloudDebtorId);\n if (timeoutId) {\n window.clearTimeout(timeoutId);\n setVerifyTimeouts((prev) => {\n const next = new Map(prev);\n next.delete(debtor.factorcloudDebtorId);\n return next;\n });\n }\n\n console.error(\"Verification failed\", error);\n toast({\n title: \"Verification Failed\",\n description: error instanceof Error ? error.message : `Unable to verify ${debtor.debtorName}`,\n variant: \"destructive\",\n });\n }\n };\n\n return (\n <>\n {/* Trigger Button or Custom Trigger */}\n {trigger ? (\n <div\n onClick={() => {\n if (isCustomerActive === true) {\n handleAutoSync();\n } else {\n setShowInterestModal(true);\n }\n }}\n style={{ cursor: \"pointer\" }}\n >\n {trigger}\n </div>\n ) : (\n <Button\n onClick={() => {\n if (isCustomerActive === true) {\n handleAutoSync();\n } else {\n setShowInterestModal(true);\n }\n }}\n >\n {loading\n ? \"Loading...\"\n : customerStatusLoading\n ? \"Checking Access...\"\n : \"Sync Invoices\"}\n </Button>\n )}\n\n {/* Modals */}\n <InterestSyncModal\n open={showInterestModal}\n onOpenChange={setShowInterestModal}\n />\n\n <SyncProgressModal\n open={showSyncModal}\n onOpenChange={setShowSyncModal}\n currentStep={syncStep}\n error={syncError}\n clients={availableClients}\n debtors={mergedDebtors}\n selectedDebtor={selectedDebtor}\n selectedClient={factorcloudClient}\n onSelectClient={handleClientSelection}\n onSelectDebtor={handleDebtorSelection}\n onConnectDebtor={requestConnectDebtor}\n onEditCredentials={handleEditCredentials}\n onChangePortal={requestChangePortal}\n onToggleActivation={handleToggleActivation}\n onSyncDebtor={handleSyncDebtor}\n onVerifyDebtor={handleVerifyDebtor}\n togglingDebtorId={togglingDebtorId}\n syncingDebtorId={syncingDebtorId}\n verifyingDebtorId={verifyingDebtorId}\n allowBackToClientSelection={!configuredClientId}\n onBackToClientSelection={() => setSyncStep(\"selecting-client\")}\n activeTab={activeDebtorTab}\n onActiveTabChange={setActiveDebtorTab}\n />\n\n <RequestPortalModal\n open={requestPortalOpen}\n onOpenChange={setRequestPortalOpen}\n loading={creatingPortal}\n onSubmit={handleCreatePortal}\n />\n\n <ConnectDebtorModal\n open={connectOpen}\n onOpenChange={handleConnectModalClose}\n debtor={debtorToConnect}\n availablePortals={availablePortals}\n loadingPortals={loadingPortals}\n loading={connecting}\n isChangingPortal={isChangingPortal}\n onConnect={handlePerformConnect}\n onRequestNewPortal={handleRequestNewPortal}\n />\n\n <UpdateCredentialsModal\n open={editCredentialsOpen}\n onOpenChange={setEditCredentialsOpen}\n debtor={debtorToEdit}\n loading={updatingCredentials}\n onUpdate={handleUpdateCredentials}\n />\n </>\n );\n};","import { useState, useEffect } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { useToast } from \"@/hooks/use-toast\";\nimport { useCustomerStatus } from \"@/hooks/use-customer-status\";\nimport { \n Search, Clock, Edit2, Building, DollarSign, CreditCard, \n RefreshCw, BookOpen, Calculator, FileText\n} from \"lucide-react\";\nimport { SDKConfig, isConfigComplete } from \"@/types/config\";\nimport { FactorCloudClient } from \"@/types/factorcloud\";\nimport { PortalDuctCompany } from \"@/types/portalduct\";\nimport { MergedDebtor } from \"@/types/merged\";\nimport { DataOrchestrationService } from \"@/services/orchestration\";\nimport { PortalDuctAPIError } from \"@/api/portalduct\";\nimport { UpdateCredentialsModal } from \"./UpdateCredentialsModal\";\nimport { SyncProgressModal, SyncStep } from \"./SyncProgressModal\";\nimport { ConnectDebtorModal } from \"./ConnectDebtorModal\";\nimport { RequestPortalModal } from \"./RequestPortalModal\";\nimport { InterestSyncModal } from \"./InterestSyncModal\";\nimport { PortalMapping } from \"@/types/portalduct\";\n\ninterface PortalIntegrationProps {\n config: SDKConfig;\n onTokenExpired?: (service: 'factorcloud' | 'portalduct') => void;\n}\n\nexport const PortalIntegration = ({ config, onTokenExpired }: PortalIntegrationProps) => {\n // Orchestration Service State\n const [orchestrationService, setOrchestrationService] = useState<DataOrchestrationService | null>(null);\n\n // Client Selection State\n const [factorcloudClient, setFactorcloudClient] = useState<FactorCloudClient | null>(null);\n const [portalductCompany, setPortalductCompany] = useState<PortalDuctCompany | null>(null);\n const [showClientSelectionModal, setShowClientSelectionModal] = useState(false);\n const [availableClients, setAvailableClients] = useState<FactorCloudClient[]>([]);\n\n // Debtor & Connection State\n const [mergedDebtors, setMergedDebtors] = useState<MergedDebtor[]>([]);\n const [selectedDebtor, setSelectedDebtor] = useState<MergedDebtor | null>(null);\n const [loading, setLoading] = useState(false);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n // Portal & Connection State\n const [availablePortals, setAvailablePortals] = useState<PortalMapping[]>([]);\n const [loadingPortals, setLoadingPortals] = useState(false);\n const [connectOpen, setConnectOpen] = useState(false);\n const [debtorToConnect, setDebtorToConnect] = useState<MergedDebtor | null>(null);\n const [connecting, setConnecting] = useState(false);\n const [isChangingPortal, setIsChangingPortal] = useState(false);\n \n // Request Portal Modal State\n const [requestPortalOpen, setRequestPortalOpen] = useState(false);\n // NEW: Interest Sync Modal State\n const [showInterestModal, setShowInterestModal] = useState(false);\n const [creatingPortal, setCreatingPortal] = useState(false);\n \n // Edit Credentials State\n const [editCredentialsOpen, setEditCredentialsOpen] = useState(false);\n const [debtorToEdit, setDebtorToEdit] = useState<MergedDebtor | null>(null);\n const [updatingCredentials, setUpdatingCredentials] = useState(false);\n \n // Toggle Activation State\n const [togglingDebtorId, setTogglingDebtorId] = useState<string | null>(null);\n \n // Sync State\n const [syncingDebtorId, setSyncingDebtorId] = useState<string | null>(null);\n const [syncTimeouts, setSyncTimeouts] = useState<Map<string, number>>(new Map());\n\n // Verification State\n const [verifyingDebtorId, setVerifyingDebtorId] = useState<string | null>(null);\n const [verifyTimeouts, setVerifyTimeouts] = useState<Map<string, number>>(new Map());\n \n // Sync Progress State\n const [showSyncModal, setShowSyncModal] = useState(false);\n const [syncStep, setSyncStep] = useState<SyncStep>(\"idle\");\n const [syncError, setSyncError] = useState<string>();\n const [activeDebtorTab, setActiveDebtorTab] = useState<MergedDebtor[\"status\"]>(\"not_connected\");\n\n const { toast } = useToast();\n const customerStatus = useCustomerStatus(config);\n const runtimeConfig =\n customerStatus.resolvedConfig ?? (isConfigComplete(config) ? config : null);\n const configuredClientId =\n runtimeConfig?.factorcloud?.client_id ?? config?.factorcloud?.client_id;\n const isCustomerActive = customerStatus.isActive;\n const customerStatusLoading = customerStatus.loading;\n const customerStatusError = customerStatus.error;\n\n // Initialize orchestration service when config is provided\n useEffect(() => {\n if (runtimeConfig && isConfigComplete(runtimeConfig)) {\n const service = new DataOrchestrationService(runtimeConfig);\n setOrchestrationService(service);\n } else {\n setOrchestrationService(null);\n }\n }, [runtimeConfig]);\n\n // Cleanup sync timeouts on unmount\n useEffect(() => {\n return () => {\n syncTimeouts.forEach((timeoutId) => {\n window.clearTimeout(timeoutId);\n });\n verifyTimeouts.forEach((timeoutId) => {\n window.clearTimeout(timeoutId);\n });\n };\n }, [syncTimeouts, verifyTimeouts]);\n\n\n // Load Data Handler\n const loadDebtorData = async (service?: DataOrchestrationService) => {\n const svc = service || orchestrationService;\n if (!svc || !runtimeConfig) return;\n\n setLoading(true);\n try {\n // If no client_id configured, show client selection in sync modal\n if (!runtimeConfig.factorcloud?.client_id) {\n setSyncStep(\"loading-clients\");\n const clients = await svc.getFactorCloudClients();\n setAvailableClients(clients);\n setSyncStep(\"selecting-client\");\n return;\n }\n\n setSyncStep(\"loading-data\");\n\n // Get or create client\n const fcClient = await svc.getFactorCloudClient(\n runtimeConfig.factorcloud.client_id\n );\n setFactorcloudClient(fcClient);\n\n // Ensure PortalDuct company exists\n const pdCompany = await svc.ensurePortalDuctCompany(fcClient);\n setPortalductCompany(pdCompany);\n\n // Fetch merged debtors\n const debtors = await svc.fetchMergedDebtors(fcClient.id, pdCompany.company_id);\n setMergedDebtors(debtors);\n\n setSyncStep(\"selecting-debtor\");\n\n toast({\n title: \"Data Loaded\",\n description: `Loaded ${debtors.length} debtors. Select a debtor to continue.`,\n });\n } catch (error) {\n console.error(\"Failed to load data:\", error);\n const err = error instanceof Error ? error : new Error(\"An error occurred.\");\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n }\n\n setSyncStep(\"error\");\n setSyncError(err.message);\n\n toast({\n title: \"Failed to Load Data\",\n description: err.message,\n variant: \"destructive\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n // Auto-Sync Handler\n const handleAutoSync = async () => {\n if (!orchestrationService) {\n toast({\n title: \"Service Not Ready\",\n description: \"Please wait for the service to initialize.\",\n variant: \"destructive\",\n });\n return;\n }\n\n if (customerStatusLoading) {\n toast({\n title: \"Checking Customer Status\",\n description: \"Please wait while we confirm your FactorCloud account is active.\",\n });\n return;\n }\n\n if (isCustomerActive !== true) {\n toast({\n title: \"Sync Unavailable\",\n description:\n customerStatusError?.message ??\n \"This FactorCloud account is not active yet.\",\n variant: \"destructive\",\n });\n return;\n }\n\n setShowSyncModal(true);\n setSyncStep(\"checking-config\");\n setSyncError(undefined);\n\n try {\n await loadDebtorData(orchestrationService);\n } catch (error) {\n setSyncStep(\"error\");\n setSyncError(error instanceof Error ? error.message : \"An unexpected error occurred\");\n }\n };\n\n // Client Selection Handler\n const handleClientSelection = async (client: FactorCloudClient) => {\n setFactorcloudClient(client);\n\n if (!orchestrationService) return;\n\n setSyncStep(\"loading-data\");\n setLoading(true);\n try {\n const pdCompany = await orchestrationService.ensurePortalDuctCompany(client);\n setPortalductCompany(pdCompany);\n\n const debtors = await orchestrationService.fetchMergedDebtors(client.id, pdCompany.company_id);\n setMergedDebtors(debtors);\n\n setSyncStep(\"selecting-debtor\");\n toast({\n title: \"Client Selected\",\n description: `Loaded ${debtors.length} debtors for ${client.companyName}. Select a debtor to continue.`,\n });\n } catch (error) {\n console.error(\"Failed to load client data:\", error);\n const err =\n error instanceof Error ? error : new Error(\"Failed to load client data\");\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n }\n\n setSyncStep(\"error\");\n setSyncError(err.message);\n toast({\n title: \"Failed to load client data\",\n description: err.message,\n variant: \"destructive\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n // Debtor Selection Handler\n const handleDebtorSelection = async (debtor: MergedDebtor) => {\n setSelectedDebtor(debtor);\n setSyncStep(\"review\");\n toast({\n title: \"Debtor Selected\",\n description: `${debtor.debtorName} selected. Review invoices in the tabs below.`,\n });\n };\n\n // Request connect from modal flow - fetch portals and open modal\n const requestConnectDebtor = async (debtor: MergedDebtor) => {\n if (!orchestrationService) return;\n \n setDebtorToConnect(debtor);\n setIsChangingPortal(false);\n setLoadingPortals(true);\n setShowSyncModal(false); // Close sync modal\n setConnectOpen(true);\n \n try {\n const pd = orchestrationService.getPortalDuctAPI();\n const portals = await pd.getPortalMappings();\n setAvailablePortals(portals);\n } catch (error) {\n console.error(\"Failed to fetch portals\", error);\n const err = error instanceof Error ? error : new Error(\"Unable to fetch portals.\");\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n }\n\n setSyncStep(\"error\");\n setSyncError(err.message);\n toast({\n title: \"Failed to fetch portals\",\n description: err.message,\n variant: \"destructive\"\n });\n setShowSyncModal(true); // Reopen on error\n setConnectOpen(false);\n } finally {\n setLoadingPortals(false);\n }\n };\n\n // Request change portal - fetch portals and open modal\n const requestChangePortal = async (debtor: MergedDebtor) => {\n if (!orchestrationService) return;\n \n setDebtorToConnect(debtor);\n setIsChangingPortal(true);\n setLoadingPortals(true);\n setShowSyncModal(false); // Close sync modal\n setConnectOpen(true);\n \n try {\n const pd = orchestrationService.getPortalDuctAPI();\n const portals = await pd.getPortalMappings();\n setAvailablePortals(portals);\n } catch (error) {\n console.error(\"Failed to fetch portals\", error);\n const err = error instanceof Error ? error : new Error(\"Unable to fetch portals.\");\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n }\n\n setSyncStep(\"error\");\n setSyncError(err.message);\n toast({\n title: \"Failed to fetch portals\",\n description: err.message,\n variant: \"destructive\"\n });\n setShowSyncModal(true); // Reopen on error\n setConnectOpen(false);\n } finally {\n setLoadingPortals(false);\n }\n };\n\n // Handle connect modal close - reopen sync modal\n const handleConnectModalClose = (open: boolean) => {\n setConnectOpen(open);\n if (!open) {\n setShowSyncModal(true); // Reopen sync modal when closing connect modal\n }\n };\n\n // Request new portal from ConnectDebtorModal\n const handleRequestNewPortal = () => {\n setConnectOpen(false);\n setRequestPortalOpen(true);\n };\n\n // Create new portal mapping\n const handleCreatePortal = async (name: string, host: string) => {\n if (!orchestrationService || !runtimeConfig?.portalduct?.customer_id) return;\n\n try {\n setCreatingPortal(true);\n const pd = orchestrationService.getPortalDuctAPI();\n const newPortal = await pd.createPortalMapping({\n customer_id: runtimeConfig.portalduct.customer_id,\n name,\n host,\n });\n \n // Refresh portals list\n const portals = await pd.getPortalMappings();\n setAvailablePortals(portals);\n \n setRequestPortalOpen(false);\n setConnectOpen(true);\n \n toast({ \n title: \"Portal created\", \n description: `${newPortal.name} has been added to your portals.` \n });\n } catch (error) {\n console.error(\"Failed to create portal\", error);\n const err = error instanceof Error ? error : new Error(\"Unable to create portal.\");\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n }\n\n setSyncStep(\"error\");\n setSyncError(err.message);\n\n toast({\n title: \"Failed to create portal\",\n description: err.message,\n variant: \"destructive\"\n });\n } finally {\n setCreatingPortal(false);\n }\n };\n\n // Perform actual connection creation or update\n const handlePerformConnect = async (portalId: string, username: string, password: string) => {\n if (!orchestrationService || !portalductCompany || !factorcloudClient || !debtorToConnect) {\n toast({ title: \"Cannot connect\", description: \"Missing context to create connection.\", variant: \"destructive\" });\n return;\n }\n\n try {\n setConnecting(true);\n const pd = orchestrationService.getPortalDuctAPI();\n \n const portal = availablePortals.find(p => p.portal_id === portalId);\n \n if (isChangingPortal && debtorToConnect.connection) {\n // Update existing connection with new portal\n await pd.updateConnection(debtorToConnect.connection.connection_id, {\n portal_id: portalId,\n user_name: username,\n password,\n });\n toast({ title: \"Portal changed\", description: `${debtorToConnect.debtorName} portal updated to ${portal?.name}.` });\n } else {\n // Create new connection\n await pd.createConnection({\n company_id: portalductCompany.company_id,\n portal_id: portalId,\n user_name: username,\n password,\n tags: {\n factorcloud_id: factorcloudClient.id,\n factorcloud_debtor_id: debtorToConnect.factorcloudDebtorId,\n },\n });\n toast({ title: \"Connection created\", description: `${debtorToConnect.debtorName} is now connected (pending).` });\n }\n\n // Refresh merged debtors\n const updated = await orchestrationService.fetchMergedDebtors(factorcloudClient.id, portalductCompany.company_id);\n setMergedDebtors(updated);\n\n setConnectOpen(false);\n setShowSyncModal(true); // Reopen sync modal after successful connection\n setActiveDebtorTab(\"connected\"); // Always go to connected tab\n setDebtorToConnect(null);\n setIsChangingPortal(false);\n } catch (error) {\n console.error(isChangingPortal ? \"Change portal failed\" : \"Create connection failed\", error);\n const err =\n error instanceof Error\n ? error\n : new Error(\n `Unable to ${isChangingPortal ? \"change portal\" : \"create connection\"}.`\n );\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n setSyncStep(\"error\");\n setSyncError(err.message);\n }\n\n toast({\n title: isChangingPortal ? \"Change portal failed\" : \"Connection failed\",\n description: err.message,\n variant: \"destructive\"\n });\n } finally {\n setConnecting(false);\n }\n };\n\n // Edit credentials\n const handleEditCredentials = (debtor: MergedDebtor) => {\n setDebtorToEdit(debtor);\n setEditCredentialsOpen(true);\n };\n\n // Update credentials\n const handleUpdateCredentials = async (username: string, password: string) => {\n if (!orchestrationService || !portalductCompany || !factorcloudClient || !debtorToEdit?.connection) return;\n\n try {\n setUpdatingCredentials(true);\n const pd = orchestrationService.getPortalDuctAPI();\n \n const updatePayload: any = {};\n if (username) updatePayload.user_name = username;\n if (password) updatePayload.password = password;\n \n await pd.updateConnection(debtorToEdit.connection.connection_id, updatePayload);\n\n // Refresh merged debtors\n const updated = await orchestrationService.fetchMergedDebtors(factorcloudClient.id, portalductCompany.company_id);\n setMergedDebtors(updated);\n\n setEditCredentialsOpen(false);\n setDebtorToEdit(null);\n toast({ title: \"Credentials updated\", description: `Updated credentials for ${debtorToEdit.debtorName}.` });\n } catch (error) {\n console.error(\"Update credentials failed\", error);\n const err = error instanceof Error ? error : new Error(\"Unable to update credentials.\");\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n setSyncStep(\"error\");\n setSyncError(err.message);\n }\n\n toast({ title: \"Update failed\", description: err.message, variant: \"destructive\" });\n } finally {\n setUpdatingCredentials(false);\n }\n };\n\n // Toggle activation status\n const handleToggleActivation = async (debtor: MergedDebtor) => {\n if (!orchestrationService || !portalductCompany || !factorcloudClient || !debtor.connection) return;\n\n const isDeactivated = debtor.status === \"deactivated\";\n const action = isDeactivated ? \"activate\" : \"deactivate\";\n\n try {\n setTogglingDebtorId(debtor.factorcloudDebtorId);\n const pd = orchestrationService.getPortalDuctAPI();\n \n if (isDeactivated) {\n await pd.activateConnection(debtor.connection.connection_id);\n } else {\n await pd.deactivateConnection(debtor.connection.connection_id);\n }\n\n // Refresh merged debtors\n const updated = await orchestrationService.fetchMergedDebtors(factorcloudClient.id, portalductCompany.company_id);\n setMergedDebtors(updated);\n\n // Switch to appropriate tab\n setActiveDebtorTab(isDeactivated ? \"connected\" : \"deactivated\");\n\n toast({ \n title: `Connection ${action}d`, \n description: `${debtor.debtorName} connection has been ${action}d.` \n });\n } catch (error) {\n console.error(`Failed to ${action} connection`, error);\n const err =\n error instanceof Error\n ? error\n : new Error(`Unable to ${action} connection.`);\n\n if (\n error instanceof PortalDuctAPIError &&\n error.status === 401 &&\n error.type === \"authentication_error\"\n ) {\n onTokenExpired?.(\"portalduct\");\n setSyncStep(\"error\");\n setSyncError(err.message);\n }\n\n toast({\n title: `Failed to ${action}`,\n description: err.message,\n variant: \"destructive\"\n });\n } finally {\n setTogglingDebtorId(null);\n }\n };\n\n // Handle sync debtor\n const handleSyncDebtor = async (debtor: MergedDebtor) => {\n // Validate connection exists\n if (!debtor.connection) {\n toast({\n title: \"Cannot Sync\",\n description: `${debtor.debtorName} is not connected to a portal`,\n variant: \"destructive\",\n });\n return;\n }\n\n const service = orchestrationService;\n if (!service) {\n toast({\n title: \"Service Not Ready\",\n description: \"PortalDuct service is not available yet.\",\n variant: \"destructive\",\n });\n return;\n }\n\n setSyncingDebtorId(debtor.factorcloudDebtorId);\n\n // Set 15 minute timeout for UI state\n const timeoutId = window.setTimeout(() => {\n setSyncingDebtorId(null);\n setSyncTimeouts((prev) => {\n const next = new Map(prev);\n next.delete(debtor.factorcloudDebtorId);\n return next;\n });\n }, 15 * 60 * 1000); // 15 minutes\n \n setSyncTimeouts((prev) => {\n const next = new Map(prev);\n next.set(debtor.factorcloudDebtorId, timeoutId);\n return next;\n });\n\n try {\n // Call the webhook sync API\n const result = await service.triggerConnectionSync(\n debtor.connection.connection_id\n );\n\n const timestamp = new Date().toISOString();\n\n setMergedDebtors((prev) =>\n prev.map((item) =>\n item.factorcloudDebtorId === debtor.factorcloudDebtorId\n ? {\n ...item,\n lastSync: timestamp,\n lastSyncSummary: {\n processed: result.processed,\n synced: result.synced,\n failed: result.failed,\n timestamp,\n },\n }\n : item\n )\n );\n\n setSyncingDebtorId(null);\n const timeout = syncTimeouts.get(debtor.factorcloudDebtorId);\n if (timeout !== undefined) {\n window.clearTimeout(timeout);\n }\n setSyncTimeouts((prev) => {\n const next = new Map(prev);\n next.delete(debtor.factorcloudDebtorId);\n return next;\n });\n\n toast({\n title: result.failed > 0 ? \"Sync Completed with Warnings\" : \"Sync Completed\",\n description: `Processed ${result.processed} records. Synced ${result.synced}. Failed ${result.failed}.`,\n });\n } catch (error) {\n // Clear the syncing state on error\n setSyncingDebtorId(null);\n\n // Clear the timeout\n const timeoutId = syncTimeouts.get(debtor.factorcloudDebtorId);\n if (timeoutId) {\n window.clearTimeout(timeoutId);\n setSyncTimeouts((prev) => {\n const next = new Map(prev);\n next.delete(debtor.factorcloudDebtorId);\n return next;\n });\n }\n \n console.error(\"Sync failed\", error);\n toast({\n title: \"Sync Failed\",\n description: error instanceof Error ? error.message : `Unable to sync ${debtor.debtorName}`,\n variant: \"destructive\",\n });\n }\n };\n\n const handleVerifyDebtor = async (debtor: MergedDebtor) => {\n if (!debtor.connection) {\n toast({\n title: \"Cannot Verify\",\n description: `${debtor.debtorName} is not connected to a portal`,\n variant: \"destructive\",\n });\n return;\n }\n\n const service = orchestrationService;\n if (!service) {\n toast({\n title: \"Service Not Ready\",\n description: \"PortalDuct service is not available yet.\",\n variant: \"destructive\",\n });\n return;\n }\n\n setVerifyingDebtorId(debtor.factorcloudDebtorId);\n\n const timeoutId = window.setTimeout(() => {\n setVerifyingDebtorId(null);\n setVerifyTimeouts((prev) => {\n const next = new Map(prev);\n next.delete(debtor.factorcloudDebtorId);\n return next;\n });\n }, 15 * 60 * 1000);\n\n setVerifyTimeouts((prev) => {\n const next = new Map(prev);\n next.set(debtor.factorcloudDebtorId, timeoutId);\n return next;\n });\n\n try {\n const result = await service.triggerConnectionVerification(\n debtor.connection.connection_id\n );\n\n const timestamp = new Date().toISOString();\n\n setMergedDebtors((prev) =>\n prev.map((item) =>\n item.factorcloudDebtorId === debtor.factorcloudDebtorId\n ? {\n ...item,\n lastVerificationSummary: {\n processed: result.processed,\n synced: result.synced,\n failed: result.failed,\n timestamp,\n },\n }\n : item\n )\n );\n\n setVerifyingDebtorId(null);\n const timeout = verifyTimeouts.get(debtor.factorcloudDebtorId);\n if (timeout !== undefined) {\n window.clearTimeout(timeout);\n }\n setVerifyTimeouts((prev) => {\n const next = new Map(prev);\n next.delete(debtor.factorcloudDebtorId);\n return next;\n });\n\n toast({\n title:\n result.failed > 0\n ? \"Verification Completed with Warnings\"\n : \"Verification Completed\",\n description: `Processed ${result.processed} records. Verified ${result.synced}. Failed ${result.failed}.`,\n });\n } catch (error) {\n setVerifyingDebtorId(null);\n\n const timeoutId = verifyTimeouts.get(debtor.factorcloudDebtorId);\n if (timeoutId) {\n window.clearTimeout(timeoutId);\n setVerifyTimeouts((prev) => {\n const next = new Map(prev);\n next.delete(debtor.factorcloudDebtorId);\n return next;\n });\n }\n\n console.error(\"Verification failed\", error);\n toast({\n title: \"Verification Failed\",\n description:\n error instanceof Error\n ? error.message\n : `Unable to verify ${debtor.debtorName}`,\n variant: \"destructive\",\n });\n }\n };\n\n return (\n <div className=\"flex min-h-screen bg-background\">\n {/* Sidebar */}\n <aside className=\"w-80 bg-[hsl(220,30%,15%)] text-white flex flex-col\">\n {/* Logo */}\n <div className=\"p-6 border-b border-white/10\">\n <h1 className=\"text-2xl font-bold\">FACTORCLOUD</h1>\n <p className=\"text-sm text-white/60 mt-1\">SANDBOX</p>\n </div>\n\n {/* Navigation */}\n <nav className=\"flex-1 p-4 space-y-1\">\n <button className=\"w-full flex items-center gap-3 px-4 py-3 rounded-lg text-white/70 hover:bg-white/5 transition-colors\">\n <Clock className=\"w-5 h-5\" />\n <span>Dashboard</span>\n </button>\n <button className=\"w-full flex items-center gap-3 px-4 py-3 rounded-lg text-white/70 hover:bg-white/5 transition-colors\">\n <Building className=\"w-5 h-5\" />\n <span>Companies</span>\n </button>\n <button className=\"w-full flex items-center gap-3 px-4 py-3 rounded-lg text-white/70 hover:bg-white/5 transition-colors\">\n <Edit2 className=\"w-5 h-5\" />\n <span>Terms</span>\n </button>\n <button className=\"w-full flex items-center gap-3 px-4 py-3 rounded-lg bg-white/10 text-white\">\n <FileText className=\"w-5 h-5\" />\n <span>Invoices</span>\n </button>\n <button className=\"w-full flex items-center gap-3 px-4 py-3 rounded-lg text-white/70 hover:bg-white/5 transition-colors\">\n <DollarSign className=\"w-5 h-5\" />\n <span>Funding</span>\n </button>\n <button className=\"w-full flex items-center gap-3 px-4 py-3 rounded-lg text-white/70 hover:bg-white/5 transition-colors\">\n <CreditCard className=\"w-5 h-5\" />\n <span>Payments</span>\n </button>\n <button className=\"w-full flex items-center gap-3 px-4 py-3 rounded-lg text-white/70 hover:bg-white/5 transition-colors\">\n <RefreshCw className=\"w-5 h-5\" />\n <span>Chargebacks</span>\n </button>\n <button className=\"w-full flex items-center gap-3 px-4 py-3 rounded-lg text-white/70 hover:bg-white/5 transition-colors\">\n <BookOpen className=\"w-5 h-5\" />\n <span>Ledgers</span>\n </button>\n <button className=\"w-full flex items-center gap-3 px-4 py-3 rounded-lg text-white/70 hover:bg-white/5 transition-colors\">\n <Calculator className=\"w-5 h-5\" />\n <span>Accounting</span>\n </button>\n </nav>\n </aside>\n\n {/* Main Content */}\n <main className=\"flex-1 flex flex-col\">\n {/* Header */}\n <header className=\"border-b bg-background p-6\">\n <div className=\"flex items-center justify-between\">\n <h1 className=\"text-4xl font-bold\">Invoices</h1>\n <div className=\"flex items-center gap-3\">\n <Button variant=\"outline\">\n Export Invoices\n </Button>\n <Button\n variant=\"outline\"\n onClick={() => {\n if (isCustomerActive) {\n handleAutoSync(); // Existing sync workflow\n } else {\n setShowInterestModal(true); // NEW: open interest form modal\n }\n }}\n disabled={\n loading ||\n customerStatusLoading ||\n (isCustomerActive === true && !orchestrationService)\n }\n >\n {loading\n ? \"Loading...\"\n : customerStatusLoading\n ? \"Checking Access...\"\n : isCustomerActive === true\n ? \"Sync Invoices\"\n : \"Sync Unavailable\"}\n </Button>\n <Button className=\"bg-foreground text-background hover:bg-foreground/90\">\n Create Invoice\n </Button>\n </div>\n </div>\n </header>\n\n {/* Content */}\n <div className=\"flex-1 p-6\">\n {/* Status Tabs */}\n <Tabs defaultValue=\"pending\" className=\"w-full\">\n <TabsList className=\"bg-muted\">\n <TabsTrigger value=\"pending\">Pending</TabsTrigger>\n <TabsTrigger value=\"approved\">Approved</TabsTrigger>\n <TabsTrigger value=\"funded\">Funded</TabsTrigger>\n <TabsTrigger value=\"closed\">Closed</TabsTrigger>\n <TabsTrigger value=\"rejected\">Rejected</TabsTrigger>\n <TabsTrigger value=\"all\">All</TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"pending\" className=\"mt-6\">\n <div className=\"border rounded-lg p-12\">\n <div className=\"flex flex-col items-center justify-center text-center\">\n <div className=\"w-24 h-24 rounded-full bg-muted flex items-center justify-center mb-4\">\n <FileText className=\"w-12 h-12 text-muted-foreground\" />\n </div>\n <h3 className=\"text-2xl font-semibold mb-2\">No records in the table</h3>\n <p className=\"text-muted-foreground\">No records found</p>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"approved\" className=\"mt-6\">\n <div className=\"border rounded-lg p-12\">\n <div className=\"flex flex-col items-center justify-center text-center\">\n <div className=\"w-24 h-24 rounded-full bg-muted flex items-center justify-center mb-4\">\n <FileText className=\"w-12 h-12 text-muted-foreground\" />\n </div>\n <h3 className=\"text-2xl font-semibold mb-2\">No records in the table</h3>\n <p className=\"text-muted-foreground\">No records found</p>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"funded\" className=\"mt-6\">\n <div className=\"border rounded-lg p-12\">\n <div className=\"flex flex-col items-center justify-center text-center\">\n <div className=\"w-24 h-24 rounded-full bg-muted flex items-center justify-center mb-4\">\n <FileText className=\"w-12 h-12 text-muted-foreground\" />\n </div>\n <h3 className=\"text-2xl font-semibold mb-2\">No records in the table</h3>\n <p className=\"text-muted-foreground\">No records found</p>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"closed\" className=\"mt-6\">\n <div className=\"border rounded-lg p-12\">\n <div className=\"flex flex-col items-center justify-center text-center\">\n <div className=\"w-24 h-24 rounded-full bg-muted flex items-center justify-center mb-4\">\n <FileText className=\"w-12 h-12 text-muted-foreground\" />\n </div>\n <h3 className=\"text-2xl font-semibold mb-2\">No records in the table</h3>\n <p className=\"text-muted-foreground\">No records found</p>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"rejected\" className=\"mt-6\">\n <div className=\"border rounded-lg p-12\">\n <div className=\"flex flex-col items-center justify-center text-center\">\n <div className=\"w-24 h-24 rounded-full bg-muted flex items-center justify-center mb-4\">\n <FileText className=\"w-12 h-12 text-muted-foreground\" />\n </div>\n <h3 className=\"text-2xl font-semibold mb-2\">No records in the table</h3>\n <p className=\"text-muted-foreground\">No records found</p>\n </div>\n </div>\n </TabsContent>\n\n <TabsContent value=\"all\" className=\"mt-6\">\n <div className=\"border rounded-lg p-12\">\n <div className=\"flex flex-col items-center justify-center text-center\">\n <div className=\"w-24 h-24 rounded-full bg-muted flex items-center justify-center mb-4\">\n <FileText className=\"w-12 h-12 text-muted-foreground\" />\n </div>\n <h3 className=\"text-2xl font-semibold mb-2\">No records in the table</h3>\n <p className=\"text-muted-foreground\">No records found</p>\n </div>\n </div>\n </TabsContent>\n </Tabs>\n </div>\n </main>\n\n {/* Modals */}\n <SyncProgressModal\n open={showSyncModal}\n onOpenChange={setShowSyncModal}\n currentStep={syncStep}\n error={syncError}\n clients={availableClients}\n debtors={mergedDebtors}\n selectedDebtor={selectedDebtor}\n selectedClient={factorcloudClient}\n onSelectClient={handleClientSelection}\n onSelectDebtor={handleDebtorSelection}\n onConnectDebtor={requestConnectDebtor}\n onEditCredentials={handleEditCredentials}\n onChangePortal={requestChangePortal}\n onToggleActivation={handleToggleActivation}\n onSyncDebtor={handleSyncDebtor}\n onVerifyDebtor={handleVerifyDebtor}\n togglingDebtorId={togglingDebtorId}\n syncingDebtorId={syncingDebtorId}\n verifyingDebtorId={verifyingDebtorId}\n allowBackToClientSelection={!configuredClientId}\n onBackToClientSelection={() => setSyncStep(\"selecting-client\")}\n activeTab={activeDebtorTab}\n onActiveTabChange={setActiveDebtorTab}\n />\n\n <RequestPortalModal\n open={requestPortalOpen}\n onOpenChange={setRequestPortalOpen}\n loading={creatingPortal}\n onSubmit={handleCreatePortal}\n />\n\n <ConnectDebtorModal\n open={connectOpen}\n onOpenChange={handleConnectModalClose}\n debtor={debtorToConnect}\n availablePortals={availablePortals}\n loadingPortals={loadingPortals}\n loading={connecting}\n isChangingPortal={isChangingPortal}\n onConnect={handlePerformConnect}\n onRequestNewPortal={handleRequestNewPortal}\n />\n\n <UpdateCredentialsModal\n open={editCredentialsOpen}\n onOpenChange={setEditCredentialsOpen}\n debtor={debtorToEdit}\n loading={updatingCredentials}\n onUpdate={handleUpdateCredentials}\n />\n\n <InterestSyncModal\n open={showInterestModal}\n onOpenChange={(open) => !open && setShowInterestModal(false)}\n />\n </div>\n );\n};\n","import { useMemo, ReactNode, useEffect, useState } from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\n\nimport { SyncWorkflow, SyncWorkflowProps } from \"./SyncWorkflow\";\nimport { useCustomerStatus } from \"@/hooks/use-customer-status\";\n\ntype SyncWorkflowPropKeys =\n | \"config\"\n | \"onTokenExpired\"\n | \"onSyncComplete\"\n | \"onSyncError\"\n | \"autoStart\";\n\nexport interface SyncBannerProps\n extends Pick<SyncWorkflowProps, SyncWorkflowPropKeys> {\n queryClient?: QueryClient;\n\n // Display\n title?: ReactNode;\n badge?: ReactNode;\n ctaLabel?: ReactNode;\n icon?: ReactNode;\n\n // NEW\n variant?: \"full\" | \"compact\";\n theme?: \"light\" | \"dark\" | \"auto\";\n}\n\nexport const SyncBanner = ({\n config,\n queryClient,\n variant = \"full\",\n theme = \"auto\",\n\n title = \"Sync invoices automatically\",\n badge,\n ctaLabel = \"Sync Now\",\n\n //\n // UPDATED DEFAULT ICON WITH ORBIT GLOW\n //\n icon = (\n <div\n style={{\n position: \"relative\",\n width: \"26px\",\n height: \"26px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n }}\n >\n {/* orbit */}\n <span\n className=\"fc-icon-orbit\"\n style={{\n position: \"absolute\",\n top: \"-6px\",\n left: \"-6px\",\n width: \"38px\",\n height: \"38px\",\n borderRadius: \"50%\",\n pointerEvents: \"none\",\n }}\n />\n\n {/* inner circle */}\n <div\n style={{\n background: \"rgba(99,102,241,0.15)\",\n borderRadius: \"50%\",\n width: \"26px\",\n height: \"26px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <span style={{ color: \"#818cf8\", fontSize: \"14px\" }}>⚡</span>\n </div>\n </div>\n ),\n\n onTokenExpired,\n onSyncComplete,\n onSyncError,\n autoStart,\n }: SyncBannerProps) => {\n const resolvedQueryClient = useMemo(\n () => queryClient ?? new QueryClient(),\n [queryClient]\n );\n\n const customerStatus = useCustomerStatus(config);\n const [detectedTheme, setDetectedTheme] =\n useState<\"light\" | \"dark\">(\"light\");\n\n //\n // AUTO THEME DETECTION\n //\n useEffect(() => {\n if (theme !== \"auto\") {\n setDetectedTheme(theme);\n return;\n }\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const update = () => setDetectedTheme(mq.matches ? \"dark\" : \"light\");\n update();\n mq.addEventListener(\"change\", update);\n return () => mq.removeEventListener(\"change\", update);\n }, [theme]);\n\n if (customerStatus.loading) return null;\n\n const isDark = detectedTheme === \"dark\";\n\n //\n // TRIGGER BUTTON\n //\n const trigger = (\n <button\n style={{\n background:\n \"linear-gradient(90deg, rgba(99,102,241,1) 0%, rgba(79,70,229,1) 100%)\",\n color: \"white\",\n borderRadius: variant === \"compact\" ? \"14px\" : \"8px\",\n padding: variant === \"compact\" ? \"6px 14px\" : \"10px 18px\",\n fontSize: \"12px\",\n fontWeight: 600,\n cursor: \"pointer\",\n border: \"none\",\n whiteSpace: \"nowrap\",\n boxShadow: isDark\n ? \"0 4px 8px rgba(0,0,0,0.25)\"\n : \"0 3px 6px rgba(0,0,0,0.15)\",\n transition: \"transform 0.25s ease, opacity 0.2s\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.opacity = \"0.9\";\n e.currentTarget.style.transform = \"translateY(-1px)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.opacity = \"1\";\n e.currentTarget.style.transform = \"translateY(0px)\";\n }}\n >\n {ctaLabel}\n </button>\n );\n\n //\n // DEFAULT BADGE IF NOT PROVIDED\n //\n const DEFAULT_BADGE = (\n <span\n className=\"fc-enhanced-badge\"\n style={{\n fontSize: \"9px\",\n fontWeight: 700,\n textTransform: \"uppercase\",\n padding: \"2px 6px\",\n borderRadius: \"6px\",\n background: isDark\n ? \"rgba(99,102,241,0.22)\"\n : \"rgba(147,197,253,0.20)\",\n color: isDark ? \"#c7d2fe\" : \"#3b82f6\",\n border: isDark\n ? \"1px solid rgba(255,255,255,0.08)\"\n : \"1px solid rgba(59,130,246,0.15)\",\n position: \"relative\",\n overflow: \"hidden\",\n display: \"inline-block\",\n }}\n >\n NEW\n\n {/* Micro glitter */}\n <span\n className=\"sparkle\"\n style={{\n position: \"absolute\",\n top: \"0px\",\n right: \"-2px\",\n width: \"3px\",\n height: \"3px\",\n background: isDark ? \"white\" : \"#3b82f6\",\n borderRadius: \"50%\",\n opacity: 0,\n }}\n />\n <span\n className=\"sparkle\"\n style={{\n position: \"absolute\",\n top: \"4px\",\n right: \"6px\",\n width: \"2px\",\n height: \"2px\",\n background: isDark ? \"white\" : \"#3b82f6\",\n borderRadius: \"50%\",\n opacity: 0,\n }}\n />\n <span\n className=\"sparkle\"\n style={{\n position: \"absolute\",\n top: \"10px\",\n right: \"2px\",\n width: \"2px\",\n height: \"2px\",\n background: isDark ? \"white\" : \"#3b82f6\",\n borderRadius: \"50%\",\n opacity: 0,\n }}\n />\n <span\n className=\"sparkle\"\n style={{\n position: \"absolute\",\n top: \"7px\",\n right: \"10px\",\n width: \"3px\",\n height: \"3px\",\n background: isDark ? \"white\" : \"#3b82f6\",\n borderRadius: \"50%\",\n opacity: 0,\n }}\n />\n </span>\n );\n\n const badgeEl = badge ?? DEFAULT_BADGE;\n\n //\n // ANIMATIONS (including orbit glow)\n //\n const animations = (\n <style>{`\n @keyframes pulseGlow {\n 0% { box-shadow: ${\n isDark\n ? \"0 0 10px rgba(99,102,241,0.25)\"\n : \"0 0 8px rgba(99,102,241,0.15)\"\n }; }\n 50% { box-shadow: 0 0 16px rgba(99,102,241,0.4); }\n 100% { box-shadow: ${\n isDark\n ? \"0 0 10px rgba(99,102,241,0.25)\"\n : \"0 0 8px rgba(99,102,241,0.15)\"\n }; }\n }\n\n @keyframes fadeIn {\n from { opacity: 0; transform: translateY(4px); }\n to { opacity: 1; transform: translateY(0); }\n }\n\n @keyframes badgePop {\n 0% { transform: scale(0.85); opacity: 0; }\n 50% { transform: scale(1.15); opacity: 1; }\n 100% { transform: scale(1); }\n }\n .fc-enhanced-badge {\n animation: badgePop 0.45s cubic-bezier(0.18, 0.89, 0.32, 1.28);\n }\n\n .fc-enhanced-badge::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: -40%;\n width: 40%;\n height: 100%;\n background: linear-gradient(\n 120deg,\n transparent 0%,\n rgba(255,255,255,0.55) 50%,\n transparent 100%\n );\n transform: skewX(-20deg);\n opacity: 0;\n animation: shimmer 6s infinite ease-out;\n }\n\n @keyframes shimmer {\n 0% { opacity: 0; left: -40%; }\n 3% { opacity: 0.8; }\n 8% { left: 120%; opacity: 0; }\n 100% { opacity: 0; left: 120%; }\n }\n\n .fc-enhanced-badge:hover::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: -100%;\n width: 80%;\n height: 100%;\n background: linear-gradient(\n 120deg,\n rgba(255,255,255,0.0),\n rgba(255,255,255,0.6),\n rgba(255,255,255,0.0)\n );\n animation: hoverShine 0.6s ease-out;\n }\n @keyframes hoverShine {\n 0% { left: -100%; opacity: 0; }\n 30% { opacity: 1; }\n 100% { left: 140%; opacity: 0; }\n }\n\n .fc-enhanced-badge:hover .sparkle {\n opacity: 1;\n animation: sparkleFloat 1.1s ease-out forwards;\n }\n @keyframes sparkleFloat {\n 0% { transform: translateY(0) scale(0.5); opacity: 1; }\n 100% { transform: translateY(-7px) scale(1); opacity: 0; }\n }\n\n /* --------------------------------------------------------\n ICON GLOW ORBIT\n ---------------------------------------------------------*/\n .fc-icon-orbit {\n background: radial-gradient(\n circle,\n rgba(168,178,255,0.35) 0%,\n rgba(168,178,255,0.12) 40%,\n rgba(168,178,255,0.06) 60%,\n transparent 100%\n );\n opacity: 0.45;\n animation: orbitGlow 8s infinite ease-in-out;\n }\n\n @keyframes orbitGlow {\n 0% {\n transform: rotate(0deg) scale(1);\n opacity: 0.35;\n }\n 40% {\n transform: rotate(120deg) scale(1.05);\n opacity: 0.5;\n }\n 70% {\n transform: rotate(260deg) scale(0.98);\n opacity: 0.3;\n }\n 100% {\n transform: rotate(360deg) scale(1);\n opacity: 0.35;\n }\n }\n `}</style>\n );\n\n //\n // COMPACT VARIANT\n //\n if (variant === \"compact\") {\n const pillBg = isDark ? \"rgba(17,17,20,0.85)\" : \"rgba(255,255,255,0.85)\";\n const pillBorder = isDark\n ? \"1px solid rgba(255,255,255,0.08)\"\n : \"1px solid rgba(0,0,0,0.08)\";\n const pillShadow = isDark\n ? \"0 0 10px rgba(99,102,241,0.25)\"\n : \"0 0 8px rgba(99,102,241,0.15)\";\n const textColor = isDark ? \"#f9fafb\" : \"#111827\";\n\n return (\n <QueryClientProvider client={resolvedQueryClient}>\n {animations}\n\n <div\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n padding: \"6px 10px\",\n background: pillBg,\n border: pillBorder,\n borderRadius: \"20px\",\n backdropFilter: \"blur(4px)\",\n whiteSpace: \"nowrap\",\n cursor: \"pointer\",\n animation:\n \"pulseGlow 12s infinite ease-in-out, fadeIn 0.4s ease-out\",\n boxShadow: pillShadow,\n transition: \"transform 0.25s ease, box-shadow 0.25s ease\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.transform = \"translateY(-1px)\";\n e.currentTarget.style.boxShadow =\n \"0 0 16px rgba(99,102,241,0.45)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = \"translateY(0)\";\n e.currentTarget.style.boxShadow = pillShadow;\n }}\n >\n {icon}\n\n <span\n style={{\n fontWeight: 600,\n fontSize: \"13px\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n color: textColor,\n position: \"relative\",\n }}\n >\n {title}\n {badgeEl}\n </span>\n\n <SyncWorkflow\n config={config}\n trigger={trigger}\n onTokenExpired={onTokenExpired}\n onSyncComplete={onSyncComplete}\n onSyncError={onSyncError}\n autoStart={autoStart}\n customerStatus={customerStatus}\n />\n </div>\n </QueryClientProvider>\n );\n }\n\n //\n // FULL-WIDTH BANNER\n //\n return (\n <QueryClientProvider client={resolvedQueryClient}>\n {animations}\n\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n width: \"100%\",\n padding: \"16px\",\n background: \"transparent\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: \"16px\",\n padding: \"14px 20px\",\n borderRadius: \"14px\",\n background:\n \"linear-gradient(135deg, rgba(15,15,16,1) 0%, rgba(26,26,28,1) 100%)\",\n color: \"white\",\n border: \"1px solid rgba(255,255,255,0.1)\",\n boxShadow: \"0 0 15px rgba(0,0,0,0.45)\",\n maxWidth: \"640px\",\n width: \"100%\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"12px\",\n flex: \"1 1 auto\",\n minWidth: \"240px\",\n }}\n >\n {icon}\n\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\" }}>\n <p\n style={{\n fontWeight: 600,\n color: \"#f9fafb\",\n fontSize: \"15px\",\n margin: 0,\n }}\n >\n {title}\n </p>\n\n {badgeEl}\n </div>\n </div>\n\n <SyncWorkflow\n config={config}\n trigger={trigger}\n onTokenExpired={onTokenExpired}\n onSyncComplete={onSyncComplete}\n onSyncError={onSyncError}\n autoStart={autoStart}\n customerStatus={customerStatus}\n />\n </div>\n </div>\n </QueryClientProvider>\n );\n};","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground\",\n destructive:\n \"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n))\nAlert.displayName = \"Alert\"\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5\n ref={ref}\n className={cn(\"mb-1 font-medium leading-none tracking-tight\", className)}\n {...props}\n />\n))\nAlertTitle.displayName = \"AlertTitle\"\n\nconst AlertDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm [&_p]:leading-relaxed\", className)}\n {...props}\n />\n))\nAlertDescription.displayName = \"AlertDescription\"\n\nexport { Alert, AlertTitle, AlertDescription }\n","import { useState, useEffect } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\";\nimport { Alert, AlertDescription } from \"@/components/ui/alert\";\nimport { SDKConfig } from \"@/types/config\";\nimport { AlertCircle } from \"lucide-react\";\n\ninterface ConfigModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSave: (config: SDKConfig) => void;\n currentConfig?: Partial<SDKConfig>;\n}\n\nexport const ConfigModal = ({\n open,\n onOpenChange,\n onSave,\n currentConfig,\n}: ConfigModalProps) => {\n const [config, setConfig] = useState<Partial<SDKConfig>>({\n portalduct: {\n bearer_token: \"\",\n env_url: \"\",\n customer_id: \"\",\n webhook_bearer_token: \"\",\n },\n factorcloud: {\n factorId: \"\",\n bearer_token: \"\",\n env_url: \"\",\n client_id: undefined,\n },\n });\n\n useEffect(() => {\n if (currentConfig) {\n setConfig((prev) => ({\n portalduct: {\n ...prev.portalduct,\n ...currentConfig.portalduct,\n },\n factorcloud: {\n ...prev.factorcloud,\n ...currentConfig.factorcloud,\n },\n }));\n }\n }, [currentConfig]);\n\n const canSave = Boolean(\n config.factorcloud?.factorId && config.portalduct?.webhook_bearer_token\n );\n\n const handleSave = () => {\n if (!canSave) {\n return;\n }\n\n onSave(config as SDKConfig);\n onOpenChange(false);\n };\n\n const missingFields: string[] = [];\n if (!config.portalduct?.webhook_bearer_token)\n missingFields.push(\"PortalDuct Webhook Token\");\n if (!config.factorcloud?.factorId) missingFields.push(\"FactorCloud Factor ID\");\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-2xl max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>SDK Configuration (Testing)</DialogTitle>\n <DialogDescription>\n Configure your PortalDuct and FactorCloud credentials for testing.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-6 py-4\">\n {missingFields.length > 0 && (\n <Alert variant=\"destructive\">\n <AlertCircle className=\"h-4 w-4\" />\n <AlertDescription>\n Missing required fields: {missingFields.join(\", \")}\n </AlertDescription>\n </Alert>\n )}\n\n {/* PortalDuct Configuration */}\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold\">PortalDuct Configuration</h3>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"pd-webhook-token\">Webhook Token *</Label>\n <Input\n id=\"pd-webhook-token\"\n type=\"password\"\n value={config.portalduct?.webhook_bearer_token || \"\"}\n onChange={(e) =>\n setConfig({\n ...config,\n portalduct: {\n ...config.portalduct!,\n webhook_bearer_token: e.target.value,\n },\n })\n }\n placeholder=\"Enter PortalDuct Webhook Token\"\n />\n <p className=\"text-sm text-muted-foreground\">\n Used for triggering Supabase webhooks and fetching the latest SDK\n credentials.\n </p>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"pd-bearer-token\">API Bearer Token</Label>\n <Input\n id=\"pd-bearer-token\"\n type=\"password\"\n value={config.portalduct?.bearer_token || \"\"}\n readOnly\n placeholder=\"Auto-configured after status check\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"pd-env-url\">Environment URL</Label>\n <Input\n id=\"pd-env-url\"\n value={config.portalduct?.env_url || \"\"}\n readOnly\n placeholder=\"Auto-configured after status check\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"pd-customer-id\">Customer ID</Label>\n <Input\n id=\"pd-customer-id\"\n value={config.portalduct?.customer_id || \"\"}\n readOnly\n placeholder=\"Auto-configured after status check\"\n />\n </div>\n </div>\n\n {/* FactorCloud Configuration */}\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold\">FactorCloud Configuration</h3>\n \n <div className=\"space-y-2\">\n <Label htmlFor=\"fc-bearer-token\">Bearer Token</Label>\n <Input\n id=\"fc-bearer-token\"\n type=\"password\"\n value={config.factorcloud?.bearer_token || \"\"}\n readOnly\n placeholder=\"Auto-configured after status check\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"fc-factor-id\">Factor ID *</Label>\n <Input\n id=\"fc-factor-id\"\n value={config.factorcloud?.factorId || \"\"}\n onChange={(e) =>\n setConfig({\n ...config,\n factorcloud: {\n ...config.factorcloud!,\n factorId: e.target.value,\n },\n })\n }\n placeholder=\"Enter FactorCloud Factor ID\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"fc-env-url\">Environment URL</Label>\n <Input\n id=\"fc-env-url\"\n value={config.factorcloud?.env_url || \"\"}\n readOnly\n placeholder=\"Auto-configured after status check\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"fc-client-id\">Client ID (Optional)</Label>\n <Input\n id=\"fc-client-id\"\n value={config.factorcloud?.client_id || \"\"}\n onChange={(e) =>\n setConfig({\n ...config,\n factorcloud: {\n ...config.factorcloud!,\n client_id: e.target.value || undefined,\n },\n })\n }\n placeholder=\"Leave empty to select from list\"\n />\n <p className=\"text-sm text-muted-foreground\">\n If not provided, you'll select from available clients during sync\n </p>\n </div>\n </div>\n </div>\n\n <DialogFooter>\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n <Button onClick={handleSave} disabled={!canSave}>\n Save Configuration\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { useState } from \"react\";\nimport { FactorCloudClient } from \"@/types/factorcloud\";\nimport { Card } from \"@/components/ui/card\";\nimport { Building2, Mail, Hash } from \"lucide-react\";\n\ninterface ClientSelectionModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n clients: FactorCloudClient[];\n onSelect: (client: FactorCloudClient) => void;\n}\n\nexport function ClientSelectionModal({\n open,\n onOpenChange,\n clients,\n onSelect,\n}: ClientSelectionModalProps) {\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n const filteredClients = clients.filter(\n (client) =>\n client.companyName.toLowerCase().includes(searchQuery.toLowerCase()) ||\n client.email.toLowerCase().includes(searchQuery.toLowerCase()) ||\n client.compCode.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-2xl max-h-[90vh] overflow-hidden flex flex-col\">\n <DialogHeader>\n <DialogTitle>Select FactorCloud Client</DialogTitle>\n <DialogDescription>\n Choose the client you want to manage portal connections for.\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"space-y-4\">\n <Input\n placeholder=\"Search by name, email, or code...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n\n <div className=\"overflow-y-auto max-h-[500px] space-y-2\">\n {filteredClients.length === 0 ? (\n <div className=\"text-center py-8 text-muted-foreground\">\n No clients found matching your search.\n </div>\n ) : (\n filteredClients.map((client) => (\n <Card\n key={client.id}\n className=\"p-4 hover:bg-accent cursor-pointer transition-colors\"\n onClick={() => onSelect(client)}\n >\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Building2 className=\"h-5 w-5 text-primary\" />\n <h3 className=\"font-semibold\">{client.companyName}</h3>\n </div>\n {client.active && (\n <span className=\"text-xs bg-green-500/10 text-green-500 px-2 py-1 rounded\">\n Active\n </span>\n )}\n </div>\n \n <div className=\"flex items-center gap-4 text-sm text-muted-foreground\">\n <div className=\"flex items-center gap-1\">\n <Mail className=\"h-4 w-4\" />\n <span>{client.email}</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Hash className=\"h-4 w-4\" />\n <span>{client.compCode}</span>\n </div>\n </div>\n </div>\n </Card>\n ))\n )}\n </div>\n </div>\n\n <div className=\"flex justify-end pt-4\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","import \"./styles.css\";\nimport { SyncWorkflow } from \"@/components/SyncWorkflow\";\nimport { PortalIntegration } from \"@/components/PortalIntegration\";\nimport { SDKConfig } from \"@/types/config\";\n\n/**\n * SDK Version\n */\nexport const SDK_VERSION = \"0.1.0\";\n\n/**\n * Initialize PortalSDK with configuration\n * @param config - SDK configuration object\n * @returns Object containing config and component\n */\nexport function initPortalSDK(config: SDKConfig) {\n return {\n config,\n component: SyncWorkflow,\n };\n}\n\n/**\n * Sync Workflow Component (Recommended)\n * Provides modal-based workflow for syncing invoices from portals\n * This is the primary component you should use for integrating sync functionality\n */\nexport { SyncWorkflow } from \"@/components/SyncWorkflow\";\nexport type { SyncWorkflowProps } from \"@/components/SyncWorkflow\";\n\n/**\n * Pre-built marketing banner with CTA button that launches the sync workflow.\n */\nexport { SyncBanner } from \"@/components/SyncBanner\";\nexport type { SyncBannerProps } from \"@/components/SyncBanner\";\n\n/**\n * Full Portal Integration Component (Demo/Reference)\n * Complete dashboard UI - primarily for internal demo purposes\n * External applications should use SyncWorkflow instead\n */\nexport { PortalIntegration };\n\n/**\n * Standalone Modal Components\n * Use these for custom integration workflows\n */\nexport { ConfigModal } from \"@/components/ConfigModal\";\nexport { ConnectDebtorModal } from \"@/components/ConnectDebtorModal\";\nexport { RequestPortalModal } from \"@/components/RequestPortalModal\";\nexport { UpdateCredentialsModal } from \"@/components/UpdateCredentialsModal\";\nexport { SyncProgressModal } from \"@/components/SyncProgressModal\";\nexport { ClientSelectionModal } from \"@/components/ClientSelectionModal\";\n\n/**\n * Type Exports\n */\nexport type { SDKConfig };\n\n/**\n * Export all types for external use\n */\nexport * from \"@/types/config\";\nexport * from \"@/types/factorcloud\";\nexport * from \"@/types/portalduct\";\nexport * from \"@/types/merged\";\n\n/**\n * API Clients for direct API access\n */\nexport { FactorCloudAPI } from \"@/api/factorcloud\";\nexport { PortalDuctAPI } from \"@/api/portalduct\";\nexport { ConnectionSyncAPI } from \"@/api/connectionSync\";\n\n/**\n * Data Orchestration Service\n * Handles complex data synchronization between PortalDuct and FactorCloud\n */\nexport { DataOrchestrationService } from \"@/services/orchestration\";"],"names":["r","f","o","clsx","falsyToString","value","cx","cva","base","config","props","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","key","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","concatArrays","array1","array2","combinedArray","i","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","getGroupIdForArbitraryProperty","classParts","startIndex","getGroupRecursive","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","currentClassPart","nextClassPartObject","result","classRest","validatorsLength","validatorObj","content","colonIndex","property","theme","classGroups","processClassGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","entries","path","current","parts","part","next","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","prefix","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","classGroupsInConflict","classNames","originalClassName","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","args","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryWeight","isLabelWeight","isArbitraryFamilyName","isLabelFamilyName","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","isArbitraryVariableWeight","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleSizingInline","scaleSizingBlock","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","twMerge","cn","inputs","formatLastSync","lastSync","date","diffMs","diffMins","diffHours","diffDays","buttonVariants","Button","React","size","asChild","ref","jsx","Slot","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","toastTimeouts","addToRemoveQueue","toastId","timeout","dispatch","reducer","state","action","t","toast","listeners","memoryState","listener","id","dismiss","open","useToast","setState","deriveEnvironmentFromUrl","url","isConfigComplete","mergeCustomerStatusWithConfig","status","portalductApiUrl","portalductEnvironment","FactorCloudAPI","baseUrl","factorId","bearerToken","limit","page","response","clientId","token","PortalDuctAPIError","message","code","type","requestId","PortalDuctAPI","fallbackMessage","body","error","customerId","filter","request","companyId","connectionId","DEFAULT_SYNC_WEBHOOK_URL","DEFAULT_VERIFY_WEBHOOK_URL","DEFAULT_CUSTOMER_STATUS_WEBHOOK_URL","ConnectionSyncAPI","webhookToken","webhookUrl","verifyWebhookUrl","environment","portalductBaseUrl","customerStatusUrl","operationLabel","errorText","data","DataOrchestrationService","clients","fcClient","existingCompany","company","clientDetail","fcClientId","pdCompanyId","debtors","connections","debtor","connection","conn","Dialog","DialogPrimitive","DialogPortal","DialogOverlay","DialogContent","children","jsxs","X","DialogHeader","DialogFooter","DialogTitle","DialogDescription","g","support","isDataView","obj","viewClasses","isArrayBufferView","normalizeName","name","normalizeValue","iteratorFor","items","iterator","Headers","headers","header","oldValue","callback","thisArg","consumed","fileReaderReady","reader","resolve","reject","readBlobAsArrayBuffer","blob","promise","readBlobAsText","match","encoding","readArrayBufferAsText","buf","view","chars","bufferClone","Body","rejected","isConsumed","decode","methods","normalizeMethod","method","upcased","Request","input","options","ctrl","reParamSearch","reQueryString","form","bytes","split","parseHeaders","rawHeaders","preProcessedHeaders","line","Response","bodyInit","redirectStatuses","DOMException","fetch","init","xhr","abortXhr","fixUrl","names","BASE_URL","useFormspark","_useState","useState","submitting","setSubmitting","submit","payload","json","FORMSPARK_FORM_ID","InterestSyncModal","onOpenChange","setName","email","setEmail","setCompany","submitted","setSubmitted","handleSubmit","e","text","idx","CheckCircle2","Fragment","Input","labelVariants","Label","LabelPrimitive","UpdateCredentialsModal","onUpdate","loading","username","setUsername","password","setPassword","AlertDialog","AlertDialogPrimitive","AlertDialogPortal","AlertDialogOverlay","AlertDialogContent","AlertDialogHeader","AlertDialogFooter","AlertDialogTitle","AlertDialogDescription","AlertDialogAction","AlertDialogCancel","Tabs","TabsPrimitive","TabsList","TabsTrigger","TabsContent","Separator","orientation","decorative","SeparatorPrimitive","stepLabels","SyncProgressModal","currentStep","selectedDebtor","selectedClient","onSelectClient","onSelectDebtor","onConnectDebtor","onEditCredentials","onChangePortal","onToggleActivation","onSyncDebtor","onVerifyDebtor","togglingDebtorId","syncingDebtorId","verifyingDebtorId","allowBackToClientSelection","onBackToClientSelection","activeTab","onActiveTabChange","isLoading","isError","isComplete","isSelectingClient","isSelectingDebtor","isReviewing","localActiveTab","setLocalActiveTab","activeDebtorTab","setActiveDebtorTab","syncConfirmOpen","setSyncConfirmOpen","debtorToSync","setDebtorToSync","verifyConfirmOpen","setVerifyConfirmOpen","debtorToVerify","setDebtorToVerify","searchTerm","setSearchTerm","deferredSearch","useDeferredValue","filteredDebtors","useMemo","q","d","groups","counts","handleConnect","useCallback","handleSyncClick","handleSyncConfirm","handleVerifyClick","handleVerifyConfirm","Loader2","XCircle","client","Building2","Mail","v","RefreshCw","ShieldCheck","FileText","ArrowLeft","ScrollArea","ScrollAreaPrimitive","ScrollBar","badgeVariants","Badge","ConnectDebtorModal","availablePortals","loadingPortals","isChangingPortal","onConnect","onRequestNewPortal","step","setStep","selectedPortal","setSelectedPortal","searchQuery","setSearchQuery","useEffect","filteredPortals","portal","a","b","handlePortalSelect","handleBack","canSubmit","Search","RequestPortalModal","onSubmit","host","setHost","useCustomerStatus","skip","isMountedRef","useRef","isActive","setIsActive","setLoading","setError","resolvedConfig","setResolvedConfig","combinedConfig","portalductEnvUrl","syncWebhookUrl","latestConfigRef","refetch","latestConfig","latestFactorId","latestWebhookToken","latestCustomerId","latestEnvironment","latestPortalductEnvUrl","latestSyncWebhookUrl","latestVerifyWebhookUrl","mergedConfig","err","errorInstance","SyncWorkflow","onTokenExpired","trigger","onSyncComplete","onSyncError","autoStart","customerStatus","orchestrationService","setOrchestrationService","factorcloudClient","setFactorcloudClient","portalductCompany","setPortalductCompany","availableClients","setAvailableClients","mergedDebtors","setMergedDebtors","setSelectedDebtor","setAvailablePortals","setLoadingPortals","connectOpen","setConnectOpen","debtorToConnect","setDebtorToConnect","connecting","setConnecting","setIsChangingPortal","requestPortalOpen","setRequestPortalOpen","creatingPortal","setCreatingPortal","showInterestModal","setShowInterestModal","editCredentialsOpen","setEditCredentialsOpen","debtorToEdit","setDebtorToEdit","updatingCredentials","setUpdatingCredentials","setTogglingDebtorId","setSyncingDebtorId","syncTimeouts","setSyncTimeouts","setVerifyingDebtorId","verifyTimeouts","setVerifyTimeouts","showSyncModal","setShowSyncModal","syncStep","setSyncStep","syncError","setSyncError","localCustomerStatus","resolvedCustomerStatus","isCustomerActive","customerStatusLoading","customerStatusError","resolvedConfigFromStatus","fallbackConfig","runtimeConfig","configuredClientId","service","handleAutoSync","timeoutId","loadDebtorData","svc","pdCompany","portals","isDeactivated","pd","updated","prev","timestamp","item","newPortal","portalId","p","updatePayload","PortalIntegration","Clock","Building","Edit2","DollarSign","CreditCard","BookOpen","Calculator","SyncBanner","queryClient","title","badge","ctaLabel","icon","resolvedQueryClient","QueryClient","detectedTheme","setDetectedTheme","mq","isDark","badgeEl","animations","pillBg","pillBorder","pillShadow","QueryClientProvider","alertVariants","Alert","AlertTitle","AlertDescription","ConfigModal","onSave","currentConfig","setConfig","canSave","handleSave","missingFields","AlertCircle","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","ClientSelectionModal","onSelect","filteredClients","Hash","SDK_VERSION","initPortalSDK"],"mappings":"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","x_google_ignoreList":[0,1,2,12,13]}
|