@xenknight/framework7 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/components/app/app.less +1 -1
  2. package/components/icon/icon-ios.less +9 -0
  3. package/components/icon/icon-md.less +9 -0
  4. package/components/icon/icon.less +2 -1
  5. package/components/list/list-vars.less +1 -1
  6. package/components/messagebar/messagebar-rtl.css +1 -1
  7. package/components/messagebar/messagebar-vars.less +1 -1
  8. package/components/messagebar/messagebar.css +1 -1
  9. package/components/messages/messages-rtl.css +1 -1
  10. package/components/messages/messages-vars.less +7 -7
  11. package/components/messages/messages.css +1 -1
  12. package/components/navbar-new/navbar-ios.less +135 -0
  13. package/components/navbar-new/navbar-md.less +105 -0
  14. package/components/navbar-new/navbar-vars.less +78 -0
  15. package/components/navbar-new/navbar.d.ts +77 -0
  16. package/components/navbar-new/navbar.js +568 -0
  17. package/components/navbar-new/navbar.less +268 -0
  18. package/components/searchbar-new/remove-diacritics.js +271 -0
  19. package/components/searchbar-new/searchbar-ios.less +131 -0
  20. package/components/searchbar-new/searchbar-md.less +153 -0
  21. package/components/searchbar-new/searchbar-new-class.js +592 -0
  22. package/components/searchbar-new/searchbar-vars.less +75 -0
  23. package/components/searchbar-new/searchbar.js +122 -0
  24. package/components/searchbar-new/searchbar.less +331 -0
  25. package/components/swipeout/swipeout.js +8 -9
  26. package/components/tabs/tabs.js +5 -0
  27. package/components/toolbar-new/tabbar-highlight.js +134 -0
  28. package/components/toolbar-new/toolbar-ios.less +193 -0
  29. package/components/toolbar-new/toolbar-md.less +152 -0
  30. package/components/toolbar-new/toolbar-vars.less +77 -0
  31. package/components/toolbar-new/toolbar.js +223 -0
  32. package/components/toolbar-new/toolbar.less +261 -0
  33. package/framework7-bundle-rtl.css +2198 -387
  34. package/framework7-bundle-rtl.min.css +12 -6
  35. package/framework7-bundle.css +2194 -383
  36. package/framework7-bundle.esm.js +11 -4
  37. package/framework7-bundle.js +2368 -467
  38. package/framework7-bundle.js.map +1 -1
  39. package/framework7-bundle.less +6 -3
  40. package/framework7-bundle.min.css +12 -6
  41. package/framework7-bundle.min.js +4 -4
  42. package/framework7-bundle.min.js.map +1 -1
  43. package/framework7-lite-bundle.esm.js +11 -4
  44. package/framework7-lite.esm.js +11 -4
  45. package/framework7-lite.js +8 -1
  46. package/framework7-rtl.css +2191 -380
  47. package/framework7-rtl.min.css +11 -5
  48. package/framework7.css +2189 -378
  49. package/framework7.esm.js +11 -4
  50. package/framework7.js +8 -1
  51. package/framework7.less +6 -3
  52. package/framework7.min.css +11 -5
  53. package/package.json +1 -1
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Framework7 0.0.5
2
+ * Framework7 0.0.7
3
3
  * Full featured mobile HTML framework for building iOS & Android apps
4
4
  * https://framework7.io/
5
5
  *
6
- * Copyright 2014-2025 Vladimir Kharlampidi
6
+ * Copyright 2014-2026 Vladimir Kharlampidi
7
7
  *
8
8
  * Released under the MIT License
9
9
  *
10
- * Released on: December 19, 2025
10
+ * Released on: January 1, 2026
11
11
  */
12
12
 
13
13
  (function (global, factory) {
@@ -14259,7 +14259,7 @@
14259
14259
  }
14260
14260
  };
14261
14261
 
14262
- const Navbar = {
14262
+ const Navbar$1 = {
14263
14263
  size(el) {
14264
14264
  const app = this;
14265
14265
  let $el = $(el);
@@ -14810,12 +14810,12 @@
14810
14810
  };
14811
14811
  }
14812
14812
  };
14813
- var Navbar$1 = {
14813
+ var Navbar$2 = {
14814
14814
  name: 'navbar',
14815
14815
  create() {
14816
14816
  const app = this;
14817
14817
  bindMethods(app, {
14818
- navbar: Navbar
14818
+ navbar: Navbar$1
14819
14819
  });
14820
14820
  },
14821
14821
  params: {
@@ -15069,13 +15069,2326 @@
15069
15069
  scrollHeight = scrollContent.scrollHeight;
15070
15070
  offsetHeight = scrollContent.offsetHeight;
15071
15071
  reachEnd = currentScrollTop + offsetHeight >= scrollHeight;
15072
- toolbarHidden = $toolbarEl.hasClass('toolbar-hidden');
15072
+ toolbarHidden = $toolbarEl.hasClass('toolbar-hidden');
15073
+ if (reachEnd) {
15074
+ if (app.params.toolbar.showOnPageScrollEnd) {
15075
+ action = 'show';
15076
+ }
15077
+ } else if (previousScrollTop > currentScrollTop) {
15078
+ if (app.params.toolbar.showOnPageScrollTop || currentScrollTop <= 44) {
15079
+ action = 'show';
15080
+ } else {
15081
+ action = 'hide';
15082
+ }
15083
+ } else if (currentScrollTop > 44) {
15084
+ action = 'hide';
15085
+ } else {
15086
+ action = 'show';
15087
+ }
15088
+ if (action === 'show' && toolbarHidden) {
15089
+ app.toolbar.show($toolbarEl);
15090
+ toolbarHidden = false;
15091
+ } else if (action === 'hide' && !toolbarHidden) {
15092
+ app.toolbar.hide($toolbarEl);
15093
+ toolbarHidden = true;
15094
+ }
15095
+ previousScrollTop = currentScrollTop;
15096
+ }
15097
+ $pageEl.on('scroll', '.page-content', handleScroll, true);
15098
+ $pageEl[0].f7ScrollToolbarHandler = handleScroll;
15099
+ }
15100
+ };
15101
+ var Toolbar$1 = {
15102
+ name: 'toolbar',
15103
+ create() {
15104
+ const app = this;
15105
+ bindMethods(app, {
15106
+ toolbar: Toolbar
15107
+ });
15108
+ },
15109
+ params: {
15110
+ toolbar: {
15111
+ hideOnPageScroll: false,
15112
+ showOnPageScrollEnd: true,
15113
+ showOnPageScrollTop: true
15114
+ }
15115
+ },
15116
+ on: {
15117
+ pageBeforeRemove(page) {
15118
+ if (page.$el[0].f7ScrollToolbarHandler) {
15119
+ page.$el.off('scroll', '.page-content', page.$el[0].f7ScrollToolbarHandler, true);
15120
+ }
15121
+ },
15122
+ pageBeforeIn(page) {
15123
+ const app = this;
15124
+ let $toolbarEl = page.$el.parents('.view').children('.toolbar');
15125
+ if ($toolbarEl.length === 0) {
15126
+ $toolbarEl = page.$el.parents('.views').children('.tabbar, .tabbar-icons');
15127
+ }
15128
+ if ($toolbarEl.length === 0) {
15129
+ $toolbarEl = page.$el.find('.toolbar');
15130
+ }
15131
+ if ($toolbarEl.length === 0) {
15132
+ return;
15133
+ }
15134
+ if (page.$el.hasClass('no-toolbar')) {
15135
+ app.toolbar.hide($toolbarEl);
15136
+ } else {
15137
+ app.toolbar.show($toolbarEl);
15138
+ }
15139
+ },
15140
+ pageInit(page) {
15141
+ const app = this;
15142
+ page.$el.find('.tabbar, .tabbar-icons').each(tabbarEl => {
15143
+ app.toolbar.init(tabbarEl);
15144
+ });
15145
+ if (app.params.toolbar.hideOnPageScroll || page.$el.find('.hide-toolbar-on-scroll').length || page.$el.hasClass('hide-toolbar-on-scroll') || page.$el.find('.hide-bars-on-scroll').length || page.$el.hasClass('hide-bars-on-scroll')) {
15146
+ if (page.$el.find('.keep-toolbar-on-scroll').length || page.$el.hasClass('keep-toolbar-on-scroll') || page.$el.find('.keep-bars-on-scroll').length || page.$el.hasClass('keep-bars-on-scroll')) {
15147
+ return;
15148
+ }
15149
+ app.toolbar.initToolbarOnScroll(page.el);
15150
+ }
15151
+ },
15152
+ init() {
15153
+ const app = this;
15154
+ app.$el.find('.tabbar, .tabbar-icons').each(tabbarEl => {
15155
+ app.toolbar.init(tabbarEl);
15156
+ });
15157
+ }
15158
+ },
15159
+ vnode: {
15160
+ tabbar: {
15161
+ insert(vnode) {
15162
+ const app = this;
15163
+ app.toolbar.init(vnode.elm);
15164
+ }
15165
+ }
15166
+ }
15167
+ };
15168
+
15169
+ var Subnavbar = {
15170
+ name: 'subnavbar',
15171
+ on: {
15172
+ pageInit(page) {
15173
+ if (page.$navbarEl && page.$navbarEl.length && page.$navbarEl.find('.subnavbar').length) {
15174
+ page.$el.addClass('page-with-subnavbar');
15175
+ }
15176
+ const $innerSubnavbars = page.$el.find('.subnavbar').filter(subnavbarEl => {
15177
+ return $(subnavbarEl).parents('.page')[0] === page.$el[0];
15178
+ });
15179
+ if ($innerSubnavbars.length) {
15180
+ page.$el.addClass('page-with-subnavbar');
15181
+ }
15182
+ }
15183
+ }
15184
+ };
15185
+
15186
+ let TouchRipple$1 = class TouchRipple {
15187
+ constructor(app, $el, x, y) {
15188
+ const ripple = this;
15189
+ if (!$el) return undefined;
15190
+ const {
15191
+ left,
15192
+ top,
15193
+ width,
15194
+ height
15195
+ } = $el[0].getBoundingClientRect();
15196
+ const center = {
15197
+ x: x - left,
15198
+ y: y - top
15199
+ };
15200
+ let diameter = Math.max((height ** 2 + width ** 2) ** 0.5, 48);
15201
+ let isInset = false;
15202
+ const insetElements = app.params.touch.touchRippleInsetElements || '';
15203
+ if (insetElements && $el.is(insetElements)) {
15204
+ isInset = true;
15205
+ }
15206
+ if (isInset) {
15207
+ diameter = Math.max(Math.min(width, height), 48);
15208
+ }
15209
+ if (!isInset && $el.css('overflow') === 'hidden') {
15210
+ const distanceFromCenter = ((center.x - width / 2) ** 2 + (center.y - height / 2) ** 2) ** 0.5;
15211
+ const scale = (diameter / 2 + distanceFromCenter) / (diameter / 2);
15212
+ ripple.rippleTransform = `translate3d(0px, 0px, 0) scale(${scale * 2})`;
15213
+ } else {
15214
+ // prettier-ignore
15215
+ ripple.rippleTransform = `translate3d(${-center.x + width / 2}px, ${-center.y + height / 2}px, 0) scale(1)`;
15216
+ }
15217
+ if (isInset) {
15218
+ $el.addClass('ripple-inset');
15219
+ }
15220
+ ripple.$rippleWaveEl = $(`<div class="ripple-wave${isInset ? ' ripple-wave-inset' : ''}" style="width: ${diameter}px; height: ${diameter}px; margin-top:-${diameter / 2}px; margin-left:-${diameter / 2}px; left:${center.x}px; top:${center.y}px; --f7-ripple-transform: ${ripple.rippleTransform}"></div>`);
15221
+ $el.prepend(ripple.$rippleWaveEl);
15222
+ ripple.$rippleWaveEl.animationEnd(() => {
15223
+ if (!ripple.$rippleWaveEl) return;
15224
+ if (ripple.$rippleWaveEl.hasClass('ripple-wave-out')) return;
15225
+ ripple.$rippleWaveEl.addClass('ripple-wave-in');
15226
+ if (ripple.shouldBeRemoved) {
15227
+ ripple.out();
15228
+ }
15229
+ });
15230
+ return ripple;
15231
+ }
15232
+ destroy() {
15233
+ let ripple = this;
15234
+ if (ripple.$rippleWaveEl) {
15235
+ ripple.$rippleWaveEl.remove();
15236
+ }
15237
+ Object.keys(ripple).forEach(key => {
15238
+ ripple[key] = null;
15239
+ delete ripple[key];
15240
+ });
15241
+ ripple = null;
15242
+ }
15243
+ out() {
15244
+ const ripple = this;
15245
+ const {
15246
+ $rippleWaveEl
15247
+ } = this;
15248
+ clearTimeout(ripple.removeTimeout);
15249
+ $rippleWaveEl.addClass('ripple-wave-out');
15250
+ ripple.removeTimeout = setTimeout(() => {
15251
+ ripple.destroy();
15252
+ }, 300);
15253
+ $rippleWaveEl.animationEnd(() => {
15254
+ clearTimeout(ripple.removeTimeout);
15255
+ ripple.destroy();
15256
+ });
15257
+ }
15258
+ remove() {
15259
+ const ripple = this;
15260
+ if (ripple.shouldBeRemoved) return;
15261
+ ripple.removeTimeout = setTimeout(() => {
15262
+ ripple.destroy();
15263
+ }, 400);
15264
+ ripple.shouldBeRemoved = true;
15265
+ if (ripple.$rippleWaveEl.hasClass('ripple-wave-in')) {
15266
+ ripple.out();
15267
+ }
15268
+ }
15269
+ };
15270
+
15271
+ var TouchRipple = {
15272
+ name: 'touch-ripple',
15273
+ static: {
15274
+ TouchRipple: TouchRipple$1
15275
+ },
15276
+ create() {
15277
+ const app = this;
15278
+ app.touchRipple = {
15279
+ create() {
15280
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
15281
+ args[_key] = arguments[_key];
15282
+ }
15283
+ return new TouchRipple$1(...args);
15284
+ }
15285
+ };
15286
+ }
15287
+ };
15288
+
15289
+ const openedModals = [];
15290
+ const dialogsQueue = [];
15291
+ function clearDialogsQueue() {
15292
+ if (dialogsQueue.length === 0) return;
15293
+ const dialog = dialogsQueue.shift();
15294
+ dialog.open();
15295
+ }
15296
+ let Modal$1 = class Modal extends Framework7Class {
15297
+ constructor(app, params) {
15298
+ super(params, [app]);
15299
+ const modal = this;
15300
+ const defaults = {};
15301
+
15302
+ // Extend defaults with modules params
15303
+ modal.useModulesParams(defaults);
15304
+ modal.params = extend$3(defaults, params);
15305
+ modal.opened = false;
15306
+ let $containerEl = modal.params.containerEl ? $(modal.params.containerEl).eq(0) : app.$el;
15307
+ if (!$containerEl.length) $containerEl = app.$el;
15308
+ modal.$containerEl = $containerEl;
15309
+ modal.containerEl = $containerEl[0];
15310
+
15311
+ // Install Modules
15312
+ modal.useModules();
15313
+ return this;
15314
+ }
15315
+ onOpen() {
15316
+ const modal = this;
15317
+ modal.opened = true;
15318
+ openedModals.push(modal);
15319
+ $('html').addClass(`with-modal-${modal.type.toLowerCase()}`);
15320
+ modal.$el.trigger(`modal:open ${modal.type.toLowerCase()}:open`);
15321
+ modal.emit(`local::open modalOpen ${modal.type}Open`, modal);
15322
+ }
15323
+ onOpened() {
15324
+ const modal = this;
15325
+ modal.$el.trigger(`modal:opened ${modal.type.toLowerCase()}:opened`);
15326
+ modal.emit(`local::opened modalOpened ${modal.type}Opened`, modal);
15327
+ }
15328
+ onClose() {
15329
+ const modal = this;
15330
+ modal.opened = false;
15331
+ if (!modal.type || !modal.$el) return;
15332
+ openedModals.splice(openedModals.indexOf(modal), 1);
15333
+ $('html').removeClass(`with-modal-${modal.type.toLowerCase()}`);
15334
+ modal.$el.trigger(`modal:close ${modal.type.toLowerCase()}:close`);
15335
+ modal.emit(`local::close modalClose ${modal.type}Close`, modal);
15336
+ }
15337
+ onClosed() {
15338
+ const modal = this;
15339
+ if (!modal.type || !modal.$el) return;
15340
+ modal.$el.removeClass('modal-out');
15341
+ modal.$el.hide();
15342
+ if (modal.params.backdrop && (modal.params.backdropUnique || modal.forceBackdropUnique) && modal.$backdropEl) {
15343
+ modal.$backdropEl.remove();
15344
+ }
15345
+ modal.$el.trigger(`modal:closed ${modal.type.toLowerCase()}:closed`);
15346
+ modal.emit(`local::closed modalClosed ${modal.type}Closed`, modal);
15347
+ }
15348
+ open(animateModal, force) {
15349
+ const modal = this;
15350
+ const document = getDocument$1();
15351
+ const app = modal.app;
15352
+ const $el = modal.$el;
15353
+ const $backdropEl = modal.$backdropEl;
15354
+ const type = modal.type;
15355
+ let animate = true;
15356
+ if (typeof animateModal !== 'undefined') animate = animateModal;else if (typeof modal.params.animate !== 'undefined') {
15357
+ animate = modal.params.animate;
15358
+ }
15359
+ if (!$el || $el.hasClass('modal-in')) {
15360
+ if (animateModal === false && $el[0] && type !== 'dialog') {
15361
+ $el[0].style.display = 'block';
15362
+ }
15363
+ if (!force) return modal;
15364
+ }
15365
+ if (type === 'dialog' && app.params.modal.queueDialogs) {
15366
+ let pushToQueue;
15367
+ if ($('.dialog.modal-in').length > 0) {
15368
+ pushToQueue = true;
15369
+ } else if (openedModals.length > 0) {
15370
+ openedModals.forEach(openedModal => {
15371
+ if (openedModal.type === 'dialog') pushToQueue = true;
15372
+ });
15373
+ }
15374
+ if (pushToQueue) {
15375
+ dialogsQueue.push(modal);
15376
+ return modal;
15377
+ }
15378
+ }
15379
+ const $modalParentEl = $el.parent();
15380
+ const wasInDom = $el.parents(document).length > 0;
15381
+ if (!$modalParentEl.is(modal.$containerEl)) {
15382
+ modal.$containerEl.append($el);
15383
+ modal.once(`${type}Closed`, () => {
15384
+ if (wasInDom) {
15385
+ $modalParentEl.append($el);
15386
+ } else {
15387
+ $el.remove();
15388
+ }
15389
+ });
15390
+ }
15391
+ // Show Modal
15392
+ $el.show();
15393
+ if (modal.params.backdrop && (modal.params.backdropUnique || modal.forceBackdropUnique) && modal.$backdropEl) {
15394
+ modal.$backdropEl.insertBefore($el);
15395
+ }
15396
+
15397
+ /* eslint no-underscore-dangle: ["error", { "allow": ["_clientLeft"] }] */
15398
+ modal._clientLeft = $el[0].clientLeft;
15399
+
15400
+ // Modal
15401
+ function transitionEnd() {
15402
+ if ($el.hasClass('modal-out')) {
15403
+ modal.onClosed();
15404
+ } else if ($el.hasClass('modal-in')) {
15405
+ modal.onOpened();
15406
+ }
15407
+ }
15408
+ if (animate) {
15409
+ if ($backdropEl) {
15410
+ $backdropEl.removeClass('not-animated');
15411
+ $backdropEl.addClass('backdrop-in');
15412
+ }
15413
+ $el.animationEnd(() => {
15414
+ transitionEnd();
15415
+ });
15416
+ $el.transitionEnd(() => {
15417
+ transitionEnd();
15418
+ });
15419
+ $el.removeClass('modal-out not-animated').addClass('modal-in');
15420
+ modal.onOpen();
15421
+ } else {
15422
+ if ($backdropEl) {
15423
+ $backdropEl.addClass('backdrop-in not-animated');
15424
+ }
15425
+ $el.removeClass('modal-out').addClass('modal-in not-animated');
15426
+ modal.onOpen();
15427
+ modal.onOpened();
15428
+ }
15429
+ return modal;
15430
+ }
15431
+ close(animateModal) {
15432
+ const modal = this;
15433
+ const $el = modal.$el;
15434
+ const $backdropEl = modal.$backdropEl;
15435
+ let animate = true;
15436
+ if (typeof animateModal !== 'undefined') animate = animateModal;else if (typeof modal.params.animate !== 'undefined') {
15437
+ animate = modal.params.animate;
15438
+ }
15439
+ if (!$el || !$el.hasClass('modal-in')) {
15440
+ if (dialogsQueue.indexOf(modal) >= 0) {
15441
+ dialogsQueue.splice(dialogsQueue.indexOf(modal), 1);
15442
+ }
15443
+ return modal;
15444
+ }
15445
+
15446
+ // backdrop
15447
+ if ($backdropEl) {
15448
+ let needToHideBackdrop = true;
15449
+ if (modal.type === 'popup') {
15450
+ modal.$el.prevAll('.popup.modal-in').add(modal.$el.nextAll('.popup.modal-in')).each(popupEl => {
15451
+ const popupInstance = popupEl.f7Modal;
15452
+ if (!popupInstance) return;
15453
+ if (popupInstance.params.closeByBackdropClick && popupInstance.params.backdrop && popupInstance.backdropEl === modal.backdropEl) {
15454
+ needToHideBackdrop = false;
15455
+ }
15456
+ });
15457
+ }
15458
+ if (needToHideBackdrop) {
15459
+ $backdropEl[animate ? 'removeClass' : 'addClass']('not-animated');
15460
+ $backdropEl.removeClass('backdrop-in');
15461
+ }
15462
+ }
15463
+
15464
+ // Modal
15465
+ $el[animate ? 'removeClass' : 'addClass']('not-animated');
15466
+ function transitionEnd() {
15467
+ if ($el.hasClass('modal-out')) {
15468
+ modal.onClosed();
15469
+ } else if ($el.hasClass('modal-in')) {
15470
+ modal.onOpened();
15471
+ }
15472
+ }
15473
+ if (animate) {
15474
+ $el.animationEnd(() => {
15475
+ transitionEnd();
15476
+ });
15477
+ $el.transitionEnd(() => {
15478
+ transitionEnd();
15479
+ });
15480
+ $el.removeClass('modal-in').addClass('modal-out');
15481
+ // Emit close
15482
+ modal.onClose();
15483
+ } else {
15484
+ $el.addClass('not-animated').removeClass('modal-in').addClass('modal-out');
15485
+ // Emit close
15486
+ modal.onClose();
15487
+ modal.onClosed();
15488
+ }
15489
+ if (modal.type === 'dialog') {
15490
+ clearDialogsQueue();
15491
+ }
15492
+ return modal;
15493
+ }
15494
+ destroy() {
15495
+ const modal = this;
15496
+ if (modal.destroyed) return;
15497
+ modal.emit(`local::beforeDestroy modalBeforeDestroy ${modal.type}BeforeDestroy`, modal);
15498
+ if (modal.$el) {
15499
+ modal.$el.trigger(`modal:beforedestroy ${modal.type.toLowerCase()}:beforedestroy`);
15500
+ if (modal.$el.length && modal.$el[0].f7Modal) {
15501
+ delete modal.$el[0].f7Modal;
15502
+ }
15503
+ }
15504
+ deleteProps$1(modal);
15505
+ modal.destroyed = true;
15506
+ }
15507
+ };
15508
+
15509
+ class CustomModal extends Modal$1 {
15510
+ constructor(app, params) {
15511
+ const extendedParams = extend$3({
15512
+ backdrop: true,
15513
+ closeByBackdropClick: true,
15514
+ on: {}
15515
+ }, params);
15516
+
15517
+ // Extends with open/close Modal methods;
15518
+ super(app, extendedParams);
15519
+ const customModal = this;
15520
+ customModal.params = extendedParams;
15521
+
15522
+ // Find Element
15523
+ let $el;
15524
+ if (!customModal.params.el) {
15525
+ $el = $(customModal.params.content);
15526
+ } else {
15527
+ $el = $(customModal.params.el);
15528
+ }
15529
+ if ($el && $el.length > 0 && $el[0].f7Modal) {
15530
+ return $el[0].f7Modal;
15531
+ }
15532
+ if ($el.length === 0) {
15533
+ return customModal.destroy();
15534
+ }
15535
+ let $backdropEl;
15536
+ if (customModal.params.backdrop) {
15537
+ $backdropEl = app.$el.children('.custom-modal-backdrop');
15538
+ if ($backdropEl.length === 0) {
15539
+ $backdropEl = $('<div class="custom-modal-backdrop"></div>');
15540
+ app.$el.append($backdropEl);
15541
+ }
15542
+ }
15543
+ function handleClick(e) {
15544
+ if (!customModal || customModal.destroyed) return;
15545
+ if ($backdropEl && e.target === $backdropEl[0]) {
15546
+ customModal.close();
15547
+ }
15548
+ }
15549
+ customModal.on('customModalOpened', () => {
15550
+ if (customModal.params.closeByBackdropClick && customModal.params.backdrop) {
15551
+ app.on('click', handleClick);
15552
+ }
15553
+ });
15554
+ customModal.on('customModalClose', () => {
15555
+ if (customModal.params.closeByBackdropClick && customModal.params.backdrop) {
15556
+ app.off('click', handleClick);
15557
+ }
15558
+ });
15559
+ extend$3(customModal, {
15560
+ app,
15561
+ $el,
15562
+ el: $el[0],
15563
+ $backdropEl,
15564
+ backdropEl: $backdropEl && $backdropEl[0],
15565
+ type: 'customModal'
15566
+ });
15567
+ $el[0].f7Modal = customModal;
15568
+ return customModal;
15569
+ }
15570
+ }
15571
+
15572
+ var Modal = {
15573
+ name: 'modal',
15574
+ static: {
15575
+ Modal: Modal$1,
15576
+ CustomModal
15577
+ },
15578
+ create() {
15579
+ const app = this;
15580
+ app.customModal = {
15581
+ create(params) {
15582
+ return new CustomModal(app, params);
15583
+ }
15584
+ };
15585
+ },
15586
+ params: {
15587
+ modal: {
15588
+ queueDialogs: true
15589
+ }
15590
+ }
15591
+ };
15592
+
15593
+ const Navbar = {
15594
+ size(el) {
15595
+ const app = this;
15596
+ const $el = $(el);
15597
+ const $innerEl = $el.children('.navbar-new-inner');
15598
+ if (!$innerEl.length) return;
15599
+ const navbarNewParams = app.params.navbarNew || {};
15600
+ const needCenterTitle = $innerEl.hasClass('navbar-new-inner-centered-title') || navbarNewParams[`${app.theme}CenterTitle`];
15601
+ const needLeftTitle = app.theme === 'ios' && !navbarNewParams[`${app.theme}CenterTitle`];
15602
+ if (!needCenterTitle && !needLeftTitle) return;
15603
+ if ($el.parents('.tab:not(.tab-active)').length > 0 || $el.parents('.popup:not(.modal-in)').length > 0) {
15604
+ return;
15605
+ }
15606
+ if (app.theme !== 'ios' && navbarNewParams[`${app.theme}CenterTitle`]) {
15607
+ $innerEl.addClass('navbar-new-inner-centered-title');
15608
+ }
15609
+ if (app.theme === 'ios' && !navbarNewParams.iosCenterTitle) {
15610
+ $innerEl.addClass('navbar-new-inner-left-title');
15611
+ }
15612
+ const left = app.rtl ? $innerEl.children('.right') : $innerEl.children('.left');
15613
+ const right = app.rtl ? $innerEl.children('.left') : $innerEl.children('.right');
15614
+ const title = $innerEl.children('.title');
15615
+ const noLeft = left.length === 0;
15616
+ const noRight = right.length === 0;
15617
+ const leftWidth = noLeft ? 0 : left.outerWidth(true);
15618
+ const rightWidth = noRight ? 0 : right.outerWidth(true);
15619
+ const titleWidth = title.outerWidth(true);
15620
+ const navbarStyles = $innerEl.styles();
15621
+ const navbarWidth = $innerEl[0].offsetWidth;
15622
+ const navbarInnerWidth = navbarWidth - parseInt(navbarStyles.paddingLeft, 10) - parseInt(navbarStyles.paddingRight, 10);
15623
+ let currLeft;
15624
+ let diff;
15625
+ if (noRight) {
15626
+ currLeft = navbarInnerWidth - titleWidth;
15627
+ }
15628
+ if (noLeft) {
15629
+ currLeft = 0;
15630
+ }
15631
+ if (!noLeft && !noRight) {
15632
+ currLeft = (navbarInnerWidth - rightWidth - titleWidth + leftWidth) / 2;
15633
+ }
15634
+ let requiredLeft = (navbarInnerWidth - titleWidth) / 2;
15635
+ if (navbarInnerWidth - leftWidth - rightWidth > titleWidth) {
15636
+ if (requiredLeft < leftWidth) {
15637
+ requiredLeft = leftWidth;
15638
+ }
15639
+ if (requiredLeft + titleWidth > navbarInnerWidth - rightWidth) {
15640
+ requiredLeft = navbarInnerWidth - rightWidth - titleWidth;
15641
+ }
15642
+ diff = requiredLeft - currLeft;
15643
+ } else {
15644
+ diff = 0;
15645
+ }
15646
+
15647
+ // Center title
15648
+ if (needCenterTitle) {
15649
+ let titleLeft = diff;
15650
+ if (app.rtl && noLeft && noRight && title.length > 0) titleLeft = -titleLeft;
15651
+ title.css({
15652
+ left: `${titleLeft}px`
15653
+ });
15654
+ }
15655
+ },
15656
+ hide(el, animate, hideStatusbar) {
15657
+ if (animate === void 0) {
15658
+ animate = true;
15659
+ }
15660
+ if (hideStatusbar === void 0) {
15661
+ hideStatusbar = false;
15662
+ }
15663
+ const app = this;
15664
+ const $el = $(el);
15665
+ if (!$el.length) return;
15666
+ if ($el.hasClass('navbar-new-hidden')) return;
15667
+ let className = `navbar-new-hidden${animate ? ' navbar-new-transitioning' : ''}`;
15668
+ const currentIsLarge = $el.find('.title-large').length;
15669
+ if (currentIsLarge) {
15670
+ className += ' navbar-new-large-hidden';
15671
+ }
15672
+ if (hideStatusbar) {
15673
+ className += ' navbar-new-hidden-statusbar';
15674
+ }
15675
+ $el.transitionEnd(() => {
15676
+ $el.removeClass('navbar-new-transitioning');
15677
+ });
15678
+ $el.addClass(className);
15679
+ $el.trigger('navbar-new:hide');
15680
+ app.emit('navbarNewHide', $el[0]);
15681
+ },
15682
+ show(el, animate) {
15683
+ if (el === void 0) {
15684
+ el = '.navbar-new-hidden';
15685
+ }
15686
+ if (animate === void 0) {
15687
+ animate = true;
15688
+ }
15689
+ const app = this;
15690
+ const $el = $(el);
15691
+ if (!$el.length) return;
15692
+ if (!$el.hasClass('navbar-new-hidden')) return;
15693
+ if (animate) {
15694
+ $el.addClass('navbar-new-transitioning');
15695
+ $el.transitionEnd(() => {
15696
+ $el.removeClass('navbar-new-transitioning');
15697
+ });
15698
+ }
15699
+ $el.removeClass('navbar-new-hidden navbar-new-large-hidden navbar-new-hidden-statusbar');
15700
+ $el.trigger('navbar-new:show');
15701
+ app.emit('navbarNewShow', $el[0]);
15702
+ },
15703
+ getElByPage(page) {
15704
+ let $pageEl;
15705
+ let $navbarEl;
15706
+ let pageData;
15707
+ if (page.$navbarNewEl || page.$el) {
15708
+ pageData = page;
15709
+ $pageEl = page.$el;
15710
+ } else {
15711
+ $pageEl = $(page);
15712
+ if ($pageEl.length > 0) pageData = $pageEl[0].f7Page;
15713
+ }
15714
+ if (pageData && pageData.$navbarNewEl && pageData.$navbarNewEl.length > 0) {
15715
+ $navbarEl = pageData.$navbarNewEl;
15716
+ } else if ($pageEl) {
15717
+ $navbarEl = $pageEl.children('.navbar-new');
15718
+ }
15719
+ if (!$navbarEl || $navbarEl && $navbarEl.length === 0) return undefined;
15720
+ return $navbarEl[0];
15721
+ },
15722
+ getPageByEl(navbarEl) {
15723
+ const $navbarEl = $(navbarEl);
15724
+ if ($navbarEl.parents('.page').length) {
15725
+ return $navbarEl.parents('.page')[0];
15726
+ }
15727
+ let pageEl;
15728
+ $navbarEl.parents('.view').find('.page').each(el => {
15729
+ if (el && el.f7Page && el.f7Page.navbarEl && $navbarEl[0] === el.f7Page.navbarEl) {
15730
+ pageEl = el;
15731
+ }
15732
+ });
15733
+ return pageEl;
15734
+ },
15735
+ collapseLargeTitle(navbarEl) {
15736
+ const app = this;
15737
+ const $navbarEl = $(navbarEl);
15738
+ const $pageEl = $(app.navbarNew.getPageByEl($navbarEl));
15739
+ $navbarEl.addClass('navbar-new-large-collapsed');
15740
+ $pageEl.eq(0).addClass('page-with-navbar-new-large-collapsed').trigger('page:navbarlargecollapsed');
15741
+ app.emit('pageNavbarLargeCollapsed', $pageEl[0]);
15742
+ $navbarEl.trigger('navbar-new:collapse');
15743
+ app.emit('navbarNewCollapse', $navbarEl[0]);
15744
+ },
15745
+ expandLargeTitle(navbarEl) {
15746
+ const app = this;
15747
+ const $navbarEl = $(navbarEl);
15748
+ const $pageEl = $(app.navbarNew.getPageByEl($navbarEl));
15749
+ $navbarEl.removeClass('navbar-new-large-collapsed');
15750
+ $pageEl.eq(0).removeClass('page-with-navbar-new-large-collapsed').trigger('page:navbarlargeexpanded');
15751
+ app.emit('pageNavbarLargeExpanded', $pageEl[0]);
15752
+ $navbarEl.trigger('navbar-new:expand');
15753
+ app.emit('navbarNewExpand', $navbarEl[0]);
15754
+ },
15755
+ toggleLargeTitle(navbarEl) {
15756
+ const app = this;
15757
+ const $navbarEl = $(navbarEl);
15758
+ if ($navbarEl.hasClass('navbar-new-large-collapsed')) {
15759
+ app.navbarNew.expandLargeTitle($navbarEl);
15760
+ } else {
15761
+ app.navbarNew.collapseLargeTitle($navbarEl);
15762
+ }
15763
+ },
15764
+ initNavbarOnScroll(pageEl, navbarEl, needHide, needCollapse, needTransparent) {
15765
+ const app = this;
15766
+ const support = getSupport$1();
15767
+ const $pageEl = $(pageEl);
15768
+ const $navbarEl = $(navbarEl);
15769
+ const $titleLargeEl = $navbarEl.find('.title-large');
15770
+ const isLarge = $titleLargeEl.length || $navbarEl.hasClass('navbar-new-large');
15771
+ let navbarHideHeight = 44;
15772
+ const snapPageScrollToLargeTitle = app.params.navbarNew.snapPageScrollToLargeTitle;
15773
+ const snapPageScrollToTransparentNavbar = app.params.navbarNew.snapPageScrollToTransparentNavbar;
15774
+ let previousScrollTop;
15775
+ let currentScrollTop;
15776
+ let scrollHeight;
15777
+ let offsetHeight;
15778
+ let reachEnd;
15779
+ let action;
15780
+ let navbarHidden;
15781
+ let navbarCollapsed;
15782
+ let navbarTitleLargeHeight;
15783
+ let navbarOffsetHeight;
15784
+ if (needCollapse || needHide && isLarge) {
15785
+ navbarTitleLargeHeight = $navbarEl.css('--f7-navbar-new-large-title-height');
15786
+ if (navbarTitleLargeHeight && navbarTitleLargeHeight.indexOf('px') >= 0) {
15787
+ navbarTitleLargeHeight = parseInt(navbarTitleLargeHeight, 10);
15788
+ if (Number.isNaN(navbarTitleLargeHeight) && $titleLargeEl.length) {
15789
+ navbarTitleLargeHeight = $titleLargeEl[0].offsetHeight;
15790
+ } else if (Number.isNaN(navbarTitleLargeHeight)) {
15791
+ if (app.theme === 'ios') navbarTitleLargeHeight = 52;else if (app.theme === 'md') navbarTitleLargeHeight = 88;
15792
+ }
15793
+ } else if ($titleLargeEl.length) {
15794
+ navbarTitleLargeHeight = $titleLargeEl[0].offsetHeight;
15795
+ } else {
15796
+ // eslint-disable-next-line
15797
+ if (app.theme === 'ios') navbarTitleLargeHeight = 52;else if (app.theme === 'md') navbarTitleLargeHeight = 88;
15798
+ }
15799
+ }
15800
+ if (needHide && isLarge) {
15801
+ navbarHideHeight += navbarTitleLargeHeight;
15802
+ }
15803
+ let scrollChanged;
15804
+ let scrollContent;
15805
+ let scrollTimeoutId;
15806
+ let touchEndTimeoutId;
15807
+ const touchSnapTimeout = 70;
15808
+ const desktopSnapTimeout = 300;
15809
+ function calcScrollableDistance() {
15810
+ $pageEl.find('.page-content').each(pageContentEl => {
15811
+ pageContentEl.f7ScrollableDistance = pageContentEl.scrollHeight - pageContentEl.offsetHeight;
15812
+ });
15813
+ }
15814
+ function snapLargeNavbar() {
15815
+ const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');
15816
+ if (inSearchbarExpanded) return;
15817
+ if (!scrollContent || currentScrollTop < 0) return;
15818
+ if (currentScrollTop >= navbarTitleLargeHeight / 2 && currentScrollTop < navbarTitleLargeHeight) {
15819
+ $(scrollContent).scrollTop(navbarTitleLargeHeight, 100);
15820
+ } else if (currentScrollTop < navbarTitleLargeHeight) {
15821
+ $(scrollContent).scrollTop(0, 200);
15822
+ }
15823
+ }
15824
+ function snapTransparentNavbar() {
15825
+ const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');
15826
+ if (inSearchbarExpanded) return;
15827
+ if (!scrollContent || currentScrollTop < 0) return;
15828
+ if (currentScrollTop >= navbarOffsetHeight / 2 && currentScrollTop < navbarOffsetHeight) {
15829
+ $(scrollContent).scrollTop(navbarOffsetHeight, 100);
15830
+ } else if (currentScrollTop < navbarOffsetHeight) {
15831
+ $(scrollContent).scrollTop(0, 200);
15832
+ }
15833
+ }
15834
+ function handleNavbarTransparent() {
15835
+ const isHidden = $navbarEl.hasClass('navbar-new-hidden');
15836
+ const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');
15837
+ if (inSearchbarExpanded || isHidden) return;
15838
+ if (!navbarOffsetHeight) {
15839
+ navbarOffsetHeight = navbarEl.offsetHeight;
15840
+ }
15841
+ let opacity = currentScrollTop / navbarOffsetHeight;
15842
+ const notTransparent = $navbarEl.hasClass('navbar-new-transparent-visible');
15843
+ opacity = Math.max(Math.min(opacity, 1), 0);
15844
+ if (notTransparent && opacity === 1 || !notTransparent && opacity === 0) {
15845
+ $navbarEl.find('.navbar-new-bg, .title').css('opacity', '');
15846
+ return;
15847
+ }
15848
+ if (notTransparent && opacity === 0) {
15849
+ $navbarEl.trigger('navbar-new:transparenthide');
15850
+ app.emit('navbarNewTransparentHide', $navbarEl[0]);
15851
+ $navbarEl.removeClass('navbar-new-transparent-visible');
15852
+ $navbarEl.find('.navbar-new-bg, .title').css('opacity', '');
15853
+ return;
15854
+ }
15855
+ if (!notTransparent && opacity === 1) {
15856
+ $navbarEl.trigger('navbar-new:transparentshow');
15857
+ app.emit('navbarNewTransparentShow', $navbarEl[0]);
15858
+ $navbarEl.addClass('navbar-new-transparent-visible');
15859
+ $navbarEl.find('.navbar-new-bg, .title').css('opacity', '');
15860
+ return;
15861
+ }
15862
+ $navbarEl.find('.navbar-new-bg, .title').css('opacity', opacity);
15863
+ if (snapPageScrollToTransparentNavbar) {
15864
+ if (!support.touch) {
15865
+ clearTimeout(scrollTimeoutId);
15866
+ scrollTimeoutId = setTimeout(() => {
15867
+ snapTransparentNavbar();
15868
+ }, desktopSnapTimeout);
15869
+ } else if (touchEndTimeoutId) {
15870
+ clearTimeout(touchEndTimeoutId);
15871
+ touchEndTimeoutId = null;
15872
+ touchEndTimeoutId = setTimeout(() => {
15873
+ snapTransparentNavbar();
15874
+ clearTimeout(touchEndTimeoutId);
15875
+ touchEndTimeoutId = null;
15876
+ }, touchSnapTimeout);
15877
+ }
15878
+ }
15879
+ }
15880
+ let previousCollapseProgress = null;
15881
+ let collapseProgress = null;
15882
+ function handleLargeNavbarCollapse(pageContentEl) {
15883
+ const isHidden = $navbarEl.hasClass('navbar-new-hidden');
15884
+ if (isHidden) return;
15885
+ const isLargeTransparent = $navbarEl.hasClass('navbar-new-large-transparent') || $navbarEl.hasClass('navbar-new-large') && $navbarEl.hasClass('navbar-new-transparent');
15886
+ previousCollapseProgress = collapseProgress;
15887
+ const scrollableDistance = Math.min(navbarTitleLargeHeight, pageContentEl.f7ScrollableDistance || navbarTitleLargeHeight);
15888
+ collapseProgress = Math.min(Math.max(currentScrollTop / scrollableDistance, 0), 1);
15889
+ const previousCollapseWasInMiddle = previousCollapseProgress > 0 && previousCollapseProgress < 1;
15890
+ const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');
15891
+ if (inSearchbarExpanded) return;
15892
+ navbarCollapsed = $navbarEl.hasClass('navbar-new-large-collapsed');
15893
+ const $bgEl = $navbarEl.find('.navbar-new-bg');
15894
+ if (collapseProgress === 0 && navbarCollapsed) {
15895
+ app.navbarNew.expandLargeTitle($navbarEl[0]);
15896
+ } else if (collapseProgress === 1 && !navbarCollapsed) {
15897
+ app.navbarNew.collapseLargeTitle($navbarEl[0]);
15898
+ }
15899
+ if (collapseProgress === 0 && navbarCollapsed || collapseProgress === 0 && previousCollapseWasInMiddle || collapseProgress === 1 && !navbarCollapsed || collapseProgress === 1 && previousCollapseWasInMiddle) {
15900
+ if (app.theme === 'md') {
15901
+ $navbarEl.find('.navbar-new-inner').css('overflow', '');
15902
+ }
15903
+ $navbarEl.find('.title').css('opacity', '');
15904
+ $navbarEl.find('.title-large-text, .subnavbar').css('transform', '');
15905
+ $navbarEl.find('.title-large-text').css('opacity', '');
15906
+ if (app.theme === 'md') {
15907
+ if (isLargeTransparent) {
15908
+ $bgEl.css('opacity', '');
15909
+ }
15910
+ $bgEl.css('transform', '');
15911
+ }
15912
+ } else if (collapseProgress > 0 && collapseProgress < 1) {
15913
+ if (app.theme === 'md') {
15914
+ $navbarEl.find('.navbar-new-inner').css('overflow', 'visible');
15915
+ }
15916
+ $navbarEl.find('.title').css('opacity', -0.5 + collapseProgress * 1.5);
15917
+ $navbarEl.find('.title-large-text, .subnavbar').css('transform', `translate3d(0px, ${-1 * collapseProgress * navbarTitleLargeHeight}px, 0)`);
15918
+ $navbarEl.find('.title-large-text').css('opacity', 1 - collapseProgress * 2);
15919
+ if (app.theme === 'md') {
15920
+ if (isLargeTransparent) {
15921
+ $bgEl.css('opacity', collapseProgress);
15922
+ }
15923
+ $bgEl.css('transform', `translate3d(0px, ${-1 * collapseProgress * navbarTitleLargeHeight}px, 0)`);
15924
+ }
15925
+ }
15926
+ if (snapPageScrollToLargeTitle) {
15927
+ if (!support.touch) {
15928
+ clearTimeout(scrollTimeoutId);
15929
+ scrollTimeoutId = setTimeout(() => {
15930
+ snapLargeNavbar();
15931
+ }, desktopSnapTimeout);
15932
+ } else if (touchEndTimeoutId) {
15933
+ clearTimeout(touchEndTimeoutId);
15934
+ touchEndTimeoutId = null;
15935
+ touchEndTimeoutId = setTimeout(() => {
15936
+ snapLargeNavbar();
15937
+ clearTimeout(touchEndTimeoutId);
15938
+ touchEndTimeoutId = null;
15939
+ }, touchSnapTimeout);
15940
+ }
15941
+ }
15942
+ }
15943
+ function handleTitleHideShow() {
15944
+ if ($pageEl.hasClass('page-with-card-opened')) return;
15945
+ scrollHeight = scrollContent.scrollHeight;
15946
+ offsetHeight = scrollContent.offsetHeight;
15947
+ reachEnd = currentScrollTop + offsetHeight >= scrollHeight;
15948
+ navbarHidden = $navbarEl.hasClass('navbar-new-hidden');
15949
+ if (reachEnd) {
15950
+ if (app.params.navbarNew.showOnPageScrollEnd) {
15951
+ action = 'show';
15952
+ }
15953
+ } else if (previousScrollTop > currentScrollTop) {
15954
+ if (app.params.navbarNew.showOnPageScrollTop || currentScrollTop <= navbarHideHeight) {
15955
+ action = 'show';
15956
+ } else {
15957
+ action = 'hide';
15958
+ }
15959
+ } else if (currentScrollTop > navbarHideHeight) {
15960
+ action = 'hide';
15961
+ } else {
15962
+ action = 'show';
15963
+ }
15964
+ if (action === 'show' && navbarHidden) {
15965
+ app.navbarNew.show($navbarEl, true, true);
15966
+ navbarHidden = false;
15967
+ } else if (action === 'hide' && !navbarHidden) {
15968
+ app.navbarNew.hide($navbarEl, true, false, true);
15969
+ navbarHidden = true;
15970
+ }
15971
+ previousScrollTop = currentScrollTop;
15972
+ }
15973
+ function handleScroll(e) {
15974
+ scrollContent = this;
15975
+ if (e && e.target && e.target !== scrollContent) {
15976
+ return;
15977
+ }
15978
+ currentScrollTop = scrollContent.scrollTop;
15979
+ scrollChanged = currentScrollTop;
15980
+ if (needCollapse) {
15981
+ handleLargeNavbarCollapse(scrollContent);
15982
+ } else if (needTransparent) {
15983
+ handleNavbarTransparent();
15984
+ }
15985
+ if ($pageEl.hasClass('page-previous')) return;
15986
+ if (needHide) {
15987
+ handleTitleHideShow();
15988
+ }
15989
+ }
15990
+ function handeTouchStart() {
15991
+ scrollChanged = false;
15992
+ }
15993
+ function handleTouchEnd() {
15994
+ clearTimeout(touchEndTimeoutId);
15995
+ touchEndTimeoutId = null;
15996
+ touchEndTimeoutId = setTimeout(() => {
15997
+ if (scrollChanged !== false) {
15998
+ if (needTransparent && !needCollapse) {
15999
+ snapTransparentNavbar();
16000
+ } else {
16001
+ snapLargeNavbar();
16002
+ }
16003
+ clearTimeout(touchEndTimeoutId);
16004
+ touchEndTimeoutId = null;
16005
+ }
16006
+ }, touchSnapTimeout);
16007
+ }
16008
+ $pageEl.on('scroll', '.page-content', handleScroll, true);
16009
+ if (support.touch && (needCollapse && snapPageScrollToLargeTitle || needTransparent && snapPageScrollToTransparentNavbar)) {
16010
+ app.on('touchstart:passive', handeTouchStart);
16011
+ app.on('touchend:passive', handleTouchEnd);
16012
+ }
16013
+ calcScrollableDistance();
16014
+ if (needCollapse || needTransparent) {
16015
+ $pageEl.find('.page-content').each(pageContentEl => {
16016
+ if (pageContentEl.scrollTop > 0) handleScroll.call(pageContentEl);
16017
+ });
16018
+ }
16019
+ app.on('resize', calcScrollableDistance);
16020
+ $pageEl[0].f7DetachNavbarNewScrollHandlers = function f7DetachNavbarNewScrollHandlers() {
16021
+ app.off('resize', calcScrollableDistance);
16022
+ delete $pageEl[0].f7DetachNavbarNewScrollHandlers;
16023
+ $pageEl.off('scroll', '.page-content', handleScroll, true);
16024
+ if (support.touch && (needCollapse && snapPageScrollToLargeTitle || needTransparent && snapPageScrollToTransparentNavbar)) {
16025
+ app.off('touchstart:passive', handeTouchStart);
16026
+ app.off('touchend:passive', handleTouchEnd);
16027
+ }
16028
+ };
16029
+ }
16030
+ };
16031
+ var NavbarNew = {
16032
+ name: 'navbar-new',
16033
+ create() {
16034
+ const app = this;
16035
+ bindMethods(app, {
16036
+ navbarNew: Navbar
16037
+ });
16038
+ },
16039
+ params: {
16040
+ navbarNew: {
16041
+ scrollTopOnTitleClick: true,
16042
+ iosCenterTitle: true,
16043
+ mdCenterTitle: false,
16044
+ hideOnPageScroll: false,
16045
+ showOnPageScrollEnd: true,
16046
+ showOnPageScrollTop: true,
16047
+ collapseLargeTitleOnScroll: true,
16048
+ snapPageScrollToLargeTitle: true,
16049
+ snapPageScrollToTransparentNavbar: true
16050
+ }
16051
+ },
16052
+ on: {
16053
+ 'panelBreakpoint panelCollapsedBreakpoint panelResize viewResize resize viewMasterDetailBreakpoint': function onPanelResize() {
16054
+ const app = this;
16055
+ $('.navbar-new').each(navbarEl => {
16056
+ app.navbarNew.size(navbarEl);
16057
+ });
16058
+ },
16059
+ pageBeforeRemove(page) {
16060
+ if (page.$el[0].f7DetachNavbarNewScrollHandlers) {
16061
+ page.$el[0].f7DetachNavbarNewScrollHandlers();
16062
+ }
16063
+ },
16064
+ pageReinit(page) {
16065
+ const app = this;
16066
+ const $navbarEl = $(app.navbarNew.getElByPage(page));
16067
+ if (!$navbarEl || $navbarEl.length === 0) return;
16068
+ app.navbarNew.size($navbarEl);
16069
+ },
16070
+ pageInit(page) {
16071
+ const app = this;
16072
+ const $navbarEl = $(app.navbarNew.getElByPage(page));
16073
+ if (!$navbarEl || $navbarEl.length === 0) return;
16074
+
16075
+ // Size
16076
+ app.navbarNew.size($navbarEl);
16077
+
16078
+ // Need Collapse On Scroll
16079
+ let needCollapseOnScrollHandler;
16080
+ if ($navbarEl.find('.title-large').length > 0) {
16081
+ $navbarEl.addClass('navbar-new-large');
16082
+ }
16083
+ if ($navbarEl.hasClass('navbar-new-large')) {
16084
+ if (app.params.navbarNew.collapseLargeTitleOnScroll) needCollapseOnScrollHandler = true;
16085
+ page.$el.addClass('page-with-navbar-new-large');
16086
+ }
16087
+
16088
+ // Need transparent on scroll
16089
+ let needTransparentOnScroll;
16090
+ if (!needCollapseOnScrollHandler && $navbarEl.hasClass('navbar-new-transparent')) {
16091
+ needTransparentOnScroll = true;
16092
+ }
16093
+
16094
+ // Need Hide On Scroll
16095
+ let needHideOnScrollHandler;
16096
+ if (app.params.navbarNew.hideOnPageScroll || page.$el.find('.hide-navbar-new-on-scroll').length || page.$el.hasClass('hide-navbar-new-on-scroll') || page.$el.find('.hide-bars-on-scroll').length || page.$el.hasClass('hide-bars-on-scroll')) {
16097
+ if (page.$el.find('.keep-navbar-new-on-scroll').length || page.$el.hasClass('keep-navbar-new-on-scroll') || page.$el.find('.keep-bars-on-scroll').length || page.$el.hasClass('keep-bars-on-scroll')) {
16098
+ needHideOnScrollHandler = false;
16099
+ } else {
16100
+ needHideOnScrollHandler = true;
16101
+ }
16102
+ }
16103
+ if (needCollapseOnScrollHandler || needHideOnScrollHandler || needTransparentOnScroll) {
16104
+ app.navbarNew.initNavbarOnScroll(page.el, $navbarEl[0], needHideOnScrollHandler, needCollapseOnScrollHandler, needTransparentOnScroll);
16105
+ }
16106
+ },
16107
+ 'panelOpen panelSwipeOpen modalOpen': function onPanelModalOpen(instance) {
16108
+ const app = this;
16109
+ instance.$el.find('.navbar-new').each(navbarEl => {
16110
+ app.navbarNew.size(navbarEl);
16111
+ });
16112
+ },
16113
+ tabShow(tabEl) {
16114
+ const app = this;
16115
+ $(tabEl).find('.navbar-new').each(navbarEl => {
16116
+ app.navbarNew.size(navbarEl);
16117
+ });
16118
+ }
16119
+ },
16120
+ clicks: {
16121
+ '.navbar-new .title': function onTitleClick($clickedEl, clickedData, e) {
16122
+ const app = this;
16123
+ if (!app.params.navbarNew.scrollTopOnTitleClick) return;
16124
+ if ($(e.target).closest('a, button').length > 0) {
16125
+ return;
16126
+ }
16127
+ let $pageContentEl;
16128
+
16129
+ // Find active page
16130
+ const $navbarEl = $clickedEl.parents('.navbar-new');
16131
+
16132
+ // Static Layout
16133
+ $pageContentEl = $navbarEl.parents('.page-content');
16134
+ if ($pageContentEl.length === 0) {
16135
+ // Fixed Layout
16136
+ if ($navbarEl.parents('.page').length > 0) {
16137
+ $pageContentEl = $navbarEl.parents('.page').find('.page-content');
16138
+ }
16139
+ }
16140
+ if ($pageContentEl && $pageContentEl.length > 0) {
16141
+ // Check for tab
16142
+ if ($pageContentEl.hasClass('tab')) {
16143
+ $pageContentEl = $pageContentEl.parent('.tabs').children('.page-content.tab-active');
16144
+ }
16145
+ if ($pageContentEl.length > 0) $pageContentEl.scrollTop(0, 300);
16146
+ }
16147
+ }
16148
+ },
16149
+ vnode: {
16150
+ 'navbar-new': {
16151
+ postpatch(vnode) {
16152
+ const app = this;
16153
+ app.navbarNew.size(vnode.elm);
16154
+ }
16155
+ }
16156
+ }
16157
+ };
16158
+
16159
+ /* eslint no-control-regex: "off" */
16160
+ const defaultDiacriticsRemovalap$1 = [{
16161
+ base: 'A',
16162
+ letters: '\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F'
16163
+ }, {
16164
+ base: 'AA',
16165
+ letters: '\uA732'
16166
+ }, {
16167
+ base: 'AE',
16168
+ letters: '\u00C6\u01FC\u01E2'
16169
+ }, {
16170
+ base: 'AO',
16171
+ letters: '\uA734'
16172
+ }, {
16173
+ base: 'AU',
16174
+ letters: '\uA736'
16175
+ }, {
16176
+ base: 'AV',
16177
+ letters: '\uA738\uA73A'
16178
+ }, {
16179
+ base: 'AY',
16180
+ letters: '\uA73C'
16181
+ }, {
16182
+ base: 'B',
16183
+ letters: '\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181'
16184
+ }, {
16185
+ base: 'C',
16186
+ letters: '\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E'
16187
+ }, {
16188
+ base: 'D',
16189
+ letters: '\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779'
16190
+ }, {
16191
+ base: 'DZ',
16192
+ letters: '\u01F1\u01C4'
16193
+ }, {
16194
+ base: 'Dz',
16195
+ letters: '\u01F2\u01C5'
16196
+ }, {
16197
+ base: 'E',
16198
+ letters: '\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E'
16199
+ }, {
16200
+ base: 'F',
16201
+ letters: '\u0046\u24BB\uFF26\u1E1E\u0191\uA77B'
16202
+ }, {
16203
+ base: 'G',
16204
+ letters: '\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E'
16205
+ }, {
16206
+ base: 'H',
16207
+ letters: '\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D'
16208
+ }, {
16209
+ base: 'I',
16210
+ letters: '\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197'
16211
+ }, {
16212
+ base: 'J',
16213
+ letters: '\u004A\u24BF\uFF2A\u0134\u0248'
16214
+ }, {
16215
+ base: 'K',
16216
+ letters: '\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2'
16217
+ }, {
16218
+ base: 'L',
16219
+ letters: '\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780'
16220
+ }, {
16221
+ base: 'LJ',
16222
+ letters: '\u01C7'
16223
+ }, {
16224
+ base: 'Lj',
16225
+ letters: '\u01C8'
16226
+ }, {
16227
+ base: 'M',
16228
+ letters: '\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C'
16229
+ }, {
16230
+ base: 'N',
16231
+ letters: '\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4'
16232
+ }, {
16233
+ base: 'NJ',
16234
+ letters: '\u01CA'
16235
+ }, {
16236
+ base: 'Nj',
16237
+ letters: '\u01CB'
16238
+ }, {
16239
+ base: 'O',
16240
+ letters: '\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C'
16241
+ }, {
16242
+ base: 'OI',
16243
+ letters: '\u01A2'
16244
+ }, {
16245
+ base: 'OO',
16246
+ letters: '\uA74E'
16247
+ }, {
16248
+ base: 'OU',
16249
+ letters: '\u0222'
16250
+ }, {
16251
+ base: 'OE',
16252
+ letters: '\u008C\u0152'
16253
+ }, {
16254
+ base: 'oe',
16255
+ letters: '\u009C\u0153'
16256
+ }, {
16257
+ base: 'P',
16258
+ letters: '\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754'
16259
+ }, {
16260
+ base: 'Q',
16261
+ letters: '\u0051\u24C6\uFF31\uA756\uA758\u024A'
16262
+ }, {
16263
+ base: 'R',
16264
+ letters: '\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782'
16265
+ }, {
16266
+ base: 'S',
16267
+ letters: '\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784'
16268
+ }, {
16269
+ base: 'T',
16270
+ letters: '\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786'
16271
+ }, {
16272
+ base: 'TZ',
16273
+ letters: '\uA728'
16274
+ }, {
16275
+ base: 'U',
16276
+ letters: '\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244'
16277
+ }, {
16278
+ base: 'V',
16279
+ letters: '\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245'
16280
+ }, {
16281
+ base: 'VY',
16282
+ letters: '\uA760'
16283
+ }, {
16284
+ base: 'W',
16285
+ letters: '\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72'
16286
+ }, {
16287
+ base: 'X',
16288
+ letters: '\u0058\u24CD\uFF38\u1E8A\u1E8C'
16289
+ }, {
16290
+ base: 'Y',
16291
+ letters: '\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE'
16292
+ }, {
16293
+ base: 'Z',
16294
+ letters: '\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762'
16295
+ }, {
16296
+ base: 'a',
16297
+ letters: '\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250'
16298
+ }, {
16299
+ base: 'aa',
16300
+ letters: '\uA733'
16301
+ }, {
16302
+ base: 'ae',
16303
+ letters: '\u00E6\u01FD\u01E3'
16304
+ }, {
16305
+ base: 'ao',
16306
+ letters: '\uA735'
16307
+ }, {
16308
+ base: 'au',
16309
+ letters: '\uA737'
16310
+ }, {
16311
+ base: 'av',
16312
+ letters: '\uA739\uA73B'
16313
+ }, {
16314
+ base: 'ay',
16315
+ letters: '\uA73D'
16316
+ }, {
16317
+ base: 'b',
16318
+ letters: '\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253'
16319
+ }, {
16320
+ base: 'c',
16321
+ letters: '\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184'
16322
+ }, {
16323
+ base: 'd',
16324
+ letters: '\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A'
16325
+ }, {
16326
+ base: 'dz',
16327
+ letters: '\u01F3\u01C6'
16328
+ }, {
16329
+ base: 'e',
16330
+ letters: '\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD'
16331
+ }, {
16332
+ base: 'f',
16333
+ letters: '\u0066\u24D5\uFF46\u1E1F\u0192\uA77C'
16334
+ }, {
16335
+ base: 'g',
16336
+ letters: '\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F'
16337
+ }, {
16338
+ base: 'h',
16339
+ letters: '\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265'
16340
+ }, {
16341
+ base: 'hv',
16342
+ letters: '\u0195'
16343
+ }, {
16344
+ base: 'i',
16345
+ letters: '\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131'
16346
+ }, {
16347
+ base: 'j',
16348
+ letters: '\u006A\u24D9\uFF4A\u0135\u01F0\u0249'
16349
+ }, {
16350
+ base: 'k',
16351
+ letters: '\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3'
16352
+ }, {
16353
+ base: 'l',
16354
+ letters: '\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747'
16355
+ }, {
16356
+ base: 'lj',
16357
+ letters: '\u01C9'
16358
+ }, {
16359
+ base: 'm',
16360
+ letters: '\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F'
16361
+ }, {
16362
+ base: 'n',
16363
+ letters: '\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5'
16364
+ }, {
16365
+ base: 'nj',
16366
+ letters: '\u01CC'
16367
+ }, {
16368
+ base: 'o',
16369
+ letters: '\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275'
16370
+ }, {
16371
+ base: 'oi',
16372
+ letters: '\u01A3'
16373
+ }, {
16374
+ base: 'ou',
16375
+ letters: '\u0223'
16376
+ }, {
16377
+ base: 'oo',
16378
+ letters: '\uA74F'
16379
+ }, {
16380
+ base: 'p',
16381
+ letters: '\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755'
16382
+ }, {
16383
+ base: 'q',
16384
+ letters: '\u0071\u24E0\uFF51\u024B\uA757\uA759'
16385
+ }, {
16386
+ base: 'r',
16387
+ letters: '\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783'
16388
+ }, {
16389
+ base: 's',
16390
+ letters: '\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B'
16391
+ }, {
16392
+ base: 't',
16393
+ letters: '\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787'
16394
+ }, {
16395
+ base: 'tz',
16396
+ letters: '\uA729'
16397
+ }, {
16398
+ base: 'u',
16399
+ letters: '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289'
16400
+ }, {
16401
+ base: 'v',
16402
+ letters: '\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C'
16403
+ }, {
16404
+ base: 'vy',
16405
+ letters: '\uA761'
16406
+ }, {
16407
+ base: 'w',
16408
+ letters: '\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73'
16409
+ }, {
16410
+ base: 'x',
16411
+ letters: '\u0078\u24E7\uFF58\u1E8B\u1E8D'
16412
+ }, {
16413
+ base: 'y',
16414
+ letters: '\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF'
16415
+ }, {
16416
+ base: 'z',
16417
+ letters: '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763'
16418
+ }];
16419
+ const diacriticsMap$1 = {};
16420
+ for (let i = 0; i < defaultDiacriticsRemovalap$1.length; i += 1) {
16421
+ const letters = defaultDiacriticsRemovalap$1[i].letters;
16422
+ for (let j = 0; j < letters.length; j += 1) {
16423
+ diacriticsMap$1[letters[j]] = defaultDiacriticsRemovalap$1[i].base;
16424
+ }
16425
+ }
16426
+ function removeDiacritics$1(str) {
16427
+ return str.replace(/[^\u0000-\u007E]/g, a => diacriticsMap$1[a] || a);
16428
+ }
16429
+
16430
+ let SearchbarNew$1 = class SearchbarNew extends Framework7Class {
16431
+ constructor(app, params) {
16432
+ if (params === void 0) {
16433
+ params = {};
16434
+ }
16435
+ super(params, [app]);
16436
+ const sb = this;
16437
+ const defaults = {
16438
+ el: undefined,
16439
+ inputEl: undefined,
16440
+ inputEvents: 'change input compositionend',
16441
+ disableButton: true,
16442
+ disableButtonEl: undefined,
16443
+ backdropEl: undefined,
16444
+ searchContainer: undefined,
16445
+ // container to search, HTMLElement or CSS selector
16446
+ searchItem: 'li',
16447
+ // single item selector, CSS selector
16448
+ searchIn: undefined,
16449
+ // where to search in item, CSS selector
16450
+ searchGroup: '.list-group',
16451
+ searchGroupTitle: '.list-group-title',
16452
+ ignore: '.searchbar-new-ignore',
16453
+ foundEl: '.searchbar-new-found',
16454
+ notFoundEl: '.searchbar-new-not-found',
16455
+ hideOnEnableEl: '.searchbar-new-hide-on-enable',
16456
+ hideOnSearchEl: '.searchbar-new-hide-on-search',
16457
+ backdrop: true,
16458
+ removeDiacritics: true,
16459
+ customSearch: false,
16460
+ hideGroupTitles: true,
16461
+ hideGroups: true,
16462
+ disableOnBackdropClick: true,
16463
+ expandable: false,
16464
+ inline: false
16465
+ };
16466
+
16467
+ // Extend defaults with modules params
16468
+ sb.useModulesParams(defaults);
16469
+ sb.params = extend$3(defaults, params);
16470
+ const $el = $(sb.params.el);
16471
+ if ($el.length === 0) return sb;
16472
+ if ($el[0].f7SearchbarNew) return $el[0].f7SearchbarNew;
16473
+ $el[0].f7SearchbarNew = sb;
16474
+ let $pageEl;
16475
+ const $navbarEl = $el.parents('.navbar-new');
16476
+ if ($el.parents('.page').length > 0) {
16477
+ $pageEl = $el.parents('.page');
16478
+ } else if ($navbarEl.length > 0) {
16479
+ $pageEl = $(app.navbarNew.getPageByEl($navbarEl[0]));
16480
+ if (!$pageEl.length) {
16481
+ const $currentPageEl = $el.parents('.view').find('.page-current');
16482
+ if ($currentPageEl[0] && $currentPageEl[0].f7Page && $currentPageEl[0].f7Page.navbarNewEl === $navbarEl[0]) {
16483
+ $pageEl = $currentPageEl;
16484
+ }
16485
+ }
16486
+ }
16487
+ let $foundEl;
16488
+ if (params.foundEl) {
16489
+ $foundEl = $(params.foundEl);
16490
+ } else if (typeof sb.params.foundEl === 'string' && $pageEl) {
16491
+ $foundEl = $pageEl.find(sb.params.foundEl);
16492
+ }
16493
+ let $notFoundEl;
16494
+ if (params.notFoundEl) {
16495
+ $notFoundEl = $(params.notFoundEl);
16496
+ } else if (typeof sb.params.notFoundEl === 'string' && $pageEl) {
16497
+ $notFoundEl = $pageEl.find(sb.params.notFoundEl);
16498
+ }
16499
+ let $hideOnEnableEl;
16500
+ if (params.hideOnEnableEl) {
16501
+ $hideOnEnableEl = $(params.hideOnEnableEl);
16502
+ } else if (typeof sb.params.hideOnEnableEl === 'string' && $pageEl) {
16503
+ $hideOnEnableEl = $pageEl.find(sb.params.hideOnEnableEl);
16504
+ }
16505
+ let $hideOnSearchEl;
16506
+ if (params.hideOnSearchEl) {
16507
+ $hideOnSearchEl = $(params.hideOnSearchEl);
16508
+ } else if (typeof sb.params.hideOnSearchEl === 'string' && $pageEl) {
16509
+ $hideOnSearchEl = $pageEl.find(sb.params.hideOnSearchEl);
16510
+ }
16511
+ const expandable = sb.params.expandable || $el.hasClass('searchbar-new-expandable');
16512
+ const inline = sb.params.inline || $el.hasClass('searchbar-new-inline');
16513
+ if (typeof sb.params.backdrop === 'undefined') {
16514
+ sb.params.backdrop = !inline;
16515
+ }
16516
+ let $backdropEl;
16517
+ if (sb.params.backdrop) {
16518
+ if (sb.params.backdropEl) {
16519
+ $backdropEl = $(sb.params.backdropEl);
16520
+ } else if ($pageEl && $pageEl.length > 0) {
16521
+ $backdropEl = $pageEl.find('.searchbar-new-backdrop');
16522
+ } else {
16523
+ $backdropEl = $el.siblings('.searchbar-new-backdrop');
16524
+ }
16525
+ if ($backdropEl.length === 0) {
16526
+ $backdropEl = $('<div class="searchbar-new-backdrop"></div>');
16527
+ if ($pageEl && $pageEl.length) {
16528
+ if ($el.parents($pageEl).length > 0 && $navbarEl && $el.parents($navbarEl).length === 0) {
16529
+ $backdropEl.insertBefore($el);
16530
+ } else {
16531
+ $backdropEl.insertBefore($pageEl.find('.page-content').eq(0));
16532
+ }
16533
+ } else {
16534
+ $backdropEl.insertBefore($el);
16535
+ }
16536
+ }
16537
+ }
16538
+ let $searchContainer;
16539
+ if (sb.params.searchContainer) {
16540
+ $searchContainer = $(sb.params.searchContainer);
16541
+ }
16542
+ let $inputEl;
16543
+ if (sb.params.inputEl) {
16544
+ $inputEl = $(sb.params.inputEl);
16545
+ } else {
16546
+ $inputEl = $el.find('input[type="search"]').eq(0);
16547
+ }
16548
+ let $disableButtonEl;
16549
+ if (sb.params.disableButton) {
16550
+ if (sb.params.disableButtonEl) {
16551
+ $disableButtonEl = $(sb.params.disableButtonEl);
16552
+ } else {
16553
+ $disableButtonEl = $el.find('.searchbar-new-disable-button');
16554
+ }
16555
+ }
16556
+ extend$3(sb, {
16557
+ app,
16558
+ view: app.views.get($el.parents('.view')),
16559
+ $el,
16560
+ el: $el[0],
16561
+ $backdropEl,
16562
+ backdropEl: $backdropEl && $backdropEl[0],
16563
+ $searchContainer,
16564
+ searchContainer: $searchContainer && $searchContainer[0],
16565
+ $inputEl,
16566
+ inputEl: $inputEl[0],
16567
+ $disableButtonEl,
16568
+ disableButtonEl: $disableButtonEl && $disableButtonEl[0],
16569
+ disableButtonHasMargin: false,
16570
+ $pageEl,
16571
+ pageEl: $pageEl && $pageEl[0],
16572
+ $navbarEl,
16573
+ navbarEl: $navbarEl && $navbarEl[0],
16574
+ $foundEl,
16575
+ foundEl: $foundEl && $foundEl[0],
16576
+ $notFoundEl,
16577
+ notFoundEl: $notFoundEl && $notFoundEl[0],
16578
+ $hideOnEnableEl,
16579
+ hideOnEnableEl: $hideOnEnableEl && $hideOnEnableEl[0],
16580
+ $hideOnSearchEl,
16581
+ hideOnSearchEl: $hideOnSearchEl && $hideOnSearchEl[0],
16582
+ previousQuery: '',
16583
+ query: '',
16584
+ isVirtualList: $searchContainer && $searchContainer.hasClass('virtual-list'),
16585
+ virtualList: undefined,
16586
+ enabled: false,
16587
+ expandable,
16588
+ inline
16589
+ });
16590
+
16591
+ // Events
16592
+ function preventSubmit(e) {
16593
+ e.preventDefault();
16594
+ }
16595
+ function onInputFocus(e) {
16596
+ sb.enable(e);
16597
+ sb.$el.addClass('searchbar-new-focused');
16598
+ }
16599
+ function onInputBlur() {
16600
+ sb.$el.removeClass('searchbar-new-focused');
16601
+ }
16602
+ function onInputChange() {
16603
+ const value = sb.$inputEl.val().trim();
16604
+ if (sb.$searchContainer && sb.$searchContainer.length > 0 && (sb.params.searchIn || sb.isVirtualList || sb.params.searchIn === sb.params.searchItem) || sb.params.customSearch) {
16605
+ sb.search(value, true);
16606
+ }
16607
+ }
16608
+ function onInputClear(e, previousValue) {
16609
+ sb.$el.trigger('searchbar-new:clear', previousValue);
16610
+ sb.emit('local::clear searchbarNewClear', sb, previousValue);
16611
+ }
16612
+ function disableOnClick(e) {
16613
+ sb.disable(e);
16614
+ }
16615
+ function onPageBeforeOut() {
16616
+ if (!sb || sb && !sb.$el) return;
16617
+ if (sb.enabled) {
16618
+ sb.$el.removeClass('searchbar-new-enabled');
16619
+ if (sb.expandable) {
16620
+ sb.$el.parents('.navbar-new').removeClass('with-searchbar-new-expandable-enabled with-searchbar-new-expandable-enabled-no-transition');
16621
+ }
16622
+ }
16623
+ }
16624
+ function onPageBeforeIn() {
16625
+ if (!sb || sb && !sb.$el) return;
16626
+ if (sb.enabled) {
16627
+ sb.$el.addClass('searchbar-new-enabled');
16628
+ if (sb.expandable) {
16629
+ sb.$el.parents('.navbar-new').addClass('with-searchbar-new-expandable-enabled-no-transition');
16630
+ }
16631
+ }
16632
+ }
16633
+ sb.attachEvents = function attachEvents() {
16634
+ $el.on('submit', preventSubmit);
16635
+ if (sb.params.disableButton) {
16636
+ sb.$disableButtonEl.on('click', disableOnClick);
16637
+ }
16638
+ if (sb.params.disableOnBackdropClick && sb.$backdropEl) {
16639
+ sb.$backdropEl.on('click', disableOnClick);
16640
+ }
16641
+ if (sb.expandable && app.theme === 'ios' && sb.view && $navbarEl.length && sb.$pageEl) {
16642
+ sb.$pageEl.on('page:beforeout', onPageBeforeOut);
16643
+ sb.$pageEl.on('page:beforein', onPageBeforeIn);
16644
+ }
16645
+ sb.$inputEl.on('focus', onInputFocus);
16646
+ sb.$inputEl.on('blur', onInputBlur);
16647
+ sb.$inputEl.on(sb.params.inputEvents, onInputChange);
16648
+ sb.$inputEl.on('input:clear', onInputClear);
16649
+ };
16650
+ sb.detachEvents = function detachEvents() {
16651
+ $el.off('submit', preventSubmit);
16652
+ if (sb.params.disableButton) {
16653
+ sb.$disableButtonEl.off('click', disableOnClick);
16654
+ }
16655
+ if (sb.params.disableOnBackdropClick && sb.$backdropEl) {
16656
+ sb.$backdropEl.off('click', disableOnClick);
16657
+ }
16658
+ if (sb.expandable && app.theme === 'ios' && sb.view && $navbarEl.length && sb.$pageEl) {
16659
+ sb.$pageEl.off('page:beforeout', onPageBeforeOut);
16660
+ sb.$pageEl.off('page:beforein', onPageBeforeIn);
16661
+ }
16662
+ sb.$inputEl.off('focus', onInputFocus);
16663
+ sb.$inputEl.off('blur', onInputBlur);
16664
+ sb.$inputEl.off(sb.params.inputEvents, onInputChange);
16665
+ sb.$inputEl.off('input:clear', onInputClear);
16666
+ };
16667
+
16668
+ // Install Modules
16669
+ sb.useModules();
16670
+
16671
+ // Init
16672
+ sb.init();
16673
+ return sb;
16674
+ }
16675
+ clear(e) {
16676
+ const sb = this;
16677
+ if (!sb.query && e && $(e.target).hasClass('searchbar-new-clear')) {
16678
+ sb.disable();
16679
+ return sb;
16680
+ }
16681
+ const previousQuery = sb.value;
16682
+ sb.$inputEl.val('').trigger('change').focus();
16683
+ sb.$el.trigger('searchbar-new:clear', previousQuery);
16684
+ sb.emit('local::clear searchbarNewClear', sb, previousQuery);
16685
+ return sb;
16686
+ }
16687
+ setDisableButtonMargin() {
16688
+ const sb = this;
16689
+ if (sb.expandable) return;
16690
+ const app = sb.app;
16691
+ sb.$disableButtonEl.transition(0).show();
16692
+ sb.$disableButtonEl.css(`margin-${app.rtl ? 'left' : 'right'}`, `${-sb.disableButtonEl.offsetWidth}px`);
16693
+ /* eslint no-underscore-dangle: ["error", { "allow": ["_clientLeft"] }] */
16694
+ sb._clientLeft = sb.$disableButtonEl[0].clientLeft;
16695
+ sb.$disableButtonEl.transition('');
16696
+ sb.disableButtonHasMargin = true;
16697
+ }
16698
+ enable(setFocus) {
16699
+ const sb = this;
16700
+ if (sb.enabled) return sb;
16701
+ const app = sb.app;
16702
+ const document = getDocument$1();
16703
+ const device = getDevice$1();
16704
+ sb.enabled = true;
16705
+ function enable() {
16706
+ if (sb.$backdropEl && (sb.$searchContainer && sb.$searchContainer.length || sb.params.customSearch) && !sb.$el.hasClass('searchbar-new-enabled') && !sb.query) {
16707
+ sb.backdropShow();
16708
+ }
16709
+ sb.$el.addClass('searchbar-new-enabled');
16710
+ if (!sb.$disableButtonEl || sb.$disableButtonEl && sb.$disableButtonEl.length === 0) {
16711
+ sb.$el.addClass('searchbar-new-enabled-no-disable-button');
16712
+ }
16713
+ if (!sb.expandable && sb.$disableButtonEl && sb.$disableButtonEl.length > 0 && app.theme !== 'md') {
16714
+ if (!sb.disableButtonHasMargin) {
16715
+ sb.setDisableButtonMargin();
16716
+ }
16717
+ sb.$disableButtonEl.css(`margin-${app.rtl ? 'left' : 'right'}`, '0px');
16718
+ }
16719
+ if (sb.expandable) {
16720
+ const $navbarEl = sb.$el.parents('.navbar-new');
16721
+ if ($navbarEl.hasClass('navbar-new-large') && sb.$pageEl) {
16722
+ const $pageContentEl = sb.$pageEl.find('.page-content');
16723
+ const $titleLargeEl = $navbarEl.find('.title-large');
16724
+ $pageContentEl.addClass('with-searchbar-new-expandable-enabled');
16725
+ if ($navbarEl.hasClass('navbar-new-large') && $navbarEl.hasClass('navbar-new-large-collapsed') && $titleLargeEl.length && $pageContentEl.length) {
16726
+ $pageContentEl.transition(0);
16727
+ $pageContentEl[0].scrollTop -= $titleLargeEl[0].offsetHeight;
16728
+ setTimeout(() => {
16729
+ $pageContentEl.transition('');
16730
+ }, 200);
16731
+ }
16732
+ }
16733
+ if (app.theme === 'md' && $navbarEl.length) {
16734
+ $navbarEl.addClass('with-searchbar-new-expandable-enabled');
16735
+ } else {
16736
+ $navbarEl.addClass('with-searchbar-new-expandable-enabled');
16737
+ if ($navbarEl.hasClass('navbar-new-large')) {
16738
+ $navbarEl.addClass('navbar-new-large-collapsed');
16739
+ }
16740
+ }
16741
+ }
16742
+ if (sb.$hideOnEnableEl) sb.$hideOnEnableEl.addClass('hidden-by-searchbar-new');
16743
+ sb.$el.trigger('searchbar-new:enable');
16744
+ sb.emit('local::enable searchbarNewEnable', sb);
16745
+ }
16746
+ let needsFocus = false;
16747
+ if (setFocus === true) {
16748
+ if (document.activeElement !== sb.inputEl) {
16749
+ needsFocus = true;
16750
+ }
16751
+ }
16752
+ const isIos = device.ios && app.theme === 'ios';
16753
+ if (isIos) {
16754
+ if (sb.expandable) {
16755
+ if (needsFocus) sb.$inputEl.focus();
16756
+ enable();
16757
+ } else {
16758
+ if (needsFocus) sb.$inputEl.focus();
16759
+ if (setFocus && (setFocus.type === 'focus' || setFocus === true)) {
16760
+ nextTick$1(() => {
16761
+ enable();
16762
+ }, 400);
16763
+ } else {
16764
+ enable();
16765
+ }
16766
+ }
16767
+ } else {
16768
+ if (needsFocus) sb.$inputEl.focus();
16769
+ if (app.theme === 'md' && sb.expandable) {
16770
+ sb.$el.parents('.page, .view, .navbar-new-inner, .navbar-new').scrollLeft(app.rtl ? 100 : 0);
16771
+ }
16772
+ enable();
16773
+ }
16774
+ return sb;
16775
+ }
16776
+ disable() {
16777
+ const sb = this;
16778
+ if (!sb.enabled) return sb;
16779
+ const app = sb.app;
16780
+ sb.$inputEl.val('').trigger('change');
16781
+ sb.$el.removeClass('searchbar-new-enabled searchbar-new-focused searchbar-new-enabled-no-disable-button');
16782
+ if (sb.expandable) {
16783
+ const $navbarEl = sb.$el.parents('.navbar-new');
16784
+ const $pageContentEl = sb.$pageEl && sb.$pageEl.find('.page-content');
16785
+ if ($navbarEl.hasClass('navbar-new-large') && $pageContentEl.length) {
16786
+ const $titleLargeEl = $navbarEl.find('.title-large');
16787
+ sb.$el.transitionEnd(() => {
16788
+ $pageContentEl.removeClass('with-searchbar-new-expandable-closing');
16789
+ });
16790
+ if ($navbarEl.hasClass('navbar-new-large') && $navbarEl.hasClass('navbar-new-large-collapsed') && $titleLargeEl.length) {
16791
+ const scrollTop = $pageContentEl[0].scrollTop;
16792
+ const titleLargeHeight = $titleLargeEl[0].offsetHeight;
16793
+ if (scrollTop > titleLargeHeight) {
16794
+ $pageContentEl.transition(0);
16795
+ $pageContentEl[0].scrollTop = scrollTop + titleLargeHeight;
16796
+ setTimeout(() => {
16797
+ $pageContentEl.transition('');
16798
+ }, 200);
16799
+ }
16800
+ }
16801
+ $pageContentEl.removeClass('with-searchbar-new-expandable-enabled').addClass('with-searchbar-new-expandable-closing');
16802
+ }
16803
+ if (app.theme === 'md' && $navbarEl.length) {
16804
+ $navbarEl.removeClass('with-searchbar-new-expandable-enabled with-searchbar-new-expandable-enabled-no-transition').addClass('with-searchbar-new-expandable-closing');
16805
+ sb.$el.transitionEnd(() => {
16806
+ $navbarEl.removeClass('with-searchbar-new-expandable-closing');
16807
+ });
16808
+ } else {
16809
+ $navbarEl.removeClass('with-searchbar-new-expandable-enabled with-searchbar-new-expandable-enabled-no-transition').addClass('with-searchbar-new-expandable-closing');
16810
+ sb.$el.transitionEnd(() => {
16811
+ $navbarEl.removeClass('with-searchbar-new-expandable-closing');
16812
+ });
16813
+ if (sb.$pageEl) {
16814
+ sb.$pageEl.find('.page-content').trigger('scroll');
16815
+ }
16816
+ }
16817
+ }
16818
+ if (!sb.expandable && sb.$disableButtonEl && sb.$disableButtonEl.length > 0 && app.theme !== 'md') {
16819
+ sb.$disableButtonEl.css(`margin-${app.rtl ? 'left' : 'right'}`, `${-sb.disableButtonEl.offsetWidth}px`);
16820
+ }
16821
+ if (sb.$backdropEl && (sb.$searchContainer && sb.$searchContainer.length || sb.params.customSearch)) {
16822
+ sb.backdropHide();
16823
+ }
16824
+ sb.enabled = false;
16825
+ sb.$inputEl.blur();
16826
+ if (sb.$hideOnEnableEl) sb.$hideOnEnableEl.removeClass('hidden-by-searchbar-new');
16827
+ sb.$el.trigger('searchbar-new:disable');
16828
+ sb.emit('local::disable searchbarNewDisable', sb);
16829
+ return sb;
16830
+ }
16831
+ toggle() {
16832
+ const sb = this;
16833
+ if (sb.enabled) sb.disable();else sb.enable(true);
16834
+ return sb;
16835
+ }
16836
+ backdropShow() {
16837
+ const sb = this;
16838
+ if (sb.$backdropEl) {
16839
+ sb.$backdropEl.addClass('searchbar-new-backdrop-in');
16840
+ }
16841
+ return sb;
16842
+ }
16843
+ backdropHide() {
16844
+ const sb = this;
16845
+ if (sb.$backdropEl) {
16846
+ sb.$backdropEl.removeClass('searchbar-new-backdrop-in');
16847
+ }
16848
+ return sb;
16849
+ }
16850
+ search(query, internal) {
16851
+ const sb = this;
16852
+ sb.previousQuery = sb.query || '';
16853
+ if (query === sb.previousQuery) return sb;
16854
+ if (!internal) {
16855
+ if (!sb.enabled) {
16856
+ sb.enable();
16857
+ }
16858
+ sb.$inputEl.val(query);
16859
+ sb.$inputEl.trigger('input');
16860
+ }
16861
+ sb.query = query;
16862
+ sb.value = query;
16863
+ const {
16864
+ $searchContainer,
16865
+ $el,
16866
+ $foundEl,
16867
+ $notFoundEl,
16868
+ $hideOnSearchEl,
16869
+ isVirtualList
16870
+ } = sb;
16871
+
16872
+ // Hide on search element
16873
+ if (query.length > 0 && $hideOnSearchEl) {
16874
+ $hideOnSearchEl.addClass('hidden-by-searchbar-new');
16875
+ } else if ($hideOnSearchEl) {
16876
+ $hideOnSearchEl.removeClass('hidden-by-searchbar-new');
16877
+ }
16878
+ // Add active/inactive classes on overlay
16879
+ if ($searchContainer && $searchContainer.length && $el.hasClass('searchbar-new-enabled') || sb.params.customSearch && $el.hasClass('searchbar-new-enabled')) {
16880
+ if (query.length === 0) {
16881
+ sb.backdropShow();
16882
+ } else {
16883
+ sb.backdropHide();
16884
+ }
16885
+ }
16886
+ if (sb.params.customSearch) {
16887
+ $el.trigger('searchbar-new:search', {
16888
+ query,
16889
+ previousQuery: sb.previousQuery
16890
+ });
16891
+ sb.emit('local::search searchbarNewSearch', sb, query, sb.previousQuery);
16892
+ return sb;
16893
+ }
16894
+ let foundItems = [];
16895
+ let vlQuery;
16896
+ if (isVirtualList) {
16897
+ sb.virtualList = $searchContainer[0].f7VirtualList;
16898
+ if (query.trim() === '') {
16899
+ sb.virtualList.resetFilter();
16900
+ if ($notFoundEl) $notFoundEl.hide();
16901
+ if ($foundEl) $foundEl.show();
16902
+ $el.trigger('searchbar-new:search', {
16903
+ query,
16904
+ previousQuery: sb.previousQuery
16905
+ });
16906
+ sb.emit('local::search searchbarNewSearch', sb, query, sb.previousQuery);
16907
+ return sb;
16908
+ }
16909
+ vlQuery = sb.params.removeDiacritics ? removeDiacritics$1(query) : query;
16910
+ if (sb.virtualList.params.searchAll) {
16911
+ foundItems = sb.virtualList.params.searchAll(vlQuery, sb.virtualList.items) || [];
16912
+ } else if (sb.virtualList.params.searchByItem) {
16913
+ for (let i = 0; i < sb.virtualList.items.length; i += 1) {
16914
+ if (sb.virtualList.params.searchByItem(vlQuery, sb.virtualList.items[i], i)) {
16915
+ foundItems.push(i);
16916
+ }
16917
+ }
16918
+ }
16919
+ } else {
16920
+ let values;
16921
+ if (sb.params.removeDiacritics) values = removeDiacritics$1(query.trim().toLowerCase()).split(' ');else {
16922
+ values = query.trim().toLowerCase().split(' ');
16923
+ }
16924
+ $searchContainer.find(sb.params.searchItem).removeClass('hidden-by-searchbar-new').each(itemEl => {
16925
+ const $itemEl = $(itemEl);
16926
+ let compareWithText = [];
16927
+ let $searchIn = sb.params.searchIn ? $itemEl.find(sb.params.searchIn) : $itemEl;
16928
+ if (sb.params.searchIn === sb.params.searchItem) {
16929
+ $searchIn = $itemEl;
16930
+ }
16931
+ $searchIn.each(searchInEl => {
16932
+ let itemText = $(searchInEl).text().trim().toLowerCase();
16933
+ if (sb.params.removeDiacritics) itemText = removeDiacritics$1(itemText);
16934
+ compareWithText.push(itemText);
16935
+ });
16936
+ compareWithText = compareWithText.join(' ');
16937
+ let wordsMatch = 0;
16938
+ for (let i = 0; i < values.length; i += 1) {
16939
+ if (compareWithText.indexOf(values[i]) >= 0) wordsMatch += 1;
16940
+ }
16941
+ if (wordsMatch !== values.length && !(sb.params.ignore && $itemEl.is(sb.params.ignore))) {
16942
+ $itemEl.addClass('hidden-by-searchbar-new');
16943
+ } else {
16944
+ foundItems.push($itemEl[0]);
16945
+ }
16946
+ });
16947
+ if (sb.params.hideGroupTitles) {
16948
+ $searchContainer.find(sb.params.searchGroupTitle).each(titleEl => {
16949
+ const $titleEl = $(titleEl);
16950
+ const $nextElements = $titleEl.nextAll(sb.params.searchItem);
16951
+ let hide = true;
16952
+ for (let i = 0; i < $nextElements.length; i += 1) {
16953
+ const $nextEl = $nextElements.eq(i);
16954
+ if ($nextEl.is(sb.params.searchGroupTitle)) break;
16955
+ if (!$nextEl.hasClass('hidden-by-searchbar-new')) {
16956
+ hide = false;
16957
+ }
16958
+ }
16959
+ const ignore = sb.params.ignore && $titleEl.is(sb.params.ignore);
16960
+ if (hide && !ignore) $titleEl.addClass('hidden-by-searchbar-new');else $titleEl.removeClass('hidden-by-searchbar-new');
16961
+ });
16962
+ }
16963
+ if (sb.params.hideGroups) {
16964
+ $searchContainer.find(sb.params.searchGroup).each(groupEl => {
16965
+ const $groupEl = $(groupEl);
16966
+ const ignore = sb.params.ignore && $groupEl.is(sb.params.ignore);
16967
+ // eslint-disable-next-line
16968
+ const notHidden = $groupEl.find(sb.params.searchItem).filter(el => {
16969
+ return !$(el).hasClass('hidden-by-searchbar-new');
16970
+ });
16971
+ if (notHidden.length === 0 && !ignore) {
16972
+ $groupEl.addClass('hidden-by-searchbar-new');
16973
+ } else {
16974
+ $groupEl.removeClass('hidden-by-searchbar-new');
16975
+ }
16976
+ });
16977
+ }
16978
+ }
16979
+ if (foundItems.length === 0) {
16980
+ if ($notFoundEl) $notFoundEl.show();
16981
+ if ($foundEl) $foundEl.hide();
16982
+ } else {
16983
+ if ($notFoundEl) $notFoundEl.hide();
16984
+ if ($foundEl) $foundEl.show();
16985
+ }
16986
+ if (isVirtualList && sb.virtualList) {
16987
+ sb.virtualList.filterItems(foundItems);
16988
+ }
16989
+ $el.trigger('searchbar-new:search', {
16990
+ query,
16991
+ previousQuery: sb.previousQuery,
16992
+ foundItems
16993
+ });
16994
+ sb.emit('local::search searchbarNewSearch', sb, query, sb.previousQuery, foundItems);
16995
+ return sb;
16996
+ }
16997
+ init() {
16998
+ const sb = this;
16999
+ if (sb.expandable && sb.$el) sb.$el.addClass('searchbar-new-expandable');
17000
+ if (sb.inline && sb.$el) sb.$el.addClass('searchbar-new-inline');
17001
+ sb.attachEvents();
17002
+ }
17003
+ destroy() {
17004
+ const sb = this;
17005
+ sb.emit('local::beforeDestroy searchbarNewBeforeDestroy', sb);
17006
+ sb.$el.trigger('searchbar-new:beforedestroy');
17007
+ sb.detachEvents();
17008
+ if (sb.$el[0]) {
17009
+ sb.$el[0].f7SearchbarNew = null;
17010
+ delete sb.$el[0].f7SearchbarNew;
17011
+ }
17012
+ deleteProps$1(sb);
17013
+ }
17014
+ };
17015
+
17016
+ var SearchbarNew = {
17017
+ name: 'searchbar-new',
17018
+ static: {
17019
+ SearchbarNew: SearchbarNew$1
17020
+ },
17021
+ create() {
17022
+ const app = this;
17023
+ app.searchbarNew = ConstructorMethods({
17024
+ defaultSelector: '.searchbar-new',
17025
+ constructor: SearchbarNew$1,
17026
+ app,
17027
+ domProp: 'f7SearchbarNew',
17028
+ addMethods: 'clear enable disable toggle search'.split(' ')
17029
+ });
17030
+ },
17031
+ on: {
17032
+ tabMounted(tabEl) {
17033
+ const app = this;
17034
+ $(tabEl).find('.searchbar-new-init').each(searchbarEl => {
17035
+ const $searchbarEl = $(searchbarEl);
17036
+ app.searchbarNew.create(extend$3($searchbarEl.dataset(), {
17037
+ el: searchbarEl
17038
+ }));
17039
+ });
17040
+ },
17041
+ tabBeforeRemove(tabEl) {
17042
+ $(tabEl).find('.searchbar-new-init').each(searchbarEl => {
17043
+ if (searchbarEl.f7SearchbarNew && searchbarEl.f7SearchbarNew.destroy) {
17044
+ searchbarEl.f7SearchbarNew.destroy();
17045
+ }
17046
+ });
17047
+ },
17048
+ pageInit(page) {
17049
+ const app = this;
17050
+ page.$el.find('.searchbar-new-init').each(searchbarEl => {
17051
+ const $searchbarEl = $(searchbarEl);
17052
+ app.searchbarNew.create(extend$3($searchbarEl.dataset(), {
17053
+ el: searchbarEl
17054
+ }));
17055
+ });
17056
+ if (app.theme === 'ios' && page.view && page.view.router.dynamicNavbar && page.$navbarNewEl && page.$navbarNewEl.length > 0) {
17057
+ page.$navbarNewEl.find('.searchbar-new-init').each(searchbarEl => {
17058
+ const $searchbarEl = $(searchbarEl);
17059
+ app.searchbarNew.create(extend$3($searchbarEl.dataset(), {
17060
+ el: searchbarEl
17061
+ }));
17062
+ });
17063
+ }
17064
+ },
17065
+ pageBeforeRemove(page) {
17066
+ const app = this;
17067
+ page.$el.find('.searchbar-new-init').each(searchbarEl => {
17068
+ if (searchbarEl.f7SearchbarNew && searchbarEl.f7SearchbarNew.destroy) {
17069
+ searchbarEl.f7SearchbarNew.destroy();
17070
+ }
17071
+ });
17072
+ if (app.theme === 'ios' && page.view && page.view.router.dynamicNavbar && page.$navbarNewEl && page.$navbarNewEl.length > 0) {
17073
+ page.$navbarNewEl.find('.searchbar-new-init').each(searchbarEl => {
17074
+ if (searchbarEl.f7SearchbarNew && searchbarEl.f7SearchbarNew.destroy) {
17075
+ searchbarEl.f7SearchbarNew.destroy();
17076
+ }
17077
+ });
17078
+ }
17079
+ }
17080
+ },
17081
+ clicks: {
17082
+ '.searchbar-new-clear': function clear($clickedEl, data) {
17083
+ if (data === void 0) {
17084
+ data = {};
17085
+ }
17086
+ const app = this;
17087
+ const sb = app.searchbarNew.get(data.searchbar);
17088
+ if (sb) sb.clear();
17089
+ },
17090
+ '.searchbar-new-enable': function enable($clickedEl, data) {
17091
+ if (data === void 0) {
17092
+ data = {};
17093
+ }
17094
+ const app = this;
17095
+ const sb = app.searchbarNew.get(data.searchbar);
17096
+ if (sb) sb.enable(true);
17097
+ },
17098
+ '.searchbar-new-disable': function disable($clickedEl, data) {
17099
+ if (data === void 0) {
17100
+ data = {};
17101
+ }
17102
+ const app = this;
17103
+ const sb = app.searchbarNew.get(data.searchbar);
17104
+ if (sb) sb.disable();
17105
+ },
17106
+ '.searchbar-new-toggle': function toggle($clickedEl, data) {
17107
+ if (data === void 0) {
17108
+ data = {};
17109
+ }
17110
+ const app = this;
17111
+ const sb = app.searchbarNew.get(data.searchbar);
17112
+ if (sb) sb.toggle();
17113
+ }
17114
+ },
17115
+ vnode: {
17116
+ 'searchbar-new-init': {
17117
+ insert(vnode) {
17118
+ const app = this;
17119
+ const searchbarEl = vnode.elm;
17120
+ const $searchbarEl = $(searchbarEl);
17121
+ app.searchbarNew.create(extend$3($searchbarEl.dataset(), {
17122
+ el: searchbarEl
17123
+ }));
17124
+ },
17125
+ destroy(vnode) {
17126
+ const searchbarEl = vnode.elm;
17127
+ if (searchbarEl.f7SearchbarNew && searchbarEl.f7SearchbarNew.destroy) {
17128
+ searchbarEl.f7SearchbarNew.destroy();
17129
+ }
17130
+ }
17131
+ }
17132
+ }
17133
+ };
17134
+
17135
+ const startAnimation = data => {
17136
+ data.raf = requestAnimationFrame(() => {
17137
+ if (!data.setTransform) return;
17138
+ const highlightEl = data.highlightEl;
17139
+ if (!highlightEl) return;
17140
+ highlightEl.style.transform = data.setTransform;
17141
+ highlightEl.style.transitionTimingFunction = 'ease-out';
17142
+ data.setTransform = null;
17143
+ });
17144
+ };
17145
+ const stopAnimation = data => {
17146
+ cancelAnimationFrame(data.raf);
17147
+ };
17148
+ const setHighlightOnTouch = (data, e) => {
17149
+ const {
17150
+ rect,
17151
+ linkEls,
17152
+ highlightEl
17153
+ } = data;
17154
+ if (!highlightEl) return;
17155
+ const {
17156
+ clientX
17157
+ } = e;
17158
+ const highlightWidth = rect.width / linkEls.length;
17159
+ const leftOffset = clientX - rect.left - highlightWidth / 2;
17160
+ const minLeft = 0;
17161
+ const maxLeft = rect.width - highlightWidth;
17162
+ const translateX = Math.max(minLeft, Math.min(leftOffset, maxLeft));
17163
+ const linkCenters = [...linkEls].map((el, index) => {
17164
+ return index * highlightWidth + highlightWidth / 2;
17165
+ });
17166
+ const closestLinkCenter = linkCenters.reduce((prev, curr) => {
17167
+ const highlightCenter = translateX + highlightWidth / 2;
17168
+ return Math.abs(curr - highlightCenter) < Math.abs(prev - highlightCenter) ? curr : prev;
17169
+ }, linkCenters[0]);
17170
+ const closestLinkIndex = linkCenters.indexOf(closestLinkCenter);
17171
+ data.newActiveIndex = closestLinkIndex;
17172
+ highlightEl.classList.add('tab-link-highlight-pressed');
17173
+ data.setTransform = `translateX(${translateX}px)`;
17174
+ startAnimation(data);
17175
+ };
17176
+ const unsetHighlightOnTouch = data => {
17177
+ cancelAnimationFrame(data.raf);
17178
+ data.setTransform = null;
17179
+ const {
17180
+ highlightEl
17181
+ } = data;
17182
+ if (!highlightEl) return;
17183
+ highlightEl.classList.remove('tab-link-highlight-pressed');
17184
+ const {
17185
+ activeIndex,
17186
+ newActiveIndex,
17187
+ linkEls
17188
+ } = data;
17189
+ if (activeIndex !== newActiveIndex) {
17190
+ linkEls[newActiveIndex].click();
17191
+ }
17192
+ highlightEl.style.transform = `translateX(${newActiveIndex * 100}%)`;
17193
+ highlightEl.style.transitionTimingFunction = '';
17194
+ highlightEl.style.transform = `translateX(${newActiveIndex * 100}%)`;
17195
+ };
17196
+ const initTabbarNewHighlight = el => {
17197
+ const document = getDocument$1();
17198
+ if (!el) return;
17199
+ if (el.classList.contains('tabbar-new-scrollable')) {
17200
+ return;
17201
+ }
17202
+ const highlightEl = el.querySelector('.tab-link-highlight');
17203
+ const toolbarPaneEl = el.querySelector('.toolbar-new-pane');
17204
+ if (!highlightEl || !toolbarPaneEl) return;
17205
+ const data = {
17206
+ el,
17207
+ highlightEl,
17208
+ touched: false,
17209
+ moved: false,
17210
+ rect: null,
17211
+ setTransform: null,
17212
+ raf: null
17213
+ };
17214
+ el.f7ToolbarNewHighlightData = data;
17215
+ el.f7ToolbarNewOnPointer = e => {
17216
+ if (e.type === 'touchstart') {
17217
+ e.preventDefault();
17218
+ }
17219
+ if (e.pointerType !== 'touch') return;
17220
+ if (!el) return;
17221
+ if (e.type === 'pointerdown') {
17222
+ data.linkEls = el.querySelectorAll('.tab-link');
17223
+ data.rect = toolbarPaneEl.getBoundingClientRect();
17224
+ data.touched = true;
17225
+ setHighlightOnTouch(data, e);
17226
+ startAnimation(data);
17227
+ }
17228
+ if (e.type === 'pointermove') {
17229
+ if (!data.touched) return;
17230
+ data.moved = true;
17231
+ setHighlightOnTouch(data, e);
17232
+ }
17233
+ if (e.type === 'pointerup') {
17234
+ if (!data.touched) return;
17235
+ data.touched = false;
17236
+ data.moved = false;
17237
+ unsetHighlightOnTouch(data);
17238
+ stopAnimation(data);
17239
+ }
17240
+ };
17241
+ el.addEventListener('touchstart', el.f7ToolbarNewOnPointer, {
17242
+ passive: false
17243
+ });
17244
+ el.addEventListener('pointerdown', el.f7ToolbarNewOnPointer, {
17245
+ passive: false
17246
+ });
17247
+ document.addEventListener('pointermove', el.f7ToolbarNewOnPointer, {
17248
+ passive: false
17249
+ });
17250
+ document.addEventListener('pointerup', el.f7ToolbarNewOnPointer, {
17251
+ passive: false
17252
+ });
17253
+ document.addEventListener('pointercancel', el.f7ToolbarNewOnPointer, {
17254
+ passive: false
17255
+ });
17256
+ };
17257
+ const destroyTabbarNewHighlight = el => {
17258
+ if (!el || !el.f7ToolbarNewOnPointer) return;
17259
+ const document = getDocument$1();
17260
+ el.removeEventListener('touchstart', el.f7ToolbarNewOnPointer);
17261
+ el.removeEventListener('pointerdown', el.f7ToolbarNewOnPointer);
17262
+ document.removeEventListener('pointermove', el.f7ToolbarNewOnPointer);
17263
+ document.removeEventListener('pointerup', el.f7ToolbarNewOnPointer);
17264
+ document.removeEventListener('pointercancel', el.f7ToolbarNewOnPointer);
17265
+ el.f7ToolbarNewOnPointer = null;
17266
+ el.f7ToolbarNewHighlightData = null;
17267
+ };
17268
+
17269
+ const ToolbarNew = {
17270
+ setHighlight(tabbarEl) {
17271
+ const app = this;
17272
+ const $tabbarEl = $(tabbarEl);
17273
+ if ($tabbarEl.length === 0 || !($tabbarEl.hasClass('tabbar-new') || $tabbarEl.hasClass('tabbar-new-icons'))) {
17274
+ return;
17275
+ }
17276
+ let $highlightEl = $tabbarEl.find('.tab-link-highlight');
17277
+ const tabLinksCount = $tabbarEl.find('.tab-link').length;
17278
+ if (tabLinksCount === 0) {
17279
+ $highlightEl.remove();
17280
+ return;
17281
+ }
17282
+ if ($highlightEl.length === 0) {
17283
+ if (app.theme === 'ios') {
17284
+ $tabbarEl.children('.toolbar-new-inner').children('.toolbar-new-pane').append('<span class="tab-link-highlight"></span>');
17285
+ } else {
17286
+ $tabbarEl.children('.toolbar-new-inner').append('<span class="tab-link-highlight"></span>');
17287
+ }
17288
+ $highlightEl = $tabbarEl.find('.tab-link-highlight');
17289
+ } else if ($highlightEl.next('a,button,.tab-link').length) {
17290
+ if (app.theme === 'ios') {
17291
+ $tabbarEl.children('.toolbar-new-inner').children('.toolbar-new-pane').append($highlightEl);
17292
+ } else {
17293
+ $tabbarEl.children('.toolbar-new-inner').append($highlightEl);
17294
+ }
17295
+ }
17296
+ const $activeLink = $tabbarEl.find('.tab-link-active');
17297
+ let highlightWidth;
17298
+ let highlightTranslate;
17299
+ if ($tabbarEl.hasClass('tabbar-new-scrollable') && $activeLink && $activeLink[0]) {
17300
+ highlightWidth = `${$activeLink[0].offsetWidth}px`;
17301
+ highlightTranslate = `${$activeLink[0].offsetLeft}px`;
17302
+ } else {
17303
+ const activeIndex = $activeLink.index();
17304
+ highlightWidth = `${100 / tabLinksCount}%`;
17305
+ highlightTranslate = `${(app.rtl ? -activeIndex : activeIndex) * 100}%`;
17306
+ }
17307
+ nextFrame$1(() => {
17308
+ $highlightEl.css('width', highlightWidth).transform(`translate3d(${highlightTranslate},0,0)`);
17309
+ });
17310
+ },
17311
+ init(tabbarEl) {
17312
+ const app = this;
17313
+ app.toolbarNew.setHighlight(tabbarEl);
17314
+ if (app.theme !== 'ios') return;
17315
+ initTabbarNewHighlight(tabbarEl);
17316
+ },
17317
+ destroy(tabbarEl) {
17318
+ const app = this;
17319
+ if (app.theme !== 'ios') return;
17320
+ destroyTabbarNewHighlight(tabbarEl);
17321
+ },
17322
+ hide(el, animate) {
17323
+ if (animate === void 0) {
17324
+ animate = true;
17325
+ }
17326
+ const app = this;
17327
+ const $el = $(el);
17328
+ if ($el.hasClass('toolbar-new-hidden')) return;
17329
+ const className = `toolbar-new-hidden${animate ? ' toolbar-new-transitioning' : ''}`;
17330
+ $el.transitionEnd(() => {
17331
+ $el.removeClass('toolbar-new-transitioning');
17332
+ });
17333
+ $el.addClass(className);
17334
+ $el.trigger('toolbar-new:hide');
17335
+ app.emit('toolbarNewHide', $el[0]);
17336
+ },
17337
+ show(el, animate) {
17338
+ if (animate === void 0) {
17339
+ animate = true;
17340
+ }
17341
+ const app = this;
17342
+ const $el = $(el);
17343
+ if (!$el.hasClass('toolbar-new-hidden')) return;
17344
+ if (animate) {
17345
+ $el.addClass('toolbar-new-transitioning');
17346
+ $el.transitionEnd(() => {
17347
+ $el.removeClass('toolbar-new-transitioning');
17348
+ });
17349
+ }
17350
+ $el.removeClass('toolbar-new-hidden');
17351
+ $el.trigger('toolbar-new:show');
17352
+ app.emit('toolbarNewShow', $el[0]);
17353
+ },
17354
+ initToolbarOnScroll(pageEl) {
17355
+ const app = this;
17356
+ const $pageEl = $(pageEl);
17357
+ let $toolbarEl = $pageEl.parents('.view').children('.toolbar-new');
17358
+ if ($toolbarEl.length === 0) {
17359
+ $toolbarEl = $pageEl.find('.toolbar-new');
17360
+ }
17361
+ if ($toolbarEl.length === 0) {
17362
+ $toolbarEl = $pageEl.parents('.views').children('.tabbar-new, .tabbar-new-icons');
17363
+ }
17364
+ if ($toolbarEl.length === 0) {
17365
+ return;
17366
+ }
17367
+ let previousScrollTop;
17368
+ let currentScrollTop;
17369
+ let scrollHeight;
17370
+ let offsetHeight;
17371
+ let reachEnd;
17372
+ let action;
17373
+ let toolbarHidden;
17374
+ function handleScroll(e) {
17375
+ if ($pageEl.hasClass('page-with-card-opened')) return;
17376
+ if ($pageEl.hasClass('page-previous')) return;
17377
+ const scrollContent = this;
17378
+ if (e && e.target && e.target !== scrollContent) {
17379
+ return;
17380
+ }
17381
+ currentScrollTop = scrollContent.scrollTop;
17382
+ scrollHeight = scrollContent.scrollHeight;
17383
+ offsetHeight = scrollContent.offsetHeight;
17384
+ reachEnd = currentScrollTop + offsetHeight >= scrollHeight;
17385
+ toolbarHidden = $toolbarEl.hasClass('toolbar-new-hidden');
15073
17386
  if (reachEnd) {
15074
- if (app.params.toolbar.showOnPageScrollEnd) {
17387
+ if (app.params.toolbarNew.showOnPageScrollEnd) {
15075
17388
  action = 'show';
15076
17389
  }
15077
17390
  } else if (previousScrollTop > currentScrollTop) {
15078
- if (app.params.toolbar.showOnPageScrollTop || currentScrollTop <= 44) {
17391
+ if (app.params.toolbarNew.showOnPageScrollTop || currentScrollTop <= 44) {
15079
17392
  action = 'show';
15080
17393
  } else {
15081
17394
  action = 'hide';
@@ -15086,28 +17399,28 @@
15086
17399
  action = 'show';
15087
17400
  }
15088
17401
  if (action === 'show' && toolbarHidden) {
15089
- app.toolbar.show($toolbarEl);
17402
+ app.toolbarNew.show($toolbarEl);
15090
17403
  toolbarHidden = false;
15091
17404
  } else if (action === 'hide' && !toolbarHidden) {
15092
- app.toolbar.hide($toolbarEl);
17405
+ app.toolbarNew.hide($toolbarEl);
15093
17406
  toolbarHidden = true;
15094
17407
  }
15095
17408
  previousScrollTop = currentScrollTop;
15096
17409
  }
15097
17410
  $pageEl.on('scroll', '.page-content', handleScroll, true);
15098
- $pageEl[0].f7ScrollToolbarHandler = handleScroll;
17411
+ $pageEl[0].f7ScrollToolbarNewHandler = handleScroll;
15099
17412
  }
15100
17413
  };
15101
- var Toolbar$1 = {
15102
- name: 'toolbar',
17414
+ var ToolbarNew$1 = {
17415
+ name: 'toolbar-new',
15103
17416
  create() {
15104
17417
  const app = this;
15105
17418
  bindMethods(app, {
15106
- toolbar: Toolbar
17419
+ toolbarNew: ToolbarNew
15107
17420
  });
15108
17421
  },
15109
17422
  params: {
15110
- toolbar: {
17423
+ toolbarNew: {
15111
17424
  hideOnPageScroll: false,
15112
17425
  showOnPageScrollEnd: true,
15113
17426
  showOnPageScrollTop: true
@@ -15115,477 +17428,61 @@
15115
17428
  },
15116
17429
  on: {
15117
17430
  pageBeforeRemove(page) {
15118
- if (page.$el[0].f7ScrollToolbarHandler) {
15119
- page.$el.off('scroll', '.page-content', page.$el[0].f7ScrollToolbarHandler, true);
17431
+ const app = this;
17432
+ if (page.$el[0].f7ScrollToolbarNewHandler) {
17433
+ page.$el.off('scroll', '.page-content', page.$el[0].f7ScrollToolbarNewHandler, true);
15120
17434
  }
17435
+ page.$el.find('.tabbar-new, .tabbar-new-icons').each(tabbarEl => {
17436
+ app.toolbarNew.destroy(tabbarEl);
17437
+ });
15121
17438
  },
15122
17439
  pageBeforeIn(page) {
15123
17440
  const app = this;
15124
- let $toolbarEl = page.$el.parents('.view').children('.toolbar');
17441
+ let $toolbarEl = page.$el.parents('.view').children('.toolbar-new');
15125
17442
  if ($toolbarEl.length === 0) {
15126
- $toolbarEl = page.$el.parents('.views').children('.tabbar, .tabbar-icons');
17443
+ $toolbarEl = page.$el.parents('.views').children('.tabbar-new, .tabbar-new-icons');
15127
17444
  }
15128
17445
  if ($toolbarEl.length === 0) {
15129
- $toolbarEl = page.$el.find('.toolbar');
17446
+ $toolbarEl = page.$el.find('.toolbar-new');
15130
17447
  }
15131
17448
  if ($toolbarEl.length === 0) {
15132
17449
  return;
15133
17450
  }
15134
- if (page.$el.hasClass('no-toolbar')) {
15135
- app.toolbar.hide($toolbarEl);
17451
+ if (page.$el.hasClass('no-toolbar-new')) {
17452
+ app.toolbarNew.hide($toolbarEl);
15136
17453
  } else {
15137
- app.toolbar.show($toolbarEl);
17454
+ app.toolbarNew.show($toolbarEl);
15138
17455
  }
15139
17456
  },
15140
17457
  pageInit(page) {
15141
17458
  const app = this;
15142
- page.$el.find('.tabbar, .tabbar-icons').each(tabbarEl => {
15143
- app.toolbar.init(tabbarEl);
17459
+ page.$el.find('.tabbar-new, .tabbar-new-icons').each(tabbarEl => {
17460
+ app.toolbarNew.init(tabbarEl);
15144
17461
  });
15145
- if (app.params.toolbar.hideOnPageScroll || page.$el.find('.hide-toolbar-on-scroll').length || page.$el.hasClass('hide-toolbar-on-scroll') || page.$el.find('.hide-bars-on-scroll').length || page.$el.hasClass('hide-bars-on-scroll')) {
15146
- if (page.$el.find('.keep-toolbar-on-scroll').length || page.$el.hasClass('keep-toolbar-on-scroll') || page.$el.find('.keep-bars-on-scroll').length || page.$el.hasClass('keep-bars-on-scroll')) {
17462
+ if (app.params.toolbarNew.hideOnPageScroll || page.$el.find('.hide-toolbar-new-on-scroll').length || page.$el.hasClass('hide-toolbar-new-on-scroll') || page.$el.find('.hide-bars-on-scroll').length || page.$el.hasClass('hide-bars-on-scroll')) {
17463
+ if (page.$el.find('.keep-toolbar-new-on-scroll').length || page.$el.hasClass('keep-toolbar-new-on-scroll') || page.$el.find('.keep-bars-on-scroll').length || page.$el.hasClass('keep-bars-on-scroll')) {
15147
17464
  return;
15148
17465
  }
15149
- app.toolbar.initToolbarOnScroll(page.el);
17466
+ app.toolbarNew.initToolbarOnScroll(page.el);
15150
17467
  }
15151
17468
  },
15152
17469
  init() {
15153
17470
  const app = this;
15154
- app.$el.find('.tabbar, .tabbar-icons').each(tabbarEl => {
15155
- app.toolbar.init(tabbarEl);
17471
+ app.$el.find('.tabbar-new, .tabbar-new-icons').each(tabbarEl => {
17472
+ app.toolbarNew.init(tabbarEl);
15156
17473
  });
15157
17474
  }
15158
17475
  },
15159
17476
  vnode: {
15160
- tabbar: {
17477
+ tabbarNew: {
15161
17478
  insert(vnode) {
15162
17479
  const app = this;
15163
- app.toolbar.init(vnode.elm);
15164
- }
15165
- }
15166
- }
15167
- };
15168
-
15169
- var Subnavbar = {
15170
- name: 'subnavbar',
15171
- on: {
15172
- pageInit(page) {
15173
- if (page.$navbarEl && page.$navbarEl.length && page.$navbarEl.find('.subnavbar').length) {
15174
- page.$el.addClass('page-with-subnavbar');
15175
- }
15176
- const $innerSubnavbars = page.$el.find('.subnavbar').filter(subnavbarEl => {
15177
- return $(subnavbarEl).parents('.page')[0] === page.$el[0];
15178
- });
15179
- if ($innerSubnavbars.length) {
15180
- page.$el.addClass('page-with-subnavbar');
15181
- }
15182
- }
15183
- }
15184
- };
15185
-
15186
- let TouchRipple$1 = class TouchRipple {
15187
- constructor(app, $el, x, y) {
15188
- const ripple = this;
15189
- if (!$el) return undefined;
15190
- const {
15191
- left,
15192
- top,
15193
- width,
15194
- height
15195
- } = $el[0].getBoundingClientRect();
15196
- const center = {
15197
- x: x - left,
15198
- y: y - top
15199
- };
15200
- let diameter = Math.max((height ** 2 + width ** 2) ** 0.5, 48);
15201
- let isInset = false;
15202
- const insetElements = app.params.touch.touchRippleInsetElements || '';
15203
- if (insetElements && $el.is(insetElements)) {
15204
- isInset = true;
15205
- }
15206
- if (isInset) {
15207
- diameter = Math.max(Math.min(width, height), 48);
15208
- }
15209
- if (!isInset && $el.css('overflow') === 'hidden') {
15210
- const distanceFromCenter = ((center.x - width / 2) ** 2 + (center.y - height / 2) ** 2) ** 0.5;
15211
- const scale = (diameter / 2 + distanceFromCenter) / (diameter / 2);
15212
- ripple.rippleTransform = `translate3d(0px, 0px, 0) scale(${scale * 2})`;
15213
- } else {
15214
- // prettier-ignore
15215
- ripple.rippleTransform = `translate3d(${-center.x + width / 2}px, ${-center.y + height / 2}px, 0) scale(1)`;
15216
- }
15217
- if (isInset) {
15218
- $el.addClass('ripple-inset');
15219
- }
15220
- ripple.$rippleWaveEl = $(`<div class="ripple-wave${isInset ? ' ripple-wave-inset' : ''}" style="width: ${diameter}px; height: ${diameter}px; margin-top:-${diameter / 2}px; margin-left:-${diameter / 2}px; left:${center.x}px; top:${center.y}px; --f7-ripple-transform: ${ripple.rippleTransform}"></div>`);
15221
- $el.prepend(ripple.$rippleWaveEl);
15222
- ripple.$rippleWaveEl.animationEnd(() => {
15223
- if (!ripple.$rippleWaveEl) return;
15224
- if (ripple.$rippleWaveEl.hasClass('ripple-wave-out')) return;
15225
- ripple.$rippleWaveEl.addClass('ripple-wave-in');
15226
- if (ripple.shouldBeRemoved) {
15227
- ripple.out();
15228
- }
15229
- });
15230
- return ripple;
15231
- }
15232
- destroy() {
15233
- let ripple = this;
15234
- if (ripple.$rippleWaveEl) {
15235
- ripple.$rippleWaveEl.remove();
15236
- }
15237
- Object.keys(ripple).forEach(key => {
15238
- ripple[key] = null;
15239
- delete ripple[key];
15240
- });
15241
- ripple = null;
15242
- }
15243
- out() {
15244
- const ripple = this;
15245
- const {
15246
- $rippleWaveEl
15247
- } = this;
15248
- clearTimeout(ripple.removeTimeout);
15249
- $rippleWaveEl.addClass('ripple-wave-out');
15250
- ripple.removeTimeout = setTimeout(() => {
15251
- ripple.destroy();
15252
- }, 300);
15253
- $rippleWaveEl.animationEnd(() => {
15254
- clearTimeout(ripple.removeTimeout);
15255
- ripple.destroy();
15256
- });
15257
- }
15258
- remove() {
15259
- const ripple = this;
15260
- if (ripple.shouldBeRemoved) return;
15261
- ripple.removeTimeout = setTimeout(() => {
15262
- ripple.destroy();
15263
- }, 400);
15264
- ripple.shouldBeRemoved = true;
15265
- if (ripple.$rippleWaveEl.hasClass('ripple-wave-in')) {
15266
- ripple.out();
15267
- }
15268
- }
15269
- };
15270
-
15271
- var TouchRipple = {
15272
- name: 'touch-ripple',
15273
- static: {
15274
- TouchRipple: TouchRipple$1
15275
- },
15276
- create() {
15277
- const app = this;
15278
- app.touchRipple = {
15279
- create() {
15280
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
15281
- args[_key] = arguments[_key];
15282
- }
15283
- return new TouchRipple$1(...args);
15284
- }
15285
- };
15286
- }
15287
- };
15288
-
15289
- const openedModals = [];
15290
- const dialogsQueue = [];
15291
- function clearDialogsQueue() {
15292
- if (dialogsQueue.length === 0) return;
15293
- const dialog = dialogsQueue.shift();
15294
- dialog.open();
15295
- }
15296
- let Modal$1 = class Modal extends Framework7Class {
15297
- constructor(app, params) {
15298
- super(params, [app]);
15299
- const modal = this;
15300
- const defaults = {};
15301
-
15302
- // Extend defaults with modules params
15303
- modal.useModulesParams(defaults);
15304
- modal.params = extend$3(defaults, params);
15305
- modal.opened = false;
15306
- let $containerEl = modal.params.containerEl ? $(modal.params.containerEl).eq(0) : app.$el;
15307
- if (!$containerEl.length) $containerEl = app.$el;
15308
- modal.$containerEl = $containerEl;
15309
- modal.containerEl = $containerEl[0];
15310
-
15311
- // Install Modules
15312
- modal.useModules();
15313
- return this;
15314
- }
15315
- onOpen() {
15316
- const modal = this;
15317
- modal.opened = true;
15318
- openedModals.push(modal);
15319
- $('html').addClass(`with-modal-${modal.type.toLowerCase()}`);
15320
- modal.$el.trigger(`modal:open ${modal.type.toLowerCase()}:open`);
15321
- modal.emit(`local::open modalOpen ${modal.type}Open`, modal);
15322
- }
15323
- onOpened() {
15324
- const modal = this;
15325
- modal.$el.trigger(`modal:opened ${modal.type.toLowerCase()}:opened`);
15326
- modal.emit(`local::opened modalOpened ${modal.type}Opened`, modal);
15327
- }
15328
- onClose() {
15329
- const modal = this;
15330
- modal.opened = false;
15331
- if (!modal.type || !modal.$el) return;
15332
- openedModals.splice(openedModals.indexOf(modal), 1);
15333
- $('html').removeClass(`with-modal-${modal.type.toLowerCase()}`);
15334
- modal.$el.trigger(`modal:close ${modal.type.toLowerCase()}:close`);
15335
- modal.emit(`local::close modalClose ${modal.type}Close`, modal);
15336
- }
15337
- onClosed() {
15338
- const modal = this;
15339
- if (!modal.type || !modal.$el) return;
15340
- modal.$el.removeClass('modal-out');
15341
- modal.$el.hide();
15342
- if (modal.params.backdrop && (modal.params.backdropUnique || modal.forceBackdropUnique) && modal.$backdropEl) {
15343
- modal.$backdropEl.remove();
15344
- }
15345
- modal.$el.trigger(`modal:closed ${modal.type.toLowerCase()}:closed`);
15346
- modal.emit(`local::closed modalClosed ${modal.type}Closed`, modal);
15347
- }
15348
- open(animateModal, force) {
15349
- const modal = this;
15350
- const document = getDocument$1();
15351
- const app = modal.app;
15352
- const $el = modal.$el;
15353
- const $backdropEl = modal.$backdropEl;
15354
- const type = modal.type;
15355
- let animate = true;
15356
- if (typeof animateModal !== 'undefined') animate = animateModal;else if (typeof modal.params.animate !== 'undefined') {
15357
- animate = modal.params.animate;
15358
- }
15359
- if (!$el || $el.hasClass('modal-in')) {
15360
- if (animateModal === false && $el[0] && type !== 'dialog') {
15361
- $el[0].style.display = 'block';
15362
- }
15363
- if (!force) return modal;
15364
- }
15365
- if (type === 'dialog' && app.params.modal.queueDialogs) {
15366
- let pushToQueue;
15367
- if ($('.dialog.modal-in').length > 0) {
15368
- pushToQueue = true;
15369
- } else if (openedModals.length > 0) {
15370
- openedModals.forEach(openedModal => {
15371
- if (openedModal.type === 'dialog') pushToQueue = true;
15372
- });
15373
- }
15374
- if (pushToQueue) {
15375
- dialogsQueue.push(modal);
15376
- return modal;
15377
- }
15378
- }
15379
- const $modalParentEl = $el.parent();
15380
- const wasInDom = $el.parents(document).length > 0;
15381
- if (!$modalParentEl.is(modal.$containerEl)) {
15382
- modal.$containerEl.append($el);
15383
- modal.once(`${type}Closed`, () => {
15384
- if (wasInDom) {
15385
- $modalParentEl.append($el);
15386
- } else {
15387
- $el.remove();
15388
- }
15389
- });
15390
- }
15391
- // Show Modal
15392
- $el.show();
15393
- if (modal.params.backdrop && (modal.params.backdropUnique || modal.forceBackdropUnique) && modal.$backdropEl) {
15394
- modal.$backdropEl.insertBefore($el);
15395
- }
15396
-
15397
- /* eslint no-underscore-dangle: ["error", { "allow": ["_clientLeft"] }] */
15398
- modal._clientLeft = $el[0].clientLeft;
15399
-
15400
- // Modal
15401
- function transitionEnd() {
15402
- if ($el.hasClass('modal-out')) {
15403
- modal.onClosed();
15404
- } else if ($el.hasClass('modal-in')) {
15405
- modal.onOpened();
15406
- }
15407
- }
15408
- if (animate) {
15409
- if ($backdropEl) {
15410
- $backdropEl.removeClass('not-animated');
15411
- $backdropEl.addClass('backdrop-in');
15412
- }
15413
- $el.animationEnd(() => {
15414
- transitionEnd();
15415
- });
15416
- $el.transitionEnd(() => {
15417
- transitionEnd();
15418
- });
15419
- $el.removeClass('modal-out not-animated').addClass('modal-in');
15420
- modal.onOpen();
15421
- } else {
15422
- if ($backdropEl) {
15423
- $backdropEl.addClass('backdrop-in not-animated');
15424
- }
15425
- $el.removeClass('modal-out').addClass('modal-in not-animated');
15426
- modal.onOpen();
15427
- modal.onOpened();
15428
- }
15429
- return modal;
15430
- }
15431
- close(animateModal) {
15432
- const modal = this;
15433
- const $el = modal.$el;
15434
- const $backdropEl = modal.$backdropEl;
15435
- let animate = true;
15436
- if (typeof animateModal !== 'undefined') animate = animateModal;else if (typeof modal.params.animate !== 'undefined') {
15437
- animate = modal.params.animate;
15438
- }
15439
- if (!$el || !$el.hasClass('modal-in')) {
15440
- if (dialogsQueue.indexOf(modal) >= 0) {
15441
- dialogsQueue.splice(dialogsQueue.indexOf(modal), 1);
15442
- }
15443
- return modal;
15444
- }
15445
-
15446
- // backdrop
15447
- if ($backdropEl) {
15448
- let needToHideBackdrop = true;
15449
- if (modal.type === 'popup') {
15450
- modal.$el.prevAll('.popup.modal-in').add(modal.$el.nextAll('.popup.modal-in')).each(popupEl => {
15451
- const popupInstance = popupEl.f7Modal;
15452
- if (!popupInstance) return;
15453
- if (popupInstance.params.closeByBackdropClick && popupInstance.params.backdrop && popupInstance.backdropEl === modal.backdropEl) {
15454
- needToHideBackdrop = false;
15455
- }
15456
- });
15457
- }
15458
- if (needToHideBackdrop) {
15459
- $backdropEl[animate ? 'removeClass' : 'addClass']('not-animated');
15460
- $backdropEl.removeClass('backdrop-in');
15461
- }
15462
- }
15463
-
15464
- // Modal
15465
- $el[animate ? 'removeClass' : 'addClass']('not-animated');
15466
- function transitionEnd() {
15467
- if ($el.hasClass('modal-out')) {
15468
- modal.onClosed();
15469
- } else if ($el.hasClass('modal-in')) {
15470
- modal.onOpened();
15471
- }
15472
- }
15473
- if (animate) {
15474
- $el.animationEnd(() => {
15475
- transitionEnd();
15476
- });
15477
- $el.transitionEnd(() => {
15478
- transitionEnd();
15479
- });
15480
- $el.removeClass('modal-in').addClass('modal-out');
15481
- // Emit close
15482
- modal.onClose();
15483
- } else {
15484
- $el.addClass('not-animated').removeClass('modal-in').addClass('modal-out');
15485
- // Emit close
15486
- modal.onClose();
15487
- modal.onClosed();
15488
- }
15489
- if (modal.type === 'dialog') {
15490
- clearDialogsQueue();
15491
- }
15492
- return modal;
15493
- }
15494
- destroy() {
15495
- const modal = this;
15496
- if (modal.destroyed) return;
15497
- modal.emit(`local::beforeDestroy modalBeforeDestroy ${modal.type}BeforeDestroy`, modal);
15498
- if (modal.$el) {
15499
- modal.$el.trigger(`modal:beforedestroy ${modal.type.toLowerCase()}:beforedestroy`);
15500
- if (modal.$el.length && modal.$el[0].f7Modal) {
15501
- delete modal.$el[0].f7Modal;
15502
- }
15503
- }
15504
- deleteProps$1(modal);
15505
- modal.destroyed = true;
15506
- }
15507
- };
15508
-
15509
- class CustomModal extends Modal$1 {
15510
- constructor(app, params) {
15511
- const extendedParams = extend$3({
15512
- backdrop: true,
15513
- closeByBackdropClick: true,
15514
- on: {}
15515
- }, params);
15516
-
15517
- // Extends with open/close Modal methods;
15518
- super(app, extendedParams);
15519
- const customModal = this;
15520
- customModal.params = extendedParams;
15521
-
15522
- // Find Element
15523
- let $el;
15524
- if (!customModal.params.el) {
15525
- $el = $(customModal.params.content);
15526
- } else {
15527
- $el = $(customModal.params.el);
15528
- }
15529
- if ($el && $el.length > 0 && $el[0].f7Modal) {
15530
- return $el[0].f7Modal;
15531
- }
15532
- if ($el.length === 0) {
15533
- return customModal.destroy();
15534
- }
15535
- let $backdropEl;
15536
- if (customModal.params.backdrop) {
15537
- $backdropEl = app.$el.children('.custom-modal-backdrop');
15538
- if ($backdropEl.length === 0) {
15539
- $backdropEl = $('<div class="custom-modal-backdrop"></div>');
15540
- app.$el.append($backdropEl);
15541
- }
15542
- }
15543
- function handleClick(e) {
15544
- if (!customModal || customModal.destroyed) return;
15545
- if ($backdropEl && e.target === $backdropEl[0]) {
15546
- customModal.close();
15547
- }
15548
- }
15549
- customModal.on('customModalOpened', () => {
15550
- if (customModal.params.closeByBackdropClick && customModal.params.backdrop) {
15551
- app.on('click', handleClick);
15552
- }
15553
- });
15554
- customModal.on('customModalClose', () => {
15555
- if (customModal.params.closeByBackdropClick && customModal.params.backdrop) {
15556
- app.off('click', handleClick);
15557
- }
15558
- });
15559
- extend$3(customModal, {
15560
- app,
15561
- $el,
15562
- el: $el[0],
15563
- $backdropEl,
15564
- backdropEl: $backdropEl && $backdropEl[0],
15565
- type: 'customModal'
15566
- });
15567
- $el[0].f7Modal = customModal;
15568
- return customModal;
15569
- }
15570
- }
15571
-
15572
- var Modal = {
15573
- name: 'modal',
15574
- static: {
15575
- Modal: Modal$1,
15576
- CustomModal
15577
- },
15578
- create() {
15579
- const app = this;
15580
- app.customModal = {
15581
- create(params) {
15582
- return new CustomModal(app, params);
17480
+ app.toolbarNew.init(vnode.elm);
17481
+ },
17482
+ destroy(vnode) {
17483
+ const app = this;
17484
+ app.toolbarNew.destroy(vnode.elm);
15583
17485
  }
15584
- };
15585
- },
15586
- params: {
15587
- modal: {
15588
- queueDialogs: true
15589
17486
  }
15590
17487
  }
15591
17488
  };
@@ -18582,7 +20479,6 @@
18582
20479
  let $overswipeRightButton;
18583
20480
  let overswipeLeft;
18584
20481
  let overswipeRight;
18585
- const isIOS = app.theme === 'ios';
18586
20482
  function handleTouchStart(e) {
18587
20483
  if (!app.swipeout.allow) return;
18588
20484
  isMoved = false;
@@ -18717,7 +20613,7 @@
18717
20613
  buttonOffset = buttonEl.f7SwipeoutButtonOffset;
18718
20614
  const buttonWidth = $buttonEl[0].f7SwipeoutButtonWidth;
18719
20615
  if ($overswipeRightButton.length > 0 && $buttonEl.hasClass('swipeout-overswipe') && direction === 'to-left') {
18720
- if (isIOS) {
20616
+ if (app.theme === 'ios') {
18721
20617
  const newWidth = overswipeRight ? buttonWidth + buttonOffset - 8 : buttonWidth;
18722
20618
  const diff = newWidth - buttonWidth;
18723
20619
  $buttonEl.css({
@@ -18743,7 +20639,7 @@
18743
20639
  $buttonEl.removeClass('swipeout-overswipe-active');
18744
20640
  }
18745
20641
  }
18746
- if (isIOS) {
20642
+ if (app.theme === 'ios') {
18747
20643
  const buttonEndPos = actionsRightWidth - buttonOffset;
18748
20644
  const buttonStartPos = actionsRightWidth - buttonOffset - buttonWidth;
18749
20645
  let buttonProgress = (-buttonTranslate - buttonStartPos) / (buttonEndPos - buttonStartPos);
@@ -18776,12 +20672,12 @@
18776
20672
  $buttonEl[0].f7SwipeoutButtonWidth = buttonEl.offsetWidth;
18777
20673
  }
18778
20674
  if (typeof buttonEl.f7SwipeoutButtonOffset === 'undefined') {
18779
- $buttonEl[0].f7SwipeoutButtonOffset = isIOS ? buttonEl.offsetLeft : actionsLeftWidth - buttonEl.offsetLeft - buttonEl.offsetWidth;
20675
+ $buttonEl[0].f7SwipeoutButtonOffset = app.theme === 'ios' ? buttonEl.offsetLeft : actionsLeftWidth - buttonEl.offsetLeft - buttonEl.offsetWidth;
18780
20676
  }
18781
20677
  const buttonWidth = $buttonEl[0].f7SwipeoutButtonWidth;
18782
20678
  buttonOffset = buttonEl.f7SwipeoutButtonOffset;
18783
20679
  if ($overswipeLeftButton.length > 0 && $buttonEl.hasClass('swipeout-overswipe') && direction === 'to-right') {
18784
- if (isIOS) {
20680
+ if (app.theme === 'ios') {
18785
20681
  const newWidth = overswipeLeft ? actionsLeftWidth - 16 : buttonWidth;
18786
20682
  const diff = newWidth - buttonWidth;
18787
20683
  $buttonEl.css({
@@ -18810,7 +20706,7 @@
18810
20706
  if ($leftButtons.length > 1) {
18811
20707
  $buttonEl.css('z-index', $leftButtons.length - index);
18812
20708
  }
18813
- if (isIOS) {
20709
+ if (app.theme === 'ios') {
18814
20710
  const buttonStartPos = buttonOffset;
18815
20711
  const buttonEndPos = buttonStartPos + buttonWidth;
18816
20712
  let buttonProgress = (buttonTranslate - buttonStartPos) / (buttonEndPos - buttonStartPos);
@@ -18860,7 +20756,7 @@
18860
20756
  $buttons = direction === 'to-left' ? $rightButtons : $leftButtons;
18861
20757
  if ($buttons) {
18862
20758
  for (i = 0; i < $buttons.length; i += 1) {
18863
- if (isIOS) {
20759
+ if (app.theme === 'ios') {
18864
20760
  $($buttons[i]).transform(`scale(1)`);
18865
20761
  } else {
18866
20762
  $($buttons[i]).transform(`translate3d(${newTranslate}px,0,0)`);
@@ -18889,7 +20785,7 @@
18889
20785
  if (typeof buttonOffset === 'undefined') {
18890
20786
  $buttonEl[0].f7SwipeoutButtonOffset = actionsLeftWidth - buttonEl.offsetLeft - buttonEl.offsetWidth;
18891
20787
  }
18892
- if (isIOS) {
20788
+ if (app.theme === 'ios') {
18893
20789
  $buttonEl.transform(`scale(0)`);
18894
20790
  } else {
18895
20791
  $buttonEl.transform(`translate3d(${buttonOffset}px,0,0)`);
@@ -18903,7 +20799,7 @@
18903
20799
  if (typeof buttonOffset === 'undefined') {
18904
20800
  $buttonEl[0].f7SwipeoutButtonOffset = buttonEl.offsetLeft;
18905
20801
  }
18906
- if (isIOS) {
20802
+ if (app.theme === 'ios') {
18907
20803
  $buttonEl.transform(`scale(0)`);
18908
20804
  } else {
18909
20805
  $buttonEl.transform(`translate3d(${-buttonOffset}px,0,0)`);
@@ -20443,6 +22339,11 @@
20443
22339
  if (hasHighlight) {
20444
22340
  app.toolbar.setHighlight($tabbarEl);
20445
22341
  }
22342
+ // Toolbar New Highlight
22343
+ const $tabbarNewEl = $tabLinkEl.parents('.tabbar-new, .tabbar-new-icons');
22344
+ if (app.toolbarNew && $tabbarNewEl.length > 0) {
22345
+ app.toolbarNew.setHighlight($tabbarNewEl);
22346
+ }
20446
22347
  }
20447
22348
  }
20448
22349
  return {
@@ -50010,7 +51911,7 @@
50010
51911
  // UMD_ONLY_END
50011
51912
 
50012
51913
  Router.use([RouterComponentLoaderModule]);
50013
- Framework7.use([DeviceModule, SupportModule, UtilsModule, ResizeModule, TouchModule, ClicksModule, RouterModule, HistoryModule, ComponentModule, ServiceWorkerModule, StoreModule, Statusbar$1, View, Navbar$1, Toolbar$1, Subnavbar, TouchRipple, Modal, Dialog, Popup, LoginScreen, Popover, Actions, Sheet, Toast, Preloader$1, Progressbar$1, Sortable$1, Swipeout$1, Accordion$1, ContactsList, VirtualList, ListIndex, Timeline, Tabs, Panel, Card, Chip, Form, Input$1, Checkbox, Radio, Toggle, Range, Stepper, SmartSelect, Grid$1, Calendar, Picker, InfiniteScroll$1, PullToRefresh, DataTable, Fab$1, Searchbar, Messages, Messagebar, Swiper, PhotoBrowser, Notification, Autocomplete, Tooltip, Gauge, Skeleton, ColorPicker, Treeview$1, TextEditor, PieChart, AreaChart, Breadcrumbs$1, Typography]);
51914
+ Framework7.use([DeviceModule, SupportModule, UtilsModule, ResizeModule, TouchModule, ClicksModule, RouterModule, HistoryModule, ComponentModule, ServiceWorkerModule, StoreModule, Statusbar$1, View, Navbar$2, NavbarNew, SearchbarNew, Toolbar$1, ToolbarNew$1, Subnavbar, TouchRipple, Modal, Dialog, Popup, LoginScreen, Popover, Actions, Sheet, Toast, Preloader$1, Progressbar$1, Sortable$1, Swipeout$1, Accordion$1, ContactsList, VirtualList, ListIndex, Timeline, Tabs, Panel, Card, Chip, Form, Input$1, Checkbox, Radio, Toggle, Range, Stepper, SmartSelect, Grid$1, Calendar, Picker, InfiniteScroll$1, PullToRefresh, DataTable, Fab$1, Searchbar, Messages, Messagebar, Swiper, PhotoBrowser, Notification, Autocomplete, Tooltip, Gauge, Skeleton, ColorPicker, Treeview$1, TextEditor, PieChart, AreaChart, Breadcrumbs$1, Typography]);
50014
51915
 
50015
51916
  return Framework7;
50016
51917