framework7-vue 8.2.0 → 8.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.
- package/components/appbar.js +41 -0
- package/components/col.js +91 -0
- package/components/list-item-cell.js +23 -0
- package/components/list-item-row.js +23 -0
- package/components/menu-dropdown-item.js +69 -0
- package/components/menu-dropdown.js +39 -0
- package/components/menu-item.js +119 -0
- package/components/menu.js +26 -0
- package/components/row.js +67 -0
- package/components/sheet.d.ts +17 -2
- package/components/sheet.js +25 -3
- package/components/swiper-slide.js +2 -0
- package/components/swiper.js +2 -0
- package/framework7-vue-web-types.json +1 -1
- package/framework7-vue.js +2 -2
- package/package.json +2 -2
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { renderSlot as _renderSlot, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from "vue";
|
|
2
|
+
function render(_ctx, _cache) {
|
|
3
|
+
return _openBlock(), _createElementBlock("div", {
|
|
4
|
+
class: _normalizeClass(_ctx.classes)
|
|
5
|
+
}, [_renderSlot(_ctx.$slots, "before-inner"), _ctx.inner ? (_openBlock(), _createElementBlock("div", {
|
|
6
|
+
key: 0,
|
|
7
|
+
class: _normalizeClass(_ctx.innerClasses)
|
|
8
|
+
}, [_renderSlot(_ctx.$slots, "default")], 2 /* CLASS */)) : _renderSlot(_ctx.$slots, "default", {
|
|
9
|
+
key: 1
|
|
10
|
+
}), _renderSlot(_ctx.$slots, "after-inner")], 2 /* CLASS */);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
import { computed } from 'vue';
|
|
14
|
+
import { classNames } from '../shared/utils.js';
|
|
15
|
+
import { colorClasses, colorProps } from '../shared/mixins.js';
|
|
16
|
+
export default {
|
|
17
|
+
name: 'f7-appbar',
|
|
18
|
+
render,
|
|
19
|
+
props: {
|
|
20
|
+
noShadow: Boolean,
|
|
21
|
+
noHairline: Boolean,
|
|
22
|
+
inner: {
|
|
23
|
+
type: Boolean,
|
|
24
|
+
default: true
|
|
25
|
+
},
|
|
26
|
+
innerClass: String,
|
|
27
|
+
innerClassName: String,
|
|
28
|
+
...colorProps
|
|
29
|
+
},
|
|
30
|
+
setup(props) {
|
|
31
|
+
const classes = computed(() => classNames('appbar', {
|
|
32
|
+
'no-shadow': props.noShadow,
|
|
33
|
+
'no-hairline': props.noHairline
|
|
34
|
+
}, colorClasses(props)));
|
|
35
|
+
const innerClasses = computed(() => classNames('appbar-inner', props.innerClass, props.innerClassName));
|
|
36
|
+
return {
|
|
37
|
+
classes,
|
|
38
|
+
innerClasses
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveDynamicComponent as _resolveDynamicComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createBlock as _createBlock } from "vue";
|
|
2
|
+
const _hoisted_1 = {
|
|
3
|
+
key: 0,
|
|
4
|
+
class: "resize-handler"
|
|
5
|
+
};
|
|
6
|
+
function render(_ctx, _cache) {
|
|
7
|
+
return _openBlock(), _createBlock(_resolveDynamicComponent(_ctx.tag), {
|
|
8
|
+
ref: "elRef",
|
|
9
|
+
class: _normalizeClass(_ctx.classes)
|
|
10
|
+
}, {
|
|
11
|
+
default: _withCtx(() => [_renderSlot(_ctx.$slots, "default"), _ctx.resizable && _ctx.resizableHandler ? (_openBlock(), _createElementBlock("span", _hoisted_1)) : _createCommentVNode("v-if", true)]),
|
|
12
|
+
_: 3 /* FORWARDED */
|
|
13
|
+
}, 8 /* PROPS */, ["class"]);
|
|
14
|
+
}
|
|
15
|
+
import { ref, computed, onBeforeUnmount, onMounted } from 'vue';
|
|
16
|
+
import { classNames } from '../shared/utils.js';
|
|
17
|
+
import { colorClasses, colorProps } from '../shared/mixins.js';
|
|
18
|
+
import { f7ready, f7 } from '../shared/f7.js';
|
|
19
|
+
export default {
|
|
20
|
+
name: 'f7-col',
|
|
21
|
+
render,
|
|
22
|
+
props: {
|
|
23
|
+
tag: {
|
|
24
|
+
type: String,
|
|
25
|
+
default: 'div'
|
|
26
|
+
},
|
|
27
|
+
width: {
|
|
28
|
+
type: [Number, String],
|
|
29
|
+
default: 'auto'
|
|
30
|
+
},
|
|
31
|
+
xsmall: {
|
|
32
|
+
type: [Number, String]
|
|
33
|
+
},
|
|
34
|
+
small: {
|
|
35
|
+
type: [Number, String]
|
|
36
|
+
},
|
|
37
|
+
medium: {
|
|
38
|
+
type: [Number, String]
|
|
39
|
+
},
|
|
40
|
+
large: {
|
|
41
|
+
type: [Number, String]
|
|
42
|
+
},
|
|
43
|
+
xlarge: {
|
|
44
|
+
type: [Number, String]
|
|
45
|
+
},
|
|
46
|
+
resizable: Boolean,
|
|
47
|
+
resizableFixed: Boolean,
|
|
48
|
+
resizableAbsolute: Boolean,
|
|
49
|
+
resizableHandler: {
|
|
50
|
+
type: Boolean,
|
|
51
|
+
default: true
|
|
52
|
+
},
|
|
53
|
+
...colorProps
|
|
54
|
+
},
|
|
55
|
+
emits: ['grid:resize'],
|
|
56
|
+
setup(props, _ref) {
|
|
57
|
+
let {
|
|
58
|
+
emit
|
|
59
|
+
} = _ref;
|
|
60
|
+
const elRef = ref(null);
|
|
61
|
+
const onResize = el => {
|
|
62
|
+
if (el === elRef.value) {
|
|
63
|
+
emit('grid:resize');
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
onMounted(() => {
|
|
67
|
+
f7ready(() => {
|
|
68
|
+
f7.on('gridResize', onResize);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
onBeforeUnmount(() => {
|
|
72
|
+
f7.off('gridResize', onResize);
|
|
73
|
+
});
|
|
74
|
+
const classes = computed(() => classNames({
|
|
75
|
+
col: props.width === 'auto',
|
|
76
|
+
[`col-${props.width}`]: props.width !== 'auto',
|
|
77
|
+
[`xsmall-${props.xsmall}`]: props.xsmall,
|
|
78
|
+
[`small-${props.small}`]: props.small,
|
|
79
|
+
[`medium-${props.medium}`]: props.medium,
|
|
80
|
+
[`large-${props.large}`]: props.large,
|
|
81
|
+
[`xlarge-${props.xlarge}`]: props.xlarge,
|
|
82
|
+
resizable: props.resizable,
|
|
83
|
+
'resizable-fixed': props.resizableFixed,
|
|
84
|
+
'resizable-absolute': props.resizableAbsolute
|
|
85
|
+
}, colorClasses(props)));
|
|
86
|
+
return {
|
|
87
|
+
classes,
|
|
88
|
+
elRef
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { renderSlot as _renderSlot, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
|
|
2
|
+
function render(_ctx, _cache) {
|
|
3
|
+
return _openBlock(), _createElementBlock("div", {
|
|
4
|
+
class: _normalizeClass(_ctx.classes)
|
|
5
|
+
}, [_renderSlot(_ctx.$slots, "default")], 2 /* CLASS */);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
import { computed } from 'vue';
|
|
9
|
+
import { classNames } from '../shared/utils.js';
|
|
10
|
+
import { colorClasses, colorProps } from '../shared/mixins.js';
|
|
11
|
+
export default {
|
|
12
|
+
name: 'f7-list-item-cell',
|
|
13
|
+
render,
|
|
14
|
+
props: {
|
|
15
|
+
...colorProps
|
|
16
|
+
},
|
|
17
|
+
setup(props) {
|
|
18
|
+
const classes = computed(() => classNames('item-cell', colorClasses(props)));
|
|
19
|
+
return {
|
|
20
|
+
classes
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { renderSlot as _renderSlot, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
|
|
2
|
+
function render(_ctx, _cache) {
|
|
3
|
+
return _openBlock(), _createElementBlock("div", {
|
|
4
|
+
class: _normalizeClass(_ctx.classes)
|
|
5
|
+
}, [_renderSlot(_ctx.$slots, "default")], 2 /* CLASS */);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
import { computed } from 'vue';
|
|
9
|
+
import { classNames } from '../shared/utils.js';
|
|
10
|
+
import { colorClasses, colorProps } from '../shared/mixins.js';
|
|
11
|
+
export default {
|
|
12
|
+
name: 'f7-list-item-row',
|
|
13
|
+
render,
|
|
14
|
+
props: {
|
|
15
|
+
...colorProps
|
|
16
|
+
},
|
|
17
|
+
setup(props) {
|
|
18
|
+
const classes = computed(() => classNames('item-row', colorClasses(props)));
|
|
19
|
+
return {
|
|
20
|
+
classes
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { toDisplayString as _toDisplayString, renderSlot as _renderSlot, createTextVNode as _createTextVNode, mergeProps as _mergeProps, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
|
|
2
|
+
function render(_ctx, _cache) {
|
|
3
|
+
return _openBlock(), _createElementBlock("div", _mergeProps({
|
|
4
|
+
ref: "elRef",
|
|
5
|
+
class: _ctx.classes
|
|
6
|
+
}, _ctx.attrs, {
|
|
7
|
+
onClick: _cache[0] || (_cache[0] = function () {
|
|
8
|
+
return _ctx.onClick && _ctx.onClick(...arguments);
|
|
9
|
+
})
|
|
10
|
+
}), [_createTextVNode(_toDisplayString(_ctx.text) + " ", 1 /* TEXT */), _renderSlot(_ctx.$slots, "default")], 16 /* FULL_PROPS */);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
import { computed, ref } from 'vue';
|
|
14
|
+
import { classNames } from '../shared/utils.js';
|
|
15
|
+
import { colorClasses, colorProps, routerProps, routerAttrs, routerClasses, actionsProps, actionsAttrs, actionsClasses } from '../shared/mixins.js';
|
|
16
|
+
import { useRouteProps } from '../shared/use-route-props.js';
|
|
17
|
+
export default {
|
|
18
|
+
name: 'f7-menu-dropdown-item',
|
|
19
|
+
render,
|
|
20
|
+
props: {
|
|
21
|
+
text: String,
|
|
22
|
+
link: Boolean,
|
|
23
|
+
href: String,
|
|
24
|
+
target: String,
|
|
25
|
+
divider: Boolean,
|
|
26
|
+
...colorProps,
|
|
27
|
+
...routerProps,
|
|
28
|
+
...actionsProps
|
|
29
|
+
},
|
|
30
|
+
emits: ['click'],
|
|
31
|
+
setup(props, _ref) {
|
|
32
|
+
let {
|
|
33
|
+
emit
|
|
34
|
+
} = _ref;
|
|
35
|
+
const elRef = ref(null);
|
|
36
|
+
const onClick = e => {
|
|
37
|
+
emit('click', e);
|
|
38
|
+
};
|
|
39
|
+
useRouteProps(elRef, props);
|
|
40
|
+
const isLink = computed(() => props.link || props.href || props.href === '');
|
|
41
|
+
const tag = computed(() => isLink.value ? 'a' : 'div');
|
|
42
|
+
const classes = computed(() => {
|
|
43
|
+
return classNames({
|
|
44
|
+
'menu-dropdown-link': isLink.value && !props.divider,
|
|
45
|
+
'menu-dropdown-item': !isLink.value && !props.divider,
|
|
46
|
+
'menu-dropdown-divider': props.divider
|
|
47
|
+
}, colorClasses(props), routerClasses(props), actionsClasses(props), {
|
|
48
|
+
'menu-close': typeof props.menuClose === 'undefined'
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
const attrs = computed(() => {
|
|
52
|
+
let hrefComputed = props.href;
|
|
53
|
+
if (typeof hrefComputed === 'undefined' && props.link) hrefComputed = '#';
|
|
54
|
+
return {
|
|
55
|
+
href: hrefComputed,
|
|
56
|
+
target: props.target,
|
|
57
|
+
...routerAttrs(props),
|
|
58
|
+
...actionsAttrs(props)
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
return {
|
|
62
|
+
classes,
|
|
63
|
+
attrs,
|
|
64
|
+
tag,
|
|
65
|
+
onClick,
|
|
66
|
+
elRef
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { renderSlot as _renderSlot, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
|
|
2
|
+
function render(_ctx, _cache) {
|
|
3
|
+
return _openBlock(), _createElementBlock("div", {
|
|
4
|
+
class: _normalizeClass(_ctx.classes)
|
|
5
|
+
}, [_createElementVNode("div", {
|
|
6
|
+
class: "menu-dropdown-content",
|
|
7
|
+
style: _normalizeStyle({
|
|
8
|
+
height: _ctx.contentHeight
|
|
9
|
+
})
|
|
10
|
+
}, [_renderSlot(_ctx.$slots, "default")], 4 /* STYLE */)], 2 /* CLASS */);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
import { computed } from 'vue';
|
|
14
|
+
import { classNames } from '../shared/utils.js';
|
|
15
|
+
import { colorClasses, colorProps } from '../shared/mixins.js';
|
|
16
|
+
export default {
|
|
17
|
+
name: 'f7-menu-dropdown',
|
|
18
|
+
render,
|
|
19
|
+
props: {
|
|
20
|
+
contentHeight: String,
|
|
21
|
+
position: String,
|
|
22
|
+
left: Boolean,
|
|
23
|
+
center: Boolean,
|
|
24
|
+
right: Boolean,
|
|
25
|
+
...colorProps
|
|
26
|
+
},
|
|
27
|
+
setup(props) {
|
|
28
|
+
const classes = computed(() => {
|
|
29
|
+
let positionComputed = props.position || 'left';
|
|
30
|
+
if (props.left) positionComputed = 'left';
|
|
31
|
+
if (props.center) positionComputed = 'center';
|
|
32
|
+
if (props.right) positionComputed = 'right';
|
|
33
|
+
return classNames('menu-dropdown', `menu-dropdown-${positionComputed}`, colorClasses(props));
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
classes
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { toDisplayString as _toDisplayString, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, resolveDynamicComponent as _resolveDynamicComponent, mergeProps as _mergeProps, withCtx as _withCtx } from "vue";
|
|
2
|
+
const _hoisted_1 = {
|
|
3
|
+
key: 0,
|
|
4
|
+
class: "menu-item-content"
|
|
5
|
+
};
|
|
6
|
+
function render(_ctx, _cache) {
|
|
7
|
+
const _component_f7_use_icon = _resolveComponent("f7-use-icon");
|
|
8
|
+
return _openBlock(), _createBlock(_resolveDynamicComponent(_ctx.tag), _mergeProps({
|
|
9
|
+
ref: "elRef",
|
|
10
|
+
class: _ctx.classes
|
|
11
|
+
}, _ctx.attrs, {
|
|
12
|
+
onClick: _ctx.onClick
|
|
13
|
+
}), {
|
|
14
|
+
default: _withCtx(() => [_ctx.text || _ctx.$slots.text || _ctx.icon ? (_openBlock(), _createElementBlock("div", _hoisted_1, [_createTextVNode(_toDisplayString(_ctx.text) + " ", 1 /* TEXT */), _ctx.icon ? (_openBlock(), _createBlock(_component_f7_use_icon, {
|
|
15
|
+
key: 0,
|
|
16
|
+
icon: _ctx.icon
|
|
17
|
+
}, null, 8 /* PROPS */, ["icon"])) : _createCommentVNode("v-if", true), _renderSlot(_ctx.$slots, "text")])) : _createCommentVNode("v-if", true), _renderSlot(_ctx.$slots, "default")]),
|
|
18
|
+
_: 3 /* FORWARDED */
|
|
19
|
+
}, 16 /* FULL_PROPS */, ["class", "onClick"]);
|
|
20
|
+
}
|
|
21
|
+
import { ref, computed, onMounted, onBeforeUnmount } from 'vue';
|
|
22
|
+
import { classNames } from '../shared/utils.js';
|
|
23
|
+
import { colorClasses, colorProps, routerProps, routerAttrs, routerClasses, actionsProps, actionsClasses, actionsAttrs, iconProps } from '../shared/mixins.js';
|
|
24
|
+
import { useRouteProps } from '../shared/use-route-props.js';
|
|
25
|
+
import { useIcon } from '../shared/use-icon.js';
|
|
26
|
+
import { f7ready, f7 } from '../shared/f7.js';
|
|
27
|
+
import { useTooltip } from '../shared/use-tooltip.js';
|
|
28
|
+
import f7UseIcon from './use-icon.js';
|
|
29
|
+
export default {
|
|
30
|
+
name: 'f7-menu-item',
|
|
31
|
+
render,
|
|
32
|
+
components: {
|
|
33
|
+
f7UseIcon
|
|
34
|
+
},
|
|
35
|
+
props: {
|
|
36
|
+
text: String,
|
|
37
|
+
iconOnly: Boolean,
|
|
38
|
+
href: String,
|
|
39
|
+
link: Boolean,
|
|
40
|
+
target: String,
|
|
41
|
+
dropdown: Boolean,
|
|
42
|
+
tooltip: String,
|
|
43
|
+
tooltipTrigger: String,
|
|
44
|
+
...colorProps,
|
|
45
|
+
...routerProps,
|
|
46
|
+
...actionsProps,
|
|
47
|
+
...iconProps
|
|
48
|
+
},
|
|
49
|
+
emits: ['click', 'menu:opened', 'menu:closed'],
|
|
50
|
+
setup(props, _ref) {
|
|
51
|
+
let {
|
|
52
|
+
slots,
|
|
53
|
+
emit
|
|
54
|
+
} = _ref;
|
|
55
|
+
const elRef = ref(null);
|
|
56
|
+
useTooltip(elRef, props);
|
|
57
|
+
const onClick = e => {
|
|
58
|
+
emit('click', e);
|
|
59
|
+
};
|
|
60
|
+
const onOpened = el => {
|
|
61
|
+
if (elRef.value !== el) return;
|
|
62
|
+
emit('menu:opened', el);
|
|
63
|
+
};
|
|
64
|
+
const onClosed = el => {
|
|
65
|
+
if (elRef.value !== el) return;
|
|
66
|
+
emit('menu:closed', el);
|
|
67
|
+
};
|
|
68
|
+
useRouteProps(elRef, props);
|
|
69
|
+
const attachEvents = () => {
|
|
70
|
+
f7ready(() => {
|
|
71
|
+
f7.on('menuOpened', onOpened);
|
|
72
|
+
f7.on('menuClosed', onClosed);
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
const detachEvents = () => {
|
|
76
|
+
f7.off('menuOpened', onOpened);
|
|
77
|
+
f7.off('menuClosed', onOpened);
|
|
78
|
+
};
|
|
79
|
+
onMounted(() => attachEvents());
|
|
80
|
+
onBeforeUnmount(() => detachEvents());
|
|
81
|
+
const icon = computed(() => useIcon(props));
|
|
82
|
+
const tag = computed(() => {
|
|
83
|
+
const isLink = props.link || props.href || props.href === '';
|
|
84
|
+
return isLink ? 'a' : 'div';
|
|
85
|
+
});
|
|
86
|
+
const classes = computed(() => {
|
|
87
|
+
let iconOnlyComputed;
|
|
88
|
+
if (props.iconOnly || !props.text && !slots.text) {
|
|
89
|
+
iconOnlyComputed = true;
|
|
90
|
+
} else {
|
|
91
|
+
iconOnlyComputed = false;
|
|
92
|
+
}
|
|
93
|
+
const isDropdown = props.dropdown || props.dropdown === '';
|
|
94
|
+
return classNames({
|
|
95
|
+
'menu-item': true,
|
|
96
|
+
'menu-item-dropdown': isDropdown,
|
|
97
|
+
'icon-only': iconOnlyComputed
|
|
98
|
+
}, colorClasses(props), routerClasses(props), actionsClasses(props));
|
|
99
|
+
});
|
|
100
|
+
const attrs = computed(() => {
|
|
101
|
+
let hrefComputed = props.href;
|
|
102
|
+
if (typeof hrefComputed === 'undefined' && props.link) hrefComputed = '#';
|
|
103
|
+
return {
|
|
104
|
+
href: hrefComputed,
|
|
105
|
+
target: props.target,
|
|
106
|
+
...routerAttrs(props),
|
|
107
|
+
...actionsAttrs(props)
|
|
108
|
+
};
|
|
109
|
+
});
|
|
110
|
+
return {
|
|
111
|
+
tag,
|
|
112
|
+
classes,
|
|
113
|
+
attrs,
|
|
114
|
+
icon,
|
|
115
|
+
onClick,
|
|
116
|
+
elRef
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue";
|
|
2
|
+
const _hoisted_1 = {
|
|
3
|
+
class: "menu-inner"
|
|
4
|
+
};
|
|
5
|
+
function render(_ctx, _cache) {
|
|
6
|
+
return _openBlock(), _createElementBlock("div", {
|
|
7
|
+
class: _normalizeClass(_ctx.classes)
|
|
8
|
+
}, [_createElementVNode("div", _hoisted_1, [_renderSlot(_ctx.$slots, "default")])], 2 /* CLASS */);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
import { computed } from 'vue';
|
|
12
|
+
import { classNames } from '../shared/utils.js';
|
|
13
|
+
import { colorClasses, colorProps } from '../shared/mixins.js';
|
|
14
|
+
export default {
|
|
15
|
+
name: 'f7-menu',
|
|
16
|
+
render,
|
|
17
|
+
props: {
|
|
18
|
+
...colorProps
|
|
19
|
+
},
|
|
20
|
+
setup(props) {
|
|
21
|
+
const classes = computed(() => classNames('menu', colorClasses(props)));
|
|
22
|
+
return {
|
|
23
|
+
classes
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveDynamicComponent as _resolveDynamicComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createBlock as _createBlock } from "vue";
|
|
2
|
+
const _hoisted_1 = {
|
|
3
|
+
key: 0,
|
|
4
|
+
class: "resize-handler"
|
|
5
|
+
};
|
|
6
|
+
function render(_ctx, _cache) {
|
|
7
|
+
return _openBlock(), _createBlock(_resolveDynamicComponent(_ctx.tag), {
|
|
8
|
+
ref: "elRef",
|
|
9
|
+
class: _normalizeClass(_ctx.classes)
|
|
10
|
+
}, {
|
|
11
|
+
default: _withCtx(() => [_renderSlot(_ctx.$slots, "default"), _ctx.resizable && _ctx.resizableHandler ? (_openBlock(), _createElementBlock("span", _hoisted_1)) : _createCommentVNode("v-if", true)]),
|
|
12
|
+
_: 3 /* FORWARDED */
|
|
13
|
+
}, 8 /* PROPS */, ["class"]);
|
|
14
|
+
}
|
|
15
|
+
import { ref, computed, onBeforeUnmount, onMounted } from 'vue';
|
|
16
|
+
import { classNames } from '../shared/utils.js';
|
|
17
|
+
import { colorClasses, colorProps } from '../shared/mixins.js';
|
|
18
|
+
import { f7ready, f7 } from '../shared/f7.js';
|
|
19
|
+
export default {
|
|
20
|
+
name: 'f7-row',
|
|
21
|
+
render,
|
|
22
|
+
props: {
|
|
23
|
+
noGap: Boolean,
|
|
24
|
+
tag: {
|
|
25
|
+
type: String,
|
|
26
|
+
default: 'div'
|
|
27
|
+
},
|
|
28
|
+
resizable: Boolean,
|
|
29
|
+
resizableFixed: Boolean,
|
|
30
|
+
resizableAbsolute: Boolean,
|
|
31
|
+
resizableHandler: {
|
|
32
|
+
type: Boolean,
|
|
33
|
+
default: true
|
|
34
|
+
},
|
|
35
|
+
...colorProps
|
|
36
|
+
},
|
|
37
|
+
emits: ['grid:resize'],
|
|
38
|
+
setup(props, _ref) {
|
|
39
|
+
let {
|
|
40
|
+
emit
|
|
41
|
+
} = _ref;
|
|
42
|
+
const elRef = ref(null);
|
|
43
|
+
const onResize = el => {
|
|
44
|
+
if (el === elRef.value) {
|
|
45
|
+
emit('grid:resize');
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
onMounted(() => {
|
|
49
|
+
f7ready(() => {
|
|
50
|
+
f7.on('gridResize', onResize);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
onBeforeUnmount(() => {
|
|
54
|
+
f7.off('gridResize', onResize);
|
|
55
|
+
});
|
|
56
|
+
const classes = computed(() => classNames('row', {
|
|
57
|
+
'no-gap': props.noGap,
|
|
58
|
+
resizable: props.resizable,
|
|
59
|
+
'resizable-fixed': props.resizableFixed,
|
|
60
|
+
'resizable-absolute': props.resizableAbsolute
|
|
61
|
+
}, colorClasses(props)));
|
|
62
|
+
return {
|
|
63
|
+
classes,
|
|
64
|
+
elRef
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
};
|
package/components/sheet.d.ts
CHANGED
|
@@ -75,6 +75,21 @@ declare const Sheet: DefineComponent<
|
|
|
75
75
|
default: undefined;
|
|
76
76
|
},
|
|
77
77
|
|
|
78
|
+
breakpoints: {
|
|
79
|
+
type: ArrayConstructor;
|
|
80
|
+
default: () => undefined;
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
backdropBreakpoint: {
|
|
84
|
+
type: NumberConstructor;
|
|
85
|
+
default: undefined;
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
pushBreakpoint: {
|
|
89
|
+
type: NumberConstructor;
|
|
90
|
+
default: undefined;
|
|
91
|
+
},
|
|
92
|
+
|
|
78
93
|
color: {
|
|
79
94
|
type: StringConstructor;
|
|
80
95
|
},
|
|
@@ -109,8 +124,8 @@ declare const Sheet: DefineComponent<
|
|
|
109
124
|
{},
|
|
110
125
|
ComponentOptionsMixin,
|
|
111
126
|
ComponentOptionsMixin,
|
|
112
|
-
("sheet:stepprogress" | "sheet:stepopen" | "sheet:stepclose" | "sheet:open" | "sheet:opened" | "sheet:close" | "sheet:closed" | "update:opened")[],
|
|
113
|
-
"sheet:stepprogress" | "sheet:stepopen" | "sheet:stepclose" | "sheet:open" | "sheet:opened" | "sheet:close" | "sheet:closed" | "update:opened"
|
|
127
|
+
("sheet:stepprogress" | "sheet:stepopen" | "sheet:stepclose" | "sheet:open" | "sheet:opened" | "sheet:close" | "sheet:closed" | "sheet:breakpoint" | "update:opened")[],
|
|
128
|
+
"sheet:stepprogress" | "sheet:stepopen" | "sheet:stepclose" | "sheet:open" | "sheet:opened" | "sheet:close" | "sheet:closed" | "sheet:breakpoint" | "update:opened"
|
|
114
129
|
>;
|
|
115
130
|
|
|
116
131
|
export default Sheet;
|
package/components/sheet.js
CHANGED
|
@@ -51,9 +51,21 @@ export default {
|
|
|
51
51
|
type: [String, Object],
|
|
52
52
|
default: undefined
|
|
53
53
|
},
|
|
54
|
+
breakpoints: {
|
|
55
|
+
type: Array,
|
|
56
|
+
default: () => undefined
|
|
57
|
+
},
|
|
58
|
+
backdropBreakpoint: {
|
|
59
|
+
type: Number,
|
|
60
|
+
default: undefined
|
|
61
|
+
},
|
|
62
|
+
pushBreakpoint: {
|
|
63
|
+
type: Number,
|
|
64
|
+
default: undefined
|
|
65
|
+
},
|
|
54
66
|
...colorProps
|
|
55
67
|
},
|
|
56
|
-
emits: ['sheet:stepprogress', 'sheet:stepopen', 'sheet:stepclose', 'sheet:open', 'sheet:opened', 'sheet:close', 'sheet:closed', 'update:opened'],
|
|
68
|
+
emits: ['sheet:stepprogress', 'sheet:stepopen', 'sheet:stepclose', 'sheet:open', 'sheet:opened', 'sheet:close', 'sheet:closed', 'sheet:breakpoint', 'update:opened'],
|
|
57
69
|
setup(props, _ref) {
|
|
58
70
|
let {
|
|
59
71
|
emit,
|
|
@@ -64,6 +76,9 @@ export default {
|
|
|
64
76
|
let isOpened = props.opened;
|
|
65
77
|
let isClosing = false;
|
|
66
78
|
const elRef = ref(null);
|
|
79
|
+
const onBreakpoint = (instance, breakpoint) => {
|
|
80
|
+
emit('sheet:breakpoint', instance, breakpoint);
|
|
81
|
+
};
|
|
67
82
|
const onStepProgress = (instance, progress) => {
|
|
68
83
|
emit('sheet:stepprogress', instance, progress);
|
|
69
84
|
};
|
|
@@ -103,7 +118,8 @@ export default {
|
|
|
103
118
|
closed: onClosed,
|
|
104
119
|
stepOpen: onStepOpen,
|
|
105
120
|
stepClose: onStepClose,
|
|
106
|
-
stepProgress: onStepProgress
|
|
121
|
+
stepProgress: onStepProgress,
|
|
122
|
+
breakpoint: onBreakpoint
|
|
107
123
|
}
|
|
108
124
|
};
|
|
109
125
|
const {
|
|
@@ -116,7 +132,10 @@ export default {
|
|
|
116
132
|
swipeToClose,
|
|
117
133
|
swipeToStep,
|
|
118
134
|
swipeHandler,
|
|
119
|
-
containerEl
|
|
135
|
+
containerEl,
|
|
136
|
+
breakpoints,
|
|
137
|
+
backdropBreakpoint,
|
|
138
|
+
pushBreakpoint
|
|
120
139
|
} = props;
|
|
121
140
|
if (typeof animate !== 'undefined') sheetParams.animate = animate;
|
|
122
141
|
if (typeof backdrop !== 'undefined') sheetParams.backdrop = backdrop;
|
|
@@ -128,6 +147,9 @@ export default {
|
|
|
128
147
|
if (typeof swipeToStep !== 'undefined') sheetParams.swipeToStep = swipeToStep;
|
|
129
148
|
if (typeof swipeHandler !== 'undefined') sheetParams.swipeHandler = swipeHandler;
|
|
130
149
|
if (typeof containerEl !== 'undefined') sheetParams.containerEl = containerEl;
|
|
150
|
+
if (typeof breakpoints !== 'undefined') sheetParams.breakpoints = breakpoints;
|
|
151
|
+
if (typeof backdropBreakpoint !== 'undefined') sheetParams.backdropBreakpoint = backdropBreakpoint;
|
|
152
|
+
if (typeof pushBreakpoint !== 'undefined') sheetParams.pushBreakpoint = pushBreakpoint;
|
|
131
153
|
f7ready(() => {
|
|
132
154
|
f7Sheet = f7.sheet.create(sheetParams);
|
|
133
155
|
if (props.opened) {
|
package/framework7-vue.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Framework7 Vue 8.
|
|
2
|
+
* Framework7 Vue 8.3.0
|
|
3
3
|
* Build full featured iOS & Android apps using Framework7 & Vue
|
|
4
4
|
* https://framework7.io/vue/
|
|
5
5
|
*
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Released under the MIT License
|
|
9
9
|
*
|
|
10
|
-
* Released on:
|
|
10
|
+
* Released on: August 18, 2023
|
|
11
11
|
*/
|
|
12
12
|
import Framework7Vue from './shared/plugin.js';
|
|
13
13
|
import { f7, f7ready, theme } from './shared/f7.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "framework7-vue",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.3.0",
|
|
4
4
|
"description": "Build full featured iOS & Android apps using Framework7 & Vue",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
"type": "patreon",
|
|
56
56
|
"url": "https://www.patreon.com/framework7"
|
|
57
57
|
},
|
|
58
|
-
"releaseDate": "
|
|
58
|
+
"releaseDate": "August 18, 2023"
|
|
59
59
|
}
|