@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.
Files changed (163) hide show
  1. package/dist/components/zd-date-input/ZdDateInput.js +23 -86
  2. package/dist/components/zd-date-range/ZdDateRange.js +22 -84
  3. package/dist/components/zd-tabs/ZdTab.js +0 -3
  4. package/dist/components/zd-text/ZdText.js +3 -2
  5. package/dist/composables/index.js +2 -0
  6. package/dist/composables/useDateKeydown.js +87 -0
  7. package/dist/composables/usePickerValue.js +19 -0
  8. package/dist/zd-vuetify.css +14068 -13501
  9. package/dist/zd-vuetify.js +8322 -4831
  10. package/package.json +4 -4
  11. package/src/components/zd-badge/ZdBadge.vue +2 -2
  12. package/src/components/zd-card/ZdCard.vue +2 -2
  13. package/src/components/zd-col/ZdCol.vue +1 -0
  14. package/src/components/zd-container/ZdContainer.vue +2 -2
  15. package/src/components/zd-date-input/ZdDateInput.ts +27 -94
  16. package/src/components/zd-date-input/ZdDateInput.vue +1 -0
  17. package/src/components/zd-date-range/ZdDateRange.ts +22 -88
  18. package/src/components/zd-date-range/ZdDateRange.vue +12 -14
  19. package/src/components/zd-footer/ZdFooter.vue +1 -0
  20. package/src/components/zd-grid/footer/ZdGridFooter.vue +2 -2
  21. package/src/components/zd-grid/toolbar/ZdGridToolbar.vue +2 -2
  22. package/src/components/zd-header/ZdHeader.vue +5 -5
  23. package/src/components/zd-iterable/ZdIterableNoData.vue +6 -6
  24. package/src/components/zd-iterable-component-render/ZdIterableComponentRender.vue +10 -10
  25. package/src/components/zd-layout/ZdLayout.vue +2 -2
  26. package/src/components/zd-login/ZdLogin.vue +4 -4
  27. package/src/components/zd-main/ZdMain.vue +2 -2
  28. package/src/components/zd-master-detail/ZdMasterDetail.vue +2 -2
  29. package/src/components/zd-modal/ZdModal.vue +2 -2
  30. package/src/components/zd-progress/ZdProgress.vue +2 -2
  31. package/src/components/zd-row/ZdRow.vue +1 -0
  32. package/src/components/zd-select/ZdSelect.vue +4 -4
  33. package/src/components/zd-select-multiple/ZdSelectMultiple.vue +4 -4
  34. package/src/components/zd-tabs/ZdTab.ts +0 -3
  35. package/src/components/zd-tabs/ZdTab.vue +1 -1
  36. package/src/components/zd-tabs/ZdTabItem.vue +11 -10
  37. package/src/components/zd-tabs/ZdTabs.vue +4 -20
  38. package/src/components/zd-text/ZdText.ts +3 -2
  39. package/src/components/zd-time/ZdTime.vue +1 -0
  40. package/src/components/zd-tooltip/ZdTooltip.vue +2 -2
  41. package/src/components/zd-tree/ZdTree.vue +4 -4
  42. package/src/composables/index.ts +2 -0
  43. package/src/composables/useDateKeydown.ts +109 -0
  44. package/src/composables/usePickerValue.ts +22 -0
  45. package/types/components/zd-date-input/ZdDateInput.d.ts +2 -2
  46. package/types/components/zd-date-range/ZdDateRange.d.ts +22 -7
  47. package/types/components/zd-grid-editable/cell/ZdGridEditableCell.d.ts +1 -1
  48. package/types/components/zd-layout/ZdLayout.d.ts +1 -1
  49. package/types/components/zd-list/ZdList.d.ts +3 -3
  50. package/types/components/zd-list/ZdListGroup.d.ts +2 -2
  51. package/types/components/zd-list/ZdListItem.d.ts +1 -1
  52. package/types/components/zd-month/ZdMonth.d.ts +2 -2
  53. package/types/components/zd-tabs/ZdTab.d.ts +0 -9
  54. package/types/components/zd-text/ZdText.d.ts +46 -37
  55. package/types/components/zd-time/ZdTime.d.ts +2 -2
  56. package/types/composables/index.d.ts +2 -0
  57. package/types/composables/useDateKeydown.d.ts +5 -0
  58. package/types/composables/usePickerValue.d.ts +10 -0
  59. package/.package.json +0 -54
  60. package/types/components/tek-grid/TekGrid.ts.d.ts +0 -7258
  61. package/types/components/tek-grid/column-filter/TekGridColumnFilter.ts.d.ts +0 -129
  62. package/types/components/tek-grid/column-header/TekGridHeaderRow.ts.d.ts +0 -225
  63. package/types/components/tek-grid/columns-button/TekGridColumnsButton.ts.d.ts +0 -2432
  64. package/types/components/tek-grid/filter-button/TekGridFilterButton.ts.d.ts +0 -2920
  65. package/types/components/tek-grid/indentation/TekGridIndentation.ts.d.ts +0 -32
  66. package/types/components/tek-grid/layout-options/TekGridLayoutOptions.ts.d.ts +0 -1892
  67. package/types/components/tek-grid/row/TekGridFooterRow.ts.d.ts +0 -90
  68. package/types/components/tek-grid/row/TekGridGroupRow.ts.d.ts +0 -87
  69. package/types/components/tooltip-overflow/ZdTooltipOverflow.ts.d.ts +0 -50
  70. package/types/components/zd-activator-wrapper/ZdActivatorWrapper.ts.d.ts +0 -25
  71. package/types/components/zd-alert/ZdAlert.ts.d.ts +0 -884
  72. package/types/components/zd-badge/ZdBadge.ts.d.ts +0 -624
  73. package/types/components/zd-breadcrumbs/ZdBreadcrumbs.ts.d.ts +0 -697
  74. package/types/components/zd-button/ZdButton.ts.d.ts +0 -1158
  75. package/types/components/zd-button-group/ZdButtonGroup.ts.d.ts +0 -785
  76. package/types/components/zd-card/ZdCard.ts.d.ts +0 -1028
  77. package/types/components/zd-carousel/ZdCarousel.ts.d.ts +0 -2007
  78. package/types/components/zd-checkbox/ZdCheckbox.ts.d.ts +0 -642
  79. package/types/components/zd-checkbox-multiple/ZdCheckboxMultiple.ts.d.ts +0 -2010
  80. package/types/components/zd-chip/ZdChip.ts.d.ts +0 -1256
  81. package/types/components/zd-code-viewer/ZdCodeViewer.ts.d.ts +0 -791
  82. package/types/components/zd-col/ZdCol.ts.d.ts +0 -741
  83. package/types/components/zd-collapse-card/ZdCollapseCard.ts.d.ts +0 -1583
  84. package/types/components/zd-container/ZdContainer.ts.d.ts +0 -722
  85. package/types/components/zd-currency/ZdCurrency.ts.d.ts +0 -2024
  86. package/types/components/zd-date-input/ZdDateInput.ts.d.ts +0 -960
  87. package/types/components/zd-dialog/ZdDialog.ts.d.ts +0 -262
  88. package/types/components/zd-divider/ZdDivider.ts.d.ts +0 -623
  89. package/types/components/zd-dropdown/ZdDropdown.ts.d.ts +0 -836
  90. package/types/components/zd-footer/ZdFooter.ts.d.ts +0 -1262
  91. package/types/components/zd-form/ZdForm.ts.d.ts +0 -118
  92. package/types/components/zd-frame/ZdFrame.ts.d.ts +0 -138
  93. package/types/components/zd-frame-page/ZdFramePage.ts.d.ts +0 -805
  94. package/types/components/zd-grid/ZdGrid.ts.d.ts +0 -7304
  95. package/types/components/zd-grid/cell/ZdGridAction.ts.d.ts +0 -14
  96. package/types/components/zd-grid/cell/ZdGridCell.ts.d.ts +0 -68
  97. package/types/components/zd-grid/cell/ZdGridCellContent.ts.d.ts +0 -58
  98. package/types/components/zd-grid/cell/ZdGridCheckbox.ts.d.ts +0 -53
  99. package/types/components/zd-grid/column-header/ZdGridColumnHeader.ts.d.ts +0 -112
  100. package/types/components/zd-grid/column-header/ZdGridHeaderIcon.ts.d.ts +0 -46
  101. package/types/components/zd-grid/column-header/ZdGridHeaderRow.ts.d.ts +0 -165
  102. package/types/components/zd-grid/column-header/ZdGridSort.ts.d.ts +0 -47
  103. package/types/components/zd-grid/footer/ZdGridFooter.ts.d.ts +0 -2087
  104. package/types/components/zd-grid/helper/ZdGridHelper.ts.d.ts +0 -16
  105. package/types/components/zd-grid/row/TableRow.ts.d.ts +0 -34
  106. package/types/components/zd-grid/row/ZdGridRow.ts.d.ts +0 -105
  107. package/types/components/zd-grid/toolbar/ZdGridToolbar.ts.d.ts +0 -2086
  108. package/types/components/zd-grid-editable/ZdGridEditable.ts.d.ts +0 -8663
  109. package/types/components/zd-grid-editable/cell/ZdGridEditableCell.ts.d.ts +0 -637
  110. package/types/components/zd-grid-editable/row/ZdGridEditableRow.ts.d.ts +0 -126
  111. package/types/components/zd-header/ZdHeader.ts.d.ts +0 -1320
  112. package/types/components/zd-icon/ZdIcon.ts.d.ts +0 -383
  113. package/types/components/zd-image/ZdImage.ts.d.ts +0 -753
  114. package/types/components/zd-increment/ZdIncrement.ts.d.ts +0 -2069
  115. package/types/components/zd-iterable/ZdIterableNoData.ts.d.ts +0 -2089
  116. package/types/components/zd-iterable/zd-iterable-columns-button/ZdIterableColumnsButton.ts.d.ts +0 -1645
  117. package/types/components/zd-iterable/zd-iterable-page-info/ZdIterablePageInfo.ts.d.ts +0 -1081
  118. package/types/components/zd-iterable/zd-iterable-page-size/ZdIterablePageSize.ts.d.ts +0 -2763
  119. package/types/components/zd-iterable/zd-iterable-pagination/ZdIterablePagination.ts.d.ts +0 -1627
  120. package/types/components/zd-iterable/zd-search/ZdSearch.ts.d.ts +0 -766
  121. package/types/components/zd-iterable-component-render/ZdIterableComponentRender.ts.d.ts +0 -2484
  122. package/types/components/zd-layout/ZdLayout.ts.d.ts +0 -647
  123. package/types/components/zd-list/ZdList.ts.d.ts +0 -1140
  124. package/types/components/zd-list/ZdListGroup.ts.d.ts +0 -1332
  125. package/types/components/zd-list/ZdListItem.ts.d.ts +0 -848
  126. package/types/components/zd-loading/ZdLoading.ts.d.ts +0 -350
  127. package/types/components/zd-login/ZdLogin.ts.d.ts +0 -1072
  128. package/types/components/zd-login/ZdLoginButton.ts.d.ts +0 -1910
  129. package/types/components/zd-main/ZdMain.ts.d.ts +0 -619
  130. package/types/components/zd-master-detail/ZdMasterDetail.ts.d.ts +0 -684
  131. package/types/components/zd-menu/ZdMenu.ts.d.ts +0 -4484
  132. package/types/components/zd-menu/ZdMenuButton.ts.d.ts +0 -1142
  133. package/types/components/zd-menu/ZdMenuGroup.ts.d.ts +0 -6286
  134. package/types/components/zd-menu/ZdMenuLink.ts.d.ts +0 -10437
  135. package/types/components/zd-menu/ZdMenuSeparator.ts.d.ts +0 -600
  136. package/types/components/zd-modal/ZdModal.ts.d.ts +0 -10
  137. package/types/components/zd-modal/ZdModalCloseButton.ts.d.ts +0 -1137
  138. package/types/components/zd-month/ZdMonth.ts.d.ts +0 -2217
  139. package/types/components/zd-number-input/ZdNumberInput.ts.d.ts +0 -2021
  140. package/types/components/zd-password/ZdPassword.ts.d.ts +0 -2014
  141. package/types/components/zd-progress/ZdProgress.ts.d.ts +0 -859
  142. package/types/components/zd-radio/ZdRadio.ts.d.ts +0 -682
  143. package/types/components/zd-row/ZdRow.ts.d.ts +0 -734
  144. package/types/components/zd-select/ZdSelect.ts.d.ts +0 -313
  145. package/types/components/zd-select-multiple/ZdSelectMultiple.ts.d.ts +0 -333
  146. package/types/components/zd-svg-map/ZdSvgMap.ts.d.ts +0 -414
  147. package/types/components/zd-switch/ZdSwitch.ts.d.ts +0 -1918
  148. package/types/components/zd-table/ZdTable.ts.d.ts +0 -1092
  149. package/types/components/zd-tabs/ZdTab.ts.d.ts +0 -674
  150. package/types/components/zd-tabs/ZdTabItem.ts.d.ts +0 -268
  151. package/types/components/zd-tabs/ZdTabs.ts.d.ts +0 -929
  152. package/types/components/zd-tag/ZdTag.ts.d.ts +0 -613
  153. package/types/components/zd-text/ZdText.ts.d.ts +0 -670
  154. package/types/components/zd-text-input/ZdTextInput.ts.d.ts +0 -746
  155. package/types/components/zd-textarea/ZdTextarea.ts.d.ts +0 -877
  156. package/types/components/zd-time/ZdTime.ts.d.ts +0 -2224
  157. package/types/components/zd-tooltip/ZdTooltip.ts.d.ts +0 -781
  158. package/types/components/zd-tree/ZdTree.ts.d.ts +0 -1878
  159. package/types/components/zd-tree/ZdTreeAfterTitle.ts.d.ts +0 -26
  160. package/types/components/zd-tree/ZdTreeCheckbox.ts.d.ts +0 -74
  161. package/types/components/zd-tree-grid/ZdTreeGrid.ts.d.ts +0 -4178
  162. package/types/components/zd-tree-grid/cell/ZdTreeGridCell.ts.d.ts +0 -92
  163. 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, onMounted, ref } from 'vue';
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
- onMounted(() => {
104
- const afterKeydown = instance.events.afterKeydown;
105
- const afterKeydownEvents = Array.isArray(afterKeydown) ? afterKeydown : [afterKeydown];
106
- afterKeydownEvents.push(({ event }) => keydown(event));
107
- });
108
- const keyAllowed = (key) => {
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
- inputEl.value = `${value.slice(0, start - 1)} ${value.substring(start)}`;
133
- inputEl.selectionStart = start - 1;
134
- inputEl.selectionEnd = start - 1;
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 getLabel = (name) => {
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, Mask } from '@zeedhi/core';
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 (instance.value.length < 2)
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 datePickerValue = computed({
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 inputFormat = toMask(instance.inputFormat || instance.displayFormat || '');
159
- return inputFormat.concat(instance.splitter.split('')).concat(inputFormat);
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
- datePickerValue,
183
+ isDateAllowed,
184
+ pickerValue,
247
185
  isMobile,
248
186
  onPickerMousedown,
249
187
  };
@@ -10,9 +10,6 @@ export const ZdTabProps = buildProps({
10
10
  type: [Boolean, String],
11
11
  default: false,
12
12
  },
13
- index: {
14
- type: [Number, String],
15
- },
16
13
  tabTitle: {
17
14
  type: [String],
18
15
  },
@@ -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 { ZdComponentProps, useCreateInstance, useGetMethods } from '../zd-component/ZdComponent';
4
+ import { useCreateInstance, useGetMethods } from '../zd-component/ZdComponent';
5
+ import { ZdComponentRenderProps } from '../zd-component/ZdComponentRender';
5
6
  export const ZdTextProps = buildProps({
6
- ...ZdComponentProps,
7
+ ...ZdComponentRenderProps,
7
8
  compile: {
8
9
  type: [Boolean, String],
9
10
  default: false,
@@ -13,4 +13,6 @@ export * from './maska';
13
13
  export * from './tableNavigation';
14
14
  export * from './virtualScroll';
15
15
  export * from './watchUrl';
16
+ export * from './usePickerValue';
16
17
  export * from './useIsMobile';
18
+ export * from './useDateKeydown';
@@ -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
+ }