{"version":3,"sources":["../src/skeleton/index.native.tsx"],"names":["useTheme","useReducedMotion","useRef","Animated","useEffect","dims","jsx","View","radius"],"mappings":"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","file":"skeleton.native.cjs","sourcesContent":["/**\n * Skeleton (native). Same contract as web; the gradient sweep would need\n * a gradient dependency, so native pulses opacity on a containerFill block\n * instead — same \"shape of what's coming\" effect, zero new deps.\n *\n *   <Skeleton variant=\"text\" lines={3} />\n *   <Skeleton variant=\"circle\" width={40} />\n *\n * Reduced motion (AccessibilityInfo) renders a static fill.\n */\nimport { useEffect, useRef, type ReactElement } from \"react\";\nimport { Animated, View, type DimensionValue, type ViewStyle } from \"react-native\";\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  style?: ViewStyle;\n}\n\nexport function Skeleton({ variant = \"rect\", width, height, lines = 1, style }: SkeletonProps) {\n  const { colors } = useTheme();\n  const reduced = useReducedMotion();\n  const opacity = useRef(new Animated.Value(1)).current;\n\n  useEffect(() => {\n    if (reduced) {\n      opacity.setValue(1);\n      return;\n    }\n    const loop = Animated.loop(\n      Animated.sequence([\n        Animated.timing(opacity, { toValue: 0.45, duration: 800, useNativeDriver: true }),\n        Animated.timing(opacity, { toValue: 1, duration: 800, useNativeDriver: true }),\n      ]),\n    );\n    loop.start();\n    return () => loop.stop();\n  }, [opacity, reduced]);\n\n  const block = (dims: ViewStyle, key?: number): ReactElement => (\n    <Animated.View\n      key={key}\n      accessibilityElementsHidden\n      style={[{ backgroundColor: colors.containerFill, opacity }, dims]}\n    />\n  );\n\n  if (variant === \"text\" && lines > 1) {\n    return (\n      <View style={[{ gap: 8, width: (width as DimensionValue) ?? \"100%\" }, style]}>\n        {Array.from({ length: lines }, (_, i) =>\n          block(\n            {\n              height: (height as DimensionValue) ?? 14,\n              borderRadius: radius.sm,\n              width: i === lines - 1 ? \"60%\" : \"100%\",\n            },\n            i,\n          ),\n        )}\n      </View>\n    );\n  }\n\n  const dims: ViewStyle =\n    variant === \"circle\"\n      ? {\n          width: (width as DimensionValue) ?? 40,\n          height: (height as DimensionValue) ?? (width as DimensionValue) ?? 40,\n          borderRadius: radius.pill,\n        }\n      : variant === \"text\"\n        ? { width: (width as DimensionValue) ?? \"100%\", height: (height as DimensionValue) ?? 14, borderRadius: radius.sm }\n        : { width: (width as DimensionValue) ?? \"100%\", height: (height as DimensionValue) ?? 16, borderRadius: radius.md };\n\n  return (\n    <Animated.View\n      accessibilityElementsHidden\n      style={[{ backgroundColor: colors.containerFill, opacity }, dims, style]}\n    />\n  );\n}\n"]}