{"mappings":";;;;;;;;AAAA;;;;;;;;;;CAUC;;;;;;;AAoCM,MAAM,0DAAc,CAAA,GAAA,YAAI,EAAE,UAAU,CAAC,SAAS,YAInD,KAAgC,EAAE,YAAiD;IACnF,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,yCAAW,EAAE;IAEvB,IAAI,QAAQ,CAAA,GAAA,0BAAkB,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,yCAAU,EAAE;mBAAC;oBAAW;QAAY,cAAc;IAAC,GAAG;IACtD,IAAI,sBAAsB,CAAA,GAAA,kBAAU,EAClC,CAAC;QACC,MAAM,cAAc,CAAC;IACvB,GACA;QAAC;KAAM;IAGT,qBACE,gCAAC,CAAA,GAAA,wCAAS;QACP,GAAG,CAAA,GAAA,yCAAS,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;AAIA,SAAS,qCACP,MAAiC,EACjC,KAA2B,EAC3B,aAAkC;IAElC,OAAO,MAAM,GAAG,CAAC,CAAA;QACf,OAAO,cAAc,QAAQ,MAAM,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,QAAQ,IAAI,EAAE,EAAE,CAAA,aACjF,qCAAe,MAAM,YAAY;IAErC;AACF;AAEA,SAAS,2CACP,MAAiC,EACjC,YAAgC;IAEhC,qBACE,gCAAC,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<\n  HTMLAttributes<HTMLElement>,\n  'children' | 'onScroll'\n> {\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<\n  T extends object,\n  V extends ReactNode,\n  O\n>(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(\n    (rect: Rect) => {\n      state.setVisibleRect(rect);\n    },\n    [state]\n  );\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>(\n  props: VirtualizerProps<T, V, O> & {ref?: RefObject<HTMLDivElement | null>}\n) => ReactElement;\n\nfunction renderChildren<T extends object, V>(\n  parent: ReusableView<T, V> | null,\n  views: ReusableView<T, V>[],\n  renderWrapper: RenderWrapper<T, V>\n) {\n  return views.map(view => {\n    return renderWrapper(parent, view, view.children ? Array.from(view.children) : [], childViews =>\n      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.mjs.map"}