lightdarkdefaultcompact
Getting StartedInstallationChangelogSupportGithubIntegrationsAngularVueReactDemosFoundationThemesTypographyIconsPopoversInternationalizationDrag and DropKeyboard NavigationVirtual ListLayoutGetting StartedBlockInlineGridComponentsAccordionAlertAlert GroupAvatarBadgeBreadcrumbButtonButton CopyButton GroupButton ExpandButton HandleButton IconButton ResizeButton SortCardChatCheckboxColorData GridDateDialogDividerDrawerDropdownFileFormat BytesFormat DatetimeFormat NumberFormat Relative TimeFormat TokenFormsForm InteractionsForm ValidationHeaderInputMenuMonthNavNumberPagePaginationPanelPasswordPinProgress BarProgress CircleProgress DotRadioRangeRatingSearchSelectSkeletonStepperSwitchTabsTagTelephoneTextareaTimeToastToggletipTooltipTreeData GridGetting StartedFooterPlaceholderAsyncResponsiveHeightPaginationBordersHoverLayerRange SelectionCSVClipboardColumn AlignmentColumn WidthColumn FixedColumn StickyColumn VisibilityColumn GroupsColumn SpanColumn ResizeDraggable ColumnsDraggable RowsRow HeaderRow Multi SelectRow Single SelectRow HeightRow ActionRow Action BulkRow StickyRow StripeRow FixedRow SortRow GroupsVirtual List

Grid Virtual List

Using the bp-virtual-list component, you can create a virtual list that will only render the items that are visible in the viewport.

Virtual List

column 1column 2column 3column 410,000 rows
code
<bp-grid aria-label="virtual list datagrid" column-style="border" row-style="border">
  <bp-grid-header>
    <bp-grid-column>column 1</bp-grid-column>
    <bp-grid-column>column 2</bp-grid-column>
    <bp-grid-column>column 3</bp-grid-column>
    <bp-grid-column>column 4</bp-grid-column>
  </bp-grid-header>
  <bp-virtual-list height="400px" item-height="48" item-count="10000"></bp-virtual-list>
  <bp-grid-footer> 10,000 rows </bp-grid-footer>
  <template>
    <bp-grid-row>
      <bp-grid-cell></bp-grid-cell>
      <bp-grid-cell></bp-grid-cell>
      <bp-grid-cell></bp-grid-cell>
      <bp-grid-cell></bp-grid-cell>
    </bp-grid-row>
  </template>
</bp-grid>
<script type="module">
  import '@blueprintui/grid/include/core.js';
  import '@blueprintui/grid/include/footer.js';
  import '@blueprintui/grid/include/keynav.js';
  import '@blueprintui/virtual/include/virtual-list.js';

  const list = Array.from({ length: 10_000 }, (_, i) => ({ id: i, name: 'Item ' + i }));
  const grid = document.querySelector('bp-grid[aria-label="virtual list datagrid"]');
  const virtualList = grid.querySelector('bp-virtual-list');
  const template = grid.querySelector('template');

  virtualList.addEventListener('bp-virtual-change', ({ detail: { start, end } }) => {
    virtualList.innerHTML = '';
    virtualList.append(
      ...list.slice(start, end).map((item) => {
        const row = template.content.cloneNode(true);
        row.querySelectorAll('bp-grid-cell').forEach((cell, i) => {
          cell.textContent = i + 1 + '-' + item.id;
        });
        return row;
      })
    );
  });
</script>

Install

NPM

// npm package
import '@blueprintui/grid/include/core.js';
import '@blueprintui/virtual/include/virtual-list.js';

CDN

<script type="module">
  import 'https://cdn.jsdelivr.net/npm/@blueprintui/grid/include/core.js/+esm';
  import 'https://cdn.jsdelivr.net/npm/@blueprintui/virtual/include/virtual-list.js/+esm';
</script>