v2.0.0 — Icon component, CrmKanban & CRM pagination rework
⚠️ 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.serverSideremains an opt-in for very large
datasets. PreviouslyserverSidedefaulted 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 (whitelistedname, a semanticcolor, and an
sm/md/lgsize) 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, andxs–xltokens or a pixel
size. Ships with an icon registry (ICONS,ICON_NAMES,
NATIVE_ICON_NAME_LIST, ~248 glyphs), helpers (makeIconDataUri,
svgToIconEntry), exported types, and abuild:iconsscrape/generate
pipeline.CrmKanban— the board analog ofCrmDataTable. Fetches one batch and
groups / searches / filters / sorts client-side;stagesoptional
(auto-derives from the batch). SameserverSideopt-in and "first N of M"
note.
🐛 Fixes & changes
- CRM cursor pagination: a stable
hs_object_idsort tiebreaker makes
after-cursor paging deterministic (fixes the blank/short page-2 bug), and
the new client-side model sidesteps an upstreamuseCrmSearchnextPage
off-by-one (repro indocs/). - CrmLookupSelect: picked options stay valid after live results change;
loadingOptionshows during the debounce window andnoResultsOptiononly
after a query settles (no "no results" flash while typing). - DataTable / Kanban:
showClearFiltersButtonnow followsshowFilterBadges
— 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 adisabledflag torenderMoveUp/renderMoveDown;
tightened add-icon spacing. - DataTable / Kanban / Feed: shared Tile-wrapped empty & loading states (no
layout shift; loading uses thebuildingillustration).
🔧 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.