{"version":3,"file":"useDynamicListCalculation.mjs","names":["React","useCallback","useState","useDynamicListCalculation","$","_c","averageChildWidth","setAverageChildWidth","t0","Symbol","for","previousChildRefs","setPreviousChildRefs","t1","parentRef","childRefs","t2","includeBuffer","undefined","current","containerWidth","getBoundingClientRect","width","childrenTotalWidth","map","_temp","reduce","_temp2","calculatedAverageWidth","length","maxVisibleChildren","Math","floor","calculateNumberOfVisibleChildren","ref","acc","curr"],"sources":["../../src/hooks/useDynamicListCalculation.jsx"],"sourcesContent":["import React from \"react\";\nimport { useCallback, useState } from 'react';\n\n/**\n * A custom React hook for calculating the number of visible children in a dynamic list based on container width and child widths.\n *\n * @returns {object} An object containing the `calculateNumberOfVisibleChildren` function.\n *\n * @example\n * // Basic usage:\n * const parentRef = useRef();\n * const childRefs = useRef([]);\n * const { calculateNumberOfVisibleChildren } = useDynamicListCalculation();\n * const maxVisibleChildren = calculateNumberOfVisibleChildren(parentRef, childRefs);\n\n * @example\n * // Excluding a buffer for less white space:\n * const parentRef = useRef();\n * const childRefs = useRef([]);\n * const { calculateNumberOfVisibleChildren } = useDynamicListCalculation();\n * const maxVisibleChildren = calculateNumberOfVisibleChildren(parentRef, childRefs, false);\n */\nexport const useDynamicListCalculation = () => {\n  const [averageChildWidth, setAverageChildWidth] = useState(0);\n  const [previousChildRefs, setPreviousChildRefs] = useState([]);\n\n  /**\n   * Calculate the number of visible children based on container width and child widths.\n   *\n   * @param {object} parentRef - Ref object for the parent container.\n   * @param {object} childRefs - Ref object for an array of child elements.\n   * @param {boolean} includeBuffer - Whether to include a buffer for better performance (default: true).\n   * @returns {number} The maximum number of visible children.\n   */\n  const calculateNumberOfVisibleChildren = useCallback(\n    (parentRef, childRefs, includeBuffer = true) => {\n      if (!parentRef.current || !childRefs.current) return;\n\n      const containerWidth =\n        parentRef.current.getBoundingClientRect().width ?? 0;\n\n      // If the average child width has not been calculated yet, or the child refs have changed, then calculate the average child width\n      if (!averageChildWidth || previousChildRefs !== childRefs.current) {\n        const childrenTotalWidth = childRefs.current\n          .map((ref) =>\n            ref && typeof ref?.getBoundingClientRect === 'function'\n              ? ref.getBoundingClientRect().width\n              : 0\n          )\n          .reduce((acc, curr) => acc + curr, 0);\n\n        const calculatedAverageWidth =\n          childrenTotalWidth / childRefs.current.length;\n\n        setAverageChildWidth(calculatedAverageWidth);\n        setPreviousChildRefs(childRefs.current);\n      }\n\n      const maxVisibleChildren = Math.floor(containerWidth / averageChildWidth);\n\n      if (includeBuffer) return maxVisibleChildren - 1;\n\n      return maxVisibleChildren;\n    },\n    [averageChildWidth, previousChildRefs]\n  );\n\n  return { calculateNumberOfVisibleChildren };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAsBA,MAAaG,kCAA4B;CAAA,MAAAC,IAAAC,EAAA,EAAA;CACvC,MAAA,CAAAC,mBAAAC,wBAAkDL,SAAS,EAAE;CAAC,IAAAM;AAAA,KAAAJ,EAAA,OAAAK,OAAAC,IAAA,4BAAA,EAAA;AACHF,OAAA,EAAE;AAAAJ,IAAA,KAAAI;OAAAA,MAAAJ,EAAA;CAA7D,MAAA,CAAAO,mBAAAC,wBAAkDV,SAASM,GAAG;CAAC,IAAAK;AAAA,KAAAT,EAAA,OAAAE,qBAAAF,EAAA,OAAAO,mBAAA;AAW7DE,QAAAC,WAAAC,WAAAC,OAAA;GAAuB,MAAAC,gBAAAD,OAAAE,KAAAA,IAAA,OAAAF;AACrB,OAAI,CAACF,UAASK,WAAV,CAAuBJ,UAASI,QAAQ;GAE5C,MAAAC,iBACEN,UAASK,QAAQE,uBAAwB,CAAAC,SAAzC;AAGF,OAAI,CAAChB,qBAAqBK,sBAAsBI,UAASI,SAAQ;AAY/DZ,yBAX2BQ,UAASI,QAAQK,IACrCC,MAIJ,CAAAC,OACOC,QAA2B,EAAE,GAGhBZ,UAASI,QAAQU,OAEI;AAC5CjB,yBAAqBG,UAASI,QAAS;;GAGzC,MAAAW,qBAA2BC,KAAIC,MAAOZ,iBAAiBd,kBAAkB;AAEzE,OAAIW,cAAa,QAASa,qBAAqB;AAAE,UAE1CA;;AACR1B,IAAA,KAAAE;AAAAF,IAAA,KAAAO;AAAAP,IAAA,KAAAS;OAAAA,MAAAT,EAAA;CA7BH,MAAA6B,mCAAyCpB;CA+BvC,IAAAG;AAAA,KAAAZ,EAAA,OAAA6B,kCAAA;AAEKjB,OAAA,EAAAiB,kCAAoC;AAAA7B,IAAA,KAAA6B;AAAA7B,IAAA,KAAAY;OAAAA,MAAAZ,EAAA;AAAA,QAApCY;;AA7CgC,SAAAS,MAAAS,KAAA;AAAA,QAuB7BA,OAAO,OAAOA,KAAGb,0BAA4B,aACzCa,IAAGb,uBAAwB,CAAAC,QAD/B;;AAvB6B,SAAAK,OAAAQ,KAAAC,MAAA;AAAA,QA2BRD,MAAMC"}