Skip to content

Releases: datum-cloud/datum-ui

@datum-cloud/datum-ui@0.8.1

22 Apr 03:33
c7fdb98

Choose a tag to compare

Patch Changes

  • abd07f0: Bump cmdk dependency floor from ^1 to ^1.1.1. Within-major range tightening; no behavior change for consumers already on ^1.

  • abd07f0: Bump date-fns peer dependency floor from >=4 to >=4.1.0. v4.1.0 is additive (time-zone support in format/formatISO/formatISO9075/formatRelative/formatRFC3339, plus constructFrom null-arg bugfix). Within-major range tightening; no breaking change.

  • 45e1024: Fix Tailwind v4 CSS resolver recursion on the @datum-cloud/datum-ui/nprogress import.

    Problem

    Consumers importing @datum-cloud/datum-ui/nprogress from a Tailwind v4 stylesheet could hit:

    [@tailwindcss/vite:generate:build] Exceeded maximum recursion depth while
    resolving `nprogress/nprogress.css` in
    `.../node_modules/@datum-cloud/datum-ui/dist/nprogress`
    

    The shipped dist/nprogress/nprogress.css began with @import 'nprogress/nprogress.css'; to pull in the upstream nprogress library styles. Under certain node_modules layouts, Tailwind v4's CSS resolver interpreted that bare specifier as colliding with the file's own containing directory (.../nprogress/nprogress.css) and recursed into itself.

    Fix

    Inline the upstream nprogress@0.2.0 base styles directly into src/components/features/nprogress/nprogress.css. The custom theme overrides (--color-primary bar, spinner, peg) are preserved below the inlined base. Visual output is unchanged.

    No API changes — consumers keep @import '@datum-cloud/datum-ui/nprogress' as-is.

@datum-cloud/datum-ui@0.8.0

17 Apr 22:46
cc39faf

Choose a tag to compare

Minor Changes

  • 8f3aec8: Promote timezone-to-UTC timestamp helpers into the public /utils subpath.

    Added

    • toUTCTimestampStartOfDay(date, timezone) — returns Unix timestamp (seconds) for the start of a day in the given IANA timezone.
    • toUTCTimestampEndOfDay(date, timezone) — returns Unix timestamp (seconds) for the end of a day in the given IANA timezone.

    Both functions are ported verbatim from cloud-portal's vendored app/modules/datum-ui/utils/timezone.ts. Consumers can now import them from @datum-cloud/datum-ui/utils:

    import {
      toUTCTimestampEndOfDay,
      toUTCTimestampStartOfDay,
    } from "@datum-cloud/datum-ui/utils";

    No breaking changes.

Storybook v1.0.3

16 Apr 10:05
60a12b3

Choose a tag to compare

What's Changed

  • feat: datum-ui 0.7 — cloud-portal sync, responsive primitives, option-picker engine by @yahyafakhroji in #78
  • chore: version packages by @github-actions[bot] in #80

Full Changelog: v1.0.2...v1.0.3

@datum-cloud/datum-ui@0.7.0

16 Apr 10:01
60a12b3

Choose a tag to compare

Minor Changes

  • f9b4cb4: Sync behavior and primitives that landed in cloud-portal's vendored app/modules/datum-ui/ fork between March and April 2026.

    Added

    • useBreakpoint hook returning 'mobile' | 'tablet' | 'desktop' tier (SSR-safe, matchMedia-backed).
    • MobileSheet base primitive — bottom-sheet wrapper around Sheet for mobile UX.
    • ResponsiveDropdown base primitive — DropdownMenu on desktop/tablet, MobileSheet on mobile.
    • RichTextEditor feature component (compound API: RichTextEditor.Toolbar, .Bold, .Italic, .Underline, .Strike, .Link, .Content, .CharacterCount) with TipTap 3.x as optional peer deps.
    • RichTextContent read-only renderer with DOMPurify sanitization.
    • Optional Canela font export at @datum-cloud/datum-ui/styles/canela (opt-in; default stack is system sans).
    • Mobile long-press tooltip support via TouchTooltipBubble (500ms press → show, 1500ms auto-dismiss).
    • ResponsivePopover base primitive — Popover on desktop/tablet, MobileSheet on mobile. Honors InSheetContext to avoid sheet-in-sheet stacking.
    • InSheetContext / useInSheet helper exported from @datum-cloud/datum-ui/mobile-sheet — lets nested responsive components detect when they're already inside a sheet and stay as popovers.
    • MultiSelect feature component (ported from cloud-portal) with responsive overlay support.

    Changed

    • PageTitle — title now uses font-title text-3xl leading-none, description gains max-w-2xl, title span exposes data-e2e="page-title".
    • TagsInput — new optional props delimiters, normalizer, validator (Zod); auto-confirms pending input on blur. Defaults preserve existing behavior.
    • Form.Dialog — new optional showHeaderClose prop (default true); passing false disables the header close (X).
    • Form.Field — label row now uses items-start (visual alignment change — multi-line labels now top-align with help icon). New optional showErrors prop (default true). Help-icon tooltip now wraps responsively on narrow viewports (w-[calc(100vw-2rem)] sm:w-auto sm:max-w-xs).
    • TimeRangePicker — renders inside MobileSheet on mobile viewports; existing Popover behavior preserved on tablet/desktop.
    • TooltipTooltipContent gains max-w-[calc(100vw-2rem)] so narrow viewports don't clip long messages.
    • TaskQueueDropdown now uses ResponsiveDropdown — renders as a bottom sheet on mobile with a "Tasks" title; keeps the desktop dropdown layout (384px fixed width) on ≥768px viewports. TaskPanelHeader is hidden on mobile. Upstream's summaryRenderContent feature is preserved.
    • ResponsiveDropdown gains optional responsive?: boolean prop (default true) and honors InSheetContext — nested instances inside a MobileSheet automatically stay as dropdowns to prevent sheet-in-sheet stacking.
    • Popover/dropdown consumers are now responsive by default. Each gains optional responsive?: boolean (default true) and sheetTitle?: string props. Desktop behavior unchanged. Affected: Combobox, Autocomplete, Autosearch, CalendarDatePicker, DateTimePicker, MoreActions, RichTextEditor link toolbar, AbsoluteRangePanel (TimeRangePicker internal, context-suppressed), DataTable row actions and checkbox/select filter popovers.
    • Option-picker components (Autocomplete, MultiSelect, Autosearch, CheckboxFilter) now share an internal engine (useOptionPicker + OptionList) that owns search filtering, keyboard navigation, empty/creatable rows, and virtualization. No public API changes — the refactor is internal and behavior-preserving.
    • CalendarDatePicker internally decomposed into 5 focused files (types, hook, header, presets, trigger + composition root). No public API changes — 901 lines → 170-line composition root.
    • MoreActions action shape renamed: action property → onClick for consistency with DataTable's ActionItem<TData>. Shared ActionRow component extracted; consumed by both MoreActions and DataTable row actions.
    • CheckboxFilter (data-table) is now a thin adapter over MultiSelect. Visually matches MultiSelect's badge trigger. No public API change to FilterCheckboxProps.
    • CalendarDatePicker and DateTimePicker share a useDateConstraints hook for minDate/maxDate/disablePast/disableFuture constraint derivation (internal, no API change). DateTimePicker gains optional disablePast/disableFuture props.
    • TimePicker upgraded from native <input type="time"> to a scrollable time-slot dropdown (ResponsivePopover + OptionList). Breaking: step prop is now in minutes (default 15); native mobile time picker replaced by MobileSheet with time slots.

    Removed

    • Combobox is removed. Migrate to Autocomplete — the APIs overlap for the common case (options, value, onValueChange, placeholder, disabled). Autocomplete additionally supports option grouping, virtualization, custom rendering, and creatable items. Form.Combobox continues to work (now wraps Autocomplete internally).

    Dependencies

    • New optional peer deps: @tiptap/react, @tiptap/starter-kit, @tiptap/extension-link, @tiptap/extension-underline, @tiptap/extension-character-count, @tiptap/extension-placeholder (all >=3, required only if consuming RichTextEditor).
    • New runtime dep: isomorphic-dompurify (required by RichTextContent sanitization).

Storybook v1.0.2

13 Apr 08:02
8934bae

Choose a tag to compare

What's Changed

Full Changelog: v1.0.1...v1.0.2

@datum-cloud/datum-ui@0.6.1

13 Apr 07:57
8934bae

Choose a tag to compare

Patch Changes

  • 48e2240: Tighten peer and dependency version ranges following upstream patch releases.

    • @hookform/resolvers: ^5^5.2.2
    • class-variance-authority: ^0.7^0.7.1

    Transitive updates via the inlined shadcn primitives:

    • @types/geojson: ^7946^7946.0.16
    • @types/leaflet.fullscreen: ^3^3.0.3

Storybook v1.0.1

09 Apr 06:27
03ad1da

Choose a tag to compare

What's Changed

  • fix: use GIT_PAT for storybook production releases by @yahyafakhroji in #61
  • fix: switch to manual GitHub Release for storybook production by @yahyafakhroji in #63
  • chore: version packages by @github-actions[bot] in #64

Full Changelog: v1.0.0...v1.0.1

Storybook v1.0.0

08 Apr 05:30
6894d98

Choose a tag to compare

What's Changed

  • feat: improve release workflow with automatic releases and detailed PR descriptions by @yahyafakhroji in #48
  • chore: configure Claude Code datum plugins by @scotwells in #7
  • feat(form): pluggable adapter system for Conform.js and React Hook Form by @yahyafakhroji in #51
  • chore: version packages (minor) by @github-actions[bot] in #53
  • feat(storybook): production-ready Storybook with full component coverage by @yahyafakhroji in #56
  • feat: Delete docs/superpowers/specs directory by @yahyafakhroji in #58
  • feat: add separate storybook release cycle by @yahyafakhroji in #57
  • Add changeset for @repo/storybook major release by @yahyafakhroji in #59
  • chore: version packages by @github-actions[bot] in #60

New Contributors

Full Changelog: v0.5.0...v1.0.0

@datum-cloud/datum-ui@0.6.0

02 Apr 08:09
1a10b78

Choose a tag to compare

Minor Changes

  • a15efc6: Add pluggable form adapter system supporting Conform.js and React Hook Form

    The form system now uses a pluggable adapter architecture, allowing consumers to choose between Conform.js and React Hook Form as their form library backend.

    New exports:

    • @datum-cloud/datum-ui/form/adapters/conform - Conform.js adapter (existing behavior)
    • @datum-cloud/datum-ui/form/adapters/rhf - React Hook Form adapter (new)

    Migration: Wrap your app root with the adapter provider:

    import { ConformAdapter } from "@datum-cloud/datum-ui/form/adapters/conform";
    
    function App() {
      return (
        <ConformAdapter>
          {/* existing Form.Root usage unchanged */}
        </ConformAdapter>
      );
    }

    All existing Form.* component APIs remain unchanged. The adapter is selected once at the app level.

@datum-cloud/datum-ui v0.5.0

27 Mar 07:25
70046db

Choose a tag to compare

What's Changed

Minor Changes

  • Add CodeEditor and CodeEditorTabs components - Monaco-based code editor with VS Code UX, dual-format JSON/YAML support, and form integration

Features

  • Monaco Editor integration with VS Code-like experience
  • Dual-format support (JSON/YAML) with automatic conversion
  • Form integration via Conform
  • Syntax highlighting and validation
  • Tab-based editor interface
  • Type-safe API with full TypeScript support

Installation

pnpm add @datum-cloud/datum-ui@0.5.0

Peer dependencies for CodeEditor:

pnpm add @monaco-editor/react monaco-editor js-yaml

Usage

import { CodeEditor } from '@datum-cloud/datum-ui/code-editor'

<CodeEditor
  value={code}
  onChange={setCode}
  language="json"
  height="400px"
/>

See the full changelog for details.