From f694300f5555b4122e749d4ea1b30663665f9148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=CC=81=20Rio?= Date: Thu, 16 Apr 2026 10:32:47 +0100 Subject: [PATCH 01/13] feat(tab-bar): Adding hide-on-scroll prop for ionic theme --- core/api.txt | 1 + core/src/components.d.ts | 11 +++ .../src/components/tab-bar/tab-bar.ionic.scss | 24 ++++++ core/src/components/tab-bar/tab-bar.tsx | 80 ++++++++++++++++++- packages/angular/src/directives/proxies.ts | 4 +- .../standalone/src/directives/proxies.ts | 4 +- 6 files changed, 118 insertions(+), 6 deletions(-) diff --git a/core/api.txt b/core/api.txt index e4e1ca4d603..43e1b6b7192 100644 --- a/core/api.txt +++ b/core/api.txt @@ -2400,6 +2400,7 @@ ion-tab,method,setActive,setActive() => Promise ion-tab-bar,shadow ion-tab-bar,prop,color,"danger" | "dark" | "light" | "medium" | "primary" | "secondary" | "success" | "tertiary" | "warning" | string & Record | undefined,undefined,false,true ion-tab-bar,prop,expand,"compact" | "full",'full',false,false +ion-tab-bar,prop,hideOnScroll,boolean,false,false,false ion-tab-bar,prop,mode,"ios" | "md",undefined,false,false ion-tab-bar,prop,selectedTab,string | undefined,undefined,false,false ion-tab-bar,prop,shape,"rectangular" | "round" | "soft" | undefined,undefined,false,false diff --git a/core/src/components.d.ts b/core/src/components.d.ts index ecbdb7475c6..f5e9071baac 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -3970,6 +3970,11 @@ export namespace Components { * @default 'full' */ "expand": 'compact' | 'full'; + /** + * If `true`, the tab bar will be hidden when the user scrolls down and shown when the user scrolls up. Only applies when the theme is `"ionic"` and `expand` is `"compact"`. + * @default false + */ + "hideOnScroll": boolean; /** * The mode determines the platform behaviors of the component. */ @@ -10057,6 +10062,11 @@ declare namespace LocalJSX { * @default 'full' */ "expand"?: 'compact' | 'full'; + /** + * If `true`, the tab bar will be hidden when the user scrolls down and shown when the user scrolls up. Only applies when the theme is `"ionic"` and `expand` is `"compact"`. + * @default false + */ + "hideOnScroll"?: boolean; /** * The mode determines the platform behaviors of the component. */ @@ -11298,6 +11308,7 @@ declare namespace LocalJSX { interface IonTabBarAttributes { "color": Color; "selectedTab": string; + "hideOnScroll": boolean; "translucent": boolean; "expand": 'compact' | 'full'; "shape": 'soft' | 'round' | 'rectangular'; diff --git a/core/src/components/tab-bar/tab-bar.ionic.scss b/core/src/components/tab-bar/tab-bar.ionic.scss index 1253e49c334..a375f4bc7c0 100644 --- a/core/src/components/tab-bar/tab-bar.ionic.scss +++ b/core/src/components/tab-bar/tab-bar.ionic.scss @@ -70,10 +70,15 @@ position: absolute; + // stylelint-disable-next-line property-disallowed-list + left: 50%; + align-self: center; width: fit-content; + transform: translateX(calc(-50%)); + contain: content; } @@ -85,6 +90,25 @@ bottom: calc(globals.$ion-space-400 + var(--ion-safe-area-bottom, 0)); } +// Tab Bar Hide on Scroll +// -------------------------------------------------- + +:host(.tab-bar-hide-on-scroll) { + transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1); +} + +:host(.tab-bar-scroll-hidden) { + transform: translateY(calc(100% + var(--ion-safe-area-bottom, 0))) translateX(calc(-50%)); + + transition: transform 0.3s cubic-bezier(0.3, 1, 0.1, 1), opacity 0.3s cubic-bezier(0.3, 1, 0.1, 1); + + opacity: 0; +} + +:host([slot="top"].tab-bar-scroll-hidden) { + transform: translateY(-100%) translateX(calc(-50%)); +} + // Tab Bar Translucent // -------------------------------------------------- diff --git a/core/src/components/tab-bar/tab-bar.tsx b/core/src/components/tab-bar/tab-bar.tsx index c29ac90f08a..191acbb7987 100644 --- a/core/src/components/tab-bar/tab-bar.tsx +++ b/core/src/components/tab-bar/tab-bar.tsx @@ -1,5 +1,6 @@ import type { ComponentInterface, EventEmitter } from '@stencil/core'; -import { Component, Element, Event, Host, Prop, State, Watch, h } from '@stencil/core'; +import { Component, Element, Event, Host, Prop, State, Watch, h, readTask, writeTask } from '@stencil/core'; +import { findIonContent, getScrollElement } from '@utils/content'; import type { KeyboardController } from '@utils/keyboard/keyboard-controller'; import { createKeyboardController } from '@utils/keyboard/keyboard-controller'; import { createColorClasses } from '@utils/theme'; @@ -26,11 +27,17 @@ export class TabBar implements ComponentInterface { private keyboardCtrl: KeyboardController | null = null; private keyboardCtrlPromise: Promise | null = null; private didLoad = false; + private scrollEl?: HTMLElement; + private contentScrollCallback?: () => void; + private lastScrollTop = 0; + private scrollDirectionChangeTop = 0; @Element() el!: HTMLElement; @State() keyboardVisible = false; + @State() scrollHidden = false; + /** * The color to use from your application's color palette. * Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`. @@ -57,6 +64,13 @@ export class TabBar implements ComponentInterface { } } + /** + * If `true`, the tab bar will be hidden when the user scrolls down + * and shown when the user scrolls up. + * Only applies when the theme is `"ionic"` and `expand` is `"compact"`. + */ + @Prop() hideOnScroll = false; + /** * If `true`, the tab bar will be translucent. * Only applies when the theme is `"ios"` and the device supports @@ -108,6 +122,8 @@ export class TabBar implements ComponentInterface { tab: this.selectedTab, }); } + + this.setupHideOnScroll(); } async connectedCallback() { @@ -150,6 +166,64 @@ export class TabBar implements ComponentInterface { this.keyboardCtrl.destroy(); this.keyboardCtrl = null; } + + this.destroyHideOnScroll(); + } + + private setupHideOnScroll() { + const theme = getIonTheme(this); + if (theme !== 'ionic' || !this.hideOnScroll || this.expand !== 'compact') { + return; + } + + const footerEl = this.el.closest('ion-footer'); + const pageEl = footerEl?.closest('ion-page, .ion-page') ?? this.el.closest('ion-page, .ion-page'); + const contentEl = pageEl ? findIonContent(pageEl) : null; + + if (!contentEl) { + return; + } + + this.initScrollListener(contentEl); + } + + private async initScrollListener(contentEl: HTMLElement) { + const scrollEl = (this.scrollEl = await getScrollElement(contentEl)); + + const scrollThreshold = 10; + + this.contentScrollCallback = () => { + readTask(() => { + const scrollTop = scrollEl.scrollTop; + const isScrollingDown = scrollTop > this.lastScrollTop; + + if (isScrollingDown !== this.lastScrollTop > this.scrollDirectionChangeTop) { + this.scrollDirectionChangeTop = this.lastScrollTop; + } + + const delta = Math.abs(scrollTop - this.scrollDirectionChangeTop); + + if (delta >= scrollThreshold) { + const shouldHide = isScrollingDown && scrollTop > 0; + if (shouldHide !== this.scrollHidden) { + writeTask(() => { + this.scrollHidden = shouldHide; + }); + } + } + + this.lastScrollTop = scrollTop; + }); + }; + + scrollEl.addEventListener('scroll', this.contentScrollCallback, { passive: true }); + } + + private destroyHideOnScroll() { + if (this.scrollEl && this.contentScrollCallback) { + this.scrollEl.removeEventListener('scroll', this.contentScrollCallback); + this.contentScrollCallback = undefined; + } } private getShape(): string | undefined { @@ -169,7 +243,7 @@ export class TabBar implements ComponentInterface { } render() { - const { color, translucent, keyboardVisible, expand } = this; + const { color, translucent, keyboardVisible, scrollHidden, expand, hideOnScroll } = this; const theme = getIonTheme(this); const shape = this.getShape(); const shouldHide = keyboardVisible && this.el.getAttribute('slot') !== 'top'; @@ -182,6 +256,8 @@ export class TabBar implements ComponentInterface { [theme]: true, 'tab-bar-translucent': translucent, 'tab-bar-hidden': shouldHide, + 'tab-bar-hide-on-scroll': hideOnScroll, + 'tab-bar-scroll-hidden': scrollHidden, [`tab-bar-${expand}`]: true, [`tab-bar-${shape}`]: shape !== undefined, })} diff --git a/packages/angular/src/directives/proxies.ts b/packages/angular/src/directives/proxies.ts index fecc4aed2a8..af9d5e35525 100644 --- a/packages/angular/src/directives/proxies.ts +++ b/packages/angular/src/directives/proxies.ts @@ -2370,14 +2370,14 @@ export declare interface IonTab extends Components.IonTab {} @ProxyCmp({ - inputs: ['color', 'expand', 'mode', 'selectedTab', 'shape', 'theme', 'translucent'] + inputs: ['color', 'expand', 'hideOnScroll', 'mode', 'selectedTab', 'shape', 'theme', 'translucent'] }) @Component({ selector: 'ion-tab-bar', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['color', 'expand', 'mode', 'selectedTab', 'shape', 'theme', 'translucent'], + inputs: ['color', 'expand', 'hideOnScroll', 'mode', 'selectedTab', 'shape', 'theme', 'translucent'], }) export class IonTabBar { protected el: HTMLIonTabBarElement; diff --git a/packages/angular/standalone/src/directives/proxies.ts b/packages/angular/standalone/src/directives/proxies.ts index 41e27889758..3bac5ccbe72 100644 --- a/packages/angular/standalone/src/directives/proxies.ts +++ b/packages/angular/standalone/src/directives/proxies.ts @@ -2113,14 +2113,14 @@ export declare interface IonTab extends Components.IonTab {} @ProxyCmp({ defineCustomElementFn: defineIonTabBar, - inputs: ['color', 'expand', 'mode', 'selectedTab', 'shape', 'theme', 'translucent'] + inputs: ['color', 'expand', 'hideOnScroll', 'mode', 'selectedTab', 'shape', 'theme', 'translucent'] }) @Component({ selector: 'ion-tab-bar', changeDetection: ChangeDetectionStrategy.OnPush, template: '', // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property - inputs: ['color', 'expand', 'mode', 'selectedTab', 'shape', 'theme', 'translucent'], + inputs: ['color', 'expand', 'hideOnScroll', 'mode', 'selectedTab', 'shape', 'theme', 'translucent'], standalone: true }) export class IonTabBar { From b7c8847eb4295dd446e0c1391047160fdaa83be1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=CC=81=20Rio?= Date: Thu, 16 Apr 2026 10:34:00 +0100 Subject: [PATCH 02/13] feat(tab-bar): Adding hide-on-scroll new prop sample --- .../tab-bar/test/hide-on-scroll/index.html | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 core/src/components/tab-bar/test/hide-on-scroll/index.html diff --git a/core/src/components/tab-bar/test/hide-on-scroll/index.html b/core/src/components/tab-bar/test/hide-on-scroll/index.html new file mode 100644 index 00000000000..7e75f033507 --- /dev/null +++ b/core/src/components/tab-bar/test/hide-on-scroll/index.html @@ -0,0 +1,74 @@ + + + + + Tab Bar - Hide on Scroll + + + + + + + + + + + +
+ +
+

Scroll down to hide the tab bar, scroll up to show it.

+

Requirements:

+
    +
  • Theme must be set to ionic
  • +
  • expand must be set to compact
  • +
  • A sibling ion-content must exist for scroll detection
  • +
+
+
+ + + + + + Home + + + + + Favorites + + + + + Search + + + + + Settings + + + +
+
+
+ + + + From 265accb5f806f4689329ed9cb7e428efaa786df5 Mon Sep 17 00:00:00 2001 From: ionitron Date: Thu, 16 Apr 2026 10:08:04 +0000 Subject: [PATCH 03/13] chore(): add updated snapshots --- ...ionic-md-ltr-light-Mobile-Chrome-linux.png | Bin 2689 -> 2104 bytes ...onic-md-ltr-light-Mobile-Firefox-linux.png | Bin 4198 -> 3209 bytes ...ionic-md-ltr-light-Mobile-Safari-linux.png | Bin 3583 -> 2693 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/core/src/components/tab-bar/test/expand/tab-bar.e2e.ts-snapshots/tab-bar-expand-compact-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/tab-bar/test/expand/tab-bar.e2e.ts-snapshots/tab-bar-expand-compact-ionic-md-ltr-light-Mobile-Chrome-linux.png index c4e13cf4adf9bef638dd84c8e19d81149c0e36f1..c57299ddb09ae1899a6a6a2cbdd535f8f0b7f49e 100644 GIT binary patch delta 2064 zcmbVN`#;kS8(!r})JWn(Hky!At=T-7vLY6umxhuWr9CPTA z$P}w=>9EC`SeiptPNjH7OygPq!u#WW-`5YURxUXT=;5n_wHSDb93&Fp?ksKzkE5@eTkg|*->Z*=jP!t zfnie>7~pP0gFt0iBqDrzp>b(rf|nf=9UW?PzL{?a&!4*_c7(p%1u^upd`>Ju&P5*Gd4OMU zQpPpfhJgonOF9x*_6a>yFcb>ihQk}H&`J^pluzw+R`NJ+3E$Gy$tFy_slbetcbtE^ z+33#UWba0!D^?Lh!v4LpGi9av<{`GfzKuNcDEm|Ejw4{`3A=j6#VRZuvNVzJ^M{v6 zX^L?d4}5r@n~pJQn<$KO`FcXf5e3^tnG-oy$I zJ^E)0mHUcsi{3F7aw`g(koTyqO$(V_jJLdv6*#oFwZU4?94!c|VI4b$^FmzKkxJME z@r0U3Jkb8G!H*?nSk-zKguP+1HuYt%nCt;F0|Nt#;K4y{(eFAEr0E31E%#vrGWlVZ z+q2(Hy~RG(=r~}KU!tOE(s-uDaX(UVpCw~84ro#fkw~MRiQ9YB1dq17 zpz>|vM!Cwy#szSsbb2pu59OjD(Iue=h<`;hb1yphZeyF3bf1~$%>Lj>{t;>8VqINI z_CXE|Yk*0UjE)BR`8|vq>po$?&5`z8S6?_Qd7U5XTFt+thJiTc`uh1v(?8nm)u=ak zLd0;3aIXULUjf$6vTRN@u7k&0k*|@brweti$%P!HJUTuD?Cl~RTsv(kDF8k(SR3=@ zagGtR+?wrB@b%mp_jVb}EB5q0%8s&(DrITpw*FGZsdouhw;su+E`J~6jJ3ypxT$C3 zNN`A+2iXO4(xCJ?g^e$$^@#|V+21bPw*K@z0;;eU4_>d-*S8*)NMDzgmVT44MMFb2 zil`qr*M5?2>s8(fBrQzH*M7#t#3=MRq{@g@hf|gt+3eNT#i_+fffKXpc!9!kFziam zX)>AYDB3^izA&&3YU6wp|@x! z?(^Sgu@+413v0$WfPr;1O$TIizueg&{0)63$P$Pe=}ZKJ!P4G5O#C=VmaGW1LeL1C zu>Y^V<>lq}2M;10xOU9f{C0WBP zq`BeGbhic;J+x$I8iS)P-E3nAsNERrPSrz(=g`VNJd6wOh!0UTkub?Www4L-fLk9$ zwWq{`0|S+P*C$|knnHxjZIpsEalqhVy*UZLChb+n5ohk@K2Bbo6tb|+uJhtaA|wD3#P(r~{9do9|1Z0Ls^d>XX2yQ;o9;(YX)caAq8ml+$G zSxrUGKatE(wEr48KT&G4pm{ZcxU<~VSjkJvt%Wy$s^~jKZ3OK7PYRy>XST`$yQ#)c z$3ydS!hm~S8^}fm@j$?gxkhJ+D6!)h_gQznrU&QJYPuI~=Y`N8Vddkxro!T^0>)>8 zP}1;T)N-M>H0Thftl#T<2qSw}O?|6iYO(mEO_zD{;EQkWc?ie)jHtV6h@QOUG?6_k!E)H_{1*4Xqwt@XtGQ~sAoEN& z-HQ>A(S2VFnXIdkRPP)3i0P0>v<76LCd4lTm{Q;KvRTQJbqD3^z`R`-Lwu26cKOk{K+7 zu-;}c_G~4~_-WLtQY9;FF9~}8e~Fc>&l!bLo10JKJn4l{(->U_%OxJ}fC3KbRt71db}Kd@S7*=T&5q~O{{`yR4zK_K delta 2654 zcmbW3S5y;-5{6M$Sb7&i5tI-C6)6S`O-ks58bp+`(wkCMLNO~PA`79Ih!jae2#~NY zB?8hfp_3pg1f&H7q$wp70TH~p_w~NrhdF1?oGB0Ue{<%o=o6_NWf^{58>lHfuK3%l zp$K~~`97ph`JU|SUV5&9BGQ{?31nShi<_GBIh$R(z2{9C-Y*y_S$@~HU!3qRsQ^Ok z81{|cY+7bP?iueGRL7KSI;GmO%MZ|Jz+iBbC%W!)Z6JxeQv|+!P8^+zJudkorn;aR5S?m`xM6&059z1w}gbPI$n0I!G(SQ8- zv3+PLG{BqIx_#haK2Vj3$APiy7d|*a zY`mWn*-;>lsBRi!?V1QuwR3o- z500Ae4xqmvmgiposk1o%XdIIr2y zzmK-z;pc~589X}qdC2NMBXCxUy*TiE5$G9s2`~D?vGg{m$f>ZR672?Pwq3d1j{Nm_ zq#V|1XWgyhuhciE-Di^Of{>jcN>?CY!eUS=8vimQI3&chDtK*_+*xG}rSk!DvWlP3 z<&knLKyxy%)TcVyqdibxiC@E~eR^uDC2&aAjc3;+_tZo`;4Pz8jA?`oT~d*;-JyhO zYq?r!`AmkBbF%4<;Z7|2( z+goE+DnOSqx&j=MH3tpW{q=|8xk{5rCiB6UL9AQV%`63jn>YzTj!;2MOAEO)vf#O& zob7`okd~=qLDUkXfW6RHeXEuR)Tuik(-S1y#2648*=J!+bu~H73gr@S@~wXR)|zyr zTeyXya`&ScjrV70S@8338EU2Dj2qGvzSaq_rPiTtz#xWXmtQ!W%y>&m?m{kjF2QpI zY*O;gBm~;&Eca_To#@?x=NH%4*M)?Hj=rx`o5hHavd?Ow=$+>&RM+p5$0 z`^37+GS+L#qh)OjPtSmSU&3p#wt7sy*$HRRgO9P-Vj-d7#)$_t_of<(^dc;m5)Zb{ zN4Fz(EOF}`&Gw`2h7Jm9=#abuA!8v9P%pk3c&<-1I^v8K)HoBTj`oWW2dFHUp7qoU@Pmax#!t*cYipy81U$EnH5MbcHD_Hb4!fGYM>SiuYs8NW4W zdd;xm{tWU5XRm&JXy>#!?ThD84wgH6H;^atkZ5247bxuu3ZN78Zuh?7oBK1(y}i9r z3%v^0Bf0LCqtWQi*^bTWCW#ShTU*=f*RN3m7n&Fw7{GJ*ajubz*dAs2Jksi)CX>E12v-2OXmPL{+7>Q|O)Y7?fMQiSL{CRDq^3gNQ)u*?> z#~heH5UpG%r<-Dy=X?I*a9^SmB)lfu`q$O2GC42 z`Sk3)3F|m3)HqWebm)7t^ z#&HO@c@BaV>AofqPVK#WCUNoXmD{PGvERRc$6j)G@tD(g^?m;@3qZG7#d|jgS$>KQ zVs_ruP~nL_Lbc5aD!)0?(nu!r{UUZf6&WrBhixwou&U!Zr*(a{LlH(&FnEaP3f3gF zA$M0kd>yYQl2gSD)TKR_7UNPXS#)I1OrP6VEAnmvqaT%>{OK@Xrk4j!i-d>Q$je$O zk7diYXZ=oEVGn5CLTR0%naDL2LwJ4}P}q|KJWmkfIIZ6(CNem)G9jGlw*T0DDI7OD z-Z#_oPG%sANO7|(W_#J%`m2gXh`NIoEj#Mu@5aZ0)2Fp z8f9!ni#bLzEg~~r{Vw)o;LFZp64802a{q93i!^)TN)3GVF*ZtL!gS?mO`de^8mZFB z_HqCiPhs!%t@8hv4XGhj>Vq*Z5kZDvkCiv?t!%qmE^w>&tjVR7xKtATMa7gQlpU2v z3Tz46*S%cL9c{j-0)8{B;y0=*y?B!euz|}Dqb)W;Wca@S^>F{O z7-iR;m|LC9{w_l8?qzcuRNuj-B6}^tb)GqZ%Vc_UI7uNW%#6g=yyJCz>5>T13LFY zu>=U%%05K%ol#Gjw^ecT~Wqeqx4j@p8b(0>ScOMemc9H&dDUELeJfAB3KW6a1 sMaw>1TwK3?ZBWw(IS$W%UPo>&Tj37HaxT*jPK3+G!U6h^*&oUO25TcGUjP6A diff --git a/core/src/components/tab-bar/test/expand/tab-bar.e2e.ts-snapshots/tab-bar-expand-compact-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/tab-bar/test/expand/tab-bar.e2e.ts-snapshots/tab-bar-expand-compact-ionic-md-ltr-light-Mobile-Firefox-linux.png index 87b1455219d09964b9a5abeb3885dcc790e38599..422536fbfa130e1902311e532af125cff2fd31ed 100644 GIT binary patch delta 3205 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 Date: Thu, 16 Apr 2026 12:29:58 +0100 Subject: [PATCH 04/13] fix(tab-bar): update position and animation based on requirements --- .../src/components/tab-bar/tab-bar.ionic.scss | 8 ++-- core/src/components/tab-bar/tab-bar.tsx | 48 ++++++++++++------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/core/src/components/tab-bar/tab-bar.ionic.scss b/core/src/components/tab-bar/tab-bar.ionic.scss index a375f4bc7c0..4e384416d25 100644 --- a/core/src/components/tab-bar/tab-bar.ionic.scss +++ b/core/src/components/tab-bar/tab-bar.ionic.scss @@ -94,15 +94,13 @@ // -------------------------------------------------- :host(.tab-bar-hide-on-scroll) { - transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1); + transition: transform 0.22s cubic-bezier(0.16, 1, 0.3, 1); } :host(.tab-bar-scroll-hidden) { - transform: translateY(calc(100% + var(--ion-safe-area-bottom, 0))) translateX(calc(-50%)); + transform: translateY(calc(100% + var(--ion-safe-area-bottom, 0) + globals.$ion-space-1000)) translateX(calc(-50%)); - transition: transform 0.3s cubic-bezier(0.3, 1, 0.1, 1), opacity 0.3s cubic-bezier(0.3, 1, 0.1, 1); - - opacity: 0; + transition: transform 0.35s cubic-bezier(0.3, 1, 0.1, 1); } :host([slot="top"].tab-bar-scroll-hidden) { diff --git a/core/src/components/tab-bar/tab-bar.tsx b/core/src/components/tab-bar/tab-bar.tsx index 191acbb7987..8fc1e5ecdd7 100644 --- a/core/src/components/tab-bar/tab-bar.tsx +++ b/core/src/components/tab-bar/tab-bar.tsx @@ -190,26 +190,15 @@ export class TabBar implements ComponentInterface { private async initScrollListener(contentEl: HTMLElement) { const scrollEl = (this.scrollEl = await getScrollElement(contentEl)); - const scrollThreshold = 10; - this.contentScrollCallback = () => { readTask(() => { const scrollTop = scrollEl.scrollTop; - const isScrollingDown = scrollTop > this.lastScrollTop; - - if (isScrollingDown !== this.lastScrollTop > this.scrollDirectionChangeTop) { - this.scrollDirectionChangeTop = this.lastScrollTop; - } - - const delta = Math.abs(scrollTop - this.scrollDirectionChangeTop); + const shouldHide = this.checkScrollStatus(scrollTop); - if (delta >= scrollThreshold) { - const shouldHide = isScrollingDown && scrollTop > 0; - if (shouldHide !== this.scrollHidden) { - writeTask(() => { - this.scrollHidden = shouldHide; - }); - } + if (shouldHide !== this.scrollHidden) { + writeTask(() => { + this.scrollHidden = shouldHide; + }); } this.lastScrollTop = scrollTop; @@ -226,6 +215,33 @@ export class TabBar implements ComponentInterface { } } + private checkScrollStatus(scrollTop: number): boolean { + // Always visible within the first 80px of scroll + const visibleZone = 80; + // Hides after 60px of continuous downward scrolling only, when scrolling up threashold should be 0px + const scrollThresholdHide = 60; + + if (scrollTop <= visibleZone) { + return false; + } + + const isScrollingDown = scrollTop > this.lastScrollTop; + const wasScrollingDown = this.lastScrollTop > this.scrollDirectionChangeTop; + + if (isScrollingDown !== wasScrollingDown) { + this.scrollDirectionChangeTop = this.lastScrollTop; + } + + const delta = Math.abs(scrollTop - this.scrollDirectionChangeTop); + const threshold = isScrollingDown ? scrollThresholdHide : 0; + + if (delta < threshold) { + return this.scrollHidden; + } + + return isScrollingDown; + } + private getShape(): string | undefined { const theme = getIonTheme(this); const { shape } = this; From 36ae3bcd015153fa686f29a9848b126464e6a52d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=CC=81=20Rio?= Date: Fri, 17 Apr 2026 21:24:44 +0100 Subject: [PATCH 05/13] feat(tab-bar): update to use new transition tokens --- core/package-lock.json | 2 +- core/package.json | 2 +- core/src/components/tab-bar/tab-bar.ionic.scss | 4 ++-- core/src/foundations/ionic.vars.scss | 2 ++ 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index 4701d5473c5..acc94762ab8 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -43,7 +43,7 @@ "fs-extra": "^9.0.1", "jest": "^29.7.0", "jest-cli": "^29.7.0", - "outsystems-design-tokens": "^1.3.7", + "outsystems-design-tokens": "^1.3.8", "playwright-core": "^1.58.2", "prettier": "^2.8.8", "rollup": "^2.26.4", diff --git a/core/package.json b/core/package.json index d2d39b13363..4f7d6a596cb 100644 --- a/core/package.json +++ b/core/package.json @@ -68,7 +68,7 @@ "fs-extra": "^9.0.1", "jest": "^29.7.0", "jest-cli": "^29.7.0", - "outsystems-design-tokens": "^1.3.7", + "outsystems-design-tokens": "^1.3.8", "playwright-core": "^1.58.2", "prettier": "^2.8.8", "rollup": "^2.26.4", diff --git a/core/src/components/tab-bar/tab-bar.ionic.scss b/core/src/components/tab-bar/tab-bar.ionic.scss index 4e384416d25..47578177fde 100644 --- a/core/src/components/tab-bar/tab-bar.ionic.scss +++ b/core/src/components/tab-bar/tab-bar.ionic.scss @@ -94,13 +94,13 @@ // -------------------------------------------------- :host(.tab-bar-hide-on-scroll) { - transition: transform 0.22s cubic-bezier(0.16, 1, 0.3, 1); + transition: transform globals.$ion-transition-time-200 globals.$ion-transition-curve-spring; } :host(.tab-bar-scroll-hidden) { transform: translateY(calc(100% + var(--ion-safe-area-bottom, 0) + globals.$ion-space-1000)) translateX(calc(-50%)); - transition: transform 0.35s cubic-bezier(0.3, 1, 0.1, 1); + transition: transform globals.$ion-transition-time-350 globals.$ion-transition-curve-base; } :host([slot="top"].tab-bar-scroll-hidden) { diff --git a/core/src/foundations/ionic.vars.scss b/core/src/foundations/ionic.vars.scss index 11d4ac240bf..939262cbe27 100644 --- a/core/src/foundations/ionic.vars.scss +++ b/core/src/foundations/ionic.vars.scss @@ -937,6 +937,7 @@ $ion-elevation-4: var(--token-elevation-4, 0px 3px 12px 0px rgba(0, 0, 0, 0.12), // Transition $ion-transition-curve-linear: var(--token-transition-curve-linear, linear); $ion-transition-curve-quick: var(--token-transition-curve-quick, cubic-bezier(0, 0, 0.2, 1)); +$ion-transition-curve-spring: var(--token-transition-curve-spring, cubic-bezier(0.16, 1, 0.3, 1)); $ion-transition-curve-base: var(--token-transition-curve-base, cubic-bezier(0.4, 0, 1, 1)); $ion-transition-curve-expressive: var(--token-transition-curve-expressive, cubic-bezier(0.4, 0, 0.2, 1)); $ion-transition-curve-bounce: var(--token-transition-curve-bounce, cubic-bezier(0.47, 0, 0.23, 1.38)); @@ -945,6 +946,7 @@ $ion-transition-time-100: var(--token-transition-time-100, 100ms); $ion-transition-time-150: var(--token-transition-time-150, 150ms); $ion-transition-time-200: var(--token-transition-time-200, 200ms); $ion-transition-time-300: var(--token-transition-time-300, 300ms); +$ion-transition-time-350: var(--token-transition-time-350, 350ms); $ion-transition-time-500: var(--token-transition-time-500, 500ms); $ion-transition-time-1000: var(--token-transition-time-1000, 1000ms); $ion-transition-time-1500: var(--token-transition-time-1500, 1500ms); From 86fd06cdad5917d84517fa7634f77c6c4490983a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=CC=81=20Rio?= Date: Fri, 17 Apr 2026 21:34:07 +0100 Subject: [PATCH 06/13] Update package-lock.json --- core/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index acc94762ab8..b30d0b3a1bc 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -8660,9 +8660,9 @@ } }, "node_modules/outsystems-design-tokens": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/outsystems-design-tokens/-/outsystems-design-tokens-1.3.7.tgz", - "integrity": "sha512-dwzFLuzJ1iyxc7OjNceYoxvKEz870ZaxsK257Gcn1pbTKogjypMTetlEJXoa+rosjDeksgHGr6dVgsBh3LBsYw==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/outsystems-design-tokens/-/outsystems-design-tokens-1.3.8.tgz", + "integrity": "sha512-hT2r9Crd7rn1ewG9hzx7bUA5AjxEdzFsaxzUJ11DqBW86aHmc2ImsCUkaavMlADmZ1g/ZHxV/eO5Bmy3lWKpmA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { From cacab99bedcea44091c75e4928c3876eaad53083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=CC=81=20Rio?= Date: Fri, 17 Apr 2026 21:37:25 +0100 Subject: [PATCH 07/13] fix(core): cast color name to a string in Sass interpolation to remove warnings --- core/src/css/ionic/core.ionic.scss | 2 +- core/src/themes/functions.color.scss | 35 +++++++++++++++------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/core/src/css/ionic/core.ionic.scss b/core/src/css/ionic/core.ionic.scss index e0485b5ab17..0b48dca723e 100644 --- a/core/src/css/ionic/core.ionic.scss +++ b/core/src/css/ionic/core.ionic.scss @@ -12,7 +12,7 @@ @include globals.generate-color-variables(); @each $color-name, $value in globals.$ionic-colors { - .ion-color-#{$color-name} { + .ion-color-#{"" + $color-name} { @include globals.generate-color($color-name); } } diff --git a/core/src/themes/functions.color.scss b/core/src/themes/functions.color.scss index a48b8e18c09..c0217e1b002 100644 --- a/core/src/themes/functions.color.scss +++ b/core/src/themes/functions.color.scss @@ -142,6 +142,7 @@ $color-variants: map.get($hue-colors, $hue); $prefix: if($hue == "subtle", "-subtle", ""); + $name: "" + $color-name; // TODO(FW-6417) this @if can be removed if we add subtle colors for ios and md // Only proceed if the color variants exist @@ -156,21 +157,21 @@ $foreground: map.get($color-variants, foreground); // Generate CSS variables dynamically - --ion-color#{$prefix}-base: var(--ion-color-#{$color-name}#{$prefix}, #{$base}) !important; - --ion-color#{$prefix}-base-rgb: var(--ion-color-#{$color-name}#{$prefix}-rgb, #{$base-rgb}) !important; - --ion-color#{$prefix}-contrast: var(--ion-color-#{$color-name}#{$prefix}-contrast, #{$contrast}) !important; + --ion-color#{$prefix}-base: var(--ion-color-#{$name}#{$prefix}, #{$base}) !important; + --ion-color#{$prefix}-base-rgb: var(--ion-color-#{$name}#{$prefix}-rgb, #{$base-rgb}) !important; + --ion-color#{$prefix}-contrast: var(--ion-color-#{$name}#{$prefix}-contrast, #{$contrast}) !important; --ion-color#{$prefix}-contrast-rgb: var( - --ion-color-#{$color-name}#{$prefix}-contrast-rgb, + --ion-color-#{$name}#{$prefix}-contrast-rgb, #{$contrast-rgb} ) !important; - --ion-color#{$prefix}-shade: var(--ion-color-#{$color-name}#{$prefix}-shade, #{$shade}) !important; - --ion-color#{$prefix}-tint: var(--ion-color-#{$color-name}#{$prefix}-tint, #{$tint}) !important; + --ion-color#{$prefix}-shade: var(--ion-color-#{$name}#{$prefix}-shade, #{$shade}) !important; + --ion-color#{$prefix}-tint: var(--ion-color-#{$name}#{$prefix}-tint, #{$tint}) !important; // TODO(FW-6417): remove the fallback variable when the foreground variable is // required by all palettes for all themes: - // --ion-color#{$prefix}-foreground: var(--ion-color-#{$color-name}#{$prefix}-foreground, #{$foreground}) !important; + // --ion-color#{$prefix}-foreground: var(--ion-color-#{$name}#{$prefix}-foreground, #{$foreground}) !important; --ion-color#{$prefix}-foreground: var( - --ion-color-#{$color-name}#{$prefix}-foreground, - var(--ion-color-#{$color-name}#{$prefix}, #{$foreground}) + --ion-color-#{$name}#{$prefix}-foreground, + var(--ion-color-#{$name}#{$prefix}, #{$foreground}) ) !important; } } @@ -229,24 +230,26 @@ } @each $color-name, $value in $theme-colors { + $name: "" + $color-name; + @each $hue in (bold, subtle) { $colors: map.get($value, $hue); @if $colors != null { $prefix: if($hue == subtle, "-subtle", ""); - --ion-color-#{$color-name}#{$prefix}: #{map.get($colors, base)}; - --ion-color-#{$color-name}#{$prefix}-rgb: #{map.get($colors, base-rgb)}; - --ion-color-#{$color-name}#{$prefix}-contrast: #{map.get($colors, contrast)}; - --ion-color-#{$color-name}#{$prefix}-contrast-rgb: #{map.get($colors, contrast-rgb)}; - --ion-color-#{$color-name}#{$prefix}-shade: #{map.get($colors, shade)}; - --ion-color-#{$color-name}#{$prefix}-tint: #{map.get($colors, tint)}; + --ion-color-#{$name}#{$prefix}: #{map.get($colors, base)}; + --ion-color-#{$name}#{$prefix}-rgb: #{map.get($colors, base-rgb)}; + --ion-color-#{$name}#{$prefix}-contrast: #{map.get($colors, contrast)}; + --ion-color-#{$name}#{$prefix}-contrast-rgb: #{map.get($colors, contrast-rgb)}; + --ion-color-#{$name}#{$prefix}-shade: #{map.get($colors, shade)}; + --ion-color-#{$name}#{$prefix}-tint: #{map.get($colors, tint)}; // TODO(FW-6417): this "if" can be removed when foreground is defined for ios/md // themes. It should not be added until we want foreground to be required for // ios and md because this will be a breaking change, requiring users to add // `--ion-color-{color}-foreground` in order to override the default colors @if (map.get($colors, foreground)) { - --ion-color-#{$color-name}#{$prefix}-foreground: #{map.get($colors, foreground)}; + --ion-color-#{$name}#{$prefix}-foreground: #{map.get($colors, foreground)}; } } } From 2ca87d9e3634971895a9af3c01d9507751911d8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=CC=81=20Rio?= Date: Fri, 17 Apr 2026 21:41:07 +0100 Subject: [PATCH 08/13] fix(tab-bar): update hide-on-scroll test sample --- .../components/tab-bar/test/hide-on-scroll/index.html | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/src/components/tab-bar/test/hide-on-scroll/index.html b/core/src/components/tab-bar/test/hide-on-scroll/index.html index 7e75f033507..3529d0b9930 100644 --- a/core/src/components/tab-bar/test/hide-on-scroll/index.html +++ b/core/src/components/tab-bar/test/hide-on-scroll/index.html @@ -19,7 +19,8 @@
-
+
+

Scroll down to hide the tab bar, scroll up to show it.

Requirements:

    @@ -64,7 +65,13 @@ background: linear-gradient(to bottom, #e0f7fa, #80deea, #26c6da, #00acc1, #00838f); } - .spacer p { + .info { + position: fixed; + top: 30px; + left: 30px; + } + + .info p { margin-bottom: 12px; font-size: 16px; color: #333; From a11f04a3749c8872f9b3f3b6bdc3fef6af6d9c50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=CC=81=20Rio?= Date: Fri, 17 Apr 2026 21:50:21 +0100 Subject: [PATCH 09/13] fix(core): run lint --- core/src/themes/functions.color.scss | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/core/src/themes/functions.color.scss b/core/src/themes/functions.color.scss index c0217e1b002..6631469ed88 100644 --- a/core/src/themes/functions.color.scss +++ b/core/src/themes/functions.color.scss @@ -160,10 +160,7 @@ --ion-color#{$prefix}-base: var(--ion-color-#{$name}#{$prefix}, #{$base}) !important; --ion-color#{$prefix}-base-rgb: var(--ion-color-#{$name}#{$prefix}-rgb, #{$base-rgb}) !important; --ion-color#{$prefix}-contrast: var(--ion-color-#{$name}#{$prefix}-contrast, #{$contrast}) !important; - --ion-color#{$prefix}-contrast-rgb: var( - --ion-color-#{$name}#{$prefix}-contrast-rgb, - #{$contrast-rgb} - ) !important; + --ion-color#{$prefix}-contrast-rgb: var(--ion-color-#{$name}#{$prefix}-contrast-rgb, #{$contrast-rgb}) !important; --ion-color#{$prefix}-shade: var(--ion-color-#{$name}#{$prefix}-shade, #{$shade}) !important; --ion-color#{$prefix}-tint: var(--ion-color-#{$name}#{$prefix}-tint, #{$tint}) !important; // TODO(FW-6417): remove the fallback variable when the foreground variable is From e4f0395dea9f5f011d831a2e070a36f93bd82f2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=CC=81=20Rio?= Date: Tue, 21 Apr 2026 11:47:26 +0100 Subject: [PATCH 10/13] fix(tab-bar): make usage of position mixin --- core/src/components/tab-bar/tab-bar.ionic.scss | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/src/components/tab-bar/tab-bar.ionic.scss b/core/src/components/tab-bar/tab-bar.ionic.scss index 47578177fde..c093cbf57d4 100644 --- a/core/src/components/tab-bar/tab-bar.ionic.scss +++ b/core/src/components/tab-bar/tab-bar.ionic.scss @@ -1,4 +1,5 @@ @use "../../themes/ionic/ionic.globals.scss" as globals; +@use "../../themes/mixins" as mixins; @use "./tab-bar.common"; :host { @@ -67,12 +68,10 @@ /* Compact */ :host(.tab-bar-compact) { @include globals.padding(globals.$ion-space-100, globals.$ion-space-400); + @include mixins.position-horizontal(50%, null); position: absolute; - // stylelint-disable-next-line property-disallowed-list - left: 50%; - align-self: center; width: fit-content; From e25274099cdfc7dff8a1e0ec3a0fa26f2b33775e Mon Sep 17 00:00:00 2001 From: ionitron Date: Tue, 21 Apr 2026 10:53:02 +0000 Subject: [PATCH 11/13] chore(): add updated snapshots --- ...onic-md-rtl-light-Mobile-Firefox-linux.png | Bin 8183 -> 8107 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/core/src/components/tab-bar/test/basic/tab-bar.e2e.ts-snapshots/tab-bar-default-ionic-md-rtl-light-Mobile-Firefox-linux.png b/core/src/components/tab-bar/test/basic/tab-bar.e2e.ts-snapshots/tab-bar-default-ionic-md-rtl-light-Mobile-Firefox-linux.png index 25508f2990f0034b522888763563e99177161cad..829761ab8f453c9dc830c09cffbacd91e1f1786a 100644 GIT binary patch literal 8107 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 CqiuWu literal 8183 zcmVD^= z34{P4NN52PAPI!@x@r5)xydY>uz{UfvL%`GeS8~c=g!{y&z<@2saJFK;6WWq5uHv4 z{%1@KzcW0C|MvFrfmhY4aB*>gi>oV~oSekpPR`D7aBwK?=hWjW0xAM30xAOcK%k(Y z0C~B&$jQk;US1w@v|90ZN^&xi6BD7)X!KW*{^n1^x-JTYN3j^w@L)+G*=N&5l|7Z0s>4RDM?9)i-|#ELV}(c?nM@NC6SUOA!!9AH3(zm zz*<4AI(1O1Ze5`%sA5|PeO(g|C@VNwY`df{UgBIMa+DxEh zO@(<$joy$e+&3y4gE<^^+8#<#lnO+<#*!wY` zu(%$Vk8@XY1$nU4t?7ui%~g%JY-gc*b$dY|=Grw}zIgEtqTv1;Gdbx=;%)@N(MbWV zTf?hL6P;KAH!#F0*ie4SIHTC6i#8 z{-jkd9&|F9#;8O8PTp4e{fhXbwlvR`;GdP5iPK?W$R!82L<)D9n%FEAynnw~=Nlsm zcMlJ=YTFjhG9s7g-GC$_2wU(s{Q1XE*cbcj&0v>gjSm^j`Oj4 z^&2a}SausW{V-A7ua{JCSPl~DCFnsfzbFN05i!YFsl_kQX`B>w|mcg9yV2$<&VZ|oT>eUK0it;3HZHmGN+pdD|{;MPXv2c8S zB&6oz#Z?!Onwc+5j&D5G09{*nmZxD`bu6|x&y@he1abQ0N%3qNBM3nrOcKTj!jax& z?K^jt<)CH_A~881tm<1+cs&36VKYLG?#F`<{abWp_pV<+@U*K&(-m zI(}Se|3)>5!~6CXb6hhByxLxnEZO%mJ}HVt`KQEu}{N-e-)df_?ICAzhDfmdbgnwS{# zHEY)3*s)_6H*OsI_3I}v4+;vx=FOYo>FJ5Iv^2c-+G|+0Y?)O^g8P${QXn)6j;!n5 z*+m2u*sHLn{>-wo`02ncy#HcjOd4EE4CV73v6!(s624WOaVsSkJC?S=;CbOHN!*7U zZ7=g&$xt&$+Yck6Uc5>m1pe>Q8;0)91W$oee~LChqz-kQQpxaI3Lh&U65 zQBO`p`wm@;b?4-XBlzx{4dR$JNrHdhogCR5ma0V950RR#L#w9Fs89I-))dBk_3G6) zNh<5)$&=BoTeo7}2@Vd%`t|F@F>8|q_u&FLvM*f86JfFJ!?8!6Is8( ztD0L$h2fXh63#CC`m0Y7dGRbpkC}|N?K&InO4!K|B8tz^ym@P!JsWNnO+xCJuaBe1 zt&k(vZ{#EFY_9M>^zG_WYCRS?*Hn5gWB&2SA0r|n0#l|;L118@(MugYdKBx{trL#y zQxs8Q4Re#!F?Q|-1#3l6Mb~!DlyGNVl9h{nrnUf2E;Me!?Q8TBKkU1O zi7U=xKqnvk5t68C5^{kyINu)UxzgcAUbuibO1hJ@3Gr!25`5v#v=Zc^d~zf;-MV=Y zS}Jh0Vf_c>V~EDM@h{#plIh&p(}GZVbzlv1lZ35XrNTT4IU;Eh9a=hrGmEVyjQNTc zD-azWjj2Bnmreo`ZmKf0a?vYG? z9ZSM!A`~V@)hD6sNwMd7u4KeqEHH$$e_p%liQ>@Sy+V`Vc-i_58^XUq1KHP(Pt3Pk zE<|Q#2EJIo3OD0pG5(pUXwoFWr2ezUv1#Kcs9U!I#*Tjh?(QBYwY#4uaSnwaX%nUj zhq?wG(TW_10X<#mQ>GeX>JQ!Hyo`(ttX#Pgv9Yn3Hf}nrAP) z^b$NMdd?b>Ls{Cp4rxU=@?k6N zPR%^A<@FZuu5AAfdrRFbd!Oe@af-ft8PQj+2;a0I3ML6A2##h7?9oGf$`O9xlF5;3 z4M|H&#j2HWQp8FwCQg1;b|`Cf^d)Rq_dX?9Ib+7`#q`pW=cvCQW9GaD7b=xuid?#y zhqIURga*Nygf%2JH5CgMED$A%XU?1{JCya(rAtBs;ryGo-+mjFWd=vwuQ4A!nIjz8 z?ORZ0dUbho{(kkr)a%42=c4lqp~$APHrwBBjV=N5LRmx3rBS5QX}D3TnB!|Z!^cY{ zihE&SUgr6|#%b((*7m7flTaK4Q5@W}N00=U++cr%T;Y-%yu!7#Bqb$?=%mDicy#Ud z0EUeir>F}YDtjb&FMR!K;JN2#!ON?vqU$JaB*)|w5}qS!6ItuUmO!P4IXWqxYQOaD z+ZW@S`40h3Q=)dOnA5^ zR!x=XFO+bd{>epb_&pX)>bQ|JyDe%}vrnhJCFV(an&(RKx=x|$T)IP$#DSn79jg@G zdiPee4}>+sUO6G|!}s43<4;RVG0U&8Yv*?C`s){XdR3vMBS*YE{SAw16mr60C4WTE zPOhj@*);7#=_D!HjuYY*E?g)Mr%+12IevwofBqT#uL_lUVa;{XqD2E6#OzXG=7eZjD9_Z)ag%JNQvYRiiL+)63gDS30i? zNSipkf4^w1*}r?Yjw`zcv}&d3dI_97XW_smHZ%S3-;EeD^hqp#?{%|D;%_2~S+6a@ z_Fulmp`tl{fY)Jn84bik&%VHW6YZ6QnOP8%vGJLb!$Z=l(u|HdsI~mm5dQNK| z@WhD|?;r`r{GWgR0s9;br4f~tZ$%3b!)i(r!2u%R$##Tvr3oc=nHElQ*e>?ObK zy`}r?_3s0BkOWsY*nJ`iA!pNybtjN~77uptE>;0pB8k*rds({ccKdtfVV;`LUR60Sf!&>_Bn+XZnrV*H z9ecAyzXv~H-ItoNhiB)`o%r_KZ;fI;dh}@Y@84hloh^_Acg9xmH041yMiQU?9D{l5 zi<7c+t#>Ck!iz&|>o2X6gefQ&Kc~FRbNM4LY{3p}3T%QVEHqTtwqr-7*P-3dY>y;1 ze(@2K5)&|e<|2Kv8Hf3qqPgl&s%n~+tKkPp5wlCZ~l zE`Q{=TM$1$6LtBruAYM22wT=9)~#6~y2sHcy743(C_aSFUfA~xJnZ8F)uIkT>i*!w;+CiCjQ0^;kZ^Rwx~&{B%$F2k z`^y(nnTWVMy5FdAbFpWHp>P?GOOb_j_6^0)uO`)Q`j1iw%x-6IB=P#|uOp6X&zF>d zfB?*%J-gUp-jVJs)u=BiHEY%swVSLd_Cyk$ri9|c^{hMK>eIFgetoC7ndjz!&QYOuPZHOzT@i_M9Mfwk%_wQE45_SC>n1iKRZS9RDu26+YPMqT+e}>Y!b?Z9{{zXPc;xr}X7>bjVlSr^@U`AA( zS%4QcwkMJ}ej!~X&T&CaL-|)n?>qLcJ`$0JzmF#sJI|GhNIppCc4%VxB9`~#URmQB zjas`znl%S@zsYnPA zKR^?-bEmF%zkYUGD*SFY?Baz8Y*_yRUY+$8s#mXN^1WTW=v8#@`5+$Z|ES4r%sH_< zkpzb#Klj{ocAv+Fr?d<%uK)%sz$MzAo4}C%|MV)^3l* z?6r|l_n0slvSKIx_~Vb*PrJ8$@WBTrU*P)n>tcsT&L`r$B3l-ImiGq*6_P}ocI{Bj z&reZ*Ew$-T=&?iC_Wef8U$9(kHEN3314+o)bm&joB!|;Mc#|C7ET^o6OMi1!*C|t` zpi7r7CjFefkObq%c-rEoL#>_-!9$(A@u7_UtW}aQX?m7=5^sRT8)nH#@GS2n!J7_+ zhlN42XV)%Wb*ci}f_A4x?wj?S^SpIIPBylI^XHK1>Y8JG8DU$>!tBy@h4hoj1Nh$frEuMH=CU^L5 zBysa*EdKlLmsBd^8miZ*jS(ZqqjsHokTi*oox0;}#3|ZG*$X2cAFt2EK71$$dv^a$ ztMfc`pmQD`JVI=()(VzO%WhBW+|A6%{42vWE;AqBlLAJ9iFSwrmj_6tTKJVZsEl zzqO^!O$o^bI1-j4aAZ7fNlGILdQ7o&Yc$qwj}hG+*S`kdo>&-k!kR>Wfer<9(nTuY zF`|zjRy^MrPL3K}zm*3)6)+B<+9K+QE!o$PSkOF{s?(_4&^ZuJ}zCmzsu$bRNhYm%L9z9?$<|f{b zn074%?I1=Z@%P_49X;4h>4B}|?=SmVNy{ieR(A1H0kSV*LW9ysf(P^7J9AN|ZhiFa zHwfE*{*E4$0=)dn0zF9tv}l8loqAy3-oKEMo{E{TEfL@G4tD(q458iXeDUM9O&Idn z7zB3dWl@rFtE7RahiNbT6A`(Hy_t_T&79$1%QRv!0oqbexf@BWS+hovz_ZUji^GQx zn$P;pXNh9+VmsR{hvxkBO2ThYlUWk|j&v?(U9x^X7?%s#mXG;=$uRuqREL zWO0&+j>*UA3%RIW-4X3uC@*kn4!)(eEsZ2L>|h_lC44nE05_9z@apPFeEUXA4DRY9 zNaAE)&!m^|#kCvh!08W(9nry<2bvzJMNRv)ZI^q|4Z-Rqib$t0)Jo{42F zrI7@$T(3r7f-e>6t6bTWh~Q8B^~Xa(em zYuxa*rSs>{7xkE!B*u*!hkm4;=H%qy<(FT^3r{Lq|jK$A3M2F{&;p=$;7~0bp5mA}w`qFXi|F8ps&!nm(aSxJ6 zPfr&wdDarR=GccHekk4(GiJ;XB(ZPbJ~5wJe){Pr{QdXe`1s?GF>~fjp-qn+J63%6 z$}6wnkw+d83nW`739+{|IphoIlZ(F=k^~KcwTXsJnm|d;ge9EUcQZGg3Ok0N-8+z& z5Kl~n2t#TYw3Zrjwaz2QFW}peIEJrcRyucxl>vi;;vJr!`MB zCgfd*w5$PQKu=fdyJ_Si=LKbW?!8FjyYIde+5{5;<2QHiT%j41jBerwrf1Kd;vwU$ zOZk(9?-RFUQxmV`EEV09pRdDT2eoWv6*xLMl`W2P@h^=el87K?eHMv5VaZ6LzjN|* zSTL?WUK?FV5{A)DlUAG)`(M8~z5xc$3x_j}Q5q$;`~JFvyBykUt;5o{3mbKv& z+JJ}WE1OAY&6*`h!Z5mt34<3wYuB#D^UpsoUa)MwW?>D2H4c6bY@H-1cMc*yg0%?h zyJp|+-9nSlk=aH=1L{VDaFMwQktIw{rIAE>S}NXIG8+RQ9)@1M`y-hA48Q&QU!x>Z zQj@rGBL<_#OwvEYPEOA7A=8tkd=hd@O;RU=$uE&eeu=gLv;wYCwkzPfkpxe4HYu@B zft_1#z4cZxl8`hBu17z0>QsyzITF0N)uv6G#6#k2u!jkk4QDmpQY0a1WWL@G=+d_A zHM09f60_Ds;;&;#*s-(?>iW5&?h}VGZFpThNtDziygi+*h@w1+O+a4qGyX6J5Du$HtkAh3-K{CrIF2g!iV>{D5jXi?uCQy#6Y zzZUNW!A@(|BG@4veklX*eiM!PW9wn=llAmIiRDuok^i9p^VVO&C)1kZDROT2pG`iA ztb8mat>RWnE;jGHfgk?U3R_i@(BsRRY(zu^o__ji{V_I)Ub}V;Uw-+eIL_}I)}Gn_ zz^8Rk%Zy(*=(`+oz=qBbYS03TB%k7Z#Kl| zay|uX3Y<*W=YfGZ7IJ_h5?gDW@aWfZ{7@!a^k2aw#9NjMJLMMXOiGV zI*#~YO@bpkq{KSjUt;Ults=^UNoLHLF+zQ}6iHl+&cpf3c@)*8p{OR?3VoGuW|FuX zuPp}qqNf{RSZ`lUTy_o-(HR)f*$2ljq~XC1h4~b0Zu0SR!VPk0U$|Bn-L&$B!sw>h z1a@*?#D3a{sIt2wUL9E%&l3Tu(M`7@W|Cl&lA-Vmf7-NZ`26$FMHFA1I(5VgKOrGO zIH8#&Skv&QfFGXgOceYKNYPE~ygqW|ha|q_Yyp8Z^0$OgxUL9XV(p>mpI(#TP70F~Jw2=ouvgoeB2fZq zg(zpQ3Fer@M(k7T7ScJKW{}2&Q5>e16 zo1NT9wdzD_5)+20!UT~_33e(`+=&1Pubo0jm;)aa1|G z`Y2(=L{Y=n0i9ZzKA-Q$eNwNXB4DcsFfoLZNsP_L!pvmourBJf=HQ+^BD#r%wF$}G z#3aGTIU=P)V4xrjQ-v>+oNAd&Y*YJW?eo~gRMpFT4Z?67yej6^F~9s+qX=x{iYlI} zMq!8%M}i%roQOP%tElXuLC+2xI&AIPp#Hv!fb|i`BERDCqen#uyA-a=pKRvPYY|Ku zh9n_r6D5hlksQSB$sy@g#k9hD((ri&mzl+6V|_rZ)dR-d-OWMN2r3KVD4k=c3mw@k zY)Wb5??kJDviLRoxh9iBBsr=1A4|2Wq(M*uqLWGx_Hz@}o|YK`smaMWPG!JF>O)aJ zheQxUn~<~!{`=70y@h!aMQ?ILvy;#+=pvF<(Td`JYf^};9O27y9!0jc;xR=f@)K~$ z4Rieurr>>&N_NCh$qp7*vZe$yaz>pp&Z97;UzR?HtGiymk&km%aw)2$@Ym~636s`T z%0v|v0TlsyKB!v4*)wPKGL8C2|^+Xi46EtdX+Q7NXI2-HWLYxL}QAX=aLL^ zMVq4&WWgD)oLf=!6LK$Oljrlwol_P#d)L*a@SmlH%S@c7mt#s=;a%iD)u`r(T2!CN zooYmJ{#tqRTd?1Yv(Q{CcneQ^XDP9BxUWP z$VqKT5{!}b=F%TOyl>xapG47HyELK@(N9HA?S_;zRgdbK7-r5^^qXKSZBfxnYTxKKc^5x>rX|a$jd`4J{FiH@tNf?rZq&e{Cy@)~- z1*8izQTW%dFN(LRVp|AkX@wngBTuZZS&Pf1nmyVa+v=may(-^R+dg`BDi1)bV^9%L5l|7Z7XI~nx*~Ba)N<#e2n}x}6MbR?ieOof5wJ4j~Frr3k dBegU9{68`u#W|}?db9ul002ovPDHLkV1oJFux Date: Tue, 21 Apr 2026 12:04:31 +0100 Subject: [PATCH 12/13] fix(tab-bar): fix ionic theme test --- core/src/components/tab-bar/test/expand/tab-bar.e2e.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/components/tab-bar/test/expand/tab-bar.e2e.ts b/core/src/components/tab-bar/test/expand/tab-bar.e2e.ts index 5d391013ce5..2c27e998c4d 100644 --- a/core/src/components/tab-bar/test/expand/tab-bar.e2e.ts +++ b/core/src/components/tab-bar/test/expand/tab-bar.e2e.ts @@ -52,7 +52,7 @@ configs({ directions: ['ltr'], modes: ['ionic-md'] }).forEach(({ title, screensh .container { padding: 20px 10px; /* Size is needed because tab bar compact has position absolute and will not capture correctly. */ - width: 225px; + width: 100%; height: 96px; } From 737537d5958803a530f429c370190dd42902676e Mon Sep 17 00:00:00 2001 From: ionitron Date: Tue, 21 Apr 2026 11:08:35 +0000 Subject: [PATCH 13/13] chore(): add updated snapshots --- ...onic-md-rtl-light-Mobile-Firefox-linux.png | Bin 8107 -> 8183 bytes ...ionic-md-ltr-light-Mobile-Chrome-linux.png | Bin 2104 -> 2934 bytes ...onic-md-ltr-light-Mobile-Firefox-linux.png | Bin 3209 -> 5252 bytes ...ionic-md-ltr-light-Mobile-Safari-linux.png | Bin 2693 -> 3945 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/core/src/components/tab-bar/test/basic/tab-bar.e2e.ts-snapshots/tab-bar-default-ionic-md-rtl-light-Mobile-Firefox-linux.png b/core/src/components/tab-bar/test/basic/tab-bar.e2e.ts-snapshots/tab-bar-default-ionic-md-rtl-light-Mobile-Firefox-linux.png index 829761ab8f453c9dc830c09cffbacd91e1f1786a..25508f2990f0034b522888763563e99177161cad 100644 GIT binary patch literal 8183 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 CqiuWu diff --git a/core/src/components/tab-bar/test/expand/tab-bar.e2e.ts-snapshots/tab-bar-expand-compact-ionic-md-ltr-light-Mobile-Chrome-linux.png b/core/src/components/tab-bar/test/expand/tab-bar.e2e.ts-snapshots/tab-bar-expand-compact-ionic-md-ltr-light-Mobile-Chrome-linux.png index c57299ddb09ae1899a6a6a2cbdd535f8f0b7f49e..c756adab2294789ccbcd3f9d6283423130acea91 100644 GIT binary patch literal 2934 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 O0F&!xm?lG)`2Pav?tWkZ literal 2104 zcmbVN`9Bl>A7AoG)EtS2V^b4ym1gt7#EO_BiiVPNx#fe;W@ADvEmwSLa!qV==IA3w z$WhtSvBjELnsenU#Ye<6KI>oj{_uXiAFtzw=kxh^z8^ z3cgsZcJ{5B!fH0Rw^Jb6x7McIR=yfNc<{i`(2%)*^kKmFFJCVAUhB*T?Jux2Vdi3x zej#(^$kYe*^&HtT9uNEJrP8&X8CF(QWMr^TU=!OC!n*T=8m}F0Q*M4#-y&)K>pYjS z0t=6b$WtP9n)2Moy(X04g>O8)yfUE^y~#;yi|=>#Je8Mc5wq_V=MW9_YWGKE9yZjo zj9)}2CyO72ycue)Z)}W?j6CoK>NDG5wJ1w}MxtwG#^o1%THw|E{5F313BD2G+m|99 ze?kc8PJpOh>0)Oywm0NTG*6xV``5+_nM{81!XdsR_|*ZBw!85QTrq4Z{FLG`cAZ`+ zQ)e&IB%oK&5y!BK>n8)jVDMfvMpu?n95*a;PSIZ4HPF~(cTZO*cJ6ICaZ8ylxiw>qCp`f*yJkLMec}hR# z2Fp1d&ipIaGDO?5@d55fyFJ0mQH~94^>{Qa9dVhVOrLsJ<$H#PVn4 zU1Qtd*LyRBG}9Wl{E)YF#;(Dv4LuDY-Otaj&?LaWE%JRwoREao-u(!IB@iB0IzRsn z)PwJ7hKNa>Wf#jT>or_#wmk}y^cM*z<>RpLxAw4xQ~DJ~@p$}1SNy(ydCrsFFUf54 zmv$go zbqJXvn3(YQ_I?~Q+3R?SnJw(Ut*~-Q@Fp+Vsfv9~9tpC`@$&W-lBUfME7cu(ibFCB z(XV~;UZbw+hIorGKVP7BOU&()&ZT0~fF2I~k*y2Hg8WZ3#?EqCjBOYt zr+Ob4csr-srCr2ukG^n(xW6>5QbriQcc?_t8d!tWZijc0*S}BpO}0mWyrXGui?vBu z23Q94rGTkR5)ogL>*Apfi@zndX!+@74JbF`kKC@%(lQ$p2;Y>JlzbC(@$(P6tgxmBjg>3s&MDyWOJkp@ z&h-pxaPh)C5=~jV)7I%LpE22+tO*Ovrj&ks923wH8zfml>@55AR(dMy?liCF9DihZ zxMJ}33?x^X3w5{$mq5l1A9`G8h{tRR2Nck_g@-xaiL0|*1}ZZ3MYg(O)0F9v=9U(o zxcYN}k+M@@*1Db?_WWrgy@?t1LREQCy3BfE? zJe_4?O=$;KtV@u5g9^DpiaeF>CUy+f!?xyuZAC;@s zgJ06dpD*K$|-dfwAy5*7Wkt!DH>KK^Lg)cu9 zED%-y8V{T)F<()>8HZCWbJCS|S8;A;4a3U^&ygFfe9m&7pI@vrLhY*dR&!Op9yjb# z+XgTffn1>wU8c?@9Gq`E$$Z{hr|jByZIk3qQM?lTBcyCfU7uT&nNRzS317B;PBmQ# zmE1RQd6c|Tu0)&I7Ir1E!-NEA9 zwy6G$v5PHnCMGy^q1tT3$T5@CCvb47s@AcFIsOp$W!i{Ze^?@o0p-@2k3?UpVCX)J z*p#kdgdE0$AN?C&!T6k35Fyoc7VSnY0P9Do(-;o1CU&*~E@?R$HL)K+KAN(K5~)1Z zB>E6;7~eru2kW-mp)!_++%Z--3Sa*JO?P$!06RMbyjH8^{_pvH_;&+*PpDV;OT!OJ PDgY;Yw=+$)fu#Qc;UE`2 diff --git a/core/src/components/tab-bar/test/expand/tab-bar.e2e.ts-snapshots/tab-bar-expand-compact-ionic-md-ltr-light-Mobile-Firefox-linux.png b/core/src/components/tab-bar/test/expand/tab-bar.e2e.ts-snapshots/tab-bar-expand-compact-ionic-md-ltr-light-Mobile-Firefox-linux.png index 422536fbfa130e1902311e532af125cff2fd31ed..6a94d6471e2879e3f20a0e8ffb6ee9f53ad2fa91 100644 GIT binary patch literal 5252 zcmV-~6npE5P)Wz(+|1FtpI@0mi+*UhU@`2G-M1krMd!uMRgN&4FDu6+W}yxYyeb0 z3Iza+dS(J7DrpZmR1zN5j#>f0VtDfb5(8@vI1DT}s+&j!0E^+w3P=p6wE`dp6dP4d zyaE8lFeU~h2GF@xIJDZX0Zf7_A{1!VDYx3L2#K4_0!S1#OKnG7yZ*xRqWDG>sO_k0 z*WZX4iZla|C?e~Bg%0hYhpw-nbSQcP6d2lZ4_)5`m`KzGKtd!_SfU}F^^kRisesf_ zV21)jI`ARung$yK5}B<$gwxJlNAB`6ON!zuE0Eji<}S}B&k%J~Hp^hu0}>gfF70e% z%a6^MQ5qCA!3xAWiwZ}gsZ+pox>6^++itsww33!5Dr|eA+~rB@os@KdM4}~gI$TLv zlBhuf4_jT5`V-|s_7N#ybFLDH>w|$bx{%Z*l{05q(mE$49Uzfl$(&BrSC$VBIv8A$ zgRhPRDUfvv6=28P7g_WHLjsGO&OK*Y(`0TyBGTG99d2J)eQ?mf)61a0_t;|(MHi^# zLX4CE*`PqD0FT4J|NdLiKiwJYAaOZq-x$s5+;f&SE#?O#A}yT*623BAfUv=V!9Z}p z3kuX$;Lkt*+zA*ySolCe{mJ3rbCgkA+o9_RBq9{|Id@5szUYB}q3LD0B8NTq+_Q@s z@PY!ZDL~VpzyJRG%=qksg=_js?^6yZpQDV{bS~K*Kq64x8i3$Bbx6>~x7S{K0ShlMMu7$TwoB;>;ZkdSMYe2Uox2y@X{pK9Xo2oCf&qK5#3A!(Be@Dvm|YCW>h z*Bxxph1r=@N1vL%NpTA_3Xlj8H6@Bj1q2Of0t8-AU{VzL?YG~$#pqg~03>8136PNK zR3wVxcwr$(iHI~;X%&8_{M3L&~Q}d5U>G+lc5<=~AM-fs$ z)Q%uFZrrGT`Q;aN#u;Y_l^S<4^mlms(e5X@9%_IBknr0Zknn5NrHF-uZ<c=OwW{m?0}ni)=FOWYRBN2c(BFFYl|~dUrylF#Fc z1pTdVUwzk;zMxH`Ndk)4>m@ed_(pkLivbCNZZVLsm-+sGVxNxCbxpHN>N-LI({$1 z@>CqEgI5hmcqESj1WzNGMVnCrf6r?W{J!_zdk;Pk^a?j`-mLDw|9*A#)mN(%PB@|a z>aDllQjb0Mn7ZSRJJg~@i>kIScjf4BTlS@m67(a)u)+Sh$5&Bv{*fV z{(N=YZMRvKdGNsp)s`(=x<%~T5l<>J(BEAZY{kB2G@&nCms-RIDC}1hAW;|+CNyl2 zXeEkx_0?C^Q%^mm?!NnOb;u!ySe5zm%P-a1wQJRtS6-=3Ipvg8KV3CH`n#+AE!o!< zO_-3NUYHI(#^J~0sXBlMsvMBW2#J^|f_F91on7f)try+KnRYN8al{eo+H0@vZN`QT z8`P#vo4TD(HQSt`75eK|uNC|L@y8$C+8D1(l#V6<2}BaXJ|%Rz$rd%}mFm+=^f~>X zAVL4;&YfHJT*ON+y`)}z@kMp-z4xkv4mzk;tM9)1POVe5Ru6*c48XP;HCzy7*<=%I(yKKtw=%F{|B^w)2RR_y!p&p*#VLi)fWy?3FGKQz5x z$?>Pabd$q|r69rU4;)3%JM9Utc^mNOo_kKc_S$Pf4xb(E$tRzzF1h5AQC$h>uisp) z*q0&+x<>RVCu+TUdvT61%$|ih{m}G&CC8rvkSGKR^Y$AYS?Ey&gM!XR)H-3EGPMvg zWz))~g8s@a(Sm(xO~Q6&!d#!=UZpNz0}{KA4?rRVBqR&gE=bT;Kbo$oH8@iiDMJ>2 z<*uo0O7vH*ZwvON$eV8b$0x8$PdU}P4&_!EJ|!SAASCpuCVkO*-+lKT-tyaP%(2~3 zvW>J#=PZ??zu}gsZC|=hTw7sFOgRA(h$O^UNywT+->xRx{hD}}6Gaj9cP&WdI5;Ia zkR}$ra6FW~adPK^U6CeRdh_8~NAVHwmfB*f(?aGz#qmMr7 z7OD?C@IddDS6`hp&;R}R-*-Etjy&>6U-By7qrdU8*S7DEKmOPO0+5KeVMRYrnx4+hc#3!G8qF#96h3he@NO^G%DE+Kq50FY*7S97bYYK5Cn@FYZ4^~70QMJITavC&{PwxNtjz; zb%*Zy8<9ksH2{eUkkEHG0TO8g7`Z230UZ*&4xzuZ0)RxBu>eR6015NHP39I@I!rhA zXET%;o+x$N6`&tcbWXzD0&82e1|-Ui7C>S^NVpEu(bMSYv7mTC0VuGu0(4sr^G>h~ z1M@H)AW>%Y01^#Af&fwbv882(7fOW!X$sISIcV+9_9#<8B28OqZa|_kBxvf1E`kFN zI6!K%!O~H?uDRwKb;T7|s8dfpRb21OFTbqlR@09^{u; zb^Frw@zYN~Ss{Tn3BP@Fr2r%MbDFQb@=E8_ zue#yS?ZO7cT77xc>U<)zYO))mdkq)j{I&%P&`_opxFm`V%||3P&G( zw7T=oJJk(0+@O{$S)#uB>MONo%^J0K?OL^Y^X8@_3G}yp`_h6ngMolxE?E1(fZK(O z{J$s>AW;DleGAz1Y>5(QCi);jfOzJaXB6E|o3U3NF!a?35t_}fNk+6Z7H=)06+n1h*M>f)*M&~+djoWgF{CrX(Kq50F%&38j zx1GA?wE8Y5`m97W(FX|v#Jlgl+wFd$=S!?uu|l1B=9x2);7EclUi$8$i!M^f9CJ(; zNi1K!TrFC(Xhy~P^XIEK-+Z%aNT9!M+n3h5_+CvMP3Vz>ZD$j&Rp{^fr5$q9zL2y@ z-ghLK0f~Z;umM9~kKph1N0|~Z=wMy$olXo1iVhAx{P3AxA9mPbokRcd!w=PEmtCg5 z_~MIh5&OLJ&Qs@{b50jY(E7s#7hKS-NxbpK8{Jw2tyA20-+hX9pj>$2h22&~`tGKi zZfXh==k{<29!=2S z6iwv3pA$pE?C$E-tGm0yO-*S{|ZAW<0-W^|!P6m(IPSf9u{ zgisn3NLPS%Gtt=BAt8+-%;_XRBHbQ(34lZaNa&8=7D4naVw>v|bkX3UM0p22N^462 z283%J!gqKM>k(z`2}leG3D=a98BLhao1lvTQ%_|t1e9J!0b19h@lIo$qX_fh9JMTV zs>zHpe7(e?^{xs55*Z+2Mh>n>!WC8Mk2N*VP|#u?Uqm$ZghA}P%<=sg6yP-ojuLc0 zm|I+JTV6|?j|c_I7ENouPE_LgU90LkvKmnfuv`db5 zF>%De2xpVQ5BA+M1_f0B5 zC;I70bNciWPbEngs-;mxjMGP?j_IbL3n%2Pgm22p1_#?`K2Y%PCwiv^?b)+u2lWYw zp+F4<=ztvEu#ck!{hit)1%xY#umK^|;fJQLp<|6Y5lQr@o(c&Q9FjwJl88b-OF`-B zfkl8tjmrmh`V^qM1oHtoo<5QS!UhCH5kAH9e-B7xghWU*VT&Tnt+8er-X6;!(VuWf zpV2fFoqW!DQak^ULy42F0R4!e$bqJoI7-j~VSZ-9K)+9uD{}Cig@}m?V)9J7Ej#_U zJDPu|p`$TkT~C%&0+Mj5ec!*j-GvaUC<(WAaSH=l~=Y8$zF+cswJD%5r=KJdj0;!-DUf7}6>vGzzG)xV z+6Buffr11OuE;`SEea$=%}l)eh(M6!kz2yvX!#bZgtU;-$n>`+-l z`WjmHq@)KVgqBQooUzW_H5FxpkF<^$a0q2WvI$n8&!I{jx-^n-MJtjzLgfb}{E7h* zevM{Qq<|u1>L+9oS_%t*A;8c`>Qx{F7``wAQyFfXRdf2QONLCs#hZ*5utq!ry1kWr2z4Ph`XGl9})5)%SaWF zIA`h9Qy&OI!4oQ{q#vPWPI7ucBGS4!9IUU5ki~8Z7<~0bN`Y)ss({bgh5*ACJxIQn zn8DX(Ng30Y29Sufcut2K6IJ-25Zb=b^pUb5+sG6Mb*iyZKy1EHIYavsTK*)a2P6`# zn$xlR%1Zs-2bBaFkabEGkT_gln$+(@r1#YoQr0x31tb!!?Q`BC#Y@V{mB!XCN!cO& zLE3RE5bIPW`EsR^DlDl_TGq6s10*t7JhyX|mX|wS1}RX)6e=Kfz`4^&rIyw!EpOV= z0TLN3E_K$SRY}X0rbF})Y5}BY1yUTXG_N#Ws8vdp8`_SsrvD#h4bktus@W_60000< KMNUMnLSTY)-qCgd literal 3209 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