{"version":3,"sources":["../src/utils.ts"],"sourcesContent":["import { useEffect, useLayoutEffect } from \"react\"\n\n/**\n * Sort an array of DOM nodes according to the HTML tree order\n * @see http://www.w3.org/TR/html5/infrastructure.html#tree-order\n */\nexport function sortNodes(nodes: Node[]) {\n  return nodes.sort((a, b) => {\n    const compare = a.compareDocumentPosition(b)\n\n    if (\n      compare & Node.DOCUMENT_POSITION_FOLLOWING ||\n      compare & Node.DOCUMENT_POSITION_CONTAINED_BY\n    ) {\n      // a < b\n      return -1\n    }\n\n    if (\n      compare & Node.DOCUMENT_POSITION_PRECEDING ||\n      compare & Node.DOCUMENT_POSITION_CONTAINS\n    ) {\n      // a > b\n      return 1\n    }\n\n    if (\n      compare & Node.DOCUMENT_POSITION_DISCONNECTED ||\n      compare & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n    ) {\n      throw Error(\"Cannot sort the given nodes.\")\n    } else {\n      return 0\n    }\n  })\n}\n\nexport const isElement = (el: any): el is HTMLElement =>\n  typeof el == \"object\" && \"nodeType\" in el && el.nodeType === Node.ELEMENT_NODE\n\nexport function getNextIndex(current: number, max: number, loop: boolean) {\n  let next = current + 1\n  if (loop && next >= max) next = 0\n  return next\n}\n\nexport function getPrevIndex(current: number, max: number, loop: boolean) {\n  let next = current - 1\n  if (loop && next < 0) next = max\n  return next\n}\n\nexport const useSafeLayoutEffect =\n  typeof window !== \"undefined\" ? useLayoutEffect : useEffect\n\nexport const cast = <T>(value: any) => value as T\n"],"mappings":";;;;;;;;;AAAA,SAAS,WAAW,uBAAuB;AAMpC,SAAS,UAAU,OAAe;AACvC,SAAO,MAAM,KAAK,CAAC,GAAG,MAAM;AAC1B,UAAM,UAAU,EAAE,wBAAwB,CAAC;AAE3C,QACE,UAAU,KAAK,+BACf,UAAU,KAAK,gCACf;AAEA,aAAO;AAAA,IACT;AAEA,QACE,UAAU,KAAK,+BACf,UAAU,KAAK,4BACf;AAEA,aAAO;AAAA,IACT;AAEA,QACE,UAAU,KAAK,kCACf,UAAU,KAAK,2CACf;AACA,YAAM,MAAM,8BAA8B;AAAA,IAC5C,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAEO,IAAM,YAAY,CAAC,OACxB,OAAO,MAAM,YAAY,cAAc,MAAM,GAAG,aAAa,KAAK;AAE7D,SAAS,aAAa,SAAiB,KAAa,MAAe;AACxE,MAAI,OAAO,UAAU;AACrB,MAAI,QAAQ,QAAQ;AAAK,WAAO;AAChC,SAAO;AACT;AAEO,SAAS,aAAa,SAAiB,KAAa,MAAe;AACxE,MAAI,OAAO,UAAU;AACrB,MAAI,QAAQ,OAAO;AAAG,WAAO;AAC7B,SAAO;AACT;AAEO,IAAM,sBACX,OAAO,WAAW,cAAc,kBAAkB;AAE7C,IAAM,OAAO,CAAI,UAAe;","names":[]}