@ionic/core 8.8.16-dev.11784841344.1aa1a41c → 8.8.16-dev.11784914346.10d0804c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/ion-accordion.js +1 -1
- package/components/ion-action-sheet.js +1 -1
- package/components/ion-alert.js +1 -1
- package/components/ion-avatar.js +1 -1
- package/components/ion-back-button.js +1 -1
- package/components/ion-badge.js +1 -1
- package/components/ion-breadcrumb.js +1 -1
- package/components/ion-button.js +1 -1
- package/components/ion-buttons.js +1 -1
- package/components/ion-content.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-fab-button.js +1 -1
- package/components/ion-footer.js +1 -1
- package/components/ion-header.js +1 -1
- package/components/ion-icon.js +1 -1
- package/components/ion-input-password-toggle.js +1 -1
- package/components/ion-input.js +1 -1
- package/components/ion-item-option.js +1 -1
- package/components/ion-item.js +1 -1
- package/components/ion-menu-button.js +1 -1
- package/components/ion-refresher-content.js +1 -1
- package/components/ion-reorder.js +1 -1
- package/components/ion-searchbar.js +1 -1
- package/components/ion-segment-button.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-tab-bar.js +1 -1
- package/components/ion-tab-button.js +1 -1
- package/components/ion-title.js +1 -1
- package/components/ion-toast.js +1 -1
- package/components/ion-toggle.js +1 -1
- package/components/{p-DiKh2eQw.js → p-4u9RNymb.js} +1 -1
- package/components/{p-B8KYxaMx.js → p-B8xhFBOE.js} +1 -1
- package/components/p-BAnNwWMA.js +4 -0
- package/components/p-BYZR_5L4.js +4 -0
- package/components/p-B_zaqq5F.js +4 -0
- package/components/p-CO9VfZyc.js +4 -0
- package/components/p-Cjx0xPoU.js +4 -0
- package/components/p-CyWeCU8e.js +4 -0
- package/components/p-DRnK3A-V.js +4 -0
- package/components/p-DcVqGRkT.js +4 -0
- package/components/p-Dght1fh7.js +4 -0
- package/components/p-GpxJMpJu.js +4 -0
- package/dist/cjs/{index-Cu9JNpPi.js → index-CgAbCW6L.js} +1 -1
- package/dist/cjs/ion-accordion_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-action-sheet.cjs.entry.js +3 -3
- package/dist/cjs/ion-alert.cjs.entry.js +3 -3
- package/dist/cjs/ion-app_8.cjs.entry.js +194 -65
- package/dist/cjs/ion-avatar_3.cjs.entry.js +4 -4
- package/dist/cjs/ion-back-button.cjs.entry.js +1 -1
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-button_2.cjs.entry.js +3 -3
- package/dist/cjs/ion-datetime_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-fab_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +1 -1
- package/dist/cjs/ion-input.cjs.entry.js +4 -4
- package/dist/cjs/ion-item-option_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-item_8.cjs.entry.js +1 -1
- package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-refresher_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-reorder_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-searchbar.cjs.entry.js +2 -2
- package/dist/cjs/ion-segment_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-select-modal.cjs.entry.js +4 -4
- package/dist/cjs/ion-select_3.cjs.entry.js +5 -5
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +78 -80
- package/dist/cjs/ion-toggle.cjs.entry.js +1 -1
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/scroll-hide-controller-G9HOmmhN.js +345 -0
- package/dist/collection/components/action-sheet/action-sheet.ionic.css +2 -5
- package/dist/collection/components/action-sheet/action-sheet.ios.css +2 -1
- package/dist/collection/components/action-sheet/action-sheet.md.css +2 -1
- package/dist/collection/components/alert/alert.ionic.css +2 -5
- package/dist/collection/components/alert/alert.ios.css +2 -1
- package/dist/collection/components/alert/alert.md.css +2 -1
- package/dist/collection/components/avatar/avatar.ionic.css +12 -6
- package/dist/collection/components/badge/badge.ionic.css +6 -3
- package/dist/collection/components/badge/badge.ios.css +4 -2
- package/dist/collection/components/badge/badge.md.css +2 -1
- package/dist/collection/components/button/button.ionic.css +4 -2
- package/dist/collection/components/buttons/buttons.ionic.css +1 -1
- package/dist/collection/components/content/content.css +39 -0
- package/dist/collection/components/footer/footer-interface.js +1 -0
- package/dist/collection/components/footer/footer.ios.css +19 -4
- package/dist/collection/components/footer/footer.js +102 -15
- package/dist/collection/components/footer/footer.md.css +28 -0
- package/dist/collection/components/header/header-interface.js +1 -0
- package/dist/collection/components/header/header.ionic.css +153 -0
- package/dist/collection/components/header/header.ios.css +153 -123
- package/dist/collection/components/header/header.js +139 -28
- package/dist/collection/components/header/header.md.css +176 -1
- package/dist/collection/components/header/header.utils.js +6 -13
- package/dist/collection/components/input/input.ionic.css +2 -1
- package/dist/collection/components/input/input.ios.css +2 -1
- package/dist/collection/components/input/input.md.css +2 -1
- package/dist/collection/components/item-option/item-option.ionic.css +2 -1
- package/dist/collection/components/searchbar/searchbar.ionic.css +6 -2
- package/dist/collection/components/segment-button/segment-button.ionic.css +2 -1
- package/dist/collection/components/select/select.ionic.css +2 -1
- package/dist/collection/components/select-modal/select-modal.ionic.css +2 -5
- package/dist/collection/components/select-modal/select-modal.ios.css +2 -1
- package/dist/collection/components/select-modal/select-modal.md.css +2 -1
- package/dist/collection/components/select-popover/select-popover.ionic.css +2 -5
- package/dist/collection/components/select-popover/select-popover.ios.css +2 -1
- package/dist/collection/components/select-popover/select-popover.md.css +2 -1
- package/dist/collection/components/tab-bar/tab-bar.ionic.css +25 -3
- package/dist/collection/components/tab-bar/tab-bar.ios.css +15 -0
- package/dist/collection/components/tab-bar/tab-bar.js +94 -88
- package/dist/collection/components/tab-bar/tab-bar.md.css +15 -0
- package/dist/collection/components/tab-button/tab-button.ionic.css +2 -1
- package/dist/collection/components/title/title.md.css +7 -0
- package/dist/collection/utils/scroll-hide-controller.js +178 -0
- package/dist/docs.json +144 -32
- package/dist/esm/{index-1y3VhUSy.js → index-D2tu5BUg.js} +1 -1
- package/dist/esm/ion-accordion_2.entry.js +1 -1
- package/dist/esm/ion-action-sheet.entry.js +3 -3
- package/dist/esm/ion-alert.entry.js +3 -3
- package/dist/esm/ion-app_8.entry.js +194 -65
- package/dist/esm/ion-avatar_3.entry.js +4 -4
- package/dist/esm/ion-back-button.entry.js +1 -1
- package/dist/esm/ion-breadcrumb_2.entry.js +1 -1
- package/dist/esm/ion-button_2.entry.js +3 -3
- package/dist/esm/ion-datetime_3.entry.js +1 -1
- package/dist/esm/ion-fab_3.entry.js +1 -1
- package/dist/esm/ion-input-password-toggle.entry.js +1 -1
- package/dist/esm/ion-input.entry.js +4 -4
- package/dist/esm/ion-item-option_3.entry.js +1 -1
- package/dist/esm/ion-item_8.entry.js +1 -1
- package/dist/esm/ion-menu_3.entry.js +1 -1
- package/dist/esm/ion-refresher_2.entry.js +1 -1
- package/dist/esm/ion-reorder_2.entry.js +1 -1
- package/dist/esm/ion-searchbar.entry.js +2 -2
- package/dist/esm/ion-segment_2.entry.js +1 -1
- package/dist/esm/ion-select-modal.entry.js +4 -4
- package/dist/esm/ion-select_3.entry.js +5 -5
- package/dist/esm/ion-tab-bar_2.entry.js +79 -81
- package/dist/esm/ion-toggle.entry.js +1 -1
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/scroll-hide-controller-CUNW7EpD.js +342 -0
- package/dist/html.html-data.json +36 -4
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-07bd8446.entry.js +4 -0
- package/dist/ionic/p-103e1d9f.entry.js +4 -0
- package/dist/ionic/{p-eeb7b373.entry.js → p-18bc4f2d.entry.js} +1 -1
- package/dist/ionic/p-248265c2.entry.js +4 -0
- package/dist/ionic/{p-fb457fdd.entry.js → p-3bc5b5e9.entry.js} +1 -1
- package/dist/ionic/{p-42a882b7.entry.js → p-43b00c5b.entry.js} +1 -1
- package/dist/ionic/{p-d0f253fc.entry.js → p-56224b93.entry.js} +1 -1
- package/dist/ionic/p-5732396e.entry.js +4 -0
- package/dist/ionic/{p-b3d04a86.entry.js → p-58d8877d.entry.js} +1 -1
- package/dist/ionic/{p-9e9be378.entry.js → p-5d079dc1.entry.js} +1 -1
- package/dist/ionic/{p-d0dfc9a3.entry.js → p-5e9665dd.entry.js} +1 -1
- package/dist/ionic/{p-7b2fe639.entry.js → p-5fee5cc1.entry.js} +1 -1
- package/dist/ionic/p-64734604.entry.js +4 -0
- package/dist/ionic/p-69feeff9.entry.js +4 -0
- package/dist/ionic/p-83acfa2d.entry.js +4 -0
- package/dist/ionic/{p-f692219d.entry.js → p-849b1759.entry.js} +1 -1
- package/dist/ionic/{p-a09c7a4c.entry.js → p-86f040e0.entry.js} +1 -1
- package/dist/ionic/p-8cb23f27.entry.js +4 -0
- package/dist/ionic/p-C1I_d964.js +4 -0
- package/dist/ionic/p-b97778f5.entry.js +4 -0
- package/dist/ionic/p-be9db7e8.entry.js +4 -0
- package/dist/ionic/{p-2fba8f15.entry.js → p-c04429f2.entry.js} +1 -1
- package/dist/ionic/p-c25a2a9b.entry.js +4 -0
- package/dist/ionic/{p-a797625e.entry.js → p-d272ff4f.entry.js} +1 -1
- package/dist/types/components/footer/footer-interface.d.ts +1 -0
- package/dist/types/components/footer/footer.d.ts +16 -0
- package/dist/types/components/header/header-interface.d.ts +1 -0
- package/dist/types/components/header/header.d.ts +17 -0
- package/dist/types/components/header/header.utils.d.ts +4 -5
- package/dist/types/components/tab-bar/tab-bar-interface.d.ts +1 -0
- package/dist/types/components/tab-bar/tab-bar.d.ts +17 -14
- package/dist/types/components.d.ts +37 -13
- package/dist/types/utils/scroll-hide-controller.d.ts +56 -0
- package/hydrate/index.js +477 -175
- package/hydrate/index.mjs +477 -175
- package/package.json +2 -2
- package/components/p-BZwQa9ey.js +0 -4
- package/components/p-CJCMdFb9.js +0 -4
- package/components/p-Ck_9SoHZ.js +0 -4
- package/components/p-CmnPD02Z.js +0 -4
- package/components/p-D-Xa9lMG.js +0 -4
- package/components/p-DFSqPtzD.js +0 -4
- package/components/p-NPsFR8Ng.js +0 -4
- package/components/p-U2gyA6Z0.js +0 -4
- package/components/p-q8wGOPJB.js +0 -4
- package/dist/cjs/keyboard-controller-CefyW9lm.js +0 -169
- package/dist/esm/keyboard-controller-BFwRdk2T.js +0 -167
- package/dist/ionic/p-0c4d9d7c.entry.js +0 -4
- package/dist/ionic/p-40dc9dbd.entry.js +0 -4
- package/dist/ionic/p-54419365.entry.js +0 -4
- package/dist/ionic/p-6293e9f1.entry.js +0 -4
- package/dist/ionic/p-7de397c7.entry.js +0 -4
- package/dist/ionic/p-8cf82b85.entry.js +0 -4
- package/dist/ionic/p-MqqcZQSB.js +0 -4
- package/dist/ionic/p-a6e04ca3.entry.js +0 -4
- package/dist/ionic/p-a6fe63f0.entry.js +0 -4
- package/dist/ionic/p-b275f17e.entry.js +0 -4
- package/dist/ionic/p-c5635175.entry.js +0 -4
- package/dist/ionic/p-dc8e0b91.entry.js +0 -4
- /package/components/{p-J03hHbbL.js → p-BaPtaYEC.js} +0 -0
- /package/dist/ionic/{p-1y3VhUSy.js → p-D2tu5BUg.js} +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import { r as registerInstance, h, e as config, d as Host, g as getElement, c as createEvent, a as readTask, i as forceUpdate, w as writeTask, j as printIonError } from './index-C0EQceqV.js';
|
|
4
|
+
import { r as registerInstance, h, e as config, d as Host, g as getElement, c as createEvent, a as readTask, i as forceUpdate, w as writeTask, f as printIonWarning, j as printIonError } from './index-C0EQceqV.js';
|
|
5
5
|
import { focusElements } from './focus-visible-vXpMhGrs.js';
|
|
6
6
|
import { c as getIonTheme, a as isPlatform, b as getIonMode } from './ionic-global-BpkTponr.js';
|
|
7
7
|
import { i as inheritAriaAttributes, h as hasLazyBuild, c as componentOnReady, e as clamp, s as shallowEqualStringMap } from './helpers-DfF5_wJc.js';
|
|
8
8
|
import { i as isRTL } from './dir-C53feagD.js';
|
|
9
9
|
import { c as createColorClasses, h as hostContext } from './theme-DaJxRxSQ.js';
|
|
10
10
|
import { a as findIonContent, p as printIonContentErrorMsg, g as getScrollElement } from './index-KxK0gcRp.js';
|
|
11
|
-
import { c as createKeyboardController } from './
|
|
11
|
+
import { c as createScrollHideController, a as createKeyboardController } from './scroll-hide-controller-CUNW7EpD.js';
|
|
12
12
|
import { g as getTimeGivenProgression } from './cubic-bezier-hHmYLOfE.js';
|
|
13
13
|
import { a as attachComponent, d as detachComponent } from './framework-delegate-DO2QXccA.js';
|
|
14
14
|
import { c as createLockController } from './lock-controller-B-hirT0v.js';
|
|
@@ -52,7 +52,7 @@ const App = class {
|
|
|
52
52
|
};
|
|
53
53
|
App.style = appCss();
|
|
54
54
|
|
|
55
|
-
const buttonsIonicCss = () => `.sc-ion-buttons-ionic-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0)}.sc-ion-buttons-ionic-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ionic-s .button-has-icon-only{--padding-top:0;--padding-bottom:0}.sc-ion-buttons-ionic-s .button-clear{--color:var(--token-text-default, var(--token-primitives-neutral-1200, #242424));--background:transparent;--background-activated:transparent;--background-focused:transparent;--background-hover:transparent}.sc-ion-buttons-ionic-s .button-has-icon-only{width:var(--token-scale-1000, 40px);height:var(--token-scale-1000, 40px)}.sc-ion-buttons-ionic-s ion-icon[slot=icon-only]{font-size:var(--token-font-size-
|
|
55
|
+
const buttonsIonicCss = () => `.sc-ion-buttons-ionic-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0)}.sc-ion-buttons-ionic-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ionic-s .button-has-icon-only{--padding-top:0;--padding-bottom:0}.sc-ion-buttons-ionic-s .button-clear{--color:var(--token-text-default, var(--token-primitives-neutral-1200, #242424));--background:transparent;--background-activated:transparent;--background-focused:transparent;--background-hover:transparent}.sc-ion-buttons-ionic-s .button-has-icon-only{width:var(--token-scale-1000, 40px);height:var(--token-scale-1000, 40px)}.sc-ion-buttons-ionic-s ion-icon[slot=icon-only]{font-size:var(--token-font-size-600, 1.5rem)}`;
|
|
56
56
|
|
|
57
57
|
const buttonsIosCss = () => `.sc-ion-buttons-ios-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0)}.sc-ion-buttons-ios-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ios-h{z-index:99}.sc-ion-buttons-ios-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ios-s ion-button{--padding-top:3px;--padding-bottom:3px;--padding-start:5px;--padding-end:5px;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px;min-height:32px}.sc-ion-buttons-ios-s .button-has-icon-only{--padding-top:0;--padding-bottom:0}.sc-ion-buttons-ios-s ion-button:not(.button-round){--border-radius:4px}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button{--color:initial;--border-color:initial;--background-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-solid,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-solid{--background:var(--ion-color-contrast);--background-focused:#000;--background-focused-opacity:0.12;--background-activated:#000;--background-activated-opacity:0.12;--background-hover:var(--ion-color-base);--background-hover-opacity:0.45;--color:var(--ion-color-base);--color-focused:var(--ion-color-base)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-clear,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-clear{--color-activated:var(--ion-color-contrast);--color-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-outline,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-outline{--color-activated:var(--ion-color-base);--color-focused:var(--ion-color-contrast);--background-activated:var(--ion-color-contrast)}.sc-ion-buttons-ios-s .button-clear,.sc-ion-buttons-ios-s .button-outline{--background-activated:transparent;--background-focused:currentColor;--background-hover:transparent}.sc-ion-buttons-ios-s .button-solid:not(.ion-color){--background-focused:#000;--background-focused-opacity:0.12;--background-activated:#000;--background-activated-opacity:0.12}.sc-ion-buttons-ios-s ion-icon[slot=start]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-end:0.3em;margin-inline-end:0.3em;font-size:1.41em;line-height:0.67}.sc-ion-buttons-ios-s ion-icon[slot=end]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-margin-start:0.4em;margin-inline-start:0.4em;font-size:1.41em;line-height:0.67}.sc-ion-buttons-ios-s ion-icon[slot=icon-only]{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:1.65em;line-height:0.67}`;
|
|
58
58
|
|
|
@@ -89,7 +89,7 @@ Buttons.style = {
|
|
|
89
89
|
md: buttonsMdCss()
|
|
90
90
|
};
|
|
91
91
|
|
|
92
|
-
const contentCss = () => `:host{--background:var(--ion-background-color, #fff);--color:var(--ion-text-color, #000);--padding-top:0px;--padding-bottom:0px;--padding-start:0px;--padding-end:0px;--keyboard-offset:0px;--offset-top:0px;--offset-bottom:0px;--overflow:auto;display:block;position:relative;-ms-flex:1;flex:1;width:100%;height:100%;margin:0 !important;padding:0 !important;font-family:var(--ion-font-family, inherit);contain:size style}:host(.ion-color) .inner-scroll{background:var(--ion-color-base);color:var(--ion-color-contrast)}#background-content{right:0px;left:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);position:absolute;background:var(--background)}.inner-scroll{right:0px;left:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:calc(var(--padding-top) + var(--offset-top));padding-bottom:calc(var(--padding-bottom) + var(--keyboard-offset) + var(--offset-bottom) + var(--internal-content-safe-area-padding-bottom, 0px));position:absolute;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;-ms-touch-action:pan-x pan-y pinch-zoom;touch-action:pan-x pan-y pinch-zoom}.scroll-y,.scroll-x{-webkit-overflow-scrolling:touch;z-index:0;will-change:scroll-position}.scroll-y{overflow-y:var(--overflow);overscroll-behavior-y:contain}.scroll-x{overflow-x:var(--overflow);overscroll-behavior-x:contain}.overscroll::before,.overscroll::after{position:absolute;width:1px;height:1px;content:""}.overscroll::before{bottom:-1px}.overscroll::after{top:-1px}:host(.content-sizing){display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:0;contain:none}:host(.content-sizing) .inner-scroll{position:relative;top:0;bottom:0;margin-top:calc(var(--offset-top) * -1);margin-bottom:calc(var(--offset-bottom) * -1)}.transition-effect{display:none;position:absolute;width:100%;height:100vh;opacity:0;pointer-events:none}:host(.content-ltr) .transition-effect{left:-100%;}:host(.content-rtl) .transition-effect{right:-100%;}.transition-cover{position:absolute;right:0;width:100%;height:100%;background:black;opacity:0.1}.transition-shadow{display:block;position:absolute;width:100%;height:100%;-webkit-box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03);box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03)}:host(.content-ltr) .transition-shadow{right:0;}:host(.content-rtl) .transition-shadow{left:0;-webkit-transform:scaleX(-1);transform:scaleX(-1)}::slotted([slot=fixed]){position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0)}`;
|
|
92
|
+
const contentCss = () => `:host{--background:var(--ion-background-color, #fff);--color:var(--ion-text-color, #000);--padding-top:0px;--padding-bottom:0px;--padding-start:0px;--padding-end:0px;--keyboard-offset:0px;--offset-top:0px;--offset-bottom:0px;--overflow:auto;display:block;position:relative;-ms-flex:1;flex:1;width:100%;height:100%;margin:0 !important;padding:0 !important;font-family:var(--ion-font-family, inherit);contain:size style}:host(.ion-color) .inner-scroll{background:var(--ion-color-base);color:var(--ion-color-contrast)}#background-content{right:0px;left:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);position:absolute;background:var(--background)}.inner-scroll{right:0px;left:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:calc(var(--padding-top) + var(--offset-top));padding-bottom:calc(var(--padding-bottom) + var(--keyboard-offset) + var(--offset-bottom) + var(--internal-content-safe-area-padding-bottom, 0px));position:absolute;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;-ms-touch-action:pan-x pan-y pinch-zoom;touch-action:pan-x pan-y pinch-zoom}.scroll-y,.scroll-x{-webkit-overflow-scrolling:touch;z-index:0;will-change:scroll-position}.scroll-y{overflow-y:var(--overflow);overscroll-behavior-y:contain}.scroll-x{overflow-x:var(--overflow);overscroll-behavior-x:contain}.overscroll::before,.overscroll::after{position:absolute;width:1px;height:1px;content:""}.overscroll::before{bottom:-1px}.overscroll::after{top:-1px}:host(.content-sizing){display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:0;contain:none}:host(.content-sizing) .inner-scroll{position:relative;top:0;bottom:0;margin-top:calc(var(--offset-top) * -1);margin-bottom:calc(var(--offset-bottom) * -1)}.transition-effect{display:none;position:absolute;width:100%;height:100vh;opacity:0;pointer-events:none}:host(.content-ltr) .transition-effect{left:-100%;}:host(.content-rtl) .transition-effect{right:-100%;}.transition-cover{position:absolute;right:0;width:100%;height:100%;background:black;opacity:0.1}.transition-shadow{display:block;position:absolute;width:100%;height:100%;-webkit-box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03);box-shadow:inset -9px 0 9px 0 rgba(0, 0, 100, 0.03)}:host(.content-ltr) .transition-shadow{right:0;}:host(.content-rtl) .transition-shadow{left:0;-webkit-transform:scaleX(-1);transform:scaleX(-1)}::slotted([slot=fixed]){position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0)}:host(.content-header-hide-scroll-partner:not(.content-fullscreen)) .inner-scroll{-webkit-transition:height 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:height 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), height 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), height 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1)}:host(.content-header-hide-scroll-partner:not(.content-fullscreen).content-header-hide-scroll-hidden) .inner-scroll{height:calc(100% + var(--internal-header-hide-height, 0px));-webkit-transform:translateY(calc(-1 * var(--internal-header-hide-height, 0px)));transform:translateY(calc(-1 * var(--internal-header-hide-height, 0px)));-webkit-transition:height 200ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:height 200ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), height 200ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), height 200ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1)}:host(.content-footer-hide-scroll-partner:not(.content-fullscreen)) .inner-scroll{-webkit-transition:height 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:height 200ms cubic-bezier(0.16, 1, 0.3, 1)}:host(.content-footer-hide-scroll-partner:not(.content-fullscreen).content-footer-hide-scroll-hidden) .inner-scroll{height:calc(100% + var(--internal-footer-hide-height, 0px));-webkit-transition:height 350ms cubic-bezier(0.4, 0, 1, 1);transition:height 350ms cubic-bezier(0.4, 0, 1, 1)}:host(.content-tab-bar-hide-scroll-partner:not(.content-fullscreen)) .inner-scroll{-webkit-transition:height 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:height 200ms cubic-bezier(0.16, 1, 0.3, 1)}:host(.content-tab-bar-hide-scroll-partner:not(.content-fullscreen).content-tab-bar-hide-scroll-hidden) .inner-scroll{height:calc(100% + var(--internal-tab-bar-hide-height, 0px));-webkit-transition:height 350ms cubic-bezier(0.4, 0, 1, 1);transition:height 350ms cubic-bezier(0.4, 0, 1, 1)}@media (prefers-reduced-motion: reduce){:host(.content-header-hide-scroll-partner:not(.content-fullscreen)) .inner-scroll,:host(.content-header-hide-scroll-partner:not(.content-fullscreen).content-header-hide-scroll-hidden) .inner-scroll,:host(.content-footer-hide-scroll-partner:not(.content-fullscreen)) .inner-scroll,:host(.content-footer-hide-scroll-partner:not(.content-fullscreen).content-footer-hide-scroll-hidden) .inner-scroll,:host(.content-tab-bar-hide-scroll-partner:not(.content-fullscreen)) .inner-scroll,:host(.content-tab-bar-hide-scroll-partner:not(.content-fullscreen).content-tab-bar-hide-scroll-hidden) .inner-scroll{-webkit-transition:none;transition:none}}`;
|
|
93
93
|
|
|
94
94
|
const Content = class {
|
|
95
95
|
constructor(hostRef) {
|
|
@@ -559,17 +559,20 @@ const handleFooterFade = (scrollEl, baseEl) => {
|
|
|
559
559
|
});
|
|
560
560
|
};
|
|
561
561
|
|
|
562
|
-
const ionicFooterMdCss = () => `ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer.footer-toolbar-padding ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-md{-webkit-box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12)}.footer-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}`;
|
|
562
|
+
const ionicFooterMdCss = () => `ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer.footer-toolbar-padding ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-collapse-fade ion-toolbar{--opacity-scale:inherit}ion-footer.footer-scroll-effect-hide{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:-webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:transform 200ms cubic-bezier(0.16, 1, 0.3, 1), -webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1)}ion-footer.footer-scroll-effect-hide.footer-scroll-hidden{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition:-webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:-webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:transform 350ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1)}@media (prefers-reduced-motion: reduce){ion-footer.footer-scroll-effect-hide,ion-footer.footer-scroll-effect-hide.footer-scroll-hidden{-webkit-transition:none;transition:none}}.footer-md{-webkit-box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12)}.footer-md.footer-collapse-fade{-webkit-box-shadow:none;box-shadow:none}.footer-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}`;
|
|
563
563
|
|
|
564
|
-
const footerIosCss = () => `ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer.footer-toolbar-padding ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-ios ion-toolbar:first-of-type{--border-width:0.55px 0 0}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.footer-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.footer-translucent-ios ion-toolbar{--opacity:0.8}}.footer-ios.ion-no-border ion-toolbar:first-of-type{--border-width:0}
|
|
564
|
+
const footerIosCss = () => `ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer.footer-toolbar-padding ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-collapse-fade ion-toolbar{--opacity-scale:inherit}ion-footer.footer-scroll-effect-hide{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:-webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:transform 200ms cubic-bezier(0.16, 1, 0.3, 1), -webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1)}ion-footer.footer-scroll-effect-hide.footer-scroll-hidden{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition:-webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:-webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:transform 350ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1)}@media (prefers-reduced-motion: reduce){ion-footer.footer-scroll-effect-hide,ion-footer.footer-scroll-effect-hide.footer-scroll-hidden{-webkit-transition:none;transition:none}}.footer-ios ion-toolbar:first-of-type{--border-width:0.55px 0 0}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.footer-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.footer-translucent-ios ion-toolbar{--opacity:0.8}}.footer-ios.ion-no-border ion-toolbar:first-of-type{--border-width:0}`;
|
|
565
565
|
|
|
566
|
-
const footerMdCss = () => `ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer.footer-toolbar-padding ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-md{-webkit-box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12)}.footer-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}`;
|
|
566
|
+
const footerMdCss = () => `ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer.footer-toolbar-padding ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-collapse-fade ion-toolbar{--opacity-scale:inherit}ion-footer.footer-scroll-effect-hide{-webkit-transition:-webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:-webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:transform 200ms cubic-bezier(0.16, 1, 0.3, 1);transition:transform 200ms cubic-bezier(0.16, 1, 0.3, 1), -webkit-transform 200ms cubic-bezier(0.16, 1, 0.3, 1)}ion-footer.footer-scroll-effect-hide.footer-scroll-hidden{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transition:-webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:-webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:transform 350ms cubic-bezier(0.4, 0, 1, 1);transition:transform 350ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 350ms cubic-bezier(0.4, 0, 1, 1)}@media (prefers-reduced-motion: reduce){ion-footer.footer-scroll-effect-hide,ion-footer.footer-scroll-effect-hide.footer-scroll-hidden{-webkit-transition:none;transition:none}}.footer-md{-webkit-box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12)}.footer-md.footer-collapse-fade{-webkit-box-shadow:none;box-shadow:none}.footer-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}`;
|
|
567
567
|
|
|
568
568
|
const Footer = class {
|
|
569
569
|
constructor(hostRef) {
|
|
570
570
|
registerInstance(this, hostRef);
|
|
571
571
|
this.keyboardCtrl = null;
|
|
572
572
|
this.keyboardCtrlPromise = null;
|
|
573
|
+
this.scrollHideCtrlPromise = null;
|
|
574
|
+
this.hasWarnedCollapse = false;
|
|
575
|
+
this.fadeSetupId = 0;
|
|
573
576
|
this.keyboardVisible = false;
|
|
574
577
|
/**
|
|
575
578
|
* If `true`, the footer will be translucent.
|
|
@@ -580,27 +583,66 @@ const Footer = class {
|
|
|
580
583
|
* attribute needs to be set on the content.
|
|
581
584
|
*/
|
|
582
585
|
this.translucent = false;
|
|
583
|
-
this.checkCollapsibleFooter = () => {
|
|
584
|
-
const
|
|
585
|
-
if (
|
|
586
|
+
this.checkCollapsibleFooter = async () => {
|
|
587
|
+
const { scrollEffect, collapse } = this;
|
|
588
|
+
if (collapse !== undefined && scrollEffect === undefined && !this.hasWarnedCollapse) {
|
|
589
|
+
this.hasWarnedCollapse = true;
|
|
590
|
+
printIonWarning(`[ion-footer] - The \`collapse\` property is deprecated. Use \`scrollEffect\` instead.\nExample: <ion-footer scroll-effect="${collapse}">`, this.el);
|
|
591
|
+
}
|
|
592
|
+
const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
|
|
593
|
+
// Skip teardown/rebuild if the effect hasn't changed.
|
|
594
|
+
// This prevents keyboard toggles (which trigger re-renders via
|
|
595
|
+
// @State keyboardVisible) from destroying the scroll controller
|
|
596
|
+
// and resetting isHidden.
|
|
597
|
+
if (effect === this.activeEffect) {
|
|
586
598
|
return;
|
|
587
599
|
}
|
|
588
|
-
const
|
|
589
|
-
const hasFade =
|
|
600
|
+
const hasHide = effect === 'hide';
|
|
601
|
+
const hasFade = effect === 'fade';
|
|
590
602
|
this.destroyCollapsibleFooter();
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
603
|
+
const appRootSelector = config.get('appRootSelector', 'ion-app');
|
|
604
|
+
const pageEl = this.el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner`);
|
|
605
|
+
const contentEl = pageEl ? findIonContent(pageEl) : null;
|
|
606
|
+
if (hasHide && contentEl) {
|
|
607
|
+
this.activeEffect = effect;
|
|
608
|
+
await this.setupScrollEffectHide(contentEl);
|
|
609
|
+
return;
|
|
610
|
+
}
|
|
611
|
+
// fade via the deprecated `collapse` prop is iOS-only.
|
|
612
|
+
// fade via the new `scrollEffect` prop works in all themes.
|
|
613
|
+
const isModeRestricted = scrollEffect === undefined && getIonTheme(this) !== 'ios';
|
|
614
|
+
if (hasFade && !isModeRestricted) {
|
|
595
615
|
if (!contentEl) {
|
|
596
616
|
printIonContentErrorMsg(this.el);
|
|
597
617
|
return;
|
|
598
618
|
}
|
|
599
619
|
this.setupFadeFooter(contentEl);
|
|
620
|
+
this.activeEffect = effect;
|
|
621
|
+
}
|
|
622
|
+
};
|
|
623
|
+
this.setupScrollEffectHide = async (contentEl) => {
|
|
624
|
+
const setupPromise = createScrollHideController(contentEl, {
|
|
625
|
+
el: this.el,
|
|
626
|
+
cssVar: '--internal-footer-hide-height',
|
|
627
|
+
hiddenClass: 'footer-scroll-hidden',
|
|
628
|
+
contentPartnerClass: 'content-footer-hide-scroll-partner',
|
|
629
|
+
contentHiddenClass: 'content-footer-hide-scroll-hidden',
|
|
630
|
+
});
|
|
631
|
+
this.scrollHideCtrlPromise = setupPromise;
|
|
632
|
+
const controller = await setupPromise;
|
|
633
|
+
if (this.scrollHideCtrlPromise === setupPromise) {
|
|
634
|
+
this.scrollHideCtrlPromise = null;
|
|
635
|
+
controller.init();
|
|
636
|
+
this.scrollHideCtrl = controller;
|
|
600
637
|
}
|
|
601
638
|
};
|
|
602
639
|
this.setupFadeFooter = async (contentEl) => {
|
|
603
|
-
const
|
|
640
|
+
const setupId = ++this.fadeSetupId;
|
|
641
|
+
const scrollEl = await getScrollElement(contentEl);
|
|
642
|
+
if (this.fadeSetupId !== setupId) {
|
|
643
|
+
return;
|
|
644
|
+
}
|
|
645
|
+
this.scrollEl = scrollEl;
|
|
604
646
|
/**
|
|
605
647
|
* Handle fading of toolbars on scroll
|
|
606
648
|
*/
|
|
@@ -645,6 +687,7 @@ const Footer = class {
|
|
|
645
687
|
}
|
|
646
688
|
}
|
|
647
689
|
disconnectedCallback() {
|
|
690
|
+
this.destroyCollapsibleFooter();
|
|
648
691
|
if (this.keyboardCtrlPromise) {
|
|
649
692
|
this.keyboardCtrlPromise.then((ctrl) => ctrl.destroy());
|
|
650
693
|
this.keyboardCtrlPromise = null;
|
|
@@ -655,25 +698,38 @@ const Footer = class {
|
|
|
655
698
|
}
|
|
656
699
|
}
|
|
657
700
|
destroyCollapsibleFooter() {
|
|
701
|
+
this.activeEffect = undefined;
|
|
702
|
+
this.fadeSetupId++;
|
|
703
|
+
this.scrollHideCtrlPromise = null;
|
|
704
|
+
if (this.scrollHideCtrl) {
|
|
705
|
+
this.scrollHideCtrl.destroy();
|
|
706
|
+
this.scrollHideCtrl = undefined;
|
|
707
|
+
}
|
|
658
708
|
if (this.scrollEl && this.contentScrollCallback) {
|
|
659
709
|
this.scrollEl.removeEventListener('scroll', this.contentScrollCallback);
|
|
660
710
|
this.contentScrollCallback = undefined;
|
|
661
711
|
}
|
|
662
712
|
}
|
|
663
713
|
render() {
|
|
664
|
-
const { translucent, collapse } = this;
|
|
714
|
+
const { translucent, scrollEffect, collapse } = this;
|
|
665
715
|
const theme = getIonTheme(this);
|
|
716
|
+
const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
|
|
717
|
+
// fade via the deprecated `collapse` prop is iOS-only.
|
|
718
|
+
const isModeRestricted = scrollEffect === undefined && theme !== 'ios';
|
|
719
|
+
const hasHide = effect === 'hide';
|
|
720
|
+
const hasFade = effect === 'fade' && !isModeRestricted;
|
|
666
721
|
const tabs = this.el.closest('ion-tabs');
|
|
667
722
|
const tabBar = tabs === null || tabs === void 0 ? void 0 : tabs.querySelector(':scope > ion-tab-bar');
|
|
668
|
-
return (h(Host, { key: '
|
|
723
|
+
return (h(Host, { key: 'a0777b4a639d22e15374879f018efcf589e756f8', role: "contentinfo", class: {
|
|
669
724
|
[theme]: true,
|
|
670
725
|
// Used internally for styling
|
|
671
726
|
[`footer-${theme}`]: true,
|
|
672
727
|
[`footer-translucent`]: translucent,
|
|
673
728
|
[`footer-translucent-${theme}`]: translucent,
|
|
674
729
|
['footer-toolbar-padding']: !this.keyboardVisible && (!tabBar || tabBar.slot !== 'bottom'),
|
|
675
|
-
|
|
676
|
-
|
|
730
|
+
'footer-collapse-fade': hasFade,
|
|
731
|
+
'footer-scroll-effect-hide': hasHide,
|
|
732
|
+
} }, theme === 'ios' && translucent && h("div", { key: 'd78b46870cbf11c95b066d649c04ec398b66e614', class: "footer-background" }), h("slot", { key: '9dc34787cd29597fe1b1198db317602014ac1483' })));
|
|
677
733
|
}
|
|
678
734
|
get el() { return getElement(this); }
|
|
679
735
|
};
|
|
@@ -730,13 +786,14 @@ const handleContentScroll = (scrollEl, scrollHeaderIndex, contentEl) => {
|
|
|
730
786
|
});
|
|
731
787
|
};
|
|
732
788
|
const setToolbarBackgroundOpacity = (headerEl, opacity) => {
|
|
789
|
+
var _a;
|
|
733
790
|
/**
|
|
734
791
|
* Fading in the backdrop opacity
|
|
735
792
|
* should happen after the large title
|
|
736
793
|
* has collapsed, so it is handled
|
|
737
794
|
* by handleHeaderFade()
|
|
738
795
|
*/
|
|
739
|
-
if (headerEl.collapse === 'fade') {
|
|
796
|
+
if (((_a = headerEl.scrollEffect) !== null && _a !== void 0 ? _a : headerEl.collapse) === 'fade') {
|
|
740
797
|
return;
|
|
741
798
|
}
|
|
742
799
|
if (opacity === undefined) {
|
|
@@ -894,37 +951,32 @@ const handleHeaderFade = (scrollEl, baseEl, condenseHeader) => {
|
|
|
894
951
|
* Get the role type for the ion-header.
|
|
895
952
|
*
|
|
896
953
|
* @param isInsideMenu If ion-header is inside ion-menu.
|
|
897
|
-
* @
|
|
898
|
-
*
|
|
899
|
-
*
|
|
900
|
-
* theme, otherwise 'banner'.
|
|
954
|
+
* @returns 'none' if inside ion-menu, otherwise 'banner'.
|
|
955
|
+
* Condensed headers start as 'banner' and have their role
|
|
956
|
+
* toggled dynamically by setHeaderActive() on scroll.
|
|
901
957
|
*/
|
|
902
|
-
const getRoleType = (isInsideMenu
|
|
958
|
+
const getRoleType = (isInsideMenu) => {
|
|
903
959
|
// If the header is inside a menu, it should not have the banner role.
|
|
904
960
|
if (isInsideMenu) {
|
|
905
961
|
return ROLE_NONE;
|
|
906
962
|
}
|
|
907
|
-
/**
|
|
908
|
-
* Only apply role="none" to `md` & `ionic` theme condensed headers
|
|
909
|
-
* since the large header is never shown.
|
|
910
|
-
*/
|
|
911
|
-
if (isCondensed && theme !== 'ios') {
|
|
912
|
-
return ROLE_NONE;
|
|
913
|
-
}
|
|
914
963
|
// Default to banner role.
|
|
915
964
|
return ROLE_BANNER;
|
|
916
965
|
};
|
|
917
966
|
|
|
918
|
-
const headerIonicCss = () => `ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}ion-header{z-index:10}ion-header.header-divider{border-bottom:var(--token-border-size-025, var(--token-scale-025, 1px)) var(--token-border-style-solid, solid) var(--token-border-default, var(--token-primitives-neutral-400, #d5d5d5))}ion-toolbar+ion-toolbar{--padding-start:var(--token-space-400, var(--token-scale-400, 16px));--padding-end:var(--token-space-400, var(--token-scale-400, 16px))}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.header-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(var(--token-scale-100, 4px));backdrop-filter:saturate(180%) blur(var(--token-scale-100, 4px))}.header-translucent-ionic ion-toolbar{--opacity:0.7}}`;
|
|
967
|
+
const headerIonicCss = () => `ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-collapse-fade ion-toolbar{--opacity-scale:inherit}.header-collapse-fade.header-transitioning ion-toolbar{--background:transparent;--border-style:none}.header-collapse-condense{z-index:9}.header-collapse-condense ion-toolbar{position:-webkit-sticky;position:sticky;top:0}.header-collapse-condense ion-toolbar:first-of-type{padding-top:0px;z-index:1}.header-collapse-condense ion-toolbar{z-index:0}.header-collapse-condense ion-toolbar:last-of-type{--border-width:0px}.header-collapse-condense ion-toolbar ion-searchbar{padding-top:0px;padding-bottom:13px}.header-collapse-main{--opacity-scale:1}.header-collapse-main ion-toolbar{--opacity-scale:inherit}.header-collapse-main ion-toolbar.in-toolbar ion-title,.header-collapse-main ion-toolbar.in-toolbar ion-buttons{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.header-collapse-condense ion-toolbar,.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--background:var(--ion-background-color, #fff)}.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--border-style:none;--opacity-scale:1}.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-buttons.buttons-collapse{opacity:0;pointer-events:none}.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-buttons.buttons-collapse{visibility:hidden}ion-header:not(.header-collapse-main):has(~ion-content ion-header.header-collapse-condense){opacity:0}.header-collapse-condense-hidden{display:none}ion-header.header-scroll-effect-hide{-webkit-transition:opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), opacity 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1)}ion-header.header-scroll-effect-hide.header-scroll-hidden{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), opacity 300ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);opacity:0}@media (prefers-reduced-motion: reduce){ion-header.header-scroll-effect-hide,ion-header.header-scroll-effect-hide.header-scroll-hidden{-webkit-transition:none;transition:none}}ion-header{z-index:10}ion-header.header-divider{border-bottom:var(--token-border-size-025, var(--token-scale-025, 1px)) var(--token-border-style-solid, solid) var(--token-border-default, var(--token-primitives-neutral-400, #d5d5d5))}ion-toolbar+ion-toolbar{--padding-start:var(--token-space-400, var(--token-scale-400, 16px));--padding-end:var(--token-space-400, var(--token-scale-400, 16px))}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.header-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(var(--token-scale-100, 4px));backdrop-filter:saturate(180%) blur(var(--token-scale-100, 4px))}.header-translucent-ionic ion-toolbar{--opacity:0.7}}`;
|
|
919
968
|
|
|
920
|
-
const headerIosCss = () => `ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}
|
|
969
|
+
const headerIosCss = () => `ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-collapse-fade ion-toolbar{--opacity-scale:inherit}.header-collapse-fade.header-transitioning ion-toolbar{--background:transparent;--border-style:none}.header-collapse-condense{z-index:9}.header-collapse-condense ion-toolbar{position:-webkit-sticky;position:sticky;top:0}.header-collapse-condense ion-toolbar:first-of-type{padding-top:0px;z-index:1}.header-collapse-condense ion-toolbar{z-index:0}.header-collapse-condense ion-toolbar:last-of-type{--border-width:0px}.header-collapse-condense ion-toolbar ion-searchbar{padding-top:0px;padding-bottom:13px}.header-collapse-main{--opacity-scale:1}.header-collapse-main ion-toolbar{--opacity-scale:inherit}.header-collapse-main ion-toolbar.in-toolbar ion-title,.header-collapse-main ion-toolbar.in-toolbar ion-buttons{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.header-collapse-condense ion-toolbar,.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--background:var(--ion-background-color, #fff)}.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--border-style:none;--opacity-scale:1}.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-buttons.buttons-collapse{opacity:0;pointer-events:none}.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-buttons.buttons-collapse{visibility:hidden}ion-header:not(.header-collapse-main):has(~ion-content ion-header.header-collapse-condense){opacity:0}.header-collapse-condense-hidden{display:none}ion-header.header-scroll-effect-hide{-webkit-transition:opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), opacity 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1)}ion-header.header-scroll-effect-hide.header-scroll-hidden{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), opacity 300ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);opacity:0}@media (prefers-reduced-motion: reduce){ion-header.header-scroll-effect-hide,ion-header.header-scroll-effect-hide.header-scroll-hidden{-webkit-transition:none;transition:none}}ion-header{z-index:10}.header-ios ion-toolbar:last-of-type{--border-width:0 0 0.55px}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.header-background{right:0;left:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.header-translucent-ios ion-toolbar{--opacity:0.8}.header-collapse-condense-inactive .header-background{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}}.header-ios.ion-no-border ion-toolbar:last-of-type{--border-width:0}.header-collapse-condense ion-toolbar:last-of-type{--border-width:0px}`;
|
|
921
970
|
|
|
922
|
-
const headerMdCss = () => `ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}ion-header{z-index:10}.header-md{-webkit-box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12)}.header-md.header-collapse-condense{
|
|
971
|
+
const headerMdCss = () => `ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-collapse-fade ion-toolbar{--opacity-scale:inherit}.header-collapse-fade.header-transitioning ion-toolbar{--background:transparent;--border-style:none}.header-collapse-condense{z-index:9}.header-collapse-condense ion-toolbar{position:-webkit-sticky;position:sticky;top:0}.header-collapse-condense ion-toolbar:first-of-type{padding-top:0px;z-index:1}.header-collapse-condense ion-toolbar{z-index:0}.header-collapse-condense ion-toolbar:last-of-type{--border-width:0px}.header-collapse-condense ion-toolbar ion-searchbar{padding-top:0px;padding-bottom:13px}.header-collapse-main{--opacity-scale:1}.header-collapse-main ion-toolbar{--opacity-scale:inherit}.header-collapse-main ion-toolbar.in-toolbar ion-title,.header-collapse-main ion-toolbar.in-toolbar ion-buttons{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.header-collapse-condense ion-toolbar,.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--background:var(--ion-background-color, #fff)}.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar{--border-style:none;--opacity-scale:1}.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-buttons.buttons-collapse{opacity:0;pointer-events:none}.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-buttons.buttons-collapse{visibility:hidden}ion-header:not(.header-collapse-main):has(~ion-content ion-header.header-collapse-condense){opacity:0}.header-collapse-condense-hidden{display:none}ion-header.header-scroll-effect-hide{-webkit-transition:opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), opacity 300ms cubic-bezier(0, 0, 0.2, 1);transition:transform 300ms cubic-bezier(0, 0, 0.2, 1), opacity 300ms cubic-bezier(0, 0, 0.2, 1), -webkit-transform 300ms cubic-bezier(0, 0, 0.2, 1)}ion-header.header-scroll-effect-hide.header-scroll-hidden{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transition:opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), opacity 300ms cubic-bezier(0.4, 0, 1, 1);transition:transform 200ms cubic-bezier(0.4, 0, 1, 1), opacity 300ms cubic-bezier(0.4, 0, 1, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 1, 1);opacity:0}@media (prefers-reduced-motion: reduce){ion-header.header-scroll-effect-hide,ion-header.header-scroll-effect-hide.header-scroll-hidden{-webkit-transition:none;transition:none}}ion-header{z-index:10}.header-md{-webkit-box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);box-shadow:0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12)}.header-md.header-collapse-condense{-webkit-box-shadow:none;box-shadow:none}.header-md.header-collapse-condense-inactive:not(.header-collapse-condense){-webkit-box-shadow:none;box-shadow:none}.header-md.header-collapse-fade{-webkit-box-shadow:none;box-shadow:none}.header-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}`;
|
|
923
972
|
|
|
924
973
|
const Header = class {
|
|
925
974
|
constructor(hostRef) {
|
|
926
975
|
registerInstance(this, hostRef);
|
|
927
976
|
this.inheritedAttributes = {};
|
|
977
|
+
this.scrollHideCtrlPromise = null;
|
|
978
|
+
this.hasWarnedCollapse = false;
|
|
979
|
+
this.fadeCondenseSetupId = 0;
|
|
928
980
|
/**
|
|
929
981
|
* If `true`, the header will have a line at the bottom.
|
|
930
982
|
* TODO(ROU-10855): add support for this prop on ios/md themes
|
|
@@ -939,8 +991,29 @@ const Header = class {
|
|
|
939
991
|
* attribute needs to be set on the content.
|
|
940
992
|
*/
|
|
941
993
|
this.translucent = false;
|
|
994
|
+
this.setupScrollEffectHide = async (contentEl) => {
|
|
995
|
+
const setupPromise = createScrollHideController(contentEl, {
|
|
996
|
+
el: this.el,
|
|
997
|
+
cssVar: '--internal-header-hide-height',
|
|
998
|
+
hiddenClass: 'header-scroll-hidden',
|
|
999
|
+
contentPartnerClass: 'content-header-hide-scroll-partner',
|
|
1000
|
+
contentHiddenClass: 'content-header-hide-scroll-hidden',
|
|
1001
|
+
});
|
|
1002
|
+
this.scrollHideCtrlPromise = setupPromise;
|
|
1003
|
+
const controller = await setupPromise;
|
|
1004
|
+
if (this.scrollHideCtrlPromise === setupPromise) {
|
|
1005
|
+
this.scrollHideCtrlPromise = null;
|
|
1006
|
+
controller.init();
|
|
1007
|
+
this.scrollHideCtrl = controller;
|
|
1008
|
+
}
|
|
1009
|
+
};
|
|
942
1010
|
this.setupFadeHeader = async (contentEl, condenseHeader) => {
|
|
943
|
-
const
|
|
1011
|
+
const setupId = ++this.fadeCondenseSetupId;
|
|
1012
|
+
const scrollEl = await getScrollElement(contentEl);
|
|
1013
|
+
if (this.fadeCondenseSetupId !== setupId) {
|
|
1014
|
+
return;
|
|
1015
|
+
}
|
|
1016
|
+
this.scrollEl = scrollEl;
|
|
944
1017
|
/**
|
|
945
1018
|
* Handle fading of toolbars on scroll
|
|
946
1019
|
*/
|
|
@@ -964,38 +1037,63 @@ const Header = class {
|
|
|
964
1037
|
this.destroyCollapsibleHeader();
|
|
965
1038
|
}
|
|
966
1039
|
async checkCollapsibleHeader() {
|
|
967
|
-
const
|
|
968
|
-
if (
|
|
1040
|
+
const { scrollEffect, collapse } = this;
|
|
1041
|
+
if (collapse !== undefined && scrollEffect === undefined && !this.hasWarnedCollapse) {
|
|
1042
|
+
this.hasWarnedCollapse = true;
|
|
1043
|
+
printIonWarning(`[ion-header] - The \`collapse\` property is deprecated. Use \`scrollEffect\` instead.\nExample: <ion-header scroll-effect="${collapse}">`, this.el);
|
|
1044
|
+
}
|
|
1045
|
+
const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
|
|
1046
|
+
// Skip teardown/rebuild if the effect hasn't changed.
|
|
1047
|
+
// This prevents re-renders from destroying the scroll controller
|
|
1048
|
+
// and resetting isHidden.
|
|
1049
|
+
if (effect === this.activeEffect) {
|
|
969
1050
|
return;
|
|
970
1051
|
}
|
|
971
|
-
const
|
|
972
|
-
const hasCondense =
|
|
973
|
-
const hasFade =
|
|
1052
|
+
const hasHide = effect === 'hide';
|
|
1053
|
+
const hasCondense = effect === 'condense';
|
|
1054
|
+
const hasFade = effect === 'fade';
|
|
974
1055
|
this.destroyCollapsibleHeader();
|
|
975
1056
|
const appRootSelector = config.get('appRootSelector', 'ion-app');
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
1057
|
+
const pageEl = this.el.closest(`${appRootSelector}, ion-page, .ion-page, page-inner`);
|
|
1058
|
+
const contentEl = pageEl ? findIonContent(pageEl) : null;
|
|
1059
|
+
if (hasHide && contentEl) {
|
|
1060
|
+
this.activeEffect = effect;
|
|
1061
|
+
await this.setupScrollEffectHide(contentEl);
|
|
1062
|
+
return;
|
|
1063
|
+
}
|
|
1064
|
+
// condense/fade via the deprecated `collapse` prop are iOS-only.
|
|
1065
|
+
// condense/fade via the new `scrollEffect` prop work in all themes.
|
|
1066
|
+
const isModeRestricted = scrollEffect === undefined && getIonTheme(this) !== 'ios';
|
|
1067
|
+
if (hasCondense && !isModeRestricted) {
|
|
979
1068
|
// Cloned elements are always needed in iOS transition
|
|
980
1069
|
writeTask(() => {
|
|
981
1070
|
const title = cloneElement('ion-title');
|
|
982
1071
|
title.size = 'large';
|
|
983
1072
|
cloneElement('ion-back-button');
|
|
984
1073
|
});
|
|
985
|
-
await this.setupCondenseHeader(contentEl, pageEl);
|
|
1074
|
+
const didSetup = await this.setupCondenseHeader(contentEl, pageEl);
|
|
1075
|
+
if (didSetup) {
|
|
1076
|
+
this.activeEffect = effect;
|
|
1077
|
+
}
|
|
986
1078
|
}
|
|
987
|
-
else if (hasFade) {
|
|
988
|
-
const pageEl = this.el.closest(`${appRootSelector},ion-page,.ion-page,page-inner`);
|
|
989
|
-
const contentEl = pageEl ? findIonContent(pageEl) : null;
|
|
1079
|
+
else if (hasFade && !isModeRestricted) {
|
|
990
1080
|
if (!contentEl) {
|
|
991
1081
|
printIonContentErrorMsg(this.el);
|
|
992
1082
|
return;
|
|
993
1083
|
}
|
|
994
|
-
const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"]');
|
|
1084
|
+
const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"],ion-header[scroll-effect="condense"]');
|
|
1085
|
+
this.activeEffect = effect;
|
|
995
1086
|
await this.setupFadeHeader(contentEl, condenseHeader);
|
|
996
1087
|
}
|
|
997
1088
|
}
|
|
998
1089
|
destroyCollapsibleHeader() {
|
|
1090
|
+
this.activeEffect = undefined;
|
|
1091
|
+
this.fadeCondenseSetupId++;
|
|
1092
|
+
this.scrollHideCtrlPromise = null;
|
|
1093
|
+
if (this.scrollHideCtrl) {
|
|
1094
|
+
this.scrollHideCtrl.destroy();
|
|
1095
|
+
this.scrollHideCtrl = undefined;
|
|
1096
|
+
}
|
|
999
1097
|
if (this.intersectionObserver) {
|
|
1000
1098
|
this.intersectionObserver.disconnect();
|
|
1001
1099
|
this.intersectionObserver = undefined;
|
|
@@ -1012,21 +1110,40 @@ const Header = class {
|
|
|
1012
1110
|
async setupCondenseHeader(contentEl, pageEl) {
|
|
1013
1111
|
if (!contentEl || !pageEl) {
|
|
1014
1112
|
printIonContentErrorMsg(this.el);
|
|
1015
|
-
return;
|
|
1113
|
+
return false;
|
|
1016
1114
|
}
|
|
1017
1115
|
if (typeof IntersectionObserver === 'undefined') {
|
|
1018
|
-
return;
|
|
1116
|
+
return false;
|
|
1117
|
+
}
|
|
1118
|
+
const setupId = ++this.fadeCondenseSetupId;
|
|
1119
|
+
const scrollEl = await getScrollElement(contentEl);
|
|
1120
|
+
if (this.fadeCondenseSetupId !== setupId) {
|
|
1121
|
+
return false;
|
|
1122
|
+
}
|
|
1123
|
+
this.scrollEl = scrollEl;
|
|
1124
|
+
/**
|
|
1125
|
+
* The condense effect requires an ion-title with size="large"
|
|
1126
|
+
* in the condense header. Without it, there is nothing to
|
|
1127
|
+
* collapse into the main header toolbar.
|
|
1128
|
+
*/
|
|
1129
|
+
const hasLargeTitle = this.el.querySelector('ion-title[size="large"]') !== null;
|
|
1130
|
+
if (!hasLargeTitle) {
|
|
1131
|
+
printIonWarning('[ion-header] - The condense scroll effect requires an <ion-title size="large"> in the condense header.', this.el);
|
|
1132
|
+
return false;
|
|
1019
1133
|
}
|
|
1020
|
-
this.scrollEl = await getScrollElement(contentEl);
|
|
1021
1134
|
const headers = pageEl.querySelectorAll('ion-header');
|
|
1022
|
-
this.collapsibleMainHeader = Array.from(headers).find((header) =>
|
|
1135
|
+
this.collapsibleMainHeader = Array.from(headers).find((header) => {
|
|
1136
|
+
var _a;
|
|
1137
|
+
const effect = (_a = header.scrollEffect) !== null && _a !== void 0 ? _a : header.collapse;
|
|
1138
|
+
return effect !== 'condense';
|
|
1139
|
+
});
|
|
1023
1140
|
if (!this.collapsibleMainHeader) {
|
|
1024
|
-
return;
|
|
1141
|
+
return false;
|
|
1025
1142
|
}
|
|
1026
1143
|
const mainHeaderIndex = createHeaderIndex(this.collapsibleMainHeader);
|
|
1027
1144
|
const scrollHeaderIndex = createHeaderIndex(this.el);
|
|
1028
1145
|
if (!mainHeaderIndex || !scrollHeaderIndex) {
|
|
1029
|
-
return;
|
|
1146
|
+
return false;
|
|
1030
1147
|
}
|
|
1031
1148
|
setHeaderActive(mainHeaderIndex, false);
|
|
1032
1149
|
setToolbarBackgroundOpacity(mainHeaderIndex.el, 0);
|
|
@@ -1058,23 +1175,35 @@ const Header = class {
|
|
|
1058
1175
|
this.collapsibleMainHeader.classList.add('header-collapse-main');
|
|
1059
1176
|
}
|
|
1060
1177
|
});
|
|
1178
|
+
return true;
|
|
1061
1179
|
}
|
|
1062
1180
|
render() {
|
|
1063
|
-
const { translucent, inheritedAttributes, divider } = this;
|
|
1181
|
+
const { translucent, inheritedAttributes, divider, scrollEffect, collapse } = this;
|
|
1064
1182
|
const theme = getIonTheme(this);
|
|
1065
|
-
const
|
|
1066
|
-
|
|
1183
|
+
const effect = scrollEffect !== null && scrollEffect !== void 0 ? scrollEffect : collapse;
|
|
1184
|
+
// condense/fade via the deprecated `collapse` prop are iOS-only.
|
|
1185
|
+
const isModeRestricted = scrollEffect === undefined && theme !== 'ios';
|
|
1186
|
+
const hasHide = effect === 'hide';
|
|
1187
|
+
const hasCondense = effect === 'condense' && !isModeRestricted && this.el.querySelector('ion-title[size="large"]') !== null;
|
|
1188
|
+
const hasFade = effect === 'fade' && !isModeRestricted;
|
|
1189
|
+
// The condense header should be hidden when
|
|
1190
|
+
// - deprecated collapse prop is used on non-iOS (mode restricted), or
|
|
1191
|
+
// - scrollEffect="condense" is set but no ion-title[size="large"] is present
|
|
1192
|
+
const isHiddenCondense = effect === 'condense' && !hasCondense;
|
|
1067
1193
|
// banner role must be at top level, so remove role if inside a menu
|
|
1068
|
-
const roleType = getRoleType(hostContext('ion-menu', this.el)
|
|
1069
|
-
return (h(Host, Object.assign({ key: '
|
|
1194
|
+
const roleType = isHiddenCondense ? 'none' : getRoleType(hostContext('ion-menu', this.el));
|
|
1195
|
+
return (h(Host, Object.assign({ key: '09f60ca014bb7b3a85d3c0a94e7989d5dbc43f46', role: roleType, class: {
|
|
1070
1196
|
[theme]: true,
|
|
1071
1197
|
// Used internally for styling
|
|
1072
1198
|
[`header-${theme}`]: true,
|
|
1073
1199
|
[`header-translucent`]: this.translucent,
|
|
1074
|
-
[
|
|
1200
|
+
['header-collapse-condense']: hasCondense,
|
|
1201
|
+
['header-collapse-condense-hidden']: isHiddenCondense,
|
|
1202
|
+
['header-collapse-fade']: hasFade,
|
|
1075
1203
|
[`header-translucent-${theme}`]: this.translucent,
|
|
1076
1204
|
['header-divider']: divider,
|
|
1077
|
-
|
|
1205
|
+
'header-scroll-effect-hide': hasHide,
|
|
1206
|
+
} }, inheritedAttributes), theme !== 'md' && translucent && h("div", { key: 'fd5ff245ae0166e5e1d50936cacc98c90625db48', class: "header-background" }), h("slot", { key: '1baa31af87b9eb6406a21073ec65afa191dfbb3d' })));
|
|
1078
1207
|
}
|
|
1079
1208
|
get el() { return getElement(this); }
|
|
1080
1209
|
};
|
|
@@ -1276,7 +1405,7 @@ const titleIonicCss = () => `:host{--color:initial;display:-ms-flexbox;display:f
|
|
|
1276
1405
|
|
|
1277
1406
|
const titleIosCss = () => `:host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host(.ion-color){color:var(--ion-color-base)}:host{top:0;-webkit-padding-start:90px;padding-inline-start:90px;-webkit-padding-end:90px;padding-inline-end:90px;padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);position:absolute;width:100%;height:100%;-webkit-transform:translateZ(0);transform:translateZ(0);font-size:min(1.0625rem, 20.4px);font-weight:600;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;pointer-events:none}:host{inset-inline-start:0}:host(.title-small){-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px;padding-top:6px;padding-bottom:16px;position:relative;font-size:min(0.8125rem, 23.4px);font-weight:normal}:host(.title-large){-webkit-padding-start:12px;padding-inline-start:12px;-webkit-padding-end:12px;padding-inline-end:12px;padding-top:2px;padding-bottom:4px;-webkit-transform-origin:left center;transform-origin:left center;position:static;-ms-flex-align:end;align-items:flex-end;min-width:100%;font-size:min(2.125rem, 61.2px);font-weight:700;text-align:start}:host(.title-large.title-rtl){-webkit-transform-origin:right center;transform-origin:right center}:host(.title-large.ion-cloned-element){--color:var(--ion-text-color, #000);font-family:var(--ion-font-family)}:host(.title-large) .toolbar-title{-webkit-transform-origin:inherit;transform-origin:inherit;width:auto}:host-context([dir=rtl]):host(.title-large) .toolbar-title,:host-context([dir=rtl]).title-large .toolbar-title{-webkit-transform-origin:calc(100% - inherit);transform-origin:calc(100% - inherit)}@supports selector(:dir(rtl)){:host(.title-large:dir(rtl)) .toolbar-title{-webkit-transform-origin:calc(100% - inherit);transform-origin:calc(100% - inherit)}}`;
|
|
1278
1407
|
|
|
1279
|
-
const titleMdCss = () => `:host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host(.ion-color){color:var(--ion-color-base)}:host{-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:20px;padding-inline-end:20px;padding-top:0;padding-bottom:0;font-size:1.25rem;font-weight:500;letter-spacing:0.0125em}:host(.title-small){width:100%;height:100%;font-size:0.9375rem;font-weight:normal}`;
|
|
1408
|
+
const titleMdCss = () => `:host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host(.ion-color){color:var(--ion-color-base)}:host{-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:20px;padding-inline-end:20px;padding-top:0;padding-bottom:0;font-size:1.25rem;font-weight:500;letter-spacing:0.0125em}:host(.title-small){width:100%;height:100%;font-size:0.9375rem;font-weight:normal}:host(.title-large){width:100%;height:100%;font-size:1.75rem;font-weight:400}`;
|
|
1280
1409
|
|
|
1281
1410
|
const ToolbarTitle = class {
|
|
1282
1411
|
constructor(hostRef) {
|