Skip to content

Core reference

@beemvp/beeui-core holds the platform-free logic the components are built on: calendar-date arithmetic, anchored-overlay positioning, and the overlay-runtime primitives. It has no React dependency and renders nothing.

Most applications never import it directly — the components already do. Reach for it when you are building a surface BeeUI does not provide and you want the same date semantics or positioning maths behind it, which is why most of this surface is classified advanced-consumer rather than consumer.

The Classification column carries exactly two values on this page. advanced-consumer means public and supported, but intended for building a surface BeeUI does not provide — not something a typical application imports. normal-consumer means ordinary application API. cn is the only entry in the second group: it merges class strings. The calendar-date utilities are the same ones Dates and times documents behaviourally.

Name Signature Description Classification Source
addCalendarDays (date: CalendarDate, amount: number): CalendarDate Adds (or subtracts, for a negative amount) whole days, normalizing month/year overflow. advanced-consumer packages/core/src/utils/calendar-date.ts
addCalendarMonths (date: CalendarDate, amount: number): CalendarDate Adds (or subtracts) whole calendar months. advanced-consumer packages/core/src/utils/calendar-date.ts
addCalendarYears (date: CalendarDate, amount: number): CalendarDate Adds (or subtracts) whole years, clamping Feb 29 to Feb 28 in a non-leap target year. advanced-consumer packages/core/src/utils/calendar-date.ts
clampCalendarDate (date: CalendarDate, min?: CalendarDate | null, max?: CalendarDate | null): CalendarDate Clamps a date into an inclusive [min, max] range, returning the nearer bound when the date falls outside it and the date unchanged otherwise. advanced-consumer packages/core/src/utils/calendar-date.ts
clockTimeFromLocalDate (date: Date): ClockTime The ClockTime counterpart to fromLocalDate: reads local-timezone getHours()/getMinutes() only — the exact reverse of passing a time argument to toLocalDate. advanced-consumer packages/core/src/utils/calendar-date.ts
cn (...inputs: ClassValue[]): string Merges class-name inputs (strings, arrays, conditional objects) into one deduplicated Tailwind/Uniwind class string, later classes winning on conflict. normal-consumer packages/core/src/utils/cn.ts
compareCalendarDates (a: CalendarDate, b: CalendarDate): number Field-order comparator: negative when a is earlier, positive when later, 0 when equal. advanced-consumer packages/core/src/utils/calendar-date.ts
constrainOverlayViewportToKeyboard (viewportRect: AnchoredOverlayRect, keyboardRect?: AnchoredOverlayRect | null): AnchoredOverlayRect Shrinks the usable viewport rect to exclude the area the on-screen keyboard covers, so an anchored overlay repositions above it instead of behind it. advanced-consumer packages/core/src/utils/overlay-runtime.ts
createOverlayDismissStack (): OverlayDismissStack Creates an empty, mutable dismiss stack an application-root overlay runtime pushes/pops open overlay scopes onto, so global dismissal (Escape/outside-press) always targets the topmost one. advanced-consumer packages/core/src/utils/overlay-runtime.ts
fromLocalDate (date: Date): CalendarDate The sole sanctioned Date → CalendarDate boundary (ADR-008): reads local-timezone getters only, the exact reverse of toLocalDate. advanced-consumer packages/core/src/utils/calendar-date.ts
getCalendarDayOfWeek (date: CalendarDate): number 0 = Sunday … 6 = Saturday (matches Date.prototype.getUTCDay()/Intl day-index convention). advanced-consumer packages/core/src/utils/calendar-date.ts
getCalendarMonthGrid (options: CalendarMonthGridOptions): CalendarMonthGridDay[][] Generates the full-week grid for a month: one array per week, each with exactly 7 CalendarMonthGridDay cells (Sunday/Monday-first per weekStartsOn). advanced-consumer packages/core/src/utils/calendar-date.ts
getDaysInMonth (year: number, month: number): number month must be an integer 1–12. advanced-consumer packages/core/src/utils/calendar-date.ts
getSafeAreaCollisionPadding (hostRect: AnchoredOverlayRect, windowRect: AnchoredOverlayRect, safeAreaInsets: Partial<AnchoredOverlayInsets>): AnchoredOverlayInsets Combines a host rect, the window rect and the platform safe-area insets into the collision padding the anchored-overlay kernel needs to keep clear of notches, home indicators and status bars. advanced-consumer packages/core/src/utils/overlay-runtime.ts
isCalendarDateDisabled (date: CalendarDate, options: CalendarDateDisabledOptions = {}): boolean Reports whether a date falls outside the supplied min/max range or matches a disabled-dates predicate. advanced-consumer packages/core/src/utils/calendar-date.ts
isCalendarDateWithinRange (date: CalendarDate, min?: CalendarDate | null, max?: CalendarDate | null): boolean Reports whether a date falls within an inclusive [min, max] range; a missing bound is treated as unbounded on that side. advanced-consumer packages/core/src/utils/calendar-date.ts
isLeapYear (year: number): boolean Reports whether the given year is a leap year using the standard Gregorian rule (divisible by 4, not by 100 unless also by 400). advanced-consumer packages/core/src/utils/calendar-date.ts
isSameCalendarDate (a: CalendarDate | null | undefined, b: CalendarDate | null | undefined): boolean Reports whether two calendar dates (or null/undefined) represent the exact same day; two null/undefined values are not considered the same date. advanced-consumer packages/core/src/utils/calendar-date.ts
isValidCalendarDate (date: CalendarDate): boolean Reports whether a value is a structurally valid CalendarDate (real year/month/day combination, not just the right shape). advanced-consumer packages/core/src/utils/calendar-date.ts
mergeOverlayCollisionPadding (first: AnchoredOverlayCollisionPadding | undefined, second: AnchoredOverlayCollisionPadding | undefined): AnchoredOverlayInsets Merges two partial collision-padding objects, the second overriding the first per edge, with an default of 0 for an edge neither one sets. advanced-consumer packages/core/src/utils/overlay-runtime.ts
parseISODateString (iso: string): CalendarDate | null Parses a "YYYY-MM-DD" string by splitting/regex-matching its fields directly. advanced-consumer packages/core/src/utils/calendar-date.ts
resolveAnchoredOverlayPosition (options: ResolveAnchoredOverlayPositionOptions): AnchoredOverlayPosition Computes the anchored overlay’s final placement (side, alignment, coordinates) from the anchor rect, viewport, and collision/flip/shift options passed in. advanced-consumer packages/core/src/utils/anchored-overlay.ts
toISODateString (date: CalendarDate): string Never round-trips through Date/Date.parse — direct field formatting only. advanced-consumer packages/core/src/utils/calendar-date.ts
toLocalDate (date: CalendarDate, time?: ClockTime): Date The sole sanctioned CalendarDate → Date boundary (ADR-008): constructs via the local-timezone Date constructor, so a date-only value always lands on local midnight (or the given local wall-clock time) of the same… advanced-consumer packages/core/src/utils/calendar-date.ts
windowRectToHostRect (rect: AnchoredOverlayRect, hostRect: AnchoredOverlayRect): AnchoredOverlayRect Converts a rect expressed in window coordinates into one expressed relative to the given host element’s rect, for overlays rendered inside a scrollable or transformed host. advanced-consumer packages/core/src/utils/overlay-runtime.ts
Name Signature Description Source
AnchoredOverlayAlign 'start' | 'center' | 'end' — packages/core/src/utils/anchored-overlay.ts
AnchoredOverlayAvailableSpace AnchoredOverlayInsets — packages/core/src/utils/anchored-overlay.ts
AnchoredOverlayCollisionPadding number | Partial<AnchoredOverlayInsets> — packages/core/src/utils/anchored-overlay.ts
AnchoredOverlayDirection 'ltr' | 'rtl' — packages/core/src/utils/anchored-overlay.ts
AnchoredOverlayInsets { top: number; right: number; bottom: number; left: number; } — packages/core/src/utils/anchored-overlay.ts
AnchoredOverlayOverflow AnchoredOverlayInsets & { total: number; } — packages/core/src/utils/anchored-overlay.ts
AnchoredOverlayPlacement 'top' | 'right' | 'bottom' | 'left' — packages/core/src/utils/anchored-overlay.ts
AnchoredOverlayPosition { x: number; y: number; placement: AnchoredOverlayPlacement; align: AnchoredOverlayAlign; flipped: boolean; shifted: boolean; placementOverflow: AnchoredOverlayOverflow; overflow: AnchoredOverlayOverflow; availableSpace: AnchoredOverlayAva… — packages/core/src/utils/anchored-overlay.ts
AnchoredOverlayRect { x: number; y: number; width: number; height: number; } — packages/core/src/utils/anchored-overlay.ts
AnchoredOverlaySize { width: number; height: number; } — packages/core/src/utils/anchored-overlay.ts
CalendarDate { year: number; month: number; day: number; } A plain, timezone-free calendar day. packages/core/src/utils/calendar-date.ts
CalendarDateDisabledOptions { isDateDisabled?: (date: CalendarDate) => boolean; max?: CalendarDate | null; min?: CalendarDate | null; } — packages/core/src/utils/calendar-date.ts
CalendarMonthGridDay { date: CalendarDate; isCurrentMonth: boolean; } — packages/core/src/utils/calendar-date.ts
CalendarMonthGridOptions { month: number; weekStartsOn?: CalendarWeekStartsOn; year: number; } — packages/core/src/utils/calendar-date.ts
CalendarWeekStartsOn 1 | 2 | 3 | 4 | 5 | 6 | 7 ISO 8601 / Intl weekInfo convention: 1 = Monday … 7 = Sunday. packages/core/src/utils/calendar-date.ts
ClockTime { hour: number; minute: number; } A plain, timezone-free wall-clock time. packages/core/src/utils/calendar-date.ts
OverlayDismissHandler (reason: OverlayDismissReason) => void — packages/core/src/utils/overlay-runtime.ts
OverlayDismissReason 'back' | 'escape' | 'outside-press' | 'anchor-unmount' — packages/core/src/utils/overlay-runtime.ts
OverlayDismissStack { register: (id: string, handler: OverlayDismissHandler) => void; unregister: (id: string) => void; isTopmost: (id: string) => boolean; dismissTop: (reason: OverlayDismissReason) => boolean; dismissIfTopmost: (id: string, reason: OverlayDi… — packages/core/src/utils/overlay-runtime.ts
ResolveAnchoredOverlayPositionOptions { anchorRect: AnchoredOverlayRect; overlaySize: AnchoredOverlaySize; viewportRect: AnchoredOverlayRect; placement?: AnchoredOverlayPlacement; align?: AnchoredOverlayAlign; direction?: AnchoredOverlayDirection; sideOffset?: number; alignOff… — packages/core/src/utils/anchored-overlay.ts