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,334 @@
1
+ <template>
2
+ <div @click="handleOpen">
3
+ <slot v-if="$slots.trigger && !$slots['dp-input'] && !defaultedInline.enabled" name="trigger" />
4
+ <div v-if="!$slots.trigger && (!defaultedInline.enabled || defaultedInline.input)" class="dp__input_wrap">
5
+ <slot
6
+ v-if="
7
+ $slots['dp-input'] &&
8
+ !$slots.trigger &&
9
+ (!defaultedInline.enabled || (defaultedInline.enabled && defaultedInline.input))
10
+ "
11
+ name="dp-input"
12
+ :value="inputValue"
13
+ :is-menu-open="isMenuOpen"
14
+ :on-input="handleInput"
15
+ :on-enter="handleEnter"
16
+ :on-tab="handleTab"
17
+ :on-clear="onClear"
18
+ :on-blur="handleBlur"
19
+ :on-keypress="handleKeyPress"
20
+ :on-paste="handlePaste"
21
+ :on-focus="handleFocus"
22
+ :open-menu="() => $emit('open')"
23
+ :close-menu="() => $emit('close')"
24
+ :toggle-menu="() => $emit('toggle')"
25
+ />
26
+ <input
27
+ v-if="!$slots['dp-input']"
28
+ :id="uid ? `dp-input-${uid}` : undefined"
29
+ ref="inputRef"
30
+ data-test="dp-input"
31
+ :name="name"
32
+ :class="inputClass"
33
+ :inputmode="defaultedTextInput.enabled ? 'text' : 'none'"
34
+ :placeholder="placeholder"
35
+ :disabled="disabled"
36
+ :readonly="readonly"
37
+ :required="required"
38
+ :value="inputValue"
39
+ :autocomplete="autocomplete"
40
+ :aria-disabled="disabled || undefined"
41
+ :aria-invalid="state === false ? true : undefined"
42
+ @input="handleInput"
43
+ @blur="handleBlur"
44
+ @focus="handleFocus"
45
+ @keypress="handleKeyPress"
46
+ @keydown="handleKeyPress($event, true)"
47
+ @paste="handlePaste"
48
+ />
49
+ <div @click="emit('toggle')">
50
+ <span v-if="$slots['input-icon'] && !hideInputIcon" class="dp__input_icon" @click="emit('toggle')"
51
+ ><slot name="input-icon"
52
+ /></span>
53
+ <CalendarIcon
54
+ v-if="!$slots['input-icon'] && !hideInputIcon && !$slots['dp-input']"
55
+ :aria-label="defaultedAriaLabels?.calendarIcon"
56
+ class="dp__input_icon dp__input_icons"
57
+ @click="emit('toggle')"
58
+ />
59
+ </div>
60
+ <span v-if="$slots['clear-icon'] && inputValue && clearable && !disabled && !readonly" class="dp--clear-btn"
61
+ ><slot name="clear-icon" :clear="onClear"
62
+ /></span>
63
+ <button
64
+ v-if="clearable && !$slots['clear-icon'] && inputValue && !disabled && !readonly"
65
+ ref="clearBtnRef"
66
+ :aria-label="defaultedAriaLabels?.clearInput"
67
+ class="dp--clear-btn"
68
+ type="button"
69
+ @blur="clearBtnFocused = false"
70
+ @keydown="checkKeyDown($event, () => onClear($event), true, onClearKeydown)"
71
+ @click.prevent="onClear($event)"
72
+ >
73
+ <CancelIcon class="dp__input_icons" data-test="clear-icon" />
74
+ </button>
75
+ </div>
76
+ </div>
77
+ </template>
78
+
79
+ <script lang="ts" setup>
80
+ import { computed, nextTick, ref } from 'vue';
81
+
82
+ import { CalendarIcon, CancelIcon } from '../components/Icons';
83
+
84
+ import { assignDefaultTime, isValidDate, parseFreeInput } from '../utils/date-utils';
85
+ import { useDefaults, useValidation } from '../composables';
86
+ import { AllProps } from '../props';
87
+
88
+ import type { PropType } from 'vue';
89
+ import type { DynamicClass, InternalModuleValue } from '../interfaces';
90
+ import { checkKeyDown, checkStopPropagation } from '../utils/util';
91
+ import { isAfter } from 'date-fns';
92
+ import { EventKey } from '../constants';
93
+
94
+ defineOptions({
95
+ compatConfig: {
96
+ MODE: 3,
97
+ },
98
+ });
99
+
100
+ const emit = defineEmits([
101
+ 'clear',
102
+ 'open',
103
+ 'update:input-value',
104
+ 'set-input-date',
105
+ 'close',
106
+ 'select-date',
107
+ 'set-empty-date',
108
+ 'toggle',
109
+ 'focus-prev',
110
+ 'focus',
111
+ 'blur',
112
+ 'real-blur',
113
+ 'text-input',
114
+ ]);
115
+
116
+ const props = defineProps({
117
+ isMenuOpen: { type: Boolean as PropType<boolean>, default: false },
118
+ inputValue: { type: String as PropType<string>, default: '' },
119
+ ...AllProps,
120
+ });
121
+
122
+ const {
123
+ defaultedTextInput,
124
+ defaultedAriaLabels,
125
+ defaultedInline,
126
+ defaultedConfig,
127
+ defaultedRange,
128
+ defaultedMultiDates,
129
+ defaultedUI,
130
+ getDefaultPattern,
131
+ getDefaultStartTime,
132
+ } = useDefaults(props);
133
+
134
+ const { checkMinMaxRange } = useValidation(props);
135
+
136
+ const parsedDate = ref();
137
+ const inputRef = ref<HTMLInputElement | null>(null);
138
+ const isFocused = ref(false);
139
+ const clearBtnFocused = ref(false);
140
+ const textPasted = ref(false);
141
+ const clearBtnRef = ref<HTMLElement | null>(null);
142
+
143
+ const inputClass = computed(
144
+ (): DynamicClass => ({
145
+ dp__pointer: !props.disabled && !props.readonly && !defaultedTextInput.value.enabled,
146
+ dp__disabled: props.disabled,
147
+ dp__input_readonly: !defaultedTextInput.value.enabled,
148
+ dp__input: true,
149
+ dp__input_icon_pad: !props.hideInputIcon,
150
+ dp__input_valid: typeof props.state === 'boolean' ? props.state : false,
151
+ dp__input_invalid: typeof props.state === 'boolean' ? !props.state : false,
152
+ dp__input_focus: isFocused.value || props.isMenuOpen,
153
+ dp__input_reg: !defaultedTextInput.value.enabled,
154
+ ...(defaultedUI.value.input ?? {}),
155
+ }),
156
+ );
157
+
158
+ const handleOnEmptyInput = () => {
159
+ emit('set-input-date', null);
160
+ if (props.clearable) {
161
+ if (props.autoApply) {
162
+ emit('set-empty-date');
163
+ parsedDate.value = null;
164
+ }
165
+ }
166
+ };
167
+
168
+ const parser = (value: string): Date | null => {
169
+ const defaultTime = getDefaultStartTime();
170
+ return parseFreeInput(
171
+ value,
172
+ defaultedTextInput.value.format ?? getDefaultPattern(),
173
+ defaultTime ?? assignDefaultTime({}, props.enableSeconds),
174
+ props.inputValue,
175
+ textPasted.value,
176
+ props.formatLocale,
177
+ );
178
+ };
179
+
180
+ const handleRangeTextInput = (value: string) => {
181
+ const { rangeSeparator } = defaultedTextInput.value;
182
+ const [dateOne, dateTwo] = value.split(`${rangeSeparator}`);
183
+
184
+ if (dateOne) {
185
+ const parsedDateOne = parser(dateOne.trim());
186
+ const parsedDateTwo = dateTwo ? parser(dateTwo.trim()) : null;
187
+ if (isAfter(parsedDateOne as Date, parsedDateTwo as Date)) return;
188
+
189
+ const parsedArr = parsedDateOne && parsedDateTwo ? [parsedDateOne, parsedDateTwo] : [parsedDateOne];
190
+ if (checkMinMaxRange(parsedDateTwo as Date, parsedArr as InternalModuleValue, 0)) {
191
+ parsedDate.value = parsedDateOne ? parsedArr : null;
192
+ }
193
+ }
194
+ };
195
+
196
+ const handlePaste = () => {
197
+ textPasted.value = true;
198
+ };
199
+
200
+ const parseInput = (value: string) => {
201
+ if (defaultedRange.value.enabled) {
202
+ handleRangeTextInput(value);
203
+ } else if (defaultedMultiDates.value.enabled) {
204
+ const dates = value.split(`;`);
205
+ parsedDate.value = dates.map((val) => parser(val.trim())).filter((val) => val);
206
+ } else {
207
+ parsedDate.value = parser(value);
208
+ }
209
+ };
210
+
211
+ const handleInput = (event: Event | string): void => {
212
+ const value = typeof event === 'string' ? event : (event.target as HTMLInputElement)?.value;
213
+
214
+ if (value !== '') {
215
+ if (defaultedTextInput.value.openMenu && !props.isMenuOpen) {
216
+ emit('open');
217
+ }
218
+ parseInput(value);
219
+
220
+ emit('set-input-date', parsedDate.value);
221
+ } else {
222
+ handleOnEmptyInput();
223
+ }
224
+ textPasted.value = false;
225
+ emit('update:input-value', value);
226
+ emit('text-input', event, parsedDate.value);
227
+ };
228
+
229
+ const handleEnter = (ev: KeyboardEvent): void => {
230
+ if (defaultedTextInput.value.enabled) {
231
+ parseInput((ev.target as HTMLInputElement).value);
232
+ if (defaultedTextInput.value.enterSubmit && isValidDate(parsedDate.value) && props.inputValue !== '') {
233
+ emit('set-input-date', parsedDate.value, true);
234
+ parsedDate.value = null;
235
+ } else if (defaultedTextInput.value.enterSubmit && props.inputValue === '') {
236
+ parsedDate.value = null;
237
+ emit('clear');
238
+ }
239
+ } else {
240
+ handleOpen(ev);
241
+ }
242
+ };
243
+
244
+ const handleTab = (ev: KeyboardEvent, fromInput?: boolean): void => {
245
+ if (clearBtnRef.value && fromInput && !clearBtnFocused.value) {
246
+ ev.preventDefault();
247
+ clearBtnFocused.value = true;
248
+ clearBtnRef.value?.focus();
249
+ }
250
+ if (defaultedTextInput.value.enabled && defaultedTextInput.value.tabSubmit) {
251
+ parseInput((ev.target as HTMLInputElement).value);
252
+ }
253
+
254
+ if (defaultedTextInput.value.tabSubmit && isValidDate(parsedDate.value) && props.inputValue !== '') {
255
+ emit('set-input-date', parsedDate.value, true, true);
256
+ parsedDate.value = null;
257
+ } else if (defaultedTextInput.value.tabSubmit && props.inputValue === '') {
258
+ parsedDate.value = null;
259
+ emit('clear', true);
260
+ }
261
+ };
262
+
263
+ const handleFocus = (): void => {
264
+ isFocused.value = true;
265
+ emit('focus');
266
+ nextTick().then(() => {
267
+ if (defaultedTextInput.value.enabled && defaultedTextInput.value.selectOnFocus) {
268
+ inputRef.value?.select();
269
+ }
270
+ });
271
+ };
272
+
273
+ const handleOpen = (ev: KeyboardEvent | MouseEvent) => {
274
+ ev.preventDefault();
275
+ checkStopPropagation(ev, defaultedConfig.value, true);
276
+ if (defaultedTextInput.value.enabled && defaultedTextInput.value.openMenu && !defaultedInline.value.input) {
277
+ if (defaultedTextInput.value.openMenu === 'open' && !props.isMenuOpen) return emit('open');
278
+ if (defaultedTextInput.value.openMenu === 'toggle') return emit('toggle');
279
+ } else if (!defaultedTextInput.value.enabled) {
280
+ emit('toggle');
281
+ }
282
+ };
283
+
284
+ const handleBlur = (): void => {
285
+ emit('real-blur');
286
+ isFocused.value = false;
287
+ if (!props.isMenuOpen || (defaultedInline.value.enabled && defaultedInline.value.input)) {
288
+ emit('blur');
289
+ }
290
+ if (props.autoApply && defaultedTextInput.value.enabled && parsedDate.value && !props.isMenuOpen) {
291
+ emit('set-input-date', parsedDate.value);
292
+ emit('select-date');
293
+ parsedDate.value = null;
294
+ }
295
+ };
296
+
297
+ const onClear = (ev?: Event) => {
298
+ checkStopPropagation(ev, defaultedConfig.value, true);
299
+ emit('clear');
300
+ };
301
+
302
+ const handleKeyPress = (ev: KeyboardEvent, fromInput?: boolean): void => {
303
+ if (ev.key === 'Tab') {
304
+ handleTab(ev, fromInput);
305
+ }
306
+ if (ev.key === 'Enter') {
307
+ handleEnter(ev);
308
+ }
309
+ if (!defaultedTextInput.value.enabled) {
310
+ if (ev.code === 'Tab') return;
311
+ ev.preventDefault();
312
+ }
313
+ };
314
+
315
+ const focusInput = () => {
316
+ inputRef.value?.focus({ preventScroll: true });
317
+ };
318
+
319
+ const setParsedDate = (date: Date | null) => {
320
+ parsedDate.value = date;
321
+ };
322
+
323
+ const onClearKeydown = (event: KeyboardEvent) => {
324
+ if (event.key === EventKey.tab) {
325
+ clearBtnFocused.value = false;
326
+ handleTab(event);
327
+ }
328
+ };
329
+
330
+ defineExpose({
331
+ focusInput,
332
+ setParsedDate,
333
+ });
334
+ </script>