@chakra-ui/descendant
Version:
Register child nodes of a react element for better accessibility
1 lines • 2.3 kB
Source Map (JSON)
{"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":[]}