react-window 2.0.2-alpha.0 → 2.0.2-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/react-window.cjs +1 -1
- package/dist/react-window.cjs.map +1 -1
- package/dist/react-window.d.ts +2270 -9
- package/dist/react-window.js +430 -428
- package/dist/react-window.js.map +1 -1
- package/docs/assets/{AriaRolesRoute-BQ4l2o71.js → AriaRolesRoute-DUJio_Uq.js} +2 -2
- package/docs/assets/{AriaRolesRoute-BQ4l2o71.js.map → AriaRolesRoute-DUJio_Uq.js.map} +1 -1
- package/docs/assets/{AriaRolesRoute-ahe1aw6k.js → AriaRolesRoute-Dsxt70zK.js} +2 -2
- package/docs/assets/{AriaRolesRoute-ahe1aw6k.js.map → AriaRolesRoute-Dsxt70zK.js.map} +1 -1
- package/docs/assets/{AriaRolesRoute-BXnUEUK2.js → AriaRolesRoute-rvLAMJGg.js} +2 -2
- package/docs/assets/{AriaRolesRoute-BXnUEUK2.js.map → AriaRolesRoute-rvLAMJGg.js.map} +1 -1
- package/docs/assets/CellComponent.example-CFiu8zNV.js +2 -0
- package/docs/assets/{CellComponent.example-dKVH8ZYc.js.map → CellComponent.example-CFiu8zNV.js.map} +1 -1
- package/docs/assets/{ComponentProps-BA6jJCAT.js → ComponentProps-BFVtvKZW.js} +2 -2
- package/docs/assets/{ComponentProps-BA6jJCAT.js.map → ComponentProps-BFVtvKZW.js.map} +1 -1
- package/docs/assets/ContinueLink-DMnSPbdx.js +2 -0
- package/docs/assets/{ContinueLink-DN1_wnU9.js.map → ContinueLink-DMnSPbdx.js.map} +1 -1
- package/docs/assets/FixedHeightList-C81qGuc2.js +2 -0
- package/docs/assets/FixedHeightList-C81qGuc2.js.map +1 -0
- package/docs/assets/{FixedRowHeightsRoute-iwoWadtD.js → FixedRowHeightsRoute-BgFMqZ9J.js} +2 -2
- package/docs/assets/FixedRowHeightsRoute-BgFMqZ9J.js.map +1 -0
- package/docs/assets/{FormattedCode-CDzGfhdX.js → FormattedCode-B5NYyy8K.js} +2 -2
- package/docs/assets/{FormattedCode-CDzGfhdX.js.map → FormattedCode-B5NYyy8K.js.map} +1 -1
- package/docs/assets/{GettingStartedRoute-6onVm0dP.js → GettingStartedRoute-OLG6nuHW.js} +2 -2
- package/docs/assets/{GettingStartedRoute-6onVm0dP.js.map → GettingStartedRoute-OLG6nuHW.js.map} +1 -1
- package/docs/assets/Grid-BXEwl59J.js +2 -0
- package/docs/assets/Grid-BXEwl59J.js.map +1 -0
- package/docs/assets/{Header-DyQVANF3.js → Header-B_onM2vR.js} +2 -2
- package/docs/assets/{Header-DyQVANF3.js.map → Header-B_onM2vR.js.map} +1 -1
- package/docs/assets/{HorizontalListsRoute-BQxNRT_F.js → HorizontalListsRoute-YTu4ru_X.js} +2 -2
- package/docs/assets/{HorizontalListsRoute-BQxNRT_F.js.map → HorizontalListsRoute-YTu4ru_X.js.map} +1 -1
- package/docs/assets/{ImperativeApiRoute-ZdLgDzyA.js → ImperativeApiRoute-BxC-VyUh.js} +2 -2
- package/docs/assets/{ImperativeApiRoute-ZdLgDzyA.js.map → ImperativeApiRoute-BxC-VyUh.js.map} +1 -1
- package/docs/assets/{ImperativeApiRoute-DN4crA5x.js → ImperativeApiRoute-D8HOQfr3.js} +2 -2
- package/docs/assets/{ImperativeApiRoute-DN4crA5x.js.map → ImperativeApiRoute-D8HOQfr3.js.map} +1 -1
- package/docs/assets/List-CwFMf7n1.js +2 -0
- package/docs/assets/List-CwFMf7n1.js.map +1 -0
- package/docs/assets/{LoadingSpinner-DXcA8wXA.js → LoadingSpinner-BMzTPwZo.js} +2 -2
- package/docs/assets/{LoadingSpinner-DXcA8wXA.js.map → LoadingSpinner-BMzTPwZo.js.map} +1 -1
- package/docs/assets/{PageNotFound-I9Ugq07H.js → PageNotFound-kFYcmtEM.js} +2 -2
- package/docs/assets/{PageNotFound-I9Ugq07H.js.map → PageNotFound-kFYcmtEM.js.map} +1 -1
- package/docs/assets/{PlatformRequirementsRoute-Mn45V_j9.js → PlatformRequirementsRoute-D2r4s58b.js} +2 -2
- package/docs/assets/{PlatformRequirementsRoute-Mn45V_j9.js.map → PlatformRequirementsRoute-D2r4s58b.js.map} +1 -1
- package/docs/assets/PropsRoute-B_3n6IE5.js +2 -0
- package/docs/assets/{PropsRoute-BzcsHp2c.js.map → PropsRoute-B_3n6IE5.js.map} +1 -1
- package/docs/assets/PropsRoute-CUL_CRSw.js +2 -0
- package/docs/assets/{PropsRoute-CHeNkGKQ.js.map → PropsRoute-CUL_CRSw.js.map} +1 -1
- package/docs/assets/{RTLGridsRoute-RdjRBOG7.js → RTLGridsRoute-BXZTN5aZ.js} +2 -2
- package/docs/assets/{RTLGridsRoute-RdjRBOG7.js.map → RTLGridsRoute-BXZTN5aZ.js.map} +1 -1
- package/docs/assets/{RenderingGridRoute-bkYAfFEg.js → RenderingGridRoute-DjDJX4pV.js} +2 -2
- package/docs/assets/{RenderingGridRoute-bkYAfFEg.js.map → RenderingGridRoute-DjDJX4pV.js.map} +1 -1
- package/docs/assets/ScratchpadRoute-BvmbZ6RR.js +2 -0
- package/docs/assets/{ScratchpadRoute-B8OO7yyx.js.map → ScratchpadRoute-BvmbZ6RR.js.map} +1 -1
- package/docs/assets/{Select-Dtoy3zH8.js → Select-INFvG4Rz.js} +2 -2
- package/docs/assets/{Select-Dtoy3zH8.js.map → Select-INFvG4Rz.js.map} +1 -1
- package/docs/assets/StickyRowsRoute-D9QBSEk_.js +2 -0
- package/docs/assets/StickyRowsRoute-D9QBSEk_.js.map +1 -0
- package/docs/assets/{SupportRoute-Cy6JXaox.js → SupportRoute-DyO6dv_w.js} +2 -2
- package/docs/assets/{SupportRoute-Cy6JXaox.js.map → SupportRoute-DyO6dv_w.js.map} +1 -1
- package/docs/assets/{TabularDataRoute-EbsuxYEq.js → TabularDataRoute-CH8QvWD7.js} +2 -2
- package/docs/assets/{TabularDataRoute-EbsuxYEq.js.map → TabularDataRoute-CH8QvWD7.js.map} +1 -1
- package/docs/assets/{VariableRowHeightsRoute-Bmh2fNYt.js → VariableRowHeightsRoute--1XN3vDI.js} +2 -2
- package/docs/assets/{VariableRowHeightsRoute-Bmh2fNYt.js.map → VariableRowHeightsRoute--1XN3vDI.js.map} +1 -1
- package/docs/assets/{arePropsEqual-Bhv0L31F.js → arePropsEqual-Czc4-HWX.js} +2 -2
- package/docs/assets/{arePropsEqual-Bhv0L31F.js.map → arePropsEqual-Czc4-HWX.js.map} +1 -1
- package/docs/assets/{index-Dfhz9Ad4.js → index-C6NWGx8D.js} +3 -3
- package/docs/assets/index-C6NWGx8D.js.map +1 -0
- package/docs/assets/index-CTUnf-2d.css +1 -0
- package/docs/assets/{useCitiesByState-_PN38xmv.js → useCitiesByState-rFcDxGxC.js} +2 -2
- package/docs/assets/{useCitiesByState-_PN38xmv.js.map → useCitiesByState-rFcDxGxC.js.map} +1 -1
- package/docs/assets/{useContacts-CDDyJV-g.js → useContacts-Bu0Z6ao9.js} +2 -2
- package/docs/assets/{useContacts-CDDyJV-g.js.map → useContacts-Bu0Z6ao9.js.map} +1 -1
- package/docs/generated/code-snippets/FixedHeightList.json +2 -2
- package/docs/generated/code-snippets/FixedHeightRowComponent.json +2 -2
- package/docs/generated/code-snippets/ListWithStickyRows.json +4 -0
- package/docs/generated/js-docs/Grid.json +631 -0
- package/docs/generated/js-docs/List.json +631 -0
- package/docs/index.html +2 -2
- package/docs/stats.html +1 -1
- package/package.json +2 -1
- package/docs/assets/CellComponent.example-dKVH8ZYc.js +0 -2
- package/docs/assets/ContinueLink-DN1_wnU9.js +0 -2
- package/docs/assets/FixedHeightList-HNBwl6P8.js +0 -2
- package/docs/assets/FixedHeightList-HNBwl6P8.js.map +0 -1
- package/docs/assets/FixedRowHeightsRoute-iwoWadtD.js.map +0 -1
- package/docs/assets/Grid-BnGy9pmI.js +0 -2
- package/docs/assets/Grid-BnGy9pmI.js.map +0 -1
- package/docs/assets/List-CsalXuo6.js +0 -2
- package/docs/assets/List-CsalXuo6.js.map +0 -1
- package/docs/assets/PropsRoute-BzcsHp2c.js +0 -2
- package/docs/assets/PropsRoute-CHeNkGKQ.js +0 -2
- package/docs/assets/ScratchpadRoute-B8OO7yyx.js +0 -2
- package/docs/assets/index-DEYagqsv.css +0 -1
- package/docs/assets/index-Dfhz9Ad4.js.map +0 -1
package/docs/assets/{VariableRowHeightsRoute-Bmh2fNYt.js → VariableRowHeightsRoute--1XN3vDI.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as s,B as a}from"./index-Dfhz9Ad4.js";import{B as n}from"./arePropsEqual-Bhv0L31F.js";import{F as p}from"./FormattedCode-CDzGfhdX.js";import{C as t}from"./ContinueLink-DN1_wnU9.js";import{H as c}from"./Header-DyQVANF3.js";import{L as e}from"./LoadingSpinner-DXcA8wXA.js";import{u as i,E as l}from"./useCitiesByState-_PN38xmv.js";import"./List-CsalXuo6.js";import"./addresses-CDQyd4n9.js";const o={javaScript:'<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class="tok-keyword">import</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-variableName tok-definition">List</span><span class=""> </span><span class="tok-punctuation">}</span><span class=""> </span><span class="tok-keyword">from</span><span class=""> </span><span class="tok-string">"react-window"</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">function</span><span class=""> </span><span class="tok-variableName tok-definition">Example</span><span class="tok-punctuation">(</span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName">items</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">List</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-propertyName">rowComponent</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">RowComponent</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-propertyName">rowCount</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">items</span><span class="tok-operator">.</span><span class="tok-propertyName">length</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-propertyName">rowHeight</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">rowHeight</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-propertyName">rowProps</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName tok-definition">items</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">/></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">function</span><span class=""> </span><span class="tok-variableName tok-definition">rowHeight</span><span class="tok-punctuation">(</span><span class="tok-variableName tok-definition">index</span><span class="tok-punctuation">,</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName">items</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">switch</span><span class=""> </span><span class="tok-punctuation">(</span><span class="tok-variableName">items</span><span class="tok-punctuation">[</span><span class="tok-variableName">index</span><span class="tok-punctuation">]</span><span class="tok-operator">.</span><span class="tok-propertyName">type</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">case</span><span class=""> </span><span class="tok-string">"state"</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-number">30</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">case</span><span class=""> </span><span class="tok-string">"zip"</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-number">25</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">function</span><span class=""> </span><span class="tok-variableName tok-definition">RowComponent</span><span class="tok-punctuation">(</span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName">index</span><span class="tok-punctuation">,</span><span class=""> </span><span class="tok-propertyName">items</span><span class="tok-punctuation">,</span><span class=""> </span><span class="tok-propertyName">style</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">const</span><span class=""> </span><span class="tok-variableName tok-definition">item</span><span class=""> </span><span class="tok-operator">=</span><span class=""> </span><span class="tok-variableName">items</span><span class="tok-punctuation">[</span><span class="tok-variableName">index</span><span class="tok-punctuation">]</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">const</span><span class=""> </span><span class="tok-variableName tok-definition">className</span><span class=""> </span><span class="tok-operator">=</span><span class=""> </span><span class="tok-variableName">getClassName</span><span class="tok-punctuation">(</span><span class="tok-variableName">item</span><span class="tok-punctuation">)</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">div</span><span class=""> </span><span class="tok-propertyName">className</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">className</span><span class="tok-punctuation">}</span><span class=""> </span><span class="tok-propertyName">style</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">style</span><span class="tok-punctuation">}</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">type</span><span class=""> </span><span class="tok-operator">===</span><span class=""> </span><span class="tok-string">"state"</span><span class=""> </span><span class="tok-operator">?</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 10ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">state</span><span class="tok-punctuation">}</span><span class="tok-punctuation"></</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-operator">:</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 10ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 12ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">city</span><span class="tok-punctuation">}</span><span class="">, </span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">zip</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 10ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"></</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">div</span><span class=""> </span><span class="tok-propertyName">className</span><span class="tok-operator">=</span><span class="tok-string">"text-slate-500 text-xs"</span><span class="tok-punctuation">></span><span class="tok-punctuation">{</span><span class="tok-string2">`</span><span class="tok-punctuation">${</span><span class="tok-variableName">index</span><span class=""> </span><span class="tok-operator">+</span><span class=""> </span><span class="tok-number">1</span><span class="tok-punctuation">}</span><span class="tok-string2"> of </span><span class="tok-punctuation">${</span><span class="tok-variableName">items</span><span class="tok-operator">.</span><span class="tok-propertyName">length</span><span class="tok-punctuation">}</span><span class="tok-string2">`</span><span class="tok-punctuation">}</span><span class="tok-punctuation"></</span><span class="tok-typeName">div</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"></</span><span class="tok-typeName">div</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span></div>',typeScript:'<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class="tok-keyword">import</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-variableName tok-definition">List</span><span class="tok-punctuation">,</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">type</span><span class=""> </span><span class="tok-variableName tok-definition">ListImperativeAPI</span><span class="tok-punctuation">,</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">type</span><span class=""> </span><span class="tok-variableName tok-definition">RowComponentProps</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""> </span><span class="tok-keyword">from</span><span class=""> </span><span class="tok-string">"react-window"</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">type</span><span class=""> </span><span class="tok-typeName">Item</span><span class=""> </span><span class="tok-operator">=</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-operator">|</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName tok-definition">type</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-string">"state"</span><span class="tok-punctuation">;</span><span class=""> </span><span class="tok-propertyName tok-definition">state</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">string</span><span class=""> </span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-operator">|</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName tok-definition">type</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-string">"zip"</span><span class="tok-punctuation">;</span><span class=""> </span><span class="tok-propertyName tok-definition">city</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">string</span><span class="tok-punctuation">;</span><span class=""> </span><span class="tok-propertyName tok-definition">zip</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">string</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">type</span><span class=""> </span><span class="tok-typeName">RowProps</span><span class=""> </span><span class="tok-operator">=</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-propertyName tok-definition">items</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">Item</span><span class="tok-punctuation">[</span><span class="tok-punctuation">]</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">function</span><span class=""> </span><span class="tok-variableName tok-definition">Example</span><span class="tok-punctuation">(</span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName">items</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName tok-definition">items</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">Item</span><span class="tok-punctuation">[</span><span class="tok-punctuation">]</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">List</span><span class="tok-operator"><</span><span class="tok-variableName">RowProps</span><span class="tok-operator">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-variableName">rowComponent</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-propertyName tok-definition">RowComponent</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-variableName">rowCount</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-propertyName tok-definition">items</span><span class="">.length</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-variableName">rowHeight</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-propertyName tok-definition">rowHeight</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-variableName">rowProps</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName tok-definition">items</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-string2">/></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">function</span><span class=""> </span><span class="tok-variableName tok-definition">rowHeight</span><span class="tok-punctuation">(</span><span class="tok-variableName tok-definition">index</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">number</span><span class="tok-punctuation">,</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName">items</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">RowProps</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">switch</span><span class=""> </span><span class="tok-punctuation">(</span><span class="tok-variableName">items</span><span class="tok-punctuation">[</span><span class="tok-variableName">index</span><span class="tok-punctuation">]</span><span class="tok-operator">.</span><span class="tok-propertyName">type</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">case</span><span class=""> </span><span class="tok-string">"state"</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-number">30</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">case</span><span class=""> </span><span class="tok-string">"zip"</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-number">25</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">function</span><span class=""> </span><span class="tok-variableName tok-definition">RowComponent</span><span class="tok-punctuation">(</span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName">index</span><span class="tok-punctuation">,</span><span class=""> </span><span class="tok-propertyName">items</span><span class="tok-punctuation">,</span><span class=""> </span><span class="tok-propertyName">style</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">RowComponentProps</span><span class=""><</span><span class="tok-typeName">RowProps</span><span class="">></span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">const</span><span class=""> </span><span class="tok-variableName tok-definition">item</span><span class=""> </span><span class="tok-operator">=</span><span class=""> </span><span class="tok-variableName">items</span><span class="tok-punctuation">[</span><span class="tok-variableName">index</span><span class="tok-punctuation">]</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">const</span><span class=""> </span><span class="tok-variableName tok-definition">className</span><span class=""> </span><span class="tok-operator">=</span><span class=""> </span><span class="tok-variableName">getClassName</span><span class="tok-punctuation">(</span><span class="tok-variableName">item</span><span class="tok-punctuation">)</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">div</span><span class=""> </span><span class="tok-propertyName">className</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">className</span><span class="tok-punctuation">}</span><span class=""> </span><span class="tok-propertyName">style</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">style</span><span class="tok-punctuation">}</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">type</span><span class=""> </span><span class="tok-operator">===</span><span class=""> </span><span class="tok-string">"state"</span><span class=""> </span><span class="tok-operator">?</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 10ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">state</span><span class="tok-punctuation">}</span><span class="tok-punctuation"></</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-operator">:</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 10ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 12ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">city</span><span class="tok-punctuation">}</span><span class="">, </span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">zip</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 10ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"></</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">div</span><span class=""> </span><span class="tok-propertyName">className</span><span class="tok-operator">=</span><span class="tok-string">"text-slate-500 text-xs"</span><span class="tok-punctuation">></span><span class="tok-punctuation">{</span><span class="tok-string2">`</span><span class="tok-punctuation">${</span><span class="tok-variableName">index</span><span class=""> </span><span class="tok-operator">+</span><span class=""> </span><span class="tok-number">1</span><span class="tok-punctuation">}</span><span class="tok-string2"> of </span><span class="tok-punctuation">${</span><span class="tok-variableName">items</span><span class="tok-operator">.</span><span class="tok-propertyName">length</span><span class="tok-punctuation">}</span><span class="tok-string2">`</span><span class="tok-punctuation">}</span><span class="tok-punctuation"></</span><span class="tok-typeName">div</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"></</span><span class="tok-typeName">div</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span></div>'};function d(){const d=i();return s.jsxs(a,{direction:"column",gap:4,children:[s.jsx(c,{section:"Lists",title:"Variable row heights"}),s.jsx("div",{children:"Lists with rows of different types may require different heights to render."}),s.jsx("div",{children:'Here is an example the most populous US postal codes, grouped by state. State rows "headers" are taller and are styled differently.'}),s.jsxs(n,{className:"h-50","data-focus-within":"bold",children:[!d.length&&s.jsx(e,{}),s.jsx(l,{items:d})]}),s.jsxs("div",{children:["This list requires a ",s.jsx("code",{children:"rowHeight"})," function that tells it what height a row should be based on the type of data it contains."]}),s.jsx(p,{markdown:o}),s.jsx(t,{to:"/list/props",title:"component props"})]})}export{d as default};
|
|
2
|
-
//# sourceMappingURL=VariableRowHeightsRoute
|
|
1
|
+
import{j as s,B as a}from"./index-C6NWGx8D.js";import{B as n}from"./arePropsEqual-Czc4-HWX.js";import{F as p}from"./FormattedCode-B5NYyy8K.js";import{C as t}from"./ContinueLink-DMnSPbdx.js";import{H as c}from"./Header-B_onM2vR.js";import{L as e}from"./LoadingSpinner-BMzTPwZo.js";import{u as i,E as l}from"./useCitiesByState-rFcDxGxC.js";import"./List-CwFMf7n1.js";import"./addresses-CDQyd4n9.js";const o={javaScript:'<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class="tok-keyword">import</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-variableName tok-definition">List</span><span class=""> </span><span class="tok-punctuation">}</span><span class=""> </span><span class="tok-keyword">from</span><span class=""> </span><span class="tok-string">"react-window"</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">function</span><span class=""> </span><span class="tok-variableName tok-definition">Example</span><span class="tok-punctuation">(</span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName">items</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">List</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-propertyName">rowComponent</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">RowComponent</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-propertyName">rowCount</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">items</span><span class="tok-operator">.</span><span class="tok-propertyName">length</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-propertyName">rowHeight</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">rowHeight</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-propertyName">rowProps</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName tok-definition">items</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">/></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">function</span><span class=""> </span><span class="tok-variableName tok-definition">rowHeight</span><span class="tok-punctuation">(</span><span class="tok-variableName tok-definition">index</span><span class="tok-punctuation">,</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName">items</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">switch</span><span class=""> </span><span class="tok-punctuation">(</span><span class="tok-variableName">items</span><span class="tok-punctuation">[</span><span class="tok-variableName">index</span><span class="tok-punctuation">]</span><span class="tok-operator">.</span><span class="tok-propertyName">type</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">case</span><span class=""> </span><span class="tok-string">"state"</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-number">30</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">case</span><span class=""> </span><span class="tok-string">"zip"</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-number">25</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">function</span><span class=""> </span><span class="tok-variableName tok-definition">RowComponent</span><span class="tok-punctuation">(</span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName">index</span><span class="tok-punctuation">,</span><span class=""> </span><span class="tok-propertyName">items</span><span class="tok-punctuation">,</span><span class=""> </span><span class="tok-propertyName">style</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">const</span><span class=""> </span><span class="tok-variableName tok-definition">item</span><span class=""> </span><span class="tok-operator">=</span><span class=""> </span><span class="tok-variableName">items</span><span class="tok-punctuation">[</span><span class="tok-variableName">index</span><span class="tok-punctuation">]</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">const</span><span class=""> </span><span class="tok-variableName tok-definition">className</span><span class=""> </span><span class="tok-operator">=</span><span class=""> </span><span class="tok-variableName">getClassName</span><span class="tok-punctuation">(</span><span class="tok-variableName">item</span><span class="tok-punctuation">)</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">div</span><span class=""> </span><span class="tok-propertyName">className</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">className</span><span class="tok-punctuation">}</span><span class=""> </span><span class="tok-propertyName">style</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">style</span><span class="tok-punctuation">}</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">type</span><span class=""> </span><span class="tok-operator">===</span><span class=""> </span><span class="tok-string">"state"</span><span class=""> </span><span class="tok-operator">?</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 10ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">state</span><span class="tok-punctuation">}</span><span class="tok-punctuation"></</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-operator">:</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 10ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 12ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">city</span><span class="tok-punctuation">}</span><span class="">, </span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">zip</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 10ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"></</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">div</span><span class=""> </span><span class="tok-propertyName">className</span><span class="tok-operator">=</span><span class="tok-string">"text-slate-500 text-xs"</span><span class="tok-punctuation">></span><span class="tok-punctuation">{</span><span class="tok-string2">`</span><span class="tok-punctuation">${</span><span class="tok-variableName">index</span><span class=""> </span><span class="tok-operator">+</span><span class=""> </span><span class="tok-number">1</span><span class="tok-punctuation">}</span><span class="tok-string2"> of </span><span class="tok-punctuation">${</span><span class="tok-variableName">items</span><span class="tok-operator">.</span><span class="tok-propertyName">length</span><span class="tok-punctuation">}</span><span class="tok-string2">`</span><span class="tok-punctuation">}</span><span class="tok-punctuation"></</span><span class="tok-typeName">div</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"></</span><span class="tok-typeName">div</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span></div>',typeScript:'<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class="tok-keyword">import</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-variableName tok-definition">List</span><span class="tok-punctuation">,</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">type</span><span class=""> </span><span class="tok-variableName tok-definition">ListImperativeAPI</span><span class="tok-punctuation">,</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">type</span><span class=""> </span><span class="tok-variableName tok-definition">RowComponentProps</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""> </span><span class="tok-keyword">from</span><span class=""> </span><span class="tok-string">"react-window"</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">type</span><span class=""> </span><span class="tok-typeName">Item</span><span class=""> </span><span class="tok-operator">=</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-operator">|</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName tok-definition">type</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-string">"state"</span><span class="tok-punctuation">;</span><span class=""> </span><span class="tok-propertyName tok-definition">state</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">string</span><span class=""> </span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-operator">|</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName tok-definition">type</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-string">"zip"</span><span class="tok-punctuation">;</span><span class=""> </span><span class="tok-propertyName tok-definition">city</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">string</span><span class="tok-punctuation">;</span><span class=""> </span><span class="tok-propertyName tok-definition">zip</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">string</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">type</span><span class=""> </span><span class="tok-typeName">RowProps</span><span class=""> </span><span class="tok-operator">=</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-propertyName tok-definition">items</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">Item</span><span class="tok-punctuation">[</span><span class="tok-punctuation">]</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">function</span><span class=""> </span><span class="tok-variableName tok-definition">Example</span><span class="tok-punctuation">(</span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName">items</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName tok-definition">items</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">Item</span><span class="tok-punctuation">[</span><span class="tok-punctuation">]</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">List</span><span class="tok-operator"><</span><span class="tok-variableName">RowProps</span><span class="tok-operator">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-variableName">rowComponent</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-propertyName tok-definition">RowComponent</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-variableName">rowCount</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-propertyName tok-definition">items</span><span class="">.length</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-variableName">rowHeight</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-propertyName tok-definition">rowHeight</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-variableName">rowProps</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName tok-definition">items</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-string2">/></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">function</span><span class=""> </span><span class="tok-variableName tok-definition">rowHeight</span><span class="tok-punctuation">(</span><span class="tok-variableName tok-definition">index</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">number</span><span class="tok-punctuation">,</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName">items</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">RowProps</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">switch</span><span class=""> </span><span class="tok-punctuation">(</span><span class="tok-variableName">items</span><span class="tok-punctuation">[</span><span class="tok-variableName">index</span><span class="tok-punctuation">]</span><span class="tok-operator">.</span><span class="tok-propertyName">type</span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">case</span><span class=""> </span><span class="tok-string">"state"</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-number">30</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">case</span><span class=""> </span><span class="tok-string">"zip"</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-number">25</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">function</span><span class=""> </span><span class="tok-variableName tok-definition">RowComponent</span><span class="tok-punctuation">(</span><span class="tok-punctuation">{</span><span class=""> </span><span class="tok-propertyName">index</span><span class="tok-punctuation">,</span><span class=""> </span><span class="tok-propertyName">items</span><span class="tok-punctuation">,</span><span class=""> </span><span class="tok-propertyName">style</span><span class=""> </span><span class="tok-punctuation">}</span><span class="tok-punctuation">:</span><span class=""> </span><span class="tok-typeName">RowComponentProps</span><span class=""><</span><span class="tok-typeName">RowProps</span><span class="">></span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-punctuation">{</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">const</span><span class=""> </span><span class="tok-variableName tok-definition">item</span><span class=""> </span><span class="tok-operator">=</span><span class=""> </span><span class="tok-variableName">items</span><span class="tok-punctuation">[</span><span class="tok-variableName">index</span><span class="tok-punctuation">]</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">const</span><span class=""> </span><span class="tok-variableName tok-definition">className</span><span class=""> </span><span class="tok-operator">=</span><span class=""> </span><span class="tok-variableName">getClassName</span><span class="tok-punctuation">(</span><span class="tok-variableName">item</span><span class="tok-punctuation">)</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-keyword">return</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">div</span><span class=""> </span><span class="tok-propertyName">className</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">className</span><span class="tok-punctuation">}</span><span class=""> </span><span class="tok-propertyName">style</span><span class="tok-operator">=</span><span class="tok-punctuation">{</span><span class="tok-variableName">style</span><span class="tok-punctuation">}</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">type</span><span class=""> </span><span class="tok-operator">===</span><span class=""> </span><span class="tok-string">"state"</span><span class=""> </span><span class="tok-operator">?</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 10ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">state</span><span class="tok-punctuation">}</span><span class="tok-punctuation"></</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class=""> </span><span class="tok-operator">:</span><span class=""> </span><span class="tok-punctuation">(</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 10ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 12ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">city</span><span class="tok-punctuation">}</span><span class="">, </span><span class="tok-punctuation">{</span><span class="tok-variableName">item</span><span class="tok-operator">.</span><span class="tok-propertyName">zip</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 10ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"></</span><span class="tok-typeName">span</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class="tok-punctuation">}</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 8ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"><</span><span class="tok-typeName">div</span><span class=""> </span><span class="tok-propertyName">className</span><span class="tok-operator">=</span><span class="tok-string">"text-slate-500 text-xs"</span><span class="tok-punctuation">></span><span class="tok-punctuation">{</span><span class="tok-string2">`</span><span class="tok-punctuation">${</span><span class="tok-variableName">index</span><span class=""> </span><span class="tok-operator">+</span><span class=""> </span><span class="tok-number">1</span><span class="tok-punctuation">}</span><span class="tok-string2"> of </span><span class="tok-punctuation">${</span><span class="tok-variableName">items</span><span class="tok-operator">.</span><span class="tok-propertyName">length</span><span class="tok-punctuation">}</span><span class="tok-string2">`</span><span class="tok-punctuation">}</span><span class="tok-punctuation"></</span><span class="tok-typeName">div</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 6ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation"></</span><span class="tok-typeName">div</span><span class="tok-punctuation">></span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 4ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">)</span><span class="tok-punctuation">;</span><span class=""></span></div>\n<div style="min-height: 1rem; padding-left: 2ch; text-indent: -2ch;"><span class=""></span><span class="tok-punctuation">}</span></div>'};function d(){const d=i();return s.jsxs(a,{direction:"column",gap:4,children:[s.jsx(c,{section:"Lists",title:"Variable row heights"}),s.jsx("div",{children:"Lists with rows of different types may require different heights to render."}),s.jsx("div",{children:'Here is an example the most populous US postal codes, grouped by state. State rows "headers" are taller and are styled differently.'}),s.jsxs(n,{className:"h-50","data-focus-within":"bold",children:[!d.length&&s.jsx(e,{}),s.jsx(l,{items:d})]}),s.jsxs("div",{children:["This list requires a ",s.jsx("code",{children:"rowHeight"})," function that tells it what height a row should be based on the type of data it contains."]}),s.jsx(p,{markdown:o}),s.jsx(t,{to:"/list/props",title:"component props"})]})}export{d as default};
|
|
2
|
+
//# sourceMappingURL=VariableRowHeightsRoute--1XN3vDI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VariableRowHeightsRoute
|
|
1
|
+
{"version":3,"file":"VariableRowHeightsRoute--1XN3vDI.js","sources":["../../src/routes/list/VariableRowHeightsRoute.tsx"],"sourcesContent":["import ListVariableRowHeightsMarkdown from \"../../../public/generated/code-snippets/ListVariableRowHeights.json\";\nimport { Block } from \"../../components/Block\";\nimport { Box } from \"../../components/Box\";\nimport { FormattedCode } from \"../../components/code/FormattedCode\";\nimport { ContinueLink } from \"../../components/ContinueLink\";\nimport { Header } from \"../../components/Header\";\nimport { LoadingSpinner } from \"../../components/LoadingSpinner\";\nimport { Example } from \"./examples/ListVariableRowHeights.example\";\nimport { useCitiesByState } from \"./hooks/useCitiesByState\";\n\nexport default function VariableRowHeightsRoute() {\n const citiesByState = useCitiesByState();\n\n return (\n <Box direction=\"column\" gap={4}>\n <Header section=\"Lists\" title=\"Variable row heights\" />\n <div>\n Lists with rows of different types may require different heights to\n render.\n </div>\n <div>\n Here is an example the most populous US postal codes, grouped by state.\n State rows \"headers\" are taller and are styled differently.\n </div>\n <Block className=\"h-50\" data-focus-within=\"bold\">\n {!citiesByState.length && <LoadingSpinner />}\n <Example items={citiesByState} />\n </Block>\n <div>\n This list requires a <code>rowHeight</code> function that tells it what\n height a row should be based on the type of data it contains.\n </div>\n <FormattedCode markdown={ListVariableRowHeightsMarkdown} />\n <ContinueLink to=\"/list/props\" title=\"component props\" />\n </Box>\n );\n}\n"],"names":["VariableRowHeightsRoute","citiesByState","useCitiesByState","jsxs","Box","direction","gap","children","jsx","Header","section","title","Block","className","length","LoadingSpinner","Example","items","FormattedCode","markdown","ListVariableRowHeightsMarkdown","ContinueLink","to"],"mappings":"i9gCAUA,SAAwBA,IACtB,MAAMC,EAAgBC,IAEtB,OACEC,EAAAA,KAACC,EAAA,CAAIC,UAAU,SAASC,IAAK,EAC3BC,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAOC,QAAQ,QAAQC,MAAM,2BAC9BH,IAAC,OAAID,SAAA,kFAILC,IAAC,OAAID,SAAA,wIAILJ,EAAAA,KAACS,EAAA,CAAMC,UAAU,OAAO,oBAAkB,OACvCN,SAAA,EAACN,EAAca,cAAWC,EAAA,CAAA,KAC3BP,IAACQ,EAAA,CAAQC,MAAOhB,cAEjB,MAAA,CAAIM,SAAA,CAAA,0BACkBC,IAAC,QAAKD,SAAA,cAAgB,kGAG7CC,IAACU,EAAA,CAAcC,SAAUC,IACzBZ,EAAAA,IAACa,EAAA,CAAaC,GAAG,cAAcX,MAAM,sBAG3C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e,X as t,r as i,Y as n}from"./index-
|
|
2
|
-
//# sourceMappingURL=arePropsEqual-
|
|
1
|
+
import{j as e,X as t,r as i,Y as n}from"./index-C6NWGx8D.js";function o({children:i,className:n,...o}){return e.jsx(t,{children:e.jsx("div",{className:`border-lg bg-black/30 text-slate-300 rounded-lg p-2 ${n}`,...o,children:i})})}function r(e){if(void 0!==e)switch(typeof e){case"number":return e;case"string":if(e.endsWith("px"))return parseFloat(e)}}let s=null;function c({containerElement:e,direction:t,isRtl:i,scrollOffset:n}){if("horizontal"===t&&i)switch(function(e=!1){if(null===s||e){const e=document.createElement("div"),t=e.style;t.width="50px",t.height="50px",t.overflow="scroll",t.direction="rtl";const i=document.createElement("div"),n=i.style;return n.width="100px",n.height="100px",e.appendChild(i),document.body.appendChild(e),e.scrollLeft>0?s="positive-descending":(e.scrollLeft=1,s=0===e.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(e),s}return s}()){case"negative":return-n;case"positive-descending":if(e){const{clientWidth:t,scrollLeft:i,scrollWidth:n}=e;return n-t-i}}return n}function l(e,t="Assertion error"){if(!e)throw console.error(t),Error(t)}function a({cachedBounds:e,itemCount:t,itemSize:i}){if(0===t)return 0;if("number"==typeof i)return t*i;{const i=e.get(0===e.size?0:e.size-1);l(void 0!==i,"Unexpected bounds cache miss");return t*((i.scrollOffset+i.size)/e.size)}}function u({cachedBounds:e,containerScrollOffset:t,containerSize:i,itemCount:n,overscanCount:o}){const r=n-1;let s=0,c=-1,l=0;for(;l<r;){const i=e.get(l);if(i.scrollOffset+i.size>t)break;l++}for(s=l,s=Math.max(0,s-o);l<r;){const n=e.get(l);if(n.scrollOffset+n.size>=t+i)break;l++}return c=Math.min(r,l),c=Math.min(n-1,c+o),s<0?[0,-1]:[s,c]}function d({itemCount:e,itemProps:t,itemSize:n}){return i.useMemo(()=>function({itemCount:e,itemProps:t,itemSize:i}){const n=new Map;return{get(o){for(l(o<e,`Invalid index ${o}`);n.size-1<o;){const e=n.size;let r;switch(typeof i){case"function":r=i(e,t);break;case"number":r=i}if(0===e)n.set(e,{size:r,scrollOffset:0});else{const t=n.get(e-1);l(void 0!==t,`Unexpected bounds cache miss for index ${o}`),n.set(e,{scrollOffset:t.scrollOffset+t.size,size:r})}}const r=n.get(o);return l(void 0!==r,`Unexpected bounds cache miss for index ${o}`),r},set(e,t){n.set(e,t)},get size(){return n.size}}}({itemCount:e,itemProps:t,itemSize:n}),[e,t,n])}function f({containerElement:e,containerStyle:t,defaultContainerSize:o=0,direction:s,isRtl:f=!1,itemCount:h,itemProps:m,itemSize:g,onResize:z,overscanCount:v}){const[p,b]=i.useState([0,-1]),[S,w]=[Math.min(h-1,p[0]),Math.min(h-1,p[1])],{height:C=o,width:x=o}=function({box:e,defaultHeight:t,defaultWidth:o,disabled:s,element:c,mode:l,style:a}){const{styleHeight:u,styleWidth:d}=i.useMemo(()=>({styleHeight:r(a?.height),styleWidth:r(a?.width)}),[a?.height,a?.width]),[f,h]=i.useState({height:t,width:o}),m=s||"only-height"===l&&void 0!==u||"only-width"===l&&void 0!==d||void 0!==u&&void 0!==d;return n(()=>{if(null===c||m)return;const t=new ResizeObserver(e=>{for(const t of e){const{contentRect:e,target:i}=t;c===i&&h(t=>t.height===e.height&&t.width===e.width?t:{height:e.height,width:e.width})}});return t.observe(c,{box:e}),()=>{t?.unobserve(c)}},[e,m,c,u,d]),i.useMemo(()=>({height:u??f.height,width:d??f.width}),[f,u,d])}({defaultHeight:"vertical"===s?o:void 0,defaultWidth:"horizontal"===s?o:void 0,element:e,mode:"vertical"===s?"only-height":"only-width",style:t}),y=i.useRef({height:0,width:0}),O="vertical"===s?C:x,E=function({containerSize:e,itemSize:t}){let i;"string"==typeof t?(l(t.endsWith("%"),`Invalid item size: "${t}"; string values must be percentages (e.g. "100%")`),l(void 0!==e,"Container size must be defined if a percentage item size is specified"),i=e*parseInt(t)/100):i=t;return i}({containerSize:O,itemSize:g});i.useLayoutEffect(()=>{if("function"==typeof z){const e=y.current;e.height===C&&e.width===x||(z({height:C,width:x},{...e}),e.height=C,e.width=x)}},[C,z,x]);const M=d({itemCount:h,itemProps:m,itemSize:E}),k=i.useCallback(e=>M.get(e),[M]),B=i.useCallback(()=>a({cachedBounds:M,itemCount:h,itemSize:E}),[M,h,E]),R=i.useCallback(t=>{const i=c({containerElement:e,direction:s,isRtl:f,scrollOffset:t});return u({cachedBounds:M,containerScrollOffset:i,containerSize:O,itemCount:h,overscanCount:v})},[M,e,O,s,f,h,v]);n(()=>{b(R(("vertical"===s?e?.scrollTop:e?.scrollLeft)??0))},[e,s,R]),n(()=>{if(!e)return;const t=()=>{b(t=>{const{scrollLeft:i,scrollTop:n}=e,o=c({containerElement:e,direction:s,isRtl:f,scrollOffset:"vertical"===s?n:i}),r=u({cachedBounds:M,containerScrollOffset:o,containerSize:O,itemCount:h,overscanCount:v});return r[0]===t[0]&&r[1]===t[1]?t:r})};return e.addEventListener("scroll",t),()=>{e.removeEventListener("scroll",t)}},[M,e,O,s,h,v]);const L=function(e){const t=i.useRef(()=>{throw new Error("Cannot call an event handler while rendering.")});return n(()=>{t.current=e},[e]),i.useCallback(e=>t.current?.(e),[t])}(({align:t="auto",containerScrollOffset:i,index:n})=>{let o=function({align:e,cachedBounds:t,index:i,itemCount:n,itemSize:o,containerScrollOffset:r,containerSize:s}){const c=a({cachedBounds:t,itemCount:n,itemSize:o}),l=t.get(i),u=Math.max(0,Math.min(c-s,l.scrollOffset)),d=Math.max(0,l.scrollOffset-s+l.size);switch("smart"===e&&(e=r>=d&&r<=u?"auto":"center"),e){case"start":return u;case"end":return d;case"center":return l.scrollOffset<=s/2?0:l.scrollOffset+l.size/2>=c-s/2?c-s:l.scrollOffset+l.size/2-s/2;default:return r>=d&&r<=u?r:r<d?d:u}}({align:t,cachedBounds:M,containerScrollOffset:i,containerSize:O,index:n,itemCount:h,itemSize:E});if(e){if(o=c({containerElement:e,direction:s,isRtl:f,scrollOffset:o}),"function"!=typeof e.scrollTo){const e=R(o);e[0]===S&&e[1]===w||b(e)}return o}});return{getCellBounds:k,getEstimatedSize:B,scrollToIndex:L,startIndex:S,stopIndex:w}}function h(e){return i.useMemo(()=>e,Object.values(e))}function m(e,t){if(e===t)return!0;if(!!e!=!!t)return!1;if(l(void 0!==e),l(void 0!==t),Object.keys(e).length!==Object.keys(t).length)return!1;for(const i in e)if(!Object.is(t[i],e[i]))return!1;return!0}function g(e,t){const{ariaAttributes:i,style:n,...o}=e,{ariaAttributes:r,style:s,...c}=t;return m(i,r)&&m(n,s)&&m(o,c)}export{o as B,g as a,f as b,h as u};
|
|
2
|
+
//# sourceMappingURL=arePropsEqual-Czc4-HWX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arePropsEqual-Bhv0L31F.js","sources":["../../src/components/Block.tsx","../../lib/utils/parseNumericStyleValue.ts","../../lib/utils/getRTLOffsetType.ts","../../lib/utils/adjustScrollOffsetForRtl.ts","../../lib/utils/assert.ts","../../lib/core/getEstimatedSize.ts","../../lib/core/getStartStopIndices.ts","../../lib/core/useCachedBounds.ts","../../lib/core/createCachedBounds.ts","../../lib/core/useVirtualizer.ts","../../lib/hooks/useResizeObserver.ts","../../lib/core/useItemSize.ts","../../lib/hooks/useStableCallback.ts","../../lib/core/getOffsetForIndex.ts","../../lib/hooks/useMemoizedObject.ts","../../lib/utils/shallowCompare.ts","../../lib/utils/arePropsEqual.ts"],"sourcesContent":["import type { HTMLAttributes, PropsWithChildren } from \"react\";\nimport { ErrorBoundary } from \"./ErrorBoundary\";\n\nexport function Block({\n children,\n className,\n ...rest\n}: PropsWithChildren<HTMLAttributes<HTMLDivElement> & { className?: string }>) {\n return (\n <ErrorBoundary>\n <div\n className={`border-lg bg-black/30 text-slate-300 rounded-lg p-2 ${className}`}\n {...rest}\n >\n {children}\n </div>\n </ErrorBoundary>\n );\n}\n","import type { CSSProperties } from \"react\";\n\nexport function parseNumericStyleValue(\n value: CSSProperties[\"height\"]\n): number | undefined {\n if (value !== undefined) {\n switch (typeof value) {\n case \"number\": {\n return value;\n }\n case \"string\": {\n if (value.endsWith(\"px\")) {\n return parseFloat(value);\n }\n break;\n }\n }\n }\n}\n","export type RTLOffsetType =\n | \"negative\"\n | \"positive-descending\"\n | \"positive-ascending\";\n\nlet cachedRTLResult: RTLOffsetType | null = null;\n\n// TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\nexport function getRTLOffsetType(recalculate: boolean = false): RTLOffsetType {\n if (cachedRTLResult === null || recalculate) {\n const outerDiv = document.createElement(\"div\");\n const outerStyle = outerDiv.style;\n outerStyle.width = \"50px\";\n outerStyle.height = \"50px\";\n outerStyle.overflow = \"scroll\";\n outerStyle.direction = \"rtl\";\n\n const innerDiv = document.createElement(\"div\");\n const innerStyle = innerDiv.style;\n innerStyle.width = \"100px\";\n innerStyle.height = \"100px\";\n\n outerDiv.appendChild(innerDiv);\n\n document.body.appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = \"positive-descending\";\n } else {\n outerDiv.scrollLeft = 1;\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = \"negative\";\n } else {\n cachedRTLResult = \"positive-ascending\";\n }\n }\n\n document.body.removeChild(outerDiv);\n\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n","import type { Direction } from \"../core/types\";\nimport { getRTLOffsetType } from \"./getRTLOffsetType\";\n\nexport function adjustScrollOffsetForRtl({\n containerElement,\n direction,\n isRtl,\n scrollOffset\n}: {\n containerElement: HTMLElement | null;\n direction: Direction;\n isRtl: boolean;\n scrollOffset: number;\n}) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n if (direction === \"horizontal\") {\n if (isRtl) {\n switch (getRTLOffsetType()) {\n case \"negative\": {\n return -scrollOffset;\n }\n case \"positive-descending\": {\n if (containerElement) {\n const { clientWidth, scrollLeft, scrollWidth } = containerElement;\n return scrollWidth - clientWidth - scrollLeft;\n }\n break;\n }\n }\n }\n }\n return scrollOffset;\n}\n","export function assert(\n expectedCondition: unknown,\n message: string = \"Assertion error\"\n): asserts expectedCondition {\n if (!expectedCondition) {\n console.error(message);\n\n throw Error(message);\n }\n}\n","import type { CachedBounds, SizeFunction } from \"./types\";\nimport { assert } from \"../utils/assert\";\n\nexport function getEstimatedSize<Props extends object>({\n cachedBounds,\n itemCount,\n itemSize\n}: {\n cachedBounds: CachedBounds;\n itemCount: number;\n itemSize: number | SizeFunction<Props>;\n}) {\n if (itemCount === 0) {\n return 0;\n } else if (typeof itemSize === \"number\") {\n return itemCount * itemSize;\n } else {\n const bounds = cachedBounds.get(\n cachedBounds.size === 0 ? 0 : cachedBounds.size - 1\n );\n assert(bounds !== undefined, \"Unexpected bounds cache miss\");\n\n const averageItemSize =\n (bounds.scrollOffset + bounds.size) / cachedBounds.size;\n\n return itemCount * averageItemSize;\n }\n}\n","import type { CachedBounds } from \"./types\";\n\nexport function getStartStopIndices({\n cachedBounds,\n containerScrollOffset,\n containerSize,\n itemCount,\n overscanCount\n}: {\n cachedBounds: CachedBounds;\n containerScrollOffset: number;\n containerSize: number;\n itemCount: number;\n overscanCount: number;\n}): [number, number] {\n const maxIndex = itemCount - 1;\n\n let startIndex = 0;\n let stopIndex = -1;\n let currentIndex = 0;\n\n while (currentIndex < maxIndex) {\n const bounds = cachedBounds.get(currentIndex);\n\n if (bounds.scrollOffset + bounds.size > containerScrollOffset) {\n break;\n }\n\n currentIndex++;\n }\n\n startIndex = currentIndex;\n startIndex = Math.max(0, startIndex - overscanCount);\n\n while (currentIndex < maxIndex) {\n const bounds = cachedBounds.get(currentIndex);\n\n if (\n bounds.scrollOffset + bounds.size >=\n containerScrollOffset + containerSize\n ) {\n break;\n }\n\n currentIndex++;\n }\n\n stopIndex = Math.min(maxIndex, currentIndex);\n stopIndex = Math.min(itemCount - 1, stopIndex + overscanCount);\n\n return startIndex < 0 ? [0, -1] : [startIndex, stopIndex];\n}\n","import { useMemo } from \"react\";\nimport { createCachedBounds } from \"./createCachedBounds\";\nimport type { CachedBounds, SizeFunction } from \"./types\";\n\nexport function useCachedBounds<Props extends object>({\n itemCount,\n itemProps,\n itemSize\n}: {\n itemCount: number;\n itemProps: Props;\n itemSize: number | SizeFunction<Props>;\n}): CachedBounds {\n return useMemo(\n () =>\n createCachedBounds({\n itemCount,\n itemProps,\n itemSize\n }),\n [itemCount, itemProps, itemSize]\n );\n}\n","import { assert } from \"../utils/assert\";\nimport type { Bounds, CachedBounds, SizeFunction } from \"./types\";\n\nexport function createCachedBounds<Props extends object>({\n itemCount,\n itemProps,\n itemSize\n}: {\n itemCount: number;\n itemProps: Props;\n itemSize: number | SizeFunction<Props>;\n}): CachedBounds {\n const cache = new Map<number, Bounds>();\n\n return {\n get(index: number) {\n assert(index < itemCount, `Invalid index ${index}`);\n\n while (cache.size - 1 < index) {\n const currentIndex = cache.size;\n\n let size: number;\n switch (typeof itemSize) {\n case \"function\": {\n size = itemSize(currentIndex, itemProps);\n break;\n }\n case \"number\": {\n size = itemSize;\n break;\n }\n }\n\n if (currentIndex === 0) {\n cache.set(currentIndex, {\n size,\n scrollOffset: 0\n });\n } else {\n const previousRowBounds = cache.get(currentIndex - 1);\n assert(\n previousRowBounds !== undefined,\n `Unexpected bounds cache miss for index ${index}`\n );\n\n cache.set(currentIndex, {\n scrollOffset:\n previousRowBounds.scrollOffset + previousRowBounds.size,\n size\n });\n }\n }\n\n const bounds = cache.get(index);\n assert(\n bounds !== undefined,\n `Unexpected bounds cache miss for index ${index}`\n );\n\n return bounds;\n },\n set(index: number, bounds: Bounds) {\n cache.set(index, bounds);\n },\n get size() {\n return cache.size;\n }\n };\n}\n","import {\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties\n} from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../hooks/useIsomorphicLayoutEffect\";\nimport { useResizeObserver } from \"../hooks/useResizeObserver\";\nimport { useStableCallback } from \"../hooks/useStableCallback\";\nimport type { Align } from \"../types\";\nimport { adjustScrollOffsetForRtl } from \"../utils/adjustScrollOffsetForRtl\";\nimport { getEstimatedSize as getEstimatedSizeUtil } from \"./getEstimatedSize\";\nimport { getOffsetForIndex } from \"./getOffsetForIndex\";\nimport { getStartStopIndices as getStartStopIndicesUtil } from \"./getStartStopIndices\";\nimport type { Direction, SizeFunction } from \"./types\";\nimport { useCachedBounds } from \"./useCachedBounds\";\nimport { useItemSize } from \"./useItemSize\";\n\nexport function useVirtualizer<Props extends object>({\n containerElement,\n containerStyle,\n defaultContainerSize = 0,\n direction,\n isRtl = false,\n itemCount,\n itemProps,\n itemSize: itemSizeProp,\n onResize,\n overscanCount\n}: {\n containerElement: HTMLElement | null;\n containerStyle?: CSSProperties;\n defaultContainerSize?: number;\n direction: Direction;\n isRtl?: boolean;\n itemCount: number;\n itemProps: Props;\n itemSize: number | string | SizeFunction<Props>;\n onResize:\n | ((\n size: { height: number; width: number },\n prevSize: { height: number; width: number }\n ) => void)\n | undefined;\n overscanCount: number;\n}) {\n const [indices, setIndices] = useState([0, -1]);\n\n // Guard against temporarily invalid indices that may occur when item count decreases\n // Cached bounds object will be re-created and a second render will restore things\n const [startIndex, stopIndex] = [\n Math.min(itemCount - 1, indices[0]),\n Math.min(itemCount - 1, indices[1])\n ];\n\n const { height = defaultContainerSize, width = defaultContainerSize } =\n useResizeObserver({\n defaultHeight:\n direction === \"vertical\" ? defaultContainerSize : undefined,\n defaultWidth:\n direction === \"horizontal\" ? defaultContainerSize : undefined,\n element: containerElement,\n mode: direction === \"vertical\" ? \"only-height\" : \"only-width\",\n style: containerStyle\n });\n\n const prevSizeRef = useRef<{ height: number; width: number }>({\n height: 0,\n width: 0\n });\n\n const containerSize = direction === \"vertical\" ? height : width;\n\n const itemSize = useItemSize({ containerSize, itemSize: itemSizeProp });\n\n useLayoutEffect(() => {\n if (typeof onResize === \"function\") {\n const prevSize = prevSizeRef.current;\n\n if (prevSize.height !== height || prevSize.width !== width) {\n onResize({ height, width }, { ...prevSize });\n\n prevSize.height = height;\n prevSize.width = width;\n }\n }\n }, [height, onResize, width]);\n\n const cachedBounds = useCachedBounds({\n itemCount,\n itemProps,\n itemSize\n });\n\n const getCellBounds = useCallback(\n (index: number) => cachedBounds.get(index),\n [cachedBounds]\n );\n\n const getEstimatedSize = useCallback(\n () =>\n getEstimatedSizeUtil({\n cachedBounds,\n itemCount,\n itemSize\n }),\n [cachedBounds, itemCount, itemSize]\n );\n\n const getStartStopIndices = useCallback(\n (scrollOffset: number) => {\n const containerScrollOffset = adjustScrollOffsetForRtl({\n containerElement,\n direction,\n isRtl,\n scrollOffset\n });\n\n return getStartStopIndicesUtil({\n cachedBounds,\n containerScrollOffset,\n containerSize,\n itemCount,\n overscanCount\n });\n },\n [\n cachedBounds,\n containerElement,\n containerSize,\n direction,\n isRtl,\n itemCount,\n overscanCount\n ]\n );\n\n useIsomorphicLayoutEffect(() => {\n const scrollOffset =\n (direction === \"vertical\"\n ? containerElement?.scrollTop\n : containerElement?.scrollLeft) ?? 0;\n\n setIndices(getStartStopIndices(scrollOffset));\n }, [containerElement, direction, getStartStopIndices]);\n\n useIsomorphicLayoutEffect(() => {\n if (!containerElement) {\n return;\n }\n\n const onScroll = () => {\n setIndices((prev) => {\n const { scrollLeft, scrollTop } = containerElement;\n\n const scrollOffset = adjustScrollOffsetForRtl({\n containerElement,\n direction,\n isRtl,\n scrollOffset: direction === \"vertical\" ? scrollTop : scrollLeft\n });\n\n const next = getStartStopIndicesUtil({\n cachedBounds,\n containerScrollOffset: scrollOffset,\n containerSize,\n itemCount,\n overscanCount\n });\n\n if (next[0] === prev[0] && next[1] === prev[1]) {\n return prev;\n }\n\n return next;\n });\n };\n\n containerElement.addEventListener(\"scroll\", onScroll);\n\n return () => {\n containerElement.removeEventListener(\"scroll\", onScroll);\n };\n }, [\n cachedBounds,\n containerElement,\n containerSize,\n direction,\n itemCount,\n overscanCount\n ]);\n\n const scrollToIndex = useStableCallback(\n ({\n align = \"auto\",\n containerScrollOffset,\n index\n }: {\n align?: Align;\n containerScrollOffset: number;\n index: number;\n }) => {\n let scrollOffset = getOffsetForIndex({\n align,\n cachedBounds,\n containerScrollOffset,\n containerSize,\n index,\n itemCount,\n itemSize\n });\n\n if (containerElement) {\n scrollOffset = adjustScrollOffsetForRtl({\n containerElement,\n direction,\n isRtl,\n scrollOffset\n });\n\n if (typeof containerElement.scrollTo !== \"function\") {\n // Special case for environments like jsdom that don't implement scrollTo\n const next = getStartStopIndices(scrollOffset);\n if (next[0] !== startIndex || next[1] !== stopIndex) {\n setIndices(next);\n }\n }\n\n return scrollOffset;\n }\n }\n );\n\n return {\n getCellBounds,\n getEstimatedSize,\n scrollToIndex,\n startIndex,\n stopIndex\n };\n}\n","import { useMemo, useState, type CSSProperties } from \"react\";\nimport { parseNumericStyleValue } from \"../utils/parseNumericStyleValue\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\n\nexport function useResizeObserver({\n box,\n defaultHeight,\n defaultWidth,\n disabled: disabledProp,\n element,\n mode,\n style\n}: {\n box?: ResizeObserverBoxOptions;\n defaultHeight?: number;\n defaultWidth?: number;\n disabled?: boolean;\n element: HTMLElement | null;\n mode?: \"only-height\" | \"only-width\";\n style?: CSSProperties;\n}) {\n const { styleHeight, styleWidth } = useMemo(\n () => ({\n styleHeight: parseNumericStyleValue(style?.height),\n styleWidth: parseNumericStyleValue(style?.width)\n }),\n [style?.height, style?.width]\n );\n\n const [state, setState] = useState<{\n height: number | undefined;\n width: number | undefined;\n }>({\n height: defaultHeight,\n width: defaultWidth\n });\n\n const disabled =\n disabledProp ||\n (mode === \"only-height\" && styleHeight !== undefined) ||\n (mode === \"only-width\" && styleWidth !== undefined) ||\n (styleHeight !== undefined && styleWidth !== undefined);\n\n useIsomorphicLayoutEffect(() => {\n if (element === null || disabled) {\n return;\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { contentRect, target } = entry;\n if (element === target) {\n setState((prevState) => {\n if (\n prevState.height === contentRect.height &&\n prevState.width === contentRect.width\n ) {\n return prevState;\n }\n\n return {\n height: contentRect.height,\n width: contentRect.width\n };\n });\n }\n }\n });\n resizeObserver.observe(element, { box });\n\n return () => {\n resizeObserver?.unobserve(element);\n };\n }, [box, disabled, element, styleHeight, styleWidth]);\n\n return useMemo(\n () => ({\n height: styleHeight ?? state.height,\n width: styleWidth ?? state.width\n }),\n [state, styleHeight, styleWidth]\n );\n}\n","import { assert } from \"../utils/assert\";\nimport type { SizeFunction } from \"./types\";\n\nexport function useItemSize<Props extends object>({\n containerSize,\n itemSize: itemSizeProp\n}: {\n containerSize: number;\n itemSize: number | string | SizeFunction<Props>;\n}) {\n let itemSize: number | SizeFunction<Props>;\n switch (typeof itemSizeProp) {\n case \"string\": {\n assert(\n itemSizeProp.endsWith(\"%\"),\n `Invalid item size: \"${itemSizeProp}\"; string values must be percentages (e.g. \"100%\")`\n );\n assert(\n containerSize !== undefined,\n \"Container size must be defined if a percentage item size is specified\"\n );\n\n itemSize = (containerSize * parseInt(itemSizeProp)) / 100;\n break;\n }\n default: {\n itemSize = itemSizeProp;\n break;\n }\n }\n\n return itemSize;\n}\n","import { useCallback, useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\n\n// Forked from useEventCallback (usehooks-ts)\nexport function useStableCallback<Args, Return>(\n fn: (args: Args) => Return\n): (args: Args) => Return {\n const ref = useRef<typeof fn>(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n\n useIsomorphicLayoutEffect(() => {\n ref.current = fn;\n }, [fn]);\n\n return useCallback((args: Args) => ref.current?.(args), [ref]) as (\n args: Args\n ) => Return;\n}\n","import type { Align } from \"../types\";\nimport { getEstimatedSize } from \"./getEstimatedSize\";\nimport type { CachedBounds, SizeFunction } from \"./types\";\n\nexport function getOffsetForIndex<Props extends object>({\n align,\n cachedBounds,\n index,\n itemCount,\n itemSize,\n containerScrollOffset,\n containerSize\n}: {\n align: Align;\n cachedBounds: CachedBounds;\n index: number;\n itemCount: number;\n itemSize: number | SizeFunction<Props>;\n containerScrollOffset: number;\n containerSize: number;\n}) {\n const estimatedTotalSize = getEstimatedSize({\n cachedBounds,\n itemCount,\n itemSize\n });\n\n const bounds = cachedBounds.get(index);\n const maxOffset = Math.max(\n 0,\n Math.min(estimatedTotalSize - containerSize, bounds.scrollOffset)\n );\n const minOffset = Math.max(\n 0,\n bounds.scrollOffset - containerSize + bounds.size\n );\n\n if (align === \"smart\") {\n if (\n containerScrollOffset >= minOffset &&\n containerScrollOffset <= maxOffset\n ) {\n align = \"auto\";\n } else {\n align = \"center\";\n }\n }\n\n switch (align) {\n case \"start\": {\n return maxOffset;\n }\n case \"end\": {\n return minOffset;\n }\n case \"center\": {\n if (bounds.scrollOffset <= containerSize / 2) {\n // Too near the beginning to center-align\n return 0;\n } else if (\n bounds.scrollOffset + bounds.size / 2 >=\n estimatedTotalSize - containerSize / 2\n ) {\n // Too near the end to center-align\n return estimatedTotalSize - containerSize;\n } else {\n return bounds.scrollOffset + bounds.size / 2 - containerSize / 2;\n }\n }\n case \"auto\":\n default: {\n if (\n containerScrollOffset >= minOffset &&\n containerScrollOffset <= maxOffset\n ) {\n return containerScrollOffset;\n } else if (containerScrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n }\n}\n","import { useMemo } from \"react\";\n\nexport function useMemoizedObject<Type extends object>(\n unstableObject: Type\n): Type {\n return useMemo(() => {\n return unstableObject;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, Object.values(unstableObject));\n}\n","import { assert } from \"./assert\";\n\nexport function shallowCompare<Type extends object>(\n a: Type | undefined,\n b: Type | undefined\n) {\n if (a === b) {\n return true;\n }\n\n if (!!a !== !!b) {\n return false;\n }\n\n assert(a !== undefined);\n assert(b !== undefined);\n\n if (Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n\n for (const key in a) {\n if (!Object.is(b[key], a[key])) {\n return false;\n }\n }\n\n return true;\n}\n","import type { CSSProperties } from \"react\";\nimport { shallowCompare } from \"./shallowCompare\";\n\n// Custom comparison function for React.memo()\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://react.dev/reference/react/memo#memo\nexport function arePropsEqual(\n prevProps: { ariaAttributes: object; style: CSSProperties },\n nextProps: { ariaAttributes: object; style: CSSProperties }\n): boolean {\n const {\n ariaAttributes: prevAriaAttributes,\n style: prevStyle,\n ...prevRest\n } = prevProps;\n const {\n ariaAttributes: nextAriaAttributes,\n style: nextStyle,\n ...nextRest\n } = nextProps;\n\n return (\n shallowCompare(prevAriaAttributes, nextAriaAttributes) &&\n shallowCompare(prevStyle, nextStyle) &&\n shallowCompare(prevRest, nextRest)\n );\n}\n"],"names":["Block","children","className","rest","ErrorBoundary","jsx","parseNumericStyleValue","value","endsWith","parseFloat","cachedRTLResult","adjustScrollOffsetForRtl","containerElement","direction","isRtl","scrollOffset","recalculate","outerDiv","document","createElement","outerStyle","style","width","height","overflow","innerDiv","innerStyle","appendChild","body","scrollLeft","removeChild","getRTLOffsetType","clientWidth","scrollWidth","assert","expectedCondition","message","console","error","Error","getEstimatedSize","cachedBounds","itemCount","itemSize","bounds","get","size","getStartStopIndices","containerScrollOffset","containerSize","overscanCount","maxIndex","startIndex","stopIndex","currentIndex","Math","max","min","useCachedBounds","itemProps","useMemo","cache","Map","index","set","previousRowBounds","createCachedBounds","useVirtualizer","containerStyle","defaultContainerSize","itemSizeProp","onResize","indices","setIndices","useState","box","defaultHeight","defaultWidth","disabled","disabledProp","element","mode","styleHeight","styleWidth","state","setState","useIsomorphicLayoutEffect","resizeObserver","ResizeObserver","entries","entry","contentRect","target","prevState","observe","unobserve","useResizeObserver","prevSizeRef","useRef","parseInt","useItemSize","useLayoutEffect","prevSize","current","getCellBounds","useCallback","getEstimatedSizeUtil","getStartStopIndicesUtil","scrollTop","onScroll","prev","next","addEventListener","removeEventListener","scrollToIndex","fn","ref","args","useStableCallback","align","estimatedTotalSize","maxOffset","minOffset","getOffsetForIndex","scrollTo","useMemoizedObject","unstableObject","Object","values","shallowCompare","a","b","keys","length","key","is","arePropsEqual","prevProps","nextProps","ariaAttributes","prevAriaAttributes","prevStyle","prevRest","nextAriaAttributes","nextStyle","nextRest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arePropsEqual-Czc4-HWX.js","sources":["../../src/components/Block.tsx","../../lib/utils/parseNumericStyleValue.ts","../../lib/utils/getRTLOffsetType.ts","../../lib/utils/adjustScrollOffsetForRtl.ts","../../lib/utils/assert.ts","../../lib/core/getEstimatedSize.ts","../../lib/core/getStartStopIndices.ts","../../lib/core/useCachedBounds.ts","../../lib/core/createCachedBounds.ts","../../lib/core/useVirtualizer.ts","../../lib/hooks/useResizeObserver.ts","../../lib/core/useItemSize.ts","../../lib/hooks/useStableCallback.ts","../../lib/core/getOffsetForIndex.ts","../../lib/hooks/useMemoizedObject.ts","../../lib/utils/shallowCompare.ts","../../lib/utils/arePropsEqual.ts"],"sourcesContent":["import type { HTMLAttributes, PropsWithChildren } from \"react\";\nimport { ErrorBoundary } from \"./ErrorBoundary\";\n\nexport function Block({\n children,\n className,\n ...rest\n}: PropsWithChildren<HTMLAttributes<HTMLDivElement> & { className?: string }>) {\n return (\n <ErrorBoundary>\n <div\n className={`border-lg bg-black/30 text-slate-300 rounded-lg p-2 ${className}`}\n {...rest}\n >\n {children}\n </div>\n </ErrorBoundary>\n );\n}\n","import type { CSSProperties } from \"react\";\n\nexport function parseNumericStyleValue(\n value: CSSProperties[\"height\"]\n): number | undefined {\n if (value !== undefined) {\n switch (typeof value) {\n case \"number\": {\n return value;\n }\n case \"string\": {\n if (value.endsWith(\"px\")) {\n return parseFloat(value);\n }\n break;\n }\n }\n }\n}\n","export type RTLOffsetType =\n | \"negative\"\n | \"positive-descending\"\n | \"positive-ascending\";\n\nlet cachedRTLResult: RTLOffsetType | null = null;\n\n// TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\nexport function getRTLOffsetType(recalculate: boolean = false): RTLOffsetType {\n if (cachedRTLResult === null || recalculate) {\n const outerDiv = document.createElement(\"div\");\n const outerStyle = outerDiv.style;\n outerStyle.width = \"50px\";\n outerStyle.height = \"50px\";\n outerStyle.overflow = \"scroll\";\n outerStyle.direction = \"rtl\";\n\n const innerDiv = document.createElement(\"div\");\n const innerStyle = innerDiv.style;\n innerStyle.width = \"100px\";\n innerStyle.height = \"100px\";\n\n outerDiv.appendChild(innerDiv);\n\n document.body.appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = \"positive-descending\";\n } else {\n outerDiv.scrollLeft = 1;\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = \"negative\";\n } else {\n cachedRTLResult = \"positive-ascending\";\n }\n }\n\n document.body.removeChild(outerDiv);\n\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n","import type { Direction } from \"../core/types\";\nimport { getRTLOffsetType } from \"./getRTLOffsetType\";\n\nexport function adjustScrollOffsetForRtl({\n containerElement,\n direction,\n isRtl,\n scrollOffset\n}: {\n containerElement: HTMLElement | null;\n direction: Direction;\n isRtl: boolean;\n scrollOffset: number;\n}) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n if (direction === \"horizontal\") {\n if (isRtl) {\n switch (getRTLOffsetType()) {\n case \"negative\": {\n return -scrollOffset;\n }\n case \"positive-descending\": {\n if (containerElement) {\n const { clientWidth, scrollLeft, scrollWidth } = containerElement;\n return scrollWidth - clientWidth - scrollLeft;\n }\n break;\n }\n }\n }\n }\n return scrollOffset;\n}\n","export function assert(\n expectedCondition: unknown,\n message: string = \"Assertion error\"\n): asserts expectedCondition {\n if (!expectedCondition) {\n console.error(message);\n\n throw Error(message);\n }\n}\n","import type { CachedBounds, SizeFunction } from \"./types\";\nimport { assert } from \"../utils/assert\";\n\nexport function getEstimatedSize<Props extends object>({\n cachedBounds,\n itemCount,\n itemSize\n}: {\n cachedBounds: CachedBounds;\n itemCount: number;\n itemSize: number | SizeFunction<Props>;\n}) {\n if (itemCount === 0) {\n return 0;\n } else if (typeof itemSize === \"number\") {\n return itemCount * itemSize;\n } else {\n const bounds = cachedBounds.get(\n cachedBounds.size === 0 ? 0 : cachedBounds.size - 1\n );\n assert(bounds !== undefined, \"Unexpected bounds cache miss\");\n\n const averageItemSize =\n (bounds.scrollOffset + bounds.size) / cachedBounds.size;\n\n return itemCount * averageItemSize;\n }\n}\n","import type { CachedBounds } from \"./types\";\n\nexport function getStartStopIndices({\n cachedBounds,\n containerScrollOffset,\n containerSize,\n itemCount,\n overscanCount\n}: {\n cachedBounds: CachedBounds;\n containerScrollOffset: number;\n containerSize: number;\n itemCount: number;\n overscanCount: number;\n}): [number, number] {\n const maxIndex = itemCount - 1;\n\n let startIndex = 0;\n let stopIndex = -1;\n let currentIndex = 0;\n\n while (currentIndex < maxIndex) {\n const bounds = cachedBounds.get(currentIndex);\n\n if (bounds.scrollOffset + bounds.size > containerScrollOffset) {\n break;\n }\n\n currentIndex++;\n }\n\n startIndex = currentIndex;\n startIndex = Math.max(0, startIndex - overscanCount);\n\n while (currentIndex < maxIndex) {\n const bounds = cachedBounds.get(currentIndex);\n\n if (\n bounds.scrollOffset + bounds.size >=\n containerScrollOffset + containerSize\n ) {\n break;\n }\n\n currentIndex++;\n }\n\n stopIndex = Math.min(maxIndex, currentIndex);\n stopIndex = Math.min(itemCount - 1, stopIndex + overscanCount);\n\n return startIndex < 0 ? [0, -1] : [startIndex, stopIndex];\n}\n","import { useMemo } from \"react\";\nimport { createCachedBounds } from \"./createCachedBounds\";\nimport type { CachedBounds, SizeFunction } from \"./types\";\n\nexport function useCachedBounds<Props extends object>({\n itemCount,\n itemProps,\n itemSize\n}: {\n itemCount: number;\n itemProps: Props;\n itemSize: number | SizeFunction<Props>;\n}): CachedBounds {\n return useMemo(\n () =>\n createCachedBounds({\n itemCount,\n itemProps,\n itemSize\n }),\n [itemCount, itemProps, itemSize]\n );\n}\n","import { assert } from \"../utils/assert\";\nimport type { Bounds, CachedBounds, SizeFunction } from \"./types\";\n\nexport function createCachedBounds<Props extends object>({\n itemCount,\n itemProps,\n itemSize\n}: {\n itemCount: number;\n itemProps: Props;\n itemSize: number | SizeFunction<Props>;\n}): CachedBounds {\n const cache = new Map<number, Bounds>();\n\n return {\n get(index: number) {\n assert(index < itemCount, `Invalid index ${index}`);\n\n while (cache.size - 1 < index) {\n const currentIndex = cache.size;\n\n let size: number;\n switch (typeof itemSize) {\n case \"function\": {\n size = itemSize(currentIndex, itemProps);\n break;\n }\n case \"number\": {\n size = itemSize;\n break;\n }\n }\n\n if (currentIndex === 0) {\n cache.set(currentIndex, {\n size,\n scrollOffset: 0\n });\n } else {\n const previousRowBounds = cache.get(currentIndex - 1);\n assert(\n previousRowBounds !== undefined,\n `Unexpected bounds cache miss for index ${index}`\n );\n\n cache.set(currentIndex, {\n scrollOffset:\n previousRowBounds.scrollOffset + previousRowBounds.size,\n size\n });\n }\n }\n\n const bounds = cache.get(index);\n assert(\n bounds !== undefined,\n `Unexpected bounds cache miss for index ${index}`\n );\n\n return bounds;\n },\n set(index: number, bounds: Bounds) {\n cache.set(index, bounds);\n },\n get size() {\n return cache.size;\n }\n };\n}\n","import {\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties\n} from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../hooks/useIsomorphicLayoutEffect\";\nimport { useResizeObserver } from \"../hooks/useResizeObserver\";\nimport { useStableCallback } from \"../hooks/useStableCallback\";\nimport type { Align } from \"../types\";\nimport { adjustScrollOffsetForRtl } from \"../utils/adjustScrollOffsetForRtl\";\nimport { getEstimatedSize as getEstimatedSizeUtil } from \"./getEstimatedSize\";\nimport { getOffsetForIndex } from \"./getOffsetForIndex\";\nimport { getStartStopIndices as getStartStopIndicesUtil } from \"./getStartStopIndices\";\nimport type { Direction, SizeFunction } from \"./types\";\nimport { useCachedBounds } from \"./useCachedBounds\";\nimport { useItemSize } from \"./useItemSize\";\n\nexport function useVirtualizer<Props extends object>({\n containerElement,\n containerStyle,\n defaultContainerSize = 0,\n direction,\n isRtl = false,\n itemCount,\n itemProps,\n itemSize: itemSizeProp,\n onResize,\n overscanCount\n}: {\n containerElement: HTMLElement | null;\n containerStyle?: CSSProperties;\n defaultContainerSize?: number;\n direction: Direction;\n isRtl?: boolean;\n itemCount: number;\n itemProps: Props;\n itemSize: number | string | SizeFunction<Props>;\n onResize:\n | ((\n size: { height: number; width: number },\n prevSize: { height: number; width: number }\n ) => void)\n | undefined;\n overscanCount: number;\n}) {\n const [indices, setIndices] = useState([0, -1]);\n\n // Guard against temporarily invalid indices that may occur when item count decreases\n // Cached bounds object will be re-created and a second render will restore things\n const [startIndex, stopIndex] = [\n Math.min(itemCount - 1, indices[0]),\n Math.min(itemCount - 1, indices[1])\n ];\n\n const { height = defaultContainerSize, width = defaultContainerSize } =\n useResizeObserver({\n defaultHeight:\n direction === \"vertical\" ? defaultContainerSize : undefined,\n defaultWidth:\n direction === \"horizontal\" ? defaultContainerSize : undefined,\n element: containerElement,\n mode: direction === \"vertical\" ? \"only-height\" : \"only-width\",\n style: containerStyle\n });\n\n const prevSizeRef = useRef<{ height: number; width: number }>({\n height: 0,\n width: 0\n });\n\n const containerSize = direction === \"vertical\" ? height : width;\n\n const itemSize = useItemSize({ containerSize, itemSize: itemSizeProp });\n\n useLayoutEffect(() => {\n if (typeof onResize === \"function\") {\n const prevSize = prevSizeRef.current;\n\n if (prevSize.height !== height || prevSize.width !== width) {\n onResize({ height, width }, { ...prevSize });\n\n prevSize.height = height;\n prevSize.width = width;\n }\n }\n }, [height, onResize, width]);\n\n const cachedBounds = useCachedBounds({\n itemCount,\n itemProps,\n itemSize\n });\n\n const getCellBounds = useCallback(\n (index: number) => cachedBounds.get(index),\n [cachedBounds]\n );\n\n const getEstimatedSize = useCallback(\n () =>\n getEstimatedSizeUtil({\n cachedBounds,\n itemCount,\n itemSize\n }),\n [cachedBounds, itemCount, itemSize]\n );\n\n const getStartStopIndices = useCallback(\n (scrollOffset: number) => {\n const containerScrollOffset = adjustScrollOffsetForRtl({\n containerElement,\n direction,\n isRtl,\n scrollOffset\n });\n\n return getStartStopIndicesUtil({\n cachedBounds,\n containerScrollOffset,\n containerSize,\n itemCount,\n overscanCount\n });\n },\n [\n cachedBounds,\n containerElement,\n containerSize,\n direction,\n isRtl,\n itemCount,\n overscanCount\n ]\n );\n\n useIsomorphicLayoutEffect(() => {\n const scrollOffset =\n (direction === \"vertical\"\n ? containerElement?.scrollTop\n : containerElement?.scrollLeft) ?? 0;\n\n setIndices(getStartStopIndices(scrollOffset));\n }, [containerElement, direction, getStartStopIndices]);\n\n useIsomorphicLayoutEffect(() => {\n if (!containerElement) {\n return;\n }\n\n const onScroll = () => {\n setIndices((prev) => {\n const { scrollLeft, scrollTop } = containerElement;\n\n const scrollOffset = adjustScrollOffsetForRtl({\n containerElement,\n direction,\n isRtl,\n scrollOffset: direction === \"vertical\" ? scrollTop : scrollLeft\n });\n\n const next = getStartStopIndicesUtil({\n cachedBounds,\n containerScrollOffset: scrollOffset,\n containerSize,\n itemCount,\n overscanCount\n });\n\n if (next[0] === prev[0] && next[1] === prev[1]) {\n return prev;\n }\n\n return next;\n });\n };\n\n containerElement.addEventListener(\"scroll\", onScroll);\n\n return () => {\n containerElement.removeEventListener(\"scroll\", onScroll);\n };\n }, [\n cachedBounds,\n containerElement,\n containerSize,\n direction,\n itemCount,\n overscanCount\n ]);\n\n const scrollToIndex = useStableCallback(\n ({\n align = \"auto\",\n containerScrollOffset,\n index\n }: {\n align?: Align;\n containerScrollOffset: number;\n index: number;\n }) => {\n let scrollOffset = getOffsetForIndex({\n align,\n cachedBounds,\n containerScrollOffset,\n containerSize,\n index,\n itemCount,\n itemSize\n });\n\n if (containerElement) {\n scrollOffset = adjustScrollOffsetForRtl({\n containerElement,\n direction,\n isRtl,\n scrollOffset\n });\n\n if (typeof containerElement.scrollTo !== \"function\") {\n // Special case for environments like jsdom that don't implement scrollTo\n const next = getStartStopIndices(scrollOffset);\n if (next[0] !== startIndex || next[1] !== stopIndex) {\n setIndices(next);\n }\n }\n\n return scrollOffset;\n }\n }\n );\n\n return {\n getCellBounds,\n getEstimatedSize,\n scrollToIndex,\n startIndex,\n stopIndex\n };\n}\n","import { useMemo, useState, type CSSProperties } from \"react\";\nimport { parseNumericStyleValue } from \"../utils/parseNumericStyleValue\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\n\nexport function useResizeObserver({\n box,\n defaultHeight,\n defaultWidth,\n disabled: disabledProp,\n element,\n mode,\n style\n}: {\n box?: ResizeObserverBoxOptions;\n defaultHeight?: number;\n defaultWidth?: number;\n disabled?: boolean;\n element: HTMLElement | null;\n mode?: \"only-height\" | \"only-width\";\n style?: CSSProperties;\n}) {\n const { styleHeight, styleWidth } = useMemo(\n () => ({\n styleHeight: parseNumericStyleValue(style?.height),\n styleWidth: parseNumericStyleValue(style?.width)\n }),\n [style?.height, style?.width]\n );\n\n const [state, setState] = useState<{\n height: number | undefined;\n width: number | undefined;\n }>({\n height: defaultHeight,\n width: defaultWidth\n });\n\n const disabled =\n disabledProp ||\n (mode === \"only-height\" && styleHeight !== undefined) ||\n (mode === \"only-width\" && styleWidth !== undefined) ||\n (styleHeight !== undefined && styleWidth !== undefined);\n\n useIsomorphicLayoutEffect(() => {\n if (element === null || disabled) {\n return;\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { contentRect, target } = entry;\n if (element === target) {\n setState((prevState) => {\n if (\n prevState.height === contentRect.height &&\n prevState.width === contentRect.width\n ) {\n return prevState;\n }\n\n return {\n height: contentRect.height,\n width: contentRect.width\n };\n });\n }\n }\n });\n resizeObserver.observe(element, { box });\n\n return () => {\n resizeObserver?.unobserve(element);\n };\n }, [box, disabled, element, styleHeight, styleWidth]);\n\n return useMemo(\n () => ({\n height: styleHeight ?? state.height,\n width: styleWidth ?? state.width\n }),\n [state, styleHeight, styleWidth]\n );\n}\n","import { assert } from \"../utils/assert\";\nimport type { SizeFunction } from \"./types\";\n\nexport function useItemSize<Props extends object>({\n containerSize,\n itemSize: itemSizeProp\n}: {\n containerSize: number;\n itemSize: number | string | SizeFunction<Props>;\n}) {\n let itemSize: number | SizeFunction<Props>;\n switch (typeof itemSizeProp) {\n case \"string\": {\n assert(\n itemSizeProp.endsWith(\"%\"),\n `Invalid item size: \"${itemSizeProp}\"; string values must be percentages (e.g. \"100%\")`\n );\n assert(\n containerSize !== undefined,\n \"Container size must be defined if a percentage item size is specified\"\n );\n\n itemSize = (containerSize * parseInt(itemSizeProp)) / 100;\n break;\n }\n default: {\n itemSize = itemSizeProp;\n break;\n }\n }\n\n return itemSize;\n}\n","import { useCallback, useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\n\n// Forked from useEventCallback (usehooks-ts)\nexport function useStableCallback<Args, Return>(\n fn: (args: Args) => Return\n): (args: Args) => Return {\n const ref = useRef<typeof fn>(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n\n useIsomorphicLayoutEffect(() => {\n ref.current = fn;\n }, [fn]);\n\n return useCallback((args: Args) => ref.current?.(args), [ref]) as (\n args: Args\n ) => Return;\n}\n","import type { Align } from \"../types\";\nimport { getEstimatedSize } from \"./getEstimatedSize\";\nimport type { CachedBounds, SizeFunction } from \"./types\";\n\nexport function getOffsetForIndex<Props extends object>({\n align,\n cachedBounds,\n index,\n itemCount,\n itemSize,\n containerScrollOffset,\n containerSize\n}: {\n align: Align;\n cachedBounds: CachedBounds;\n index: number;\n itemCount: number;\n itemSize: number | SizeFunction<Props>;\n containerScrollOffset: number;\n containerSize: number;\n}) {\n const estimatedTotalSize = getEstimatedSize({\n cachedBounds,\n itemCount,\n itemSize\n });\n\n const bounds = cachedBounds.get(index);\n const maxOffset = Math.max(\n 0,\n Math.min(estimatedTotalSize - containerSize, bounds.scrollOffset)\n );\n const minOffset = Math.max(\n 0,\n bounds.scrollOffset - containerSize + bounds.size\n );\n\n if (align === \"smart\") {\n if (\n containerScrollOffset >= minOffset &&\n containerScrollOffset <= maxOffset\n ) {\n align = \"auto\";\n } else {\n align = \"center\";\n }\n }\n\n switch (align) {\n case \"start\": {\n return maxOffset;\n }\n case \"end\": {\n return minOffset;\n }\n case \"center\": {\n if (bounds.scrollOffset <= containerSize / 2) {\n // Too near the beginning to center-align\n return 0;\n } else if (\n bounds.scrollOffset + bounds.size / 2 >=\n estimatedTotalSize - containerSize / 2\n ) {\n // Too near the end to center-align\n return estimatedTotalSize - containerSize;\n } else {\n return bounds.scrollOffset + bounds.size / 2 - containerSize / 2;\n }\n }\n case \"auto\":\n default: {\n if (\n containerScrollOffset >= minOffset &&\n containerScrollOffset <= maxOffset\n ) {\n return containerScrollOffset;\n } else if (containerScrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n }\n}\n","import { useMemo } from \"react\";\n\nexport function useMemoizedObject<Type extends object>(\n unstableObject: Type\n): Type {\n return useMemo(() => {\n return unstableObject;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, Object.values(unstableObject));\n}\n","import { assert } from \"./assert\";\n\nexport function shallowCompare<Type extends object>(\n a: Type | undefined,\n b: Type | undefined\n) {\n if (a === b) {\n return true;\n }\n\n if (!!a !== !!b) {\n return false;\n }\n\n assert(a !== undefined);\n assert(b !== undefined);\n\n if (Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n\n for (const key in a) {\n if (!Object.is(b[key], a[key])) {\n return false;\n }\n }\n\n return true;\n}\n","import type { CSSProperties } from \"react\";\nimport { shallowCompare } from \"./shallowCompare\";\n\n// Custom comparison function for React.memo()\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://react.dev/reference/react/memo#memo\nexport function arePropsEqual(\n prevProps: { ariaAttributes: object; style: CSSProperties },\n nextProps: { ariaAttributes: object; style: CSSProperties }\n): boolean {\n const {\n ariaAttributes: prevAriaAttributes,\n style: prevStyle,\n ...prevRest\n } = prevProps;\n const {\n ariaAttributes: nextAriaAttributes,\n style: nextStyle,\n ...nextRest\n } = nextProps;\n\n return (\n shallowCompare(prevAriaAttributes, nextAriaAttributes) &&\n shallowCompare(prevStyle, nextStyle) &&\n shallowCompare(prevRest, nextRest)\n );\n}\n"],"names":["Block","children","className","rest","ErrorBoundary","jsx","parseNumericStyleValue","value","endsWith","parseFloat","cachedRTLResult","adjustScrollOffsetForRtl","containerElement","direction","isRtl","scrollOffset","recalculate","outerDiv","document","createElement","outerStyle","style","width","height","overflow","innerDiv","innerStyle","appendChild","body","scrollLeft","removeChild","getRTLOffsetType","clientWidth","scrollWidth","assert","expectedCondition","message","console","error","Error","getEstimatedSize","cachedBounds","itemCount","itemSize","bounds","get","size","getStartStopIndices","containerScrollOffset","containerSize","overscanCount","maxIndex","startIndex","stopIndex","currentIndex","Math","max","min","useCachedBounds","itemProps","useMemo","cache","Map","index","set","previousRowBounds","createCachedBounds","useVirtualizer","containerStyle","defaultContainerSize","itemSizeProp","onResize","indices","setIndices","useState","box","defaultHeight","defaultWidth","disabled","disabledProp","element","mode","styleHeight","styleWidth","state","setState","useIsomorphicLayoutEffect","resizeObserver","ResizeObserver","entries","entry","contentRect","target","prevState","observe","unobserve","useResizeObserver","prevSizeRef","useRef","parseInt","useItemSize","useLayoutEffect","prevSize","current","getCellBounds","useCallback","getEstimatedSizeUtil","getStartStopIndicesUtil","scrollTop","onScroll","prev","next","addEventListener","removeEventListener","scrollToIndex","fn","ref","args","useStableCallback","align","estimatedTotalSize","maxOffset","minOffset","getOffsetForIndex","scrollTo","useMemoizedObject","unstableObject","Object","values","shallowCompare","a","b","keys","length","key","is","arePropsEqual","prevProps","nextProps","ariaAttributes","prevAriaAttributes","prevStyle","prevRest","nextAriaAttributes","nextStyle","nextRest"],"mappings":"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"}
|