{"version":3,"file":"index.cjs","sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/utils.ts","../src/Button.tsx","../src/ButtonGroup.tsx","../src/FloatingPortal.tsx","../src/Dropdown.tsx","../src/DatePicker.tsx","../src/FlagIcon.tsx","../src/countries.ts","../src/CountrySelect.tsx","../src/PhoneInput.tsx","../src/Input.tsx","../src/Textarea.tsx","../src/Checkbox.tsx","../src/RadioPills.tsx","../src/Toggle.tsx","../src/Slider.tsx","../src/DualSlider.tsx","../src/DropdownMenu.tsx","../src/Select.tsx","../src/MultiSelect.tsx","../src/Tooltip.tsx","../src/Accordion.tsx","../src/Card.tsx","../src/Drawer.tsx","../src/Modal.tsx","../src/BottomSheet.tsx","../src/Table.tsx","../src/Pagination.tsx","../src/FloatingActionButton.tsx","../src/StepProgress.tsx","../src/Badge.tsx","../src/StatusBadges.tsx","../src/Spinner.tsx","../src/Toast.tsx","../src/FileUpload.tsx","../src/AudioRecorder.tsx","../src/ThumbnailGrid.tsx","../src/CreditBar.tsx","../src/ripple.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 * 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+$/;\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 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);\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 isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n  __proto__: null,\n  isAny,\n  isAnyNonArbitrary,\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  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 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       * Top / Right / Bottom / Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      inset: [{\n        inset: scaleInset()\n      }],\n      /**\n       * Right / Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      'inset-x': [{\n        'inset-x': scaleInset()\n      }],\n      /**\n       * Top / Bottom\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      'inset-y': [{\n        'inset-y': scaleInset()\n      }],\n      /**\n       * Start\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      start: [{\n        start: scaleInset()\n      }],\n      /**\n       * End\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      end: [{\n        end: 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 X\n       * @see https://tailwindcss.com/docs/padding\n       */\n      px: [{\n        px: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Padding Y\n       * @see https://tailwindcss.com/docs/padding\n       */\n      py: [{\n        py: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Padding Start\n       * @see https://tailwindcss.com/docs/padding\n       */\n      ps: [{\n        ps: scaleUnambiguousSpacing()\n      }],\n      /**\n       * Padding End\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pe: [{\n        pe: 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 X\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mx: [{\n        mx: scaleMargin()\n      }],\n      /**\n       * Margin Y\n       * @see https://tailwindcss.com/docs/margin\n       */\n      my: [{\n        my: scaleMargin()\n      }],\n      /**\n       * Margin Start\n       * @see https://tailwindcss.com/docs/margin\n       */\n      ms: [{\n        ms: scaleMargin()\n      }],\n      /**\n       * Margin End\n       * @see https://tailwindcss.com/docs/margin\n       */\n      me: [{\n        me: 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       * 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, isArbitraryVariable, isArbitraryNumber]\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, isArbitraryValue, themeFont]\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 X\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-x': [{\n        'border-x': scaleBorderWidth()\n      }],\n      /**\n       * Border Width Y\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-y': [{\n        'border-y': scaleBorderWidth()\n      }],\n      /**\n       * Border Width Start\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-s': [{\n        'border-s': scaleBorderWidth()\n      }],\n      /**\n       * Border Width End\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-e': [{\n        'border-e': 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 X\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-x': [{\n        'border-x': scaleColor()\n      }],\n      /**\n       * Border Color Y\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-y': [{\n        'border-y': scaleColor()\n      }],\n      /**\n       * Border Color S\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-s': [{\n        'border-s': scaleColor()\n      }],\n      /**\n       * Border Color E\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-e': [{\n        'border-e': 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 X\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mx': [{\n        'scroll-mx': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Margin Y\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-my': [{\n        'scroll-my': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Margin Start\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-ms': [{\n        'scroll-ms': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Margin End\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-me': [{\n        'scroll-me': 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 X\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-px': [{\n        'scroll-px': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Padding Y\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-py': [{\n        'scroll-py': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Padding Start\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-ps': [{\n        'scroll-ps': scaleUnambiguousSpacing()\n      }],\n      /**\n       * Scroll Padding End\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pe': [{\n        'scroll-pe': 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', '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', 'pt', 'pr', 'pb', 'pl'],\n      px: ['pr', 'pl'],\n      py: ['pt', 'pb'],\n      m: ['mx', 'my', 'ms', 'me', '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-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-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-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-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 { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n","'use client'\n\nimport React from 'react'\nimport { motion, type HTMLMotionProps } from 'framer-motion'\nimport { Loader2 } from 'lucide-react' \nimport { cn } from './utils'\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'\n  size?: 'sm' | 'md' | 'lg'\n  loading?: boolean\n  icon?: React.ReactNode\n  animate?: boolean\n}\n\ntype MotionButtonProps = Omit<ButtonProps, 'children' | keyof HTMLMotionProps<'button'>> & { children?: React.ReactNode } & HTMLMotionProps<'button'>\n\nexport const Button = React.forwardRef<HTMLButtonElement, MotionButtonProps>(\n  ({ variant = 'primary', size = 'md', loading, icon, animate = true, className, children, disabled, ...props }, ref) => {\n    const shouldAnimate = animate !== false\n    const baseStyles = 'inline-flex items-center justify-center gap-2 font-medium rounded-md transition-all duration-200 touch-target disabled:opacity-50 disabled:cursor-not-allowed active:scale-[0.98] flex-shrink-0 whitespace-nowrap'\n    \n    const variants = {\n      primary: 'bg-primary text-white hover:bg-primary/80 active:bg-primary/80 shadow-sm',\n      secondary: 'bg-secondary text-foreground hover:bg-border active:bg-border-dark',\n      outline: 'bg-transparent text-primary border-1 border-primary hover:bg-secondary active:bg-border',\n      ghost: 'bg-transparent text-primary hover:bg-secondary active:bg-border',\n      danger: 'bg-error text-white hover:bg-red-600 active:bg-red-700 shadow-sm'\n    }\n    \n    const sizes = {\n      sm: 'px-3 py-2 text-sm min-h-[2.25rem]',\n      md: 'px-4 py-2.5 text-base min-h-[2.75rem]',\n      lg: 'px-6 py-3.5 text-lg min-h-[3.25rem]'\n    }\n\n    return (\n      <motion.button\n        ref={ref}\n        whileTap={shouldAnimate ? { scale: disabled || loading ? 1 : 0.98 } : undefined}\n        className={cn(baseStyles, variants[variant], sizes[size], className)}\n        disabled={disabled || loading}\n        {...props}\n      >\n        {loading ? (\n          <Loader2 className={cn('h-5 w-5', shouldAnimate && 'animate-spin')} />\n        ) : icon ? (\n          <span className=\"shrink-0\">{icon}</span>\n        ) : null}\n        {children}\n      </motion.button>\n    )\n  }\n)\n\nButton.displayName = 'Button'\n\n","'use client'\n\nimport React from 'react'\nimport { motion } from 'framer-motion'\nimport { cn } from './utils'\n\nexport interface ButtonGroupOption {\n  value: string\n  label: string\n  icon?: React.ReactNode\n  disabled?: boolean\n  className?: string\n  ariaLabel?: string\n  render?: (option: ButtonGroupOption, state: { selected: boolean; disabled: boolean; index: number }) => React.ReactNode\n  onClick?: (option: ButtonGroupOption, event: React.MouseEvent<HTMLButtonElement>) => void\n}\n\nexport interface ButtonGroupProps {\n  options: ButtonGroupOption[]\n  value?: string\n  onChange?: (value: string) => void\n  onOptionClick?: (option: ButtonGroupOption, index: number) => void\n  size?: 'sm' | 'md' | 'lg'\n  disabled?: boolean\n  className?: string\n  animate?: boolean\n}\n\nexport const ButtonGroup: React.FC<ButtonGroupProps> = ({\n  options,\n  value,\n  onChange,\n  onOptionClick,\n  size = 'md',\n  disabled = false,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n\n  const sizes = {\n    sm: 'px-3 py-2 text-sm min-h-9',\n    md: 'px-4 py-2.5 text-sm sm:text-base min-h-11',\n    lg: 'px-5 py-3 text-base min-h-12'\n  }\n\n  return (\n    <div\n      role=\"group\"\n      aria-disabled={disabled}\n      className={cn(\n        'inline-flex overflow-hidden rounded-md border border-border bg-background',\n        disabled && 'opacity-60',\n        className\n      )}\n    >\n      {options.map((option, index) => {\n        const isSelected = value === option.value\n        const isDisabled = Boolean(disabled || option.disabled)\n        const content = option.render?.(option, { selected: isSelected, disabled: isDisabled, index }) ?? (\n          <>\n            {option.icon && <span className=\"shrink-0\">{option.icon}</span>}\n            <span>{option.label}</span>\n          </>\n        )\n\n        return (\n          <motion.button\n            key={option.value}\n            type=\"button\"\n            whileTap={shouldAnimate ? { scale: isDisabled ? 1 : 0.98 } : undefined}\n            onClick={(event) => {\n              if (!isDisabled) {\n                option.onClick?.(option, event)\n                onOptionClick?.(option, index)\n                onChange?.(option.value)\n              }\n            }}\n            aria-pressed={isSelected}\n            aria-label={option.ariaLabel}\n            disabled={isDisabled}\n            className={cn(\n              'inline-flex items-center justify-center gap-2 font-medium transition-colors duration-200',\n              'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset',\n              sizes[size],\n              index !== options.length - 1 && 'border-r border-border',\n              isSelected\n                ? 'bg-primary text-white'\n                : 'bg-transparent text-foreground hover:bg-secondary',\n              isDisabled && 'cursor-not-allowed',\n              option.className\n            )}\n          >\n            {content}\n          </motion.button>\n        )\n      })}\n    </div>\n  )\n}\n","'use client'\n\nimport React, { useCallback, useEffect, useState, type CSSProperties } from 'react'\nimport { createPortal } from 'react-dom'\nimport { cn } from './utils'\n\ninterface FloatingPortalProps {\n  open: boolean\n  anchorRef: React.RefObject<HTMLElement | null>\n  placement: 'top' | 'bottom'\n  children: React.ReactNode\n  className?: string\n  offset?: number\n  matchWidth?: boolean\n}\n\nexport const FloatingPortal: React.FC<FloatingPortalProps> = ({\n  open,\n  anchorRef,\n  placement,\n  children,\n  className,\n  offset = 8,\n  matchWidth = true,\n}) => {\n  const [mounted, setMounted] = useState(false)\n  const [style, setStyle] = useState<CSSProperties | null>(null)\n\n  useEffect(() => {\n    setMounted(true)\n    return () => setMounted(false)\n  }, [])\n\n  const updatePosition = useCallback(() => {\n    if (!open || !anchorRef.current) return\n\n    const rect = anchorRef.current.getBoundingClientRect()\n\n    setStyle({\n      position: 'fixed',\n      top: placement === 'top' ? rect.top - offset : rect.bottom + offset,\n      left: rect.left,\n      width: matchWidth ? rect.width : undefined,\n      zIndex: 70,\n    })\n  }, [anchorRef, matchWidth, offset, open, placement])\n\n  useEffect(() => {\n    if (!open) return\n\n    updatePosition()\n\n    window.addEventListener('resize', updatePosition)\n    window.addEventListener('scroll', updatePosition, true)\n\n    return () => {\n      window.removeEventListener('resize', updatePosition)\n      window.removeEventListener('scroll', updatePosition, true)\n    }\n  }, [open, updatePosition])\n\n  if (!mounted || !open || !style) {\n    return null\n  }\n\n  return createPortal(\n    <div\n      style={style}\n      onMouseDown={(event) => event.stopPropagation()}\n      className={cn(placement === 'top' && '-translate-y-full', className)}\n    >\n      {children}\n    </div>,\n    document.body\n  )\n}\n","'use client'\n\nimport React, { useState, useRef, useEffect } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { ChevronDown, Search, X } from 'lucide-react'\nimport { cn } from './utils'\nimport { FloatingPortal } from './FloatingPortal'\n\nexport interface DropdownOption {\n  value: string\n  label: string\n  icon?: React.ReactNode\n}\n\nexport interface DropdownProps {\n  options: DropdownOption[]\n  value?: string\n  onChange: (value: string) => void\n  placeholder?: string\n  label?: string\n  error?: string\n  searchable?: boolean\n  clearable?: boolean\n  disabled?: boolean\n  className?: string\n  animate?: boolean\n}\n\nexport const Dropdown: React.FC<DropdownProps> = ({\n  options,\n  value,\n  onChange,\n  placeholder = 'Select an option',\n  label,\n  error,\n  searchable = false,\n  clearable = true,\n  disabled,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const [isOpen, setIsOpen] = useState(false)\n  const [searchQuery, setSearchQuery] = useState('')\n  const [dropdownPlacement, setDropdownPlacement] = useState<'top' | 'bottom'>('bottom')\n  const dropdownRef = useRef<HTMLDivElement>(null)\n  const triggerRef = useRef<HTMLButtonElement>(null)\n  const searchInputRef = useRef<HTMLInputElement>(null)\n  const ignoreNextClickRef = useRef(false)\n\n  const selectedOption = options.find((opt) => opt.value === value)\n\n  useEffect(() => {\n    if (!isOpen || !searchable) return\n\n    const focusSearchInput = window.setTimeout(() => {\n      searchInputRef.current?.focus()\n    }, 0)\n\n    return () => window.clearTimeout(focusSearchInput)\n  }, [isOpen, searchable])\n  \n  const filteredOptions = searchable\n    ? options.filter((opt) =>\n        opt.label.toLowerCase().includes(searchQuery.toLowerCase())\n      )\n    : options\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n        setIsOpen(false)\n        setSearchQuery('')\n      }\n    }\n\n    document.addEventListener('mousedown', handleClickOutside)\n    return () => document.removeEventListener('mousedown', handleClickOutside)\n  }, [])\n\n  useEffect(() => {\n    if (!isOpen) return\n\n    const handleEscape = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        setIsOpen(false)\n      }\n    }\n\n    window.addEventListener('keydown', handleEscape)\n\n    const updatePlacement = () => {\n      if (!triggerRef.current) return\n\n      const rect = triggerRef.current.getBoundingClientRect()\n      const estimatedMenuHeight = searchable ? 360 : 300\n      const availableBelow = window.innerHeight - rect.bottom - 8\n      const availableAbove = rect.top - 8\n\n      if (availableBelow >= estimatedMenuHeight) {\n        setDropdownPlacement('bottom')\n        return\n      }\n\n      if (availableAbove >= estimatedMenuHeight) {\n        setDropdownPlacement('top')\n        return\n      }\n\n      setDropdownPlacement('bottom')\n    }\n\n    updatePlacement()\n    window.addEventListener('resize', updatePlacement)\n    window.addEventListener('scroll', updatePlacement, true)\n\n    return () => {\n      window.removeEventListener('keydown', handleEscape)\n      window.removeEventListener('resize', updatePlacement)\n      window.removeEventListener('scroll', updatePlacement, true)\n    }\n  }, [isOpen, searchable])\n\n  const handleSelect = (optionValue: string) => {\n    onChange(optionValue)\n    setIsOpen(false)\n    setSearchQuery('')\n  }\n\n  const dropdownAnimation =\n    dropdownPlacement === 'top'\n      ? { initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: 10 } }\n      : { initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 } }\n\n \n  return (\n    <div ref={dropdownRef} className={cn('relative w-full', className)}>\n      {label && (\n        <label className=\"block mb-1.5 text-sm font-medium text-foreground\">\n          {label}\n        </label>\n      )}\n\n      <button\n        ref={triggerRef}\n        type=\"button\"\n        onMouseDown={(event) => {\n          if (!searchable || disabled || isOpen) return\n          event.preventDefault()\n          ignoreNextClickRef.current = true\n          setIsOpen(true)\n        }}\n        onClick={() => {\n          if (ignoreNextClickRef.current) {\n            ignoreNextClickRef.current = false\n            return\n          }\n          if (!disabled) {\n            setIsOpen((current) => !current)\n          }\n        }}\n        disabled={disabled}\n        className={cn(\n          'w-full px-4 py-3 rounded-md border transition-all duration-200',\n          'bg-background text-left flex items-center justify-between gap-2',\n          'focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary/30',\n          'disabled:bg-secondary disabled:cursor-not-allowed',\n          'touch-target',\n          error && 'border-error',\n          !error && 'border-border',\n          isOpen && 'ring-2 ring-primary'\n        )}\n      >\n        <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n          {selectedOption?.icon && <span className=\"shrink-0\">{selectedOption.icon}</span>}\n          <span className={cn('truncate', !selectedOption && 'text-foreground/50')}>\n            {selectedOption?.label || placeholder}\n          </span>\n        </div>\n        <ChevronDown\n          className={cn(\n            'w-5 h-5 text-primary transition-transform shrink-0',\n            isOpen && 'rotate-180'\n          )}\n        />\n      </button>\n\n      {shouldAnimate ? (\n        <AnimatePresence>\n          {isOpen ? (\n            <FloatingPortal open={isOpen} anchorRef={triggerRef} placement={dropdownPlacement}>\n              <motion.div\n                initial={dropdownAnimation.initial}\n                animate={dropdownAnimation.animate}\n                exit={dropdownAnimation.exit}\n                transition={{ duration: 0.2 }}\n                className=\"z-50 w-full bg-background rounded-md border border-border shadow-lg max-h-80 overflow-hidden\"\n              >\n              {searchable && (\n                <div className=\"p-2 border-b border-border\">\n                  <div className=\"relative\">\n                    <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-primary/50\" />\n                    <input\n                      ref={searchInputRef}\n                      type=\"text\"\n                      placeholder=\"Search...\"\n                      value={searchQuery}\n                      onChange={(e) => setSearchQuery(e.target.value)}\n                      onKeyDown={(event) => {\n                        if (event.key === 'Escape') {\n                          setIsOpen(false)\n                        }\n                      }}\n                      className=\"w-full pl-10 pr-8 py-2 text-sm border border-border rounded-md focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary/30\"\n                    />\n                    {searchQuery && (\n                      <button\n                        onClick={() => setSearchQuery('')}\n                        className=\"absolute right-2 top-1/2 -translate-y-1/2\"\n                      >\n                        <X className=\"w-4 h-4 text-primary/50 hover:text-primary\" />\n                      </button>\n                    )}\n                  </div>\n                </div>\n              )}\n\n              <div className=\"overflow-y-auto max-h-64 p-2 space-y-1\">\n                {clearable && (\n                  <button\n                    type=\"button\"\n                    onClick={() => handleSelect('')}\n                    className={cn(\n                      'w-full px-4 py-3 text-left flex items-center gap-2 rounded-sm cursor-pointer',\n                      'hover:bg-secondary transition-colors',\n                      'text-foreground/70 italic',\n                      !value && 'bg-border text-foreground'\n                    )}\n                  >\n                    <span>None</span>\n                  </button>\n                )}\n                {filteredOptions.length > 0 ? (\n                  filteredOptions.map((option) => (\n                    <button\n                      key={option.value}\n                      onClick={() => handleSelect(option.value)}\n                      className={cn(\n                        'w-full px-4 py-3 text-left flex items-center gap-2 rounded-sm cursor-pointer',\n                        'hover:bg-secondary transition-colors',\n                        option.value === value && 'bg-border text-foreground'\n                      )}\n                    >\n                      {option.icon && <span className=\"shrink-0\">{option.icon}</span>}\n                      <span>{option.label}</span>\n                    </button>\n                  ))\n                ) : (\n                  <div className=\"px-4 py-6 text-center text-primary/70 text-sm\">\n                    No options found\n                  </div>\n                )}\n              </div>\n              </motion.div>\n            </FloatingPortal>\n          ) : null}\n        </AnimatePresence>\n      ) : (\n        isOpen && (\n          <FloatingPortal open={isOpen} anchorRef={triggerRef} placement={dropdownPlacement}>\n            <motion.div className=\"z-50 w-full bg-background rounded-md border border-border shadow-lg max-h-80 overflow-hidden\">\n            {searchable && (\n              <div className=\"p-2 border-b border-border\">\n                <div className=\"relative\">\n                  <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-primary/50\" />\n                  <input\n                    ref={searchInputRef}\n                    type=\"text\"\n                    placeholder=\"Search...\"\n                    value={searchQuery}\n                    onChange={(e) => setSearchQuery(e.target.value)}\n                    onKeyDown={(event) => {\n                      if (event.key === 'Escape') {\n                        setIsOpen(false)\n                      }\n                    }}\n                    className=\"w-full pl-10 pr-8 py-2 text-sm border border-border rounded-md focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary/30\"\n                  />\n                  {searchQuery && (\n                    <button\n                      onClick={() => setSearchQuery('')}\n                      className=\"absolute right-2 top-1/2 -translate-y-1/2\"\n                    >\n                      <X className=\"w-4 h-4 text-primary/50 hover:text-primary\" />\n                    </button>\n                  )}\n                </div>\n              </div>\n            )}\n\n            <div className=\"overflow-y-auto max-h-64 p-2 space-y-1\">\n              {clearable && (\n                <button\n                  type=\"button\"\n                  onClick={() => handleSelect('')}\n                  className={cn(\n                    'w-full px-4 py-3 text-left flex items-center gap-2 rounded-sm cursor-pointer',\n                    'hover:bg-secondary transition-colors',\n                    'text-foreground/70 italic',\n                    !value && 'bg-border text-foreground'\n                  )}\n                >\n                  <span>None</span>\n                </button>\n              )}\n              {filteredOptions.length > 0 ? (\n                filteredOptions.map((option) => (\n                  <button\n                    key={option.value}\n                    onClick={() => handleSelect(option.value)}\n                    className={cn(\n                      'w-full px-4 py-3 text-left flex items-center gap-2 rounded-sm cursor-pointer',\n                      'hover:bg-secondary transition-colors',\n                      option.value === value && 'bg-border text-foreground'\n                    )}\n                  >\n                    {option.icon && <span className=\"shrink-0\">{option.icon}</span>}\n                    <span>{option.label}</span>\n                  </button>\n                ))\n              ) : (\n                <div className=\"px-4 py-6 text-center text-primary/70 text-sm\">\n                  No options found\n                </div>\n              )}\n            </div>\n            </motion.div>\n          </FloatingPortal>\n        )\n      )}\n\n      {error && (\n        <motion.p\n          {...(shouldAnimate ? { initial: { opacity: 0, y: -5 }, animate: { opacity: 1, y: 0 } } : {})}\n          className=\"mt-1.5 text-sm text-error\"\n        >\n          {error}\n        </motion.p>\n      )}\n    </div>\n  )\n}\n","'use client'\n\nimport React, { useEffect, useRef, useState } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { Calendar, ChevronDown, ChevronLeft, ChevronRight } from 'lucide-react'\nimport { Dropdown } from './Dropdown'\nimport { cn } from './utils'\nimport { FloatingPortal } from './FloatingPortal'\n\nexport interface DatePickerProps {\n  value?: Date\n  onChange: (date: Date) => void\n  mode?: 'date' | 'time' | 'datetime-local'\n  label?: string\n  required?: boolean\n  placeholder?: string\n  error?: string\n  hint?: string\n  disabled?: boolean\n  minDate?: Date\n  maxDate?: Date\n  className?: string\n  animate?: boolean\n}\n\nconst pad = (input: number) => String(input).padStart(2, '0')\n\nconst periodOptions = [\n  { value: 'AM', label: 'AM' },\n  { value: 'PM', label: 'PM' },\n]\n\nconst panelAnimation = {\n  initial: { opacity: 0, y: -8, scale: 0.98 },\n  animate: { opacity: 1, y: 0, scale: 1 },\n  exit: { opacity: 0, y: -8, scale: 0.98 },\n}\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n  value,\n  onChange,\n  mode = 'date',\n  label,\n  required,\n  placeholder,\n  error,\n  hint,\n  disabled,\n  minDate,\n  maxDate,\n  className,\n  animate = true,\n}) => {\n  const shouldAnimate = animate !== false\n  const [isOpen, setIsOpen] = useState(false)\n  const [pickerPosition, setPickerPosition] = useState<'bottom' | 'top'>('bottom')\n  const [isMonthMenuOpen, setIsMonthMenuOpen] = useState(false)\n  const [monthMenuPosition, setMonthMenuPosition] = useState<'bottom' | 'top'>('bottom')\n  const [isYearMenuOpen, setIsYearMenuOpen] = useState(false)\n  const [yearMenuPosition, setYearMenuPosition] = useState<'bottom' | 'top'>('bottom')\n  const [currentMonth, setCurrentMonth] = useState<Date>(value || new Date())\n  const [hourInput, setHourInput] = useState('')\n  const [minuteInput, setMinuteInput] = useState('')\n\n  const datePickerRef = useRef<HTMLDivElement>(null)\n  const pickerTriggerRef = useRef<HTMLButtonElement>(null)\n  const monthMenuTriggerRef = useRef<HTMLButtonElement>(null)\n  const monthMenuRef = useRef<HTMLDivElement>(null)\n  const yearMenuTriggerRef = useRef<HTMLButtonElement>(null)\n  const yearMenuRef = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    if (value) {\n      setCurrentMonth(value)\n    }\n  }, [value])\n\n  const timeBase = value || new Date()\n  const selectedHour24 = timeBase.getHours()\n  const selectedMinute = timeBase.getMinutes()\n  const selectedHour12 = (() => {\n    const normalized = selectedHour24 % 12\n    return normalized === 0 ? 12 : normalized\n  })()\n  const selectedPeriod = selectedHour24 >= 12 ? 'PM' : 'AM'\n\n  useEffect(() => {\n    setHourInput(`${selectedHour12}`)\n    setMinuteInput(pad(selectedMinute))\n  }, [selectedHour12, selectedMinute])\n\n  const formatDate = (date: Date | undefined) => {\n    if (!date) return ''\n    return date.toLocaleDateString('en-US', {\n      year: 'numeric',\n      month: 'short',\n      day: 'numeric',\n    })\n  }\n\n  const formatTime = (date: Date | undefined) => {\n    if (!date) return ''\n    return date.toLocaleTimeString('en-US', {\n      hour: 'numeric',\n      minute: '2-digit',\n    })\n  }\n\n  const formatDateTime = (date: Date | undefined) => {\n    if (!date) return ''\n    return date.toLocaleString('en-US', {\n      year: 'numeric',\n      month: 'short',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: '2-digit',\n    })\n  }\n\n  const getPlaceholder = () => {\n    if (placeholder) return placeholder\n    if (mode === 'time') return 'Select time'\n    if (mode === 'datetime-local') return 'Select date and time'\n    return 'Select date'\n  }\n\n  const getDisplayValue = () => {\n    if (!value) return ''\n    if (mode === 'time') return formatTime(value)\n    if (mode === 'datetime-local') return formatDateTime(value)\n    return formatDate(value)\n  }\n\n  const setTimeValue = (hours: number, minutes: number) => {\n    const nextDate = new Date(value || new Date())\n    nextDate.setHours(hours, minutes, 0, 0)\n    onChange(nextDate)\n  }\n\n  const setTimeFrom12Hour = (hour12: number, minutes: number, period: 'AM' | 'PM') => {\n    const normalizedHour = hour12 % 12\n    const nextHours = period === 'PM' ? normalizedHour + 12 : normalizedHour\n    setTimeValue(nextHours, minutes)\n  }\n\n  const monthNames = [\n    'January', 'February', 'March', 'April', 'May', 'June',\n    'July', 'August', 'September', 'October', 'November', 'December',\n  ]\n\n  const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n\n  const getDaysInMonth = (date: Date) => {\n    const year = date.getFullYear()\n    const month = date.getMonth()\n    const firstDay = new Date(year, month, 1)\n    const lastDay = new Date(year, month + 1, 0)\n    const startingDayOfWeek = firstDay.getDay()\n    const endingDayOfWeek = lastDay.getDay()\n    const totalDays = startingDayOfWeek + lastDay.getDate() + (6 - endingDayOfWeek)\n    const gridStart = new Date(year, month, 1 - startingDayOfWeek)\n\n    return Array.from({ length: totalDays }, (_, index) => {\n      const day = new Date(gridStart)\n      day.setDate(gridStart.getDate() + index)\n      return day\n    })\n  }\n\n  const days = getDaysInMonth(currentMonth)\n  const currentYear = currentMonth.getFullYear()\n  const currentMonthIndex = currentMonth.getMonth()\n  const startYear = minDate ? minDate.getFullYear() : currentYear - 100\n  const endYear = maxDate ? maxDate.getFullYear() : currentYear + 20\n  const yearOptions = Array.from({ length: endYear - startYear + 1 }, (_, index) => startYear + index)\n\n  const isSameDay = (left: Date | null, right: Date | null) => {\n    if (!left || !right) return false\n    return (\n      left.getDate() === right.getDate() &&\n      left.getMonth() === right.getMonth() &&\n      left.getFullYear() === right.getFullYear()\n    )\n  }\n\n  const isToday = (date: Date | null) => {\n    if (!date) return false\n    return isSameDay(date, new Date())\n  }\n\n  const isDateDisabled = (date: Date) => {\n    if (minDate && date < minDate) return true\n    if (maxDate && date > maxDate) return true\n    return false\n  }\n\n  const isMonthOutOfRange = (monthIndex: number) => {\n    if (minDate) {\n      const minYear = minDate.getFullYear()\n      const minMonth = minDate.getMonth()\n      if (currentYear === minYear && monthIndex < minMonth) return true\n    }\n\n    if (maxDate) {\n      const maxYear = maxDate.getFullYear()\n      const maxMonth = maxDate.getMonth()\n      if (currentYear === maxYear && monthIndex > maxMonth) return true\n    }\n\n    return false\n  }\n\n  const handleDateSelect = (date: Date) => {\n    if (mode === 'datetime-local') {\n      const nextDate = new Date(value || new Date())\n      nextDate.setFullYear(date.getFullYear(), date.getMonth(), date.getDate())\n      onChange(nextDate)\n      return\n    }\n\n    onChange(date)\n    setIsOpen(false)\n  }\n\n  const toggleMonthMenu = () => {\n    setIsYearMenuOpen(false)\n    if (!isMonthMenuOpen && monthMenuTriggerRef.current) {\n      const triggerRect = monthMenuTriggerRef.current.getBoundingClientRect()\n      const availableBottom = window.innerHeight - triggerRect.bottom\n      const availableTop = triggerRect.top\n      setMonthMenuPosition(availableBottom < 220 && availableTop > availableBottom ? 'top' : 'bottom')\n    }\n    setIsMonthMenuOpen((previous) => !previous)\n  }\n\n  const toggleYearMenu = () => {\n    setIsMonthMenuOpen(false)\n    if (!isYearMenuOpen && yearMenuTriggerRef.current) {\n      const triggerRect = yearMenuTriggerRef.current.getBoundingClientRect()\n      const availableBottom = window.innerHeight - triggerRect.bottom\n      const availableTop = triggerRect.top\n      setYearMenuPosition(availableBottom < 220 && availableTop > availableBottom ? 'top' : 'bottom')\n    }\n    setIsYearMenuOpen((previous) => !previous)\n  }\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (datePickerRef.current && !datePickerRef.current.contains(event.target as Node)) {\n        setIsOpen(false)\n        setIsMonthMenuOpen(false)\n        setIsYearMenuOpen(false)\n      }\n    }\n\n    if (isOpen) {\n      document.addEventListener('mousedown', handleClickOutside)\n    }\n\n    return () => {\n      document.removeEventListener('mousedown', handleClickOutside)\n    }\n  }, [isOpen])\n\n  useEffect(() => {\n    if (!isOpen) {\n      setIsMonthMenuOpen(false)\n      setIsYearMenuOpen(false)\n    }\n  }, [isOpen])\n\n  useEffect(() => {\n    if (!isOpen) return\n\n    const updatePlacement = () => {\n      if (!pickerTriggerRef.current) return\n\n      const rect = pickerTriggerRef.current.getBoundingClientRect()\n      const estimatedMenuHeight = mode === 'date' ? 430 : 360\n      const availableBottom = window.innerHeight - rect.bottom - 8\n      const availableTop = rect.top - 8\n\n      if (availableBottom >= estimatedMenuHeight) {\n        setPickerPosition('bottom')\n        return\n      }\n\n      if (availableTop >= estimatedMenuHeight) {\n        setPickerPosition('top')\n        return\n      }\n\n      setPickerPosition('bottom')\n    }\n\n    updatePlacement()\n    window.addEventListener('resize', updatePlacement)\n    window.addEventListener('scroll', updatePlacement, true)\n\n    return () => {\n      window.removeEventListener('resize', updatePlacement)\n      window.removeEventListener('scroll', updatePlacement, true)\n    }\n  }, [isOpen, mode])\n\n  useEffect(() => {\n    if (!isMonthMenuOpen) return\n    const selectedMonth = currentMonth.getMonth()\n    const selectedMonthElement = monthMenuRef.current?.querySelector<HTMLButtonElement>(`button[data-month=\"${selectedMonth}\"]`)\n    selectedMonthElement?.scrollIntoView({ block: 'center' })\n  }, [isMonthMenuOpen, currentMonth])\n\n  useEffect(() => {\n    if (!isYearMenuOpen) return\n    const selectedYear = currentMonth.getFullYear()\n    const selectedYearElement = yearMenuRef.current?.querySelector<HTMLButtonElement>(`button[data-year=\"${selectedYear}\"]`)\n    selectedYearElement?.scrollIntoView({ block: 'center' })\n  }, [isYearMenuOpen, currentMonth])\n\n  const handlePreviousMonth = () => {\n    setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1, 1))\n  }\n\n  const handleNextMonth = () => {\n    setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1, 1))\n  }\n\n  const handleMonthChange = (nextMonth: number) => {\n    setCurrentMonth(new Date(currentMonth.getFullYear(), nextMonth, 1))\n    setIsMonthMenuOpen(false)\n  }\n\n  const handleYearChange = (nextYear: number) => {\n    setCurrentMonth(new Date(nextYear, currentMonth.getMonth(), 1))\n    setIsYearMenuOpen(false)\n  }\n\n  const handleHourTyping = (rawValue: string) => {\n    const digitsOnly = rawValue.replace(/\\D/g, '').slice(0, 2)\n    setHourInput(digitsOnly)\n\n    if (!digitsOnly) return\n\n    const parsedHour = Number(digitsOnly)\n    if (parsedHour >= 1 && parsedHour <= 12) {\n      setTimeFrom12Hour(parsedHour, selectedMinute, selectedPeriod)\n    }\n  }\n\n  const handleMinuteTyping = (rawValue: string) => {\n    const digitsOnly = rawValue.replace(/\\D/g, '').slice(0, 2)\n    setMinuteInput(digitsOnly)\n\n    // Wait for the user to type two digits before applying to avoid\n    // the value being updated mid-typing (so typing \"50\" works).\n    if (digitsOnly.length !== 2) return\n\n    const parsedMinute = Number(digitsOnly)\n    if (parsedMinute >= 0 && parsedMinute <= 59) {\n      setTimeFrom12Hour(selectedHour12, parsedMinute, selectedPeriod)\n    }\n  }\n\n  const commitHourInput = () => {\n    if (!hourInput) {\n      setHourInput(`${selectedHour12}`)\n      return\n    }\n\n    const parsedHour = Number(hourInput)\n    const clampedHour = Math.min(12, Math.max(1, Number.isNaN(parsedHour) ? selectedHour12 : parsedHour))\n    setHourInput(`${clampedHour}`)\n    setTimeFrom12Hour(clampedHour, selectedMinute, selectedPeriod)\n  }\n\n  const commitMinuteInput = () => {\n    if (!minuteInput) {\n      setMinuteInput(pad(selectedMinute))\n      return\n    }\n\n    const parsedMinute = Number(minuteInput)\n    const clampedMinute = Math.min(59, Math.max(0, Number.isNaN(parsedMinute) ? selectedMinute : parsedMinute))\n    setMinuteInput(pad(clampedMinute))\n    setTimeFrom12Hour(selectedHour12, clampedMinute, selectedPeriod)\n  }\n\n  const renderTimeControls = () => (\n    <div className=\"grid grid-cols-3 gap-2 items-end\">\n      <div className=\"space-y-1\">\n        <label className=\"block text-[10px] font-medium text-foreground/70\">Hour</label>\n        <input\n          inputMode=\"numeric\"\n          value={hourInput}\n          onChange={(event) => handleHourTyping(event.target.value)}\n          onBlur={commitHourInput}\n          onKeyDown={(event) => {\n            if (event.key === 'Enter') {\n              commitHourInput()\n              event.currentTarget.blur()\n            }\n          }}\n          placeholder=\"hh\"\n          className=\"h-11 w-full rounded-md border border-border bg-background px-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-primary/30 focus:border-primary/30\"\n        />\n      </div>\n\n      <div className=\"space-y-1\">\n        <label className=\"block text-[10px] font-medium text-foreground/70\">Minute</label>\n        <input\n          inputMode=\"numeric\"\n          value={minuteInput}\n          onChange={(event) => handleMinuteTyping(event.target.value)}\n          onBlur={commitMinuteInput}\n          onKeyDown={(event) => {\n            if (event.key === 'Enter') {\n              commitMinuteInput()\n              event.currentTarget.blur()\n            }\n          }}\n          placeholder=\"mm\"\n          className=\"h-11 w-full rounded-md border border-border bg-background px-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-primary/30 focus:border-primary/30\"\n        />\n      </div>\n\n      <Dropdown\n        label=\"AM/PM\"\n        options={periodOptions}\n        value={selectedPeriod}\n        onChange={(nextPeriod) => setTimeFrom12Hour(selectedHour12, selectedMinute, nextPeriod as 'AM' | 'PM')}\n        searchable={false}\n        clearable={false}\n        className=\"[&_label]:text-[10px] [&_label]:mb-1 [&_button]:h-11 [&_button]:min-h-0 [&_button]:py-0 [&_button]:px-2 [&_button]:text-sm [&_button_svg]:w-3 [&_button_svg]:h-3\"\n      />\n    </div>\n  )\n\n  const renderCalendar = () => (\n    <>\n      <div className=\"grid grid-cols-[auto_1fr_auto] items-center gap-1.5 mb-3\">\n        <button\n          type=\"button\"\n          onClick={handlePreviousMonth}\n          className=\"h-8 w-8 inline-flex items-center justify-center hover:bg-secondary rounded-lg transition-colors\"\n        >\n          <ChevronLeft className=\"w-4 h-4 text-primary\" />\n        </button>\n\n        <div className=\"flex items-center justify-center gap-1 min-w-0\">\n          <div className=\"relative\">\n            <button\n              ref={monthMenuTriggerRef}\n              type=\"button\"\n              onClick={toggleMonthMenu}\n              className=\"h-7 w-20 shrink-0 rounded-md border border-border bg-background px-2 text-[10px] font-medium text-foreground focus:outline-none focus:ring-1 focus:ring-primary flex items-center justify-between gap-1\"\n              aria-label=\"Select month\"\n              aria-haspopup=\"listbox\"\n              aria-expanded={isMonthMenuOpen}\n            >\n              <span className=\"min-w-0 flex-1 truncate text-left\">{monthNames[currentMonthIndex]}</span>\n              <ChevronDown className={cn('w-3 h-3 text-primary transition-transform', isMonthMenuOpen && 'rotate-180')} />\n            </button>\n\n            {isMonthMenuOpen && (\n              <div\n                ref={monthMenuRef}\n                role=\"listbox\"\n                className={cn(\n                  'absolute z-60 w-36 rounded-md border border-border bg-background shadow-lg py-1 max-h-56 overflow-y-auto',\n                  monthMenuPosition === 'bottom' ? 'top-full mt-1' : 'bottom-full mb-1'\n                )}\n              >\n                {monthNames.map((monthName, monthIndex) => {\n                  const isDisabled = isMonthOutOfRange(monthIndex)\n                  return (\n                    <button\n                      key={monthName}\n                      type=\"button\"\n                      role=\"option\"\n                      data-month={monthIndex}\n                      aria-selected={monthIndex === currentMonthIndex}\n                      onClick={() => !isDisabled && handleMonthChange(monthIndex)}\n                      disabled={isDisabled}\n                      className={cn(\n                        'w-full px-3 py-2 text-xs text-left transition-colors',\n                        !isDisabled && 'hover:bg-secondary',\n                        monthIndex === currentMonthIndex && 'bg-border text-foreground font-medium',\n                        isDisabled && 'text-border-dark cursor-not-allowed'\n                      )}\n                    >\n                      {monthName}\n                    </button>\n                  )\n                })}\n              </div>\n            )}\n          </div>\n\n          <div className=\"relative\">\n            <button\n              ref={yearMenuTriggerRef}\n              type=\"button\"\n              onClick={toggleYearMenu}\n              className=\"h-7 w-16 shrink-0 rounded-md border border-border bg-background px-2 text-[10px] font-medium text-foreground focus:outline-none focus:ring-1 focus:ring-primary flex items-center justify-between gap-1\"\n              aria-label=\"Select year\"\n              aria-haspopup=\"listbox\"\n              aria-expanded={isYearMenuOpen}\n            >\n              <span className=\"min-w-0 flex-1 truncate text-left\">{currentYear}</span>\n              <ChevronDown className={cn('w-3 h-3 text-primary transition-transform', isYearMenuOpen && 'rotate-180')} />\n            </button>\n\n            {isYearMenuOpen && (\n              <div\n                ref={yearMenuRef}\n                role=\"listbox\"\n                className={cn(\n                  'absolute z-60 w-28 rounded-md border border-border bg-background shadow-lg py-1 max-h-56 overflow-y-auto',\n                  yearMenuPosition === 'bottom' ? 'top-full mt-1' : 'bottom-full mb-1'\n                )}\n              >\n                {yearOptions.map((yearOption) => (\n                  <button\n                    key={yearOption}\n                    type=\"button\"\n                    role=\"option\"\n                    data-year={yearOption}\n                    aria-selected={yearOption === currentYear}\n                    onClick={() => handleYearChange(yearOption)}\n                    className={cn(\n                      'w-full px-3 py-2 text-xs text-left hover:bg-secondary transition-colors',\n                      yearOption === currentYear && 'bg-border text-foreground font-medium'\n                    )}\n                  >\n                    {yearOption}\n                  </button>\n                ))}\n              </div>\n            )}\n          </div>\n        </div>\n\n        <button\n          type=\"button\"\n          onClick={handleNextMonth}\n          className=\"h-8 w-8 inline-flex items-center justify-center hover:bg-secondary rounded-lg transition-colors\"\n        >\n          <ChevronRight className=\"w-4 h-4 text-primary\" />\n        </button>\n      </div>\n\n      <div className=\"grid grid-cols-7 gap-0 mb-1\">\n        {dayNames.map((day) => (\n          <div key={day} className=\"text-center text-[10px] font-medium text-foreground/70 py-1\">\n            {day}\n          </div>\n        ))}\n      </div>\n\n      <div className=\"grid grid-cols-7 gap-0 border border-border rounded-md overflow-hidden\">\n        {days.map((day, index) => {\n          const isLastColumn = (index + 1) % 7 === 0\n          const isLastRow = Math.floor(index / 7) === Math.floor((days.length - 1) / 7)\n          const isSelected = isSameDay(day, value || null)\n          const isCurrentDay = isToday(day)\n          const isCurrentMonthDay = day.getMonth() === currentMonthIndex && day.getFullYear() === currentYear\n          const isDisabled = !isCurrentMonthDay || isDateDisabled(day)\n\n          return (\n            <motion.button\n              key={day.toISOString()}\n              type=\"button\"\n              whileTap={shouldAnimate ? { scale: isDisabled ? 1 : 0.95 } : undefined}\n              onClick={() => !isDisabled && handleDateSelect(day)}\n              disabled={isDisabled}\n              className={cn(\n                'h-8 w-full cursor-pointer rounded-none flex items-center justify-center',\n                'text-[10px] font-medium transition-all duration-200',\n                !isLastColumn && 'border-r border-border',\n                !isLastRow && 'border-b border-border',\n                isCurrentMonthDay && 'hover:bg-secondary',\n                !isCurrentMonthDay && 'bg-secondary/40',\n                isSelected && 'bg-primary text-white hover:bg-primary/80',\n                isCurrentDay && !isSelected && 'border border-primary text-primary',\n                isDisabled && 'text-border-dark cursor-not-allowed hover:bg-transparent',\n                !isSelected && !isCurrentDay && !isDisabled && 'text-foreground'\n              )}\n            >\n              {day.getDate()}\n            </motion.button>\n          )\n        })}\n      </div>\n\n      {mode !== 'datetime-local' && (\n        <div className=\"mt-1.5\">\n          <button\n            type=\"button\"\n            onClick={() => handleDateSelect(new Date())}\n            className=\"w-full py-1.5 text-xs font-medium text-primary cursor-pointer hover:bg-secondary rounded-lg transition-colors\"\n          >\n            Today\n          </button>\n        </div>\n      )}\n    </>\n  )\n\n  return (\n    <div ref={datePickerRef} className={cn('relative w-full', className)}>\n      {label && (\n        <label className=\"block mb-1.5 text-sm font-medium text-foreground\">\n          {label}\n          {required && <span className=\"text-error ml-1\">*</span>}\n        </label>\n      )}\n\n      <button\n        ref={pickerTriggerRef}\n        type=\"button\"\n        onClick={() => !disabled && setIsOpen((current) => !current)}\n        disabled={disabled}\n        aria-required={required}\n        className={cn(\n          'w-full px-4 py-3 rounded-md border transition-all duration-200',\n          'bg-background text-left flex items-center justify-between gap-2 text-foreground',\n          'focus:outline-none focus:ring-1 focus:ring-primary/30 focus:border-primary/30',\n          'disabled:bg-secondary disabled:text-border-dark disabled:cursor-not-allowed',\n          'touch-target',\n          error && 'border-error',\n          !error && 'border-border',\n          isOpen && 'ring-1 ring-primary/30'\n        )}\n      >\n        <span className={cn('truncate', !value && 'text-foreground/50', disabled && 'text-border-dark')}>\n          {value ? getDisplayValue() : getPlaceholder()}\n        </span>\n        <Calendar className={cn('w-5 h-5 shrink-0', disabled ? 'text-border-dark' : 'text-primary')} />\n      </button>\n\n      {shouldAnimate ? (\n        <AnimatePresence>\n          {isOpen ? (\n            <FloatingPortal open={isOpen} anchorRef={pickerTriggerRef} placement={pickerPosition} matchWidth={false}>\n              <motion.div\n                initial={panelAnimation.initial}\n                animate={panelAnimation.animate}\n                exit={panelAnimation.exit}\n                transition={{ duration: 0.2 }}\n                className=\"z-50 w-72 bg-background rounded-md border border-border shadow-lg p-2.5\"\n              >\n                {mode === 'time' ? (\n                  <div className=\"space-y-2\">\n                    <div>\n                      <label className=\"block text-[11px] font-medium text-foreground/70 mb-1\">Choose time</label>\n                      {renderTimeControls()}\n                    </div>\n\n                    <div className=\"flex justify-end gap-2\">\n                      <button\n                        type=\"button\"\n                        onClick={() => setIsOpen(false)}\n                        className=\"rounded-md px-2.5 py-1.5 text-xs font-medium text-primary hover:bg-secondary transition-colors\"\n                      >\n                        Done\n                      </button>\n                    </div>\n                  </div>\n                ) : (\n                  <div className=\"space-y-2\">\n                    <div>{renderCalendar()}</div>\n\n                    {mode === 'datetime-local' && (\n                      <div className=\"space-y-2 pt-1\">\n                        <div>{renderTimeControls()}</div>\n\n                        <div className=\"flex justify-end gap-2\">\n                          <button\n                            type=\"button\"\n                            onClick={() => setIsOpen(false)}\n                            className=\"rounded-md px-2.5 py-1.5 text-xs font-medium text-primary hover:bg-secondary transition-colors\"\n                          >\n                            Done\n                          </button>\n                        </div>\n                      </div>\n                    )}\n                  </div>\n                )}\n              </motion.div>\n            </FloatingPortal>\n          ) : null}\n        </AnimatePresence>\n      ) : (\n        isOpen && (\n          <FloatingPortal open={isOpen} anchorRef={pickerTriggerRef} placement={pickerPosition} matchWidth={false}>\n            <div\n              className=\"z-50 w-72 bg-background rounded-md border border-border shadow-lg p-2.5\"\n            >\n              {mode === 'time' ? (\n                <div className=\"space-y-2\">\n                  <div>\n                    <label className=\"block text-[11px] font-medium text-foreground/70 mb-1\">Choose time</label>\n                    {renderTimeControls()}\n                  </div>\n\n                  <div className=\"flex justify-end gap-2\">\n                    <button\n                      type=\"button\"\n                      onClick={() => setIsOpen(false)}\n                      className=\"rounded-md px-2.5 py-1.5 text-xs font-medium text-primary hover:bg-secondary transition-colors\"\n                    >\n                      Done\n                    </button>\n                  </div>\n                </div>\n              ) : (\n                <div className=\"space-y-2\">\n                  <div>{renderCalendar()}</div>\n\n                  {mode === 'datetime-local' && (\n                    <div className=\"space-y-2 pt-1\">\n                      <div>{renderTimeControls()}</div>\n\n                      <div className=\"flex justify-end gap-2\">\n                        <button\n                          type=\"button\"\n                          onClick={() => setIsOpen(false)}\n                          className=\"rounded-md px-2.5 py-1.5 text-xs font-medium text-primary hover:bg-secondary transition-colors\"\n                        >\n                          Done\n                        </button>\n                      </div>\n                    </div>\n                  )}\n                </div>\n              )}\n            </div>\n          </FloatingPortal>\n        )\n      )}\n\n      {error && (\n        <motion.p\n          {...(shouldAnimate ? { initial: { opacity: 0, y: -5 }, animate: { opacity: 1, y: 0 } } : {})}\n          className=\"mt-1.5 text-sm text-error\"\n        >\n          {error}\n        </motion.p>\n      )}\n\n      {hint && !error && <p className=\"mt-1.5 text-sm text-primary/70\">{hint}</p>}\n    </div>\n  )\n}\n\nexport default DatePicker","import React from 'react'\nimport 'flag-icons/css/flag-icons.min.css'\nimport { cn } from './utils'\n\nexport interface FlagIconProps {\n  iso2: string\n  className?: string\n}\n\nexport const FlagIcon: React.FC<FlagIconProps> = ({ iso2, className }) => {\n  const flagCode = iso2.trim().toLowerCase()\n\n  return <span aria-hidden className={cn(`fi fi-${flagCode}`, 'inline-block shrink-0', className)} />\n}\n\n","export interface Country {\n  iso2: string\n  name: string\n  dialCode: string\n}\n\nexport const countries: Country[] = [\n  { iso2: 'AF', name: 'Afghanistan', dialCode: '+93' },\n  { iso2: 'AL', name: 'Albania', dialCode: '+355' },\n  { iso2: 'DZ', name: 'Algeria', dialCode: '+213' },\n  { iso2: 'AS', name: 'American Samoa', dialCode: '+1-684' },\n  { iso2: 'AD', name: 'Andorra', dialCode: '+376' },\n  { iso2: 'AO', name: 'Angola', dialCode: '+244' },\n  { iso2: 'AI', name: 'Anguilla', dialCode: '+1-264' },\n  { iso2: 'AQ', name: 'Antarctica', dialCode: '+672' },\n  { iso2: 'AG', name: 'Antigua and Barbuda', dialCode: '+1-268' },\n  { iso2: 'AR', name: 'Argentina', dialCode: '+54' },\n  { iso2: 'AM', name: 'Armenia', dialCode: '+374' },\n  { iso2: 'AW', name: 'Aruba', dialCode: '+297' },\n  { iso2: 'AU', name: 'Australia', dialCode: '+61' },\n  { iso2: 'AT', name: 'Austria', dialCode: '+43' },\n  { iso2: 'AZ', name: 'Azerbaijan', dialCode: '+994' },\n  { iso2: 'BS', name: 'Bahamas', dialCode: '+1-242' },\n  { iso2: 'BH', name: 'Bahrain', dialCode: '+973' },\n  { iso2: 'BD', name: 'Bangladesh', dialCode: '+880' },\n  { iso2: 'BB', name: 'Barbados', dialCode: '+1-246' },\n  { iso2: 'BY', name: 'Belarus', dialCode: '+375' },\n  { iso2: 'BE', name: 'Belgium', dialCode: '+32' },\n  { iso2: 'BZ', name: 'Belize', dialCode: '+501' },\n  { iso2: 'BJ', name: 'Benin', dialCode: '+229' },\n  { iso2: 'BM', name: 'Bermuda', dialCode: '+1-441' },\n  { iso2: 'BT', name: 'Bhutan', dialCode: '+975' },\n  { iso2: 'BO', name: 'Bolivia', dialCode: '+591' },\n  { iso2: 'BA', name: 'Bosnia and Herzegovina', dialCode: '+387' },\n  { iso2: 'BW', name: 'Botswana', dialCode: '+267' },\n  { iso2: 'BR', name: 'Brazil', dialCode: '+55' },\n  { iso2: 'IO', name: 'British Indian Ocean Territory', dialCode: '+246' },\n  { iso2: 'BN', name: 'Brunei', dialCode: '+673' },\n  { iso2: 'BG', name: 'Bulgaria', dialCode: '+359' },\n  { iso2: 'BF', name: 'Burkina Faso', dialCode: '+226' },\n  { iso2: 'BI', name: 'Burundi', dialCode: '+257' },\n  { iso2: 'KH', name: 'Cambodia', dialCode: '+855' },\n  { iso2: 'CM', name: 'Cameroon', dialCode: '+237' },\n  { iso2: 'CA', name: 'Canada', dialCode: '+1' },\n  { iso2: 'CV', name: 'Cape Verde', dialCode: '+238' },\n  { iso2: 'KY', name: 'Cayman Islands', dialCode: '+1-345' },\n  { iso2: 'CF', name: 'Central African Republic', dialCode: '+236' },\n  { iso2: 'TD', name: 'Chad', dialCode: '+235' },\n  { iso2: 'CL', name: 'Chile', dialCode: '+56' },\n  { iso2: 'CN', name: 'China', dialCode: '+86' },\n  { iso2: 'CX', name: 'Christmas Island', dialCode: '+61' },\n  { iso2: 'CC', name: 'Cocos (Keeling) Islands', dialCode: '+61' },\n  { iso2: 'CO', name: 'Colombia', dialCode: '+57' },\n  { iso2: 'KM', name: 'Comoros', dialCode: '+269' },\n  { iso2: 'CG', name: 'Congo', dialCode: '+242' },\n  { iso2: 'CD', name: 'Congo, Democratic Republic', dialCode: '+243' },\n  { iso2: 'CK', name: 'Cook Islands', dialCode: '+682' },\n  { iso2: 'CR', name: 'Costa Rica', dialCode: '+506' },\n  { iso2: 'CI', name: \"Cote d'Ivoire\", dialCode: '+225' },\n  { iso2: 'HR', name: 'Croatia', dialCode: '+385' },\n  { iso2: 'CU', name: 'Cuba', dialCode: '+53' },\n  { iso2: 'CY', name: 'Cyprus', dialCode: '+357' },\n  { iso2: 'CZ', name: 'Czech Republic', dialCode: '+420' },\n  { iso2: 'DK', name: 'Denmark', dialCode: '+45' },\n  { iso2: 'DJ', name: 'Djibouti', dialCode: '+253' },\n  { iso2: 'DM', name: 'Dominica', dialCode: '+1-767' },\n  { iso2: 'DO', name: 'Dominican Republic', dialCode: '+1-809' },\n  { iso2: 'EC', name: 'Ecuador', dialCode: '+593' },\n  { iso2: 'EG', name: 'Egypt', dialCode: '+20' },\n  { iso2: 'SV', name: 'El Salvador', dialCode: '+503' },\n  { iso2: 'GQ', name: 'Equatorial Guinea', dialCode: '+240' },\n  { iso2: 'ER', name: 'Eritrea', dialCode: '+291' },\n  { iso2: 'EE', name: 'Estonia', dialCode: '+372' },\n  { iso2: 'ET', name: 'Ethiopia', dialCode: '+251' },\n  { iso2: 'FK', name: 'Falkland Islands', dialCode: '+500' },\n  { iso2: 'FO', name: 'Faroe Islands', dialCode: '+298' },\n  { iso2: 'FJ', name: 'Fiji', dialCode: '+679' },\n  { iso2: 'FI', name: 'Finland', dialCode: '+358' },\n  { iso2: 'FR', name: 'France', dialCode: '+33' },\n  { iso2: 'GF', name: 'French Guiana', dialCode: '+594' },\n  { iso2: 'PF', name: 'French Polynesia', dialCode: '+689' },\n  { iso2: 'GA', name: 'Gabon', dialCode: '+241' },\n  { iso2: 'GM', name: 'Gambia', dialCode: '+220' },\n  { iso2: 'GE', name: 'Georgia', dialCode: '+995' },\n  { iso2: 'DE', name: 'Germany', dialCode: '+49' },\n  { iso2: 'GH', name: 'Ghana', dialCode: '+233' },\n  { iso2: 'GI', name: 'Gibraltar', dialCode: '+350' },\n  { iso2: 'GR', name: 'Greece', dialCode: '+30' },\n  { iso2: 'GL', name: 'Greenland', dialCode: '+299' },\n  { iso2: 'GD', name: 'Grenada', dialCode: '+1-473' },\n  { iso2: 'GP', name: 'Guadeloupe', dialCode: '+590' },\n  { iso2: 'GU', name: 'Guam', dialCode: '+1-671' },\n  { iso2: 'GT', name: 'Guatemala', dialCode: '+502' },\n  { iso2: 'GG', name: 'Guernsey', dialCode: '+44-1481' },\n  { iso2: 'GN', name: 'Guinea', dialCode: '+224' },\n  { iso2: 'GW', name: 'Guinea-Bissau', dialCode: '+245' },\n  { iso2: 'GY', name: 'Guyana', dialCode: '+592' },\n  { iso2: 'HT', name: 'Haiti', dialCode: '+509' },\n  { iso2: 'HN', name: 'Honduras', dialCode: '+504' },\n  { iso2: 'HK', name: 'Hong Kong', dialCode: '+852' },\n  { iso2: 'HU', name: 'Hungary', dialCode: '+36' },\n  { iso2: 'IS', name: 'Iceland', dialCode: '+354' },\n  { iso2: 'IN', name: 'India', dialCode: '+91' },\n  { iso2: 'ID', name: 'Indonesia', dialCode: '+62' },\n  { iso2: 'IR', name: 'Iran', dialCode: '+98' },\n  { iso2: 'IQ', name: 'Iraq', dialCode: '+964' },\n  { iso2: 'IE', name: 'Ireland', dialCode: '+353' },\n  { iso2: 'IM', name: 'Isle of Man', dialCode: '+44-1624' },\n  { iso2: 'IL', name: 'Israel', dialCode: '+972' },\n  { iso2: 'IT', name: 'Italy', dialCode: '+39' },\n  { iso2: 'JM', name: 'Jamaica', dialCode: '+1-876' },\n  { iso2: 'JP', name: 'Japan', dialCode: '+81' },\n  { iso2: 'JE', name: 'Jersey', dialCode: '+44-1534' },\n  { iso2: 'JO', name: 'Jordan', dialCode: '+962' },\n  { iso2: 'KZ', name: 'Kazakhstan', dialCode: '+7' },\n  { iso2: 'KE', name: 'Kenya', dialCode: '+254' },\n  { iso2: 'KI', name: 'Kiribati', dialCode: '+686' },\n  { iso2: 'KP', name: 'Korea, North', dialCode: '+850' },\n  { iso2: 'KR', name: 'Korea, South', dialCode: '+82' },\n  { iso2: 'KW', name: 'Kuwait', dialCode: '+965' },\n  { iso2: 'KG', name: 'Kyrgyzstan', dialCode: '+996' },\n  { iso2: 'LA', name: 'Laos', dialCode: '+856' },\n  { iso2: 'LV', name: 'Latvia', dialCode: '+371' },\n  { iso2: 'LB', name: 'Lebanon', dialCode: '+961' },\n  { iso2: 'LS', name: 'Lesotho', dialCode: '+266' },\n  { iso2: 'LR', name: 'Liberia', dialCode: '+231' },\n  { iso2: 'LY', name: 'Libya', dialCode: '+218' },\n  { iso2: 'LI', name: 'Liechtenstein', dialCode: '+423' },\n  { iso2: 'LT', name: 'Lithuania', dialCode: '+370' },\n  { iso2: 'LU', name: 'Luxembourg', dialCode: '+352' },\n  { iso2: 'MO', name: 'Macau', dialCode: '+853' },\n  { iso2: 'MK', name: 'North Macedonia', dialCode: '+389' },\n  { iso2: 'MG', name: 'Madagascar', dialCode: '+261' },\n  { iso2: 'MW', name: 'Malawi', dialCode: '+265' },\n  { iso2: 'MY', name: 'Malaysia', dialCode: '+60' },\n  { iso2: 'MV', name: 'Maldives', dialCode: '+960' },\n  { iso2: 'ML', name: 'Mali', dialCode: '+223' },\n  { iso2: 'MT', name: 'Malta', dialCode: '+356' },\n  { iso2: 'MH', name: 'Marshall Islands', dialCode: '+692' },\n  { iso2: 'MQ', name: 'Martinique', dialCode: '+596' },\n  { iso2: 'MR', name: 'Mauritania', dialCode: '+222' },\n  { iso2: 'MU', name: 'Mauritius', dialCode: '+230' },\n  { iso2: 'YT', name: 'Mayotte', dialCode: '+262' },\n  { iso2: 'MX', name: 'Mexico', dialCode: '+52' },\n  { iso2: 'FM', name: 'Micronesia', dialCode: '+691' },\n  { iso2: 'MD', name: 'Moldova', dialCode: '+373' },\n  { iso2: 'MC', name: 'Monaco', dialCode: '+377' },\n  { iso2: 'MN', name: 'Mongolia', dialCode: '+976' },\n  { iso2: 'ME', name: 'Montenegro', dialCode: '+382' },\n  { iso2: 'MS', name: 'Montserrat', dialCode: '+1-664' },\n  { iso2: 'MA', name: 'Morocco', dialCode: '+212' },\n  { iso2: 'MZ', name: 'Mozambique', dialCode: '+258' },\n  { iso2: 'MM', name: 'Myanmar', dialCode: '+95' },\n  { iso2: 'NA', name: 'Namibia', dialCode: '+264' },\n  { iso2: 'NR', name: 'Nauru', dialCode: '+674' },\n  { iso2: 'NP', name: 'Nepal', dialCode: '+977' },\n  { iso2: 'NL', name: 'Netherlands', dialCode: '+31' },\n  { iso2: 'NC', name: 'New Caledonia', dialCode: '+687' },\n  { iso2: 'NZ', name: 'New Zealand', dialCode: '+64' },\n  { iso2: 'NI', name: 'Nicaragua', dialCode: '+505' },\n  { iso2: 'NE', name: 'Niger', dialCode: '+227' },\n  { iso2: 'NG', name: 'Nigeria', dialCode: '+234' },\n  { iso2: 'NU', name: 'Niue', dialCode: '+683' },\n  { iso2: 'NF', name: 'Norfolk Island', dialCode: '+672' },\n  { iso2: 'MP', name: 'Northern Mariana Islands', dialCode: '+1-670' },\n  { iso2: 'NO', name: 'Norway', dialCode: '+47' },\n  { iso2: 'OM', name: 'Oman', dialCode: '+968' },\n  { iso2: 'PK', name: 'Pakistan', dialCode: '+92' },\n  { iso2: 'PW', name: 'Palau', dialCode: '+680' },\n  { iso2: 'PS', name: 'Palestine', dialCode: '+970' },\n  { iso2: 'PA', name: 'Panama', dialCode: '+507' },\n  { iso2: 'PG', name: 'Papua New Guinea', dialCode: '+675' },\n  { iso2: 'PY', name: 'Paraguay', dialCode: '+595' },\n  { iso2: 'PE', name: 'Peru', dialCode: '+51' },\n  { iso2: 'PH', name: 'Philippines', dialCode: '+63' },\n  { iso2: 'PN', name: 'Pitcairn', dialCode: '+64' },\n  { iso2: 'PL', name: 'Poland', dialCode: '+48' },\n  { iso2: 'PT', name: 'Portugal', dialCode: '+351' },\n  { iso2: 'PR', name: 'Puerto Rico', dialCode: '+1-787' },\n  { iso2: 'QA', name: 'Qatar', dialCode: '+974' },\n  { iso2: 'RE', name: 'Reunion', dialCode: '+262' },\n  { iso2: 'RO', name: 'Romania', dialCode: '+40' },\n  { iso2: 'RU', name: 'Russia', dialCode: '+7' },\n  { iso2: 'RW', name: 'Rwanda', dialCode: '+250' },\n  { iso2: 'BL', name: 'Saint Barthelemy', dialCode: '+590' },\n  { iso2: 'SH', name: 'Saint Helena', dialCode: '+290' },\n  { iso2: 'KN', name: 'Saint Kitts and Nevis', dialCode: '+1-869' },\n  { iso2: 'LC', name: 'Saint Lucia', dialCode: '+1-758' },\n  { iso2: 'MF', name: 'Saint Martin', dialCode: '+590' },\n  { iso2: 'PM', name: 'Saint Pierre and Miquelon', dialCode: '+508' },\n  { iso2: 'VC', name: 'Saint Vincent and the Grenadines', dialCode: '+1-784' },\n  { iso2: 'WS', name: 'Samoa', dialCode: '+685' },\n  { iso2: 'SM', name: 'San Marino', dialCode: '+378' },\n  { iso2: 'ST', name: 'Sao Tome and Principe', dialCode: '+239' },\n  { iso2: 'SA', name: 'Saudi Arabia', dialCode: '+966' },\n  { iso2: 'SN', name: 'Senegal', dialCode: '+221' },\n  { iso2: 'RS', name: 'Serbia', dialCode: '+381' },\n  { iso2: 'SC', name: 'Seychelles', dialCode: '+248' },\n  { iso2: 'SL', name: 'Sierra Leone', dialCode: '+232' },\n  { iso2: 'SG', name: 'Singapore', dialCode: '+65' },\n  { iso2: 'SX', name: 'Sint Maarten', dialCode: '+1-721' },\n  { iso2: 'SK', name: 'Slovakia', dialCode: '+421' },\n  { iso2: 'SI', name: 'Slovenia', dialCode: '+386' },\n  { iso2: 'SB', name: 'Solomon Islands', dialCode: '+677' },\n  { iso2: 'SO', name: 'Somalia', dialCode: '+252' },\n  { iso2: 'ZA', name: 'South Africa', dialCode: '+27' },\n  { iso2: 'GS', name: 'South Georgia and the South Sandwich Islands', dialCode: '+500' },\n  { iso2: 'SS', name: 'South Sudan', dialCode: '+211' },\n  { iso2: 'ES', name: 'Spain', dialCode: '+34' },\n  { iso2: 'LK', name: 'Sri Lanka', dialCode: '+94' },\n  { iso2: 'SD', name: 'Sudan', dialCode: '+249' },\n  { iso2: 'SR', name: 'Suriname', dialCode: '+597' },\n  { iso2: 'SJ', name: 'Svalbard and Jan Mayen', dialCode: '+47' },\n  { iso2: 'SZ', name: 'Swaziland', dialCode: '+268' },\n  { iso2: 'SE', name: 'Sweden', dialCode: '+46' },\n  { iso2: 'CH', name: 'Switzerland', dialCode: '+41' },\n  { iso2: 'SY', name: 'Syria', dialCode: '+963' },\n  { iso2: 'TW', name: 'Taiwan', dialCode: '+886' },\n  { iso2: 'TJ', name: 'Tajikistan', dialCode: '+992' },\n  { iso2: 'TZ', name: 'Tanzania', dialCode: '+255' },\n  { iso2: 'TH', name: 'Thailand', dialCode: '+66' },\n  { iso2: 'TL', name: 'Timor-Leste', dialCode: '+670' },\n  { iso2: 'TG', name: 'Togo', dialCode: '+228' },\n  { iso2: 'TK', name: 'Tokelau', dialCode: '+690' },\n  { iso2: 'TO', name: 'Tonga', dialCode: '+676' },\n  { iso2: 'TT', name: 'Trinidad and Tobago', dialCode: '+1-868' },\n  { iso2: 'TN', name: 'Tunisia', dialCode: '+216' },\n  { iso2: 'TR', name: 'Turkey', dialCode: '+90' },\n  { iso2: 'TM', name: 'Turkmenistan', dialCode: '+993' },\n  { iso2: 'TC', name: 'Turks and Caicos Islands', dialCode: '+1-649' },\n  { iso2: 'TV', name: 'Tuvalu', dialCode: '+688' },\n  { iso2: 'UG', name: 'Uganda', dialCode: '+256' },\n  { iso2: 'UA', name: 'Ukraine', dialCode: '+380' },\n  { iso2: 'AE', name: 'United Arab Emirates', dialCode: '+971' },\n  { iso2: 'GB', name: 'United Kingdom', dialCode: '+44' },\n  { iso2: 'US', name: 'United States', dialCode: '+1' },\n  { iso2: 'UY', name: 'Uruguay', dialCode: '+598' },\n  { iso2: 'UZ', name: 'Uzbekistan', dialCode: '+998' },\n  { iso2: 'VU', name: 'Vanuatu', dialCode: '+678' },\n  { iso2: 'VA', name: 'Vatican City', dialCode: '+379' },\n  { iso2: 'VE', name: 'Venezuela', dialCode: '+58' },\n  { iso2: 'VN', name: 'Vietnam', dialCode: '+84' },\n  { iso2: 'VG', name: 'British Virgin Islands', dialCode: '+1-284' },\n  { iso2: 'VI', name: 'US Virgin Islands', dialCode: '+1-340' },\n  { iso2: 'WF', name: 'Wallis and Futuna', dialCode: '+681' },\n  { iso2: 'EH', name: 'Western Sahara', dialCode: '+212' },\n  { iso2: 'YE', name: 'Yemen', dialCode: '+967' },\n  { iso2: 'ZM', name: 'Zambia', dialCode: '+260' },\n  { iso2: 'ZW', name: 'Zimbabwe', dialCode: '+263' }\n]\n","'use client'\n\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { ChevronDown, Search, X } from 'lucide-react'\nimport { FlagIcon } from './FlagIcon'\nimport { cn } from './utils'\nimport { countries, type Country } from './countries'\nimport { FloatingPortal } from './FloatingPortal'\n\nexport interface CountrySelectProps {\n  value?: string\n  onChange?: (value: string) => void\n  onCountryChange?: (country: Country) => void\n  label?: string\n  required?: boolean\n  placeholder?: string\n  error?: string\n  hint?: string\n  searchable?: boolean\n  clearable?: boolean\n  showFlags?: boolean\n  disabled?: boolean\n  animate?: boolean\n  className?: string\n}\n\nexport const CountrySelect: React.FC<CountrySelectProps> = ({\n  value,\n  onChange,\n  onCountryChange,\n  label = 'Country',\n  required,\n  placeholder = 'Select country',\n  error,\n  hint,\n  searchable = true,\n  clearable = true,\n  showFlags = true,\n  disabled,\n  animate = true,\n  className,\n}) => {\n  const shouldAnimate = animate !== false\n  const [isOpen, setIsOpen] = useState(false)\n  const [searchQuery, setSearchQuery] = useState('')\n  const [dropdownPlacement, setDropdownPlacement] = useState<'top' | 'bottom'>('bottom')\n  const containerRef = useRef<HTMLDivElement>(null)\n  const triggerRef = useRef<HTMLDivElement>(null)\n  const searchInputRef = useRef<HTMLInputElement>(null)\n  const ignoreNextClickRef = useRef(false)\n\n  const selectedCountry = useMemo(() => countries.find((country) => country.iso2 === value), [value])\n\n  const filteredCountries = useMemo(() => {\n    if (!searchable || !searchQuery.trim()) return countries\n    const query = searchQuery.toLowerCase()\n    return countries.filter((country) => {\n      return (\n        country.name.toLowerCase().includes(query) ||\n        country.iso2.toLowerCase().includes(query) ||\n        country.dialCode.replace(/\\s/g, '').includes(query.replace(/\\s/g, ''))\n      )\n    })\n  }, [searchQuery, searchable])\n\n  useEffect(() => {\n    if (!isOpen || !searchable) return\n\n    const focusSearchInput = window.setTimeout(() => {\n      searchInputRef.current?.focus()\n    }, 0)\n\n    return () => window.clearTimeout(focusSearchInput)\n  }, [isOpen, searchable])\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n        setIsOpen(false)\n        setSearchQuery('')\n      }\n    }\n\n    document.addEventListener('mousedown', handleClickOutside)\n    return () => document.removeEventListener('mousedown', handleClickOutside)\n  }, [])\n\n  useEffect(() => {\n    if (!isOpen) return\n\n    const handleEscape = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        setIsOpen(false)\n      }\n    }\n\n    window.addEventListener('keydown', handleEscape)\n\n    const updatePlacement = () => {\n      if (!triggerRef.current) return\n\n      const rect = triggerRef.current.getBoundingClientRect()\n      const estimatedMenuHeight = searchable ? 360 : 300\n      const availableBelow = window.innerHeight - rect.bottom - 8\n      const availableAbove = rect.top - 8\n\n      if (availableBelow >= estimatedMenuHeight) {\n        setDropdownPlacement('bottom')\n        return\n      }\n\n      if (availableAbove >= estimatedMenuHeight) {\n        setDropdownPlacement('top')\n        return\n      }\n\n      setDropdownPlacement('bottom')\n    }\n\n    updatePlacement()\n    window.addEventListener('resize', updatePlacement)\n    window.addEventListener('scroll', updatePlacement, true)\n\n    return () => {\n      window.removeEventListener('keydown', handleEscape)\n      window.removeEventListener('resize', updatePlacement)\n      window.removeEventListener('scroll', updatePlacement, true)\n    }\n  }, [isOpen, searchable])\n\n  const handleChange = (iso2: string) => {\n    onChange?.(iso2)\n    const selected = countries.find((item) => item.iso2 === iso2)\n    if (selected) {\n      onCountryChange?.(selected)\n    }\n    setIsOpen(false)\n    setSearchQuery('')\n  }\n\n  const dropdownAnimation =\n    dropdownPlacement === 'top'\n      ? { initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: 10 } }\n      : { initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 } }\n\n  return (\n    <div ref={containerRef} className={cn('w-full space-y-1.5', className)}>\n      {label && (\n        <label className=\"block text-sm font-medium text-foreground\">\n          {label}\n          {required && <span className=\"text-error ml-1\">*</span>}\n        </label>\n      )}\n\n      <div ref={triggerRef} className=\"relative\">\n        <button\n          type=\"button\"\n          onMouseDown={(event) => {\n            if (!searchable || disabled || isOpen) return\n            event.preventDefault()\n            ignoreNextClickRef.current = true\n            setIsOpen(true)\n          }}\n          onClick={() => {\n            if (ignoreNextClickRef.current) {\n              ignoreNextClickRef.current = false\n              return\n            }\n            if (!disabled) {\n              setIsOpen((current) => !current)\n            }\n          }}\n          disabled={disabled}\n          aria-haspopup=\"listbox\"\n          aria-expanded={isOpen}\n          aria-required={required}\n          className={cn(\n            'w-full px-4 py-3 rounded-md border transition-all duration-200',\n            'bg-background text-left flex items-center justify-between gap-2',\n            'focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary/30',\n            'disabled:bg-secondary disabled:cursor-not-allowed',\n            'touch-target text-base',\n            error && 'border-error focus:ring-error',\n            isOpen && 'ring-2 ring-primary',\n            !error && (disabled ? 'opacity-50' : 'border-border'),\n            error && disabled && 'opacity-50'\n          )}\n        >\n          <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n            {showFlags && selectedCountry && (\n              <FlagIcon iso2={selectedCountry.iso2} className=\"h-4 w-6 rounded-xs ring-1 ring-black/10\" />\n            )}\n            <span className={cn('truncate', !selectedCountry && 'text-foreground/50')}>\n              {selectedCountry ? selectedCountry.name : placeholder}\n            </span>\n          </div>\n          <ChevronDown\n            className={cn(\n              'w-5 h-5 text-primary transition-transform shrink-0',\n              isOpen && 'rotate-180'\n            )}\n          />\n        </button>\n\n        {shouldAnimate ? (\n          <AnimatePresence>\n            {isOpen ? (\n              <FloatingPortal open={isOpen} anchorRef={triggerRef} placement={dropdownPlacement}>\n                <motion.div\n                  initial={dropdownAnimation.initial}\n                  animate={dropdownAnimation.animate}\n                  exit={dropdownAnimation.exit}\n                  transition={{ duration: 0.2 }}\n                  role=\"listbox\"\n                  className=\"z-50 w-full max-w-full bg-background rounded-md border border-border shadow-lg max-h-80 overflow-hidden overflow-x-hidden\"\n                >\n                  {searchable && (\n                    <div className=\"p-2 border-b border-border\">\n                      <div className=\"relative\">\n                        <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-primary/50\" />\n                        <input\n                          ref={searchInputRef}\n                          type=\"text\"\n                          placeholder=\"Search country or code\"\n                          value={searchQuery}\n                          onChange={(event) => setSearchQuery(event.target.value)}\n                          onKeyDown={(event) => {\n                            if (event.key === 'Escape') {\n                              setIsOpen(false)\n                            }\n                          }}\n                          className=\"w-full pl-10 pr-8 py-2 text-sm border border-border rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary/30\"\n                        />\n                        {searchQuery && (\n                          <button\n                            type=\"button\"\n                            onClick={() => setSearchQuery('')}\n                            className=\"absolute right-2 top-1/2 -translate-y-1/2\"\n                            aria-label=\"Clear search\"\n                          >\n                            <X className=\"w-4 h-4 text-primary/50 hover:text-primary\" />\n                          </button>\n                        )}\n                      </div>\n                    </div>\n                  )}\n\n                  <div className=\"overflow-y-auto max-h-64 p-2 space-y-1\">\n                    {clearable && (\n                      <button\n                        type=\"button\"\n                        role=\"option\"\n                        aria-selected={!value}\n                        onClick={() => handleChange('')}\n                        className={cn(\n                          'w-full px-3 py-2 text-left flex items-start gap-2 rounded-sm cursor-pointer',\n                          'hover:bg-secondary transition-colors',\n                          'text-foreground/70 italic',\n                          !value && 'bg-border text-foreground'\n                        )}\n                      >\n                        <span>None</span>\n                      </button>\n                    )}\n                    {filteredCountries.map((countryOption) => (\n                      <button\n                        key={countryOption.iso2}\n                        type=\"button\"\n                        role=\"option\"\n                        aria-selected={countryOption.iso2 === selectedCountry?.iso2}\n                        onClick={() => handleChange(countryOption.iso2)}\n                        className={cn(\n                          'w-full px-3 py-2 text-left flex items-start gap-2 rounded-sm cursor-pointer',\n                          'hover:bg-secondary transition-colors',\n                          countryOption.iso2 === selectedCountry?.iso2 && 'bg-border text-foreground'\n                        )}\n                      >\n                        {showFlags && (\n                          <FlagIcon iso2={countryOption.iso2} className=\"mt-0.5 h-4 w-6 rounded-xs ring-1 ring-black/10\" />\n                        )}\n                        <span className=\"text-sm font-medium text-foreground wrap-break-word whitespace-normal\">\n                          {countryOption.name}\n                        </span>\n                        <span className=\"ml-auto text-xs text-primary/70\">{countryOption.dialCode}</span>\n                      </button>\n                    ))}\n                  </div>\n                </motion.div>\n              </FloatingPortal>\n            ) : null}\n          </AnimatePresence>\n        ) : (\n          isOpen && (\n            <FloatingPortal open={isOpen} anchorRef={triggerRef} placement={dropdownPlacement}>\n              <div\n                role=\"listbox\"\n                className=\"z-50 w-full max-w-full bg-background rounded-md border border-border shadow-lg max-h-80 overflow-hidden overflow-x-hidden\"\n              >\n                {searchable && (\n                  <div className=\"p-2 border-b border-border\">\n                    <div className=\"relative\">\n                      <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-primary/50\" />\n                      <input\n                        ref={searchInputRef}\n                        type=\"text\"\n                        placeholder=\"Search country or code\"\n                        value={searchQuery}\n                        onChange={(event) => setSearchQuery(event.target.value)}\n                        onKeyDown={(event) => {\n                          if (event.key === 'Escape') {\n                            setIsOpen(false)\n                          }\n                        }}\n                        className=\"w-full pl-10 pr-8 py-2 text-sm border border-border rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary/30\"\n                      />\n                      {searchQuery && (\n                        <button\n                          type=\"button\"\n                          onClick={() => setSearchQuery('')}\n                          className=\"absolute right-2 top-1/2 -translate-y-1/2\"\n                          aria-label=\"Clear search\"\n                        >\n                          <X className=\"w-4 h-4 text-primary/50 hover:text-primary\" />\n                        </button>\n                      )}\n                    </div>\n                  </div>\n                )}\n\n                <div className=\"overflow-y-auto max-h-64 p-2 space-y-1\">\n                  {clearable && (\n                    <button\n                      type=\"button\"\n                      role=\"option\"\n                      aria-selected={!value}\n                      onClick={() => handleChange('')}\n                      className={cn(\n                        'w-full px-3 py-2 text-left flex items-start gap-2 rounded-sm cursor-pointer',\n                        'hover:bg-secondary transition-colors',\n                        'text-foreground/70 italic',\n                        !value && 'bg-border text-foreground'\n                      )}\n                    >\n                      <span>None</span>\n                    </button>\n                  )}\n                  {filteredCountries.map((countryOption) => (\n                    <button\n                      key={countryOption.iso2}\n                      type=\"button\"\n                      role=\"option\"\n                      aria-selected={countryOption.iso2 === selectedCountry?.iso2}\n                      onClick={() => handleChange(countryOption.iso2)}\n                      className={cn(\n                        'w-full px-3 py-2 text-left flex items-start gap-2 rounded-sm cursor-pointer',\n                        'hover:bg-secondary transition-colors',\n                        countryOption.iso2 === selectedCountry?.iso2 && 'bg-border text-foreground'\n                      )}\n                    >\n                      {showFlags && (\n                        <FlagIcon iso2={countryOption.iso2} className=\"mt-0.5 h-4 w-6 rounded-xs ring-1 ring-black/10\" />\n                      )}\n                      <span className=\"text-sm font-medium text-foreground wrap-break-word whitespace-normal\">\n                        {countryOption.name}\n                      </span>\n                      <span className=\"ml-auto text-xs text-primary/70\">{countryOption.dialCode}</span>\n                    </button>\n                  ))}\n                </div>\n              </div>\n            </FloatingPortal>\n          )\n        )}\n      </div>\n\n      {error && (\n        <motion.p\n          {...(shouldAnimate ? { initial: { opacity: 0, y: -5 }, animate: { opacity: 1, y: 0 } } : {})}\n          className=\"text-sm text-error\"\n        >\n          {error}\n        </motion.p>\n      )}\n\n      {hint && !error && (\n        <p className=\"text-sm text-primary/70\">{hint}</p>\n      )}\n    </div>\n  )\n}\n\nCountrySelect.displayName = 'CountrySelect'\n","'use client'\n\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { ChevronDown, Search, X } from 'lucide-react'\nimport { FlagIcon } from './FlagIcon'\nimport { cn } from './utils'\nimport { countries, type Country } from './countries'\nimport { FloatingPortal } from './FloatingPortal'\n\nexport interface PhoneInputProps\n  extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange'> {\n  value?: string\n  onChange?: (value: string) => void\n  country?: string\n  defaultCountry?: string\n  autoDetect?: boolean\n  onCountryChange?: (country: Country) => void\n  label?: string\n  error?: string\n  hint?: string\n  searchable?: boolean\n  showFlags?: boolean\n  animate?: boolean\n  className?: string\n}\n\nconst getLocaleCountry = () => {\n  if (typeof navigator === 'undefined') return null\n  const locale = navigator.language || ''\n  const match = locale.match(/[-_](\\w{2})$/)\n  return match ? match[1].toUpperCase() : null\n}\n\nconst normalizeDialCode = (dialCode: string) => dialCode.replace(/\\s/g, '')\n\nconst findCountryByDialCodePrefix = (inputValue: string, preferredIso2?: string) => {\n  const compactValue = inputValue.replace(/\\s/g, '')\n  const normalizedValue = compactValue.startsWith('00')\n    ? `+${compactValue.slice(2)}`\n    : compactValue\n\n  if (!normalizedValue.startsWith('+')) return undefined\n\n  const matchingCountries = countries.filter((item) => {\n    const dialCode = normalizeDialCode(item.dialCode)\n    return normalizedValue.startsWith(dialCode)\n  })\n\n  const preferredCountry = preferredIso2\n    ? matchingCountries.find((item) => item.iso2 === preferredIso2.toUpperCase())\n    : undefined\n\n  if (preferredCountry) {\n    return preferredCountry\n  }\n\n  return [...matchingCountries].sort(\n    (left, right) => normalizeDialCode(right.dialCode).length - normalizeDialCode(left.dialCode).length\n  )[0]\n}\n\nexport const PhoneInput: React.FC<PhoneInputProps> = ({\n  value,\n  onChange,\n  country,\n  defaultCountry = 'KE',\n  autoDetect = false,\n  onCountryChange,\n  label,\n  error,\n  hint,\n  searchable = true,\n  showFlags = true,\n  animate = true,\n  disabled,\n  required,\n  className,\n  placeholder,\n  ...inputProps\n}) => {\n  const shouldAnimate = animate !== false\n  const [isOpen, setIsOpen] = useState(false)\n  const [searchQuery, setSearchQuery] = useState('')\n  const [internalCountry, setInternalCountry] = useState<string>(defaultCountry)\n  const [dropdownPlacement, setDropdownPlacement] = useState<'top' | 'bottom'>('bottom')\n  const containerRef = useRef<HTMLDivElement>(null)\n  const triggerRef = useRef<HTMLDivElement>(null)\n  const searchInputRef = useRef<HTMLInputElement>(null)\n  const ignoreNextClickRef = useRef(false)\n  const lastEmittedIso2Ref = useRef<string | null>(null)\n  const didInitValueRef = useRef(false)\n\n  useEffect(() => {\n    if (country) {\n      setInternalCountry(country.toUpperCase())\n    }\n  }, [country])\n\n  useEffect(() => {\n    if (!country && autoDetect) {\n      const localeCountry = getLocaleCountry()\n      if (localeCountry) {\n        setInternalCountry(localeCountry)\n      }\n    }\n  }, [autoDetect, country])\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n        setIsOpen(false)\n        setSearchQuery('')\n      }\n    }\n\n    document.addEventListener('mousedown', handleClickOutside)\n    return () => document.removeEventListener('mousedown', handleClickOutside)\n  }, [])\n\n  const selectedCountry = useMemo(() => {\n    const inferredCountry = value ? findCountryByDialCodePrefix(value, country || internalCountry) : undefined\n\n    if (country) {\n      const controlledCountry = countries.find((item) => item.iso2 === country.toUpperCase())\n      return controlledCountry || inferredCountry || countries[0]\n    }\n\n    if (inferredCountry) {\n      return inferredCountry\n    }\n\n    const iso2 = (internalCountry || defaultCountry).toUpperCase()\n    return countries.find((item) => item.iso2 === iso2) || countries[0]\n  }, [country, internalCountry, defaultCountry, value])\n\n  useEffect(() => {\n    if (country) return\n    if (!value) return\n\n    const inferredCountry = findCountryByDialCodePrefix(value, internalCountry)\n    if (!inferredCountry) return\n\n    if (inferredCountry.iso2 !== internalCountry) {\n      setInternalCountry(inferredCountry.iso2)\n    }\n  }, [country, value, internalCountry])\n\n  useEffect(() => {\n    if (!selectedCountry) return\n    if (lastEmittedIso2Ref.current === selectedCountry.iso2) return\n    lastEmittedIso2Ref.current = selectedCountry.iso2\n    onCountryChange?.(selectedCountry)\n  }, [selectedCountry, onCountryChange])\n\n  useEffect(() => {\n    if (didInitValueRef.current) return\n    if (!onChange) return\n    if ((value ?? '').trim() !== '') return\n\n    didInitValueRef.current = true\n    onChange(selectedCountry.dialCode)\n  }, [onChange, selectedCountry.dialCode, value])\n\n  useEffect(() => {\n    if (!isOpen) return\n\n    const handleEscape = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        setIsOpen(false)\n      }\n    }\n\n    window.addEventListener('keydown', handleEscape)\n\n    const updatePlacement = () => {\n      if (!triggerRef.current) return\n\n      const rect = triggerRef.current.getBoundingClientRect()\n      const estimatedMenuHeight = searchable ? 360 : 300\n      const availableBelow = window.innerHeight - rect.bottom - 8\n      const availableAbove = rect.top - 8\n\n      if (availableBelow >= estimatedMenuHeight) {\n        setDropdownPlacement('bottom')\n        return\n      }\n\n      if (availableAbove >= estimatedMenuHeight) {\n        setDropdownPlacement('top')\n        return\n      }\n\n      setDropdownPlacement('bottom')\n    }\n\n    updatePlacement()\n    window.addEventListener('resize', updatePlacement)\n    window.addEventListener('scroll', updatePlacement, true)\n\n    return () => {\n      window.removeEventListener('keydown', handleEscape)\n      window.removeEventListener('resize', updatePlacement)\n      window.removeEventListener('scroll', updatePlacement, true)\n    }\n  }, [isOpen, searchable])\n\n  const filteredCountries = useMemo(() => {\n    if (!searchable || !searchQuery.trim()) return countries\n    const query = searchQuery.toLowerCase()\n    return countries.filter((item) => {\n      return (\n        item.name.toLowerCase().includes(query) ||\n        item.iso2.toLowerCase().includes(query) ||\n        item.dialCode.replace(/\\s/g, '').includes(query.replace(/\\s/g, ''))\n      )\n    })\n  }, [searchQuery, searchable])\n\n  useEffect(() => {\n    if (!isOpen || !searchable) return\n\n    const focusSearchInput = window.setTimeout(() => {\n      searchInputRef.current?.focus()\n    }, 0)\n\n    return () => window.clearTimeout(focusSearchInput)\n  }, [isOpen, searchable])\n\n  const handleCountrySelect = (item: Country) => {\n    if (!country) {\n      setInternalCountry(item.iso2)\n    }\n    onCountryChange?.(item)\n\n    const currentValue = (value ?? '').replace(/\\s/g, '')\n    const detectedCountry = findCountryByDialCodePrefix(currentValue, country || internalCountry)\n    const detectedDialCode = detectedCountry ? normalizeDialCode(detectedCountry.dialCode) : ''\n\n    let nextValue = item.dialCode\n\n    if (currentValue) {\n      if (detectedDialCode && currentValue.startsWith(detectedDialCode)) {\n        nextValue = `${item.dialCode}${currentValue.slice(detectedDialCode.length)}`\n      } else if (currentValue.startsWith('+')) {\n        nextValue = `${item.dialCode}${currentValue.replace(/^\\+[\\d-]*/, '')}`\n      } else {\n        nextValue = `${item.dialCode}${currentValue}`\n      }\n    }\n\n    onChange?.(nextValue)\n\n    setIsOpen(false)\n    setSearchQuery('')\n  }\n\n  const dropdownAnimation =\n    dropdownPlacement === 'top'\n      ? { initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: 10 } }\n      : { initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 } }\n\n  return (\n    <div ref={containerRef} className={cn('w-full space-y-1.5', className)}>\n      {label && (\n        <label className=\"block text-sm font-medium text-foreground\">\n          {label}\n          {required && <span className=\"text-error ml-1\">*</span>}\n        </label>\n      )}\n\n      <div ref={triggerRef} className=\"relative\">\n        <div\n          className={cn(\n            'flex items-stretch rounded-md border transition-all duration-200 bg-background overflow-hidden',\n            'focus-within:ring-2 focus-within:ring-primary focus-within:border-transparent',\n            'disabled:bg-secondary disabled:cursor-not-allowed',\n            error ? 'border-error' : 'border-border'\n          )}\n        >\n          <button\n            type=\"button\"\n            onMouseDown={(event) => {\n              if (!searchable || disabled || isOpen) return\n              event.preventDefault()\n              ignoreNextClickRef.current = true\n              setIsOpen(true)\n            }}\n            onClick={() => {\n              if (ignoreNextClickRef.current) {\n                ignoreNextClickRef.current = false\n                return\n              }\n              if (!disabled) {\n                setIsOpen((current) => !current)\n              }\n            }}\n            disabled={disabled}\n            className={cn(\n              'flex items-center  gap-2 px-3 py-2 text-left',\n              'border-r border-border/70',\n              'hover:bg-secondary transition-colors',\n              'disabled:opacity-50 disabled:cursor-not-allowed'\n            )}\n            aria-haspopup=\"listbox\"\n            aria-expanded={isOpen}\n          >\n            {showFlags && (\n              <FlagIcon iso2={selectedCountry.iso2} className=\"h-4 w-6 rounded-xs ring-1 ring-black/10\" />\n            )}\n            <span className=\"text-sm font-medium text-foreground\">\n              {selectedCountry.iso2}\n            </span>\n            <ChevronDown\n              className={cn(\n                'w-4 h-4 text-primary transition-transform',\n                isOpen && 'rotate-180'\n              )}\n            />\n          </button>\n\n          <input\n            type=\"tel\"\n            inputMode=\"tel\"\n            value={value ?? ''}\n            onChange={(event) => onChange?.(event.target.value)}\n            placeholder={placeholder || `${selectedCountry.dialCode} Phone number`}\n            disabled={disabled}\n            required={required}\n            className={cn(\n              'flex-1 px-4 py-2.5 text-base bg-transparent text-foreground',\n              'placeholder:text-foreground/50 focus:outline-none',\n              'disabled:opacity-50 disabled:cursor-not-allowed'\n            )}\n            {...inputProps}\n          />\n        </div>\n\n        {shouldAnimate ? (\n          <AnimatePresence>\n            {isOpen ? (\n              <FloatingPortal open={isOpen} anchorRef={triggerRef} placement={dropdownPlacement}>\n                <motion.div\n                  initial={dropdownAnimation.initial}\n                  animate={dropdownAnimation.animate}\n                  exit={dropdownAnimation.exit}\n                  transition={{ duration: 0.2 }}\n                  role=\"listbox\"\n                  className=\"z-50 w-full max-w-full bg-background rounded-md border border-border shadow-lg max-h-80 overflow-hidden overflow-x-hidden\"\n                >\n              {searchable && (\n                <div className=\"p-2 border-b border-border\">\n                  <div className=\"relative\">\n                    <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-primary/50\" />\n                    <input\n                      ref={searchInputRef}\n                      type=\"text\"\n                      placeholder=\"Search country or code\"\n                      value={searchQuery}\n                      onChange={(event) => setSearchQuery(event.target.value)}\n                          onKeyDown={(event) => {\n                            if (event.key === 'Escape') {\n                              setIsOpen(false)\n                            }\n                          }}\n                          className=\"w-full pl-10 pr-8 py-2 text-sm border border-border rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary/30\"\n                    />\n                    {searchQuery && (\n                      <button\n                        type=\"button\"\n                        onClick={() => setSearchQuery('')}\n                        className=\"absolute right-2 top-1/2 -translate-y-1/2\"\n                        aria-label=\"Clear search\"\n                      >\n                        <X className=\"w-4 h-4 text-primary/50 hover:text-primary\" />\n                      </button>\n                    )}\n                  </div>\n                </div>\n              )}\n\n              <div className=\"overflow-y-auto max-h-64 p-2 space-y-1\">\n                {filteredCountries.map((item) => (\n                  <button\n                    key={item.iso2}\n                    type=\"button\"\n                    role=\"option\"\n                    aria-selected={item.iso2 === selectedCountry.iso2}\n                    onClick={() => handleCountrySelect(item)}\n                    className={cn(\n                      'w-full px-3 py-2 text-left flex items-start gap-2 rounded-sm cursor-pointer',\n                      'hover:bg-secondary transition-colors',\n                      item.iso2 === selectedCountry.iso2 && 'bg-border text-foreground'\n                    )}\n                  >\n                    {showFlags && (\n                      <FlagIcon iso2={item.iso2} className=\"mt-0.5 h-4 w-6 rounded-xs ring-1 ring-black/10\" />\n                    )}\n                    <span className=\"text-sm font-medium text-foreground wrap-break-word whitespace-normal\">\n                      {item.name}\n                    </span>\n                    <span className=\"ml-auto text-xs text-primary/70\">\n                      {item.dialCode}\n                    </span>\n                  </button>\n                ))}\n              </div>\n                </motion.div>\n              </FloatingPortal>\n          ) : null}\n          </AnimatePresence>\n        ) : (\n          isOpen && (\n            <FloatingPortal open={isOpen} anchorRef={triggerRef} placement={dropdownPlacement}>\n              <div\n                role=\"listbox\"\n                className=\"z-50 w-full max-w-full bg-background rounded-md border border-border shadow-lg max-h-80 overflow-hidden overflow-x-hidden\"\n              >\n            {searchable && (\n              <div className=\"p-2 border-b border-border\">\n                <div className=\"relative\">\n                  <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-primary/50\" />\n                  <input\n                    ref={searchInputRef}\n                    type=\"text\"\n                    placeholder=\"Search country or code\"\n                    value={searchQuery}\n                    onChange={(event) => setSearchQuery(event.target.value)}\n                    onKeyDown={(event) => {\n                      if (event.key === 'Escape') {\n                        setIsOpen(false)\n                      }\n                    }}\n                    className=\"w-full pl-10 pr-8 py-2 text-sm border border-border rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary/30\"\n                  />\n                  {searchQuery && (\n                    <button\n                      type=\"button\"\n                      onClick={() => setSearchQuery('')}\n                      className=\"absolute right-2 top-1/2 -translate-y-1/2\"\n                      aria-label=\"Clear search\"\n                    >\n                      <X className=\"w-4 h-4 text-primary/50 hover:text-primary\" />\n                    </button>\n                  )}\n                </div>\n              </div>\n            )}\n\n            <div className=\"overflow-y-auto max-h-64 p-2 space-y-1\">\n              {filteredCountries.map((item) => (\n                <button\n                  key={item.iso2}\n                  type=\"button\"\n                  role=\"option\"\n                  aria-selected={item.iso2 === selectedCountry.iso2}\n                  onClick={() => handleCountrySelect(item)}\n                  className={cn(\n                    'w-full px-3 py-2 text-left flex items-start gap-2 rounded-sm cursor-pointer',\n                    'hover:bg-secondary transition-colors',\n                    item.iso2 === selectedCountry.iso2 && 'bg-border text-foreground'\n                  )}\n                >\n                  {showFlags && (\n                    <FlagIcon iso2={item.iso2} className=\"mt-0.5 h-4 w-6 rounded-xs ring-1 ring-black/10\" />\n                  )}\n                  <span className=\"text-sm font-medium text-foreground wrap-break-word whitespace-normal\">\n                    {item.name}\n                  </span>\n                  <span className=\"ml-auto text-xs text-primary/70\">\n                    {item.dialCode}\n                  </span>\n                </button>\n              ))}\n            </div>\n              </div>\n            </FloatingPortal>\n          )\n        )}\n      </div>\n\n      {error && (\n        <motion.p\n          {...(shouldAnimate ? { initial: { opacity: 0, y: -5 }, animate: { opacity: 1, y: 0 } } : {})}\n          className=\"text-sm text-error\"\n        >\n          {error}\n        </motion.p>\n      )}\n\n      {hint && !error && (\n        <p className=\"text-sm text-primary/70\">{hint}</p>\n      )}\n    </div>\n  )\n}\n\nPhoneInput.displayName = 'PhoneInput'\n","'use client'\n\nimport React, { forwardRef, useState } from 'react'\nimport { motion } from 'framer-motion'\nimport { Eye, EyeOff } from 'lucide-react'\nimport { cn } from './utils'\nimport DatePicker from './DatePicker'\nimport { CountrySelect } from './CountrySelect'\nimport { PhoneInput } from './PhoneInput'\n\ntype InputValue = string | Date \n\ntype NativeInputType = Exclude<React.HTMLInputTypeAttribute, 'date' | 'time' | 'datetime-local' | 'phone' | 'country' | 'tel'>\n\ntype NativeInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'value' | 'onChange'> & {\n  type?: NativeInputType\n  value?: string | number | readonly string[]\n  onChange?: (value: InputValue) => void\n  onValueChange?: (value: InputValue) => void\n  label?: string\n  error?: string\n  hint?: string\n  leftIcon?: React.ReactNode\n  rightIcon?: React.ReactNode\n  animate?: boolean\n}\n\ntype PhoneInputFieldProps = Omit<React.ComponentProps<typeof PhoneInput>, 'value' | 'onChange'> & {\n  type: 'phone' | 'tel'\n  value?: string\n  onChange?: (value: InputValue) => void\n  onValueChange?: (value: InputValue) => void\n}\n\ntype CountrySelectInputProps = Omit<React.ComponentProps<typeof CountrySelect>, 'value' | 'onChange'> & {\n  type: 'country'\n  value?: string\n  onChange?: (value: InputValue) => void\n  onValueChange?: (value: InputValue) => void\n}\n\ntype DatePickerInputProps = Omit<React.ComponentProps<typeof DatePicker>, 'value' | 'onChange'> & {\n  type: 'date' | 'time' | 'datetime-local'\n  value?: Date\n  onChange?: (value: InputValue) => void\n  onValueChange?: (value: InputValue) => void\n}\n\nexport type InputProps = NativeInputProps | PhoneInputFieldProps | CountrySelectInputProps | DatePickerInputProps\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n  (props, ref) => {\n    const shouldAnimate = props.animate !== false\n    const [showPassword, setShowPassword] = useState(false)\n    const emitValueChange = (nextValue: InputValue) => {\n      props.onChange?.(nextValue)\n      props.onValueChange?.(nextValue)\n    }\n\n    if (props.type === 'phone' || props.type === 'tel') {\n      const { type, value, onChange, onValueChange, ...phoneProps } = props\n      return (\n        <PhoneInput\n          {...phoneProps}\n          value={typeof value === 'string' ? value : ''}\n          onChange={(nextValue) => emitValueChange(nextValue)}\n        />\n      )\n    }\n\n    if (props.type === 'country') {\n      const { type, value, onChange, onValueChange, ...countryProps } = props\n      return (\n        <CountrySelect\n          {...countryProps}\n          value={typeof value === 'string' ? value : ''}\n          onChange={(nextValue) => emitValueChange(nextValue)}\n        />\n      )\n    }\n\n    if (props.type === 'date' || props.type === 'time' || props.type === 'datetime-local') {\n      const { type, value, onChange, onValueChange, ...dateProps } = props\n      const pickerMode = type as 'date' | 'time' | 'datetime-local'\n      return (\n        <DatePicker\n          {...dateProps}\n          mode={pickerMode}\n          value={value instanceof Date ? value : undefined}\n          onChange={(nextValue: Date) => emitValueChange(nextValue)}\n        />\n      )\n    }\n\n    const nativeProps = props as NativeInputProps\n    const {\n      label,\n      error,\n      hint,\n      leftIcon,\n      rightIcon,\n      animate,\n      className,\n      type,\n      value,\n      placeholder,\n      disabled,\n      required,\n      onChange,\n      onValueChange,\n      onWheel,\n      ...propsForInput\n    } = nativeProps\n\n    const shouldSuppressNumberSteppers = type === 'number'\n\n    const isPassword = type === 'password'\n    const inputType = isPassword && showPassword ? 'text' : type\n\n    return (\n      <div className=\"w-full space-y-1.5\">\n        {label && (\n          <label className=\"block text-sm font-medium text-foreground\">\n            {label}\n            {required && <span className=\"text-error ml-1\">*</span>}\n          </label>\n        )}\n        \n        <div className=\"relative\">\n          {leftIcon && (\n            <div className=\"absolute flex items-center pointer-events-none text-primary\" style={{ left: '14px', top: '50%', transform: 'translateY(-50%)' }}>\n              {leftIcon}\n            </div>\n          )}\n          \n          <input\n            ref={ref}\n            type={inputType}\n            className={cn(\n              'w-full rounded-md border transition-all duration-200',\n              'bg-background text-foreground placeholder:text-foreground/50',\n              'focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent',\n              'disabled:bg-secondary disabled:cursor-not-allowed',\n              'touch-target text-base',\n              shouldSuppressNumberSteppers && 'number-input',\n              error && 'border-error focus:ring-error',\n              !error && 'border-border',\n              className\n            )}\n            style={{\n              paddingTop: '12px',\n              paddingBottom: '12px',\n              paddingLeft: leftIcon ? '44px' : '16px',\n              paddingRight: (rightIcon || isPassword) ? '44px' : '16px',\n            }}\n            value={value as string | number | readonly string[] | undefined}\n            onChange={(event) => emitValueChange(event.target.value)}\n            onWheel={shouldSuppressNumberSteppers ? (event) => {\n              event.preventDefault()\n              onWheel?.(event)\n            } : onWheel}\n            placeholder={placeholder}\n            disabled={disabled}\n            required={required}\n            \n            {...propsForInput}\n          />\n          \n          {isPassword && (\n            <motion.button\n              type=\"button\"\n              onClick={() => setShowPassword(!showPassword)}\n              className=\"absolute text-primary hover:text-primary/80 transition-colors\"\n              style={{ \n                right: '14px', \n                top: '50%',\n                display: 'inline-flex',\n                alignItems: 'center',\n                justifyContent: 'center'\n              }}\n              aria-label={showPassword ? 'Hide password' : 'Show password'}\n              whileTap={shouldAnimate ? { scale: 0.9, y: '-50%' } : undefined}\n              animate={{ y: '-50%' }}\n              transition={shouldAnimate ? { duration: 0.1 } : { duration: 0 }}\n            >\n              {showPassword ? (\n                <EyeOff className=\"w-5 h-5\" />\n              ) : (\n                <Eye className=\"w-5 h-5\" />\n              )}\n            </motion.button>\n          )}\n          \n          {rightIcon && !isPassword && (\n            <div className=\"absolute flex items-center pointer-events-none text-primary\" style={{ right: '14px', top: '50%', transform: 'translateY(-50%)' }}>\n              {rightIcon}\n            </div>\n          )}\n        </div>\n        \n        {error && (\n          <motion.p\n            {...(shouldAnimate ? { initial: { opacity: 0, y: -5 }, animate: { opacity: 1, y: 0 } } : {})}\n            className=\"text-sm text-error\"\n          >\n            {error}\n          </motion.p>\n        )}\n        \n        {hint && !error && (\n          <p className=\"text-sm text-primary/70\">{hint}</p>\n        )}\n      </div>\n    )\n  }\n)\n\nInput.displayName = 'Input'\n","'use client'\n\nimport React, { forwardRef } from 'react'\nimport { motion } from 'framer-motion'\nimport { cn } from './utils'\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {\n  label?: string\n  error?: string\n  helperText?: string\n  animate?: boolean\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n  ({ label, error, helperText, className, required, animate = true, ...props }, ref) => {\n    const shouldAnimate = animate !== false\n    return (\n      <motion.div\n        {...(shouldAnimate\n          ? { initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3 } }\n          : {})}\n        className=\"w-full\"\n      >\n        {label && (\n          <label className=\"block text-sm font-medium text-foreground mb-1.5\">\n            {label}\n            {required && <span className=\"text-error ml-1\">*</span>}\n          </label>\n        )}\n        <textarea\n          ref={ref}\n          className={cn(\n            'w-full px-4 py-3 bg-background border border-border rounded-md',\n            'text-foreground placeholder:text-foreground/50',\n            'focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent',\n            'disabled:bg-secondary disabled:opacity-50 disabled:cursor-not-allowed',\n            'transition-all duration-200 resize-vertical',\n            'text-base touch-target',\n            error && 'border-error focus:ring-error',\n            className\n          )}\n          {...props}\n        />\n        {error && (\n          <motion.p\n            {...(shouldAnimate ? { initial: { opacity: 0, y: -5 }, animate: { opacity: 1, y: 0 } } : {})}\n            className=\"mt-1 text-sm text-error\"\n          >\n            {error}\n          </motion.p>\n        )}\n        {helperText && !error && (\n          <p className=\"mt-1 text-sm text-primary/70\">{helperText}</p>\n        )}\n      </motion.div>\n    )\n  }\n)\n\nTextarea.displayName = 'Textarea'\n","'use client'\n\nimport React, { forwardRef, useState } from 'react'\nimport { motion } from 'framer-motion'\nimport { Check } from 'lucide-react'\nimport { cn } from './utils'\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n  label?: string\n  description?: string\n  onChange?: (checked: boolean) => void\n  animate?: boolean\n}\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n  ({ label, description, className, checked, defaultChecked, onChange, animate = true, ...props }, ref) => {\n    const shouldAnimate = animate !== false\n    const [internalChecked, setInternalChecked] = useState(defaultChecked || false)\n    \n    // Use controlled value if provided, otherwise use internal state\n    const isChecked = checked !== undefined ? checked : internalChecked\n    \n    const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n      if (checked === undefined) {\n        setInternalChecked(e.target.checked)\n      }\n      onChange?.(e.target.checked)\n    }\n    \n    return (\n      <label className=\"flex items-start gap-3 cursor-pointer group\">\n        <div className=\"relative flex-shrink-0 mt-0.5\">\n          <input\n            ref={ref}\n            type=\"checkbox\"\n            className=\"sr-only peer\"\n            checked={isChecked}\n            onChange={handleChange}\n            {...props}\n          />\n          <motion.div\n            className={cn(\n              'w-6 h-6 rounded-md border-2 transition-all duration-200',\n              'peer-focus:ring-2 peer-focus:ring-primary peer-focus:ring-offset-2',\n              'peer-disabled:opacity-50 peer-disabled:cursor-not-allowed',\n              'flex items-center justify-center',\n              isChecked ? 'bg-primary border-primary' : 'border-border bg-secondary',\n              className\n            )}\n            whileTap={shouldAnimate ? { scale: 0.95 } : undefined}\n          >\n            <Check className={cn(\n              'w-3 h-3 text-white transition-opacity duration-200',\n              isChecked ? 'opacity-100' : 'opacity-0'\n            )} />\n          </motion.div>\n        </div>\n        \n        {(label || description) && (\n          <div className=\"flex-1 space-y-0.5\">\n            {label && (\n              <div className=\"text-base font-medium text-foreground group-hover:text-primary transition-colors\">\n                {label}\n              </div>\n            )}\n            {description && (\n              <div className=\"text-sm text-primary/70\">{description}</div>\n            )}\n          </div>\n        )}\n      </label>\n    )\n  }\n)\n\nCheckbox.displayName = 'Checkbox'\n","'use client'\n\nimport React from 'react'\nimport { motion } from 'framer-motion'\nimport { cn } from './utils'\n\nexport interface RadioPillsProps {\n  options: Array<{ value: string; label: string; icon?: React.ReactNode }>\n  value?: string\n  onChange?: (value: string) => void\n  name: string\n  disabled?: boolean\n  className?: string\n  animate?: boolean\n}\n\nexport const RadioPills: React.FC<RadioPillsProps> = ({\n  options,\n  value,\n  onChange,\n  name,\n  disabled,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  return (\n    <div className={cn('flex flex-wrap gap-2', className)}>\n      {options.map((option) => {\n        const isSelected = value === option.value\n        \n        return (\n          <label key={option.value} className=\"relative cursor-pointer\">\n            <input\n              type=\"radio\"\n              name={name}\n              value={option.value}\n              checked={isSelected}\n              onChange={(e) => onChange?.(e.target.value)}\n              disabled={disabled}\n              className=\"sr-only peer\"\n            />\n            \n            <motion.div\n              data-ripple=\"true\"\n              whileTap={shouldAnimate ? { scale: disabled ? 1 : 0.95 } : undefined}\n              className={cn(\n                'px-4 py-2.5 rounded-full border-2 transition-all duration-200',\n                'flex items-center gap-2 min-h-11',\n                'peer-focus:ring-2 peer-focus:ring-primary peer-focus:ring-offset-2',\n                'peer-disabled:opacity-50 peer-disabled:cursor-not-allowed',\n                isSelected\n                  ? 'bg-primary border-primary text-white'\n                  : 'bg-background border-border text-primary hover:border-border-dark'\n              )}\n            >\n              {option.icon && <span className=\"shrink-0\">{option.icon}</span>}\n              <span className=\"font-medium text-base\">{option.label}</span>\n            </motion.div>\n          </label>\n        )\n      })}\n    </div>\n  )\n}\n","'use client'\n\nimport React, { forwardRef } from 'react'\nimport { motion } from 'framer-motion'\nimport { cn } from './utils'\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n  label?: string\n  description?: string\n  onChange?: (checked: boolean) => void\n  animate?: boolean\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n  ({ label, description, className, checked, onChange, animate = true, ...props }, ref) => {\n    const shouldAnimate = animate !== false\n    const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n      onChange?.(e.target.checked)\n    }\n  \n    return (\n      <label className=\"flex items-center justify-between gap-4 cursor-pointer group\">\n        {(label || description) && (\n          <div className=\"flex-1 space-y-0.5\">\n            {label && (\n              <div className=\"text-base font-medium text-foreground\">\n                {label}\n              </div>\n            )}\n            {description && (\n              <div className=\"text-sm text-primary/70\">{description}</div>\n            )}\n          </div>\n        )}\n        \n        <div className=\"relative flex-shrink-0\">\n          <input\n            ref={ref}\n            type=\"checkbox\"\n            onChange={handleChange}\n            className=\"sr-only peer\"\n            checked={checked}\n            {...props}\n          />\n          <div\n            className={cn(\n              'w-12 h-7 rounded-full transition-all duration-200 relative',\n              'peer-focus:ring-2 peer-focus:ring-primary peer-focus:ring-offset-2',\n              'peer-disabled:opacity-50 peer-disabled:cursor-not-allowed',\n              checked ? 'bg-primary' : 'bg-border-dark',\n              className\n            )}\n          >\n            <motion.div\n              className=\"absolute top-1 w-5 h-5 bg-white rounded-full shadow-sm\"\n              style={{ left: checked ? '24px' : '4px' }}\n              animate={shouldAnimate ? { left: checked ? '24px' : '4px' } : undefined}\n              transition={shouldAnimate ? { type: 'spring', stiffness: 500, damping: 30 } : { duration: 0 }}\n            />\n          </div>\n        </div>\n      </label>\n    )\n  }\n)\n\nToggle.displayName = 'Toggle'\n","'use client'\n\nimport React, { useState } from 'react'\nimport { motion } from 'framer-motion'\nimport { cn } from './utils'\n\nexport interface SliderProps {\n  value: number\n  onChange: (value: number) => void\n  min?: number\n  max?: number\n  step?: number\n  label?: string\n  showValue?: boolean\n  unit?: string\n  disabled?: boolean\n  className?: string\n  animate?: boolean\n}\n\nexport const Slider: React.FC<SliderProps> = ({\n  value,\n  onChange,\n  min = 0,\n  max = 100,\n  step = 1,\n  label,\n  showValue = true,\n  unit = '%',\n  disabled,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const [isDragging, setIsDragging] = useState(false)\n  const percentage = ((value - min) / (max - min)) * 100\n\n  return (\n    <div className={cn('w-full space-y-2', className)}>\n      {(label || showValue) && (\n        <div className=\"flex items-center justify-between\">\n          {label && <label className=\"text-sm font-medium text-primary\">{label}</label>}\n          {showValue && (\n            <span className=\"text-sm font-semibold text-primary\">\n              {value}{unit}\n            </span>\n          )}\n        </div>\n      )}\n      \n      <div className=\"relative h-12 flex items-center\">\n        <div className=\"relative w-full h-2 bg-border rounded-full overflow-hidden\">\n          <motion.div\n            className=\"absolute left-0 top-0 h-full bg-primary rounded-full\"\n            style={{ width: `${percentage}%` }}\n            initial={false}\n            animate={shouldAnimate ? { width: `${percentage}%` } : undefined}\n            transition={shouldAnimate ? { type: 'spring', stiffness: 300, damping: 30 } : { duration: 0 }}\n          />\n        </div>\n        \n        <input\n          type=\"range\"\n          min={min}\n          max={max}\n          step={step}\n          value={value}\n          onChange={(e) => onChange(Number(e.target.value))}\n          onMouseDown={() => setIsDragging(true)}\n          onMouseUp={() => setIsDragging(false)}\n          onTouchStart={() => setIsDragging(true)}\n          onTouchEnd={() => setIsDragging(false)}\n          disabled={disabled}\n          className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer disabled:cursor-not-allowed\"\n          style={{ zIndex: 10 }}\n        />\n        \n        <motion.div\n          className={cn(\n            'absolute w-6 h-6 bg-background  border-2 border-primary rounded-full shadow-md',\n            'pointer-events-none',\n            disabled && 'opacity-50'\n          )}\n          style={{ left: `calc(${percentage}% - 12px)` }}\n          animate={shouldAnimate ? { scale: isDragging ? 1.2 : 1 } : undefined}\n          transition={shouldAnimate ? { type: 'spring', stiffness: 300, damping: 20 } : { duration: 0 }}\n        />\n      </div>\n    </div>\n  )\n}\n","'use client'\n\nimport React, { useState } from 'react'\nimport { motion } from 'framer-motion'\nimport { cn } from './utils'\n\nexport interface DualSliderProps {\n  value1: number\n  value2: number\n  onChange: (value1: number, value2: number) => void\n  label1: string\n  label2: string\n  min?: number\n  max?: number\n  step?: number\n  unit?: string\n  disabled?: boolean\n  className?: string\n  animate?: boolean\n}\n\nexport const DualSlider: React.FC<DualSliderProps> = ({\n  value1,\n  value2,\n  onChange,\n  label1,\n  label2,\n  min = 0,\n  max = 100,\n  step = 1,\n  unit = '%',\n  disabled,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const [isDraggingFirst, setIsDraggingFirst] = useState(false)\n  const [isDraggingSecond, setIsDraggingSecond] = useState(false)\n  const total = value1 + value2\n  const percentage1 = total > 0 ? (value1 / total) * 100 : 50\n  const percentage2 = total > 0 ? (value2 / total) * 100 : 50\n\n  const handleSliderChange = (newValue1: number) => {\n    const remaining = max - newValue1\n    onChange(newValue1, Math.max(min, Math.min(max, remaining)))\n  }\n\n  return (\n    <div className={cn('w-full space-y-3', className)}>\n      <div className=\"space-y-2\">\n        <div className=\"flex items-center justify-between\">\n          <label className=\"text-sm font-medium text-primary\">{label1}</label>\n          <span className=\"text-sm font-semibold text-primary\">\n            {value1}{unit}\n          </span>\n        </div>\n        \n        <div className=\"relative h-12 flex items-center\">\n          <div className=\"relative w-full h-2 bg-border rounded-full overflow-hidden\">\n            <motion.div\n              className=\"absolute left-0 top-0 h-full bg-primary rounded-full\"\n              initial={false}\n              animate={shouldAnimate ? { width: `${percentage1}%` } : undefined}\n              transition={shouldAnimate ? { type: 'spring', stiffness: 300, damping: 30 } : { duration: 0 }}\n            />\n          </div>\n          \n          <input\n            type=\"range\"\n            min={min}\n            max={max}\n            step={step}\n            value={value1}\n            onChange={(e) => handleSliderChange(Number(e.target.value))}\n            onMouseDown={() => setIsDraggingFirst(true)}\n            onMouseUp={() => setIsDraggingFirst(false)}\n            onTouchStart={() => setIsDraggingFirst(true)}\n            onTouchEnd={() => setIsDraggingFirst(false)}\n            disabled={disabled}\n            className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer disabled:cursor-not-allowed\"\n            style={{ zIndex: 10 }}\n          />\n\n          <motion.div\n            className={cn(\n              'absolute w-5 h-5 bg-background border-2 border-primary rounded-full shadow-md',\n              'pointer-events-none',\n              disabled && 'opacity-50'\n            )}\n            style={{ left: `calc(${percentage1}% - 10px)` }}\n            animate={shouldAnimate ? { scale: isDraggingFirst ? 1.15 : 1 } : undefined}\n            transition={shouldAnimate ? { type: 'spring', stiffness: 300, damping: 20 } : { duration: 0 }}\n          />\n        </div>\n      </div>\n\n      <div className=\"space-y-2\">\n        <div className=\"flex items-center justify-between\">\n          <label className=\"text-sm font-medium text-primary\">{label2}</label>\n          <span className=\"text-sm font-semibold text-success\">\n            {value2}{unit}\n          </span>\n        </div>\n        \n        <div className=\"relative h-12 flex items-center\">\n          <div className=\"relative w-full h-2 bg-border rounded-full overflow-hidden\">\n            <motion.div\n              className=\"absolute left-0 top-0 h-full bg-success rounded-full\"\n              initial={false}\n              animate={shouldAnimate ? { width: `${percentage2}%` } : undefined}\n              transition={shouldAnimate ? { type: 'spring', stiffness: 300, damping: 30 } : { duration: 0 }}\n            />\n          </div>\n          \n          <input\n            type=\"range\"\n            min={min}\n            max={max}\n            step={step}\n            value={value2}\n            onChange={(e) => handleSliderChange(max - Number(e.target.value))}\n            onMouseDown={() => setIsDraggingSecond(true)}\n            onMouseUp={() => setIsDraggingSecond(false)}\n            onTouchStart={() => setIsDraggingSecond(true)}\n            onTouchEnd={() => setIsDraggingSecond(false)}\n            disabled={disabled}\n            className=\"absolute inset-0 w-full h-full opacity-0 cursor-pointer disabled:cursor-not-allowed\"\n            style={{ zIndex: 10 }}\n          />\n\n          <motion.div\n            className={cn(\n              'absolute w-5 h-5 bg-background border-2 border-success rounded-full shadow-md',\n              'pointer-events-none',\n              disabled && 'opacity-50'\n            )}\n            style={{ left: `calc(${percentage2}% - 10px)` }}\n            animate={shouldAnimate ? { scale: isDraggingSecond ? 1.15 : 1 } : undefined}\n            transition={shouldAnimate ? { type: 'spring', stiffness: 300, damping: 20 } : { duration: 0 }}\n          />\n        </div>\n      </div>\n\n      <div className=\"text-xs text-primary/70 text-center\">\n        Total: {total}{unit}\n      </div>\n    </div>\n  )\n}\n","'use client'\n\nimport React, { createContext, useContext, useEffect, useMemo, useRef, useState, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\nimport { motion, AnimatePresence, type HTMLMotionProps } from 'framer-motion'\nimport { ChevronRight } from 'lucide-react'\nimport { cn } from './utils'\n\ntype RootVerticalPlacement = 'auto' | 'top' | 'bottom'\ntype RootHorizontalPlacement = 'auto' | 'left' | 'right'\ntype SubmenuHorizontalPlacement = 'auto' | 'left' | 'right'\n\ninterface DropdownMenuContextValue {\n  open: boolean\n  setOpen: (open: boolean) => void\n  toggle: () => void\n  triggerRef: React.RefObject<HTMLElement | null>\n  contentRef: React.RefObject<HTMLDivElement | null>\n  placement: 'top' | 'bottom'\n  preferredPlacement: RootVerticalPlacement\n  closeAll: () => void\n}\n\nconst DropdownMenuContext = createContext<DropdownMenuContextValue | null>(null)\n\ninterface DropdownSubmenuContextValue {\n  open: boolean\n  setOpen: (open: boolean) => void\n  toggle: () => void\n  triggerRef: React.RefObject<HTMLElement | null>\n  contentRef: React.RefObject<HTMLDivElement | null>\n  placement: 'left' | 'right'\n  preferredPlacement: SubmenuHorizontalPlacement\n}\n\nconst DropdownSubmenuContext = createContext<DropdownSubmenuContextValue | null>(null)\n\nconst useDropdownMenuContext = () => {\n  const context = useContext(DropdownMenuContext)\n  if (!context) {\n    throw new Error('DropdownMenu components must be used inside <DropdownMenu>.')\n  }\n  return context\n}\n\nconst useDropdownSubmenuContext = () => {\n  const context = useContext(DropdownSubmenuContext)\n  if (!context) {\n    throw new Error('DropdownMenuSub components must be used inside <DropdownMenuSub>.')\n  }\n  return context\n}\n\nconst composeRefs = <T,>(...refs: Array<React.Ref<T> | undefined>) => {\n  return (node: T) => {\n    refs.forEach((ref) => {\n      if (!ref) return\n      if (typeof ref === 'function') {\n        ref(node)\n        return\n      }\n      ;(ref as React.MutableRefObject<T | null>).current = node\n    })\n  }\n}\n\ninterface TriggerElementProps {\n  onClick?: (event: React.MouseEvent<HTMLElement>) => void\n  onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void\n}\n\nconst getElementProps = (element: React.ReactElement<any>): TriggerElementProps => {\n  return element.props as TriggerElementProps\n}\n\nexport interface DropdownMenuProps {\n  children: React.ReactNode\n  open?: boolean\n  defaultOpen?: boolean\n  onOpenChange?: (open: boolean) => void\n  placement?: RootVerticalPlacement\n  className?: string\n}\n\nexport const DropdownMenu: React.FC<DropdownMenuProps> = ({\n  children,\n  open,\n  defaultOpen = false,\n  onOpenChange,\n  placement = 'auto',\n  className\n}) => {\n  const isControlled = open !== undefined\n  const [internalOpen, setInternalOpen] = useState(defaultOpen)\n  const [resolvedPlacement, setResolvedPlacement] = useState<'top' | 'bottom'>('bottom')\n  const rootRef = useRef<HTMLDivElement>(null)\n  const triggerRef = useRef<HTMLElement | null>(null)\n  const contentRef = useRef<HTMLDivElement | null>(null)\n\n  const isOpen = isControlled ? Boolean(open) : internalOpen\n\n  const setOpen = (nextOpen: boolean) => {\n    if (!isControlled) {\n      setInternalOpen(nextOpen)\n    }\n    onOpenChange?.(nextOpen)\n  }\n\n  const closeAll = () => setOpen(false)\n\n  useEffect(() => {\n    if (!isOpen) return\n\n    const handleOutsidePointer = (event: MouseEvent) => {\n      if (rootRef.current?.contains(event.target as Node)) return\n      if (contentRef.current?.contains(event.target as Node)) return\n      closeAll()\n    }\n\n    document.addEventListener('mousedown', handleOutsidePointer)\n    return () => {\n      document.removeEventListener('mousedown', handleOutsidePointer)\n    }\n  }, [isOpen])\n\n  useEffect(() => {\n    if (!isOpen) return\n\n    const updatePlacement = () => {\n      if (!triggerRef.current) return\n\n      if (placement === 'top') {\n        setResolvedPlacement('top')\n        return\n      }\n\n      if (placement === 'bottom') {\n        setResolvedPlacement('bottom')\n        return\n      }\n\n      const triggerRect = triggerRef.current.getBoundingClientRect()\n      const menuHeight = contentRef.current?.offsetHeight ?? 240\n      const availableBottom = window.innerHeight - triggerRect.bottom - 8\n      const availableTop = triggerRect.top - 8\n\n      if (availableBottom >= menuHeight || availableBottom >= availableTop) {\n        setResolvedPlacement('bottom')\n        return\n      }\n\n      setResolvedPlacement('top')\n    }\n\n    updatePlacement()\n    window.addEventListener('resize', updatePlacement)\n    window.addEventListener('scroll', updatePlacement, true)\n\n    return () => {\n      window.removeEventListener('resize', updatePlacement)\n      window.removeEventListener('scroll', updatePlacement, true)\n    }\n  }, [isOpen, placement])\n\n  const contextValue = useMemo<DropdownMenuContextValue>(() => ({\n    open: isOpen,\n    setOpen,\n    toggle: () => setOpen(!isOpen),\n    triggerRef,\n    contentRef,\n    placement: resolvedPlacement,\n    preferredPlacement: placement,\n    closeAll\n  }), [isOpen, resolvedPlacement, placement])\n\n  return (\n    <DropdownMenuContext.Provider value={contextValue}>\n      <div ref={rootRef} className={cn('relative inline-flex', className)}>\n        {children}\n      </div>\n    </DropdownMenuContext.Provider>\n  )\n}\n\nexport interface DropdownMenuTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  asChild?: boolean\n  children: React.ReactNode\n}\n\nexport const DropdownMenuTrigger = React.forwardRef<HTMLElement, DropdownMenuTriggerProps>(\n  ({ asChild = false, className, children, onClick, onKeyDown, ...props }, forwardedRef) => {\n    const { open, toggle, triggerRef } = useDropdownMenuContext()\n\n    const attachRef = composeRefs(forwardedRef, (node: HTMLElement | null) => {\n      triggerRef.current = node\n    })\n\n    if (asChild && React.isValidElement(children)) {\n      const child = children as React.ReactElement<any>\n      const childProps = getElementProps(child)\n\n      return React.cloneElement(child, {\n        ref: composeRefs((child as React.ReactElement & { ref?: React.Ref<HTMLElement> }).ref, attachRef),\n        onClick: (event: React.MouseEvent<HTMLElement>) => {\n          childProps.onClick?.(event)\n          onClick?.(event as unknown as React.MouseEvent<HTMLButtonElement>)\n          if (!event.defaultPrevented) {\n            toggle()\n          }\n        },\n        onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => {\n          childProps.onKeyDown?.(event)\n          onKeyDown?.(event as unknown as React.KeyboardEvent<HTMLButtonElement>)\n          if (event.key === 'Escape') {\n            event.preventDefault()\n            event.stopPropagation()\n          }\n        },\n        'aria-haspopup': 'menu',\n        'aria-expanded': open,\n        'data-state': open ? 'open' : 'closed'\n      } as any)\n    }\n\n    return (\n      <button\n        ref={attachRef as React.Ref<HTMLButtonElement>}\n        type=\"button\"\n        onClick={(event) => {\n          onClick?.(event)\n          if (!event.defaultPrevented) {\n            toggle()\n          }\n        }}\n        onKeyDown={(event) => {\n          onKeyDown?.(event)\n          if (event.key === 'Escape') {\n            event.preventDefault()\n            event.stopPropagation()\n          }\n        }}\n        aria-haspopup=\"menu\"\n        aria-expanded={open}\n        data-state={open ? 'open' : 'closed'}\n        className={cn(\n          'inline-flex items-center justify-center rounded-md border border-border bg-background px-4 py-2.5 text-sm font-medium text-foreground',\n          'transition-colors hover:bg-secondary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary',\n          className\n        )}\n        {...props}\n      >\n        {children}\n      </button>\n    )\n  }\n)\n\nDropdownMenuTrigger.displayName = 'DropdownMenuTrigger'\n\nexport interface DropdownMenuContentProps extends Omit<HTMLMotionProps<'div'>, 'children'> {\n  children: React.ReactNode\n  align?: 'start' | 'end'\n  side?: RootHorizontalPlacement\n  sideOffset?: number\n  animate?: boolean\n}\n\nexport const DropdownMenuContent: React.FC<DropdownMenuContentProps> = ({\n  children,\n  className,\n  align = 'start',\n  side = 'auto',\n  sideOffset = 8,\n  animate = true,\n  ...props\n}) => {\n  const { open, setOpen, contentRef, placement, triggerRef } = useDropdownMenuContext()\n  const [resolvedHorizontalSide, setResolvedHorizontalSide] = useState<'left' | 'right'>(\n    align === 'end' ? 'left' : 'right'\n  )\n  const [mounted, setMounted] = useState(false)\n  const [wrapperStyle, setWrapperStyle] = useState<React.CSSProperties | null>(null)\n\n  useEffect(() => {\n    setMounted(true)\n    return () => setMounted(false)\n  }, [])\n\n  const updatePosition = useCallback(() => {\n    if (!open || !triggerRef.current) return\n    const rect = triggerRef.current.getBoundingClientRect()\n    setWrapperStyle({\n      position: 'fixed',\n      top: rect.top,\n      left: rect.left,\n      width: rect.width,\n      height: rect.height,\n      zIndex: 70,\n      pointerEvents: 'none'\n    })\n  }, [open, triggerRef])\n\n  useEffect(() => {\n    if (!open) return\n    updatePosition()\n    window.addEventListener('resize', updatePosition)\n    window.addEventListener('scroll', updatePosition, true)\n    return () => {\n      window.removeEventListener('resize', updatePosition)\n      window.removeEventListener('scroll', updatePosition, true)\n    }\n  }, [open, updatePosition])\n\n  useEffect(() => {\n    if (!open) return\n\n    const updateHorizontalPlacement = () => {\n      if (!triggerRef.current) return\n\n      if (side === 'left') {\n        setResolvedHorizontalSide('left')\n        return\n      }\n\n      if (side === 'right') {\n        setResolvedHorizontalSide('right')\n        return\n      }\n\n      const triggerRect = triggerRef.current.getBoundingClientRect()\n      const menuWidth = contentRef.current?.offsetWidth ?? 224\n      const viewportPadding = 8\n      const availableRight = window.innerWidth - triggerRect.left - viewportPadding\n      const availableLeft = triggerRect.right - viewportPadding\n      const preferredSide: 'left' | 'right' = align === 'end' ? 'left' : 'right'\n      const fallbackSide: 'left' | 'right' = preferredSide === 'right' ? 'left' : 'right'\n      const preferredSpace = preferredSide === 'right' ? availableRight : availableLeft\n      const fallbackSpace = fallbackSide === 'right' ? availableRight : availableLeft\n\n      if (preferredSpace >= menuWidth) {\n        setResolvedHorizontalSide(preferredSide)\n        return\n      }\n\n      if (fallbackSpace >= menuWidth) {\n        setResolvedHorizontalSide(fallbackSide)\n        return\n      }\n\n      setResolvedHorizontalSide(preferredSpace >= fallbackSpace ? preferredSide : fallbackSide)\n    }\n\n    updateHorizontalPlacement()\n    window.addEventListener('resize', updateHorizontalPlacement)\n    window.addEventListener('scroll', updateHorizontalPlacement, true)\n\n    return () => {\n      window.removeEventListener('resize', updateHorizontalPlacement)\n      window.removeEventListener('scroll', updateHorizontalPlacement, true)\n    }\n  }, [open, side, align, triggerRef, contentRef])\n\n  const menuContent = (\n    <AnimatePresence>\n      {open && wrapperStyle ? (\n        <div style={wrapperStyle}>\n          <motion.div\n            ref={contentRef}\n            role=\"menu\"\n            initial={animate ? { opacity: 0, y: placement === 'bottom' ? -6 : 6 } : false}\n            animate={animate ? { opacity: 1, y: 0 } : undefined}\n            exit={animate ? { opacity: 0, y: placement === 'bottom' ? -6 : 6 } : undefined}\n            transition={{ duration: 0.16 }}\n            className={cn(\n              'absolute z-50 min-w-56 rounded-md border border-border bg-background p-1 shadow-lg',\n              placement === 'bottom' ? 'top-full' : 'bottom-full',\n              resolvedHorizontalSide === 'right' ? 'left-0' : 'right-0',\n              className\n            )}\n            style={{\n              marginTop: placement === 'bottom' ? sideOffset : undefined,\n              marginBottom: placement === 'top' ? sideOffset : undefined,\n              maxWidth: 'calc(100vw - 16px)',\n              pointerEvents: 'auto'\n            }}\n            {...props}\n            onKeyDown={(event) => {\n              props.onKeyDown?.(event)\n              if (event.key === 'Escape') {\n                event.preventDefault()\n                setOpen(false)\n              }\n            }}\n          >\n            {children}\n          </motion.div>\n        </div>\n      ) : null}\n    </AnimatePresence>\n  )\n\n  if (!mounted) return null\n\n  return createPortal(menuContent, document.body)\n}\n\nexport interface DropdownMenuItemProps extends React.HTMLAttributes<HTMLElement> {\n  children: React.ReactNode\n  asChild?: boolean\n  disabled?: boolean\n  closeOnSelect?: boolean\n}\n\nexport const DropdownMenuItem = React.forwardRef<HTMLElement, DropdownMenuItemProps>(\n  ({ children, asChild = false, disabled = false, closeOnSelect = true, className, onClick, ...props }, forwardedRef) => {\n    const { closeAll } = useDropdownMenuContext()\n\n    const handleSelect = (event: React.MouseEvent<HTMLElement>) => {\n      if (disabled) {\n        event.preventDefault()\n        return\n      }\n\n      onClick?.(event as unknown as React.MouseEvent<HTMLElement>)\n      if (!event.defaultPrevented && closeOnSelect) {\n        closeAll()\n      }\n    }\n\n    if (asChild && React.isValidElement(children)) {\n      const child = children as React.ReactElement<any>\n      const childProps = getElementProps(child)\n\n      return React.cloneElement(child, {\n        ref: composeRefs((child as React.ReactElement & { ref?: React.Ref<HTMLElement> }).ref, forwardedRef),\n        role: 'menuitem',\n        'aria-disabled': disabled,\n        onClick: (event: React.MouseEvent<HTMLElement>) => {\n          childProps.onClick?.(event)\n          handleSelect(event)\n        },\n        className: cn(\n          'flex w-full items-center gap-2 rounded-sm px-3 py-2 text-sm text-foreground transition-colors',\n          !disabled && 'cursor-pointer hover:bg-secondary',\n          disabled && 'cursor-not-allowed text-foreground/45',\n          (child.props as { className?: string }).className,\n          className\n        )\n      } as any)\n    }\n\n    return (\n      <button\n        ref={forwardedRef as React.Ref<HTMLButtonElement>}\n        type=\"button\"\n        role=\"menuitem\"\n        aria-disabled={disabled}\n        disabled={disabled}\n        onClick={handleSelect as React.MouseEventHandler<HTMLButtonElement>}\n        className={cn(\n          'flex w-full items-center gap-2 rounded-sm px-3 py-2 text-left text-sm text-foreground transition-colors',\n          !disabled && 'cursor-pointer hover:bg-secondary',\n          disabled && 'cursor-not-allowed text-foreground/45',\n          className\n        )}\n        {...(props as Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'>)}\n      >\n        {children}\n      </button>\n    )\n  }\n)\n\nDropdownMenuItem.displayName = 'DropdownMenuItem'\n\nexport interface DropdownMenuSubProps {\n  children: React.ReactNode\n  defaultOpen?: boolean\n  placement?: SubmenuHorizontalPlacement\n}\n\nexport const DropdownMenuSub: React.FC<DropdownMenuSubProps> = ({\n  children,\n  defaultOpen = false,\n  placement = 'auto'\n}) => {\n  const parentSubmenu = useContext(DropdownSubmenuContext)\n  const [open, setOpen] = useState(defaultOpen)\n  const [resolvedPlacement, setResolvedPlacement] = useState<'left' | 'right'>('right')\n  const triggerRef = useRef<HTMLElement | null>(null)\n  const contentRef = useRef<HTMLDivElement | null>(null)\n\n  useEffect(() => {\n    if (!open) return\n\n    const updatePlacement = () => {\n      if (!triggerRef.current) return\n\n      if (placement === 'left') {\n        setResolvedPlacement('left')\n        return\n      }\n\n      if (placement === 'right') {\n        setResolvedPlacement('right')\n        return\n      }\n\n      const triggerRect = triggerRef.current.getBoundingClientRect()\n      const submenuWidth = contentRef.current?.offsetWidth ?? 220\n      const availableRight = window.innerWidth - triggerRect.right - 8\n      const availableLeft = triggerRect.left - 8\n      const inheritedPreferredSide = parentSubmenu?.placement ?? 'right'\n      const preferredSide = placement === 'auto' ? inheritedPreferredSide : placement\n      const preferredSpace = preferredSide === 'right' ? availableRight : availableLeft\n      const fallbackSide: 'left' | 'right' = preferredSide === 'right' ? 'left' : 'right'\n      const fallbackSpace = fallbackSide === 'right' ? availableRight : availableLeft\n\n      if (preferredSpace >= submenuWidth) {\n        setResolvedPlacement(preferredSide)\n        return\n      }\n\n      if (fallbackSpace >= submenuWidth) {\n        setResolvedPlacement(fallbackSide)\n        return\n      }\n\n      setResolvedPlacement(preferredSpace >= fallbackSpace ? preferredSide : fallbackSide)\n      return\n    }\n\n    updatePlacement()\n    window.addEventListener('resize', updatePlacement)\n    window.addEventListener('scroll', updatePlacement, true)\n\n    return () => {\n      window.removeEventListener('resize', updatePlacement)\n      window.removeEventListener('scroll', updatePlacement, true)\n    }\n  }, [open, placement, parentSubmenu?.placement])\n\n  const contextValue = useMemo<DropdownSubmenuContextValue>(() => ({\n    open,\n    setOpen,\n    toggle: () => setOpen(!open),\n    triggerRef,\n    contentRef,\n    placement: resolvedPlacement,\n    preferredPlacement: placement\n  }), [open, resolvedPlacement, placement])\n\n  return (\n    <DropdownSubmenuContext.Provider value={contextValue}>\n      <div className=\"relative\">{children}</div>\n    </DropdownSubmenuContext.Provider>\n  )\n}\n\nexport interface DropdownMenuSubTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  asChild?: boolean\n  children: React.ReactNode\n}\n\nexport const DropdownMenuSubTrigger = React.forwardRef<HTMLElement, DropdownMenuSubTriggerProps>(\n  ({ asChild = false, className, children, onClick, ...props }, forwardedRef) => {\n    const { open, toggle, triggerRef, placement } = useDropdownSubmenuContext()\n\n    const attachRef = composeRefs(forwardedRef, (node: HTMLElement | null) => {\n      triggerRef.current = node\n    })\n\n    if (asChild && React.isValidElement(children)) {\n      const child = children as React.ReactElement<any>\n      const childProps = getElementProps(child)\n\n      return React.cloneElement(child, {\n        ref: composeRefs((child as React.ReactElement & { ref?: React.Ref<HTMLElement> }).ref, attachRef),\n        onClick: (event: React.MouseEvent<HTMLElement>) => {\n          childProps.onClick?.(event)\n          onClick?.(event as unknown as React.MouseEvent<HTMLButtonElement>)\n          if (!event.defaultPrevented) {\n            toggle()\n          }\n        },\n        'aria-haspopup': 'menu',\n        'aria-expanded': open,\n        'data-state': open ? 'open' : 'closed'\n      } as any)\n    }\n\n    return (\n      <button\n        ref={attachRef as React.Ref<HTMLButtonElement>}\n        type=\"button\"\n        onClick={(event) => {\n          onClick?.(event)\n          if (!event.defaultPrevented) {\n            toggle()\n          }\n        }}\n        aria-haspopup=\"menu\"\n        aria-expanded={open}\n        data-state={open ? 'open' : 'closed'}\n        className={cn(\n          'flex w-full items-center justify-between gap-2 rounded-sm px-3 py-2 text-left text-sm text-foreground transition-colors',\n          'hover:bg-secondary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset',\n          className\n        )}\n        {...props}\n      >\n        <span className=\"min-w-0 truncate\">{children}</span>\n        <ChevronRight className={cn('h-4 w-4 shrink-0 text-foreground/70 transition-transform', placement === 'left' && 'rotate-180')} />\n      </button>\n    )\n  }\n)\n\nDropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger'\n\nexport interface DropdownMenuSubContentProps extends Omit<HTMLMotionProps<'div'>, 'children'> {\n  children: React.ReactNode\n  sideOffset?: number\n  animate?: boolean\n}\n\nexport const DropdownMenuSubContent: React.FC<DropdownMenuSubContentProps> = ({\n  children,\n  className,\n  sideOffset = 6,\n  animate = true,\n  ...props\n}) => {\n  const { open, placement, contentRef } = useDropdownSubmenuContext()\n\n  return (\n    <AnimatePresence>\n      {open ? (\n        <motion.div\n          ref={contentRef}\n          role=\"menu\"\n          initial={animate ? { opacity: 0, x: placement === 'right' ? -6 : 6 } : false}\n          animate={animate ? { opacity: 1, x: 0 } : undefined}\n          exit={animate ? { opacity: 0, x: placement === 'right' ? -6 : 6 } : undefined}\n          transition={{ duration: 0.14 }}\n          className={cn(\n            'absolute top-0 z-50 min-w-52 rounded-md border border-border bg-background p-1 shadow-lg',\n            placement === 'right' ? 'left-full' : 'right-full',\n            className\n          )}\n          style={{\n            marginLeft: placement === 'right' ? sideOffset : undefined,\n            marginRight: placement === 'left' ? sideOffset : undefined\n          }}\n          {...props}\n        >\n          {children}\n        </motion.div>\n      ) : null}\n    </AnimatePresence>\n  )\n}","'use client'\n\nimport React, { useState, useRef, useEffect, forwardRef } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { ChevronDown, Search, X } from 'lucide-react'\nimport { cn } from './utils'\nimport { FloatingPortal } from './FloatingPortal'\n\nexport interface SelectOption {\n  value: string\n  label: string\n  icon?: React.ReactNode\n  disabled?: boolean\n}\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'onChange' | 'size'> {\n  options: SelectOption[]\n  value?: string\n  onChange: (value: string) => void\n  placeholder?: string\n  label?: string\n  error?: string\n  hint?: string\n  searchable?: boolean\n  clearable?: boolean\n  className?: string\n  animate?: boolean\n}\n\nexport const Select = forwardRef<HTMLDivElement, SelectProps>(\n  (\n    {\n      options,\n      value,\n      onChange,\n      placeholder = 'Select an option',\n      label,\n      error,\n      hint,\n      searchable = false,\n      clearable = true,\n      disabled,\n      required,\n      className,\n      animate = true,\n    },\n    ref\n  ) => {\n    const shouldAnimate = animate !== false\n    const [isOpen, setIsOpen] = useState(false)\n    const [searchQuery, setSearchQuery] = useState('')\n    const [dropdownPlacement, setDropdownPlacement] = useState<'top' | 'bottom'>('bottom')\n    const selectRef = useRef<HTMLDivElement>(null)\n\n    const selectedOption = options.find((opt) => opt.value === value)\n\n    const filteredOptions = searchable\n      ? options.filter((opt) =>\n          opt.label.toLowerCase().includes(searchQuery.toLowerCase())\n        )\n      : options\n\n    useEffect(() => {\n      const handleClickOutside = (event: MouseEvent) => {\n        if (selectRef.current && !selectRef.current.contains(event.target as Node)) {\n          setIsOpen(false)\n          setSearchQuery('')\n        }\n      }\n\n      document.addEventListener('mousedown', handleClickOutside)\n      return () => document.removeEventListener('mousedown', handleClickOutside)\n    }, [])\n\n    useEffect(() => {\n      if (!isOpen) return\n\n      const updatePlacement = () => {\n        if (!selectRef.current) return\n\n        const rect = selectRef.current.getBoundingClientRect()\n        const estimatedMenuHeight = searchable ? 360 : 300\n        const availableBelow = window.innerHeight - rect.bottom - 8\n        const availableAbove = rect.top - 8\n\n        if (availableBelow >= estimatedMenuHeight) {\n          setDropdownPlacement('bottom')\n          return\n        }\n\n        if (availableAbove >= estimatedMenuHeight) {\n          setDropdownPlacement('top')\n          return\n        }\n\n        setDropdownPlacement('bottom')\n      }\n\n      updatePlacement()\n      window.addEventListener('resize', updatePlacement)\n      window.addEventListener('scroll', updatePlacement, true)\n\n      return () => {\n        window.removeEventListener('resize', updatePlacement)\n        window.removeEventListener('scroll', updatePlacement, true)\n      }\n    }, [isOpen, searchable])\n\n    const handleSelect = (optionValue: string) => {\n      onChange(optionValue)\n      setIsOpen(false)\n      setSearchQuery('')\n    }\n\n    const dropdownAnimation =\n      dropdownPlacement === 'top'\n        ? { initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: 10 } }\n        : { initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 } }\n\n    \n\n    return (\n      <div ref={ref} className={cn('w-full space-y-1.5', className)}>\n        {label && (\n          <label className=\"block text-sm font-medium text-foreground\">\n            {label}\n            {required && <span className=\"text-error ml-1\">*</span>}\n          </label>\n        )}\n\n        <div ref={selectRef} className=\"relative\">\n          <button\n            type=\"button\"\n            onClick={() => !disabled && setIsOpen(!isOpen)}\n            disabled={disabled}\n            aria-haspopup=\"listbox\"\n            aria-expanded={isOpen}\n            aria-required={required}\n            className={cn(\n              'w-full px-4 py-3 rounded-md border transition-all duration-200',\n              'bg-background text-left flex items-center justify-between gap-2',\n              'focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent',\n              'disabled:bg-secondary disabled:cursor-not-allowed',\n              'touch-target text-base',\n              error && 'border-error focus:ring-error',\n              !error && 'border-border',\n              isOpen && 'ring-2 ring-primary'\n            )}\n          >\n            <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n              {selectedOption?.icon && (\n                <span className=\"shrink-0\">{selectedOption.icon}</span>\n              )}\n              <span className={cn('truncate', !selectedOption && 'text-foreground/50')}>\n                {selectedOption?.label || placeholder}\n              </span>\n            </div>\n            <ChevronDown\n              className={cn(\n                'w-5 h-5 text-primary transition-transform shrink-0',\n                isOpen && 'rotate-180'\n              )}\n            />\n          </button>\n\n          {shouldAnimate ? (\n            <AnimatePresence>\n              {isOpen ? (\n                <FloatingPortal open={isOpen} anchorRef={selectRef} placement={dropdownPlacement}>\n                  <motion.div\n                    initial={dropdownAnimation.initial}\n                    animate={dropdownAnimation.animate}\n                    exit={dropdownAnimation.exit}\n                    transition={{ duration: 0.2 }}\n                    role=\"listbox\"\n                    className=\"z-50 w-full bg-background rounded-md border border-border shadow-lg max-h-80 overflow-hidden\"\n                  >\n                {searchable && (\n                  <div className=\"p-2 border-b border-border\">\n                    <div className=\"relative\">\n                      <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-primary/50\" />\n                      <input\n                        type=\"text\"\n                        placeholder=\"Search...\"\n                        value={searchQuery}\n                        onChange={(e) => setSearchQuery(e.target.value)}\n                        className=\"w-full pl-10 pr-8 py-2 text-sm border border-border rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary\"\n                        aria-label=\"Search options\"\n                      />\n                      {searchQuery && (\n                        <button\n                          type=\"button\"\n                          onClick={() => setSearchQuery('')}\n                          className=\"absolute right-2 top-1/2 -translate-y-1/2\"\n                          aria-label=\"Clear search\"\n                        >\n                          <X className=\"w-4 h-4 text-primary/50 hover:text-primary\" />\n                        </button>\n                      )}\n                    </div>\n                  </div>\n                )}\n\n                <div className=\"overflow-y-auto max-h-64 p-2 space-y-1\">\n                  {clearable && (\n                    <button\n                      type=\"button\"\n                      role=\"option\"\n                      aria-selected={!value}\n                      onClick={() => handleSelect('')}\n                      className={cn(\n                        'w-full px-4 py-3 text-left flex items-center gap-2 rounded-sm cursor-pointer',\n                        'hover:bg-secondary transition-colors',\n                        'text-foreground/70 italic',\n                        !value && 'bg-border text-foreground font-medium'\n                      )}\n                    >\n                      <span>None</span>\n                    </button>\n                  )}\n                  {filteredOptions.length > 0 ? (\n                    filteredOptions.map((option) => (\n                      <button\n                        key={option.value}\n                        type=\"button\"\n                        role=\"option\"\n                        aria-selected={option.value === value}\n                        onClick={() => !option.disabled && handleSelect(option.value)}\n                        disabled={option.disabled}\n                        className={cn(\n                          'w-full px-4 py-3 text-left flex items-center gap-2 rounded-sm cursor-pointer',\n                          'hover:bg-secondary transition-colors',\n                          'disabled:opacity-50 disabled:cursor-not-allowed',\n                          option.value === value && 'bg-border text-foreground font-medium'\n                        )}\n                      >\n                        {option.icon && (\n                          <span className=\"shrink-0\">{option.icon}</span>\n                        )}\n                        <span>{option.label}</span>\n                      </button>\n                    ))\n                  ) : (\n                    <div className=\"px-4 py-6 text-center text-primary/70 text-sm\">\n                      No options found\n                    </div>\n                  )}\n                </div>\n                  </motion.div>\n                </FloatingPortal>\n              ) : null}\n            </AnimatePresence>\n          ) : (\n            isOpen && (\n              <FloatingPortal open={isOpen} anchorRef={selectRef} placement={dropdownPlacement}>\n                <motion.div\n                  role=\"listbox\"\n                  className=\"z-50 w-full bg-background rounded-md border border-border shadow-lg max-h-80 overflow-hidden\"\n                >\n                {searchable && (\n                  <div className=\"p-2 border-b border-border\">\n                    <div className=\"relative\">\n                      <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-primary/50\" />\n                      <input\n                        type=\"text\"\n                        placeholder=\"Search...\"\n                        value={searchQuery}\n                        onChange={(e) => setSearchQuery(e.target.value)}\n                        className=\"w-full pl-10 pr-8 py-2 text-sm border border-border rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary\"\n                        aria-label=\"Search options\"\n                      />\n                      {searchQuery && (\n                        <button\n                          type=\"button\"\n                          onClick={() => setSearchQuery('')}\n                          className=\"absolute right-2 top-1/2 -translate-y-1/2\"\n                          aria-label=\"Clear search\"\n                        >\n                          <X className=\"w-4 h-4 text-primary/50 hover:text-primary\" />\n                        </button>\n                      )}\n                    </div>\n                  </div>\n                )}\n\n                <div className=\"overflow-y-auto max-h-64 p-2 space-y-1\">\n                  {clearable && (\n                    <button\n                      type=\"button\"\n                      role=\"option\"\n                      aria-selected={!value}\n                      onClick={() => handleSelect('')}\n                      className={cn(\n                        'w-full px-4 py-3 text-left flex items-center gap-2 rounded-sm cursor-pointer',\n                        'hover:bg-secondary transition-colors',\n                        'text-foreground/70 italic',\n                        !value && 'bg-border text-foreground font-medium'\n                      )}\n                    >\n                      <span>None</span>\n                    </button>\n                  )}\n                  {filteredOptions.length > 0 ? (\n                    filteredOptions.map((option) => (\n                      <button\n                        key={option.value}\n                        type=\"button\"\n                        role=\"option\"\n                        aria-selected={option.value === value}\n                        onClick={() => !option.disabled && handleSelect(option.value)}\n                        disabled={option.disabled}\n                        className={cn(\n                          'w-full px-4 py-3 text-left flex items-center gap-2 rounded-sm cursor-pointer',\n                          'hover:bg-secondary transition-colors',\n                          'disabled:opacity-50 disabled:cursor-not-allowed',\n                          option.value === value && 'bg-border text-foreground font-medium'\n                        )}\n                      >\n                        {option.icon && (\n                          <span className=\"shrink-0\">{option.icon}</span>\n                        )}\n                        <span>{option.label}</span>\n                      </button>\n                    ))\n                  ) : (\n                    <div className=\"px-4 py-6 text-center text-primary/70 text-sm\">\n                      No options found\n                    </div>\n                  )}\n                </div>\n                </motion.div>\n              </FloatingPortal>\n            )\n          )}\n        </div>\n\n        {error && (\n          <motion.p\n            {...(shouldAnimate ? { initial: { opacity: 0, y: -5 }, animate: { opacity: 1, y: 0 } } : {})}\n            className=\"text-sm text-error\"\n          >\n            {error}\n          </motion.p>\n        )}\n\n        {hint && !error && (\n          <p className=\"text-sm text-primary/70\">{hint}</p>\n        )}\n      </div>\n    )\n  }\n)\n\nSelect.displayName = 'Select'\n","'use client'\n\nimport React, { useState, useRef, useEffect, forwardRef } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { ChevronDown, Search, X } from 'lucide-react'\nimport { cn } from './utils'\nimport { FloatingPortal } from './FloatingPortal'\nimport { Checkbox } from './Checkbox'\n\nexport interface MultiSelectOption {\n  value: string\n  label: string\n  icon?: React.ReactNode\n  disabled?: boolean\n}\n\nexport interface MultiSelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, 'onChange' | 'size'> {\n  options: MultiSelectOption[]\n  value?: string[]\n  onChange: (values: string[]) => void\n  placeholder?: string\n  label?: string\n  error?: string\n  hint?: string\n  searchable?: boolean\n  clearable?: boolean\n  maxItems?: number\n  className?: string\n  animate?: boolean\n  chipVariant?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info'\n}\n\nexport const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps>(\n  (\n    {\n      options,\n      value = [],\n      onChange,\n      placeholder = 'Select options...',\n      label,\n      error,\n      hint,\n      searchable = false,\n      clearable = true,\n      maxItems,\n      disabled,\n      required,\n      className,\n      animate = true,\n      chipVariant = 'primary',\n    },\n    ref\n  ) => {\n    const shouldAnimate = animate !== false\n    const [isOpen, setIsOpen] = useState(false)\n    const [searchQuery, setSearchQuery] = useState('')\n    const [dropdownPlacement, setDropdownPlacement] = useState<'top' | 'bottom'>('bottom')\n    const selectRef = useRef<HTMLDivElement>(null)\n    const searchInputRef = useRef<HTMLInputElement>(null)\n    const ignoreNextClickRef = useRef(false)\n\n    const selectedOptions = options.filter((opt) => value.includes(opt.value))\n\n    const filteredOptions = searchable\n      ? options.filter((opt) =>\n          opt.label.toLowerCase().includes(searchQuery.toLowerCase())\n        )\n      : options\n\n    useEffect(() => {\n      if (!isOpen || !searchable) return\n\n      const focusSearchInput = window.setTimeout(() => {\n        searchInputRef.current?.focus()\n      }, 0)\n\n      return () => window.clearTimeout(focusSearchInput)\n    }, [isOpen, searchable])\n\n    useEffect(() => {\n      const handleClickOutside = (event: MouseEvent) => {\n        if (selectRef.current && !selectRef.current.contains(event.target as Node)) {\n          setIsOpen(false)\n          setSearchQuery('')\n        }\n      }\n\n      document.addEventListener('mousedown', handleClickOutside)\n      return () => document.removeEventListener('mousedown', handleClickOutside)\n    }, [])\n\n    useEffect(() => {\n      if (!isOpen) return\n\n      const handleEscape = (event: KeyboardEvent) => {\n        if (event.key === 'Escape') {\n          setIsOpen(false)\n        }\n      }\n\n      window.addEventListener('keydown', handleEscape)\n\n      const updatePlacement = () => {\n        if (!selectRef.current) return\n\n        const rect = selectRef.current.getBoundingClientRect()\n        const estimatedMenuHeight = searchable ? 360 : 300\n        const availableBelow = window.innerHeight - rect.bottom - 8\n        const availableAbove = rect.top - 8\n\n        if (availableBelow >= estimatedMenuHeight) {\n          setDropdownPlacement('bottom')\n          return\n        }\n\n        if (availableAbove >= estimatedMenuHeight) {\n          setDropdownPlacement('top')\n          return\n        }\n\n        setDropdownPlacement('bottom')\n      }\n\n      updatePlacement()\n      window.addEventListener('resize', updatePlacement)\n      window.addEventListener('scroll', updatePlacement, true)\n\n      return () => {\n        window.removeEventListener('keydown', handleEscape)\n        window.removeEventListener('resize', updatePlacement)\n        window.removeEventListener('scroll', updatePlacement, true)\n      }\n    }, [isOpen, searchable])\n\n    const handleSelect = (optionValue: string) => {\n      const newValues = value.includes(optionValue)\n        ? value.filter((v) => v !== optionValue)\n        : maxItems && value.length >= maxItems\n          ? value\n          : [...value, optionValue]\n      onChange(newValues)\n    }\n\n    const handleRemoveChip = (optionValue: string) => {\n      const newValues = value.filter((v) => v !== optionValue)\n      onChange(newValues)\n    }\n\n    const handleClearAll = () => {\n      onChange([])\n    }\n\n    const chipVariantClasses = {\n      default: 'bg-secondary text-primary border border-border hover:bg-border',\n      primary: 'bg-primary/10 text-primary border border-primary/20 hover:bg-primary/20',\n      success: 'bg-success/10 text-success border border-success/20 hover:bg-success/20',\n      warning: 'bg-warning/10 text-warning border border-warning/20 hover:bg-warning/20',\n      danger: 'bg-error/10 text-error border border-error/20 hover:bg-error/20',\n      info: 'bg-info/10 text-info border border-info/20 hover:bg-info/20',\n    }\n\n    const dropdownAnimation =\n      dropdownPlacement === 'top'\n        ? { initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: 10 } }\n        : { initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 } }\n\n    return (\n      <div ref={ref} className={cn('w-full space-y-1.5', className)}>\n        {label && (\n          <label className=\"block text-sm font-medium text-foreground\">\n            {label}\n            {required && <span className=\"text-error ml-1\">*</span>}\n          </label>\n        )}\n\n        <div ref={selectRef} className=\"relative\">\n          <div\n            role=\"button\"\n            tabIndex={disabled ? -1 : 0}\n            onMouseDown={(event) => {\n              if (!searchable || disabled || isOpen) return\n              event.preventDefault()\n              ignoreNextClickRef.current = true\n              setIsOpen(true)\n            }}\n            onClick={() => {\n              if (ignoreNextClickRef.current) {\n                ignoreNextClickRef.current = false\n                return\n              }\n              if (!disabled) {\n                setIsOpen((current) => !current)\n              }\n            }}\n            onKeyDown={(e) => {\n              if (disabled) return\n              if (e.key === 'Enter' || e.key === ' ') {\n                e.preventDefault()\n                setIsOpen((prev) => !prev)\n              }\n            }}\n            aria-haspopup=\"listbox\"\n            aria-expanded={isOpen}\n            aria-required={required}\n            aria-disabled={disabled}\n            className={cn(\n              'w-full px-4 py-3 rounded-md border transition-all duration-200',\n              'bg-background text-left flex items-start justify-between gap-2 flex-wrap',\n              'focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary/30',\n              disabled && 'bg-secondary cursor-not-allowed',\n              'touch-target text-base min-h-12',\n              error && 'border-error focus:ring-error',\n              !error && 'border-border',\n              isOpen && 'ring-2 ring-primary'\n            )}\n          >\n            {value.length > 0 ? (\n              <div className=\"flex flex-wrap gap-2 w-full\">\n                {selectedOptions.map((option) => (\n                  <motion.div\n                    key={option.value}\n                    layout\n                    initial={shouldAnimate ? { opacity: 0, scale: 0.8 } : {}}\n                    animate={shouldAnimate ? { opacity: 1, scale: 1 } : {}}\n                    exit={shouldAnimate ? { opacity: 0, scale: 0.8 } : {}}\n                    className={cn(\n                      'flex items-center gap-1.5 px-2.5 py-1 rounded-md text-sm font-medium',\n                      chipVariantClasses[chipVariant]\n                    )}\n                  >\n                    {option.icon && <span className=\"shrink-0\">{option.icon}</span>}\n                    <span className=\"truncate\">{option.label}</span>\n                    <button\n                      type=\"button\"\n                      onClick={(e) => {\n                        e.stopPropagation()\n                        handleRemoveChip(option.value)\n                      }}\n                      className=\"shrink-0 ml-0.5 hover:opacity-70 transition-opacity\"\n                      aria-label={`Remove ${option.label}`}\n                    >\n                      <X className=\"w-4 h-4\" />\n                    </button>\n                  </motion.div>\n                ))}\n              </div>\n            ) : (\n              <span className={cn('truncate', 'text-foreground/50')}>\n                {placeholder}\n              </span>\n            )}\n            <ChevronDown\n              className={cn(\n                'w-5 h-5 text-primary transition-transform shrink-0 ml-auto',\n                isOpen && 'rotate-180'\n              )}\n            />\n          </div>\n\n          {shouldAnimate ? (\n            <AnimatePresence>\n              {isOpen ? (\n                <FloatingPortal open={isOpen} anchorRef={selectRef} placement={dropdownPlacement}>\n                  <motion.div\n                    initial={dropdownAnimation.initial}\n                    animate={dropdownAnimation.animate}\n                    exit={dropdownAnimation.exit}\n                    transition={{ duration: 0.2 }}\n                    role=\"listbox\"\n                    className=\"z-50 w-full bg-background rounded-md border border-border shadow-lg max-h-80 overflow-hidden\"\n                  >\n                    {searchable && (\n                      <div className=\"p-2 border-b border-border\">\n                        <div className=\"relative\">\n                          <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-primary/50\" />\n                          <input\n                            ref={searchInputRef}\n                            type=\"text\"\n                            placeholder=\"Search...\"\n                            value={searchQuery}\n                            onChange={(e) => setSearchQuery(e.target.value)}\n                            onKeyDown={(event) => {\n                              if (event.key === 'Escape') {\n                                setIsOpen(false)\n                              }\n                            }}\n                            className=\"w-full pl-10 pr-8 py-2 text-sm border border-border rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary/30\"\n                            aria-label=\"Search options\"\n                          />\n                          {searchQuery && (\n                            <button\n                              type=\"button\"\n                              onClick={() => setSearchQuery('')}\n                              className=\"absolute right-2 top-1/2 -translate-y-1/2\"\n                              aria-label=\"Clear search\"\n                            >\n                              <X className=\"w-4 h-4 text-primary/50 hover:text-primary\" />\n                            </button>\n                          )}\n                        </div>\n                      </div>\n                    )}\n\n                    <div className=\"overflow-y-auto max-h-64 p-2 space-y-1\">\n                      {clearable && value.length > 0 && (\n                        <button\n                          type=\"button\"\n                          role=\"option\"\n                          onClick={() => handleClearAll()}\n                          className={cn(\n                            'w-full px-4 py-3 text-left flex items-center gap-2 rounded-sm cursor-pointer',\n                            'hover:bg-secondary transition-colors',\n                            'text-foreground/70 italic text-sm'\n                          )}\n                        >\n                          <span>Clear all</span>\n                        </button>\n                      )}\n                      {filteredOptions.length > 0 ? (\n                        filteredOptions.map((option) => {\n                          const isSelected = value.includes(option.value)\n                          const isDisabled = option.disabled || (maxItems !== undefined && value.length >= maxItems && !isSelected)\n                          return (\n                              <div\n                              key={option.value}\n                              role=\"option\"\n                              aria-selected={isSelected}\n                                aria-disabled={isDisabled}\n                                onClick={() => !isDisabled && handleSelect(option.value)}\n                              className={cn(\n                                'w-full px-4 py-3 text-left flex items-center gap-2 rounded-sm cursor-pointer',\n                                'hover:bg-secondary transition-colors',\n                                'disabled:opacity-50 disabled:cursor-not-allowed',\n                                  isDisabled && 'opacity-50 cursor-not-allowed',\n                                isSelected && 'bg-border text-foreground font-medium'\n                              )}\n                            >\n                                <Checkbox\n                                  checked={isSelected}\n                                  disabled={isDisabled}\n                                  onChange={() => !isDisabled && handleSelect(option.value)}\n                                  onClick={(e) => e.stopPropagation()}\n                                  animate={shouldAnimate}\n                                  className=\"w-5 h-5\"\n                                  aria-label={option.label}\n                                />\n                              {option.icon && (\n                                <span className=\"shrink-0\">{option.icon}</span>\n                              )}\n                              <span>{option.label}</span>\n                              </div>\n                          )\n                        })\n                      ) : (\n                        <div className=\"px-4 py-6 text-center text-primary/70 text-sm\">\n                          No options found\n                        </div>\n                      )}\n                    </div>\n                  </motion.div>\n                </FloatingPortal>\n              ) : null}\n            </AnimatePresence>\n          ) : (\n            isOpen && (\n              <FloatingPortal open={isOpen} anchorRef={selectRef} placement={dropdownPlacement}>\n                <motion.div\n                  role=\"listbox\"\n                  className=\"z-50 w-full bg-background rounded-md border border-border shadow-lg max-h-80 overflow-hidden\"\n                >\n                  {searchable && (\n                    <div className=\"p-2 border-b border-border\">\n                      <div className=\"relative\">\n                        <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-primary/50\" />\n                        <input\n                          ref={searchInputRef}\n                          type=\"text\"\n                          placeholder=\"Search...\"\n                          value={searchQuery}\n                          onChange={(e) => setSearchQuery(e.target.value)}\n                          onKeyDown={(event) => {\n                            if (event.key === 'Escape') {\n                              setIsOpen(false)\n                            }\n                          }}\n                          className=\"w-full pl-10 pr-8 py-2 text-sm border border-border rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary/30\"\n                          aria-label=\"Search options\"\n                        />\n                        {searchQuery && (\n                          <button\n                            type=\"button\"\n                            onClick={() => setSearchQuery('')}\n                            className=\"absolute right-2 top-1/2 -translate-y-1/2\"\n                            aria-label=\"Clear search\"\n                          >\n                            <X className=\"w-4 h-4 text-primary/50 hover:text-primary\" />\n                          </button>\n                        )}\n                      </div>\n                    </div>\n                  )}\n\n                  <div className=\"overflow-y-auto max-h-64 p-2 space-y-1\">\n                    {clearable && value.length > 0 && (\n                      <button\n                        type=\"button\"\n                        role=\"option\"\n                        onClick={() => handleClearAll()}\n                        className={cn(\n                          'w-full px-4 py-3 text-left flex items-center gap-2 rounded-sm cursor-pointer',\n                          'hover:bg-secondary transition-colors',\n                          'text-foreground/70 italic text-sm'\n                        )}\n                      >\n                        <span>Clear all</span>\n                      </button>\n                    )}\n                    {filteredOptions.length > 0 ? (\n                      filteredOptions.map((option) => {\n                        const isSelected = value.includes(option.value)\n                          const isDisabled = option.disabled || (maxItems !== undefined && value.length >= maxItems && !isSelected)\n                        return (\n                            <div\n                            key={option.value}\n                            role=\"option\"\n                            aria-selected={isSelected}\n                              aria-disabled={isDisabled}\n                              onClick={() => !isDisabled && handleSelect(option.value)}\n                            className={cn(\n                              'w-full px-4 py-3 text-left flex items-center gap-2 rounded-sm cursor-pointer',\n                              'hover:bg-secondary transition-colors',\n                              'disabled:opacity-50 disabled:cursor-not-allowed',\n                                isDisabled && 'opacity-50 cursor-not-allowed',\n                              isSelected && 'bg-border text-foreground font-medium'\n                            )}\n                          >\n                              <Checkbox\n                                checked={isSelected}\n                                disabled={isDisabled}\n                                onChange={() => !isDisabled && handleSelect(option.value)}\n                                onClick={(e) => e.stopPropagation()}\n                                animate={shouldAnimate}\n                                className=\"w-5 h-5\"\n                                aria-label={option.label}\n                              />\n                            {option.icon && (\n                              <span className=\"shrink-0\">{option.icon}</span>\n                            )}\n                            <span>{option.label}</span>\n                            </div>\n                        )\n                      })\n                    ) : (\n                      <div className=\"px-4 py-6 text-center text-primary/70 text-sm\">\n                        No options found\n                      </div>\n                    )}\n                  </div>\n                </motion.div>\n              </FloatingPortal>\n            )\n          )}\n        </div>\n\n        {error && (\n          <motion.p\n            {...(shouldAnimate ? { initial: { opacity: 0, y: -5 }, animate: { opacity: 1, y: 0 } } : {})}\n            className=\"text-sm text-error\"\n          >\n            {error}\n          </motion.p>\n        )}\n\n        {hint && !error && (\n          <p className=\"text-sm text-primary/70\">{hint}</p>\n        )}\n      </div>\n    )\n  }\n)\n\nMultiSelect.displayName = 'MultiSelect'\n","'use client'\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { cn } from './utils'\n\ntype TooltipSide = 'top' | 'bottom' | 'left' | 'right'\n\nexport interface TooltipProps {\n  children: React.ReactNode\n  content: React.ReactNode\n  side?: TooltipSide\n  offset?: number\n  delay?: number\n  disabled?: boolean\n  open?: boolean\n  defaultOpen?: boolean\n  onOpenChange?: (open: boolean) => void\n  className?: string\n  showArrow?: boolean\n  arrowSize?: number\n  arrowClassName?: string\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({\n  children,\n  content,\n  side = 'bottom',\n  offset = 10,\n  delay = 120,\n  disabled = false,\n  open,\n  defaultOpen = false,\n  onOpenChange,\n  className,\n  showArrow = true,\n  arrowSize = 10,\n  arrowClassName,\n}) => {\n  const [mounted, setMounted] = useState(false)\n  const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen)\n  const [resolvedSide, setResolvedSide] = useState<TooltipSide>(side)\n  const [resolvedInlineAlign, setResolvedInlineAlign] = useState<'start' | 'end' | 'center'>('center')\n  const [position, setPosition] = useState<{ left: number; top: number } | null>(null)\n  const triggerRef = useRef<HTMLSpanElement>(null)\n  const tooltipRef = useRef<HTMLDivElement>(null)\n  const openTimerRef = useRef<number | null>(null)\n\n  const isControlled = open !== undefined\n  const isOpen = isControlled ? Boolean(open) : uncontrolledOpen\n\n  const setOpen = useCallback(\n    (nextOpen: boolean) => {\n      if (!isControlled) {\n        setUncontrolledOpen(nextOpen)\n      }\n      onOpenChange?.(nextOpen)\n    },\n    [isControlled, onOpenChange]\n  )\n\n  const clearOpenTimer = useCallback(() => {\n    if (openTimerRef.current !== null) {\n      window.clearTimeout(openTimerRef.current)\n      openTimerRef.current = null\n    }\n  }, [])\n\n  const openWithDelay = useCallback(() => {\n    if (disabled) return\n    clearOpenTimer()\n    openTimerRef.current = window.setTimeout(() => {\n      setOpen(true)\n    }, Math.max(0, delay))\n  }, [clearOpenTimer, delay, disabled, setOpen])\n\n  const closeNow = useCallback(() => {\n    clearOpenTimer()\n    setOpen(false)\n  }, [clearOpenTimer, setOpen])\n\n  const updatePosition = useCallback(() => {\n    if (!isOpen || !triggerRef.current || !tooltipRef.current) return\n\n    const triggerRect = triggerRef.current.getBoundingClientRect()\n    const tooltipRect = tooltipRef.current.getBoundingClientRect()\n    const viewportPadding = 8\n\n    const availableRight = window.innerWidth - triggerRect.right - viewportPadding\n    const availableLeft = triggerRect.left - viewportPadding\n    const availableTop = triggerRect.top - viewportPadding\n    const availableBottom = window.innerHeight - triggerRect.bottom - viewportPadding\n\n    const fitsBySide: Record<TooltipSide, boolean> = {\n      right: availableRight >= tooltipRect.width + offset,\n      left: availableLeft >= tooltipRect.width + offset,\n      top: availableTop >= tooltipRect.height + offset,\n      bottom: availableBottom >= tooltipRect.height + offset,\n    }\n\n    const spaceBySide: Record<TooltipSide, number> = {\n      right: availableRight,\n      left: availableLeft,\n      top: availableTop,\n      bottom: availableBottom,\n    }\n\n    let nextSide: TooltipSide = side\n    if (!fitsBySide[nextSide]) {\n      const rankedSides = (Object.entries(spaceBySide) as Array<[TooltipSide, number]>).sort(\n        (a, b) => b[1] - a[1]\n      )\n      nextSide = rankedSides[0]?.[0] ?? 'bottom'\n    }\n\n    let unclampedLeft = 0\n    let unclampedTop = 0\n\n    if (nextSide === 'right') {\n      unclampedLeft = triggerRect.right + offset\n      unclampedTop = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2\n      setResolvedInlineAlign('center')\n    } else if (nextSide === 'left') {\n      unclampedLeft = triggerRect.left - tooltipRect.width - offset\n      unclampedTop = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2\n      setResolvedInlineAlign('center')\n    } else if (nextSide === 'top') {\n      const startLeft = triggerRect.left\n      const endLeft = triggerRect.right - tooltipRect.width\n      const startFits =\n        startLeft >= viewportPadding &&\n        startLeft + tooltipRect.width <= window.innerWidth - viewportPadding\n      const endFits =\n        endLeft >= viewportPadding &&\n        endLeft + tooltipRect.width <= window.innerWidth - viewportPadding\n\n      if (startFits || (!startFits && !endFits && availableRight >= availableLeft)) {\n        unclampedLeft = startLeft\n        setResolvedInlineAlign('start')\n      } else {\n        unclampedLeft = endLeft\n        setResolvedInlineAlign('end')\n      }\n\n      unclampedTop = triggerRect.top - tooltipRect.height - offset\n    } else {\n      const startLeft = triggerRect.left\n      const endLeft = triggerRect.right - tooltipRect.width\n      const startFits =\n        startLeft >= viewportPadding &&\n        startLeft + tooltipRect.width <= window.innerWidth - viewportPadding\n      const endFits =\n        endLeft >= viewportPadding &&\n        endLeft + tooltipRect.width <= window.innerWidth - viewportPadding\n\n      if (startFits || (!startFits && !endFits && availableRight >= availableLeft)) {\n        unclampedLeft = startLeft\n        setResolvedInlineAlign('start')\n      } else {\n        unclampedLeft = endLeft\n        setResolvedInlineAlign('end')\n      }\n\n      unclampedTop = triggerRect.bottom + offset\n    }\n\n    const left = Math.min(\n      Math.max(unclampedLeft, viewportPadding),\n      window.innerWidth - tooltipRect.width - viewportPadding\n    )\n\n    const top = Math.min(\n      Math.max(unclampedTop, viewportPadding),\n      window.innerHeight - tooltipRect.height - viewportPadding\n    )\n\n    setResolvedSide(nextSide)\n    setPosition({ left, top })\n  }, [isOpen, offset, side])\n\n  useEffect(() => {\n    setMounted(true)\n    return () => {\n      setMounted(false)\n    }\n  }, [])\n\n  useEffect(() => {\n    return () => clearOpenTimer()\n  }, [clearOpenTimer])\n\n  useEffect(() => {\n    if (!isOpen) return\n\n    updatePosition()\n    window.addEventListener('resize', updatePosition)\n    window.addEventListener('scroll', updatePosition, true)\n\n    return () => {\n      window.removeEventListener('resize', updatePosition)\n      window.removeEventListener('scroll', updatePosition, true)\n    }\n  }, [isOpen, updatePosition])\n\n  useEffect(() => {\n    if (!isOpen) return\n\n    const raf = window.requestAnimationFrame(updatePosition)\n    return () => window.cancelAnimationFrame(raf)\n  }, [content, isOpen, updatePosition])\n\n  const tooltipStyle = useMemo<React.CSSProperties>(\n    () => ({\n      position: 'fixed',\n      zIndex: 80,\n      left: position?.left ?? -9999,\n      top: position?.top ?? -9999,\n      pointerEvents: 'none',\n    }),\n    [position]\n  )\n\n  const arrowBaseStyle = useMemo<React.CSSProperties>(\n    () => ({\n      width: arrowSize,\n      height: arrowSize,\n    }),\n    [arrowSize]\n  )\n\n  const arrowSideClasses = useMemo(() => {\n    if (resolvedSide === 'right') {\n      return 'left-0 top-1/2 -translate-x-1/2 -translate-y-1/2 border-l border-b'\n    }\n\n    if (resolvedSide === 'left') {\n      return 'right-0 top-1/2 translate-x-1/2 -translate-y-1/2 border-r border-t'\n    }\n\n    if (resolvedSide === 'top') {\n      if (resolvedInlineAlign === 'start') {\n        return 'bottom-0 left-4 translate-y-1/2 border-r border-b'\n      }\n      if (resolvedInlineAlign === 'end') {\n        return 'bottom-0 right-4 translate-y-1/2 border-r border-b'\n      }\n      return 'bottom-0 left-1/2 -translate-x-1/2 translate-y-1/2 border-r border-b'\n    }\n\n    if (resolvedInlineAlign === 'start') {\n      return 'top-0 left-4 -translate-y-1/2 border-l border-t'\n    }\n    if (resolvedInlineAlign === 'end') {\n      return 'top-0 right-4 -translate-y-1/2 border-l border-t'\n    }\n    return 'top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 border-l border-t'\n  }, [resolvedInlineAlign, resolvedSide])\n\n  const [bgClasses, borderClasses] = useMemo(() => {\n    if (!className) return ['', '']\n    const classes = className.split(/\\s+/)\n    const bgs = classes.filter(cls => cls.startsWith('bg-'))\n    const nonColorBorders = [\n      'border-0', 'border-2', 'border-4', 'border-8', \n      'border-t', 'border-r', 'border-b', 'border-l', \n      'border-x', 'border-y', 'border-solid', 'border-dashed', \n      'border-dotted', 'border-double', 'border-none'\n    ]\n    const borders = classes.filter(cls => \n      cls.startsWith('border-') && \n      !nonColorBorders.some(p => cls === p || cls.startsWith(p + '-'))\n    )\n    return [bgs.join(' '), borders.join(' ')]\n  }, [className])\n\n  return (\n    <>\n      <span\n        ref={triggerRef}\n        className=\"inline-flex\"\n        onMouseEnter={openWithDelay}\n        onMouseLeave={closeNow}\n        onFocus={openWithDelay}\n        onBlur={closeNow}\n        onKeyDown={(event) => {\n          if (event.key === 'Escape') {\n            closeNow()\n          }\n        }}\n      >\n        {children}\n      </span>\n\n      {mounted && isOpen && !disabled &&\n        createPortal(\n          <div style={tooltipStyle} role=\"tooltip\" aria-hidden={!isOpen}>\n            <div\n              ref={tooltipRef}\n              className={cn(\n                'relative w-max  whitespace-normal rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground shadow-xl',\n                className\n              )}\n            >\n              {showArrow && (\n                <span\n                  style={arrowBaseStyle}\n                  className={cn(\n                    'absolute rotate-45 bg-background border-border',\n                    bgClasses,\n                    borderClasses,\n                    arrowSideClasses,\n                    arrowClassName\n                  )}\n                />\n              )}\n              {content}\n            </div>\n          </div>,\n          document.body\n        )}\n    </>\n  )\n}\n","'use client'\n\nimport React, { useState } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { ChevronDown } from 'lucide-react'\nimport { cn } from './utils'\n\nexport interface AccordionItemProps {\n  id: string\n  title: string | React.ReactNode\n  content: string | React.ReactNode\n  disabled?: boolean\n  icon?: React.ReactNode\n}\n\nexport interface AccordionProps {\n  items: AccordionItemProps[]\n  variant?: 'default' | 'bordered'\n  allowMultiple?: boolean\n  defaultOpen?: string[]\n  className?: string\n  onChange?: (openItems: string[]) => void\n  animate?: boolean\n}\n\nexport const Accordion: React.FC<AccordionProps> = ({\n  items,\n  variant = 'default',\n  allowMultiple = false,\n  defaultOpen = [],\n  className,\n  onChange,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const [openItems, setOpenItems] = useState<string[]>(defaultOpen)\n\n  const toggleItem = (id: string) => {\n    let newOpenItems: string[]\n    \n    if (allowMultiple) {\n      newOpenItems = openItems.includes(id)\n        ? openItems.filter(item => item !== id)\n        : [...openItems, id]\n    } else {\n      newOpenItems = openItems.includes(id) ? [] : [id]\n    }\n\n    setOpenItems(newOpenItems)\n    onChange?.(newOpenItems)\n  }\n\n  const variantStyles = {\n    default: 'border-t border-border',\n    bordered: 'border border-border rounded-none'\n  }\n\n  return (\n    <div className={cn('w-full', className)}>\n      {items.map((item, index) => (\n        <div\n          key={item.id}\n          className={cn(\n            variantStyles[variant],\n            index === items.length - 1 && variant === 'default' && 'border-b border-border'\n          )}\n        >\n          <motion.button\n            onClick={() => !item.disabled && toggleItem(item.id)}\n            disabled={item.disabled}\n            className={cn(\n              'w-full flex items-center justify-between px-4 py-3 text-left transition-colors',\n              'disabled:opacity-50 disabled:cursor-not-allowed',\n              'disabled:hover:bg-transparent'\n            )}\n            whileHover={!item.disabled && shouldAnimate ? { backgroundColor: 'var(--color-secondary)' } : {}}\n            whileTap={!item.disabled && shouldAnimate ? { scale: 0.99 } : {}}\n          >\n            <div className=\"flex items-center gap-3 flex-1\">\n              {item.icon && <span className=\"shrink-0\">{item.icon}</span>}\n              <span className=\"text-foreground font-medium\">\n                {item.title}\n              </span>\n            </div>\n            <motion.div\n              animate={{ rotate: openItems.includes(item.id) ? 180 : 0 }}\n              transition={shouldAnimate ? { duration: 0.3 } : { duration: 0 }}\n              className=\"shrink-0 ml-2\"\n            >\n              <ChevronDown className=\"w-5 h-5 text-foreground/60\" />\n            </motion.div>\n          </motion.button>\n\n          <AnimatePresence>\n            {openItems.includes(item.id) && (\n              <motion.div\n                initial={shouldAnimate ? { height: 0, opacity: 0 } : { height: 'auto', opacity: 1 }}\n                animate={{ height: 'auto', opacity: 1 }}\n                exit={shouldAnimate ? { height: 0, opacity: 0 } : { height: 0, opacity: 1 }}\n                transition={shouldAnimate ? { duration: 0.3, ease: 'easeInOut' } : { duration: 0 }}\n                className=\"overflow-hidden\"\n              >\n                <div className=\"px-4 py-3 bg-secondary/40 text-foreground text-sm leading-relaxed\">\n                  {item.content}\n                </div>\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </div>\n      ))}\n    </div>\n  )\n}\n","'use client'\n\nimport React from 'react'\nimport { motion } from 'framer-motion'\nimport { cn } from './utils'\n\nexport interface CardProps {\n  children: React.ReactNode\n  variant?: 'default' | 'outlined' | 'elevated'\n  padding?: 'sm' | 'md' | 'lg' | 'none'\n  className?: string\n  onClick?: () => void\n  hover?: boolean\n  animate?: boolean\n}\n\nexport const Card: React.FC<CardProps> = ({\n  children,\n  variant = 'default',\n  padding = 'md',\n  className,\n  onClick,\n  hover = false,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const variants = {\n    default: 'bg-background border border-border',\n    outlined: 'bg-transparent border-2 border-border-dark',\n    elevated: 'bg-background border-2 border-border shadow-card'\n  }\n\n  const paddings = {\n    none: 'p-0',\n    sm: 'p-3',\n    md: 'p-4 sm:p-6',\n    lg: 'p-6 sm:p-8'\n  }\n\n  const Component = onClick ? motion.button : motion.div\n\n  return (\n    <Component\n      {...(shouldAnimate\n        ? {\n            initial: { opacity: 0, y: 20 },\n            animate: { opacity: 1, y: 0 },\n            transition: { duration: 0.3 }\n          }\n        : {})}\n      whileHover={shouldAnimate && (hover || onClick) ? { y: -2, boxShadow: '0 10px 15px -3px rgb(0 0 0 / 0.1)' } : undefined}\n      whileTap={shouldAnimate && onClick ? { scale: 0.98 } : undefined}\n      className={cn(\n        'rounded-lg transition-all duration-200',\n        variants[variant],\n        paddings[padding],\n        onClick && 'cursor-pointer w-full text-left',\n        className\n      )}\n      onClick={onClick}\n    >\n      {children}\n    </Component>\n  )\n}\n \nexport const CardHeader: React.FC<{ children: React.ReactNode; className?: string }> = ({ children, className }) => (\n  <div className={cn('mb-4', className)}>{children}</div>\n)\n\nexport const CardTitle: React.FC<{ children: React.ReactNode; className?: string }> = ({ children, className }) => (\n  <h3 className={cn('text-lg font-semibold text-foreground', className)}>{children}</h3>\n)\n\nexport const CardDescription: React.FC<{ children: React.ReactNode; className?: string }> = ({ children, className }) => (\n  <p className={cn('text-sm text-foreground/70 mt-1', className)}>{children}</p>\n)\n\nexport const CardContent: React.FC<{ children: React.ReactNode; className?: string }> = ({ children, className }) => (\n  <div className={className}>{children}</div>\n)\n\n","'use client'\n\nimport React, { useEffect } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { cn } from './utils'\n\nexport interface DrawerProps {\n  isOpen: boolean\n  onClose: () => void\n  children: React.ReactNode\n  title?: string\n  position?: 'left' | 'right'\n  className?: string\n  animate?: boolean\n}\n\nexport const Drawer: React.FC<DrawerProps> = ({\n  isOpen,\n  onClose,\n  children,\n  title,\n  position = 'right',\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  useEffect(() => {\n    const handleEscape = (e: KeyboardEvent) => {\n      if (e.key === 'Escape') onClose()\n    }\n\n    if (isOpen) {\n      document.addEventListener('keydown', handleEscape)\n      document.body.style.overflow = 'hidden'\n    }\n\n    return () => {\n      document.removeEventListener('keydown', handleEscape)\n      document.body.style.overflow = 'unset'\n    }\n  }, [isOpen, onClose])\n\n  const drawerContent = isOpen ? (\n    <>\n      <motion.div\n        {...(shouldAnimate\n          ? { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.2 } }\n          : {})}\n        className=\"fixed inset-0 z-40 bg-black/50 backdrop-blur-sm\"\n        onClick={onClose}\n      />\n      <motion.div\n        {...(shouldAnimate\n          ? {\n              initial: { x: position === 'left' ? '-100%' : '100%' },\n              animate: { x: 0 },\n              exit: { x: position === 'left' ? '-100%' : '100%' },\n              transition: { type: 'spring', damping: 30, stiffness: 300 }\n            }\n          : {})}\n        className={cn(\n          'fixed top-0 z-50 h-full w-[400px] sm:w-[480px] bg-background shadow-xl',\n          position === 'left' ? 'left-0 border-r' : 'right-0 border-l',\n          'border-border',\n          className\n        )}\n      >\n        {title && (\n          <div className=\"flex items-center justify-between px-6 py-4 border-b border-border\">\n            <h2 className=\"text-xl font-semibold text-foreground\">{title}</h2>\n            <button\n              onClick={onClose}\n              className=\"px-3 py-1.5 rounded-md border border-border text-sm font-medium text-foreground hover:bg-secondary transition-colors\"\n              aria-label=\"Close drawer\"\n            >\n              Esc\n            </button>\n          </div>\n        )}\n        <div className=\"overflow-y-auto h-[calc(100%-5rem)] p-6\">\n          {children}\n        </div>\n      </motion.div>\n    </>\n  ) : null\n\n  return shouldAnimate ? <AnimatePresence>{drawerContent}</AnimatePresence> : drawerContent\n}\n","'use client'\n\nimport React, { useEffect, useRef } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { cn } from './utils'\n\nexport interface ModalProps {\n  isOpen: boolean\n  onClose: () => void\n  children: React.ReactNode\n  title?: string\n  size?: 'sm' | 'md' | 'lg' | 'xl' | 'full'\n  className?: string\n  animate?: boolean\n}\n\nexport const Modal: React.FC<ModalProps> = ({\n  isOpen,\n  onClose,\n  children,\n  title,\n  size = 'md',\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const modalRef = useRef<HTMLDivElement>(null)\n\n  useEffect(() => {\n    const handleEscape = (e: KeyboardEvent) => {\n      if (e.key === 'Escape') onClose()\n    }\n\n    if (isOpen) {\n      document.addEventListener('keydown', handleEscape)\n      document.body.style.overflow = 'hidden'\n    }\n\n    return () => {\n      document.removeEventListener('keydown', handleEscape)\n      document.body.style.overflow = 'unset'\n    }\n  }, [isOpen, onClose])\n\n  const sizeClasses = {\n    sm: 'max-w-lg',\n    md: 'max-w-2xl',\n    lg: 'max-w-4xl',\n    xl: 'max-w-6xl',\n    full: 'max-w-full mx-4'\n  }\n\n  const modalContent = isOpen ? (\n    <div\n      className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/70 p-4\"\n      onClick={(e) => {\n        if (e.target === e.currentTarget) onClose()\n      }}\n    >\n      <motion.div\n        ref={modalRef}\n        {...(shouldAnimate\n          ? { initial: { opacity: 0, scale: 0.95 }, animate: { opacity: 1, scale: 1 }, exit: { opacity: 0, scale: 0.95 }, transition: { duration: 0.2 } }\n          : {})}\n        className={cn(\n          'bg-background border border-border rounded-lg shadow-2xl w-full max-h-[90vh] overflow-hidden flex flex-col',\n          sizeClasses[size],\n          className\n        )}\n      >\n        {title && (\n          <div className=\"px-6 py-4 border-b border-border flex items-center justify-between\">\n            <h2 className=\"text-xl font-semibold text-foreground\">{title}</h2>\n            <button\n              onClick={onClose}\n              className=\"px-3 py-1.5 rounded-md border border-border text-sm font-medium text-foreground hover:bg-secondary transition-colors\"\n              aria-label=\"Close modal\"\n            >\n              Esc\n            </button>\n          </div>\n        )}\n        <div className=\"overflow-y-auto flex-1\">{children}</div>\n      </motion.div>\n    </div>\n  ) : null\n\n  return shouldAnimate ? <AnimatePresence>{modalContent}</AnimatePresence> : modalContent\n}\n\nexport const ModalContent: React.FC<{ children: React.ReactNode; className?: string }> = ({\n  children,\n  className\n}) => <div className={cn('px-6 py-4', className)}>{children}</div>\n\nexport const ModalFooter: React.FC<{ children: React.ReactNode; className?: string }> = ({\n  children,\n  className\n}) => (\n  <div className={cn('px-6 py-4 border-t border-border flex items-center justify-end gap-3 bg-background sticky bottom-0', className)}>\n    {children}\n  </div>\n)\n","'use client'\n\nimport React, { useEffect } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { cn } from './utils'\n\nexport interface BottomSheetProps {\n  isOpen: boolean\n  onClose: () => void\n  title?: string\n  children: React.ReactNode\n  showCloseButton?: boolean\n  className?: string\n  animate?: boolean\n}\n\nexport const BottomSheet: React.FC<BottomSheetProps> = ({\n  isOpen,\n  onClose,\n  title,\n  children,\n  showCloseButton = false,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  useEffect(() => {\n    const handleEscape = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') onClose()\n    }\n\n    if (isOpen) {\n      document.addEventListener('keydown', handleEscape)\n      document.body.style.overflow = 'hidden'\n    } else {\n      document.removeEventListener('keydown', handleEscape)\n      document.body.style.overflow = 'unset'\n    }\n\n    return () => {\n      document.removeEventListener('keydown', handleEscape)\n      document.body.style.overflow = 'unset'\n    }\n  }, [isOpen, onClose])\n\n  const sheetContent = isOpen ? (\n    <>\n      {/* Backdrop */}\n      <motion.div\n        {...(shouldAnimate\n          ? { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 } }\n          : {})}\n        onClick={onClose}\n        className=\"fixed inset-0 bg-black/50 z-40\"\n      />\n\n      {/* Bottom Sheet */}\n      <motion.div\n        {...(shouldAnimate\n          ? { initial: { y: '100%' }, animate: { y: 0 }, exit: { y: '100%' }, transition: { type: 'spring', damping: 30, stiffness: 300 } }\n          : {})}\n        className={cn(\n          'fixed bottom-0 left-0 right-0 z-50',\n          'bg-white rounded-t-3xl shadow-2xl',\n          'max-h-[90vh] flex flex-col',\n          className\n        )}\n      >\n        {/* Handle */}\n        <div className=\"flex justify-center pt-3 pb-2\">\n          <div className=\"w-12 h-1.5 bg-border-dark rounded-full\" />\n        </div>\n\n        {/* Header */}\n        {(title || showCloseButton) && (\n          <div className=\"flex items-center justify-between px-6 py-4 \">\n            {title && <h2 className=\"text-lg font-semibold text-foreground\">{title}</h2>}\n            {showCloseButton && (\n              <button\n                onClick={onClose}\n                className=\"px-3 py-1.5 rounded-md border border-border text-sm font-medium text-foreground hover:bg-secondary transition-colors\"\n                aria-label=\"Close bottom sheet\"\n              >\n                Esc\n              </button>\n            )}\n          </div>\n        )}\n\n        {/* Content */}\n        <div className=\"flex-1 overflow-y-auto px-6 py-4\">\n          {children}\n        </div>\n      </motion.div>\n    </>\n  ) : null\n\n  return shouldAnimate ? <AnimatePresence>{sheetContent}</AnimatePresence> : sheetContent\n}\n","'use client'\n\nimport React, { useState } from 'react'\nimport { motion } from 'framer-motion'\nimport { ArrowUp, ArrowDown, ChevronsUpDown } from 'lucide-react'\nimport { cn } from './utils'\nimport { Checkbox } from './Checkbox'\n\nexport interface Column<T> {\n  key: keyof T | string\n  header: string\n  sortable?: boolean\n  render?: (item: T) => React.ReactNode\n  width?: string\n  truncate?: boolean // Enable text truncation with ellipsis\n}\n\nexport interface TableProps<T> {\n  data: T[]\n  columns: Column<T>[]\n  loading?: boolean\n  onRowClick?: (item: T) => void\n  keyExtractor: (item: T) => string\n  selectable?: boolean\n  selectedKeys?: string[]\n  defaultSelectedKeys?: string[]\n  onSelectionChange?: (selectedKeys: string[], selectedItems: T[]) => void\n  className?: string\n  animate?: boolean\n}\n\nexport function Table<T>({\n  data,\n  columns,\n  loading = false,\n  onRowClick,\n  keyExtractor,\n  selectable = false,\n  selectedKeys,\n  defaultSelectedKeys = [],\n  onSelectionChange,\n  className,\n  animate = true\n}: TableProps<T>) {\n  const shouldAnimate = animate !== false\n  const [sortKey, setSortKey] = useState<string | null>(null)\n  const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('asc')\n  const [internalSelectedKeys, setInternalSelectedKeys] = useState<string[]>(defaultSelectedKeys)\n\n  const isSelectionControlled = selectedKeys !== undefined\n  const effectiveSelectedKeys = isSelectionControlled ? selectedKeys : internalSelectedKeys\n  const selectedKeySet = new Set(effectiveSelectedKeys)\n\n  const updateSelection = (nextSelectedKeys: string[]) => {\n    if (!isSelectionControlled) {\n      setInternalSelectedKeys(nextSelectedKeys)\n    }\n\n    const nextKeySet = new Set(nextSelectedKeys)\n    const nextSelectedItems = data.filter((item) => nextKeySet.has(keyExtractor(item)))\n    onSelectionChange?.(nextSelectedKeys, nextSelectedItems)\n  }\n\n  const handleSort = (key: string) => {\n    if (sortKey === key) {\n      setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc')\n    } else {\n      setSortKey(key)\n      setSortOrder('asc')\n    }\n  }\n\n  const sortedData = sortKey\n    ? [...data].sort((a: any, b: any) => {\n        const aVal = a[sortKey]\n        const bVal = b[sortKey]\n        if (aVal < bVal) return sortOrder === 'asc' ? -1 : 1\n        if (aVal > bVal) return sortOrder === 'asc' ? 1 : -1\n        return 0\n      })\n    : data\n\n  const allSelected = data.length > 0 && data.every((item) => selectedKeySet.has(keyExtractor(item)))\n\n  const handleToggleAll = (checked: boolean) => {\n    if (checked) {\n      updateSelection(data.map((item) => keyExtractor(item)))\n      return\n    }\n\n    updateSelection([])\n  }\n\n  const handleToggleItem = (item: T, checked: boolean) => {\n    const itemKey = keyExtractor(item)\n\n    if (checked) {\n      if (!selectedKeySet.has(itemKey)) {\n        updateSelection([...effectiveSelectedKeys, itemKey])\n      }\n      return\n    }\n\n    updateSelection(effectiveSelectedKeys.filter((key) => key !== itemKey))\n  }\n\n  if (loading) {\n    return (\n      <div className={cn('border border-border rounded-lg overflow-hidden', className)}>\n        <div className=\"overflow-x-auto\">\n          <table className=\"w-full\">\n            <thead className=\"border-b border-border\">\n              <tr>\n                {selectable && (\n                  <th className=\"px-4 py-2 text-left w-14\">\n                    <div className=\"flex items-center\" onClick={(e) => e.stopPropagation()}>\n                      <Checkbox\n                        checked={allSelected}\n                        onChange={handleToggleAll}\n                        className=\"w-5 h-5\"\n                        aria-label=\"Select all rows\"\n                      />\n                    </div>\n                  </th>\n                )}\n                {columns.map((_, idx) => (\n                  <th key={idx} className=\"px-6 py-2 text-left\">\n                    <div className={cn('h-4 bg-border rounded w-24', shouldAnimate && 'animate-pulse')}></div>\n                  </th>\n                ))}\n              </tr>\n            </thead>\n            <tbody>\n              {[...Array(5)].map((_, idx) => (\n                <tr key={idx} className=\"border-b border-border\">\n                  {selectable && (\n                    <td className=\"px-4 py-2 w-14\">\n                      <div className={cn('h-4 bg-secondary rounded', shouldAnimate && 'animate-pulse')}></div>\n                    </td>\n                  )}\n                  {columns.map((_, colIdx) => (\n                    <td key={colIdx} className=\"px-6 py-2\">\n                      <div className={cn('h-4 bg-secondary rounded', shouldAnimate && 'animate-pulse')}></div>\n                    </td>\n                  ))}\n                </tr>\n              ))}\n            </tbody>\n          </table>\n        </div>\n      </div>\n    )\n  }\n\n  return (\n    <motion.div\n      {...(shouldAnimate\n        ? { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3 } }\n        : {})}\n      className={cn('border border-border rounded-lg overflow-hidden', className)}\n    >\n      <div className=\"overflow-x-auto\">\n        <table className=\"w-full\">\n          <thead className=\"border-b border-border\">\n            <tr>\n              {selectable && (\n                <th className=\"px-4 py-2 text-left w-14\">\n                  <div className=\"flex items-center\" onClick={(e) => e.stopPropagation()}>\n                    <Checkbox\n                      checked={allSelected}\n                      onChange={handleToggleAll}\n                      className=\"w-5 h-5\"\n                      aria-label=\"Select all rows\"\n                    />\n                  </div>\n                </th>\n              )}\n              {columns.map((col, idx) => (\n                <th\n                  key={idx}\n                  className={cn(\n                    'px-6 py-2 text-left text-sm font-semibold text-foreground',\n                    col.width,\n                    col.sortable && 'cursor-pointer  transition-colors'\n                  )}\n                  onClick={() => col.sortable && handleSort(col.key as string)}\n                >\n                  <div className=\"flex items-center gap-2\">\n                    {col.header}\n                    {col.sortable && (\n                      <span className=\"text-primary/50 hover:text-primary transition-colors\">\n                        {sortKey === col.key ? (\n                          sortOrder === 'asc' ? (\n                            <ArrowUp className=\"w-4 h-4\" />\n                          ) : (\n                            <ArrowDown className=\"w-4 h-4\" />\n                          )\n                        ) : (\n                          <ChevronsUpDown className=\"w-4 h-4\" />\n                        )}\n                      </span>\n                    )}\n                  </div>\n                </th>\n              ))}\n            </tr>\n          </thead>\n          <tbody>\n            {sortedData.map((item, idx) => (\n              <motion.tr\n                key={keyExtractor(item)}\n                {...(shouldAnimate\n                  ? { initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.2, delay: idx * 0.05 } }\n                  : {})}\n                onClick={() => onRowClick && onRowClick(item)}\n                className={cn(\n                  'border-b border-border transition-colors',\n                  onRowClick && 'cursor-pointer hover:bg-secondary'\n                )}\n              >\n                {selectable && (\n                  <td className=\"px-4 py-2 w-14\" onClick={(e) => e.stopPropagation()}>\n                    <div className=\"flex items-center\">\n                      <Checkbox\n                        checked={selectedKeySet.has(keyExtractor(item))}\n                        onChange={(checked) => handleToggleItem(item, checked)}\n                        className=\"w-5 h-5\"\n                        aria-label={`Select row ${idx + 1}`}\n                      />\n                    </div>\n                  </td>\n                )}\n                {columns.map((col, colIdx) => (\n                  <td \n                    key={colIdx} \n                    className={cn(\n                      'px-6 py-2 text-sm text-foreground/70',\n                      col.width\n                    )}\n                    style={col.width ? { width: col.width } : undefined}\n                    title={col.truncate && !col.render ? String((item as any)[col.key] ?? '') : undefined}\n                  >\n                    {col.truncate && !col.render ? (\n                      <div className=\"truncate\">\n                        {String((item as any)[col.key] ?? '')}\n                      </div>\n                    ) : col.render ? (\n                      col.truncate ? (\n                        <div className=\"truncate\">\n                          {col.render(item)}\n                        </div>\n                      ) : (\n                        col.render(item)\n                      )\n                    ) : (\n                      String((item as any)[col.key] ?? '')\n                    )}\n                  </td>\n                ))}\n              </motion.tr>\n            ))}\n          </tbody>\n        </table>\n      </div>\n    </motion.div>\n  )\n}\n","'use client'\n\nimport React from 'react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { ChevronLeft, ChevronRight, House } from 'lucide-react'\nimport { Button } from './Button'\nimport { cn } from './utils'\n\nexport interface PaginationProps {\n  currentPage: number\n  totalPages: number\n  onPageChange: (page: number) => void\n  totalItems?: number\n  itemsPerPage?: number\n  className?: string\n  animate?: boolean\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n  currentPage,\n  totalPages,\n  onPageChange,\n  totalItems,\n  itemsPerPage,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const pageItems = React.useMemo(() => {\n    const maxVisible = 5\n\n    if (totalPages <= maxVisible) {\n      return Array.from({ length: totalPages }, (_, i) => i + 1)\n    }\n\n    const half = Math.floor(maxVisible / 2)\n    let start = Math.max(1, currentPage - half)\n    let end = start + maxVisible - 1\n\n    if (end > totalPages) {\n      end = totalPages\n      start = Math.max(1, end - maxVisible + 1)\n    }\n\n    return Array.from({ length: end - start + 1 }, (_, i) => start + i)\n  }, [currentPage, totalPages])\n\n  const goToPage = (page: number) => {\n    const nextPage = Math.max(1, Math.min(totalPages, page))\n    if (nextPage !== currentPage) {\n      onPageChange(nextPage)\n    }\n  }\n\n  return (\n    <motion.div\n      {...(shouldAnimate\n        ? { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3 } }\n        : {})}\n      className={cn('w-full flex items-center justify-between gap-4 flex-wrap', className)}\n    >\n      <div className=\"text-sm text-foreground/70\">\n        {totalItems && itemsPerPage && (\n          <span>\n            Showing <strong className=\"text-primary\">{Math.min((currentPage - 1) * itemsPerPage + 1, totalItems)}</strong> to{' '}\n            <strong className=\"text-primary\">{Math.min(currentPage * itemsPerPage, totalItems)}</strong> of <strong className=\"text-primary\">{totalItems}</strong> results\n          </span>\n        )}\n      </div>\n      <div className=\"flex items-center gap-2\">\n        <Button\n          variant=\"secondary\"\n          size=\"sm\"\n          disabled={currentPage === 1}\n          onClick={() => goToPage(currentPage - 1)}\n          icon={<ChevronLeft className=\"w-4 h-4\" />}\n          animate={animate}\n        >\n        </Button>\n        {!pageItems.includes(1) && (\n          <Button\n            variant=\"secondary\"\n            size=\"sm\"\n            onClick={() => goToPage(1)}\n            icon={<House className=\"w-4 h-4 text-primary\" />}\n            animate={animate}\n            aria-label=\"Go to first page\"\n          />\n        )}\n        <motion.div layout className=\"flex items-center justify-center gap-1\">\n          <AnimatePresence initial={false} mode=\"popLayout\">\n            {pageItems.map((item) => {\n              const isActive = item === currentPage\n\n              return (\n                <motion.button\n                  key={item}\n                  layout\n                  whileHover={shouldAnimate ? { y: -1 } : undefined}\n                  whileTap={shouldAnimate ? { scale: 0.96 } : undefined}\n                  onClick={() => goToPage(item)}\n                  className={cn(\n                    'w-10 h-10 rounded-md border text-sm font-medium tabular-nums leading-none inline-flex items-center justify-center transition-all duration-200',\n                    isActive\n                      ? 'bg-primary text-white border-primary shadow-sm'\n                      : 'hover:bg-secondary border-border text-foreground'\n                  )}\n                  aria-current={isActive ? 'page' : undefined}\n                >\n                  {item}\n                </motion.button>\n              )\n            })}\n          </AnimatePresence>\n        </motion.div>\n        <Button\n          variant=\"secondary\"\n          size=\"sm\"\n          disabled={currentPage === totalPages}\n          onClick={() => goToPage(currentPage + 1)}\n          icon={<ChevronRight className=\"w-4 h-4\" />}\n          animate={animate}\n        >\n        </Button>\n      </div>\n    </motion.div>\n  )\n}\n","'use client'\n\nimport React, { useState } from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { Plus, X } from 'lucide-react'\nimport { cn } from './utils'\n\nexport interface FABAction {\n  label: string\n  icon: React.ReactNode\n  onClick: () => void\n  variant?: 'primary' | 'success' | 'danger' | 'warning'\n  labelClassName?: string\n  labelStyle?: React.CSSProperties\n}\n\nexport interface FloatingActionButtonProps {\n  icon?: React.ReactNode\n  onClick?: () => void\n  label?: string\n  actions?: FABAction[]\n  variant?: 'primary' | 'secondary'\n  position?: 'bottom-right' | 'bottom-left' | 'bottom-center'\n  disabled?: boolean\n  className?: string\n  animate?: boolean\n}\n\nexport const FloatingActionButton: React.FC<FloatingActionButtonProps> = ({\n  icon,\n  onClick,\n  label,\n  actions,\n  variant = 'primary',\n  position = 'bottom-right',\n  disabled,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const [isOpen, setIsOpen] = useState(false)\n\n  const positions = {\n    'bottom-right': 'fixed bottom-6 right-6',\n    'bottom-left': 'fixed bottom-6 left-6',\n    'bottom-center': 'fixed bottom-6 left-1/2 -translate-x-1/2'\n  }\n\n  const variants = {\n    primary: 'bg-primary text-white hover:bg-primary/80 shadow-lg',\n    secondary: 'bg-background text-primary border-2 border-primary hover:bg-secondary shadow-md'\n  }\n\n  const actionVariants = {\n    primary: 'bg-primary text-white',\n    success: 'bg-success text-white',\n    danger: 'bg-error text-white',\n    warning: 'bg-warning text-white'\n  }\n\n  const handleMainClick = () => {\n    if (actions && actions.length > 0) {\n      setIsOpen(!isOpen)\n    } else if (onClick) {\n      onClick()\n    }\n  }\n\n  return (\n    <div className={cn(positions[position], 'z-50', className)}>\n      {shouldAnimate ? (\n        <AnimatePresence>\n          {isOpen && actions ? (\n            <motion.div\n              initial={{ opacity: 0 }}\n              animate={{ opacity: 1 }}\n              exit={{ opacity: 0 }}\n              className=\"absolute bottom-20 right-0 flex flex-col gap-3 mb-2\"\n            >\n            {actions.map((action, index) => (\n              <motion.div\n                key={index}\n                initial={{ opacity: 0, y: 20, scale: 0.8 }}\n                animate={{ opacity: 1, y: 0, scale: 1 }}\n                exit={{ opacity: 0, y: 20, scale: 0.8 }}\n                transition={{ delay: index * 0.05 }}\n                className=\"flex items-center gap-3\"\n              >\n                <span \n                  className={cn(\n                    'bg-background border border-border rounded-md px-3 py-1.5 text-sm font-medium whitespace-nowrap shadow-lg',\n                    action.labelClassName\n                  )}\n                  style={action.labelStyle}\n                >\n                  {action.label}\n                </span>\n                <motion.button\n                  whileHover={shouldAnimate ? { scale: 1.1 } : undefined}\n                  whileTap={shouldAnimate ? { scale: 0.9 } : undefined}\n                  onClick={() => {\n                    action.onClick()\n                    setIsOpen(false)\n                  }}\n                  className={cn(\n                    'w-12 h-12 rounded-full shadow-lg flex items-center justify-center transition-all',\n                    actionVariants[action.variant || 'primary']\n                  )}\n                >\n                  {action.icon}\n                </motion.button>\n              </motion.div>\n            ))}\n            </motion.div>\n          ) : null}\n        </AnimatePresence>\n      ) : (\n        isOpen && actions && (\n          <div className=\"absolute bottom-20 right-0 flex flex-col gap-3 mb-2\">\n            {actions.map((action, index) => (\n              <div key={index} className=\"flex items-center gap-3\">\n                <span \n                  className={cn(\n                    'bg-background border border-border rounded-md px-3 py-1.5 text-sm font-medium whitespace-nowrap shadow-lg',\n                    action.labelClassName\n                  )}\n                  style={action.labelStyle}\n                >\n                  {action.label}\n                </span>\n                <button\n                  onClick={() => {\n                    action.onClick()\n                    setIsOpen(false)\n                  }}\n                  className={cn(\n                    'w-12 h-12 rounded-full shadow-lg flex items-center justify-center transition-all',\n                    actionVariants[action.variant || 'primary']\n                  )}\n                >\n                  {action.icon}\n                </button>\n              </div>\n            ))}\n          </div>\n        )\n      )}\n\n      <motion.button\n        whileTap={shouldAnimate ? { scale: disabled ? 1 : 0.9 } : undefined}\n        whileHover={shouldAnimate ? { scale: disabled ? 1 : 1.05 } : undefined}\n        onClick={handleMainClick}\n        disabled={disabled}\n        className={cn(\n          'z-30 rounded-full p-4 transition-all duration-200',\n          'disabled:opacity-50 disabled:cursor-not-allowed',\n          'flex items-center gap-2',\n          variants[variant],\n          label ? 'px-6' : 'w-16 h-16 justify-center',\n          isOpen && 'rotate-45'\n        )}\n      >\n        <span className=\"flex-shrink-0\">\n          {icon || (isOpen ? <X className=\"w-6 h-6\" /> : <Plus className=\"w-6 h-6\" />)}\n        </span>\n        {label && <span className=\"font-medium\">{label}</span>}\n      </motion.button>\n    </div>\n  )\n}\n\nexport const FAB = FloatingActionButton\n\n","'use client'\n\nimport React from 'react'\nimport { motion } from 'framer-motion'\nimport { Check } from 'lucide-react'\nimport { cn } from './utils'\n\nexport interface Step {\n  label: string\n  description?: string\n}\n\nexport interface StepProgressProps {\n  steps: Step[]\n  currentStep: number\n  className?: string\n  animate?: boolean\n}\n\nexport const StepProgress: React.FC<StepProgressProps> = ({\n  steps,\n  currentStep,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const currentStepData = steps[currentStep]\n\n  return (\n    <div className={cn('w-full', className)}>\n      {/* Desktop View - Horizontal Steps */}\n      <div className=\"hidden md:block\">\n        <div className=\"relative flex items-center mb-2\">\n          {steps.map((step, index) => {\n            const isCompleted = index < currentStep\n            const isCurrent = index === currentStep\n            const isUpcoming = index > currentStep\n\n            return (\n              <React.Fragment key={index}>\n                {/* Step Circle and Label */}\n                <div className=\"flex flex-col items-center relative z-10\">\n                  <motion.div\n                    initial={false}\n                    animate={shouldAnimate ? { scale: isCurrent ? 1.05 : 1 } : undefined}\n                    className={cn(\n                      'w-12 h-12 rounded-full flex items-center justify-center',\n                      'font-semibold text-base transition-all duration-300',\n                      'ring-4 ring-white',\n                      (isCompleted || isCurrent) && 'bg-primary text-white shadow-lg',\n                      isUpcoming && 'bg-border text-muted-foreground'\n                    )}\n                  >\n                    {isCompleted ? (\n                      <Check className=\"w-6 h-6 stroke-[3]\" />\n                    ) : (\n                      <span>{index + 1}</span>\n                    )}\n                  </motion.div>\n                  \n                  <div className=\"mt-3 text-center max-w-[120px]\">\n                    <span\n                      className={cn(\n                        'text-sm font-semibold block',\n                        isCurrent && 'text-primary',\n                        isCompleted && 'text-primary',\n                        isUpcoming && 'text-primary/50'\n                      )}\n                    >\n                      {step.label}\n                    </span>\n                    {step.description && (\n                      <p\n                        className={cn(\n                          'text-xs mt-1 leading-tight',\n                          isCurrent && 'text-primary',\n                          isCompleted && 'text-primary/70',\n                          isUpcoming && 'text-primary/50'\n                        )}\n                      >\n                        {step.description}\n                      </p>\n                    )}\n                  </div>\n                </div>\n\n                {/* Connector Line - Thicker with rounded ends */}\n                {index < steps.length - 1 && (\n                  <div className=\"flex-1 relative\" style={{ marginTop: '-48px', marginLeft: '4px', marginRight: '4px' }}>\n                    <div className=\"h-1.5 bg-border rounded-full overflow-hidden\">\n                      <motion.div\n                        initial={false}\n                        style={{ width: index < currentStep ? '100%' : '0%' }}\n                        animate={shouldAnimate ? { width: index < currentStep ? '100%' : '0%' } : undefined}\n                        transition={shouldAnimate ? { duration: 0.4, ease: 'easeInOut' } : { duration: 0 }}\n                        className=\"h-full bg-primary rounded-full\"\n                      />\n                    </div>\n                  </div>\n                )}\n              </React.Fragment>\n            )\n          })}\n        </div>\n      </div>\n\n      {/* Mobile View - Compact with Dots (Description Hidden) */}\n      <div className=\"md:hidden\">\n        {/* Step Dots at Top */}\n        <div className=\"flex items-center justify-center gap-2 mb-3\">\n          {steps.map((_, index) => {\n            const isCompleted = index < currentStep\n            const isCurrent = index === currentStep\n\n            return (\n              <motion.div\n                key={index}\n                initial={false}\n                style={{\n                  backgroundColor: isCompleted || isCurrent ? 'var(--color-primary)' : 'var(--color-border-dark)'\n                }}\n                animate={shouldAnimate ? { scale: isCurrent ? 1.2 : 1 } : undefined}\n                className={cn(\n                  'rounded-full transition-all duration-300',\n                  isCurrent ? 'w-3 h-3' : 'w-2 h-2',\n                  (isCompleted || isCurrent) && 'shadow-sm'\n                )}\n              />\n            )\n          })}\n        </div>\n\n        {/* Current Step Title Only (No Description) */}\n        <motion.div\n          key={currentStep}\n          {...(shouldAnimate\n            ? { initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.3 } }\n            : {})}\n          className=\"text-center\"\n        >\n          <p className=\"text-sm font-semibold text-foreground\">\n            {currentStepData?.label}\n          </p>\n        </motion.div>\n      </div>\n    </div>\n  )\n}\n","'use client'\n\nimport React from 'react'\nimport { motion } from 'framer-motion'\nimport { cn } from './utils'\n\ntype BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info'\ntype BadgeSize = 'sm' | 'md' | 'lg'\n\nexport interface BadgeProps {\n  children: React.ReactNode\n  variant?: BadgeVariant\n  size?: BadgeSize\n  className?: string\n  dot?: boolean\n  animate?: boolean\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n  children,\n  variant = 'default',\n  size = 'md',\n  className,\n  dot = false,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const variantClasses = {\n    default: 'bg-secondary text-primary border border-border',\n    primary: 'bg-primary/10 text-primary border border-primary/20',\n    success: 'bg-success/10 text-success border border-success/20',\n    warning: 'bg-warning/10 text-warning border border-warning/20',\n    danger: 'bg-error/10 text-error border border-error/20',\n    info: 'bg-info/10 text-info border border-info/20'\n  }\n\n  const sizeClasses = {\n    sm: 'px-2 py-0.5 text-xs',\n    md: 'px-2.5 py-1 text-sm',\n    lg: 'px-3 py-1.5 text-base'\n  }\n\n  const dotColors = {\n    default: 'bg-primary',\n    primary: 'bg-primary',\n    success: 'bg-success',\n    warning: 'bg-warning',\n    danger: 'bg-error',\n    info: 'bg-info'\n  }\n\n  return (\n    <motion.span\n      {...(shouldAnimate\n        ? { initial: { opacity: 0, scale: 0.9 }, animate: { opacity: 1, scale: 1 }, transition: { duration: 0.2 } }\n        : {})}\n      className={cn(\n        'inline-flex items-center gap-1.5 rounded-lg font-medium',\n        variantClasses[variant],\n        sizeClasses[size],\n        className\n      )}\n    >\n      {dot && (\n        <span className={cn('w-1.5 h-1.5 rounded-full', dotColors[variant])} />\n      )}\n      {children}\n    </motion.span>\n  )\n}\n   ","'use client'\n\nimport React from 'react'\nimport { motion } from 'framer-motion'\nimport { WifiOff, Wifi } from 'lucide-react'\nimport { cn } from './utils'\n\nexport interface OfflineBadgeProps {\n  isOffline: boolean\n  className?: string\n  animate?: boolean\n}\n\nexport const OfflineBadge: React.FC<OfflineBadgeProps> = ({\n  isOffline,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  if (!isOffline) return null\n\n  return (\n    <motion.div\n      {...(shouldAnimate\n        ? { initial: { opacity: 0, y: -10 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: -10 } }\n        : {})}\n      className={cn(\n        'inline-flex items-center gap-2 px-3 py-1.5 rounded-full',\n        'bg-warning text-white text-sm font-medium shadow-sm',\n        className\n      )}\n    >\n      <WifiOff className=\"w-4 h-4\" />\n      <span>Offline Mode</span>\n    </motion.div>\n  )\n}\n\nexport interface SyncIndicatorProps {\n  status: 'synced' | 'syncing' | 'unsynced' | 'error'\n  count?: number\n  className?: string\n  animate?: boolean\n}\n\nexport const SyncIndicator: React.FC<SyncIndicatorProps> = ({\n  status,\n  count,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const syncingIcon = shouldAnimate\n    ? (\n        <motion.div animate={{ rotate: 360 }} transition={{ repeat: Infinity, duration: 1, ease: 'linear' }}>\n          <Wifi className=\"w-4 h-4\" />\n        </motion.div>\n      )\n    : <Wifi className=\"w-4 h-4\" />\n\n  const statusConfig = {\n    synced: {\n      icon: <Wifi className=\"w-4 h-4\" />,\n      label: 'Synced',\n      color: 'bg-success text-white'\n    },\n    syncing: {\n      icon: syncingIcon,\n      label: 'Syncing...',\n      color: 'bg-info text-white'\n    },\n    unsynced: {\n      icon: <WifiOff className=\"w-4 h-4\" />,\n      label: count ? `${count} Unsynced` : 'Unsynced',\n      color: 'bg-warning text-white'\n    },\n    error: {\n      icon: <WifiOff className=\"w-4 h-4\" />,\n      label: 'Sync Error',\n      color: 'bg-error text-white'\n    }\n  }\n\n  const config = statusConfig[status]\n\n  return (\n    <motion.div\n      {...(shouldAnimate ? { initial: { scale: 0.9, opacity: 0 }, animate: { scale: 1, opacity: 1 } } : {})}\n      className={cn(\n        'inline-flex items-center gap-2 px-3 py-1.5 rounded-full',\n        'text-sm font-medium shadow-sm',\n        config.color,\n        className\n      )}\n    >\n      {config.icon}\n      <span>{config.label}</span>\n    </motion.div>\n  )\n}\n","'use client'\n\nimport React from 'react'\nimport { motion } from 'framer-motion'\nimport { cn } from './utils'\n\nexport interface SpinnerProps {\n  size?: 'sm' | 'md' | 'lg' | 'xl'\n  variant?: 'primary' | 'secondary' | 'white'\n  className?: string\n  label?: string\n  animate?: boolean\n}\n\nconst sizeClasses = {\n  sm: 'w-4 h-4 border-2',\n  md: 'w-8 h-8 border-2',\n  lg: 'w-12 h-12 border-3',\n  xl: 'w-16 h-16 border-4'\n}\n\nconst variantClasses = {\n  primary: 'border-primary border-t-transparent',\n  secondary: 'border-secondary border-t-transparent',\n  white: 'border-white border-t-transparent'\n}\n\nexport const Spinner: React.FC<SpinnerProps> = ({\n  size = 'md',\n  variant = 'primary',\n  className,\n  label,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const SpinnerElement = shouldAnimate ? motion.div : 'div'\n  return (\n    <div className={cn('inline-flex flex-col items-center gap-2', className)}>\n      <SpinnerElement\n        className={cn(\n          'rounded-full',\n          sizeClasses[size],\n          variantClasses[variant]\n        )}\n        {...(shouldAnimate\n          ? { animate: { rotate: 360 }, transition: { duration: 0.8, repeat: Infinity, ease: 'linear' } }\n          : {})}\n        role=\"status\"\n        aria-label={label || 'Loading'}\n      />\n      {label && (\n        <span className=\"text-sm text-foreground/70\">{label}</span>\n      )}\n    </div>\n  )\n}\n\nSpinner.displayName = 'Spinner'\n","'use client'\n\nimport React, { createContext, useContext, useState, useCallback, useEffect, useRef } from 'react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { AlertCircle, AlertTriangle, Bell, Check, Info, Loader2, X } from 'lucide-react'\nimport { cn } from './utils'\n\nexport type ToastVariant = 'success' | 'error' | 'warning' | 'info' | 'default' | 'loading'\nexport type ToastPriority = 'normal' | 'high'\nexport type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right'\n\nexport interface Toast {\n  id: string\n  message: string\n  variant?: ToastVariant\n  priority?: ToastPriority\n  duration?: number\n  action?: {\n    label: string\n    onClick: () => void\n  }\n}\n\ninterface ToastContextType {\n  addToast: (toast: Omit<Toast, 'id'>) => void\n  removeToast: (id: string) => void\n}\n\nconst ToastContext = createContext<ToastContextType | undefined>(undefined)\n\nexport const useToast = () => {\n  const context = useContext(ToastContext)\n  if (!context) throw new Error('useToast must be used within ToastProvider')\n  return context\n}\n\nconst variantStyles = {\n  success: 'bg-success text-white border-success',\n  error: 'bg-error text-white border-error',\n  warning: 'bg-warning text-white border-warning',\n  info: 'bg-info text-white border-info',\n  loading: 'bg-primary text-white border-primary',\n  default: 'bg-background text-foreground border-border'\n}\n\nconst variantIcons = {\n  success: Check,\n  error: AlertCircle,\n  warning: AlertTriangle,\n  info: Info,\n  loading: Loader2,\n  default: Bell\n}\n\nconst positionStyles = {\n  'top-left': 'top-4 left-4',\n  'top-center': 'top-4 left-1/2 -translate-x-1/2',\n  'top-right': 'top-4 right-4',\n  'bottom-left': 'bottom-4 left-4',\n  'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n  'bottom-right': 'bottom-4 right-4'\n}\n\nconst DynamicIslandToast: React.FC<{ toast: Toast; onRemove: (id: string) => void }> = ({ toast, onRemove }) => {  \n  const [phase, setPhase] = useState<'entering' | 'expanded' | 'collapsing' | 'exiting'>('entering')\n  const [isHovered, setIsHovered] = useState(false)\n  const timersRef = useRef<ReturnType<typeof setTimeout>[]>([])\n  const Icon = variantIcons[toast.variant || 'default']\n  const duration = toast.duration ?? 7000\n\n  useEffect(() => {\n    // Pause lifecycle while hovered\n    if (isHovered) {\n      timersRef.current.forEach(clearTimeout)\n      timersRef.current = []\n      return\n    }\n\n    const expandAt = 80\n    const collapseAt = Math.max(1200, duration - 600)\n    const exitAt = Math.max(1200, duration - 200)\n    const removeAt = exitAt + 400\n\n    const t1 = setTimeout(() => setPhase('expanded'), expandAt)\n    const t2 = setTimeout(() => setPhase('collapsing'), collapseAt)\n    const t3 = setTimeout(() => setPhase('exiting'), exitAt)\n    const t4 = setTimeout(() => onRemove(toast.id), removeAt)\n\n    timersRef.current = [t1, t2, t3, t4]\n    return () => timersRef.current.forEach(clearTimeout)\n  }, [duration, isHovered, onRemove, toast.id])\n\n  const morphVariants = {\n    entering: { opacity: 0, scale: 0.85, y: -12 },\n    expanded: { opacity: 1, scale: 1, y: 0 },\n    collapsing: { opacity: 0.9, scale: 1, y: 0 },\n    exiting: { opacity: 0, scale: 0.8, y: 12 }\n  }\n\n  return (\n    <motion.div\n      initial=\"entering\"\n      animate={phase}\n      variants={morphVariants}\n      transition={{ duration: 0.28, ease: [0.22, 1, 0.36, 1] }}\n      className={cn(\n        'pointer-events-auto flex w-full md:w-auto md:max-w-[min(88vw,26rem)] max-w-[95vw] overflow-hidden border backdrop-blur-md shadow-2xl rounded-2xl',\n        'border-b border-white/15 last:border-b-0',\n        variantStyles[toast.variant || 'default'],\n        'items-center justify-center py-3 px-4 gap-3'\n      )}\n      onMouseEnter={() => setIsHovered(true)}\n      onMouseLeave={() => setIsHovered(false)}\n      onClick={() => {\n        if (toast.action) {\n          toast.action.onClick()\n          onRemove(toast.id)\n        }\n      }}\n    >\n      {/* Icon always visible */}\n      <div className=\"flex shrink-0 items-center justify-center\">\n        <Icon className={cn('h-5 w-5', toast.variant === 'loading' && 'animate-spin')} />\n      </div>\n\n      {/* Content */}\n      <motion.div\n        initial={{ opacity: 0 }}\n        animate={{ opacity: phase === 'expanded' || phase === 'collapsing' ? 1 : 0 }}\n        transition={{ duration: 0.2 }}\n        className=\"flex min-w-0 flex-1 items-center gap-2\"\n        style={{ pointerEvents: phase === 'expanded' || phase === 'collapsing' ? 'auto' : 'none' }}\n      >\n        <div className=\"min-w-0 flex-1\">\n          <p className=\"text-sm font-medium text-center\">\n            {toast.message}\n          </p>\n          {toast.priority === 'high' && (\n            <div className=\"mt-1 flex justify-center\">\n              <span className=\"shrink-0 rounded-full border border-current/30 bg-current/10 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide\">\n                High\n              </span>\n            </div>\n          )}\n        </div>\n      </motion.div>\n\n      {/* Close button */}\n      <motion.button\n        type=\"button\"\n        initial={{ opacity: 0, scale: 0.8 }}\n        animate={{ opacity: phase === 'expanded' || phase === 'collapsing' ? 1 : 0 }}\n        whileHover={{ scale: 1.1 }}\n        whileTap={{ scale: 0.95 }}\n        onClick={(e) => { e.stopPropagation(); onRemove(toast.id) }}\n        className=\"shrink-0 p-1 text-current/70 transition-colors hover:bg-current/10 hover:text-current rounded-full\"\n        aria-label=\"Dismiss\"\n      >\n        <X className=\"h-4 w-4\" />\n      </motion.button>\n    </motion.div>\n  )\n}\n\ninterface ToastProviderProps {\n  children: React.ReactNode\n  position?: ToastPosition\n  maxToasts?: number\n}\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n  children,\n  position = 'top-center',\n  maxToasts = 4\n}) => {\n  const [toasts, setToasts] = useState<Toast[]>([])\n\n  const removeToast = useCallback((id: string) => {\n    setToasts((prev) => prev.filter((t) => t.id !== id))\n  }, [])\n\n  const addToast = useCallback(\n    (toast: Omit<Toast, 'id'>) => {\n      const id = Math.random().toString(36).substring(2, 9)\n      const newToast: Toast = { ...toast, id }\n      \n      setToasts((prev) => {\n        const next = [newToast, ...prev]\n        return next.length > maxToasts ? next.slice(0, maxToasts) : next\n      })\n    },\n    [maxToasts]\n  )\n\n  return (\n    <ToastContext.Provider value={{ addToast, removeToast }}>\n      {children}\n\n      <div className={cn('fixed z-50 flex flex-col items-center gap-3 px-4 pointer-events-none', positionStyles[position])}>\n        <AnimatePresence initial={false} mode=\"popLayout\">\n          {toasts.map((toast) => (\n            <DynamicIslandToast key={toast.id} toast={toast} onRemove={removeToast} />\n          ))}\n        </AnimatePresence>\n      </div>\n    </ToastContext.Provider>\n  )\n}\n\nToastProvider.displayName = 'ToastProvider'","'use client'\n\nimport React, { useRef } from 'react'\nimport { motion } from 'framer-motion'\nimport { Camera, Upload, X } from 'lucide-react'\nimport { cn } from './utils'\n\nexport interface CameraCaptureProps {\n  onCapture: (file: File) => void\n  onRemove?: () => void\n  preview?: string\n  label?: string\n  disabled?: boolean\n  className?: string\n  animate?: boolean\n}\n\nexport const CameraCapture: React.FC<CameraCaptureProps> = ({\n  onCapture,\n  onRemove,\n  preview,\n  label = 'Take Photo',\n  disabled,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const fileInputRef = useRef<HTMLInputElement>(null)\n\n  const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const file = e.target.files?.[0]\n    if (file) {\n      onCapture(file)\n    }\n  }\n\n  return (\n    <div className={cn('w-full', className)}>\n      {label && <label className=\"block mb-2 text-sm font-medium text-primary\">{label}</label>}\n      \n      {preview ? (\n        <div className=\"relative rounded-lg overflow-hidden border-2 border-border\">\n          <img\n            src={preview}\n            alt=\"Preview\"\n            className=\"w-full h-48 object-cover\"\n          />\n          {onRemove && (\n            <button\n              onClick={onRemove}\n              className=\"absolute top-2 right-2 p-2 bg-error text-white rounded-full shadow-lg hover:bg-red-600\"\n            >\n              <X className=\"w-4 h-4\" />\n            </button>\n          )}\n        </div>\n      ) : (\n        <motion.button\n          type=\"button\"\n          whileTap={shouldAnimate ? { scale: disabled ? 1 : 0.98 } : undefined}\n          onClick={() => fileInputRef.current?.click()}\n          disabled={disabled}\n          className={cn(\n            'w-full p-4 rounded-lg border-2 border-border',\n            'flex items-center justify-center gap-3',\n            'bg-secondary hover:bg-border hover:border-border-dark',\n            'transition-all duration-200',\n            'disabled:opacity-50 disabled:cursor-not-allowed'\n          )}\n        >\n          <Camera className=\"w-6 h-6 text-primary\" />\n          <span className=\"font-medium text-foreground\">Capture Photo</span>\n        </motion.button>\n      )}\n\n      <input\n        ref={fileInputRef}\n        type=\"file\"\n        accept=\"image/*\"\n        capture=\"environment\"\n        onChange={handleFileChange}\n        className=\"hidden\"\n        disabled={disabled}\n      />\n    </div>\n  )\n}\n\nexport interface FileUploaderProps {\n  onUpload: (files: File[]) => void\n  accept?: string\n  multiple?: boolean\n  label?: string\n  disabled?: boolean\n  className?: string\n  animate?: boolean\n}\n\nexport const FileUploader: React.FC<FileUploaderProps> = ({\n  onUpload,\n  accept = '*/*',\n  multiple = false,\n  label = 'Upload Files',\n  disabled,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const fileInputRef = useRef<HTMLInputElement>(null)\n\n  const handleFiles = (files: FileList | null) => {\n    if (files) {\n      onUpload(Array.from(files))\n    }\n  }\n\n  return (\n    <div className={cn('w-full', className)}>\n      {label && <label className=\"block mb-2 text-sm font-medium text-primary\">{label}</label>}\n      \n      <motion.button\n        type=\"button\"\n        whileTap={shouldAnimate ? { scale: disabled ? 1 : 0.98 } : undefined}\n        onClick={() => !disabled && fileInputRef.current?.click()}\n        disabled={disabled}\n        className={cn(\n          'w-full p-4 rounded-lg border-2 border-border',\n          'flex items-center justify-center gap-3',\n          'bg-secondary hover:bg-border hover:border-border-dark',\n          'transition-all duration-200 cursor-pointer',\n          'disabled:opacity-50 disabled:cursor-not-allowed'\n        )}\n      >\n        <Upload className=\"w-6 h-6 text-primary\" />\n        <span className=\"font-medium text-foreground\">\n          {multiple ? 'Upload Files' : 'Upload File'}\n        </span>\n      </motion.button>\n\n      <input\n        ref={fileInputRef}\n        type=\"file\"\n        accept={accept}\n        multiple={multiple}\n        onChange={(e) => handleFiles(e.target.files)}\n        className=\"hidden\"\n        disabled={disabled}\n      />\n    </div>\n  )\n}\n","'use client'\n\nimport React, { useState, useRef } from 'react'\nimport { motion } from 'framer-motion'\nimport { Mic, Square, Pause, Play, Trash2 } from 'lucide-react'\nimport { cn } from './utils'\n\nexport interface AudioRecorderProps {\n  onRecordingComplete: (audioBlob: Blob) => void\n  label?: string\n  maxDuration?: number\n  disabled?: boolean\n  className?: string\n  animate?: boolean\n}\n\nexport const AudioRecorder: React.FC<AudioRecorderProps> = ({\n  onRecordingComplete,\n  label = 'Record Audio',\n  maxDuration = 300, // 5 minutes default\n  disabled,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const [isRecording, setIsRecording] = useState(false)\n  const [isPaused, setIsPaused] = useState(false)\n  const [duration, setDuration] = useState(0)\n  const [audioUrl, setAudioUrl] = useState<string | null>(null)\n  \n  const mediaRecorderRef = useRef<MediaRecorder | null>(null)\n  const chunksRef = useRef<Blob[]>([])\n  const timerRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n  const startRecording = async () => {\n    try {\n      const stream = await navigator.mediaDevices.getUserMedia({ audio: true })\n      const mediaRecorder = new MediaRecorder(stream)\n      mediaRecorderRef.current = mediaRecorder\n      chunksRef.current = []\n\n      mediaRecorder.ondataavailable = (e) => {\n        if (e.data.size > 0) {\n          chunksRef.current.push(e.data)\n        }\n      }\n\n      mediaRecorder.onstop = () => {\n        const blob = new Blob(chunksRef.current, { type: 'audio/webm' })\n        const url = URL.createObjectURL(blob)\n        setAudioUrl(url)\n        onRecordingComplete(blob)\n        stream.getTracks().forEach((track) => track.stop())\n      }\n\n      mediaRecorder.start()\n      setIsRecording(true)\n      setDuration(0)\n\n      timerRef.current = setInterval(() => {\n        setDuration((prev) => {\n          if (prev >= maxDuration) {\n            stopRecording()\n            return prev\n          }\n          return prev + 1\n        })\n      }, 1000)\n    } catch (error) {\n      console.error('Error accessing microphone:', error)\n    }\n  }\n\n  const pauseRecording = () => {\n    if (mediaRecorderRef.current?.state === 'recording') {\n      mediaRecorderRef.current.pause()\n      setIsPaused(true)\n      if (timerRef.current) clearInterval(timerRef.current)\n    }\n  }\n\n  const resumeRecording = () => {\n    if (mediaRecorderRef.current?.state === 'paused') {\n      mediaRecorderRef.current.resume()\n      setIsPaused(false)\n      timerRef.current = setInterval(() => {\n        setDuration((prev) => Math.min(prev + 1, maxDuration))\n      }, 1000)\n    }\n  }\n\n  const stopRecording = () => {\n    if (mediaRecorderRef.current) {\n      mediaRecorderRef.current.stop()\n      setIsRecording(false)\n      setIsPaused(false)\n      if (timerRef.current) {\n        clearInterval(timerRef.current)\n        timerRef.current = null\n      }\n    }\n  }\n\n  const deleteRecording = () => {\n    setAudioUrl(null)\n    setDuration(0)\n  }\n\n  const formatTime = (seconds: number) => {\n    const mins = Math.floor(seconds / 60)\n    const secs = seconds % 60\n    return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`\n  }\n\n  return (\n    <div className={cn('w-full', className)}>\n      {label && <label className=\"block mb-2 text-sm font-medium text-primary\">{label}</label>}\n      \n      <div className=\"p-4 md:p-6 bg-background rounded-lg border-2 border-border space-y-4\">\n        {/* Recording Controls */}\n        {!audioUrl && (\n          <div className=\"flex flex-col items-center gap-4\">\n            <div className=\"relative\">\n              <motion.button\n                type=\"button\"\n                whileTap={shouldAnimate ? { scale: disabled ? 1 : 0.95 } : undefined}\n                onClick={isRecording ? (isPaused ? resumeRecording : pauseRecording) : startRecording}\n                disabled={disabled}\n                className={cn(\n                  'w-16 h-16 md:w-20 md:h-20 rounded-full flex items-center justify-center',\n                  'transition-all duration-200',\n                  'disabled:opacity-50 disabled:cursor-not-allowed',\n                  isRecording\n                    ? cn('bg-warning text-white', shouldAnimate && 'animate-pulse')\n                    : 'bg-primary text-white hover:bg-primary/80'\n                )}\n              >\n                {isRecording ? (\n                  isPaused ? <Play className=\"w-6 h-6 md:w-8 md:h-8\" /> : <Pause className=\"w-6 h-6 md:w-8 md:h-8\" />\n                ) : (\n                  <Mic className=\"w-6 h-6 md:w-8 md:h-8\" />\n                )}\n              </motion.button>\n\n              {isRecording && !isPaused && (\n                <motion.div\n                  className=\"absolute top-0 right-0 w-4 h-4 bg-error rounded-full border-2 border-white\"\n                  animate={shouldAnimate ? { scale: [1, 1.2, 1] } : undefined}\n                  transition={shouldAnimate ? { repeat: Infinity, duration: 1.5 } : { duration: 0 }}\n                />\n              )}\n            </div>\n\n            <div className=\"text-center\">\n              <p className=\"text-xl md:text-2xl font-mono font-semibold text-foreground\">\n                {formatTime(duration)}\n              </p>\n              <p className=\"text-xs md:text-sm text-primary/70 mt-1\">\n                {isRecording ? (isPaused ? 'Paused' : 'Recording...') : 'Tap to record'}\n              </p>\n            </div>\n\n            {isRecording && (\n              <motion.button\n                {...(shouldAnimate ? { initial: { opacity: 0, scale: 0.8 }, animate: { opacity: 1, scale: 1 } } : {})}\n                type=\"button\"\n                onClick={stopRecording}\n                className=\"px-4 py-2 text-sm bg-error text-white rounded-full font-medium hover:bg-red-600 flex items-center gap-2\"\n              >\n                <Square className=\"w-4 h-4\" />\n                Stop\n              </motion.button>\n            )}\n          </div>\n        )}\n\n        {/* Playback */}\n        {audioUrl && (\n          <motion.div\n            {...(shouldAnimate ? { initial: { opacity: 0 }, animate: { opacity: 1 } } : {})}\n            className=\"space-y-3\"\n          >\n            <audio src={audioUrl} controls className=\"w-full\" />\n            \n            <div className=\"flex items-center justify-between\">\n              <span className=\"text-sm text-primary/70\">\n                Duration: {formatTime(duration)}\n              </span>\n              <button\n                type=\"button\"\n                onClick={deleteRecording}\n                className=\"flex items-center gap-2 px-3 py-1.5 text-sm text-error hover:bg-red-50 rounded-lg transition-colors\"\n              >\n                <Trash2 className=\"w-4 h-4\" />\n                Delete\n              </button>\n            </div>\n          </motion.div>\n        )}\n      </div>\n    </div>\n  )\n}\n","'use client'\n\nimport React from 'react'\nimport { motion } from 'framer-motion'\nimport { X, FileText, Image as ImageIcon } from 'lucide-react'\nimport { cn } from './utils'\n\nexport interface ThumbnailItem {\n  id: string\n  name: string\n  url: string\n  type: 'image' | 'document' | 'audio'\n  size?: number\n}\n\nexport interface ThumbnailGridProps {\n  items: ThumbnailItem[]\n  onRemove?: (id: string) => void\n  onView?: (item: ThumbnailItem) => void\n  columns?: 2 | 3 | 4\n  className?: string\n  animate?: boolean\n}\n\nexport const ThumbnailGrid: React.FC<ThumbnailGridProps> = ({\n  items,\n  onRemove,\n  onView,\n  columns = 3,\n  className,\n  animate = true\n}) => {\n  const shouldAnimate = animate !== false\n  const gridCols = {\n    2: 'grid-cols-2',\n    3: 'grid-cols-3',\n    4: 'grid-cols-4'\n  }\n\n  const formatSize = (bytes?: number) => {\n    if (!bytes) return ''\n    const kb = bytes / 1024\n    if (kb < 1024) return `${kb.toFixed(1)} KB`\n    return `${(kb / 1024).toFixed(1)} MB`\n  }\n\n  const getIcon = (type: ThumbnailItem['type']) => {\n    switch (type) {\n      case 'document':\n        return <FileText className=\"w-8 h-8 text-primary\" />\n      case 'audio':\n        return <FileText className=\"w-8 h-8 text-primary\" />\n      default:\n        return <ImageIcon className=\"w-8 h-8 text-primary\" />\n    }\n  }\n\n  if (items.length === 0) return null\n\n  return (\n    <div className={cn('w-full', className)}>\n      <div className={cn('grid gap-3', gridCols[columns])}>\n        {items.map((item) => (\n          <motion.div\n            key={item.id}\n            {...(shouldAnimate\n              ? { initial: { opacity: 0, scale: 0.8 }, animate: { opacity: 1, scale: 1 }, exit: { opacity: 0, scale: 0.8 } }\n              : {})}\n            className=\"relative group\"\n          >\n            <div\n              onClick={() => onView?.(item)}\n              className={cn(\n                'aspect-square rounded-lg overflow-hidden border-2 border-border',\n                'flex items-center justify-center',\n                'cursor-pointer hover:border-border-dark transition-all',\n                item.type === 'image' ? 'bg-border' : 'bg-secondary'\n              )}\n            >\n              {item.type === 'image' ? (\n                <img\n                  src={item.url}\n                  alt={item.name}\n                  className=\"w-full h-full object-cover\"\n                />\n              ) : (\n                <div className=\"flex flex-col items-center gap-2 p-3\">\n                  {getIcon(item.type)}\n                  <p className=\"text-xs text-center text-primary line-clamp-2\">\n                    {item.name}\n                  </p>\n                </div>\n              )}\n            </div>\n\n            {/* Remove Button */}\n            {onRemove && (\n              <motion.button\n                {...(shouldAnimate ? { initial: { opacity: 0 }, whileHover: { opacity: 1 } } : {})}\n                className=\"absolute -top-2 -right-2 p-1.5 bg-error text-white rounded-full shadow-lg hover:bg-red-600 opacity-0 group-hover:opacity-100 transition-opacity\"\n                onClick={(e) => {\n                  e.stopPropagation()\n                  onRemove(item.id)\n                }}\n              >\n                <X className=\"w-4 h-4\" />\n              </motion.button>\n            )}\n\n            {/* File Info */}\n            {item.size && (\n              <div className=\"absolute bottom-0 left-0 right-0 bg-black/60 text-white text-xs p-1.5 backdrop-blur-sm\">\n                <p className=\"truncate\">{item.name}</p>\n                <p className=\"text-white/70\">{formatSize(item.size)}</p>\n              </div>\n            )}\n          </motion.div>\n        ))}\n      </div>\n    </div>\n  )\n}\n","import React from 'react'\n\nexport interface CreditBarProps {\n  /**\n   * The text to display (e.g., \"Built by StackLoop\")\n   */\n  text?: string\n  /**\n   * Show heart emoji\n   * @default true\n   */\n  showHeart?: boolean\n  /**\n   * Optional link URL\n   */\n  href?: string\n  /**\n   * Position of the credit bar\n   * @default 'fixed'\n   */\n  position?: 'fixed' | 'relative' | 'sticky'\n  /**\n   * Background color\n   * @default 'bg-gray-900'\n   */\n  backgroundColor?: string\n  /**\n   * Text color\n   * @default 'text-gray-400'\n   */\n  textColor?: string\n  /**\n   * Custom className for additional styling\n   */\n  className?: string\n}\n\nexport const CreditBar: React.FC<CreditBarProps> = ({\n  text = 'Built by StackLoop',\n  showHeart = true,\n  href,\n  position = 'fixed',\n  backgroundColor = 'bg-gray-900',\n  textColor = 'text-gray-400',\n  className = '',\n}) => {\n  const displayText = showHeart ? (\n    <>\n      Built with <span className=\"text-red-500 mx-1\">❤️</span> by {text.replace(/^Built by /, '')}\n    </>\n  ) : (\n    text\n  )\n\n  const content = href ? (\n    <a\n      href={href}\n      target=\"_blank\"\n      rel=\"noopener noreferrer\"\n      className={`${textColor} hover:text-white transition-colors duration-200 text-sm`}\n    >\n      {displayText}\n    </a>\n  ) : (\n    <span className={`${textColor} text-sm`}>{displayText}</span>\n  )\n\n  return (\n    <div\n      className={`${position} bottom-0 left-0 right-0 ${backgroundColor} ${className}`}\n      style={{ zIndex: 40 }}\n    >\n      <div className=\"flex items-center justify-center py-2 px-4\">\n        {content}\n      </div>\n    </div>\n  )\n}\n","const RIPPLE_SELECTOR = 'button, a, [role=\"button\"], [data-ripple=\"true\"]'\n\ndeclare global {\n  interface Window {\n    __uiRippleInitialized?: boolean\n  }\n}\n\nfunction isElementDisabled(element: HTMLElement): boolean {\n  if (element.getAttribute('aria-disabled') === 'true') {\n    return true\n  }\n\n  if (element instanceof HTMLButtonElement) {\n    return element.disabled\n  }\n\n  return false\n}\n\nfunction isRippleDisabled(element: HTMLElement): boolean {\n  return element.getAttribute('data-ripple') === 'false'\n}\n\nexport function setupRippleEffects() {\n  if (typeof window === 'undefined' || window.__uiRippleInitialized) {\n    return\n  }\n\n  const cleanupRipple = (interactiveElement: HTMLElement, ripple: HTMLSpanElement) => {\n    ripple.remove()\n\n    if (interactiveElement.dataset.ripplePositioned === 'true' && !interactiveElement.querySelector('.button-ripple')) {\n      interactiveElement.style.position = ''\n      delete interactiveElement.dataset.ripplePositioned\n    }\n\n    if (interactiveElement.dataset.rippleOverflow === 'true' && !interactiveElement.querySelector('.button-ripple')) {\n      interactiveElement.style.overflow = ''\n      delete interactiveElement.dataset.rippleOverflow\n    }\n  }\n\n  const createRipple = (event: PointerEvent) => {\n    const target = event.target as HTMLElement | null\n    if (!target) {\n      return\n    }\n\n    const interactiveElement = target.closest<HTMLElement>(RIPPLE_SELECTOR)\n    if (!interactiveElement || isElementDisabled(interactiveElement) || isRippleDisabled(interactiveElement)) {\n      return\n    }\n\n    const rect = interactiveElement.getBoundingClientRect()\n    const size = Math.max(rect.width, rect.height) * 2\n    const x = event.clientX - rect.left - size / 2\n    const y = event.clientY - rect.top - size / 2\n    const ripple = document.createElement('span')\n\n    ripple.className = 'button-ripple'\n    ripple.style.left = `${x}px`\n    ripple.style.top = `${y}px`\n    ripple.style.width = `${size}px`\n    ripple.style.height = `${size}px`\n\n    if (getComputedStyle(interactiveElement).position === 'static') {\n      interactiveElement.dataset.ripplePositioned = 'true'\n      interactiveElement.style.position = 'relative'\n    }\n\n    if (getComputedStyle(interactiveElement).overflow === 'visible') {\n      interactiveElement.dataset.rippleOverflow = 'true'\n      interactiveElement.style.overflow = 'hidden'\n    }\n\n    interactiveElement.appendChild(ripple)\n\n    const fallbackCleanup = window.setTimeout(() => {\n      cleanupRipple(interactiveElement, ripple)\n    }, 700)\n\n    ripple.addEventListener('animationend', () => {\n      window.clearTimeout(fallbackCleanup)\n      cleanupRipple(interactiveElement, ripple)\n    }, { once: true })\n  }\n\n  document.addEventListener('pointerdown', createRipple)\n  window.__uiRippleInitialized = true\n}\n"],"names":["r","e","t","f","o","clsx","concatArrays","array1","array2","combinedArray","i","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","config","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","key","value","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","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","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","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","twMerge","cn","inputs","Button","React","variant","size","loading","icon","animate","children","disabled","props","ref","shouldAnimate","baseStyles","variants","sizes","jsxs","motion","jsx","Loader2","ButtonGroup","options","onChange","onOptionClick","option","isSelected","isDisabled","Fragment","event","FloatingPortal","open","anchorRef","placement","offset","matchWidth","mounted","setMounted","useState","style","setStyle","useEffect","updatePosition","useCallback","rect","createPortal","Dropdown","placeholder","error","searchable","clearable","isOpen","setIsOpen","searchQuery","setSearchQuery","dropdownPlacement","setDropdownPlacement","dropdownRef","useRef","triggerRef","searchInputRef","ignoreNextClickRef","selectedOption","opt","focusSearchInput","filteredOptions","handleClickOutside","handleEscape","updatePlacement","estimatedMenuHeight","availableBelow","availableAbove","handleSelect","optionValue","dropdownAnimation","ChevronDown","AnimatePresence","Search","X","pad","input","periodOptions","panelAnimation","DatePicker","mode","required","hint","minDate","maxDate","pickerPosition","setPickerPosition","isMonthMenuOpen","setIsMonthMenuOpen","monthMenuPosition","setMonthMenuPosition","isYearMenuOpen","setIsYearMenuOpen","yearMenuPosition","setYearMenuPosition","currentMonth","setCurrentMonth","hourInput","setHourInput","minuteInput","setMinuteInput","datePickerRef","pickerTriggerRef","monthMenuTriggerRef","monthMenuRef","yearMenuTriggerRef","yearMenuRef","timeBase","selectedHour24","selectedMinute","selectedHour12","normalized","selectedPeriod","formatDate","date","formatTime","formatDateTime","getPlaceholder","getDisplayValue","setTimeValue","hours","minutes","nextDate","setTimeFrom12Hour","hour12","period","normalizedHour","nextHours","monthNames","dayNames","days","year","month","firstDay","lastDay","startingDayOfWeek","endingDayOfWeek","totalDays","gridStart","_","day","currentYear","currentMonthIndex","startYear","endYear","yearOptions","isSameDay","left","right","isToday","isDateDisabled","isMonthOutOfRange","monthIndex","minYear","minMonth","maxYear","maxMonth","handleDateSelect","toggleMonthMenu","triggerRect","availableBottom","availableTop","previous","toggleYearMenu","selectedMonth","selectedYear","handlePreviousMonth","handleNextMonth","handleMonthChange","nextMonth","handleYearChange","nextYear","handleHourTyping","rawValue","digitsOnly","parsedHour","handleMinuteTyping","parsedMinute","commitHourInput","clampedHour","commitMinuteInput","clampedMinute","renderTimeControls","nextPeriod","renderCalendar","ChevronLeft","monthName","yearOption","ChevronRight","isLastColumn","isLastRow","isCurrentDay","isCurrentMonthDay","Calendar","FlagIcon","iso2","flagCode","countries","CountrySelect","onCountryChange","showFlags","containerRef","selectedCountry","useMemo","country","filteredCountries","query","handleChange","selected","item","countryOption","getLocaleCountry","match","normalizeDialCode","dialCode","findCountryByDialCodePrefix","inputValue","preferredIso2","compactValue","normalizedValue","matchingCountries","preferredCountry","PhoneInput","defaultCountry","autoDetect","inputProps","internalCountry","setInternalCountry","lastEmittedIso2Ref","didInitValueRef","localeCountry","inferredCountry","handleCountrySelect","currentValue","detectedCountry","detectedDialCode","nextValue","Input","forwardRef","showPassword","setShowPassword","emitValueChange","type","onValueChange","phoneProps","countryProps","dateProps","pickerMode","nativeProps","leftIcon","rightIcon","onWheel","propsForInput","shouldSuppressNumberSteppers","isPassword","inputType","EyeOff","Eye","Textarea","helperText","Checkbox","description","checked","defaultChecked","internalChecked","setInternalChecked","isChecked","Check","RadioPills","name","Toggle","Slider","min","max","step","showValue","unit","isDragging","setIsDragging","percentage","DualSlider","value1","value2","label1","label2","isDraggingFirst","setIsDraggingFirst","isDraggingSecond","setIsDraggingSecond","total","percentage1","percentage2","handleSliderChange","newValue1","remaining","DropdownMenuContext","createContext","DropdownSubmenuContext","useDropdownMenuContext","context","useContext","useDropdownSubmenuContext","composeRefs","refs","node","getElementProps","element","DropdownMenu","defaultOpen","onOpenChange","isControlled","internalOpen","setInternalOpen","resolvedPlacement","setResolvedPlacement","rootRef","contentRef","setOpen","nextOpen","closeAll","handleOutsidePointer","menuHeight","contextValue","DropdownMenuTrigger","asChild","onClick","onKeyDown","forwardedRef","toggle","attachRef","child","childProps","DropdownMenuContent","align","side","sideOffset","resolvedHorizontalSide","setResolvedHorizontalSide","wrapperStyle","setWrapperStyle","updateHorizontalPlacement","menuWidth","viewportPadding","availableRight","availableLeft","preferredSide","fallbackSide","preferredSpace","fallbackSpace","menuContent","DropdownMenuItem","closeOnSelect","DropdownMenuSub","parentSubmenu","submenuWidth","inheritedPreferredSide","DropdownMenuSubTrigger","DropdownMenuSubContent","Select","selectRef","MultiSelect","maxItems","chipVariant","selectedOptions","newValues","v","handleRemoveChip","handleClearAll","chipVariantClasses","prev","Tooltip","delay","showArrow","arrowSize","arrowClassName","uncontrolledOpen","setUncontrolledOpen","resolvedSide","setResolvedSide","resolvedInlineAlign","setResolvedInlineAlign","position","setPosition","tooltipRef","openTimerRef","clearOpenTimer","openWithDelay","closeNow","tooltipRect","fitsBySide","spaceBySide","nextSide","a","b","unclampedLeft","unclampedTop","startLeft","endLeft","startFits","endFits","top","raf","tooltipStyle","arrowBaseStyle","arrowSideClasses","bgClasses","borderClasses","classes","bgs","cls","nonColorBorders","borders","p","Accordion","items","allowMultiple","openItems","setOpenItems","toggleItem","id","newOpenItems","variantStyles","Card","padding","hover","paddings","Component","CardHeader","CardTitle","CardDescription","CardContent","Drawer","onClose","title","drawerContent","Modal","modalRef","sizeClasses","modalContent","ModalContent","ModalFooter","BottomSheet","showCloseButton","sheetContent","Table","data","columns","onRowClick","keyExtractor","selectable","selectedKeys","defaultSelectedKeys","onSelectionChange","sortKey","setSortKey","sortOrder","setSortOrder","internalSelectedKeys","setInternalSelectedKeys","isSelectionControlled","effectiveSelectedKeys","selectedKeySet","updateSelection","nextSelectedKeys","nextKeySet","nextSelectedItems","handleSort","sortedData","aVal","bVal","allSelected","handleToggleAll","handleToggleItem","itemKey","idx","colIdx","col","ArrowUp","ArrowDown","ChevronsUpDown","Pagination","currentPage","totalPages","onPageChange","totalItems","itemsPerPage","pageItems","half","start","end","goToPage","page","nextPage","House","isActive","FloatingActionButton","actions","positions","actionVariants","handleMainClick","action","Plus","FAB","StepProgress","steps","currentStep","currentStepData","isCompleted","isCurrent","isUpcoming","Badge","dot","variantClasses","dotColors","OfflineBadge","isOffline","WifiOff","SyncIndicator","status","count","syncingIcon","Wifi","Spinner","SpinnerElement","ToastContext","useToast","variantIcons","AlertCircle","AlertTriangle","Info","Bell","positionStyles","DynamicIslandToast","toast","onRemove","phase","setPhase","isHovered","setIsHovered","timersRef","Icon","duration","expandAt","collapseAt","exitAt","removeAt","t1","t2","t3","t4","morphVariants","ToastProvider","maxToasts","toasts","setToasts","removeToast","addToast","newToast","CameraCapture","onCapture","preview","fileInputRef","handleFileChange","file","Camera","FileUploader","onUpload","accept","multiple","handleFiles","files","Upload","AudioRecorder","onRecordingComplete","maxDuration","isRecording","setIsRecording","isPaused","setIsPaused","setDuration","audioUrl","setAudioUrl","mediaRecorderRef","chunksRef","timerRef","startRecording","stream","mediaRecorder","blob","url","track","stopRecording","pauseRecording","resumeRecording","deleteRecording","seconds","mins","secs","Play","Pause","Mic","Square","Trash2","ThumbnailGrid","onView","gridCols","formatSize","bytes","kb","getIcon","FileText","ImageIcon","CreditBar","text","showHeart","href","backgroundColor","textColor","displayText","RIPPLE_SELECTOR","isElementDisabled","isRippleDisabled","setupRippleEffects","cleanupRipple","interactiveElement","ripple","createRipple","target","x","y","fallbackCleanup"],"mappings":"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","x_google_ignoreList":[0,1]}