tab-bar2.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var core = require('@vueuse/core');
  5. require('../../../utils/index.js');
  6. require('../../../tokens/index.js');
  7. require('../../../hooks/index.js');
  8. var tabBar = require('./tab-bar.js');
  9. var pluginVue_exportHelper = require('../../../_virtual/plugin-vue_export-helper.js');
  10. var tabs = require('../../../tokens/tabs.js');
  11. var error = require('../../../utils/error.js');
  12. var index = require('../../../hooks/use-namespace/index.js');
  13. var strings = require('../../../utils/strings.js');
  14. const COMPONENT_NAME = "ElTabBar";
  15. const __default__ = vue.defineComponent({
  16. name: COMPONENT_NAME
  17. });
  18. const _sfc_main = /* @__PURE__ */ vue.defineComponent({
  19. ...__default__,
  20. props: tabBar.tabBarProps,
  21. setup(__props, { expose }) {
  22. const props = __props;
  23. const instance = vue.getCurrentInstance();
  24. const rootTabs = vue.inject(tabs.tabsRootContextKey);
  25. if (!rootTabs)
  26. error.throwError(COMPONENT_NAME, "<el-tabs><el-tab-bar /></el-tabs>");
  27. const ns = index.useNamespace("tabs");
  28. const barRef = vue.ref();
  29. const barStyle = vue.ref();
  30. const getBarStyle = () => {
  31. let offset = 0;
  32. let tabSize = 0;
  33. const sizeName = ["top", "bottom"].includes(rootTabs.props.tabPosition) ? "width" : "height";
  34. const sizeDir = sizeName === "width" ? "x" : "y";
  35. const position = sizeDir === "x" ? "left" : "top";
  36. props.tabs.every((tab) => {
  37. var _a, _b;
  38. const $el = (_b = (_a = instance.parent) == null ? void 0 : _a.refs) == null ? void 0 : _b[`tab-${tab.uid}`];
  39. if (!$el)
  40. return false;
  41. if (!tab.active) {
  42. return true;
  43. }
  44. offset = $el[`offset${strings.capitalize(position)}`];
  45. tabSize = $el[`client${strings.capitalize(sizeName)}`];
  46. const tabStyles = window.getComputedStyle($el);
  47. if (sizeName === "width") {
  48. if (props.tabs.length > 1) {
  49. tabSize -= Number.parseFloat(tabStyles.paddingLeft) + Number.parseFloat(tabStyles.paddingRight);
  50. }
  51. offset += Number.parseFloat(tabStyles.paddingLeft);
  52. }
  53. return false;
  54. });
  55. return {
  56. [sizeName]: `${tabSize}px`,
  57. transform: `translate${strings.capitalize(sizeDir)}(${offset}px)`
  58. };
  59. };
  60. const update = () => barStyle.value = getBarStyle();
  61. vue.watch(() => props.tabs, async () => {
  62. await vue.nextTick();
  63. update();
  64. }, { immediate: true });
  65. core.useResizeObserver(barRef, () => update());
  66. expose({
  67. ref: barRef,
  68. update
  69. });
  70. return (_ctx, _cache) => {
  71. return vue.openBlock(), vue.createElementBlock("div", {
  72. ref_key: "barRef",
  73. ref: barRef,
  74. class: vue.normalizeClass([vue.unref(ns).e("active-bar"), vue.unref(ns).is(vue.unref(rootTabs).props.tabPosition)]),
  75. style: vue.normalizeStyle(barStyle.value)
  76. }, null, 6);
  77. };
  78. }
  79. });
  80. var TabBar = /* @__PURE__ */ pluginVue_exportHelper["default"](_sfc_main, [["__file", "/home/runner/work/element-plus/element-plus/packages/components/tabs/src/tab-bar.vue"]]);
  81. exports["default"] = TabBar;
  82. //# sourceMappingURL=tab-bar2.js.map