跳转到内容

DateRangePicker 日期范围选择器

将起止两组可键入的分段日期框、范围分隔符、日历触发器和范围日历浮层组合成一个字段。

用法

输入或选择起止日期

旅行日期
yyyy
/
mm
/
dd
yyyy
/
mm
/
dd

组件结构

加粗的是必需部件。

data-scope="date-range-picker"root · label · control · segment-group · range-separator · trigger · clear-trigger · positioner · content · preset-group · preset · calendar

示例

两页并排

起止常跨月时设置 visibleCount=2,两页一起翻

入住与退房
yyyy
/
mm
/
dd
yyyy
/
mm
/
dd

区间:(未选)

快捷选项

常用区间一键写入两端

统计区间
yyyy
/
mm
/
dd
yyyy
/
mm
/
dd

不可用日期

周末不可选,区间允许跨过不可用的日期

工作日区间
yyyy
/
mm
/
dd
yyyy
/
mm
/
dd

周期区间

granularity 决定两组输入行铺设哪几段、浮层铺设哪一档格子

周报区间
yyyy
/
ww
yyyy
/
ww
月报区间
yyyy
/
mm
yyyy
/
mm
季报区间
yyyy
/
Qq
yyyy
/
Qq
年报区间
yyyy
yyyy

设计指引

何时使用

  • 用户需要选择一段起止日期:报表区间、入住与退房、有效期。
  • 需要先查看月份分布再确定起止,或直接键入两端。

何时不用

特性

  • 值始终为区间两端 [start, end],按位存放:只填了终点时是 ['', 终点],受控回写按同一下标对应。
  • 起止各一组段位,range-separator 隔在中间;方向键换段不跨组,nameendName 各自决定两份隐藏输入参不参与提交。
  • 浮层内是日历范围选择器:先选起点再选终点,两端都落定后才写值并收起浮层;支持按住拖选与拖动已选区间的一端。
  • granularity 支持 day / week / month / quarter / year,输入段、网格和周期边界一起切换。
  • minmaxisDateUnavailable(第二个参数是当前起点)与 allowsNonContiguousRanges 一并转给日历。
  • presets 提供“近 7 天”“本月”等整段快捷项,值使用 ISO 8601 的区间写法拼接两端。
  • 终点早于起点、任一端越界或不可用时整个字段标为不合法,也可以用 invalid 显式声明。
  • 输入值、展开状态和聚焦日期均可受控;点击输入行可以继续逐段键入,点击日历图标则把焦点送入日历。

组合

  • 浮层内嵌日历范围选择器,翻月、层级切换、拖选与键盘导航由它负责。
  • 输入行内嵌两组日期字段的段位,逐段键入与加减由它负责。

最佳实践

  • 使用明确的字段标签,两组段位各自报告“开始日期”“结束日期”。
  • 起止段组之间必须渲染 range-separator,不依赖空白区分两端。
  • 起止常跨月时显式传 visibleCount="2",并排查看两页。
  • 需要统一查询值时,读取 api.periodValue 得到周期首尾与回显键。
  • 常用区间优先提供快捷项,日期在 computed / memo 中计算后再传入。

反模式

  • 用两个日期选择器拼接一个区间:两端之间没有轨道、没有拖选,也不校验先后顺序。
  • 未经说明就预先选好一段。
  • 让浮层遮挡当前输入值。

API 参考

产物

自定义元素<xh-date-range-picker>
Vue 组件XhDateRangePickerCalendar XhDateRangePickerCell XhDateRangePickerCellTrigger XhDateRangePickerClearTrigger XhDateRangePickerContent XhDateRangePickerControl XhDateRangePickerGrid XhDateRangePickerGridBody XhDateRangePickerGridHead XhDateRangePickerHeader XhDateRangePickerHeading XhDateRangePickerHeadingMonthTrigger XhDateRangePickerHeadingYearTrigger XhDateRangePickerHiddenInput XhDateRangePickerLabel XhDateRangePickerNextTrigger XhDateRangePickerNextYearTrigger XhDateRangePickerPositioner XhDateRangePickerPreset XhDateRangePickerPresetGroup XhDateRangePickerPrevTrigger XhDateRangePickerPrevYearTrigger XhDateRangePickerRangeSeparator XhDateRangePickerRoot XhDateRangePickerSegment XhDateRangePickerSegmentGroup XhDateRangePickerTrigger XhDateRangePickerWeekDay XhDateRangePickerWeekNumber XhDateRangePickerWeekRow
组合式函数useDateRangePicker
状态机dateRangePickerMachine
皮肤@xihan-ui/styles/date-range-picker.css

Props

属性类型必填说明
valuestring[]区间两端,ISO 串。提供即受控:读取直取 prop,写入只发 onValueChange 不落内部值。 按位存放,空缺的一端为空串。
defaultValuestring[]
openboolean展开态。提供即受控:内部不再自行修改,只发 onOpenChange。
defaultOpenboolean
minstring可选范围下界(含当天),ISO 串。日历与分段输入共用这一条。
maxstring可选范围上界(含当天),ISO 串。
localestring决定周首日、月份文案与段位先后(zh-CN 年月日、en-US 月日年)。 未提供时按宿主语言,宿主也没有时按 en-US。
timeZonestring判定今天与格式化文案使用的时区,默认取宿主本地时区。
isDateUnavailable(value: string, anchor: string | null) => boolean不可用判定,接收 ISO 串。界外与判定为真的日期同等处理。 第二个参数是区间选到一半时的起点,其余时候为 null。
allowsNonContiguousRangesboolean区间允许跨过不可用的日期,默认关闭;关闭时落下起点之后只能选到两侧最近的不可用日为止。
disabledboolean整个控件禁用:trigger 为原生 disabled,段位退出 Tab 序列,日历格子全部为 aria-disabled。
readOnlyboolean只读:浮层照常展开、日历照常翻月浏览,但选中值不可修改。
invalidboolean校验失败:段位报告 aria-invalid,各角色节点带 data-invalid。 未提供时也会自行判定:任一端越界,或终点早于起点。
requiredboolean必填标注,写入每一段的 aria-required。
namestring起点隐藏输入的表单字段名;提供后才带 name,ISO 串随表单一并提交。
endNamestring终点隐藏输入的表单字段名;未提供时终点不参与提交。
granularityCalendarGranularity选择粒度。输入行与周期网格都由它决定。
activeViewCalendarView面板当前所在的层级。提供即受控;未提供时跟随 granularity,每次展开都回到目标粒度。 点击标题中的年 / 月会修改它。
segmentsDateSegmentSet输入行铺设的段。未提供时按 granularity 推导:按周为「2026-33」、按月为「2026-05」、 按季度为「2026-Q2」、按年为「2026」,按天则按 locale 排列年月日。
presetsDateRangePickerPreset[]快捷选项(「近 7 天」「本月」等)。提供后浮层中多出一列,点击即整份写入两端。 日期需计算后传入:连接层每帧求值,把 today() 放进渲染期会跨零点得出两个结果。 不是恰好两端、落在 min / max 之外或被 isDateUnavailable 判定不可用的选项自动不可按下。
visibleCountnumber展示的连续日历面板数;默认 1。起止常跨月,并排两页时显式提供 2。
fixedWeeksboolean日历恒渲染六行,默认开启。关闭后网格按当月实际周数收缩,翻页时浮层高度随之变化。
defaultFocusedValuestring初始聚焦日,ISO 串;同时决定展开时先落在哪一页。 未提供时回退为起点,再回退为今天。表单重置回到该值。
variantControlVariant形态:outline / subtle / ghost,决定输入行的描边与底色使用方式。默认 outline。
toneTone语气:brand / neutral / success / warning / danger / info,决定聚焦与选中强调使用哪族颜色。
sizeSize尺寸:sm / md / lg,输入行与浮层中的日历格一并换档。
placementPlacement
dirDirection文字方向,默认 ltr。只改写浮层在行内轴上 start 与 end 的落点。
offsetnumber
translationsPartial<DateRangePickerTranslations>
closeOnSelectboolean选完即收起,默认 true。两端都落定才视为选完。
onValueChange(details: DateRangePickerValueChangeDetails) => voidvalue 变化意图回调;受控时是唯一出口,非受控时随内部写入一并通知。
onOpenChange(details: DateRangePickerOpenChangeDetails) => voidopen 变化意图回调;受控时是唯一出口,非受控时随内部转移一并通知。
onFocusedValueChange(details: DateRangePickerFocusChangeDetails) => void聚焦日变化(方向键、翻月、展开、段位输入都会发出)。 网格由外部渲染,不监听该事件时日历不会换月。
onActiveViewChange(details: CalendarViewChangeDetails) => void面板所在层级变化(点击标题向上、点击格子向下都会发出);受控时是唯一出口。

事件

自定义元素将载荷放在 detail;Vue 使用同名 emit。

事件载荷说明
value-changeDateRangePickerValueChangeDetails区间两端变化;detail 为 { value: string[] },只填终点时为 ['', end]
open-changeDateRangePickerOpenChangeDetailsopen 状态变化;detail 为 { open: boolean }
focused-value-changeDateRangePickerFocusChangeDetails聚焦日变化(展示月可能随之变化);detail 为 { focusedValue: string },作者据此重绘网格
active-view-changeCalendarViewChangeDetails切换到另一层级(点击标题向上、点击格子向下);detail 为 { activeView: 'day'|'week'|'month'|'quarter'|'year' },作者据此重绘网格

插槽

仅列出带载荷的插槽。

Vue 组件插槽载荷说明
XhDateRangePickerPresetdefault条目内容;未写时使用数据中的 label。
XhDateRangePickerPresetGroupdefaultDateRangePickerPresetsSlotProps自行铺设条目;未写时按 presets 数据自动铺设,两者产出的 DOM 一致。
XhDateRangePickerRootdefaultDateRangePickerRootSlotProps
XhDateRangePickerSegmentdefaultDateRangePickerSegmentSlotProps

状态

公开状态写入 data-state

部件取值
root'open' | 'closed'
control'open' | 'closed'
trigger'open' | 'closed'
positioner'open' | 'closed'
content'open' | 'closed'
preset'checked' | 'unchecked'
calendar'open' | 'closed'

以下名称仅用于内部状态机。

状态open · closed

事件OPEN · TOGGLE · CLOSE · CONTROLLED.OPEN · CONTROLLED.CLOSE · VALUE.SET · VALUE.CLEAR · FOCUSED.SET · VIEW.SET · FORM.RESET · PRESS.START · PRESS.END

判据isOpenControlled · closesOnSelect · canPress

connect API

getXxxProps() 返回对应部件的宿主属性。

成员类型说明
openboolean
valuestring[]区间两端,ISO 串;按位存放,空缺的一端为空串。
startstring | null起点;未填时为 null。
endstring | null终点;未填时为 null。
periodValueCalendarPeriodValue | null两端都落定时的规范化周期值;缺少一端时为 null。
focusedValuestring生效聚焦日(三路收口后的结果),恒非空。日历展示哪个月由它决定。
granularityCalendarGranularity作者选择的粒度。
activeViewCalendarView面板当前所在的层级。
disabledboolean
readOnlyboolean
invalidboolean校验失败:作者标记的、任一端越界,或终点早于起点。
canClearboolean清空按钮当前是否可按。
setOpen(next: boolean) => void
setValue(next: string[]) => void
clear() => void
setActiveView(next: CalendarView) => void直接切换到某一层级。
presetsreadonly DateRangePickerPresetState[]快捷选项逐条的状态,数据顺序。未提供 presets 时为空数组。
calendarCalendarRangePickerApi<T>内嵌日历:选区间、翻月、键盘导航都在它身上。
fieldDateRangePickerFieldApi<T>起点分段输入。
fieldEndDateRangePickerFieldApi<T>终点分段输入。
getRootProps() => T['element']
getLabelProps() => T['element']
getControlProps() => T['element']
getSegmentGroupProps(props?: DateRangePickerSegmentGroupProps) => T['element']role=group 的分段容器,段位挂在其中。index 选择起止两组,不传即起点。
getRangeSeparatorProps() => T['element']起止输入之间的视觉分隔。
getTriggerProps() => T['button']
getClearTriggerProps() => T['button']
getPositionerProps() => T['element']
getContentProps() => T['element']
getPresetGroupProps() => T['element']快捷选项列(role=listbox);未提供 presets 时带 hidden。
getPresetProps(props: DateRangePickerPresetProps) => T['element']一条快捷选项(role=option):点击把整段区间写入两端。
getCalendarProps() => T['element']内嵌日历的挂载点,同时充当日历的根节点。

无障碍

键盘

规格出处:W3C APG

按键生效条件行为
Enter / Spacefocus in trigger, closed展开日历浮层,焦点落到当前聚焦日那一格
Enter / Spacefocus in trigger, open收起浮层,焦点回到 trigger
Escapeopen收起浮层并把焦点还给展开前那个控件(通常是 trigger),两端不变;区间挑到一半时先撤掉起点
Tab / Shift+Tabopen不拦按键:焦点按 Tab 序列自然离开,浮层随即收起且不抢回焦点
Enter / Spaceopen, focus in grid先落起点再落终点(由日历完成);closeOnSelect 时两端都落定才收起浮层
ArrowUp / ArrowDown / Home / Endopen, focus in 快捷选项列在快捷选项之间移动焦点,到头回绕;不写值
Enter / Spaceopen, focus in 某条快捷选项把这条快捷选项的两端整份写进去;closeOnSelect 时收起浮层
Alt+ArrowDownfocus in 某一段, closed, not disabled展开浮层并把焦点移入;触发按钮是可选部件,键盘入口不能只挂在它上面
Enterfocus in 某一段, open收起浮层。段位里敲出来的值不触发「选完即收」(那时人还在打字),这是那条路的收口手势
Enter / Spaceheld on trigger(not disabled)、clear-trigger(可清)或 preset(open, not disabled/readOnly, 该条可按)按住期间该部件投影 data-pressed,与指针 :active 同一副按压面;抬起或失焦撤下,浮层收起时一并撤下。日历里的部件由 calendar-range-picker 自己投影

ARIA

以下属性由 connect 生成。

部件属性
segment-grouparia-disabled'true' | 'false'
segment-grouparia-labellabel.endDate | label.startDate
segment-grouprole'group'
range-separatoraria-hidden'true'
triggeraria-controlscontent 部件的 id
triggeraria-expanded'true' | 'false'
triggeraria-haspopup'dialog'
triggeraria-labelledbylabel 部件的 id
clear-triggeraria-labellabel.clearTrigger
contentaria-hidden!open || undefined
contentaria-labelledbylabel 部件的 id
contentaria-modal'false'
contentrole'dialog'
preset-grouparia-disabled'true' | 'false'
preset-grouparia-labellabel.presets
preset-grouparia-multiselectable'false'
preset-grouparia-orientation'vertical'
preset-grouprole'listbox'
presetaria-disabled'true' | 'false'
presetaria-selected'true' | 'false'
presetrole'option'

样式参考

皮肤

@xihan-ui/styles/date-range-picker.css 使用 [data-scope="date-range-picker"][data-part="root"] 部件选择器,位于 xihan.componentsxihan.motion 层。覆盖样式使用 xihan.overrides

forced-colors: active 下另有一套规则:颜色交给系统,边框与状态标记改用系统色关键字。

数据属性

connect 生成;条件不成立时不输出无值属性。

部件属性
rootdata-disabled''(条件成立时才出现)
rootdata-invalid''(条件成立时才出现)
rootdata-readonly''(条件成立时才出现)
rootdata-sizeprops.size
rootdata-state'open' | 'closed'
rootdata-toneprops.tone
rootdata-variantprops.variant
labeldata-disabled''(条件成立时才出现)
controldata-disabled''(条件成立时才出现)
controldata-invalid''(条件成立时才出现)
controldata-readonly''(条件成立时才出现)
controldata-state'open' | 'closed'
controldata-variantprops.variant
controldata-xh-field-chrome''
controldata-xh-field-sizeprops.size
segment-groupdata-complete''(条件成立时才出现)
segment-groupdata-disabled''(条件成立时才出现)
segment-groupdata-empty''(条件成立时才出现)
segment-groupdata-indexString(index)
segment-groupdata-invalid''(条件成立时才出现)
segment-groupdata-out-of-range''(条件成立时才出现)
segment-groupdata-readonly''(条件成立时才出现)
triggerdata-disabled''(条件成立时才出现)
triggerdata-pressed''(条件成立时才出现)
triggerdata-state'open' | 'closed'
triggerdata-xh-action-control''
triggerdata-xh-action-display'always'
triggerdata-xh-action-profile'field-inset'
triggerdata-xh-action-sizeprops.size
triggerdata-xh-action-variant'ghost'
clear-triggerdata-pressed''(条件成立时才出现)
clear-triggerdata-xh-action-control''
clear-triggerdata-xh-action-display'has-value'
clear-triggerdata-xh-action-has-value''(条件成立时才出现)
clear-triggerdata-xh-action-profile'field-inset'
clear-triggerdata-xh-action-sizeprops.size
clear-triggerdata-xh-action-variant'ghost'
positionerdata-hidden''(条件成立时才出现)
positionerdata-placement定位引擎算出的实际落位
positionerdata-positioned''(条件成立时才出现)
positionerdata-sizeprops.size
positionerdata-state'open' | 'closed'
positionerdata-toneprops.tone
positionerdata-variantprops.variant
contentdata-placement定位引擎算出的实际落位
contentdata-state'open' | 'closed'
presetdata-disabled''(条件成立时才出现)
presetdata-pressed''(条件成立时才出现)
presetdata-state'checked' | 'unchecked'
presetdata-valuev
presetdata-xh-collection-context'overlay'
presetdata-xh-collection-item''
presetdata-xh-collection-sizeprops.size
calendardata-disabled''(条件成立时才出现)
calendardata-readonly''(条件成立时才出现)
calendardata-state'open' | 'closed'

CSS 变量

本组件公开覆盖槽由独立皮肤的实际消费位生成;默认来源、作用部件和状态均与 CSS 同源。

变量部件CSS 属性状态默认来源说明
--xh-date-range-picker-action-bgclear-trigger
trigger
background-colordefault--xh-_action-variant-bg-restdate-range-picker 的 clear-trigger、trigger 部件 background-color 覆盖槽。
--xh-date-range-picker-action-bg-activeclear-trigger
trigger
background-colordisabled
is(:active, [data-pressed])
loading
not([data-disabled])
not([data-loading])
pressed
--xh-_action-variant-bg-presseddate-range-picker 的 clear-trigger、trigger 部件 background-color 覆盖槽。
--xh-date-range-picker-action-bg-hoverclear-trigger
trigger
background-colordisabled
hover
loading
not([data-disabled])
not([data-loading])
state=open
--xh-_action-variant-bg-hoverdate-range-picker 的 clear-trigger、trigger 部件 background-color 覆盖槽。
--xh-date-range-picker-action-fgclear-trigger
trigger
colordefault--xh-fg-muteddate-range-picker 的 clear-trigger、trigger 部件 color 覆盖槽。
--xh-date-range-picker-action-fg-hoverclear-trigger
trigger
colordisabled
hover
loading
not([data-disabled])
not([data-loading])
state=open
--xh-fg-defaultdate-range-picker 的 clear-trigger、trigger 部件 color 覆盖槽。
--xh-date-range-picker-action-font-sizeclear-trigger
trigger
font-sizedefault--xh-text-secondary-sizedate-range-picker 的 clear-trigger、trigger 部件 font-size 覆盖槽。
--xh-date-range-picker-action-radiusclear-trigger
trigger
border-radiusdefault--xh-shape-insetdate-range-picker 的 clear-trigger、trigger 部件 border-radius 覆盖槽。
--xh-date-range-picker-action-sizeclear-trigger
trigger
block-size
inline-size
min-inline-size
default
xh-action-profile=field-inset
--xh-_action-profile-visual-sizedate-range-picker 的 clear-trigger、trigger 部件 block-size、inline-size、min-inline-size 覆盖槽。
--xh-date-range-picker-calendar-gapcalendargapdefault--xh-space-2date-range-picker 的 calendar 部件 gap 覆盖槽。
--xh-date-range-picker-column-dividerpreset-groupborder-block-end
border-inline-end
@media (min-width: 768px)
default
--xh-material-frosted-separatordate-range-picker 的 preset-group 部件 border-block-end、border-inline-end 覆盖槽。
--xh-date-range-picker-content-bgcontentbackgrounddefault--xh-bg-surfacedate-range-picker 的 content 部件 background 覆盖槽。
--xh-date-range-picker-content-bordercontentborderdefault--xh-border-defaultdate-range-picker 的 content 部件 border 覆盖槽。
--xh-date-range-picker-content-fgcontentcolordefault--xh-fg-defaultdate-range-picker 的 content 部件 color 覆盖槽。
--xh-date-range-picker-content-pxcontentpadding-inlinedefault--xh-space-2date-range-picker 的 content 部件 padding-inline 覆盖槽。
--xh-date-range-picker-content-pycontentpadding-blockdefault--xh-space-2date-range-picker 的 content 部件 padding-block 覆盖槽。
--xh-date-range-picker-content-radiuscontentborder-radiusdefault--xh-shape-overlaydate-range-picker 的 content 部件 border-radius 覆盖槽。
--xh-date-range-picker-content-shadowcontentbox-shadowdefault--xh-elevation-floatingdate-range-picker 的 content 部件 box-shadow 覆盖槽。
--xh-date-range-picker-control-bgcontrolbackground-colorxh-field-chrome--xh-_field-variant-bg-restdate-range-picker 的 control 部件 background-color 覆盖槽。
--xh-date-range-picker-control-bg-disabledcontrolbackground-colordisabled
xh-field-chrome
--xh-_field-variant-bg-disableddate-range-picker 的 control 部件 background-color 覆盖槽。
--xh-date-range-picker-control-bg-hovercontrolbackground-colordisabled
hover
invalid
loading
not([data-disabled])
not([data-invalid])
not([data-loading])
not([data-readonly])
readonly
xh-field-chrome
--xh-_field-variant-bg-hoverdate-range-picker 的 control 部件 background-color 覆盖槽。
--xh-date-range-picker-control-bg-readonlycontrolbackground-colorreadonly
xh-field-chrome
--xh-_field-variant-bg-read-onlydate-range-picker 的 control 部件 background-color 覆盖槽。
--xh-date-range-picker-control-bordercontrolborderxh-field-chrome--xh-_field-variant-border-restdate-range-picker 的 control 部件 border 覆盖槽。
--xh-date-range-picker-control-border-focuscontrolborder-colordisabled
focus-within
not([data-disabled])
xh-field-chrome
--xh-_field-variant-border-focusdate-range-picker 的 control 部件 border-color 覆盖槽。
--xh-date-range-picker-control-border-hovercontrolborder-colordisabled
hover
invalid
loading
not([data-disabled])
not([data-invalid])
not([data-loading])
not([data-readonly])
readonly
xh-field-chrome
--xh-_field-variant-border-hoverdate-range-picker 的 control 部件 border-color 覆盖槽。
--xh-date-range-picker-control-border-invalidcontrolborder-colorinvalid
xh-field-chrome
--xh-_field-variant-border-invaliddate-range-picker 的 control 部件 border-color 覆盖槽。
--xh-date-range-picker-control-fgcontrolcolorxh-field-chrome--xh-fg-defaultdate-range-picker 的 control 部件 color 覆盖槽。
--xh-date-range-picker-control-gapcontrol
range-separator
gap
margin-inline
default
xh-field-chrome
--xh-_date-range-picker-gapdate-range-picker 的 control、range-separator 部件 gap、margin-inline 覆盖槽。
--xh-date-range-picker-control-hcontrolblock-size
min-block-size
has([data-xh-field-input][data-xh-field-layout='multi-tag'])
has([data-xh-field-input][data-xh-field-layout='single-line'])
has([data-xh-field-input][data-xh-field-layout='textarea'])
xh-field-chrome
xh-field-input
xh-field-layout=multi-tag
xh-field-layout=single-line
xh-field-layout=textarea
--xh-_date-range-picker-control-hdate-range-picker 的 control 部件 block-size、min-block-size 覆盖槽。
--xh-date-range-picker-control-min-wcontrol
root
min-inline-sizedefault
xh-field-chrome
--xh-control-min-wdate-range-picker 的 control、root 部件 min-inline-size 覆盖槽。
--xh-date-range-picker-control-pxcontrolpadding-inlinexh-field-chrome--xh-_date-range-picker-control-pxdate-range-picker 的 control 部件 padding-inline 覆盖槽。
--xh-date-range-picker-control-radiuscontrolborder-radiusxh-field-chrome--xh-shape-controldate-range-picker 的 control 部件 border-radius 覆盖槽。
--xh-date-range-picker-control-shadowcontrolbox-shadowxh-field-chromenonedate-range-picker 的 control 部件 box-shadow 覆盖槽。
--xh-date-range-picker-control-wrootinline-sizedefaultmax-contentdate-range-picker 的 root 部件 inline-size 覆盖槽。
--xh-date-range-picker-font-sizesegment-groupfont-sizedefault--xh-_date-range-picker-font-sizedate-range-picker 的 segment-group 部件 font-size 覆盖槽。
--xh-date-range-picker-gaprootgapdefault--xh-space-1date-range-picker 的 root 部件 gap 覆盖槽。
--xh-date-range-picker-icon-sizecontrol
positioner
root
--xh-icon-sizedefault
is([data-part='root'], [data-part='positioner'])
size=lg
size=sm
xh-field-chrome
--xh-_field-size-glyph-size
--xh-glyph-size-lg
--xh-glyph-size-md
--xh-glyph-size-sm
date-range-picker 的 control、positioner、root 部件 --xh-icon-size 覆盖槽。
--xh-date-range-picker-label-fglabelcolordefault--xh-fg-defaultdate-range-picker 的 label 部件 color 覆盖槽。
--xh-date-range-picker-label-fg-disabledlabelcolordisabled--xh-fg-subtledate-range-picker 的 label 部件 color 覆盖槽。
--xh-date-range-picker-label-font-sizelabelfont-sizedefault--xh-text-label-sizedate-range-picker 的 label 部件 font-size 覆盖槽。
--xh-date-range-picker-label-font-weightlabelfont-weightdefault--xh-text-label-weightdate-range-picker 的 label 部件 font-weight 覆盖槽。
--xh-date-range-picker-layerpositionerz-indexdefault--xh-_layerdate-range-picker 的 positioner 部件 z-index 覆盖槽。
--xh-date-range-picker-literal-fgsegment-groupcolornot([data-scope])--xh-fg-subtledate-range-picker 的 segment-group 部件 color 覆盖槽。
--xh-date-range-picker-max-hcontentmax-block-sizedefault--xh-viewport-h-lgdate-range-picker 的 content 部件 max-block-size 覆盖槽。
--xh-date-range-picker-panel-dividercalendarborder-block-start
border-inline-start
@media (min-width: 768px)
default
--xh-material-frosted-separatordate-range-picker 的 calendar 部件 border-block-start、border-inline-start 覆盖槽。
--xh-date-range-picker-panel-gapcalendar
preset-group
padding-block-start
padding-inline-start
@media (min-width: 768px)
default
--xh-space-3date-range-picker 的 calendar、preset-group 部件 padding-block-start、padding-inline-start 覆盖槽。
--xh-date-range-picker-preset-bg-hoverpresetbackground-colordisabled
error
highlighted
hover
is(:focus-visible, [data-highlighted])
is([aria-selected='true'], [data-selected])
not([aria-disabled='true'], [data-disabled], [aria-busy='true'], [data-error])
selected
xh-collection-context=overlay
--xh-bg-subtledate-range-picker 的 preset 部件 background-color 覆盖槽。
--xh-date-range-picker-preset-bg-pressedpresetbackground-colordisabled
error
is(:active, [data-pressed])
is([aria-selected='true'], [data-selected])
not([aria-disabled='true'], [data-disabled], [aria-busy='true'], [data-error])
pressed
selected
xh-collection-context=overlay
--xh-bg-subtle-hoverdate-range-picker 的 preset 部件 background-color 覆盖槽。
--xh-date-range-picker-preset-check-fgpresetbackground-colordefault--xh-_date-range-picker-check-fgdate-range-picker 的 preset 部件 background-color 覆盖槽。
--xh-date-range-picker-preset-check-sizepresetblock-size
inline-size
padding-inline-end
default--xh-glyph-size-smdate-range-picker 的 preset 部件 block-size、inline-size、padding-inline-end 覆盖槽。
--xh-date-range-picker-preset-fg-disabledpresetbackground-color
color
default
disabled
--xh-fg-disableddate-range-picker 的 preset 部件 background-color、color 覆盖槽。
--xh-date-range-picker-preset-fg-selectedpresetcolordisabled
error
highlighted
hover
is(:active, [data-pressed])
is(:focus-visible, [data-highlighted])
is([aria-selected='true'], [data-selected])
not([aria-disabled='true'], [data-disabled], [aria-busy='true'], [data-error])
pressed
selected
xh-collection-context=overlay
--xh-fg-defaultdate-range-picker 的 preset 部件 color 覆盖槽。
--xh-date-range-picker-preset-group-gappreset-groupgapdefault--xh-list-option-gapdate-range-picker 的 preset-group 部件 gap 覆盖槽。
--xh-date-range-picker-preset-group-hpreset-groupmax-block-sizedefault--xh-viewport-h-lgdate-range-picker 的 preset-group 部件 max-block-size 覆盖槽。
--xh-date-range-picker-preset-group-paddingpreset-grouppaddingdefault--xh-space-1date-range-picker 的 preset-group 部件 padding 覆盖槽。
--xh-date-range-picker-preset-pxpresetinset-inline-end
padding-inline
padding-inline-end
default--xh-space-3date-range-picker 的 preset 部件 inset-inline-end、padding-inline、padding-inline-end 覆盖槽。
--xh-date-range-picker-preset-pypresetpadding-blockdefault--xh-space-1date-range-picker 的 preset 部件 padding-block 覆盖槽。
--xh-date-range-picker-preset-radiuspresetborder-radiusdefault--xh-shape-controldate-range-picker 的 preset 部件 border-radius 覆盖槽。
--xh-date-range-picker-range-separator-fgrange-separatorcolordefault--xh-fg-subtledate-range-picker 的 range-separator 部件 color 覆盖槽。
--xh-date-range-picker-range-separator-mxrange-separatormargin-inlinedefault--xh-_date-range-picker-range-separator-mxdate-range-picker 的 range-separator 部件 margin-inline 覆盖槽。
--xh-date-range-picker-range-separator-pxrange-separatormargin-inline
padding-inline
default--xh-space-1date-range-picker 的 range-separator 部件 margin-inline、padding-inline 覆盖槽。

动效

共享关键帧 xh-overlay-slide-in · xh-overlay-slide-outfamily/motion.css 提供,皮肤 @import 它,单独引入仍成立;opacitytransition 过渡。时长与缓动读动效令牌,改令牌即改全局节奏。

皮肤之外还有一段:退场由适配器的退场闸门把关,动画播完才真收起。

系统开启减弱动效时由令牌层统一收敛,皮肤不另作判断。

响应式

皮肤按视口分档:min-width: 768px

RTL

皮肤用逻辑属性排布(inline-start 一族),dir="rtl" 下自动镜像。

Released under The MIT License