Releases: datum-cloud/datum-ui
@datum-cloud/datum-ui@0.8.1
Patch Changes
-
abd07f0: Bump
cmdkdependency floor from^1to^1.1.1. Within-major range tightening; no behavior change for consumers already on^1. -
abd07f0: Bump
date-fnspeer dependency floor from>=4to>=4.1.0. v4.1.0 is additive (time-zone support informat/formatISO/formatISO9075/formatRelative/formatRFC3339, plusconstructFromnull-arg bugfix). Within-major range tightening; no breaking change. -
45e1024: Fix Tailwind v4 CSS resolver recursion on the
@datum-cloud/datum-ui/nprogressimport.Problem
Consumers importing
@datum-cloud/datum-ui/nprogressfrom 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.cssbegan with@import 'nprogress/nprogress.css';to pull in the upstream nprogress library styles. Under certainnode_moduleslayouts, 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-primarybar, 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
Minor Changes
-
8f3aec8: Promote timezone-to-UTC timestamp helpers into the public
/utilssubpath.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
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
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
useBreakpointhook returning'mobile' | 'tablet' | 'desktop'tier (SSR-safe, matchMedia-backed).MobileSheetbase primitive — bottom-sheet wrapper aroundSheetfor mobile UX.ResponsiveDropdownbase primitive —DropdownMenuon desktop/tablet,MobileSheeton mobile.RichTextEditorfeature component (compound API:RichTextEditor.Toolbar,.Bold,.Italic,.Underline,.Strike,.Link,.Content,.CharacterCount) with TipTap 3.x as optional peer deps.RichTextContentread-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). ResponsivePopoverbase primitive —Popoveron desktop/tablet,MobileSheeton mobile. HonorsInSheetContextto avoid sheet-in-sheet stacking.InSheetContext/useInSheethelper exported from@datum-cloud/datum-ui/mobile-sheet— lets nested responsive components detect when they're already inside a sheet and stay as popovers.MultiSelectfeature component (ported from cloud-portal) with responsive overlay support.
Changed
PageTitle— title now usesfont-title text-3xl leading-none, description gainsmax-w-2xl, title span exposesdata-e2e="page-title".TagsInput— new optional propsdelimiters,normalizer,validator(Zod); auto-confirms pending input on blur. Defaults preserve existing behavior.Form.Dialog— new optionalshowHeaderCloseprop (defaulttrue); passingfalsedisables the header close (X).Form.Field— label row now usesitems-start(visual alignment change — multi-line labels now top-align with help icon). New optionalshowErrorsprop (defaulttrue). Help-icon tooltip now wraps responsively on narrow viewports (w-[calc(100vw-2rem)] sm:w-auto sm:max-w-xs).TimeRangePicker— renders insideMobileSheeton mobile viewports; existing Popover behavior preserved on tablet/desktop.Tooltip—TooltipContentgainsmax-w-[calc(100vw-2rem)]so narrow viewports don't clip long messages.TaskQueueDropdownnow usesResponsiveDropdown— renders as a bottom sheet on mobile with a "Tasks" title; keeps the desktop dropdown layout (384px fixed width) on ≥768px viewports.TaskPanelHeaderis hidden on mobile. Upstream'ssummaryRenderContentfeature is preserved.ResponsiveDropdowngains optionalresponsive?: booleanprop (defaulttrue) and honorsInSheetContext— nested instances inside aMobileSheetautomatically stay as dropdowns to prevent sheet-in-sheet stacking.- Popover/dropdown consumers are now responsive by default. Each gains optional
responsive?: boolean(defaulttrue) andsheetTitle?: stringprops. Desktop behavior unchanged. Affected:Combobox,Autocomplete,Autosearch,CalendarDatePicker,DateTimePicker,MoreActions,RichTextEditorlink toolbar,AbsoluteRangePanel(TimeRangePicker internal, context-suppressed),DataTablerow 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. CalendarDatePickerinternally decomposed into 5 focused files (types, hook, header, presets, trigger + composition root). No public API changes — 901 lines → 170-line composition root.MoreActionsaction shape renamed:actionproperty →onClickfor consistency withDataTable'sActionItem<TData>. SharedActionRowcomponent extracted; consumed by bothMoreActionsandDataTablerow actions.CheckboxFilter(data-table) is now a thin adapter overMultiSelect. Visually matches MultiSelect's badge trigger. No public API change toFilterCheckboxProps.CalendarDatePickerandDateTimePickershare auseDateConstraintshook for minDate/maxDate/disablePast/disableFuture constraint derivation (internal, no API change).DateTimePickergains optionaldisablePast/disableFutureprops.TimePickerupgraded from native<input type="time">to a scrollable time-slot dropdown (ResponsivePopover + OptionList). Breaking:stepprop is now in minutes (default 15); native mobile time picker replaced by MobileSheet with time slots.
Removed
Comboboxis removed. Migrate toAutocomplete— the APIs overlap for the common case (options,value,onValueChange,placeholder,disabled).Autocompleteadditionally supports option grouping, virtualization, custom rendering, and creatable items.Form.Comboboxcontinues to work (now wrapsAutocompleteinternally).
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 consumingRichTextEditor). - New runtime dep:
isomorphic-dompurify(required byRichTextContentsanitization).
Storybook v1.0.2
What's Changed
- Create LICENSE by @jacobsmith928 in #67
- Update README.md by @jacobsmith928 in #66
- chore(deps): Update dependency @antfu/eslint-config to ^4.19.0 by @renovate in #49
- chore(deps): bulk dependency updates incl. Next.js security fix by @yahyafakhroji in #75
- chore: version packages by @github-actions[bot] in #77
Full Changelog: v1.0.1...v1.0.2
@datum-cloud/datum-ui@0.6.1
Patch Changes
-
48e2240: Tighten peer and dependency version ranges following upstream patch releases.
@hookform/resolvers:^5→^5.2.2class-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
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
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
- @scotwells made their first contribution in #7
Full Changelog: v0.5.0...v1.0.0
@datum-cloud/datum-ui@0.6.0
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
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.0Peer dependencies for CodeEditor:
pnpm add @monaco-editor/react monaco-editor js-yamlUsage
import { CodeEditor } from '@datum-cloud/datum-ui/code-editor'
<CodeEditor
value={code}
onChange={setCode}
language="json"
height="400px"
/>See the full changelog for details.