bge-ui 1.3.4 → 1.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/datePicker/components/ActionRow.vue.d.ts +1051 -0
- package/dist/datePicker/components/Common/ArrowBtn.vue.d.ts +29 -0
- package/dist/datePicker/components/Common/InstanceWrap.vue.d.ts +29 -0
- package/dist/datePicker/components/Common/SelectionOverlay.vue.d.ts +55 -0
- package/dist/datePicker/components/DatePicker/DatePicker.vue.d.ts +1114 -0
- package/dist/datePicker/components/DatePicker/DpCalendar.vue.d.ts +1085 -0
- package/dist/datePicker/components/DatePicker/DpHeader.vue.d.ts +1103 -0
- package/dist/datePicker/components/DatePicker/date-picker.d.ts +35 -0
- package/dist/datePicker/components/DatepickerInput.vue.d.ts +1008 -0
- package/dist/datePicker/components/DatepickerMenu.vue.d.ts +1061 -0
- package/dist/datePicker/components/Icons/CalendarIcon.d.ts +9 -0
- package/dist/datePicker/components/Icons/CancelIcon.d.ts +9 -0
- package/dist/datePicker/components/Icons/ChevronDownIcon.d.ts +9 -0
- package/dist/datePicker/components/Icons/ChevronLeftIcon.d.ts +9 -0
- package/dist/datePicker/components/Icons/ChevronRightIcon.d.ts +9 -0
- package/dist/datePicker/components/Icons/ChevronUpIcon.d.ts +9 -0
- package/dist/datePicker/components/Icons/ClockIcon.d.ts +9 -0
- package/dist/datePicker/components/Icons/index.d.ts +7 -0
- package/dist/datePicker/components/MonthPicker/MonthPicker.vue.d.ts +1071 -0
- package/dist/datePicker/components/MonthPicker/month-picker.d.ts +34 -0
- package/dist/datePicker/components/QuarterPicker/QuarterPicker.vue.d.ts +1043 -0
- package/dist/datePicker/components/QuarterPicker/quarter-picker.d.ts +25 -0
- package/dist/datePicker/components/TimePicker/TimeInput.vue.d.ts +1116 -0
- package/dist/datePicker/components/TimePicker/TimePicker.vue.d.ts +1087 -0
- package/dist/datePicker/components/TimePicker/TimePickerSolo.vue.d.ts +1036 -0
- package/dist/datePicker/components/TimePicker/time-picker-utils.d.ts +15 -0
- package/dist/datePicker/components/TimePicker/time-picker.d.ts +13 -0
- package/dist/datePicker/components/YearPicker/YearPicker.vue.d.ts +1040 -0
- package/dist/datePicker/components/YearPicker/year-picker.d.ts +9 -0
- package/dist/datePicker/components/shared/YearModePicker.vue.d.ts +1075 -0
- package/dist/datePicker/components/shared/month-quarter-picker.d.ts +29 -0
- package/dist/datePicker/composables/arrow-navigate.d.ts +26 -0
- package/dist/datePicker/composables/calendar-class.d.ts +8 -0
- package/dist/datePicker/composables/common.d.ts +6 -0
- package/dist/datePicker/composables/defaults.d.ts +37 -0
- package/dist/datePicker/composables/external-internal-mapper.d.ts +14 -0
- package/dist/datePicker/composables/flow.d.ts +10 -0
- package/dist/datePicker/composables/index.d.ts +14 -0
- package/dist/datePicker/composables/model.d.ts +17 -0
- package/dist/datePicker/composables/month-year.d.ts +10 -0
- package/dist/datePicker/composables/position.d.ts +25 -0
- package/dist/datePicker/composables/shared.d.ts +12 -0
- package/dist/datePicker/composables/slots.d.ts +10 -0
- package/dist/datePicker/composables/state.d.ts +8 -0
- package/dist/datePicker/composables/transition.d.ts +7 -0
- package/dist/datePicker/composables/validation.d.ts +12 -0
- package/dist/datePicker/constants/index.d.ts +43 -0
- package/dist/datePicker/datePicker.vue.d.ts +1006 -0
- package/dist/datePicker/directives/clickOutside.d.ts +2 -0
- package/dist/datePicker/index.vue.d.ts +1012 -0
- package/dist/datePicker/interfaces.d.ts +323 -0
- package/dist/datePicker/props.d.ts +865 -0
- package/dist/datePicker/utils/date-utils.d.ts +45 -0
- package/dist/datePicker/utils/defaults.d.ts +42 -0
- package/dist/datePicker/utils/timezone.d.ts +8 -0
- package/dist/datePicker/utils/type-guard.d.ts +1 -0
- package/dist/datePicker/utils/util.d.ts +57 -0
- package/dist/dialog/index.vue.d.ts +6 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.js +13008 -1250
- package/dist/style.css +1188 -1
- package/dist/tooltip/index.vue.d.ts +2 -2
- package/dist/tooltip/usePopper.d.ts +5 -5
- package/package.json +3 -2
- package/src/datePicker/components/ActionRow.vue +216 -0
- package/src/datePicker/components/Common/ArrowBtn.vue +42 -0
- package/src/datePicker/components/Common/InstanceWrap.vue +28 -0
- package/src/datePicker/components/Common/SelectionOverlay.vue +320 -0
- package/src/datePicker/components/DatePicker/DatePicker.vue +302 -0
- package/src/datePicker/components/DatePicker/DpCalendar.vue +405 -0
- package/src/datePicker/components/DatePicker/DpHeader.vue +332 -0
- package/src/datePicker/components/DatePicker/date-picker.ts +674 -0
- package/src/datePicker/components/DatepickerInput.vue +334 -0
- package/src/datePicker/components/DatepickerMenu.vue +424 -0
- package/src/datePicker/components/Icons/CalendarIcon.ts +40 -0
- package/src/datePicker/components/Icons/CancelIcon.ts +32 -0
- package/src/datePicker/components/Icons/ChevronDownIcon.ts +29 -0
- package/src/datePicker/components/Icons/ChevronLeftIcon.ts +29 -0
- package/src/datePicker/components/Icons/ChevronRightIcon.ts +29 -0
- package/src/datePicker/components/Icons/ChevronUpIcon.ts +29 -0
- package/src/datePicker/components/Icons/ClockIcon.ts +32 -0
- package/src/datePicker/components/Icons/index.ts +8 -0
- package/src/datePicker/components/MonthPicker/MonthPicker.vue +130 -0
- package/src/datePicker/components/MonthPicker/month-picker.ts +232 -0
- package/src/datePicker/components/QuarterPicker/QuarterPicker.vue +111 -0
- package/src/datePicker/components/QuarterPicker/quarter-picker.ts +153 -0
- package/src/datePicker/components/TimePicker/TimeInput.vue +477 -0
- package/src/datePicker/components/TimePicker/TimePicker.vue +265 -0
- package/src/datePicker/components/TimePicker/TimePickerSolo.vue +79 -0
- package/src/datePicker/components/TimePicker/time-picker-utils.ts +179 -0
- package/src/datePicker/components/TimePicker/time-picker.ts +112 -0
- package/src/datePicker/components/YearPicker/YearPicker.vue +70 -0
- package/src/datePicker/components/YearPicker/year-picker.ts +109 -0
- package/src/datePicker/components/shared/YearModePicker.vue +105 -0
- package/src/datePicker/components/shared/month-quarter-picker.ts +199 -0
- package/src/datePicker/composables/arrow-navigate.ts +191 -0
- package/src/datePicker/composables/calendar-class.ts +383 -0
- package/src/datePicker/composables/common.ts +25 -0
- package/src/datePicker/composables/defaults.ts +123 -0
- package/src/datePicker/composables/external-internal-mapper.ts +442 -0
- package/src/datePicker/composables/flow.ts +70 -0
- package/src/datePicker/composables/index.ts +14 -0
- package/src/datePicker/composables/model.ts +89 -0
- package/src/datePicker/composables/month-year.ts +72 -0
- package/src/datePicker/composables/position.ts +297 -0
- package/src/datePicker/composables/shared.ts +98 -0
- package/src/datePicker/composables/slots.ts +84 -0
- package/src/datePicker/composables/state.ts +25 -0
- package/src/datePicker/composables/transition.ts +18 -0
- package/src/datePicker/composables/validation.ts +312 -0
- package/src/datePicker/constants/index.ts +49 -0
- package/src/datePicker/datePicker.vue +554 -0
- package/src/datePicker/directives/clickOutside.ts +79 -0
- package/src/datePicker/index.vue +158 -0
- package/src/datePicker/interfaces.ts +404 -0
- package/src/datePicker/props.ts +173 -0
- package/src/datePicker/style/components/_ActionRow.scss +73 -0
- package/src/datePicker/style/components/_Calendar.scss +284 -0
- package/src/datePicker/style/components/_DatepickerInput.scss +109 -0
- package/src/datePicker/style/components/_DatepickerMenu.scss +213 -0
- package/src/datePicker/style/components/_MonthYearInput.scss +97 -0
- package/src/datePicker/style/components/_QuarterPicker.scss +53 -0
- package/src/datePicker/style/components/_SelectionOverlay.scss +142 -0
- package/src/datePicker/style/components/_TimeInput.scss +181 -0
- package/src/datePicker/style/components/_shared.scss +15 -0
- package/src/datePicker/style/main.scss +259 -0
- package/src/datePicker/utils/date-utils.ts +440 -0
- package/src/datePicker/utils/defaults.ts +327 -0
- package/src/datePicker/utils/timezone.ts +38 -0
- package/src/datePicker/utils/type-guard.ts +3 -0
- package/src/datePicker/utils/util.ts +322 -0
- package/src/dialog/index.vue +9 -0
- package/src/form/index.vue +2 -1
- package/src/index.ts +6 -2
- package/src/slider/index.vue +1 -1
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { ref } from 'vue';
|
|
2
|
+
import { addDays } from 'date-fns';
|
|
3
|
+
|
|
4
|
+
import { useDefaults, useValidation } from '../composables/index';
|
|
5
|
+
import { isModelAuto, matchDate } from '../utils/util';
|
|
6
|
+
import { isDateAfter, isDateBefore, isDateBetween, isDateEqual, getDate, getWeekFromDate } from '../utils/date-utils';
|
|
7
|
+
import { localToTz } from '../utils/timezone';
|
|
8
|
+
|
|
9
|
+
import type { UnwrapRef, WritableComputedRef } from 'vue';
|
|
10
|
+
import type { ICalendarDay, InternalModuleValue } from '../interfaces';
|
|
11
|
+
import type { PickerBasePropsType } from '../props';
|
|
12
|
+
|
|
13
|
+
export const useCalendarClass = (modelValue: WritableComputedRef<InternalModuleValue>, props: PickerBasePropsType) => {
|
|
14
|
+
const {
|
|
15
|
+
defaultedMultiCalendars,
|
|
16
|
+
defaultedMultiDates,
|
|
17
|
+
defaultedUI,
|
|
18
|
+
defaultedHighlight,
|
|
19
|
+
defaultedTz,
|
|
20
|
+
propDates,
|
|
21
|
+
defaultedRange,
|
|
22
|
+
} = useDefaults(props);
|
|
23
|
+
const { isDisabled } = useValidation(props);
|
|
24
|
+
// Track hovered date
|
|
25
|
+
const hoveredDate = ref<Date | null>(null);
|
|
26
|
+
// Today date
|
|
27
|
+
const today = ref<Date>(localToTz(new Date(), defaultedTz.value.timezone));
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* When using range picker keep track of hovered value in the calendar
|
|
31
|
+
*/
|
|
32
|
+
const setHoverDate = (day: UnwrapRef<ICalendarDay>): void => {
|
|
33
|
+
if (!day.current && props.hideOffsetDates) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
hoveredDate.value = day.value;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// When mouse leaves the menu clear the hover date data
|
|
40
|
+
const clearHoverDate = (): void => {
|
|
41
|
+
hoveredDate.value = null;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const checkRangeDirection = (isStart: boolean): boolean => {
|
|
45
|
+
if (
|
|
46
|
+
Array.isArray(modelValue.value) &&
|
|
47
|
+
defaultedRange.value.enabled &&
|
|
48
|
+
modelValue.value[0] &&
|
|
49
|
+
hoveredDate.value
|
|
50
|
+
) {
|
|
51
|
+
return isStart
|
|
52
|
+
? isDateAfter(hoveredDate.value, modelValue.value[0])
|
|
53
|
+
: isDateBefore(hoveredDate.value, modelValue.value[0]);
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const checkDateEqual = (day: ICalendarDay, isStart: boolean) => {
|
|
59
|
+
const startDateCompare = () => {
|
|
60
|
+
if (!modelValue.value) return null;
|
|
61
|
+
return isStart ? (modelValue.value as Date[])[0] || null : (modelValue.value as Date[])[1];
|
|
62
|
+
};
|
|
63
|
+
const dateToCompare = modelValue.value && Array.isArray(modelValue.value) ? startDateCompare() : null;
|
|
64
|
+
return isDateEqual(getDate(day.value), dateToCompare);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const checkDateBefore = (isStart: boolean) => {
|
|
68
|
+
const dateToCompare = Array.isArray(modelValue.value) ? modelValue.value[0] : null;
|
|
69
|
+
return isStart ? !isDateBefore(hoveredDate.value ?? null, dateToCompare) : true;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Check when to add a proper active start/end date class on range picker
|
|
74
|
+
*/
|
|
75
|
+
const rangeActiveStartEnd = (day: UnwrapRef<ICalendarDay>, isStart = true): boolean => {
|
|
76
|
+
if (
|
|
77
|
+
(defaultedRange.value.enabled || props.weekPicker) &&
|
|
78
|
+
Array.isArray(modelValue.value) &&
|
|
79
|
+
modelValue.value.length === 2
|
|
80
|
+
) {
|
|
81
|
+
if (props.hideOffsetDates && !day.current) return false;
|
|
82
|
+
return isDateEqual(getDate(day.value), modelValue.value[isStart ? 0 : 1]);
|
|
83
|
+
}
|
|
84
|
+
if (defaultedRange.value.enabled) {
|
|
85
|
+
return (
|
|
86
|
+
(checkDateEqual(day, isStart) && checkDateBefore(isStart)) ||
|
|
87
|
+
(isDateEqual(day.value, Array.isArray(modelValue.value) ? modelValue.value[0] : null) &&
|
|
88
|
+
checkRangeDirection(isStart))
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
// If the range mode is used, checks for the end value of hovered date
|
|
95
|
+
const isHoverDateStartEnd = (calendarDay: ICalendarDay, start?: boolean): boolean => {
|
|
96
|
+
if (Array.isArray(modelValue.value) && modelValue.value[0] && modelValue.value.length === 1) {
|
|
97
|
+
const isHover = isDateEqual(calendarDay.value, hoveredDate.value);
|
|
98
|
+
return start
|
|
99
|
+
? isDateAfter(modelValue.value[0], calendarDay.value) && isHover
|
|
100
|
+
: isDateBefore(modelValue.value[0], calendarDay.value) && isHover;
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Check if some date is active, in case of range, it will have two dates
|
|
107
|
+
*/
|
|
108
|
+
const isActiveDate = (calendarDay: ICalendarDay): boolean => {
|
|
109
|
+
if (!modelValue.value) return false;
|
|
110
|
+
if (props.hideOffsetDates && !calendarDay.current) return false;
|
|
111
|
+
if (!defaultedRange.value.enabled) {
|
|
112
|
+
if (defaultedMultiDates.value.enabled && Array.isArray(modelValue.value)) {
|
|
113
|
+
return modelValue.value.some((dateVal) => isDateEqual(dateVal, calendarDay.value));
|
|
114
|
+
}
|
|
115
|
+
return isDateEqual(calendarDay.value, modelValue.value ? (modelValue.value as Date) : today.value);
|
|
116
|
+
}
|
|
117
|
+
if (props.modelAuto && Array.isArray(modelValue.value)) {
|
|
118
|
+
return isDateEqual(calendarDay.value, modelValue.value[0] ? modelValue.value[0] : today.value);
|
|
119
|
+
}
|
|
120
|
+
return false;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Check if range ends on the given day
|
|
125
|
+
*/
|
|
126
|
+
const isHoverRangeEnd = (day: UnwrapRef<ICalendarDay>): boolean => {
|
|
127
|
+
if (defaultedRange.value.autoRange || props.weekPicker) {
|
|
128
|
+
if (hoveredDate.value) {
|
|
129
|
+
if (props.hideOffsetDates && !day.current) return false;
|
|
130
|
+
const rangeEnd = addDays(hoveredDate.value, +(defaultedRange.value.autoRange as number));
|
|
131
|
+
const range = getWeekFromDate(getDate(hoveredDate.value), props.weekStart);
|
|
132
|
+
return props.weekPicker
|
|
133
|
+
? isDateEqual(range[1], getDate(day.value))
|
|
134
|
+
: isDateEqual(rangeEnd, getDate(day.value));
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
return false;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Check if date in auto range preview is in between
|
|
143
|
+
*/
|
|
144
|
+
const isAutoRangeInBetween = (day: UnwrapRef<ICalendarDay>): boolean => {
|
|
145
|
+
if (defaultedRange.value.autoRange || props.weekPicker) {
|
|
146
|
+
if (hoveredDate.value) {
|
|
147
|
+
const rangeEnd = addDays(hoveredDate.value, +(defaultedRange.value.autoRange as number));
|
|
148
|
+
if (props.hideOffsetDates && !day.current) return false;
|
|
149
|
+
const range = getWeekFromDate(getDate(hoveredDate.value), props.weekStart);
|
|
150
|
+
return props.weekPicker
|
|
151
|
+
? isDateAfter(day.value, range[0]) && isDateBefore(day.value, range[1])
|
|
152
|
+
: isDateAfter(day.value, hoveredDate.value) && isDateBefore(day.value, rangeEnd);
|
|
153
|
+
}
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
return false;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
const isAutoRangeStart = (day: UnwrapRef<ICalendarDay>): boolean => {
|
|
160
|
+
if (defaultedRange.value.autoRange || props.weekPicker) {
|
|
161
|
+
if (hoveredDate.value) {
|
|
162
|
+
if (props.hideOffsetDates && !day.current) return false;
|
|
163
|
+
const range = getWeekFromDate(getDate(hoveredDate.value), props.weekStart);
|
|
164
|
+
return props.weekPicker ? isDateEqual(range[0], day.value) : isDateEqual(hoveredDate.value, day.value);
|
|
165
|
+
}
|
|
166
|
+
return false;
|
|
167
|
+
}
|
|
168
|
+
return false;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* If range mode used, this will check if the calendar day is between 2 active dates
|
|
173
|
+
*/
|
|
174
|
+
const rangeActive = (calendarDay: ICalendarDay): boolean => {
|
|
175
|
+
return isDateBetween(modelValue.value as Date[], hoveredDate.value, calendarDay.value);
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
const isSingleInModelAuto = (): boolean => {
|
|
179
|
+
if (props.modelAuto && Array.isArray(props.internalModelValue)) {
|
|
180
|
+
return !!props.internalModelValue[0];
|
|
181
|
+
}
|
|
182
|
+
return false;
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
const isModelAutoActive = () => {
|
|
186
|
+
if (props.modelAuto) return isModelAuto(props.internalModelValue);
|
|
187
|
+
return true;
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
// Check if date is hovered, for single picker mode
|
|
191
|
+
const dateHover = (day: ICalendarDay) => {
|
|
192
|
+
if (props.weekPicker) return false;
|
|
193
|
+
const isInRange = defaultedRange.value.enabled
|
|
194
|
+
? !rangeActiveStartEnd(day) && !rangeActiveStartEnd(day, false)
|
|
195
|
+
: true;
|
|
196
|
+
|
|
197
|
+
return !isDisabled(day.value) && !isActiveDate(day) && !(!day.current && props.hideOffsetDates) && isInRange;
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
// Check if the date is selected
|
|
201
|
+
const isActive = (day: ICalendarDay) => {
|
|
202
|
+
if (defaultedRange.value.enabled) {
|
|
203
|
+
return props.modelAuto ? isSingleInModelAuto() && isActiveDate(day) : false;
|
|
204
|
+
}
|
|
205
|
+
return isActiveDate(day);
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
// Check if the date should be highlighted
|
|
209
|
+
const highlighted = (day: ICalendarDay) => {
|
|
210
|
+
if (defaultedHighlight.value) {
|
|
211
|
+
return matchDate(day.value, propDates.value.highlight);
|
|
212
|
+
}
|
|
213
|
+
return false;
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
// If enabled, checks the days that are also highlighted to not be marked as disabled
|
|
217
|
+
const disableHighlight = (day: ICalendarDay) => {
|
|
218
|
+
const disabled = isDisabled(day.value);
|
|
219
|
+
return (
|
|
220
|
+
disabled &&
|
|
221
|
+
(typeof defaultedHighlight.value === 'function'
|
|
222
|
+
? !defaultedHighlight.value(day.value, disabled)
|
|
223
|
+
: !defaultedHighlight.value.options.highlightDisabled)
|
|
224
|
+
);
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// Check if the given week day should be highlighted
|
|
228
|
+
const highlightedWeekDay = (day: ICalendarDay) => {
|
|
229
|
+
if (typeof defaultedHighlight.value === 'function') return defaultedHighlight.value(day.value);
|
|
230
|
+
return defaultedHighlight.value.weekdays?.includes(day.value.getDay());
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
const isBetween = (day: ICalendarDay) => {
|
|
234
|
+
if (
|
|
235
|
+
(defaultedRange.value.enabled || props.weekPicker) &&
|
|
236
|
+
(defaultedMultiCalendars.value.count > 0 ? day.current : true) &&
|
|
237
|
+
isModelAutoActive() &&
|
|
238
|
+
!(!day.current && props.hideOffsetDates) &&
|
|
239
|
+
!isActiveDate(day)
|
|
240
|
+
) {
|
|
241
|
+
return rangeActive(day);
|
|
242
|
+
}
|
|
243
|
+
return false;
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
// Common classes to be checked for any mode
|
|
247
|
+
const sharedClasses = (day: ICalendarDay): Record<string, boolean> => {
|
|
248
|
+
const { isRangeStart, isRangeEnd } = rangeStartEnd(day);
|
|
249
|
+
const isRangeStartEnd = defaultedRange.value.enabled ? isRangeStart || isRangeEnd : false;
|
|
250
|
+
return {
|
|
251
|
+
dp__cell_offset: !day.current,
|
|
252
|
+
dp__pointer: !props.disabled && !(!day.current && props.hideOffsetDates) && !isDisabled(day.value),
|
|
253
|
+
dp__cell_disabled: isDisabled(day.value),
|
|
254
|
+
dp__cell_highlight:
|
|
255
|
+
!disableHighlight(day) &&
|
|
256
|
+
(highlighted(day) || highlightedWeekDay(day)) &&
|
|
257
|
+
!isActive(day) &&
|
|
258
|
+
!isRangeStartEnd &&
|
|
259
|
+
!isAutoRangeStart(day) &&
|
|
260
|
+
!(isBetween(day) && props.weekPicker) &&
|
|
261
|
+
!isRangeEnd,
|
|
262
|
+
dp__cell_highlight_active:
|
|
263
|
+
!disableHighlight(day) && (highlighted(day) || highlightedWeekDay(day)) && isActive(day),
|
|
264
|
+
dp__today: !props.noToday && isDateEqual(day.value, today.value) && day.current,
|
|
265
|
+
'dp--past': isDateBefore(day.value, today.value),
|
|
266
|
+
'dp--future': isDateAfter(day.value, today.value),
|
|
267
|
+
};
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
// Get set of classes for the single date picker
|
|
271
|
+
const singleDateClasses = (day: ICalendarDay): Record<string, boolean> => {
|
|
272
|
+
return {
|
|
273
|
+
dp__active_date: isActive(day),
|
|
274
|
+
dp__date_hover: dateHover(day),
|
|
275
|
+
};
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
// Get set of classes for the single week picker
|
|
279
|
+
const weekPickerSingleClasses = (day: ICalendarDay): Record<string, boolean> => {
|
|
280
|
+
if (modelValue.value && !Array.isArray(modelValue.value)) {
|
|
281
|
+
const week = getWeekFromDate(modelValue.value, props.weekStart);
|
|
282
|
+
return {
|
|
283
|
+
...autoRangeClasses(day),
|
|
284
|
+
dp__range_start: isDateEqual(week[0], day.value),
|
|
285
|
+
dp__range_end: isDateEqual(week[1], day.value),
|
|
286
|
+
dp__range_between_week: isDateAfter(day.value, week[0]) && isDateBefore(day.value, week[1]),
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
return {
|
|
290
|
+
...autoRangeClasses(day),
|
|
291
|
+
};
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
// Get set of classes for the range week picker
|
|
295
|
+
const weekPickerRangeClasses = (day: ICalendarDay) => {
|
|
296
|
+
if (modelValue.value && Array.isArray(modelValue.value)) {
|
|
297
|
+
const startWeek = getWeekFromDate(modelValue.value[0], props.weekStart);
|
|
298
|
+
const endWeek = modelValue.value[1] ? getWeekFromDate(modelValue.value[1], props.weekStart) : [];
|
|
299
|
+
|
|
300
|
+
return {
|
|
301
|
+
...autoRangeClasses(day),
|
|
302
|
+
dp__range_start: isDateEqual(startWeek[0], day.value) || isDateEqual(endWeek[0], day.value),
|
|
303
|
+
dp__range_end: isDateEqual(startWeek[1], day.value) || isDateEqual(endWeek[1], day.value),
|
|
304
|
+
dp__range_between_week:
|
|
305
|
+
(isDateAfter(day.value, startWeek[0]) && isDateBefore(day.value, startWeek[1])) ||
|
|
306
|
+
(isDateAfter(day.value, endWeek[0]) && isDateBefore(day.value, endWeek[1])),
|
|
307
|
+
dp__range_between: isDateAfter(day.value, startWeek[1]) && isDateBefore(day.value, endWeek[0]),
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
return {
|
|
311
|
+
...autoRangeClasses(day),
|
|
312
|
+
};
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
const rangeStartEnd = (day: ICalendarDay) => {
|
|
316
|
+
const isRangeStart =
|
|
317
|
+
defaultedMultiCalendars.value.count > 0
|
|
318
|
+
? day.current && rangeActiveStartEnd(day) && isModelAutoActive()
|
|
319
|
+
: rangeActiveStartEnd(day) && isModelAutoActive();
|
|
320
|
+
|
|
321
|
+
const isRangeEnd =
|
|
322
|
+
defaultedMultiCalendars.value.count > 0
|
|
323
|
+
? day.current && rangeActiveStartEnd(day, false) && isModelAutoActive()
|
|
324
|
+
: rangeActiveStartEnd(day, false) && isModelAutoActive();
|
|
325
|
+
return { isRangeStart, isRangeEnd };
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
// Get set of classes for the range
|
|
329
|
+
const rangeDateClasses = (day: ICalendarDay): Record<string, boolean> => {
|
|
330
|
+
const { isRangeStart, isRangeEnd } = rangeStartEnd(day);
|
|
331
|
+
return {
|
|
332
|
+
dp__range_start: isRangeStart,
|
|
333
|
+
dp__range_end: isRangeEnd,
|
|
334
|
+
dp__range_between: isBetween(day),
|
|
335
|
+
dp__date_hover:
|
|
336
|
+
isDateEqual(day.value, hoveredDate.value) && !isRangeStart && !isRangeEnd && !props.weekPicker,
|
|
337
|
+
dp__date_hover_start: isHoverDateStartEnd(day, true),
|
|
338
|
+
dp__date_hover_end: isHoverDateStartEnd(day, false),
|
|
339
|
+
};
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
// Get set of classes for auto range
|
|
343
|
+
const autoRangeClasses = (day: ICalendarDay): Record<string, boolean> => {
|
|
344
|
+
return {
|
|
345
|
+
...rangeDateClasses(day),
|
|
346
|
+
dp__cell_auto_range: isAutoRangeInBetween(day),
|
|
347
|
+
dp__cell_auto_range_start: isAutoRangeStart(day),
|
|
348
|
+
dp__cell_auto_range_end: isHoverRangeEnd(day),
|
|
349
|
+
};
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
// Return specific set of classes depending on the config, since we don't need to check for all
|
|
353
|
+
const getModeClasses = (day: ICalendarDay) => {
|
|
354
|
+
if (defaultedRange.value.enabled) {
|
|
355
|
+
if (defaultedRange.value.autoRange) return autoRangeClasses(day);
|
|
356
|
+
if (props.modelAuto) return { ...singleDateClasses(day), ...rangeDateClasses(day) };
|
|
357
|
+
if (props.weekPicker) return weekPickerRangeClasses(day);
|
|
358
|
+
return rangeDateClasses(day);
|
|
359
|
+
}
|
|
360
|
+
if (props.weekPicker) {
|
|
361
|
+
return weekPickerSingleClasses(day);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
return singleDateClasses(day);
|
|
365
|
+
};
|
|
366
|
+
|
|
367
|
+
// Get needed classes
|
|
368
|
+
const getDayClassData = (day: ICalendarDay): Record<string, boolean> => {
|
|
369
|
+
if (props.hideOffsetDates && !day.current) return {};
|
|
370
|
+
return {
|
|
371
|
+
...sharedClasses(day),
|
|
372
|
+
...getModeClasses(day),
|
|
373
|
+
[props.dayClass ? props.dayClass(day.value, props.internalModelValue) : '']: true,
|
|
374
|
+
...(defaultedUI.value.calendarCell ?? {}),
|
|
375
|
+
};
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
return {
|
|
379
|
+
setHoverDate,
|
|
380
|
+
clearHoverDate,
|
|
381
|
+
getDayClassData,
|
|
382
|
+
};
|
|
383
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { computed } from 'vue';
|
|
2
|
+
|
|
3
|
+
import type { Flow, MultiCalendarsOptions } from '../interfaces';
|
|
4
|
+
|
|
5
|
+
export const useCommon = () => {
|
|
6
|
+
const hideNavigationButtons = computed(() => (hideNavigation: Flow[] | undefined, key: Flow) => {
|
|
7
|
+
return hideNavigation?.includes(key);
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
const showLeftIcon = computed(() => (multiCalendars: MultiCalendarsOptions, instance: number) => {
|
|
11
|
+
if (multiCalendars.count) {
|
|
12
|
+
return !multiCalendars.solo ? instance === 0 : true;
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const showRightIcon = computed(() => (multiCalendars: MultiCalendarsOptions, instance: number) => {
|
|
18
|
+
if (multiCalendars.count) {
|
|
19
|
+
return !multiCalendars.solo ? instance === multiCalendars.count - 1 : true;
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
return { hideNavigationButtons, showLeftIcon, showRightIcon };
|
|
25
|
+
};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { computed } from 'vue';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
defaultAriaLabels,
|
|
5
|
+
defaultMultiCalendars,
|
|
6
|
+
defaultPreviewFormat,
|
|
7
|
+
defaultTransitions,
|
|
8
|
+
getDefaultActionRowData,
|
|
9
|
+
getDefaultConfig,
|
|
10
|
+
getDefaultFilters,
|
|
11
|
+
getDefaultHighlight,
|
|
12
|
+
getDefaultInlineOptions,
|
|
13
|
+
getDefaultMultiDates,
|
|
14
|
+
getDefaultRangeOptions,
|
|
15
|
+
getDefaultTextInputOptions,
|
|
16
|
+
getDefaultTimeZone,
|
|
17
|
+
getDefaultUI,
|
|
18
|
+
getDefaultWeekNumbers,
|
|
19
|
+
mapPropDates,
|
|
20
|
+
} from '../utils/defaults';
|
|
21
|
+
import { assignDefaultTime } from '../utils/date-utils';
|
|
22
|
+
|
|
23
|
+
import type { TimeModel } from '../interfaces';
|
|
24
|
+
import type { AllPropsType, PickerBasePropsType } from '../props';
|
|
25
|
+
|
|
26
|
+
export const useDefaults = (props: AllPropsType | PickerBasePropsType) => {
|
|
27
|
+
// Shared method for time format
|
|
28
|
+
const getTimeFormat = (): string => {
|
|
29
|
+
const seconds = props.enableSeconds ? ':ss' : '';
|
|
30
|
+
const minutes = props.enableMinutes ? ':mm' : '';
|
|
31
|
+
return props.is24 ? `HH${minutes}${seconds}` : `hh${minutes}${seconds} aa`;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// Get default format pattern, returns user specified if defined first
|
|
35
|
+
const getDefaultPattern = (): string => {
|
|
36
|
+
if (props.format) return props.format as string;
|
|
37
|
+
if (props.monthPicker) return 'MM/yyyy';
|
|
38
|
+
if (props.timePicker) return getTimeFormat();
|
|
39
|
+
if (props.weekPicker) return `${defaultedWeekNumbers.value?.type === 'iso' ? 'RR' : 'ww'}-yyyy`;
|
|
40
|
+
if (props.yearPicker) return 'yyyy';
|
|
41
|
+
if (props.quarterPicker) return 'QQQ/yyyy';
|
|
42
|
+
return props.enableTimePicker ? `MM/dd/yyyy, ${getTimeFormat()}` : 'MM/dd/yyyy';
|
|
43
|
+
};
|
|
44
|
+
const assignTime = (date: TimeModel) => assignDefaultTime(date, props.enableSeconds);
|
|
45
|
+
const getDefaultStartTime = (): TimeModel | TimeModel[] | null => {
|
|
46
|
+
if (defaultedRange.value.enabled) {
|
|
47
|
+
if (props.startTime && Array.isArray(props.startTime)) {
|
|
48
|
+
return [assignTime(props.startTime[0]), assignTime(props.startTime[1])];
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return props.startTime && !Array.isArray(props.startTime) ? assignTime(props.startTime) : null;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const defaultedMultiCalendars = computed(() => defaultMultiCalendars(props.multiCalendars));
|
|
56
|
+
|
|
57
|
+
const defaultedStartTime = computed(() => getDefaultStartTime());
|
|
58
|
+
|
|
59
|
+
const defaultedAriaLabels = computed(() => defaultAriaLabels(props.ariaLabels));
|
|
60
|
+
|
|
61
|
+
const defaultedFilters = computed(() => getDefaultFilters(props.filters));
|
|
62
|
+
|
|
63
|
+
const defaultedTransitions = computed(() => defaultTransitions(props.transitions));
|
|
64
|
+
|
|
65
|
+
const defaultedActionRow = computed(() => getDefaultActionRowData(props.actionRow));
|
|
66
|
+
|
|
67
|
+
const defaultedPreviewFormat = computed(() =>
|
|
68
|
+
defaultPreviewFormat(props.previewFormat, props.format, getDefaultPattern()),
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
const defaultedTextInput = computed(() => getDefaultTextInputOptions(props.textInput));
|
|
72
|
+
|
|
73
|
+
const defaultedInline = computed(() => getDefaultInlineOptions(props.inline));
|
|
74
|
+
|
|
75
|
+
const defaultedConfig = computed(() => getDefaultConfig(props.config));
|
|
76
|
+
|
|
77
|
+
const defaultedHighlight = computed(() => getDefaultHighlight(props.highlight));
|
|
78
|
+
|
|
79
|
+
const defaultedWeekNumbers = computed(() => getDefaultWeekNumbers(props.weekNumbers));
|
|
80
|
+
|
|
81
|
+
const defaultedTz = computed(() => getDefaultTimeZone(props.timezone));
|
|
82
|
+
|
|
83
|
+
const defaultedMultiDates = computed(() => getDefaultMultiDates(props.multiDates));
|
|
84
|
+
|
|
85
|
+
const propDates = computed(() =>
|
|
86
|
+
mapPropDates({
|
|
87
|
+
minDate: props.minDate,
|
|
88
|
+
maxDate: props.maxDate,
|
|
89
|
+
disabledDates: props.disabledDates,
|
|
90
|
+
allowedDates: props.allowedDates,
|
|
91
|
+
highlight: defaultedHighlight.value,
|
|
92
|
+
markers: props.markers,
|
|
93
|
+
timezone: defaultedTz.value,
|
|
94
|
+
isSpecific: props.monthPicker || props.yearPicker || props.quarterPicker,
|
|
95
|
+
}),
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
const defaultedRange = computed(() => getDefaultRangeOptions(props.range));
|
|
99
|
+
|
|
100
|
+
const defaultedUI = computed(() => getDefaultUI(props.ui));
|
|
101
|
+
|
|
102
|
+
return {
|
|
103
|
+
defaultedTransitions,
|
|
104
|
+
defaultedMultiCalendars,
|
|
105
|
+
defaultedStartTime,
|
|
106
|
+
defaultedAriaLabels,
|
|
107
|
+
defaultedFilters,
|
|
108
|
+
defaultedActionRow,
|
|
109
|
+
defaultedPreviewFormat,
|
|
110
|
+
defaultedTextInput,
|
|
111
|
+
defaultedInline,
|
|
112
|
+
defaultedConfig,
|
|
113
|
+
defaultedHighlight,
|
|
114
|
+
defaultedWeekNumbers,
|
|
115
|
+
defaultedRange,
|
|
116
|
+
propDates,
|
|
117
|
+
defaultedTz,
|
|
118
|
+
defaultedMultiDates,
|
|
119
|
+
defaultedUI,
|
|
120
|
+
getDefaultPattern,
|
|
121
|
+
getDefaultStartTime,
|
|
122
|
+
};
|
|
123
|
+
};
|