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.
Files changed (135) hide show
  1. package/dist/datePicker/components/ActionRow.vue.d.ts +1051 -0
  2. package/dist/datePicker/components/Common/ArrowBtn.vue.d.ts +29 -0
  3. package/dist/datePicker/components/Common/InstanceWrap.vue.d.ts +29 -0
  4. package/dist/datePicker/components/Common/SelectionOverlay.vue.d.ts +55 -0
  5. package/dist/datePicker/components/DatePicker/DatePicker.vue.d.ts +1114 -0
  6. package/dist/datePicker/components/DatePicker/DpCalendar.vue.d.ts +1085 -0
  7. package/dist/datePicker/components/DatePicker/DpHeader.vue.d.ts +1103 -0
  8. package/dist/datePicker/components/DatePicker/date-picker.d.ts +35 -0
  9. package/dist/datePicker/components/DatepickerInput.vue.d.ts +1008 -0
  10. package/dist/datePicker/components/DatepickerMenu.vue.d.ts +1061 -0
  11. package/dist/datePicker/components/Icons/CalendarIcon.d.ts +9 -0
  12. package/dist/datePicker/components/Icons/CancelIcon.d.ts +9 -0
  13. package/dist/datePicker/components/Icons/ChevronDownIcon.d.ts +9 -0
  14. package/dist/datePicker/components/Icons/ChevronLeftIcon.d.ts +9 -0
  15. package/dist/datePicker/components/Icons/ChevronRightIcon.d.ts +9 -0
  16. package/dist/datePicker/components/Icons/ChevronUpIcon.d.ts +9 -0
  17. package/dist/datePicker/components/Icons/ClockIcon.d.ts +9 -0
  18. package/dist/datePicker/components/Icons/index.d.ts +7 -0
  19. package/dist/datePicker/components/MonthPicker/MonthPicker.vue.d.ts +1071 -0
  20. package/dist/datePicker/components/MonthPicker/month-picker.d.ts +34 -0
  21. package/dist/datePicker/components/QuarterPicker/QuarterPicker.vue.d.ts +1043 -0
  22. package/dist/datePicker/components/QuarterPicker/quarter-picker.d.ts +25 -0
  23. package/dist/datePicker/components/TimePicker/TimeInput.vue.d.ts +1116 -0
  24. package/dist/datePicker/components/TimePicker/TimePicker.vue.d.ts +1087 -0
  25. package/dist/datePicker/components/TimePicker/TimePickerSolo.vue.d.ts +1036 -0
  26. package/dist/datePicker/components/TimePicker/time-picker-utils.d.ts +15 -0
  27. package/dist/datePicker/components/TimePicker/time-picker.d.ts +13 -0
  28. package/dist/datePicker/components/YearPicker/YearPicker.vue.d.ts +1040 -0
  29. package/dist/datePicker/components/YearPicker/year-picker.d.ts +9 -0
  30. package/dist/datePicker/components/shared/YearModePicker.vue.d.ts +1075 -0
  31. package/dist/datePicker/components/shared/month-quarter-picker.d.ts +29 -0
  32. package/dist/datePicker/composables/arrow-navigate.d.ts +26 -0
  33. package/dist/datePicker/composables/calendar-class.d.ts +8 -0
  34. package/dist/datePicker/composables/common.d.ts +6 -0
  35. package/dist/datePicker/composables/defaults.d.ts +37 -0
  36. package/dist/datePicker/composables/external-internal-mapper.d.ts +14 -0
  37. package/dist/datePicker/composables/flow.d.ts +10 -0
  38. package/dist/datePicker/composables/index.d.ts +14 -0
  39. package/dist/datePicker/composables/model.d.ts +17 -0
  40. package/dist/datePicker/composables/month-year.d.ts +10 -0
  41. package/dist/datePicker/composables/position.d.ts +25 -0
  42. package/dist/datePicker/composables/shared.d.ts +12 -0
  43. package/dist/datePicker/composables/slots.d.ts +10 -0
  44. package/dist/datePicker/composables/state.d.ts +8 -0
  45. package/dist/datePicker/composables/transition.d.ts +7 -0
  46. package/dist/datePicker/composables/validation.d.ts +12 -0
  47. package/dist/datePicker/constants/index.d.ts +43 -0
  48. package/dist/datePicker/datePicker.vue.d.ts +1006 -0
  49. package/dist/datePicker/directives/clickOutside.d.ts +2 -0
  50. package/dist/datePicker/index.vue.d.ts +1012 -0
  51. package/dist/datePicker/interfaces.d.ts +323 -0
  52. package/dist/datePicker/props.d.ts +865 -0
  53. package/dist/datePicker/utils/date-utils.d.ts +45 -0
  54. package/dist/datePicker/utils/defaults.d.ts +42 -0
  55. package/dist/datePicker/utils/timezone.d.ts +8 -0
  56. package/dist/datePicker/utils/type-guard.d.ts +1 -0
  57. package/dist/datePicker/utils/util.d.ts +57 -0
  58. package/dist/dialog/index.vue.d.ts +6 -3
  59. package/dist/index.d.ts +2 -1
  60. package/dist/index.js +13008 -1250
  61. package/dist/style.css +1188 -1
  62. package/dist/tooltip/index.vue.d.ts +2 -2
  63. package/dist/tooltip/usePopper.d.ts +5 -5
  64. package/package.json +3 -2
  65. package/src/datePicker/components/ActionRow.vue +216 -0
  66. package/src/datePicker/components/Common/ArrowBtn.vue +42 -0
  67. package/src/datePicker/components/Common/InstanceWrap.vue +28 -0
  68. package/src/datePicker/components/Common/SelectionOverlay.vue +320 -0
  69. package/src/datePicker/components/DatePicker/DatePicker.vue +302 -0
  70. package/src/datePicker/components/DatePicker/DpCalendar.vue +405 -0
  71. package/src/datePicker/components/DatePicker/DpHeader.vue +332 -0
  72. package/src/datePicker/components/DatePicker/date-picker.ts +674 -0
  73. package/src/datePicker/components/DatepickerInput.vue +334 -0
  74. package/src/datePicker/components/DatepickerMenu.vue +424 -0
  75. package/src/datePicker/components/Icons/CalendarIcon.ts +40 -0
  76. package/src/datePicker/components/Icons/CancelIcon.ts +32 -0
  77. package/src/datePicker/components/Icons/ChevronDownIcon.ts +29 -0
  78. package/src/datePicker/components/Icons/ChevronLeftIcon.ts +29 -0
  79. package/src/datePicker/components/Icons/ChevronRightIcon.ts +29 -0
  80. package/src/datePicker/components/Icons/ChevronUpIcon.ts +29 -0
  81. package/src/datePicker/components/Icons/ClockIcon.ts +32 -0
  82. package/src/datePicker/components/Icons/index.ts +8 -0
  83. package/src/datePicker/components/MonthPicker/MonthPicker.vue +130 -0
  84. package/src/datePicker/components/MonthPicker/month-picker.ts +232 -0
  85. package/src/datePicker/components/QuarterPicker/QuarterPicker.vue +111 -0
  86. package/src/datePicker/components/QuarterPicker/quarter-picker.ts +153 -0
  87. package/src/datePicker/components/TimePicker/TimeInput.vue +477 -0
  88. package/src/datePicker/components/TimePicker/TimePicker.vue +265 -0
  89. package/src/datePicker/components/TimePicker/TimePickerSolo.vue +79 -0
  90. package/src/datePicker/components/TimePicker/time-picker-utils.ts +179 -0
  91. package/src/datePicker/components/TimePicker/time-picker.ts +112 -0
  92. package/src/datePicker/components/YearPicker/YearPicker.vue +70 -0
  93. package/src/datePicker/components/YearPicker/year-picker.ts +109 -0
  94. package/src/datePicker/components/shared/YearModePicker.vue +105 -0
  95. package/src/datePicker/components/shared/month-quarter-picker.ts +199 -0
  96. package/src/datePicker/composables/arrow-navigate.ts +191 -0
  97. package/src/datePicker/composables/calendar-class.ts +383 -0
  98. package/src/datePicker/composables/common.ts +25 -0
  99. package/src/datePicker/composables/defaults.ts +123 -0
  100. package/src/datePicker/composables/external-internal-mapper.ts +442 -0
  101. package/src/datePicker/composables/flow.ts +70 -0
  102. package/src/datePicker/composables/index.ts +14 -0
  103. package/src/datePicker/composables/model.ts +89 -0
  104. package/src/datePicker/composables/month-year.ts +72 -0
  105. package/src/datePicker/composables/position.ts +297 -0
  106. package/src/datePicker/composables/shared.ts +98 -0
  107. package/src/datePicker/composables/slots.ts +84 -0
  108. package/src/datePicker/composables/state.ts +25 -0
  109. package/src/datePicker/composables/transition.ts +18 -0
  110. package/src/datePicker/composables/validation.ts +312 -0
  111. package/src/datePicker/constants/index.ts +49 -0
  112. package/src/datePicker/datePicker.vue +554 -0
  113. package/src/datePicker/directives/clickOutside.ts +79 -0
  114. package/src/datePicker/index.vue +158 -0
  115. package/src/datePicker/interfaces.ts +404 -0
  116. package/src/datePicker/props.ts +173 -0
  117. package/src/datePicker/style/components/_ActionRow.scss +73 -0
  118. package/src/datePicker/style/components/_Calendar.scss +284 -0
  119. package/src/datePicker/style/components/_DatepickerInput.scss +109 -0
  120. package/src/datePicker/style/components/_DatepickerMenu.scss +213 -0
  121. package/src/datePicker/style/components/_MonthYearInput.scss +97 -0
  122. package/src/datePicker/style/components/_QuarterPicker.scss +53 -0
  123. package/src/datePicker/style/components/_SelectionOverlay.scss +142 -0
  124. package/src/datePicker/style/components/_TimeInput.scss +181 -0
  125. package/src/datePicker/style/components/_shared.scss +15 -0
  126. package/src/datePicker/style/main.scss +259 -0
  127. package/src/datePicker/utils/date-utils.ts +440 -0
  128. package/src/datePicker/utils/defaults.ts +327 -0
  129. package/src/datePicker/utils/timezone.ts +38 -0
  130. package/src/datePicker/utils/type-guard.ts +3 -0
  131. package/src/datePicker/utils/util.ts +322 -0
  132. package/src/dialog/index.vue +9 -0
  133. package/src/form/index.vue +2 -1
  134. package/src/index.ts +6 -2
  135. 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
+ };