SuperGrid

v1.0.0 · Last updated April 2026

Flexible grid layouts with masonry support, drag-and-drop reordering, responsive breakpoints, and HTMX-powered infinite scroll.

# Basic Usage

HTML
<div data-az-component="super-grid"
     data-az-columns="3"
     data-az-gap="24">
  
  <div data-az-grid-item>Card 1</div>
  <div data-az-grid-item>Card 2</div>
  <div data-az-grid-item>Card 3</div>
  <div data-az-grid-item>Card 4</div>
  <div data-az-grid-item>Card 5</div>
  <div data-az-grid-item>Card 6</div>
  
</div>

Grid Attributes

Attribute Type Default Description
data-az-columns number | "auto" 3 Number of columns or "auto" for auto-fit
data-az-gap number 16 Gap between items in pixels
data-az-gap-x number Horizontal gap (overrides data-az-gap)
data-az-gap-y number Vertical gap (overrides data-az-gap)
data-az-min-width number 250 Min item width for auto columns
data-az-layout string "grid" "grid" | "masonry"
data-az-animate boolean true Animate layout changes

# Responsive Breakpoints

Define different column counts for each breakpoint.

HTML
<div data-az-component="super-grid"
     data-az-columns="1"
     data-az-columns-sm="2"
     data-az-columns-md="3"
     data-az-columns-lg="4"
     data-az-columns-xl="5">
  ...
</div>

Breakpoint Values

Suffix Min Width Typical Device
(none) 0px Mobile (default)
-sm 640px Large phones
-md 768px Tablets
-lg 1024px Laptops
-xl 1280px Desktops
-2xl 1536px Large desktops

# Masonry Layout

Pinterest-style layout that fills vertical gaps.

HTML
<div data-az-component="super-grid"
     data-az-layout="masonry"
     data-az-columns="3"
     data-az-gap="16">
  
  <!-- Items with varying heights -->
  <div data-az-grid-item>Short content</div>
  <div data-az-grid-item>
    Longer content that takes
    multiple lines and creates
    a taller card
  </div>
  <div data-az-grid-item>Medium</div>
  
</div>

Note: Masonry recalculates on window resize and when items are added/removed. For dynamic content, call SuperGrid.relayout() after DOM changes.

# Drag and Drop

Enable drag-and-drop reordering with persistence support.

HTML
<div data-az-component="super-grid"
     data-az-columns="3"
     data-az-draggable="true"
     data-az-drag-handle=".drag-handle"
     data-az-save-order="/api/widgets/order">
  
  <div data-az-grid-item data-az-item-id="widget-1">
    <div class="drag-handle">⋮⋮</div>
    Widget 1
  </div>
  
  <div data-az-grid-item data-az-item-id="widget-2">
    <div class="drag-handle">⋮⋮</div>
    Widget 2
  </div>
  
</div>

Drag Attributes

Attribute Description
data-az-draggable Enable drag-and-drop (boolean)
data-az-drag-handle CSS selector for drag handle element
data-az-save-order URL to POST new order after reorder
data-az-drag-group Allow dragging between grids with same group
data-az-item-id Unique ID for each item (on grid-item)

# Infinite Scroll

Load more items automatically as user scrolls.

HTML
<div data-az-component="super-grid"
     data-az-columns="3"
     data-az-infinite="true"
     data-az-infinite-url="/api/items"
     data-az-infinite-threshold="200">
  
  <!-- Initial items -->
  <div data-az-grid-item>...</div>
  
</div>

<!-- Loading indicator -->
<div data-az-infinite-loader class="hidden">
  Loading more...
</div>

<!-- End message -->
<div data-az-infinite-end class="hidden">
  No more items
</div>

Server Response

Server returns HTML fragment
<!-- More grid items -->
<div data-az-grid-item>Item 21</div>
<div data-az-grid-item>Item 22</div>
<div data-az-grid-item>Item 23</div>

<!-- Signal no more items -->
<script>SuperGrid.endInfinite()</script>

# Filtering & Search

Client-side filtering with animated transitions.

HTML
<!-- Filter controls -->
<div data-az-grid-filters="products-grid">
  <button data-az-filter="*" class="active">All</button>
  <button data-az-filter=".electronics">Electronics</button>
  <button data-az-filter=".clothing">Clothing</button>
  <button data-az-filter=".furniture">Furniture</button>
</div>

<!-- Search -->
<input type="search" data-az-grid-search="products-grid">

<!-- Grid -->
<div data-az-component="super-grid"
     data-az-id="products-grid"
     data-az-columns="4">
  
  <div data-az-grid-item class="electronics" data-az-search-text="iPhone Pro">
    iPhone Pro
  </div>
  <div data-az-grid-item class="clothing" data-az-search-text="Winter Jacket">
    Winter Jacket
  </div>
  
</div>

# Events

Event Description Detail
az:grid:layout Layout calculation complete { columns, items }
az:grid:reorder Item order changed via drag { item, from, to, order }
az:grid:filter Filter applied { filter, visible, hidden }
az:grid:search Search query changed { query, matches }
az:grid:load Infinite scroll loaded items { page, items }
az:grid:end No more items to load { total }