lightdarkdefaultcompact
Getting StartedInstallationChangelogSupportGithubFrameworksAngularVueReactDemosFoundationThemesTypographyIconsPopoversInternationalizationDrag and DropKeyboard NavigationLayoutGetting StartedBlockInlineGridComponentsAccordionAlertAlert GroupBadgeBreadcrumbButtonButton GroupButton ExpandButton HandleButton IconButton ResizeButton SortCardChatCheckboxColorData GridDateDialogDividerDrawerDropdownFileFormat DatetimeFormat NumberFormsForm InteractionsForm ValidationHeaderInputMenuMonthNavPaginationPasswordProgress BarProgress CircleProgress DotRadioRangeRatingSearchSelectStepperSwitchTabsTagTextareaTimeToastToggletipTooltipTreeData GridGetting StartedFooterPlaceholderAsyncResponsiveHeightPaginationBordersHoverLayerRange SelectionCSVColumn AlignmentColumn WidthColumn FixedColumn StickyColumn VisibilityColumn GroupsColumn SpanColumn ResizeDraggable ColumnsDraggable RowsRow HeaderRow Multi SelectRow Single SelectRow HeightRow ActionRow Action BulkRow StickyRow StripeRow FixedRow SortRow Groups

Grid Draggable Rows

Draggable Rows

Column 0Column 1Column 2Column 3Column 4Cell 0-0Cell 0-1Cell 0-2Cell 0-3Cell 0-4Cell 1-0Cell 1-1Cell 1-2Cell 1-3Cell 1-4Cell 2-0Cell 2-1Cell 2-2Cell 2-3Cell 2-4Cell 3-0Cell 3-1Cell 3-2Cell 3-3Cell 3-4Cell 4-0Cell 4-1Cell 4-2Cell 4-3Cell 4-4Cell 5-0Cell 5-1Cell 5-2Cell 5-3Cell 5-4Cell 6-0Cell 6-1Cell 6-2Cell 6-3Cell 6-4
code
<script type="module">
  import '@blueprintui/grid/include/core.js';
  import '@blueprintui/grid/include/keynav.js';
  import '@blueprintui/grid/include/draggable-row.js';
  import '@blueprintui/components/include/button-handle.js';

  document.querySelector('bp-grid').addEventListener('bp-crane-drop', (e) => {
    e.detail.target.parentElement.insertBefore(e.detail.source, e.detail.target);
  });
</script>
<section bp-layout="block gap:xs">
  <bp-grid column-layout="flex" row-style="border" aria-label="draggable row datagrid demo" height="390" style="max-width: 800px">
    <bp-grid-header>
      <bp-grid-column width="max-content"></bp-grid-column>

      <bp-grid-column>Column 0</bp-grid-column>

      <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-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 0-0</bp-grid-cell>
      <bp-grid-cell>Cell 0-1</bp-grid-cell>
      <bp-grid-cell>Cell 0-2</bp-grid-cell>
      <bp-grid-cell>Cell 0-3</bp-grid-cell>
      <bp-grid-cell>Cell 0-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 1-0</bp-grid-cell>
      <bp-grid-cell>Cell 1-1</bp-grid-cell>
      <bp-grid-cell>Cell 1-2</bp-grid-cell>
      <bp-grid-cell>Cell 1-3</bp-grid-cell>
      <bp-grid-cell>Cell 1-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 2-0</bp-grid-cell>
      <bp-grid-cell>Cell 2-1</bp-grid-cell>
      <bp-grid-cell>Cell 2-2</bp-grid-cell>
      <bp-grid-cell>Cell 2-3</bp-grid-cell>
      <bp-grid-cell>Cell 2-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 3-0</bp-grid-cell>
      <bp-grid-cell>Cell 3-1</bp-grid-cell>
      <bp-grid-cell>Cell 3-2</bp-grid-cell>
      <bp-grid-cell>Cell 3-3</bp-grid-cell>
      <bp-grid-cell>Cell 3-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 4-0</bp-grid-cell>
      <bp-grid-cell>Cell 4-1</bp-grid-cell>
      <bp-grid-cell>Cell 4-2</bp-grid-cell>
      <bp-grid-cell>Cell 4-3</bp-grid-cell>
      <bp-grid-cell>Cell 4-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 5-0</bp-grid-cell>
      <bp-grid-cell>Cell 5-1</bp-grid-cell>
      <bp-grid-cell>Cell 5-2</bp-grid-cell>
      <bp-grid-cell>Cell 5-3</bp-grid-cell>
      <bp-grid-cell>Cell 5-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 6-0</bp-grid-cell>
      <bp-grid-cell>Cell 6-1</bp-grid-cell>
      <bp-grid-cell>Cell 6-2</bp-grid-cell>
      <bp-grid-cell>Cell 6-3</bp-grid-cell>
      <bp-grid-cell>Cell 6-4</bp-grid-cell>
    </bp-grid-row>
  </bp-grid>
</section>

Draggable Rows Multi Grid

Column 0Column 1Column 2Column 3Column 4Cell 0-0Cell 0-1Cell 0-2Cell 0-3Cell 0-4Cell 1-0Cell 1-1Cell 1-2Cell 1-3Cell 1-4Cell 2-0Cell 2-1Cell 2-2Cell 2-3Cell 2-4Cell 3-0Cell 3-1Cell 3-2Cell 3-3Cell 3-4Cell 4-0Cell 4-1Cell 4-2Cell 4-3Cell 4-4Cell 5-0Cell 5-1Cell 5-2Cell 5-3Cell 5-4Cell 6-0Cell 6-1Cell 6-2Cell 6-3Cell 6-4drop rowsColumn 0Column 1Column 2Column 3Column 4Cell 0-0Cell 0-1Cell 0-2Cell 0-3Cell 0-4Cell 1-0Cell 1-1Cell 1-2Cell 1-3Cell 1-4Cell 2-0Cell 2-1Cell 2-2Cell 2-3Cell 2-4Cell 3-0Cell 3-1Cell 3-2Cell 3-3Cell 3-4Cell 4-0Cell 4-1Cell 4-2Cell 4-3Cell 4-4Cell 5-0Cell 5-1Cell 5-2Cell 5-3Cell 5-4Cell 6-0Cell 6-1Cell 6-2Cell 6-3Cell 6-4drop rows
code
<script type="module">
  import '@blueprintui/grid/include/core.js';
  import '@blueprintui/grid/include/keynav.js';
  import '@blueprintui/grid/include/placeholder.js';
  import '@blueprintui/grid/include/draggable-row.js';
  import '@blueprintui/components/include/button-handle.js';

  document.querySelector('#draggable-rows-multi-grid').addEventListener('bp-crane-drop', (e) => {
    e.detail.target.parentElement.insertBefore(e.detail.source, e.detail.target);
  });
</script>
<section id="draggable-rows-multi-grid" bp-layout="block gap:xs">
  <bp-grid column-layout="flex" row-style="border" aria-label="draggable row datagrid demo" height="390" style="max-width: 800px">
    <bp-grid-header>
      <bp-grid-column width="max-content"></bp-grid-column>

      <bp-grid-column>Column 0</bp-grid-column>

      <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-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 0-0</bp-grid-cell>
      <bp-grid-cell>Cell 0-1</bp-grid-cell>
      <bp-grid-cell>Cell 0-2</bp-grid-cell>
      <bp-grid-cell>Cell 0-3</bp-grid-cell>
      <bp-grid-cell>Cell 0-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 1-0</bp-grid-cell>
      <bp-grid-cell>Cell 1-1</bp-grid-cell>
      <bp-grid-cell>Cell 1-2</bp-grid-cell>
      <bp-grid-cell>Cell 1-3</bp-grid-cell>
      <bp-grid-cell>Cell 1-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 2-0</bp-grid-cell>
      <bp-grid-cell>Cell 2-1</bp-grid-cell>
      <bp-grid-cell>Cell 2-2</bp-grid-cell>
      <bp-grid-cell>Cell 2-3</bp-grid-cell>
      <bp-grid-cell>Cell 2-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 3-0</bp-grid-cell>
      <bp-grid-cell>Cell 3-1</bp-grid-cell>
      <bp-grid-cell>Cell 3-2</bp-grid-cell>
      <bp-grid-cell>Cell 3-3</bp-grid-cell>
      <bp-grid-cell>Cell 3-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 4-0</bp-grid-cell>
      <bp-grid-cell>Cell 4-1</bp-grid-cell>
      <bp-grid-cell>Cell 4-2</bp-grid-cell>
      <bp-grid-cell>Cell 4-3</bp-grid-cell>
      <bp-grid-cell>Cell 4-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 5-0</bp-grid-cell>
      <bp-grid-cell>Cell 5-1</bp-grid-cell>
      <bp-grid-cell>Cell 5-2</bp-grid-cell>
      <bp-grid-cell>Cell 5-3</bp-grid-cell>
      <bp-grid-cell>Cell 5-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 6-0</bp-grid-cell>
      <bp-grid-cell>Cell 6-1</bp-grid-cell>
      <bp-grid-cell>Cell 6-2</bp-grid-cell>
      <bp-grid-cell>Cell 6-3</bp-grid-cell>
      <bp-grid-cell>Cell 6-4</bp-grid-cell>
    </bp-grid-row>
    <bp-grid-placeholder>drop rows</bp-grid-placeholder>
  </bp-grid>

  <bp-grid column-layout="flex" row-style="border" aria-label="draggable row datagrid demo" height="390" style="max-width: 800px">
    <bp-grid-header>
      <bp-grid-column width="max-content"></bp-grid-column>

      <bp-grid-column>Column 0</bp-grid-column>

      <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-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 0-0</bp-grid-cell>
      <bp-grid-cell>Cell 0-1</bp-grid-cell>
      <bp-grid-cell>Cell 0-2</bp-grid-cell>
      <bp-grid-cell>Cell 0-3</bp-grid-cell>
      <bp-grid-cell>Cell 0-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 1-0</bp-grid-cell>
      <bp-grid-cell>Cell 1-1</bp-grid-cell>
      <bp-grid-cell>Cell 1-2</bp-grid-cell>
      <bp-grid-cell>Cell 1-3</bp-grid-cell>
      <bp-grid-cell>Cell 1-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 2-0</bp-grid-cell>
      <bp-grid-cell>Cell 2-1</bp-grid-cell>
      <bp-grid-cell>Cell 2-2</bp-grid-cell>
      <bp-grid-cell>Cell 2-3</bp-grid-cell>
      <bp-grid-cell>Cell 2-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 3-0</bp-grid-cell>
      <bp-grid-cell>Cell 3-1</bp-grid-cell>
      <bp-grid-cell>Cell 3-2</bp-grid-cell>
      <bp-grid-cell>Cell 3-3</bp-grid-cell>
      <bp-grid-cell>Cell 3-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 4-0</bp-grid-cell>
      <bp-grid-cell>Cell 4-1</bp-grid-cell>
      <bp-grid-cell>Cell 4-2</bp-grid-cell>
      <bp-grid-cell>Cell 4-3</bp-grid-cell>
      <bp-grid-cell>Cell 4-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 5-0</bp-grid-cell>
      <bp-grid-cell>Cell 5-1</bp-grid-cell>
      <bp-grid-cell>Cell 5-2</bp-grid-cell>
      <bp-grid-cell>Cell 5-3</bp-grid-cell>
      <bp-grid-cell>Cell 5-4</bp-grid-cell>
    </bp-grid-row>

    <bp-grid-row>
      <bp-grid-cell>
        <bp-button-handle></bp-button-handle>
      </bp-grid-cell>
      <bp-grid-cell>Cell 6-0</bp-grid-cell>
      <bp-grid-cell>Cell 6-1</bp-grid-cell>
      <bp-grid-cell>Cell 6-2</bp-grid-cell>
      <bp-grid-cell>Cell 6-3</bp-grid-cell>
      <bp-grid-cell>Cell 6-4</bp-grid-cell>
    </bp-grid-row>
    <bp-grid-placeholder>drop rows</bp-grid-placeholder>
  </bp-grid>
</section>

Install

NPM

// npm package
import '@blueprintui/grid/include/core.js';
import '@blueprintui/grid/include/draggable-rows.js';

CDN

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

Accessibility

bp-grid

Properties

NameTypesDescription
i18nset default aria/i18n strings
heightstringmax height for grid container
columnLayout'fixed' | 'flex'column layout determines initial column width calculation
rowStylePermutations< 'hover' | 'stripe' | 'border' >determines the visual style for rows
columnStylePermutations<'hover' | 'border'>determines the visual style for columns
selectable'multi' | 'single' | nullinitializes grid to appropriate aria/a11y settings for selections
scrollLockbooleandisables scroll container
layer'flat' | 'container'determines the visual layer style (container vs flat for nesting)
gridHTMLElement[][]
rolestring

Attributes

NameTypesDescription
i18nset default aria/i18n strings
heightstringmax height for grid container
column-layout'fixed' | 'flex'column layout determines initial column width calculation
row-stylePermutations< 'hover' | 'stripe' | 'border' >determines the visual style for rows
column-stylePermutations<'hover' | 'border'>determines the visual style for columns
selectable'multi' | 'single' | nullinitializes grid to appropriate aria/a11y settings for selections
scroll-lockbooleandisables scroll container
layer'flat' | 'container'determines the visual layer style (container vs flat for nesting)
range-selectionboolean

CSS Properties

NameTypesDescription
--background
--body-height
--scrollbar-background
--scrollbar-thumb-background
--column-height
--row-height
--scroll-padding-top
--row-content-visibility
--border-width