{"ast":null,"code":"import _extends from \"@babel/runtime/helpers/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport * as React from 'react';\nimport View from \"react-native-web/dist/exports/View\";\nimport normalizeColor from 'react-native-web/src/modules/normalizeColor';\nexport default function NativeLinearGradient(_ref) {\n  var colors = _ref.colors,\n      locations = _ref.locations,\n      startPoint = _ref.startPoint,\n      endPoint = _ref.endPoint,\n      props = _objectWithoutProperties(_ref, [\"colors\", \"locations\", \"startPoint\", \"endPoint\"]);\n\n  var _React$useState = React.useState(null),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      layout = _React$useState2[0],\n      setLayout = _React$useState2[1];\n\n  var _ref2 = layout != null ? layout : {},\n      _ref2$width = _ref2.width,\n      width = _ref2$width === void 0 ? 1 : _ref2$width,\n      _ref2$height = _ref2.height,\n      height = _ref2$height === void 0 ? 1 : _ref2$height;\n\n  var pseudoAngle = React.useMemo(function () {\n    var getControlPoints = function getControlPoints() {\n      var correctedStartPoint = [0, 0];\n\n      if (Array.isArray(startPoint)) {\n        correctedStartPoint = [startPoint[0] != null ? startPoint[0] : 0.0, startPoint[1] != null ? startPoint[1] : 0.0];\n      }\n\n      var correctedEndPoint = [0.0, 1.0];\n\n      if (Array.isArray(endPoint)) {\n        correctedEndPoint = [endPoint[0] != null ? endPoint[0] : 0.0, endPoint[1] != null ? endPoint[1] : 1.0];\n      }\n\n      return [correctedStartPoint, correctedEndPoint];\n    };\n\n    var _getControlPoints = getControlPoints(),\n        _getControlPoints2 = _slicedToArray(_getControlPoints, 2),\n        start = _getControlPoints2[0],\n        end = _getControlPoints2[1];\n\n    start[0] *= width;\n    end[0] *= width;\n    start[1] *= height;\n    end[1] *= height;\n    var py = end[1] - start[1];\n    var px = end[0] - start[0];\n    return 90 + Math.atan2(py, px) * 180 / Math.PI;\n  }, [width, height, startPoint, endPoint]);\n  var gradientColors = React.useMemo(function () {\n    return colors.map(function (color, index) {\n      var hexColor = normalizeColor(color);\n      var output = hexColor;\n\n      if (locations && locations[index]) {\n        var location = Math.max(0, Math.min(1, locations[index]));\n        var percentage = location * 100;\n        output += \" \" + percentage + \"%\";\n      }\n\n      return output;\n    });\n  }, [colors, locations]);\n  var colorStyle = gradientColors.join(',');\n  var backgroundImage = \"linear-gradient(\" + pseudoAngle + \"deg, \" + colorStyle + \")\";\n  return React.createElement(View, _extends({}, props, {\n    style: [props.style, {\n      backgroundImage: backgroundImage\n    }],\n    onLayout: function onLayout(event) {\n      var _event$nativeEvent$la = event.nativeEvent.layout,\n          x = _event$nativeEvent$la.x,\n          y = _event$nativeEvent$la.y,\n          width = _event$nativeEvent$la.width,\n          height = _event$nativeEvent$la.height;\n      var oldLayout = layout != null ? layout : {\n        x: 0,\n        y: 0,\n        width: 1,\n        height: 1\n      };\n\n      if (x !== oldLayout.x || y !== oldLayout.y || width !== oldLayout.width || height !== oldLayout.height) {\n        setLayout({\n          x: x,\n          y: y,\n          width: width,\n          height: height\n        });\n      }\n\n      if (props.onLayout) {\n        props.onLayout(event);\n      }\n    }\n  }));\n}","map":{"version":3,"sources":["../src/NativeLinearGradient.web.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { LayoutRectangle, View } from 'react-native';\nimport normalizeColor from 'react-native-web/src/modules/normalizeColor';\n\nimport { NativeLinearGradientPoint, NativeLinearGradientProps } from './NativeLinearGradient.types';\n\nexport default function NativeLinearGradient({\n  colors,\n  locations,\n  startPoint,\n  endPoint,\n  ...props\n}: NativeLinearGradientProps): React.ReactElement {\n  const [layout, setLayout] = React.useState<LayoutRectangle | null>(null);\n\n  const { width = 1, height = 1 } = layout ?? {};\n\n  const pseudoAngle = React.useMemo(() => {\n    const getControlPoints = (): NativeLinearGradientPoint[] => {\n      let correctedStartPoint: NativeLinearGradientPoint = [0, 0];\n      if (Array.isArray(startPoint)) {\n        correctedStartPoint = [\n          startPoint[0] != null ? startPoint[0] : 0.0,\n          startPoint[1] != null ? startPoint[1] : 0.0,\n        ];\n      }\n      let correctedEndPoint: NativeLinearGradientPoint = [0.0, 1.0];\n      if (Array.isArray(endPoint)) {\n        correctedEndPoint = [\n          endPoint[0] != null ? endPoint[0] : 0.0,\n          endPoint[1] != null ? endPoint[1] : 1.0,\n        ];\n      }\n      return [correctedStartPoint, correctedEndPoint];\n    };\n\n    const [start, end] = getControlPoints();\n    start[0] *= width;\n    end[0] *= width;\n    start[1] *= height;\n    end[1] *= height;\n    const py = end[1] - start[1];\n    const px = end[0] - start[0];\n\n    return 90 + (Math.atan2(py, px) * 180) / Math.PI;\n  }, [width, height, startPoint, endPoint]);\n\n  const gradientColors = React.useMemo(() => {\n    return colors.map((color: number, index: number): string => {\n      const hexColor = normalizeColor(color);\n      let output = hexColor;\n      if (locations && locations[index]) {\n        const location = Math.max(0, Math.min(1, locations[index]));\n        // Convert 0...1 to 0...100\n        const percentage = location * 100;\n        output += ` ${percentage}%`;\n      }\n      return output;\n    });\n  }, [colors, locations]);\n\n  const colorStyle = gradientColors.join(',');\n  const backgroundImage = `linear-gradient(${pseudoAngle}deg, ${colorStyle})`;\n  // TODO(Bacon): In the future we could consider adding `backgroundRepeat: \"no-repeat\"`. For more\n  // browser support.\n  return (\n    <View\n      {...props}\n      style={[\n        props.style,\n        // @ts-ignore: [ts] Property 'backgroundImage' does not exist on type 'ViewStyle'.\n        { backgroundImage },\n      ]}\n      onLayout={event => {\n        const { x, y, width, height } = event.nativeEvent.layout;\n        const oldLayout = layout ?? { x: 0, y: 0, width: 1, height: 1 };\n        // don't set new layout state unless the layout has actually changed\n        if (\n          x !== oldLayout.x ||\n          y !== oldLayout.y ||\n          width !== oldLayout.width ||\n          height !== oldLayout.height\n        ) {\n          setLayout({ x, y, width, height });\n        }\n\n        if (props.onLayout) {\n          props.onLayout(event);\n        }\n      }}\n    />\n  );\n}\n"],"sourceRoot":""},"metadata":{},"sourceType":"module"}