Skip to content

v2.0.0 — Icon component, CrmKanban & CRM pagination rework

Choose a tag to compare

@05bmckay 05bmckay released this 29 May 18:19
· 41 commits to main since this release

⚠️ Breaking

  • CrmDataTable / CrmKanban pagination model changed. They now fetch one
    batch (pageLength, default 100) and do search / sort / filter / pagination
    client-side by default
    , auto-refetching server-side beyond one batch and
    showing a "first N of M" note. serverSide remains an opt-in for very large
    datasets. Previously serverSide defaulted to false with no batch strategy
    and server-side page 2 came back blank
    — callers relying on the old
    cursor-paged default should review this release.

✨ New

  • Icon — a drop-in superset of HubSpot's native <Icon>. When a request
    is fully native-expressible (whitelisted name, a semantic color, and an
    sm/md/lg size) it delegates to the real <Icon> (auto-sizing,
    color="inherit", screen-reader semantics). Otherwise it renders a registered
    SVG glyph as a data-URI <Image>, lifting all three native limits:
    unregistered/custom glyphs, any CSS color, and xsxl tokens or a pixel
    size. Ships with an icon registry (ICONS, ICON_NAMES,
    NATIVE_ICON_NAME_LIST, ~248 glyphs), helpers (makeIconDataUri,
    svgToIconEntry), exported types, and a build:icons scrape/generate
    pipeline.
  • CrmKanban — the board analog of CrmDataTable. Fetches one batch and
    groups / searches / filters / sorts client-side; stages optional
    (auto-derives from the batch). Same serverSide opt-in and "first N of M"
    note.

🐛 Fixes & changes

  • CRM cursor pagination: a stable hs_object_id sort tiebreaker makes
    after-cursor paging deterministic (fixes the blank/short page-2 bug), and
    the new client-side model sidesteps an upstream useCrmSearch nextPage
    off-by-one (repro in docs/).
  • CrmLookupSelect: picked options stay valid after live results change;
    loadingOption shows during the debounce window and noResultsOption only
    after a query settles (no "no results" flash while typing).
  • DataTable / Kanban: showClearFiltersButton now follows showFilterBadges
    — hiding the chips hides "Clear all" by default too (opt back in explicitly).
    (#10) The DataTable record count now rides the title row when the toolbar has
    no left-hand content.
  • FormBuilder: repeater reorder controls always render (disabled at the
    ends) and expose a disabled flag to renderMoveUp/renderMoveDown;
    tightened add-icon spacing.
  • DataTable / Kanban / Feed: shared Tile-wrapped empty & loading states (no
    layout shift; loading uses the building illustration).

🔧 Internal

  • Extracted testable modules (query / validation / dependencies / interaction
    hooks / edit-validation) behind a vitest harness — 68 unit tests, no
    public API change.

Full changelog: see CHANGELOG.md.