Skip to content

Releases: 05bmckay/hs-uix

v2.1.0 — Calendar component and shared collection tooling

03 Jun 18:51

Choose a tag to compare

Features

  • Calendar: Add hs-uix/calendar, a presentational calendar with Month, Week, Day, and Agenda views; Today/previous/next/view toolbar; search and filter support; click-to-open event overlays; multi-day event rendering; overflow popovers; all-day/time-grid support; range-loading hooks; render override slots; labels; and calendar.d.ts.
  • Calendar: Add robust date coercion and timezone-aware rendering, including timeZone, defaultTimeZone, onTimeZoneChange, showTimeZoneSelect, timeZoneOptions, and date utility exports for zoned formatting.
  • Common components: Add the Icon wrapper plus icon registry helpers (ICONS, ICON_NAMES, NATIVE_ICON_NAME_LIST, makeIconDataUri, svgToIconEntry) and a build:icons pipeline.
  • Common components: Export shared collection toolbar primitives: CollectionToolbar, CollectionFilterControl, ActiveFilterChips, CollectionSortSelect, CollectionCount, and formatCollectionCount.
  • Utils: Export shared query helpers including getEmptyFilterValues, resetFilterValues, and buildActiveFilterChips; filter configs now support emptyValue.

Improvements

  • DataTable: Inline-edit select and multiselect cells now render their dropdowns directly in discrete edit mode instead of requiring an extra click.
  • DataTable: Record counts now sit beside the title when there are no search/filter toolbar controls, avoiding an unnecessary two-line header.
  • DataTable / Kanban / Feed / Calendar: Standardize toolbar, filter chips, clear-all behavior, count alignment, empty states, and loading states across collection-style components.
  • Kanban: Use Feed-style compact transparent sort select in the toolbar.
  • Feed: Add active filter chips, clear/reset behavior, showFilterBadges, showClearFiltersButton, and filter chipLabel support.
  • FormBuilder: Keep repeater reorder controls aligned by always rendering move buttons and disabling invalid directions; tighten repeater add-button spacing.
  • CrmLookupSelect: Preserve selected options as live search results change and improve debounce/loading/no-results states.

CRM fixes

  • CRM search: Add hs_object_id as a stable tiebreaker sort in buildCrmSearchConfig, fixing cursor pagination overlap/short-page behavior.
  • CrmDataTable / CrmKanban: Lazily fetch additional HubSpot CRM cursor pages as the user pages or loads more, while keeping client-side search/sort/filter over loaded batches by default.
  • CrmKanban: Add the board analog of CrmDataTable with optional stage derivation, client-side grouping/search/filter/sort, server-side opt-in, and partial-result messaging.

Internal / tooling

  • Architecture: Move component package sources under src/, remove deprecated workspace package manifests/configs, and build all subpaths from root tsup entries.
  • Tests: Add Vitest coverage for query helpers, CRM adapters, calendar date utilities, form value/validation/dependency helpers, and DataTable edit validation. Current suite: 94 passing tests.

v2.0.1 — Documentation refresh

29 May 19:21

Choose a tag to compare

Documentation-only patch — no code changes. Refreshes the READMEs to match the v2.0.0 public surface:

  • Icon — full section with prop table, native-delegation behavior, the custom-glyph registry (ICONS / ICON_NAMES / NATIVE_ICON_NAME_LIST), and the makeIconDataUri / svgToIconEntry helpers (common-components + root READMEs).
  • CrmLookupSelect — documented and illustrated with a live-search gif; added to the root catalog, "what's inside", and import examples.
  • CrmDataTable / CrmKanban — new crmSearchAdapters section in the utils README covering the client-side-batch pagination model, plus a "CRM data" row in the root catalog.
  • Corrected stale defaults — Kanban columnWidth (280 → 350), filterInlineLimit (2 → 4), searchDebounce (0 → 250); Feed itemContainer (nonetile) and its status/outcome/severity item fields.
  • FormBuilder — documented the repeaterProps reorder interface (including the disabled flag on renderMoveUp / renderMoveDown).

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

29 May 18:19

Choose a tag to compare

⚠️ 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.

v1.6.5

25 Apr 22:47

Choose a tag to compare

Features

  • FormBuilder: Add alwaysEditable field prop — per-field escape hatch that keeps a field editable even when the form-level readOnly is set. Closes #8.
  • FormBuilder: Surface submit-time validation failures via a new onValidationFail({ errors, fields, firstInvalidField }) callback, and add openSectionOnValidationFail to auto-open the accordion section containing the first invalid field. Closes #9.

Docs

  • FormBuilder: Document alwaysEditable, onValidationFail, and openSectionOnValidationFail in the README and prop reference tables.

v1.6.4

25 Apr 22:47

Choose a tag to compare

Features

  • DataTable: Add titled DataTable headers.
  • FormBuilder: Add submitAlign support for single-step button-row alignment.

Bug Fixes

  • DataTable: Keep the row count in the toolbar.

Docs

  • Document new table and form header options.

v1.6.3

29 May 18:18

Choose a tag to compare

  • fix: expand semantic tag matcher coverage

v1.6.2

22 Apr 11:34

Choose a tag to compare

Docs

  • Kanban: Add a full package-level README at packages/kanban/README.md mirroring the DataTable and FormBuilder docs — Quick Start, worked examples (HubSpot Deals preset + metrics, compact lead board, per-stage load more, stage transition prompts via onEnterRequired, selection + bulk actions, KanbanCardActions, sharing a config with DataTable via deriveCardFieldsFromColumns, sorting, server-driven boards), and a complete API reference for Kanban props, KanbanStage, KanbanCardField, KanbanCardActions, filters, sort options, stage meta, metric items, and labels.
  • README: Point the Kanban row in the root README's component table at packages/kanban/README.md (matching how DataTable and FormBuilder are linked).

v1.6.1

22 Apr 11:21

Choose a tag to compare

Docs

  • DataTable: Swap the package-level README over to hs-uix / hs-uix/datatable (was still referencing the legacy hubspot-datatable standalone name), and document onEditStart / onEditCancel, the labels i18n object, filterInlineLimit, showSearch / showSelectionBar, and the renderSelectionBar / renderEmptyState / renderLoadingState / renderErrorState override hooks. Column Definition gains sortOrder, sortComparator, and column-level footer; label is correctly typed as ReactNode; truncate accepts a bare number. GroupBy.label return type corrected to ReactNode.
  • FormBuilder: Swap the package-level README over to hs-uix / hs-uix/form (was still referencing @hs-uix/form), and document maxColumns, showReadOnlyAlert, showInlineAlerts, renderReadOnlyAlert, renderFieldError, defaultCurrency, and the full set of CRM-association field props (objectTypeId, associationLabels, filters, sort).
  • Common Components: Document the HS_TAG_* style constants alongside the existing HS_FONT_FAMILY / HS_TEXT_COLOR / etc. tokens.

Bug Fixes

  • Types: Add missing formatCurrencyCompact and deriveCardFieldsFromColumns declarations to utils.d.ts — the runtime exports were already shipping but TypeScript consumers couldn't import them without @ts-ignore.

v1.6.0

22 Apr 11:07

Choose a tag to compare

Kanban — HubSpot Deals preset with metrics

Features

  • Kanban: Add the new Kanban board package and publish it through the root package plus the hs-uix/kanban subpath export.
  • Common Components: Add reusable UI helpers including AutoTag, AutoStatusTag, AvatarStack, SectionHeader, KeyValueList, StyledText, date presets, and SVG builder utilities.
AvatarStack StyledText
AvatarStack StyledText
  • FormBuilder: Support colSpan: "full" on fields to force a standalone full-width row inside a multi-column section, add a description microcopy line to groups options, and default group labels to a start-cased version of the group key.
  • Utils: Add formatCurrencyCompact for HubSpot-style compact money ($123.6M, $4.2K) and new viewAdapters helpers (deriveCardFieldsFromColumns) for projecting a single DataTable column config into a Kanban cardFields array.

Bug Fixes

  • StyledText: Add a HubSpot-style tag preset with semantic variants (default, success, warning, error/danger, info) so SVG-backed tags render closer to native HubSpot tags.
  • Kanban: Update collapsed stage count badges to use the shared HubSpot-style tag preset instead of ad hoc pill styling.
  • Types/Exports: Sync runtime exports with declaration files for common-components, kanban, SVG helpers, and style constants so published imports match the documented API. Adds FormBuilderGroupOptions to the form type exports.

Docs

  • README: Add root-level documentation for Common Components and Utils, plus updated examples for the new shared component surface.
  • Common Components: Document AvatarStack, StyledText tag presets and semantic variants, date presets, and SVG style constants for release consumers.
  • Utils: Expand the Utils README with formatCurrencyCompact, viewAdapters, and end-to-end examples.

More Kanban presets

Compact lead board Select + load more
Compact lead board preset Select + load more preset

v1.5.1

29 May 18:18

Choose a tag to compare

  • fix: align toolbar controls center and document column description
  • fix: restore DataTable README image assets