vue-devui 1.0.0-beta.1 → 1.0.0-beta.13

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 (332) hide show
  1. package/README.md +62 -45
  2. package/accordion/index.d.ts +7 -0
  3. package/accordion/index.es.js +460 -142
  4. package/accordion/index.umd.js +1 -1
  5. package/accordion/style.css +1 -1
  6. package/alert/index.d.ts +7 -0
  7. package/alert/index.es.js +7 -5
  8. package/alert/index.umd.js +1 -1
  9. package/alert/style.css +1 -1
  10. package/anchor/index.d.ts +7 -0
  11. package/avatar/index.d.ts +7 -0
  12. package/avatar/index.es.js +1 -1
  13. package/avatar/index.umd.js +1 -1
  14. package/back-top/index.d.ts +7 -0
  15. package/back-top/index.es.js +128 -0
  16. package/back-top/index.umd.js +1 -0
  17. package/back-top/package.json +7 -0
  18. package/back-top/style.css +1 -0
  19. package/badge/index.d.ts +7 -0
  20. package/badge/index.es.js +1 -1
  21. package/badge/index.umd.js +1 -1
  22. package/breadcrumb/index.d.ts +7 -0
  23. package/button/index.d.ts +7 -0
  24. package/button/index.es.js +218 -12
  25. package/button/index.umd.js +1 -1
  26. package/button/style.css +1 -1
  27. package/card/index.d.ts +7 -0
  28. package/card/index.es.js +1 -1
  29. package/card/index.umd.js +1 -1
  30. package/carousel/index.d.ts +7 -0
  31. package/carousel/index.es.js +5 -4
  32. package/carousel/index.umd.js +1 -1
  33. package/cascader/index.d.ts +7 -0
  34. package/cascader/index.es.js +1239 -83
  35. package/cascader/index.umd.js +1 -1
  36. package/cascader/style.css +1 -1
  37. package/checkbox/index.d.ts +7 -0
  38. package/checkbox/index.es.js +43 -8
  39. package/checkbox/index.umd.js +1 -1
  40. package/color-picker/index.d.ts +7 -0
  41. package/color-picker/index.es.js +2960 -0
  42. package/color-picker/index.umd.js +1 -0
  43. package/color-picker/package.json +7 -0
  44. package/color-picker/style.css +1 -0
  45. package/comment/index.d.ts +7 -0
  46. package/comment/index.es.js +85 -0
  47. package/comment/index.umd.js +1 -0
  48. package/comment/package.json +7 -0
  49. package/comment/style.css +1 -0
  50. package/countdown/index.d.ts +7 -0
  51. package/countdown/index.es.js +176 -0
  52. package/countdown/index.umd.js +1 -0
  53. package/countdown/package.json +7 -0
  54. package/countdown/style.css +1 -0
  55. package/date-picker/index.d.ts +7 -0
  56. package/date-picker/index.es.js +32 -21
  57. package/date-picker/index.umd.js +1 -1
  58. package/date-picker/style.css +1 -1
  59. package/dragdrop/index.d.ts +7 -0
  60. package/dragdrop/index.es.js +157 -0
  61. package/dragdrop/index.umd.js +1 -0
  62. package/dragdrop/package.json +7 -0
  63. package/drawer/index.d.ts +7 -0
  64. package/drawer/index.es.js +194 -42
  65. package/drawer/index.umd.js +1 -1
  66. package/drawer/style.css +1 -1
  67. package/dropdown/index.d.ts +7 -0
  68. package/dropdown/index.es.js +535 -0
  69. package/dropdown/index.umd.js +1 -0
  70. package/dropdown/package.json +7 -0
  71. package/dropdown/style.css +1 -0
  72. package/editable-select/index.d.ts +7 -0
  73. package/editable-select/index.es.js +5782 -469
  74. package/editable-select/index.umd.js +27 -1
  75. package/editable-select/style.css +1 -1
  76. package/form/index.d.ts +7 -0
  77. package/form/index.es.js +2257 -0
  78. package/form/index.umd.js +1 -0
  79. package/form/package.json +7 -0
  80. package/form/style.css +1 -0
  81. package/fullscreen/index.d.ts +7 -0
  82. package/fullscreen/index.es.js +14 -4
  83. package/fullscreen/index.umd.js +1 -1
  84. package/gantt/index.d.ts +7 -0
  85. package/gantt/index.es.js +535 -0
  86. package/gantt/index.umd.js +1 -0
  87. package/gantt/package.json +7 -0
  88. package/gantt/style.css +1 -0
  89. package/grid/index.d.ts +7 -0
  90. package/grid/index.es.js +269 -0
  91. package/grid/index.umd.js +1 -0
  92. package/grid/package.json +7 -0
  93. package/grid/style.css +1 -0
  94. package/icon/index.d.ts +7 -0
  95. package/icon/index.es.js +6 -5
  96. package/icon/index.umd.js +1 -1
  97. package/image-preview/index.d.ts +7 -0
  98. package/image-preview/index.es.js +99 -20
  99. package/image-preview/index.umd.js +1 -1
  100. package/image-preview/style.css +1 -1
  101. package/index.d.ts +7 -0
  102. package/input/index.d.ts +7 -0
  103. package/input/index.es.js +24 -13
  104. package/input/index.umd.js +1 -1
  105. package/input-icon/index.d.ts +7 -0
  106. package/input-icon/index.es.js +332 -0
  107. package/input-icon/index.umd.js +1 -0
  108. package/input-icon/package.json +7 -0
  109. package/input-icon/style.css +1 -0
  110. package/input-number/index.d.ts +7 -0
  111. package/input-number/index.es.js +5 -4
  112. package/input-number/index.umd.js +1 -1
  113. package/layout/index.d.ts +7 -0
  114. package/layout/index.es.js +1 -1
  115. package/layout/index.umd.js +1 -1
  116. package/loading/index.d.ts +7 -0
  117. package/loading/index.es.js +1 -1
  118. package/loading/index.umd.js +1 -1
  119. package/modal/index.d.ts +7 -0
  120. package/modal/index.es.js +328 -109
  121. package/modal/index.umd.js +1 -1
  122. package/modal/style.css +1 -1
  123. package/nav-sprite/index.d.ts +7 -0
  124. package/nuxt/components/Accordion.js +3 -0
  125. package/nuxt/components/Alert.js +3 -0
  126. package/nuxt/components/Anchor.js +3 -0
  127. package/nuxt/components/Aside.js +3 -0
  128. package/nuxt/components/Avatar.js +3 -0
  129. package/nuxt/components/BackTop.js +3 -0
  130. package/nuxt/components/Badge.js +3 -0
  131. package/nuxt/components/Breadcrumb.js +3 -0
  132. package/nuxt/components/Button.js +3 -0
  133. package/nuxt/components/Card.js +3 -0
  134. package/nuxt/components/Carousel.js +3 -0
  135. package/nuxt/components/Cascader.js +3 -0
  136. package/nuxt/components/Checkbox.js +3 -0
  137. package/nuxt/components/Col.js +3 -0
  138. package/nuxt/components/ColorPicker.js +3 -0
  139. package/nuxt/components/Column.js +3 -0
  140. package/nuxt/components/Comment.js +3 -0
  141. package/nuxt/components/Content.js +3 -0
  142. package/nuxt/components/Countdown.js +3 -0
  143. package/nuxt/components/DatePicker.js +3 -0
  144. package/nuxt/components/Drawer.js +3 -0
  145. package/nuxt/components/DrawerService.js +3 -0
  146. package/nuxt/components/Dropdown.js +3 -0
  147. package/nuxt/components/EditableSelect.js +3 -0
  148. package/nuxt/components/FixedOverlay.js +3 -0
  149. package/nuxt/components/FlexibleOverlay.js +3 -0
  150. package/nuxt/components/Footer.js +3 -0
  151. package/nuxt/components/Form.js +3 -0
  152. package/nuxt/components/FormControl.js +3 -0
  153. package/nuxt/components/FormItem.js +3 -0
  154. package/nuxt/components/FormLabel.js +3 -0
  155. package/nuxt/components/FormOperation.js +3 -0
  156. package/nuxt/components/Fullscreen.js +3 -0
  157. package/nuxt/components/Gantt.js +3 -0
  158. package/nuxt/components/Header.js +3 -0
  159. package/nuxt/components/Icon.js +2 -0
  160. package/nuxt/components/ImagePreviewService.js +3 -0
  161. package/nuxt/components/Input.js +3 -0
  162. package/nuxt/components/InputIcon.js +3 -0
  163. package/nuxt/components/InputNumber.js +3 -0
  164. package/nuxt/components/Layout.js +3 -0
  165. package/nuxt/components/Loading.js +3 -0
  166. package/nuxt/components/LoadingService.js +3 -0
  167. package/nuxt/components/Modal.js +3 -0
  168. package/nuxt/components/NavSprite.js +2 -0
  169. package/nuxt/components/Pagination.js +3 -0
  170. package/nuxt/components/Panel.js +3 -0
  171. package/nuxt/components/Popover.js +3 -0
  172. package/nuxt/components/Progress.js +3 -0
  173. package/nuxt/components/QuadrantDiagram.js +3 -0
  174. package/nuxt/components/Radio.js +3 -0
  175. package/nuxt/components/RadioGroup.js +3 -0
  176. package/nuxt/components/Rate.js +3 -0
  177. package/nuxt/components/ReadTip.js +3 -0
  178. package/nuxt/components/Result.js +3 -0
  179. package/nuxt/components/Row.js +3 -0
  180. package/nuxt/components/Search.js +3 -0
  181. package/nuxt/components/Select.js +3 -0
  182. package/nuxt/components/Skeleton.js +3 -0
  183. package/nuxt/components/SkeletonItem.js +3 -0
  184. package/nuxt/components/Slider.js +3 -0
  185. package/nuxt/components/Splitter.js +3 -0
  186. package/nuxt/components/Statistic.js +3 -0
  187. package/nuxt/components/Status.js +3 -0
  188. package/nuxt/components/StepsGuide.js +3 -0
  189. package/nuxt/components/StickSlider.js +3 -0
  190. package/nuxt/components/Sticky.js +2 -0
  191. package/nuxt/components/Switch.js +3 -0
  192. package/nuxt/components/Table.js +3 -0
  193. package/nuxt/components/Tabs.js +3 -0
  194. package/nuxt/components/Tag.js +3 -0
  195. package/nuxt/components/TagInput.js +3 -0
  196. package/nuxt/components/Textarea.js +3 -0
  197. package/nuxt/components/TimeAxis.js +3 -0
  198. package/nuxt/components/TimeAxisItem.js +3 -0
  199. package/nuxt/components/TimePicker.js +3 -0
  200. package/nuxt/components/Toast.js +3 -0
  201. package/nuxt/components/ToastService.js +3 -0
  202. package/nuxt/components/Tooltip.js +3 -0
  203. package/nuxt/components/Transfer.js +3 -0
  204. package/nuxt/components/Tree.js +3 -0
  205. package/nuxt/components/TreeSelect.js +3 -0
  206. package/nuxt/components/Upload.js +3 -0
  207. package/nuxt/components/buttonProps.js +3 -0
  208. package/nuxt/index.js +13 -0
  209. package/overlay/index.d.ts +7 -0
  210. package/overlay/index.es.js +111 -94
  211. package/overlay/index.umd.js +1 -1
  212. package/overlay/style.css +1 -1
  213. package/package.json +5 -47
  214. package/pagination/index.d.ts +7 -0
  215. package/pagination/index.es.js +3 -3
  216. package/pagination/index.umd.js +1 -1
  217. package/panel/index.d.ts +7 -0
  218. package/panel/index.es.js +25 -22
  219. package/panel/index.umd.js +1 -1
  220. package/panel/style.css +1 -1
  221. package/popover/index.d.ts +7 -0
  222. package/popover/index.es.js +18 -6
  223. package/popover/index.umd.js +1 -1
  224. package/progress/index.d.ts +7 -0
  225. package/progress/index.es.js +9 -9
  226. package/progress/index.umd.js +3 -3
  227. package/quadrant-diagram/index.d.ts +7 -0
  228. package/radio/index.d.ts +7 -0
  229. package/radio/index.es.js +6 -6
  230. package/radio/index.umd.js +1 -1
  231. package/rate/index.d.ts +7 -0
  232. package/rate/index.es.js +1 -1
  233. package/rate/index.umd.js +1 -1
  234. package/read-tip/index.d.ts +7 -0
  235. package/read-tip/index.es.js +258 -0
  236. package/read-tip/index.umd.js +1 -0
  237. package/read-tip/package.json +7 -0
  238. package/read-tip/style.css +1 -0
  239. package/result/index.d.ts +7 -0
  240. package/result/index.es.js +119 -0
  241. package/result/index.umd.js +1 -0
  242. package/result/package.json +7 -0
  243. package/result/style.css +1 -0
  244. package/ripple/index.d.ts +7 -0
  245. package/ripple/index.es.js +5 -2
  246. package/ripple/index.umd.js +1 -1
  247. package/search/index.d.ts +7 -0
  248. package/search/index.es.js +35 -21
  249. package/search/index.umd.js +1 -1
  250. package/select/index.d.ts +7 -0
  251. package/select/index.es.js +47 -11
  252. package/select/index.umd.js +1 -1
  253. package/skeleton/index.d.ts +7 -0
  254. package/skeleton/index.es.js +148 -26
  255. package/skeleton/index.umd.js +1 -1
  256. package/skeleton/style.css +1 -1
  257. package/slider/index.d.ts +7 -0
  258. package/slider/index.es.js +32 -182
  259. package/slider/index.umd.js +1 -1
  260. package/slider/style.css +1 -1
  261. package/splitter/index.d.ts +7 -0
  262. package/splitter/index.es.js +295 -100
  263. package/splitter/index.umd.js +1 -1
  264. package/splitter/style.css +1 -1
  265. package/statistic/index.d.ts +7 -0
  266. package/statistic/index.es.js +280 -0
  267. package/statistic/index.umd.js +1 -0
  268. package/statistic/package.json +7 -0
  269. package/statistic/style.css +1 -0
  270. package/status/index.d.ts +7 -0
  271. package/status/index.es.js +2 -2
  272. package/status/index.umd.js +1 -1
  273. package/steps-guide/index.d.ts +7 -0
  274. package/steps-guide/index.es.js +101 -73
  275. package/steps-guide/index.umd.js +1 -1
  276. package/steps-guide/style.css +1 -1
  277. package/sticky/index.d.ts +7 -0
  278. package/style.css +1 -1
  279. package/switch/index.d.ts +7 -0
  280. package/switch/index.es.js +1 -1
  281. package/switch/index.umd.js +1 -1
  282. package/table/index.d.ts +7 -0
  283. package/table/index.es.js +1708 -156
  284. package/table/index.umd.js +1 -1
  285. package/table/style.css +1 -1
  286. package/tabs/index.d.ts +7 -0
  287. package/tabs/index.es.js +6 -3
  288. package/tabs/index.umd.js +1 -1
  289. package/tag/index.d.ts +7 -0
  290. package/tag/index.es.js +131 -0
  291. package/tag/index.umd.js +1 -0
  292. package/tag/package.json +7 -0
  293. package/tag/style.css +1 -0
  294. package/tag-input/index.d.ts +7 -0
  295. package/tag-input/index.es.js +1 -13
  296. package/tag-input/index.umd.js +1 -1
  297. package/textarea/index.d.ts +7 -0
  298. package/textarea/index.es.js +132 -0
  299. package/textarea/index.umd.js +1 -0
  300. package/textarea/package.json +7 -0
  301. package/textarea/style.css +1 -0
  302. package/time-axis/index.d.ts +7 -0
  303. package/time-axis/index.es.js +241 -21
  304. package/time-axis/index.umd.js +1 -1
  305. package/time-axis/style.css +1 -1
  306. package/time-picker/index.d.ts +7 -0
  307. package/time-picker/index.es.js +266 -32
  308. package/time-picker/index.umd.js +1 -1
  309. package/time-picker/style.css +1 -1
  310. package/toast/index.d.ts +7 -0
  311. package/toast/index.es.js +16 -12
  312. package/toast/index.umd.js +1 -1
  313. package/toast/style.css +1 -1
  314. package/tooltip/index.d.ts +7 -0
  315. package/transfer/index.d.ts +7 -0
  316. package/transfer/index.es.js +575 -83
  317. package/transfer/index.umd.js +1 -1
  318. package/transfer/style.css +1 -1
  319. package/tree/index.d.ts +7 -0
  320. package/tree/index.es.js +171 -35
  321. package/tree/index.umd.js +1 -1
  322. package/tree-select/index.d.ts +7 -0
  323. package/tree-select/index.es.js +528 -0
  324. package/tree-select/index.umd.js +1 -0
  325. package/tree-select/package.json +7 -0
  326. package/tree-select/style.css +1 -0
  327. package/upload/index.d.ts +7 -0
  328. package/upload/index.es.js +172 -513
  329. package/upload/index.umd.js +1 -1
  330. package/upload/style.css +1 -1
  331. package/vue-devui.es.js +22079 -8773
  332. package/vue-devui.umd.js +29 -3
package/table/index.es.js CHANGED
@@ -1,4 +1,27 @@
1
- import { computed, ref, watch, defineComponent, inject, createVNode, toRefs, getCurrentInstance, provide, createTextVNode, onBeforeMount, onMounted } from "vue";
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
+ var __publicField = (obj, key, value) => {
21
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
22
+ return value;
23
+ };
24
+ import { computed, ref, watch, defineComponent, inject, createVNode, mergeProps, toRef, provide, Teleport, Transition, renderSlot, isVNode, onMounted, onUnmounted, withDirectives, vShow, reactive, isRef, toRefs, Fragment, shallowRef, getCurrentInstance, createTextVNode, resolveDirective, onBeforeMount, h, onBeforeUnmount, render } from "vue";
2
25
  const TableProps = {
3
26
  data: {
4
27
  type: Array,
@@ -7,177 +30,1453 @@ const TableProps = {
7
30
  striped: {
8
31
  type: Boolean,
9
32
  default: false
33
+ },
34
+ scrollable: {
35
+ type: Boolean,
36
+ default: false
37
+ },
38
+ maxWidth: {
39
+ type: String
40
+ },
41
+ maxHeight: {
42
+ type: String
43
+ },
44
+ tableWidth: {
45
+ type: String
46
+ },
47
+ tableHeight: {
48
+ type: String
49
+ },
50
+ size: {
51
+ type: String,
52
+ validator(value) {
53
+ return value === "sm" || value === "md" || value === "lg";
54
+ }
55
+ },
56
+ rowHoveredHighlight: {
57
+ type: Boolean,
58
+ default: true
59
+ },
60
+ fixHeader: {
61
+ type: Boolean,
62
+ default: false
63
+ },
64
+ checkable: {
65
+ type: Boolean,
66
+ default: true
67
+ },
68
+ tableLayout: {
69
+ type: String,
70
+ default: "auto",
71
+ validator(v) {
72
+ return v === "fixed" || v === "auto";
73
+ }
74
+ },
75
+ showLoading: {
76
+ type: Boolean,
77
+ default: false
78
+ },
79
+ headerBg: {
80
+ type: Boolean,
81
+ default: false
10
82
  }
11
83
  };
84
+ const TABLE_TOKEN = Symbol();
12
85
  function useTable(props) {
13
86
  const classes = computed(() => ({
14
87
  "devui-table": true,
15
- "devui-table-striped": props.striped
88
+ "devui-table-striped": props.striped,
89
+ "header-bg": props.headerBg,
90
+ "table-layout-auto": props.tableLayout === "auto"
91
+ }));
92
+ const style = computed(() => ({
93
+ maxHeight: props.maxHeight,
94
+ maxWidth: props.maxWidth,
95
+ height: props.tableHeight,
96
+ width: props.tableWidth
16
97
  }));
17
- return { classes };
98
+ return { classes, style };
18
99
  }
19
- function createStore(props) {
100
+ const useFixedColumn = (column) => {
101
+ const stickyCell = computed(() => {
102
+ const col = column.value;
103
+ if (col.fixedLeft) {
104
+ return `devui-sticky-cell left`;
105
+ }
106
+ if (col.fixedRight) {
107
+ return `devui-sticky-cell right`;
108
+ }
109
+ return void 0;
110
+ });
111
+ const offsetStyle = computed(() => {
112
+ const col = column.value;
113
+ if (col.fixedLeft) {
114
+ return `left:${col.fixedLeft}`;
115
+ }
116
+ if (col.fixedRight) {
117
+ return `right:${col.fixedRight}`;
118
+ }
119
+ return void 0;
120
+ });
121
+ return {
122
+ stickyCell,
123
+ offsetStyle
124
+ };
125
+ };
126
+ function createStore(dataSource) {
20
127
  const _data = ref([]);
128
+ watch(dataSource, (value) => {
129
+ _data.value = [...value];
130
+ }, { deep: true, immediate: true });
131
+ const { _columns, insertColumn, removeColumn, sortColumn } = createColumnGenerator();
132
+ const { _checkAll, _checkList, _halfChecked, getCheckedRows } = createSelection(dataSource, _data);
133
+ const { sortData } = createSorter(dataSource, _data);
134
+ const { filterData, resetFilterData } = createFilter(dataSource, _data);
135
+ const { isFixedLeft } = createFixedLogic(_columns);
136
+ return {
137
+ states: {
138
+ _data,
139
+ _columns,
140
+ _checkList,
141
+ _checkAll,
142
+ _halfChecked,
143
+ isFixedLeft
144
+ },
145
+ insertColumn,
146
+ sortColumn,
147
+ removeColumn,
148
+ getCheckedRows,
149
+ sortData,
150
+ filterData,
151
+ resetFilterData
152
+ };
153
+ }
154
+ const createColumnGenerator = () => {
21
155
  const _columns = ref([]);
22
- updateData();
23
- watch(() => props.data, updateData, { deep: true });
24
- function updateData() {
25
- _data.value = [];
26
- props.data.forEach((item) => {
27
- _data.value.push(item);
28
- });
29
- }
30
156
  const insertColumn = (column) => {
31
157
  _columns.value.push(column);
158
+ _columns.value.sort((a, b) => a.order > b.order ? 1 : -1);
159
+ };
160
+ const sortColumn = () => {
161
+ _columns.value.sort((a, b) => a.order > b.order ? 1 : -1);
162
+ };
163
+ const removeColumn = (column) => {
164
+ const i = _columns.value.findIndex((v) => v === column);
165
+ if (i === -1) {
166
+ return;
167
+ }
168
+ _columns.value.splice(i, 1);
169
+ };
170
+ return { _columns, insertColumn, removeColumn, sortColumn };
171
+ };
172
+ const createSelection = (dataSource, _data) => {
173
+ const _checkList = ref([]);
174
+ const _checkAllRecord = ref(false);
175
+ const _checkAll = computed({
176
+ get: () => _checkAllRecord.value,
177
+ set: (val) => {
178
+ _checkAllRecord.value = val;
179
+ for (let i = 0; i < _checkList.value.length; i++) {
180
+ _checkList.value[i] = val;
181
+ }
182
+ }
183
+ });
184
+ const _halfChecked = ref(false);
185
+ watch(dataSource, (value) => {
186
+ _checkList.value = new Array(value.length).fill(false);
187
+ }, { deep: true, immediate: true });
188
+ watch(_checkList, (list) => {
189
+ if (list.length === 0) {
190
+ return;
191
+ }
192
+ let allTrue = true;
193
+ let allFalse = true;
194
+ for (let i = 0; i < list.length; i++) {
195
+ allTrue && (allTrue = list[i]);
196
+ allFalse && (allFalse = !list[i]);
197
+ }
198
+ _checkAllRecord.value = allTrue;
199
+ _halfChecked.value = !(allFalse || allTrue);
200
+ }, { immediate: true, deep: true });
201
+ const getCheckedRows = () => {
202
+ return _data.value.filter((_, index2) => _checkList.value[index2]);
32
203
  };
33
204
  return {
34
- insertColumn,
35
- states: {
36
- _data,
37
- _columns
205
+ _checkList,
206
+ _checkAll,
207
+ _halfChecked,
208
+ getCheckedRows
209
+ };
210
+ };
211
+ const createSorter = (dataSource, _data) => {
212
+ const sortData = (field, direction, compareFn = (field2, a, b) => a[field2] > b[field2]) => {
213
+ if (direction === "ASC") {
214
+ _data.value = _data.value.sort((a, b) => compareFn(field, a, b) ? 1 : -1);
215
+ } else if (direction === "DESC") {
216
+ _data.value = _data.value.sort((a, b) => !compareFn(field, a, b) ? 1 : -1);
217
+ } else {
218
+ _data.value = [...dataSource.value];
38
219
  }
39
220
  };
40
- }
221
+ return { sortData };
222
+ };
223
+ const createFilter = (dataSource, _data) => {
224
+ const fieldSet = new Set();
225
+ const filterData = (field, results) => {
226
+ fieldSet.add(field);
227
+ const fields = [...fieldSet];
228
+ _data.value = dataSource.value.filter((item) => {
229
+ return fields.reduce((prev, field2) => {
230
+ return prev && results.indexOf(item[field2]) !== -1;
231
+ }, true);
232
+ });
233
+ };
234
+ const resetFilterData = () => {
235
+ fieldSet.clear();
236
+ _data.value = [...dataSource.value];
237
+ };
238
+ return { filterData, resetFilterData };
239
+ };
240
+ const createFixedLogic = (columns) => {
241
+ const isFixedLeft = computed(() => {
242
+ return columns.value.reduce((prev, current) => prev || !!current.fixedLeft, false);
243
+ });
244
+ return { isFixedLeft };
245
+ };
41
246
  var ColGroup = defineComponent({
42
247
  name: "DColGroup",
43
248
  setup() {
44
- const parent = inject("table");
249
+ const parent = inject(TABLE_TOKEN);
45
250
  const columns = parent.store.states._columns;
46
- return {
47
- columns
48
- };
49
- },
50
- render() {
51
- const {
52
- columns
53
- } = this;
54
- return createVNode("colgroup", null, [columns.map((column, index2) => {
251
+ return () => parent.props.tableLayout === "fixed" ? createVNode("colgroup", null, [parent.props.checkable ? createVNode("col", {
252
+ "width": 36
253
+ }, null) : null, columns.value.map((column, index2) => {
55
254
  return createVNode("col", {
56
255
  "key": index2,
57
256
  "width": column.realWidth
58
257
  }, null);
59
- })]);
258
+ })]) : null;
60
259
  }
61
260
  });
62
- const TableHeaderProps = {
63
- store: {
64
- type: Object,
65
- default: {}
261
+ var checkbox = "";
262
+ const commonProps = {
263
+ name: {
264
+ type: String,
265
+ default: void 0
266
+ },
267
+ halfchecked: {
268
+ type: Boolean,
269
+ default: false
270
+ },
271
+ isShowTitle: {
272
+ type: Boolean,
273
+ default: true
274
+ },
275
+ title: {
276
+ type: String
277
+ },
278
+ color: {
279
+ type: String,
280
+ default: void 0
281
+ },
282
+ showAnimation: {
283
+ type: Boolean,
284
+ default: true
285
+ },
286
+ disabled: {
287
+ type: Boolean,
288
+ default: false
289
+ },
290
+ beforeChange: {
291
+ type: Function,
292
+ default: void 0
66
293
  }
67
294
  };
68
- var header = "";
69
- var TableHeader = defineComponent({
70
- name: "DTableHeader",
71
- props: TableHeaderProps,
72
- setup(props) {
295
+ const checkboxProps = __spreadProps(__spreadValues({}, commonProps), {
296
+ halfchecked: {
297
+ type: Boolean,
298
+ default: false
299
+ },
300
+ checked: {
301
+ type: Boolean,
302
+ default: false
303
+ },
304
+ value: {
305
+ type: String
306
+ },
307
+ label: {
308
+ type: String,
309
+ default: void 0
310
+ },
311
+ title: {
312
+ type: String,
313
+ default: void 0
314
+ },
315
+ "onUpdate:checked": {
316
+ type: Function,
317
+ default: void 0
318
+ },
319
+ onChange: {
320
+ type: Function,
321
+ default: void 0
322
+ },
323
+ modelValue: {
324
+ type: Boolean
325
+ },
326
+ "onUpdate:modelValue": {
327
+ type: Function
328
+ }
329
+ });
330
+ const checkboxGroupProps = __spreadProps(__spreadValues({}, commonProps), {
331
+ modelValue: {
332
+ type: Array,
333
+ required: true
334
+ },
335
+ direction: {
336
+ type: String,
337
+ default: "column"
338
+ },
339
+ itemWidth: {
340
+ type: Number,
341
+ default: void 0
342
+ },
343
+ options: {
344
+ type: Array,
345
+ default: () => []
346
+ },
347
+ onChange: {
348
+ type: Function,
349
+ default: void 0
350
+ },
351
+ "onUpdate:modelValue": {
352
+ type: Function,
353
+ default: void 0
354
+ }
355
+ });
356
+ const checkboxGroupInjectionKey = Symbol("d-checkbox-group");
357
+ var Checkbox = defineComponent({
358
+ name: "DCheckbox",
359
+ props: checkboxProps,
360
+ emits: ["change", "update:checked", "update:modelValue"],
361
+ setup(props, ctx) {
362
+ const checkboxGroupConf = inject(checkboxGroupInjectionKey, null);
363
+ const isChecked = computed(() => props.checked || props.modelValue);
364
+ const mergedDisabled = computed(() => {
365
+ return (checkboxGroupConf == null ? void 0 : checkboxGroupConf.disabled.value) || props.disabled;
366
+ });
367
+ const mergedChecked = computed(() => {
368
+ var _a, _b;
369
+ return (_b = (_a = checkboxGroupConf == null ? void 0 : checkboxGroupConf.isItemChecked) == null ? void 0 : _a.call(checkboxGroupConf, props.value)) != null ? _b : isChecked.value;
370
+ });
371
+ const mergedIsShowTitle = computed(() => {
372
+ var _a;
373
+ return (_a = checkboxGroupConf == null ? void 0 : checkboxGroupConf.isShowTitle.value) != null ? _a : props.isShowTitle;
374
+ });
375
+ const mergedShowAnimation = computed(() => {
376
+ var _a;
377
+ return (_a = checkboxGroupConf == null ? void 0 : checkboxGroupConf.showAnimation.value) != null ? _a : props.showAnimation;
378
+ });
379
+ const mergedColor = computed(() => {
380
+ var _a;
381
+ return (_a = checkboxGroupConf == null ? void 0 : checkboxGroupConf.color.value) != null ? _a : props.color;
382
+ });
383
+ const itemWidth = checkboxGroupConf == null ? void 0 : checkboxGroupConf.itemWidth.value;
384
+ const direction = checkboxGroupConf == null ? void 0 : checkboxGroupConf.direction.value;
385
+ const canChange = (isChecked2, val) => {
386
+ var _a;
387
+ if (mergedDisabled.value) {
388
+ return Promise.resolve(false);
389
+ }
390
+ const beforeChange = (_a = props.beforeChange) != null ? _a : checkboxGroupConf == null ? void 0 : checkboxGroupConf.beforeChange;
391
+ if (beforeChange) {
392
+ const res = beforeChange(isChecked2, val);
393
+ if (typeof res === "boolean") {
394
+ return Promise.resolve(res);
395
+ }
396
+ return res;
397
+ }
398
+ return Promise.resolve(true);
399
+ };
400
+ const toggle = () => {
401
+ const current = !isChecked.value;
402
+ checkboxGroupConf == null ? void 0 : checkboxGroupConf.toggleGroupVal(props.value);
403
+ ctx.emit("update:checked", current);
404
+ ctx.emit("update:modelValue", current);
405
+ ctx.emit("change", current);
406
+ };
407
+ const handleClick = () => {
408
+ canChange(!isChecked.value, props.label).then((res) => res && toggle());
409
+ };
410
+ return {
411
+ itemWidth,
412
+ direction,
413
+ mergedColor,
414
+ mergedDisabled,
415
+ mergedIsShowTitle,
416
+ mergedChecked,
417
+ mergedShowAnimation,
418
+ handleClick
419
+ };
420
+ },
421
+ render() {
422
+ var _a;
73
423
  const {
74
- store
75
- } = toRefs(props);
76
- const columns = store.value.states._columns.value;
424
+ itemWidth,
425
+ direction,
426
+ mergedChecked,
427
+ mergedDisabled,
428
+ mergedIsShowTitle,
429
+ mergedShowAnimation,
430
+ halfchecked,
431
+ title,
432
+ label,
433
+ handleClick,
434
+ name,
435
+ value,
436
+ mergedColor,
437
+ $slots
438
+ } = this;
439
+ const wrapperCls = {
440
+ "devui-checkbox-column-margin": direction === "column",
441
+ "devui-checkbox-wrap": typeof itemWidth !== "undefined"
442
+ };
443
+ const wrapperStyle = itemWidth ? [`width: ${itemWidth}px`] : [];
444
+ const checkboxCls = {
445
+ "devui-checkbox": true,
446
+ active: mergedChecked,
447
+ halfchecked,
448
+ disabled: mergedDisabled,
449
+ unchecked: !mergedChecked
450
+ };
451
+ const labelTitle = mergedIsShowTitle ? title || label : "";
452
+ const bgImgStyle = mergedColor && halfchecked || mergedColor ? `linear-gradient(${mergedColor}, ${mergedColor})` : "";
453
+ const spanStyle = [`border-color:${(mergedChecked || halfchecked) && mergedColor ? mergedColor : ""}`, `background-image:${bgImgStyle}`, `background-color:${mergedColor && halfchecked ? mergedColor : ""}`];
454
+ const spanCls = {
455
+ "devui-checkbox-material": true,
456
+ "custom-color": mergedColor,
457
+ "devui-checkbox-no-label": !label && !$slots.default,
458
+ "devui-no-animation": !mergedShowAnimation,
459
+ "devui-checkbox-default-background": !halfchecked
460
+ };
461
+ const polygonCls = {
462
+ "devui-tick": true,
463
+ "devui-no-animation": !mergedShowAnimation
464
+ };
465
+ const stopPropagation = ($event) => $event.stopPropagation();
466
+ const inputProps = {
467
+ indeterminate: halfchecked
468
+ };
469
+ return createVNode("div", {
470
+ "class": wrapperCls,
471
+ "style": wrapperStyle
472
+ }, [createVNode("div", {
473
+ "class": checkboxCls
474
+ }, [createVNode("label", {
475
+ "title": labelTitle,
476
+ "onClick": handleClick
477
+ }, [createVNode("input", mergeProps({
478
+ "name": name || value,
479
+ "class": "devui-checkbox-input",
480
+ "type": "checkbox"
481
+ }, inputProps, {
482
+ "checked": mergedChecked,
483
+ "disabled": mergedDisabled,
484
+ "onClick": stopPropagation,
485
+ "onChange": stopPropagation
486
+ }), null), createVNode("span", {
487
+ "style": spanStyle,
488
+ "class": spanCls
489
+ }, [createVNode("span", {
490
+ "class": "devui-checkbox-halfchecked-bg"
491
+ }, null), createVNode("svg", {
492
+ "viewBox": "0 0 16 16",
493
+ "version": "1.1",
494
+ "xmlns": "http://www.w3.org/2000/svg",
495
+ "class": "devui-checkbox-tick"
496
+ }, [createVNode("g", {
497
+ "stroke": "none",
498
+ "stroke-width": "1",
499
+ "fill": "none",
500
+ "fill-rule": "evenodd"
501
+ }, [createVNode("polygon", {
502
+ "fill-rule": "nonzero",
503
+ "points": "5.17391304 6.56521739 7.7173913 9.10869565 11.826087 5 13 6.17391304 7.7173913 11.4565217 4 7.73913043",
504
+ "class": polygonCls
505
+ }, null)])])]), label || ((_a = $slots.default) == null ? void 0 : _a.call($slots))])])]);
506
+ }
507
+ });
508
+ var checkboxGroup = "";
509
+ var CheckboxGroup = defineComponent({
510
+ name: "DCheckboxGroup",
511
+ props: checkboxGroupProps,
512
+ emits: ["change", "update:modelValue"],
513
+ setup(props, ctx) {
514
+ const valList = toRef(props, "modelValue");
515
+ const defaultOpt = {
516
+ checked: false,
517
+ isShowTitle: true,
518
+ halfchecked: false,
519
+ showAnimation: true,
520
+ disabled: false
521
+ };
522
+ const toggleGroupVal = (val) => {
523
+ let index2 = -1;
524
+ if (typeof valList.value[0] === "string") {
525
+ index2 = valList.value.findIndex((item) => item === val);
526
+ } else if (typeof valList.value[0] === "object") {
527
+ index2 = valList.value.findIndex((item) => item.value === val);
528
+ }
529
+ if (index2 === -1) {
530
+ if (typeof props.options[0] === "object") {
531
+ const newOne = props.options.find((item) => item.value === val);
532
+ const res2 = [...valList.value, newOne];
533
+ ctx.emit("update:modelValue", res2);
534
+ ctx.emit("change", res2);
535
+ return;
536
+ }
537
+ const res = [...valList.value, val];
538
+ ctx.emit("update:modelValue", res);
539
+ ctx.emit("change", res);
540
+ return;
541
+ }
542
+ valList.value.splice(index2, 1);
543
+ ctx.emit("update:modelValue", valList.value);
544
+ ctx.emit("change", valList.value);
545
+ };
546
+ const isItemChecked = (itemVal) => {
547
+ if (typeof valList.value[0] === "string") {
548
+ return valList.value.includes(itemVal);
549
+ } else if (typeof valList.value[0] === "object") {
550
+ return valList.value.some((item) => item.value === itemVal);
551
+ }
552
+ };
553
+ provide(checkboxGroupInjectionKey, {
554
+ disabled: toRef(props, "disabled"),
555
+ isShowTitle: toRef(props, "isShowTitle"),
556
+ color: toRef(props, "color"),
557
+ showAnimation: toRef(props, "showAnimation"),
558
+ beforeChange: props.beforeChange,
559
+ isItemChecked,
560
+ toggleGroupVal,
561
+ itemWidth: toRef(props, "itemWidth"),
562
+ direction: toRef(props, "direction")
563
+ });
77
564
  return {
78
- columns
565
+ defaultOpt
79
566
  };
80
567
  },
81
568
  render() {
569
+ var _a;
82
570
  const {
83
- columns
571
+ direction,
572
+ $slots,
573
+ defaultOpt,
574
+ options
84
575
  } = this;
85
- return createVNode("thead", {
86
- "class": "devui-thead"
87
- }, [createVNode("tr", null, [columns.map((column, index2) => {
88
- return createVNode("th", {
89
- "key": index2
90
- }, [column.renderHeader()]);
91
- })])]);
576
+ let children = (_a = $slots.default) == null ? void 0 : _a.call($slots);
577
+ if ((options == null ? void 0 : options.length) > 0) {
578
+ children = options.map((opt) => {
579
+ let mergedOpt = null;
580
+ if (typeof opt === "string") {
581
+ mergedOpt = Object.assign({}, defaultOpt, {
582
+ label: opt,
583
+ value: opt
584
+ });
585
+ } else if (typeof opt === "object") {
586
+ mergedOpt = Object.assign({}, defaultOpt, __spreadProps(__spreadValues({}, opt), {
587
+ label: opt.name
588
+ }));
589
+ }
590
+ return createVNode(Checkbox, mergedOpt, null);
591
+ });
592
+ }
593
+ return createVNode("div", {
594
+ "class": "devui-checkbox-group"
595
+ }, [createVNode("div", {
596
+ "class": {
597
+ "devui-checkbox-list-inline": direction === "row"
598
+ }
599
+ }, [children])]);
92
600
  }
93
601
  });
94
- const TableBodyProps = {
95
- store: {
96
- type: Object,
97
- default: {}
602
+ Checkbox.install = function(app) {
603
+ app.component(Checkbox.name, Checkbox);
604
+ };
605
+ CheckboxGroup.install = function(app) {
606
+ app.component(CheckboxGroup.name, CheckboxGroup);
607
+ };
608
+ var sort = "";
609
+ const Sort = defineComponent({
610
+ props: {
611
+ modelValue: {
612
+ type: String,
613
+ default: ""
614
+ },
615
+ "onUpdate:modelValue": {
616
+ type: Function
617
+ }
618
+ },
619
+ emits: ["update:modelValue"],
620
+ setup(props, ctx) {
621
+ const changeDirection = () => {
622
+ let direction = "";
623
+ if (props.modelValue === "ASC") {
624
+ direction = "DESC";
625
+ } else if (props.modelValue === "DESC") {
626
+ direction = "";
627
+ } else {
628
+ direction = "ASC";
629
+ }
630
+ ctx.emit("update:modelValue", direction);
631
+ };
632
+ return () => createVNode("span", {
633
+ "onClick": changeDirection,
634
+ "class": "sort-clickable"
635
+ }, [createVNode("i", {
636
+ "class": ["datatable-svg", {
637
+ "sort-icon-default": !props.modelValue,
638
+ "sort-icon-asc": props.modelValue === "ASC",
639
+ "sort-icon-desc": props.modelValue === "DESC"
640
+ }]
641
+ }, [createVNode("svg", {
642
+ "width": "16px",
643
+ "height": "16px",
644
+ "viewBox": "0 0 16 16",
645
+ "version": "1.1",
646
+ "xmlns": "http://www.w3.org/2000/svg",
647
+ "xmlns:xlink": "http://www.w3.org/1999/xlink"
648
+ }, [createVNode("defs", null, [createVNode("circle", {
649
+ "id": "sort-svg-path-1",
650
+ "cx": "8",
651
+ "cy": "8",
652
+ "r": "8"
653
+ }, null), createVNode("filter", {
654
+ "x": "-34.4%",
655
+ "y": "-21.9%",
656
+ "width": "168.8%",
657
+ "height": "168.8%",
658
+ "filterUnits": "objectBoundingBox",
659
+ "id": "filter-2"
660
+ }, [createVNode("feOffset", {
661
+ "dx": "0",
662
+ "dy": "2",
663
+ "in": "SourceAlpha",
664
+ "result": "shadowOffsetOuter1"
665
+ }, null), createVNode("feGaussianBlur", {
666
+ "stdDeviation": "1.5",
667
+ "in": "shadowOffsetOuter1",
668
+ "result": "shadowBlurOuter1"
669
+ }, null), createVNode("feColorMatrix", {
670
+ "values": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.085309222 0",
671
+ "type": "matrix",
672
+ "in": "shadowBlurOuter1"
673
+ }, null)])]), createVNode("g", {
674
+ "stroke": "none",
675
+ "stroke-width": "1",
676
+ "fill": "none",
677
+ "fill-rule": "evenodd"
678
+ }, [createVNode("use", {
679
+ "fill-rule": "evenodd",
680
+ "xlink:href": "#sort-svg-path-1"
681
+ }, null), createVNode("polygon", {
682
+ "points": "8 4 11 7 5 7"
683
+ }, null), createVNode("polygon", {
684
+ "points": "8 12 5 9 11 9"
685
+ }, null)])])])]);
686
+ }
687
+ });
688
+ const dropdownProps = {
689
+ origin: {
690
+ type: Object
691
+ },
692
+ isOpen: {
693
+ type: Boolean,
694
+ default: false
695
+ },
696
+ disabled: {
697
+ type: Boolean,
698
+ default: false
699
+ },
700
+ trigger: {
701
+ type: String,
702
+ default: "click"
703
+ },
704
+ closeScope: {
705
+ type: String,
706
+ default: "all"
707
+ },
708
+ closeOnMouseLeaveMenu: {
709
+ type: Boolean,
710
+ default: false
711
+ },
712
+ showAnimation: {
713
+ type: Boolean,
714
+ default: true
715
+ },
716
+ width: {
717
+ type: [Number, String],
718
+ default: "102px"
719
+ }
720
+ };
721
+ function isComponent(target) {
722
+ return !!(target == null ? void 0 : target.$el);
723
+ }
724
+ function getElement(element) {
725
+ if (element instanceof Element) {
726
+ return element;
727
+ }
728
+ if (element && typeof element === "object" && element.$el instanceof Element) {
729
+ return element.$el;
730
+ }
731
+ return null;
732
+ }
733
+ function subscribeEvent(dom, type, callback) {
734
+ dom == null ? void 0 : dom.addEventListener(type, callback);
735
+ return () => {
736
+ dom == null ? void 0 : dom.removeEventListener(type, callback);
737
+ };
738
+ }
739
+ const useDropdown = ({
740
+ visible,
741
+ trigger,
742
+ origin,
743
+ closeScope,
744
+ closeOnMouseLeaveMenu
745
+ }) => {
746
+ const dropdownElRef = ref();
747
+ const closeByScope = () => {
748
+ if (closeScope.value === "none") {
749
+ return;
750
+ }
751
+ visible.value = false;
752
+ };
753
+ watch([trigger, origin, dropdownElRef], ([trigger2, origin2, dropdownEl], ov, onInvalidate) => {
754
+ const originEl = getElement(origin2);
755
+ if (!originEl || !dropdownEl) {
756
+ return;
757
+ }
758
+ const subscriptions = [
759
+ subscribeEvent(dropdownEl, "click", () => {
760
+ if (closeScope.value === "all") {
761
+ visible.value = false;
762
+ }
763
+ })
764
+ ];
765
+ if (trigger2 === "click") {
766
+ subscriptions.push(subscribeEvent(originEl, "click", () => visible.value = !visible.value), subscribeEvent(document, "click", (e) => {
767
+ if (!visible.value) {
768
+ return;
769
+ }
770
+ const target = e.target;
771
+ const isContain = originEl.contains(target) || dropdownEl.contains(target);
772
+ if (isContain) {
773
+ return;
774
+ }
775
+ closeByScope();
776
+ }), subscribeEvent(dropdownEl, "mouseleave", () => {
777
+ if (closeOnMouseLeaveMenu.value) {
778
+ visible.value = false;
779
+ }
780
+ }));
781
+ } else if (trigger2 === "hover") {
782
+ let overlayEnter = false;
783
+ let originEnter = false;
784
+ const handleLeave = async (elementType) => {
785
+ await new Promise((resolve) => setTimeout(resolve, 50));
786
+ if (elementType === "origin" && overlayEnter || elementType === "dropdown" && originEnter) {
787
+ return;
788
+ }
789
+ closeByScope();
790
+ };
791
+ subscriptions.push(subscribeEvent(originEl, "mouseenter", () => {
792
+ originEnter = true;
793
+ visible.value = true;
794
+ }), subscribeEvent(originEl, "mouseleave", () => {
795
+ originEnter = false;
796
+ if (!closeOnMouseLeaveMenu.value) {
797
+ handleLeave("origin");
798
+ }
799
+ }), subscribeEvent(dropdownEl, "mouseenter", () => {
800
+ overlayEnter = true;
801
+ visible.value = true;
802
+ }), subscribeEvent(dropdownEl, "mouseleave", () => {
803
+ overlayEnter = false;
804
+ handleLeave("dropdown");
805
+ }));
806
+ }
807
+ onInvalidate(() => subscriptions.forEach((v) => v()));
808
+ });
809
+ return { dropdownEl: dropdownElRef };
810
+ };
811
+ var overlay = "";
812
+ function _isSlot(s) {
813
+ return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
814
+ }
815
+ const CommonOverlay = defineComponent({
816
+ setup(props, ctx) {
817
+ return () => {
818
+ let _slot;
819
+ return createVNode(Teleport, {
820
+ "to": "#d-overlay-anchor"
821
+ }, {
822
+ default: () => [createVNode(Transition, {
823
+ "name": "devui-overlay-fade"
824
+ }, _isSlot(_slot = renderSlot(ctx.slots, "default")) ? _slot : {
825
+ default: () => [_slot]
826
+ })]
827
+ });
828
+ };
829
+ }
830
+ });
831
+ const overlayProps = {
832
+ visible: {
833
+ type: Boolean
834
+ },
835
+ backgroundBlock: {
836
+ type: Boolean,
837
+ default: false
838
+ },
839
+ backgroundClass: {
840
+ type: String,
841
+ default: ""
842
+ },
843
+ backgroundStyle: {
844
+ type: [String, Object]
845
+ },
846
+ onBackdropClick: {
847
+ type: Function
848
+ },
849
+ backdropClose: {
850
+ type: Boolean,
851
+ default: true
852
+ },
853
+ hasBackdrop: {
854
+ type: Boolean,
855
+ default: true
98
856
  }
99
857
  };
100
- function useTableBody(props) {
101
- const storeData = props.store.states;
102
- const rowColumns = computed(() => {
103
- return storeData._data.value.map((row) => {
104
- const obj = Object.assign({}, row);
105
- obj.columns = storeData._columns.value;
106
- return obj;
858
+ const overlayEmits = ["update:visible", "backdropClick"];
859
+ const fixedOverlayProps = __spreadProps(__spreadValues({}, overlayProps), {
860
+ overlayStyle: {
861
+ type: [String, Object],
862
+ default: void 0
863
+ }
864
+ });
865
+ const flexibleOverlayProps = __spreadValues({
866
+ origin: {
867
+ type: Object,
868
+ require: true
869
+ },
870
+ position: {
871
+ type: Object,
872
+ default: () => ({
873
+ originX: "left",
874
+ originY: "top",
875
+ overlayX: "left",
876
+ overlayY: "top"
877
+ })
878
+ }
879
+ }, overlayProps);
880
+ function useOverlayLogic(props, ctx) {
881
+ const backgroundClass = computed(() => {
882
+ return [
883
+ "devui-overlay-background",
884
+ props.backgroundClass,
885
+ !props.hasBackdrop ? "devui-overlay-background__disabled" : "devui-overlay-background__color"
886
+ ];
887
+ });
888
+ const overlayClass = computed(() => {
889
+ return "devui-overlay";
890
+ });
891
+ const handleBackdropClick = (event) => {
892
+ var _a;
893
+ event.preventDefault();
894
+ (_a = props.onBackdropClick) == null ? void 0 : _a.call(props);
895
+ if (props.backdropClose) {
896
+ ctx.emit("update:visible", false);
897
+ }
898
+ };
899
+ const handleOverlayBubbleCancel = (event) => event.cancelBubble = true;
900
+ onMounted(() => {
901
+ const body2 = document.body;
902
+ const originOverflow = body2.style.overflow;
903
+ const originPosition = body2.style.position;
904
+ watch([() => props.visible, () => props.backgroundBlock], ([visible, backgroundBlock]) => {
905
+ if (backgroundBlock) {
906
+ const top = body2.getBoundingClientRect().y;
907
+ if (visible) {
908
+ body2.style.overflowY = "scroll";
909
+ body2.style.position = visible ? "fixed" : "";
910
+ body2.style.top = `${top}px`;
911
+ } else {
912
+ body2.style.overflowY = originOverflow;
913
+ body2.style.position = originPosition;
914
+ body2.style.top = "";
915
+ window.scrollTo(0, -top);
916
+ }
917
+ }
918
+ });
919
+ onUnmounted(() => {
920
+ document.body.style.overflow = originOverflow;
107
921
  });
108
922
  });
109
- return { rowColumns };
923
+ return {
924
+ backgroundClass,
925
+ overlayClass,
926
+ handleBackdropClick,
927
+ handleOverlayBubbleCancel
928
+ };
110
929
  }
111
- var body = "";
112
- var TableBody = defineComponent({
113
- name: "DTableBody",
114
- props: TableBodyProps,
930
+ const FixedOverlay = defineComponent({
931
+ name: "DFixedOverlay",
932
+ props: fixedOverlayProps,
933
+ emits: overlayEmits,
934
+ setup(props, ctx) {
935
+ const {
936
+ backgroundClass,
937
+ overlayClass,
938
+ handleBackdropClick,
939
+ handleOverlayBubbleCancel
940
+ } = useOverlayLogic(props, ctx);
941
+ return () => createVNode(CommonOverlay, null, {
942
+ default: () => [withDirectives(createVNode("div", {
943
+ "class": backgroundClass.value,
944
+ "style": props.backgroundStyle,
945
+ "onClick": handleBackdropClick
946
+ }, [createVNode("div", {
947
+ "class": overlayClass.value,
948
+ "style": props.overlayStyle,
949
+ "onClick": handleOverlayBubbleCancel
950
+ }, [renderSlot(ctx.slots, "default")])]), [[vShow, props.visible]])]
951
+ });
952
+ }
953
+ });
954
+ const FlexibleOverlay = defineComponent({
955
+ name: "DFlexibleOverlay",
956
+ props: flexibleOverlayProps,
957
+ emits: overlayEmits,
958
+ setup(props, ctx) {
959
+ const overlayRef = ref(null);
960
+ const positionedStyle = reactive({
961
+ position: "absolute"
962
+ });
963
+ onMounted(async () => {
964
+ const handleRectChange = (position, rect, origin) => {
965
+ const point = calculatePosition(position, rect, origin);
966
+ positionedStyle.left = `${point.x}px`;
967
+ positionedStyle.top = `${point.y}px`;
968
+ };
969
+ const locationElements = computed(() => {
970
+ const overlay2 = overlayRef.value;
971
+ const origin = getOrigin(props.origin);
972
+ if (!overlay2 || !origin) {
973
+ return;
974
+ }
975
+ return {
976
+ origin,
977
+ overlay: overlay2
978
+ };
979
+ });
980
+ const visibleRef = toRef(props, "visible");
981
+ const positionRef = toRef(props, "position");
982
+ watch([locationElements, visibleRef, positionRef], async ([locationElements2, visible, position], ov, onInvalidate) => {
983
+ if (!visible || !locationElements2) {
984
+ return;
985
+ }
986
+ const {
987
+ origin,
988
+ overlay: overlay2
989
+ } = locationElements2;
990
+ handleRectChange(position, overlay2.getBoundingClientRect(), origin);
991
+ const unsubscriptions = [subscribeLayoutEvent(() => handleRectChange(position, overlay2.getBoundingClientRect(), origin)), subscribeOverlayResize(overlay2, (entries) => handleRectChange(position, entries[0].contentRect, origin)), subscribeOriginResize(origin, () => handleRectChange(position, overlay2.getBoundingClientRect(), origin))];
992
+ onInvalidate(() => {
993
+ unsubscriptions.forEach((fn) => fn());
994
+ });
995
+ });
996
+ });
997
+ const {
998
+ backgroundClass,
999
+ overlayClass,
1000
+ handleBackdropClick,
1001
+ handleOverlayBubbleCancel
1002
+ } = useOverlayLogic(props, ctx);
1003
+ return () => createVNode(CommonOverlay, null, {
1004
+ default: () => [withDirectives(createVNode("div", {
1005
+ "style": props.backgroundStyle,
1006
+ "class": backgroundClass.value,
1007
+ "onClick": handleBackdropClick
1008
+ }, [createVNode("div", {
1009
+ "ref": overlayRef,
1010
+ "class": overlayClass.value,
1011
+ "style": positionedStyle,
1012
+ "onClick": handleOverlayBubbleCancel
1013
+ }, [renderSlot(ctx.slots, "default")])]), [[vShow, props.visible]])]
1014
+ });
1015
+ }
1016
+ });
1017
+ function getOrigin(origin) {
1018
+ if (origin instanceof Element) {
1019
+ return origin;
1020
+ }
1021
+ if (isRef(origin)) {
1022
+ return getElement(origin.value);
1023
+ }
1024
+ if (isComponent(origin)) {
1025
+ return getElement(origin);
1026
+ }
1027
+ return origin;
1028
+ }
1029
+ function calculatePosition(position, rect, origin) {
1030
+ const originRect = getOriginRect(origin);
1031
+ const originPoint = getOriginRelativePoint(originRect, position);
1032
+ return getOverlayPoint(originPoint, rect, position);
1033
+ }
1034
+ function getOriginRect(origin) {
1035
+ if (origin instanceof Element) {
1036
+ return origin.getBoundingClientRect();
1037
+ }
1038
+ const width = origin.width || 0;
1039
+ const height = origin.height || 0;
1040
+ return {
1041
+ top: origin.y,
1042
+ bottom: origin.y + height,
1043
+ left: origin.x,
1044
+ right: origin.x + width,
1045
+ height,
1046
+ width
1047
+ };
1048
+ }
1049
+ function getOverlayPoint(originPoint, rect, position) {
1050
+ let x;
1051
+ const {
1052
+ width,
1053
+ height
1054
+ } = rect;
1055
+ if (position.overlayX == "center") {
1056
+ x = originPoint.x - width / 2;
1057
+ } else {
1058
+ x = position.overlayX == "left" ? originPoint.x : originPoint.x - width;
1059
+ }
1060
+ let y;
1061
+ if (position.overlayY == "center") {
1062
+ y = originPoint.y - height / 2;
1063
+ } else {
1064
+ y = position.overlayY == "top" ? originPoint.y : originPoint.y - height;
1065
+ }
1066
+ return {
1067
+ x,
1068
+ y
1069
+ };
1070
+ }
1071
+ function getOriginRelativePoint(originRect, position) {
1072
+ let x;
1073
+ if (position.originX == "center") {
1074
+ x = originRect.left + originRect.width / 2;
1075
+ } else {
1076
+ const startX = originRect.left;
1077
+ const endX = originRect.right;
1078
+ x = position.originX == "left" ? startX : endX;
1079
+ }
1080
+ let y;
1081
+ if (position.originY == "center") {
1082
+ y = originRect.top + originRect.height / 2;
1083
+ } else {
1084
+ y = position.originY == "top" ? originRect.top : originRect.bottom;
1085
+ }
1086
+ return {
1087
+ x,
1088
+ y
1089
+ };
1090
+ }
1091
+ function subscribeLayoutEvent(event) {
1092
+ window.addEventListener("scroll", event, true);
1093
+ window.addEventListener("resize", event);
1094
+ window.addEventListener("orientationchange", event);
1095
+ return () => {
1096
+ window.removeEventListener("scroll", event, true);
1097
+ window.removeEventListener("resize", event);
1098
+ window.removeEventListener("orientationchange", event);
1099
+ };
1100
+ }
1101
+ function subscribeOverlayResize(overlay2, callback) {
1102
+ if (overlay2 instanceof Element) {
1103
+ const resizeObserver = new ResizeObserver(callback);
1104
+ resizeObserver.observe(overlay2);
1105
+ return () => resizeObserver.disconnect();
1106
+ }
1107
+ return () => {
1108
+ };
1109
+ }
1110
+ function subscribeOriginResize(origin, callback) {
1111
+ if (origin instanceof Element) {
1112
+ const observer = new MutationObserver(callback);
1113
+ observer.observe(origin, {
1114
+ attributeFilter: ["style"]
1115
+ });
1116
+ return () => observer.disconnect();
1117
+ }
1118
+ return () => {
1119
+ };
1120
+ }
1121
+ FlexibleOverlay.install = function(app) {
1122
+ app.component(FlexibleOverlay.name, FlexibleOverlay);
1123
+ };
1124
+ FixedOverlay.install = function(app) {
1125
+ app.component(FixedOverlay.name, FixedOverlay);
1126
+ };
1127
+ var dropdown = "";
1128
+ var Dropdown = defineComponent({
1129
+ name: "DDropdown",
1130
+ props: dropdownProps,
1131
+ emits: [],
1132
+ setup(props, ctx) {
1133
+ const {
1134
+ isOpen,
1135
+ origin,
1136
+ trigger,
1137
+ closeScope,
1138
+ closeOnMouseLeaveMenu
1139
+ } = toRefs(props);
1140
+ const visible = ref(false);
1141
+ watch(isOpen, (value) => {
1142
+ visible.value = value;
1143
+ }, {
1144
+ immediate: true
1145
+ });
1146
+ const position = {
1147
+ originX: "center",
1148
+ originY: "bottom",
1149
+ overlayX: "center",
1150
+ overlayY: "top"
1151
+ };
1152
+ const {
1153
+ dropdownEl
1154
+ } = useDropdown({
1155
+ visible,
1156
+ origin,
1157
+ trigger,
1158
+ closeScope,
1159
+ closeOnMouseLeaveMenu
1160
+ });
1161
+ const animatedVisible = computed(() => {
1162
+ return props.showAnimation ? visible.value : true;
1163
+ });
1164
+ const wrapStyle = computed(() => typeof props.width === "string" ? {
1165
+ width: props.width
1166
+ } : {
1167
+ width: `${props.width}px`
1168
+ });
1169
+ return () => createVNode(FlexibleOverlay, {
1170
+ "origin": props.origin,
1171
+ "visible": visible.value,
1172
+ "onUpdate:visible": ($event) => visible.value = $event,
1173
+ "position": position,
1174
+ "hasBackdrop": false
1175
+ }, {
1176
+ default: () => [createVNode(Transition, {
1177
+ "name": "devui-dropdown-fade"
1178
+ }, {
1179
+ default: () => {
1180
+ var _a, _b;
1181
+ return [withDirectives(createVNode("div", {
1182
+ "ref": dropdownEl,
1183
+ "class": "devui-dropdown-menu-wrap",
1184
+ "style": wrapStyle.value
1185
+ }, [(_b = (_a = ctx.slots).default) == null ? void 0 : _b.call(_a)]), [[vShow, animatedVisible.value]])];
1186
+ }
1187
+ })]
1188
+ });
1189
+ }
1190
+ });
1191
+ Dropdown.install = function(app) {
1192
+ app.component(Dropdown.name, Dropdown);
1193
+ };
1194
+ var filter = "";
1195
+ const Filter = defineComponent({
1196
+ props: {
1197
+ modelValue: {
1198
+ type: Array,
1199
+ default: []
1200
+ },
1201
+ "onUpdate:modelValue": {
1202
+ type: Function
1203
+ },
1204
+ customTemplate: {
1205
+ type: Function
1206
+ },
1207
+ filterList: {
1208
+ type: Array,
1209
+ required: true
1210
+ },
1211
+ filterMultiple: {
1212
+ type: Boolean,
1213
+ default: true
1214
+ }
1215
+ },
1216
+ emits: ["update:modelValue"],
115
1217
  setup(props) {
1218
+ const filterOrigin = ref(null);
1219
+ const onUpdateChecked = (config, value) => {
1220
+ const checkedList = props.modelValue;
1221
+ const update = props["onUpdate:modelValue"];
1222
+ const contained = !!checkedList.find((item) => item === config.value);
1223
+ if (value && !contained) {
1224
+ update == null ? void 0 : update([...checkedList, config.value]);
1225
+ } else if (!value && contained) {
1226
+ update == null ? void 0 : update(checkedList.filter((item) => config.value !== item));
1227
+ }
1228
+ };
1229
+ const updateSingleChecked = (config) => {
1230
+ var _a;
1231
+ (_a = props["onUpdate:modelValue"]) == null ? void 0 : _a.call(props, [config.value]);
1232
+ };
1233
+ const dropdownContent = computed(() => {
1234
+ const checkedList = props.modelValue;
1235
+ const isContained = (config) => !!checkedList.find((item) => item === config.value);
1236
+ return () => createVNode("ul", {
1237
+ "class": "devui-dropdown-menu data-table-column-filter-content",
1238
+ "style": "padding:10px"
1239
+ }, [props.filterList.map((item, index2) => {
1240
+ return createVNode("li", {
1241
+ "style": index2 > 0 ? "margin-top:10px" : ""
1242
+ }, [props.filterMultiple ? createVNode(Checkbox, {
1243
+ "modelValue": isContained(item),
1244
+ "onUpdate:modelValue": (value) => onUpdateChecked(item, value)
1245
+ }, {
1246
+ default: () => [item.name]
1247
+ }) : createVNode("span", {
1248
+ "onClick": () => updateSingleChecked(item)
1249
+ }, [item.name])]);
1250
+ })]);
1251
+ });
1252
+ return () => createVNode(Fragment, null, [createVNode("span", {
1253
+ "ref": filterOrigin
1254
+ }, [createVNode("i", {
1255
+ "class": ["filter-icon", {
1256
+ "filter-icon-active": true
1257
+ }]
1258
+ }, [createVNode("svg", {
1259
+ "width": "16px",
1260
+ "height": "16px",
1261
+ "viewBox": "0 0 16 16",
1262
+ "version": "1.1",
1263
+ "xmlns": "http://www.w3.org/2000/svg",
1264
+ "xmlns:xlink": "http://www.w3.org/1999/xlink"
1265
+ }, [createVNode("g", {
1266
+ "stroke": "none",
1267
+ "stroke-width": "1",
1268
+ "fill": "none",
1269
+ "fill-rule": "evenodd"
1270
+ }, [createVNode("g", null, [createVNode("polygon", {
1271
+ "points": "10.0085775 7 10.0085775 15 6 13 6 7 2 3 2 1 14 1 14 3"
1272
+ }, null)])])])])]), createVNode(Dropdown, {
1273
+ "origin": filterOrigin.value,
1274
+ "closeScope": "blank"
1275
+ }, {
1276
+ default: () => {
1277
+ var _a, _b;
1278
+ return [(_b = (_a = props.customTemplate) == null ? void 0 : _a.call(props, {
1279
+ value: props.modelValue,
1280
+ onChange: props["onUpdate:modelValue"]
1281
+ })) != null ? _b : dropdownContent.value()];
1282
+ }
1283
+ })]);
1284
+ }
1285
+ });
1286
+ var header = "";
1287
+ var body = "";
1288
+ const useSort = (store, column) => {
1289
+ const directionRef = ref("DESC");
1290
+ watch([directionRef, column], ([direction, column2]) => {
1291
+ if (column2.sortable) {
1292
+ store.sortData(column2.field, direction, column2.compareFn);
1293
+ }
1294
+ }, { immediate: true });
1295
+ return directionRef;
1296
+ };
1297
+ const useFliter = (store, column) => {
1298
+ const filteredRef = shallowRef();
1299
+ watch(filteredRef, (results) => {
1300
+ store.filterData(column.value.field, results);
1301
+ });
1302
+ return filteredRef;
1303
+ };
1304
+ var TableHeader = defineComponent({
1305
+ name: "DTableHeader",
1306
+ setup() {
1307
+ const table2 = inject(TABLE_TOKEN);
116
1308
  const {
117
- rowColumns
118
- } = useTableBody(props);
119
- return {
120
- rowColumns
1309
+ _checkAll: checkAll,
1310
+ _halfChecked: halfChecked,
1311
+ _columns: columns,
1312
+ isFixedLeft
1313
+ } = table2.store.states;
1314
+ const thAttrs = computed(() => isFixedLeft.value ? {
1315
+ class: "devui-sticky-cell left",
1316
+ style: "left:0;"
1317
+ } : null);
1318
+ const checkbox2 = computed(() => table2.props.checkable ? createVNode("th", thAttrs.value, [createVNode(Checkbox, {
1319
+ "style": "padding:10px;",
1320
+ "modelValue": checkAll.value,
1321
+ "onUpdate:modelValue": ($event) => checkAll.value = $event,
1322
+ "halfchecked": halfChecked.value
1323
+ }, null)]) : null);
1324
+ return () => {
1325
+ return createVNode("thead", {
1326
+ "class": "devui-thead"
1327
+ }, [createVNode("tr", null, [checkbox2.value, columns.value.map((column, index2) => createVNode(Th, {
1328
+ "key": index2,
1329
+ "column": column
1330
+ }, null))])]);
121
1331
  };
1332
+ }
1333
+ });
1334
+ const Th = defineComponent({
1335
+ props: {
1336
+ column: {
1337
+ type: Object,
1338
+ required: true
1339
+ }
122
1340
  },
123
- render() {
1341
+ setup(props) {
1342
+ const table2 = inject(TABLE_TOKEN);
124
1343
  const {
125
- rowColumns
126
- } = this;
127
- return createVNode("tbody", {
1344
+ column
1345
+ } = toRefs(props);
1346
+ const directionRef = useSort(table2.store, column);
1347
+ const filteredRef = useFliter(table2.store, column);
1348
+ const {
1349
+ stickyCell,
1350
+ offsetStyle
1351
+ } = useFixedColumn(column);
1352
+ return () => createVNode("th", {
1353
+ "class": stickyCell.value,
1354
+ "style": offsetStyle.value
1355
+ }, [createVNode("div", {
1356
+ "class": "header-container"
1357
+ }, [props.column.renderHeader(), props.column.filterable && createVNode(Filter, {
1358
+ "modelValue": filteredRef.value,
1359
+ "onUpdate:modelValue": ($event) => filteredRef.value = $event,
1360
+ "filterList": props.column.filterList,
1361
+ "customTemplate": props.column.customFilterTemplate
1362
+ }, null)]), props.column.sortable && createVNode(Sort, {
1363
+ "modelValue": directionRef.value,
1364
+ "onUpdate:modelValue": ($event) => directionRef.value = $event
1365
+ }, null)]);
1366
+ }
1367
+ });
1368
+ var TableBody = defineComponent({
1369
+ name: "DTableBody",
1370
+ setup() {
1371
+ const table2 = inject(TABLE_TOKEN);
1372
+ const {
1373
+ _data: data,
1374
+ _columns: columns,
1375
+ _checkList: checkList,
1376
+ isFixedLeft
1377
+ } = table2.store.states;
1378
+ const hoverEnabled = computed(() => table2.props.rowHoveredHighlight);
1379
+ const tdAttrs = computed(() => isFixedLeft.value ? {
1380
+ class: "devui-sticky-cell left",
1381
+ style: "left:0;"
1382
+ } : null);
1383
+ const renderCheckbox = (index2) => table2.props.checkable ? createVNode("td", tdAttrs.value, [createVNode(Checkbox, {
1384
+ "modelValue": checkList.value[index2],
1385
+ "onUpdate:modelValue": ($event) => checkList.value[index2] = $event
1386
+ }, null)]) : null;
1387
+ return () => createVNode("tbody", {
128
1388
  "class": "devui-tbody"
129
- }, [rowColumns.map((row, rowIndex) => {
1389
+ }, [data.value.map((row, rowIndex) => {
130
1390
  return createVNode("tr", {
131
- "key": rowIndex
132
- }, [row.columns.map((column, index2) => {
133
- return createVNode("td", {
134
- "key": index2
135
- }, [column.renderCell({
136
- row,
137
- column,
138
- $index: index2
139
- })]);
140
- })]);
1391
+ "key": rowIndex,
1392
+ "class": {
1393
+ "hover-enabled": hoverEnabled.value
1394
+ }
1395
+ }, [renderCheckbox(rowIndex), columns.value.map((column, index2) => createVNode(TD, {
1396
+ "column": column,
1397
+ "index": index2,
1398
+ "row": row
1399
+ }, null))]);
141
1400
  })]);
142
1401
  }
143
1402
  });
1403
+ const TD = defineComponent({
1404
+ props: {
1405
+ column: {
1406
+ type: Object
1407
+ },
1408
+ row: {
1409
+ type: Object
1410
+ },
1411
+ index: {
1412
+ type: Number
1413
+ }
1414
+ },
1415
+ setup(props) {
1416
+ const column = toRef(props, "column");
1417
+ const {
1418
+ stickyCell,
1419
+ offsetStyle
1420
+ } = useFixedColumn(column);
1421
+ return () => createVNode("td", {
1422
+ "class": stickyCell.value,
1423
+ "style": offsetStyle.value
1424
+ }, [column.value.renderCell(props.row, props.index)]);
1425
+ }
1426
+ });
144
1427
  var table = "";
145
1428
  var Table = defineComponent({
146
1429
  name: "DTable",
147
1430
  props: TableProps,
148
- setup(props) {
1431
+ setup(props, ctx) {
149
1432
  const table2 = getCurrentInstance();
150
- const store = createStore(props);
1433
+ const store = createStore(toRef(props, "data"));
151
1434
  table2.store = store;
152
- const {
153
- classes
154
- } = useTable(props);
155
- provide("table", table2);
156
- return {
157
- classes,
158
- store
159
- };
160
- },
161
- render() {
1435
+ provide(TABLE_TOKEN, table2);
162
1436
  const {
163
1437
  classes,
164
- data,
165
- store,
166
- $slots
167
- } = this;
168
- return createVNode("div", {
169
- "class": "devui-table-wrapper"
170
- }, [$slots.default(), createVNode("table", {
171
- "class": classes,
172
- "cellpadding": "0",
173
- "cellspacing": "0"
174
- }, [createVNode(ColGroup, null, null), createVNode(TableHeader, {
175
- "store": store
176
- }, null), !!data.length && createVNode(TableBody, {
177
- "store": store
178
- }, null)]), !data.length && createVNode("div", {
1438
+ style
1439
+ } = useTable(props);
1440
+ const isEmpty2 = computed(() => props.data.length === 0);
1441
+ const fixHeaderCompo = computed(() => {
1442
+ return createVNode("div", {
1443
+ "class": "devui-table-view"
1444
+ }, [createVNode("div", {
1445
+ "style": "overflow: hidden scroll;"
1446
+ }, [createVNode("table", {
1447
+ "class": classes.value,
1448
+ "cellpadding": "0",
1449
+ "cellspacing": "0"
1450
+ }, [createVNode(ColGroup, null, null), createVNode(TableHeader, null, null)])]), createVNode("div", {
1451
+ "class": "scroll-view"
1452
+ }, [createVNode("table", {
1453
+ "class": classes.value,
1454
+ "cellpadding": "0",
1455
+ "cellspacing": "0"
1456
+ }, [createVNode(ColGroup, null, null), !isEmpty2.value && createVNode(TableBody, {
1457
+ "style": "flex: 1"
1458
+ }, null)])])]);
1459
+ });
1460
+ const normalHeaderCompo = computed(() => {
1461
+ return createVNode("table", {
1462
+ "class": classes.value,
1463
+ "cellpadding": "0",
1464
+ "cellspacing": "0"
1465
+ }, [createVNode(ColGroup, null, null), createVNode(TableHeader, {
1466
+ "style": "position: relative"
1467
+ }, null), !isEmpty2.value && createVNode(TableBody, null, null)]);
1468
+ });
1469
+ ctx.expose({
1470
+ getCheckedRows() {
1471
+ return store.getCheckedRows();
1472
+ }
1473
+ });
1474
+ return () => withDirectives(createVNode("div", {
1475
+ "class": "devui-table-wrapper",
1476
+ "style": style.value
1477
+ }, [ctx.slots.default(), props.fixHeader ? fixHeaderCompo.value : normalHeaderCompo.value, isEmpty2.value && createVNode("div", {
179
1478
  "class": "devui-table-empty"
180
- }, [createTextVNode("No Data")])]);
1479
+ }, [createTextVNode("No Data")])]), [[resolveDirective("dLoading"), props.showLoading]]);
181
1480
  }
182
1481
  });
183
1482
  const TableColumnProps = {
@@ -199,6 +1498,36 @@ const TableColumnProps = {
199
1498
  },
200
1499
  formatter: {
201
1500
  type: Function
1501
+ },
1502
+ order: {
1503
+ type: Number,
1504
+ default: 0
1505
+ },
1506
+ sortable: {
1507
+ type: Boolean,
1508
+ default: false
1509
+ },
1510
+ compareFn: {
1511
+ type: Function,
1512
+ default: (field, a, b) => a[field] < b[field]
1513
+ },
1514
+ filterable: {
1515
+ type: Boolean,
1516
+ default: false
1517
+ },
1518
+ filterMultiple: {
1519
+ type: Boolean,
1520
+ default: false
1521
+ },
1522
+ filterList: {
1523
+ type: Array,
1524
+ default: []
1525
+ },
1526
+ fixedLeft: {
1527
+ type: String
1528
+ },
1529
+ fixedRight: {
1530
+ type: String
202
1531
  }
203
1532
  };
204
1533
  function formatWidth(width) {
@@ -210,66 +1539,289 @@ function formatWidth(width) {
210
1539
  function formatMinWidth(minWidth) {
211
1540
  return formatWidth(minWidth) || 80;
212
1541
  }
213
- function useRender(props) {
214
- const formatedWidth = ref(formatWidth(props.width));
215
- const formatedMinWidth = ref(formatMinWidth(props.minWidth));
216
- const setColumnWidth = (column) => {
217
- column.width = formatedWidth.value;
218
- column.minWidth = formatedMinWidth.value;
1542
+ function createColumn(props, templates) {
1543
+ const {
1544
+ field,
1545
+ header: header2,
1546
+ sortable,
1547
+ width,
1548
+ minWidth,
1549
+ formatter,
1550
+ compareFn,
1551
+ filterable,
1552
+ filterList,
1553
+ filterMultiple,
1554
+ order,
1555
+ fixedLeft,
1556
+ fixedRight
1557
+ } = props;
1558
+ const column = reactive({});
1559
+ watch([field, header2, order], ([field2, header22, order2]) => {
1560
+ column.field = field2;
1561
+ column.header = header22;
1562
+ column.order = order2;
1563
+ }, { immediate: true });
1564
+ watch([sortable, compareFn], ([sortable2, compareFn2]) => {
1565
+ column.sortable = sortable2;
1566
+ column.compareFn = compareFn2;
1567
+ });
1568
+ watch([
1569
+ filterable,
1570
+ filterList,
1571
+ filterMultiple
1572
+ ], ([filterable2, filterList2, filterMultiple2]) => {
1573
+ column.filterable = filterable2;
1574
+ column.filterMultiple = filterMultiple2;
1575
+ column.filterList = filterList2;
1576
+ }, { immediate: true });
1577
+ watch([fixedLeft, fixedRight], ([left, right]) => {
1578
+ column.fixedLeft = left;
1579
+ column.fixedRight = right;
1580
+ }, { immediate: true });
1581
+ watch([width, minWidth], ([width2, minWidth2]) => {
1582
+ column.width = formatWidth(width2);
1583
+ column.minWidth = formatMinWidth(minWidth2);
219
1584
  column.realWidth = column.width || column.minWidth;
220
- return column;
221
- };
222
- const setColumnRender = (column) => {
223
- column.renderHeader = () => {
224
- return defaultRenderHeader(column);
225
- };
226
- column.renderCell = (data) => {
227
- return defaultRenderCell(data);
228
- };
229
- };
230
- return { setColumnWidth, setColumnRender };
1585
+ });
1586
+ onBeforeMount(() => {
1587
+ column.renderHeader = defaultRenderHeader;
1588
+ column.renderCell = defaultRenderCell;
1589
+ column.formatter = formatter.value;
1590
+ column.customFilterTemplate = templates.customFilterTemplate;
1591
+ column.subColumns = templates.subColumns;
1592
+ });
1593
+ return column;
231
1594
  }
232
- function defaultRenderHeader(column) {
233
- return column.header;
1595
+ function defaultRenderHeader() {
1596
+ return h("span", { class: "title" }, this.header);
234
1597
  }
235
- function defaultRenderCell({
236
- row,
237
- column,
238
- $index
239
- }) {
240
- var _a;
241
- const value = row[column.field];
242
- if (column.formatter) {
243
- return column.formatter(row, column, value, $index);
244
- }
245
- return ((_a = value == null ? void 0 : value.toString) == null ? void 0 : _a.call(value)) || "";
1598
+ function defaultRenderCell(rowData, index2) {
1599
+ var _a, _b;
1600
+ const value = rowData[this.field];
1601
+ if (this.formatter) {
1602
+ return this.formatter(rowData, value, index2);
1603
+ }
1604
+ return (_b = (_a = value == null ? void 0 : value.toString) == null ? void 0 : _a.call(value)) != null ? _b : "";
246
1605
  }
247
1606
  var Column = defineComponent({
248
1607
  name: "DColumn",
249
1608
  props: TableColumnProps,
250
- setup(props) {
251
- const column = {
252
- field: props.field,
253
- header: props.header
254
- };
255
- const parent = inject("table");
256
- const {
257
- setColumnWidth,
258
- setColumnRender
259
- } = useRender(props);
260
- onBeforeMount(() => {
261
- setColumnWidth(column);
262
- setColumnRender(column);
263
- });
1609
+ setup(props, ctx) {
1610
+ const column = createColumn(toRefs(props), ctx.slots);
1611
+ const parent = inject(TABLE_TOKEN);
264
1612
  onMounted(() => {
265
1613
  parent.store.insertColumn(column);
1614
+ watch(() => column.order, () => {
1615
+ parent.store.sortColumn();
1616
+ });
1617
+ });
1618
+ onBeforeUnmount(() => {
1619
+ parent.store.removeColumn(column);
266
1620
  });
267
1621
  },
268
1622
  render() {
269
1623
  return null;
270
1624
  }
271
1625
  });
1626
+ class View {
1627
+ constructor() {
1628
+ __publicField(this, "top", "50%");
1629
+ __publicField(this, "left", "50%");
1630
+ }
1631
+ }
1632
+ const componentProps = {
1633
+ message: String,
1634
+ backdrop: Boolean,
1635
+ view: {
1636
+ type: Object,
1637
+ default: () => new View()
1638
+ },
1639
+ zIndex: Number,
1640
+ isFull: {
1641
+ type: Boolean,
1642
+ default: false
1643
+ }
1644
+ };
1645
+ class LoadingProps {
1646
+ constructor() {
1647
+ __publicField(this, "target");
1648
+ __publicField(this, "message");
1649
+ __publicField(this, "loadingTemplateRef");
1650
+ __publicField(this, "backdrop", true);
1651
+ __publicField(this, "positionType", "relative");
1652
+ __publicField(this, "view", new View());
1653
+ __publicField(this, "zIndex");
1654
+ }
1655
+ }
1656
+ var loading = "";
1657
+ var Loading = defineComponent({
1658
+ name: "DLoading",
1659
+ inheritAttrs: false,
1660
+ props: componentProps,
1661
+ setup(props) {
1662
+ const style = {
1663
+ top: props.view.top,
1664
+ left: props.view.left,
1665
+ zIndex: props.zIndex
1666
+ };
1667
+ if (!props.message) {
1668
+ style.background = "none";
1669
+ }
1670
+ const isShow = ref(false);
1671
+ const open = () => {
1672
+ isShow.value = true;
1673
+ };
1674
+ const close = () => {
1675
+ isShow.value = false;
1676
+ };
1677
+ return {
1678
+ style,
1679
+ isShow,
1680
+ open,
1681
+ close
1682
+ };
1683
+ },
1684
+ render() {
1685
+ var _a;
1686
+ const {
1687
+ isShow,
1688
+ isFull,
1689
+ backdrop,
1690
+ style,
1691
+ message,
1692
+ $slots
1693
+ } = this;
1694
+ return isShow && createVNode("div", {
1695
+ "class": ["devui-loading-contanier", isFull ? "devui-loading--full" : ""]
1696
+ }, [((_a = $slots.default) == null ? void 0 : _a.call($slots)) || createVNode("div", {
1697
+ "class": "devui-loading-wrapper"
1698
+ }, [backdrop ? createVNode("div", {
1699
+ "class": "devui-loading-mask"
1700
+ }, null) : null, createVNode("div", {
1701
+ "style": style,
1702
+ "class": "devui-loading-area"
1703
+ }, [createVNode("div", {
1704
+ "class": "devui-busy-default-spinner"
1705
+ }, [createVNode("div", {
1706
+ "class": "devui-loading-bar1"
1707
+ }, null), createVNode("div", {
1708
+ "class": "devui-loading-bar2"
1709
+ }, null), createVNode("div", {
1710
+ "class": "devui-loading-bar3"
1711
+ }, null), createVNode("div", {
1712
+ "class": "devui-loading-bar4"
1713
+ }, null)]), message ? createVNode("span", {
1714
+ "class": "devui-loading-text"
1715
+ }, [message]) : null])])]);
1716
+ }
1717
+ });
1718
+ const COMPONENT_CONTAINER_SYMBOL = Symbol("dev_component_container");
1719
+ function createComponent(Component, props, children = null) {
1720
+ const vnode = h(Component, __spreadValues({}, props), children);
1721
+ const container = document.createElement("div");
1722
+ vnode[COMPONENT_CONTAINER_SYMBOL] = container;
1723
+ render(vnode, container);
1724
+ return vnode.component;
1725
+ }
1726
+ function unmountComponent(ComponnetInstance) {
1727
+ render(null, ComponnetInstance == null ? void 0 : ComponnetInstance.vnode[COMPONENT_CONTAINER_SYMBOL]);
1728
+ }
1729
+ const loadingConstructor = defineComponent(Loading);
1730
+ const cacheInstance = new WeakSet();
1731
+ const isEmpty = (val) => {
1732
+ if (!val)
1733
+ return true;
1734
+ if (Array.isArray(val))
1735
+ return val.length === 0;
1736
+ if (val instanceof Set || val instanceof Map)
1737
+ return val.size === 0;
1738
+ if (val instanceof Promise)
1739
+ return false;
1740
+ if (typeof val === "object") {
1741
+ try {
1742
+ return Object.keys(val).length === 0;
1743
+ } catch (e) {
1744
+ return false;
1745
+ }
1746
+ }
1747
+ return false;
1748
+ };
1749
+ const getType = (vari) => {
1750
+ return Object.prototype.toString.call(vari).slice(8, -1).toLowerCase();
1751
+ };
1752
+ const isPromise = (value) => {
1753
+ const type = getType(value);
1754
+ switch (type) {
1755
+ case "promise":
1756
+ return [value];
1757
+ case "array":
1758
+ if (value.some((val) => getType(val) !== "promise")) {
1759
+ console.error(new TypeError("Binding values should all be of type Promise"));
1760
+ return "error";
1761
+ }
1762
+ return value;
1763
+ default:
1764
+ return false;
1765
+ }
1766
+ };
1767
+ const unmount = (el) => {
1768
+ cacheInstance.delete(el);
1769
+ el.instance.proxy.close();
1770
+ unmountComponent(el.instance);
1771
+ };
1772
+ const toggleLoading = (el, binding) => {
1773
+ if (binding.value) {
1774
+ const vals = isPromise(binding.value);
1775
+ if (vals === "error")
1776
+ return;
1777
+ el.instance.proxy.open();
1778
+ el.appendChild(el.mask);
1779
+ cacheInstance.add(el);
1780
+ if (vals) {
1781
+ Promise.all(vals).catch((err) => {
1782
+ console.error(new Error("Promise handling errors"), err);
1783
+ }).finally(() => {
1784
+ unmount(el);
1785
+ });
1786
+ }
1787
+ } else {
1788
+ unmount(el);
1789
+ }
1790
+ };
1791
+ const removeAttribute = (el) => {
1792
+ el.removeAttribute("zindex");
1793
+ el.removeAttribute("positiontype");
1794
+ el.removeAttribute("backdrop");
1795
+ el.removeAttribute("message");
1796
+ el.removeAttribute("view");
1797
+ el.removeAttribute("loadingtemplateref");
1798
+ };
1799
+ const handleProps = (el, vprops) => {
1800
+ const props = __spreadValues(__spreadValues({}, new LoadingProps()), vprops);
1801
+ const loadingTemplateRef = props.loadingTemplateRef;
1802
+ const loadingInstance = createComponent(loadingConstructor, __spreadValues({}, props), loadingTemplateRef ? () => loadingTemplateRef : null);
1803
+ el.style.position = props.positionType;
1804
+ el.options = props;
1805
+ el.instance = loadingInstance;
1806
+ el.mask = loadingInstance.proxy.$el;
1807
+ };
1808
+ const loadingDirective = {
1809
+ mounted: function(el, binding, vnode) {
1810
+ handleProps(el, vnode.props);
1811
+ removeAttribute(el);
1812
+ !isEmpty(binding.value) && toggleLoading(el, binding);
1813
+ },
1814
+ updated: function(el, binding, vnode) {
1815
+ if (!isEmpty(binding.value) && cacheInstance.has(el) || isEmpty(binding.value) && !cacheInstance.has(el))
1816
+ return;
1817
+ !cacheInstance.has(el) && handleProps(el, vnode.props);
1818
+ removeAttribute(el);
1819
+ toggleLoading(el, binding);
1820
+ }
1821
+ };
1822
+ defineComponent(Loading);
272
1823
  Table.install = function(app) {
1824
+ app.directive("dLoading", loadingDirective);
273
1825
  app.component(Table.name, Table);
274
1826
  app.component(Column.name, Column);
275
1827
  };