{"version":3,"sources":["../src/progress/index.tsx"],"names":["useTheme","jsx","radius"],"mappings":";;;;;;;AAeA,IAAM,YAA0C,EAAE,EAAA,EAAI,GAAG,EAAA,EAAI,CAAA,EAAG,IAAI,EAAA,EAAG;AAehE,SAAS,QAAA,CAAS,EAAE,KAAA,EAAO,IAAA,GAAO,QAAA,EAAU,IAAA,GAAO,IAAA,EAAM,KAAA,EAAO,UAAA,EAAY,SAAA,EAAW,KAAA,EAAO,GAAG,MAAK,EAAkB;AAC7H,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIA,eAAA,EAAS;AAC5B,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AAE9C,EAAA,MAAM,SAAA,GAA0C;AAAA,IAC9C,QAAQ,MAAA,CAAO,aAAA;AAAA,IACf,SAAS,MAAA,CAAO,aAAA;AAAA,IAChB,SAAS,MAAA,CAAO,aAAA;AAAA,IAChB,QAAQ,MAAA,CAAO;AAAA,GACjB;AACA,EAAA,MAAM,IAAA,GAAO,KAAA,IAAS,SAAA,CAAU,IAAI,CAAA;AACpC,EAAA,MAAM,CAAA,GAAI,UAAU,IAAI,CAAA;AAExB,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,IAAA,EAAK,aAAA;AAAA,MACL,eAAA,EAAe,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,GAAG,CAAA;AAAA,MACvC,eAAA,EAAe,CAAA;AAAA,MACf,eAAA,EAAe,GAAA;AAAA,MACf,YAAA,EAAY,KAAK,YAAY,CAAA;AAAA,MAC7B,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,CAAA;AAAA,QACR,KAAA,EAAO,MAAA;AAAA,QACP,UAAA,EAAY,cAAc,MAAA,CAAO,aAAA;AAAA,QACjC,cAAcC,WAAA,CAAO,IAAA;AAAA,QACrB,QAAA,EAAU,QAAA;AAAA,QACV,GAAG;AAAA,OACL;AAAA,MAEA,QAAA,kBAAAD,cAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,MAAA,EAAQ,MAAA;AAAA,YACR,KAAA,EAAO,MAAA;AAAA,YACP,UAAA,EAAY,IAAA;AAAA,YACZ,cAAcC,WAAA,CAAO,IAAA;AAAA,YACrB,eAAA,EAAiB,MAAA;AAAA,YACjB,SAAA,EAAW,UAAU,OAAO,CAAA,CAAA,CAAA;AAAA,YAC5B,UAAA,EAAY;AAAA;AACd;AAAA;AACF;AAAA,GACF;AAEJ","file":"progress.cjs","sourcesContent":["/**\n * Progress (web). A horizontal meter. `value` is 0–1. The fill uses a\n * transform:scaleX transition (GPU-cheap, never animates width), so it\n * moves smoothly when the value updates live — score bars, completion.\n *\n *   <Progress value={0.76} />\n *   <Progress value={0.4} tone=\"warning\" size=\"sm\" />\n */\nimport type { CSSProperties } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { radius } from \"@plyxui/core\";\n\nexport type ProgressTone = \"accent\" | \"success\" | \"warning\" | \"danger\";\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\n\nconst heightMap: Record<ProgressSize, number> = { sm: 5, md: 8, lg: 12 };\n\nexport interface ProgressProps {\n  /** 0–1. Values outside are clamped. */\n  value: number;\n  tone?: ProgressTone;\n  size?: ProgressSize;\n  /** Override the fill color; wins over `tone`. */\n  color?: string;\n  trackColor?: string;\n  className?: string;\n  style?: CSSProperties;\n  \"aria-label\"?: string;\n}\n\nexport function Progress({ value, tone = \"accent\", size = \"md\", color, trackColor, className, style, ...aria }: ProgressProps) {\n  const { colors } = useTheme();\n  const clamped = Math.max(0, Math.min(1, value));\n\n  const toneColor: Record<ProgressTone, string> = {\n    accent: colors.primaryOrange,\n    success: colors.statusSuccess,\n    warning: colors.statusWarning,\n    danger: colors.statusError,\n  };\n  const fill = color ?? toneColor[tone];\n  const h = heightMap[size];\n\n  return (\n    <div\n      className={className}\n      role=\"progressbar\"\n      aria-valuenow={Math.round(clamped * 100)}\n      aria-valuemin={0}\n      aria-valuemax={100}\n      aria-label={aria[\"aria-label\"]}\n      style={{\n        height: h,\n        width: \"100%\",\n        background: trackColor ?? colors.containerFill,\n        borderRadius: radius.pill,\n        overflow: \"hidden\",\n        ...style,\n      }}\n    >\n      <div\n        style={{\n          height: \"100%\",\n          width: \"100%\",\n          background: fill,\n          borderRadius: radius.pill,\n          transformOrigin: \"left\",\n          transform: `scaleX(${clamped})`,\n          transition: \"transform 0.28s cubic-bezier(0.23,1,0.32,1)\",\n        }}\n      />\n    </div>\n  );\n}\n"]}