TimeFrame

Advanced date picker family with preset sidebar, compare mode, market event presets, and a standalone mini calendar. The HybridDatePicker is the main component;MiniCalendar, ExpandableChip, and MarketPresetRow are composable sub-components.

HybridDatePicker

Click the date chip to open the full date picker with preset sidebar, calendar, and market event tabs. The component is fully controlled via props.

Range: 10/1/2026 - 10/14/2026 | Compare: OFF

Compare Mode

Enable compare mode to select multiple date ranges for side-by-side analysis. The picker supports up to 3 named ranges (A, B, C) with independent preset selection.

Market Event Presets

Market events appear as selectable presets in the date picker's Markets tab. Both built-in and custom market events are supported. The MarketPresetRow sub-component renders each market event.

Atlanta Market

Jan 7–14 · Atlanta, GA

NY Now Spring

Live
Mar 8–12 · New York, NY

MiniCalendar Standalone

The MiniCalendar is used inside HybridDatePicker but can also be rendered standalone. It supports range selection, market date dot indicators, and multiple size presets.

October 2026

S
M
T
W
T
F
S
Selected: 10/14/2026

Sub-components

ExpandableChip

Hover-expand preset group chip with pinning functionality. Used in the preset sidebar to show rolling and period preset groups.

Rolling Presets
30D
Period Presets
MTD

Usage

JSX
import { HybridDatePicker, MiniCalendar } from '@so.boss/gloss-ui';
import type { DateChangePayload, DatePreferences } from '@so.boss/gloss-ui';

// Full date picker with presets and compare mode
<HybridDatePicker
  value={dateRange}
  onChange={(payload: DateChangePayload) => {
    if (Array.isArray(payload)) {
      setDateRange(payload);
    } else {
      setCompareValue(payload);
    }
  }}
  preferences={preferences}
  onPreferenceChange={setPreferences}
  markets={marketPresets}
  customMarkets={customMarkets}
  compareEnabled={isComparing}
  onCompareToggle={setIsComparing}
  enableCompare
  calendarSize="medium"
/>

// Standalone calendar for simple date selection
<MiniCalendar
  selectedStart={startDate}
  selectedEnd={endDate}
  onSelect={(start, end) => {
    setStartDate(start);
    setEndDate(end);
  }}
  size="medium"
/>

Props Reference

HybridDatePicker

PropTypeDefaultDescription
value[Date, Date] | CompareValue | null—Current value: single range tuple, compare value, or null
onChange(value: DateChangePayload) => void—Called when the date selection changes
enableComparebooleanfalseEnable compare mode toggle in the picker
compareEnabledbooleanfalseWhether compare mode is currently active
onCompareToggle(enabled: boolean) => voidundefinedCalled when compare mode is toggled
preferencesDatePreferencesundefinedUser date preferences (last preset, pinned, compare state)
marketsMarketPreset[]undefinedBuilt-in market event presets
customMarketsMarketEvent[]undefinedUser-created custom market events
calendarSize'small' | 'medium' | 'large''medium'Calendar display size preset

MiniCalendar

PropTypeDescription
selectedStartDate | nullCurrently selected start date
selectedEndDate | nullCurrently selected end date
onSelect(start: Date, end: Date | null) => voidCalled when dates are selected
size'small' | 'medium' | 'large'Calendar size preset (default: 'medium')
marketDatesMarketDateInfo[]Market date info for dot indicators on calendar days
maxDateDateMaximum selectable date

ExpandableChip

PropTypeDescription
groupIdstringUnique group identifier
optionsPresetDefinition[]Available preset options
selectedIdstringCurrently selected preset ID
pinnedIdstringCurrently pinned (default) preset ID
onSelect(id: string) => voidCalled when a preset is selected

MarketPresetRow

PropTypeDescription
presetMarketPresetDataMarket preset data (id, label, dates, location)
isSelectedbooleanWhether this preset is currently selected
onSelect(id: string) => voidCalled when the preset is selected