{"version":3,"sources":["../../elements/loading/Loading.tsx","../../util/index.ts"],"sourcesContent":["import React, { FC } from \"react\";\n\nimport { cn } from \"@util/index\";\n\ntype LoadingTypes = {\n  /** Specifies the size of the loading component.*/\n  size?: \"button\" | \"xs\" | \"sm\" | \"normal\" | \"lg\" | \"xl\";\n  /** Determines the design of the loading animation.*/\n  design?:\n    | \"spinner\"\n    | \"dots-bounce\"\n    | \"dots-pulse\"\n    | \"pulse\"\n    | \"spinner-dots\"\n    | \"squircle\"\n    | \"square\"\n    | \"progress\"\n    | \"orbit\";\n  /** Specifies the color of the loading component. By default it will inherit the value of --primary global CSS variable*/\n  color?: string;\n  classNames?: {\n    container?: string;\n    track?: string;\n    car?: string;\n  };\n  themeMode?: \"dark\" | \"light\";\n};\n\nexport const Loading: FC<LoadingTypes> = ({\n  design = \"spinner\",\n  size = \"normal\",\n  themeMode = \"light\",\n  classNames,\n  color,\n  ...props\n}) => {\n  let sizeStyles = {\n    button: \"hawa-h-4 hawa-w-4\",\n    xs: \"hawa-h-1 hawa-w-1\",\n    sm: \"hawa-h-6 hawa-w-6\",\n    normal: \"hawa-h-8 hawa-w-8\",\n    lg: \"hawa-h-14 hawa-w-14\",\n    xl: \"hawa-h-24 hawa-w-24\",\n  };\n  let progressSizes = {\n    button: \"hawa-h-1\",\n    xs: \"hawa-h-1 hawa-w-1\",\n    sm: \"hawa-h-6 hawa-w-6\",\n    normal: \"\",\n    lg: \"hawa-h-6\",\n    xl: \"hawa-h-10 hawa-w-64\",\n  };\n\n  let animationStyles: any = {\n    pulse: \"hawa-animate-in hawa-fade-in hawa-duration-1000\",\n    bounce: \"hawa-animate-bounce\",\n  };\n  switch (design.split(\"-\")[0]) {\n    case \"dots\":\n      return (\n        <div\n          className={cn(\n            \"hawa-flex hawa-flex-row hawa-gap-2\",\n            classNames?.container,\n          )}\n        >\n          <div\n            className={cn(\n              \"hawa-animate-bounce hawa-rounded-full hawa-delay-100 hawa-repeat-infinite\",\n              size === \"button\" ? \"hawa-h-2 hawa-w-2\" : sizeStyles[size],\n              animationStyles[design.split(\"-\")[1]],\n              color ? color : \"hawa-bg-primary\",\n            )}\n          ></div>\n          <div\n            className={cn(\n              \"hawa-animate-bounce hawa-rounded-full hawa-delay-200 hawa-repeat-infinite\",\n              size === \"button\" ? \"hawa-h-2 hawa-w-2\" : sizeStyles[size],\n              animationStyles[design.split(\"-\")[1]],\n              color ? color : \"hawa-bg-primary\",\n            )}\n          ></div>\n          <div\n            className={cn(\n              \"hawa-animate-bounce hawa-rounded-full hawa-delay-300 hawa-repeat-infinite\",\n              size === \"button\" ? \"hawa-h-2 hawa-w-2\" : sizeStyles[size],\n              animationStyles[design.split(\"-\")[1]],\n              color ? color : \"hawa-bg-primary\",\n            )}\n          ></div>\n        </div>\n      );\n    case \"square\":\n      return (\n        <svg\n          className={cn(\n            \"squircle-container\",\n            sizeStyles[size],\n            classNames?.container,\n          )}\n          viewBox=\"0 0 35 35\"\n          height=\"35\"\n          width=\"35\"\n        >\n          <rect\n            className=\"squircle-track\"\n            x=\"2.5\"\n            y=\"2.5\"\n            fill=\"none\"\n            strokeWidth=\"5px\"\n            width=\"32.5\"\n            height=\"32.5\"\n          />\n          <rect\n            className=\"square-car\"\n            x=\"2.5\"\n            y=\"2.5\"\n            fill=\"none\"\n            strokeWidth=\"5px\"\n            width=\"32.5\"\n            height=\"32.5\"\n            pathLength=\"100\"\n          />\n        </svg>\n      );\n    case \"squircle\":\n      return (\n        <svg\n          x=\"0px\"\n          y=\"0px\"\n          viewBox=\"0 0 37 37\"\n          height=\"37\"\n          width=\"37\"\n          preserveAspectRatio=\"xMidYMid meet\"\n          className={cn(\n            \"squircle-container\",\n            sizeStyles[size],\n            classNames?.container,\n          )}\n        >\n          <path\n            className={cn(\"squircle-track\", classNames?.track)}\n            fill=\"none\"\n            strokeWidth=\"5\"\n            pathLength=\"100\"\n            d=\"M0.37 18.5 C0.37 5.772 5.772 0.37 18.5 0.37 S36.63 5.772 36.63 18.5 S31.228 36.63 18.5 36.63 S0.37 31.228 0.37 18.5\"\n          ></path>\n          <path\n            className={cn(\"squircle-car\", classNames?.car)}\n            fill=\"none\"\n            strokeWidth=\"5\"\n            pathLength=\"100\"\n            d=\"M0.37 18.5 C0.37 5.772 5.772 0.37 18.5 0.37 S36.63 5.772 36.63 18.5 S31.228 36.63 18.5 36.63 S0.37 31.228 0.37 18.5\"\n          ></path>\n        </svg>\n      );\n    case \"progress\":\n      return (\n        <div\n          className={cn(\n            \"progress-loading after:hawa-rounded hawa-rounded\",\n            progressSizes[size],\n            classNames?.container,\n          )}\n        ></div>\n      );\n    case \"orbit\":\n      return (\n        <div className={cn(\"orbit-container\", classNames?.container)}></div>\n      );\n\n    default:\n      return (\n        <svg\n          viewBox=\"0 0 40 40\"\n          height=\"40\"\n          width=\"40\"\n          className={cn(\n            \"circle-container\",\n            sizeStyles[size],\n            classNames?.container,\n          )}\n        >\n          <circle\n            className={cn(\n              \"circle-track\",\n              {\n                \"hawa-stroke-primary-foreground\": themeMode === \"dark\",\n                \"hawa-stroke-primary\": themeMode === \"light\",\n              },\n              classNames?.track,\n            )}\n            cx=\"20\"\n            cy=\"20\"\n            r=\"17.5\"\n            fill=\"none\"\n            strokeWidth=\"5px\"\n            pathLength=\"100\"\n          />\n          <circle\n            className={cn(\n              \"circle-car\",\n              {\n                \"hawa-stroke-primary-foreground\": themeMode === \"dark\",\n                \"hawa-stroke-primary\": themeMode === \"light\",\n              },\n              classNames?.car,\n            )}\n            cx=\"20\"\n            cy=\"20\"\n            r=\"17.5\"\n            fill=\"none\"\n            pathLength=\"100\"\n            strokeWidth=\"5px\"\n          />\n        </svg>\n      );\n  }\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n\ntype Palette = {\n  name: string;\n  colors: {\n    [key: number]: string;\n  };\n};\ntype Rgb = {\n  r: number;\n  g: number;\n  b: number;\n};\nfunction hexToRgb(hex: string): Rgb | null {\n  const sanitizedHex = hex.replaceAll(\"##\", \"#\");\n  const colorParts = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(\n    sanitizedHex\n  );\n\n  if (!colorParts) {\n    return null;\n  }\n\n  const [, r, g, b] = colorParts;\n\n  return {\n    r: parseInt(r, 16),\n    g: parseInt(g, 16),\n    b: parseInt(b, 16)\n  } as Rgb;\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n  const toHex = (c: number) => `0${c.toString(16)}`.slice(-2);\n  return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\nexport function getTextColor(color: string): \"#FFF\" | \"#333\" {\n  const rgbColor = hexToRgb(color);\n\n  if (!rgbColor) {\n    return \"#333\";\n  }\n\n  const { r, g, b } = rgbColor;\n  const luma = 0.2126 * r + 0.7152 * g + 0.0722 * b;\n\n  return luma < 120 ? \"#FFF\" : \"#333\";\n}\n\nfunction lighten(hex: string, intensity: number): string {\n  const color = hexToRgb(`#${hex}`);\n\n  if (!color) {\n    return \"\";\n  }\n\n  const r = Math.round(color.r + (255 - color.r) * intensity);\n  const g = Math.round(color.g + (255 - color.g) * intensity);\n  const b = Math.round(color.b + (255 - color.b) * intensity);\n\n  return rgbToHex(r, g, b);\n}\n\nfunction darken(hex: string, intensity: number): string {\n  const color = hexToRgb(hex);\n\n  if (!color) {\n    return \"\";\n  }\n\n  const r = Math.round(color.r * intensity);\n  const g = Math.round(color.g * intensity);\n  const b = Math.round(color.b * intensity);\n\n  return rgbToHex(r, g, b);\n}\nconst parseColor = (color: any) => {\n  if (color.startsWith(\"#\")) {\n    // Convert hex to RGB\n    let r = parseInt(color.slice(1, 3), 16);\n    let g = parseInt(color.slice(3, 5), 16);\n    let b = parseInt(color.slice(5, 7), 16);\n    return [r, g, b];\n  } else if (color.startsWith(\"rgb\")) {\n    // Extract RGB values from rgb() format\n    return color.match(/\\d+/g).map(Number);\n  }\n  // Default to white if format is unrecognized\n  return [255, 255, 255];\n};\nexport const calculateLuminance = (color: any) => {\n  const [r, g, b] = parseColor(color)?.map((c: any) => {\n    c /= 255;\n    return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\n  });\n  return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n};\n\nfunction getPallette(baseColor: string): Palette {\n  const name = baseColor;\n\n  const response: Palette = {\n    name,\n    colors: {\n      500: `#${baseColor}`.replace(\"##\", \"#\")\n    }\n  };\n\n  const intensityMap: {\n    [key: number]: number;\n  } = {\n    50: 0.95,\n    100: 0.9,\n    200: 0.75,\n    300: 0.6,\n    400: 0.3,\n    600: 0.9,\n    700: 0.75,\n    800: 0.6,\n    900: 0.49\n  };\n\n  [50, 100, 200, 300, 400].forEach((level) => {\n    response.colors[level] = lighten(baseColor, intensityMap[level]);\n  });\n  [600, 700, 800, 900].forEach((level) => {\n    response.colors[level] = darken(baseColor, intensityMap[level]);\n  });\n\n  return response as Palette;\n}\n\nexport { getPallette };\n\n// const hexToRgb = (hex) => {\n//   let d = hex?.split(\"#\")[1];\n//   var aRgbHex = d?.match(/.{1,2}/g);\n//   var aRgb = [\n//     parseInt(aRgbHex[0], 16),\n//     parseInt(aRgbHex[1], 16),\n//     parseInt(aRgbHex[2], 16)\n//   ];\n//   return aRgb;\n// };\n// const getTextColor = (backColor) => {\n//   let rgbArray = hexToRgb(backColor);\n//   if (rgbArray[0] * 0.299 + rgbArray[1] * 0.587 + rgbArray[2] * 0.114 > 186) {\n//     return \"#000000\";\n//   } else {\n//     return \"#ffffff\";\n//   }\n// };\n// const replaceAt = function (string, index, replacement) {\n//   // if (replacement == \"\" || replacement == \" \") {\n//   //   return (\n//   //     string.substring(0, index) +\n//   //     string.substring(index + replacement.length )\n//   //   );\n//   // }\n//   const replaced = string.substring(0, index) + replacement + string.substring(index + 1)\n//   return replaced\n// };\n\n// export { hexToRgb, getTextColor, replaceAt };\n"],"mappings":"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","names":[]}