@uzum-tech/ui 1.5.1 → 1.5.3

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 (202) hide show
  1. package/README.md +0 -1
  2. package/dist/index.js +1333 -869
  3. package/dist/index.prod.js +3 -3
  4. package/es/_internal/checkbox/src/use-checkbox.js +3 -3
  5. package/es/_internal/radio/src/use-radio.js +3 -3
  6. package/es/_internal/typography/src/styles/text.cssr.js +0 -1
  7. package/es/_internal/typography/styles/light.js +1 -1
  8. package/es/_mixins/use-form-item.d.ts +4 -4
  9. package/es/_mixins/use-form-item.js +4 -4
  10. package/es/_styles/common/dark.js +1 -1
  11. package/es/_styles/common/light.d.ts +3 -0
  12. package/es/_styles/common/light.js +1 -1
  13. package/es/_utils/composable/composables.d.ts +11 -0
  14. package/es/_utils/composable/composables.js +40 -0
  15. package/es/_utils/index.d.ts +1 -1
  16. package/es/_utils/index.js +1 -1
  17. package/es/_utils/uzum/index.d.ts +1 -0
  18. package/es/_utils/uzum/index.js +1 -0
  19. package/es/_utils/uzum/value.d.ts +1 -0
  20. package/es/_utils/uzum/value.js +9 -0
  21. package/es/_utils/vue/resolve-slot.d.ts +1 -1
  22. package/es/alert/styles/light.js +6 -6
  23. package/es/auto-complete/src/AutoComplete.js +10 -10
  24. package/es/avatar/src/Avatar.d.ts +6 -0
  25. package/es/avatar/src/Avatar.js +9 -3
  26. package/es/card-list/src/CardList.js +1 -1
  27. package/es/card-list/src/CardListItem.d.ts +13 -0
  28. package/es/card-list/src/CardListItem.js +11 -4
  29. package/es/card-list/src/interface.d.ts +1 -0
  30. package/es/card-list/src/styles/index.cssr.js +6 -6
  31. package/es/card-list/styles/light.js +2 -2
  32. package/es/cascader/src/Cascader.js +7 -7
  33. package/es/checkbox/src/CheckboxGroup.js +9 -9
  34. package/es/color-picker/src/ColorPicker.js +6 -6
  35. package/es/components.d.ts +1 -0
  36. package/es/components.js +1 -0
  37. package/es/config-provider/src/internal-interface.d.ts +2 -0
  38. package/es/data-table/src/DataTable.d.ts +8 -0
  39. package/es/data-table/src/DataTable.js +21 -10
  40. package/es/data-table/src/TableParts/Body.d.ts +1 -0
  41. package/es/data-table/src/TableParts/Body.js +6 -5
  42. package/es/data-table/src/TableParts/Cell.js +85 -23
  43. package/es/data-table/src/interface.d.ts +13 -6
  44. package/es/data-table/src/interface.js +1 -1
  45. package/es/data-table/src/styles/index.cssr.js +5 -3
  46. package/es/data-table/src/use-mask.d.ts +3 -6
  47. package/es/data-table/src/utils.d.ts +2 -1
  48. package/es/data-table/src/utils.js +13 -0
  49. package/es/date-picker/src/DatePicker.js +7 -7
  50. package/es/dialog/src/DialogProvider.d.ts +6 -0
  51. package/es/dynamic-tags/src/DynamicTags.js +3 -3
  52. package/es/input/src/Input.js +8 -8
  53. package/es/input-number/src/InputNumber.js +7 -7
  54. package/es/input-otp/index.d.ts +3 -0
  55. package/es/input-otp/index.js +1 -0
  56. package/es/input-otp/src/InputOtp.d.ts +871 -0
  57. package/es/input-otp/src/InputOtp.js +250 -0
  58. package/es/input-otp/src/public-types.d.ts +25 -0
  59. package/es/input-otp/src/public-types.js +1 -0
  60. package/es/input-otp/src/styles/index.cssr.d.ts +2 -0
  61. package/es/input-otp/src/styles/index.cssr.js +20 -0
  62. package/es/input-otp/src/styles/input-otp-rtl.cssr.d.ts +2 -0
  63. package/es/input-otp/src/styles/input-otp-rtl.cssr.js +5 -0
  64. package/es/input-otp/styles/dark.d.ts +3 -0
  65. package/es/input-otp/styles/dark.js +12 -0
  66. package/es/input-otp/styles/index.d.ts +4 -0
  67. package/es/input-otp/styles/index.js +3 -0
  68. package/es/input-otp/styles/light.d.ts +83 -0
  69. package/es/input-otp/styles/light.js +22 -0
  70. package/es/input-otp/styles/rtl.d.ts +2 -0
  71. package/es/input-otp/styles/rtl.js +5 -0
  72. package/es/legacy-transfer/src/Transfer.js +3 -3
  73. package/es/list/src/List.d.ts +41 -55
  74. package/es/list/src/List.js +6 -10
  75. package/es/list/src/ListItem.d.ts +84 -25
  76. package/es/list/src/ListItem.js +120 -98
  77. package/es/list/src/interface.d.ts +1 -0
  78. package/es/list/src/props.d.ts +70 -31
  79. package/es/list/src/props.js +25 -5
  80. package/es/list/src/styles/index.cssr.js +32 -90
  81. package/es/list/styles/light.d.ts +5 -8
  82. package/es/list/styles/light.js +6 -9
  83. package/es/mention/src/Mention.js +7 -7
  84. package/es/radio/src/RadioGroup.js +5 -5
  85. package/es/rate/src/Rate.js +3 -3
  86. package/es/select/src/Select.js +7 -7
  87. package/es/slider/src/Slider.js +3 -3
  88. package/es/styles.d.ts +1 -0
  89. package/es/styles.js +1 -0
  90. package/es/switch/src/Switch.js +7 -7
  91. package/es/tag/src/styles/index.cssr.js +5 -1
  92. package/es/tag/styles/light.js +2 -2
  93. package/es/theme-editor/src/ThemeEditor.d.ts +3 -0
  94. package/es/themes/dark.js +2 -0
  95. package/es/themes/light.js +2 -0
  96. package/es/time-picker/src/TimePicker.js +7 -7
  97. package/es/transfer/src/Transfer.js +3 -3
  98. package/es/tree-select/src/TreeSelect.js +5 -5
  99. package/es/upload/src/UploadFile.js +4 -3
  100. package/es/version.d.ts +1 -1
  101. package/es/version.js +1 -1
  102. package/lib/_internal/checkbox/src/use-checkbox.js +3 -3
  103. package/lib/_internal/radio/src/use-radio.js +3 -3
  104. package/lib/_internal/typography/src/styles/text.cssr.js +0 -1
  105. package/lib/_internal/typography/styles/light.js +1 -1
  106. package/lib/_mixins/use-form-item.d.ts +4 -4
  107. package/lib/_mixins/use-form-item.js +4 -4
  108. package/lib/_styles/common/dark.js +1 -1
  109. package/lib/_styles/common/light.d.ts +3 -0
  110. package/lib/_styles/common/light.js +1 -1
  111. package/lib/_utils/composable/composables.d.ts +11 -0
  112. package/lib/_utils/composable/composables.js +47 -0
  113. package/lib/_utils/index.d.ts +1 -1
  114. package/lib/_utils/index.js +2 -1
  115. package/lib/_utils/uzum/index.d.ts +1 -0
  116. package/lib/_utils/uzum/index.js +3 -1
  117. package/lib/_utils/uzum/value.d.ts +1 -0
  118. package/lib/_utils/uzum/value.js +12 -0
  119. package/lib/_utils/vue/resolve-slot.d.ts +1 -1
  120. package/lib/alert/styles/light.js +6 -6
  121. package/lib/auto-complete/src/AutoComplete.js +10 -10
  122. package/lib/avatar/src/Avatar.d.ts +6 -0
  123. package/lib/avatar/src/Avatar.js +9 -3
  124. package/lib/card-list/src/CardList.js +1 -1
  125. package/lib/card-list/src/CardListItem.d.ts +13 -0
  126. package/lib/card-list/src/CardListItem.js +11 -4
  127. package/lib/card-list/src/interface.d.ts +1 -0
  128. package/lib/card-list/src/styles/index.cssr.js +5 -5
  129. package/lib/card-list/styles/light.js +2 -2
  130. package/lib/cascader/src/Cascader.js +7 -7
  131. package/lib/checkbox/src/CheckboxGroup.js +9 -9
  132. package/lib/color-picker/src/ColorPicker.js +6 -6
  133. package/lib/components.d.ts +1 -0
  134. package/lib/components.js +1 -0
  135. package/lib/config-provider/src/internal-interface.d.ts +2 -0
  136. package/lib/data-table/src/DataTable.d.ts +8 -0
  137. package/lib/data-table/src/DataTable.js +21 -10
  138. package/lib/data-table/src/TableParts/Body.d.ts +1 -0
  139. package/lib/data-table/src/TableParts/Body.js +6 -5
  140. package/lib/data-table/src/TableParts/Cell.js +84 -22
  141. package/lib/data-table/src/interface.d.ts +13 -6
  142. package/lib/data-table/src/interface.js +1 -1
  143. package/lib/data-table/src/styles/index.cssr.js +5 -3
  144. package/lib/data-table/src/use-mask.d.ts +3 -6
  145. package/lib/data-table/src/utils.d.ts +2 -1
  146. package/lib/data-table/src/utils.js +14 -1
  147. package/lib/date-picker/src/DatePicker.js +7 -7
  148. package/lib/dialog/src/DialogProvider.d.ts +6 -0
  149. package/lib/dynamic-tags/src/DynamicTags.js +3 -3
  150. package/lib/input/src/Input.js +8 -8
  151. package/lib/input-number/src/InputNumber.js +7 -7
  152. package/lib/input-otp/index.d.ts +3 -0
  153. package/lib/input-otp/index.js +9 -0
  154. package/lib/input-otp/src/InputOtp.d.ts +871 -0
  155. package/lib/input-otp/src/InputOtp.js +256 -0
  156. package/lib/input-otp/src/public-types.d.ts +25 -0
  157. package/lib/input-otp/src/public-types.js +2 -0
  158. package/lib/input-otp/src/styles/index.cssr.d.ts +2 -0
  159. package/lib/input-otp/src/styles/index.cssr.js +25 -0
  160. package/lib/input-otp/src/styles/input-otp-rtl.cssr.d.ts +2 -0
  161. package/lib/input-otp/src/styles/input-otp-rtl.cssr.js +10 -0
  162. package/lib/input-otp/styles/dark.d.ts +3 -0
  163. package/lib/input-otp/styles/dark.js +14 -0
  164. package/lib/input-otp/styles/index.d.ts +4 -0
  165. package/lib/input-otp/styles/index.js +12 -0
  166. package/lib/input-otp/styles/light.d.ts +83 -0
  167. package/lib/input-otp/styles/light.js +25 -0
  168. package/lib/input-otp/styles/rtl.d.ts +2 -0
  169. package/lib/input-otp/styles/rtl.js +11 -0
  170. package/lib/legacy-transfer/src/Transfer.js +3 -3
  171. package/lib/list/src/List.d.ts +41 -55
  172. package/lib/list/src/List.js +6 -10
  173. package/lib/list/src/ListItem.d.ts +84 -25
  174. package/lib/list/src/ListItem.js +119 -97
  175. package/lib/list/src/interface.d.ts +1 -0
  176. package/lib/list/src/props.d.ts +70 -31
  177. package/lib/list/src/props.js +25 -5
  178. package/lib/list/src/styles/index.cssr.js +32 -90
  179. package/lib/list/styles/light.d.ts +5 -8
  180. package/lib/list/styles/light.js +6 -9
  181. package/lib/mention/src/Mention.js +7 -7
  182. package/lib/radio/src/RadioGroup.js +5 -5
  183. package/lib/rate/src/Rate.js +3 -3
  184. package/lib/select/src/Select.js +7 -7
  185. package/lib/slider/src/Slider.js +3 -3
  186. package/lib/styles.d.ts +1 -0
  187. package/lib/styles.js +106 -103
  188. package/lib/switch/src/Switch.js +7 -7
  189. package/lib/tag/src/styles/index.cssr.js +5 -1
  190. package/lib/tag/styles/light.js +2 -2
  191. package/lib/theme-editor/src/ThemeEditor.d.ts +3 -0
  192. package/lib/themes/dark.js +2 -0
  193. package/lib/themes/light.js +2 -0
  194. package/lib/time-picker/src/TimePicker.js +7 -7
  195. package/lib/transfer/src/Transfer.js +3 -3
  196. package/lib/tree-select/src/TreeSelect.js +5 -5
  197. package/lib/upload/src/UploadFile.js +4 -3
  198. package/lib/version.d.ts +1 -1
  199. package/lib/version.js +1 -1
  200. package/package.json +1 -1
  201. package/volar.d.ts +1 -0
  202. package/web-types.json +180 -38
@@ -49,7 +49,7 @@ export default defineComponent({
49
49
  return new Set();
50
50
  });
51
51
  function toggleCheckbox(checked, checkboxValue) {
52
- const { nTriggerFormInput, nTriggerFormChange } = formItem;
52
+ const { triggerFormInput, triggerFormChange } = formItem;
53
53
  const { onChange, 'onUpdate:value': _onUpdateValue, onUpdateValue } = props;
54
54
  if (Array.isArray(mergedValueRef.value)) {
55
55
  const groupValue = Array.from(mergedValueRef.value);
@@ -69,8 +69,8 @@ export default defineComponent({
69
69
  value: checkboxValue
70
70
  });
71
71
  }
72
- nTriggerFormInput();
73
- nTriggerFormChange();
72
+ triggerFormInput();
73
+ triggerFormChange();
74
74
  uncontrolledValueRef.value = groupValue;
75
75
  // deprecated
76
76
  if (onChange)
@@ -95,8 +95,8 @@ export default defineComponent({
95
95
  if (onChange)
96
96
  call(onChange, groupValue); // deprecated
97
97
  uncontrolledValueRef.value = groupValue;
98
- nTriggerFormInput();
99
- nTriggerFormChange();
98
+ triggerFormInput();
99
+ triggerFormChange();
100
100
  }
101
101
  }
102
102
  }
@@ -117,8 +117,8 @@ export default defineComponent({
117
117
  if (onChange)
118
118
  call(onChange, [checkboxValue]); // deprecated
119
119
  uncontrolledValueRef.value = [checkboxValue];
120
- nTriggerFormInput();
121
- nTriggerFormChange();
120
+ triggerFormInput();
121
+ triggerFormChange();
122
122
  }
123
123
  else {
124
124
  if (onUpdateValue) {
@@ -136,8 +136,8 @@ export default defineComponent({
136
136
  if (onChange)
137
137
  call(onChange, []); // deprecated
138
138
  uncontrolledValueRef.value = [];
139
- nTriggerFormInput();
140
- nTriggerFormChange();
139
+ triggerFormInput();
140
+ triggerFormChange();
141
141
  }
142
142
  }
143
143
  }
@@ -255,14 +255,14 @@ export default defineComponent({
255
255
  else {
256
256
  upcomingValue = null;
257
257
  }
258
- const { nTriggerFormChange, nTriggerFormInput } = formItem;
258
+ const { triggerFormChange, triggerFormInput } = formItem;
259
259
  const { onUpdateValue, 'onUpdate:value': _onUpdateValue } = props;
260
260
  if (onUpdateValue)
261
261
  call(onUpdateValue, value);
262
262
  if (_onUpdateValue)
263
263
  call(_onUpdateValue, value);
264
- nTriggerFormChange();
265
- nTriggerFormInput();
264
+ triggerFormChange();
265
+ triggerFormInput();
266
266
  uncontrolledValueRef.value = value;
267
267
  }
268
268
  function handleInputUpdateValue(value) {
@@ -273,7 +273,7 @@ export default defineComponent({
273
273
  const { value } = mergedValueRef;
274
274
  // no value & only hue changes will complete with no value
275
275
  if (value) {
276
- const { nTriggerFormChange, nTriggerFormInput } = formItem;
276
+ const { triggerFormChange, triggerFormInput } = formItem;
277
277
  const { onComplete } = props;
278
278
  if (onComplete) {
279
279
  ;
@@ -285,8 +285,8 @@ export default defineComponent({
285
285
  undoStack.splice(valueIndex + 1, undoStack.length, value);
286
286
  valueIndexRef.value = valueIndex + 1;
287
287
  }
288
- nTriggerFormChange();
289
- nTriggerFormInput();
288
+ triggerFormChange();
289
+ triggerFormInput();
290
290
  }
291
291
  }
292
292
  function undo() {
@@ -44,6 +44,7 @@ export * from './icon-wrapper';
44
44
  export * from './image';
45
45
  export * from './input';
46
46
  export * from './input-number';
47
+ export * from './input-otp';
47
48
  export * from './layout';
48
49
  export * from './legacy-grid';
49
50
  export * from './legacy-transfer';
package/es/components.js CHANGED
@@ -44,6 +44,7 @@ export * from './icon-wrapper';
44
44
  export * from './image';
45
45
  export * from './input';
46
46
  export * from './input-number';
47
+ export * from './input-otp';
47
48
  export * from './layout';
48
49
  export * from './legacy-grid';
49
50
  export * from './legacy-transfer';
@@ -37,6 +37,7 @@ import type { IconWrapperTheme } from '../../icon-wrapper/styles';
37
37
  import type { ImageTheme } from '../../image/styles';
38
38
  import type { InputTheme } from '../../input/styles';
39
39
  import type { InputNumberTheme } from '../../input-number/styles';
40
+ import type { InputOtpTheme } from '../../input-otp/styles';
40
41
  import type { LayoutTheme } from '../../layout/styles';
41
42
  import type { LegacyTransferTheme } from '../../legacy-transfer/styles';
42
43
  import type { ListTheme } from '../../list/styles';
@@ -190,6 +191,7 @@ export interface GlobalThemeWithoutCommon {
190
191
  InternalSelectMenu?: InternalSelectMenuTheme;
191
192
  InternalSelection?: InternalSelectionTheme;
192
193
  AccountOption?: AccountOptionTheme;
194
+ InputOtp?: InputOtpTheme;
193
195
  }
194
196
  export interface GlobalComponentConfig {
195
197
  Pagination?: {
@@ -24,6 +24,7 @@ declare const _default: import("vue").DefineComponent<{
24
24
  readonly default: () => never[];
25
25
  };
26
26
  readonly loading: BooleanConstructor;
27
+ readonly loadingSkeleton: BooleanConstructor;
27
28
  readonly bordered: {
28
29
  readonly type: import("vue").PropType<boolean | undefined>;
29
30
  readonly default: undefined;
@@ -2871,6 +2872,11 @@ declare const _default: import("vue").DefineComponent<{
2871
2872
  page: (page: number) => void;
2872
2873
  sort: (columnKey: import("./interface").ColumnKey, order: import("./interface").SortOrder) => void;
2873
2874
  scrollTo: import("../../scrollbar/src/Scrollbar").ScrollTo;
2875
+ getData: () => {
2876
+ data: import("./interface").InternalRowData[];
2877
+ totalRows: import("./interface").InternalRowData | null;
2878
+ };
2879
+ getTotalRowData: () => import("./interface").InternalRowData | null;
2874
2880
  clearFilter: () => void;
2875
2881
  mainTableInstRef: import("vue").Ref<{
2876
2882
  getHeaderElement: () => HTMLElement | null;
@@ -4295,6 +4301,7 @@ declare const _default: import("vue").DefineComponent<{
4295
4301
  readonly default: () => never[];
4296
4302
  };
4297
4303
  readonly loading: BooleanConstructor;
4304
+ readonly loadingSkeleton: BooleanConstructor;
4298
4305
  readonly bordered: {
4299
4306
  readonly type: import("vue").PropType<boolean | undefined>;
4300
4307
  readonly default: undefined;
@@ -7145,6 +7152,7 @@ declare const _default: import("vue").DefineComponent<{
7145
7152
  readonly virtualScroll: boolean;
7146
7153
  readonly tableLayout: "auto" | "fixed";
7147
7154
  readonly columns: import("./interface").TableColumns<any>;
7155
+ readonly loadingSkeleton: boolean;
7148
7156
  readonly remote: boolean;
7149
7157
  readonly paginateSinglePage: boolean;
7150
7158
  readonly bottomBordered: boolean | undefined;
@@ -13,7 +13,6 @@ import { useResizable } from './use-resizable';
13
13
  import { dataTableInjectionKey, dataTableProps } from './interface';
14
14
  import { useGroupHeader } from './use-group-header';
15
15
  import { useExpand } from './use-expand';
16
- import { processMaskedValue } from './use-mask';
17
16
  import style from './styles/index.cssr';
18
17
  export default defineComponent({
19
18
  name: 'DataTable',
@@ -93,7 +92,7 @@ export default defineComponent({
93
92
  return;
94
93
  if (!('totalRow' in col) || !col.totalRow)
95
94
  return;
96
- const { key, totalRow, render, mask } = col;
95
+ const { key, totalRow, render } = col;
97
96
  if (!totalRow)
98
97
  return;
99
98
  if (totalRow.type === 'default') {
@@ -106,18 +105,12 @@ export default defineComponent({
106
105
  return Number(renderedValue) || 0;
107
106
  });
108
107
  const sum = values.reduce((sum, val) => sum + val, 0);
109
- const finalValue = mask
110
- ? processMaskedValue(String(sum), mask)
111
- : sum;
112
- summaryRow[key] = { value: finalValue };
108
+ summaryRow[key] = { value: sum };
113
109
  }
114
110
  else {
115
111
  const values = pageData.map((row) => Number(row[key]) || 0);
116
112
  const sum = values.reduce((sum, val) => sum + val, 0);
117
- const finalValue = mask
118
- ? processMaskedValue(String(sum), mask)
119
- : sum;
120
- summaryRow[key] = { value: finalValue };
113
+ summaryRow[key] = { value: sum };
121
114
  }
122
115
  }
123
116
  else {
@@ -253,6 +246,7 @@ export default defineComponent({
253
246
  mergedSortStateRef,
254
247
  mergedFilterStateRef,
255
248
  loadingRef: toRef(props, 'loading'),
249
+ loadingSkeletonRef: toRef(props, 'loadingSkeleton'),
256
250
  rowClassNameRef: toRef(props, 'rowClassName'),
257
251
  mergedCheckedRowKeySetRef,
258
252
  mergedExpandedRowKeysRef,
@@ -319,6 +313,23 @@ export default defineComponent({
319
313
  scrollTo: (arg0, arg1) => {
320
314
  var _a;
321
315
  (_a = mainTableInstRef.value) === null || _a === void 0 ? void 0 : _a.scrollTo(arg0, arg1);
316
+ },
317
+ getData: () => {
318
+ const originalData = props.data || [];
319
+ const totalRowData = autoSummaryRef.value && rawPaginatedDataRef.value
320
+ ? autoSummaryRef.value(rawPaginatedDataRef.value)
321
+ : null;
322
+ return {
323
+ data: originalData,
324
+ totalRows: totalRowData
325
+ };
326
+ },
327
+ getTotalRowData: () => {
328
+ if (autoSummaryRef.value && rawPaginatedDataRef.value) {
329
+ const summaryResult = autoSummaryRef.value(rawPaginatedDataRef.value);
330
+ return summaryResult;
331
+ }
332
+ return null;
322
333
  }
323
334
  };
324
335
  const cssVarsRef = computed(() => {
@@ -1376,6 +1376,7 @@ declare const _default: import("vue").DefineComponent<{
1376
1376
  scrollX: import("vue").Ref<string | number | undefined>;
1377
1377
  cols: import("vue").Ref<ColItem[]>;
1378
1378
  loading: import("vue").Ref<boolean>;
1379
+ loadingSkeleton: import("vue").Ref<boolean>;
1379
1380
  bodyShowHeaderOnly: import("vue").ComputedRef<boolean>;
1380
1381
  shouldDisplaySomeTablePart: import("vue").ComputedRef<boolean>;
1381
1382
  empty: import("vue").ComputedRef<boolean>;
@@ -94,7 +94,7 @@ export default defineComponent({
94
94
  bodyStyle: Object
95
95
  },
96
96
  setup(props) {
97
- const { slots: dataTableSlots, bodyWidthRef, mergedExpandedRowKeysRef, mergedClsPrefixRef, mergedThemeRef, scrollXRef, colsRef, paginatedDataRef, rawPaginatedDataRef, fixedColumnLeftMapRef, fixedColumnRightMapRef, mergedCurrentPageRef, rowClassNameRef, leftActiveFixedColKeyRef, leftActiveFixedChildrenColKeysRef, rightActiveFixedColKeyRef, rightActiveFixedChildrenColKeysRef, renderExpandRef, hoverKeyRef, summaryRef, mergedSortStateRef, virtualScrollRef, componentId, mergedTableLayoutRef, childTriggerColIndexRef, indentRef, rowPropsRef, maxHeightRef, stripedRef, loadingRef, onLoadRef, loadingKeySetRef, expandableRef, stickyExpandedRowsRef, renderExpandIconRef, summaryPlacementRef, treeMateRef, scrollbarPropsRef, setHeaderScrollLeft, doUpdateExpandedRowKeys, handleTableBodyScroll, doCheck, doUncheck, renderCell
97
+ const { slots: dataTableSlots, bodyWidthRef, mergedExpandedRowKeysRef, mergedClsPrefixRef, mergedThemeRef, scrollXRef, colsRef, paginatedDataRef, rawPaginatedDataRef, fixedColumnLeftMapRef, fixedColumnRightMapRef, mergedCurrentPageRef, rowClassNameRef, leftActiveFixedColKeyRef, leftActiveFixedChildrenColKeysRef, rightActiveFixedColKeyRef, rightActiveFixedChildrenColKeysRef, renderExpandRef, hoverKeyRef, summaryRef, mergedSortStateRef, virtualScrollRef, componentId, mergedTableLayoutRef, childTriggerColIndexRef, indentRef, rowPropsRef, maxHeightRef, stripedRef, loadingRef, loadingSkeletonRef, onLoadRef, loadingKeySetRef, expandableRef, stickyExpandedRowsRef, renderExpandIconRef, summaryPlacementRef, treeMateRef, scrollbarPropsRef, setHeaderScrollLeft, doUpdateExpandedRowKeys, handleTableBodyScroll, doCheck, doUncheck, renderCell
98
98
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
99
99
  } = inject(dataTableInjectionKey);
100
100
  const scrollbarInstRef = ref(null);
@@ -304,7 +304,7 @@ export default defineComponent({
304
304
  componentId,
305
305
  scrollbarInstRef,
306
306
  virtualListRef,
307
- emptyElRef, summary: summaryRef, mergedClsPrefix: mergedClsPrefixRef, mergedTheme: mergedThemeRef, scrollX: scrollXRef, cols: colsRef, loading: loadingRef, bodyShowHeaderOnly: bodyShowHeaderOnlyRef, shouldDisplaySomeTablePart: shouldDisplaySomeTablePartRef, empty: emptyRef, paginatedDataAndInfo: computed(() => {
307
+ emptyElRef, summary: summaryRef, mergedClsPrefix: mergedClsPrefixRef, mergedTheme: mergedThemeRef, scrollX: scrollXRef, cols: colsRef, loading: loadingRef, loadingSkeleton: loadingSkeletonRef, bodyShowHeaderOnly: bodyShowHeaderOnlyRef, shouldDisplaySomeTablePart: shouldDisplaySomeTablePartRef, empty: emptyRef, paginatedDataAndInfo: computed(() => {
308
308
  const { value: striped } = stripedRef;
309
309
  let hasChildren = false;
310
310
  const data = paginatedDataRef.value.map(striped
@@ -560,6 +560,7 @@ export default defineComponent({
560
560
  `${mergedClsPrefix}-data-table-td--last-row`,
561
561
  'editable' in column &&
562
562
  column.editable &&
563
+ !isSummary &&
563
564
  `${mergedClsPrefix}-data-table-td--editable`
564
565
  ] }),
565
566
  column.fixed && (h("div", { class: `${mergedClsPrefix}-data-table-td__shadow-holder` })),
@@ -591,12 +592,12 @@ export default defineComponent({
591
592
  } },
592
593
  h("colgroup", null, cols.map((col) => (h("col", { key: col.key, style: col.style })))),
593
594
  this.showHeader ? h(TableHeader, { discrete: false }) : null,
594
- this.loading ? (h(BodySkeleton, null)) : !this.empty ? (h("tbody", { "data-u-id": componentId, class: `${mergedClsPrefix}-data-table-tbody` }, displayedData.map((rowInfo, displayedRowIndex) => {
595
+ this.loadingSkeleton ? (h(BodySkeleton, null)) : !this.empty ? (h("tbody", { "data-u-id": componentId, class: `${mergedClsPrefix}-data-table-tbody` }, displayedData.map((rowInfo, displayedRowIndex) => {
595
596
  return renderRow(rowInfo, displayedRowIndex, false);
596
597
  }))) : null));
597
598
  }
598
599
  else {
599
- if (this.loading) {
600
+ if (this.loading || this.loadingSkeleton) {
600
601
  return (h("table", { class: `${mergedClsPrefix}-data-table-table`, onMouseleave: handleMouseleaveTable, style: {
601
602
  tableLayout: this.mergedTableLayout
602
603
  } },
@@ -615,7 +616,7 @@ export default defineComponent({
615
616
  }
616
617
  }
617
618
  }));
618
- if (this.empty) {
619
+ if (this.empty && !this.loadingSkeleton) {
619
620
  const createEmptyNode = () => (h("div", { class: [
620
621
  `${mergedClsPrefix}-data-table-empty`,
621
622
  this.loading && `${mergedClsPrefix}-data-table-empty--hide`
@@ -1,7 +1,8 @@
1
1
  import { h, defineComponent } from 'vue';
2
2
  import { get } from 'lodash-es';
3
3
  import { UEllipsis } from '../../../ellipsis';
4
- import { processMaskedValue, processInputWithMask } from '../use-mask';
4
+ import { processMaskedValue } from '../use-mask';
5
+ import { defaultNumericMask } from '../utils';
5
6
  export default defineComponent({
6
7
  name: 'DataTableCell',
7
8
  emits: ['edit'],
@@ -33,7 +34,10 @@ export default defineComponent({
33
34
  var _a;
34
35
  const { isSummary, column, row, renderCell } = this;
35
36
  let cell;
36
- const { render, key, ellipsis, editable, mask } = column;
37
+ let { mask } = column;
38
+ const { render, key, ellipsis, editable, numeric } = column;
39
+ if (numeric && !mask)
40
+ mask = defaultNumericMask;
37
41
  if (render && !isSummary) {
38
42
  let cellValue = render(row, this.index);
39
43
  if (mask && cellValue !== null && cellValue !== undefined) {
@@ -45,37 +49,95 @@ export default defineComponent({
45
49
  }
46
50
  else if (editable && !isSummary) {
47
51
  const { placeholder } = column;
48
- let initialValue = String(row[key] || '');
49
- if (mask && initialValue) {
50
- initialValue = processMaskedValue(initialValue, mask);
51
- }
52
+ const rawValue = String(row[key] || '');
53
+ const displayValue = mask ? processMaskedValue(rawValue, mask) : rawValue;
54
+ const isEditingRef = { current: false };
52
55
  const inputProps = {
53
56
  class: `${this.clsPrefix}-data-table-editable-input`,
54
- value: initialValue,
57
+ value: displayValue,
55
58
  placeholder: placeholder || '',
59
+ onFocus: (e) => {
60
+ const input = e.target;
61
+ isEditingRef.current = true;
62
+ input.value = rawValue;
63
+ },
64
+ onKeyDown: (e) => {
65
+ if (mask && typeof mask === 'function' && isEditingRef.current) {
66
+ const input = e.target;
67
+ input.value = rawValue;
68
+ }
69
+ },
56
70
  onInput: (e) => {
57
- const value = e.target.value;
58
- if (mask) {
59
- const { processedValue, displayValue } = processInputWithMask(value, mask);
60
- setTimeout(() => {
61
- const input = e.target;
62
- if (input.value !== displayValue) {
63
- const cursorPos = input.selectionStart || 0;
64
- input.value = displayValue;
65
- input.setSelectionRange(cursorPos, cursorPos);
71
+ const input = e.target;
72
+ const value = input.value;
73
+ if (mask && typeof mask === 'function' && !isEditingRef.current) {
74
+ isEditingRef.current = true;
75
+ }
76
+ if (mask && typeof mask === 'function' && isEditingRef.current) {
77
+ const rawValue = value.replace(/\$/g, '').replace(/[^\d.,]/g, '');
78
+ input.value = rawValue;
79
+ let processedValue = rawValue;
80
+ if (numeric && rawValue !== '') {
81
+ const cleanValue = rawValue
82
+ .replace(/[^\d.,]/g, '')
83
+ .replace(',', '.');
84
+ const numValue = Number(cleanValue);
85
+ if (!isNaN(numValue)) {
86
+ processedValue = numValue;
66
87
  }
67
- });
88
+ }
68
89
  this.$emit('edit', processedValue, row, key);
90
+ void Promise.resolve().then(() => {
91
+ if (isEditingRef.current && input.value !== rawValue) {
92
+ input.value = rawValue;
93
+ }
94
+ });
95
+ return;
96
+ }
97
+ let processedValue = value;
98
+ if (numeric && value !== '') {
99
+ const cleanValue = value.replace(/[^\d.,]/g, '').replace(',', '.');
100
+ const numValue = Number(cleanValue);
101
+ if (!isNaN(numValue)) {
102
+ processedValue = numValue;
103
+ }
69
104
  }
70
- else {
71
- this.$emit('edit', value, row, key);
105
+ this.$emit('edit', processedValue, row, key);
106
+ },
107
+ onKeyUp: (e) => {
108
+ if (mask && typeof mask === 'function' && isEditingRef.current) {
109
+ const input = e.target;
110
+ input.value = rawValue;
111
+ }
112
+ },
113
+ onChange: (e) => {
114
+ if (mask && typeof mask === 'function' && isEditingRef.current) {
115
+ const input = e.target;
116
+ setTimeout(() => {
117
+ if (isEditingRef.current && input.value !== rawValue) {
118
+ input.value = rawValue;
119
+ }
120
+ }, 0);
121
+ setTimeout(() => {
122
+ if (isEditingRef.current && input.value !== rawValue) {
123
+ input.value = rawValue;
124
+ }
125
+ }, 10);
126
+ }
127
+ },
128
+ onBlur: (e) => {
129
+ isEditingRef.current = false;
130
+ if (mask) {
131
+ const input = e.target;
132
+ let currentValue = input.value;
133
+ if (numeric && currentValue !== '') {
134
+ currentValue = currentValue.replace(',', '.');
135
+ }
136
+ const maskedValue = processMaskedValue(currentValue, mask);
137
+ input.value = maskedValue;
72
138
  }
73
139
  }
74
140
  };
75
- if (mask) {
76
- inputProps['data-mask'] =
77
- typeof mask === 'string' ? mask : JSON.stringify(mask);
78
- }
79
141
  cell = h('input', inputProps);
80
142
  }
81
143
  else {
@@ -34,6 +34,7 @@ export declare const dataTableProps: {
34
34
  readonly default: () => never[];
35
35
  };
36
36
  readonly loading: BooleanConstructor;
37
+ readonly loadingSkeleton: BooleanConstructor;
37
38
  readonly bordered: {
38
39
  readonly type: PropType<boolean | undefined>;
39
40
  readonly default: undefined;
@@ -2912,6 +2913,10 @@ export interface CommonColumnInfo<T = InternalRowData> {
2912
2913
  cellProps?: (rowData: T, rowIndex: number) => HTMLAttributes;
2913
2914
  visible?: boolean;
2914
2915
  }
2916
+ export interface TableColumnMaskObject {
2917
+ postProcess: (value: string) => string;
2918
+ }
2919
+ export type TableColumnMask = string | ((value: string) => string) | TableColumnMaskObject;
2915
2920
  export type TableColumnTitle = string | ((column: TableBaseColumn) => VNodeChild);
2916
2921
  export type TableExpandColumnTitle = string | ((column: TableExpandColumn) => VNodeChild);
2917
2922
  export type TableColumnGroupTitle = string | ((column: TableColumnGroup) => VNodeChild);
@@ -2931,18 +2936,14 @@ export type TableBaseColumn<T = InternalRowData> = {
2931
2936
  type?: never;
2932
2937
  key: ColumnKey;
2933
2938
  editable?: boolean;
2934
- mask?: string | ((value: string) => string) | {
2935
- postProcess: (value: string) => string;
2936
- };
2939
+ mask?: TableColumnMask;
2940
+ numeric?: boolean;
2937
2941
  placeholder?: string;
2938
2942
  totalRow?: {
2939
2943
  type: 'sum' | 'default' | 'diff' | 'multiply' | 'divide' | 'percentage' | 'function';
2940
2944
  value?: string;
2941
2945
  fields?: string[];
2942
2946
  function?: (values: number[]) => number;
2943
- mask?: string | ((value: string) => string) | {
2944
- postProcess: (value: string) => string;
2945
- };
2946
2947
  };
2947
2948
  tree?: boolean;
2948
2949
  sorter?: boolean | Sorter<T> | 'default';
@@ -3035,6 +3036,7 @@ export interface DataTableInjection {
3035
3036
  mergedSortStateRef: Ref<SortState[]>;
3036
3037
  mergedFilterStateRef: Ref<FilterState>;
3037
3038
  loadingRef: Ref<boolean>;
3039
+ loadingSkeletonRef: Ref<boolean>;
3038
3040
  rowClassNameRef: Ref<string | CreateRowClassName | undefined>;
3039
3041
  mergedCheckedRowKeySetRef: Ref<Set<RowKey>>;
3040
3042
  mergedInderminateRowKeySetRef: Ref<Set<RowKey>>;
@@ -3136,6 +3138,11 @@ export interface DataTableInst {
3136
3138
  page: (page: number) => void;
3137
3139
  sort: (columnKey: ColumnKey, order: SortOrder) => void;
3138
3140
  scrollTo: ScrollTo;
3141
+ getData: () => {
3142
+ data: InternalRowData[];
3143
+ totalRows: InternalRowData | null;
3144
+ };
3145
+ getTotalRowData: () => InternalRowData | null;
3139
3146
  /** @deprecated it but just leave it here, it does no harm */
3140
3147
  clearFilter: () => void;
3141
3148
  }
@@ -14,7 +14,7 @@ export const dataTableProps = Object.assign(Object.assign({}, useTheme.props), {
14
14
  }, rowClassName: [String, Function], rowProps: Function, rowKey: Function, summary: [Function], data: {
15
15
  type: Array,
16
16
  default: () => []
17
- }, loading: Boolean, bordered: {
17
+ }, loading: Boolean, loadingSkeleton: Boolean, bordered: {
18
18
  type: Boolean,
19
19
  default: undefined
20
20
  }, bottomBordered: {
@@ -296,19 +296,21 @@ c('&:last-child', 'flex-grow: 1;')])])])])])])]), c('>', [cB('data-table-loading
296
296
  `), cM('editable', `
297
297
  cursor: pointer;
298
298
  position: relative;
299
-
299
+ padding: 0;
300
300
  .u-data-table-editable-input {
301
301
  appearance: none;
302
302
  text-align: right;
303
303
  border: none;
304
304
  background: none;
305
305
  outline: none;
306
- padding: 0;
306
+ box-sizing: border-box;
307
+ padding: var(--u-td-padding);
307
308
  margin: 0;
308
309
  font: inherit;
309
310
  color: inherit;
310
311
  box-shadow: none;
311
- width: '100%';
312
+ height: 100%;
313
+ width: 100%;
312
314
  }
313
315
  `), fixedColumnStyle]), cB('data-table-empty', `
314
316
  box-sizing: border-box;
@@ -1,10 +1,7 @@
1
+ import { TableColumnMask } from './interface';
1
2
  export declare function applyMask(value: string, mask: string): string;
2
- export declare function processMaskedValue(value: string | number, mask: string | ((value: string) => string) | {
3
- postProcess: (value: string) => string;
4
- }): string;
5
- export declare function processInputWithMask(value: string, mask: string | ((value: string) => string) | {
6
- postProcess: (value: string) => string;
7
- }): {
3
+ export declare function processMaskedValue(value: string | number, mask: TableColumnMask): string;
4
+ export declare function processInputWithMask(value: string, mask: TableColumnMask): {
8
5
  processedValue: string | number;
9
6
  displayValue: string;
10
7
  };
@@ -1,11 +1,12 @@
1
1
  import type { CSSProperties } from 'vue';
2
- import type { SortOrder, TableBaseColumn, InternalRowData, SortOrderFlag, SortState, CreateRowClassName, TableSelectionColumn, TableColumn, TableExpandColumn } from './interface';
2
+ import type { SortOrder, TableBaseColumn, InternalRowData, SortOrderFlag, SortState, CreateRowClassName, TableSelectionColumn, TableColumn, TableExpandColumn, TableColumnMaskObject } from './interface';
3
3
  export declare const SELECTION_COL_WIDTH = 40;
4
4
  export declare const EXPAND_COL_WIDTH = 40;
5
5
  export declare const REGEX: {
6
6
  ONLY_DIGITS: RegExp;
7
7
  ONLY_NUMERIC_AND_DOT: RegExp;
8
8
  };
9
+ export declare const defaultNumericMask: TableColumnMaskObject;
9
10
  export declare function getNumberColWidth(col: TableColumn): number | undefined;
10
11
  export declare function getStringColWidth(col: TableColumn): string | undefined;
11
12
  export declare function getColKey(col: TableColumn): string | number;
@@ -6,6 +6,19 @@ export const REGEX = {
6
6
  ONLY_DIGITS: /\D/g,
7
7
  ONLY_NUMERIC_AND_DOT: /[^\d.]/g
8
8
  };
9
+ export const defaultNumericMask = {
10
+ postProcess: (value) => {
11
+ if (!value)
12
+ return '';
13
+ const isNegative = value.trim().startsWith('-');
14
+ const cleaned = value.replace(/[^\d.]/g, '');
15
+ const [intPartRaw, decimalPartRaw = ''] = cleaned.split('.', 2);
16
+ const intPart = intPartRaw.replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
17
+ const decimalPart = decimalPartRaw.slice(0, 2);
18
+ const result = cleaned.includes('.') ? `${intPart}.${decimalPart}` : intPart;
19
+ return isNegative ? `-${result}` : result;
20
+ }
21
+ };
9
22
  export function getNumberColWidth(col) {
10
23
  if (col.type === 'selection') {
11
24
  return col.width === undefined ? SELECTION_COL_WIDTH : depx(col.width);
@@ -281,7 +281,7 @@ export default defineComponent({
281
281
  return;
282
282
  }
283
283
  const { 'onUpdate:value': _onUpdateValue, onUpdateValue, onChange } = props;
284
- const { nTriggerFormChange, nTriggerFormInput } = formItem;
284
+ const { triggerFormChange, triggerFormInput } = formItem;
285
285
  const formattedValue = getFormattedValue(value);
286
286
  if (options.doConfirm) {
287
287
  doConfirm(value, formattedValue);
@@ -296,8 +296,8 @@ export default defineComponent({
296
296
  call(onChange, value, formattedValue);
297
297
  uncontrolledValueRef.value = value;
298
298
  doUpdateFormattedValue(formattedValue, value);
299
- nTriggerFormChange();
300
- nTriggerFormInput();
299
+ triggerFormChange();
300
+ triggerFormInput();
301
301
  }
302
302
  function doClear() {
303
303
  const { onClear } = props;
@@ -310,17 +310,17 @@ export default defineComponent({
310
310
  }
311
311
  function doFocus(e) {
312
312
  const { onFocus } = props;
313
- const { nTriggerFormFocus } = formItem;
313
+ const { triggerFormFocus } = formItem;
314
314
  if (onFocus)
315
315
  call(onFocus, e);
316
- nTriggerFormFocus();
316
+ triggerFormFocus();
317
317
  }
318
318
  function doBlur(e) {
319
319
  const { onBlur } = props;
320
- const { nTriggerFormBlur } = formItem;
320
+ const { triggerFormBlur } = formItem;
321
321
  if (onBlur)
322
322
  call(onBlur, e);
323
- nTriggerFormBlur();
323
+ triggerFormBlur();
324
324
  }
325
325
  function doUpdateShow(show) {
326
326
  const { 'onUpdate:show': _onUpdateShow, onUpdateShow } = props;
@@ -283,6 +283,9 @@ export declare const UDialogProvider: import("vue").DefineComponent<{
283
283
  scrollbarHeight: string;
284
284
  scrollbarBorderRadius: string;
285
285
  opacityDisabled: string;
286
+ brand150: string;
287
+ brand350: string;
288
+ brand550: string;
286
289
  brandPrimary50: string;
287
290
  brandPrimary100: string;
288
291
  brandPrimary200: string;
@@ -639,6 +642,9 @@ export declare const UDialogProvider: import("vue").DefineComponent<{
639
642
  scrollbarHeight: string;
640
643
  scrollbarBorderRadius: string;
641
644
  opacityDisabled: string;
645
+ brand150: string;
646
+ brand350: string;
647
+ brand550: string;
642
648
  brandPrimary50: string;
643
649
  brandPrimary100: string;
644
650
  brandPrimary200: string;