vxe-pc-ui 0.1.0 → 0.2.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 (197) hide show
  1. package/README.md +7 -0
  2. package/es/anchor/src/anchor-link.js +2 -2
  3. package/es/anchor/src/util.js +1 -1
  4. package/es/checkbox/src/checkbox.js +3 -3
  5. package/es/checkbox/src/group.js +3 -3
  6. package/es/components.js +6 -0
  7. package/es/form/src/form-config-item.js +1 -1
  8. package/es/form/src/form-gather.js +1 -1
  9. package/es/form/src/form-item.js +4 -4
  10. package/es/form/src/form.js +3 -3
  11. package/es/input/src/input.js +3 -3
  12. package/es/layout-aside/src/layout-aside.js +4 -2
  13. package/es/layout-aside/style.css +3 -1
  14. package/es/layout-aside/style.min.css +1 -1
  15. package/es/layout-body/src/layout-body.js +7 -2
  16. package/es/layout-body/style.css +2 -0
  17. package/es/layout-body/style.min.css +1 -1
  18. package/es/layout-container/src/layout-container.js +2 -1
  19. package/es/layout-footer/src/layout-footer.js +5 -3
  20. package/es/layout-footer/style.css +3 -1
  21. package/es/layout-footer/style.min.css +1 -1
  22. package/es/layout-header/style.css +0 -1
  23. package/es/layout-header/style.min.css +1 -1
  24. package/es/radio/src/button.js +4 -4
  25. package/es/radio/src/group.js +4 -4
  26. package/es/radio/src/radio.js +4 -4
  27. package/es/select/src/optgroup.js +1 -1
  28. package/es/select/src/option.js +1 -1
  29. package/es/select/src/select.js +4 -4
  30. package/es/style.css +1 -1
  31. package/es/style.min.css +1 -1
  32. package/es/switch/src/switch.js +3 -3
  33. package/es/tab-pane/index.js +8 -0
  34. package/es/tab-pane/style.css +0 -0
  35. package/es/tab-pane/style.min.css +0 -0
  36. package/es/tabs/index.js +8 -0
  37. package/es/tabs/src/tab-pane.js +64 -0
  38. package/es/tabs/src/tabs.js +195 -0
  39. package/es/tabs/src/util.js +17 -0
  40. package/es/tabs/style.css +113 -0
  41. package/es/tabs/style.min.css +1 -0
  42. package/es/textarea/src/textarea.js +3 -3
  43. package/es/ui/src/core.js +1 -1
  44. package/es/ui/src/log.js +1 -1
  45. package/es/vxe-layout-aside/style.css +3 -1
  46. package/es/vxe-layout-aside/style.min.css +1 -1
  47. package/es/vxe-layout-body/style.css +2 -0
  48. package/es/vxe-layout-body/style.min.css +1 -1
  49. package/es/vxe-layout-footer/style.css +3 -1
  50. package/es/vxe-layout-footer/style.min.css +1 -1
  51. package/es/vxe-layout-header/style.css +0 -1
  52. package/es/vxe-layout-header/style.min.css +1 -1
  53. package/es/vxe-tab-pane/index.js +3 -0
  54. package/es/vxe-tab-pane/style.css +0 -0
  55. package/es/vxe-tab-pane/style.min.css +0 -0
  56. package/es/vxe-tabs/index.js +3 -0
  57. package/es/vxe-tabs/style.css +113 -0
  58. package/es/vxe-tabs/style.min.css +1 -0
  59. package/lib/anchor/src/anchor-link.js +1 -1
  60. package/lib/anchor/src/anchor-link.min.js +1 -1
  61. package/lib/anchor/src/util.js +2 -2
  62. package/lib/anchor/src/util.min.js +1 -1
  63. package/lib/checkbox/src/checkbox.js +3 -3
  64. package/lib/checkbox/src/checkbox.min.js +1 -1
  65. package/lib/checkbox/src/group.js +3 -3
  66. package/lib/checkbox/src/group.min.js +1 -1
  67. package/lib/components.js +25 -1
  68. package/lib/components.min.js +1 -1
  69. package/lib/form/src/form-config-item.js +1 -1
  70. package/lib/form/src/form-config-item.min.js +1 -1
  71. package/lib/form/src/form-gather.js +1 -1
  72. package/lib/form/src/form-gather.min.js +1 -1
  73. package/lib/form/src/form-item.js +4 -4
  74. package/lib/form/src/form-item.min.js +1 -1
  75. package/lib/form/src/form.js +3 -3
  76. package/lib/form/src/form.min.js +1 -1
  77. package/lib/index.umd.js +421 -55
  78. package/lib/index.umd.min.js +1 -1
  79. package/lib/input/src/input.js +3 -3
  80. package/lib/input/src/input.min.js +1 -1
  81. package/lib/layout-aside/src/layout-aside.js +5 -2
  82. package/lib/layout-aside/src/layout-aside.min.js +1 -1
  83. package/lib/layout-aside/style/style.css +3 -1
  84. package/lib/layout-aside/style/style.min.css +1 -1
  85. package/lib/layout-body/src/layout-body.js +9 -2
  86. package/lib/layout-body/src/layout-body.min.js +1 -1
  87. package/lib/layout-body/style/style.css +2 -0
  88. package/lib/layout-body/style/style.min.css +1 -1
  89. package/lib/layout-container/src/layout-container.js +4 -1
  90. package/lib/layout-container/src/layout-container.min.js +1 -1
  91. package/lib/layout-footer/src/layout-footer.js +8 -3
  92. package/lib/layout-footer/src/layout-footer.min.js +1 -1
  93. package/lib/layout-footer/style/style.css +3 -1
  94. package/lib/layout-footer/style/style.min.css +1 -1
  95. package/lib/layout-header/style/style.css +0 -1
  96. package/lib/layout-header/style/style.min.css +1 -1
  97. package/lib/radio/src/button.js +4 -4
  98. package/lib/radio/src/button.min.js +1 -1
  99. package/lib/radio/src/group.js +4 -4
  100. package/lib/radio/src/group.min.js +1 -1
  101. package/lib/radio/src/radio.js +4 -4
  102. package/lib/radio/src/radio.min.js +1 -1
  103. package/lib/select/src/optgroup.js +1 -1
  104. package/lib/select/src/optgroup.min.js +1 -1
  105. package/lib/select/src/option.js +1 -1
  106. package/lib/select/src/option.min.js +1 -1
  107. package/lib/select/src/select.js +4 -4
  108. package/lib/select/src/select.min.js +1 -1
  109. package/lib/style.css +1 -1
  110. package/lib/style.min.css +1 -1
  111. package/lib/switch/src/switch.js +3 -3
  112. package/lib/switch/src/switch.min.js +1 -1
  113. package/lib/tab-pane/index.js +15 -0
  114. package/lib/tab-pane/index.min.js +1 -0
  115. package/lib/tab-pane/style/index.js +1 -0
  116. package/lib/tab-pane/style/style.css +0 -0
  117. package/lib/tab-pane/style/style.min.css +0 -0
  118. package/lib/tabs/index.js +15 -0
  119. package/lib/tabs/index.min.js +1 -0
  120. package/lib/tabs/src/tab-pane.js +73 -0
  121. package/lib/tabs/src/tab-pane.min.js +1 -0
  122. package/lib/tabs/src/tabs.js +240 -0
  123. package/lib/tabs/src/tabs.min.js +1 -0
  124. package/lib/tabs/src/util.js +27 -0
  125. package/lib/tabs/src/util.min.js +1 -0
  126. package/lib/tabs/style/index.js +1 -0
  127. package/lib/tabs/style/style.css +113 -0
  128. package/lib/tabs/style/style.min.css +1 -0
  129. package/lib/textarea/src/textarea.js +3 -3
  130. package/lib/textarea/src/textarea.min.js +1 -1
  131. package/lib/ui/src/core.js +1 -1
  132. package/lib/ui/src/core.min.js +1 -1
  133. package/lib/ui/src/log.js +1 -1
  134. package/lib/ui/src/log.min.js +1 -1
  135. package/lib/vxe-layout-aside/style/style.css +3 -1
  136. package/lib/vxe-layout-aside/style/style.min.css +1 -1
  137. package/lib/vxe-layout-body/style/style.css +2 -0
  138. package/lib/vxe-layout-body/style/style.min.css +1 -1
  139. package/lib/vxe-layout-footer/style/style.css +3 -1
  140. package/lib/vxe-layout-footer/style/style.min.css +1 -1
  141. package/lib/vxe-layout-header/style/style.css +0 -1
  142. package/lib/vxe-layout-header/style/style.min.css +1 -1
  143. package/lib/vxe-tab-pane/index.js +22 -0
  144. package/lib/vxe-tab-pane/index.min.js +1 -0
  145. package/lib/vxe-tab-pane/style/index.js +1 -0
  146. package/lib/vxe-tab-pane/style/style.css +0 -0
  147. package/lib/vxe-tab-pane/style/style.min.css +0 -0
  148. package/lib/vxe-tabs/index.js +22 -0
  149. package/lib/vxe-tabs/index.min.js +1 -0
  150. package/lib/vxe-tabs/style/index.js +1 -0
  151. package/lib/vxe-tabs/style/style.css +113 -0
  152. package/lib/vxe-tabs/style/style.min.css +1 -0
  153. package/package.json +1 -1
  154. package/packages/anchor/src/anchor-link.ts +2 -2
  155. package/packages/anchor/src/util.ts +1 -1
  156. package/packages/checkbox/src/checkbox.ts +3 -3
  157. package/packages/checkbox/src/group.ts +3 -3
  158. package/packages/components.ts +6 -0
  159. package/packages/form/src/form-config-item.ts +1 -1
  160. package/packages/form/src/form-gather.ts +1 -1
  161. package/packages/form/src/form-item.ts +4 -4
  162. package/packages/form/src/form.ts +4 -3
  163. package/packages/input/src/input.ts +3 -3
  164. package/packages/layout-aside/src/layout-aside.ts +8 -6
  165. package/packages/layout-body/src/layout-body.ts +9 -4
  166. package/packages/layout-container/src/layout-container.ts +5 -4
  167. package/packages/layout-footer/src/layout-footer.ts +7 -5
  168. package/packages/layout-header/src/layout-header.ts +3 -3
  169. package/packages/radio/src/button.ts +4 -4
  170. package/packages/radio/src/group.ts +4 -4
  171. package/packages/radio/src/radio.ts +4 -4
  172. package/packages/select/src/optgroup.ts +1 -1
  173. package/packages/select/src/option.ts +1 -1
  174. package/packages/select/src/select.ts +4 -4
  175. package/packages/switch/src/switch.ts +3 -3
  176. package/packages/tab-pane/index.ts +11 -0
  177. package/packages/tabs/index.ts +11 -0
  178. package/packages/tabs/src/tab-pane.ts +85 -0
  179. package/packages/tabs/src/tabs.ts +223 -0
  180. package/packages/tabs/src/util.ts +21 -0
  181. package/packages/textarea/src/textarea.ts +3 -3
  182. package/styles/all.scss +2 -0
  183. package/styles/components/layout-aside.scss +3 -1
  184. package/styles/components/layout-body.scss +3 -1
  185. package/styles/components/layout-footer.scss +3 -1
  186. package/styles/components/layout-header.scss +0 -1
  187. package/styles/components/tab-pane.scss +0 -0
  188. package/styles/components/tabs.scss +116 -0
  189. package/types/all.d.ts +2 -0
  190. package/types/components/layout-aside.d.ts +10 -1
  191. package/types/components/layout-body.d.ts +4 -1
  192. package/types/components/layout-container.d.ts +4 -1
  193. package/types/components/layout-footer.d.ts +7 -2
  194. package/types/components/layout-header.d.ts +4 -1
  195. package/types/components/tab-pane.d.ts +84 -0
  196. package/types/components/tabs.d.ts +80 -0
  197. package/types/tool/common.d.ts +5 -0
@@ -25,7 +25,7 @@ export default defineComponent({
25
25
  setup(props, context) {
26
26
  const { emit } = context;
27
27
  const $xeform = inject('$xeForm', null);
28
- const $xeformiteminfo = inject('$xeFormItemInfo', null);
28
+ const formItemInfo = inject('xeFormItemInfo', null);
29
29
  const xID = XEUtils.uniqueId();
30
30
  const computeSize = useSize(props);
31
31
  const reactData = reactive({
@@ -60,8 +60,8 @@ export default defineComponent({
60
60
  emit('update:modelValue', value);
61
61
  switchMethods.dispatchEvent('change', { value }, evnt);
62
62
  // 自动更新校验状态
63
- if ($xeform && $xeformiteminfo) {
64
- $xeform.triggerItemEvent(evnt, $xeformiteminfo.itemConfig.field, value);
63
+ if ($xeform && formItemInfo) {
64
+ $xeform.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
65
65
  }
66
66
  _atimeout = setTimeout(() => {
67
67
  reactData.hasAnimat = false;
@@ -0,0 +1,8 @@
1
+ import VxeTabPaneComponent from '../tabs/src/tab-pane';
2
+ const VxeTabPane = Object.assign({}, VxeTabPaneComponent, {
3
+ install(app) {
4
+ app.component(VxeTabPaneComponent.name, VxeTabPaneComponent);
5
+ }
6
+ });
7
+ export const TabPane = VxeTabPane;
8
+ export default VxeTabPane;
File without changes
File without changes
@@ -0,0 +1,8 @@
1
+ import VxeTabsComponent from './src/tabs';
2
+ const VxeTabs = Object.assign({}, VxeTabsComponent, {
3
+ install(app) {
4
+ app.component(VxeTabsComponent.name, VxeTabsComponent);
5
+ }
6
+ });
7
+ export const Tabs = VxeTabs;
8
+ export default VxeTabs;
@@ -0,0 +1,64 @@
1
+ import { defineComponent, ref, h, reactive, watch, inject, onMounted, onUnmounted } from 'vue';
2
+ import XEUtils from 'xe-utils';
3
+ import { assembleAnchorTab, destroyAnchorTab } from './util';
4
+ export default defineComponent({
5
+ name: 'VxeTabPane',
6
+ props: {
7
+ title: [String, Number],
8
+ name: [String, Number, Boolean]
9
+ },
10
+ emits: [],
11
+ setup(props, context) {
12
+ const { slots } = context;
13
+ const xID = XEUtils.uniqueId();
14
+ const refElem = ref();
15
+ const $xeTabs = inject('$xeTabs', null);
16
+ const reactData = reactive({});
17
+ const tabConfig = reactive({
18
+ id: xID,
19
+ title: props.title,
20
+ name: props.name,
21
+ slots: {
22
+ default: slots.default
23
+ }
24
+ });
25
+ const refMaps = {
26
+ refElem
27
+ };
28
+ const computeMaps = {};
29
+ const $xeTabPane = {
30
+ xID,
31
+ props,
32
+ context,
33
+ reactData,
34
+ getRefMaps: () => refMaps,
35
+ getComputeMaps: () => computeMaps
36
+ };
37
+ watch(() => props.title, (val) => {
38
+ tabConfig.title = val;
39
+ });
40
+ watch(() => props.name, (val) => {
41
+ tabConfig.name = val;
42
+ });
43
+ onMounted(() => {
44
+ if ($xeTabs && refElem.value) {
45
+ assembleAnchorTab($xeTabs, refElem.value, tabConfig);
46
+ }
47
+ });
48
+ onUnmounted(() => {
49
+ if ($xeTabs) {
50
+ destroyAnchorTab($xeTabs, tabConfig);
51
+ }
52
+ });
53
+ const renderVN = () => {
54
+ return h('div', {
55
+ ref: refElem
56
+ }, []);
57
+ };
58
+ $xeTabPane.renderVN = renderVN;
59
+ return $xeTabPane;
60
+ },
61
+ render() {
62
+ return this.renderVN();
63
+ }
64
+ });
@@ -0,0 +1,195 @@
1
+ import { defineComponent, ref, h, reactive, provide, computed, createCommentVNode, watch, nextTick, onMounted } from 'vue';
2
+ import XEUtils from 'xe-utils';
3
+ import VxeTabPaneComponent from './tab-pane';
4
+ import { getSlotVNs } from '../../ui/src/vn';
5
+ export default defineComponent({
6
+ name: 'VxeTabs',
7
+ props: {
8
+ modelValue: [String, Number, Boolean],
9
+ options: Array,
10
+ destroyOnClose: Boolean,
11
+ type: String
12
+ },
13
+ emits: [],
14
+ setup(props, context) {
15
+ const { slots } = context;
16
+ const xID = XEUtils.uniqueId();
17
+ const refElem = ref();
18
+ const refHeaderElem = ref();
19
+ const reactData = reactive({
20
+ staticTabs: [],
21
+ activeName: props.modelValue,
22
+ initNames: props.modelValue ? [props.modelValue] : [],
23
+ lintLeft: 0,
24
+ lintWidth: 0
25
+ });
26
+ const refMaps = {
27
+ refElem
28
+ };
29
+ const computeActiveOptionTab = computed(() => {
30
+ const { options } = props;
31
+ const { activeName } = reactData;
32
+ return options ? options.find(item => item.name === activeName) : null;
33
+ });
34
+ const computeActiveDefaultTab = computed(() => {
35
+ const { staticTabs, activeName } = reactData;
36
+ return staticTabs.find(item => item.name === activeName);
37
+ });
38
+ const computeMaps = {};
39
+ const $xeTabs = {
40
+ xID,
41
+ props,
42
+ context,
43
+ reactData,
44
+ getRefMaps: () => refMaps,
45
+ getComputeMaps: () => computeMaps
46
+ };
47
+ const callSlot = (slotFunc, params) => {
48
+ if (slotFunc) {
49
+ if (XEUtils.isString(slotFunc)) {
50
+ slotFunc = slots[slotFunc] || null;
51
+ }
52
+ if (XEUtils.isFunction(slotFunc)) {
53
+ return getSlotVNs(slotFunc(params));
54
+ }
55
+ }
56
+ return [];
57
+ };
58
+ const updateLineStyle = () => {
59
+ nextTick(() => {
60
+ const { type, options } = props;
61
+ const { staticTabs, activeName } = reactData;
62
+ const headerWrapperEl = refHeaderElem.value;
63
+ if (headerWrapperEl && !type) {
64
+ const index = XEUtils.findIndexOf(staticTabs.length ? staticTabs : options, item => item.name === activeName);
65
+ if (index > -1) {
66
+ const tabEl = headerWrapperEl.children[index];
67
+ const tabWidth = tabEl.clientWidth;
68
+ const lintWidth = Math.max(4, Math.floor(tabWidth * 0.6));
69
+ reactData.lintLeft = tabEl.offsetLeft + Math.floor((tabWidth - lintWidth) / 2);
70
+ reactData.lintWidth = lintWidth;
71
+ }
72
+ }
73
+ });
74
+ };
75
+ const clickEvent = (evnt, item) => {
76
+ const { initNames } = reactData;
77
+ const { name } = item;
78
+ if (!initNames.includes(name)) {
79
+ initNames.push(name);
80
+ }
81
+ reactData.activeName = name;
82
+ updateLineStyle();
83
+ };
84
+ const renderTabHeader = (list) => {
85
+ const { type } = props;
86
+ const { activeName, lintLeft, lintWidth } = reactData;
87
+ return h('div', {
88
+ class: 'vxe-tabs-header'
89
+ }, [
90
+ h('div', {
91
+ ref: refHeaderElem,
92
+ class: 'vxe-tabs-header--wrapper'
93
+ }, list.map(item => {
94
+ const { title, name, slots } = item;
95
+ const tabSlot = slots ? slots.tab : null;
96
+ return h('div', {
97
+ class: ['vxe-tab-header--item', {
98
+ 'is--active': activeName === name
99
+ }],
100
+ onClick(evnt) {
101
+ clickEvent(evnt, item);
102
+ }
103
+ }, [
104
+ h('div', {
105
+ class: 'vxe-tab-header--item-name'
106
+ }, tabSlot ? callSlot(tabSlot, { name, title }) : `${title}`)
107
+ ]);
108
+ })),
109
+ type
110
+ ? null
111
+ : h('span', {
112
+ class: 'vxe-tabs-header--active-line',
113
+ style: {
114
+ left: `${lintLeft}px`,
115
+ width: `${lintWidth}px`
116
+ }
117
+ })
118
+ ]);
119
+ };
120
+ const renderOptionPane = (item) => {
121
+ const { initNames, activeName } = reactData;
122
+ const { name, slots } = item;
123
+ const defaultSlot = slots ? slots.default : null;
124
+ return h(VxeTabPaneComponent, item, {
125
+ default() {
126
+ return name && initNames.includes(name)
127
+ ? h('div', {
128
+ class: ['vxe-tab-pane--item', {
129
+ 'is--visible': activeName === name
130
+ }]
131
+ }, callSlot(defaultSlot, {}))
132
+ : createCommentVNode();
133
+ }
134
+ });
135
+ };
136
+ const renderOptionContent = (options) => {
137
+ const { destroyOnClose } = props;
138
+ const activeOptionTab = computeActiveOptionTab.value;
139
+ if (destroyOnClose) {
140
+ return activeOptionTab ? renderOptionPane(activeOptionTab) : createCommentVNode();
141
+ }
142
+ return options.map(renderOptionPane);
143
+ };
144
+ const renderDefaultPane = (item) => {
145
+ const { initNames, activeName } = reactData;
146
+ const { name, slots } = item;
147
+ const defaultSlot = slots ? slots.default : null;
148
+ return name && initNames.includes(name)
149
+ ? h('div', {
150
+ class: ['vxe-tab-pane--item', {
151
+ 'is--visible': activeName === name
152
+ }]
153
+ }, callSlot(defaultSlot, {}))
154
+ : createCommentVNode();
155
+ };
156
+ const renderDefaultContent = (staticTabs) => {
157
+ const { destroyOnClose } = props;
158
+ const activeDefaultTab = computeActiveDefaultTab.value;
159
+ if (destroyOnClose) {
160
+ return activeDefaultTab ? renderDefaultPane(activeDefaultTab) : createCommentVNode();
161
+ }
162
+ return staticTabs.map(renderDefaultPane);
163
+ };
164
+ const renderVN = () => {
165
+ const { type, options } = props;
166
+ const { staticTabs } = reactData;
167
+ const defaultSlot = slots.default;
168
+ return h('div', {
169
+ ref: refElem,
170
+ class: ['vxe-tabs', `vxe-tabs--${type || 'default'}`]
171
+ }, [
172
+ h('div', {
173
+ class: 'vxe-tabs-slots'
174
+ }, defaultSlot ? defaultSlot({}) : []),
175
+ renderTabHeader(defaultSlot ? staticTabs : (options || [])),
176
+ h('div', {
177
+ class: 'vxe-tabs-pane'
178
+ }, defaultSlot ? renderDefaultContent(staticTabs) : renderOptionContent(options || []))
179
+ ]);
180
+ };
181
+ watch(() => props.modelValue, (val) => {
182
+ reactData.activeName = val;
183
+ updateLineStyle();
184
+ });
185
+ onMounted(() => {
186
+ updateLineStyle();
187
+ });
188
+ $xeTabs.renderVN = renderVN;
189
+ provide('$xeTabs', $xeTabs);
190
+ return $xeTabs;
191
+ },
192
+ render() {
193
+ return this.renderVN();
194
+ }
195
+ });
@@ -0,0 +1,17 @@
1
+ import XEUtils from 'xe-utils';
2
+ export function assembleAnchorTab($xeTabs, elem, tabConfig) {
3
+ const staticLinks = $xeTabs.reactData.staticTabs;
4
+ const parentElem = elem.parentNode;
5
+ if (parentElem) {
6
+ staticLinks.splice(XEUtils.arrayIndexOf(parentElem.children, elem), 0, tabConfig);
7
+ $xeTabs.reactData.staticTabs = staticLinks.slice(0);
8
+ }
9
+ }
10
+ export function destroyAnchorTab($xeTabs, tabConfig) {
11
+ const staticTabs = $xeTabs.reactData.staticTabs;
12
+ const matchObj = XEUtils.findTree(staticTabs, item => item.id === tabConfig.id, { children: 'children' });
13
+ if (matchObj) {
14
+ matchObj.items.splice(matchObj.index, 1);
15
+ }
16
+ $xeTabs.reactData.staticTabs = staticTabs.slice(0);
17
+ }
@@ -0,0 +1,113 @@
1
+ .vxe-tabs {
2
+ background-color: var(--vxe-ui-layout-background-color);
3
+ }
4
+
5
+ .vxe-tabs-header {
6
+ position: relative;
7
+ }
8
+
9
+ .vxe-tabs-header--wrapper {
10
+ position: relative;
11
+ display: flex;
12
+ flex-direction: row;
13
+ }
14
+ .vxe-tabs-header--wrapper::after {
15
+ content: "";
16
+ position: absolute;
17
+ left: 0;
18
+ bottom: 0;
19
+ width: 100%;
20
+ height: 1px;
21
+ background-color: #e4e7ed;
22
+ }
23
+
24
+ .vxe-tab-header--item {
25
+ position: relative;
26
+ padding: 0 16px;
27
+ cursor: pointer;
28
+ }
29
+ .vxe-tab-header--item.is--active {
30
+ color: var(--vxe-ui-font-primary-color);
31
+ }
32
+
33
+ .vxe-tab-header--item-name {
34
+ height: 40px;
35
+ line-height: 40px;
36
+ border-bottom: 2px solid transparent;
37
+ transition: color 0.3s ease-in-out;
38
+ }
39
+
40
+ .vxe-tab-pane--item {
41
+ display: none;
42
+ padding: var(--vxe-ui-layout-padding-default);
43
+ }
44
+ .vxe-tab-pane--item.is--visible {
45
+ display: block;
46
+ }
47
+
48
+ .vxe-tabs-header--active-line {
49
+ display: none;
50
+ }
51
+
52
+ .vxe-tabs--default .vxe-tabs-header--active-line {
53
+ display: block;
54
+ position: absolute;
55
+ bottom: -1px;
56
+ left: 0;
57
+ height: 2px;
58
+ width: 4px;
59
+ background-color: var(--vxe-ui-font-primary-color);
60
+ z-index: 1;
61
+ transition: all 0.3s ease-in-out;
62
+ }
63
+
64
+ .vxe-tabs--card .vxe-tabs-header {
65
+ border-top: 1px solid #e4e7ed;
66
+ border-left: 1px solid #e4e7ed;
67
+ }
68
+ .vxe-tabs--card .vxe-tab-header--item {
69
+ border-left: 1px solid #e4e7ed;
70
+ }
71
+ .vxe-tabs--card .vxe-tab-header--item:first-child {
72
+ border-left: 0;
73
+ }
74
+ .vxe-tabs--card .vxe-tab-header--item:last-child {
75
+ border-right: 1px solid #e4e7ed;
76
+ }
77
+
78
+ .vxe-tabs--border-card .vxe-tab-pane--item {
79
+ border-bottom: 1px solid #e4e7ed;
80
+ border-left: 1px solid #e4e7ed;
81
+ border-right: 1px solid #e4e7ed;
82
+ }
83
+ .vxe-tabs--border-card .vxe-tabs-header {
84
+ border-top: 1px solid #e4e7ed;
85
+ border-left: 1px solid #e4e7ed;
86
+ border-right: 1px solid #e4e7ed;
87
+ background-color: #f5f7fa;
88
+ }
89
+ .vxe-tabs--border-card .vxe-tab-header--item.is--active {
90
+ background-color: #ffffff;
91
+ }
92
+ .vxe-tabs--border-card .vxe-tab-header--item.is--active::before {
93
+ content: "";
94
+ position: absolute;
95
+ top: 0;
96
+ left: -1px;
97
+ width: calc(100% + 2px);
98
+ height: 100%;
99
+ border-left: 1px solid #e4e7ed;
100
+ border-right: 1px solid #e4e7ed;
101
+ pointer-events: none;
102
+ }
103
+ .vxe-tabs--border-card .vxe-tab-header--item.is--active::after {
104
+ content: "";
105
+ position: absolute;
106
+ bottom: 0;
107
+ left: 0;
108
+ width: 100%;
109
+ height: 1px;
110
+ background-color: var(--vxe-ui-layout-background-color);
111
+ pointer-events: none;
112
+ z-index: 1;
113
+ }
@@ -0,0 +1 @@
1
+ .vxe-tabs{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs-header{position:relative}.vxe-tabs-header--wrapper{position:relative;display:flex;flex-direction:row}.vxe-tabs-header--wrapper::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#e4e7ed}.vxe-tab-header--item{position:relative;padding:0 16px;cursor:pointer}.vxe-tab-header--item.is--active{color:var(--vxe-ui-font-primary-color)}.vxe-tab-header--item-name{height:40px;line-height:40px;border-bottom:2px solid transparent;transition:color .3s ease-in-out}.vxe-tab-pane--item{display:none;padding:var(--vxe-ui-layout-padding-default)}.vxe-tab-pane--item.is--visible{display:block}.vxe-tabs-header--active-line{display:none}.vxe-tabs--default .vxe-tabs-header--active-line{display:block;position:absolute;bottom:-1px;left:0;height:2px;width:4px;background-color:var(--vxe-ui-font-primary-color);z-index:1;transition:all .3s ease-in-out}.vxe-tabs--card .vxe-tabs-header{border-top:1px solid #e4e7ed;border-left:1px solid #e4e7ed}.vxe-tabs--card .vxe-tab-header--item{border-left:1px solid #e4e7ed}.vxe-tabs--card .vxe-tab-header--item:first-child{border-left:0}.vxe-tabs--card .vxe-tab-header--item:last-child{border-right:1px solid #e4e7ed}.vxe-tabs--border-card .vxe-tab-pane--item{border-bottom:1px solid #e4e7ed;border-left:1px solid #e4e7ed;border-right:1px solid #e4e7ed}.vxe-tabs--border-card .vxe-tabs-header{border-top:1px solid #e4e7ed;border-left:1px solid #e4e7ed;border-right:1px solid #e4e7ed;background-color:#f5f7fa}.vxe-tabs--border-card .vxe-tab-header--item.is--active{background-color:#fff}.vxe-tabs--border-card .vxe-tab-header--item.is--active::before{content:"";position:absolute;top:0;left:-1px;width:calc(100% + 2px);height:100%;border-left:1px solid #e4e7ed;border-right:1px solid #e4e7ed;pointer-events:none}.vxe-tabs--border-card .vxe-tab-header--item.is--active::after{content:"";position:absolute;bottom:0;left:0;width:100%;height:1px;background-color:var(--vxe-ui-layout-background-color);pointer-events:none;z-index:1}
@@ -41,7 +41,7 @@ export default defineComponent({
41
41
  setup(props, context) {
42
42
  const { emit } = context;
43
43
  const $xeform = inject('$xeForm', null);
44
- const $xeformiteminfo = inject('$xeFormItemInfo', null);
44
+ const formItemInfo = inject('xeFormItemInfo', null);
45
45
  const xID = XEUtils.uniqueId();
46
46
  const computeSize = useSize(props);
47
47
  const reactData = reactive({
@@ -126,8 +126,8 @@ export default defineComponent({
126
126
  if (XEUtils.toValueString(props.modelValue) !== value) {
127
127
  textareaMethods.dispatchEvent('change', { value }, evnt);
128
128
  // 自动更新校验状态
129
- if ($xeform && $xeformiteminfo) {
130
- $xeform.triggerItemEvent(evnt, $xeformiteminfo.itemConfig.field, value);
129
+ if ($xeform && formItemInfo) {
130
+ $xeform.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
131
131
  }
132
132
  }
133
133
  };
package/es/ui/src/core.js CHANGED
@@ -32,7 +32,7 @@ export function setIcon(options) {
32
32
  export function getIcon(key) {
33
33
  return arguments.length ? XEUtils.get(iconConfigStore, key) : iconConfigStore;
34
34
  }
35
- export const version = "0.1.0";
35
+ export const version = "0.2.0";
36
36
  const VxeCore = {
37
37
  version,
38
38
  setConfig,
package/es/ui/src/log.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { getI18n } from './i18n';
2
2
  export function getLog(message, params) {
3
- return `[vxe-table v${"0.1.0"}] ${getI18n(message, params)}`;
3
+ return `[vxe-table v${"0.2.0"}] ${getI18n(message, params)}`;
4
4
  }
5
5
  function outLog(type) {
6
6
  return function (message, params) {
@@ -1,7 +1,6 @@
1
1
  .vxe-layout-aside {
2
2
  flex-shrink: 0;
3
3
  transition: width 0.3s;
4
- padding: var(--vxe-ui-layout-padding-default);
5
4
  overflow-y: auto;
6
5
  overflow-x: hidden;
7
6
  }
@@ -10,4 +9,7 @@
10
9
  }
11
10
  .vxe-layout-aside.is--collapse {
12
11
  width: var(--vxe-ui-layout-aside-collapse-width);
12
+ }
13
+ .vxe-layout-aside.is--padding {
14
+ padding: var(--vxe-ui-layout-padding-default);
13
15
  }
@@ -1 +1 @@
1
- .vxe-layout-aside{flex-shrink:0;transition:width .3s;padding:var(--vxe-ui-layout-padding-default);overflow-y:auto;overflow-x:hidden}.vxe-layout-aside.is--default-width{width:var(--vxe-ui-layout-aside-default-width)}.vxe-layout-aside.is--collapse{width:var(--vxe-ui-layout-aside-collapse-width)}
1
+ .vxe-layout-aside{flex-shrink:0;transition:width .3s;overflow-y:auto;overflow-x:hidden}.vxe-layout-aside.is--default-width{width:var(--vxe-ui-layout-aside-default-width)}.vxe-layout-aside.is--collapse{width:var(--vxe-ui-layout-aside-collapse-width)}.vxe-layout-aside.is--padding{padding:var(--vxe-ui-layout-padding-default)}
@@ -1,4 +1,6 @@
1
1
  .vxe-layout-body {
2
2
  flex-grow: 1;
3
+ }
4
+ .vxe-layout-body.is--padding {
3
5
  padding: var(--vxe-ui-layout-padding-default);
4
6
  }
@@ -1 +1 @@
1
- .vxe-layout-body{flex-grow:1;padding:var(--vxe-ui-layout-padding-default)}
1
+ .vxe-layout-body{flex-grow:1}.vxe-layout-body.is--padding{padding:var(--vxe-ui-layout-padding-default)}
@@ -1,6 +1,5 @@
1
1
  .vxe-layout-footer {
2
2
  flex-shrink: 0;
3
- padding: var(--vxe-ui-layout-padding-default);
4
3
  background-color: var(--vxe-ui-layout-background-color);
5
4
  }
6
5
  .vxe-layout-footer.is--fixed {
@@ -8,4 +7,7 @@
8
7
  bottom: 0;
9
8
  left: 0;
10
9
  z-index: 9;
10
+ }
11
+ .vxe-layout-footer.align--center {
12
+ text-align: center;
11
13
  }
@@ -1 +1 @@
1
- .vxe-layout-footer{flex-shrink:0;padding:var(--vxe-ui-layout-padding-default);background-color:var(--vxe-ui-layout-background-color)}.vxe-layout-footer.is--fixed{position:sticky;bottom:0;left:0;z-index:9}
1
+ .vxe-layout-footer{flex-shrink:0;background-color:var(--vxe-ui-layout-background-color)}.vxe-layout-footer.is--fixed{position:sticky;bottom:0;left:0;z-index:9}.vxe-layout-footer.align--center{text-align:center}
@@ -1,6 +1,5 @@
1
1
  .vxe-layout-header {
2
2
  flex-shrink: 0;
3
- padding: var(--vxe-ui-layout-padding-default);
4
3
  background-color: var(--vxe-ui-layout-background-color);
5
4
  }
6
5
  .vxe-layout-header.is--fixed {
@@ -1 +1 @@
1
- .vxe-layout-header{flex-shrink:0;padding:var(--vxe-ui-layout-padding-default);background-color:var(--vxe-ui-layout-background-color)}.vxe-layout-header.is--fixed{position:sticky;top:0;left:0;z-index:9}
1
+ .vxe-layout-header{flex-shrink:0;background-color:var(--vxe-ui-layout-background-color)}.vxe-layout-header.is--fixed{position:sticky;top:0;left:0;z-index:9}
@@ -0,0 +1,3 @@
1
+ import VxeTabPane from '../tab-pane';
2
+ export * from '../tab-pane';
3
+ export default VxeTabPane;
File without changes
File without changes
@@ -0,0 +1,3 @@
1
+ import VxeTabs from '../tabs';
2
+ export * from '../tabs';
3
+ export default VxeTabs;
@@ -0,0 +1,113 @@
1
+ .vxe-tabs {
2
+ background-color: var(--vxe-ui-layout-background-color);
3
+ }
4
+
5
+ .vxe-tabs-header {
6
+ position: relative;
7
+ }
8
+
9
+ .vxe-tabs-header--wrapper {
10
+ position: relative;
11
+ display: flex;
12
+ flex-direction: row;
13
+ }
14
+ .vxe-tabs-header--wrapper::after {
15
+ content: "";
16
+ position: absolute;
17
+ left: 0;
18
+ bottom: 0;
19
+ width: 100%;
20
+ height: 1px;
21
+ background-color: #e4e7ed;
22
+ }
23
+
24
+ .vxe-tab-header--item {
25
+ position: relative;
26
+ padding: 0 16px;
27
+ cursor: pointer;
28
+ }
29
+ .vxe-tab-header--item.is--active {
30
+ color: var(--vxe-ui-font-primary-color);
31
+ }
32
+
33
+ .vxe-tab-header--item-name {
34
+ height: 40px;
35
+ line-height: 40px;
36
+ border-bottom: 2px solid transparent;
37
+ transition: color 0.3s ease-in-out;
38
+ }
39
+
40
+ .vxe-tab-pane--item {
41
+ display: none;
42
+ padding: var(--vxe-ui-layout-padding-default);
43
+ }
44
+ .vxe-tab-pane--item.is--visible {
45
+ display: block;
46
+ }
47
+
48
+ .vxe-tabs-header--active-line {
49
+ display: none;
50
+ }
51
+
52
+ .vxe-tabs--default .vxe-tabs-header--active-line {
53
+ display: block;
54
+ position: absolute;
55
+ bottom: -1px;
56
+ left: 0;
57
+ height: 2px;
58
+ width: 4px;
59
+ background-color: var(--vxe-ui-font-primary-color);
60
+ z-index: 1;
61
+ transition: all 0.3s ease-in-out;
62
+ }
63
+
64
+ .vxe-tabs--card .vxe-tabs-header {
65
+ border-top: 1px solid #e4e7ed;
66
+ border-left: 1px solid #e4e7ed;
67
+ }
68
+ .vxe-tabs--card .vxe-tab-header--item {
69
+ border-left: 1px solid #e4e7ed;
70
+ }
71
+ .vxe-tabs--card .vxe-tab-header--item:first-child {
72
+ border-left: 0;
73
+ }
74
+ .vxe-tabs--card .vxe-tab-header--item:last-child {
75
+ border-right: 1px solid #e4e7ed;
76
+ }
77
+
78
+ .vxe-tabs--border-card .vxe-tab-pane--item {
79
+ border-bottom: 1px solid #e4e7ed;
80
+ border-left: 1px solid #e4e7ed;
81
+ border-right: 1px solid #e4e7ed;
82
+ }
83
+ .vxe-tabs--border-card .vxe-tabs-header {
84
+ border-top: 1px solid #e4e7ed;
85
+ border-left: 1px solid #e4e7ed;
86
+ border-right: 1px solid #e4e7ed;
87
+ background-color: #f5f7fa;
88
+ }
89
+ .vxe-tabs--border-card .vxe-tab-header--item.is--active {
90
+ background-color: #ffffff;
91
+ }
92
+ .vxe-tabs--border-card .vxe-tab-header--item.is--active::before {
93
+ content: "";
94
+ position: absolute;
95
+ top: 0;
96
+ left: -1px;
97
+ width: calc(100% + 2px);
98
+ height: 100%;
99
+ border-left: 1px solid #e4e7ed;
100
+ border-right: 1px solid #e4e7ed;
101
+ pointer-events: none;
102
+ }
103
+ .vxe-tabs--border-card .vxe-tab-header--item.is--active::after {
104
+ content: "";
105
+ position: absolute;
106
+ bottom: 0;
107
+ left: 0;
108
+ width: 100%;
109
+ height: 1px;
110
+ background-color: var(--vxe-ui-layout-background-color);
111
+ pointer-events: none;
112
+ z-index: 1;
113
+ }