@zeedhi/vuetify 3.2.0 → 3.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.
Files changed (132) hide show
  1. package/dist/zd-vuetify.css +25 -2
  2. package/dist/zd-vuetify.min.css +2 -2
  3. package/dist/zd-vuetify.min.js +12 -12
  4. package/dist/zd-vuetify.mjs +346 -123
  5. package/package.json +3 -3
  6. package/src/components/zd-component/ZdComponent.ts +15 -13
  7. package/src/components/zd-tabs/ZdTab.ts +40 -6
  8. package/src/components/zd-tabs/ZdTab.vue +16 -3
  9. package/src/components/zd-tabs/ZdTabItem.ts +2 -2
  10. package/src/components/zd-tabs/ZdTabItem.vue +1 -1
  11. package/src/components/zd-tabs/ZdTabs.ts +96 -2
  12. package/src/components/zd-tabs/ZdTabs.vue +46 -17
  13. package/types/components/tek-grid/TekGrid.d.ts +7258 -0
  14. package/types/components/tek-grid/TekGrid.ts.d.ts +7258 -0
  15. package/types/components/tek-grid/column-filter/TekGridColumnFilter.d.ts +129 -0
  16. package/types/components/tek-grid/column-filter/TekGridColumnFilter.ts.d.ts +129 -0
  17. package/types/components/tek-grid/column-header/TekGridHeaderRow.d.ts +225 -0
  18. package/types/components/tek-grid/column-header/TekGridHeaderRow.ts.d.ts +225 -0
  19. package/types/components/tek-grid/columns-button/TekGridColumnsButton.d.ts +2432 -0
  20. package/types/components/tek-grid/columns-button/TekGridColumnsButton.ts.d.ts +2432 -0
  21. package/types/components/tek-grid/columns-button/TekGridColumnsOptionsController.d.ts +65 -0
  22. package/types/components/tek-grid/columns-button/TekGridColumnsOptionsModal.d.ts +9 -0
  23. package/types/components/tek-grid/filter-button/TekGridFilterButton.d.ts +2920 -0
  24. package/types/components/tek-grid/filter-button/TekGridFilterButton.ts.d.ts +2920 -0
  25. package/types/components/tek-grid/indentation/TekGridIndentation.d.ts +32 -0
  26. package/types/components/tek-grid/indentation/TekGridIndentation.ts.d.ts +32 -0
  27. package/types/components/tek-grid/layout-options/TekGridLayoutOptions.d.ts +1892 -0
  28. package/types/components/tek-grid/layout-options/TekGridLayoutOptions.ts.d.ts +1892 -0
  29. package/types/components/tek-grid/row/TekGridFooterRow.d.ts +90 -0
  30. package/types/components/tek-grid/row/TekGridFooterRow.ts.d.ts +90 -0
  31. package/types/components/tek-grid/row/TekGridGroupRow.d.ts +87 -0
  32. package/types/components/tek-grid/row/TekGridGroupRow.ts.d.ts +87 -0
  33. package/types/components/tooltip-overflow/ZdTooltipOverflow.ts.d.ts +50 -0
  34. package/types/components/zd-activator-wrapper/ZdActivatorWrapper.ts.d.ts +25 -0
  35. package/types/components/zd-alert/ZdAlert.ts.d.ts +884 -0
  36. package/types/components/zd-badge/ZdBadge.ts.d.ts +624 -0
  37. package/types/components/zd-breadcrumbs/ZdBreadcrumbs.ts.d.ts +697 -0
  38. package/types/components/zd-button/ZdButton.ts.d.ts +1158 -0
  39. package/types/components/zd-button-group/ZdButtonGroup.ts.d.ts +785 -0
  40. package/types/components/zd-card/ZdCard.ts.d.ts +1028 -0
  41. package/types/components/zd-carousel/ZdCarousel.ts.d.ts +2007 -0
  42. package/types/components/zd-checkbox/ZdCheckbox.ts.d.ts +642 -0
  43. package/types/components/zd-checkbox-multiple/ZdCheckboxMultiple.ts.d.ts +2010 -0
  44. package/types/components/zd-chip/ZdChip.ts.d.ts +1256 -0
  45. package/types/components/zd-code-viewer/ZdCodeViewer.ts.d.ts +791 -0
  46. package/types/components/zd-col/ZdCol.ts.d.ts +741 -0
  47. package/types/components/zd-collapse-card/ZdCollapseCard.ts.d.ts +1583 -0
  48. package/types/components/zd-container/ZdContainer.ts.d.ts +722 -0
  49. package/types/components/zd-currency/ZdCurrency.ts.d.ts +2024 -0
  50. package/types/components/zd-date-input/ZdDateInput.ts.d.ts +960 -0
  51. package/types/components/zd-dialog/ZdDialog.ts.d.ts +262 -0
  52. package/types/components/zd-divider/ZdDivider.ts.d.ts +623 -0
  53. package/types/components/zd-dropdown/ZdDropdown.ts.d.ts +836 -0
  54. package/types/components/zd-footer/ZdFooter.ts.d.ts +1262 -0
  55. package/types/components/zd-form/ZdForm.ts.d.ts +118 -0
  56. package/types/components/zd-frame/ZdFrame.ts.d.ts +138 -0
  57. package/types/components/zd-frame-page/ZdFramePage.ts.d.ts +805 -0
  58. package/types/components/zd-grid/ZdGrid.ts.d.ts +7304 -0
  59. package/types/components/zd-grid/cell/ZdGridAction.ts.d.ts +14 -0
  60. package/types/components/zd-grid/cell/ZdGridCell.ts.d.ts +68 -0
  61. package/types/components/zd-grid/cell/ZdGridCellContent.ts.d.ts +58 -0
  62. package/types/components/zd-grid/cell/ZdGridCheckbox.ts.d.ts +53 -0
  63. package/types/components/zd-grid/column-header/ZdGridColumnHeader.ts.d.ts +112 -0
  64. package/types/components/zd-grid/column-header/ZdGridHeaderIcon.ts.d.ts +46 -0
  65. package/types/components/zd-grid/column-header/ZdGridHeaderRow.ts.d.ts +165 -0
  66. package/types/components/zd-grid/column-header/ZdGridSort.ts.d.ts +47 -0
  67. package/types/components/zd-grid/footer/ZdGridFooter.ts.d.ts +2087 -0
  68. package/types/components/zd-grid/helper/ZdGridHelper.ts.d.ts +16 -0
  69. package/types/components/zd-grid/row/TableRow.ts.d.ts +34 -0
  70. package/types/components/zd-grid/row/ZdGridRow.ts.d.ts +105 -0
  71. package/types/components/zd-grid/toolbar/ZdGridToolbar.ts.d.ts +2086 -0
  72. package/types/components/zd-grid-editable/ZdGridEditable.ts.d.ts +8663 -0
  73. package/types/components/zd-grid-editable/cell/ZdGridEditableCell.ts.d.ts +637 -0
  74. package/types/components/zd-grid-editable/row/ZdGridEditableRow.ts.d.ts +126 -0
  75. package/types/components/zd-header/ZdHeader.ts.d.ts +1320 -0
  76. package/types/components/zd-icon/ZdIcon.ts.d.ts +383 -0
  77. package/types/components/zd-image/ZdImage.ts.d.ts +753 -0
  78. package/types/components/zd-increment/ZdIncrement.ts.d.ts +2069 -0
  79. package/types/components/zd-iterable/ZdIterableNoData.ts.d.ts +2089 -0
  80. package/types/components/zd-iterable/zd-iterable-columns-button/ZdIterableColumnsButton.ts.d.ts +1645 -0
  81. package/types/components/zd-iterable/zd-iterable-page-info/ZdIterablePageInfo.ts.d.ts +1081 -0
  82. package/types/components/zd-iterable/zd-iterable-page-size/ZdIterablePageSize.ts.d.ts +2763 -0
  83. package/types/components/zd-iterable/zd-iterable-pagination/ZdIterablePagination.ts.d.ts +1627 -0
  84. package/types/components/zd-iterable/zd-search/ZdSearch.ts.d.ts +766 -0
  85. package/types/components/zd-iterable-component-render/ZdIterableComponentRender.ts.d.ts +2484 -0
  86. package/types/components/zd-layout/ZdLayout.ts.d.ts +647 -0
  87. package/types/components/zd-list/ZdList.ts.d.ts +1140 -0
  88. package/types/components/zd-list/ZdListGroup.ts.d.ts +1332 -0
  89. package/types/components/zd-list/ZdListItem.ts.d.ts +848 -0
  90. package/types/components/zd-loading/ZdLoading.ts.d.ts +350 -0
  91. package/types/components/zd-login/ZdLogin.ts.d.ts +1072 -0
  92. package/types/components/zd-login/ZdLoginButton.ts.d.ts +1910 -0
  93. package/types/components/zd-main/ZdMain.ts.d.ts +619 -0
  94. package/types/components/zd-master-detail/ZdMasterDetail.ts.d.ts +684 -0
  95. package/types/components/zd-menu/ZdMenu.ts.d.ts +4484 -0
  96. package/types/components/zd-menu/ZdMenuButton.ts.d.ts +1142 -0
  97. package/types/components/zd-menu/ZdMenuGroup.ts.d.ts +6286 -0
  98. package/types/components/zd-menu/ZdMenuLink.ts.d.ts +10437 -0
  99. package/types/components/zd-menu/ZdMenuSeparator.ts.d.ts +600 -0
  100. package/types/components/zd-modal/ZdModal.ts.d.ts +10 -0
  101. package/types/components/zd-modal/ZdModalCloseButton.ts.d.ts +1137 -0
  102. package/types/components/zd-month/ZdMonth.ts.d.ts +2217 -0
  103. package/types/components/zd-number-input/ZdNumberInput.ts.d.ts +2021 -0
  104. package/types/components/zd-password/ZdPassword.ts.d.ts +2014 -0
  105. package/types/components/zd-progress/ZdProgress.ts.d.ts +859 -0
  106. package/types/components/zd-radio/ZdRadio.ts.d.ts +682 -0
  107. package/types/components/zd-row/ZdRow.ts.d.ts +734 -0
  108. package/types/components/zd-select/ZdSelect.ts.d.ts +313 -0
  109. package/types/components/zd-select-multiple/ZdSelectMultiple.ts.d.ts +333 -0
  110. package/types/components/zd-svg-map/ZdSvgMap.ts.d.ts +414 -0
  111. package/types/components/zd-switch/ZdSwitch.ts.d.ts +1918 -0
  112. package/types/components/zd-table/ZdTable.ts.d.ts +1092 -0
  113. package/types/components/zd-tabs/ZdTab.d.ts +4 -10
  114. package/types/components/zd-tabs/ZdTab.ts.d.ts +674 -0
  115. package/types/components/zd-tabs/ZdTabItem.d.ts +6 -6
  116. package/types/components/zd-tabs/ZdTabItem.ts.d.ts +268 -0
  117. package/types/components/zd-tabs/ZdTabs.d.ts +20 -1
  118. package/types/components/zd-tabs/ZdTabs.ts.d.ts +929 -0
  119. package/types/components/zd-tag/ZdTag.ts.d.ts +613 -0
  120. package/types/components/zd-text/ZdText.ts.d.ts +670 -0
  121. package/types/components/zd-text-input/ZdTextInput.ts.d.ts +746 -0
  122. package/types/components/zd-textarea/ZdTextarea.ts.d.ts +877 -0
  123. package/types/components/zd-time/ZdTime.ts.d.ts +2224 -0
  124. package/types/components/zd-tooltip/ZdTooltip.ts.d.ts +781 -0
  125. package/types/components/zd-tree/ZdTree.ts.d.ts +1878 -0
  126. package/types/components/zd-tree/ZdTreeAfterTitle.ts.d.ts +26 -0
  127. package/types/components/zd-tree/ZdTreeCheckbox.ts.d.ts +74 -0
  128. package/types/components/zd-tree-grid/ZdTreeGrid.ts.d.ts +4178 -0
  129. package/types/components/zd-tree-grid/cell/ZdTreeGridCell.ts.d.ts +92 -0
  130. package/types/components/zd-tree-grid/row/ZdTreeGridRow.ts.d.ts +124 -0
  131. package/types/composables/useTableLayout.d.ts +25 -0
  132. package/types/utils/isArrayOperation.d.ts +2 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeedhi/vuetify",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
4
4
  "description": "Zeedhi Components based on Vuetify",
5
5
  "author": "Zeedhi <zeedhi@teknisa.com>",
6
6
  "license": "ISC",
@@ -42,7 +42,7 @@
42
42
  "@vitest/coverage-v8": "^2.1.3",
43
43
  "@zeedhi/common": "^3.0.0",
44
44
  "@zeedhi/core": "^3.0.0",
45
- "@zeedhi/vue": "^3.2.0",
45
+ "@zeedhi/vue": "^3.3.0",
46
46
  "vue": "^3.0.0",
47
47
  "vue-router": "^4.2.2",
48
48
  "vuetify": "^3.11.0"
@@ -58,5 +58,5 @@
58
58
  "env": {
59
59
  "NODE_ENV": "production"
60
60
  },
61
- "gitHead": "324909706bf7955d5275f878496732f3d14c68cd"
61
+ "gitHead": "3398ef763d8812e5b8feb5b8f06db1b377271fde"
62
62
  }
@@ -235,7 +235,7 @@ export function useCreateInstance<T extends Component, G extends RootRef = RootR
235
235
  explicitlyPassedProps[key] = props[key];
236
236
  }
237
237
  }
238
- explicitlyPassedProps.instanceObj = undefined;
238
+ delete explicitlyPassedProps.instanceObject;
239
239
 
240
240
  const events = getInstanceEvents([props.events, props.instanceObject.events]);
241
241
 
@@ -267,18 +267,20 @@ export function useCreateInstance<T extends Component, G extends RootRef = RootR
267
267
  const instance = reactive(instanceObj);
268
268
 
269
269
  // criar reatividades nas propriedades. (PropWatch)
270
- Object.keys(props).forEach((key: string) => {
271
- if (!(key in instance)) return;
272
- if (typeof props[key] === 'function') return;
273
- if (propsDefs[key] && propsDefs[key].watch === false) return;
274
-
275
- watch(
276
- () => props[key],
277
- (value) => {
278
- (instance as any)[key] = value;
279
- }
280
- );
281
- });
270
+ if (!createdFromObject) {
271
+ Object.keys(props).forEach((key: string) => {
272
+ if (!(key in instance)) return;
273
+ if (typeof props[key] === 'function') return;
274
+ if (propsDefs[key]?.watch === false) return;
275
+
276
+ watch(
277
+ () => props[key],
278
+ value => {
279
+ (instance as any)[key] = value;
280
+ },
281
+ );
282
+ });
283
+ }
282
284
 
283
285
  addChild({ instance, props });
284
286
 
@@ -1,6 +1,6 @@
1
- import { Tab } from '@zeedhi/common';
1
+ import { Tab, Tabs } from '@zeedhi/common';
2
2
  import { Event } from '@zeedhi/core';
3
- import { defineComponent } from 'vue';
3
+ import { computed, defineComponent, ref } from 'vue';
4
4
  import { useDensity } from '../../composables';
5
5
  import { buildProps } from '../../utils';
6
6
  import { useCreateInstance, useGetMethods } from '../zd-component/ZdComponent';
@@ -15,9 +15,6 @@ export const ZdTabProps = buildProps({
15
15
  tabTitle: {
16
16
  type: [String],
17
17
  },
18
- tabName: {
19
- type: [String],
20
- },
21
18
  color: {
22
19
  type: [String],
23
20
  default: 'primary',
@@ -70,6 +67,8 @@ const tabComponent = defineComponent({
70
67
 
71
68
  const { click, focus, blur, mouseenter, mouseleave } = useGetMethods(instance, root);
72
69
 
70
+ const isDragging = ref<boolean>(false);
71
+
73
72
  const clickTab = (event: Event) => {
74
73
  ctx.emit('click', event);
75
74
  };
@@ -78,9 +77,43 @@ const tabComponent = defineComponent({
78
77
  ctx.emit('keydown', event);
79
78
  };
80
79
 
80
+ const sortable = computed(() => {
81
+ return (instance.parent as Tabs)?.sortable;
82
+ })
83
+
84
+ const handleDragStart = (event: DragEvent): void => {
85
+ if (!sortable.value) {
86
+ event.preventDefault();
87
+ return;
88
+ }
89
+
90
+ if (event.dataTransfer) {
91
+ event.dataTransfer.effectAllowed = 'move';
92
+
93
+ // Compatibilidade Firefox
94
+ event.dataTransfer.setData('text/plain', '');
95
+
96
+ const tabsInstance = instance.parent as Tabs;
97
+ const sourceIndex = tabsInstance.tabs.findIndex((tab) => tab.name === instance.name);
98
+
99
+ event.dataTransfer.setData(`application/x-zd-tabs-owner-${tabsInstance.name.toLowerCase()}`, '');
100
+ event.dataTransfer.setData('application/x-zd-tab-index', String(sourceIndex));
101
+ }
102
+
103
+ isDragging.value = true;
104
+
105
+ event.stopPropagation();
106
+ };
107
+
108
+ const handleDragEnd = (): void => {
109
+ isDragging.value = false;
110
+ };
111
+
81
112
  return {
82
113
  instance,
83
114
  root,
115
+ density,
116
+ sortable,
84
117
  click,
85
118
  focus,
86
119
  blur,
@@ -89,7 +122,8 @@ const tabComponent = defineComponent({
89
122
  // methods
90
123
  clickTab,
91
124
  keydown,
92
- density,
125
+ handleDragStart,
126
+ handleDragEnd,
93
127
  };
94
128
  },
95
129
  });
@@ -3,9 +3,11 @@
3
3
  :id="instance.name"
4
4
  ref="root"
5
5
  v-show="instance.isVisible"
6
- :class="['zd-tabs-tab', instance.cssClass]"
6
+ :class="['zd-tabs-tab', instance.cssClass, {
7
+ 'zd-tabs-tab-sortable': sortable,
8
+ }]"
7
9
  :style="$styleObject(instance.cssStyle)"
8
- :name="instance.tabName"
10
+ :name="instance.tabTitle"
9
11
  :disabled="instance.disabled"
10
12
  :theme="instance.theme"
11
13
  :color="instance.color"
@@ -15,11 +17,14 @@
15
17
  :iconName="instance.iconName"
16
18
  :rounded="instance.rounded"
17
19
  :selected-class="'v-tab--selected '+instance.selectedClass"
18
- :value="instance.value"
20
+ :value="instance.name || instance.value"
19
21
  :variant="instance.variant"
20
22
  :width="instance.width"
23
+ :draggable="sortable"
21
24
  @click="clickTab($event)"
22
25
  @keydown="keydown($event)"
26
+ @dragstart="handleDragStart"
27
+ @dragend="handleDragEnd"
23
28
  >
24
29
  <span class="zd-tabs-tab-text">
25
30
  {{ $t(instance.tabTitle) }}
@@ -46,6 +51,14 @@
46
51
  line-height: 15px;
47
52
  margin-bottom: 1px;
48
53
  }
54
+
55
+ &-sortable::before {
56
+ content: "⋮";
57
+ position: absolute;
58
+ left: 1px;
59
+ width: 10px;
60
+ cursor: grab;
61
+ }
49
62
  }
50
63
  }
51
64
  </style>
@@ -4,8 +4,8 @@ import { ZdComponentRenderProps } from '../zd-component/ZdComponentRender';
4
4
 
5
5
  export const ZdTabItemProps = buildProps({
6
6
  ...ZdComponentRenderProps,
7
- index: {
8
- type: [Number],
7
+ value: {
8
+ type: [String],
9
9
  },
10
10
  lazyLoad: {
11
11
  type: [Boolean],
@@ -2,7 +2,7 @@
2
2
  <v-tabs-window-item
3
3
  class="zd-tabs-tab-item"
4
4
  v-show="isVisible"
5
- :value="index"
5
+ :value="value"
6
6
  :transition="false"
7
7
  :reverse-transition="false"
8
8
  >
@@ -1,5 +1,5 @@
1
1
  import { Tabs } from '@zeedhi/common';
2
- import { defineComponent } from 'vue';
2
+ import { computed, defineComponent, ref } from 'vue';
3
3
  import { useDensity } from '../../composables';
4
4
  import { HeightProps } from '../../propsMixins/heightProps';
5
5
  import { buildProps } from '../../utils';
@@ -45,6 +45,10 @@ export const ZdTabsProps = buildProps({
45
45
  max: {
46
46
  type: [Number, String],
47
47
  },
48
+ sortable: {
49
+ type: [Boolean, String],
50
+ default: false,
51
+ },
48
52
  });
49
53
 
50
54
  /**
@@ -56,9 +60,13 @@ const tabsComponent = defineComponent({
56
60
  setup(props, ctx) {
57
61
  const { instance, root } = useCreateInstance<Tabs>(props, ctx, Tabs, ZdTabsProps);
58
62
  const { density } = useDensity({ instance });
63
+ const rootElement = getRootElement(root);
59
64
 
60
65
  const { click, focus, blur, mouseenter, mouseleave } = useGetMethods(instance, root);
61
66
 
67
+ const isDragOver = ref<boolean>(false);
68
+ const dragOverIndex = ref<number>(-1);
69
+
62
70
  const change = () => {
63
71
  const rootElement = getRootElement(root);
64
72
  instance.change(new Event('change'), rootElement.value);
@@ -73,10 +81,93 @@ const tabsComponent = defineComponent({
73
81
  const rootElement = getRootElement(root);
74
82
  instance.beforeChange(event, index, rootElement.value);
75
83
  };
84
+
85
+ const isTabOK = (event: DragEvent): boolean => {
86
+ return !!event.dataTransfer?.types.includes(`application/x-zd-tabs-owner-${instance.name.toLowerCase()}`);
87
+ };
88
+
89
+ const getTabsBarRect = (): DOMRect | undefined => {
90
+ return rootElement.value?.querySelector('.v-tabs')?.getBoundingClientRect();
91
+ };
92
+
93
+ const handleDragOver = (event: DragEvent): void => {
94
+ event.preventDefault();
95
+
96
+ if (!isTabOK(event)) {
97
+ dragOverIndex.value = -1;
98
+ return;
99
+ }
100
+
101
+ const tabsRect = getTabsBarRect();
102
+ if (!tabsRect) return;
103
+
104
+ if (event.clientY < tabsRect.top - 10 || event.clientY > tabsRect.bottom + 10) {
105
+ dragOverIndex.value = -1;
106
+ return;
107
+ }
108
+
109
+ const tabs = rootElement.value!.querySelectorAll('.zd-tabs-tab');
110
+ let targetIndex = instance.tabs.length;
111
+
112
+ tabs.forEach((tabEl, index) => {
113
+ const rect = tabEl.getBoundingClientRect();
114
+
115
+ if (event.clientX < rect.left + rect.width / 2) {
116
+ targetIndex = Math.min(targetIndex, index);
117
+ }
118
+ });
119
+
120
+ dragOverIndex.value = targetIndex;
121
+ event.stopPropagation();
122
+ };
123
+
124
+ const handleDrop = (event: DragEvent): void => {
125
+ event.preventDefault();
126
+
127
+ if (!isTabOK(event) || dragOverIndex.value === -1) return;
128
+
129
+ event.stopPropagation();
130
+
131
+ const sourceIndex = Number(event.dataTransfer?.getData('application/x-zd-tab-index'));
132
+ instance.moveTab(sourceIndex, dragOverIndex.value);
133
+
134
+ isDragOver.value = false;
135
+ dragOverIndex.value = -1;
136
+ };
137
+
138
+ const handleDragEnter = (event: DragEvent): void => {
139
+ event.preventDefault();
140
+
141
+ if (!isTabOK(event)) {
142
+ isDragOver.value = false;
143
+ dragOverIndex.value = -1;
144
+ return;
145
+ }
146
+
147
+ isDragOver.value = true;
148
+ };
149
+
150
+ const handleDragLeave = (event: DragEvent): void => {
151
+ if (rootElement.value && event.relatedTarget && rootElement.value.contains(event.relatedTarget as Node)) return;
152
+
153
+ isDragOver.value = false;
154
+ dragOverIndex.value = -1;
155
+ };
156
+
157
+ const activeTabName = computed<string | undefined>({
158
+ get: () => instance.tabs[instance.activeTab]?.name,
159
+ set: (name) => {
160
+ const index = instance.tabs.findIndex((tab) => tab.name === name);
161
+ if (index !== -1) instance.activeTab = index;
162
+ },
163
+ });
76
164
 
77
165
  return {
78
166
  instance,
79
167
  root,
168
+ dragOverIndex,
169
+ density,
170
+ activeTabName,
80
171
  click,
81
172
  focus,
82
173
  blur,
@@ -85,7 +176,10 @@ const tabsComponent = defineComponent({
85
176
  clickTab,
86
177
  keydown,
87
178
  change,
88
- density,
179
+ handleDragOver,
180
+ handleDrop,
181
+ handleDragEnter,
182
+ handleDragLeave,
89
183
  };
90
184
  },
91
185
  });
@@ -10,9 +10,13 @@
10
10
  maxHeight: instance.maxHeight,
11
11
  minHeight:instance.minHeight,
12
12
  }"
13
+ @dragenter="handleDragEnter"
14
+ @dragleave="handleDragLeave"
15
+ @dragover="handleDragOver"
16
+ @drop="handleDrop"
13
17
  >
14
18
  <v-tabs
15
- v-model="instance.activeTab"
19
+ v-model="activeTabName"
16
20
  show-arrows
17
21
  @update:model-value="change"
18
22
  :theme="instance.theme"
@@ -24,31 +28,39 @@
24
28
  :grow="instance.grow"
25
29
  :max="instance.max"
26
30
  >
27
- <zd-tab
28
- v-for="(tab, index) in instance.tabs " :key="tab.name"
29
- v-bind="{
30
- ...tab,
31
- name: tab.name,
32
- tabName: tab.name,
33
- dense: tab.dense || instance.dense,
34
- }"
35
- @click="clickTab($event, index)"
36
- @keydown="keydown($event, index)"
37
- >
38
- </zd-tab>
31
+ <template v-for="(tab, index) in instance.tabs " :key="tab.name">
32
+ <span
33
+ v-if="dragOverIndex === index"
34
+ class="zd-tabs-sortable-drop-indicator"
35
+ />
36
+
37
+ <zd-tab
38
+ v-bind="{
39
+ ...tab,
40
+ name: tab.name,
41
+ dense: tab.dense || instance.dense,
42
+ }"
43
+ @click="clickTab($event, index)"
44
+ @keydown="keydown($event, index)"
45
+ />
46
+ </template>
47
+
48
+ <span
49
+ v-if="dragOverIndex === instance.tabs.length"
50
+ class="zd-tabs-sortable-drop-indicator"
51
+ />
39
52
  </v-tabs>
40
53
 
41
54
  <v-window
42
- v-model="instance.activeTab"
55
+ :model-value="activeTabName"
43
56
  >
44
57
  <zd-tab-item
45
58
  v-for="(tab, index) in instance.tabs"
46
- v-show="tab.isVisible && index === instance.activeTab"
59
+ v-show="tab.isVisible && tab.name === activeTabName"
47
60
  :key="tab.name"
48
- :value="index"
61
+ :value="tab.name"
49
62
  :children ="tab.children"
50
63
  v-bind ="{
51
- index: index,
52
64
  name: instance.name+'-tab-item-'+index,
53
65
  lazyLoad: tab.lazyLoad,
54
66
  }"
@@ -113,5 +125,22 @@
113
125
  height:100% !important;
114
126
  }
115
127
  }
128
+
129
+ &-sortable-drop-indicator {
130
+ display: inline-block;
131
+ position: relative;
132
+ height: 100%;
133
+ width: 0;
134
+ z-index: 1;
135
+
136
+ &::after {
137
+ content: '';
138
+ width: 3px;
139
+ background-color: var(--v-primary-base);
140
+ height: 100%;
141
+ position: absolute;
142
+ opacity: 0.75;
143
+ }
144
+ }
116
145
  }
117
146
  </style>