@v-c/tabs 1.2.0 → 1.3.0

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.
@@ -0,0 +1,6 @@
1
+ import { AddButtonProps } from '../interface';
2
+ declare const __VLS_export: import('vue').DefineComponent<AddButtonProps, {
3
+ buttonRef: import('vue').Ref<HTMLButtonElement | undefined, HTMLButtonElement | undefined>;
4
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<AddButtonProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
5
+ declare const _default: typeof __VLS_export;
6
+ export default _default;
@@ -2,7 +2,7 @@ import { createCommentVNode, createElementBlock, createVNode, defineComponent, n
2
2
  import { RenderComponent } from "@v-c/util";
3
3
  //#region src/TabNavList/AddButton.vue?vue&type=script&setup=true&lang.ts
4
4
  var _hoisted_1 = ["aria-label"];
5
- var AddButton_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var AddButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "AddButton",
7
7
  inheritAttrs: false,
8
8
  __name: "AddButton",
@@ -0,0 +1,6 @@
1
+ import { ExtraContentProps } from '../interface';
2
+ declare const __VLS_export: import('vue').DefineComponent<ExtraContentProps, {
3
+ extraContentRef: import('vue').Ref<HTMLDivElement | undefined, HTMLDivElement | undefined>;
4
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<ExtraContentProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
5
+ declare const _default: typeof __VLS_export;
6
+ export default _default;
@@ -2,7 +2,7 @@ import { computed, createCommentVNode, createElementBlock, createVNode, defineCo
2
2
  import RenderComponent from "@v-c/util/dist/RenderComponent";
3
3
  import { ensureValidVNode } from "@v-c/util/dist/vnode";
4
4
  //#region src/TabNavList/ExtraContent.vue?vue&type=script&setup=true&lang.ts
5
- var ExtraContent_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var ExtraContent_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  __name: "ExtraContent",
7
7
  props: {
8
8
  position: {},
@@ -0,0 +1,8 @@
1
+ import { MoreProps, OperationNodeProps } from '../interface';
2
+ declare const __VLS_export: import('vue').DefineComponent<OperationNodeProps, {
3
+ operationNodeRef: Readonly<import('vue').ShallowRef<HTMLDivElement | null>>;
4
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<OperationNodeProps> & Readonly<{}>, {
5
+ more: MoreProps;
6
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;
@@ -12,7 +12,7 @@ var _hoisted_1 = [
12
12
  "aria-controls",
13
13
  "aria-expanded"
14
14
  ];
15
- var OperationNode_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
15
+ var OperationNode_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
16
16
  __name: "OperationNode",
17
17
  props: {
18
18
  prefixCls: {},
@@ -97,6 +97,16 @@ var OperationNode_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
97
97
  });
98
98
  });
99
99
  const moreIconNode = computed(() => moreProps.value?.icon || "More");
100
+ const overlayNode = computed(() => {
101
+ const popupRender = moreProps.value?.popupRender;
102
+ if (!popupRender) return menuNode.value;
103
+ return popupRender(menuNode.value, {
104
+ restTabs: props.tabs,
105
+ onClose: () => {
106
+ open.value = false;
107
+ }
108
+ });
109
+ });
100
110
  const moreStyle = computed(() => {
101
111
  const style = { marginInlineStart: tabBarGutter.value ? `${tabBarGutter.value}px` : "0px" };
102
112
  if (!props.tabs.length) {
@@ -168,7 +178,7 @@ var OperationNode_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
168
178
  }, [!unref(mobile) ? (openBlock(), createBlock(unref(DropDown), mergeProps({
169
179
  key: 0,
170
180
  "prefix-cls": dropdownPrefix.value,
171
- overlay: menuNode.value,
181
+ overlay: overlayNode.value,
172
182
  visible: __props.tabs.length ? open.value : false,
173
183
  "overlay-class-name": overlayClassName.value,
174
184
  "overlay-style": unref(popupStyle),
@@ -0,0 +1,4 @@
1
+ import { TabNodeProps } from '../interface';
2
+ declare const __VLS_export: import('vue').DefineComponent<TabNodeProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<TabNodeProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
3
+ declare const _default: typeof __VLS_export;
4
+ export default _default;
@@ -3,7 +3,7 @@ import { computed, createBlock, defineComponent, h, onMounted, openBlock, ref, t
3
3
  import RenderComponent from "@v-c/util/dist/RenderComponent";
4
4
  import { isEmptyElement } from "@v-c/util/dist/props-util";
5
5
  //#region src/TabNavList/TabNode.vue?vue&type=script&setup=true&lang.ts
6
- var TabNode_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var TabNode_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  name: "TabNode",
8
8
  inheritAttrs: false,
9
9
  __name: "TabNode",
@@ -0,0 +1,4 @@
1
+ import { TabNavListWrapperProps } from '../interface';
2
+ declare const __VLS_export: import('vue').DefineComponent<TabNavListWrapperProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<TabNavListWrapperProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
3
+ declare const _default: typeof __VLS_export;
4
+ export default _default;
@@ -2,7 +2,7 @@ import TabNavList_default from "./index.js";
2
2
  import { computed, createBlock, defineComponent, h, openBlock, unref } from "vue";
3
3
  import RenderComponent from "@v-c/util/dist/RenderComponent";
4
4
  //#region src/TabNavList/Wrapper.vue?vue&type=script&setup=true&lang.ts
5
- var Wrapper_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var Wrapper_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "TabNavListWrapper",
7
7
  inheritAttrs: false,
8
8
  __name: "Wrapper",
@@ -0,0 +1,4 @@
1
+ import { TabNavListProps } from '../interface';
2
+ declare const __VLS_export: import('vue').DefineComponent<TabNavListProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<TabNavListProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
3
+ declare const _default: typeof __VLS_export;
4
+ export default _default;
@@ -13,7 +13,7 @@ import RenderComponent from "@v-c/util/dist/RenderComponent";
13
13
  import ResizeObserver from "@v-c/resize-observer";
14
14
  //#region src/TabNavList/index.vue?vue&type=script&setup=true&lang.ts
15
15
  var _hoisted_1 = ["aria-orientation"];
16
- var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
16
+ var index_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
17
17
  name: "TabNavList",
18
18
  inheritAttrs: false,
19
19
  __name: "index",
@@ -211,7 +211,8 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
211
211
  const enabledKeys = getEnabledKeys(tabs.value);
212
212
  const currentIndex = enabledKeys.indexOf(focusKey.value || activeKey.value);
213
213
  const len = enabledKeys.length;
214
- focusKey.value = enabledKeys[(currentIndex + offset + len) % len];
214
+ const nextIndex = (currentIndex + offset + len) % len;
215
+ focusKey.value = enabledKeys[nextIndex];
215
216
  }
216
217
  function handleRemoveTab(removalKey, e) {
217
218
  if (!removalKey) return;
@@ -0,0 +1,4 @@
1
+ import { TabPaneProps } from '../interface';
2
+ declare const __VLS_export: import('vue').DefineComponent<TabPaneProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<TabPaneProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
3
+ declare const _default: typeof __VLS_export;
4
+ export default _default;
@@ -8,7 +8,7 @@ var _hoisted_1 = [
8
8
  "aria-labelledby",
9
9
  "aria-hidden"
10
10
  ];
11
- var TabPane_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
11
+ var TabPane_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
12
  name: "TabPane",
13
13
  inheritAttrs: false,
14
14
  __name: "TabPane",
@@ -0,0 +1,16 @@
1
+ import { CSSProperties } from 'vue';
2
+ import { AnimatedConfig, TabPosition } from '../interface';
3
+ interface TabPanelListProps {
4
+ activeKey: string;
5
+ id: string | null;
6
+ animated?: AnimatedConfig;
7
+ tabPosition?: TabPosition;
8
+ destroyOnHidden?: boolean;
9
+ bodyStyle?: CSSProperties;
10
+ bodyClassName?: string;
11
+ contentStyle?: CSSProperties;
12
+ contentClassName?: string;
13
+ }
14
+ declare const __VLS_export: import('vue').DefineComponent<TabPanelListProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<TabPanelListProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
15
+ declare const _default: typeof __VLS_export;
16
+ export default _default;
@@ -4,7 +4,7 @@ import { Fragment, Transition, computed, createBlock, createCommentVNode, create
4
4
  import RenderComponent from "@v-c/util/dist/RenderComponent";
5
5
  import { getTransitionProps } from "@v-c/util/dist/utils/transition";
6
6
  //#region src/TabPanelList/index.vue?vue&type=script&setup=true&lang.ts
7
- var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
+ var index_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
8
  __name: "index",
9
9
  props: {
10
10
  activeKey: {},
@@ -12,11 +12,13 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
12
12
  animated: {},
13
13
  tabPosition: {},
14
14
  destroyOnHidden: { type: Boolean },
15
+ bodyStyle: {},
16
+ bodyClassName: {},
15
17
  contentStyle: {},
16
18
  contentClassName: {}
17
19
  },
18
20
  setup(__props) {
19
- const { id, activeKey, animated, tabPosition, destroyOnHidden, contentStyle, contentClassName } = toRefs(__props);
21
+ const { id, activeKey, animated, tabPosition, destroyOnHidden, bodyStyle, bodyClassName, contentStyle, contentClassName } = toRefs(__props);
20
22
  const ctx = useTabContext();
21
23
  const tabs = computed(() => ctx?.value.tabs || []);
22
24
  const prefixCls = computed(() => ctx?.value.prefixCls || "");
@@ -41,11 +43,15 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
41
43
  return visitedKeys.has(item.key);
42
44
  }
43
45
  return (_ctx, _cache) => {
44
- return openBlock(), createElementBlock("div", { class: normalizeClass([`${prefixCls.value}-body-holder`]) }, [createElementVNode("div", { class: normalizeClass([
45
- `${prefixCls.value}-body`,
46
- `${prefixCls.value}-body-${unref(tabPosition)}`,
47
- { [`${prefixCls.value}-body-animated`]: tabPaneAnimated.value }
48
- ]) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(tabs.value, (item) => {
46
+ return openBlock(), createElementBlock("div", { class: normalizeClass([`${prefixCls.value}-body-holder`]) }, [createElementVNode("div", {
47
+ class: normalizeClass([
48
+ `${prefixCls.value}-body`,
49
+ `${prefixCls.value}-body-${unref(tabPosition)}`,
50
+ { [`${prefixCls.value}-body-animated`]: tabPaneAnimated.value },
51
+ unref(bodyClassName)
52
+ ]),
53
+ style: normalizeStyle(unref(bodyStyle))
54
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(tabs.value, (item) => {
49
55
  return openBlock(), createElementBlock(Fragment, { key: item.key }, [tabPaneAnimated.value ? (openBlock(), createBlock(Transition, mergeProps({
50
56
  key: 0,
51
57
  ref_for: true
@@ -107,7 +113,7 @@ var index_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
107
113
  "style",
108
114
  "class-name"
109
115
  ])), [[vShow, shouldDestroyOnHidden(item) ? true : item.key === unref(activeKey) || item.forceRender]]) : createCommentVNode("", true)], 64);
110
- }), 128))], 2)], 2);
116
+ }), 128))], 6)], 2);
111
117
  };
112
118
  }
113
119
  });
@@ -0,0 +1,9 @@
1
+ import { TabsProps } from './interface';
2
+ declare const __VLS_export: import('vue').DefineComponent<TabsProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<TabsProps> & Readonly<{}>, {
3
+ prefixCls: string;
4
+ animated: boolean | import('./interface').AnimatedConfig;
5
+ destroyOnHidden: boolean;
6
+ tabPosition: import('./interface').TabPosition;
7
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
@@ -10,7 +10,7 @@ import isMobile from "@v-c/util/dist/isMobile";
10
10
  import omit from "@v-c/util/dist/omit";
11
11
  //#region src/Tabs.vue?vue&type=script&setup=true&lang.ts
12
12
  var _hoisted_1 = ["id"];
13
- var Tabs_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
13
+ var Tabs_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
14
14
  name: "Tabs",
15
15
  __name: "Tabs",
16
16
  props: {
@@ -175,11 +175,15 @@ var Tabs_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
175
175
  unref(className)
176
176
  ]
177
177
  }, restProps.value), [createVNode(Wrapper_default, mergeProps(tabNavBarProps.value, { "render-tab-bar": unref(renderTabBar) }), null, 16, ["render-tab-bar"]), createVNode(TabPanelList_default, mergeProps({ "destroy-on-hidden": unref(destroyOnHidden) }, sharedProps.value, {
178
+ "body-style": unref(styles)?.body,
179
+ "body-class-name": unref(tabsClassNames)?.body,
178
180
  "content-style": unref(styles)?.content,
179
181
  "content-class-name": unref(tabsClassNames)?.content,
180
182
  animated: mergedAnimated.value
181
183
  }), null, 16, [
182
184
  "destroy-on-hidden",
185
+ "body-style",
186
+ "body-class-name",
183
187
  "content-style",
184
188
  "content-class-name",
185
189
  "animated"
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { TabPaneProps, TabsProps } from './interface';
2
2
  import { default as Tabs } from './Tabs.vue';
3
3
  export type { TabPaneProps, TabsProps };
4
- export type { AnimatedConfig, EditableConfig, GetIndicatorSize, MoreProps, Tab } from './interface';
4
+ export type { AnimatedConfig, EditableConfig, GetIndicatorSize, MoreProps, PopupRender, Tab } from './interface';
5
5
  export default Tabs;
@@ -62,8 +62,13 @@ export interface Tab extends Omit<TabPaneProps, 'tab'> {
62
62
  label: VueNode;
63
63
  }
64
64
  export type moreIcon = VueNode;
65
+ export type PopupRender = (menu: VueNode, info: {
66
+ restTabs: Tab[];
67
+ onClose: () => void;
68
+ }) => VueNode;
65
69
  export type MoreProps = {
66
70
  icon?: moreIcon;
71
+ popupRender?: PopupRender;
67
72
  } & Omit<DropdownProps, 'children'>;
68
73
  export interface OperationNodeProps {
69
74
  prefixCls: string;
@@ -114,7 +119,7 @@ export interface TabNodeProps {
114
119
  }
115
120
  export type TabPosition = 'left' | 'right' | 'top' | 'bottom';
116
121
  export type GetIndicatorSize = number | ((origin: number) => number);
117
- export type SemanticName = 'popup' | 'item' | 'indicator' | 'content' | 'header' | 'remove';
122
+ export type SemanticName = 'popup' | 'item' | 'indicator' | 'body' | 'content' | 'header' | 'remove';
118
123
  export type RenderTabBar = (props: Record<string, any>, TabNavListComponent: any) => VueNode;
119
124
  export interface IndicatorConfig {
120
125
  size?: GetIndicatorSize;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@v-c/tabs",
3
3
  "type": "module",
4
- "version": "1.2.0",
4
+ "version": "1.3.0",
5
5
  "description": "tabs ui component for react",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -37,11 +37,11 @@
37
37
  "vue": "^3.0.0"
38
38
  },
39
39
  "dependencies": {
40
- "@v-c/dropdown": "^1.0.2",
41
- "@v-c/menu": "^1.2.1",
42
- "@v-c/overflow": "^1.1.0",
43
- "@v-c/resize-observer": "^1.1.2",
44
- "@v-c/util": "^1.0.19"
40
+ "@v-c/dropdown": "^1.0.5",
41
+ "@v-c/menu": "^1.3.0",
42
+ "@v-c/overflow": "^1.1.1",
43
+ "@v-c/resize-observer": "^1.1.3",
44
+ "@v-c/util": "^1.1.0"
45
45
  },
46
46
  "scripts": {
47
47
  "build": "vite build",