UNPKG

@wordpress/components

Version:
8 lines (7 loc) 3.71 kB
{ "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": [] }