{"version":3,"sources":["../src/skeleton/index.tsx"],"names":["useTheme","useReducedMotion","jsx","radius"],"mappings":";;;;;;;;AAgCA,IAAM,YAAA,GAAe,2BAAA;AACrB,SAAS,eAAA,GAAkB;AACzB,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,IAAI,QAAA,CAAS,cAAA,CAAe,YAAY,CAAA,EAAG;AAC3C,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,EAAA,GAAK,YAAA;AACX,EAAA,KAAA,CAAM,WAAA,GAAc;AAAA;AAAA;AAAA;AAAA,CAAA,CAAA;AAKpB,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AACjC;AAEO,SAAS,QAAA,CAAS;AAAA,EACvB,OAAA,GAAU,MAAA;AAAA,EACV,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACR,SAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,eAAA,EAAgB;AAChB,EAAA,MAAM,EAAE,MAAA,EAAO,GAAIA,eAAA,EAAS;AAC5B,EAAA,MAAM,UAAUC,sBAAA,EAAiB;AAEjC,EAAA,MAAM,OAAsB,OAAA,GACxB,EAAE,UAAA,EAAY,MAAA,CAAO,eAAc,GACnC;AAAA,IACE,UAAA,EAAY,0BAA0B,MAAA,CAAO,aAAa,SAAS,MAAA,CAAO,WAAW,CAAA,MAAA,EAAS,MAAA,CAAO,aAAa,CAAA,KAAA,CAAA;AAAA,IAClH,cAAA,EAAgB,WAAA;AAAA,IAChB,SAAA,EAAW;AAAA,GACb;AAEJ,EAAA,IAAI,OAAA,KAAY,MAAA,IAAU,KAAA,GAAQ,CAAA,EAAG;AACnC,IAAA,uBACEC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,aAAA,EAAW,IAAA;AAAA,QACX,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAU,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,KAAA,IAAS,MAAA,EAAQ,GAAG,KAAA,EAAM;AAAA,QAE3F,QAAA,EAAA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,OAAM,EAAG,CAAC,GAAG,CAAA,qBACjCA,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,KAAA,EAAO;AAAA,cACL,GAAG,IAAA;AAAA,cACH,QAAQ,MAAA,IAAU,KAAA;AAAA,cAClB,cAAcC,WAAA,CAAO,EAAA;AAAA,cACrB,KAAA,EAAO,CAAA,KAAM,KAAA,GAAQ,CAAA,GAAI,KAAA,GAAQ;AAAA;AACnC,WAAA;AAAA,UANK;AAAA,SAQR;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,MAAM,IAAA,GACJ,YAAY,QAAA,GACR;AAAA,IACE,OAAO,KAAA,IAAS,EAAA;AAAA,IAChB,MAAA,EAAQ,UAAU,KAAA,IAAS,EAAA;AAAA,IAC3B,cAAcA,WAAA,CAAO;AAAA,GACvB,GACA,YAAY,MAAA,GACV,EAAE,OAAO,KAAA,IAAS,MAAA,EAAQ,MAAA,EAAQ,MAAA,IAAU,KAAA,EAAO,YAAA,EAAcA,YAAO,EAAA,EAAG,GAC3E,EAAE,KAAA,EAAO,KAAA,IAAS,MAAA,EAAQ,QAAQ,MAAA,IAAU,EAAA,EAAI,YAAA,EAAcA,WAAA,CAAO,EAAA,EAAG;AAEhF,EAAA,uBAAOD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,aAAA,EAAW,IAAA,EAAC,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,GAAG,IAAA,EAAM,GAAG,OAAM,EAAG,CAAA;AACvF","file":"skeleton.cjs","sourcesContent":["/**\n * Skeleton (web). Shimmer placeholder that holds layout while content\n * loads — a loading state that shows the shape of what's coming reads\n * faster than a spinner that shows nothing.\n *\n *   <Skeleton variant=\"text\" lines={3} />\n *   <Skeleton variant=\"circle\" width={40} />\n *   <Skeleton variant=\"rect\" width=\"100%\" height={120} />\n *\n * The shimmer is a linear-gradient sweep over containerFill, injected as\n * a page-level keyframe once (same pattern as Spinner). Reduced motion\n * renders a static fill — the placeholder still holds space, it just\n * doesn't move.\n */\nimport { type CSSProperties } from \"react\";\nimport { useTheme } from \"@plyxui/styles\";\nimport { radius } from \"@plyxui/core\";\nimport { useReducedMotion } from \"@plyxui/hooks\";\n\nexport type SkeletonVariant = \"text\" | \"rect\" | \"circle\";\n\nexport interface SkeletonProps {\n  variant?: SkeletonVariant;\n  width?: number | string;\n  height?: number | string;\n  /** For variant=\"text\": number of stacked lines. Last line is shorter. Default 1. */\n  lines?: number;\n  className?: string;\n  style?: CSSProperties;\n}\n\n// Inject the keyframes once per page. Avoids a global stylesheet dependency.\nconst KEYFRAMES_ID = \"plyxui-skeleton-keyframes\";\nfunction ensureKeyframes() {\n  if (typeof document === \"undefined\") return;\n  if (document.getElementById(KEYFRAMES_ID)) return;\n  const style = document.createElement(\"style\");\n  style.id = KEYFRAMES_ID;\n  style.textContent = `\n@keyframes plyxui-shimmer {\n  from { background-position: 200% 0; }\n  to { background-position: -200% 0; }\n}`;\n  document.head.appendChild(style);\n}\n\nexport function Skeleton({\n  variant = \"rect\",\n  width,\n  height,\n  lines = 1,\n  className,\n  style,\n}: SkeletonProps) {\n  ensureKeyframes();\n  const { colors } = useTheme();\n  const reduced = useReducedMotion();\n\n  const base: CSSProperties = reduced\n    ? { background: colors.containerFill }\n    : {\n        background: `linear-gradient(90deg, ${colors.containerFill} 25%, ${colors.surfaceFill} 50%, ${colors.containerFill} 75%)`,\n        backgroundSize: \"200% 100%\",\n        animation: \"plyxui-shimmer 1.6s linear infinite\",\n      };\n\n  if (variant === \"text\" && lines > 1) {\n    return (\n      <div\n        className={className}\n        aria-hidden\n        style={{ display: \"flex\", flexDirection: \"column\", gap: 8, width: width ?? \"100%\", ...style }}\n      >\n        {Array.from({ length: lines }, (_, i) => (\n          <div\n            key={i}\n            style={{\n              ...base,\n              height: height ?? \"1em\",\n              borderRadius: radius.sm,\n              width: i === lines - 1 ? \"60%\" : \"100%\",\n            }}\n          />\n        ))}\n      </div>\n    );\n  }\n\n  const dims: CSSProperties =\n    variant === \"circle\"\n      ? {\n          width: width ?? 40,\n          height: height ?? width ?? 40,\n          borderRadius: radius.pill,\n        }\n      : variant === \"text\"\n        ? { width: width ?? \"100%\", height: height ?? \"1em\", borderRadius: radius.sm }\n        : { width: width ?? \"100%\", height: height ?? 16, borderRadius: radius.md };\n\n  return <div className={className} aria-hidden style={{ ...base, ...dims, ...style }} />;\n}\n"]}