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
@@ -0,0 +1,76 @@
1
+ import { getCssVar } from './dom/index.js'
2
+
3
+ /**
4
+ * 添加颜色透明度, 并将十六进制色值转为 rgba 色值
5
+ * @param {String} colorName 颜色名称(基于MISP色卡, 如primary-blue) | 色值(#/rgb(a))
6
+ * @param {Number | String} [opacity] 透明度
7
+ * @returns {String} rgba 透明度色值
8
+ */
9
+ export function colorOpacityTrans(colorName, opacity = 1) {
10
+ // 从色卡中获取颜色色值
11
+ let colorStr = (typeof document !== 'undefined') ? getCssVar(document.documentElement, colorName) : ''
12
+ // 若颜色不存在色卡中, 直接使用原色值
13
+ if (!colorStr) colorStr = colorName
14
+
15
+ // 标准化 opacity
16
+ let opacityValue = parseFloat(opacity)
17
+ if (isNaN(opacityValue)) opacityValue = 1
18
+ opacityValue = Math.max(0, Math.min(1, opacityValue))
19
+
20
+ if (colorStr.startsWith('#')) {
21
+ return hexColorRender(colorStr, opacityValue);
22
+ } else if (colorStr.startsWith('rgb')) {
23
+ return rgbColorRender(colorStr, opacityValue);
24
+ } else {
25
+ // 不支持色彩空间转换, 非法色值, 直接返回原色值
26
+ return colorName
27
+ }
28
+ }
29
+
30
+ /**
31
+ * 处理十六进制颜色值并添加透明度
32
+ * @param {String} colorStr 十六进制颜色值
33
+ * @param {Number} opacity 透明度 (0-1)
34
+ * @returns {String} rgba 透明度色值
35
+ */
36
+ export function hexColorRender(colorStr, opacity) {
37
+ const hex = colorStr.replace(/^#/, '');
38
+ // 严格匹配合法的 3 位或 6 位十六进制颜色值
39
+ if (!/^[0-9a-fA-F]{3}$|^[0-9a-fA-F]{6}$/.test(hex)) return colorStr;
40
+
41
+ let hexGroups = [];
42
+ if (hex.length === 3) {
43
+ // 处理简写形式 #rgb -> #rrggbb
44
+ hexGroups = Array.from(hex).map(c => c + c);
45
+ } else if (hex.length === 6) {
46
+ hexGroups = hex.match(/.{2}/g); // 拆分 rgb, 每两个字符一组
47
+ } else {
48
+ return colorStr; // 长度既不是3也不是6,非法
49
+ }
50
+
51
+ const rgbValues = hexGroups.map(str => {
52
+ const num = parseInt(str, 16);
53
+ return isNaN(num) ? 0 : num;
54
+ });
55
+ return `rgba(${rgbValues.join(', ')}, ${opacity})`;
56
+ }
57
+
58
+ /**
59
+ * 处理 RGB 颜色值并添加透明度
60
+ * @param {String} colorStr RGB颜色值
61
+ * @param {Number} opacity 透明度 (0-1)
62
+ * @returns {String} rgba 透明度色值
63
+ */
64
+ export function rgbColorRender(colorStr, opacity) {
65
+ const match = colorStr.match(/^rgba?\(([^)]+)\)/)
66
+ if (!match) return colorStr
67
+
68
+ const values = match[1].split(',').map(v => v.trim())
69
+ if (values.length < 3) return colorStr // 非法 rgb 色值
70
+
71
+ const rgbValues = values.slice(0, 3).map(v => {
72
+ const num = parseInt(v, 10)
73
+ return isNaN(num) ? 0 : num
74
+ })
75
+ return `rgba(${rgbValues.join(', ')}, ${opacity})`
76
+ }
@@ -0,0 +1,421 @@
1
+ /**
2
+ * @fileoverview Vue2 UI Library - DOM 工具模块
3
+ * @description 提供 DOM 元素操作、事件绑定、样式处理、滚动检测等常用工具函数
4
+ * @module utils/dom
5
+ */
6
+
7
+ import Vue from 'vue';
8
+
9
+ const isServer = Vue.prototype.$isServer;
10
+ const SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
11
+ const MOZ_HACK_REGEXP = /^moz([A-Z])/;
12
+ const ieVersion = isServer ? 0 : Number(document.documentMode);
13
+
14
+ /**
15
+ * 去除字符串首尾空白字符
16
+ * @function trim
17
+ * @description 移除字符串开头和结尾的空格、换行符及 BOM 标记
18
+ * @param {String} string - 要处理的字符串
19
+ * @returns {String} 去除首尾空白后的字符串
20
+ */
21
+ const trim = function(string) {
22
+ return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, '');
23
+ };
24
+
25
+ /**
26
+ * 将连字符分隔的字符串转换为驼峰命名
27
+ * @function camelCase
28
+ * @description 处理连字符、下划线分隔的字符串,同时兼容 Mozilla 前缀转换
29
+ * @param {String} name - 要转换的字符串(如 kebab-case 格式)
30
+ * @returns {String} 驼峰命名格式的字符串
31
+ */
32
+ const camelCase = function(name) {
33
+ return name.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
34
+ return offset ? letter.toUpperCase() : letter;
35
+ }).replace(MOZ_HACK_REGEXP, 'Moz$1');
36
+ };
37
+
38
+ /**
39
+ * 绑定事件监听器
40
+ * @function on
41
+ * @memberof module:utils/dom
42
+ * @param {HTMLElement} element - 目标元素
43
+ * @param {String} event - 事件名称
44
+ * @param {Function} handler - 事件处理函数
45
+ * @description 兼容 IE8+ 和现代浏览器的事件绑定
46
+ * @returns {void}
47
+ */
48
+ export const on = (function() {
49
+ if (!isServer && document.addEventListener) {
50
+ return function(element, event, handler) {
51
+ if (element && event && handler) {
52
+ element.addEventListener(event, handler, false);
53
+ }
54
+ };
55
+ } else {
56
+ return function(element, event, handler) {
57
+ if (element && event && handler) {
58
+ element.attachEvent('on' + event, handler);
59
+ }
60
+ };
61
+ }
62
+ })();
63
+
64
+ /**
65
+ * 移除事件监听器
66
+ * @function off
67
+ * @memberof module:utils/dom
68
+ * @param {HTMLElement} element - 目标元素
69
+ * @param {String} event - 事件名称
70
+ * @param {Function} handler - 事件处理函数
71
+ * @description 兼容 IE8+ 和现代浏览器的事件解绑
72
+ * @returns {void}
73
+ */
74
+ export const off = (function() {
75
+ if (!isServer && document.removeEventListener) {
76
+ return function(element, event, handler) {
77
+ if (element && event) {
78
+ element.removeEventListener(event, handler, false);
79
+ }
80
+ };
81
+ } else {
82
+ return function(element, event, handler) {
83
+ if (element && event) {
84
+ element.detachEvent('on' + event, handler);
85
+ }
86
+ };
87
+ }
88
+ })();
89
+
90
+ /**
91
+ * 绑定一次性事件监听器
92
+ * @function once
93
+ * @memberof module:utils/dom
94
+ * @param {HTMLElement} el - 目标元素
95
+ * @param {String} event - 事件名称
96
+ * @param {Function} fn - 事件处理函数
97
+ * @description 事件触发后自动移除监听器
98
+ * @returns {void}
99
+ */
100
+ export const once = function(el, event, fn) {
101
+ var listener = function() {
102
+ if (fn) {
103
+ fn.apply(this, arguments);
104
+ }
105
+ off(el, event, listener);
106
+ };
107
+ on(el, event, listener);
108
+ };
109
+
110
+ /**
111
+ * 检查元素是否包含指定类名
112
+ * @function hasClass
113
+ * @memberof module:utils/dom
114
+ * @param {HTMLElement} el - 目标元素
115
+ * @param {String} cls - 类名
116
+ * @returns {Boolean} 是否包含该类名
117
+ * @throws {Error} 当类名包含空格时抛出错误
118
+ */
119
+ export function hasClass(el, cls) {
120
+ if (!el || !cls) return false;
121
+ if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');
122
+ if (el.classList) {
123
+ return el.classList.contains(cls);
124
+ } else {
125
+ return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;
126
+ }
127
+ };
128
+
129
+ /**
130
+ * 为元素添加类名
131
+ * @function addClass
132
+ * @memberof module:utils/dom
133
+ * @param {HTMLElement} el - 目标元素
134
+ * @param {String} cls - 要添加的类名(支持多个类名,空格分隔)
135
+ * @returns {void}
136
+ */
137
+ export function addClass(el, cls) {
138
+ if (!el) return;
139
+ var curClass = el.className;
140
+ var classes = (cls || '').split(' ');
141
+
142
+ for (var i = 0, j = classes.length; i < j; i++) {
143
+ var clsName = classes[i];
144
+ if (!clsName) continue;
145
+
146
+ if (el.classList) {
147
+ el.classList.add(clsName);
148
+ } else if (!hasClass(el, clsName)) {
149
+ curClass += ' ' + clsName;
150
+ }
151
+ }
152
+ if (!el.classList) {
153
+ el.setAttribute('class', curClass);
154
+ }
155
+ };
156
+
157
+ /**
158
+ * 从元素移除类名
159
+ * @function removeClass
160
+ * @memberof module:utils/dom
161
+ * @param {HTMLElement} el - 目标元素
162
+ * @param {String} cls - 要移除的类名(支持多个类名,空格分隔)
163
+ * @returns {void}
164
+ */
165
+ export function removeClass(el, cls) {
166
+ if (!el || !cls) return;
167
+ var classes = cls.split(' ');
168
+ var curClass = ' ' + el.className + ' ';
169
+
170
+ for (var i = 0, j = classes.length; i < j; i++) {
171
+ var clsName = classes[i];
172
+ if (!clsName) continue;
173
+
174
+ if (el.classList) {
175
+ el.classList.remove(clsName);
176
+ } else if (hasClass(el, clsName)) {
177
+ curClass = curClass.replace(' ' + clsName + ' ', ' ');
178
+ }
179
+ }
180
+ if (!el.classList) {
181
+ el.setAttribute('class', trim(curClass));
182
+ }
183
+ };
184
+
185
+ /**
186
+ * 获取元素的计算样式
187
+ * @function getStyle
188
+ * @memberof module:utils/dom
189
+ * @param {HTMLElement} element - 目标元素
190
+ * @param {String} styleName - 样式属性名
191
+ * @returns {String|null} 样式值
192
+ * @description 兼容 IE8+ 和现代浏览器,自动处理样式名前缀
193
+ */
194
+ export const getStyle = ieVersion < 9 ? function(element, styleName) {
195
+ if (isServer) return;
196
+ if (!element || !styleName) return null;
197
+ styleName = camelCase(styleName);
198
+ if (styleName === 'float') {
199
+ styleName = 'styleFloat';
200
+ }
201
+ try {
202
+ switch (styleName) {
203
+ case 'opacity':
204
+ try {
205
+ return element.filters.item('alpha').opacity / 100;
206
+ } catch (e) {
207
+ return 1.0;
208
+ }
209
+ default:
210
+ return (element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null);
211
+ }
212
+ } catch (e) {
213
+ return element.style[styleName];
214
+ }
215
+ } : function(element, styleName) {
216
+ if (isServer) return;
217
+ if (!element || !styleName) return null;
218
+ styleName = camelCase(styleName);
219
+ if (styleName === 'float') {
220
+ styleName = 'cssFloat';
221
+ }
222
+ try {
223
+ var computed = document.defaultView.getComputedStyle(element, '');
224
+ return element.style[styleName] || computed ? computed[styleName] : null;
225
+ } catch (e) {
226
+ return element.style[styleName];
227
+ }
228
+ };
229
+
230
+ /**
231
+ * 设置元素的样式
232
+ * @function setStyle
233
+ * @memberof module:utils/dom
234
+ * @param {HTMLElement} element - 目标元素
235
+ * @param {String|Object} styleName - 样式属性名或样式对象
236
+ * @param {*} [value] - 样式值(当 styleName 为字符串时需要)
237
+ * @returns {void}
238
+ * @description 支持批量设置样式(传入对象)或单个设置(传入字符串 + 值)
239
+ */
240
+ export function setStyle(element, styleName, value) {
241
+ if (!element || !styleName) return;
242
+
243
+ if (typeof styleName === 'object') {
244
+ for (var prop in styleName) {
245
+ if (styleName.hasOwnProperty(prop)) {
246
+ setStyle(element, prop, styleName[prop]);
247
+ }
248
+ }
249
+ } else {
250
+ styleName = camelCase(styleName);
251
+ if (styleName === 'opacity' && ieVersion < 9) {
252
+ element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')';
253
+ } else {
254
+ element.style[styleName] = value;
255
+ }
256
+ }
257
+ };
258
+
259
+ /**
260
+ * 获取 CSS 自定义属性(变量)的值
261
+ * @param {HTMLElement} element - 目标元素
262
+ * @param {String} varName - 变量名 (不带 -- 前缀)
263
+ * @returns {String}
264
+ */
265
+ export function getCssVar(element, varName) {
266
+ if (isServer) return '';
267
+ if (!element || !varName) return '';
268
+ return getComputedStyle(element).getPropertyValue(`--${varName}`).trim();
269
+ }
270
+
271
+ /**
272
+ * 检查元素是否可滚动
273
+ * @function isScroll
274
+ * @memberof module:utils/dom
275
+ * @param {HTMLElement} el - 目标元素
276
+ * @param {Boolean|null} vertical - 是否检查垂直方向
277
+ * @returns {RegExpMatchArray|null} 匹配结果
278
+ * @description 检查元素的 overflow 属性是否允许滚动
279
+ */
280
+ export const isScroll = (el, vertical) => {
281
+ if (isServer) return;
282
+
283
+ const determinedDirection = vertical !== null && vertical !== undefined;
284
+ const overflow = determinedDirection
285
+ ? vertical
286
+ ? getStyle(el, 'overflow-y')
287
+ : getStyle(el, 'overflow-x')
288
+ : getStyle(el, 'overflow');
289
+
290
+ return overflow.match(/(scroll|auto|overlay)/);
291
+ };
292
+
293
+ /**
294
+ * 获取滚动容器
295
+ * @function getScrollContainer
296
+ * @memberof module:utils/dom
297
+ * @param {HTMLElement} el - 目标元素
298
+ * @param {Boolean|null} vertical - 是否检查垂直方向
299
+ * @returns {HTMLElement|Window} 滚动容器元素或 window
300
+ * @description 向上查找最近的可滚动父元素
301
+ */
302
+ export const getScrollContainer = (el, vertical) => {
303
+ if (isServer) return;
304
+
305
+ let parent = el;
306
+ while (parent) {
307
+ if ([window, document, document.documentElement].includes(parent)) {
308
+ return window;
309
+ }
310
+ if (isScroll(parent, vertical)) {
311
+ return parent;
312
+ }
313
+ parent = parent.parentNode;
314
+ }
315
+
316
+ return parent;
317
+ };
318
+
319
+ /**
320
+ * 检查元素是否在容器内可见
321
+ * @function isInContainer
322
+ * @memberof module:utils/dom
323
+ * @param {HTMLElement} el - 目标元素
324
+ * @param {HTMLElement|Window} container - 容器元素
325
+ * @returns {Boolean} 是否可见
326
+ * @description 通过边界矩形检测元素是否与容器有重叠区域
327
+ */
328
+ export const isInContainer = (el, container) => {
329
+ if (isServer || !el || !container) return false;
330
+
331
+ const elRect = el.getBoundingClientRect();
332
+ let containerRect;
333
+
334
+ if ([window, document, document.documentElement, null, undefined].includes(container)) {
335
+ containerRect = {
336
+ top: 0,
337
+ right: window.innerWidth,
338
+ bottom: window.innerHeight,
339
+ left: 0
340
+ };
341
+ } else {
342
+ containerRect = container.getBoundingClientRect();
343
+ }
344
+
345
+ return elRect.top < containerRect.bottom &&
346
+ elRect.bottom > containerRect.top &&
347
+ elRect.right > containerRect.left &&
348
+ elRect.left < containerRect.right;
349
+ };
350
+
351
+ /**
352
+ * 将指定元素滚动到容器可视区域内
353
+ * @function scrollIntoView
354
+ * @memberof module:utils/dom
355
+ * @param {HTMLElement} container - 滚动容器元素
356
+ * @param {HTMLElement} [selected] - 需要滚动到的目标元素
357
+ * @returns {void}
358
+ * @description
359
+ * - 如果未提供目标元素,则将容器滚动到顶部。
360
+ * - 如果目标元素在可视区域上方,则滚动使其顶部对齐容器顶部。
361
+ * - 如果目标元素在可视区域下方,则滚动使其底部对齐容器底部。
362
+ * - 自动处理 offsetParent 链以计算准确的偏移量。
363
+ */
364
+ export function scrollIntoView(container, selected) {
365
+ if (Vue.prototype.$isServer) return;
366
+
367
+ if (!selected) {
368
+ container.scrollTop = 0;
369
+ return;
370
+ }
371
+
372
+ const offsetParents = [];
373
+ let pointer = selected.offsetParent;
374
+ while (pointer && container !== pointer && container.contains(pointer)) {
375
+ offsetParents.push(pointer);
376
+ pointer = pointer.offsetParent;
377
+ }
378
+ const top = selected.offsetTop + offsetParents.reduce((prev, curr) => (prev + curr.offsetTop), 0);
379
+ const bottom = top + selected.offsetHeight;
380
+ const viewRectTop = container.scrollTop;
381
+ const viewRectBottom = viewRectTop + container.clientHeight;
382
+
383
+ if (top < viewRectTop) {
384
+ container.scrollTop = top;
385
+ } else if (bottom > viewRectBottom) {
386
+ container.scrollTop = bottom - container.clientHeight;
387
+ }
388
+ }
389
+
390
+ /**
391
+ * 获取一段文本在给定字体大小下的宽度
392
+ * @param {string} text - 要测量的文本内容
393
+ * @param {string} font - CSS 字体字符串 (例如: '14px Arial', 'bold 12px sans-serif')
394
+ * @returns {number} 文本的像素宽度
395
+ */
396
+ export function getTextWidth(text, font) {
397
+ if (isServer) return 0;
398
+ if (!text) return 0;
399
+
400
+ // 创建临时元素
401
+ const span = document.createElement('span');
402
+
403
+ // 设置样式以确保测量准确
404
+ // white-space: nowrap 防止换行
405
+ // visibility: hidden 确保不可见
406
+ // position: absolute 确保不占据文档流空间
407
+ span.style.position = 'absolute';
408
+ span.style.visibility = 'hidden';
409
+ span.style.whiteSpace = 'nowrap';
410
+ span.style.font = font || getStyle(document.body, 'font'); // 如果未提供 font,使用 body 的默认字体
411
+ // 设置文本内容
412
+ span.textContent = text;
413
+ // 添加到 DOM 中以便计算
414
+ document.body.appendChild(span);
415
+ // 获取宽度
416
+ const width = span.offsetWidth;
417
+ // 移除临时元素
418
+ document.body.removeChild(span);
419
+
420
+ return width;
421
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @fileoverview Vue2 UI Library - 滚动条宽度计算工具
3
+ * @description 动态计算浏览器滚动条的宽度,用于处理弹出层、滚动容器等场景的布局问题
4
+ * @module utils/dom/scrollbar-width
5
+ */
6
+
7
+ import Vue from 'vue';
8
+
9
+ /**
10
+ * 滚动条宽度缓存值
11
+ * @type {Number|undefined}
12
+ */
13
+ let scrollBarWidth;
14
+
15
+ /**
16
+ * 计算浏览器滚动条宽度
17
+ * @function getScrollBarWidth
18
+ * @memberof module:utils/dom/scrollbar-width
19
+ * @returns {Number} 滚动条宽度(像素),服务端渲染时返回 0
20
+ * @description 通过创建临时 DOM 元素测量滚动条占用宽度,结果会被缓存以提高性能
21
+ * @example
22
+ * const width = getScrollBarWidth();
23
+ * console.log(width); // 输出:15(不同浏览器可能不同)
24
+ */
25
+ export default function () {
26
+ if (Vue.prototype.$isServer) return 0;
27
+ if (scrollBarWidth !== undefined) return scrollBarWidth;
28
+
29
+ const outer = document.createElement('div');
30
+ outer.className = 'el-scrollbar__wrap';
31
+ outer.style.visibility = 'hidden';
32
+ outer.style.width = '100px';
33
+ outer.style.position = 'absolute';
34
+ outer.style.top = '-9999px';
35
+ document.body.appendChild(outer);
36
+
37
+ const widthNoScroll = outer.offsetWidth;
38
+ outer.style.overflow = 'scroll';
39
+
40
+ const inner = document.createElement('div');
41
+ inner.style.width = '100%';
42
+ outer.appendChild(inner);
43
+
44
+ const widthWithScroll = inner.offsetWidth;
45
+ outer.parentNode.removeChild(outer);
46
+ scrollBarWidth = widthNoScroll - widthWithScroll;
47
+
48
+ return scrollBarWidth;
49
+ };