{"version":3,"file":"triadui-icons.mjs","sources":["../../../../node_modules/clsx/dist/clsx.mjs","../src/utils/cn.ts","../src/constants/index.ts","../src/components/Icon.tsx"],"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;","import { type ClassValue, clsx } from 'clsx';\n\n/**\n * Utility function to concatenate class names conditionally\n * Uses clsx for combining class names\n * \n * @param inputs - Class values to combine\n * @returns Combined class string\n */\nexport function cn(...inputs: ClassValue[]) {\n  return clsx(inputs);\n}","import type { IconSize, IconColor } from '../types';\n\n/**\n * Default configuration values for the Icon component\n */\nexport const DEFAULT_ICON_CONFIG = {\n  variant: 'rounded' as const,\n  fill: 0 as const,\n  weight: 400,\n  grade: 0,\n  opsz: 24,\n  fontSize: 'medium' as const,\n  color: 'inherit' as const,\n} as const;\n\n/**\n * CSS class mappings for icon size presets\n */\nexport const ICON_SIZE_CLASSES: Record<Exclude<IconSize, number>, string> = {\n  inherit: '',\n  small: 'text-icon-small',\n  medium: 'text-icon-medium',\n  large: 'text-icon-large',\n} as const;\n\n/**\n * CSS class mappings for icon color presets\n */\nexport const ICON_COLOR_CLASSES: Record<IconColor, string> = {\n  inherit: 'text-current',\n  primary: 'text-m3-primary',\n  secondary: 'text-m3-secondary',\n  action: 'text-m3-surface-on-variant',\n  disabled: 'text-m3-outline opacity-38',\n  error: 'text-m3-error',\n} as const;\n\n/**\n * Font family mappings for Material Symbols variants\n */\nexport const MATERIAL_SYMBOLS_FONTS = {\n  outlined: 'Material Symbols Outlined',\n  filled: 'Material Symbols Rounded', // Filled uses rounded as base with fill=1\n  rounded: 'Material Symbols Rounded',\n  sharp: 'Material Symbols Sharp',\n} as const;\n\n/**\n * Base CSS classes applied to all icon instances\n */\nexport const BASE_ICON_CLASSES = 'inline-flex items-center justify-center select-none font-material-symbols';\n\n/**\n * Range constraints for Material Symbols variable font properties\n */\nexport const FONT_CONSTRAINTS = {\n  weight: { min: 100, max: 700 },\n  grade: { min: -50, max: 200 },\n  opsz: { min: 20, max: 48 },\n} as const;","import React from 'react';\nimport { cn } from '../utils/cn';\nimport type { IconProps } from '../types';\nimport { \n  DEFAULT_ICON_CONFIG, \n  ICON_SIZE_CLASSES, \n  ICON_COLOR_CLASSES, \n  MATERIAL_SYMBOLS_FONTS, \n  BASE_ICON_CLASSES \n} from '../constants';\n\n/**\n * Material Symbols Icon Component\n *\n * A React component for displaying Material Design icons using the Material Symbols font.\n * Supports variable font features including fill, weight, grade, and optical size.\n * Available in three styles: outlined, rounded, and sharp.\n *\n * @example\n * ```tsx\n * <Icon name=\"home\" />\n * <Icon name=\"search\" variant=\"outlined\" fill={1} weight={400} opsz={24} />\n * <Icon name=\"settings\" variant=\"sharp\" grade={200} color=\"primary\" fontSize=\"large\" />\n * ```\n */\nexport const Icon: React.FC<IconProps> = ({\n  name,\n  variant = DEFAULT_ICON_CONFIG.variant,\n  fill = DEFAULT_ICON_CONFIG.fill,\n  weight = DEFAULT_ICON_CONFIG.weight,\n  grade = DEFAULT_ICON_CONFIG.grade,\n  opsz = DEFAULT_ICON_CONFIG.opsz,\n  fontSize = DEFAULT_ICON_CONFIG.fontSize,\n  color = DEFAULT_ICON_CONFIG.color,\n  className = '',\n  style = {},\n  ...props\n}) => {\n  // Get the appropriate font family based on variant\n  const fontFamily = MATERIAL_SYMBOLS_FONTS[variant];\n\n  // Build the combined styles\n  const iconStyle: React.CSSProperties = {\n    fontFamily,\n    fontVariationSettings: `'FILL' ${fill}, 'wght' ${weight}, 'GRAD' ${grade}, 'opsz' ${opsz}`,\n    fontSize: typeof fontSize === 'number' ? `${fontSize}px` : undefined,\n    lineHeight: 1,\n    ...style,\n  };\n\n  // Build classes\n  const sizeClass = typeof fontSize === 'string' ? ICON_SIZE_CLASSES[fontSize] : '';\n  const colorClass = ICON_COLOR_CLASSES[color];\n\n  /** Render the icon as a span element with the computed styles and classes */\n  return (\n    <span\n      className={cn(BASE_ICON_CLASSES, sizeClass, colorClass, className)}\n      style={iconStyle}\n      {...props}\n      aria-hidden=\"true\"\n    >\n      {name}\n    </span>\n  );\n};\n\nIcon.displayName = 'Icon';"],"names":["r","e","t","f","n","o","clsx","cn","inputs","DEFAULT_ICON_CONFIG","ICON_SIZE_CLASSES","ICON_COLOR_CLASSES","MATERIAL_SYMBOLS_FONTS","BASE_ICON_CLASSES","FONT_CONSTRAINTS","Icon","name","variant","fill","weight","grade","opsz","fontSize","color","className","style","props","iconStyle","sizeClass","colorClass","jsx"],"mappings":";;AAAA,SAASA,EAAEC,GAAE;AAAC,MAAIC,GAAEC,GAAEC,IAAE;AAAG,MAAa,OAAOH,KAAjB,YAA8B,OAAOA,KAAjB,SAAmB,CAAAG,KAAGH;AAAA,WAAoB,OAAOA,KAAjB,SAAmB,KAAG,MAAM,QAAQA,CAAC,GAAE;AAAC,QAAII,IAAEJ,EAAE;AAAO,SAAIC,IAAE,GAAEA,IAAEG,GAAEH,IAAI,CAAAD,EAAEC,CAAC,MAAIC,IAAEH,EAAEC,EAAEC,CAAC,CAAC,OAAKE,MAAIA,KAAG,MAAKA,KAAGD;AAAA,EAAE,MAAM,MAAIA,KAAKF,EAAE,CAAAA,EAAEE,CAAC,MAAIC,MAAIA,KAAG,MAAKA,KAAGD;AAAG,SAAOC;AAAC;AAAQ,SAASE,IAAM;AAAC,WAAQL,GAAEC,GAAEC,IAAE,GAAEC,IAAE,IAAGC,IAAE,UAAU,QAAOF,IAAEE,GAAEF,IAAI,EAACF,IAAE,UAAUE,CAAC,OAAKD,IAAEF,EAAEC,CAAC,OAAKG,MAAIA,KAAG,MAAKA,KAAGF;AAAG,SAAOE;AAAC;ACSxW,SAASG,KAAMC,GAAsB;AAC1C,SAAOF,EAAKE,CAAM;AACpB;ACNO,MAAMC,IAAsB;AAAA,EACjC,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,UAAU;AAAA,EACV,OAAO;AACT,GAKaC,IAA+D;AAAA,EAC1E,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT,GAKaC,IAAgD;AAAA,EAC3D,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AACT,GAKaC,IAAyB;AAAA,EACpC,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AACT,GAKaC,IAAoB,6EAKpBC,IAAmB;AAAA,EAC9B,QAAQ,EAAE,KAAK,KAAK,KAAK,IAAA;AAAA,EACzB,OAAO,EAAE,KAAK,KAAK,KAAK,IAAA;AAAA,EACxB,MAAM,EAAE,KAAK,IAAI,KAAK,GAAA;AACxB,GClCaC,IAA4B,CAAC;AAAA,EACxC,MAAAC;AAAA,EACA,SAAAC,IAAUR,EAAoB;AAAA,EAC9B,MAAAS,IAAOT,EAAoB;AAAA,EAC3B,QAAAU,IAASV,EAAoB;AAAA,EAC7B,OAAAW,IAAQX,EAAoB;AAAA,EAC5B,MAAAY,IAAOZ,EAAoB;AAAA,EAC3B,UAAAa,IAAWb,EAAoB;AAAA,EAC/B,OAAAc,IAAQd,EAAoB;AAAA,EAC5B,WAAAe,IAAY;AAAA,EACZ,OAAAC,IAAQ,CAAA;AAAA,EACR,GAAGC;AACL,MAAM;AAKJ,QAAMC,IAAiC;AAAA,IACrC,YAJiBf,EAAuBK,CAAO;AAAA,IAK/C,uBAAuB,UAAUC,CAAI,YAAYC,CAAM,YAAYC,CAAK,YAAYC,CAAI;AAAA,IACxF,UAAU,OAAOC,KAAa,WAAW,GAAGA,CAAQ,OAAO;AAAA,IAC3D,YAAY;AAAA,IACZ,GAAGG;AAAA,EAAA,GAICG,IAAY,OAAON,KAAa,WAAWZ,EAAkBY,CAAQ,IAAI,IACzEO,IAAalB,EAAmBY,CAAK;AAG3C,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWvB,EAAGM,GAAmBe,GAAWC,GAAYL,CAAS;AAAA,MACjE,OAAOG;AAAA,MACN,GAAGD;AAAA,MACJ,eAAY;AAAA,MAEX,UAAAV;AAAA,IAAA;AAAA,EAAA;AAGP;AAEAD,EAAK,cAAc;","x_google_ignoreList":[0]}