vue-devui 1.0.0-rc.5 → 1.0.0-rc.8

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 (153) hide show
  1. package/README.md +22 -8
  2. package/alert/index.es.js +37 -11
  3. package/alert/index.umd.js +1 -1
  4. package/alert/style.css +1 -1
  5. package/auto-complete/index.es.js +72 -26
  6. package/auto-complete/index.umd.js +5 -5
  7. package/auto-complete/style.css +1 -1
  8. package/avatar/index.es.js +32 -6
  9. package/avatar/index.umd.js +1 -1
  10. package/avatar/style.css +1 -1
  11. package/badge/index.es.js +29 -4
  12. package/badge/index.umd.js +1 -1
  13. package/badge/style.css +1 -1
  14. package/button/index.es.js +5548 -76
  15. package/button/index.umd.js +27 -1
  16. package/button/style.css +1 -1
  17. package/card/index.es.js +56 -29
  18. package/card/index.umd.js +1 -1
  19. package/card/style.css +1 -1
  20. package/checkbox/index.es.js +48 -30
  21. package/checkbox/index.umd.js +1 -1
  22. package/checkbox/style.css +1 -1
  23. package/date-picker/index.es.js +91 -145
  24. package/date-picker/index.umd.js +1 -1
  25. package/date-picker/style.css +1 -1
  26. package/drawer/index.es.js +28 -3
  27. package/drawer/index.umd.js +1 -1
  28. package/drawer/style.css +1 -1
  29. package/dropdown/index.es.js +39 -13
  30. package/dropdown/index.umd.js +1 -1
  31. package/dropdown/style.css +1 -1
  32. package/editable-select/index.es.js +14 -14
  33. package/editable-select/index.umd.js +1 -1
  34. package/editable-select/style.css +1 -1
  35. package/form/index.es.js +958 -1200
  36. package/form/index.umd.js +18 -18
  37. package/form/style.css +1 -1
  38. package/fullscreen/index.es.js +29 -5
  39. package/fullscreen/index.umd.js +1 -1
  40. package/fullscreen/style.css +1 -1
  41. package/grid/index.es.js +68 -49
  42. package/grid/index.umd.js +1 -1
  43. package/grid/style.css +1 -1
  44. package/image-preview/index.es.js +34 -11
  45. package/image-preview/index.umd.js +1 -1
  46. package/image-preview/style.css +1 -1
  47. package/input/index.es.js +91 -145
  48. package/input/index.umd.js +1 -1
  49. package/input/style.css +1 -1
  50. package/input-number/index.es.js +27 -5
  51. package/input-number/index.umd.js +1 -1
  52. package/input-number/style.css +1 -1
  53. package/layout/index.es.js +34 -6
  54. package/layout/index.umd.js +1 -1
  55. package/layout/style.css +1 -1
  56. package/loading/index.es.js +34 -10
  57. package/loading/index.umd.js +1 -1
  58. package/loading/style.css +1 -1
  59. package/modal/index.es.js +41 -15
  60. package/modal/index.umd.js +1 -1
  61. package/modal/style.css +1 -1
  62. package/notification/index.es.js +40 -13
  63. package/notification/index.umd.js +1 -1
  64. package/notification/style.css +1 -1
  65. package/nuxt/components/ButtonGroup.js +3 -0
  66. package/nuxt/components/CheckboxGroup.js +3 -0
  67. package/nuxt/components/FORM_ITEM_TOKEN.js +3 -0
  68. package/nuxt/components/FORM_TOKEN.js +3 -0
  69. package/nuxt/components/Tree.js +3 -0
  70. package/nuxt/components/buttonGroupInjectionKey.js +3 -0
  71. package/nuxt/components/buttonGroupProps.js +3 -0
  72. package/nuxt/components/formControlProps.js +3 -0
  73. package/nuxt/components/formItemProps.js +3 -0
  74. package/nuxt/components/formProps.js +3 -0
  75. package/nuxt/components/treeProps.js +3 -0
  76. package/overlay/index.es.js +31 -9
  77. package/overlay/index.umd.js +1 -1
  78. package/overlay/style.css +1 -1
  79. package/package.json +1 -1
  80. package/pagination/index.es.js +135 -124
  81. package/pagination/index.umd.js +1 -1
  82. package/pagination/style.css +1 -1
  83. package/popover/index.es.js +53 -24
  84. package/popover/index.umd.js +13 -13
  85. package/popover/style.css +1 -1
  86. package/progress/index.es.js +76 -20
  87. package/progress/index.umd.js +3 -3
  88. package/progress/style.css +1 -1
  89. package/radio/index.es.js +32 -7
  90. package/radio/index.umd.js +1 -1
  91. package/radio/style.css +1 -1
  92. package/rate/index.es.js +34 -10
  93. package/rate/index.umd.js +1 -1
  94. package/rate/style.css +1 -1
  95. package/search/index.es.js +103 -153
  96. package/search/index.umd.js +14 -14
  97. package/search/style.css +1 -1
  98. package/select/index.es.js +74 -51
  99. package/select/index.umd.js +1 -1
  100. package/select/style.css +1 -1
  101. package/skeleton/index.es.js +37 -12
  102. package/skeleton/index.umd.js +1 -1
  103. package/skeleton/style.css +1 -1
  104. package/slider/index.es.js +52 -16
  105. package/slider/index.umd.js +1 -1
  106. package/slider/style.css +1 -1
  107. package/splitter/index.es.js +52 -24
  108. package/splitter/index.umd.js +15 -15
  109. package/splitter/style.css +1 -1
  110. package/status/index.es.js +26 -2
  111. package/status/index.umd.js +1 -1
  112. package/status/style.css +1 -1
  113. package/style.css +1 -1
  114. package/switch/index.es.js +30 -6
  115. package/switch/index.umd.js +1 -1
  116. package/switch/style.css +1 -1
  117. package/table/index.es.js +6267 -536
  118. package/table/index.umd.js +27 -1
  119. package/table/style.css +1 -1
  120. package/tabs/index.es.js +32 -8
  121. package/tabs/index.umd.js +1 -1
  122. package/tabs/style.css +1 -1
  123. package/tag/index.es.js +27 -2
  124. package/tag/index.umd.js +1 -1
  125. package/tag/style.css +1 -1
  126. package/textarea/index.es.js +93 -76
  127. package/textarea/index.umd.js +1 -1
  128. package/textarea/style.css +1 -1
  129. package/tooltip/index.es.js +42 -15
  130. package/tooltip/index.umd.js +12 -12
  131. package/tooltip/style.css +1 -1
  132. package/{comment → tree}/index.d.ts +0 -0
  133. package/tree/index.es.js +1030 -0
  134. package/tree/index.umd.js +1 -0
  135. package/{comment → tree}/package.json +1 -1
  136. package/tree/style.css +1 -0
  137. package/upload/index.es.js +53 -22
  138. package/upload/index.umd.js +1 -1
  139. package/upload/style.css +1 -1
  140. package/vue-devui.es.js +5296 -4916
  141. package/vue-devui.umd.js +22 -22
  142. package/comment/index.es.js +0 -84
  143. package/comment/index.umd.js +0 -1
  144. package/comment/style.css +0 -1
  145. package/nuxt/components/Comment.js +0 -3
  146. package/nuxt/components/ReadTip.js +0 -3
  147. package/nuxt/components/commentProps.js +0 -3
  148. package/nuxt/components/readTipProps.js +0 -3
  149. package/read-tip/index.d.ts +0 -7
  150. package/read-tip/index.es.js +0 -261
  151. package/read-tip/index.umd.js +0 -1
  152. package/read-tip/package.json +0 -7
  153. package/read-tip/style.css +0 -1
@@ -0,0 +1,1030 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import { createVNode, defineComponent, toRefs, inject, computed, mergeProps, toRef, provide, renderSlot, useSlots, ref, watch } from "vue";
21
+ const USE_TREE_TOKEN = "use-tree-token";
22
+ const NODE_HEIGHT = 30;
23
+ const NODE_INDENT = 24;
24
+ const IconClose = () => createVNode("svg", {
25
+ "width": "16px",
26
+ "height": "16px",
27
+ "viewBox": "0 0 16 16",
28
+ "version": "1.1",
29
+ "xmlns": "http://www.w3.org/2000/svg",
30
+ "class": "svg-icon"
31
+ }, [createVNode("g", {
32
+ "stroke": "none",
33
+ "stroke-width": "1",
34
+ "fill": "none",
35
+ "fill-rule": "evenodd"
36
+ }, [createVNode("rect", {
37
+ "x": "0.5",
38
+ "y": "0.5",
39
+ "width": "15",
40
+ "height": "15",
41
+ "rx": "2",
42
+ "stroke": "#252b3a"
43
+ }, null), createVNode("path", {
44
+ "fill": "#252b3a",
45
+ "d": "M8.75,4 L8.75,7.25 L12,7.25 L12,8.75 L8.749,8.75 L8.75,12 L7.25,12 L7.249,8.75 L4,8.75 L4,7.25 L7.25,7.25 L7.25,4 L8.75,4 Z"
46
+ }, null)])]);
47
+ const IconOpen = () => createVNode("svg", {
48
+ "width": "16px",
49
+ "height": "16px",
50
+ "viewBox": "0 0 16 16",
51
+ "version": "1.1",
52
+ "xmlns": "http://www.w3.org/2000/svg",
53
+ "class": "svg-icon svg-icon-close"
54
+ }, [createVNode("g", {
55
+ "stroke-width": "1",
56
+ "fill": "none",
57
+ "fill-rule": "evenodd"
58
+ }, [createVNode("rect", {
59
+ "x": "0.5",
60
+ "y": "0.5",
61
+ "width": "15",
62
+ "height": "15",
63
+ "rx": "2",
64
+ "stroke": "#5e7ce0"
65
+ }, null), createVNode("rect", {
66
+ "x": "4",
67
+ "y": "7",
68
+ "width": "8",
69
+ "height": "2",
70
+ "fill": "#5e7ce0"
71
+ }, null)])]);
72
+ function createBem(namespace, element, modifier) {
73
+ let cls = namespace;
74
+ if (element) {
75
+ cls += `__${element}`;
76
+ }
77
+ if (modifier) {
78
+ cls += `--${modifier}`;
79
+ }
80
+ return cls;
81
+ }
82
+ function useNamespace(block) {
83
+ const namespace = `devui-${block}`;
84
+ const b = () => createBem(namespace);
85
+ const e = (element) => element ? createBem(namespace, element) : "";
86
+ const m = (modifier) => modifier ? createBem(namespace, "", modifier) : "";
87
+ const em = (element, modifier) => element && modifier ? createBem(namespace, element, modifier) : "";
88
+ return {
89
+ b,
90
+ e,
91
+ m,
92
+ em
93
+ };
94
+ }
95
+ var DTreeNodeToggle = defineComponent({
96
+ name: "DTreeNodeToggle",
97
+ props: {
98
+ data: {
99
+ type: Object,
100
+ default: () => ({})
101
+ }
102
+ },
103
+ setup(props) {
104
+ const {
105
+ data
106
+ } = toRefs(props);
107
+ const {
108
+ toggleNode
109
+ } = inject(USE_TREE_TOKEN);
110
+ const ns2 = useNamespace("tree");
111
+ return () => {
112
+ var _a;
113
+ return createVNode("span", {
114
+ "class": [ns2.e("node-folder"), ((_a = data.value) == null ? void 0 : _a.disableToggle) && "toggle-disabled"],
115
+ "onClick": (event) => {
116
+ event.stopPropagation();
117
+ if (toggleNode) {
118
+ toggleNode(data.value);
119
+ }
120
+ }
121
+ }, [data.value.isLeaf ? createVNode("span", {
122
+ "class": ns2.e("node-indent")
123
+ }, null) : data.value.expanded ? createVNode(IconOpen, {
124
+ "class": "mr-xs"
125
+ }, null) : createVNode(IconClose, {
126
+ "class": "mr-xs"
127
+ }, null)]);
128
+ };
129
+ }
130
+ });
131
+ const commonProps = {
132
+ name: {
133
+ type: String,
134
+ default: void 0
135
+ },
136
+ halfChecked: {
137
+ type: Boolean,
138
+ default: false
139
+ },
140
+ isShowTitle: {
141
+ type: Boolean,
142
+ default: true
143
+ },
144
+ title: {
145
+ type: String
146
+ },
147
+ color: {
148
+ type: String,
149
+ default: void 0
150
+ },
151
+ showAnimation: {
152
+ type: Boolean,
153
+ default: true
154
+ },
155
+ disabled: {
156
+ type: Boolean,
157
+ default: false
158
+ },
159
+ beforeChange: {
160
+ type: Function,
161
+ default: void 0
162
+ }
163
+ };
164
+ const checkboxProps = __spreadProps(__spreadValues({}, commonProps), {
165
+ checked: {
166
+ type: Boolean,
167
+ default: false
168
+ },
169
+ value: {
170
+ type: String
171
+ },
172
+ label: {
173
+ type: String,
174
+ default: void 0
175
+ },
176
+ "onUpdate:checked": {
177
+ type: Function,
178
+ default: void 0
179
+ },
180
+ onChange: {
181
+ type: Function,
182
+ default: void 0
183
+ },
184
+ modelValue: {
185
+ type: Boolean
186
+ },
187
+ "onUpdate:modelValue": {
188
+ type: Function
189
+ }
190
+ });
191
+ const checkboxGroupProps = __spreadProps(__spreadValues({}, commonProps), {
192
+ modelValue: {
193
+ type: Array,
194
+ required: true
195
+ },
196
+ direction: {
197
+ type: String,
198
+ default: "column"
199
+ },
200
+ itemWidth: {
201
+ type: Number,
202
+ default: void 0
203
+ },
204
+ options: {
205
+ type: Array,
206
+ default: () => []
207
+ },
208
+ onChange: {
209
+ type: Function,
210
+ default: void 0
211
+ },
212
+ "onUpdate:modelValue": {
213
+ type: Function,
214
+ default: void 0
215
+ }
216
+ });
217
+ const checkboxGroupInjectionKey = Symbol("d-checkbox-group");
218
+ var checkbox = "";
219
+ var Checkbox = defineComponent({
220
+ name: "DCheckbox",
221
+ props: checkboxProps,
222
+ emits: ["change", "update:checked", "update:modelValue"],
223
+ setup(props, ctx) {
224
+ const checkboxGroupConf = inject(checkboxGroupInjectionKey, null);
225
+ const ns2 = useNamespace("checkbox");
226
+ const isChecked = computed(() => props.checked || props.modelValue);
227
+ const mergedDisabled = computed(() => {
228
+ return (checkboxGroupConf == null ? void 0 : checkboxGroupConf.disabled.value) || props.disabled;
229
+ });
230
+ const mergedChecked = computed(() => {
231
+ var _a, _b;
232
+ return (_b = (_a = checkboxGroupConf == null ? void 0 : checkboxGroupConf.isItemChecked) == null ? void 0 : _a.call(checkboxGroupConf, props.value)) != null ? _b : isChecked.value;
233
+ });
234
+ const mergedIsShowTitle = computed(() => {
235
+ var _a;
236
+ return (_a = checkboxGroupConf == null ? void 0 : checkboxGroupConf.isShowTitle.value) != null ? _a : props.isShowTitle;
237
+ });
238
+ const mergedShowAnimation = computed(() => {
239
+ var _a;
240
+ return (_a = checkboxGroupConf == null ? void 0 : checkboxGroupConf.showAnimation.value) != null ? _a : props.showAnimation;
241
+ });
242
+ const mergedColor = computed(() => {
243
+ var _a;
244
+ return (_a = checkboxGroupConf == null ? void 0 : checkboxGroupConf.color.value) != null ? _a : props.color;
245
+ });
246
+ const itemWidth = checkboxGroupConf == null ? void 0 : checkboxGroupConf.itemWidth.value;
247
+ const direction = checkboxGroupConf == null ? void 0 : checkboxGroupConf.direction.value;
248
+ const canChange = (checked, val) => {
249
+ var _a;
250
+ if (mergedDisabled.value) {
251
+ return Promise.resolve(false);
252
+ }
253
+ const beforeChange = (_a = props.beforeChange) != null ? _a : checkboxGroupConf == null ? void 0 : checkboxGroupConf.beforeChange;
254
+ if (beforeChange) {
255
+ const res = beforeChange(checked, val);
256
+ if (typeof res === "boolean") {
257
+ return Promise.resolve(res);
258
+ }
259
+ return res;
260
+ }
261
+ return Promise.resolve(true);
262
+ };
263
+ const toggle = () => {
264
+ const current = !isChecked.value;
265
+ checkboxGroupConf == null ? void 0 : checkboxGroupConf.toggleGroupVal(props.value);
266
+ ctx.emit("update:checked", current);
267
+ ctx.emit("update:modelValue", current);
268
+ ctx.emit("change", current);
269
+ };
270
+ const handleClick = () => {
271
+ canChange(!isChecked.value, props.label).then((res) => res && toggle());
272
+ };
273
+ return {
274
+ itemWidth,
275
+ direction,
276
+ mergedColor,
277
+ mergedDisabled,
278
+ mergedIsShowTitle,
279
+ mergedChecked,
280
+ mergedShowAnimation,
281
+ handleClick,
282
+ ns: ns2
283
+ };
284
+ },
285
+ render() {
286
+ var _a;
287
+ const {
288
+ itemWidth,
289
+ direction,
290
+ mergedChecked,
291
+ mergedDisabled,
292
+ mergedIsShowTitle,
293
+ mergedShowAnimation,
294
+ halfChecked,
295
+ title,
296
+ label,
297
+ handleClick,
298
+ name,
299
+ value,
300
+ mergedColor,
301
+ ns: ns2,
302
+ $slots
303
+ } = this;
304
+ const wrapperCls = {
305
+ [ns2.e("column-margin")]: direction === "column",
306
+ [ns2.e("wrap")]: typeof itemWidth !== "undefined"
307
+ };
308
+ const wrapperStyle = itemWidth ? [`width: ${itemWidth}px`] : [];
309
+ const checkboxCls = {
310
+ [ns2.b()]: true,
311
+ active: mergedChecked,
312
+ "half-checked": halfChecked,
313
+ disabled: mergedDisabled,
314
+ unchecked: !mergedChecked
315
+ };
316
+ const labelTitle = mergedIsShowTitle ? title || label : "";
317
+ const bgImgStyle = mergedColor && halfChecked || mergedColor ? `linear-gradient(${mergedColor}, ${mergedColor})` : "";
318
+ const spanStyle = [`border-color:${(mergedChecked || halfChecked) && mergedColor ? mergedColor : ""}`, `background-image:${bgImgStyle}`, `background-color:${mergedColor && halfChecked ? mergedColor : ""}`];
319
+ const spanCls = {
320
+ [ns2.e("material")]: true,
321
+ "custom-color": mergedColor,
322
+ [ns2.m("no-label")]: !label && !$slots.default,
323
+ [ns2.m("no-animation")]: !mergedShowAnimation,
324
+ [ns2.e("default-background")]: !halfChecked
325
+ };
326
+ const polygonCls = {
327
+ [ns2.e("tick")]: true,
328
+ [ns2.m("no-animation")]: !mergedShowAnimation
329
+ };
330
+ const stopPropagation = ($event) => $event.stopPropagation();
331
+ const inputProps = {
332
+ indeterminate: halfChecked
333
+ };
334
+ return createVNode("div", {
335
+ "class": wrapperCls,
336
+ "style": wrapperStyle
337
+ }, [createVNode("div", {
338
+ "class": checkboxCls
339
+ }, [createVNode("label", {
340
+ "title": labelTitle,
341
+ "onClick": handleClick
342
+ }, [createVNode("input", mergeProps({
343
+ "name": name || value,
344
+ "class": ns2.e("input"),
345
+ "type": "checkbox"
346
+ }, inputProps, {
347
+ "checked": mergedChecked,
348
+ "disabled": mergedDisabled,
349
+ "onClick": stopPropagation,
350
+ "onChange": stopPropagation
351
+ }), null), createVNode("span", {
352
+ "style": spanStyle,
353
+ "class": spanCls
354
+ }, [createVNode("span", {
355
+ "class": ns2.e("halfchecked-bg")
356
+ }, null), createVNode("svg", {
357
+ "viewBox": "0 0 16 16",
358
+ "version": "1.1",
359
+ "xmlns": "http://www.w3.org/2000/svg",
360
+ "class": ns2.e("tick-wrap")
361
+ }, [createVNode("g", {
362
+ "stroke": "none",
363
+ "stroke-width": "1",
364
+ "fill": "none",
365
+ "fill-rule": "evenodd"
366
+ }, [createVNode("polygon", {
367
+ "fill-rule": "nonzero",
368
+ "points": "5.17391304 6.56521739 7.7173913 9.10869565 11.826087 5 13 6.17391304 7.7173913 11.4565217 4 7.73913043",
369
+ "class": polygonCls
370
+ }, null)])])]), label || ((_a = $slots.default) == null ? void 0 : _a.call($slots))])])]);
371
+ }
372
+ });
373
+ var checkboxGroup = "";
374
+ defineComponent({
375
+ name: "DCheckboxGroup",
376
+ props: checkboxGroupProps,
377
+ emits: ["change", "update:modelValue"],
378
+ setup(props, ctx) {
379
+ const valList = toRef(props, "modelValue");
380
+ const defaultOpt = {
381
+ checked: false,
382
+ isShowTitle: true,
383
+ halfChecked: false,
384
+ showAnimation: true,
385
+ disabled: false
386
+ };
387
+ const toggleGroupVal = (val) => {
388
+ let index2 = -1;
389
+ if (typeof valList.value[0] === "string") {
390
+ index2 = valList.value.findIndex((item) => item === val);
391
+ } else if (typeof valList.value[0] === "object") {
392
+ index2 = valList.value.findIndex((item) => item.value === val);
393
+ }
394
+ if (index2 === -1) {
395
+ if (typeof props.options[0] === "object") {
396
+ const newOne = props.options.find((item) => item.value === val);
397
+ const res2 = [...valList.value, newOne];
398
+ ctx.emit("update:modelValue", res2);
399
+ ctx.emit("change", res2);
400
+ return;
401
+ }
402
+ const res = [...valList.value, val];
403
+ ctx.emit("update:modelValue", res);
404
+ ctx.emit("change", res);
405
+ return;
406
+ }
407
+ valList.value.splice(index2, 1);
408
+ ctx.emit("update:modelValue", valList.value);
409
+ ctx.emit("change", valList.value);
410
+ };
411
+ const isItemChecked = (itemVal) => {
412
+ if (typeof valList.value[0] === "string") {
413
+ return valList.value.includes(itemVal);
414
+ } else if (typeof valList.value[0] === "object") {
415
+ return valList.value.some((item) => item.value === itemVal);
416
+ }
417
+ };
418
+ provide(checkboxGroupInjectionKey, {
419
+ disabled: toRef(props, "disabled"),
420
+ isShowTitle: toRef(props, "isShowTitle"),
421
+ color: toRef(props, "color"),
422
+ showAnimation: toRef(props, "showAnimation"),
423
+ beforeChange: props.beforeChange,
424
+ isItemChecked,
425
+ toggleGroupVal,
426
+ itemWidth: toRef(props, "itemWidth"),
427
+ direction: toRef(props, "direction")
428
+ });
429
+ return {
430
+ defaultOpt
431
+ };
432
+ },
433
+ render() {
434
+ var _a;
435
+ const {
436
+ direction,
437
+ $slots,
438
+ defaultOpt,
439
+ options
440
+ } = this;
441
+ let children = (_a = $slots.default) == null ? void 0 : _a.call($slots);
442
+ if ((options == null ? void 0 : options.length) > 0) {
443
+ children = options.map((opt) => {
444
+ let mergedOpt = null;
445
+ if (typeof opt === "string") {
446
+ mergedOpt = Object.assign({}, defaultOpt, {
447
+ label: opt,
448
+ value: opt
449
+ });
450
+ } else if (typeof opt === "object") {
451
+ mergedOpt = Object.assign({}, defaultOpt, __spreadProps(__spreadValues({}, opt), {
452
+ label: opt.name
453
+ }));
454
+ }
455
+ return createVNode(Checkbox, mergedOpt, null);
456
+ });
457
+ }
458
+ return createVNode("div", {
459
+ "class": "devui-checkbox-group"
460
+ }, [createVNode("div", {
461
+ "class": {
462
+ "devui-checkbox-list-inline": direction === "row"
463
+ }
464
+ }, [children])]);
465
+ }
466
+ });
467
+ const ns = useNamespace("tree");
468
+ function useTreeNode(data) {
469
+ const { getChildren } = inject(USE_TREE_TOKEN);
470
+ const nodeClass = computed(() => {
471
+ var _a;
472
+ return [ns.e("node"), ((_a = data.value) == null ? void 0 : _a.expanded) && ns.em("node", "open")];
473
+ });
474
+ const nodeStyle = computed(() => {
475
+ var _a;
476
+ return { paddingLeft: `${NODE_INDENT * (((_a = data.value) == null ? void 0 : _a.level) - 1)}px` };
477
+ });
478
+ const nodeVLineClass = computed(() => {
479
+ var _a, _b;
480
+ return [!((_a = data.value) == null ? void 0 : _a.isLeaf) && ((_b = data.value) == null ? void 0 : _b.expanded) && ns.e("node-vline")];
481
+ });
482
+ const nodeVLineStyle = computed(() => {
483
+ var _a;
484
+ return {
485
+ height: `${NODE_HEIGHT * (getChildren(data.value, { expanded: true }).length - 1) + NODE_HEIGHT / 2 + 1}px`,
486
+ left: `${NODE_INDENT * (((_a = data.value) == null ? void 0 : _a.level) - 1) + 9}px`,
487
+ top: `${NODE_HEIGHT}px`
488
+ };
489
+ });
490
+ const nodeHLineClass = computed(() => {
491
+ var _a;
492
+ return [((_a = data.value) == null ? void 0 : _a.level) !== 1 && ns.e("node-hline")];
493
+ });
494
+ const nodeContentClass = computed(() => {
495
+ var _a;
496
+ return [ns.e("node-content"), ((_a = data.value) == null ? void 0 : _a.selected) && "active"];
497
+ });
498
+ const nodeTitleClass = computed(() => {
499
+ var _a;
500
+ return [ns.e("node-title"), ((_a = data.value) == null ? void 0 : _a.disableSelect) && "select-disabled"];
501
+ });
502
+ return {
503
+ nodeClass,
504
+ nodeStyle,
505
+ nodeContentClass,
506
+ nodeTitleClass,
507
+ nodeVLineClass,
508
+ nodeVLineStyle,
509
+ nodeHLineClass
510
+ };
511
+ }
512
+ var DTreeNodeContent = defineComponent({
513
+ name: "DTreeNodeContent",
514
+ props: {
515
+ data: {
516
+ type: Object,
517
+ default: () => ({})
518
+ }
519
+ },
520
+ setup(props) {
521
+ const {
522
+ data
523
+ } = toRefs(props);
524
+ const {
525
+ nodeTitleClass
526
+ } = useTreeNode(data);
527
+ return () => {
528
+ var _a;
529
+ return createVNode("span", {
530
+ "class": nodeTitleClass.value
531
+ }, [(_a = data.value) == null ? void 0 : _a.label]);
532
+ };
533
+ }
534
+ });
535
+ var DTreeNode = defineComponent({
536
+ name: "DTreeNode",
537
+ props: {
538
+ data: {
539
+ type: Object,
540
+ default: () => ({})
541
+ },
542
+ check: {
543
+ type: Boolean,
544
+ default: false
545
+ }
546
+ },
547
+ setup(props, {
548
+ slots
549
+ }) {
550
+ const {
551
+ data,
552
+ check
553
+ } = toRefs(props);
554
+ const {
555
+ toggleSelectNode,
556
+ toggleCheckNode,
557
+ toggleNode,
558
+ getChildren
559
+ } = inject(USE_TREE_TOKEN);
560
+ const ns2 = useNamespace("tree");
561
+ const {
562
+ nodeClass,
563
+ nodeStyle,
564
+ nodeContentClass,
565
+ nodeVLineClass,
566
+ nodeVLineStyle,
567
+ nodeHLineClass
568
+ } = useTreeNode(data);
569
+ const halfChecked = computed(() => {
570
+ const children = getChildren == null ? void 0 : getChildren(data.value);
571
+ const checkedChildren = children == null ? void 0 : children.filter((item) => item.checked);
572
+ if (["upward", "both"].includes(check.value)) {
573
+ return checkedChildren.length > 0 && checkedChildren.length < children.length;
574
+ } else {
575
+ return false;
576
+ }
577
+ });
578
+ return () => {
579
+ var _a, _b, _c;
580
+ const checkboxProps2 = {
581
+ key: (_a = data.value) == null ? void 0 : _a.id,
582
+ disabled: (_b = data.value) == null ? void 0 : _b.disableCheck,
583
+ halfchecked: halfChecked.value,
584
+ modelValue: (_c = data.value) == null ? void 0 : _c.checked,
585
+ "onUpdate:modelValue": () => {
586
+ toggleCheckNode(data.value);
587
+ },
588
+ onClick: (event) => {
589
+ event.stopPropagation();
590
+ }
591
+ };
592
+ return createVNode("div", {
593
+ "class": nodeClass.value,
594
+ "style": nodeStyle.value
595
+ }, [createVNode("span", {
596
+ "class": nodeVLineClass.value,
597
+ "style": nodeVLineStyle.value
598
+ }, null), createVNode("div", {
599
+ "class": nodeContentClass.value,
600
+ "onClick": () => {
601
+ toggleSelectNode(data.value);
602
+ }
603
+ }, [createVNode("span", {
604
+ "class": nodeHLineClass.value
605
+ }, null), slots.icon ? renderSlot(useSlots(), "icon", {
606
+ nodeData: data,
607
+ toggleNode
608
+ }) : createVNode(DTreeNodeToggle, {
609
+ "data": data.value
610
+ }, null), createVNode("div", {
611
+ "class": ns2.em("node-content", "value-wrapper"),
612
+ "style": {
613
+ height: `${NODE_HEIGHT}px`
614
+ }
615
+ }, [check.value && createVNode(Checkbox, checkboxProps2, null), slots.default ? renderSlot(useSlots(), "default", {
616
+ nodeData: data
617
+ }) : createVNode(DTreeNodeContent, {
618
+ "data": data
619
+ }, null)])])]);
620
+ };
621
+ }
622
+ });
623
+ function useToggle() {
624
+ return function useToggle2(data, core) {
625
+ const { getNode, setNodeValue } = core;
626
+ const expandNode = (node) => {
627
+ if (node.disableToggle) {
628
+ return;
629
+ }
630
+ setNodeValue(node, "expanded", true);
631
+ };
632
+ const collapseNode = (node) => {
633
+ if (node.disableToggle) {
634
+ return;
635
+ }
636
+ setNodeValue(node, "expanded", false);
637
+ };
638
+ const toggleNode = (node) => {
639
+ if (node.disableToggle) {
640
+ return;
641
+ }
642
+ if (getNode(node).expanded) {
643
+ setNodeValue(node, "expanded", false);
644
+ } else {
645
+ setNodeValue(node, "expanded", true);
646
+ }
647
+ };
648
+ return {
649
+ expandNode,
650
+ collapseNode,
651
+ toggleNode
652
+ };
653
+ };
654
+ }
655
+ function randomId(n = 8) {
656
+ const str = "abcdefghijklmnopqrstuvwxyz0123456789";
657
+ let result = "";
658
+ for (let i = 0; i < n; i++) {
659
+ result += str[parseInt((Math.random() * str.length).toString())];
660
+ }
661
+ return result;
662
+ }
663
+ function omit(obj, ...keys) {
664
+ return Object.entries(obj).filter((item) => !keys.includes(item[0])).reduce((acc, item) => Object.assign({}, acc, { [item[0]]: item[1] }), {});
665
+ }
666
+ function generateInnerTree(tree2, key = "children", level = 0, path = []) {
667
+ level++;
668
+ return tree2.reduce((acc, item) => {
669
+ var _a, _b;
670
+ const newItem = Object.assign({}, item);
671
+ if (newItem.id === void 0) {
672
+ newItem.id = randomId();
673
+ newItem.idType = "random";
674
+ }
675
+ newItem.level = level;
676
+ if (path.length > 0 && ((_a = path[path.length - 1]) == null ? void 0 : _a.level) >= level) {
677
+ while (((_b = path[path.length - 1]) == null ? void 0 : _b.level) >= level) {
678
+ path.pop();
679
+ }
680
+ }
681
+ path.push(newItem);
682
+ const parentNode = path[path.length - 2];
683
+ if (parentNode) {
684
+ newItem.parentId = parentNode.id;
685
+ }
686
+ if (!newItem[key]) {
687
+ return acc.concat(__spreadProps(__spreadValues({}, newItem), { isLeaf: true }));
688
+ } else {
689
+ return acc.concat(omit(newItem, "children"), generateInnerTree(newItem[key], key, level, path));
690
+ }
691
+ }, []);
692
+ }
693
+ const DEFAULT_CONFIG = {
694
+ expanded: false,
695
+ recursive: true
696
+ };
697
+ function useCore() {
698
+ return function useCore2(data) {
699
+ const getLevel = (node) => {
700
+ return data.value.find((item) => item.id === node.id).level;
701
+ };
702
+ const getChildren = (node, userConfig = DEFAULT_CONFIG) => {
703
+ const getInnerExpendedTree = () => {
704
+ return computed(() => {
705
+ let excludeNodes = [];
706
+ const result2 = [];
707
+ for (let i = 0, len = data == null ? void 0 : data.value.length; i < len; i++) {
708
+ const item = data == null ? void 0 : data.value[i];
709
+ if (excludeNodes.map((innerNode) => innerNode.id).includes(item.id)) {
710
+ continue;
711
+ }
712
+ if (item.expanded !== true) {
713
+ excludeNodes = getChildren(item);
714
+ }
715
+ result2.push(item);
716
+ }
717
+ return result2;
718
+ });
719
+ };
720
+ const result = [];
721
+ const config = __spreadValues(__spreadValues({}, DEFAULT_CONFIG), userConfig);
722
+ const treeData = config.expanded ? getInnerExpendedTree() : data;
723
+ const startIndex = treeData.value.findIndex((item) => item.id === node.id);
724
+ for (let i = startIndex + 1; i < treeData.value.length && getLevel(node) < treeData.value[i].level; i++) {
725
+ if (config.recursive) {
726
+ result.push(treeData.value[i]);
727
+ } else if (getLevel(node) === treeData.value[i].level - 1) {
728
+ result.push(treeData.value[i]);
729
+ }
730
+ }
731
+ return result;
732
+ };
733
+ const getParent = (node) => {
734
+ return data.value.find((item) => item.id === node.parentId);
735
+ };
736
+ const getExpendedTree = () => {
737
+ return computed(() => {
738
+ let excludeNodes = [];
739
+ const result = [];
740
+ for (let i = 0, len = data == null ? void 0 : data.value.length; i < len; i++) {
741
+ const item = data == null ? void 0 : data.value[i];
742
+ if (excludeNodes.map((node) => node.id).includes(item.id)) {
743
+ continue;
744
+ }
745
+ if (item.expanded !== true) {
746
+ excludeNodes = getChildren(item);
747
+ }
748
+ result.push(item);
749
+ }
750
+ return result;
751
+ });
752
+ };
753
+ const getIndex = (node) => {
754
+ return data.value.findIndex((item) => item.id === node.id);
755
+ };
756
+ const getNode = (node) => {
757
+ return data.value.find((item) => item.id === node.id);
758
+ };
759
+ const setNodeValue = (node, key, value) => {
760
+ data.value[getIndex(node)][key] = value;
761
+ };
762
+ const setTree = (newTree) => {
763
+ data.value = generateInnerTree(newTree);
764
+ };
765
+ return {
766
+ getLevel,
767
+ getChildren,
768
+ getParent,
769
+ getExpendedTree,
770
+ getIndex,
771
+ getNode,
772
+ setNodeValue,
773
+ setTree
774
+ };
775
+ };
776
+ }
777
+ const DEFAULT_TREE_PLUGINS = [useCore(), useToggle()];
778
+ function useTree(tree2, plugins = []) {
779
+ const treeData = ref(generateInnerTree(tree2));
780
+ const core = useCore()(treeData);
781
+ const pluginMethods = DEFAULT_TREE_PLUGINS.concat(plugins).reduce((acc, plugin) => {
782
+ return __spreadValues(__spreadValues({}, acc), plugin(treeData, core));
783
+ }, {});
784
+ return __spreadValues({
785
+ treeData
786
+ }, pluginMethods);
787
+ }
788
+ function useCheck(options = ref({ checkStrategy: "both" })) {
789
+ return function useCheck2(data, core) {
790
+ const { setNodeValue, getNode, getChildren, getParent } = core;
791
+ const checkNode = (node) => {
792
+ setNodeValue(node, "checked", true);
793
+ };
794
+ const uncheckNode = (node) => {
795
+ setNodeValue(node, "checked", false);
796
+ };
797
+ const controlParentNodeChecked = (node) => {
798
+ const parentNode = getParent(node);
799
+ if (!parentNode) {
800
+ return;
801
+ }
802
+ const siblingNodes = getChildren(parentNode, { recursive: false });
803
+ const checkedSiblingNodes = siblingNodes.filter((item) => item.checked);
804
+ const toggleParentChecked = () => {
805
+ if (checkedSiblingNodes.length === 0) {
806
+ setNodeValue(parentNode, "checked", false);
807
+ } else if (checkedSiblingNodes.length === siblingNodes.length) {
808
+ setNodeValue(parentNode, "checked", true);
809
+ }
810
+ };
811
+ if (parentNode.parentId) {
812
+ toggleParentChecked();
813
+ controlParentNodeChecked(parentNode);
814
+ } else {
815
+ toggleParentChecked();
816
+ }
817
+ };
818
+ const toggleCheckNode = (node) => {
819
+ if (getNode(node).checked) {
820
+ setNodeValue(node, "checked", false);
821
+ if (["downward", "both"].includes(options.value.checkStrategy)) {
822
+ getChildren(node).forEach((item) => setNodeValue(item, "checked", false));
823
+ }
824
+ } else {
825
+ setNodeValue(node, "checked", true);
826
+ if (["downward", "both"].includes(options.value.checkStrategy)) {
827
+ getChildren(node).forEach((item) => setNodeValue(item, "checked", true));
828
+ }
829
+ }
830
+ if (["upward", "both"].includes(options.value.checkStrategy)) {
831
+ controlParentNodeChecked(node);
832
+ }
833
+ };
834
+ return {
835
+ checkNode,
836
+ uncheckNode,
837
+ toggleCheckNode
838
+ };
839
+ };
840
+ }
841
+ function useSelect() {
842
+ return function useSelect2(data, core) {
843
+ const { setNodeValue } = core;
844
+ let prevActiveNode;
845
+ const selectNode = (node) => {
846
+ if (node.disableSelect) {
847
+ return;
848
+ }
849
+ if (prevActiveNode) {
850
+ const prevActiveNodeIndex = data.value.findIndex((item) => item.id === prevActiveNode.id);
851
+ setNodeValue(data.value[prevActiveNodeIndex], "selected", false);
852
+ }
853
+ setNodeValue(node, "selected", true);
854
+ prevActiveNode = node;
855
+ };
856
+ const deselectNode = (node) => {
857
+ setNodeValue(node, "selected", false);
858
+ };
859
+ const toggleSelectNode = (node) => {
860
+ if (node.selected) {
861
+ deselectNode(node);
862
+ } else {
863
+ selectNode(node);
864
+ }
865
+ };
866
+ return {
867
+ selectNode,
868
+ deselectNode,
869
+ toggleSelectNode
870
+ };
871
+ };
872
+ }
873
+ function useOperate() {
874
+ return function useOperate2(data, core) {
875
+ const { setNodeValue, getChildren, getIndex, getLevel } = core;
876
+ const insertBefore = (parentNode, node, referenceNode) => {
877
+ const children = getChildren(parentNode);
878
+ const lastChild = children[children.length - 1];
879
+ let insertedIndex = getIndex(parentNode) + 1;
880
+ if (referenceNode) {
881
+ insertedIndex = getIndex(referenceNode);
882
+ } else if (lastChild) {
883
+ insertedIndex = getIndex(lastChild) + 1;
884
+ }
885
+ setNodeValue(parentNode, "expanded", true);
886
+ setNodeValue(parentNode, "isLeaf", false);
887
+ const currentNode = __spreadProps(__spreadValues({}, node), {
888
+ level: getLevel(parentNode) + 1,
889
+ parentId: parentNode.id,
890
+ isLeaf: true
891
+ });
892
+ data.value = data.value.slice(0, insertedIndex).concat(currentNode, data.value.slice(insertedIndex, data.value.length));
893
+ };
894
+ const removeNode = (node, config = { recursive: true }) => {
895
+ if (!config.recursive) {
896
+ getChildren(node).forEach((child) => {
897
+ setNodeValue(child, "level", getLevel(child) - 1);
898
+ });
899
+ }
900
+ data.value = data.value.filter((item) => {
901
+ if (config.recursive) {
902
+ return item.id !== node.id && !getChildren(node).map((nodeItem) => nodeItem.id).includes(item.id);
903
+ } else {
904
+ return item.id !== node.id;
905
+ }
906
+ });
907
+ };
908
+ const editNode = (node, label) => {
909
+ setNodeValue(node, "label", label);
910
+ };
911
+ return {
912
+ insertBefore,
913
+ removeNode,
914
+ editNode
915
+ };
916
+ };
917
+ }
918
+ function useMergeNodes() {
919
+ return function useMergeNodes2(data, core) {
920
+ const { setNodeValue, getChildren } = core;
921
+ const { removeNode } = useOperate()(data, core);
922
+ const mergeTreeNodes = () => {
923
+ const mergeToNode = (node) => {
924
+ var _a;
925
+ if (node.isLeaf) {
926
+ return;
927
+ }
928
+ const children = getChildren(node, { recursive: false });
929
+ if ((children == null ? void 0 : children.length) === 1) {
930
+ const subChildren = getChildren(children[0], { recursive: false });
931
+ if (subChildren.length !== 0) {
932
+ setNodeValue(node, "label", node.label + " / " + ((_a = children[0]) == null ? void 0 : _a.label));
933
+ removeNode(children[0], { recursive: false });
934
+ mergeToNode(node);
935
+ } else {
936
+ setNodeValue(children[0], "parentId", node.id);
937
+ }
938
+ } else {
939
+ children.forEach((item) => {
940
+ mergeToNode(item);
941
+ });
942
+ }
943
+ };
944
+ data.value.filter((item) => item.level === 1).forEach((item) => {
945
+ mergeToNode(item);
946
+ });
947
+ };
948
+ return {
949
+ mergeTreeNodes
950
+ };
951
+ };
952
+ }
953
+ const treeProps = {
954
+ data: {
955
+ type: Object,
956
+ default: []
957
+ },
958
+ check: {
959
+ type: [Boolean, String],
960
+ default: false
961
+ }
962
+ };
963
+ var tree = "";
964
+ var Tree = defineComponent({
965
+ name: "DTree",
966
+ props: treeProps,
967
+ setup(props, {
968
+ slots,
969
+ expose
970
+ }) {
971
+ const {
972
+ data,
973
+ check
974
+ } = toRefs(props);
975
+ const ns2 = useNamespace("tree");
976
+ const userPlugins = [useSelect(), useOperate(), useMergeNodes()];
977
+ const checkOptions = ref({
978
+ checkStrategy: check.value || "both"
979
+ });
980
+ watch(check, (newVal) => {
981
+ checkOptions.value.checkStrategy = newVal;
982
+ });
983
+ if (check.value) {
984
+ userPlugins.push(useCheck(checkOptions));
985
+ }
986
+ const treeFactory = useTree(data.value, userPlugins);
987
+ const {
988
+ setTree,
989
+ getExpendedTree,
990
+ toggleNode
991
+ } = treeFactory;
992
+ watch(data, setTree);
993
+ provide(USE_TREE_TOKEN, treeFactory);
994
+ expose({
995
+ treeFactory
996
+ });
997
+ return () => {
998
+ return createVNode("div", {
999
+ "class": ns2.b()
1000
+ }, [getExpendedTree == null ? void 0 : getExpendedTree().value.map((treeNode) => slots.default ? renderSlot(useSlots(), "default", {
1001
+ treeFactory,
1002
+ nodeData: treeNode
1003
+ }) : createVNode(DTreeNode, {
1004
+ "data": treeNode,
1005
+ "check": check.value
1006
+ }, {
1007
+ default: () => slots.content ? renderSlot(useSlots(), "content", {
1008
+ nodeData: treeNode
1009
+ }) : createVNode(DTreeNodeContent, {
1010
+ "data": treeNode
1011
+ }, null),
1012
+ icon: () => slots.icon ? renderSlot(useSlots(), "icon", {
1013
+ nodeData: treeNode,
1014
+ toggleNode
1015
+ }) : createVNode(DTreeNodeToggle, {
1016
+ "data": treeNode
1017
+ }, null)
1018
+ }))]);
1019
+ };
1020
+ }
1021
+ });
1022
+ var index = {
1023
+ title: "Tree \u6811",
1024
+ category: "\u6570\u636E\u5C55\u793A",
1025
+ status: "20%",
1026
+ install(app) {
1027
+ app.component(Tree.name, Tree);
1028
+ }
1029
+ };
1030
+ export { Tree, index as default, treeProps };