{"version":3,"file":"Loader.mjs","sources":["../../../../src/lib/nextGenComponents/components/Loader/Loader.tsx"],"sourcesContent":["import { Loader2 } from 'lucide-react'\n\nimport { cn } from '@/lib/utils'\n\nexport type LoaderProps = {\n  /** Controls overall placement and sizing strategy.\n   * - `fullscreen` — fixed full-viewport overlay (z-50)\n   * - `section`    — absolute overlay that covers the nearest `relative` ancestor (z-10)\n   * - `inline`     — a small border-based spinner with no wrapper; position via `className`\n   */\n  mode?: 'fullscreen' | 'section' | 'inline'\n  variant?: 'primary' | 'secondary'\n  size?: 'sm' | 'md' | 'lg'\n  /** Adds a semi-transparent dark background. Only applies to `fullscreen` mode. */\n  overlay?: boolean\n  className?: string\n}\n\nconst arcSizeMap: Record<NonNullable<LoaderProps['size']>, number> = {\n  sm: 20,\n  md: 40,\n  lg: 64\n}\n\nconst inlineSizeMap: Record<NonNullable<LoaderProps['size']>, string> = {\n  sm: 'w-3.5 h-3.5',\n  md: 'w-5 h-5',\n  lg: 'w-7 h-7'\n}\n\nconst Loader = ({\n  mode = 'section',\n  variant = 'primary',\n  size = 'md',\n  overlay = true,\n  className\n}: LoaderProps) => {\n  if (mode === 'inline') {\n    return (\n      <div\n        data-testid=\"loader\"\n        aria-label=\"Loading\"\n        role=\"status\"\n        className={cn(\n          'rounded-full border-2 animate-spin',\n          inlineSizeMap[size],\n          variant === 'secondary'\n            ? 'border-muted-foreground/20 border-t-muted-foreground/70'\n            : 'border-primary/20 border-t-primary/70',\n          className\n        )}\n      />\n    )\n  }\n\n  const isFullscreen = mode === 'fullscreen'\n\n  return (\n    <div\n      data-testid=\"loader\"\n      role=\"status\"\n      className={cn(\n        'flex items-center justify-center',\n        isFullscreen ? 'fixed inset-0 z-50' : 'absolute inset-0 z-10',\n        isFullscreen && overlay && 'bg-black/20',\n        className\n      )}\n    >\n      <output aria-label=\"Loading\">\n        <Loader2\n          className={cn(\n            'animate-spin',\n            variant === 'secondary' ? 'text-muted-foreground' : 'text-[#6279e7]'\n          )}\n          size={arcSizeMap[size]}\n        />\n      </output>\n    </div>\n  )\n}\n\nexport default Loader\n"],"names":["arcSizeMap","inlineSizeMap","Loader","mode","variant","size","overlay","className","jsx","cn","isFullscreen","Loader2"],"mappings":";;;AAkBA,MAAMA,IAA+D;AAAA,EACnE,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAkE;AAAA,EACtE,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAS,CAAC;AAAA,EACd,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,WAAAC;AACF,MAAmB;AACjB,MAAIJ,MAAS;AACX,WACE,gBAAAK;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAY;AAAA,QACZ,cAAW;AAAA,QACX,MAAK;AAAA,QACL,WAAWC;AAAA,UACT;AAAA,UACAR,EAAcI,CAAI;AAAA,UAClBD,MAAY,cACR,4DACA;AAAA,UACJG;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAKN,QAAMG,IAAeP,MAAS;AAE9B,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAY;AAAA,MACZ,MAAK;AAAA,MACL,WAAWC;AAAA,QACT;AAAA,QACAC,IAAe,uBAAuB;AAAA,QACtCA,KAAgBJ,KAAW;AAAA,QAC3BC;AAAA,MAAA;AAAA,MAGF,UAAA,gBAAAC,EAAC,UAAA,EAAO,cAAW,WACjB,UAAA,gBAAAA;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,WAAWF;AAAA,YACT;AAAA,YACAL,MAAY,cAAc,0BAA0B;AAAA,UAAA;AAAA,UAEtD,MAAMJ,EAAWK,CAAI;AAAA,QAAA;AAAA,MAAA,EACvB,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}