vue-devui 1.0.0-beta.18 → 1.0.0-beta.20220808

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 (404) hide show
  1. package/README.md +94 -118
  2. package/alert/index.es.js +74 -45
  3. package/alert/index.umd.js +1 -1
  4. package/alert/style.css +1 -1
  5. package/auto-complete/index.es.js +8395 -463
  6. package/auto-complete/index.umd.js +40 -1
  7. package/auto-complete/style.css +1 -1
  8. package/avatar/index.es.js +153 -146
  9. package/avatar/index.umd.js +1 -1
  10. package/avatar/style.css +1 -1
  11. package/badge/index.es.js +45 -20
  12. package/badge/index.umd.js +1 -1
  13. package/badge/style.css +1 -1
  14. package/button/index.es.js +5751 -156
  15. package/button/index.umd.js +27 -1
  16. package/button/style.css +1 -1
  17. package/card/index.es.js +63 -35
  18. package/card/index.umd.js +1 -1
  19. package/card/style.css +1 -1
  20. package/checkbox/index.es.js +8110 -278
  21. package/checkbox/index.umd.js +38 -1
  22. package/checkbox/style.css +1 -1
  23. package/{accordion → collapse}/index.d.ts +0 -0
  24. package/collapse/index.es.js +195 -0
  25. package/collapse/index.umd.js +1 -0
  26. package/{back-top → collapse}/package.json +1 -1
  27. package/collapse/style.css +1 -0
  28. package/countdown/index.es.js +60 -19
  29. package/countdown/index.umd.js +1 -1
  30. package/{anchor → date-picker-pro}/index.d.ts +0 -0
  31. package/date-picker-pro/index.es.js +12035 -0
  32. package/date-picker-pro/index.umd.js +38 -0
  33. package/date-picker-pro/package.json +7 -0
  34. package/date-picker-pro/style.css +1 -0
  35. package/drawer/index.es.js +191 -5756
  36. package/drawer/index.umd.js +1 -27
  37. package/drawer/style.css +1 -1
  38. package/dropdown/index.es.js +616 -415
  39. package/dropdown/index.umd.js +1 -1
  40. package/dropdown/style.css +1 -1
  41. package/editable-select/index.es.js +779 -211
  42. package/editable-select/index.umd.js +1 -1
  43. package/editable-select/style.css +1 -1
  44. package/form/index.es.js +2405 -2125
  45. package/form/index.umd.js +28 -17
  46. package/form/style.css +1 -1
  47. package/fullscreen/index.es.js +137 -134
  48. package/fullscreen/index.umd.js +1 -1
  49. package/fullscreen/style.css +1 -1
  50. package/grid/index.es.js +105 -103
  51. package/grid/index.umd.js +1 -1
  52. package/grid/style.css +1 -1
  53. package/icon/index.es.js +199 -56
  54. package/icon/index.umd.js +1 -1
  55. package/icon/style.css +1 -0
  56. package/image-preview/index.es.js +67 -54
  57. package/image-preview/index.umd.js +1 -1
  58. package/image-preview/style.css +1 -1
  59. package/input/index.es.js +8268 -144
  60. package/input/index.umd.js +38 -1
  61. package/input/style.css +1 -1
  62. package/input-number/index.es.js +260 -192
  63. package/input-number/index.umd.js +1 -1
  64. package/input-number/style.css +1 -1
  65. package/layout/index.es.js +40 -25
  66. package/layout/index.umd.js +1 -1
  67. package/layout/style.css +1 -1
  68. package/loading/index.es.js +86 -70
  69. package/loading/index.umd.js +1 -1
  70. package/loading/style.css +1 -1
  71. package/{back-top → mention}/index.d.ts +0 -0
  72. package/{color-picker → mention}/index.es.js +3036 -2898
  73. package/mention/index.umd.js +47 -0
  74. package/{anchor → mention}/package.json +1 -1
  75. package/mention/style.css +1 -0
  76. package/{breadcrumb → menu}/index.d.ts +0 -0
  77. package/menu/index.es.js +891 -0
  78. package/menu/index.umd.js +1 -0
  79. package/{toast → menu}/package.json +1 -1
  80. package/menu/style.css +1 -0
  81. package/{carousel → message}/index.d.ts +0 -0
  82. package/message/index.es.js +533 -0
  83. package/message/index.umd.js +1 -0
  84. package/{comment → message}/package.json +1 -1
  85. package/message/style.css +1 -0
  86. package/modal/index.es.js +602 -1061
  87. package/modal/index.umd.js +1 -1
  88. package/modal/style.css +1 -1
  89. package/{cascader → notification}/index.d.ts +0 -0
  90. package/notification/index.es.js +528 -0
  91. package/notification/index.umd.js +1 -0
  92. package/{accordion → notification}/package.json +1 -1
  93. package/notification/style.css +1 -0
  94. package/nuxt/components/ButtonGroup.js +3 -0
  95. package/nuxt/components/CheckboxButton.js +3 -0
  96. package/nuxt/components/CheckboxGroup.js +3 -0
  97. package/nuxt/components/Collapse.js +3 -0
  98. package/nuxt/components/CollapseItem.js +3 -0
  99. package/nuxt/components/DRangeDatePickerPro.js +3 -0
  100. package/nuxt/components/DatePickerPro.js +3 -0
  101. package/nuxt/components/DropdownMenu.js +3 -0
  102. package/nuxt/components/DropdownPropsKey.js +3 -0
  103. package/nuxt/components/FORM_ITEM_TOKEN.js +3 -0
  104. package/nuxt/components/FORM_TOKEN.js +3 -0
  105. package/nuxt/components/IFileOptions.js +3 -0
  106. package/nuxt/components/IUploadOptions.js +3 -0
  107. package/nuxt/components/Icon.js +1 -0
  108. package/nuxt/components/IconGroup.js +3 -0
  109. package/nuxt/components/LABEL_DATA.js +3 -0
  110. package/nuxt/components/LoadingOptions.js +3 -0
  111. package/nuxt/components/Mention.js +3 -0
  112. package/nuxt/components/Menu.js +3 -0
  113. package/nuxt/components/MenuItem.js +3 -0
  114. package/nuxt/components/Message.js +3 -0
  115. package/nuxt/components/Notification.js +3 -0
  116. package/nuxt/components/NotificationService.js +3 -0
  117. package/nuxt/components/Option.js +3 -0
  118. package/nuxt/components/OptionGroup.js +3 -0
  119. package/nuxt/components/PanelBody.js +3 -0
  120. package/nuxt/components/PanelFooter.js +3 -0
  121. package/nuxt/components/PanelHeader.js +3 -0
  122. package/nuxt/components/RadioButton.js +3 -0
  123. package/nuxt/components/Step.js +3 -0
  124. package/nuxt/components/Steps.js +3 -0
  125. package/nuxt/components/SubMenu.js +3 -0
  126. package/nuxt/components/TABLE_TOKEN.js +3 -0
  127. package/nuxt/components/Tab.js +3 -0
  128. package/nuxt/components/TimeSelect.js +3 -0
  129. package/nuxt/components/Timeline.js +3 -0
  130. package/nuxt/components/TimelineItem.js +3 -0
  131. package/nuxt/components/UploadStatus.js +3 -0
  132. package/nuxt/components/alertProps.js +3 -0
  133. package/nuxt/components/animationInjectionKey.js +3 -0
  134. package/nuxt/components/autoCompleteProps.js +3 -0
  135. package/nuxt/components/avatarProps.js +3 -0
  136. package/nuxt/components/badgeProps.js +3 -0
  137. package/nuxt/components/buttonGroupInjectionKey.js +3 -0
  138. package/nuxt/components/buttonGroupProps.js +3 -0
  139. package/nuxt/components/cardProps.js +3 -0
  140. package/nuxt/components/checkboxGroupInjectionKey.js +3 -0
  141. package/nuxt/components/checkboxGroupProps.js +3 -0
  142. package/nuxt/components/checkboxProps.js +3 -0
  143. package/nuxt/components/colProps.js +3 -0
  144. package/nuxt/components/colPropsBaseClass.js +3 -0
  145. package/nuxt/components/colPropsBaseStyle.js +3 -0
  146. package/nuxt/components/collapseItemProps.js +3 -0
  147. package/nuxt/components/collapseProps.js +3 -0
  148. package/nuxt/components/countdownProps.js +3 -0
  149. package/nuxt/components/datePickerProCommonProps.js +3 -0
  150. package/nuxt/components/datePickerProPanelProps.js +3 -0
  151. package/nuxt/components/datePickerProProps.js +3 -0
  152. package/nuxt/components/dropdownMenuProps.js +3 -0
  153. package/nuxt/components/editableSelectProps.js +3 -0
  154. package/nuxt/components/fixedOverlayProps.js +3 -0
  155. package/nuxt/components/flexibleOverlayProps.js +3 -0
  156. package/nuxt/components/formItemProps.js +3 -0
  157. package/nuxt/components/formProps.js +3 -0
  158. package/nuxt/components/fullscreenProps.js +3 -0
  159. package/nuxt/components/iconProps.js +3 -0
  160. package/nuxt/components/imagePreviewProps.js +3 -0
  161. package/nuxt/components/inputProps.js +3 -0
  162. package/nuxt/components/loadingProps.js +3 -0
  163. package/nuxt/components/mentionProps.js +3 -0
  164. package/nuxt/components/messageProps.js +3 -0
  165. package/nuxt/components/modalProps.js +3 -0
  166. package/nuxt/components/notificationProps.js +3 -0
  167. package/nuxt/components/paginationProps.js +3 -0
  168. package/nuxt/components/panelProps.js +3 -0
  169. package/nuxt/components/popoverProps.js +3 -0
  170. package/nuxt/components/progressProps.js +3 -0
  171. package/nuxt/components/rateProps.js +3 -0
  172. package/nuxt/components/resultProps.js +3 -0
  173. package/nuxt/components/roundInjectionKey.js +3 -0
  174. package/nuxt/components/rowProps.js +3 -0
  175. package/nuxt/components/screenSizes.js +3 -0
  176. package/nuxt/components/searchProps.js +3 -0
  177. package/nuxt/components/skeletonItemProps.js +3 -0
  178. package/nuxt/components/skeletonProps.js +3 -0
  179. package/nuxt/components/sliderProps.js +3 -0
  180. package/nuxt/components/splitterProps.js +3 -0
  181. package/nuxt/components/statisticProps.js +3 -0
  182. package/nuxt/components/stepProps.js +3 -0
  183. package/nuxt/components/stepsProps.js +3 -0
  184. package/nuxt/components/svgIconProps.js +3 -0
  185. package/nuxt/components/switchProps.js +3 -0
  186. package/nuxt/components/tableProps.js +3 -0
  187. package/nuxt/components/tabsProps.js +3 -0
  188. package/nuxt/components/tagProps.js +3 -0
  189. package/nuxt/components/textareaProps.js +3 -0
  190. package/nuxt/components/timeAxisProps.js +3 -0
  191. package/nuxt/components/timerPickerPanelProps.js +3 -0
  192. package/nuxt/components/tooltipProps.js +3 -0
  193. package/nuxt/components/treeNodeProps.js +3 -0
  194. package/nuxt/components/treeProps.js +3 -0
  195. package/nuxt/components/uploadProps.js +3 -0
  196. package/overlay/index.es.js +239 -314
  197. package/overlay/index.umd.js +1 -1
  198. package/overlay/style.css +1 -1
  199. package/package.json +44 -87
  200. package/pagination/index.es.js +331 -153
  201. package/pagination/index.umd.js +1 -1
  202. package/pagination/style.css +1 -1
  203. package/panel/index.es.js +45 -32
  204. package/panel/index.umd.js +1 -1
  205. package/panel/style.css +1 -1
  206. package/popover/index.es.js +6034 -215
  207. package/popover/index.umd.js +27 -1
  208. package/popover/style.css +1 -1
  209. package/progress/index.es.js +110 -56
  210. package/progress/index.umd.js +3 -3
  211. package/progress/style.css +1 -1
  212. package/radio/index.es.js +8013 -180
  213. package/radio/index.umd.js +38 -1
  214. package/radio/style.css +1 -1
  215. package/rate/index.es.js +77 -55
  216. package/rate/index.umd.js +1 -1
  217. package/rate/style.css +1 -1
  218. package/result/index.es.js +186 -57
  219. package/result/index.umd.js +1 -1
  220. package/result/style.css +1 -1
  221. package/ripple/index.es.js +52 -60
  222. package/ripple/index.umd.js +1 -1
  223. package/search/index.es.js +3885 -1152
  224. package/search/index.umd.js +29 -18
  225. package/search/style.css +1 -1
  226. package/select/index.es.js +9235 -516
  227. package/select/index.umd.js +38 -1
  228. package/select/style.css +1 -1
  229. package/skeleton/index.es.js +113 -265
  230. package/skeleton/index.umd.js +1 -1
  231. package/skeleton/style.css +1 -1
  232. package/slider/index.es.js +144 -137
  233. package/slider/index.umd.js +1 -1
  234. package/slider/style.css +1 -1
  235. package/splitter/index.es.js +6219 -232
  236. package/splitter/index.umd.js +27 -1
  237. package/splitter/style.css +1 -1
  238. package/statistic/index.es.js +41 -55
  239. package/statistic/index.umd.js +1 -1
  240. package/statistic/style.css +1 -1
  241. package/status/index.es.js +27 -6
  242. package/status/index.umd.js +1 -1
  243. package/status/style.css +1 -1
  244. package/{color-picker → steps}/index.d.ts +0 -0
  245. package/steps/index.es.js +386 -0
  246. package/steps/index.umd.js +1 -0
  247. package/{gantt → steps}/package.json +1 -1
  248. package/steps/style.css +1 -0
  249. package/style.css +1 -1
  250. package/switch/index.es.js +7818 -64
  251. package/switch/index.umd.js +38 -1
  252. package/switch/style.css +1 -1
  253. package/table/index.es.js +11109 -1451
  254. package/table/index.umd.js +38 -1
  255. package/table/style.css +1 -1
  256. package/tabs/index.es.js +356 -144
  257. package/tabs/index.umd.js +1 -1
  258. package/tabs/style.css +1 -1
  259. package/tag/index.es.js +49 -24
  260. package/tag/index.umd.js +1 -1
  261. package/tag/style.css +1 -1
  262. package/textarea/index.es.js +7940 -83
  263. package/textarea/index.umd.js +46 -1
  264. package/textarea/style.css +1 -1
  265. package/time-picker/index.es.js +8953 -632
  266. package/time-picker/index.umd.js +38 -1
  267. package/time-picker/style.css +1 -1
  268. package/{comment → time-select}/index.d.ts +0 -0
  269. package/time-select/index.es.js +9606 -0
  270. package/time-select/index.umd.js +38 -0
  271. package/{breadcrumb → time-select}/package.json +1 -1
  272. package/time-select/style.css +1 -0
  273. package/{date-picker → timeline}/index.d.ts +0 -0
  274. package/timeline/index.es.js +427 -0
  275. package/timeline/index.umd.js +1 -0
  276. package/{carousel → timeline}/package.json +1 -1
  277. package/timeline/style.css +1 -0
  278. package/tooltip/index.es.js +5871 -96
  279. package/tooltip/index.umd.js +27 -1
  280. package/tooltip/style.css +1 -1
  281. package/tree/index.es.js +7601 -2508
  282. package/tree/index.umd.js +29 -18
  283. package/tree/style.css +1 -1
  284. package/upload/index.es.js +849 -6143
  285. package/upload/index.umd.js +1 -27
  286. package/upload/style.css +1 -1
  287. package/vue-devui.es.js +20537 -19051
  288. package/vue-devui.umd.js +41 -19
  289. package/accordion/index.es.js +0 -508
  290. package/accordion/index.umd.js +0 -1
  291. package/accordion/style.css +0 -1
  292. package/anchor/index.es.js +0 -263
  293. package/anchor/index.umd.js +0 -1
  294. package/anchor/style.css +0 -1
  295. package/back-top/index.es.js +0 -128
  296. package/back-top/index.umd.js +0 -1
  297. package/back-top/style.css +0 -1
  298. package/breadcrumb/index.es.js +0 -127
  299. package/breadcrumb/index.umd.js +0 -1
  300. package/breadcrumb/style.css +0 -1
  301. package/carousel/index.es.js +0 -329
  302. package/carousel/index.umd.js +0 -1
  303. package/carousel/style.css +0 -1
  304. package/cascader/index.es.js +0 -5963
  305. package/cascader/index.umd.js +0 -27
  306. package/cascader/package.json +0 -7
  307. package/cascader/style.css +0 -1
  308. package/color-picker/index.umd.js +0 -27
  309. package/color-picker/package.json +0 -7
  310. package/color-picker/style.css +0 -1
  311. package/comment/index.es.js +0 -86
  312. package/comment/index.umd.js +0 -1
  313. package/comment/style.css +0 -1
  314. package/date-picker/index.es.js +0 -1171
  315. package/date-picker/index.umd.js +0 -1
  316. package/date-picker/package.json +0 -7
  317. package/date-picker/style.css +0 -1
  318. package/dragdrop/index.d.ts +0 -7
  319. package/dragdrop/index.es.js +0 -157
  320. package/dragdrop/index.umd.js +0 -1
  321. package/dragdrop/package.json +0 -7
  322. package/gantt/index.d.ts +0 -7
  323. package/gantt/index.es.js +0 -523
  324. package/gantt/index.umd.js +0 -1
  325. package/gantt/style.css +0 -1
  326. package/input-icon/index.d.ts +0 -7
  327. package/input-icon/index.es.js +0 -331
  328. package/input-icon/index.umd.js +0 -1
  329. package/input-icon/package.json +0 -7
  330. package/input-icon/style.css +0 -1
  331. package/nav-sprite/index.d.ts +0 -7
  332. package/nav-sprite/index.es.js +0 -68
  333. package/nav-sprite/index.umd.js +0 -1
  334. package/nav-sprite/package.json +0 -7
  335. package/nuxt/components/Accordion.js +0 -3
  336. package/nuxt/components/Anchor.js +0 -3
  337. package/nuxt/components/BackTop.js +0 -3
  338. package/nuxt/components/Breadcrumb.js +0 -3
  339. package/nuxt/components/Carousel.js +0 -3
  340. package/nuxt/components/CarouselItem.js +0 -3
  341. package/nuxt/components/Cascader.js +0 -3
  342. package/nuxt/components/ColorPicker.js +0 -3
  343. package/nuxt/components/Comment.js +0 -3
  344. package/nuxt/components/DatePicker.js +0 -3
  345. package/nuxt/components/FormControl.js +0 -3
  346. package/nuxt/components/FormLabel.js +0 -3
  347. package/nuxt/components/Gantt.js +0 -3
  348. package/nuxt/components/InputIcon.js +0 -3
  349. package/nuxt/components/NavSprite.js +0 -2
  350. package/nuxt/components/QuadrantDiagram.js +0 -3
  351. package/nuxt/components/ReadTip.js +0 -3
  352. package/nuxt/components/StepsGuide.js +0 -3
  353. package/nuxt/components/StickSlider.js +0 -3
  354. package/nuxt/components/Sticky.js +0 -2
  355. package/nuxt/components/TagInput.js +0 -3
  356. package/nuxt/components/TimeAxis.js +0 -3
  357. package/nuxt/components/TimeAxisItem.js +0 -3
  358. package/nuxt/components/Toast.js +0 -3
  359. package/nuxt/components/ToastService.js +0 -3
  360. package/nuxt/components/Transfer.js +0 -3
  361. package/nuxt/components/TreeSelect.js +0 -3
  362. package/quadrant-diagram/index.d.ts +0 -7
  363. package/quadrant-diagram/index.es.js +0 -5728
  364. package/quadrant-diagram/index.umd.js +0 -27
  365. package/quadrant-diagram/package.json +0 -7
  366. package/quadrant-diagram/style.css +0 -1
  367. package/read-tip/index.d.ts +0 -7
  368. package/read-tip/index.es.js +0 -258
  369. package/read-tip/index.umd.js +0 -1
  370. package/read-tip/package.json +0 -7
  371. package/read-tip/style.css +0 -1
  372. package/steps-guide/index.d.ts +0 -7
  373. package/steps-guide/index.es.js +0 -239
  374. package/steps-guide/index.umd.js +0 -1
  375. package/steps-guide/package.json +0 -7
  376. package/steps-guide/style.css +0 -1
  377. package/sticky/index.d.ts +0 -7
  378. package/sticky/index.es.js +0 -197
  379. package/sticky/index.umd.js +0 -1
  380. package/sticky/package.json +0 -7
  381. package/tag-input/index.d.ts +0 -7
  382. package/tag-input/index.es.js +0 -329
  383. package/tag-input/index.umd.js +0 -1
  384. package/tag-input/package.json +0 -7
  385. package/tag-input/style.css +0 -1
  386. package/time-axis/index.d.ts +0 -7
  387. package/time-axis/index.es.js +0 -299
  388. package/time-axis/index.umd.js +0 -1
  389. package/time-axis/package.json +0 -7
  390. package/time-axis/style.css +0 -1
  391. package/toast/index.d.ts +0 -7
  392. package/toast/index.es.js +0 -5918
  393. package/toast/index.umd.js +0 -27
  394. package/toast/style.css +0 -1
  395. package/transfer/index.d.ts +0 -7
  396. package/transfer/index.es.js +0 -7340
  397. package/transfer/index.umd.js +0 -27
  398. package/transfer/package.json +0 -7
  399. package/transfer/style.css +0 -1
  400. package/tree-select/index.d.ts +0 -7
  401. package/tree-select/index.es.js +0 -623
  402. package/tree-select/index.umd.js +0 -1
  403. package/tree-select/package.json +0 -7
  404. package/tree-select/style.css +0 -1
package/tabs/index.es.js CHANGED
@@ -1,195 +1,407 @@
1
- import { defineComponent, ref, reactive, provide, onUpdated, onBeforeMount, onMounted, createVNode, inject } from "vue";
1
+ import { toRefs, computed, defineComponent, shallowRef, reactive, inject, onUpdated, onBeforeMount, onMounted, watch, createVNode, resolveComponent, provide, mergeProps, onUnmounted } from "vue";
2
+ const tabsProps = {
3
+ modelValue: {
4
+ type: [String, Number],
5
+ default: null
6
+ },
7
+ type: {
8
+ type: String,
9
+ default: "tabs"
10
+ },
11
+ showContent: {
12
+ type: Boolean,
13
+ default: true
14
+ },
15
+ reactivable: {
16
+ type: Boolean,
17
+ default: true
18
+ },
19
+ customWidth: {
20
+ type: String,
21
+ default: ""
22
+ },
23
+ cssClass: {
24
+ type: String,
25
+ default: ""
26
+ },
27
+ beforeChange: {
28
+ type: Function,
29
+ default: null
30
+ },
31
+ closeable: {
32
+ type: Boolean,
33
+ default: false
34
+ },
35
+ addable: {
36
+ type: Boolean,
37
+ default: false
38
+ },
39
+ tabPosition: {
40
+ type: String,
41
+ default: "top"
42
+ }
43
+ };
2
44
  var tabs = "";
3
- var Tabs = defineComponent({
4
- name: "DTabs",
5
- props: {
6
- modelValue: {
7
- type: [String, Number],
8
- default: null
9
- },
10
- type: {
11
- type: String,
12
- default: "tabs"
13
- },
14
- showContent: {
15
- type: Boolean,
16
- default: true
17
- },
18
- vertical: {
19
- type: Boolean,
20
- default: false
21
- },
22
- reactivable: {
23
- type: Boolean,
24
- default: true
25
- },
26
- customWidth: {
27
- type: String,
28
- default: ""
29
- },
30
- cssClass: {
31
- type: String,
32
- default: ""
33
- },
34
- beforeChange: {
35
- type: Function,
36
- default: null
45
+ function createBem(namespace, element, modifier) {
46
+ let cls = namespace;
47
+ if (element) {
48
+ cls += `__${element}`;
49
+ }
50
+ if (modifier) {
51
+ cls += `--${modifier}`;
52
+ }
53
+ return cls;
54
+ }
55
+ function useNamespace(block, needDot = false) {
56
+ const namespace = needDot ? `.devui-${block}` : `devui-${block}`;
57
+ const b = () => createBem(namespace);
58
+ const e = (element) => element ? createBem(namespace, element) : "";
59
+ const m = (modifier) => modifier ? createBem(namespace, "", modifier) : "";
60
+ const em = (element, modifier) => element && modifier ? createBem(namespace, element, modifier) : "";
61
+ return {
62
+ b,
63
+ e,
64
+ m,
65
+ em
66
+ };
67
+ }
68
+ const ns$1 = useNamespace("tabs");
69
+ function useTabNavRender(props, data) {
70
+ const { cssClass, tabPosition, customWidth } = toRefs(props);
71
+ const ulClasses = computed(() => ({
72
+ [ns$1.e("nav")]: true,
73
+ [ns$1.em("nav", props.type)]: true,
74
+ [cssClass.value]: Boolean(cssClass.value),
75
+ [ns$1.em("nav", "top")]: tabPosition.value === "top",
76
+ [ns$1.em("nav", "right")]: tabPosition.value === "right",
77
+ [ns$1.em("nav", "bottom")]: tabPosition.value === "bottom",
78
+ [ns$1.em("nav", "left")]: tabPosition.value === "left"
79
+ }));
80
+ const aClasses = computed(() => ({
81
+ ["custom-width"]: Boolean(customWidth.value)
82
+ }));
83
+ const customStyle = {
84
+ width: props.customWidth ? props.customWidth : ""
85
+ };
86
+ const sliderAnimationStyle = computed(() => {
87
+ if (["top", "bottom"].includes(props.tabPosition)) {
88
+ return {
89
+ left: data.offsetLeft + "px",
90
+ width: data.offsetWidth + "px"
91
+ };
92
+ } else {
93
+ return {
94
+ top: data.offsetTop + "px",
95
+ height: data.offsetHeight + "px",
96
+ width: data.offsetWidth + "px"
97
+ };
37
98
  }
38
- },
39
- emits: ["update:modelValue", "activeTabChange"],
40
- setup(props, {
41
- emit,
42
- slots
43
- }) {
44
- const tabsEle = ref(null);
45
- const data = reactive({
46
- offsetLeft: 0,
47
- offsetWidth: 0,
48
- id: null
49
- });
50
- const state = reactive({
51
- data: [],
52
- active: props.modelValue,
53
- showContent: props.showContent,
54
- slots: []
55
- });
56
- provide("tabs", {
57
- state
58
- });
59
- const canChange = function(currentTab) {
60
- let changeResult = Promise.resolve(true);
61
- if (typeof props.beforeChange === "function") {
62
- const result = props.beforeChange(currentTab);
63
- if (typeof result !== "undefined") {
64
- if (result.then) {
65
- changeResult = result;
99
+ });
100
+ return { ulClasses, aClasses, customStyle, sliderAnimationStyle };
101
+ }
102
+ function useTabNavFunction(props, tabs2, data, ctx, tabsEle) {
103
+ const update = () => {
104
+ if (props.type === "slider") {
105
+ setTimeout(() => {
106
+ var _a;
107
+ const tabEle = (_a = tabsEle.value) == null ? void 0 : _a.querySelector("#" + props.modelValue + ".active");
108
+ if (tabEle && tabsEle.value) {
109
+ if (["top", "bottom"].includes(props.tabPosition)) {
110
+ data.offsetLeft = tabEle.getBoundingClientRect().left - tabsEle.value.getBoundingClientRect().left;
66
111
  } else {
67
- console.log(result);
68
- changeResult = Promise.resolve(result);
112
+ data.offsetTop = tabEle.getBoundingClientRect().top - tabsEle.value.getBoundingClientRect().top;
113
+ data.offsetHeight = tabEle.getBoundingClientRect().height;
69
114
  }
115
+ data.offsetWidth = tabEle.getBoundingClientRect().width;
116
+ }
117
+ });
118
+ }
119
+ };
120
+ const canChange = (currentTab) => {
121
+ let changeResult = Promise.resolve(true);
122
+ if (typeof props.beforeChange === "function") {
123
+ const result = props.beforeChange(currentTab);
124
+ if (typeof result !== "undefined") {
125
+ if (result.then) {
126
+ changeResult = result;
127
+ } else {
128
+ changeResult = Promise.resolve(result);
70
129
  }
71
130
  }
72
- return changeResult;
73
- };
74
- const activeClick = function(item, tabEl) {
75
- if (!props.reactivable && props.modelValue === item.id) {
131
+ }
132
+ return changeResult;
133
+ };
134
+ const activeClick = (item, tabEl) => {
135
+ if (!props.reactivable && props.modelValue === item.id) {
136
+ return;
137
+ }
138
+ canChange(item.id).then((change) => {
139
+ var _a, _b;
140
+ if (!change) {
76
141
  return;
77
142
  }
78
- canChange(item.id).then((change) => {
79
- if (!change) {
80
- return;
81
- }
82
- const tab = state.data.find((itemOption) => itemOption.id === item.id);
83
- if (tab && !tab.disabled) {
84
- state.active = item.id;
85
- emit("update:modelValue", tab.id);
86
- if (props.type === "slider" && tabEl && tabsEle) {
87
- this.offsetLeft = tabEl.getBoundingClientRect().left - this.tabsEle.nativeElement.getBoundingClientRect().left;
88
- this.offsetWidth = tabEl.getBoundingClientRect().width;
143
+ const tab2 = (_b = (_a = tabs2 == null ? void 0 : tabs2.state) == null ? void 0 : _a.data) == null ? void 0 : _b.find((itemOption) => itemOption.id === item.id);
144
+ if (tabs2 && tab2 && !tab2.disabled) {
145
+ tabs2.state.active = item.id;
146
+ if (props.type === "slider" && tabEl && tabsEle && tabsEle.value) {
147
+ if (["left", "right"].includes(props.tabPosition)) {
148
+ data.offsetLeft = tabEl.getBoundingClientRect().left - tabsEle.value.nativeElement.getBoundingClientRect().left;
149
+ } else {
150
+ data.offsetTop = tabEl.getBoundingClientRect().top - tabsEle.value.nativeElement.getBoundingClientRect().top;
151
+ data.offsetHeight = tabEl.getBoundingClientRect().height;
89
152
  }
90
- emit("activeTabChange", tab.id);
153
+ data.offsetWidth = tabEl.getBoundingClientRect().width;
91
154
  }
92
- });
93
- };
94
- const ulClass = [props.type];
95
- props.cssClass && ulClass.push(props.cssClass);
96
- props.vertical && ulClass.push("devui-nav-stacked");
97
- onUpdated(() => {
98
- if (props.type === "slider") {
99
- setTimeout(() => {
100
- const tabEle = tabsEle.value.querySelector("#" + props.modelValue + ".active");
101
- if (tabEle) {
102
- data.offsetLeft = tabEle.getBoundingClientRect().left - tabsEle.value.getBoundingClientRect().left;
103
- data.offsetWidth = tabEle.getBoundingClientRect().width;
104
- }
105
- });
155
+ ctx.emit("active-tab-change", tab2.id);
106
156
  }
107
157
  });
108
- onBeforeMount(() => {
109
- if (props.type !== "slider" && props.modelValue === void 0 && state.data.length > 0) {
110
- activeClick(state.data[0]);
111
- }
158
+ };
159
+ const beforeMount = () => {
160
+ if (props.type !== "slider" && props.modelValue === void 0 && (tabs2 == null ? void 0 : tabs2.state.data) && tabs2.state.data.length > 0) {
161
+ activeClick(tabs2.state.data[0]);
162
+ }
163
+ };
164
+ const mounted = () => {
165
+ var _a;
166
+ if (props.type === "slider" && props.modelValue === void 0 && (tabs2 == null ? void 0 : tabs2.state.data) && tabs2.state.data.length > 0 && tabs2.state.data[0]) {
167
+ const tabsStateData = tabs2.state.data[0];
168
+ const dom = (_a = tabsStateData.tabsEle) == null ? void 0 : _a.value;
169
+ const ele = dom == null ? void 0 : dom.getElementById(tabsStateData.tabId);
170
+ activeClick(ele);
171
+ }
172
+ };
173
+ const tabCanClose = (item) => {
174
+ return (props.closeable || item.closeable) && !item.disabled;
175
+ };
176
+ return { update, activeClick, beforeMount, mounted, tabCanClose };
177
+ }
178
+ function useTabNavEvent(ctx) {
179
+ const onTabRemove = (item, ev) => {
180
+ ev.stopPropagation();
181
+ ctx.emit("tab-remove", item, ev);
182
+ ctx.emit("tab-change", item.id, "delete");
183
+ };
184
+ const onTabAdd = () => {
185
+ ctx.emit("tab-add");
186
+ ctx.emit("tab-change", void 0, "add");
187
+ };
188
+ return { onTabRemove, onTabAdd };
189
+ }
190
+ var tabNav = "";
191
+ var TabNav = defineComponent({
192
+ name: "DTabNav",
193
+ props: tabsProps,
194
+ emits: ["active-tab-change", "tab-remove", "tab-add", "tab-change"],
195
+ setup(props, ctx) {
196
+ const ns2 = useNamespace("tabs");
197
+ const tabsEle = shallowRef();
198
+ const data = reactive({
199
+ offsetLeft: 0,
200
+ offsetWidth: 0,
201
+ offsetTop: 0,
202
+ offsetHeight: 0,
203
+ id: null
112
204
  });
113
- onMounted(() => {
114
- if (props.type === "slider" && props.modelValue === void 0 && state.data.length > 0 && state.data[0]) {
115
- activeClick(state.data[0].tabsEle.value.getElementById(state.data[0].tabId));
205
+ const tabs2 = inject("tabs");
206
+ const {
207
+ ulClasses,
208
+ aClasses,
209
+ customStyle,
210
+ sliderAnimationStyle
211
+ } = useTabNavRender(props, data);
212
+ const {
213
+ update,
214
+ beforeMount,
215
+ mounted,
216
+ activeClick,
217
+ tabCanClose
218
+ } = useTabNavFunction(props, tabs2, data, ctx, tabsEle);
219
+ const {
220
+ onTabRemove,
221
+ onTabAdd
222
+ } = useTabNavEvent(ctx);
223
+ onUpdated(() => update());
224
+ onBeforeMount(() => beforeMount());
225
+ onMounted(() => mounted());
226
+ watch(() => props.modelValue, () => {
227
+ var _a;
228
+ const tab2 = (_a = tabs2 == null ? void 0 : tabs2.state.data) == null ? void 0 : _a.find((item) => item.id === props.modelValue);
229
+ if (tab2) {
230
+ activeClick(tab2);
116
231
  }
117
232
  });
118
233
  return () => {
119
- return createVNode("div", null, [createVNode("ul", {
234
+ const closeIconEl = (item) => {
235
+ return tabCanClose(item) ? createVNode("span", {
236
+ "class": ns2.e("close-btn"),
237
+ "onClick": (ev) => onTabRemove(item, ev)
238
+ }, [createVNode(resolveComponent("d-icon"), {
239
+ "size": "12px",
240
+ "name": "error-o"
241
+ }, null)]) : null;
242
+ };
243
+ const newButton = props.addable ? createVNode("li", {
244
+ "class": ns2.e("new-tab"),
245
+ "onClick": onTabAdd
246
+ }, [createVNode(resolveComponent("d-icon"), {
247
+ "name": "add"
248
+ }, null)]) : null;
249
+ return createVNode("ul", {
120
250
  "ref": tabsEle,
121
251
  "role": "tablist",
122
- "class": `devui-nav devui-nav-${ulClass.join(" ")}`,
123
- "id": "devuiTabs11"
124
- }, [state.data.map((item, i) => {
252
+ "class": ulClasses.value
253
+ }, [((tabs2 == null ? void 0 : tabs2.state.data) || []).map((item, i) => {
254
+ var _a, _b;
125
255
  return createVNode("li", {
126
256
  "role": "presentation",
127
257
  "onClick": () => {
128
258
  activeClick(item);
129
259
  },
130
- "class": (props.modelValue === (item.id || item.tabId) ? "active" : "") + " " + (item.disabled ? "disabled" : ""),
260
+ "class": (props.modelValue === (item.id || item.tabId) ? "active" : "") + (item.disabled ? " disabled" : ""),
131
261
  "id": item.id || item.tabId
262
+ }, [createVNode("span", {
263
+ "class": ns2.e("nav-content")
132
264
  }, [createVNode("a", {
133
265
  "role": "tab",
134
266
  "data-toggle": item.id,
135
- "aria-expanded": props.modelValue === (item.id || item.tabId)
136
- }, [state.slots[i] ? state.slots[i]() : createVNode("span", null, [item.title])])]);
137
- }), createVNode("div", {
138
- "class": `devui-nav-${props.type}-animation`,
139
- "style": {
140
- left: data.offsetLeft + "px",
141
- width: data.offsetWidth + "px"
142
- }
143
- }, null)]), slots.default()]);
267
+ "aria-expanded": props.modelValue === (item.id || item.tabId),
268
+ "class": aClasses.value,
269
+ "style": customStyle
270
+ }, [(tabs2 == null ? void 0 : tabs2.state.slots[i]) ? (_b = (_a = tabs2.state.slots)[i]) == null ? void 0 : _b.call(_a) : createVNode("span", null, [item.title])]), closeIconEl(item)])]);
271
+ }), newButton, createVNode("div", {
272
+ "class": ns2.e(`nav-${props.type}-animation`),
273
+ "style": sliderAnimationStyle.value
274
+ }, null)]);
275
+ };
276
+ }
277
+ });
278
+ const ns = useNamespace("tabs");
279
+ function useTabsEvent(ctx) {
280
+ const onUpdateModelValue = (value) => {
281
+ ctx.emit("update:modelValue", value);
282
+ };
283
+ const onActiveTabChange = (value) => {
284
+ ctx.emit("active-tab-change", value);
285
+ };
286
+ const onTabRemove = (item, ev) => {
287
+ ctx.emit("tab-remove", item, ev);
288
+ };
289
+ const onTabAdd = () => {
290
+ ctx.emit("tab-add");
291
+ };
292
+ const onTabChange = (id, type) => {
293
+ ctx.emit("tab-change", id, type);
294
+ };
295
+ return { onUpdateModelValue, onActiveTabChange, onTabRemove, onTabAdd, onTabChange };
296
+ }
297
+ function useTabsRender(props) {
298
+ const tabsClasses = computed(() => ({
299
+ [ns.b()]: true,
300
+ [ns.m(props.tabPosition)]: true
301
+ }));
302
+ return { tabsClasses };
303
+ }
304
+ var Tabs = defineComponent({
305
+ name: "DTabs",
306
+ props: tabsProps,
307
+ emits: ["update:modelValue", "active-tab-change", "tab-remove", "tab-add", "tab-change"],
308
+ setup(props, ctx) {
309
+ const state = reactive({
310
+ data: [],
311
+ active: props.modelValue,
312
+ showContent: props.showContent,
313
+ slots: []
314
+ });
315
+ provide("tabs", {
316
+ state
317
+ });
318
+ const {
319
+ onUpdateModelValue,
320
+ onActiveTabChange,
321
+ onTabRemove,
322
+ onTabAdd,
323
+ onTabChange
324
+ } = useTabsEvent(ctx);
325
+ const {
326
+ tabsClasses
327
+ } = useTabsRender(props);
328
+ watch(() => state.active, () => {
329
+ onUpdateModelValue(state.active);
330
+ });
331
+ return () => {
332
+ var _a, _b;
333
+ const tabNav2 = createVNode(TabNav, mergeProps(props, {
334
+ "onActiveTabChange": onActiveTabChange,
335
+ "onTabRemove": onTabRemove,
336
+ "onTabAdd": onTabAdd,
337
+ "onTabChange": onTabChange
338
+ }), null);
339
+ const content = (_b = (_a = ctx.slots).default) == null ? void 0 : _b.call(_a);
340
+ return createVNode("div", {
341
+ "class": tabsClasses.value
342
+ }, [props.tabPosition === "bottom" ? [content, tabNav2] : [tabNav2, content], createVNode("div", {
343
+ "style": "clear: both"
344
+ }, null)]);
144
345
  };
145
346
  }
146
347
  });
348
+ const tabProps = {
349
+ title: {
350
+ type: [String, Number],
351
+ default: null
352
+ },
353
+ id: {
354
+ type: String,
355
+ default: null
356
+ },
357
+ disabled: {
358
+ type: Boolean,
359
+ default: false
360
+ },
361
+ closeable: {
362
+ type: Boolean,
363
+ default: false
364
+ }
365
+ };
366
+ var tab = "";
147
367
  var Tab = defineComponent({
148
368
  name: "DTab",
149
- props: {
150
- title: {
151
- default: null,
152
- type: [String, Number]
153
- },
154
- id: {
155
- default: null,
156
- type: String
157
- },
158
- disabled: {
159
- type: Boolean,
160
- default: false
161
- }
162
- },
369
+ props: tabProps,
163
370
  setup(props, {
164
371
  slots
165
372
  }) {
373
+ var _a;
166
374
  const tabs2 = inject("tabs");
167
- tabs2.state.slots.push(slots.dTabTitle);
168
- tabs2.state.data.push(props);
375
+ tabs2 == null ? void 0 : tabs2.state.slots.push(slots.title);
376
+ (_a = tabs2 == null ? void 0 : tabs2.state.data) == null ? void 0 : _a.push(props);
377
+ const ns2 = useNamespace("tab");
378
+ onUnmounted(() => {
379
+ var _a2;
380
+ if (tabs2) {
381
+ tabs2.state.data = (_a2 = tabs2.state.data) == null ? void 0 : _a2.filter((tab2) => tab2.id !== props.id);
382
+ }
383
+ });
169
384
  return () => {
385
+ var _a2;
170
386
  const {
171
387
  id
172
388
  } = props;
173
- const content = tabs2.state.showContent && tabs2.state.active === id ? createVNode("div", {
174
- "class": "devui-tab-content"
389
+ const content = (tabs2 == null ? void 0 : tabs2.state.showContent) && tabs2.state.active === id ? createVNode("div", {
390
+ "class": ns2.e("content")
175
391
  }, [createVNode("div", {
176
- "role": "tabpanel",
177
- "class": "devui-tab-pane in active"
178
- }, [slots.default()])]) : null;
392
+ "role": "tabpanel"
393
+ }, [(_a2 = slots.default) == null ? void 0 : _a2.call(slots)])]) : null;
179
394
  return content;
180
395
  };
181
396
  }
182
397
  });
183
- Tabs.install = function(app) {
184
- app.component(Tabs.name, Tabs);
185
- app.component(Tab.name, Tab);
186
- };
187
398
  var index = {
188
399
  title: "Tabs \u9009\u9879\u5361",
189
400
  category: "\u5BFC\u822A",
190
- status: "60%",
401
+ status: "100%",
191
402
  install(app) {
192
- app.use(Tabs);
403
+ app.component(Tabs.name, Tabs);
404
+ app.component(Tab.name, Tab);
193
405
  }
194
406
  };
195
- export { Tabs, index as default };
407
+ export { Tab, Tabs, index as default, tabsProps };
package/tabs/index.umd.js CHANGED
@@ -1 +1 @@
1
- (function(d,t){typeof exports=="object"&&typeof module!="undefined"?t(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],t):(d=typeof globalThis!="undefined"?globalThis:d||self,t(d.index={},d.Vue))})(this,function(d,t){"use strict";var m="",u=t.defineComponent({name:"DTabs",props:{modelValue:{type:[String,Number],default:null},type:{type:String,default:"tabs"},showContent:{type:Boolean,default:!0},vertical:{type:Boolean,default:!1},reactivable:{type:Boolean,default:!0},customWidth:{type:String,default:""},cssClass:{type:String,default:""},beforeChange:{type:Function,default:null}},emits:["update:modelValue","activeTabChange"],setup(e,{emit:f,slots:o}){const s=t.ref(null),c=t.reactive({offsetLeft:0,offsetWidth:0,id:null}),n=t.reactive({data:[],active:e.modelValue,showContent:e.showContent,slots:[]});t.provide("tabs",{state:n});const v=function(a){let l=Promise.resolve(!0);if(typeof e.beforeChange=="function"){const i=e.beforeChange(a);typeof i!="undefined"&&(i.then?l=i:(console.log(i),l=Promise.resolve(i)))}return l},b=function(a,l){!e.reactivable&&e.modelValue===a.id||v(a.id).then(i=>{if(!i)return;const r=n.data.find(C=>C.id===a.id);r&&!r.disabled&&(n.active=a.id,f("update:modelValue",r.id),e.type==="slider"&&l&&s&&(this.offsetLeft=l.getBoundingClientRect().left-this.tabsEle.nativeElement.getBoundingClientRect().left,this.offsetWidth=l.getBoundingClientRect().width),f("activeTabChange",r.id))})},g=[e.type];return e.cssClass&&g.push(e.cssClass),e.vertical&&g.push("devui-nav-stacked"),t.onUpdated(()=>{e.type==="slider"&&setTimeout(()=>{const a=s.value.querySelector("#"+e.modelValue+".active");a&&(c.offsetLeft=a.getBoundingClientRect().left-s.value.getBoundingClientRect().left,c.offsetWidth=a.getBoundingClientRect().width)})}),t.onBeforeMount(()=>{e.type!=="slider"&&e.modelValue===void 0&&n.data.length>0&&b(n.data[0])}),t.onMounted(()=>{e.type==="slider"&&e.modelValue===void 0&&n.data.length>0&&n.data[0]&&b(n.data[0].tabsEle.value.getElementById(n.data[0].tabId))}),()=>t.createVNode("div",null,[t.createVNode("ul",{ref:s,role:"tablist",class:`devui-nav devui-nav-${g.join(" ")}`,id:"devuiTabs11"},[n.data.map((a,l)=>t.createVNode("li",{role:"presentation",onClick:()=>{b(a)},class:(e.modelValue===(a.id||a.tabId)?"active":"")+" "+(a.disabled?"disabled":""),id:a.id||a.tabId},[t.createVNode("a",{role:"tab","data-toggle":a.id,"aria-expanded":e.modelValue===(a.id||a.tabId)},[n.slots[l]?n.slots[l]():t.createVNode("span",null,[a.title])])])),t.createVNode("div",{class:`devui-nav-${e.type}-animation`,style:{left:c.offsetLeft+"px",width:c.offsetWidth+"px"}},null)]),o.default()])}}),h=t.defineComponent({name:"DTab",props:{title:{default:null,type:[String,Number]},id:{default:null,type:String},disabled:{type:Boolean,default:!1}},setup(e,{slots:f}){const o=t.inject("tabs");return o.state.slots.push(f.dTabTitle),o.state.data.push(e),()=>{const{id:s}=e;return o.state.showContent&&o.state.active===s?t.createVNode("div",{class:"devui-tab-content"},[t.createVNode("div",{role:"tabpanel",class:"devui-tab-pane in active"},[f.default()])]):null}}});u.install=function(e){e.component(u.name,u),e.component(h.name,h)};var y={title:"Tabs \u9009\u9879\u5361",category:"\u5BFC\u822A",status:"60%",install(e){e.use(u)}};d.Tabs=u,d.default=y,Object.defineProperty(d,"__esModule",{value:!0}),d[Symbol.toStringTag]="Module"});
1
+ (function(b,n){typeof exports=="object"&&typeof module!="undefined"?n(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],n):(b=typeof globalThis!="undefined"?globalThis:b||self,n(b.index={},b.Vue))})(this,function(b,n){"use strict";const w={modelValue:{type:[String,Number],default:null},type:{type:String,default:"tabs"},showContent:{type:Boolean,default:!0},reactivable:{type:Boolean,default:!0},customWidth:{type:String,default:""},cssClass:{type:String,default:""},beforeChange:{type:Function,default:null},closeable:{type:Boolean,default:!1},addable:{type:Boolean,default:!1},tabPosition:{type:String,default:"top"}};var _="";function y(e,a,t){let s=e;return a&&(s+=`__${a}`),t&&(s+=`--${t}`),s}function p(e,a=!1){const t=a?`.devui-${e}`:`devui-${e}`;return{b:()=>y(t),e:o=>o?y(t,o):"",m:o=>o?y(t,"",o):"",em:(o,m)=>o&&m?y(t,o,m):""}}const h=p("tabs");function I(e,a){const{cssClass:t,tabPosition:s,customWidth:i}=n.toRefs(e),l=n.computed(()=>({[h.e("nav")]:!0,[h.em("nav",e.type)]:!0,[t.value]:Boolean(t.value),[h.em("nav","top")]:s.value==="top",[h.em("nav","right")]:s.value==="right",[h.em("nav","bottom")]:s.value==="bottom",[h.em("nav","left")]:s.value==="left"})),u=n.computed(()=>({["custom-width"]:Boolean(i.value)})),o={width:e.customWidth?e.customWidth:""},m=n.computed(()=>["top","bottom"].includes(e.tabPosition)?{left:a.offsetLeft+"px",width:a.offsetWidth+"px"}:{top:a.offsetTop+"px",height:a.offsetHeight+"px",width:a.offsetWidth+"px"});return{ulClasses:l,aClasses:u,customStyle:o,sliderAnimationStyle:m}}function $(e,a,t,s,i){const l=()=>{e.type==="slider"&&setTimeout(()=>{var c;const d=(c=i.value)==null?void 0:c.querySelector("#"+e.modelValue+".active");d&&i.value&&(["top","bottom"].includes(e.tabPosition)?t.offsetLeft=d.getBoundingClientRect().left-i.value.getBoundingClientRect().left:(t.offsetTop=d.getBoundingClientRect().top-i.value.getBoundingClientRect().top,t.offsetHeight=d.getBoundingClientRect().height),t.offsetWidth=d.getBoundingClientRect().width)})},u=d=>{let c=Promise.resolve(!0);if(typeof e.beforeChange=="function"){const r=e.beforeChange(d);typeof r!="undefined"&&(r.then?c=r:c=Promise.resolve(r))}return c},o=(d,c)=>{!e.reactivable&&e.modelValue===d.id||u(d.id).then(r=>{var V,B;if(!r)return;const g=(B=(V=a==null?void 0:a.state)==null?void 0:V.data)==null?void 0:B.find(v=>v.id===d.id);a&&g&&!g.disabled&&(a.state.active=d.id,e.type==="slider"&&c&&i&&i.value&&(["left","right"].includes(e.tabPosition)?t.offsetLeft=c.getBoundingClientRect().left-i.value.nativeElement.getBoundingClientRect().left:(t.offsetTop=c.getBoundingClientRect().top-i.value.nativeElement.getBoundingClientRect().top,t.offsetHeight=c.getBoundingClientRect().height),t.offsetWidth=c.getBoundingClientRect().width),s.emit("active-tab-change",g.id))})};return{update:l,activeClick:o,beforeMount:()=>{e.type!=="slider"&&e.modelValue===void 0&&(a==null?void 0:a.state.data)&&a.state.data.length>0&&o(a.state.data[0])},mounted:()=>{var d;if(e.type==="slider"&&e.modelValue===void 0&&(a==null?void 0:a.state.data)&&a.state.data.length>0&&a.state.data[0]){const c=a.state.data[0],r=(d=c.tabsEle)==null?void 0:d.value,g=r==null?void 0:r.getElementById(c.tabId);o(g)}},tabCanClose:d=>(e.closeable||d.closeable)&&!d.disabled}}function U(e){return{onTabRemove:(s,i)=>{i.stopPropagation(),e.emit("tab-remove",s,i),e.emit("tab-change",s.id,"delete")},onTabAdd:()=>{e.emit("tab-add"),e.emit("tab-change",void 0,"add")}}}var F="",j=n.defineComponent({name:"DTabNav",props:w,emits:["active-tab-change","tab-remove","tab-add","tab-change"],setup(e,a){const t=p("tabs"),s=n.shallowRef(),i=n.reactive({offsetLeft:0,offsetWidth:0,offsetTop:0,offsetHeight:0,id:null}),l=n.inject("tabs"),{ulClasses:u,aClasses:o,customStyle:m,sliderAnimationStyle:C}=I(e,i),{update:T,beforeMount:d,mounted:c,activeClick:r,tabCanClose:g}=$(e,l,i,a,s),{onTabRemove:V,onTabAdd:B}=U(a);return n.onUpdated(()=>T()),n.onBeforeMount(()=>d()),n.onMounted(()=>c()),n.watch(()=>e.modelValue,()=>{var N;const v=(N=l==null?void 0:l.state.data)==null?void 0:N.find(f=>f.id===e.modelValue);v&&r(v)}),()=>{const v=f=>g(f)?n.createVNode("span",{class:t.e("close-btn"),onClick:R=>V(f,R)},[n.createVNode(n.resolveComponent("d-icon"),{size:"12px",name:"error-o"},null)]):null,N=e.addable?n.createVNode("li",{class:t.e("new-tab"),onClick:B},[n.createVNode(n.resolveComponent("d-icon"),{name:"add"},null)]):null;return n.createVNode("ul",{ref:s,role:"tablist",class:u.value},[((l==null?void 0:l.state.data)||[]).map((f,R)=>{var M,W;return n.createVNode("li",{role:"presentation",onClick:()=>{r(f)},class:(e.modelValue===(f.id||f.tabId)?"active":"")+(f.disabled?" disabled":""),id:f.id||f.tabId},[n.createVNode("span",{class:t.e("nav-content")},[n.createVNode("a",{role:"tab","data-toggle":f.id,"aria-expanded":e.modelValue===(f.id||f.tabId),class:o.value,style:m},[l!=null&&l.state.slots[R]?(W=(M=l.state.slots)[R])==null?void 0:W.call(M):n.createVNode("span",null,[f.title])]),v(f)])])}),N,n.createVNode("div",{class:t.e(`nav-${e.type}-animation`),style:C.value},null)])}}});const A=p("tabs");function k(e){return{onUpdateModelValue:u=>{e.emit("update:modelValue",u)},onActiveTabChange:u=>{e.emit("active-tab-change",u)},onTabRemove:(u,o)=>{e.emit("tab-remove",u,o)},onTabAdd:()=>{e.emit("tab-add")},onTabChange:(u,o)=>{e.emit("tab-change",u,o)}}}function D(e){return{tabsClasses:n.computed(()=>({[A.b()]:!0,[A.m(e.tabPosition)]:!0}))}}var P=n.defineComponent({name:"DTabs",props:w,emits:["update:modelValue","active-tab-change","tab-remove","tab-add","tab-change"],setup(e,a){const t=n.reactive({data:[],active:e.modelValue,showContent:e.showContent,slots:[]});n.provide("tabs",{state:t});const{onUpdateModelValue:s,onActiveTabChange:i,onTabRemove:l,onTabAdd:u,onTabChange:o}=k(a),{tabsClasses:m}=D(e);return n.watch(()=>t.active,()=>{s(t.active)}),()=>{var d,c;const C=n.createVNode(j,n.mergeProps(e,{onActiveTabChange:i,onTabRemove:l,onTabAdd:u,onTabChange:o}),null),T=(c=(d=a.slots).default)==null?void 0:c.call(d);return n.createVNode("div",{class:m.value},[e.tabPosition==="bottom"?[T,C]:[C,T],n.createVNode("div",{style:"clear: both"},null)])}}});const H={title:{type:[String,Number],default:null},id:{type:String,default:null},disabled:{type:Boolean,default:!1},closeable:{type:Boolean,default:!1}};var q="",S=n.defineComponent({name:"DTab",props:H,setup(e,{slots:a}){var i;const t=n.inject("tabs");t==null||t.state.slots.push(a.title),(i=t==null?void 0:t.state.data)==null||i.push(e);const s=p("tab");return n.onUnmounted(()=>{var l;t&&(t.state.data=(l=t.state.data)==null?void 0:l.filter(u=>u.id!==e.id))}),()=>{var o;const{id:l}=e;return(t==null?void 0:t.state.showContent)&&t.state.active===l?n.createVNode("div",{class:s.e("content")},[n.createVNode("div",{role:"tabpanel"},[(o=a.default)==null?void 0:o.call(a)])]):null}}}),L={title:"Tabs \u9009\u9879\u5361",category:"\u5BFC\u822A",status:"100%",install(e){e.component(P.name,P),e.component(S.name,S)}};b.Tab=S,b.Tabs=P,b.default=L,b.tabsProps=w,Object.defineProperties(b,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/tabs/style.css CHANGED
@@ -1 +1 @@
1
- :host{display:block}.devui-nav-tabs,.devui-nav-pills{font-size:var(--devui-font-size, 12px);background:transparent;font-weight:700;list-style:none}.devui-nav-tabs li,.devui-nav-pills li{cursor:pointer;border:2px solid transparent}.devui-nav-tabs li a,.devui-nav-pills li a{cursor:pointer;border:none;line-height:30px;background-color:transparent;padding:0;text-decoration:none;color:var(--devui-text, #252b3a)}.devui-nav-tabs li a:hover,.devui-nav-tabs li a:focus,.devui-nav-tabs li a:active,.devui-nav-pills li a:hover,.devui-nav-pills li a:focus,.devui-nav-pills li a:active{outline:none}.devui-nav-tabs li.disabled a,.devui-nav-pills li.disabled a{color:var(--devui-disabled-text, #adb0b8);cursor:not-allowed}.devui-nav-tabs li.active a,.devui-nav-tabs li:hover:not(.disabled) a,.devui-nav-pills li.active a,.devui-nav-pills li:hover:not(.disabled) a{color:var(--devui-brand, #5e7ce0)}.devui-nav-tabs li:after,.devui-nav-pills li:after{content:"";display:block;margin:auto;height:2px;width:0;background:transparent;transition:width .3s ease-out,background-color .3s ease-out}.devui-nav-tabs li.active:after,.devui-nav-pills li.active:after{width:100%;background:var(--devui-brand, #5e7ce0)}.devui-nav-options{font-size:var(--devui-font-size, 12px);background:transparent;border:none;border-radius:var(--devui-border-radius, 2px)}.devui-nav-options>li{cursor:pointer;border:1px solid var(--devui-line, #adb0b8);border-left-width:0;background-color:var(--devui-base-bg, #ffffff);float:left}.devui-nav-options>li:first-child{border-left-width:1px;border-radius:var(--devui-border-radius, 2px) 0 0 var(--devui-border-radius, 2px)}.devui-nav-options>li:last-child{border-radius:0 var(--devui-border-radius, 2px) var(--devui-border-radius, 2px) 0}.devui-nav-options>li>a{cursor:pointer;border:none;color:var(--devui-text, #252b3a);line-height:26px;padding:0 15px}.devui-nav-options>li>a:hover,.devui-nav-options>li>a:focus,.devui-nav-options>li>a:active{outline:none}.devui-nav-options>li.disabled{border-color:var(--devui-disabled-line, #dfe1e6)}.devui-nav-options>li.disabled a{color:var(--devui-disabled-text, #adb0b8);cursor:not-allowed}.devui-nav-options>li.active>a,.devui-nav-options>li:hover:not(.disabled)>a{color:var(--devui-light-text, #ffffff)}.devui-nav-options>li.active>a:hover,.devui-nav-options>li:hover:not(.disabled)>a:hover{color:var(--devui-light-text, #ffffff);background:transparent}.devui-nav-options>li.active{background-color:var(--devui-brand, #5e7ce0);border-color:var(--devui-brand, #5e7ce0)}.devui-nav-options>li.active:not(:first-child):before{background-color:var(--devui-brand, #5e7ce0)}.devui-nav-options>li.active+li:before{background-color:var(--devui-brand, #5e7ce0)}.devui-nav-options>li:hover:not(.active):not(.disabled){background-color:var(--devui-brand-active, #526ecc);border-color:var(--devui-brand-active, #526ecc)}.devui-nav-options>li:hover:not(.active):not(.disabled):not(:first-child):before{background-color:var(--devui-brand-active, #526ecc)}.devui-nav-slider{font-size:var(--devui-font-size, 12px);border:none;border-radius:var(--devui-border-radius, 2px);background:var(--devui-list-item-hover-bg, #f2f5fc);width:fit-content;display:flex!important;align-items:center;position:relative}.devui-nav-slider>li{cursor:pointer;margin:2px;float:left;position:relative;z-index:1}.devui-nav-slider>li:first-child{border-left-width:1px;border-radius:var(--devui-border-radius, 2px) 0 0 var(--devui-border-radius, 2px)}.devui-nav-slider>li:last-child{border-radius:0 var(--devui-border-radius, 2px) var(--devui-border-radius, 2px) 0}.devui-nav-slider>li a{cursor:pointer;border:none;color:var(--devui-text, #252b3a);line-height:28px;padding:0 15px}.devui-nav-slider>li a:hover,.devui-nav-slider>li a:focus,.devui-nav-slider>li a:active{outline:none}.devui-nav-slider>li.disabled{border-color:var(--devui-disabled-line, #dfe1e6)}.devui-nav-slider>li.disabled a{color:var(--devui-disabled-text, #adb0b8);cursor:not-allowed}.devui-nav-slider>li.active a,.devui-nav-slider>li:hover:not(.disabled) a{color:var(--devui-brand-active, #526ecc)}.devui-nav-slider>li.active a:hover,.devui-nav-slider>li:hover:not(.disabled) a:hover{color:var(--devui-brand-active, #526ecc);background:transparent}.devui-nav-slider>li.active:not(:first-child):before,.devui-nav-slider>li:hover:not(.disabled):not(:first-child):before{content:"";display:block;top:-1px;left:-1px;width:1px;height:"calc(100% + 2px)";position:absolute}.devui-nav-slider>li.active{text-shadow:0 0 .7px var(--devui-brand, #5e7ce0)}.devui-nav-slider>li.active:not(:first-child):before{background-color:var(--devui-brand, #5e7ce0)}.devui-nav-slider>li.active+li:before{background-color:var(--devui-brand, #5e7ce0)}.devui-nav-slider>li:hover:not(.active):not(.disabled){color:var(--devui-brand-active, #526ecc)}.devui-nav-slider>li:hover:not(.active):not(.disabled):not(:first-child):before{background-color:var(--devui-brand-active, #526ecc)}.devui-nav-wrapped{font-size:var(--devui-font-size, 12px);background:transparent;border-bottom:1px solid var(--devui-dividing-line, #dfe1e6);background-color:var(--devui-base-bg, #ffffff)}.devui-nav-wrapped>li{cursor:pointer;float:left;position:relative;padding:8px 16px}.devui-nav-wrapped>li a{cursor:pointer;border:none;color:var(--devui-text, #252b3a);border-radius:var(--devui-border-radius, 2px) var(--devui-border-radius, 2px) 0 0}.devui-nav-wrapped>li a:hover,.devui-nav-wrapped>li a:focus,.devui-nav-wrapped>li a:active{outline:none}.devui-nav-wrapped>li.disabled{border-color:var(--devui-disabled-line, #dfe1e6)}.devui-nav-wrapped>li.disabled a{color:var(--devui-disabled-text, #adb0b8);cursor:not-allowed}.devui-nav-wrapped>li.active{border:1px solid var(--devui-dividing-line, #dfe1e6);background:var(--devui-global-bg, #f3f6f8);border-radius:var(--devui-border-radius, 2px) var(--devui-border-radius, 2px) 0 0;font-weight:700;margin:-1px;border-bottom-color:transparent}.devui-nav-wrapped>li.active a{color:var(--devui-brand-active, #526ecc)}.devui-nav-wrapped>li:hover:not(.active):not(.disabled) a{color:var(--devui-brand, #5e7ce0)}.devui-nav{list-style:none;padding-left:0}.devui-nav li a{text-decoration:none}.devui-nav li a.custom-width{display:inline-block;padding:0;text-align:center}.devui-nav-tabs:not(.devui-nav-stacked){border-bottom:1px var(--devui-line, #adb0b8) solid}.devui-nav-tabs:not(.devui-nav-stacked) li{float:left;margin-left:32px;margin-bottom:-3px}.devui-nav-tabs:not(.devui-nav-stacked) li:first-child{margin-left:0}.devui-nav-pills:not(.devui-nav-stacked)>li{float:left;margin-left:32px}.devui-nav-pills:not(.devui-nav-stacked)>li:first-child{margin-left:0}.devui-nav:before,.devui-nav:after{content:" ";display:table}.devui-nav:after{clear:both}.devui-tab-content{margin-top:20px}.devui-nav-slider-animation{position:absolute;z-index:0;background-color:var(--devui-base-bg, #ffffff);border-radius:var(--devui-border-radius, 2px);box-shadow:0 2px 4px 0 var(--devui-light-shadow, rgba(0, 0, 0, .1));top:1px;height:30px;transition:left .3s cubic-bezier(.645,.045,.355,1),width .3s cubic-bezier(.645,.045,.355,1)}
1
+ :host{display:block}.devui-tabs__nav--tabs,.devui-tabs__nav--pills{font-size:var(--devui-font-size, 14px);background:transparent;list-style:none}.devui-tabs__nav--tabs li,.devui-tabs__nav--pills li{cursor:pointer;border:2px solid transparent}.devui-tabs__nav--tabs li a,.devui-tabs__nav--pills li a{cursor:pointer;border:none;line-height:30px;background-color:transparent;padding:0;text-decoration:none;color:var(--devui-aide-text, #71757f)}.devui-tabs__nav--tabs li a:hover,.devui-tabs__nav--tabs li a:focus,.devui-tabs__nav--tabs li a:active,.devui-tabs__nav--pills li a:hover,.devui-tabs__nav--pills li a:focus,.devui-tabs__nav--pills li a:active{outline:none}.devui-tabs__nav--tabs li.disabled a,.devui-tabs__nav--pills li.disabled a{color:var(--devui-disabled-text, #adb0b8);cursor:not-allowed}.devui-tabs__nav--tabs li.active a,.devui-tabs__nav--tabs li:hover:not(.disabled) a,.devui-tabs__nav--pills li.active a,.devui-tabs__nav--pills li:hover:not(.disabled) a{color:var(--devui-brand, #5e7ce0)}.devui-tabs__nav--tabs li:after,.devui-tabs__nav--pills li:after{content:"";display:block;margin:auto;height:2px;width:0;background:transparent;transition:width var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95)),background-color var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95))}.devui-tabs__nav--tabs li.active:after,.devui-tabs__nav--pills li.active:after{width:100%;background:var(--devui-brand, #5e7ce0)}.devui-tabs__nav--tabs .devui-tabs__new-tab,.devui-tabs__nav--pills .devui-tabs__new-tab{padding:2px 0 0}.devui-tabs__nav--options{background:var(--devui-base-bg, #ffffff);border:1px solid var(--devui-dividing-line, #f2f2f3);border-radius:var(--devui-border-radius, 4px);padding:2px;width:fit-content}.devui-tabs__nav--options>li{cursor:pointer;background-color:var(--devui-base-bg, #ffffff);border-radius:var(--devui-border-radius, 4px);transition:background-color var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95)),text-shadow var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95))}.devui-tabs__nav--options>li span>a{border:none;color:var(--devui-aide-text, #71757f);line-height:26px;padding:0 16px}.devui-tabs__nav--options>li span>a:hover,.devui-tabs__nav--options>li span>a:focus,.devui-tabs__nav--options>li span>a:active{outline:none}.devui-tabs__nav--options>li.active{background-color:var(--devui-brand-foil, #f2f2f3)}.devui-tabs__nav--options>li.active span>a{color:var(--devui-brand, #5e7ce0);padding:0 16px}.devui-tabs__nav--options>li.disabled{border-color:var(--devui-disabled-line, #dfe1e6)}.devui-tabs__nav--options>li.disabled a{color:var(--devui-disabled-text, #adb0b8);cursor:not-allowed}.devui-tabs__nav--options>li.active span>a:hover,.devui-tabs__nav--options>li:hover:not(.disabled) span>a:hover{color:var(--devui-brand, #5e7ce0);background:transparent}.devui-tabs__nav--options .devui-tabs__close-btn{margin-right:12px}.devui-tabs__nav--options .devui-tabs__new-tab{padding:2px 16px 0}.devui-tabs__nav--slider{font-size:var(--devui-font-size, 14px);border:none;border-radius:var(--devui-border-radius, 4px);background:var(--devui-list-item-hover-bg, #f2f2f3);width:fit-content;display:flex;align-items:center;position:relative}.devui-tabs__nav--slider>li{cursor:pointer;margin:2px;position:relative;z-index:1}.devui-tabs__nav--slider>li:first-child{border-left-width:1px;border-radius:var(--devui-border-radius, 4px) 0 0 var(--devui-border-radius, 4px)}.devui-tabs__nav--slider>li:last-child{border-radius:0 var(--devui-border-radius, 4px) var(--devui-border-radius, 4px) 0}.devui-tabs__nav--slider>li a{cursor:pointer;border:none;color:var(--devui-aide-text, #71757f);line-height:28px;padding:0 16px}.devui-tabs__nav--slider>li a:hover,.devui-tabs__nav--slider>li a:focus,.devui-tabs__nav--slider>li a:active{outline:none}.devui-tabs__nav--slider>li.disabled{border-color:var(--devui-disabled-line, #dfe1e6)}.devui-tabs__nav--slider>li.disabled a{color:var(--devui-disabled-text, #adb0b8);cursor:not-allowed}.devui-tabs__nav--slider>li.active a,.devui-tabs__nav--slider>li:hover:not(.disabled) a{color:var(--devui-brand-active, #526ecc)}.devui-tabs__nav--slider>li.active a:hover,.devui-tabs__nav--slider>li:hover:not(.disabled) a:hover{color:var(--devui-brand-active, #526ecc);background:transparent}.devui-tabs__nav--slider>li.active{text-shadow:0 0 .7px var(--devui-brand, #5e7ce0)}.devui-tabs__nav--slider>li:hover:not(.active):not(.disabled){color:var(--devui-brand-active, #526ecc)}.devui-tabs__nav--slider .devui-tabs__close-btn{margin-right:12px}.devui-tabs__nav--slider .devui-tabs__new-tab{padding:2px 16px 0}.devui-tabs__nav--wrapped{font-size:var(--devui-font-size, 14px);background:transparent;border-bottom:1px solid var(--devui-dividing-line, #f2f2f3);background-color:var(--devui-base-bg, #ffffff)}.devui-tabs__nav--wrapped>li{cursor:pointer;position:relative;padding:8px 16px}.devui-tabs__nav--wrapped>li a{cursor:pointer;border:none;color:var(--devui-aide-text, #71757f);border-radius:var(--devui-border-radius, 4px) var(--devui-border-radius, 4px) 0 0}.devui-tabs__nav--wrapped>li a:hover,.devui-tabs__nav--wrapped>li a:focus,.devui-tabs__nav--wrapped>li a:active{outline:none}.devui-tabs__nav--wrapped>li.disabled{border-color:var(--devui-disabled-line, #dfe1e6)}.devui-tabs__nav--wrapped>li.disabled a{color:var(--devui-disabled-text, #adb0b8);cursor:not-allowed}.devui-tabs__nav--wrapped>li.active{border:1px solid var(--devui-dividing-line, #f2f2f3);background:var(--devui-global-bg, #f8f8fa);border-radius:var(--devui-border-radius, 4px) var(--devui-border-radius, 4px) 0 0;margin:-1px;border-bottom-color:transparent}.devui-tabs__nav--wrapped>li.active a{color:var(--devui-brand-active, #526ecc)}.devui-tabs__nav--wrapped>li:hover:not(.active):not(.disabled) a{color:var(--devui-brand, #5e7ce0)}.devui-tabs__nav--tabs{border-bottom:1px var(--devui-line, #d7d8da) solid}.devui-tabs__nav--tabs li{margin-left:32px;margin-bottom:-3px}.devui-tabs__nav--tabs li:first-child{margin-left:0}.devui-tabs__nav--pills>li{margin-left:32px}.devui-tabs__nav--pills>li:first-child{margin-left:0}.devui-tabs__nav{display:flex;align-items:center;list-style:none;padding-left:0}.devui-tabs__nav li a{text-decoration:none}.devui-tabs__nav li a.custom-width{display:inline-block;padding:0;text-align:center}.devui-tabs__nav--right,.devui-tabs__nav--left{margin:0}.devui-tabs__nav--right .devui-tabs__nav-slider-animation,.devui-tabs__nav--left .devui-tabs__nav-slider-animation{transition:top var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95)),height var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95))}.devui-tabs__nav--right .devui-tabs__new-tab,.devui-tabs__nav--left .devui-tabs__new-tab{text-align:center}.devui-tabs__nav--right{display:block;float:right;border-bottom:none;margin-left:10px}.devui-tabs__nav--right>li{margin-left:0;padding:0 16px;position:relative}.devui-tabs__nav--right>li:after{display:none}.devui-tabs__nav--right>li:before{content:" ";position:absolute;top:0;left:-5px;margin:auto;height:0;width:2px;background:transparent;transition:height var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95)),background-color var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95))}.devui-tabs__nav--right>li.active:before{height:100%;background:var(--devui-brand, #5e7ce0)}.devui-tabs__nav--left{display:block;float:left;border-bottom:none;margin-right:10px}.devui-tabs__nav--left>li{margin-left:0;padding:0 16px;position:relative}.devui-tabs__nav--left>li:after{content:" ";position:absolute;top:0;right:-5px;margin:auto;height:0;width:2px;background:transparent;transition:height var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95)),background-color var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95))}.devui-tabs__nav--left>li.active:after{height:100%;width:2px;background:var(--devui-brand, #5e7ce0)}.devui-tabs__nav-content{display:flex;align-items:center}.devui-tabs__nav--options{padding-left:2px}.devui-tabs__nav-slider-animation{position:absolute;z-index:0;background-color:var(--devui-base-bg, #ffffff);border-radius:var(--devui-border-radius, 4px);box-shadow:0 2px 4px 0 var(--devui-light-shadow, rgba(37, 43, 58, .1));top:1px;height:30px;transition:left var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95)),width var(--devui-animation-duration-slow, .3s) var(--devui-animation-ease-in-out, cubic-bezier(.5, .05, .5, .95))}.devui-tabs__new-tab .devui-icon__container:hover,.devui-tabs__close-btn .devui-icon__container:hover{color:var(--devui-text, #252b3a)}.devui-tabs__new-tab .devui-icon__container>i,.devui-tabs__close-btn .devui-icon__container>i{transition:none}.devui-tabs__new-tab .devui-icon__container{color:var(--devui-aide-text, #71757f)}.devui-tabs__close-btn{margin-left:12px}.devui-tabs__close-btn .devui-icon__container{color:var(--devui-form-control-line, #d7d8da)}.devui-tabs--right .devui-tabs__nav--options,.devui-tabs--right .devui-tabs__nav--wrapped,.devui-tabs--left .devui-tabs__nav--options,.devui-tabs--left .devui-tabs__nav--wrapped{border-bottom:1px solid var(--devui-dividing-line, #f2f2f3)}.devui-tabs--right .devui-tabs__nav--options>li:after,.devui-tabs--right .devui-tabs__nav--wrapped>li:after,.devui-tabs--left .devui-tabs__nav--options>li:after,.devui-tabs--left .devui-tabs__nav--wrapped>li:after{display:none}.devui-tabs--right .devui-tabs__nav--options>li:before,.devui-tabs--right .devui-tabs__nav--wrapped>li:before,.devui-tabs--left .devui-tabs__nav--options>li:before,.devui-tabs--left .devui-tabs__nav--wrapped>li:before{display:none}.devui-tabs--right .devui-tabs__nav--wrapped,.devui-tabs--left .devui-tabs__nav--wrapped{border-bottom:none}.devui-tabs--right .devui-tabs__nav--wrapped>li,.devui-tabs--left .devui-tabs__nav--wrapped>li{padding:8px 16px}.devui-tabs--right .devui-tabs__nav--slider>li:after,.devui-tabs--left .devui-tabs__nav--slider>li:after{display:none}.devui-tabs--right .devui-tabs__nav--slider>li:before,.devui-tabs--left .devui-tabs__nav--slider>li:before{display:none}.devui-tabs--right .devui-tabs__nav--slider .devui-tabs__nav-slider-animation,.devui-tabs--left .devui-tabs__nav--slider .devui-tabs__nav-slider-animation{left:1px}.devui-tabs--right .devui-tabs__nav--wrapped{border-left:1px solid var(--devui-dividing-line, #f2f2f3)}.devui-tabs--right .devui-tabs__nav--wrapped>li a{border-radius:0 var(--devui-border-radius, 4px) var(--devui-border-radius, 4px) 0}.devui-tabs--right .devui-tabs__nav--wrapped>li.active{border-radius:0 var(--devui-border-radius, 4px) var(--devui-border-radius, 4px) 0;border-bottom-color:var(--devui-dividing-line, #f2f2f3);border-left-color:transparent}.devui-tabs--right .devui-tabs__nav--tabs{border-left:1px solid var(--devui-line, #d7d8da)}.devui-tabs--left .devui-tabs__nav--wrapped{border-right:1px solid var(--devui-dividing-line, #f2f2f3)}.devui-tabs--left .devui-tabs__nav--wrapped>li a{border-radius:var(--devui-border-radius, 4px) 0 0 var(--devui-border-radius, 4px)}.devui-tabs--left .devui-tabs__nav--wrapped>li.active{border-radius:var(--devui-border-radius, 4px) 0 0 var(--devui-border-radius, 4px);border-bottom-color:var(--devui-dividing-line, #f2f2f3);border-right-color:transparent}.devui-tabs--left .devui-tabs__nav--tabs{border-right:1px solid var(--devui-line, #d7d8da)}.devui-tab__content{margin-top:10px;overflow:hidden;padding:10px 0}