@meethive/components 0.0.6 → 0.0.8

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.
@@ -1,4 +1,4 @@
1
- import { computed, unref, createVNode as _createVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from 'vue';
1
+ import { computed, unref, defineComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from 'vue';
2
2
  import { LayoutSider as Sider, Menu, Tooltip } from 'ant-design-vue';
3
3
  import BaseMenu, { baseMenuProps } from './BaseMenu.js';
4
4
  import { defaultSettingProps, LayoutType } from '../defaultSettings';
@@ -135,140 +135,146 @@ export const defaultRenderCollapsedButton = collapsed => {
135
135
  "type": "MenuFoldOutlined"
136
136
  }, null);
137
137
  };
138
- const SiderMenu = props => {
139
- const {
140
- collapsed,
141
- siderWidth,
142
- breakpoint,
143
- collapsedWidth = 48,
144
- menuExtraRender = false,
145
- menuContentRender = false,
146
- collapsedButtonRender = defaultRenderCollapsedButton,
147
- linksRender,
148
- theme
149
- } = props;
150
- const prefixCls = computed(() => 'pro-layout');
151
- const [wrapSSR, hashId] = useProLayoutStyle(prefixCls);
152
- const context = useRouteContext();
153
- const getPrefixCls = context.getPrefixCls;
154
- const baseClassName = getPrefixCls('sider');
155
- const hasSplitMenu = computed(() => {
156
- return props.layout === 'mix' && props.splitMenus;
157
- });
158
- const sSideWidth = computed(() => {
159
- return props.collapsed ? props.collapsedWidth : props.siderWidth;
160
- });
161
- const classNames = computed(() => ({
162
- [baseClassName]: true,
163
- [`${baseClassName}-fixed`]: context.fixSiderbar,
164
- [`${baseClassName}-${theme}`]: true,
165
- [`${baseClassName}-layout-${props.layout}`]: props.layout,
166
- [hashId.value]: true
167
- }));
168
- const logCls = computed(() => ({
169
- [`${baseClassName}-logo`]: true,
170
- [`${baseClassName}-logo-card`]: props.layoutType === LayoutType.CARD
171
- }));
172
- const handleSelect = $event => {
173
- if (props.onSelect) {
174
- if (unref(hasSplitMenu)) {
175
- props.onSelect([context.selectedKeys[0], ...$event]);
176
- return;
138
+ const SiderMenu = defineComponent({
139
+ name: 'SiderMenu',
140
+ props: siderMenuProps,
141
+ setup(props) {
142
+ const prefixCls = computed(() => 'pro-layout');
143
+ const [wrapSSR, hashId] = useProLayoutStyle(prefixCls);
144
+ const context = useRouteContext();
145
+ const getPrefixCls = context.getPrefixCls;
146
+ const baseClassName = getPrefixCls('sider');
147
+ const hasSplitMenu = computed(() => {
148
+ return props.layout === 'mix' && props.splitMenus;
149
+ });
150
+ const sSideWidth = computed(() => {
151
+ return props.collapsed ? props.collapsedWidth : props.siderWidth;
152
+ });
153
+ const classNames = computed(() => ({
154
+ [baseClassName]: true,
155
+ [`${baseClassName}-fixed`]: context.fixSiderbar,
156
+ [`${baseClassName}-${props.theme}`]: true,
157
+ [`${baseClassName}-layout-${props.layout}`]: props.layout,
158
+ [hashId.value]: true
159
+ }));
160
+ const logCls = computed(() => ({
161
+ [`${baseClassName}-logo`]: true,
162
+ [`${baseClassName}-logo-card`]: props.layoutType === LayoutType.CARD
163
+ }));
164
+ const handleSelect = $event => {
165
+ if (props.onSelect) {
166
+ if (unref(hasSplitMenu)) {
167
+ props.onSelect([context.selectedKeys[0], ...$event]);
168
+ return;
169
+ }
170
+ props.onSelect($event);
177
171
  }
178
- props.onSelect($event);
179
- }
180
- };
181
- const headerDom = defaultRenderLogoAndTitle({
182
- ...props,
183
- baseClassName
184
- });
185
- const extraDom = menuExtraRender && menuExtraRender(props);
186
- if (props.layoutType !== LayoutType.CARD && hasSplitMenu.value && unref(context.flatMenuData).length === 0) {
187
- return null;
188
- }
189
- const defaultMenuDom = _createVNode(BaseMenu, {
190
- "prefixCls": getPrefixCls(),
191
- "locale": props.locale || context.locale,
192
- "theme": theme,
193
- "mode": "inline",
194
- "menuData": hasSplitMenu.value ? context.flatMenuData : context.menuData,
195
- "collapsed": props.collapsed,
196
- "openKeys": context.openKeys,
197
- "selectedKeys": context.selectedKeys,
198
- "menuItemRender": props.menuItemRender,
199
- "subMenuItemRender": props.subMenuItemRender,
200
- "iconfontUrl": props.iconfontUrl,
201
- "onClick": props.onMenuClick,
202
- "style": {
203
- width: '100%'
204
- },
205
- "class": `${baseClassName}-menu`,
206
- "onUpdate:openKeys": $event => props.onOpenKeys && props.onOpenKeys($event),
207
- "onUpdate:selectedKeys": handleSelect
208
- }, null);
209
- return _createVNode(_Fragment, null, [context.fixSiderbar && _createVNode("div", {
210
- "style": {
211
- width: `${sSideWidth.value}px`,
212
- overflow: 'hidden',
213
- flex: `0 0 ${sSideWidth.value}px`,
214
- maxWidth: `${sSideWidth.value}px`,
215
- minWidth: `${sSideWidth.value}px`,
216
- transition: 'background-color 0.3s, min-width 0.3s, max-width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1)'
217
- }
218
- }, null), _createVNode(Sider, {
219
- "collapsible": true,
220
- "trigger": null,
221
- "collapsed": collapsed,
222
- "breakpoint": breakpoint || undefined,
223
- "onCollapse": collapse => {
224
- props.onCollapse?.(collapse);
225
- },
226
- "collapsedWidth": collapsedWidth,
227
- "style": {
228
- overflow: 'hidden',
229
- paddingTop: `${props.headerHeight}px`,
230
- zIndex: props.layoutType === LayoutType.PAD ? 200 : 1
231
- },
232
- "width": siderWidth,
233
- "theme": theme,
234
- "class": classNames.value
235
- }, {
236
- default: () => [headerDom && _createVNode("div", {
237
- "class": logCls.value,
238
- "onClick": props.layout !== 'mix' ? props.onMenuHeaderClick : undefined,
239
- "id": "logo",
240
- "style": props?.logoStyle
241
- }, [headerDom]), extraDom && _createVNode("div", {
242
- "class": {
243
- [`${baseClassName}-extra`]: true,
244
- [`${baseClassName}-extra-no-logo`]: !headerDom
172
+ };
173
+ const headerDom = computed(() => defaultRenderLogoAndTitle({
174
+ ...props,
175
+ baseClassName
176
+ }));
177
+ const extraDom = computed(() => props.menuExtraRender && props.menuExtraRender(props));
178
+ return () => {
179
+ const {
180
+ collapsed,
181
+ siderWidth,
182
+ breakpoint,
183
+ collapsedWidth = 48,
184
+ menuExtraRender = false,
185
+ menuContentRender = false,
186
+ collapsedButtonRender = defaultRenderCollapsedButton,
187
+ linksRender,
188
+ theme
189
+ } = props;
190
+ if (props.layoutType !== LayoutType.CARD && hasSplitMenu.value && unref(context.flatMenuData).length === 0) {
191
+ return null;
245
192
  }
246
- }, [extraDom]), _createVNode("div", {
247
- "class": `${baseClassName}-body`,
248
- "style": "flex: 1; overflow: hidden auto;"
249
- }, [props.layoutType !== LayoutType.CARD ? menuContentRender && menuContentRender(props, defaultMenuDom) || defaultMenuDom : null]), _createVNode("div", {
250
- "class": `${baseClassName}-links`
251
- }, [linksRender ? linksRender() : collapsedButtonRender !== false ? _createVNode(Menu, {
252
- "class": `${baseClassName}-link-menu`,
253
- "inlineIndent": 16,
254
- "theme": theme,
255
- "selectedKeys": [],
256
- "openKeys": [],
257
- "mode": "inline",
258
- "onClick": () => {
259
- if (props.onCollapse) {
260
- props.onCollapse(!props.collapsed);
193
+ const defaultMenuDom = _createVNode(BaseMenu, {
194
+ "prefixCls": getPrefixCls(),
195
+ "locale": props.locale || context.locale,
196
+ "theme": theme,
197
+ "mode": "inline",
198
+ "menuData": hasSplitMenu.value ? context.flatMenuData : context.menuData,
199
+ "collapsed": props.collapsed,
200
+ "openKeys": context.openKeys,
201
+ "selectedKeys": context.selectedKeys,
202
+ "menuItemRender": props.menuItemRender,
203
+ "subMenuItemRender": props.subMenuItemRender,
204
+ "iconfontUrl": props.iconfontUrl,
205
+ "onClick": props.onMenuClick,
206
+ "style": {
207
+ width: '100%'
208
+ },
209
+ "class": `${baseClassName}-menu`,
210
+ "onUpdate:openKeys": $event => props.onOpenKeys && props.onOpenKeys($event),
211
+ "onUpdate:selectedKeys": handleSelect
212
+ }, null);
213
+ return _createVNode(_Fragment, null, [context.fixSiderbar && _createVNode("div", {
214
+ "style": {
215
+ width: `${sSideWidth.value}px`,
216
+ overflow: 'hidden',
217
+ flex: `0 0 ${sSideWidth.value}px`,
218
+ maxWidth: `${sSideWidth.value}px`,
219
+ minWidth: `${sSideWidth.value}px`,
220
+ transition: 'background-color 0.3s, min-width 0.3s, max-width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1)'
261
221
  }
262
- }
263
- }, {
264
- default: () => [_createVNode(Menu.Item, {
265
- "key": "collapsed-button",
266
- "class": `${baseClassName}-collapsed-button`,
267
- "title": false
222
+ }, null), _createVNode(Sider, {
223
+ "collapsible": true,
224
+ "trigger": null,
225
+ "collapsed": collapsed,
226
+ "breakpoint": breakpoint || undefined,
227
+ "onCollapse": collapse => {
228
+ props.onCollapse?.(collapse);
229
+ },
230
+ "collapsedWidth": collapsedWidth,
231
+ "style": {
232
+ overflow: 'hidden',
233
+ paddingTop: `${props.headerHeight}px`,
234
+ zIndex: props.layoutType === LayoutType.PAD ? 200 : 1
235
+ },
236
+ "width": siderWidth,
237
+ "theme": theme,
238
+ "class": classNames.value
268
239
  }, {
269
- default: () => [collapsedButtonRender && typeof collapsedButtonRender === 'function' ? collapsedButtonRender(collapsed) : collapsedButtonRender]
270
- })]
271
- }) : null])]
272
- })]);
273
- };
240
+ default: () => [headerDom.value && _createVNode("div", {
241
+ "class": logCls.value,
242
+ "onClick": props.layout !== 'mix' ? props.onMenuHeaderClick : undefined,
243
+ "id": "logo",
244
+ "style": props?.logoStyle
245
+ }, [headerDom.value]), extraDom.value && _createVNode("div", {
246
+ "class": {
247
+ [`${baseClassName}-extra`]: true,
248
+ [`${baseClassName}-extra-no-logo`]: !headerDom.value
249
+ }
250
+ }, [extraDom.value]), _createVNode("div", {
251
+ "class": `${baseClassName}-body`,
252
+ "style": "flex: 1; overflow: hidden auto;"
253
+ }, [props.layoutType !== LayoutType.CARD ? menuContentRender && menuContentRender(props, defaultMenuDom) || defaultMenuDom : null]), _createVNode("div", {
254
+ "class": `${baseClassName}-links`
255
+ }, [linksRender ? linksRender() : collapsedButtonRender !== false ? _createVNode(Menu, {
256
+ "class": `${baseClassName}-link-menu`,
257
+ "inlineIndent": 16,
258
+ "theme": theme,
259
+ "selectedKeys": [],
260
+ "openKeys": [],
261
+ "mode": "inline",
262
+ "onClick": () => {
263
+ if (props.onCollapse) {
264
+ props.onCollapse(!props.collapsed);
265
+ }
266
+ }
267
+ }, {
268
+ default: () => [_createVNode(Menu.Item, {
269
+ "key": "collapsed-button",
270
+ "class": `${baseClassName}-collapsed-button`,
271
+ "title": false
272
+ }, {
273
+ default: () => [collapsedButtonRender && typeof collapsedButtonRender === 'function' ? collapsedButtonRender(collapsed) : collapsedButtonRender]
274
+ })]
275
+ }) : null])]
276
+ })]);
277
+ };
278
+ }
279
+ });
274
280
  export default SiderMenu;
@@ -1,4 +1,4 @@
1
- import { computed, ref, createVNode as _createVNode, mergeProps as _mergeProps } from 'vue';
1
+ import { computed, ref, defineComponent, createVNode as _createVNode, mergeProps as _mergeProps } from 'vue';
2
2
  import { default as ResizeObserver } from 'ant-design-vue/es/vc-resize-observer';
3
3
  import { defaultRenderLogoAndTitle, siderMenuProps } from '../SiderMenu/SiderMenu';
4
4
  import PropTypes from 'ant-design-vue/es/_util/vue-types';
@@ -75,96 +75,96 @@ const RightContent = ({
75
75
  })]) : rightContentRender]
76
76
  })])]);
77
77
  };
78
- export const TopNavHeader = props => {
79
- const headerRef = ref();
80
- const {
81
- prefixCls: propPrefixCls,
82
- onMenuHeaderClick,
83
- onOpenKeys,
84
- onSelect,
85
- contentWidth,
86
- rightContentRender,
87
- topHeaderMenuRender,
88
- layout,
89
- menuData,
90
- mode
91
- } = props;
92
- const context = useRouteContext();
93
- const prefixCls = `${propPrefixCls || defaultPrefixCls}-top-nav-header`;
94
- const stylePrefixCls = computed(() => 'pro-layout');
95
- const [wrapSSR, hashId] = useProLayoutStyle(stylePrefixCls);
96
- const headerDom = defaultRenderLogoAndTitle({
97
- ...props,
98
- collapsed: false
99
- },
100
- // REMARK:: Any time render header title
101
- // layout === 'mix' ? 'headerTitleRender' : undefined,
102
- // layout !== 'side' ? 'headerTitleRender' : undefined,
103
- 'headerTitleRender');
104
-
105
- //
106
- let MenusData = props.layout === 'side' ? [] : menuData;
107
- if (props.layout === 'mix' && props.splitMenus) {
108
- const noChildrenMenuData = (menuData || []).map(item => {
109
- return {
110
- ...item,
111
- children: undefined,
112
- component: undefined
113
- };
78
+ export const TopNavHeader = defineComponent({
79
+ name: 'TopNavHeader',
80
+ props: topNavHeaderProps,
81
+ setup(props) {
82
+ const headerRef = ref();
83
+ const context = useRouteContext();
84
+ const stylePrefixCls = computed(() => 'pro-layout');
85
+ const [wrapSSR, hashId] = useProLayoutStyle(stylePrefixCls);
86
+ const prefixCls = computed(() => `${props.prefixCls || defaultPrefixCls}-top-nav-header`);
87
+ const MenusData = computed(() => {
88
+ let data = props.layout === 'side' ? [] : props.menuData;
89
+ if (props.layout === 'mix' && props.splitMenus) {
90
+ const noChildrenMenuData = (props.menuData || []).map(item => {
91
+ return {
92
+ ...item,
93
+ children: undefined,
94
+ component: undefined
95
+ };
96
+ });
97
+ data = clearMenuItem(noChildrenMenuData);
98
+ }
99
+ return data;
100
+ });
101
+ const _mode = computed(() => {
102
+ return props.layout === 'mix' && props.splitMenus ? 'horizontal' : props.mode;
103
+ });
104
+ const className = computed(() => ({
105
+ [prefixCls.value]: true,
106
+ [hashId.value]: true,
107
+ 'light': props.theme === 'light',
108
+ 'dark': props.theme === 'dark'
109
+ }));
110
+ const paddingLeft = computed(() => {
111
+ return context.layoutType === LayoutType.PAD && props.collapsed ? context.headerLeftWidth + 'px' : 0;
114
112
  });
115
- MenusData = clearMenuItem(noChildrenMenuData);
113
+ return () => {
114
+ const headerDom = defaultRenderLogoAndTitle({
115
+ ...props,
116
+ collapsed: false
117
+ }, 'headerTitleRender');
118
+ const {
119
+ prefixCls: propPrefixCls,
120
+ onMenuHeaderClick,
121
+ onOpenKeys,
122
+ onSelect,
123
+ contentWidth,
124
+ rightContentRender,
125
+ topHeaderMenuRender
126
+ } = props;
127
+ return _createVNode("div", {
128
+ "class": className.value,
129
+ "style": {
130
+ paddingLeft: paddingLeft.value
131
+ }
132
+ }, [_createVNode("div", {
133
+ "ref": headerRef,
134
+ "class": `${prefixCls.value}-main ${contentWidth === 'Fixed' ? 'wide' : ''}`
135
+ }, [headerDom && _createVNode("div", {
136
+ "class": `${prefixCls.value}-main-left`,
137
+ "onClick": onMenuHeaderClick
138
+ }, [_createVNode("div", {
139
+ "class": `${prefixCls.value}-logo`,
140
+ "key": "logo",
141
+ "id": "logo"
142
+ }, [headerDom])]), _createVNode("div", {
143
+ "style": {
144
+ flex: 1
145
+ },
146
+ "class": `${prefixCls.value}-menu`
147
+ }, [topHeaderMenuRender ? topHeaderMenuRender() : _createVNode(BaseMenu, {
148
+ "prefixCls": propPrefixCls,
149
+ "locale": props.locale || context.locale,
150
+ "theme": props.theme,
151
+ "mode": _mode.value,
152
+ "collapsed": props.collapsed,
153
+ "iconfontUrl": props.iconfontUrl,
154
+ "menuData": MenusData.value,
155
+ "menuItemRender": props.menuItemRender,
156
+ "subMenuItemRender": props.subMenuItemRender,
157
+ "openKeys": context.openKeys,
158
+ "selectedKeys": context.selectedKeys,
159
+ "class": {
160
+ 'top-nav-menu': props.mode === 'horizontal'
161
+ },
162
+ "onUpdate:openKeys": $event => onOpenKeys && onOpenKeys($event),
163
+ "onUpdate:selectedKeys": $event => onSelect && onSelect($event)
164
+ }, null)]), rightContentRender && _createVNode(RightContent, _mergeProps({
165
+ "rightContentRender": rightContentRender
166
+ }, props), null)])]);
167
+ };
116
168
  }
117
- const _mode = computed(() => {
118
- return props.layout === 'mix' && props.splitMenus ? 'horizontal' : mode;
119
- });
120
- const className = computed(() => ({
121
- [prefixCls]: true,
122
- [hashId.value]: true,
123
- 'light': props.theme === 'light',
124
- 'dark': props.theme === 'dark'
125
- }));
126
- const paddingLeft = computed(() => {
127
- return context.layoutType === LayoutType.PAD && props.collapsed ? context.headerLeftWidth + 'px' : 0;
128
- });
129
- return _createVNode("div", {
130
- "class": className.value,
131
- "style": {
132
- paddingLeft: paddingLeft.value
133
- }
134
- }, [_createVNode("div", {
135
- "ref": headerRef,
136
- "class": `${prefixCls}-main ${contentWidth === 'Fixed' ? 'wide' : ''}`
137
- }, [headerDom && _createVNode("div", {
138
- "class": `${prefixCls}-main-left`,
139
- "onClick": onMenuHeaderClick
140
- }, [_createVNode("div", {
141
- "class": `${prefixCls}-logo`,
142
- "key": "logo",
143
- "id": "logo"
144
- }, [headerDom])]), _createVNode("div", {
145
- "style": {
146
- flex: 1
147
- },
148
- "class": `${prefixCls}-menu`
149
- }, [topHeaderMenuRender ? topHeaderMenuRender() : _createVNode(BaseMenu, {
150
- "prefixCls": propPrefixCls,
151
- "locale": props.locale || context.locale,
152
- "theme": props.theme,
153
- "mode": _mode.value,
154
- "collapsed": props.collapsed,
155
- "iconfontUrl": props.iconfontUrl,
156
- "menuData": MenusData,
157
- "menuItemRender": props.menuItemRender,
158
- "subMenuItemRender": props.subMenuItemRender,
159
- "openKeys": context.openKeys,
160
- "selectedKeys": context.selectedKeys,
161
- "class": {
162
- 'top-nav-menu': props.mode === 'horizontal'
163
- },
164
- "onUpdate:openKeys": $event => onOpenKeys && onOpenKeys($event),
165
- "onUpdate:selectedKeys": $event => onSelect && onSelect($event)
166
- }, null)]), rightContentRender && _createVNode(RightContent, _mergeProps({
167
- "rightContentRender": rightContentRender
168
- }, props), null)])]);
169
- };
169
+ });
170
170
  export default TopNavHeader;
@@ -1,4 +1,4 @@
1
- import { computed, unref, createVNode as _createVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from 'vue';
1
+ import { computed, unref, defineComponent, createVNode as _createVNode, createTextVNode as _createTextVNode, Fragment as _Fragment } from 'vue';
2
2
  import { LayoutSider as Sider, Menu, Tooltip } from 'ant-design-vue';
3
3
  import BaseMenu, { baseMenuProps } from './BaseMenu.js';
4
4
  import { defaultSettingProps, LayoutType } from '../defaultSettings';
@@ -135,140 +135,146 @@ export const defaultRenderCollapsedButton = collapsed => {
135
135
  "type": "MenuFoldOutlined"
136
136
  }, null);
137
137
  };
138
- const SiderMenu = props => {
139
- const {
140
- collapsed,
141
- siderWidth,
142
- breakpoint,
143
- collapsedWidth = 48,
144
- menuExtraRender = false,
145
- menuContentRender = false,
146
- collapsedButtonRender = defaultRenderCollapsedButton,
147
- linksRender,
148
- theme
149
- } = props;
150
- const prefixCls = computed(() => 'pro-layout');
151
- const [wrapSSR, hashId] = useProLayoutStyle(prefixCls);
152
- const context = useRouteContext();
153
- const getPrefixCls = context.getPrefixCls;
154
- const baseClassName = getPrefixCls('sider');
155
- const hasSplitMenu = computed(() => {
156
- return props.layout === 'mix' && props.splitMenus;
157
- });
158
- const sSideWidth = computed(() => {
159
- return props.collapsed ? props.collapsedWidth : props.siderWidth;
160
- });
161
- const classNames = computed(() => ({
162
- [baseClassName]: true,
163
- [`${baseClassName}-fixed`]: context.fixSiderbar,
164
- [`${baseClassName}-${theme}`]: true,
165
- [`${baseClassName}-layout-${props.layout}`]: props.layout,
166
- [hashId.value]: true
167
- }));
168
- const logCls = computed(() => ({
169
- [`${baseClassName}-logo`]: true,
170
- [`${baseClassName}-logo-card`]: props.layoutType === LayoutType.CARD
171
- }));
172
- const handleSelect = $event => {
173
- if (props.onSelect) {
174
- if (unref(hasSplitMenu)) {
175
- props.onSelect([context.selectedKeys[0], ...$event]);
176
- return;
138
+ const SiderMenu = defineComponent({
139
+ name: 'SiderMenu',
140
+ props: siderMenuProps,
141
+ setup(props) {
142
+ const prefixCls = computed(() => 'pro-layout');
143
+ const [wrapSSR, hashId] = useProLayoutStyle(prefixCls);
144
+ const context = useRouteContext();
145
+ const getPrefixCls = context.getPrefixCls;
146
+ const baseClassName = getPrefixCls('sider');
147
+ const hasSplitMenu = computed(() => {
148
+ return props.layout === 'mix' && props.splitMenus;
149
+ });
150
+ const sSideWidth = computed(() => {
151
+ return props.collapsed ? props.collapsedWidth : props.siderWidth;
152
+ });
153
+ const classNames = computed(() => ({
154
+ [baseClassName]: true,
155
+ [`${baseClassName}-fixed`]: context.fixSiderbar,
156
+ [`${baseClassName}-${props.theme}`]: true,
157
+ [`${baseClassName}-layout-${props.layout}`]: props.layout,
158
+ [hashId.value]: true
159
+ }));
160
+ const logCls = computed(() => ({
161
+ [`${baseClassName}-logo`]: true,
162
+ [`${baseClassName}-logo-card`]: props.layoutType === LayoutType.CARD
163
+ }));
164
+ const handleSelect = $event => {
165
+ if (props.onSelect) {
166
+ if (unref(hasSplitMenu)) {
167
+ props.onSelect([context.selectedKeys[0], ...$event]);
168
+ return;
169
+ }
170
+ props.onSelect($event);
177
171
  }
178
- props.onSelect($event);
179
- }
180
- };
181
- const headerDom = defaultRenderLogoAndTitle({
182
- ...props,
183
- baseClassName
184
- });
185
- const extraDom = menuExtraRender && menuExtraRender(props);
186
- if (props.layoutType !== LayoutType.CARD && hasSplitMenu.value && unref(context.flatMenuData).length === 0) {
187
- return null;
188
- }
189
- const defaultMenuDom = _createVNode(BaseMenu, {
190
- "prefixCls": getPrefixCls(),
191
- "locale": props.locale || context.locale,
192
- "theme": theme,
193
- "mode": "inline",
194
- "menuData": hasSplitMenu.value ? context.flatMenuData : context.menuData,
195
- "collapsed": props.collapsed,
196
- "openKeys": context.openKeys,
197
- "selectedKeys": context.selectedKeys,
198
- "menuItemRender": props.menuItemRender,
199
- "subMenuItemRender": props.subMenuItemRender,
200
- "iconfontUrl": props.iconfontUrl,
201
- "onClick": props.onMenuClick,
202
- "style": {
203
- width: '100%'
204
- },
205
- "class": `${baseClassName}-menu`,
206
- "onUpdate:openKeys": $event => props.onOpenKeys && props.onOpenKeys($event),
207
- "onUpdate:selectedKeys": handleSelect
208
- }, null);
209
- return _createVNode(_Fragment, null, [context.fixSiderbar && _createVNode("div", {
210
- "style": {
211
- width: `${sSideWidth.value}px`,
212
- overflow: 'hidden',
213
- flex: `0 0 ${sSideWidth.value}px`,
214
- maxWidth: `${sSideWidth.value}px`,
215
- minWidth: `${sSideWidth.value}px`,
216
- transition: 'background-color 0.3s, min-width 0.3s, max-width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1)'
217
- }
218
- }, null), _createVNode(Sider, {
219
- "collapsible": true,
220
- "trigger": null,
221
- "collapsed": collapsed,
222
- "breakpoint": breakpoint || undefined,
223
- "onCollapse": collapse => {
224
- props.onCollapse?.(collapse);
225
- },
226
- "collapsedWidth": collapsedWidth,
227
- "style": {
228
- overflow: 'hidden',
229
- paddingTop: `${props.headerHeight}px`,
230
- zIndex: props.layoutType === LayoutType.PAD ? 200 : 1
231
- },
232
- "width": siderWidth,
233
- "theme": theme,
234
- "class": classNames.value
235
- }, {
236
- default: () => [headerDom && _createVNode("div", {
237
- "class": logCls.value,
238
- "onClick": props.layout !== 'mix' ? props.onMenuHeaderClick : undefined,
239
- "id": "logo",
240
- "style": props?.logoStyle
241
- }, [headerDom]), extraDom && _createVNode("div", {
242
- "class": {
243
- [`${baseClassName}-extra`]: true,
244
- [`${baseClassName}-extra-no-logo`]: !headerDom
172
+ };
173
+ const headerDom = computed(() => defaultRenderLogoAndTitle({
174
+ ...props,
175
+ baseClassName
176
+ }));
177
+ const extraDom = computed(() => props.menuExtraRender && props.menuExtraRender(props));
178
+ return () => {
179
+ const {
180
+ collapsed,
181
+ siderWidth,
182
+ breakpoint,
183
+ collapsedWidth = 48,
184
+ menuExtraRender = false,
185
+ menuContentRender = false,
186
+ collapsedButtonRender = defaultRenderCollapsedButton,
187
+ linksRender,
188
+ theme
189
+ } = props;
190
+ if (props.layoutType !== LayoutType.CARD && hasSplitMenu.value && unref(context.flatMenuData).length === 0) {
191
+ return null;
245
192
  }
246
- }, [extraDom]), _createVNode("div", {
247
- "class": `${baseClassName}-body`,
248
- "style": "flex: 1; overflow: hidden auto;"
249
- }, [props.layoutType !== LayoutType.CARD ? menuContentRender && menuContentRender(props, defaultMenuDom) || defaultMenuDom : null]), _createVNode("div", {
250
- "class": `${baseClassName}-links`
251
- }, [linksRender ? linksRender() : collapsedButtonRender !== false ? _createVNode(Menu, {
252
- "class": `${baseClassName}-link-menu`,
253
- "inlineIndent": 16,
254
- "theme": theme,
255
- "selectedKeys": [],
256
- "openKeys": [],
257
- "mode": "inline",
258
- "onClick": () => {
259
- if (props.onCollapse) {
260
- props.onCollapse(!props.collapsed);
193
+ const defaultMenuDom = _createVNode(BaseMenu, {
194
+ "prefixCls": getPrefixCls(),
195
+ "locale": props.locale || context.locale,
196
+ "theme": theme,
197
+ "mode": "inline",
198
+ "menuData": hasSplitMenu.value ? context.flatMenuData : context.menuData,
199
+ "collapsed": props.collapsed,
200
+ "openKeys": context.openKeys,
201
+ "selectedKeys": context.selectedKeys,
202
+ "menuItemRender": props.menuItemRender,
203
+ "subMenuItemRender": props.subMenuItemRender,
204
+ "iconfontUrl": props.iconfontUrl,
205
+ "onClick": props.onMenuClick,
206
+ "style": {
207
+ width: '100%'
208
+ },
209
+ "class": `${baseClassName}-menu`,
210
+ "onUpdate:openKeys": $event => props.onOpenKeys && props.onOpenKeys($event),
211
+ "onUpdate:selectedKeys": handleSelect
212
+ }, null);
213
+ return _createVNode(_Fragment, null, [context.fixSiderbar && _createVNode("div", {
214
+ "style": {
215
+ width: `${sSideWidth.value}px`,
216
+ overflow: 'hidden',
217
+ flex: `0 0 ${sSideWidth.value}px`,
218
+ maxWidth: `${sSideWidth.value}px`,
219
+ minWidth: `${sSideWidth.value}px`,
220
+ transition: 'background-color 0.3s, min-width 0.3s, max-width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1)'
261
221
  }
262
- }
263
- }, {
264
- default: () => [_createVNode(Menu.Item, {
265
- "key": "collapsed-button",
266
- "class": `${baseClassName}-collapsed-button`,
267
- "title": false
222
+ }, null), _createVNode(Sider, {
223
+ "collapsible": true,
224
+ "trigger": null,
225
+ "collapsed": collapsed,
226
+ "breakpoint": breakpoint || undefined,
227
+ "onCollapse": collapse => {
228
+ props.onCollapse?.(collapse);
229
+ },
230
+ "collapsedWidth": collapsedWidth,
231
+ "style": {
232
+ overflow: 'hidden',
233
+ paddingTop: `${props.headerHeight}px`,
234
+ zIndex: props.layoutType === LayoutType.PAD ? 200 : 1
235
+ },
236
+ "width": siderWidth,
237
+ "theme": theme,
238
+ "class": classNames.value
268
239
  }, {
269
- default: () => [collapsedButtonRender && typeof collapsedButtonRender === 'function' ? collapsedButtonRender(collapsed) : collapsedButtonRender]
270
- })]
271
- }) : null])]
272
- })]);
273
- };
240
+ default: () => [headerDom.value && _createVNode("div", {
241
+ "class": logCls.value,
242
+ "onClick": props.layout !== 'mix' ? props.onMenuHeaderClick : undefined,
243
+ "id": "logo",
244
+ "style": props?.logoStyle
245
+ }, [headerDom.value]), extraDom.value && _createVNode("div", {
246
+ "class": {
247
+ [`${baseClassName}-extra`]: true,
248
+ [`${baseClassName}-extra-no-logo`]: !headerDom.value
249
+ }
250
+ }, [extraDom.value]), _createVNode("div", {
251
+ "class": `${baseClassName}-body`,
252
+ "style": "flex: 1; overflow: hidden auto;"
253
+ }, [props.layoutType !== LayoutType.CARD ? menuContentRender && menuContentRender(props, defaultMenuDom) || defaultMenuDom : null]), _createVNode("div", {
254
+ "class": `${baseClassName}-links`
255
+ }, [linksRender ? linksRender() : collapsedButtonRender !== false ? _createVNode(Menu, {
256
+ "class": `${baseClassName}-link-menu`,
257
+ "inlineIndent": 16,
258
+ "theme": theme,
259
+ "selectedKeys": [],
260
+ "openKeys": [],
261
+ "mode": "inline",
262
+ "onClick": () => {
263
+ if (props.onCollapse) {
264
+ props.onCollapse(!props.collapsed);
265
+ }
266
+ }
267
+ }, {
268
+ default: () => [_createVNode(Menu.Item, {
269
+ "key": "collapsed-button",
270
+ "class": `${baseClassName}-collapsed-button`,
271
+ "title": false
272
+ }, {
273
+ default: () => [collapsedButtonRender && typeof collapsedButtonRender === 'function' ? collapsedButtonRender(collapsed) : collapsedButtonRender]
274
+ })]
275
+ }) : null])]
276
+ })]);
277
+ };
278
+ }
279
+ });
274
280
  export default SiderMenu;
@@ -1,4 +1,4 @@
1
- import { computed, ref, createVNode as _createVNode, mergeProps as _mergeProps } from 'vue';
1
+ import { computed, ref, defineComponent, createVNode as _createVNode, mergeProps as _mergeProps } from 'vue';
2
2
  import { default as ResizeObserver } from 'ant-design-vue/es/vc-resize-observer';
3
3
  import { defaultRenderLogoAndTitle, siderMenuProps } from '../SiderMenu/SiderMenu';
4
4
  import PropTypes from 'ant-design-vue/es/_util/vue-types';
@@ -75,96 +75,96 @@ const RightContent = ({
75
75
  })]) : rightContentRender]
76
76
  })])]);
77
77
  };
78
- export const TopNavHeader = props => {
79
- const headerRef = ref();
80
- const {
81
- prefixCls: propPrefixCls,
82
- onMenuHeaderClick,
83
- onOpenKeys,
84
- onSelect,
85
- contentWidth,
86
- rightContentRender,
87
- topHeaderMenuRender,
88
- layout,
89
- menuData,
90
- mode
91
- } = props;
92
- const context = useRouteContext();
93
- const prefixCls = `${propPrefixCls || defaultPrefixCls}-top-nav-header`;
94
- const stylePrefixCls = computed(() => 'pro-layout');
95
- const [wrapSSR, hashId] = useProLayoutStyle(stylePrefixCls);
96
- const headerDom = defaultRenderLogoAndTitle({
97
- ...props,
98
- collapsed: false
99
- },
100
- // REMARK:: Any time render header title
101
- // layout === 'mix' ? 'headerTitleRender' : undefined,
102
- // layout !== 'side' ? 'headerTitleRender' : undefined,
103
- 'headerTitleRender');
104
-
105
- //
106
- let MenusData = props.layout === 'side' ? [] : menuData;
107
- if (props.layout === 'mix' && props.splitMenus) {
108
- const noChildrenMenuData = (menuData || []).map(item => {
109
- return {
110
- ...item,
111
- children: undefined,
112
- component: undefined
113
- };
78
+ export const TopNavHeader = defineComponent({
79
+ name: 'TopNavHeader',
80
+ props: topNavHeaderProps,
81
+ setup(props) {
82
+ const headerRef = ref();
83
+ const context = useRouteContext();
84
+ const stylePrefixCls = computed(() => 'pro-layout');
85
+ const [wrapSSR, hashId] = useProLayoutStyle(stylePrefixCls);
86
+ const prefixCls = computed(() => `${props.prefixCls || defaultPrefixCls}-top-nav-header`);
87
+ const MenusData = computed(() => {
88
+ let data = props.layout === 'side' ? [] : props.menuData;
89
+ if (props.layout === 'mix' && props.splitMenus) {
90
+ const noChildrenMenuData = (props.menuData || []).map(item => {
91
+ return {
92
+ ...item,
93
+ children: undefined,
94
+ component: undefined
95
+ };
96
+ });
97
+ data = clearMenuItem(noChildrenMenuData);
98
+ }
99
+ return data;
100
+ });
101
+ const _mode = computed(() => {
102
+ return props.layout === 'mix' && props.splitMenus ? 'horizontal' : props.mode;
103
+ });
104
+ const className = computed(() => ({
105
+ [prefixCls.value]: true,
106
+ [hashId.value]: true,
107
+ 'light': props.theme === 'light',
108
+ 'dark': props.theme === 'dark'
109
+ }));
110
+ const paddingLeft = computed(() => {
111
+ return context.layoutType === LayoutType.PAD && props.collapsed ? context.headerLeftWidth + 'px' : 0;
114
112
  });
115
- MenusData = clearMenuItem(noChildrenMenuData);
113
+ return () => {
114
+ const headerDom = defaultRenderLogoAndTitle({
115
+ ...props,
116
+ collapsed: false
117
+ }, 'headerTitleRender');
118
+ const {
119
+ prefixCls: propPrefixCls,
120
+ onMenuHeaderClick,
121
+ onOpenKeys,
122
+ onSelect,
123
+ contentWidth,
124
+ rightContentRender,
125
+ topHeaderMenuRender
126
+ } = props;
127
+ return _createVNode("div", {
128
+ "class": className.value,
129
+ "style": {
130
+ paddingLeft: paddingLeft.value
131
+ }
132
+ }, [_createVNode("div", {
133
+ "ref": headerRef,
134
+ "class": `${prefixCls.value}-main ${contentWidth === 'Fixed' ? 'wide' : ''}`
135
+ }, [headerDom && _createVNode("div", {
136
+ "class": `${prefixCls.value}-main-left`,
137
+ "onClick": onMenuHeaderClick
138
+ }, [_createVNode("div", {
139
+ "class": `${prefixCls.value}-logo`,
140
+ "key": "logo",
141
+ "id": "logo"
142
+ }, [headerDom])]), _createVNode("div", {
143
+ "style": {
144
+ flex: 1
145
+ },
146
+ "class": `${prefixCls.value}-menu`
147
+ }, [topHeaderMenuRender ? topHeaderMenuRender() : _createVNode(BaseMenu, {
148
+ "prefixCls": propPrefixCls,
149
+ "locale": props.locale || context.locale,
150
+ "theme": props.theme,
151
+ "mode": _mode.value,
152
+ "collapsed": props.collapsed,
153
+ "iconfontUrl": props.iconfontUrl,
154
+ "menuData": MenusData.value,
155
+ "menuItemRender": props.menuItemRender,
156
+ "subMenuItemRender": props.subMenuItemRender,
157
+ "openKeys": context.openKeys,
158
+ "selectedKeys": context.selectedKeys,
159
+ "class": {
160
+ 'top-nav-menu': props.mode === 'horizontal'
161
+ },
162
+ "onUpdate:openKeys": $event => onOpenKeys && onOpenKeys($event),
163
+ "onUpdate:selectedKeys": $event => onSelect && onSelect($event)
164
+ }, null)]), rightContentRender && _createVNode(RightContent, _mergeProps({
165
+ "rightContentRender": rightContentRender
166
+ }, props), null)])]);
167
+ };
116
168
  }
117
- const _mode = computed(() => {
118
- return props.layout === 'mix' && props.splitMenus ? 'horizontal' : mode;
119
- });
120
- const className = computed(() => ({
121
- [prefixCls]: true,
122
- [hashId.value]: true,
123
- 'light': props.theme === 'light',
124
- 'dark': props.theme === 'dark'
125
- }));
126
- const paddingLeft = computed(() => {
127
- return context.layoutType === LayoutType.PAD && props.collapsed ? context.headerLeftWidth + 'px' : 0;
128
- });
129
- return _createVNode("div", {
130
- "class": className.value,
131
- "style": {
132
- paddingLeft: paddingLeft.value
133
- }
134
- }, [_createVNode("div", {
135
- "ref": headerRef,
136
- "class": `${prefixCls}-main ${contentWidth === 'Fixed' ? 'wide' : ''}`
137
- }, [headerDom && _createVNode("div", {
138
- "class": `${prefixCls}-main-left`,
139
- "onClick": onMenuHeaderClick
140
- }, [_createVNode("div", {
141
- "class": `${prefixCls}-logo`,
142
- "key": "logo",
143
- "id": "logo"
144
- }, [headerDom])]), _createVNode("div", {
145
- "style": {
146
- flex: 1
147
- },
148
- "class": `${prefixCls}-menu`
149
- }, [topHeaderMenuRender ? topHeaderMenuRender() : _createVNode(BaseMenu, {
150
- "prefixCls": propPrefixCls,
151
- "locale": props.locale || context.locale,
152
- "theme": props.theme,
153
- "mode": _mode.value,
154
- "collapsed": props.collapsed,
155
- "iconfontUrl": props.iconfontUrl,
156
- "menuData": MenusData,
157
- "menuItemRender": props.menuItemRender,
158
- "subMenuItemRender": props.subMenuItemRender,
159
- "openKeys": context.openKeys,
160
- "selectedKeys": context.selectedKeys,
161
- "class": {
162
- 'top-nav-menu': props.mode === 'horizontal'
163
- },
164
- "onUpdate:openKeys": $event => onOpenKeys && onOpenKeys($event),
165
- "onUpdate:selectedKeys": $event => onSelect && onSelect($event)
166
- }, null)]), rightContentRender && _createVNode(RightContent, _mergeProps({
167
- "rightContentRender": rightContentRender
168
- }, props), null)])]);
169
- };
169
+ });
170
170
  export default TopNavHeader;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meethive/components",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -12,10 +12,10 @@
12
12
  "author": "",
13
13
  "license": "ISC",
14
14
  "peerDependencies": {
15
- "vue": "^3.2.0",
15
+ "vue": "^3.3.4",
16
16
  "vue-router": "^4.0.0",
17
- "ant-design-vue": "^4.0.0",
18
- "@ant-design/icons-vue": "^7.0.0",
17
+ "ant-design-vue": "^4.2.6",
18
+ "@ant-design/icons-vue": "^7.0.1",
19
19
  "lodash-es": "^4.17.0",
20
20
  "dayjs": "^1.11.0"
21
21
  },