misp-ui-library-test 0.0.1

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 (373) hide show
  1. package/README.md +113 -0
  2. package/dist/theme-chalk/alert/index.scss +152 -0
  3. package/dist/theme-chalk/avatar/index.scss +51 -0
  4. package/dist/theme-chalk/backtop/index.scss +38 -0
  5. package/dist/theme-chalk/badge/index.scss +63 -0
  6. package/dist/theme-chalk/breadcrumb/index.scss +36 -0
  7. package/dist/theme-chalk/breadcrumb-item/index.scss +36 -0
  8. package/dist/theme-chalk/button/index.scss +157 -0
  9. package/dist/theme-chalk/card/index.scss +38 -0
  10. package/dist/theme-chalk/chart/index.scss +21 -0
  11. package/dist/theme-chalk/checkbox/index.scss +358 -0
  12. package/dist/theme-chalk/col/index.scss +131 -0
  13. package/dist/theme-chalk/container/index.scss +40 -0
  14. package/dist/theme-chalk/css/alert.css +484 -0
  15. package/dist/theme-chalk/css/avatar.css +409 -0
  16. package/dist/theme-chalk/css/backtop.css +401 -0
  17. package/dist/theme-chalk/css/badge.css +419 -0
  18. package/dist/theme-chalk/css/breadcrumb-item.css +395 -0
  19. package/dist/theme-chalk/css/breadcrumb.css +395 -0
  20. package/dist/theme-chalk/css/button.css +587 -0
  21. package/dist/theme-chalk/css/card.css +397 -0
  22. package/dist/theme-chalk/css/chart.css +386 -0
  23. package/dist/theme-chalk/css/checkbox.css +648 -0
  24. package/dist/theme-chalk/css/col.css +2111 -0
  25. package/dist/theme-chalk/css/container.css +404 -0
  26. package/dist/theme-chalk/css/dialog.css +505 -0
  27. package/dist/theme-chalk/css/divider.css +405 -0
  28. package/dist/theme-chalk/css/drawer.css +546 -0
  29. package/dist/theme-chalk/css/empty.css +394 -0
  30. package/dist/theme-chalk/css/form.css +561 -0
  31. package/dist/theme-chalk/css/icon.css +1534 -0
  32. package/dist/theme-chalk/css/image.css +400 -0
  33. package/dist/theme-chalk/css/input-number.css +424 -0
  34. package/dist/theme-chalk/css/input.css +721 -0
  35. package/dist/theme-chalk/css/link.css +424 -0
  36. package/dist/theme-chalk/css/loading.css +483 -0
  37. package/dist/theme-chalk/css/message-box.css +479 -0
  38. package/dist/theme-chalk/css/message.css +456 -0
  39. package/dist/theme-chalk/css/no-data.css +397 -0
  40. package/dist/theme-chalk/css/notification.css +431 -0
  41. package/dist/theme-chalk/css/page-header.css +396 -0
  42. package/dist/theme-chalk/css/pagination.css +565 -0
  43. package/dist/theme-chalk/css/popover.css +421 -0
  44. package/dist/theme-chalk/css/popper.css +454 -0
  45. package/dist/theme-chalk/css/progress.css +451 -0
  46. package/dist/theme-chalk/css/radio.css +626 -0
  47. package/dist/theme-chalk/css/rate.css +414 -0
  48. package/dist/theme-chalk/css/result.css +403 -0
  49. package/dist/theme-chalk/css/row.css +433 -0
  50. package/dist/theme-chalk/css/scrollbar.css +422 -0
  51. package/dist/theme-chalk/css/select.css +1897 -0
  52. package/dist/theme-chalk/css/skeleton-item.css +407 -0
  53. package/dist/theme-chalk/css/skeleton.css +390 -0
  54. package/dist/theme-chalk/css/slider.css +460 -0
  55. package/dist/theme-chalk/css/spinner.css +403 -0
  56. package/dist/theme-chalk/css/statistic.css +396 -0
  57. package/dist/theme-chalk/css/status-timeline-chart.css +388 -0
  58. package/dist/theme-chalk/css/step.css +496 -0
  59. package/dist/theme-chalk/css/steps.css +496 -0
  60. package/dist/theme-chalk/css/switch.css +507 -0
  61. package/dist/theme-chalk/css/tab-pane.css +457 -0
  62. package/dist/theme-chalk/css/table.css +461 -0
  63. package/dist/theme-chalk/css/tabs-navigation.css +925 -0
  64. package/dist/theme-chalk/css/tabs.css +457 -0
  65. package/dist/theme-chalk/css/tag.css +599 -0
  66. package/dist/theme-chalk/css/time-picker.css +683 -0
  67. package/dist/theme-chalk/css/timeline-item.css +459 -0
  68. package/dist/theme-chalk/css/timeline.css +459 -0
  69. package/dist/theme-chalk/css/tooltip.css +485 -0
  70. package/dist/theme-chalk/css/tree.css +473 -0
  71. package/dist/theme-chalk/css/upload.css +665 -0
  72. package/dist/theme-chalk/dialog/index.scss +168 -0
  73. package/dist/theme-chalk/divider/index.scss +46 -0
  74. package/dist/theme-chalk/drawer/index.scss +172 -0
  75. package/dist/theme-chalk/empty/index.scss +36 -0
  76. package/dist/theme-chalk/fonts/element-icons.ttf +0 -0
  77. package/dist/theme-chalk/fonts/element-icons.woff +0 -0
  78. package/dist/theme-chalk/form/index.scss +220 -0
  79. package/dist/theme-chalk/icon/index.scss +1171 -0
  80. package/dist/theme-chalk/image/index.scss +39 -0
  81. package/dist/theme-chalk/index.scss +127 -0
  82. package/dist/theme-chalk/input/index.scss +363 -0
  83. package/dist/theme-chalk/input-number/index.scss +71 -0
  84. package/dist/theme-chalk/link/index.scss +75 -0
  85. package/dist/theme-chalk/loading/index.scss +131 -0
  86. package/dist/theme-chalk/message/index.scss +100 -0
  87. package/dist/theme-chalk/message-box/index.scss +131 -0
  88. package/dist/theme-chalk/mixins.scss +203 -0
  89. package/dist/theme-chalk/no-data/index.scss +36 -0
  90. package/dist/theme-chalk/notification/index.scss +76 -0
  91. package/dist/theme-chalk/page-header/index.scss +36 -0
  92. package/dist/theme-chalk/pagination/index.scss +225 -0
  93. package/dist/theme-chalk/popover/index.scss +56 -0
  94. package/dist/theme-chalk/popper/index.scss +89 -0
  95. package/dist/theme-chalk/progress/index.scss +105 -0
  96. package/dist/theme-chalk/radio/index.scss +328 -0
  97. package/dist/theme-chalk/rate/index.scss +56 -0
  98. package/dist/theme-chalk/reset.scss +262 -0
  99. package/dist/theme-chalk/result/index.scss +46 -0
  100. package/dist/theme-chalk/row/index.scss +88 -0
  101. package/dist/theme-chalk/scrollbar/index.scss +67 -0
  102. package/dist/theme-chalk/select/index.scss +223 -0
  103. package/dist/theme-chalk/skeleton/index.scss +30 -0
  104. package/dist/theme-chalk/skeleton-item/index.scss +49 -0
  105. package/dist/theme-chalk/slider/index.scss +113 -0
  106. package/dist/theme-chalk/spinner/index.scss +40 -0
  107. package/dist/theme-chalk/statistic/index.scss +38 -0
  108. package/dist/theme-chalk/status-timeline-chart/index.scss +23 -0
  109. package/dist/theme-chalk/step/index.scss +160 -0
  110. package/dist/theme-chalk/steps/index.scss +160 -0
  111. package/dist/theme-chalk/switch/index.scss +153 -0
  112. package/dist/theme-chalk/tab-pane/index.scss +112 -0
  113. package/dist/theme-chalk/table/index.scss +110 -0
  114. package/dist/theme-chalk/tabs/index.scss +112 -0
  115. package/dist/theme-chalk/tabs-navigation/index.scss +631 -0
  116. package/dist/theme-chalk/tag/index.scss +138 -0
  117. package/dist/theme-chalk/themes/blue.scss +76 -0
  118. package/dist/theme-chalk/themes/dark.scss +99 -0
  119. package/dist/theme-chalk/themes/index.scss +260 -0
  120. package/dist/theme-chalk/themes/light.scss +99 -0
  121. package/dist/theme-chalk/time-picker/index.scss +332 -0
  122. package/dist/theme-chalk/timeline/index.scss +119 -0
  123. package/dist/theme-chalk/timeline-item/index.scss +119 -0
  124. package/dist/theme-chalk/tooltip/index.scss +122 -0
  125. package/dist/theme-chalk/tree/index.scss +125 -0
  126. package/dist/theme-chalk/upload/index.scss +348 -0
  127. package/dist/theme-chalk/variables.scss +93 -0
  128. package/dist/vue2-ui-library.cjs.temp.js.map +1 -0
  129. package/dist/vue2-ui-library.common.js +28 -0
  130. package/dist/vue2-ui-library.common.js.map +1 -0
  131. package/dist/vue2-ui-library.esm.js +29 -0
  132. package/dist/vue2-ui-library.umd.js +27 -0
  133. package/package.json +161 -0
  134. package/src/directives/clickoutside/index.js +111 -0
  135. package/src/directives/init/index.js +50 -0
  136. package/src/directives/resize/index.js +69 -0
  137. package/src/index.js +174 -0
  138. package/src/mixins/emitter.js +47 -0
  139. package/src/mixins/focus.js +42 -0
  140. package/src/mixins/locale.js +24 -0
  141. package/src/mixins/migrating.js +46 -0
  142. package/src/packages/alert/index.js +12 -0
  143. package/src/packages/alert/src/main.vue +98 -0
  144. package/src/packages/aside/index.js +12 -0
  145. package/src/packages/aside/src/main.vue +20 -0
  146. package/src/packages/auto-grid-layout/index.js +18 -0
  147. package/src/packages/auto-grid-layout/prop.js +92 -0
  148. package/src/packages/auto-grid-layout/src/components/GridItem.vue +759 -0
  149. package/src/packages/auto-grid-layout/src/components/GridLayout.vue +367 -0
  150. package/src/packages/auto-grid-layout/src/main.vue +287 -0
  151. package/src/packages/auto-grid-layout/src/utils/DOM.js +46 -0
  152. package/src/packages/auto-grid-layout/src/utils/interact.js +333 -0
  153. package/src/packages/auto-grid-layout/src/utils/responsiveUtils.js +75 -0
  154. package/src/packages/auto-grid-layout/src/utils/utils.js +339 -0
  155. package/src/packages/autocomplete/index.js +12 -0
  156. package/src/packages/autocomplete/src/main.vue +170 -0
  157. package/src/packages/avatar/index.js +12 -0
  158. package/src/packages/avatar/src/main.vue +87 -0
  159. package/src/packages/backtop/index.js +12 -0
  160. package/src/packages/backtop/src/main.vue +120 -0
  161. package/src/packages/badge/index.js +12 -0
  162. package/src/packages/badge/src/main.vue +53 -0
  163. package/src/packages/breadcrumb/index.js +12 -0
  164. package/src/packages/breadcrumb/src/main.vue +34 -0
  165. package/src/packages/breadcrumb-item/index.js +12 -0
  166. package/src/packages/breadcrumb-item/src/main.vue +41 -0
  167. package/src/packages/button/index.js +13 -0
  168. package/src/packages/button/src/main.vue +106 -0
  169. package/src/packages/calendar/index.js +12 -0
  170. package/src/packages/calendar/src/main.vue +173 -0
  171. package/src/packages/card/index.js +12 -0
  172. package/src/packages/card/src/main.vue +26 -0
  173. package/src/packages/carousel/index.js +12 -0
  174. package/src/packages/carousel/src/main.vue +186 -0
  175. package/src/packages/carousel-item/index.js +12 -0
  176. package/src/packages/carousel-item/src/main.vue +34 -0
  177. package/src/packages/cascader/index.js +12 -0
  178. package/src/packages/cascader/src/main.vue +232 -0
  179. package/src/packages/chart/index.js +7 -0
  180. package/src/packages/chart/src/axis-chart.js +700 -0
  181. package/src/packages/chart/src/main.vue +828 -0
  182. package/src/packages/chart/src/utils.js +21 -0
  183. package/src/packages/checkbox/index.js +44 -0
  184. package/src/packages/checkbox/src/main.vue +312 -0
  185. package/src/packages/col/index.js +12 -0
  186. package/src/packages/col/src/main.vue +85 -0
  187. package/src/packages/collapse/index.js +12 -0
  188. package/src/packages/collapse/src/main.vue +69 -0
  189. package/src/packages/collapse-item/index.js +12 -0
  190. package/src/packages/collapse-item/src/main.vue +75 -0
  191. package/src/packages/color-picker/index.js +12 -0
  192. package/src/packages/color-picker/src/main.vue +206 -0
  193. package/src/packages/container/index.js +12 -0
  194. package/src/packages/container/src/main.vue +33 -0
  195. package/src/packages/date-picker/index.js +12 -0
  196. package/src/packages/date-picker/src/main.vue +246 -0
  197. package/src/packages/descriptions/index.js +12 -0
  198. package/src/packages/descriptions/src/main.vue +89 -0
  199. package/src/packages/descriptions-item/index.js +12 -0
  200. package/src/packages/descriptions-item/src/main.vue +26 -0
  201. package/src/packages/dialog/index.js +12 -0
  202. package/src/packages/dialog/src/main.vue +336 -0
  203. package/src/packages/divider/index.js +12 -0
  204. package/src/packages/divider/src/main.vue +37 -0
  205. package/src/packages/drawer/index.js +7 -0
  206. package/src/packages/drawer/src/main.vue +310 -0
  207. package/src/packages/dropdown/index.js +12 -0
  208. package/src/packages/dropdown/src/main.vue +82 -0
  209. package/src/packages/dropdown-menu-item/index.js +12 -0
  210. package/src/packages/dropdown-menu-item/src/main.vue +29 -0
  211. package/src/packages/empty/index.js +12 -0
  212. package/src/packages/empty/src/img-empty.vue +12 -0
  213. package/src/packages/empty/src/main.vue +49 -0
  214. package/src/packages/footer/index.js +12 -0
  215. package/src/packages/footer/src/main.vue +20 -0
  216. package/src/packages/form/index.js +13 -0
  217. package/src/packages/form/src/form-field.vue +790 -0
  218. package/src/packages/form/src/form-item.vue +464 -0
  219. package/src/packages/form/src/label-wrap.vue +127 -0
  220. package/src/packages/form/src/main.vue +442 -0
  221. package/src/packages/form-item/index.js +11 -0
  222. package/src/packages/header/index.js +12 -0
  223. package/src/packages/header/src/main.vue +20 -0
  224. package/src/packages/icon/index.js +12 -0
  225. package/src/packages/icon/src/main.vue +48 -0
  226. package/src/packages/image/index.js +12 -0
  227. package/src/packages/image/src/main.vue +224 -0
  228. package/src/packages/input/index.js +13 -0
  229. package/src/packages/input/src/calcTextareaHeight.js +123 -0
  230. package/src/packages/input/src/main.vue +510 -0
  231. package/src/packages/input-number/index.js +12 -0
  232. package/src/packages/input-number/src/main.vue +121 -0
  233. package/src/packages/link/index.js +12 -0
  234. package/src/packages/link/src/main.vue +53 -0
  235. package/src/packages/loading/index.js +17 -0
  236. package/src/packages/loading/src/directive.js +54 -0
  237. package/src/packages/loading/src/main.vue +38 -0
  238. package/src/packages/loading/src/service.js +63 -0
  239. package/src/packages/main/index.js +12 -0
  240. package/src/packages/main/src/main.vue +12 -0
  241. package/src/packages/menu/index.js +12 -0
  242. package/src/packages/menu/src/main.vue +117 -0
  243. package/src/packages/menu-item/index.js +12 -0
  244. package/src/packages/menu-item/src/main.vue +61 -0
  245. package/src/packages/message/index.js +95 -0
  246. package/src/packages/message/src/main.vue +131 -0
  247. package/src/packages/message-box/index.js +75 -0
  248. package/src/packages/message-box/src/main.vue +207 -0
  249. package/src/packages/no-data/index.js +8 -0
  250. package/src/packages/no-data/src/main.vue +23 -0
  251. package/src/packages/notification/index.js +72 -0
  252. package/src/packages/notification/src/main.vue +139 -0
  253. package/src/packages/option/index.js +13 -0
  254. package/src/packages/page-header/index.js +12 -0
  255. package/src/packages/page-header/src/main.vue +27 -0
  256. package/src/packages/pagination/index.js +12 -0
  257. package/src/packages/pagination/src/main.vue +255 -0
  258. package/src/packages/popconfirm/index.js +12 -0
  259. package/src/packages/popconfirm/src/main.vue +89 -0
  260. package/src/packages/popover/index.js +12 -0
  261. package/src/packages/popover/src/main.vue +452 -0
  262. package/src/packages/progress/index.js +12 -0
  263. package/src/packages/progress/src/main.vue +236 -0
  264. package/src/packages/radio/index.js +44 -0
  265. package/src/packages/radio/src/main.vue +291 -0
  266. package/src/packages/rate/index.js +12 -0
  267. package/src/packages/rate/src/main.vue +129 -0
  268. package/src/packages/result/index.js +12 -0
  269. package/src/packages/result/src/main.vue +52 -0
  270. package/src/packages/row/index.js +12 -0
  271. package/src/packages/row/src/main.vue +57 -0
  272. package/src/packages/scrollbar/index.js +12 -0
  273. package/src/packages/scrollbar/src/bar.vue +116 -0
  274. package/src/packages/scrollbar/src/main.vue +124 -0
  275. package/src/packages/select/index.js +15 -0
  276. package/src/packages/select/src/clickoutside.js +20 -0
  277. package/src/packages/select/src/main.vue +1055 -0
  278. package/src/packages/select/src/navigation-mixin.js +49 -0
  279. package/src/packages/select/src/option.vue +249 -0
  280. package/src/packages/select/src/select-dropdown.vue +95 -0
  281. package/src/packages/select/src/utils.js +5 -0
  282. package/src/packages/skeleton/index.js +12 -0
  283. package/src/packages/skeleton/src/main.vue +76 -0
  284. package/src/packages/skeleton-item/index.js +12 -0
  285. package/src/packages/skeleton-item/src/img-placeholder.vue +13 -0
  286. package/src/packages/skeleton-item/src/main.vue +22 -0
  287. package/src/packages/slider/index.js +12 -0
  288. package/src/packages/slider/src/main.vue +176 -0
  289. package/src/packages/spinner/index.js +12 -0
  290. package/src/packages/spinner/src/main.vue +27 -0
  291. package/src/packages/statistic/index.js +12 -0
  292. package/src/packages/statistic/src/main.vue +100 -0
  293. package/src/packages/status-timeline-chart/index.js +7 -0
  294. package/src/packages/status-timeline-chart/src/constants.js +20 -0
  295. package/src/packages/status-timeline-chart/src/main.vue +499 -0
  296. package/src/packages/status-timeline-chart/src/option-builder.js +475 -0
  297. package/src/packages/step/index.js +12 -0
  298. package/src/packages/step/src/main.vue +183 -0
  299. package/src/packages/steps/index.js +12 -0
  300. package/src/packages/steps/src/main.vue +57 -0
  301. package/src/packages/submenu/index.js +12 -0
  302. package/src/packages/submenu/src/main.vue +68 -0
  303. package/src/packages/switch/index.js +12 -0
  304. package/src/packages/switch/src/main.vue +166 -0
  305. package/src/packages/tab-pane/index.js +12 -0
  306. package/src/packages/tab-pane/src/main.vue +74 -0
  307. package/src/packages/table/index.js +8 -0
  308. package/src/packages/table/src/components/PagePagination.vue +82 -0
  309. package/src/packages/table/src/main.vue +153 -0
  310. package/src/packages/tabs/index.js +12 -0
  311. package/src/packages/tabs/src/main.vue +167 -0
  312. package/src/packages/tabs-navigation/index.js +7 -0
  313. package/src/packages/tabs-navigation/src/main.vue +462 -0
  314. package/src/packages/tag/index.js +12 -0
  315. package/src/packages/tag/src/main.vue +194 -0
  316. package/src/packages/time-picker/index.js +17 -0
  317. package/src/packages/time-picker/src/date-utils.js +455 -0
  318. package/src/packages/time-picker/src/main.vue +321 -0
  319. package/src/packages/time-picker/src/pane/date-range.vue +193 -0
  320. package/src/packages/time-picker/src/pane/date-time-range.vue +362 -0
  321. package/src/packages/time-picker/src/pane/date-time.vue +362 -0
  322. package/src/packages/time-picker/src/pane/date.vue +441 -0
  323. package/src/packages/time-picker/src/pane/time.vue +260 -0
  324. package/src/packages/time-picker/src/time-input.vue +203 -0
  325. package/src/packages/time-picker/src/time-range-input.vue +170 -0
  326. package/src/packages/timeline/index.js +12 -0
  327. package/src/packages/timeline/src/main.vue +24 -0
  328. package/src/packages/timeline-item/index.js +12 -0
  329. package/src/packages/timeline-item/src/main.vue +78 -0
  330. package/src/packages/tooltip/index.js +12 -0
  331. package/src/packages/tooltip/src/main.js +367 -0
  332. package/src/packages/transfer/index.js +8 -0
  333. package/src/packages/transfer/src/main.vue +229 -0
  334. package/src/packages/transfer/src/transfer-panel.vue +245 -0
  335. package/src/packages/transitions/collapse-transition.js +75 -0
  336. package/src/packages/tree/index.js +12 -0
  337. package/src/packages/tree/src/main.vue +322 -0
  338. package/src/packages/tree/src/model/node.js +348 -0
  339. package/src/packages/tree/src/model/tree-store.js +354 -0
  340. package/src/packages/tree/src/model/util.js +10 -0
  341. package/src/packages/tree/src/tree-node.vue +262 -0
  342. package/src/packages/upload/index.js +9 -0
  343. package/src/packages/upload/src/main.vue +415 -0
  344. package/src/playground/mixins/element.js +98 -0
  345. package/src/playground/types/element.js +197 -0
  346. package/src/playground/types/layout.js +80 -0
  347. package/src/plugins/i18n.js +125 -0
  348. package/src/styles/fonts/element-icons.ttf +0 -0
  349. package/src/styles/fonts/element-icons.woff +0 -0
  350. package/src/styles/index.scss +138 -0
  351. package/src/styles/reset.scss +257 -0
  352. package/src/styles/themes/blue.scss +75 -0
  353. package/src/styles/themes/dark.scss +98 -0
  354. package/src/styles/themes/index.scss +34 -0
  355. package/src/styles/themes/light.scss +98 -0
  356. package/src/styles/themes/variables.scss +233 -0
  357. package/src/styles/variables.scss +146 -0
  358. package/src/utils/async-validator/index.js +659 -0
  359. package/src/utils/browser/index.js +39 -0
  360. package/src/utils/color.js +76 -0
  361. package/src/utils/dom/index.js +421 -0
  362. package/src/utils/dom/scrollbar-width.js +49 -0
  363. package/src/utils/draggable/core.js +379 -0
  364. package/src/utils/draggable/draggable.js +478 -0
  365. package/src/utils/draggable/index.js +61 -0
  366. package/src/utils/draggable/sortable.js +751 -0
  367. package/src/utils/lodash/index.js +2395 -0
  368. package/src/utils/moment/index.js +909 -0
  369. package/src/utils/playground/index.js +37 -0
  370. package/src/utils/popper/index.js +308 -0
  371. package/src/utils/popper/popper.js +1132 -0
  372. package/src/utils/popper/popup-manager.js +288 -0
  373. package/src/utils/popper/popup.js +344 -0
package/package.json ADDED
@@ -0,0 +1,161 @@
1
+ {
2
+ "name": "misp-ui-library-test",
3
+ "version": "0.0.1",
4
+ "description": "基于Vue2的轻量级UI组件库,由Misp团队打造",
5
+ "main": "dist/vue2-ui-library.common.js",
6
+ "module": "dist/vue2-ui-library.esm.js",
7
+ "unpkg": "dist/vue2-ui-library.umd.js",
8
+ "files": [
9
+ "dist",
10
+ "src",
11
+ "README.md",
12
+ "types"
13
+ ],
14
+ "typings": "types/index.d.ts",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/your-name/vue2-ui-library.git"
18
+ },
19
+ "homepage": "https://your-name.github.io/vue2-ui-library",
20
+ "bugs": {
21
+ "url": "https://github.com/your-name/vue2-ui-library/issues"
22
+ },
23
+ "scripts": {
24
+ "dev": "node scripts/prepare-docs-dist.js && cross-env WEBPACK_DEV_SERVER_HOST=localhost WEBPACK_DEV_SERVER_PORT=8080 NODE_OPTIONS=--openssl-legacy-provider vuepress dev docs",
25
+ "build": "cross-env NODE_OPTIONS=--openssl-legacy-provider vuepress build docs",
26
+ "build:lib": "node scripts/build-styles.js && cross-env NODE_OPTIONS=--openssl-legacy-provider NODE_ENV=production webpack --config webpack.config.js --mode production",
27
+ "build:lib:dev": "cross-env NODE_OPTIONS=--openssl-legacy-provider NODE_ENV=development webpack --config webpack.config.js --mode development",
28
+ "build:commonjs": "node scripts/build-styles.js && cross-env NODE_OPTIONS=--openssl-legacy-provider node scripts/build-commonjs.js",
29
+ "build:esm": "node scripts/build-styles.js && cross-env NODE_OPTIONS=--openssl-legacy-provider node scripts/build-esm.js",
30
+ "build:all": "npm run build:styles && npm run build:commonjs && npm run build:esm && npm run build:lib",
31
+ "build:styles": "node scripts/build-styles.js",
32
+ "lint": "eslint src --ext .js,.vue,.ts",
33
+ "lint:fix": "eslint src --ext .js,.vue,.ts --fix",
34
+ "prepublishOnly": "npm run build:styles && npm run build:commonjs && npm run build:esm && npm run build:lib",
35
+ "test": "jest",
36
+ "test:watch": "jest --watch",
37
+ "test:coverage": "jest --coverage",
38
+ "demo": "node scripts/demo-server.js",
39
+ "clean": "rimraf dist coverage",
40
+ "prepare": "husky install"
41
+ },
42
+ "keywords": [
43
+ "vue",
44
+ "vue2",
45
+ "ui",
46
+ "component-library",
47
+ "typescript",
48
+ "vuepress",
49
+ "webpack"
50
+ ],
51
+ "author": "MISP",
52
+ "license": "MIT",
53
+ "engines": {
54
+ "node": ">=14.0.0",
55
+ "npm": ">=6.0.0"
56
+ },
57
+ "peerDependencies": {
58
+ "vue": "^2.6.0 || ^2.7.0"
59
+ },
60
+ "peerDependenciesMeta": {
61
+ "vue": {
62
+ "optional": false
63
+ }
64
+ },
65
+ "devDependencies": {
66
+ "@babel/core": "7.23.2",
67
+ "@babel/eslint-parser": "7.23.3",
68
+ "@babel/plugin-proposal-class-properties": "7.18.6",
69
+ "@babel/plugin-proposal-decorators": "7.23.2",
70
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
71
+ "@babel/plugin-proposal-optional-chaining": "^7.21.0",
72
+ "@babel/plugin-transform-object-assign": "7.23.3",
73
+ "@babel/preset-env": "7.23.2",
74
+ "@babel/preset-typescript": "7.23.2",
75
+ "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0",
76
+ "@vue/babel-preset-jsx": "^1.4.0",
77
+ "@vue/test-utils": "1.3.6",
78
+ "@vuepress/plugin-back-to-top": "1.9.9",
79
+ "@vuepress/plugin-search": "1.9.9",
80
+ "assert": "^2.1.0",
81
+ "autoprefixer": "10.4.16",
82
+ "babel-loader": "8.3.0",
83
+ "babel-plugin-component": "1.1.1",
84
+ "babel-plugin-import": "^1.13.8",
85
+ "buffer": "^6.0.3",
86
+ "clean-webpack-plugin": "^3.0.0",
87
+ "core-js": "^3.6.5",
88
+ "cross-env": "7.0.3",
89
+ "css-loader": "4.3.0",
90
+ "cssnano": "6.0.2",
91
+ "deepmerge": "4.3.1",
92
+ "eslint": "8.48.0",
93
+ "eslint-config-prettier": "9.0.0",
94
+ "eslint-plugin-prettier": "5.0.0",
95
+ "eslint-plugin-vue": "9.17.0",
96
+ "file-loader": "6.2.0",
97
+ "husky": "8.0.3",
98
+ "jest": "27.5.1",
99
+ "postcss": "8.4.31",
100
+ "postcss-loader": "4.3.0",
101
+ "prettier": "3.0.3",
102
+ "process": "^0.11.10",
103
+ "rimraf": "5.0.5",
104
+ "sass": "1.69.5",
105
+ "sass-loader": "10.1.1",
106
+ "sockjs-client": "^1.4.0",
107
+ "stream-browserify": "^3.0.0",
108
+ "style-loader": "2.0.0",
109
+ "ts-jest": "27.1.5",
110
+ "typescript": "4.9.5",
111
+ "vue": "2.7.16",
112
+ "vue-jest": "3.0.7",
113
+ "vue-loader": "15.10.1",
114
+ "vue-template-compiler": "2.7.16",
115
+ "vuepress": "1.9.9",
116
+ "vuepress-plugin-demo-container": "^0.2.0",
117
+ "webpack": "4.46.0",
118
+ "webpack-cli": "3.3.12",
119
+ "webpack-dev-server": "^3.7.2",
120
+ "webpack-node-externals": "3.0.0"
121
+ },
122
+ "dependencies": {
123
+ "echarts": "^5.6.0",
124
+ "throttle-debounce": "^1.0.1",
125
+ "vxe-table": "^3.6.11",
126
+ "xe-utils": "^3.5.7"
127
+ },
128
+ "jest": {
129
+ "moduleFileExtensions": [
130
+ "js",
131
+ "json",
132
+ "vue",
133
+ "ts"
134
+ ],
135
+ "transform": {
136
+ "^.+\\.js$": "babel-jest",
137
+ "^.+\\.vue$": "vue-jest",
138
+ "^.+\\.ts$": "ts-jest"
139
+ },
140
+ "moduleNameMapper": {
141
+ "^@/(.*)$": "<rootDir>/src/$1"
142
+ },
143
+ "collectCoverage": true,
144
+ "coverageDirectory": "coverage",
145
+ "coverageReporters": [
146
+ "text",
147
+ "lcov",
148
+ "html"
149
+ ],
150
+ "coveragePathIgnorePatterns": [
151
+ "/node_modules/",
152
+ "/dist/",
153
+ "/docs/"
154
+ ]
155
+ },
156
+ "browserslist": [
157
+ "last 2 versions",
158
+ "> 1%",
159
+ "IE 11"
160
+ ]
161
+ }
@@ -0,0 +1,111 @@
1
+ /**
2
+ * @module clickoutside
3
+ * @description Vue 2 点击外部区域关闭指令
4
+ *
5
+ * 当用户点击元素外部区域时触发指定的回调函数。
6
+ * 支持通过指令表达式绑定方法名,或直接通过 binding.value 传递回调函数。
7
+ * 自动处理包含 popperElm(如下拉菜单、Tooltip)的情况,点击 popper 内部不会触发关闭。
8
+ *
9
+ * @example
10
+ * // 模板中使用
11
+ * <div v-clickoutside="handleClose">Content</div>
12
+ *
13
+ * // 或者绑定方法名
14
+ * <div v-clickoutside="onClose">Content</div>
15
+ */
16
+ import Vue from 'vue';
17
+ import { on } from '../../utils/dom/index.js';
18
+
19
+ const nodeList = [];
20
+ const ctx = '@@clickoutsideContext';
21
+
22
+ let startClick;
23
+ let seed = 0;
24
+
25
+ // 全局监听 mousedown 记录起始点击位置
26
+ !Vue.prototype.$isServer && on(document, 'mousedown', e => (startClick = e));
27
+
28
+ // 全局监听 mouseup 触发检测逻辑
29
+ !Vue.prototype.$isServer && on(document, 'mouseup', e => {
30
+ nodeList.forEach(node => node[ctx].documentHandler(e, startClick));
31
+ });
32
+
33
+ /**
34
+ * 创建文档点击处理器
35
+ * @param {HTMLElement} el - 绑定指令的元素
36
+ * @param {Object} binding - 绑定对象
37
+ * @param {VNode} vnode - 虚拟节点
38
+ * @returns {Function} 点击处理函数
39
+ */
40
+ function createDocumentHandler(el, binding, vnode) {
41
+ return function(mouseup = {}, mousedown = {}) {
42
+ // 基本校验:确保 vnode、context 和 target 存在
43
+ if (!vnode ||
44
+ !vnode.context ||
45
+ !mouseup.target ||
46
+ !mousedown.target ||
47
+ // 如果点击发生在元素内部,则忽略
48
+ el.contains(mouseup.target) ||
49
+ el.contains(mousedown.target) ||
50
+ el === mouseup.target ||
51
+ // 如果存在 popperElm(如 Select、Dropdown),且点击发生在 popper 内部,则忽略
52
+ (vnode.context.popperElm &&
53
+ (vnode.context.popperElm.contains(mouseup.target) ||
54
+ vnode.context.popperElm.contains(mousedown.target)))) return;
55
+
56
+ // 执行回调:优先使用表达式绑定的方法名,否则使用 binding.value 传入的函数
57
+ if (binding.expression &&
58
+ el[ctx].methodName &&
59
+ vnode.context[el[ctx].methodName]) {
60
+ vnode.context[el[ctx].methodName](mouseup, mousedown);
61
+ } else {
62
+ el[ctx].bindingFn && el[ctx].bindingFn(mouseup, mousedown);
63
+ }
64
+ };
65
+ }
66
+
67
+ export default {
68
+ /**
69
+ * 指令绑定钩子
70
+ * @param {HTMLElement} el - 绑定指令的元素
71
+ * @param {Object} binding - 绑定对象
72
+ * @param {VNode} vnode - 虚拟节点
73
+ */
74
+ bind(el, binding, vnode) {
75
+ nodeList.push(el);
76
+ const id = seed++;
77
+ el[ctx] = {
78
+ id,
79
+ documentHandler: createDocumentHandler(el, binding, vnode),
80
+ methodName: binding.expression,
81
+ bindingFn: binding.value
82
+ };
83
+ },
84
+
85
+ /**
86
+ * 指令更新钩子
87
+ * @param {HTMLElement} el - 绑定指令的元素
88
+ * @param {Object} binding - 绑定对象
89
+ * @param {VNode} vnode - 虚拟节点
90
+ */
91
+ update(el, binding, vnode) {
92
+ el[ctx].documentHandler = createDocumentHandler(el, binding, vnode);
93
+ el[ctx].methodName = binding.expression;
94
+ el[ctx].bindingFn = binding.value;
95
+ },
96
+
97
+ /**
98
+ * 指令解绑钩子
99
+ * @param {HTMLElement} el - 绑定指令的元素
100
+ */
101
+ unbind(el) {
102
+ let len = nodeList.length;
103
+ for (let i = 0; i < len; i++) {
104
+ if (nodeList[i][ctx].id === el[ctx].id) {
105
+ nodeList.splice(i, 1);
106
+ break;
107
+ }
108
+ }
109
+ delete el[ctx];
110
+ }
111
+ };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @fileoverview Vue2 UI Library - 初始化指令模块
3
+ * @description 提供 v-init 指令,用于在元素绑定时执行初始化回调函数
4
+ * @module directives/init
5
+ */
6
+
7
+ /**
8
+ * v-init 初始化指令
9
+ * @namespace init
10
+ * @memberof module:directives/init
11
+ * @description 在元素绑定到 DOM 时立即执行传入的初始化函数
12
+ *
13
+ * @example
14
+ * // 模板中使用
15
+ * <div v-init="initFunction"></div>
16
+ *
17
+ * // 组件中定义
18
+ * export default {
19
+ * methods: {
20
+ * initFunction(el) {
21
+ * console.log('元素已初始化', el);
22
+ * }
23
+ * }
24
+ * }
25
+ */
26
+ export default {
27
+ /**
28
+ * 指令绑定钩子
29
+ * @function bind
30
+ * @memberof module:directives/init
31
+ * @param {HTMLElement} el - 指令绑定的 DOM 元素
32
+ * @param {Object} binding - 绑定对象,包含 value 等属性
33
+ * @param {VNode} vnode - 虚拟节点对象
34
+ * @param {Vue} vnode.context - Vue 实例上下文
35
+ * @param {Function} binding.value - 传入的初始化处理函数
36
+ * @returns {void}
37
+ * @description 在指令第一次绑定到元素时调用,执行传入的初始化函数
38
+ * @throws {Error} 当 binding.value 不是函数时抛出错误
39
+ */
40
+ bind(el, binding, vnode) {
41
+ const that = vnode.context;
42
+ const handler = binding.value;
43
+
44
+ if (handler instanceof Function) {
45
+ handler.call(this, el);
46
+ } else {
47
+ throw new Error('v-init only accepts a function as handler');
48
+ }
49
+ }
50
+ };
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @fileoverview Vue2 UI Library - 尺寸变化监听指令模块
3
+ * @description 提供 v-resize 指令,用于监听 DOM 元素尺寸变化并执行回调
4
+ * @module directives/resize
5
+ */
6
+
7
+ /**
8
+ * v-resize 尺寸变化监听指令
9
+ * @namespace resize
10
+ * @memberof module:directives/resize
11
+ * @description 使用 ResizeObserver API 监听元素尺寸变化,自动执行传入的回调函数
12
+ *
13
+ * @example
14
+ * // 模板中使用
15
+ * <div v-resize="onResize"></div>
16
+ *
17
+ * // 组件中定义
18
+ * export default {
19
+ * methods: {
20
+ * onResize() {
21
+ * console.log('元素尺寸发生变化');
22
+ * }
23
+ * }
24
+ * }
25
+ */
26
+ export default {
27
+ /**
28
+ * 指令绑定钩子
29
+ * @function bind
30
+ * @memberof module:directives/resize
31
+ * @param {HTMLElement} element - 指令绑定的 DOM 元素
32
+ * @param {Object} binding - 绑定对象,包含 value 等属性
33
+ * @param {VNode} vnode - 虚拟节点对象
34
+ * @param {Vue} vnode.context - Vue 实例上下文
35
+ * @param {Function} binding.value - 尺寸变化时的回调函数
36
+ * @returns {void}
37
+ * @description 创建 ResizeObserver 实例并监听元素尺寸变化
38
+ * @throws {Error} 当 binding.value 不是函数时抛出错误
39
+ */
40
+ bind: (element, binding, vnode) => {
41
+ const that = vnode.context;
42
+ const handler = binding.value;
43
+
44
+ if (handler instanceof Function) {
45
+ const resizeObserver = new ResizeObserver(() => {
46
+ handler.call(that);
47
+ });
48
+ resizeObserver.observe(element);
49
+ // 将 ResizeObserver 实例挂载到元素上,便于解绑时清理
50
+ that.$set(element, '$_resizeObserver', resizeObserver);
51
+ } else {
52
+ throw new Error('v-resize only accepts a function as handler');
53
+ }
54
+ },
55
+
56
+ /**
57
+ * 指令解绑钩子
58
+ * @function unbind
59
+ * @memberof module:directives/resize
60
+ * @param {HTMLElement} element - 指令绑定的 DOM 元素
61
+ * @returns {void}
62
+ * @description 断开 ResizeObserver 监听,防止内存泄漏
63
+ */
64
+ unbind: element => {
65
+ if (element.$_resizeObserver) {
66
+ element.$_resizeObserver?.disconnect();
67
+ }
68
+ }
69
+ };
package/src/index.js ADDED
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Vue2 UI Library 主入口文件
3
+ * 提供全局引入和按需引入两种方式
4
+ */
5
+
6
+ // 全量引入的组件
7
+ const componentFiles = require.context('./packages', true, /\/index\.js$/)
8
+ export const components = componentFiles.keys().reduce((pack, path) => {
9
+ const module = componentFiles(path)
10
+ const moduleName = path.match(/^\.\/(.+?)\/index\.js$/)[1]
11
+ const componentName = moduleName.split(/[-/]/g).map(v => `${v.charAt(0).toUpperCase()}${v.slice(1)}`).join('')
12
+ pack[componentName] = module.default
13
+ // 组件同时导出了其他组件时,一并注入组件包
14
+ if (Object.keys(module).filter(k => k !== 'default').length > 0) {
15
+ Object.keys(module).filter(k => k !== 'default').forEach(k => {
16
+ pack[k] = module[k]
17
+ })
18
+ }
19
+ return pack
20
+ }, {})
21
+
22
+ // 全量引入自定义指令
23
+ const directiveFiles = require.context('./directives', true, /\/index\.js$/)
24
+ export const directives = directiveFiles.keys().reduce((pack, path) => {
25
+ const module = directiveFiles(path)
26
+ const moduleName = path.match(/^\.\/(.+?)\/index\.js$/)[1]
27
+ const componentName = moduleName.split(/[-/]/g).map((v, i) => i ? `${v.charAt(0).toUpperCase()}${v.slice(1)}` : v).join('')
28
+ pack[componentName] = module.default
29
+ return pack
30
+ }, {})
31
+
32
+ // 全局引入
33
+ const install = function(Vue) {
34
+ if (install.installed) return
35
+
36
+ install.installed = true
37
+
38
+ // 注册所有组件
39
+ Object.keys(components).forEach(key => {
40
+ // 保留组件名大驼峰格式
41
+ const kebabCaseKey = `Ui${key}`
42
+ Vue.component(kebabCaseKey, components[key])
43
+ })
44
+ // 注册所有自定义指令
45
+ Object.keys(directives).forEach(key => {
46
+ // 保留组件名大驼峰格式
47
+ Vue.directive(key, directives[key])
48
+ })
49
+ }
50
+
51
+ // 自动安装 Vue.use(),并全局注入
52
+ if (typeof window !== 'undefined' && window.Vue) {
53
+ install(window.Vue)
54
+ }
55
+
56
+ export default {
57
+ install,
58
+ // 按需引入的组件
59
+ ...components
60
+ }
61
+
62
+ // 单独导出组件(支持按需引入)
63
+ export { default as Button } from './packages/button'
64
+ export { default as Input } from './packages/input'
65
+ export { default as Select } from './packages/select'
66
+ export { default as Option } from './packages/option'
67
+ export { default as TimePicker } from './packages/time-picker'
68
+ export { default as AutoGridLayout } from './packages/auto-grid-layout'
69
+
70
+ // 展示组件
71
+ export { default as Alert } from './packages/alert'
72
+ export { default as Badge } from './packages/badge'
73
+ export { default as Card } from './packages/card'
74
+ export { default as Tag } from './packages/tag'
75
+ export { default as Avatar } from './packages/avatar'
76
+
77
+ // 布局组件
78
+ export { default as Row } from './packages/row'
79
+ export { default as Col } from './packages/col'
80
+ export { default as Container } from './packages/container'
81
+ export { default as Header } from './packages/header'
82
+ export { default as Aside } from './packages/aside'
83
+ export { default as Main } from './packages/main'
84
+ export { default as Footer } from './packages/footer'
85
+
86
+ // 导航组件
87
+ export { default as Breadcrumb } from './packages/breadcrumb'
88
+ export { default as BreadcrumbItem } from './packages/breadcrumb-item'
89
+ export { default as Tabs } from './packages/tabs'
90
+ export { default as TabPane } from './packages/tab-pane'
91
+ export { default as TabsNavigation } from './packages/tabs-navigation'
92
+ export { default as Steps } from './packages/steps'
93
+ export { default as Step } from './packages/step'
94
+ export { default as Timeline } from './packages/timeline'
95
+ export { default as TimelineItem } from './packages/timeline-item'
96
+
97
+ // 表单组件
98
+ export { default as Radio, RadioGroup, RadioButton } from './packages/radio'
99
+ export { default as Checkbox, CheckboxGroup, CheckboxButton } from './packages/checkbox'
100
+
101
+ // 其他展示组件
102
+ export { default as Divider } from './packages/divider'
103
+ export { default as Empty } from './packages/empty'
104
+ export { default as Link } from './packages/link'
105
+ export { default as Progress } from './packages/progress'
106
+ export { default as Skeleton } from './packages/skeleton'
107
+ export { default as SkeletonItem } from './packages/skeleton-item'
108
+ export { default as Spinner } from './packages/spinner'
109
+
110
+ // 简单展示组件
111
+ export { default as Icon } from './packages/icon'
112
+ export { default as Image } from './packages/image'
113
+ export { default as PageHeader } from './packages/page-header'
114
+ export { default as Backtop } from './packages/backtop'
115
+ export { default as Scrollbar } from './packages/scrollbar'
116
+ export { default as Statistic } from './packages/statistic'
117
+ export { default as Result } from './packages/result'
118
+
119
+ // 表单组件
120
+ export { default as Switch } from './packages/switch'
121
+ export { default as InputNumber } from './packages/input-number'
122
+ export { default as Rate } from './packages/rate'
123
+ export { default as Slider } from './packages/slider'
124
+
125
+ // 数据组件
126
+ export { default as Pagination } from './packages/pagination'
127
+ export { default as Tree } from './packages/tree'
128
+ export { default as Table } from './packages/table'
129
+ export { default as NoData } from './packages/no-data'
130
+ export { default as Transfer } from './packages/transfer'
131
+ export { default as Descriptions } from './packages/descriptions'
132
+ export { default as DescriptionsItem } from './packages/descriptions-item'
133
+
134
+ // 反馈组件
135
+ export { default as Dialog } from './packages/dialog'
136
+ export { default as Tooltip } from './packages/tooltip'
137
+ export { default as Popover } from './packages/popover'
138
+ export { default as Loading } from './packages/loading'
139
+ export { default as Message } from './packages/message'
140
+ export { default as MessageBox } from './packages/message-box'
141
+ export { default as Notification } from './packages/notification'
142
+ export { default as Popconfirm } from './packages/popconfirm'
143
+
144
+ // 布局组件
145
+ export { default as Drawer } from './packages/drawer'
146
+
147
+ // 表单组件
148
+ export { default as Form } from './packages/form'
149
+ export { default as FormItem } from './packages/form-item'
150
+
151
+ // 导航组件
152
+ export { default as Dropdown } from './packages/dropdown'
153
+ export { default as DropdownMenuItem } from './packages/dropdown-menu-item'
154
+ export { default as Menu } from './packages/menu'
155
+ export { default as MenuItem } from './packages/menu-item'
156
+ export { default as Submenu } from './packages/submenu'
157
+ export { default as Collapse } from './packages/collapse'
158
+ export { default as CollapseItem } from './packages/collapse-item'
159
+
160
+ // 表单组件
161
+ export { default as Autocomplete } from './packages/autocomplete'
162
+ export { default as DatePicker } from './packages/date-picker'
163
+ export { default as Cascader } from './packages/cascader'
164
+ export { default as ColorPicker } from './packages/color-picker'
165
+
166
+ // 展示组件
167
+ export { default as Calendar } from './packages/calendar'
168
+ export { default as Carousel } from './packages/carousel'
169
+ export { default as CarouselItem } from './packages/carousel-item'
170
+
171
+ // 其他组件
172
+ export { default as Upload } from './packages/upload'
173
+ export { default as Chart } from './packages/chart'
174
+ export { default as StatusTimelineChart } from './packages/status-timeline-chart'
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Event Emitter Mixin
3
+ * 用于子组件向下广播事件
4
+ */
5
+ function broadcast(componentName, eventName, params) {
6
+ this.$children.forEach(child => {
7
+ var name = child.$options.name;
8
+
9
+ if (name === componentName) {
10
+ child.$emit.apply(child, [eventName].concat(params));
11
+ } else {
12
+ broadcast.apply(child, [componentName, eventName].concat([params]));
13
+ }
14
+ });
15
+ }
16
+ export default {
17
+ methods: {
18
+ /**
19
+ * 向指定父组件派发事件
20
+ * @param {String} componentName - 目标组件名
21
+ * @param {String} eventName - 事件名
22
+ * @param {*} params - 事件参数
23
+ */
24
+ dispatch(componentName, eventName, params) {
25
+ var parent = this.$parent || this.$root;
26
+ var name = parent.$options.name;
27
+ while (parent && (!name || name !== componentName)) {
28
+ parent = parent.$parent;
29
+ if (parent) {
30
+ name = parent.$options.name;
31
+ }
32
+ }
33
+ if (parent) {
34
+ parent.$emit.apply(parent, [eventName].concat(params));
35
+ }
36
+ },
37
+ /**
38
+ * 向子组件广播事件
39
+ * @param {String} componentName - 目标组件名
40
+ * @param {String} eventName - 事件名
41
+ * @param {*} params - 事件参数
42
+ */
43
+ broadcast(componentName, eventName, params) {
44
+ broadcast.call(this, componentName, eventName, params);
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @fileoverview Vue2 UI Library - 焦点管理 Mixin
3
+ * @description 提供组件自动聚焦功能的混入模块
4
+ * @module mixins/focus
5
+ */
6
+
7
+ /**
8
+ * 创建焦点管理 Mixin
9
+ * @function focus
10
+ * @memberof module:mixins/focus
11
+ * @param {String} ref - 目标元素的 ref 引用名称
12
+ * @returns {Object} 包含 focus 方法的 mixin 对象
13
+ * @description 生成一个包含 focus() 方法的混入对象,用于聚焦指定的 ref 元素
14
+ *
15
+ * @example
16
+ * // 在组件中使用
17
+ * import Focus from '@/mixins/focus';
18
+ *
19
+ * export default {
20
+ * mixins: [Focus('inputRef')],
21
+ * template: '<input ref="inputRef" />'
22
+ * };
23
+ *
24
+ * // 调用聚焦
25
+ * this.focus(); // 自动聚焦到 ref="inputRef" 的元素
26
+ */
27
+ export default function(ref) {
28
+ return {
29
+ methods: {
30
+ /**
31
+ * 聚焦到指定 ref 元素
32
+ * @function focus
33
+ * @memberof module:mixins/focus
34
+ * @returns {void}
35
+ * @description 调用 this.$refs[ref].focus() 使目标元素获得焦点
36
+ */
37
+ focus() {
38
+ this.$refs[ref].focus();
39
+ }
40
+ }
41
+ };
42
+ };
@@ -0,0 +1,24 @@
1
+ import Vue from 'vue';
2
+
3
+ /**
4
+ * 简化版国际化方法
5
+ * 直接代理 Vue 实例的 $t 方法
6
+ */
7
+
8
+ export const t = function(path, options) {
9
+ // 直接调用 Vue 原生的 $t 方法
10
+ const vuei18n = (this ? Object.getPrototypeOf(this) : Vue.prototype).$t;
11
+
12
+ if (typeof vuei18n === 'function') {
13
+ return vuei18n.apply(this || Vue, arguments);
14
+ }
15
+
16
+ // 降级方案:返回路径本身或空字符串
17
+ return path || '';
18
+ };
19
+
20
+ export default {
21
+ methods: {
22
+ t
23
+ }
24
+ };