# InfiniteScrolling ## Description BitInfiniteScrolling is a container that enables scrolling through a list of items infinitely as long as there are items to fetch and render. ## Parameters | Name | Type | Default Value | Description | | :--- | :--- | :------------ | :---------- | | ChildContent | `RenderFragment<TItem>?` | null | The custom template to render each item. | | EmptyTemplate | `RenderFragment?` | null | The custom template to render when there is no item available. | | ItemsProvider | `BitInfiniteScrollingItemsProvider<TItem>?` | null | The item provider function that will be called when scrolling ends. | | ItemTemplate | `RenderFragment<TItem>?` | null | Alias for ChildContent. | | LastElementClass | `string?` | null | The CSS class of the last element that triggers the loading. | | LastElementHeight | `string?` | null | The height of the last element that triggers the loading. | | LastElementStyle | `string?` | null | The CSS style of the last element that triggers the loading. | | LoadingTemplate | `RenderFragment?` | null | The custom template to render while loading the new items. | | Preload | `bool` | null | Pre-loads the data at the initialization of the component. Useful in prerendering mode. | | ScrollerSelector | `string?` | null | The CSS selector of the scroll container, by default the root element of the component is selected for this purpose. | | Threshold | `decimal?` | null | The threshold parameter for the IntersectionObserver that specifies a ratio of intersection area to total bounding box area of the last element. | | AriaLabel | `string?` | null | Gets or sets the accessible label for the component, used by assistive technologies. | | Class | `string?` | null | Gets or sets the CSS class name(s) to apply to the rendered element. | | Dir | `BitDir?` | null | Gets or sets the text directionality for the component's content. | | ForceAnimation | `bool` | false | Gets or sets a value indicating whether the component's animations play at their full duration even when reduced motion is requested. | | HtmlAttributes | `Dictionary<string, object>` | new Dictionary<string, object>() | Captures additional HTML attributes to be applied to the rendered element, in addition to the component's parameters. | | Id | `string?` | null | Gets or sets the unique identifier for the component's root element. | | IsEnabled | `bool` | true | Gets or sets a value indicating whether the component is enabled and can respond to user interaction. | | Style | `string?` | null | Gets or sets the CSS style string to apply to the rendered element. | | TabIndex | `string?` | null | Gets or sets the tab order index for the component when navigating with the keyboard. | | Visibility | `BitVisibility` | BitVisibility.Visible | Gets or sets the visibility state (visible, hidden, or collapsed) of the component. | ## Public Members | Name | Type | Default Value | Description | | :--- | :--- | :------------ | :---------- | | RefreshDataAsync | `Func<Task>` | | Refreshes the items and re-renders them from scratch. | | UniqueId | `Guid` | Guid.NewGuid() | Gets the readonly unique identifier for the component's root element, assigned when the component instance is constructed. | | RootElement | `ElementReference` | | Gets the reference to the root HTML element associated with this component. | ## Enums ### BitVisibility Enum | Name | Value | Description | | :--- | :--- | :---------- | | Visible | 0 | The content of the component is visible. | | Hidden | 1 | The content of the component is hidden, but the space it takes on the page remains (visibility:hidden). | | Collapsed | 2 | The component is hidden (display:none). | ### BitDir Enum | Name | Value | Description | | :--- | :--- | :---------- | | Ltr | 0 | Ltr (left to right) is to be used for languages that are written from the left to the right (like English). | | Rtl | 1 | Rtl (right to left) is to be used for languages that are written from the right to the left (like Arabic). | | Auto | 2 | Auto lets the user agent decide. It uses a basic algorithm as it parses the characters inside the element until it finds a character with a strong directionality, then applies that directionality to the whole element. | ## Examples \n**Basic**: ```razor
Item @item
``` ```csharp private async ValueTask> LoadBasicItems(BitInfiniteScrollingItemsProviderRequest request) { if (request.Skip > 200) return []; await Task.Delay(1000); return Enumerable.Range(request.Skip, 20); } ``` \n**EmptyTemplate**: ```razor
--- No item ---
``` ```csharp private async ValueTask> LoadEmptyItems(BitInfiniteScrollingItemsProviderRequest request) { await Task.Delay(2000); return []; } ``` \n**Advanced**: ```razor
Item @item
``` ```csharp private async ValueTask> LoadAdvancedItems(BitInfiniteScrollingItemsProviderRequest request) { await Task.Delay(1000); return Enumerable.Range(request.Skip, 50); } ```