{"version":3,"file":"useKeyboardDragAndDrop.mjs","sources":["../../../../../admin/src/routes/settings/hooks/useKeyboardDragAndDrop.ts"],"sourcesContent":["import * as React from 'react';\n\nexport type UseKeyboardDragAndDropCallbacks = number> = {\n onCancel?: (index: TIndex) => void;\n onDropItem?: (currentIndex: TIndex, newIndex?: TIndex) => void;\n onGrabItem?: (index: TIndex) => void;\n onMoveItem?: (newIndex: TIndex, currentIndex: TIndex) => void;\n};\n\n/**\n * Utility hook designed to implement keyboard accessibile drag and drop by\n * returning an onKeyDown handler to be passed to the drag icon button.\n *\n * @internal - You should use `useDragAndDrop` instead.\n */\nexport const useKeyboardDragAndDrop = = number>(\n active: boolean,\n index: TIndex,\n { onCancel, onDropItem, onGrabItem, onMoveItem }: UseKeyboardDragAndDropCallbacks\n) => {\n const [isSelected, setIsSelected] = React.useState(false);\n\n const handleMove = (movement: 'UP' | 'DOWN') => {\n if (!isSelected) {\n return;\n }\n if (typeof index === 'number' && onMoveItem) {\n if (movement === 'UP') {\n onMoveItem((index - 1) as TIndex, index);\n } else if (movement === 'DOWN') {\n onMoveItem((index + 1) as TIndex, index);\n }\n }\n };\n\n const handleDragClick = () => {\n if (isSelected) {\n if (onDropItem) {\n onDropItem(index);\n }\n setIsSelected(false);\n } else {\n if (onGrabItem) {\n onGrabItem(index);\n }\n setIsSelected(true);\n }\n };\n\n const handleCancel = () => {\n if (isSelected) {\n setIsSelected(false);\n\n if (onCancel) {\n onCancel(index);\n }\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!active) {\n return;\n }\n\n if (e.key === 'Tab' && !isSelected) {\n return;\n }\n\n e.preventDefault();\n\n switch (e.key) {\n case ' ':\n case 'Enter':\n handleDragClick();\n break;\n\n case 'Escape':\n handleCancel();\n break;\n\n case 'ArrowDown':\n case 'ArrowRight':\n handleMove('DOWN');\n break;\n\n case 'ArrowUp':\n case 'ArrowLeft':\n handleMove('UP');\n break;\n\n default:\n }\n };\n\n return handleKeyDown;\n};\n"],"names":["useKeyboardDragAndDrop","active","index","onCancel","onDropItem","onGrabItem","onMoveItem","isSelected","setIsSelected","React","useState","handleMove","movement","handleDragClick","handleCancel","handleKeyDown","e","key","preventDefault"],"mappings":";;AASA;;;;;AAKC,IACM,MAAMA,sBAAAA,GAAyB,CACpCC,QACAC,KAAAA,EACA,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,UAAU,EAAEC,UAAU,EAA2C,GAAA;AAEzF,IAAA,MAAM,CAACC,UAAAA,EAAYC,aAAAA,CAAc,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAEnD,IAAA,MAAMC,aAAa,CAACC,QAAAA,GAAAA;AAClB,QAAA,IAAI,CAACL,UAAAA,EAAY;AACf,YAAA;AACF,QAAA;QACA,IAAI,OAAOL,KAAAA,KAAU,QAAA,IAAYI,UAAAA,EAAY;AAC3C,YAAA,IAAIM,aAAa,IAAA,EAAM;AACrBN,gBAAAA,UAAAA,CAAYJ,QAAQ,CAAA,EAAcA,KAAAA,CAAAA;YACpC,CAAA,MAAO,IAAIU,aAAa,MAAA,EAAQ;AAC9BN,gBAAAA,UAAAA,CAAYJ,QAAQ,CAAA,EAAcA,KAAAA,CAAAA;AACpC,YAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMW,eAAAA,GAAkB,IAAA;AACtB,QAAA,IAAIN,UAAAA,EAAY;AACd,YAAA,IAAIH,UAAAA,EAAY;gBACdA,UAAAA,CAAWF,KAAAA,CAAAA;AACb,YAAA;YACAM,aAAAA,CAAc,KAAA,CAAA;QAChB,CAAA,MAAO;AACL,YAAA,IAAIH,UAAAA,EAAY;gBACdA,UAAAA,CAAWH,KAAAA,CAAAA;AACb,YAAA;YACAM,aAAAA,CAAc,IAAA,CAAA;AAChB,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMM,YAAAA,GAAe,IAAA;AACnB,QAAA,IAAIP,UAAAA,EAAY;YACdC,aAAAA,CAAc,KAAA,CAAA;AAEd,YAAA,IAAIL,QAAAA,EAAU;gBACZA,QAAAA,CAASD,KAAAA,CAAAA;AACX,YAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMa,gBAAgB,CAAoBC,CAAAA,GAAAA;AACxC,QAAA,IAAI,CAACf,MAAAA,EAAQ;AACX,YAAA;AACF,QAAA;AAEA,QAAA,IAAIe,CAAAA,CAAEC,GAAG,KAAK,KAAA,IAAS,CAACV,UAAAA,EAAY;AAClC,YAAA;AACF,QAAA;AAEAS,QAAAA,CAAAA,CAAEE,cAAc,EAAA;AAEhB,QAAA,OAAQF,EAAEC,GAAG;YACX,KAAK,GAAA;YACL,KAAK,OAAA;AACHJ,gBAAAA,eAAAA,EAAAA;AACA,gBAAA;YAEF,KAAK,QAAA;AACHC,gBAAAA,YAAAA,EAAAA;AACA,gBAAA;YAEF,KAAK,WAAA;YACL,KAAK,YAAA;gBACHH,UAAAA,CAAW,MAAA,CAAA;AACX,gBAAA;YAEF,KAAK,SAAA;YACL,KAAK,WAAA;gBACHA,UAAAA,CAAW,IAAA,CAAA;AACX,gBAAA;AAGJ;AACF,IAAA,CAAA;IAEA,OAAOI,aAAAA;AACT;;;;"}