@xenknight/framework7 0.0.3 → 0.0.6
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/actions/actions-ios.less +22 -15
- package/components/actions/actions-rtl.css +1 -1
- package/components/actions/actions-vars.less +4 -7
- package/components/actions/actions.css +1 -1
- package/components/actions/actions.less +0 -3
- package/components/app/app-class.d.ts +2 -0
- package/components/app/app-class.js +10 -2
- package/components/app/app-vars.less +36 -0
- package/components/block/block-vars.less +6 -6
- package/components/button/button-vars.less +11 -10
- package/components/card/card-rtl.css +1 -1
- package/components/card/card-vars.less +5 -5
- package/components/card/card.css +1 -1
- package/components/dialog/dialog-class.js +6 -3
- package/components/dialog/dialog-ios.less +10 -34
- package/components/dialog/dialog-md.less +2 -22
- package/components/dialog/dialog-rtl.css +1 -1
- package/components/dialog/dialog-vars.less +8 -10
- package/components/dialog/dialog.css +1 -1
- package/components/dialog/dialog.js +3 -3
- package/components/dialog/dialog.less +6 -25
- package/components/list/list-vars.less +7 -5
- package/components/list/list.less +1 -1
- package/components/notification/notification-class.js +6 -6
- package/components/notification/notification-ios.less +3 -8
- package/components/notification/notification-md.less +1 -20
- package/components/notification/notification-rtl.css +1 -1
- package/components/notification/notification-vars.less +13 -16
- package/components/notification/notification.css +1 -1
- package/components/notification/notification.less +13 -1
- package/components/page/page-ios.less +4 -4
- package/components/page/page-md.less +2 -2
- package/components/popover/popover-class.js +21 -58
- package/components/popover/popover-ios.less +66 -2
- package/components/popover/popover-md.less +2 -27
- package/components/popover/popover-rtl.css +1 -1
- package/components/popover/popover-vars.less +2 -3
- package/components/popover/popover.css +1 -1
- package/components/popover/popover.d.ts +0 -2
- package/components/popover/popover.js +0 -1
- package/components/popover/popover.less +28 -50
- package/components/range/range-class.js +34 -27
- package/components/range/range-ios.less +60 -0
- package/components/range/range-md.less +67 -4
- package/components/range/range-rtl.css +1 -1
- package/components/range/range-vars.less +18 -13
- package/components/range/range.css +1 -1
- package/components/range/range.d.ts +3 -1
- package/components/range/range.less +11 -24
- package/components/swipeout/swipeout-ios.less +37 -0
- package/components/swipeout/swipeout-md.less +56 -0
- package/components/swipeout/swipeout-rtl.css +1 -1
- package/components/swipeout/swipeout-vars.less +13 -2
- package/components/swipeout/swipeout.css +1 -1
- package/components/swipeout/swipeout.js +99 -23
- package/components/swipeout/swipeout.less +20 -44
- package/components/toast/toast-class.js +2 -2
- package/components/toast/toast-ios.less +2 -0
- package/components/toast/toast-rtl.css +1 -1
- package/components/toast/toast-vars.less +2 -4
- package/components/toast/toast.css +1 -1
- package/components/toast/toast.less +1 -1
- package/components/toggle/toggle-class.js +4 -8
- package/components/toggle/toggle-ios.less +68 -50
- package/components/toggle/toggle-rtl.css +1 -1
- package/components/toggle/toggle-vars.less +2 -2
- package/components/toggle/toggle.css +1 -1
- package/framework7-bundle-rtl.css +551 -452
- package/framework7-bundle-rtl.min.css +5 -5
- package/framework7-bundle.css +551 -452
- package/framework7-bundle.esm.js +2 -2
- package/framework7-bundle.js +2460 -858
- package/framework7-bundle.js.map +1 -1
- package/framework7-bundle.less +2 -2
- package/framework7-bundle.min.css +5 -5
- package/framework7-bundle.min.js +3 -3
- package/framework7-bundle.min.js.map +1 -1
- package/framework7-lite-bundle.esm.js +2 -2
- package/framework7-lite.esm.js +2 -2
- package/framework7-rtl.css +63 -29
- package/framework7-rtl.min.css +4 -4
- package/framework7.css +63 -29
- package/framework7.esm.js +2 -2
- package/framework7.less +2 -2
- package/framework7.min.css +4 -4
- package/less/mixins.less +8 -0
- package/package.json +1 -1
- package/shared/get-support.d.ts +0 -6
- package/shared/get-support.js +1 -20
- package/shared/material-color-utils.js +2153 -679
- package/shared/material-colors.js +97 -17
- package/shared/utils.js +18 -6
|
@@ -53,15 +53,6 @@ class Popover extends Modal {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
// Find Arrow
|
|
57
|
-
let $arrowEl;
|
|
58
|
-
if ($el.find('.popover-arrow').length === 0 && popover.params.arrow) {
|
|
59
|
-
$arrowEl = $('<div class="popover-arrow"></div>');
|
|
60
|
-
$el.prepend($arrowEl);
|
|
61
|
-
} else {
|
|
62
|
-
$arrowEl = $el.find('.popover-arrow');
|
|
63
|
-
}
|
|
64
|
-
|
|
65
56
|
// Open
|
|
66
57
|
const originalOpen = popover.open;
|
|
67
58
|
extend(popover, {
|
|
@@ -70,8 +61,6 @@ class Popover extends Modal {
|
|
|
70
61
|
el: $el[0],
|
|
71
62
|
$targetEl,
|
|
72
63
|
targetEl: $targetEl[0],
|
|
73
|
-
$arrowEl,
|
|
74
|
-
arrowEl: $arrowEl[0],
|
|
75
64
|
$backdropEl,
|
|
76
65
|
backdropEl: $backdropEl && $backdropEl[0],
|
|
77
66
|
type: 'popover',
|
|
@@ -93,7 +82,15 @@ class Popover extends Modal {
|
|
|
93
82
|
popover.resize();
|
|
94
83
|
}
|
|
95
84
|
popover.on('popoverOpen', () => {
|
|
85
|
+
if (popover.app.theme === 'ios') {
|
|
86
|
+
$el.removeClass('modal-in');
|
|
87
|
+
}
|
|
96
88
|
popover.resize();
|
|
89
|
+
if (popover.app.theme === 'ios') {
|
|
90
|
+
requestAnimationFrame(() => {
|
|
91
|
+
$el.addClass('modal-in');
|
|
92
|
+
});
|
|
93
|
+
}
|
|
97
94
|
app.on('resize', handleResize);
|
|
98
95
|
$(window).on('keyboardDidShow keyboardDidHide', handleResize);
|
|
99
96
|
popover.on('popoverClose popoverBeforeDestroy', () => {
|
|
@@ -156,8 +153,7 @@ class Popover extends Modal {
|
|
|
156
153
|
const {
|
|
157
154
|
app,
|
|
158
155
|
$el,
|
|
159
|
-
$targetEl
|
|
160
|
-
$arrowEl
|
|
156
|
+
$targetEl
|
|
161
157
|
} = popover;
|
|
162
158
|
const {
|
|
163
159
|
targetX,
|
|
@@ -169,18 +165,6 @@ class Popover extends Modal {
|
|
|
169
165
|
top: ''
|
|
170
166
|
});
|
|
171
167
|
const [width, height] = [$el.width(), $el.height()];
|
|
172
|
-
let arrowSize = 0;
|
|
173
|
-
let arrowLeft;
|
|
174
|
-
let arrowTop;
|
|
175
|
-
const hasArrow = $arrowEl.length > 0;
|
|
176
|
-
const arrowMin = app.theme === 'ios' ? 13 : 24;
|
|
177
|
-
if (hasArrow) {
|
|
178
|
-
$arrowEl.removeClass('on-left on-right on-top on-bottom').css({
|
|
179
|
-
left: '',
|
|
180
|
-
top: ''
|
|
181
|
-
});
|
|
182
|
-
arrowSize = $arrowEl.width() / 2;
|
|
183
|
-
}
|
|
184
168
|
$el.removeClass('popover-on-left popover-on-right popover-on-top popover-on-bottom popover-on-middle').css({
|
|
185
169
|
left: '',
|
|
186
170
|
top: ''
|
|
@@ -211,30 +195,27 @@ class Popover extends Modal {
|
|
|
211
195
|
targetWidth = popover.params.targetWidth || 0;
|
|
212
196
|
targetHeight = popover.params.targetHeight || 0;
|
|
213
197
|
}
|
|
214
|
-
let [left, top
|
|
198
|
+
let [left, top] = [0, 0];
|
|
215
199
|
// Top Position
|
|
216
200
|
const forcedPosition = verticalPosition === 'auto' ? false : verticalPosition;
|
|
217
201
|
let position = forcedPosition || 'top';
|
|
218
|
-
if (forcedPosition === 'top' || !forcedPosition && height
|
|
202
|
+
if (forcedPosition === 'top' || !forcedPosition && height < targetOffsetTop - safeAreaTop) {
|
|
219
203
|
// On top
|
|
220
|
-
top = targetOffsetTop - height
|
|
221
|
-
} else if (forcedPosition === 'bottom' || !forcedPosition && height
|
|
204
|
+
top = targetOffsetTop - height;
|
|
205
|
+
} else if (forcedPosition === 'bottom' || !forcedPosition && height < app.height - targetOffsetTop - targetHeight) {
|
|
222
206
|
// On bottom
|
|
223
207
|
position = 'bottom';
|
|
224
|
-
top = targetOffsetTop + targetHeight
|
|
208
|
+
top = targetOffsetTop + targetHeight;
|
|
225
209
|
} else {
|
|
226
210
|
// On middle
|
|
227
211
|
position = 'middle';
|
|
228
212
|
top = targetHeight / 2 + targetOffsetTop - height / 2;
|
|
229
|
-
diff = top;
|
|
230
213
|
top = Math.max(5, Math.min(top, app.height - height - 5));
|
|
231
|
-
diff -= top;
|
|
232
214
|
}
|
|
233
215
|
|
|
234
216
|
// Horizontal Position
|
|
235
217
|
if (position === 'top' || position === 'bottom') {
|
|
236
218
|
left = targetWidth / 2 + targetOffsetLeft - width / 2;
|
|
237
|
-
diff = left;
|
|
238
219
|
left = Math.max(5, Math.min(left, app.width - width - 5));
|
|
239
220
|
if (safeAreaLeft) {
|
|
240
221
|
left = Math.max(left, safeAreaLeft);
|
|
@@ -242,35 +223,12 @@ class Popover extends Modal {
|
|
|
242
223
|
if (safeAreaRight && left + width > app.width - 5 - safeAreaRight) {
|
|
243
224
|
left = app.width - 5 - safeAreaRight - width;
|
|
244
225
|
}
|
|
245
|
-
diff -= left;
|
|
246
|
-
if (hasArrow) {
|
|
247
|
-
if (position === 'top') {
|
|
248
|
-
$arrowEl.addClass('on-bottom');
|
|
249
|
-
}
|
|
250
|
-
if (position === 'bottom') {
|
|
251
|
-
$arrowEl.addClass('on-top');
|
|
252
|
-
}
|
|
253
|
-
arrowLeft = width / 2 - arrowSize + diff;
|
|
254
|
-
arrowLeft = Math.max(Math.min(arrowLeft, width - arrowSize * 2 - arrowMin), arrowMin);
|
|
255
|
-
$arrowEl.css({
|
|
256
|
-
left: `${arrowLeft}px`
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
226
|
} else if (position === 'middle') {
|
|
260
|
-
left = targetOffsetLeft - width
|
|
261
|
-
if (hasArrow) $arrowEl.addClass('on-right');
|
|
227
|
+
left = targetOffsetLeft - width;
|
|
262
228
|
if (left < 5 || left + width + safeAreaRight > app.width || left < safeAreaLeft) {
|
|
263
|
-
if (left < 5) left = targetOffsetLeft + targetWidth
|
|
229
|
+
if (left < 5) left = targetOffsetLeft + targetWidth;
|
|
264
230
|
if (left + width + safeAreaRight > app.width) left = app.width - width - 5 - safeAreaRight;
|
|
265
231
|
if (left < safeAreaLeft) left = safeAreaLeft;
|
|
266
|
-
if (hasArrow) $arrowEl.removeClass('on-right').addClass('on-left');
|
|
267
|
-
}
|
|
268
|
-
if (hasArrow) {
|
|
269
|
-
arrowTop = height / 2 - arrowSize + diff;
|
|
270
|
-
arrowTop = Math.max(Math.min(arrowTop, height - arrowSize * 2 - arrowMin), arrowMin);
|
|
271
|
-
$arrowEl.css({
|
|
272
|
-
top: `${arrowTop}px`
|
|
273
|
-
});
|
|
274
232
|
}
|
|
275
233
|
}
|
|
276
234
|
|
|
@@ -288,6 +246,11 @@ class Popover extends Modal {
|
|
|
288
246
|
top: `${top}px`,
|
|
289
247
|
left: `${left}px`
|
|
290
248
|
});
|
|
249
|
+
if (app.theme === 'ios') {
|
|
250
|
+
$el.css({
|
|
251
|
+
transformOrigin: `${targetOffsetLeft + targetWidth / 2 - left}px ${targetOffsetTop + targetHeight / 2 - top}px`
|
|
252
|
+
});
|
|
253
|
+
}
|
|
291
254
|
}
|
|
292
255
|
}
|
|
293
256
|
export default Popover;
|
|
@@ -1,6 +1,70 @@
|
|
|
1
1
|
.ios {
|
|
2
|
+
.popover-on-top {
|
|
3
|
+
transform-origin: center bottom;
|
|
4
|
+
--f7-popover-inner-offset: translate3d(0%, 80px, 0);
|
|
5
|
+
}
|
|
6
|
+
.popover-on-top.popover-on-right {
|
|
7
|
+
transform-origin: left bottom;
|
|
8
|
+
--f7-popover-inner-offset: translate3d(50%, 80px, 0);
|
|
9
|
+
}
|
|
10
|
+
.popover-on-top.popover-on-left {
|
|
11
|
+
transform-origin: right bottom;
|
|
12
|
+
--f7-popover-inner-offset: translate3d(-50%, 80px, 0);
|
|
13
|
+
}
|
|
14
|
+
.popover-on-middle {
|
|
15
|
+
transform-origin: center center;
|
|
16
|
+
}
|
|
17
|
+
.popover-on-middle.popover-on-right {
|
|
18
|
+
transform-origin: left center;
|
|
19
|
+
--f7-popover-inner-offset: translate3d(50%, 0px, 0);
|
|
20
|
+
}
|
|
21
|
+
.popover-on-middle.popover-on-left {
|
|
22
|
+
transform-origin: right center;
|
|
23
|
+
--f7-popover-inner-offset: translate3d(-50%, 0px, 0);
|
|
24
|
+
}
|
|
25
|
+
.popover-on-bottom {
|
|
26
|
+
transform-origin: center top;
|
|
27
|
+
--f7-popover-inner-offset: translate3d(0%, -80px, 0);
|
|
28
|
+
}
|
|
29
|
+
.popover-on-bottom.popover-on-right {
|
|
30
|
+
transform-origin: left top;
|
|
31
|
+
--f7-popover-inner-offset: translate3d(50%, -80px, 0);
|
|
32
|
+
}
|
|
33
|
+
.popover-on-bottom.popover-on-left {
|
|
34
|
+
transform-origin: right top;
|
|
35
|
+
--f7-popover-inner-offset: translate3d(-50%, -80px, 0);
|
|
36
|
+
}
|
|
2
37
|
.popover {
|
|
3
|
-
transform:
|
|
4
|
-
transition-property: opacity;
|
|
38
|
+
transform: translate3d(0, 0, 0) scale(0);
|
|
39
|
+
transition-property: opacity, transform;
|
|
40
|
+
opacity: 1;
|
|
41
|
+
will-change: auto;
|
|
42
|
+
|
|
43
|
+
&.modal-in {
|
|
44
|
+
transform: translate3d(0, 0, 0) scale(1);
|
|
45
|
+
transition-timing-function: cubic-bezier(0, 1, 0.2, 1.05);
|
|
46
|
+
transition-duration: 400ms;
|
|
47
|
+
.popover-inner {
|
|
48
|
+
transition-duration: 600ms;
|
|
49
|
+
|
|
50
|
+
transition-timing-function: cubic-bezier(0, 1, 0.2, 1.05);
|
|
51
|
+
transform: translate3d(0, 0, 0) scale(1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
&.modal-out {
|
|
55
|
+
opacity: 0;
|
|
56
|
+
transform: translate3d(0, 0, 0) scale(0);
|
|
57
|
+
transition-duration: 300ms;
|
|
58
|
+
.popover-inner {
|
|
59
|
+
transition-duration: 500ms;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
.popover-inner {
|
|
64
|
+
background: var(--f7-glass-bg-color);
|
|
65
|
+
box-shadow: var(--f7-glass-shadow);
|
|
66
|
+
border-radius: var(--f7-popover-border-radius);
|
|
67
|
+
transform: var(--f7-popover-inner-offset);
|
|
68
|
+
.ios-glass-backdrop();
|
|
5
69
|
}
|
|
6
70
|
}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
.popover {
|
|
3
3
|
transform: scale(0.85, 0.6);
|
|
4
4
|
transition-property: opacity, transform;
|
|
5
|
+
transition-duration: 300ms;
|
|
6
|
+
|
|
5
7
|
&.modal-in {
|
|
6
8
|
opacity: 1;
|
|
7
9
|
transform: scale(1);
|
|
@@ -11,31 +13,4 @@
|
|
|
11
13
|
transform: scale(1);
|
|
12
14
|
}
|
|
13
15
|
}
|
|
14
|
-
.popover-on-top {
|
|
15
|
-
transform-origin: center bottom;
|
|
16
|
-
}
|
|
17
|
-
.popover-on-top.popover-on-right {
|
|
18
|
-
transform-origin: left bottom;
|
|
19
|
-
}
|
|
20
|
-
.popover-on-top.popover-on-left {
|
|
21
|
-
transform-origin: right bottom;
|
|
22
|
-
}
|
|
23
|
-
.popover-on-middle {
|
|
24
|
-
transform-origin: center center;
|
|
25
|
-
}
|
|
26
|
-
.popover-on-middle.popover-on-right {
|
|
27
|
-
transform-origin: left center;
|
|
28
|
-
}
|
|
29
|
-
.popover-on-middle.popover-on-left {
|
|
30
|
-
transform-origin: right center;
|
|
31
|
-
}
|
|
32
|
-
.popover-on-bottom {
|
|
33
|
-
transform-origin: center top;
|
|
34
|
-
}
|
|
35
|
-
.popover-on-bottom.popover-on-right {
|
|
36
|
-
transform-origin: left top;
|
|
37
|
-
}
|
|
38
|
-
.popover-on-bottom.popover-on-left {
|
|
39
|
-
transform-origin: right top;
|
|
40
|
-
}
|
|
41
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--f7-popover-width:260px}.ios{--f7-popover-border-radius:
|
|
1
|
+
:root{--f7-popover-width:260px}.ios{--f7-popover-border-radius:32px;--f7-popover-actions-icon-size:28px;--f7-popover-transition-timing-function:initial;--f7-popover-bg-color:transparent;--f7-popover-actions-label-text-color:rgba(0, 0, 0, 0.45)}.ios .dark,.ios.dark{--f7-popover-actions-label-text-color:rgba(255, 255, 255, 0.55)}.md{--f7-popover-transition-timing-function:cubic-bezier(0, 0.8, 0.34, 1);--f7-popover-border-radius:28px;--f7-popover-actions-icon-size:24px}.md,.md .dark,.md [class*=color-]{--f7-popover-bg-color:var(--f7-md-surface-3);--f7-popover-actions-label-text-color:var(--f7-md-on-surface-variant)}.popover-backdrop-unique{z-index:13500}.popover{width:var(--f7-popover-width);z-index:13500;margin:0;top:0;opacity:0;left:0;position:absolute;display:none;background-color:var(--f7-popover-bg-color);border-radius:var(--f7-popover-border-radius);will-change:transform,opacity;--f7-safe-area-top:0px;--f7-safe-area-left:0px;--f7-safe-area-right:0px;--f7-safe-area-bottom:0px}.popover .list{margin:0}.popover .list ul{background:0 0}.popover .list:first-child ul:before{display:none!important}.popover .list:last-child ul:after{display:none!important}.popover .list:first-child ul{border-radius:var(--f7-popover-border-radius) var(--f7-popover-border-radius) 0 0}.popover .list:first-child li:first-child,.popover .list:first-child li:first-child a,.popover .list:first-child li:first-child>label{border-radius:var(--f7-popover-border-radius) var(--f7-popover-border-radius) 0 0}.popover .list:last-child ul{border-radius:0 0 var(--f7-popover-border-radius) var(--f7-popover-border-radius)}.popover .list:last-child li:last-child,.popover .list:last-child li:last-child a,.popover .list:last-child li:last-child>label{border-radius:0 0 var(--f7-popover-border-radius) var(--f7-popover-border-radius)}.popover .list:first-child:last-child li:first-child:last-child,.popover .list:first-child:last-child li:first-child:last-child a,.popover .list:first-child:last-child li:first-child:last-child>label,.popover .list:first-child:last-child ul{border-radius:var(--f7-popover-border-radius)}.popover .list+.list{margin-top:var(--f7-list-margin-vertical)}.popover.modal-in{opacity:1}.popover.not-animated{transition-duration:0s}.popover,.popover-backdrop{transition-timing-function:var(--f7-popover-transition-timing-function)}.popover-inner{overflow:auto;-webkit-overflow-scrolling:touch}.popover-from-actions .item-link i.icon{width:var(--f7-popover-actions-icon-size);height:var(--f7-popover-actions-icon-size);font-size:var(--f7-popover-actions-icon-size)}.ios .popover-from-actions-strong{font-weight:600}.md .popover-from-actions-strong{font-weight:500}.popover-from-actions-label{line-height:1.3;position:relative;display:flex;align-items:center;padding:var(--f7-actions-label-padding);color:var(--f7-popover-actions-label-text-color);font-size:var(--f7-actions-label-font-size);justify-content:var(--f7-actions-label-justify-content)}.popover-from-actions-label:after{content:'';position:absolute;background-color:var(--f7-list-item-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.popover-from-actions-label:last-child:after{display:none!important}.md .popover-from-actions-label{justify-content:center}.popover-on-top{transform-origin:center bottom}.popover-on-top.popover-on-right{transform-origin:left bottom}.popover-on-top.popover-on-left{transform-origin:right bottom}.popover-on-middle{transform-origin:center center}.popover-on-middle.popover-on-right{transform-origin:left center}.popover-on-middle.popover-on-left{transform-origin:right center}.popover-on-bottom{transform-origin:center top}.popover-on-bottom.popover-on-right{transform-origin:left top}.popover-on-bottom.popover-on-left{transform-origin:right top}.ios .popover-on-top{transform-origin:center bottom;--f7-popover-inner-offset:translate3d(0%, 80px, 0)}.ios .popover-on-top.popover-on-right{transform-origin:left bottom;--f7-popover-inner-offset:translate3d(50%, 80px, 0)}.ios .popover-on-top.popover-on-left{transform-origin:right bottom;--f7-popover-inner-offset:translate3d(-50%, 80px, 0)}.ios .popover-on-middle{transform-origin:center center}.ios .popover-on-middle.popover-on-right{transform-origin:left center;--f7-popover-inner-offset:translate3d(50%, 0px, 0)}.ios .popover-on-middle.popover-on-left{transform-origin:right center;--f7-popover-inner-offset:translate3d(-50%, 0px, 0)}.ios .popover-on-bottom{transform-origin:center top;--f7-popover-inner-offset:translate3d(0%, -80px, 0)}.ios .popover-on-bottom.popover-on-right{transform-origin:left top;--f7-popover-inner-offset:translate3d(50%, -80px, 0)}.ios .popover-on-bottom.popover-on-left{transform-origin:right top;--f7-popover-inner-offset:translate3d(-50%, -80px, 0)}.ios .popover{transform:translate3d(0,0,0) scale(0);transition-property:opacity,transform;opacity:1;will-change:auto}.ios .popover.modal-in{transform:translate3d(0,0,0) scale(1);transition-timing-function:cubic-bezier(0,1,0.2,1.05);transition-duration:.4s}.ios .popover.modal-in .popover-inner{transition-duration:.6s;transition-timing-function:cubic-bezier(0,1,0.2,1.05);transform:translate3d(0,0,0) scale(1)}.ios .popover.modal-out{opacity:0;transform:translate3d(0,0,0) scale(0);transition-duration:.3s}.ios .popover.modal-out .popover-inner{transition-duration:.5s}.ios .popover-inner{background:var(--f7-glass-bg-color);box-shadow:var(--f7-glass-shadow);border-radius:var(--f7-popover-border-radius);transform:var(--f7-popover-inner-offset);-webkit-backdrop-filter:saturate(180%) blur(16px);backdrop-filter:saturate(180%) blur(16px)}.md .popover{transform:scale(.85,.6);transition-property:opacity,transform;transition-duration:.3s}.md .popover.modal-in{opacity:1;transform:scale(1)}.md .popover.modal-out{opacity:0;transform:scale(1)}
|
|
@@ -2,15 +2,14 @@
|
|
|
2
2
|
--f7-popover-width: 260px;
|
|
3
3
|
}
|
|
4
4
|
.ios-vars({
|
|
5
|
-
--f7-popover-border-radius:
|
|
5
|
+
--f7-popover-border-radius: 32px;
|
|
6
6
|
--f7-popover-actions-icon-size: 28px;
|
|
7
7
|
--f7-popover-transition-timing-function: initial;
|
|
8
|
+
--f7-popover-bg-color: transparent;
|
|
8
9
|
.light-vars({
|
|
9
|
-
--f7-popover-bg-color: rgba(255,255,255,0.95);
|
|
10
10
|
--f7-popover-actions-label-text-color: rgba(0,0,0,0.45);
|
|
11
11
|
});
|
|
12
12
|
.dark-vars({
|
|
13
|
-
--f7-popover-bg-color: rgba(30,30,30,0.95);
|
|
14
13
|
--f7-popover-actions-label-text-color: rgba(255,255,255,0.55);
|
|
15
14
|
});
|
|
16
15
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--f7-popover-width:260px}.ios{--f7-popover-border-radius:
|
|
1
|
+
:root{--f7-popover-width:260px}.ios{--f7-popover-border-radius:32px;--f7-popover-actions-icon-size:28px;--f7-popover-transition-timing-function:initial;--f7-popover-bg-color:transparent;--f7-popover-actions-label-text-color:rgba(0, 0, 0, 0.45)}.ios .dark,.ios.dark{--f7-popover-actions-label-text-color:rgba(255, 255, 255, 0.55)}.md{--f7-popover-transition-timing-function:cubic-bezier(0, 0.8, 0.34, 1);--f7-popover-border-radius:28px;--f7-popover-actions-icon-size:24px}.md,.md .dark,.md [class*=color-]{--f7-popover-bg-color:var(--f7-md-surface-3);--f7-popover-actions-label-text-color:var(--f7-md-on-surface-variant)}.popover-backdrop-unique{z-index:13500}.popover{width:var(--f7-popover-width);z-index:13500;margin:0;top:0;opacity:0;left:0;position:absolute;display:none;background-color:var(--f7-popover-bg-color);border-radius:var(--f7-popover-border-radius);will-change:transform,opacity;--f7-safe-area-top:0px;--f7-safe-area-left:0px;--f7-safe-area-right:0px;--f7-safe-area-bottom:0px}.popover .list{margin:0}.popover .list ul{background:0 0}.popover .list:first-child ul:before{display:none!important}.popover .list:last-child ul:after{display:none!important}.popover .list:first-child ul{border-radius:var(--f7-popover-border-radius) var(--f7-popover-border-radius) 0 0}.popover .list:first-child li:first-child,.popover .list:first-child li:first-child a,.popover .list:first-child li:first-child>label{border-radius:var(--f7-popover-border-radius) var(--f7-popover-border-radius) 0 0}.popover .list:last-child ul{border-radius:0 0 var(--f7-popover-border-radius) var(--f7-popover-border-radius)}.popover .list:last-child li:last-child,.popover .list:last-child li:last-child a,.popover .list:last-child li:last-child>label{border-radius:0 0 var(--f7-popover-border-radius) var(--f7-popover-border-radius)}.popover .list:first-child:last-child li:first-child:last-child,.popover .list:first-child:last-child li:first-child:last-child a,.popover .list:first-child:last-child li:first-child:last-child>label,.popover .list:first-child:last-child ul{border-radius:var(--f7-popover-border-radius)}.popover .list+.list{margin-top:var(--f7-list-margin-vertical)}.popover.modal-in{opacity:1}.popover.not-animated{transition-duration:0s}.popover,.popover-backdrop{transition-timing-function:var(--f7-popover-transition-timing-function)}.popover-inner{overflow:auto;-webkit-overflow-scrolling:touch}.popover-from-actions .item-link i.icon{width:var(--f7-popover-actions-icon-size);height:var(--f7-popover-actions-icon-size);font-size:var(--f7-popover-actions-icon-size)}.ios .popover-from-actions-strong{font-weight:600}.md .popover-from-actions-strong{font-weight:500}.popover-from-actions-label{line-height:1.3;position:relative;display:flex;align-items:center;padding:var(--f7-actions-label-padding);color:var(--f7-popover-actions-label-text-color);font-size:var(--f7-actions-label-font-size);justify-content:var(--f7-actions-label-justify-content)}.popover-from-actions-label:after{content:'';position:absolute;background-color:var(--f7-list-item-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.popover-from-actions-label:last-child:after{display:none!important}.md .popover-from-actions-label{justify-content:center}.popover-on-top{transform-origin:center bottom}.popover-on-top.popover-on-right{transform-origin:left bottom}.popover-on-top.popover-on-left{transform-origin:right bottom}.popover-on-middle{transform-origin:center center}.popover-on-middle.popover-on-right{transform-origin:left center}.popover-on-middle.popover-on-left{transform-origin:right center}.popover-on-bottom{transform-origin:center top}.popover-on-bottom.popover-on-right{transform-origin:left top}.popover-on-bottom.popover-on-left{transform-origin:right top}.ios .popover-on-top{transform-origin:center bottom;--f7-popover-inner-offset:translate3d(0%, 80px, 0)}.ios .popover-on-top.popover-on-right{transform-origin:left bottom;--f7-popover-inner-offset:translate3d(50%, 80px, 0)}.ios .popover-on-top.popover-on-left{transform-origin:right bottom;--f7-popover-inner-offset:translate3d(-50%, 80px, 0)}.ios .popover-on-middle{transform-origin:center center}.ios .popover-on-middle.popover-on-right{transform-origin:left center;--f7-popover-inner-offset:translate3d(50%, 0px, 0)}.ios .popover-on-middle.popover-on-left{transform-origin:right center;--f7-popover-inner-offset:translate3d(-50%, 0px, 0)}.ios .popover-on-bottom{transform-origin:center top;--f7-popover-inner-offset:translate3d(0%, -80px, 0)}.ios .popover-on-bottom.popover-on-right{transform-origin:left top;--f7-popover-inner-offset:translate3d(50%, -80px, 0)}.ios .popover-on-bottom.popover-on-left{transform-origin:right top;--f7-popover-inner-offset:translate3d(-50%, -80px, 0)}.ios .popover{transform:translate3d(0,0,0) scale(0);transition-property:opacity,transform;opacity:1;will-change:auto}.ios .popover.modal-in{transform:translate3d(0,0,0) scale(1);transition-timing-function:cubic-bezier(0,1,0.2,1.05);transition-duration:.4s}.ios .popover.modal-in .popover-inner{transition-duration:.6s;transition-timing-function:cubic-bezier(0,1,0.2,1.05);transform:translate3d(0,0,0) scale(1)}.ios .popover.modal-out{opacity:0;transform:translate3d(0,0,0) scale(0);transition-duration:.3s}.ios .popover.modal-out .popover-inner{transition-duration:.5s}.ios .popover-inner{background:var(--f7-glass-bg-color);box-shadow:var(--f7-glass-shadow);border-radius:var(--f7-popover-border-radius);transform:var(--f7-popover-inner-offset);-webkit-backdrop-filter:saturate(180%) blur(16px);backdrop-filter:saturate(180%) blur(16px)}.md .popover{transform:scale(.85,.6);transition-property:opacity,transform;transition-duration:.3s}.md .popover.modal-in{opacity:1;transform:scale(1)}.md .popover.modal-out{opacity:0;transform:scale(1)}
|
|
@@ -23,8 +23,6 @@ export namespace Popover {
|
|
|
23
23
|
el?: HTMLElement | CSSSelector;
|
|
24
24
|
/** Full Popover HTML layout string. Can be useful if you want to create Popover element dynamically. */
|
|
25
25
|
content?: string;
|
|
26
|
-
/** Enables Popover arrow/corner. (default true) */
|
|
27
|
-
arrow?: boolean;
|
|
28
26
|
/** Enables Popover backdrop (dark semi transparent layer behind). (default true) */
|
|
29
27
|
backdrop?: boolean;
|
|
30
28
|
/** Backdrop element to share across instances */
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
left: 0;
|
|
16
16
|
position: absolute;
|
|
17
17
|
display: none;
|
|
18
|
-
transition-duration: 300ms;
|
|
19
18
|
background-color: var(--f7-popover-bg-color);
|
|
20
19
|
border-radius: var(--f7-popover-border-radius);
|
|
21
20
|
will-change: transform, opacity;
|
|
@@ -110,56 +109,35 @@
|
|
|
110
109
|
justify-content: center;
|
|
111
110
|
}
|
|
112
111
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
top: 0;
|
|
129
|
-
border-radius: 3px;
|
|
130
|
-
transform: rotate(45deg);
|
|
131
|
-
}
|
|
132
|
-
&.on-left {
|
|
133
|
-
left: -26px;
|
|
134
|
-
&:after {
|
|
135
|
-
left: 19px;
|
|
136
|
-
top: 0;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
&.on-right {
|
|
140
|
-
left: 100%;
|
|
141
|
-
&:after {
|
|
142
|
-
left: -19px;
|
|
143
|
-
top: 0;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
&.on-top {
|
|
147
|
-
left: 0;
|
|
148
|
-
top: -26px;
|
|
149
|
-
&:after {
|
|
150
|
-
left: 0;
|
|
151
|
-
top: 19px;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
&.on-bottom {
|
|
155
|
-
left: 0;
|
|
156
|
-
top: 100%;
|
|
157
|
-
&:after {
|
|
158
|
-
left: 0;
|
|
159
|
-
top: -19px;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
112
|
+
|
|
113
|
+
.popover-on-top {
|
|
114
|
+
transform-origin: center bottom;
|
|
115
|
+
}
|
|
116
|
+
.popover-on-top.popover-on-right {
|
|
117
|
+
transform-origin: left bottom;
|
|
118
|
+
}
|
|
119
|
+
.popover-on-top.popover-on-left {
|
|
120
|
+
transform-origin: right bottom;
|
|
121
|
+
}
|
|
122
|
+
.popover-on-middle {
|
|
123
|
+
transform-origin: center center;
|
|
124
|
+
}
|
|
125
|
+
.popover-on-middle.popover-on-right {
|
|
126
|
+
transform-origin: left center;
|
|
162
127
|
}
|
|
128
|
+
.popover-on-middle.popover-on-left {
|
|
129
|
+
transform-origin: right center;
|
|
130
|
+
}
|
|
131
|
+
.popover-on-bottom {
|
|
132
|
+
transform-origin: center top;
|
|
133
|
+
}
|
|
134
|
+
.popover-on-bottom.popover-on-right {
|
|
135
|
+
transform-origin: left top;
|
|
136
|
+
}
|
|
137
|
+
.popover-on-bottom.popover-on-left {
|
|
138
|
+
transform-origin: right top;
|
|
139
|
+
}
|
|
140
|
+
|
|
163
141
|
.if-ios-theme({
|
|
164
142
|
@import './popover-ios.less';
|
|
165
143
|
});
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import $ from '../../shared/dom7.js';
|
|
2
2
|
import { extend, nextTick, deleteProps } from '../../shared/utils.js';
|
|
3
3
|
import Framework7Class from '../../shared/class.js';
|
|
4
|
-
import { getSupport } from '../../shared/get-support.js';
|
|
5
4
|
class Range extends Framework7Class {
|
|
6
5
|
constructor(app, params) {
|
|
7
6
|
super(params, [app]);
|
|
8
7
|
const range = this;
|
|
9
|
-
const support = getSupport();
|
|
10
8
|
const defaults = {
|
|
11
9
|
el: null,
|
|
12
10
|
inputEl: null,
|
|
@@ -24,7 +22,8 @@ class Range extends Framework7Class {
|
|
|
24
22
|
scaleSteps: 5,
|
|
25
23
|
scaleSubSteps: 0,
|
|
26
24
|
formatScaleLabel: null,
|
|
27
|
-
limitKnobPosition:
|
|
25
|
+
limitKnobPosition: true,
|
|
26
|
+
limitBarPosition: app.theme === 'md'
|
|
28
27
|
};
|
|
29
28
|
|
|
30
29
|
// Extend defaults with modules params
|
|
@@ -72,7 +71,8 @@ class Range extends Framework7Class {
|
|
|
72
71
|
scale,
|
|
73
72
|
scaleSteps,
|
|
74
73
|
scaleSubSteps,
|
|
75
|
-
limitKnobPosition
|
|
74
|
+
limitKnobPosition,
|
|
75
|
+
limitBarPosition
|
|
76
76
|
} = range.params;
|
|
77
77
|
extend(range, {
|
|
78
78
|
app,
|
|
@@ -92,7 +92,8 @@ class Range extends Framework7Class {
|
|
|
92
92
|
scale,
|
|
93
93
|
scaleSteps,
|
|
94
94
|
scaleSubSteps,
|
|
95
|
-
limitKnobPosition
|
|
95
|
+
limitKnobPosition,
|
|
96
|
+
limitBarPosition
|
|
96
97
|
});
|
|
97
98
|
if ($inputEl) {
|
|
98
99
|
'step min max'.split(' ').forEach(paramName => {
|
|
@@ -208,13 +209,15 @@ class Range extends Framework7Class {
|
|
|
208
209
|
rangeOffsetLeft = rangeOffset.left;
|
|
209
210
|
rangeOffsetTop = rangeOffset.top;
|
|
210
211
|
let progress;
|
|
212
|
+
const knobSize = range.vertical ? range.knobHeight : range.knobWidth;
|
|
213
|
+
const progressModify = limitKnobPosition ? knobSize : 0;
|
|
211
214
|
if (range.vertical) {
|
|
212
|
-
progress = (touchesStart.y - rangeOffsetTop) / range.rangeHeight;
|
|
215
|
+
progress = (touchesStart.y - rangeOffsetTop - progressModify / 2) / (range.rangeHeight - progressModify);
|
|
213
216
|
if (!range.verticalReversed) progress = 1 - progress;
|
|
214
217
|
} else if (range.app.rtl) {
|
|
215
|
-
progress = (rangeOffsetLeft + range.rangeWidth - touchesStart.x) / range.rangeWidth;
|
|
218
|
+
progress = (rangeOffsetLeft + range.rangeWidth + progressModify / 2 - touchesStart.x) / (range.rangeWidth - progressModify);
|
|
216
219
|
} else {
|
|
217
|
-
progress = (touchesStart.x - rangeOffsetLeft) / range.rangeWidth;
|
|
220
|
+
progress = (touchesStart.x - rangeOffsetLeft - progressModify / 2) / (range.rangeWidth - progressModify);
|
|
218
221
|
}
|
|
219
222
|
let newValue = progress * (range.max - range.min) + range.min;
|
|
220
223
|
if (range.dual) {
|
|
@@ -262,13 +265,15 @@ class Range extends Framework7Class {
|
|
|
262
265
|
}
|
|
263
266
|
e.preventDefault();
|
|
264
267
|
let progress;
|
|
268
|
+
const knobSize = range.vertical ? range.knobHeight : range.knobWidth;
|
|
269
|
+
const progressModify = limitKnobPosition ? knobSize : 0;
|
|
265
270
|
if (range.vertical) {
|
|
266
|
-
progress = (pageY - rangeOffsetTop) / range.rangeHeight;
|
|
271
|
+
progress = (pageY - rangeOffsetTop - progressModify / 2) / (range.rangeHeight - progressModify);
|
|
267
272
|
if (!range.verticalReversed) progress = 1 - progress;
|
|
268
273
|
} else if (range.app.rtl) {
|
|
269
|
-
progress = (rangeOffsetLeft + range.rangeWidth - pageX) / range.rangeWidth;
|
|
274
|
+
progress = (rangeOffsetLeft + range.rangeWidth + progressModify / 2 - pageX) / (range.rangeWidth - progressModify);
|
|
270
275
|
} else {
|
|
271
|
-
progress = (pageX - rangeOffsetLeft) / range.rangeWidth;
|
|
276
|
+
progress = (pageX - rangeOffsetLeft - progressModify / 2) / (range.rangeWidth - progressModify);
|
|
272
277
|
}
|
|
273
278
|
let newValue = progress * (range.max - range.min) + range.min;
|
|
274
279
|
if (range.dual) {
|
|
@@ -326,10 +331,9 @@ class Range extends Framework7Class {
|
|
|
326
331
|
let parentPanel;
|
|
327
332
|
let parentPage;
|
|
328
333
|
range.attachEvents = function attachEvents() {
|
|
329
|
-
|
|
334
|
+
range.$el.on(app.touchEvents.start, handleTouchStart, {
|
|
330
335
|
passive: true
|
|
331
|
-
}
|
|
332
|
-
range.$el.on(app.touchEvents.start, handleTouchStart, passive);
|
|
336
|
+
});
|
|
333
337
|
app.on('touchmove', handleTouchMove);
|
|
334
338
|
app.on('touchend:passive', handleTouchEnd);
|
|
335
339
|
app.on('tabShow', handleResize);
|
|
@@ -342,10 +346,9 @@ class Range extends Framework7Class {
|
|
|
342
346
|
parentPage.on('page:reinit', handleResize);
|
|
343
347
|
};
|
|
344
348
|
range.detachEvents = function detachEvents() {
|
|
345
|
-
|
|
349
|
+
range.$el.off(app.touchEvents.start, handleTouchStart, {
|
|
346
350
|
passive: true
|
|
347
|
-
}
|
|
348
|
-
range.$el.off(app.touchEvents.start, handleTouchStart, passive);
|
|
351
|
+
});
|
|
349
352
|
app.off('touchmove', handleTouchMove);
|
|
350
353
|
app.off('touchend:passive', handleTouchEnd);
|
|
351
354
|
app.off('tabShow', handleResize);
|
|
@@ -402,7 +405,8 @@ class Range extends Framework7Class {
|
|
|
402
405
|
labels,
|
|
403
406
|
vertical,
|
|
404
407
|
verticalReversed,
|
|
405
|
-
limitKnobPosition
|
|
408
|
+
limitKnobPosition,
|
|
409
|
+
limitBarPosition
|
|
406
410
|
} = range;
|
|
407
411
|
const knobSize = vertical ? knobHeight : knobWidth;
|
|
408
412
|
const rangeSize = vertical ? rangeHeight : rangeWidth;
|
|
@@ -410,28 +414,31 @@ class Range extends Framework7Class {
|
|
|
410
414
|
const positionProperty = vertical ? verticalReversed ? 'top' : 'bottom' : app.rtl ? 'right' : 'left';
|
|
411
415
|
if (range.dual) {
|
|
412
416
|
const progress = [(value[0] - min) / (max - min), (value[1] - min) / (max - min)];
|
|
417
|
+
const positionStartProgress = limitBarPosition ? knobSize / rangeSize : 0;
|
|
418
|
+
const barProgressModify = limitBarPosition ? (rangeSize - knobSize) / rangeSize : 1;
|
|
413
419
|
$barActiveEl.css({
|
|
414
|
-
[positionProperty]: `${progress[0] * 100}%`,
|
|
415
|
-
[vertical ? 'height' : 'width']: `${(progress[1] - progress[0]) * 100}%`
|
|
420
|
+
[positionProperty]: `${(positionStartProgress + progress[0] * barProgressModify) * 100}%`,
|
|
421
|
+
[vertical ? 'height' : 'width']: `${(progress[1] - progress[0] - positionStartProgress) * 100 * barProgressModify}%`
|
|
416
422
|
});
|
|
417
423
|
knobs.forEach(($knobEl, knobIndex) => {
|
|
418
424
|
let startPos = rangeSize * progress[knobIndex];
|
|
419
425
|
if (limitKnobPosition) {
|
|
420
|
-
const
|
|
421
|
-
|
|
422
|
-
|
|
426
|
+
const minPos = knobSize;
|
|
427
|
+
const maxPos = rangeSize;
|
|
428
|
+
startPos = (maxPos - minPos) * progress[knobIndex] + knobSize / 2;
|
|
423
429
|
}
|
|
424
430
|
$knobEl.css(positionProperty, `${startPos}px`);
|
|
425
431
|
if (label) labels[knobIndex].text(range.formatLabel(value[knobIndex], labels[knobIndex][0]));
|
|
426
432
|
});
|
|
427
433
|
} else {
|
|
428
434
|
const progress = (value - min) / (max - min);
|
|
429
|
-
|
|
435
|
+
const barProgressModify = limitBarPosition ? (rangeSize - knobSize) / rangeSize : 1;
|
|
436
|
+
$barActiveEl.css(vertical ? 'height' : 'width', `${progress * 100 * barProgressModify}%`);
|
|
430
437
|
let startPos = rangeSize * progress;
|
|
431
438
|
if (limitKnobPosition) {
|
|
432
|
-
const
|
|
433
|
-
|
|
434
|
-
|
|
439
|
+
const minPos = knobSize;
|
|
440
|
+
const maxPos = rangeSize;
|
|
441
|
+
startPos = (maxPos - minPos) * progress + knobSize / 2;
|
|
435
442
|
}
|
|
436
443
|
knobs[0].css(positionProperty, `${startPos}px`);
|
|
437
444
|
if (label) labels[0].text(range.formatLabel(value, labels[0][0]));
|