@zeedhi/vuetify 3.0.8 → 3.0.10
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/components/zd-date-input/ZdDateInput.js +23 -86
- package/dist/components/zd-date-range/ZdDateRange.js +22 -84
- package/dist/components/zd-tabs/ZdTab.js +0 -3
- package/dist/components/zd-text/ZdText.js +3 -2
- package/dist/composables/index.js +2 -0
- package/dist/composables/useDateKeydown.js +87 -0
- package/dist/composables/usePickerValue.js +19 -0
- package/dist/zd-vuetify.css +14068 -13501
- package/dist/zd-vuetify.js +8322 -4831
- package/package.json +4 -4
- package/src/components/zd-badge/ZdBadge.vue +2 -2
- package/src/components/zd-card/ZdCard.vue +2 -2
- package/src/components/zd-col/ZdCol.vue +1 -0
- package/src/components/zd-container/ZdContainer.vue +2 -2
- package/src/components/zd-date-input/ZdDateInput.ts +27 -94
- package/src/components/zd-date-input/ZdDateInput.vue +1 -0
- package/src/components/zd-date-range/ZdDateRange.ts +22 -88
- package/src/components/zd-date-range/ZdDateRange.vue +12 -14
- package/src/components/zd-footer/ZdFooter.vue +1 -0
- package/src/components/zd-grid/footer/ZdGridFooter.vue +2 -2
- package/src/components/zd-grid/toolbar/ZdGridToolbar.vue +2 -2
- package/src/components/zd-header/ZdHeader.vue +5 -5
- package/src/components/zd-iterable/ZdIterableNoData.vue +6 -6
- package/src/components/zd-iterable-component-render/ZdIterableComponentRender.vue +10 -10
- package/src/components/zd-layout/ZdLayout.vue +2 -2
- package/src/components/zd-login/ZdLogin.vue +4 -4
- package/src/components/zd-main/ZdMain.vue +2 -2
- package/src/components/zd-master-detail/ZdMasterDetail.vue +2 -2
- package/src/components/zd-modal/ZdModal.vue +2 -2
- package/src/components/zd-progress/ZdProgress.vue +2 -2
- package/src/components/zd-row/ZdRow.vue +1 -0
- package/src/components/zd-select/ZdSelect.vue +4 -4
- package/src/components/zd-select-multiple/ZdSelectMultiple.vue +4 -4
- package/src/components/zd-tabs/ZdTab.ts +0 -3
- package/src/components/zd-tabs/ZdTab.vue +1 -1
- package/src/components/zd-tabs/ZdTabItem.vue +11 -10
- package/src/components/zd-tabs/ZdTabs.vue +4 -20
- package/src/components/zd-text/ZdText.ts +3 -2
- package/src/components/zd-time/ZdTime.vue +1 -0
- package/src/components/zd-tooltip/ZdTooltip.vue +2 -2
- package/src/components/zd-tree/ZdTree.vue +4 -4
- package/src/composables/index.ts +2 -0
- package/src/composables/useDateKeydown.ts +109 -0
- package/src/composables/usePickerValue.ts +22 -0
- package/types/components/zd-date-input/ZdDateInput.d.ts +2 -2
- package/types/components/zd-date-range/ZdDateRange.d.ts +22 -7
- package/types/components/zd-grid-editable/cell/ZdGridEditableCell.d.ts +1 -1
- package/types/components/zd-layout/ZdLayout.d.ts +1 -1
- package/types/components/zd-list/ZdList.d.ts +3 -3
- package/types/components/zd-list/ZdListGroup.d.ts +2 -2
- package/types/components/zd-list/ZdListItem.d.ts +1 -1
- package/types/components/zd-month/ZdMonth.d.ts +2 -2
- package/types/components/zd-tabs/ZdTab.d.ts +0 -9
- package/types/components/zd-text/ZdText.d.ts +46 -37
- package/types/components/zd-time/ZdTime.d.ts +2 -2
- package/types/composables/index.d.ts +2 -0
- package/types/composables/useDateKeydown.d.ts +5 -0
- package/types/composables/usePickerValue.d.ts +10 -0
- package/.package.json +0 -54
- package/types/components/tek-grid/TekGrid.ts.d.ts +0 -7258
- package/types/components/tek-grid/column-filter/TekGridColumnFilter.ts.d.ts +0 -129
- package/types/components/tek-grid/column-header/TekGridHeaderRow.ts.d.ts +0 -225
- package/types/components/tek-grid/columns-button/TekGridColumnsButton.ts.d.ts +0 -2432
- package/types/components/tek-grid/filter-button/TekGridFilterButton.ts.d.ts +0 -2920
- package/types/components/tek-grid/indentation/TekGridIndentation.ts.d.ts +0 -32
- package/types/components/tek-grid/layout-options/TekGridLayoutOptions.ts.d.ts +0 -1892
- package/types/components/tek-grid/row/TekGridFooterRow.ts.d.ts +0 -90
- package/types/components/tek-grid/row/TekGridGroupRow.ts.d.ts +0 -87
- package/types/components/tooltip-overflow/ZdTooltipOverflow.ts.d.ts +0 -50
- package/types/components/zd-activator-wrapper/ZdActivatorWrapper.ts.d.ts +0 -25
- package/types/components/zd-alert/ZdAlert.ts.d.ts +0 -884
- package/types/components/zd-badge/ZdBadge.ts.d.ts +0 -624
- package/types/components/zd-breadcrumbs/ZdBreadcrumbs.ts.d.ts +0 -697
- package/types/components/zd-button/ZdButton.ts.d.ts +0 -1158
- package/types/components/zd-button-group/ZdButtonGroup.ts.d.ts +0 -785
- package/types/components/zd-card/ZdCard.ts.d.ts +0 -1028
- package/types/components/zd-carousel/ZdCarousel.ts.d.ts +0 -2007
- package/types/components/zd-checkbox/ZdCheckbox.ts.d.ts +0 -642
- package/types/components/zd-checkbox-multiple/ZdCheckboxMultiple.ts.d.ts +0 -2010
- package/types/components/zd-chip/ZdChip.ts.d.ts +0 -1256
- package/types/components/zd-code-viewer/ZdCodeViewer.ts.d.ts +0 -791
- package/types/components/zd-col/ZdCol.ts.d.ts +0 -741
- package/types/components/zd-collapse-card/ZdCollapseCard.ts.d.ts +0 -1583
- package/types/components/zd-container/ZdContainer.ts.d.ts +0 -722
- package/types/components/zd-currency/ZdCurrency.ts.d.ts +0 -2024
- package/types/components/zd-date-input/ZdDateInput.ts.d.ts +0 -960
- package/types/components/zd-dialog/ZdDialog.ts.d.ts +0 -262
- package/types/components/zd-divider/ZdDivider.ts.d.ts +0 -623
- package/types/components/zd-dropdown/ZdDropdown.ts.d.ts +0 -836
- package/types/components/zd-footer/ZdFooter.ts.d.ts +0 -1262
- package/types/components/zd-form/ZdForm.ts.d.ts +0 -118
- package/types/components/zd-frame/ZdFrame.ts.d.ts +0 -138
- package/types/components/zd-frame-page/ZdFramePage.ts.d.ts +0 -805
- package/types/components/zd-grid/ZdGrid.ts.d.ts +0 -7304
- package/types/components/zd-grid/cell/ZdGridAction.ts.d.ts +0 -14
- package/types/components/zd-grid/cell/ZdGridCell.ts.d.ts +0 -68
- package/types/components/zd-grid/cell/ZdGridCellContent.ts.d.ts +0 -58
- package/types/components/zd-grid/cell/ZdGridCheckbox.ts.d.ts +0 -53
- package/types/components/zd-grid/column-header/ZdGridColumnHeader.ts.d.ts +0 -112
- package/types/components/zd-grid/column-header/ZdGridHeaderIcon.ts.d.ts +0 -46
- package/types/components/zd-grid/column-header/ZdGridHeaderRow.ts.d.ts +0 -165
- package/types/components/zd-grid/column-header/ZdGridSort.ts.d.ts +0 -47
- package/types/components/zd-grid/footer/ZdGridFooter.ts.d.ts +0 -2087
- package/types/components/zd-grid/helper/ZdGridHelper.ts.d.ts +0 -16
- package/types/components/zd-grid/row/TableRow.ts.d.ts +0 -34
- package/types/components/zd-grid/row/ZdGridRow.ts.d.ts +0 -105
- package/types/components/zd-grid/toolbar/ZdGridToolbar.ts.d.ts +0 -2086
- package/types/components/zd-grid-editable/ZdGridEditable.ts.d.ts +0 -8663
- package/types/components/zd-grid-editable/cell/ZdGridEditableCell.ts.d.ts +0 -637
- package/types/components/zd-grid-editable/row/ZdGridEditableRow.ts.d.ts +0 -126
- package/types/components/zd-header/ZdHeader.ts.d.ts +0 -1320
- package/types/components/zd-icon/ZdIcon.ts.d.ts +0 -383
- package/types/components/zd-image/ZdImage.ts.d.ts +0 -753
- package/types/components/zd-increment/ZdIncrement.ts.d.ts +0 -2069
- package/types/components/zd-iterable/ZdIterableNoData.ts.d.ts +0 -2089
- package/types/components/zd-iterable/zd-iterable-columns-button/ZdIterableColumnsButton.ts.d.ts +0 -1645
- package/types/components/zd-iterable/zd-iterable-page-info/ZdIterablePageInfo.ts.d.ts +0 -1081
- package/types/components/zd-iterable/zd-iterable-page-size/ZdIterablePageSize.ts.d.ts +0 -2763
- package/types/components/zd-iterable/zd-iterable-pagination/ZdIterablePagination.ts.d.ts +0 -1627
- package/types/components/zd-iterable/zd-search/ZdSearch.ts.d.ts +0 -766
- package/types/components/zd-iterable-component-render/ZdIterableComponentRender.ts.d.ts +0 -2484
- package/types/components/zd-layout/ZdLayout.ts.d.ts +0 -647
- package/types/components/zd-list/ZdList.ts.d.ts +0 -1140
- package/types/components/zd-list/ZdListGroup.ts.d.ts +0 -1332
- package/types/components/zd-list/ZdListItem.ts.d.ts +0 -848
- package/types/components/zd-loading/ZdLoading.ts.d.ts +0 -350
- package/types/components/zd-login/ZdLogin.ts.d.ts +0 -1072
- package/types/components/zd-login/ZdLoginButton.ts.d.ts +0 -1910
- package/types/components/zd-main/ZdMain.ts.d.ts +0 -619
- package/types/components/zd-master-detail/ZdMasterDetail.ts.d.ts +0 -684
- package/types/components/zd-menu/ZdMenu.ts.d.ts +0 -4484
- package/types/components/zd-menu/ZdMenuButton.ts.d.ts +0 -1142
- package/types/components/zd-menu/ZdMenuGroup.ts.d.ts +0 -6286
- package/types/components/zd-menu/ZdMenuLink.ts.d.ts +0 -10437
- package/types/components/zd-menu/ZdMenuSeparator.ts.d.ts +0 -600
- package/types/components/zd-modal/ZdModal.ts.d.ts +0 -10
- package/types/components/zd-modal/ZdModalCloseButton.ts.d.ts +0 -1137
- package/types/components/zd-month/ZdMonth.ts.d.ts +0 -2217
- package/types/components/zd-number-input/ZdNumberInput.ts.d.ts +0 -2021
- package/types/components/zd-password/ZdPassword.ts.d.ts +0 -2014
- package/types/components/zd-progress/ZdProgress.ts.d.ts +0 -859
- package/types/components/zd-radio/ZdRadio.ts.d.ts +0 -682
- package/types/components/zd-row/ZdRow.ts.d.ts +0 -734
- package/types/components/zd-select/ZdSelect.ts.d.ts +0 -313
- package/types/components/zd-select-multiple/ZdSelectMultiple.ts.d.ts +0 -333
- package/types/components/zd-svg-map/ZdSvgMap.ts.d.ts +0 -414
- package/types/components/zd-switch/ZdSwitch.ts.d.ts +0 -1918
- package/types/components/zd-table/ZdTable.ts.d.ts +0 -1092
- package/types/components/zd-tabs/ZdTab.ts.d.ts +0 -674
- package/types/components/zd-tabs/ZdTabItem.ts.d.ts +0 -268
- package/types/components/zd-tabs/ZdTabs.ts.d.ts +0 -929
- package/types/components/zd-tag/ZdTag.ts.d.ts +0 -613
- package/types/components/zd-text/ZdText.ts.d.ts +0 -670
- package/types/components/zd-text-input/ZdTextInput.ts.d.ts +0 -746
- package/types/components/zd-textarea/ZdTextarea.ts.d.ts +0 -877
- package/types/components/zd-time/ZdTime.ts.d.ts +0 -2224
- package/types/components/zd-tooltip/ZdTooltip.ts.d.ts +0 -781
- package/types/components/zd-tree/ZdTree.ts.d.ts +0 -1878
- package/types/components/zd-tree/ZdTreeAfterTitle.ts.d.ts +0 -26
- package/types/components/zd-tree/ZdTreeCheckbox.ts.d.ts +0 -74
- package/types/components/zd-tree-grid/ZdTreeGrid.ts.d.ts +0 -4178
- package/types/components/zd-tree-grid/cell/ZdTreeGridCell.ts.d.ts +0 -92
- package/types/components/zd-tree-grid/row/ZdTreeGridRow.ts.d.ts +0 -124
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { DateInput } from '@zeedhi/common';
|
|
2
2
|
import { DateHelper, Mask } from '@zeedhi/core';
|
|
3
|
-
import { computed, defineComponent, mergeProps,
|
|
3
|
+
import { computed, defineComponent, mergeProps, ref } from 'vue';
|
|
4
4
|
import { getRootElement, useCreateInputInstance, useTextInput } from '..';
|
|
5
5
|
import { ZdTextInputProps } from '../zd-text-input/ZdTextInput';
|
|
6
6
|
import { useIsMobile } from '../../composables/useIsMobile';
|
|
7
|
+
import { usePickerValue } from '../../composables/usePickerValue';
|
|
8
|
+
import { useDateKeydown } from '../../composables/useDateKeydown';
|
|
7
9
|
export const ZdDateInputProps = {
|
|
8
10
|
...ZdTextInputProps,
|
|
9
11
|
allowedDates: {
|
|
@@ -100,75 +102,20 @@ const dateInputComponent = defineComponent({
|
|
|
100
102
|
const textInputScope = useTextInput(instance, ctx, root);
|
|
101
103
|
const picker = ref(null);
|
|
102
104
|
const { isMobile } = useIsMobile();
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
if (key === 'ArrowRight' || key === 'ArrowLeft' || key === 'Delete' || key === 'Backspace' || key === 'Tab') {
|
|
110
|
-
return true;
|
|
111
|
-
}
|
|
112
|
-
return false;
|
|
113
|
-
};
|
|
114
|
-
const keydown = (event) => {
|
|
115
|
-
if (!(event instanceof KeyboardEvent))
|
|
116
|
-
return;
|
|
117
|
-
const inputEl = event.target;
|
|
118
|
-
let start = inputEl.selectionStart;
|
|
119
|
-
const end = inputEl.selectionEnd;
|
|
120
|
-
const { value } = inputEl;
|
|
121
|
-
const numbers = /[0-9]/;
|
|
122
|
-
if (start === null || end === null)
|
|
123
|
-
return;
|
|
124
|
-
if (!numbers.test(event.key) && !keyAllowed(event.key)) {
|
|
125
|
-
event.preventDefault();
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
if (event.key === 'Backspace' && start === end && start > 0) {
|
|
129
|
-
while (Mask.isMaskDelimiter(inputEl.value[start - 1]) && inputEl.value[start - 1] !== ' ') {
|
|
130
|
-
start -= 1;
|
|
105
|
+
const { pickerValue } = usePickerValue(instance);
|
|
106
|
+
useDateKeydown(instance, {
|
|
107
|
+
isMaskDelimiterFn: (_value, position) => {
|
|
108
|
+
const mask = instance.mask;
|
|
109
|
+
if (typeof mask === 'string' && mask[position]) {
|
|
110
|
+
return mask[position] !== '#' && Mask.isMaskDelimiter(mask[position]);
|
|
131
111
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (Mask.getValueWithoutMask(inputEl.value) === '') {
|
|
136
|
-
instance.value = '';
|
|
137
|
-
}
|
|
138
|
-
event.preventDefault();
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
if ((event.key === 'Backspace' || event.key === 'Delete') && (start !== 0 || end !== value.length)) {
|
|
142
|
-
const selectionText = value.substring(start, end).replace(/[0-9]/g, ' ');
|
|
143
|
-
inputEl.value = value.slice(0, start) + selectionText + value.substring(end);
|
|
144
|
-
event.preventDefault();
|
|
145
|
-
}
|
|
146
|
-
else if ((event.key === 'Backspace' || event.key === 'Delete') && start === 0 && end === value.length) {
|
|
147
|
-
instance.value = '';
|
|
148
|
-
event.preventDefault();
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
if (!isPrintableKey(event.key) || Mask.isMaskDelimiter(event.key)) {
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
while (Mask.isMaskDelimiter(value[start]) && value[start] !== ' ') {
|
|
155
|
-
start += 1;
|
|
156
|
-
}
|
|
157
|
-
const firstSlice = value.substring(0, start);
|
|
158
|
-
const secondSlice = value.substring(start + 1);
|
|
159
|
-
inputEl.value = firstSlice + secondSlice;
|
|
160
|
-
}
|
|
161
|
-
inputEl.selectionStart = start;
|
|
162
|
-
inputEl.selectionEnd = start;
|
|
163
|
-
}
|
|
164
|
-
};
|
|
112
|
+
return false;
|
|
113
|
+
},
|
|
114
|
+
});
|
|
165
115
|
const onSelectDate = (date, event) => {
|
|
166
116
|
const rootElement = getRootElement(root);
|
|
167
117
|
instance.selectDate(date, event, rootElement.value);
|
|
168
118
|
};
|
|
169
|
-
const isPrintableKey = (key) => {
|
|
170
|
-
return !!key && key.length === 1;
|
|
171
|
-
};
|
|
172
119
|
const onChangeDatePicker = () => {
|
|
173
120
|
if (!isMobile.value) {
|
|
174
121
|
instance.showDatePicker = false;
|
|
@@ -186,24 +133,7 @@ const dateInputComponent = defineComponent({
|
|
|
186
133
|
instance.helperValue = helper;
|
|
187
134
|
instance.updateHelperHint();
|
|
188
135
|
};
|
|
189
|
-
const
|
|
190
|
-
return DateHelper.getLabel(name);
|
|
191
|
-
};
|
|
192
|
-
const pickerValue = computed({
|
|
193
|
-
set: (value) => {
|
|
194
|
-
instance.setNativeDate(value);
|
|
195
|
-
instance.change();
|
|
196
|
-
},
|
|
197
|
-
get: () => {
|
|
198
|
-
return instance.getNativeDate();
|
|
199
|
-
},
|
|
200
|
-
});
|
|
201
|
-
const onPickerMousedown = (event) => {
|
|
202
|
-
event.preventDefault();
|
|
203
|
-
};
|
|
204
|
-
const getAllowedDates = (date) => {
|
|
205
|
-
return instance.getAllowedDates(date);
|
|
206
|
-
};
|
|
136
|
+
const getAllowedDates = (date) => instance.getAllowedDates(date);
|
|
207
137
|
const onMonthOrYearChange = (newValue, type) => {
|
|
208
138
|
let currentDate = instance.getNativeDate();
|
|
209
139
|
if (!currentDate) {
|
|
@@ -219,6 +149,15 @@ const dateInputComponent = defineComponent({
|
|
|
219
149
|
instance.setNativeDate(currentDate);
|
|
220
150
|
instance.change();
|
|
221
151
|
};
|
|
152
|
+
const getDateMask = computed(() => {
|
|
153
|
+
return instance.mask;
|
|
154
|
+
});
|
|
155
|
+
const getLabel = (name) => {
|
|
156
|
+
return DateHelper.getLabel(name);
|
|
157
|
+
};
|
|
158
|
+
const onPickerMousedown = (event) => {
|
|
159
|
+
event.preventDefault();
|
|
160
|
+
};
|
|
222
161
|
const clearDateValues = () => {
|
|
223
162
|
instance.value = '';
|
|
224
163
|
};
|
|
@@ -229,15 +168,13 @@ const dateInputComponent = defineComponent({
|
|
|
229
168
|
root,
|
|
230
169
|
picker,
|
|
231
170
|
isMobile,
|
|
232
|
-
keydown,
|
|
233
171
|
onSelectDate,
|
|
234
|
-
isPrintableKey,
|
|
235
172
|
onChangeDatePicker,
|
|
236
|
-
keyAllowed,
|
|
237
173
|
helperValuesOptionClick,
|
|
238
174
|
getLabel,
|
|
239
175
|
mergeProps,
|
|
240
176
|
pickerValue,
|
|
177
|
+
getDateMask,
|
|
241
178
|
getAllowedDates,
|
|
242
179
|
onMonthOrYearChange,
|
|
243
180
|
clearDateValues,
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { DateRange } from '@zeedhi/common';
|
|
2
|
-
import { DateHelper, I18n
|
|
3
|
-
import { computed, defineComponent, nextTick, onMounted, ref } from 'vue';
|
|
2
|
+
import { DateHelper, I18n } from '@zeedhi/core';
|
|
4
3
|
import { getRootElement, useCreateInputInstance } from '..';
|
|
4
|
+
import { computed, defineComponent, nextTick, ref } from 'vue';
|
|
5
5
|
import { ZdTextInputProps } from '../zd-text-input/ZdTextInput';
|
|
6
6
|
import { useIsMobile } from '../../composables/useIsMobile';
|
|
7
|
+
import { usePickerValue } from '../../composables/usePickerValue';
|
|
8
|
+
import { useDateKeydown } from '../../composables/useDateKeydown';
|
|
7
9
|
export const ZdDateRangeProps = {
|
|
8
10
|
...ZdTextInputProps,
|
|
11
|
+
allowedDates: {
|
|
12
|
+
type: [Function, Array, String],
|
|
13
|
+
default: undefined,
|
|
14
|
+
},
|
|
9
15
|
appendIcon: {
|
|
10
16
|
type: String,
|
|
11
17
|
default: 'calendar',
|
|
@@ -113,26 +119,25 @@ export default defineComponent({
|
|
|
113
119
|
const { instance, root } = useCreateInputInstance(props, ctx, DateRange);
|
|
114
120
|
const picker = ref(null);
|
|
115
121
|
const { isMobile } = useIsMobile();
|
|
122
|
+
const { pickerValue } = usePickerValue(instance);
|
|
123
|
+
useDateKeydown(instance, {
|
|
124
|
+
isMaskDelimiterFn: (_value, position) => {
|
|
125
|
+
const maskValue = instance.getMaskValue();
|
|
126
|
+
return maskValue[position] && maskValue[position] !== '#';
|
|
127
|
+
},
|
|
128
|
+
});
|
|
116
129
|
const onPickerMousedown = (event) => {
|
|
117
130
|
event.preventDefault();
|
|
118
131
|
};
|
|
119
|
-
const onChangeDatePicker = () => {
|
|
120
|
-
if (
|
|
132
|
+
const onChangeDatePicker = (value) => {
|
|
133
|
+
if (!Array.isArray(value) || value.length < 2)
|
|
121
134
|
return;
|
|
122
135
|
if (!isMobile.value) {
|
|
123
136
|
instance.showDatePicker = false;
|
|
124
137
|
}
|
|
125
138
|
instance.validate();
|
|
126
139
|
};
|
|
127
|
-
const
|
|
128
|
-
set: (value) => {
|
|
129
|
-
instance.setNativeDate(value);
|
|
130
|
-
instance.change();
|
|
131
|
-
},
|
|
132
|
-
get: () => {
|
|
133
|
-
return instance.getNativeDate();
|
|
134
|
-
},
|
|
135
|
-
});
|
|
140
|
+
const isDateAllowed = (date) => instance.getAllowedDates(date);
|
|
136
141
|
const setFocus = (selectAll = false) => {
|
|
137
142
|
nextTick(() => {
|
|
138
143
|
const el = root.value instanceof HTMLElement ? root.value : root.value?.$el;
|
|
@@ -147,16 +152,10 @@ export default defineComponent({
|
|
|
147
152
|
}
|
|
148
153
|
});
|
|
149
154
|
};
|
|
150
|
-
const toMask = (format) => {
|
|
151
|
-
return format
|
|
152
|
-
.replace(/[A-Za-z]/gi, '#')
|
|
153
|
-
.split('')
|
|
154
|
-
.map((char) => (char === '#' ? /\d/ : char));
|
|
155
|
-
};
|
|
156
155
|
const getDateMask = computed(() => {
|
|
157
156
|
if (instance.isFocused) {
|
|
158
|
-
const
|
|
159
|
-
return
|
|
157
|
+
const finalMask = instance.getMaskValue();
|
|
158
|
+
return finalMask;
|
|
160
159
|
}
|
|
161
160
|
return '';
|
|
162
161
|
});
|
|
@@ -172,68 +171,6 @@ export default defineComponent({
|
|
|
172
171
|
const getLabel = (name) => {
|
|
173
172
|
return DateHelper.getLabel(name);
|
|
174
173
|
};
|
|
175
|
-
const isPrintableKey = (key) => {
|
|
176
|
-
return !!key && key.length === 1;
|
|
177
|
-
};
|
|
178
|
-
const keyAllowed = (key) => {
|
|
179
|
-
return ['ArrowRight', 'ArrowLeft', 'Delete', 'Backspace', 'Tab'].includes(key);
|
|
180
|
-
};
|
|
181
|
-
const handleKeydown = (event) => {
|
|
182
|
-
if (!(event instanceof KeyboardEvent))
|
|
183
|
-
return;
|
|
184
|
-
const inputEl = event.target;
|
|
185
|
-
let start = inputEl.selectionStart;
|
|
186
|
-
const end = inputEl.selectionEnd;
|
|
187
|
-
const { value } = inputEl;
|
|
188
|
-
const numbers = /[0-9]/;
|
|
189
|
-
if (start === null || end === null)
|
|
190
|
-
return;
|
|
191
|
-
if (!numbers.test(event.key) && !keyAllowed(event.key)) {
|
|
192
|
-
event.preventDefault();
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
if (event.key === 'Backspace' && start === end && start > 0) {
|
|
196
|
-
while (Mask.isMaskDelimiter(inputEl.value[start - 1]) && inputEl.value[start - 1] !== ' ') {
|
|
197
|
-
start -= 1;
|
|
198
|
-
}
|
|
199
|
-
inputEl.value = `${value.slice(0, start - 1)} ${value.substring(start)}`;
|
|
200
|
-
inputEl.selectionStart = start - 1;
|
|
201
|
-
inputEl.selectionEnd = start - 1;
|
|
202
|
-
if (Mask.getValueWithoutMask(inputEl.value) === '') {
|
|
203
|
-
instance.value = [];
|
|
204
|
-
}
|
|
205
|
-
event.preventDefault();
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
if ((event.key === 'Backspace' || event.key === 'Delete') && (start !== 0 || end !== value.length)) {
|
|
209
|
-
const selectionText = value.substring(start, end).replace(/[0-9-]/g, ' ');
|
|
210
|
-
inputEl.value = value.slice(0, start) + selectionText + value.substring(end);
|
|
211
|
-
event.preventDefault();
|
|
212
|
-
}
|
|
213
|
-
else if ((event.key === 'Backspace' || event.key === 'Delete') && start === 0 && end === value.length) {
|
|
214
|
-
instance.value = [];
|
|
215
|
-
event.preventDefault();
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
if (!isPrintableKey(event.key) || Mask.isMaskDelimiter(event.key))
|
|
219
|
-
return;
|
|
220
|
-
const maskValue = instance.getMaskValue();
|
|
221
|
-
while (maskValue[start].toString() !== /\d/.toString()) {
|
|
222
|
-
start += 1;
|
|
223
|
-
}
|
|
224
|
-
const firstSlice = value.substring(0, start);
|
|
225
|
-
const secondSlice = value.substring(start + 1);
|
|
226
|
-
inputEl.value = firstSlice + secondSlice;
|
|
227
|
-
}
|
|
228
|
-
inputEl.selectionStart = start;
|
|
229
|
-
inputEl.selectionEnd = start;
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
onMounted(() => {
|
|
233
|
-
const afterKeydown = instance.events.afterKeydown;
|
|
234
|
-
const afterKeydownEvents = Array.isArray(afterKeydown) ? afterKeydown : [afterKeydown];
|
|
235
|
-
afterKeydownEvents.push(({ event }) => handleKeydown(event));
|
|
236
|
-
});
|
|
237
174
|
return {
|
|
238
175
|
instance,
|
|
239
176
|
root,
|
|
@@ -243,7 +180,8 @@ export default defineComponent({
|
|
|
243
180
|
setFocus,
|
|
244
181
|
helperValuesOptionClick,
|
|
245
182
|
getLabel,
|
|
246
|
-
|
|
183
|
+
isDateAllowed,
|
|
184
|
+
pickerValue,
|
|
247
185
|
isMobile,
|
|
248
186
|
onPickerMousedown,
|
|
249
187
|
};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Text } from '@zeedhi/common';
|
|
2
2
|
import { defineComponent } from 'vue';
|
|
3
3
|
import { buildProps } from '../../utils';
|
|
4
|
-
import {
|
|
4
|
+
import { useCreateInstance, useGetMethods } from '../zd-component/ZdComponent';
|
|
5
|
+
import { ZdComponentRenderProps } from '../zd-component/ZdComponentRender';
|
|
5
6
|
export const ZdTextProps = buildProps({
|
|
6
|
-
...
|
|
7
|
+
...ZdComponentRenderProps,
|
|
7
8
|
compile: {
|
|
8
9
|
type: [Boolean, String],
|
|
9
10
|
default: false,
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { DateRange } from '@zeedhi/common';
|
|
2
|
+
import { Mask } from '@zeedhi/core';
|
|
3
|
+
import { onMounted } from 'vue';
|
|
4
|
+
const isPrintableKey = (key) => {
|
|
5
|
+
return key.length === 1;
|
|
6
|
+
};
|
|
7
|
+
const keyAllowed = (key) => {
|
|
8
|
+
return ['Tab', 'ArrowLeft', 'ArrowRight', 'Enter', 'Delete', 'Backspace'].includes(key);
|
|
9
|
+
};
|
|
10
|
+
export function useDateKeydown(instance, options) {
|
|
11
|
+
const { isMaskDelimiterFn } = options;
|
|
12
|
+
const findNextEditablePosition = (value, start) => {
|
|
13
|
+
let editablePosition = start;
|
|
14
|
+
while (isMaskDelimiterFn(value, editablePosition)) {
|
|
15
|
+
editablePosition += 1;
|
|
16
|
+
}
|
|
17
|
+
return editablePosition;
|
|
18
|
+
};
|
|
19
|
+
const keydown = (event) => {
|
|
20
|
+
if (!(event instanceof KeyboardEvent))
|
|
21
|
+
return;
|
|
22
|
+
const inputEl = event.target;
|
|
23
|
+
let start = inputEl.selectionStart;
|
|
24
|
+
const end = inputEl.selectionEnd;
|
|
25
|
+
const { value } = inputEl;
|
|
26
|
+
const numbers = /[0-9]/;
|
|
27
|
+
if (start === null || end === null)
|
|
28
|
+
return;
|
|
29
|
+
if (!numbers.test(event.key) && !keyAllowed(event.key)) {
|
|
30
|
+
event.preventDefault();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (event.key === 'Backspace' && start === end && start > 0) {
|
|
34
|
+
while (isMaskDelimiterFn(inputEl.value, start - 1) &&
|
|
35
|
+
inputEl.value[start - 1] !== ' ') {
|
|
36
|
+
start -= 1;
|
|
37
|
+
}
|
|
38
|
+
inputEl.value = `${value.slice(0, start - 1)} ${value.substring(start)}`; // Keep this for mask behavior
|
|
39
|
+
inputEl.selectionStart = start - 1;
|
|
40
|
+
inputEl.selectionEnd = start - 1;
|
|
41
|
+
if (Mask.getValueWithoutMask(inputEl.value) === '') {
|
|
42
|
+
if (instance instanceof DateRange) {
|
|
43
|
+
instance.value = [];
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
instance.value = '';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
event.preventDefault();
|
|
50
|
+
}
|
|
51
|
+
else if ((event.key === 'Backspace' || event.key === 'Delete') &&
|
|
52
|
+
(start !== 0 || end !== value.length)) {
|
|
53
|
+
const selectionText = value.substring(start, end).replace(/[0-9]/g, ' ');
|
|
54
|
+
inputEl.value = value.slice(0, start) + selectionText + value.substring(end);
|
|
55
|
+
event.preventDefault();
|
|
56
|
+
}
|
|
57
|
+
else if ((event.key === 'Backspace' || event.key === 'Delete') &&
|
|
58
|
+
start === 0 && end === value.length) { // Clear all
|
|
59
|
+
if (instance instanceof DateRange) {
|
|
60
|
+
instance.value = [];
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
instance.value = '';
|
|
64
|
+
}
|
|
65
|
+
event.preventDefault();
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
if (!isPrintableKey(event.key) || isMaskDelimiterFn(event.key, 0)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// Adjust cursor position to the next editable character for both DateInput and DateRange
|
|
72
|
+
start = findNextEditablePosition(value, start);
|
|
73
|
+
const firstSlice = value.slice(0, start);
|
|
74
|
+
const secondSlice = value.slice(start + 1);
|
|
75
|
+
inputEl.value = firstSlice + event.key + secondSlice;
|
|
76
|
+
const nextPos = findNextEditablePosition(value, start + 1);
|
|
77
|
+
inputEl.selectionStart = nextPos;
|
|
78
|
+
inputEl.selectionEnd = nextPos;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
onMounted(() => {
|
|
82
|
+
const afterKeydown = instance.events.afterKeydown;
|
|
83
|
+
const afterKeydownEvents = Array.isArray(afterKeydown) ? afterKeydown : [afterKeydown];
|
|
84
|
+
afterKeydownEvents.push(({ event }) => keydown(event));
|
|
85
|
+
instance.events.afterKeydown = afterKeydownEvents.filter((f) => f);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { computed } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* Composable to create a computed property to be used as a v-model for a date picker.
|
|
4
|
+
* It acts as a bridge between the date picker and the component's `getNativeDate` and `setNativeDate` methods.
|
|
5
|
+
* @param instance The instance of the date component (e.g., DateInput, DateRange).
|
|
6
|
+
*/
|
|
7
|
+
export function usePickerValue(instance) {
|
|
8
|
+
const pickerValue = computed({
|
|
9
|
+
get: () => {
|
|
10
|
+
return instance.getNativeDate();
|
|
11
|
+
},
|
|
12
|
+
set: (value) => {
|
|
13
|
+
instance.setNativeDate(value);
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
pickerValue,
|
|
18
|
+
};
|
|
19
|
+
}
|