{"mappings":";;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;CAUC;;;;;;;AAiCM,MAAM,0DAAc,CAAA,GAAA,sCAAI,EAAE,UAAU,CAAC,SAAS,YAAsD,KAAgC,EAAE,YAAiD;IAC5L,IAAI,EACF,UAAU,UAAU,iBACpB,aAAa,UACb,MAAM,cACN,UAAU,mBACV,eAAe,aACf,SAAS,cACT,UAAU,iBACV,aAAa,iBACb,aAAa,EACb,GAAG,YACJ,GAAG;IAEJ,IAAI,MAAM,CAAA,GAAA,sCAAW,EAAE;IAEvB,IAAI,QAAQ,CAAA,GAAA,0DAAkB,EAAE;gBAC9B;oBACA;oBACA;QACA,qBAAoB,IAAI;YACtB,IAAI,IAAI,OAAO,EAAE;gBACf,IAAI,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;gBAC/B,IAAI,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;YAChC;QACF;uBACA;uBACA;IACF;IAEA,CAAA,GAAA,qCAAU,EAAE;mBAAC;oBAAW;QAAY,cAAc;IAAC,GAAG;IACtD,IAAI,sBAAsB,CAAA,GAAA,wBAAU,EAAE,CAAC;QACrC,MAAM,cAAc,CAAC;IACvB,GAAG;QAAC;KAAM;IAEV,qBACE,0DAAC,CAAA,GAAA,oCAAS;QACP,GAAG,CAAA,GAAA,oCAAS,EAAE,YAAY;iCAAC;QAAmB,EAAE;QACjD,KAAK;QACL,aAAa,MAAM,WAAW;QAC9B,eAAe,MAAM,cAAc;QACnC,aAAa,MAAM,YAAY;QAC/B,iBAAiB;OAChB,qCAAe,MAAM,MAAM,YAAY,EAAE,iBAAiB;AAGjE;AAEA,SAAS,qCAAoC,MAAiC,EAAE,KAA2B,EAAE,aAAkC;IAC7I,OAAO,MAAM,GAAG,CAAC,CAAA;QACf,OAAO,cACL,QACA,MACA,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,QAAQ,IAAI,EAAE,EAC9C,CAAA,aAAc,qCAAe,MAAM,YAAY;IAEnD;AACF;AAEA,SAAS,2CACP,MAAiC,EACjC,YAAgC;IAEhC,qBACE,0DAAC,CAAA,GAAA,yCAAc;QACb,KAAK,aAAa,GAAG;QACrB,YAAY,aAAa,UAAU;QACnC,aAAa,aAAa,WAAW;QACrC,QAAQ,QAAQ;OACf,aAAa,QAAQ;AAG5B","sources":["packages/react-aria/src/virtualizer/Virtualizer.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Collection, Key, RefObject} from '@react-types/shared';\nimport {Layout, Rect, ReusableView, useVirtualizerState} from 'react-stately/useVirtualizerState';\nimport {mergeProps} from '../utils/mergeProps';\nimport React, {ForwardedRef, HTMLAttributes, ReactElement, ReactNode, useCallback} from 'react';\nimport {ScrollView} from './ScrollView';\nimport {useLoadMore} from '../utils/useLoadMore';\nimport {useObjectRef} from '../utils/useObjectRef';\nimport {VirtualizerItem} from './VirtualizerItem';\n\ntype RenderWrapper<T extends object, V> = (\n  parent: ReusableView<T, V> | null,\n  reusableView: ReusableView<T, V>,\n  children: ReusableView<T, V>[],\n  renderChildren: (views: ReusableView<T, V>[]) => ReactElement[]\n) => ReactElement | null;\n\ninterface VirtualizerProps<T extends object, V, O> extends Omit<HTMLAttributes<HTMLElement>, 'children' | 'onScroll'> {\n  children: (type: string, content: T) => V,\n  renderWrapper?: RenderWrapper<T, V>,\n  layout: Layout<T, O>,\n  collection: Collection<T>,\n  persistedKeys?: Set<Key> | null,\n  scrollDirection?: 'horizontal' | 'vertical' | 'both',\n  isLoading?: boolean,\n  onLoadMore?: () => void,\n  layoutOptions?: O,\n  onScroll?: (e: Event) => void\n}\n\n// forwardRef doesn't support generic parameters, so cast the result to the correct type\n// https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref\nexport const Virtualizer = React.forwardRef(function Virtualizer<T extends object, V extends ReactNode, O>(props: VirtualizerProps<T, V, O>, forwardedRef: ForwardedRef<HTMLDivElement | null>) {\n  let {\n    children: renderView,\n    renderWrapper,\n    layout,\n    collection,\n    scrollDirection,\n    isLoading,\n    onLoadMore,\n    persistedKeys,\n    layoutOptions,\n    ...otherProps\n  } = props;\n\n  let ref = useObjectRef(forwardedRef);\n\n  let state = useVirtualizerState({\n    layout,\n    collection,\n    renderView,\n    onVisibleRectChange(rect) {\n      if (ref.current) {\n        ref.current.scrollLeft = rect.x;\n        ref.current.scrollTop = rect.y;\n      }\n    },\n    persistedKeys,\n    layoutOptions\n  });\n\n  useLoadMore({isLoading, onLoadMore, scrollOffset: 1}, ref);\n  let onVisibleRectChange = useCallback((rect: Rect) => {\n    state.setVisibleRect(rect);\n  }, [state]);\n\n  return (\n    <ScrollView\n      {...mergeProps(otherProps, {onVisibleRectChange})}\n      ref={ref}\n      contentSize={state.contentSize}\n      onScrollStart={state.startScrolling}\n      onScrollEnd={state.endScrolling}\n      scrollDirection={scrollDirection}>\n      {renderChildren(null, state.visibleViews, renderWrapper || defaultRenderWrapper)}\n    </ScrollView>\n  );\n}) as <T extends object, V, O>(props: VirtualizerProps<T, V, O> & {ref?: RefObject<HTMLDivElement | null>}) => ReactElement;\n\nfunction renderChildren<T extends object, V>(parent: ReusableView<T, V> | null, views: ReusableView<T, V>[], renderWrapper: RenderWrapper<T, V>) {\n  return views.map(view => {\n    return renderWrapper(\n      parent,\n      view,\n      view.children ? Array.from(view.children) : [],\n      childViews => renderChildren(view, childViews, renderWrapper)\n    );\n  });\n}\n\nfunction defaultRenderWrapper<T extends object, V extends ReactNode>(\n  parent: ReusableView<T, V> | null,\n  reusableView: ReusableView<T, V>\n) {\n  return (\n    <VirtualizerItem\n      key={reusableView.key}\n      layoutInfo={reusableView.layoutInfo!}\n      virtualizer={reusableView.virtualizer}\n      parent={parent?.layoutInfo}>\n      {reusableView.rendered}\n    </VirtualizerItem>\n  );\n}\n"],"names":[],"version":3,"file":"Virtualizer.cjs.map"}