{
  "version": 3,
  "sources": ["../../src/input-control/utils.ts"],
  "sourcesContent": ["/**\n * External dependencies\n */\n\n/**\n * WordPress dependencies\n */\nimport { useEffect, useLayoutEffect, useRef, useState } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\n\n/**\n * Gets a CSS cursor value based on a drag direction.\n *\n * @param dragDirection The drag direction.\n * @return  The CSS cursor value.\n */\nexport function getDragCursor(dragDirection) {\n  let dragCursor = 'ns-resize';\n  switch (dragDirection) {\n    case 'n':\n    case 's':\n      dragCursor = 'ns-resize';\n      break;\n    case 'e':\n    case 'w':\n      dragCursor = 'ew-resize';\n      break;\n  }\n  return dragCursor;\n}\n\n/**\n * Custom hook that renders a drag cursor when dragging.\n *\n * @param {boolean} isDragging    The dragging state.\n * @param {string}  dragDirection The drag direction.\n *\n * @return {string} The CSS cursor value.\n */\nexport function useDragCursor(isDragging, dragDirection) {\n  const dragCursor = getDragCursor(dragDirection);\n  useEffect(() => {\n    if (isDragging) {\n      document.documentElement.style.cursor = dragCursor;\n    } else {\n      // @ts-expect-error\n      document.documentElement.style.cursor = null;\n    }\n  }, [isDragging, dragCursor]);\n  return dragCursor;\n}\nexport function useDraft(props) {\n  const previousValueRef = useRef(props.value);\n  const [draft, setDraft] = useState({});\n  const value = draft.value !== undefined ? draft.value : props.value;\n\n  // Determines when to discard the draft value to restore controlled status.\n  // To do so, it tracks the previous value and marks the draft value as stale\n  // after each render.\n  useLayoutEffect(() => {\n    const {\n      current: previousValue\n    } = previousValueRef;\n    previousValueRef.current = props.value;\n    if (draft.value !== undefined && !draft.isStale) {\n      setDraft({\n        ...draft,\n        isStale: true\n      });\n    } else if (draft.isStale && props.value !== previousValue) {\n      setDraft({});\n    }\n  }, [props.value, draft]);\n  const onChange = (nextValue, extra) => {\n    // Mutates the draft value to avoid an extra effect run.\n    setDraft(current => Object.assign(current, {\n      value: nextValue,\n      isStale: false\n    }));\n    props.onChange(nextValue, extra);\n  };\n  const onBlur = event => {\n    setDraft({});\n    props.onBlur?.(event);\n  };\n  return {\n    value,\n    onBlur,\n    onChange\n  };\n}"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,qBAA6D;AAYtD,SAAS,cAAc,eAAe;AAC3C,MAAI,aAAa;AACjB,UAAQ,eAAe;AAAA,IACrB,KAAK;AAAA,IACL,KAAK;AACH,mBAAa;AACb;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,mBAAa;AACb;AAAA,EACJ;AACA,SAAO;AACT;AAUO,SAAS,cAAc,YAAY,eAAe;AACvD,QAAM,aAAa,cAAc,aAAa;AAC9C,gCAAU,MAAM;AACd,QAAI,YAAY;AACd,eAAS,gBAAgB,MAAM,SAAS;AAAA,IAC1C,OAAO;AAEL,eAAS,gBAAgB,MAAM,SAAS;AAAA,IAC1C;AAAA,EACF,GAAG,CAAC,YAAY,UAAU,CAAC;AAC3B,SAAO;AACT;AACO,SAAS,SAAS,OAAO;AAC9B,QAAM,uBAAmB,uBAAO,MAAM,KAAK;AAC3C,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,CAAC,CAAC;AACrC,QAAM,QAAQ,MAAM,UAAU,SAAY,MAAM,QAAQ,MAAM;AAK9D,sCAAgB,MAAM;AACpB,UAAM;AAAA,MACJ,SAAS;AAAA,IACX,IAAI;AACJ,qBAAiB,UAAU,MAAM;AACjC,QAAI,MAAM,UAAU,UAAa,CAAC,MAAM,SAAS;AAC/C,eAAS;AAAA,QACP,GAAG;AAAA,QACH,SAAS;AAAA,MACX,CAAC;AAAA,IACH,WAAW,MAAM,WAAW,MAAM,UAAU,eAAe;AACzD,eAAS,CAAC,CAAC;AAAA,IACb;AAAA,EACF,GAAG,CAAC,MAAM,OAAO,KAAK,CAAC;AACvB,QAAM,WAAW,CAAC,WAAW,UAAU;AAErC,aAAS,aAAW,OAAO,OAAO,SAAS;AAAA,MACzC,OAAO;AAAA,MACP,SAAS;AAAA,IACX,CAAC,CAAC;AACF,UAAM,SAAS,WAAW,KAAK;AAAA,EACjC;AACA,QAAM,SAAS,WAAS;AACtB,aAAS,CAAC,CAAC;AACX,UAAM,SAAS,KAAK;AAAA,EACtB;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
  "names": []
}
