@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.
Files changed (92) hide show
  1. package/components/actions/actions-ios.less +22 -15
  2. package/components/actions/actions-rtl.css +1 -1
  3. package/components/actions/actions-vars.less +4 -7
  4. package/components/actions/actions.css +1 -1
  5. package/components/actions/actions.less +0 -3
  6. package/components/app/app-class.d.ts +2 -0
  7. package/components/app/app-class.js +10 -2
  8. package/components/app/app-vars.less +36 -0
  9. package/components/block/block-vars.less +6 -6
  10. package/components/button/button-vars.less +11 -10
  11. package/components/card/card-rtl.css +1 -1
  12. package/components/card/card-vars.less +5 -5
  13. package/components/card/card.css +1 -1
  14. package/components/dialog/dialog-class.js +6 -3
  15. package/components/dialog/dialog-ios.less +10 -34
  16. package/components/dialog/dialog-md.less +2 -22
  17. package/components/dialog/dialog-rtl.css +1 -1
  18. package/components/dialog/dialog-vars.less +8 -10
  19. package/components/dialog/dialog.css +1 -1
  20. package/components/dialog/dialog.js +3 -3
  21. package/components/dialog/dialog.less +6 -25
  22. package/components/list/list-vars.less +7 -5
  23. package/components/list/list.less +1 -1
  24. package/components/notification/notification-class.js +6 -6
  25. package/components/notification/notification-ios.less +3 -8
  26. package/components/notification/notification-md.less +1 -20
  27. package/components/notification/notification-rtl.css +1 -1
  28. package/components/notification/notification-vars.less +13 -16
  29. package/components/notification/notification.css +1 -1
  30. package/components/notification/notification.less +13 -1
  31. package/components/page/page-ios.less +4 -4
  32. package/components/page/page-md.less +2 -2
  33. package/components/popover/popover-class.js +21 -58
  34. package/components/popover/popover-ios.less +66 -2
  35. package/components/popover/popover-md.less +2 -27
  36. package/components/popover/popover-rtl.css +1 -1
  37. package/components/popover/popover-vars.less +2 -3
  38. package/components/popover/popover.css +1 -1
  39. package/components/popover/popover.d.ts +0 -2
  40. package/components/popover/popover.js +0 -1
  41. package/components/popover/popover.less +28 -50
  42. package/components/range/range-class.js +34 -27
  43. package/components/range/range-ios.less +60 -0
  44. package/components/range/range-md.less +67 -4
  45. package/components/range/range-rtl.css +1 -1
  46. package/components/range/range-vars.less +18 -13
  47. package/components/range/range.css +1 -1
  48. package/components/range/range.d.ts +3 -1
  49. package/components/range/range.less +11 -24
  50. package/components/swipeout/swipeout-ios.less +37 -0
  51. package/components/swipeout/swipeout-md.less +56 -0
  52. package/components/swipeout/swipeout-rtl.css +1 -1
  53. package/components/swipeout/swipeout-vars.less +13 -2
  54. package/components/swipeout/swipeout.css +1 -1
  55. package/components/swipeout/swipeout.js +99 -23
  56. package/components/swipeout/swipeout.less +20 -44
  57. package/components/toast/toast-class.js +2 -2
  58. package/components/toast/toast-ios.less +2 -0
  59. package/components/toast/toast-rtl.css +1 -1
  60. package/components/toast/toast-vars.less +2 -4
  61. package/components/toast/toast.css +1 -1
  62. package/components/toast/toast.less +1 -1
  63. package/components/toggle/toggle-class.js +4 -8
  64. package/components/toggle/toggle-ios.less +68 -50
  65. package/components/toggle/toggle-rtl.css +1 -1
  66. package/components/toggle/toggle-vars.less +2 -2
  67. package/components/toggle/toggle.css +1 -1
  68. package/framework7-bundle-rtl.css +551 -452
  69. package/framework7-bundle-rtl.min.css +5 -5
  70. package/framework7-bundle.css +551 -452
  71. package/framework7-bundle.esm.js +2 -2
  72. package/framework7-bundle.js +2460 -858
  73. package/framework7-bundle.js.map +1 -1
  74. package/framework7-bundle.less +2 -2
  75. package/framework7-bundle.min.css +5 -5
  76. package/framework7-bundle.min.js +3 -3
  77. package/framework7-bundle.min.js.map +1 -1
  78. package/framework7-lite-bundle.esm.js +2 -2
  79. package/framework7-lite.esm.js +2 -2
  80. package/framework7-rtl.css +63 -29
  81. package/framework7-rtl.min.css +4 -4
  82. package/framework7.css +63 -29
  83. package/framework7.esm.js +2 -2
  84. package/framework7.less +2 -2
  85. package/framework7.min.css +4 -4
  86. package/less/mixins.less +8 -0
  87. package/package.json +1 -1
  88. package/shared/get-support.d.ts +0 -6
  89. package/shared/get-support.js +1 -20
  90. package/shared/material-color-utils.js +2153 -679
  91. package/shared/material-colors.js +97 -17
  92. 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, diff] = [0, 0, 0];
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 + arrowSize < targetOffsetTop - safeAreaTop) {
202
+ if (forcedPosition === 'top' || !forcedPosition && height < targetOffsetTop - safeAreaTop) {
219
203
  // On top
220
- top = targetOffsetTop - height - arrowSize;
221
- } else if (forcedPosition === 'bottom' || !forcedPosition && height + arrowSize < app.height - targetOffsetTop - targetHeight) {
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 + arrowSize;
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 - arrowSize;
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 + arrowSize;
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: none;
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:13px;--f7-popover-actions-icon-size:28px;--f7-popover-transition-timing-function:initial;--f7-popover-bg-color:rgba(255, 255, 255, 0.95);--f7-popover-actions-label-text-color:rgba(0, 0, 0, 0.45)}.ios .dark,.ios.dark{--f7-popover-bg-color:rgba(30, 30, 30, 0.95);--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;transition-duration:.3s;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-arrow{width:26px;height:26px;position:absolute;left:-26px;top:0;z-index:100;overflow:hidden}.popover-arrow:after{content:'';background:var(--f7-popover-bg-color);width:26px;height:26px;position:absolute;left:0;top:0;border-radius:3px;transform:rotate(45deg)}.popover-arrow.on-left{left:-26px}.popover-arrow.on-left:after{left:19px;top:0}.popover-arrow.on-right{left:100%}.popover-arrow.on-right:after{left:-19px;top:0}.popover-arrow.on-top{left:0;top:-26px}.popover-arrow.on-top:after{left:0;top:19px}.popover-arrow.on-bottom{left:0;top:100%}.popover-arrow.on-bottom:after{left:0;top:-19px}.ios .popover{transform:none;transition-property:opacity}.md .popover{transform:scale(.85,.6);transition-property:opacity,transform}.md .popover.modal-in{opacity:1;transform:scale(1)}.md .popover.modal-out{opacity:0;transform:scale(1)}.md .popover-on-top{transform-origin:center bottom}.md .popover-on-top.popover-on-right{transform-origin:left bottom}.md .popover-on-top.popover-on-left{transform-origin:right bottom}.md .popover-on-middle{transform-origin:center center}.md .popover-on-middle.popover-on-right{transform-origin:left center}.md .popover-on-middle.popover-on-left{transform-origin:right center}.md .popover-on-bottom{transform-origin:center top}.md .popover-on-bottom.popover-on-right{transform-origin:left top}.md .popover-on-bottom.popover-on-left{transform-origin:right top}
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: 13px;
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:13px;--f7-popover-actions-icon-size:28px;--f7-popover-transition-timing-function:initial;--f7-popover-bg-color:rgba(255, 255, 255, 0.95);--f7-popover-actions-label-text-color:rgba(0, 0, 0, 0.45)}.ios .dark,.ios.dark{--f7-popover-bg-color:rgba(30, 30, 30, 0.95);--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;transition-duration:.3s;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-arrow{width:26px;height:26px;position:absolute;left:-26px;top:0;z-index:100;overflow:hidden}.popover-arrow:after{content:'';background:var(--f7-popover-bg-color);width:26px;height:26px;position:absolute;left:0;top:0;border-radius:3px;transform:rotate(45deg)}.popover-arrow.on-left{left:-26px}.popover-arrow.on-left:after{left:19px;top:0}.popover-arrow.on-right{left:100%}.popover-arrow.on-right:after{left:-19px;top:0}.popover-arrow.on-top{left:0;top:-26px}.popover-arrow.on-top:after{left:0;top:19px}.popover-arrow.on-bottom{left:0;top:100%}.popover-arrow.on-bottom:after{left:0;top:-19px}.ios .popover{transform:none;transition-property:opacity}.md .popover{transform:scale(.85,.6);transition-property:opacity,transform}.md .popover.modal-in{opacity:1;transform:scale(1)}.md .popover.modal-out{opacity:0;transform:scale(1)}.md .popover-on-top{transform-origin:center bottom}.md .popover-on-top.popover-on-right{transform-origin:left bottom}.md .popover-on-top.popover-on-left{transform-origin:right bottom}.md .popover-on-middle{transform-origin:center center}.md .popover-on-middle.popover-on-right{transform-origin:left center}.md .popover-on-middle.popover-on-left{transform-origin:right center}.md .popover-on-bottom{transform-origin:center top}.md .popover-on-bottom.popover-on-right{transform-origin:left top}.md .popover-on-bottom.popover-on-left{transform-origin:right top}
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 */
@@ -7,7 +7,6 @@ export default {
7
7
  params: {
8
8
  popover: {
9
9
  verticalPosition: 'auto',
10
- arrow: true,
11
10
  backdrop: true,
12
11
  backdropEl: undefined,
13
12
  backdropUnique: false,
@@ -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
- .popover-arrow {
114
- width: 26px;
115
- height: 26px;
116
- position: absolute;
117
- left: -26px;
118
- top: 0;
119
- z-index: 100;
120
- overflow: hidden;
121
- &:after {
122
- content: '';
123
- background: var(--f7-popover-bg-color);
124
- width: 26px;
125
- height: 26px;
126
- position: absolute;
127
- left: 0;
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: app.theme === 'ios'
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
- const passive = support.passiveListener ? {
334
+ range.$el.on(app.touchEvents.start, handleTouchStart, {
330
335
  passive: true
331
- } : false;
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
- const passive = support.passiveListener ? {
349
+ range.$el.off(app.touchEvents.start, handleTouchStart, {
346
350
  passive: true
347
- } : false;
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 realStartPos = rangeSize * progress[knobIndex] - knobSize / 2;
421
- if (realStartPos < 0) startPos = knobSize / 2;
422
- if (realStartPos + knobSize > rangeSize) startPos = rangeSize - knobSize / 2;
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
- $barActiveEl.css(vertical ? 'height' : 'width', `${progress * 100}%`);
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 realStartPos = rangeSize * progress - knobSize / 2;
433
- if (realStartPos < 0) startPos = knobSize / 2;
434
- if (realStartPos + knobSize > rangeSize) startPos = rangeSize - knobSize / 2;
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]));