diff --git a/packages/components/_private/date-panel/__tests__/__snapshots__/datePanel.spec.ts.snap b/packages/components/_private/date-panel/__tests__/__snapshots__/datePanel.spec.ts.snap index 2629cad38..6729961b1 100644 --- a/packages/components/_private/date-panel/__tests__/__snapshots__/datePanel.spec.ts.snap +++ b/packages/components/_private/date-panel/__tests__/__snapshots__/datePanel.spec.ts.snap @@ -9,13 +9,27 @@ exports[`DatePanel > date type disabledDate work 1`] = ` - - - - - - - + + + + + + + @@ -204,6 +218,43 @@ exports[`DatePanel > date type disabledDate work 1`] = ` + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
1
+
+
+
+
2
+
+
+
+
3
+
+
+
+
4
+
+
+
+
5
+
+
+
+
6
+
+
+
+
7
+
+
@@ -302,13 +353,27 @@ exports[`DatePanel > render work 1`] = ` - - - - - - - + + + + + + + @@ -497,6 +562,43 @@ exports[`DatePanel > render work 1`] = ` + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
1
+
+
+
+
2
+
+
+
+
3
+
+
+
+
4
+
+
+
+
5
+
+
+
+
6
+
+
+
+
7
+
+
@@ -530,7 +632,7 @@ exports[`DatePanel > year type disabledDate work 1`] = ` - +
2022
diff --git a/packages/components/_private/date-panel/src/DatePanel.tsx b/packages/components/_private/date-panel/src/DatePanel.tsx index d091d1f4a..51110870f 100644 --- a/packages/components/_private/date-panel/src/DatePanel.tsx +++ b/packages/components/_private/date-panel/src/DatePanel.tsx @@ -27,7 +27,7 @@ export default defineComponent({ const dateConfig = useDateConfig() const { activeType, setActiveType } = useActiveType(props) const { activeDate, setActiveDate, startActiveDate } = useActiveDate(props, dateConfig, activeType) - const { maxRowIndex, maxCellIndex } = useMaxIndex(activeType, dateConfig, activeDate) + const { maxRowIndex, maxCellIndex } = useMaxIndex(activeType) provide(datePanelToken, { props, diff --git a/packages/components/_private/date-panel/src/composables/useMaxIndex.ts b/packages/components/_private/date-panel/src/composables/useMaxIndex.ts index e0b5181ab..e963c924d 100644 --- a/packages/components/_private/date-panel/src/composables/useMaxIndex.ts +++ b/packages/components/_private/date-panel/src/composables/useMaxIndex.ts @@ -6,7 +6,6 @@ */ import type { DatePanelType } from '../types' -import type { DateConfig } from '@idux/components/config' import type { ComputedRef } from 'vue' import { computed } from 'vue' @@ -16,31 +15,13 @@ export interface MaxIndexContext { maxCellIndex: ComputedRef } -export function useMaxIndex( - activeType: ComputedRef, - dateConfig: DateConfig, - activeDate: ComputedRef, -): MaxIndexContext { +export function useMaxIndex(activeType: ComputedRef): MaxIndexContext { const maxRowIndex = computed(() => { const currType = activeType.value - const { weekStartsOn, get, startOf, endOf } = dateConfig switch (currType) { case 'date': - case 'week': { - const currDate = activeDate.value - const weekStarts = weekStartsOn() - let startDay = get(startOf(currDate, 'month'), 'day') - if (startDay > weekStarts) { - startDay = startDay - weekStarts - } else if (startDay < weekStarts) { - startDay = startDay - weekStarts + 7 - } else { - startDay = 0 - } - const endDate = get(endOf(currDate, 'month'), 'date') - // 起始天数 + 当月总天数 > 5 * 7, 那么就多显示一周 - return startDay + endDate > 35 ? 6 : 5 - } + case 'week': + return 6 case 'month': return 4 case 'quarter': diff --git a/packages/components/_private/date-panel/src/panel-body/PanelBody.tsx b/packages/components/_private/date-panel/src/panel-body/PanelBody.tsx index 4046ad2b2..da840d65d 100644 --- a/packages/components/_private/date-panel/src/panel-body/PanelBody.tsx +++ b/packages/components/_private/date-panel/src/panel-body/PanelBody.tsx @@ -27,7 +27,7 @@ export default defineComponent({ const { key, label } = cell return ( - {label} +
{label}
) }) diff --git a/packages/components/_private/date-panel/src/panel-body/PanelCell.tsx b/packages/components/_private/date-panel/src/panel-body/PanelCell.tsx index a79a62afb..6e535d490 100644 --- a/packages/components/_private/date-panel/src/panel-body/PanelCell.tsx +++ b/packages/components/_private/date-panel/src/panel-body/PanelCell.tsx @@ -58,8 +58,12 @@ export default defineComponent({ ) const isStart = computed(() => startDate.value && dateConfig.isSame(startDate.value, cellDate.value, 'date')) const isEnd = computed(() => endDate.value && dateConfig.isSame(endDate.value, cellDate.value, 'date')) - const isToday = computed( - () => dayTypes.includes(activeType.value) && dateConfig.isSame(cellDate.value, dateConfig.now(), 'day'), + const isCurrent = computed(() => + dateConfig.isSame( + cellDate.value, + dateConfig.now(), + dayTypes.includes(activeType.value) ? 'day' : activeType.value, + ), ) const outView = computed(() => { const currType = activeType.value @@ -89,6 +93,10 @@ export default defineComponent({ ) }) const isInRange = computed(() => { + if (outView.value) { + return false + } + const compareType = dayTypes.includes(activeType.value) ? 'date' : activeType.value const cellDateValue = dateConfig.startOf(cellDate.value, compareType).valueOf() @@ -108,7 +116,7 @@ export default defineComponent({ [`${prefixCls}-disabled`]: isDisabled.value, [`${prefixCls}-selected`]: isSelected.value, [`${prefixCls}-in-range`]: isInRange.value, - [`${prefixCls}-today`]: isToday.value, + [`${prefixCls}-current`]: isCurrent.value, [`${prefixCls}-out-view`]: outView.value, [`${prefixCls}-start`]: isStart.value, [`${prefixCls}-end`]: isEnd.value, diff --git a/packages/components/_private/date-panel/src/panel-header/PanelHeader.tsx b/packages/components/_private/date-panel/src/panel-header/PanelHeader.tsx index 02bca836b..75f6cd5f2 100644 --- a/packages/components/_private/date-panel/src/panel-header/PanelHeader.tsx +++ b/packages/components/_private/date-panel/src/panel-header/PanelHeader.tsx @@ -106,13 +106,20 @@ export default defineComponent({ }, }) +interface ContentAttrs { + key: string + label: string + title?: string + onClick?: (evt: Event) => void +} + function useContents( activeType: ComputedRef, activeDate: ComputedRef, locale: Locale, dateConfig: DateConfig, setActiveType: (type: DatePanelType) => void, -) { +): ComputedRef { const handleClick = (evt: Event, type: DatePanelType) => { evt.stopPropagation() setActiveType(type) diff --git a/packages/components/_private/selector/style/index.less b/packages/components/_private/selector/style/index.less index ab3e379be..1a76179a9 100644 --- a/packages/components/_private/selector/style/index.less +++ b/packages/components/_private/selector/style/index.less @@ -14,6 +14,7 @@ &-content { position: relative; display: flex; + align-items: center; color: @select-color; background-color: @select-background-color; border: @select-border-width @select-border-style @select-border-color; diff --git a/packages/components/_private/trigger/style/index.less b/packages/components/_private/trigger/style/index.less index 0896877fa..0bfd5a7a3 100644 --- a/packages/components/_private/trigger/style/index.less +++ b/packages/components/_private/trigger/style/index.less @@ -74,6 +74,7 @@ align-items: center; height: 100%; transition: @transition-all-base; + font-size: @trigger-icon-font-size; } &-suffix { diff --git a/packages/components/date-picker/src/DatePicker.tsx b/packages/components/date-picker/src/DatePicker.tsx index b459aa3fd..48dfb8d39 100644 --- a/packages/components/date-picker/src/DatePicker.tsx +++ b/packages/components/date-picker/src/DatePicker.tsx @@ -67,12 +67,14 @@ export default defineComponent({ }) watch(overlayOpened, opened => { - if (!opened) { - controlContext.init(true) - } - nextTick(() => { - opened ? focus() : blur() + if (opened) { + focus() + inputRef.value?.dispatchEvent(new FocusEvent('focus')) + } else { + blur() + inputRef.value?.dispatchEvent(new FocusEvent('blur')) + } }) }) diff --git a/packages/components/date-picker/src/DateRangePicker.tsx b/packages/components/date-picker/src/DateRangePicker.tsx index 6a40653fe..693f72903 100644 --- a/packages/components/date-picker/src/DateRangePicker.tsx +++ b/packages/components/date-picker/src/DateRangePicker.tsx @@ -5,7 +5,7 @@ * found in the LICENSE file at https://github.com/IDuxFE/idux/blob/main/LICENSE */ -import { computed, defineComponent, normalizeClass, provide, watch } from 'vue' +import { computed, defineComponent, nextTick, normalizeClass, provide, watch } from 'vue' import { ɵOverlay } from '@idux/components/_private/overlay' import { useDateConfig, useGlobalConfig } from '@idux/components/config' @@ -72,11 +72,15 @@ export default defineComponent({ }) watch(overlayOpened, opened => { - if (!opened) { - rangeControlContext.init(true) - } - - opened ? focus() : blur() + nextTick(() => { + if (opened) { + focus() + inputRef.value?.dispatchEvent(new FocusEvent('focus')) + } else { + blur() + inputRef.value?.dispatchEvent(new FocusEvent('blur')) + } + }) }) watch(rangeControlContext.buffer, value => { diff --git a/packages/components/date-picker/src/composables/useActiveDate.ts b/packages/components/date-picker/src/composables/useActiveDate.ts index e609c1abe..1010f93b8 100644 --- a/packages/components/date-picker/src/composables/useActiveDate.ts +++ b/packages/components/date-picker/src/composables/useActiveDate.ts @@ -133,11 +133,11 @@ export function useRangeActiveDate( const handleFromActiveDateUpdate = (value: Date) => { setFromActiveDate(value) - setToActiveDate(calcValidActiveDate(value, toPanelValue.value, 'to')) + setToActiveDate(calcValidActiveDate(value, toActiveDate.value, 'to')) } const handleToActiveDateUpdate = (value: Date) => { setToActiveDate(value) - setFromActiveDate(calcValidActiveDate(fromPanelValue.value, value, 'from')) + setFromActiveDate(calcValidActiveDate(fromActiveDate.value, value, 'from')) } return { diff --git a/packages/components/date-picker/src/composables/useControl.ts b/packages/components/date-picker/src/composables/useControl.ts index bbe399f05..d4c881297 100644 --- a/packages/components/date-picker/src/composables/useControl.ts +++ b/packages/components/date-picker/src/composables/useControl.ts @@ -20,6 +20,8 @@ export interface PickerControlContext { dateInputValue: ComputedRef timeInputVaue: ComputedRef panelValue: ComputedRef + dateInputFocused: ComputedRef + timeInputFocused: ComputedRef visiblePanel: ComputedRef<'datePanel' | 'timePanel'> setVisiblePanel: (value: 'datePanel' | 'timePanel') => void @@ -34,6 +36,8 @@ export interface PickerControlContext { handleTimePanelChange: (value: Date) => void handleDateInputFocus: () => void handleTimeInputFocus: () => void + handleDateInputBlur: () => void + handleTimeInputBlur: () => void } export function useControl( @@ -50,6 +54,8 @@ export function useControl( const [timeInputVaue, setTimeInputValue] = useState('') const [panelValue, setPanelValue] = useState(undefined) const [visiblePanel, setVisiblePanel] = useState<'datePanel' | 'timePanel'>('datePanel') + const [dateInputFocused, setDateInputFocused] = useState(false) + const [timeInputFocused, setTimeInputFocused] = useState(false) function initInputValue(currValue: Date | undefined, force = false) { if (!currValue) { @@ -184,15 +190,25 @@ export function useControl( function handleDateInputFocus() { setVisiblePanel('datePanel') + setDateInputFocused(true) } function handleTimeInputFocus() { setVisiblePanel('timePanel') + setTimeInputFocused(true) + } + function handleDateInputBlur() { + setDateInputFocused(false) + } + function handleTimeInputBlur() { + setTimeInputFocused(false) } return { inputValue, dateInputValue, timeInputVaue, + dateInputFocused, + timeInputFocused, panelValue, visiblePanel, @@ -208,5 +224,7 @@ export function useControl( handleTimePanelChange, handleDateInputFocus, handleTimeInputFocus, + handleDateInputBlur, + handleTimeInputBlur, } } diff --git a/packages/components/date-picker/src/composables/useOverlayState.ts b/packages/components/date-picker/src/composables/useOverlayState.ts index b817744b7..5d3e65a78 100644 --- a/packages/components/date-picker/src/composables/useOverlayState.ts +++ b/packages/components/date-picker/src/composables/useOverlayState.ts @@ -28,7 +28,7 @@ export function useOverlayState( const changeOpenedState = (open: boolean) => { setOverlayOpened(open) if (!open) { - control.init() + control.init(true) } } diff --git a/packages/components/date-picker/src/composables/usePanelState.ts b/packages/components/date-picker/src/composables/usePanelState.ts deleted file mode 100644 index 4dab44b4e..000000000 --- a/packages/components/date-picker/src/composables/usePanelState.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - * @license - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://github.com/IDuxFE/idux/blob/main/LICENSE - */ - -/* eslint-disable @typescript-eslint/no-explicit-any */ - -import type { DatePickerProps } from '../types' -import type { ValueAccessor } from '@idux/cdk/forms' -import type { DateConfig } from '@idux/components/config' -import type { ComputedRef } from 'vue' - -import { watch } from 'vue' - -import { useState } from '@idux/cdk/utils' - -export interface PanelStateContext { - panelDate: ComputedRef - setPanelDate: (value: Date) => void -} - -export function usePanelState( - props: DatePickerProps, - dateConfig: DateConfig, - accessor: ValueAccessor, - formatRef: ComputedRef, -): PanelStateContext { - const initValue = accessor.valueRef.value ?? props.defaultOpenValue - const initDate = initValue ? dateConfig.convert(accessor.valueRef.value, formatRef.value) : undefined - const [panelDate, setPanelDate] = useState(initDate) - - watch(accessor.valueRef, value => { - const { convert, isSame } = dateConfig - const mergedValue = value ?? props.defaultOpenValue - if (!mergedValue) { - setPanelDate(undefined) - } - const currValue = convert(mergedValue, formatRef.value) - if (!panelDate.value || !isSame(panelDate.value, currValue, props.type)) { - setPanelDate(currValue) - } - }) - - return { - panelDate, - setPanelDate, - } -} diff --git a/packages/components/date-picker/src/composables/useTriggerProps.ts b/packages/components/date-picker/src/composables/useTriggerProps.ts index c8f411f9e..e653b0760 100644 --- a/packages/components/date-picker/src/composables/useTriggerProps.ts +++ b/packages/components/date-picker/src/composables/useTriggerProps.ts @@ -44,7 +44,7 @@ export function useTriggerProps( clearable: !accessor.disabled.value && props.clearable && !!accessor.valueRef.value, clearIcon: props.clearIcon ?? config.clearIcon, disabled: accessor.disabled.value, - focused: isFocused.value || overlayOpened.value, + focused: isFocused.value, readonly: props.readonly || inputEnableStatus.value.enableInput === false, size: props.size ?? formContext?.size.value ?? config.size, suffix: props.suffix ?? config.suffix, diff --git a/packages/components/date-picker/src/content/Content.tsx b/packages/components/date-picker/src/content/Content.tsx index ef85b6de2..7589a6626 100644 --- a/packages/components/date-picker/src/content/Content.tsx +++ b/packages/components/date-picker/src/content/Content.tsx @@ -35,12 +35,16 @@ export default defineComponent({ timeInputVaue, visiblePanel, panelValue, + dateInputFocused, + timeInputFocused, handleDateInput, handleTimeInput, handleDateInputClear, handleTimeInputClear, handleDateInputFocus, handleTimeInputFocus, + handleDateInputBlur, + handleTimeInputBlur, handleDatePanelChange, handleTimePanelChange, }, @@ -74,6 +78,14 @@ export default defineComponent({ } } + const _handleDateInputClear = (evt: Event) => { + if (!inputEnableStatus.value.enableOverlayTimeInput) { + handleClear(evt) + } + + handleDateInputClear() + } + const renderInputs = (prefixCls: string) => { if (!inputEnableStatus.value.enableOverlayDateInput) { return @@ -90,11 +102,13 @@ export default defineComponent({ clearable={props.clearable ?? config.clearable} clearIcon={props.clearIcon ?? config.clearIcon} clearVisible={!!dateInputValue.value} + focused={dateInputFocused.value} placeholder={dateFormatRef.value} onInput={handleDateInput} onFocus={handleDateInputFocus} + onBlur={handleDateInputBlur} onKeydown={handleKeyDown} - onClear={inputEnableStatus.value.enableOverlayTimeInput ? handleDateInputClear : handleClear} + onClear={_handleDateInputClear} /> {inputEnableStatus.value.enableOverlayTimeInput && ( <ɵInput @@ -106,8 +120,10 @@ export default defineComponent({ clearIcon={props.clearIcon ?? config.clearIcon} clearVisible={!!timeInputVaue.value} placeholder={timeFormatRef.value} + focused={timeInputFocused.value} onInput={handleTimeInput} onFocus={handleTimeInputFocus} + onBlur={handleTimeInputBlur} onKeydown={handleKeyDown} onClear={handleTimeInputClear} /> diff --git a/packages/components/date-picker/src/content/RangeContent.tsx b/packages/components/date-picker/src/content/RangeContent.tsx index e21289129..65594113b 100644 --- a/packages/components/date-picker/src/content/RangeContent.tsx +++ b/packages/components/date-picker/src/content/RangeContent.tsx @@ -82,28 +82,35 @@ export default defineComponent({ const { dateInputValue, timeInputVaue, + dateInputFocused, + timeInputFocused, handleDateInput, handleTimeInput, handleDateInputClear, handleTimeInputClear, handleDateInputFocus, handleTimeInputFocus, + handleDateInputBlur, + handleTimeInputBlur, handleTimePanelChange, } = isFrom ? fromControl : toControl const inputs = enableOverlayDateInput && (
<ɵInput - ref={inputInstance} + ref={isFrom ? inputInstance : undefined} class={`${prefixCls}-date-input`} v-slots={slots} value={dateInputValue.value} size="sm" clearable={props.clearable ?? config.clearable} clearIcon={props.clearIcon ?? config.clearIcon} + clearVisible={!!dateInputValue.value} + focused={dateInputFocused.value} placeholder={dateFormatRef.value} onInput={handleDateInput} onFocus={handleDateInputFocus} + onBlur={handleDateInputBlur} onKeydown={handleKeyDown} onClear={handleDateInputClear} /> @@ -115,9 +122,12 @@ export default defineComponent({ size="sm" clearable={props.clearable ?? config.clearable} clearIcon={props.clearIcon ?? config.clearIcon} + clearVisible={!!timeInputVaue.value} + focused={timeInputFocused.value} placeholder={timeFormatRef.value} onInput={handleTimeInput} onFocus={handleTimeInputFocus} + onBlur={handleTimeInputBlur} onKeydown={handleKeyDown} onClear={handleTimeInputClear} /> @@ -163,7 +173,9 @@ export default defineComponent({ const children = [
{renderBoard(boardPrefixCls, true)} -
{inputEnableStatus.value.enableOverlayDateInput && renderSeparator()}
+
+ {inputEnableStatus.value.enableOverlayDateInput && renderSeparator()} +
{renderBoard(boardPrefixCls, false)}
, <ɵFooter diff --git a/packages/components/date-picker/src/trigger/RangeTrigger.tsx b/packages/components/date-picker/src/trigger/RangeTrigger.tsx index 941a5f696..1fab0fad3 100644 --- a/packages/components/date-picker/src/trigger/RangeTrigger.tsx +++ b/packages/components/date-picker/src/trigger/RangeTrigger.tsx @@ -69,18 +69,23 @@ export default defineComponent({ ) } + const renderContent = (prefixCls: string) => ( +
+ {renderSide(true)} + {renderSeparator()} + {renderSide(false)} +
+ ) + return () => { const prefixCls = mergedPrefixCls.value + const triggerSlots = { + default: () => renderContent(prefixCls), + suffix: slots.suffix, + clearIcon: slots.clearIcon, + } - return ( - <ɵTrigger className={prefixCls} v-slots={slots} {...triggerProps.value}> -
- {renderSide(true)} - {renderSeparator()} - {renderSide(false)} -
- - ) + return <ɵTrigger className={prefixCls} v-slots={triggerSlots} {...triggerProps.value} /> } }, }) diff --git a/packages/components/date-picker/src/trigger/Trigger.tsx b/packages/components/date-picker/src/trigger/Trigger.tsx index d5670df47..e22c5e949 100644 --- a/packages/components/date-picker/src/trigger/Trigger.tsx +++ b/packages/components/date-picker/src/trigger/Trigger.tsx @@ -39,27 +39,35 @@ export default defineComponent({ callEmit(props.onInput, evt) } - return () => { + const renderContent = (prefixCls: string) => { const { readonly, disabled } = triggerProps.value - const prefixCls = mergedPrefixCls.value return ( - <ɵTrigger className={prefixCls} v-slots={slots} {...triggerProps.value}> -
- -
- +
+ +
) } + + return () => { + const prefixCls = mergedPrefixCls.value + const triggerSlots = { + default: () => renderContent(prefixCls), + suffix: slots.suffix, + clearIcon: slots.clearIcon, + } + + return <ɵTrigger className={prefixCls} v-slots={triggerSlots} {...triggerProps.value} /> + } }, }) diff --git a/packages/components/date-picker/style/index.less b/packages/components/date-picker/style/index.less index a87633e43..04de99118 100644 --- a/packages/components/date-picker/style/index.less +++ b/packages/components/date-picker/style/index.less @@ -1,7 +1,6 @@ @import '../../style/mixins/borderless.less'; @import '../../style/mixins/placeholder.less'; @import '../../style/mixins/reset.less'; -@import './input.less'; @import './panel.less'; .@{date-picker-prefix}, @@ -9,7 +8,10 @@ display: inline-flex; width: 100%; line-height: @date-picker-line-height; - background-color: @date-picker-background-color; + + &:not(.@{trigger-prefix}-disabled) { + color: @date-picker-color; + } &-input { width: 100%; @@ -32,13 +34,21 @@ } &-board { - &-inputs { + & &-inputs { display: flex; justify-content: center; margin-bottom: @date-picker-overlay-inputs-margin-bottom; + color: @date-picker-color; + + & .@{input-prefix}-focused { + box-shadow: none; + } } & &-date-input { width: @date-picker-overlay-date-input-width; + input { + color: @date-picker-color; + } } & &-date-input:only-child { width: 100%; @@ -46,6 +56,9 @@ & &-time-input { width: @date-picker-overlay-time-input-width; margin-left: @date-picker-overlay-input-gap; + input { + color: @date-picker-color; + } } &-panel { @@ -93,13 +106,14 @@ display: flex; padding: @date-range-picker-overlay-content-padding; } - &-gap { + &-separator { display: flex; justify-content: center; align-items: flex-start; - width: @date-range-picker-overlay-gap-width; - padding: @date-range-picker-overlay-gap-padding; + width: @date-range-picker-overlay-separator-width; + padding: @date-range-picker-overlay-separator-padding; text-align: center; + font-size: @date-range-picker-overlay-separator-font-size; color: @date-picker-color; } diff --git a/packages/components/date-picker/style/input.less b/packages/components/date-picker/style/input.less deleted file mode 100644 index 98c92dcb0..000000000 --- a/packages/components/date-picker/style/input.less +++ /dev/null @@ -1,122 +0,0 @@ -// .date-picker-input-size(@font-size; @padding-vertical; @padding-horizontal; @height) { -// font-size: @font-size; - -// .@{date-picker-prefix}-input { -// padding: @padding-vertical @padding-horizontal; -// } - -// .@{date-picker-prefix}-clear { -// right: @padding-horizontal; -// } -// } - -// .date-picker-input-inner() { -// display: inline-block; -// width: 100%; -// min-width: 0; -// outline: 0; - -// &[disabled] { -// cursor: not-allowed; -// } - -// .placeholder(@date-picker-placeholder-color); -// } - -.date-picker-input() { - - &-input { - position: relative; - display: inline-flex; - align-items: center; - width: 100%; - border: @date-picker-border-width @date-picker-border-style @date-picker-border-color; - border-radius: @date-picker-border-radius; - transition: all @transition-duration-base @ease-in-out; - - &:hover { - border-color: @date-picker-hover-color; - } - - // &-inner { - // .date-picker-input-inner(); - // } - } - - // &-suffix, - // &-clear { - // color: @date-picker-placeholder-color; - // transition: color @transition-duration-base; - // cursor: pointer; - - // &:hover { - // color: @date-picker-color-secondary; - // } - // } - - // &-clear { - // position: absolute; - // z-index: 1; - // opacity: 0; - // background-color: @date-picker-background-color; - // transition: opacity @transition-duration-base; - // } - - // &:hover &-clear { - // opacity: 1; - // } - - // &-sm { - // .date-picker-input-size(@date-picker-font-size-sm; @date-picker-padding-vertical-sm; @date-picker-padding-horizontal-sm; @date-picker-height-sm); - // } - - // &-md { - // .date-picker-input-size(@date-picker-font-size-md; @date-picker-padding-vertical-md; @date-picker-padding-horizontal-md; @date-picker-height-md); - // } - - // &-lg { - // .date-picker-input-size(@date-picker-font-size-lg; @date-picker-padding-vertical-lg; @date-picker-padding-horizontal-lg; @date-picker-height-lg); - // } - - // &-opened, - // &-focused { - // .@{date-picker-prefix}-input { - // border-color: @date-picker-active-color; - // box-shadow: @date-picker-active-box-shadow; - // } - // } - - // &-disabled { - // color: @date-picker-disabled-color; - // background-color: @date-picker-disabled-background-color; - // cursor: not-allowed; - // opacity: 1; - - // .@{date-picker-prefix}-input { - - // &:hover { - // border-color: @date-picker-border-color; - // } - - // .@{input-prefix}-suffix { - // cursor: not-allowed; - - // &:hover { - // color: @date-picker-disabled-color; - // } - // } - // } - // } - - // &-borderless { - - // &, - // &:hover, - // &-focused, - // &-disabled { - // .@{date-picker-prefix}-input { - // .borderless(); - // } - // } - // } -} diff --git a/packages/components/date-picker/style/panel.less b/packages/components/date-picker/style/panel.less index c5f61ce35..061662113 100644 --- a/packages/components/date-picker/style/panel.less +++ b/packages/components/date-picker/style/panel.less @@ -11,8 +11,6 @@ &-header { display: flex; - font-size: @date-picker-panel-header-font-size; - font-weight: @date-picker-panel-header-font-weight; padding: @date-picker-panel-header-padding; line-height: @date-picker-panel-header-height - @date-picker-panel-border-width; border-bottom: @date-picker-panel-header-border-bottom; @@ -25,6 +23,7 @@ button { font-size: @date-picker-panel-header-button-font-size; + font-weight: @date-picker-panel-header-button-font-weight; transition: color @transition-duration-base; &:hover { @@ -68,22 +67,21 @@ overflow: hidden; } - thead { - background-color: @date-picker-panel-body-header-background-color; - border-bottom: @date-picker-panel-body-header-border-bottom; - } - th, td { position: relative; z-index: 1; } - th { - font-weight: @date-picker-panel-body-header-font-weight; + &-header-cell { + display: flex; + justify-content: center; + align-items: center; min-width: @date-picker-panel-cell-width; height: @date-picker-panel-cell-height; - line-height: @date-picker-panel-cell-height; + margin-bottom: @date-picker-panel-body-header-margin-bottom; + font-weight: @date-picker-panel-body-header-font-weight; + background-color: @date-picker-panel-body-header-background-color; } } @@ -96,6 +94,7 @@ &-cell { padding: @date-picker-panel-cell-padding; color: @date-picker-panel-color; + overflow: hidden; cursor: pointer; &-out-view { @@ -123,22 +122,10 @@ transition: background @transition-duration-base, border @transition-duration-base; } - &-today { - position: relative; - &::after { - content: ''; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - margin: auto; - width: @date-picker-panel-cell-today-mark-width; - height: @date-picker-panel-cell-today-mark-height; - border: @date-picker-panel-border-width @date-picker-panel-border-style @date-picker-panel-cell-today-border-color; - border-radius: @date-picker-panel-cell-border-radius; - color: @date-picker-panel-cell-today-color; - } + &-current:not(&-selected) .@{date-panel-prefix}-cell-trigger { + border: @date-picker-panel-border-width @date-picker-panel-border-style + @date-picker-panel-cell-current-border-color; + color: @date-picker-panel-cell-current-color; } &-selected .@{date-panel-prefix}-cell-trigger { @@ -184,20 +171,21 @@ } } &-week { - .@{date-panel-prefix}-row { + .@{date-panel-prefix}-row:not(.@{date-panel-prefix}-week .@{date-panel-prefix}-row:hover) + .@{date-panel-prefix}-cell-selected { &:hover { - .@{date-panel-prefix}-cell-inner { + .@{date-panel-prefix}-cell:not(.@{date-panel-prefix}-cell-disabled) .@{date-panel-prefix}-cell-inner { border-radius: 0; background: @date-picker-panel-cell-hover-background-color; color: @date-picker-panel-cell-hover-color; } - .@{date-panel-prefix}-cell:first-child { + .@{date-panel-prefix}-cell:not(.@{date-panel-prefix}-cell-disabled):first-child { .@{date-panel-prefix}-cell-inner { border-top-left-radius: @date-picker-panel-cell-border-radius; border-bottom-left-radius: @date-picker-panel-cell-border-radius; } } - .@{date-panel-prefix}-cell:last-child { + .@{date-panel-prefix}-cell:not(.@{date-panel-prefix}-cell-disabled):last-child { .@{date-panel-prefix}-cell-inner { border-top-right-radius: @date-picker-panel-cell-border-radius; border-bottom-right-radius: @date-picker-panel-cell-border-radius; @@ -209,7 +197,8 @@ &-date, &-week { - .@{date-panel-prefix}-cell-selected { + .@{date-panel-prefix}-row:not(.@{date-panel-prefix}-week .@{date-panel-prefix}-row:hover) + .@{date-panel-prefix}-cell-selected { z-index: 0; .@{date-panel-prefix}-cell-trigger { color: @date-picker-panel-color-inverse; @@ -263,7 +252,7 @@ &-header { padding: @date-picker-panel-header-padding-lg; } - + &-body { padding: @date-picker-panel-body-padding-lg; } diff --git a/packages/components/date-picker/style/themes/default.ts b/packages/components/date-picker/style/themes/default.ts index db6d918c5..0f840c2f1 100644 --- a/packages/components/date-picker/style/themes/default.ts +++ b/packages/components/date-picker/style/themes/default.ts @@ -2,5 +2,6 @@ import '@idux/components/style/core/default' import '@idux/components/_private/overlay/style/themes/default' import '@idux/components/icon/style/themes/default' +import '@idux-vue2/components/input/style/themes/default' import './default.less' diff --git a/packages/components/date-picker/style/themes/default.variable.less b/packages/components/date-picker/style/themes/default.variable.less index 1d16a1881..b8f65b77b 100644 --- a/packages/components/date-picker/style/themes/default.variable.less +++ b/packages/components/date-picker/style/themes/default.variable.less @@ -1,8 +1,6 @@ // Trigger @date-picker-line-height: @form-line-height; @date-picker-color: @form-color; -@date-picker-background-color: @form-background-color; -@date-picker-disabled-background-color: @form-disabled-background-color; // Range Trigger @date-range-picker-trigger-separator-margin: @spacing-xl; @@ -23,17 +21,16 @@ @date-picker-panel-header-padding: 0 0 @spacing-xs 0; @date-picker-panel-header-height: @height-md; @date-picker-panel-header-item-padding: 0 @spacing-xs; -@date-picker-panel-header-font-size: @font-size-md; -@date-picker-panel-header-font-weight: @font-weight-lg; @date-picker-panel-header-border-bottom: none; @date-picker-panel-header-button-font-size: @font-size-lg; +@date-picker-panel-header-button-font-weight: @font-weight-lg; @date-picker-panel-header-content-spacing: @spacing-lg; @date-picker-panel-header-padding-lg: 0 0 @spacing-2xl; @date-picker-panel-body-padding: 0; @date-picker-panel-body-padding-lg: 0; @date-picker-panel-body-font-size: @font-size-md; -@date-picker-panel-body-header-border-bottom: solid transparent @spacing-md; +@date-picker-panel-body-header-margin-bottom: @spacing-md; @date-picker-panel-body-header-font-weight: @font-weight-md; @date-picker-panel-body-header-background-color: @color-graphite-l50; @@ -53,14 +50,12 @@ @date-picker-panel-cell-trigger-height-lg: 24px; @date-picker-panel-cell-border-radius: @border-radius-full; -@date-picker-panel-cell-border-radius-lg: @border-radius-md; +@date-picker-panel-cell-border-radius-lg: @border-radius-sm; @date-picker-panel-cell-hover-background-color: @color-graphite-l50; @date-picker-panel-cell-hover-color: @color-primary; -@date-picker-panel-cell-today-mark-width: 24px; -@date-picker-panel-cell-today-mark-height: 24px; -@date-picker-panel-cell-today-border-color: @color-blue-l40; -@date-picker-panel-cell-today-color: @color-primary; +@date-picker-panel-cell-current-border-color: @color-blue-l40; +@date-picker-panel-cell-current-color: @color-primary; @date-picker-overlay-footer-border-width: @form-border-width; @date-picker-overlay-footer-border-style: @form-border-style; @@ -82,8 +77,9 @@ @date-range-picker-overlay-padding: @spacing-lg @spacing-lg 0 @spacing-lg; @date-range-picker-overlay-content-padding: 0 0 @spacing-sm 0; -@date-range-picker-overlay-gap-width: @spacing-2xl; -@date-range-picker-overlay-gap-padding: 1px 0 0 0; +@date-range-picker-overlay-separator-width: @spacing-2xl; +@date-range-picker-overlay-separator-padding: 1px 0 0 0; +@date-range-picker-overlay-separator-font-size: @font-size-md; @date-range-picker-overlay-footer-border-width: @date-picker-overlay-footer-border-width; @date-range-picker-overlay-footer-border-style: @date-picker-overlay-footer-border-style; @@ -96,4 +92,4 @@ @date-range-picker-panel-border-width: @form-border-width; @date-range-picker-panel-border-style: @form-border-style; @date-range-picker-panel-border-color: @form-border-color; -@date-range-picker-panel-border-radius: 2px; \ No newline at end of file +@date-range-picker-panel-border-radius: @border-radius-sm; \ No newline at end of file diff --git a/packages/components/input/style/mixin.less b/packages/components/input/style/mixin.less index 09c34c620..fa38d9289 100644 --- a/packages/components/input/style/mixin.less +++ b/packages/components/input/style/mixin.less @@ -4,6 +4,7 @@ width: 100%; min-width: 0; outline: 0; + color: @input-color; &[disabled] { cursor: not-allowed;