{"mappings":"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","sources":["packages/react-aria-components/src/Virtualizer.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 {CollectionBranchProps, CollectionRenderer, CollectionRendererContext, CollectionRootProps, renderAfterDropIndicators} from './Collection';\nimport {DropTargetDelegate, ItemDropTarget, Node} from '@react-types/shared';\nimport {Layout, ReusableView, useVirtualizerState, VirtualizerState} from 'react-stately/useVirtualizerState';\nimport React, {createContext, JSX, ReactNode, useContext, useMemo} from 'react';\nimport {useScrollView} from 'react-aria/private/virtualizer/ScrollView';\nimport {VirtualizerItem} from 'react-aria/private/virtualizer/VirtualizerItem';\n\ntype View = ReusableView<Node<unknown>, ReactNode>;\n\nexport interface LayoutOptionsDelegate<O> {\n  useLayoutOptions?(): O\n}\n\ninterface ILayout<O> extends Layout<Node<unknown>, O>, Partial<DropTargetDelegate>, LayoutOptionsDelegate<O> {}\n\ninterface LayoutClass<O> {\n  new(): ILayout<O>\n}\n\nexport interface VirtualizerProps<O> {\n  /** The child collection to virtualize (e.g. ListBox, GridList, or Table). */\n  children: ReactNode,\n  /** The layout object that determines the position and size of the visible elements. */\n  layout: LayoutClass<O> | ILayout<O>,\n  /** Options for the layout. */\n  layoutOptions?: O\n}\n\ninterface LayoutContextValue {\n  layout: ILayout<any>,\n  layoutOptions?: any\n}\n\nconst VirtualizerContext = createContext<VirtualizerState<any, any> | null>(null);\nconst LayoutContext = createContext<LayoutContextValue | null>(null);\n\n/**\n * A Virtualizer renders a scrollable collection of data using customizable layouts.\n * It supports very large collections by only rendering visible items to the DOM, reusing\n * them as the user scrolls.\n */\nexport function Virtualizer<O>(props: VirtualizerProps<O>): JSX.Element {\n  let {children, layout: layoutProp, layoutOptions} = props;\n  let layout = useMemo(() => typeof layoutProp === 'function' ? new layoutProp() : layoutProp, [layoutProp]);\n  let renderer: CollectionRenderer = useMemo(() => ({\n    isVirtualized: true,\n    layoutDelegate: layout,\n    dropTargetDelegate: layout.getDropTargetFromPoint ? layout as DropTargetDelegate : undefined,\n    CollectionRoot,\n    CollectionBranch\n  }), [layout]);\n\n  return (\n    <CollectionRendererContext.Provider value={renderer}>\n      <LayoutContext.Provider value={{layout, layoutOptions}}>\n        {children}\n      </LayoutContext.Provider>\n    </CollectionRendererContext.Provider>\n  );\n}\n\nfunction CollectionRoot({collection, persistedKeys, scrollRef, renderDropIndicator}: CollectionRootProps) {\n  let {layout, layoutOptions} = useContext(LayoutContext)!;\n  let layoutOptions2 = layout.useLayoutOptions?.();\n  let state = useVirtualizerState({\n    allowsWindowScrolling: true,\n    layout,\n    collection,\n    renderView: (type, item) => {\n      return item?.render?.(item);\n    },\n    onVisibleRectChange(rect) {\n      let element = scrollRef?.current;\n      if (element) {\n        element.scrollLeft = rect.x;\n        element.scrollTop = rect.y;\n      }\n    },\n    persistedKeys,\n    layoutOptions: useMemo(() => {\n      if (layoutOptions && layoutOptions2) {\n        return {...layoutOptions, ...layoutOptions2};\n      }\n      return layoutOptions || layoutOptions2;\n    }, [layoutOptions, layoutOptions2])\n  });\n\n  let {contentProps} = useScrollView({\n    onVisibleRectChange: state.setVisibleRect,\n    onSizeChange: state.setSize,\n    contentSize: state.contentSize,\n    onScrollStart: state.startScrolling,\n    onScrollEnd: state.endScrolling,\n    allowsWindowScrolling: true\n  }, scrollRef!);\n\n  return (\n    <div {...contentProps}>\n      <VirtualizerContext.Provider value={state}>\n        {renderChildren(null, state.visibleViews, renderDropIndicator)}\n      </VirtualizerContext.Provider>\n    </div>\n  );\n}\n\nfunction CollectionBranch({parent, renderDropIndicator}: CollectionBranchProps) {\n  let virtualizer = useContext(VirtualizerContext);\n  let parentView = virtualizer!.virtualizer.getVisibleView(parent.key)!;\n  return renderChildren(parentView, Array.from(parentView.children), renderDropIndicator);\n}\n\nfunction renderChildren(parent: View | null, children: View[], renderDropIndicator?: (target: ItemDropTarget) => ReactNode) {\n  return children.map(view => renderWrapper(parent, view, renderDropIndicator));\n}\n\nfunction renderWrapper(\n  parent: View | null,\n  reusableView: View,\n  renderDropIndicator?: (target: ItemDropTarget) => ReactNode\n): ReactNode {\n  let rendered = (\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  let {collection, layout} = reusableView.virtualizer;\n  let node = reusableView.content;\n  if (node?.type === 'item' && renderDropIndicator && layout.getDropTargetLayoutInfo) {\n    rendered = (\n      <React.Fragment key={reusableView.key}>\n        {renderDropIndicatorWrapper(parent, reusableView, {type: 'item', key: reusableView.content!.key, dropPosition: 'before'}, renderDropIndicator)}\n        {rendered}\n        {renderAfterDropIndicators(collection, node, target => renderDropIndicatorWrapper(parent, reusableView, target, renderDropIndicator))}\n      </React.Fragment>\n    );\n  }\n\n  return rendered;\n}\n\nfunction renderDropIndicatorWrapper(\n  parent: View | null,\n  reusableView: View,\n  target: ItemDropTarget,\n  renderDropIndicator: (target: ItemDropTarget) => ReactNode\n) {\n  let indicator = renderDropIndicator(target);\n  if (indicator) {\n    let layoutInfo = reusableView.virtualizer.layout.getDropTargetLayoutInfo!(target);\n    indicator = (\n      <VirtualizerItem\n        layoutInfo={layoutInfo}\n        virtualizer={reusableView.virtualizer}\n        parent={parent?.layoutInfo}>\n        {indicator}\n      </VirtualizerItem>\n    );\n  }\n\n  return indicator;\n}\n"],"names":[],"version":3,"file":"Virtualizer.mjs.map"}