{"version":3,"sources":["../src/IconBase.tsx","../src/OrigonIcon.tsx","../src/useOrigonIcon.ts"],"names":["jsx","CDN_BASE_URL","isServer","validateIconName","validateSize","validateStyle","useMemo"],"mappings":"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","file":"index.cjs","sourcesContent":["import React from 'react';\nimport { IconProps } from './types';\n\n// Detectar si estamos en el servidor (SSR)\nconst isServer = typeof window === 'undefined';\n\nconst CDN_BASE_URL = 'https://cdn.origonlabs.opendex.dev';\n\nexport interface CDNIconProps extends Omit<IconProps, 'style'> {\n  name: string;\n  style?:\n    | 'regular'\n    | 'filled'\n    | 'light'\n    | 'color'\n    | 'regular_ltr'\n    | 'regular_rtl'\n    | 'filled_ltr'\n    | 'filled_rtl';\n}\n\n/**\n * Valida que el nombre del icono sea válido\n */\nfunction validateIconName(name: string): boolean {\n  if (!name || typeof name !== 'string') {\n    return false;\n  }\n  // Permitir letras, números, espacios, guiones y guiones bajos\n  return /^[a-zA-Z0-9\\s\\-_]+$/.test(name);\n}\n\n/**\n * Valida que el tamaño sea válido\n */\nfunction validateSize(size: number | string): boolean {\n  const numSize = typeof size === 'number' ? size : parseInt(size.toString());\n  return !isNaN(numSize) && numSize > 0 && numSize <= 512;\n}\n\n/**\n * Valida que el estilo sea válido\n */\nfunction validateStyle(style: string): boolean {\n  const validStyles = [\n    'regular',\n    'filled',\n    'light',\n    'color',\n    'regular_ltr',\n    'regular_rtl',\n    'filled_ltr',\n    'filled_rtl',\n  ];\n  return validStyles.includes(style);\n}\n\nexport function IconBase({\n  name,\n  size = 24,\n  style = 'regular',\n  color,\n  ...rest\n}: CDNIconProps) {\n  // Validaciones\n  if (!validateIconName(name)) {\n    console.warn(\n      `[OrigonIcons] Invalid icon name: \"${name}\". Icon name must contain only letters, numbers, spaces, hyphens, and underscores.`\n    );\n    return null;\n  }\n\n  if (!validateSize(size)) {\n    console.warn(\n      `[OrigonIcons] Invalid size: \"${size}\". Size must be a number between 1 and 512.`\n    );\n    return null;\n  }\n\n  if (!validateStyle(style)) {\n    console.warn(\n      `[OrigonIcons] Invalid style: \"${style}\". Valid styles are: regular, filled, light, color, regular_ltr, regular_rtl, filled_ltr, filled_rtl.`\n    );\n    return null;\n  }\n\n  const resolvedSize =\n    typeof size === 'number' ? size : parseInt(size.toString());\n  const encodedName = encodeURIComponent(name);\n  const fileName = `ic_origon_${name.toLowerCase().replace(/\\s+/g, '_')}_${resolvedSize}_${style}.svg`;\n  const iconUrl = `${CDN_BASE_URL}/icons/${encodedName}/SVG/${fileName}`;\n\n  // En SSR, retornar un placeholder para evitar errores de hidratación\n  if (isServer) {\n    return (\n      <div\n        style={{\n          width: resolvedSize,\n          height: resolvedSize,\n          backgroundColor: 'transparent',\n          display: 'inline-block',\n        }}\n        {...(rest as unknown as React.HTMLAttributes<HTMLDivElement>)}\n      />\n    );\n  }\n\n  return (\n    <img\n      src={iconUrl}\n      alt={name}\n      width={resolvedSize}\n      height={resolvedSize}\n      style={{ color }}\n      onError={e => {\n        console.error(\n          `[OrigonIcons] Failed to load icon: \"${name}\" with style \"${style}\" and size ${resolvedSize}. URL: ${iconUrl}`\n        );\n        // Opcional: mostrar un icono de fallback\n        e.currentTarget.style.display = 'none';\n      }}\n      {...(rest as unknown as React.ImgHTMLAttributes<HTMLImageElement>)}\n    />\n  );\n}\n\n// Componente SVG inline para compatibilidad\nexport function IconBaseSVG({\n  size = 24,\n  color = 'currentColor',\n  children,\n  ...rest\n}: React.PropsWithChildren<IconProps>) {\n  const resolvedSize = typeof size === 'number' ? `${size}` : size;\n  return (\n    <svg\n      width={resolvedSize}\n      height={resolvedSize}\n      viewBox='0 0 24 24'\n      fill='none'\n      stroke={color}\n      xmlns='http://www.w3.org/2000/svg'\n      {...rest}\n    >\n      {children}\n    </svg>\n  );\n}\n\nexport default IconBase;\n","import React from 'react';\nimport { IconBase, CDNIconProps } from './IconBase';\n\nexport interface OrigonIconProps extends CDNIconProps {\n  name: string;\n}\n\n/**\n * Componente principal para usar iconos Origon desde el CDN\n * \n * @example\n * ```tsx\n * <OrigonIcon name=\"Zoom In\" size={24} style=\"filled\" />\n * <OrigonIcon name=\"Accessibility\" size={32} style=\"regular\" />\n * ```\n */\nexport const OrigonIcon: React.FC<OrigonIconProps> = ({ name, ...props }) => {\n  return <IconBase name={name} {...props} />;\n};\n\nexport default OrigonIcon;\n","import { useMemo } from 'react';\n\nconst CDN_BASE_URL = 'https://cdn.origonlabs.opendex.dev';\n\n// Detectar si estamos en el servidor (SSR)\nconst isServer = typeof window === 'undefined';\n\nexport interface UseOrigonIconOptions {\n  name: string;\n  size?: number;\n  style?:\n    | 'regular'\n    | 'filled'\n    | 'light'\n    | 'color'\n    | 'regular_ltr'\n    | 'regular_rtl'\n    | 'filled_ltr'\n    | 'filled_rtl';\n}\n\n/**\n * Valida que el nombre del icono sea válido\n */\nfunction validateIconName(name: string): boolean {\n  if (!name || typeof name !== 'string') {\n    return false;\n  }\n  return /^[a-zA-Z0-9\\s\\-_]+$/.test(name);\n}\n\n/**\n * Valida que el tamaño sea válido\n */\nfunction validateSize(size: number | string): boolean {\n  const numSize = typeof size === 'number' ? size : parseInt(size.toString());\n  return !isNaN(numSize) && numSize > 0 && numSize <= 512;\n}\n\n/**\n * Valida que el estilo sea válido\n */\nfunction validateStyle(style: string): boolean {\n  const validStyles = [\n    'regular',\n    'filled',\n    'light',\n    'color',\n    'regular_ltr',\n    'regular_rtl',\n    'filled_ltr',\n    'filled_rtl',\n  ];\n  return validStyles.includes(style);\n}\n\n/**\n * Hook para generar URLs de iconos Origon desde el CDN\n *\n * @param options - Opciones del icono\n * @returns URL del icono o string vacío si hay errores\n *\n * @example\n * ```tsx\n * const iconUrl = useOrigonIcon({ name: 'Zoom In', size: 24, style: 'filled' });\n * return <img src={iconUrl} alt=\"Zoom In\" />;\n * ```\n */\nexport function useOrigonIcon({\n  name,\n  size = 24,\n  style = 'regular',\n}: UseOrigonIconOptions): string {\n  return useMemo(() => {\n    // En SSR, retornar string vacío para evitar errores de hidratación\n    if (isServer) {\n      return '';\n    }\n\n    // Validaciones\n    if (!validateIconName(name)) {\n      console.warn(\n        `[OrigonIcons] Invalid icon name: \"${name}\". Icon name must contain only letters, numbers, spaces, hyphens, and underscores.`\n      );\n      return '';\n    }\n\n    if (!validateSize(size)) {\n      console.warn(\n        `[OrigonIcons] Invalid size: \"${size}\". Size must be a number between 1 and 512.`\n      );\n      return '';\n    }\n\n    if (!validateStyle(style)) {\n      console.warn(\n        `[OrigonIcons] Invalid style: \"${style}\". Valid styles are: regular, filled, light, color, regular_ltr, regular_rtl, filled_ltr, filled_rtl.`\n      );\n      return '';\n    }\n\n    const resolvedSize =\n      typeof size === 'number' ? size : parseInt(String(size));\n    const encodedName = encodeURIComponent(name);\n    const fileName = `ic_origon_${name.toLowerCase().replace(/\\s+/g, '_')}_${resolvedSize}_${style}.svg`;\n    return `${CDN_BASE_URL}/icons/${encodedName}/SVG/${fileName}`;\n  }, [name, size, style]);\n}\n\nexport default useOrigonIcon;\n"]}