@xenknight/framework7 0.0.7 → 0.0.9

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 (45) hide show
  1. package/components/navbar-new/navbar-ios.less +135 -135
  2. package/components/navbar-new/navbar-md.less +105 -105
  3. package/components/navbar-new/navbar-vars.less +78 -78
  4. package/components/navbar-new/navbar.d.ts +77 -77
  5. package/components/navbar-new/navbar.less +268 -268
  6. package/components/page/page.less +4 -2
  7. package/components/searchbar-new/searchbar-ios.less +131 -131
  8. package/components/searchbar-new/searchbar-md.less +154 -153
  9. package/components/searchbar-new/searchbar-new-class.js +32 -20
  10. package/components/searchbar-new/searchbar-vars.less +75 -75
  11. package/components/searchbar-new/searchbar.less +336 -331
  12. package/components/subnavbar-new/subnavbar-new-ios.less +67 -0
  13. package/components/subnavbar-new/subnavbar-new-md.less +48 -0
  14. package/components/subnavbar-new/subnavbar-new-vars.less +42 -0
  15. package/components/subnavbar-new/subnavbar-new.d.ts +12 -0
  16. package/components/subnavbar-new/subnavbar-new.js +20 -0
  17. package/components/subnavbar-new/subnavbar-new.less +151 -0
  18. package/components/toolbar-new/tabbar-highlight.js +29 -9
  19. package/components/toolbar-new/toolbar-ios.less +193 -193
  20. package/components/toolbar-new/toolbar-md.less +152 -152
  21. package/components/toolbar-new/toolbar-vars.less +77 -77
  22. package/components/toolbar-new/toolbar.less +261 -261
  23. package/framework7-bundle-rtl.css +259 -8
  24. package/framework7-bundle-rtl.min.css +4 -4
  25. package/framework7-bundle.css +259 -8
  26. package/framework7-bundle.esm.js +4 -2
  27. package/framework7-bundle.js +83 -31
  28. package/framework7-bundle.js.map +1 -1
  29. package/framework7-bundle.less +2 -1
  30. package/framework7-bundle.min.css +4 -4
  31. package/framework7-bundle.min.js +2 -2
  32. package/framework7-bundle.min.js.map +1 -1
  33. package/framework7-lite-bundle.esm.js +4 -2
  34. package/framework7-lite.esm.js +4 -2
  35. package/framework7-lite.js +3 -1
  36. package/framework7-rtl.css +259 -8
  37. package/framework7-rtl.min.css +4 -4
  38. package/framework7-types.d.ts +5 -1
  39. package/framework7.css +259 -8
  40. package/framework7.d.ts +4 -0
  41. package/framework7.esm.js +4 -2
  42. package/framework7.js +3 -1
  43. package/framework7.less +2 -1
  44. package/framework7.min.css +4 -4
  45. package/package.json +1 -1
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * Released under the MIT License
9
9
  *
10
- * Released on: January 1, 2026
10
+ * Released on: January 4, 2026
11
11
  */
12
12
 
13
13
  /*====================
@@ -414,7 +414,7 @@ html.device-full-viewport body {
414
414
  height: 100%;
415
415
  position: relative;
416
416
  z-index: 1;
417
- padding-top: calc(var(--f7-page-navbar-offset, 0px) + var(--f7-page-toolbar-top-offset, 0px) + var(--f7-page-subnavbar-offset, 0px) + var(--f7-page-searchbar-offset, 0px) + var(--f7-page-content-extra-padding-top, 0px));
417
+ padding-top: calc(var(--f7-page-navbar-offset, 0px) + var(--f7-page-navbar-new-offset, 0px) + var(--f7-page-toolbar-top-offset, 0px) + var(--f7-page-toolbar-new-top-offset, 0px) + var(--f7-page-subnavbar-offset, 0px) + var(--f7-page-subnavbar-new-offset, 0px) + var(--f7-page-searchbar-offset, 0px) + var(--f7-page-searchbar-new-offset, 0px) + var(--f7-page-content-extra-padding-top, 0px));
418
418
  padding-bottom: calc(var(--f7-page-toolbar-bottom-offset, 0px) + var(--f7-safe-area-bottom) + var(--f7-page-content-extra-padding-bottom, 0px));
419
419
  }
420
420
  .page-transitioning,
@@ -2498,18 +2498,18 @@ html.device-full-viewport body {
2498
2498
  }
2499
2499
  .navbar-new ~ *,
2500
2500
  .navbars-new ~ * {
2501
- --f7-page-navbar-offset: calc(var(--f7-navbar-new-height) + var(--f7-safe-area-top));
2501
+ --f7-page-navbar-new-offset: calc(var(--f7-navbar-new-height) + var(--f7-safe-area-top));
2502
2502
  }
2503
2503
  .navbar-new ~ * .page-with-navbar-new-large,
2504
2504
  .navbar-new ~ .page-with-navbar-new-large,
2505
2505
  .navbars-new ~ * .page-with-navbar-new-large,
2506
2506
  .navbars-new ~ .page-with-navbar-new-large,
2507
2507
  .page-with-navbar-new-large .navbar-new ~ * {
2508
- --f7-page-navbar-offset: calc(var(--f7-navbar-new-height) + var(--f7-navbar-new-large-title-height) + var(--f7-safe-area-top));
2508
+ --f7-page-navbar-new-offset: calc(var(--f7-navbar-new-height) + var(--f7-navbar-new-large-title-height) + var(--f7-safe-area-top));
2509
2509
  }
2510
2510
  .page.no-navbar,
2511
2511
  .page.no-navbar .navbar-new ~ * {
2512
- --f7-page-navbar-offset: var(--f7-safe-area-top);
2512
+ --f7-page-navbar-new-offset: var(--f7-safe-area-top);
2513
2513
  }
2514
2514
  .ios {
2515
2515
  --f7-navbarLeftTextOffset: calc(4px + 12px + var(--f7-navbar-new-inner-padding-left));
@@ -2784,12 +2784,14 @@ html.device-full-viewport body {
2784
2784
  .searchbar-new input[type='search']::-webkit-search-decoration {
2785
2785
  display: none;
2786
2786
  }
2787
- .ios .subnavbar .searchbar-new {
2787
+ .ios .subnavbar .searchbar-new,
2788
+ .ios .subnavbar-new .searchbar-new {
2788
2789
  background-color: transparent;
2789
2790
  -webkit-backdrop-filter: none;
2790
2791
  backdrop-filter: none;
2791
2792
  }
2792
- .ios .subnavbar .searchbar-new:after {
2793
+ .ios .subnavbar .searchbar-new:after,
2794
+ .ios .subnavbar-new .searchbar-new:after {
2793
2795
  display: none !important;
2794
2796
  }
2795
2797
  .searchbar-new.no-outline:after {
@@ -2894,9 +2896,13 @@ html.device-full-viewport body {
2894
2896
  .toolbar .searchbar-new.searchbar-new-expandable {
2895
2897
  --f7-searchbar-new-expandable-size: var(--f7-toolbar-height);
2896
2898
  }
2897
- .subnavbar .searchbar-new.searchbar-new-expandable {
2899
+ .subnavbar .searchbar-new.searchbar-new-expandable,
2900
+ .subnavbar-new .searchbar-new.searchbar-new-expandable {
2898
2901
  --f7-searchbar-new-expandable-size: var(--f7-subnavbar-height);
2899
2902
  }
2903
+ .subnavbar-new .searchbar-new.searchbar-new-expandable {
2904
+ --f7-searchbar-new-expandable-size: var(--f7-subnavbar-new-height);
2905
+ }
2900
2906
  .tabbar-icons .searchbar-new.searchbar-new-expandable {
2901
2907
  --f7-searchbar-new-expandable-size: var(--f7-tabbar-icons-height);
2902
2908
  }
@@ -3277,16 +3283,19 @@ html.device-full-viewport body {
3277
3283
  }
3278
3284
  .md .page > .searchbar-new,
3279
3285
  .md .subnavbar .searchbar-new,
3286
+ .md .subnavbar-new .searchbar-new,
3280
3287
  .md .searchbar-new-expandable {
3281
3288
  --f7-searchbar-new-input-extra-padding-left: 34px;
3282
3289
  }
3283
3290
  .md .page > .searchbar-new .searchbar-new-disable-button,
3284
3291
  .md .subnavbar .searchbar-new .searchbar-new-disable-button,
3292
+ .md .subnavbar-new .searchbar-new .searchbar-new-disable-button,
3285
3293
  .md .searchbar-new-expandable .searchbar-new-disable-button {
3286
3294
  left: calc(var(--f7-searchbar-new-inner-padding-left) + var(--f7-safe-area-left));
3287
3295
  }
3288
3296
  .md .page > .searchbar-new .searchbar-new-icon,
3289
3297
  .md .subnavbar .searchbar-new .searchbar-new-icon,
3298
+ .md .subnavbar-new .searchbar-new .searchbar-new-icon,
3290
3299
  .md .searchbar-new-expandable .searchbar-new-icon {
3291
3300
  left: var(--f7-safe-area-left);
3292
3301
  }
@@ -4765,6 +4774,248 @@ html.device-full-viewport body {
4765
4774
  .md .subnavbar-inner > a.link:last-child {
4766
4775
  margin-right: calc(-1 * var(--f7-subnavbar-inner-padding-right));
4767
4776
  }
4777
+ /* === Subnavbar New === */
4778
+ :root {
4779
+ /*
4780
+ --f7-subnavbar-new-bg-color: var(--f7-bars-bg-color);
4781
+ --f7-subnavbar-new-bg-color-rgb: var(--f7-bars-bg-color-rgb);
4782
+ --f7-subnavbar-new-border-color: var(--f7-bars-border-color);
4783
+ --f7-subnavbar-new-link-color: var(--f7-bars-link-color);
4784
+ --f7-subnavbar-new-text-color: var(--f7-bars-text-color);
4785
+ */
4786
+ --f7-subnavbar-new-title-line-height: 1.2;
4787
+ }
4788
+ .ios {
4789
+ --f7-subnavbar-new-height: 44px;
4790
+ --f7-subnavbar-new-offset-left: calc(16px + var(--f7-safe-area-left));
4791
+ --f7-subnavbar-new-offset-right: calc(16px + var(--f7-safe-area-right));
4792
+ --f7-subnavbar-new-inner-padding-left: 5px;
4793
+ --f7-subnavbar-new-inner-padding-right: 5px;
4794
+ --f7-subnavbar-new-title-font-size: 24px;
4795
+ --f7-subnavbar-new-title-font-weight: 700;
4796
+ --f7-subnavbar-new-title-letter-spacing: -0.03em;
4797
+ --f7-subnavbar-new-title-margin-left: 8px;
4798
+ --f7-subnavbar-new-bg-color: var(--f7-glass-bg-color);
4799
+ /*
4800
+ --f7-subnavbar-new-link-height: var(--f7-subnavbar-new-height);
4801
+ --f7-subnavbar-new-link-line-height: var(--f7-subnavbar-new-height);
4802
+ */
4803
+ }
4804
+ .md {
4805
+ --f7-subnavbar-new-height: 64px;
4806
+ --f7-subnavbar-new-offset-left: 0;
4807
+ --f7-subnavbar-new-offset-right: 0;
4808
+ --f7-subnavbar-new-inner-padding-left: calc(16px + var(--f7-safe-area-left));
4809
+ --f7-subnavbar-new-inner-padding-right: calc(16px + var(--f7-safe-area-right));
4810
+ --f7-subnavbar-new-title-font-size: 22px;
4811
+ --f7-subnavbar-new-title-font-weight: 400;
4812
+ --f7-subnavbar-new-title-letter-spacing: 0;
4813
+ --f7-subnavbar-new-title-margin-left: 0px;
4814
+ /*
4815
+ --f7-subnavbar-new-link-height: var(--f7-subnavbar-new-height);
4816
+ --f7-subnavbar-new-link-line-height: var(--f7-subnavbar-new-height);
4817
+ */
4818
+ }
4819
+ .subnavbar-new {
4820
+ position: absolute;
4821
+ left: var(--f7-subnavbar-new-offset-left);
4822
+ right: var(--f7-subnavbar-new-offset-right);
4823
+ top: 0;
4824
+ z-index: 600;
4825
+ box-sizing: border-box;
4826
+ display: flex;
4827
+ justify-content: space-between;
4828
+ align-items: center;
4829
+ background-color: var(--f7-subnavbar-new-bg-color, var(--f7-bars-bg-color));
4830
+ color: var(--f7-subnavbar-new-text-color, var(--f7-bars-text-color));
4831
+ }
4832
+ @supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))) {
4833
+ .ios-translucent-bars .subnavbar-new {
4834
+ background-color: rgba(var(--f7-subnavbar-new-bg-color-rgb, var(--f7-bars-bg-color-rgb)), var(--f7-bars-translucent-opacity));
4835
+ -webkit-backdrop-filter: saturate(180%) blur(var(--f7-bars-translucent-blur));
4836
+ backdrop-filter: saturate(180%) blur(var(--f7-bars-translucent-blur));
4837
+ }
4838
+ }
4839
+ .subnavbar-new .subnavbar-new-title {
4840
+ position: relative;
4841
+ overflow: hidden;
4842
+ text-overflow: ellpsis;
4843
+ white-space: nowrap;
4844
+ font-size: var(--f7-subnavbar-new-title-font-size);
4845
+ font-weight: var(--f7-subnavbar-new-title-font-weight);
4846
+ text-align: left;
4847
+ display: inline-block;
4848
+ line-height: var(--f7-subnavbar-new-title-line-height);
4849
+ letter-spacing: var(--f7-subnavbar-new-title-letter-spacing);
4850
+ margin-left: var(--f7-subnavbar-new-title-margin-left);
4851
+ }
4852
+ .subnavbar-new .left,
4853
+ .subnavbar-new .right {
4854
+ flex-shrink: 0;
4855
+ display: flex;
4856
+ justify-content: flex-start;
4857
+ align-items: center;
4858
+ }
4859
+ .subnavbar-new .right:first-child {
4860
+ position: absolute;
4861
+ height: 100%;
4862
+ }
4863
+ .subnavbar-new a {
4864
+ color: var(--f7-subnavbar-new-link-color, var(--f7-bars-link-color, var(--f7-theme-color)));
4865
+ }
4866
+ .subnavbar-new a.link {
4867
+ line-height: var(--f7-subnavbar-new-link-line-height, var(--f7-subnavbar-new-height));
4868
+ height: var(--f7-subnavbar-new-link-height, var(--f7-subnavbar-new-height));
4869
+ }
4870
+ .subnavbar-new a.icon-only {
4871
+ min-width: var(--f7-subnavbar-new-height);
4872
+ }
4873
+ .subnavbar-new.no-outline:after {
4874
+ display: none !important;
4875
+ }
4876
+ .subnavbar-new.navbar-hidden:before {
4877
+ display: none !important;
4878
+ }
4879
+ .subnavbar-new:after,
4880
+ .subnavbar-new:before {
4881
+ -webkit-backface-visibility: hidden;
4882
+ backface-visibility: hidden;
4883
+ }
4884
+ .subnavbar-new:after {
4885
+ content: '';
4886
+ position: absolute;
4887
+ background-color: var(--f7-subnavbar-new-border-color, transparent);
4888
+ display: block;
4889
+ z-index: 15;
4890
+ top: auto;
4891
+ right: auto;
4892
+ bottom: 0;
4893
+ left: 0;
4894
+ height: 1px;
4895
+ width: 100%;
4896
+ transform-origin: 50% 100%;
4897
+ transform: scaleY(calc(1 / var(--f7-device-pixel-ratio)));
4898
+ }
4899
+ .subnavbar-new-inner {
4900
+ width: 100%;
4901
+ height: 100%;
4902
+ display: flex;
4903
+ align-items: center;
4904
+ box-sizing: border-box;
4905
+ justify-content: space-between;
4906
+ overflow: hidden;
4907
+ padding: 0 var(--f7-subnavbar-new-inner-padding-left) 0 var(--f7-subnavbar-new-inner-padding-right);
4908
+ }
4909
+ .navbar .subnavbar-new,
4910
+ .navbar-new .subnavbar-new {
4911
+ top: 100%;
4912
+ }
4913
+ .views > .subnavbar-new,
4914
+ .view > .subnavbar-new,
4915
+ .page > .subnavbar-new {
4916
+ position: absolute;
4917
+ }
4918
+ .navbar-new ~ * .subnavbar-new,
4919
+ .navbars-new ~ * .subnavbar-new,
4920
+ .page-with-subnavbar-new .navbar-new ~ .subnavbar-new,
4921
+ .page-with-subnavbar-new .navbar-new ~ * .subnavbar-new,
4922
+ .navbar-new ~ .page-with-subnavbar-new:not(.no-navbar) .subnavbar-new,
4923
+ .navbar-new ~ .subnavbar-new,
4924
+ .navbars-new ~ .page-with-subnavbar-new:not(.no-navbar) .subnavbar-new,
4925
+ .navbars-new ~ .subnavbar-new {
4926
+ top: calc(var(--f7-navbar-height) + var(--f7-safe-area-top));
4927
+ }
4928
+ .navbar ~ .page-with-navbar-large:not(.no-navbar) .subnavbar-new,
4929
+ .navbars ~ .page-with-navbar-large:not(.no-navbar) .subnavbar-new,
4930
+ .navbar-new ~ .page-with-navbar-new-large:not(.no-navbar) .subnavbar-new,
4931
+ .navbars-new ~ .page-with-navbar-new-large:not(.no-navbar) .subnavbar-new,
4932
+ .page-with-subnavbar-new.page-with-navbar-large .navbar ~ .subnavbar-new,
4933
+ .page-with-subnavbar-new.page-with-navbar-large .navbar ~ * .subnavbar-new,
4934
+ .page-with-subnavbar-new.page-with-navbar-new-large .navbar-new ~ .subnavbar-new,
4935
+ .page-with-subnavbar-new.page-with-navbar-new-large .navbar-new ~ * .subnavbar-new,
4936
+ .navbar .title-large ~ .subnavbar-new,
4937
+ .navbar-new .title-large ~ .subnavbar-new {
4938
+ top: calc(var(--f7-navbar-height) + var(--f7-navbar-large-title-height) + var(--f7-safe-area-top));
4939
+ transform: translate3d(0, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0);
4940
+ }
4941
+ .navbar-new ~ .page-with-navbar-new-large:not(.no-navbar) .subnavbar-new,
4942
+ .navbars-new ~ .page-with-navbar-new-large:not(.no-navbar) .subnavbar-new,
4943
+ .page-with-subnavbar-new.page-with-navbar-new-large .navbar-new ~ .subnavbar-new,
4944
+ .page-with-subnavbar-new.page-with-navbar-new-large .navbar-new ~ * .subnavbar-new,
4945
+ .navbar-new .title-large ~ .subnavbar-new {
4946
+ top: calc(var(--f7-navbar-new-height) + var(--f7-navbar-new-large-title-height) + var(--f7-safe-area-top));
4947
+ transform: translate3d(0, calc(-1 * var(--f7-navbar-new-large-collapse-progress) * var(--f7-navbar-new-large-title-height)), 0);
4948
+ }
4949
+ .page-with-subnavbar-new,
4950
+ .subnavbar-new ~ * {
4951
+ --f7-page-subnavbar-new-offset: var(--f7-subnavbar-new-height);
4952
+ }
4953
+ .ios .subnavbar-new {
4954
+ height: calc(var(--f7-subnavbar-new-height) + 1px);
4955
+ margin-top: -1px;
4956
+ padding-top: 1px;
4957
+ border-radius: var(--f7-subnavbar-new-height);
4958
+ box-shadow: var(--f7-glass-shadow);
4959
+ -webkit-backdrop-filter: saturate(180%) blur(16px);
4960
+ backdrop-filter: saturate(180%) blur(16px);
4961
+ --f7-segmented-strong-bg-color: transparent;
4962
+ }
4963
+ .ios .subnavbar-new:has(> .searchbar-new) {
4964
+ background: transparent;
4965
+ -webkit-backdrop-filter: none;
4966
+ backdrop-filter: none;
4967
+ box-shadow: none;
4968
+ }
4969
+ .ios .subnavbar-new .subnavbar-new-inner {
4970
+ border-radius: inherit;
4971
+ }
4972
+ .ios .subnavbar-new .title {
4973
+ align-self: flex-start;
4974
+ flex-shrink: 10;
4975
+ }
4976
+ .ios .subnavbar-new .left a + a,
4977
+ .ios .subnavbar-new .right a + a {
4978
+ margin-left: 16px;
4979
+ }
4980
+ .ios .subnavbar-new .left {
4981
+ margin-right: 10px;
4982
+ }
4983
+ .ios .subnavbar-new .right {
4984
+ margin-left: 10px;
4985
+ }
4986
+ .ios .subnavbar-new .right:first-child {
4987
+ right: 8px;
4988
+ }
4989
+ .ios .subnavbar-new a.link {
4990
+ justify-content: flex-start;
4991
+ }
4992
+ .ios .subnavbar-new a.icon-only {
4993
+ justify-content: center;
4994
+ margin: 0;
4995
+ }
4996
+ .md .subnavbar-new {
4997
+ height: var(--f7-subnavbar-new-height);
4998
+ }
4999
+ .md .subnavbar-new .right {
5000
+ margin-left: auto;
5001
+ }
5002
+ .md .subnavbar-new .right:first-child {
5003
+ right: 16px;
5004
+ }
5005
+ .md .subnavbar-new a.link {
5006
+ justify-content: center;
5007
+ padding: 0 12px;
5008
+ }
5009
+ .md .subnavbar-new a.icon-only {
5010
+ flex-shrink: 0;
5011
+ padding: 0 12px;
5012
+ }
5013
+ .md .subnavbar-new-inner > a.link:first-child {
5014
+ margin-left: calc(-1 * var(--f7-subnavbar-new-inner-padding-left));
5015
+ }
5016
+ .md .subnavbar-new-inner > a.link:last-child {
5017
+ margin-right: calc(-1 * var(--f7-subnavbar-new-inner-padding-right));
5018
+ }
4768
5019
  /* === Content Block === */
4769
5020
  :root {
4770
5021
  --f7-block-padding-horizontal: 16px;
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * Released under the MIT License
9
9
  *
10
- * Released on: January 1, 2026
10
+ * Released on: January 4, 2026
11
11
  */
12
12
 
13
13
  import $ from './shared/dom7.js';
@@ -42,6 +42,8 @@ import NavbarNew from './components/navbar-new/navbar.js';
42
42
  import SearchbarNew from './components/searchbar-new/searchbar.js';
43
43
  // New Toolbar
44
44
  import ToolbarNew from './components/toolbar-new/toolbar.js';
45
+ // New Subnavbar
46
+ import SubnavbarNew from './components/subnavbar-new/subnavbar-new.js';
45
47
  import Dialog from './components/dialog/dialog.js';
46
48
  import Popup from './components/popup/popup.js';
47
49
  import LoginScreen from './components/login-screen/login-screen.js';
@@ -95,6 +97,6 @@ import AreaChart from './components/area-chart/area-chart.js';
95
97
  import Breadcrumbs from './components/breadcrumbs/breadcrumbs.js';
96
98
  import Typography from './components/typography/typography.js';
97
99
  Router.use([RouterComponentLoaderModule]);
98
- Framework7.use([DeviceModule, SupportModule, UtilsModule, ResizeModule, TouchModule, ClicksModule, RouterModule, HistoryModule, ComponentModule, ServiceWorkerModule, StoreModule, Statusbar, View, Navbar, NavbarNew, SearchbarNew, Toolbar, ToolbarNew, Subnavbar, TouchRipple, Modal, Dialog, Popup, LoginScreen, Popover, Actions, Sheet, Toast, Preloader, Progressbar, Sortable, Swipeout, Accordion, ContactsList, VirtualList, ListIndex, Timeline, Tabs, Panel, Card, Chip, Form, Input, Checkbox, Radio, Toggle, Range, Stepper, SmartSelect, Grid, Calendar, Picker, InfiniteScroll, PullToRefresh, DataTable, Fab, Searchbar, Messages, Messagebar, Swiper, PhotoBrowser, Notification, Autocomplete, Tooltip, Gauge, Skeleton, ColorPicker, Treeview, TextEditor, PieChart, AreaChart, Breadcrumbs, Typography]);
100
+ Framework7.use([DeviceModule, SupportModule, UtilsModule, ResizeModule, TouchModule, ClicksModule, RouterModule, HistoryModule, ComponentModule, ServiceWorkerModule, StoreModule, Statusbar, View, Navbar, NavbarNew, SearchbarNew, Toolbar, ToolbarNew, Subnavbar, SubnavbarNew, TouchRipple, Modal, Dialog, Popup, LoginScreen, Popover, Actions, Sheet, Toast, Preloader, Progressbar, Sortable, Swipeout, Accordion, ContactsList, VirtualList, ListIndex, Timeline, Tabs, Panel, Card, Chip, Form, Input, Checkbox, Radio, Toggle, Range, Stepper, SmartSelect, Grid, Calendar, Picker, InfiniteScroll, PullToRefresh, DataTable, Fab, Searchbar, Messages, Messagebar, Swiper, PhotoBrowser, Notification, Autocomplete, Tooltip, Gauge, Skeleton, ColorPicker, Treeview, TextEditor, PieChart, AreaChart, Breadcrumbs, Typography]);
99
101
  export { Component, $jsx, $ as Dom7, utils, getDevice, getSupport, createStore };
100
102
  export default Framework7;
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * Released under the MIT License
9
9
  *
10
- * Released on: January 1, 2026
10
+ * Released on: January 4, 2026
11
11
  */
12
12
 
13
13
  (function (global, factory) {
@@ -16526,8 +16526,18 @@
16526
16526
  $backdropEl = $('<div class="searchbar-new-backdrop"></div>');
16527
16527
  if ($pageEl && $pageEl.length) {
16528
16528
  if ($el.parents($pageEl).length > 0 && $navbarEl && $el.parents($navbarEl).length === 0) {
16529
+ // Searchbar is in page but not in navbar - insert before searchbar
16529
16530
  $backdropEl.insertBefore($el);
16531
+ } else if ($navbarEl && $navbarEl.length > 0) {
16532
+ // Searchbar is in navbar - insert after navbar, before page-content
16533
+ const $pageContent = $pageEl.find('.page-content').eq(0);
16534
+ if ($pageContent.length) {
16535
+ $backdropEl.insertBefore($pageContent);
16536
+ } else {
16537
+ $navbarEl.after($backdropEl);
16538
+ }
16530
16539
  } else {
16540
+ // Default: insert before page-content
16531
16541
  $backdropEl.insertBefore($pageEl.find('.page-content').eq(0));
16532
16542
  }
16533
16543
  } else {
@@ -16606,8 +16616,8 @@
16606
16616
  }
16607
16617
  }
16608
16618
  function onInputClear(e, previousValue) {
16609
- sb.$el.trigger('searchbar-new:clear', previousValue);
16610
- sb.emit('local::clear searchbarNewClear', sb, previousValue);
16619
+ sb.$el.trigger('searchbar:clear', previousValue);
16620
+ sb.emit('local::clear searchbarClear', sb, previousValue);
16611
16621
  }
16612
16622
  function disableOnClick(e) {
16613
16623
  sb.disable(e);
@@ -16680,15 +16690,16 @@
16680
16690
  }
16681
16691
  const previousQuery = sb.value;
16682
16692
  sb.$inputEl.val('').trigger('change').focus();
16683
- sb.$el.trigger('searchbar-new:clear', previousQuery);
16684
- sb.emit('local::clear searchbarNewClear', sb, previousQuery);
16693
+ sb.$el.trigger('searchbar:clear', previousQuery);
16694
+ sb.emit('local::clear searchbarClear', sb, previousQuery);
16685
16695
  return sb;
16686
16696
  }
16687
16697
  setDisableButtonMargin() {
16688
16698
  const sb = this;
16689
16699
  if (sb.expandable) return;
16690
16700
  const app = sb.app;
16691
- sb.$disableButtonEl.transition(0).show();
16701
+ sb.$disableButtonEl.transition(0);
16702
+ sb.$disableButtonEl.css('display', 'flex');
16692
16703
  sb.$disableButtonEl.css(`margin-${app.rtl ? 'left' : 'right'}`, `${-sb.disableButtonEl.offsetWidth}px`);
16693
16704
  /* eslint no-underscore-dangle: ["error", { "allow": ["_clientLeft"] }] */
16694
16705
  sb._clientLeft = sb.$disableButtonEl[0].clientLeft;
@@ -16740,8 +16751,8 @@
16740
16751
  }
16741
16752
  }
16742
16753
  if (sb.$hideOnEnableEl) sb.$hideOnEnableEl.addClass('hidden-by-searchbar-new');
16743
- sb.$el.trigger('searchbar-new:enable');
16744
- sb.emit('local::enable searchbarNewEnable', sb);
16754
+ sb.$el.trigger('searchbar:enable');
16755
+ sb.emit('local::enable searchbarEnable', sb);
16745
16756
  }
16746
16757
  let needsFocus = false;
16747
16758
  if (setFocus === true) {
@@ -16782,9 +16793,10 @@
16782
16793
  if (sb.expandable) {
16783
16794
  const $navbarEl = sb.$el.parents('.navbar-new');
16784
16795
  const $pageContentEl = sb.$pageEl && sb.$pageEl.find('.page-content');
16796
+ const $transitionTargetEl = app.theme === 'md' ? sb.$el : sb.$el.find('.searchbar-new-input-wrap');
16785
16797
  if ($navbarEl.hasClass('navbar-new-large') && $pageContentEl.length) {
16786
16798
  const $titleLargeEl = $navbarEl.find('.title-large');
16787
- sb.$el.transitionEnd(() => {
16799
+ $transitionTargetEl.transitionEnd(() => {
16788
16800
  $pageContentEl.removeClass('with-searchbar-new-expandable-closing');
16789
16801
  });
16790
16802
  if ($navbarEl.hasClass('navbar-new-large') && $navbarEl.hasClass('navbar-new-large-collapsed') && $titleLargeEl.length) {
@@ -16802,12 +16814,12 @@
16802
16814
  }
16803
16815
  if (app.theme === 'md' && $navbarEl.length) {
16804
16816
  $navbarEl.removeClass('with-searchbar-new-expandable-enabled with-searchbar-new-expandable-enabled-no-transition').addClass('with-searchbar-new-expandable-closing');
16805
- sb.$el.transitionEnd(() => {
16817
+ $transitionTargetEl.transitionEnd(() => {
16806
16818
  $navbarEl.removeClass('with-searchbar-new-expandable-closing');
16807
16819
  });
16808
16820
  } else {
16809
16821
  $navbarEl.removeClass('with-searchbar-new-expandable-enabled with-searchbar-new-expandable-enabled-no-transition').addClass('with-searchbar-new-expandable-closing');
16810
- sb.$el.transitionEnd(() => {
16822
+ $transitionTargetEl.transitionEnd(() => {
16811
16823
  $navbarEl.removeClass('with-searchbar-new-expandable-closing');
16812
16824
  });
16813
16825
  if (sb.$pageEl) {
@@ -16824,8 +16836,8 @@
16824
16836
  sb.enabled = false;
16825
16837
  sb.$inputEl.blur();
16826
16838
  if (sb.$hideOnEnableEl) sb.$hideOnEnableEl.removeClass('hidden-by-searchbar-new');
16827
- sb.$el.trigger('searchbar-new:disable');
16828
- sb.emit('local::disable searchbarNewDisable', sb);
16839
+ sb.$el.trigger('searchbar:disable');
16840
+ sb.emit('local::disable searchbarDisable', sb);
16829
16841
  return sb;
16830
16842
  }
16831
16843
  toggle() {
@@ -16884,11 +16896,11 @@
16884
16896
  }
16885
16897
  }
16886
16898
  if (sb.params.customSearch) {
16887
- $el.trigger('searchbar-new:search', {
16899
+ $el.trigger('searchbar:search', {
16888
16900
  query,
16889
16901
  previousQuery: sb.previousQuery
16890
16902
  });
16891
- sb.emit('local::search searchbarNewSearch', sb, query, sb.previousQuery);
16903
+ sb.emit('local::search searchbarSearch', sb, query, sb.previousQuery);
16892
16904
  return sb;
16893
16905
  }
16894
16906
  let foundItems = [];
@@ -16899,11 +16911,11 @@
16899
16911
  sb.virtualList.resetFilter();
16900
16912
  if ($notFoundEl) $notFoundEl.hide();
16901
16913
  if ($foundEl) $foundEl.show();
16902
- $el.trigger('searchbar-new:search', {
16914
+ $el.trigger('searchbar:search', {
16903
16915
  query,
16904
16916
  previousQuery: sb.previousQuery
16905
16917
  });
16906
- sb.emit('local::search searchbarNewSearch', sb, query, sb.previousQuery);
16918
+ sb.emit('local::search searchbarSearch', sb, query, sb.previousQuery);
16907
16919
  return sb;
16908
16920
  }
16909
16921
  vlQuery = sb.params.removeDiacritics ? removeDiacritics$1(query) : query;
@@ -16986,12 +16998,12 @@
16986
16998
  if (isVirtualList && sb.virtualList) {
16987
16999
  sb.virtualList.filterItems(foundItems);
16988
17000
  }
16989
- $el.trigger('searchbar-new:search', {
17001
+ $el.trigger('searchbar:search', {
16990
17002
  query,
16991
17003
  previousQuery: sb.previousQuery,
16992
17004
  foundItems
16993
17005
  });
16994
- sb.emit('local::search searchbarNewSearch', sb, query, sb.previousQuery, foundItems);
17006
+ sb.emit('local::search searchbarSearch', sb, query, sb.previousQuery, foundItems);
16995
17007
  return sb;
16996
17008
  }
16997
17009
  init() {
@@ -17002,8 +17014,8 @@
17002
17014
  }
17003
17015
  destroy() {
17004
17016
  const sb = this;
17005
- sb.emit('local::beforeDestroy searchbarNewBeforeDestroy', sb);
17006
- sb.$el.trigger('searchbar-new:beforedestroy');
17017
+ sb.emit('local::beforeDestroy searchbarBeforeDestroy', sb);
17018
+ sb.$el.trigger('searchbar:beforedestroy');
17007
17019
  sb.detachEvents();
17008
17020
  if (sb.$el[0]) {
17009
17021
  sb.$el[0].f7SearchbarNew = null;
@@ -17184,9 +17196,10 @@
17184
17196
  const {
17185
17197
  activeIndex,
17186
17198
  newActiveIndex,
17187
- linkEls
17199
+ linkEls,
17200
+ isMouse
17188
17201
  } = data;
17189
- if (activeIndex !== newActiveIndex) {
17202
+ if (activeIndex !== newActiveIndex && !isMouse) {
17190
17203
  linkEls[newActiveIndex].click();
17191
17204
  }
17192
17205
  highlightEl.style.transform = `translateX(${newActiveIndex * 100}%)`;
@@ -17216,12 +17229,13 @@
17216
17229
  if (e.type === 'touchstart') {
17217
17230
  e.preventDefault();
17218
17231
  }
17219
- if (e.pointerType !== 'touch') return;
17232
+ if (e.pointerType !== 'touch' && e.pointerType !== 'mouse') return;
17220
17233
  if (!el) return;
17221
17234
  if (e.type === 'pointerdown') {
17222
17235
  data.linkEls = el.querySelectorAll('.tab-link');
17223
17236
  data.rect = toolbarPaneEl.getBoundingClientRect();
17224
17237
  data.touched = true;
17238
+ data.isMouse = e.pointerType === 'mouse';
17225
17239
  setHighlightOnTouch(data, e);
17226
17240
  startAnimation(data);
17227
17241
  }
@@ -17238,17 +17252,29 @@
17238
17252
  stopAnimation(data);
17239
17253
  }
17240
17254
  };
17255
+ el.f7ToolbarNewOnPointerMove = e => {
17256
+ const highlightData = el.f7ToolbarNewHighlightData;
17257
+ if (e.pointerType === 'mouse' && highlightData && highlightData.touched) {
17258
+ el.f7ToolbarNewOnPointer(e);
17259
+ }
17260
+ };
17261
+ el.f7ToolbarNewOnPointerUp = e => {
17262
+ const highlightData = el.f7ToolbarNewHighlightData;
17263
+ if (e.pointerType === 'mouse' && highlightData && highlightData.touched) {
17264
+ el.f7ToolbarNewOnPointer(e);
17265
+ }
17266
+ };
17241
17267
  el.addEventListener('touchstart', el.f7ToolbarNewOnPointer, {
17242
17268
  passive: false
17243
17269
  });
17244
17270
  el.addEventListener('pointerdown', el.f7ToolbarNewOnPointer, {
17245
17271
  passive: false
17246
17272
  });
17247
- document.addEventListener('pointermove', el.f7ToolbarNewOnPointer, {
17248
- passive: false
17273
+ document.addEventListener('pointermove', el.f7ToolbarNewOnPointerMove, {
17274
+ passive: true
17249
17275
  });
17250
- document.addEventListener('pointerup', el.f7ToolbarNewOnPointer, {
17251
- passive: false
17276
+ document.addEventListener('pointerup', el.f7ToolbarNewOnPointerUp, {
17277
+ passive: true
17252
17278
  });
17253
17279
  document.addEventListener('pointercancel', el.f7ToolbarNewOnPointer, {
17254
17280
  passive: false
@@ -17259,10 +17285,16 @@
17259
17285
  const document = getDocument$1();
17260
17286
  el.removeEventListener('touchstart', el.f7ToolbarNewOnPointer);
17261
17287
  el.removeEventListener('pointerdown', el.f7ToolbarNewOnPointer);
17262
- document.removeEventListener('pointermove', el.f7ToolbarNewOnPointer);
17263
- document.removeEventListener('pointerup', el.f7ToolbarNewOnPointer);
17288
+ if (el.f7ToolbarNewOnPointerMove) {
17289
+ document.removeEventListener('pointermove', el.f7ToolbarNewOnPointerMove);
17290
+ }
17291
+ if (el.f7ToolbarNewOnPointerUp) {
17292
+ document.removeEventListener('pointerup', el.f7ToolbarNewOnPointerUp);
17293
+ }
17264
17294
  document.removeEventListener('pointercancel', el.f7ToolbarNewOnPointer);
17265
17295
  el.f7ToolbarNewOnPointer = null;
17296
+ el.f7ToolbarNewOnPointerMove = null;
17297
+ el.f7ToolbarNewOnPointerUp = null;
17266
17298
  el.f7ToolbarNewHighlightData = null;
17267
17299
  };
17268
17300
 
@@ -17487,6 +17519,26 @@
17487
17519
  }
17488
17520
  };
17489
17521
 
17522
+ var SubnavbarNew = {
17523
+ name: 'subnavbar-new',
17524
+ on: {
17525
+ pageInit(page) {
17526
+ if (page.$navbarEl && page.$navbarEl.length && page.$navbarEl.find('.subnavbar-new').length) {
17527
+ page.$el.addClass('page-with-subnavbar-new');
17528
+ }
17529
+ if (page.$navbarNewEl && page.$navbarNewEl.length && page.$navbarNewEl.find('.subnavbar-new').length) {
17530
+ page.$el.addClass('page-with-subnavbar-new');
17531
+ }
17532
+ const $innerSubnavbars = page.$el.find('.subnavbar-new').filter(subnavbarEl => {
17533
+ return $(subnavbarEl).parents('.page')[0] === page.$el[0];
17534
+ });
17535
+ if ($innerSubnavbars.length) {
17536
+ page.$el.addClass('page-with-subnavbar-new');
17537
+ }
17538
+ }
17539
+ }
17540
+ };
17541
+
17490
17542
  let Dialog$1 = class Dialog extends Modal$1 {
17491
17543
  constructor(app, params) {
17492
17544
  const extendedParams = extend$3({
@@ -51911,7 +51963,7 @@
51911
51963
  // UMD_ONLY_END
51912
51964
 
51913
51965
  Router.use([RouterComponentLoaderModule]);
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]);
51966
+ 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, SubnavbarNew, 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]);
51915
51967
 
51916
51968
  return Framework7;
51917
51969