{
  "version": 3,
  "sources": ["../../../src/custom-gradient-picker/gradient-bar/control-points.tsx"],
  "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\nimport { colord } from 'colord';\n\n/**\n * WordPress dependencies\n */\nimport { useInstanceId } from '@wordpress/compose';\nimport { useEffect, useRef, useState, useMemo } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { plus } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport Button from '../../button';\nimport { HStack } from '../../h-stack';\nimport { ColorPicker } from '../../color-picker';\nimport { VisuallyHidden } from '../../visually-hidden';\nimport { CustomColorPickerDropdown } from '../../color-palette';\nimport { addControlPoint, clampPercent, removeControlPoint, updateControlPointColor, updateControlPointColorByPosition, updateControlPointPosition, getHorizontalRelativeGradientPosition } from './utils';\nimport { MINIMUM_SIGNIFICANT_MOVE, KEYBOARD_CONTROL_POINT_VARIATION } from './constants';\nimport DropdownContentWrapper from '../../dropdown/dropdown-content-wrapper';\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction ControlPointButton({\n  isOpen,\n  position,\n  color,\n  ...additionalProps\n}) {\n  const instanceId = useInstanceId(ControlPointButton);\n  const descriptionId = `components-custom-gradient-picker__control-point-button-description-${instanceId}`;\n  return /*#__PURE__*/_jsxs(_Fragment, {\n    children: [/*#__PURE__*/_jsx(Button, {\n      \"aria-label\": sprintf(\n      // translators: 1: gradient position e.g: 70. 2: gradient color code e.g: rgb(52,121,151).\n      __('Gradient control point at position %1$d%% with color code %2$s.'), position, color),\n      \"aria-describedby\": descriptionId,\n      \"aria-haspopup\": \"true\",\n      \"aria-expanded\": isOpen,\n      __next40pxDefaultSize: true,\n      className: clsx('components-custom-gradient-picker__control-point-button', {\n        'is-active': isOpen\n      }),\n      ...additionalProps\n    }), /*#__PURE__*/_jsx(VisuallyHidden, {\n      id: descriptionId,\n      children: __('Use your left or right arrow keys or drag and drop with the mouse to change the gradient position. Press the button to change the color or remove the control point.')\n    })]\n  });\n}\nfunction GradientColorPickerDropdown({\n  isRenderedInSidebar,\n  className,\n  ...props\n}) {\n  // Open the popover below the gradient control/insertion point\n  const popoverProps = useMemo(() => ({\n    placement: 'bottom',\n    offset: 8,\n    // Disabling resize as it would otherwise cause the popover to show\n    // scrollbars while dragging the color picker's handle close to the\n    // popover edge.\n    resize: false\n  }), []);\n  const mergedClassName = clsx('components-custom-gradient-picker__control-point-dropdown', className);\n  return /*#__PURE__*/_jsx(CustomColorPickerDropdown, {\n    isRenderedInSidebar: isRenderedInSidebar,\n    popoverProps: popoverProps,\n    className: mergedClassName,\n    ...props\n  });\n}\nfunction ControlPoints({\n  disableRemove,\n  disableAlpha,\n  gradientPickerDomRef,\n  ignoreMarkerPosition,\n  value: controlPoints,\n  onChange,\n  onStartControlPointChange,\n  onStopControlPointChange,\n  __experimentalIsRenderedInSidebar\n}) {\n  const controlPointMoveStateRef = useRef(undefined);\n  const onMouseMove = event => {\n    if (controlPointMoveStateRef.current === undefined || gradientPickerDomRef.current === null) {\n      return;\n    }\n    const relativePosition = getHorizontalRelativeGradientPosition(event.clientX, gradientPickerDomRef.current);\n    const {\n      initialPosition,\n      index,\n      significantMoveHappened\n    } = controlPointMoveStateRef.current;\n    if (!significantMoveHappened && Math.abs(initialPosition - relativePosition) >= MINIMUM_SIGNIFICANT_MOVE) {\n      controlPointMoveStateRef.current.significantMoveHappened = true;\n    }\n    onChange(updateControlPointPosition(controlPoints, index, relativePosition));\n  };\n  const cleanEventListeners = () => {\n    if (window && window.removeEventListener && controlPointMoveStateRef.current && controlPointMoveStateRef.current.listenersActivated) {\n      window.removeEventListener('mousemove', onMouseMove);\n      window.removeEventListener('mouseup', cleanEventListeners);\n      onStopControlPointChange();\n      controlPointMoveStateRef.current.listenersActivated = false;\n    }\n  };\n\n  // Adding `cleanEventListeners` to the dependency array below requires the function itself to be wrapped in a `useCallback`\n  // This memoization would prevent the event listeners from being properly cleaned.\n  // Instead, we'll pass a ref to the function in our `useEffect` so `cleanEventListeners` itself is no longer a dependency.\n  const cleanEventListenersRef = useRef(undefined);\n  cleanEventListenersRef.current = cleanEventListeners;\n  useEffect(() => {\n    return () => {\n      cleanEventListenersRef.current?.();\n    };\n  }, []);\n  return /*#__PURE__*/_jsx(_Fragment, {\n    children: controlPoints.map((point, index) => {\n      const initialPosition = point?.position;\n      return ignoreMarkerPosition !== initialPosition && /*#__PURE__*/_jsx(GradientColorPickerDropdown, {\n        isRenderedInSidebar: __experimentalIsRenderedInSidebar,\n        onClose: onStopControlPointChange,\n        renderToggle: ({\n          isOpen,\n          onToggle\n        }) => /*#__PURE__*/_jsx(ControlPointButton, {\n          onClick: () => {\n            if (controlPointMoveStateRef.current && controlPointMoveStateRef.current.significantMoveHappened) {\n              return;\n            }\n            if (isOpen) {\n              onStopControlPointChange();\n            } else {\n              onStartControlPointChange();\n            }\n            onToggle();\n          },\n          onMouseDown: () => {\n            if (window && window.addEventListener) {\n              controlPointMoveStateRef.current = {\n                initialPosition,\n                index,\n                significantMoveHappened: false,\n                listenersActivated: true\n              };\n              onStartControlPointChange();\n              window.addEventListener('mousemove', onMouseMove);\n              window.addEventListener('mouseup', cleanEventListeners);\n            }\n          },\n          onKeyDown: event => {\n            if (event.code === 'ArrowLeft') {\n              // Stop propagation of the key press event to avoid focus moving\n              // to another editor area.\n              event.stopPropagation();\n              onChange(updateControlPointPosition(controlPoints, index, clampPercent(point.position - KEYBOARD_CONTROL_POINT_VARIATION)));\n            } else if (event.code === 'ArrowRight') {\n              // Stop propagation of the key press event to avoid focus moving\n              // to another editor area.\n              event.stopPropagation();\n              onChange(updateControlPointPosition(controlPoints, index, clampPercent(point.position + KEYBOARD_CONTROL_POINT_VARIATION)));\n            }\n          },\n          isOpen: isOpen,\n          position: point.position,\n          color: point.color\n        }, index),\n        renderContent: ({\n          onClose\n        }) => /*#__PURE__*/_jsxs(DropdownContentWrapper, {\n          paddingSize: \"none\",\n          children: [/*#__PURE__*/_jsx(ColorPicker, {\n            enableAlpha: !disableAlpha,\n            color: point.color,\n            onChange: color => {\n              onChange(updateControlPointColor(controlPoints, index, colord(color).toRgbString()));\n            }\n          }), !disableRemove && controlPoints.length > 2 && /*#__PURE__*/_jsx(HStack, {\n            className: \"components-custom-gradient-picker__remove-control-point-wrapper\",\n            alignment: \"center\",\n            children: /*#__PURE__*/_jsx(Button, {\n              onClick: () => {\n                onChange(removeControlPoint(controlPoints, index));\n                onClose();\n              },\n              variant: \"link\",\n              children: __('Remove Control Point')\n            })\n          })]\n        }),\n        style: {\n          left: `${point.position}%`,\n          transform: 'translateX( -50% )'\n        }\n      }, index);\n    })\n  });\n}\nfunction InsertPoint({\n  value: controlPoints,\n  onChange,\n  onOpenInserter,\n  onCloseInserter,\n  insertPosition,\n  disableAlpha,\n  __experimentalIsRenderedInSidebar\n}) {\n  const [alreadyInsertedPoint, setAlreadyInsertedPoint] = useState(false);\n  return /*#__PURE__*/_jsx(GradientColorPickerDropdown, {\n    isRenderedInSidebar: __experimentalIsRenderedInSidebar,\n    className: \"components-custom-gradient-picker__inserter\",\n    onClose: () => {\n      onCloseInserter();\n    },\n    renderToggle: ({\n      isOpen,\n      onToggle\n    }) => /*#__PURE__*/_jsx(Button, {\n      __next40pxDefaultSize: true,\n      \"aria-expanded\": isOpen,\n      \"aria-haspopup\": \"true\",\n      onClick: () => {\n        if (isOpen) {\n          onCloseInserter();\n        } else {\n          setAlreadyInsertedPoint(false);\n          onOpenInserter();\n        }\n        onToggle();\n      },\n      className: \"components-custom-gradient-picker__insert-point-dropdown\",\n      icon: plus\n    }),\n    renderContent: () => /*#__PURE__*/_jsx(DropdownContentWrapper, {\n      paddingSize: \"none\",\n      children: /*#__PURE__*/_jsx(ColorPicker, {\n        enableAlpha: !disableAlpha,\n        onChange: color => {\n          if (!alreadyInsertedPoint) {\n            onChange(addControlPoint(controlPoints, insertPosition, colord(color).toRgbString()));\n            setAlreadyInsertedPoint(true);\n          } else {\n            onChange(updateControlPointColorByPosition(controlPoints, insertPosition, colord(color).toRgbString()));\n          }\n        }\n      })\n    }),\n    style: insertPosition !== null ? {\n      left: `${insertPosition}%`,\n      transform: 'translateX( -50% )'\n    } : undefined\n  });\n}\nControlPoints.InsertPoint = InsertPoint;\nexport default ControlPoints;"],
  "mappings": "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",
  "names": ["_jsxs", "_Fragment", "_jsx", "Button", "clsx", "DropdownContentWrapper"]
}
