@ionic/core 8.7.17-dev.11772118942.181221d4 → 8.7.17-dev.11772568074.1d7a4aea
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/action-sheet.js +1 -561
- package/components/alert.js +1 -610
- package/components/animation.js +1 -817
- package/components/backdrop.js +1 -72
- package/components/button-active.js +1 -64
- package/components/button.js +1 -303
- package/components/buttons.js +1 -56
- package/components/capacitor.js +1 -10
- package/components/checkbox.js +1 -261
- package/components/config.js +1 -192
- package/components/content.js +1 -475
- package/components/cubic-bezier.js +1 -87
- package/components/data.js +1 -1635
- package/components/dir.js +1 -15
- package/components/focus-visible.js +1 -72
- package/components/framework-delegate.js +1 -137
- package/components/gesture-controller.js +1 -192
- package/components/haptic.js +1 -155
- package/components/hardware-back-button.js +1 -112
- package/components/header.js +1 -417
- package/components/helpers.js +1 -336
- package/components/icon.js +1 -456
- package/components/index.d.ts +2 -0
- package/components/index.js +1 -115
- package/components/index2.js +1 -416
- package/components/index3.js +1 -452
- package/components/index4.js +1 -118
- package/components/index5.js +1 -303
- package/components/index6.js +1 -29
- package/components/index7.js +1 -164
- package/components/index8.js +1 -125
- package/components/index9.js +1 -4
- package/components/input-shims.js +1 -624
- package/components/input.utils.js +1 -144
- package/components/ion-accordion-group.js +1 -269
- package/components/ion-accordion.js +1 -457
- package/components/ion-action-sheet.js +1 -6
- package/components/ion-alert.js +1 -6
- package/components/ion-app.js +1 -128
- package/components/ion-avatar.js +1 -41
- package/components/ion-back-button.js +1 -131
- package/components/ion-backdrop.js +1 -6
- package/components/ion-badge.js +1 -47
- package/components/ion-breadcrumb.js +1 -137
- package/components/ion-breadcrumbs.js +1 -164
- package/components/ion-button.js +1 -6
- package/components/ion-buttons.js +1 -6
- package/components/ion-card-content.js +1 -45
- package/components/ion-card-header.js +1 -56
- package/components/ion-card-subtitle.js +1 -48
- package/components/ion-card-title.js +1 -48
- package/components/ion-card.js +1 -107
- package/components/ion-checkbox.js +1 -6
- package/components/ion-chip.js +1 -66
- package/components/ion-col.js +1 -163
- package/components/ion-content.js +1 -6
- package/components/ion-datetime-button.js +1 -384
- package/components/ion-datetime.js +1 -2046
- package/components/ion-fab-button.js +1 -151
- package/components/ion-fab-list.js +1 -66
- package/components/ion-fab.js +1 -101
- package/components/ion-footer.js +1 -159
- package/components/ion-grid.js +1 -46
- package/components/ion-header.js +1 -6
- package/components/ion-icon.js +1 -6
- package/components/ion-img.js +1 -124
- package/components/ion-infinite-scroll-content.js +1 -70
- package/components/ion-infinite-scroll.js +1 -236
- package/components/ion-input-otp.js +1 -683
- package/components/ion-input-password-toggle.js +1 -129
- package/components/ion-input.js +1 -617
- package/components/ion-item-divider.js +1 -59
- package/components/ion-item-group.js +1 -46
- package/components/ion-item-option.js +1 -91
- package/components/ion-item-options.js +1 -73
- package/components/ion-item-sliding.js +1 -458
- package/components/ion-item.js +1 -6
- package/components/ion-label.js +1 -6
- package/components/ion-list-header.js +1 -6
- package/components/ion-list.js +1 -6
- package/components/ion-loading.js +1 -344
- package/components/ion-menu-button.js +1 -110
- package/components/ion-menu-toggle.js +1 -64
- package/components/ion-menu.js +1 -745
- package/components/ion-modal.js +1 -6
- package/components/ion-nav-link.js +1 -64
- package/components/ion-nav.js +1 -956
- package/components/ion-note.js +1 -47
- package/components/ion-picker-column-option.js +1 -6
- package/components/ion-picker-column.js +1 -6
- package/components/ion-picker-legacy-column.js +1 -6
- package/components/ion-picker-legacy.js +1 -343
- package/components/ion-picker.js +1 -6
- package/components/ion-popover.js +1 -6
- package/components/ion-progress-bar.js +1 -101
- package/components/ion-radio-group.js +1 -6
- package/components/ion-radio.js +1 -6
- package/components/ion-range.js +1 -853
- package/components/ion-refresher-content.js +1 -89
- package/components/ion-refresher.js +1 -751
- package/components/ion-reorder-group.js +1 -322
- package/components/ion-reorder.js +1 -60
- package/components/ion-ripple-effect.js +1 -6
- package/components/ion-route-redirect.js +1 -45
- package/components/ion-route.js +1 -74
- package/components/ion-router-link.js +1 -61
- package/components/ion-router-outlet.js +1 -227
- package/components/ion-router.js +1 -841
- package/components/ion-row.js +1 -36
- package/components/ion-searchbar.js +1 -530
- package/components/ion-segment-button.js +1 -174
- package/components/ion-segment-content.js +1 -35
- package/components/ion-segment-view.js +1 -148
- package/components/ion-segment.js +1 -602
- package/components/ion-select-modal.js +1 -6
- package/components/ion-select-option.js +1 -46
- package/components/ion-select-popover.js +1 -6
- package/components/ion-select.js +1 -1037
- package/components/ion-skeleton-text.js +1 -65
- package/components/ion-spinner.js +1 -6
- package/components/ion-split-pane.js +1 -197
- package/components/ion-tab-bar.js +1 -115
- package/components/ion-tab-button.js +1 -128
- package/components/ion-tab.js +1 -91
- package/components/ion-tabs.js +1 -205
- package/components/ion-text.js +1 -42
- package/components/ion-textarea.js +1 -554
- package/components/ion-thumbnail.js +1 -36
- package/components/ion-title.js +1 -6
- package/components/ion-toast.js +1 -941
- package/components/ion-toggle.js +1 -361
- package/components/ion-toolbar.js +1 -6
- package/components/ionic-global.js +1 -144
- package/components/ios.transition.js +1 -672
- package/components/item.js +1 -302
- package/components/keyboard-controller.js +1 -162
- package/components/keyboard.js +1 -141
- package/components/keyboard2.js +1 -76
- package/components/label.js +1 -100
- package/components/list-header.js +1 -47
- package/components/list.js +1 -68
- package/components/lock-controller.js +1 -35
- package/components/md.transition.js +1 -51
- package/components/menu-toggle-util.js +1 -9
- package/components/modal.js +1 -2674
- package/components/notch-controller.js +1 -150
- package/components/overlays.js +1 -912
- package/components/picker-column-option.js +1 -136
- package/components/picker-column.js +1 -595
- package/components/picker-column2.js +1 -377
- package/components/picker.js +1 -498
- package/components/popover.js +1 -1502
- package/components/radio-group.js +1 -287
- package/components/radio.js +1 -229
- package/components/refresher.utils.js +1 -193
- package/components/ripple-effect.js +1 -109
- package/components/select-modal.js +1 -196
- package/components/select-popover.js +1 -189
- package/components/spinner.js +1 -224
- package/components/status-tap.js +1 -36
- package/components/swipe-back.js +1 -75
- package/components/theme.js +1 -40
- package/components/title.js +1 -70
- package/components/toolbar.js +1 -89
- package/components/validity.js +1 -14
- package/components/watch-options.js +1 -44
- package/dist/cjs/{animation-Bt3H9L1C.js → animation-Dg4yiuR2.js} +1 -1
- package/dist/cjs/app-globals-CLI8xCmk.js +11 -0
- package/dist/cjs/{button-active-CMc8cD90.js → button-active-FscMI17-.js} +1 -1
- package/dist/cjs/{config-C5fsO43a.js → config-BukYi_pW.js} +1 -1
- package/dist/cjs/{data-JwZKaIQB.js → data-BYlBjkMU.js} +1 -1
- package/dist/cjs/{framework-delegate-DMJRBuDi.js → framework-delegate-CRgp8o_p.js} +1 -1
- package/dist/cjs/{hardware-back-button-VCK4V3mG.js → hardware-back-button-C4rMJ5uI.js} +1 -1
- package/dist/cjs/{helpers-DrTqNghc.js → helpers-CxTYJdbT.js} +1 -1
- package/dist/cjs/{index-094mMFB-.js → index-C845Ti6K.js} +4 -4
- package/dist/cjs/{index-DrMUZJj6.js → index-CFUwM5x_.js} +5 -5
- package/dist/cjs/{index-D6Wc6v08.js → index-CqT-2gKy.js} +503 -382
- package/dist/cjs/{index-CO6eryBo.js → index-MbaBbWXk.js} +2 -2
- package/dist/cjs/{index-C534ULug.js → index-YcSftOMz.js} +2 -2
- package/dist/cjs/index.cjs.js +12 -12
- package/dist/cjs/{input-shims-CW0KUFTQ.js → input-shims-DlFhYYTs.js} +3 -3
- package/dist/cjs/{input.utils-B_QROI2g.js → input.utils-DmeJ8dmo.js} +2 -2
- package/dist/cjs/ion-accordion_2.cjs.entry.js +23 -15
- package/dist/cjs/ion-action-sheet.cjs.entry.js +21 -15
- package/dist/cjs/ion-alert.cjs.entry.js +25 -17
- package/dist/cjs/ion-app_8.cjs.entry.js +44 -40
- package/dist/cjs/ion-avatar_3.cjs.entry.js +12 -12
- package/dist/cjs/ion-back-button.cjs.entry.js +7 -7
- package/dist/cjs/ion-backdrop.cjs.entry.js +6 -6
- package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +20 -14
- package/dist/cjs/ion-button_2.cjs.entry.js +36 -18
- package/dist/cjs/ion-card_5.cjs.entry.js +23 -23
- package/dist/cjs/ion-checkbox.cjs.entry.js +7 -7
- package/dist/cjs/ion-chip.cjs.entry.js +6 -6
- package/dist/cjs/ion-col_3.cjs.entry.js +8 -8
- package/dist/cjs/ion-datetime-button.cjs.entry.js +8 -8
- package/dist/cjs/ion-datetime_3.cjs.entry.js +67 -39
- package/dist/cjs/ion-fab_3.cjs.entry.js +17 -13
- package/dist/cjs/ion-img.cjs.entry.js +8 -6
- package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +17 -13
- package/dist/cjs/ion-input-otp.cjs.entry.js +16 -10
- package/dist/cjs/ion-input-password-toggle.cjs.entry.js +9 -7
- package/dist/cjs/ion-input.cjs.entry.js +21 -13
- package/dist/cjs/ion-item-option_3.cjs.entry.js +17 -15
- package/dist/cjs/ion-item_8.cjs.entry.js +42 -36
- package/dist/cjs/ion-loading.cjs.entry.js +18 -14
- package/dist/cjs/ion-menu_3.cjs.entry.js +30 -22
- package/dist/cjs/ion-modal.cjs.entry.js +55 -40
- package/dist/cjs/ion-nav_2.cjs.entry.js +14 -10
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +10 -8
- package/dist/cjs/ion-picker-column.cjs.entry.js +11 -7
- package/dist/cjs/ion-picker.cjs.entry.js +6 -6
- package/dist/cjs/ion-popover.cjs.entry.js +21 -15
- package/dist/cjs/ion-progress-bar.cjs.entry.js +7 -7
- package/dist/cjs/ion-radio_2.cjs.entry.js +17 -13
- package/dist/cjs/ion-range.cjs.entry.js +29 -15
- package/dist/cjs/ion-refresher_2.cjs.entry.js +45 -14
- package/dist/cjs/ion-reorder_2.cjs.entry.js +13 -11
- package/dist/cjs/ion-ripple-effect.cjs.entry.js +4 -4
- package/dist/cjs/ion-route_4.cjs.entry.js +20 -10
- package/dist/cjs/ion-searchbar.cjs.entry.js +22 -12
- package/dist/cjs/ion-segment-content.cjs.entry.js +3 -3
- package/dist/cjs/ion-segment-view.cjs.entry.js +5 -5
- package/dist/cjs/ion-segment_2.cjs.entry.js +26 -16
- package/dist/cjs/ion-select-modal.cjs.entry.js +12 -12
- package/dist/cjs/ion-select_3.cjs.entry.js +29 -21
- package/dist/cjs/ion-spinner.cjs.entry.js +4 -4
- package/dist/cjs/ion-split-pane.cjs.entry.js +15 -9
- package/dist/cjs/ion-tab-bar_2.cjs.entry.js +14 -12
- package/dist/cjs/ion-tab_2.cjs.entry.js +10 -8
- package/dist/cjs/ion-text.cjs.entry.js +4 -4
- package/dist/cjs/ion-textarea.cjs.entry.js +18 -12
- package/dist/cjs/ion-toast.cjs.entry.js +21 -15
- package/dist/cjs/ion-toggle.cjs.entry.js +10 -8
- package/dist/cjs/{ionic-global-HMVqOFGO.js → ionic-global-Bc3kJi1Z.js} +1 -1
- package/dist/cjs/ionic.cjs.js +5 -5
- package/dist/cjs/{ios.transition-BOt_uW73.js → ios.transition-trBiC95R.js} +4 -4
- package/dist/cjs/loader.cjs.js +4 -4
- package/dist/cjs/{md.transition-Dt968VXB.js → md.transition-CUQECuvD.js} +4 -4
- package/dist/cjs/{notch-controller-Bzqhjm4f.js → notch-controller-sD-lTpdc.js} +1 -1
- package/dist/cjs/{overlays-B2b-TTbl.js → overlays-C2jiBSNQ.js} +5 -5
- package/dist/cjs/{status-tap-g0sWWkXk.js → status-tap-CCJk5VgT.js} +3 -3
- package/dist/cjs/{swipe-back-BIayeNOD.js → swipe-back-BGhTQ1CU.js} +2 -2
- package/dist/collection/collection-manifest.json +2 -2
- package/dist/collection/components/accordion-group/accordion-group.js +4 -2
- package/dist/collection/components/action-sheet/action-sheet.js +20 -10
- package/dist/collection/components/alert/alert.js +24 -12
- package/dist/collection/components/back-button/back-button.js +4 -2
- package/dist/collection/components/badge/badge.js +2 -1
- package/dist/collection/components/breadcrumb/breadcrumb.js +8 -4
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +4 -2
- package/dist/collection/components/button/button.js +6 -3
- package/dist/collection/components/card/card.js +6 -3
- package/dist/collection/components/card-header/card-header.js +2 -1
- package/dist/collection/components/card-subtitle/card-subtitle.js +2 -1
- package/dist/collection/components/card-title/card-title.js +2 -1
- package/dist/collection/components/checkbox/checkbox.js +4 -2
- package/dist/collection/components/chip/chip.js +2 -1
- package/dist/collection/components/content/content.js +8 -4
- package/dist/collection/components/datetime/datetime.js +34 -15
- package/dist/collection/components/datetime-button/datetime-button.js +2 -1
- package/dist/collection/components/fab-button/fab-button.js +6 -3
- package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +4 -2
- package/dist/collection/components/input/input.js +11 -6
- package/dist/collection/components/input-otp/input-otp.js +8 -4
- package/dist/collection/components/input-password-toggle/input-password-toggle.js +4 -2
- package/dist/collection/components/item/item.js +6 -3
- package/dist/collection/components/item-divider/item-divider.js +2 -1
- package/dist/collection/components/item-option/item-option.js +2 -1
- package/dist/collection/components/item-options/item-options.js +2 -1
- package/dist/collection/components/item-sliding/item-sliding.js +2 -1
- package/dist/collection/components/label/label.js +6 -3
- package/dist/collection/components/list-header/list-header.js +2 -1
- package/dist/collection/components/loading/loading.js +22 -11
- package/dist/collection/components/menu/menu.js +10 -5
- package/dist/collection/components/menu-button/menu-button.js +2 -1
- package/dist/collection/components/modal/gestures/sheet.js +32 -21
- package/dist/collection/components/modal/modal.js +35 -20
- package/dist/collection/components/nav/nav.js +89 -45
- package/dist/collection/components/nav-link/nav-link.js +9 -5
- package/dist/collection/components/note/note.js +2 -1
- package/dist/collection/components/picker/picker.js +2 -1
- package/dist/collection/components/picker-column/picker-column.js +6 -3
- package/dist/collection/components/picker-column-option/picker-column-option.js +2 -1
- package/dist/collection/components/picker-legacy/picker.js +24 -12
- package/dist/collection/components/picker-legacy-column/picker-column.js +4 -2
- package/dist/collection/components/popover/popover.js +33 -17
- package/dist/collection/components/progress-bar/progress-bar.js +2 -1
- package/dist/collection/components/radio/radio.js +2 -1
- package/dist/collection/components/radio-group/radio-group.js +6 -3
- package/dist/collection/components/range/range.js +14 -7
- package/dist/collection/components/refresher/refresher.js +73 -5
- package/dist/collection/components/refresher-content/refresher-content.js +8 -4
- package/dist/collection/components/reorder-group/reorder-group.js +6 -3
- package/dist/collection/components/route/route.js +4 -2
- package/dist/collection/components/router/router.js +10 -5
- package/dist/collection/components/router-link/router-link.js +6 -3
- package/dist/collection/components/router-outlet/router-outlet.js +18 -9
- package/dist/collection/components/searchbar/searchbar.js +11 -6
- package/dist/collection/components/segment/segment.js +10 -5
- package/dist/collection/components/segment-button/segment-button.js +4 -2
- package/dist/collection/components/segment-view/segment-view.js +2 -1
- package/dist/collection/components/select/select.js +10 -5
- package/dist/collection/components/select-modal/select-modal.js +2 -1
- package/dist/collection/components/select-popover/select-popover.js +2 -1
- package/dist/collection/components/skeleton-text/skeleton-text.js +2 -1
- package/dist/collection/components/spinner/spinner.js +4 -2
- package/dist/collection/components/tab/tab.js +4 -2
- package/dist/collection/components/tab-bar/tab-bar.js +4 -2
- package/dist/collection/components/tab-button/tab-button.js +4 -2
- package/dist/collection/components/tabs/tabs.js +4 -2
- package/dist/collection/components/text/text.js +2 -1
- package/dist/collection/components/textarea/textarea.js +6 -3
- package/dist/collection/components/title/title.js +4 -2
- package/dist/collection/components/toast/toast.js +34 -17
- package/dist/collection/components/toggle/toggle.js +4 -2
- package/dist/collection/components/toolbar/toolbar.js +2 -1
- package/dist/docs.d.ts +37 -0
- package/dist/docs.json +835 -381
- package/dist/esm/{animation-Dt8bGnA-.js → animation-CnGMT4ji.js} +1 -1
- package/dist/esm/app-globals-DhZjtldk.js +9 -0
- package/dist/esm/{button-active-L570Swow.js → button-active-BBx21brx.js} +1 -1
- package/dist/esm/{config-mCdtaoPe.js → config-TO1rZH52.js} +1 -1
- package/dist/esm/{data-DCORV9FH.js → data-B9iGR5YO.js} +1 -1
- package/dist/esm/{framework-delegate-BYawdMXj.js → framework-delegate-CyxE1S_P.js} +1 -1
- package/dist/esm/{hardware-back-button-CPLxO-Ev.js → hardware-back-button-CTe4XmL7.js} +1 -1
- package/dist/esm/{helpers-DEn3pfjm.js → helpers-Tl8jw6S2.js} +1 -1
- package/dist/esm/{index-r2D9DEro.js → index-B-hkiOUh.js} +4 -4
- package/dist/esm/{index-CvDIirVx.js → index-B2KwgBLx.js} +5 -5
- package/dist/esm/{index-ceb5RaMT.js → index-BtUdxPjv.js} +2 -2
- package/dist/esm/{index-C8IsBmNU.js → index-IGIE5vDm.js} +503 -382
- package/dist/esm/{index-Bs3kT4bc.js → index-hW6eNZ3o.js} +2 -2
- package/dist/esm/index.js +12 -12
- package/dist/esm/{input-shims-DyOpfTg6.js → input-shims-C1hAaHcP.js} +3 -3
- package/dist/esm/{input.utils-DrvTa8gz.js → input.utils-Bxa_DQ7-.js} +2 -2
- package/dist/esm/ion-accordion_2.entry.js +23 -15
- package/dist/esm/ion-action-sheet.entry.js +21 -15
- package/dist/esm/ion-alert.entry.js +25 -17
- package/dist/esm/ion-app_8.entry.js +44 -40
- package/dist/esm/ion-avatar_3.entry.js +12 -12
- package/dist/esm/ion-back-button.entry.js +7 -7
- package/dist/esm/ion-backdrop.entry.js +6 -6
- package/dist/esm/ion-breadcrumb_2.entry.js +20 -14
- package/dist/esm/ion-button_2.entry.js +36 -18
- package/dist/esm/ion-card_5.entry.js +23 -23
- package/dist/esm/ion-checkbox.entry.js +7 -7
- package/dist/esm/ion-chip.entry.js +6 -6
- package/dist/esm/ion-col_3.entry.js +8 -8
- package/dist/esm/ion-datetime-button.entry.js +8 -8
- package/dist/esm/ion-datetime_3.entry.js +67 -39
- package/dist/esm/ion-fab_3.entry.js +17 -13
- package/dist/esm/ion-img.entry.js +8 -6
- package/dist/esm/ion-infinite-scroll_2.entry.js +17 -13
- package/dist/esm/ion-input-otp.entry.js +16 -10
- package/dist/esm/ion-input-password-toggle.entry.js +9 -7
- package/dist/esm/ion-input.entry.js +21 -13
- package/dist/esm/ion-item-option_3.entry.js +17 -15
- package/dist/esm/ion-item_8.entry.js +42 -36
- package/dist/esm/ion-loading.entry.js +18 -14
- package/dist/esm/ion-menu_3.entry.js +30 -22
- package/dist/esm/ion-modal.entry.js +55 -40
- package/dist/esm/ion-nav_2.entry.js +14 -10
- package/dist/esm/ion-picker-column-option.entry.js +10 -8
- package/dist/esm/ion-picker-column.entry.js +11 -7
- package/dist/esm/ion-picker.entry.js +6 -6
- package/dist/esm/ion-popover.entry.js +21 -15
- package/dist/esm/ion-progress-bar.entry.js +7 -7
- package/dist/esm/ion-radio_2.entry.js +17 -13
- package/dist/esm/ion-range.entry.js +29 -15
- package/dist/esm/ion-refresher_2.entry.js +45 -14
- package/dist/esm/ion-reorder_2.entry.js +13 -11
- package/dist/esm/ion-ripple-effect.entry.js +4 -4
- package/dist/esm/ion-route_4.entry.js +20 -10
- package/dist/esm/ion-searchbar.entry.js +22 -12
- package/dist/esm/ion-segment-content.entry.js +3 -3
- package/dist/esm/ion-segment-view.entry.js +5 -5
- package/dist/esm/ion-segment_2.entry.js +26 -16
- package/dist/esm/ion-select-modal.entry.js +12 -12
- package/dist/esm/ion-select_3.entry.js +29 -21
- package/dist/esm/ion-spinner.entry.js +4 -4
- package/dist/esm/ion-split-pane.entry.js +15 -9
- package/dist/esm/ion-tab-bar_2.entry.js +14 -12
- package/dist/esm/ion-tab_2.entry.js +10 -8
- package/dist/esm/ion-text.entry.js +4 -4
- package/dist/esm/ion-textarea.entry.js +18 -12
- package/dist/esm/ion-toast.entry.js +21 -15
- package/dist/esm/ion-toggle.entry.js +10 -8
- package/dist/esm/{ionic-global-CDrldh-5.js → ionic-global-DfbeLwcV.js} +1 -1
- package/dist/esm/ionic.js +6 -6
- package/dist/esm/{ios.transition-BDzw0_Hm.js → ios.transition--aMF-pDH.js} +4 -4
- package/dist/esm/loader.js +5 -5
- package/dist/esm/{md.transition-BzDYi3qq.js → md.transition-BEVbfm8j.js} +4 -4
- package/dist/esm/{notch-controller-BwelN_JM.js → notch-controller-DAcvKU57.js} +1 -1
- package/dist/esm/{overlays-D5YkFThA.js → overlays-F8GHPo-e.js} +5 -5
- package/dist/esm/{status-tap-5DQ7Fc4V.js → status-tap-BfJqFSLF.js} +3 -3
- package/dist/esm/{swipe-back-BKw2CAHc.js → swipe-back-BZBFwTQV.js} +2 -2
- package/dist/html.html-data.json +109 -109
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-316c0420.entry.js → p-025d2d32.entry.js} +1 -1
- package/dist/ionic/p-02acdef4.entry.js +4 -0
- package/dist/ionic/p-04e2c388.entry.js +4 -0
- package/dist/ionic/{p-370e4237.entry.js → p-074344b8.entry.js} +1 -1
- package/dist/ionic/p-0761b4d3.entry.js +4 -0
- package/dist/ionic/p-13ade5c8.entry.js +4 -0
- package/dist/ionic/p-1b02923f.entry.js +4 -0
- package/dist/ionic/p-1bd477a9.entry.js +4 -0
- package/dist/ionic/{p-d2489bf2.entry.js → p-1fa1406c.entry.js} +1 -1
- package/dist/ionic/{p-46d74291.entry.js → p-1fd588a7.entry.js} +1 -1
- package/dist/ionic/p-239a27a4.entry.js +4 -0
- package/dist/ionic/{p-94de5cfa.entry.js → p-277abec1.entry.js} +1 -1
- package/dist/ionic/{p-dd1aef77.entry.js → p-28d7852f.entry.js} +1 -1
- package/dist/ionic/{p-49d06882.entry.js → p-301c43f8.entry.js} +1 -1
- package/dist/ionic/{p-79bd78f9.entry.js → p-370a60ee.entry.js} +1 -1
- package/dist/ionic/p-3e143d1d.entry.js +4 -0
- package/dist/ionic/p-4431ef7e.entry.js +4 -0
- package/dist/ionic/p-463767ce.entry.js +4 -0
- package/dist/ionic/p-4f888343.entry.js +4 -0
- package/dist/ionic/p-51c11c47.entry.js +4 -0
- package/dist/ionic/p-56050077.entry.js +4 -0
- package/dist/ionic/p-6a3a5aae.entry.js +4 -0
- package/dist/ionic/p-6b97f2a3.entry.js +4 -0
- package/dist/ionic/{p-51a60e0f.entry.js → p-7c72d482.entry.js} +1 -1
- package/dist/ionic/p-7d20f4f8.entry.js +4 -0
- package/dist/ionic/{p-11aa58d6.entry.js → p-80cac7a2.entry.js} +1 -1
- package/dist/ionic/p-91fc7352.entry.js +4 -0
- package/dist/ionic/p-93845421.entry.js +4 -0
- package/dist/ionic/{p-3a6caca9.entry.js → p-964090ef.entry.js} +1 -1
- package/dist/ionic/p-96a2e768.entry.js +4 -0
- package/dist/ionic/{p-d126e8d3.entry.js → p-9745651b.entry.js} +1 -1
- package/dist/ionic/{p-f9061316.entry.js → p-9802c88e.entry.js} +1 -1
- package/dist/ionic/{p-582824c5.entry.js → p-9833cf63.entry.js} +1 -1
- package/dist/ionic/{p-675b1a31.entry.js → p-9fae83d8.entry.js} +1 -1
- package/dist/ionic/{p-CwgG81ZD.js → p-B8xlpH8p.js} +1 -1
- package/dist/ionic/{p-C7hRNDhM.js → p-BAt5H1ac.js} +1 -1
- package/dist/ionic/p-BW_TRJm8.js +4 -0
- package/dist/ionic/{p-DDb5r57F.js → p-Bum7H1fw.js} +1 -1
- package/dist/ionic/{p-D0dMcSkw.js → p-BvFYtOdE.js} +1 -1
- package/dist/ionic/{p-Dc45iWE4.js → p-BxIcPWoV.js} +1 -1
- package/dist/ionic/{p-BYEqWnSg.js → p-C0JvVFMv.js} +1 -1
- package/dist/ionic/{p-CTfR9YZG.js → p-CGmVTdWh.js} +1 -1
- package/dist/ionic/{p-BOVrCkpJ.js → p-CYbRmDdy.js} +1 -1
- package/dist/ionic/{p-D-eFFUkA.js → p-CmFz1Mjc.js} +1 -1
- package/dist/ionic/p-CtA-yJYy.js +4 -0
- package/dist/ionic/p-D8HJQ1qq.js +4 -0
- package/dist/ionic/{p-B0q1YL7N.js → p-DB_iPQC-.js} +1 -1
- package/dist/ionic/{p-DNcfiJwE.js → p-DLbbmF9h.js} +1 -1
- package/dist/ionic/{p-DdR6rpbR.js → p-DTPR1Wpn.js} +1 -1
- package/dist/ionic/{p-DCv9sLH2.js → p-DjriolRs.js} +1 -1
- package/dist/ionic/p-DtVZDHlS.js +4 -0
- package/dist/ionic/{p-QHYY4sjU.js → p-GWUGgWx6.js} +1 -1
- package/dist/ionic/p-IGIE5vDm.js +5 -0
- package/dist/ionic/{p-BFvmZNyx.js → p-NFFyoJ4Q.js} +1 -1
- package/dist/ionic/{p-86f53961.entry.js → p-a287e18e.entry.js} +1 -1
- package/dist/ionic/p-a805674e.entry.js +4 -0
- package/dist/ionic/p-a81ae2cd.entry.js +4 -0
- package/dist/ionic/{p-da7d04cc.entry.js → p-a84f2d21.entry.js} +1 -1
- package/dist/ionic/{p-dbbe606a.entry.js → p-b2d5238b.entry.js} +1 -1
- package/dist/ionic/{p-d1f54e28.entry.js → p-b440381f.entry.js} +1 -1
- package/dist/ionic/{p-72c38b88.entry.js → p-b4d52b58.entry.js} +1 -1
- package/dist/ionic/{p-2a939845.entry.js → p-b67a2114.entry.js} +1 -1
- package/dist/ionic/{p-c73627c8.entry.js → p-bced1f3e.entry.js} +1 -1
- package/dist/ionic/{p-9a2d390d.entry.js → p-c1c9b2bb.entry.js} +1 -1
- package/dist/ionic/{p-f8f22cc0.entry.js → p-c3e65e45.entry.js} +1 -1
- package/dist/ionic/p-c76cc21d.entry.js +4 -0
- package/dist/ionic/{p-b0a7585c.entry.js → p-ca31010f.entry.js} +1 -1
- package/dist/ionic/p-cbf245b5.entry.js +4 -0
- package/dist/ionic/p-d68b665a.entry.js +4 -0
- package/dist/ionic/{p-9575b654.entry.js → p-e663bc5a.entry.js} +1 -1
- package/dist/ionic/p-efe86ed9.entry.js +4 -0
- package/dist/ionic/{p-ac4eb91d.entry.js → p-f5dfb9a3.entry.js} +1 -1
- package/dist/ionic/{p-DbQ5QkTP.js → p-gbVXD275.js} +1 -1
- package/dist/ionic/p-hNN3VvaC.js +4 -0
- package/dist/types/components/datetime/datetime.d.ts +9 -0
- package/dist/types/components/header/header.utils.d.ts +2 -1
- package/dist/types/components/modal/modal-interface.d.ts +5 -1
- package/dist/types/components/modal/modal.d.ts +5 -0
- package/dist/types/components/refresher/refresher-interface.d.ts +7 -0
- package/dist/types/components/refresher/refresher.d.ts +16 -3
- package/dist/types/components.d.ts +927 -189
- package/dist/types/interface.d.ts +1 -1
- package/dist/types/stencil-public-runtime.d.ts +126 -14
- package/dist/types/utils/gesture/listener.d.ts +2 -1
- package/hydrate/index.d.ts +12 -0
- package/hydrate/index.js +5202 -1327
- package/hydrate/index.mjs +5201 -1328
- package/package.json +2 -2
- package/dist/cjs/app-globals-Ciccnk9_.js +0 -10
- package/dist/esm/app-globals-BDSf8fOA.js +0 -8
- package/dist/ionic/p-012212e4.entry.js +0 -4
- package/dist/ionic/p-074839fc.entry.js +0 -4
- package/dist/ionic/p-0dfa5a37.entry.js +0 -4
- package/dist/ionic/p-0f418a37.entry.js +0 -4
- package/dist/ionic/p-11518b31.entry.js +0 -4
- package/dist/ionic/p-1838bed5.entry.js +0 -4
- package/dist/ionic/p-29721c43.entry.js +0 -4
- package/dist/ionic/p-31f7095f.entry.js +0 -4
- package/dist/ionic/p-34642fa1.entry.js +0 -4
- package/dist/ionic/p-35696017.entry.js +0 -4
- package/dist/ionic/p-40c261a3.entry.js +0 -4
- package/dist/ionic/p-4e41ea20.entry.js +0 -4
- package/dist/ionic/p-6241ce47.entry.js +0 -4
- package/dist/ionic/p-639dd543.entry.js +0 -4
- package/dist/ionic/p-6444c606.entry.js +0 -4
- package/dist/ionic/p-6d070558.entry.js +0 -4
- package/dist/ionic/p-7268efa5.entry.js +0 -4
- package/dist/ionic/p-7babec72.entry.js +0 -4
- package/dist/ionic/p-BKc55Xev.js +0 -4
- package/dist/ionic/p-Bmgaetn_.js +0 -4
- package/dist/ionic/p-C8IsBmNU.js +0 -5
- package/dist/ionic/p-CJxh_yLS.js +0 -4
- package/dist/ionic/p-DUt5fQmA.js +0 -4
- package/dist/ionic/p-DZRJwG4S.js +0 -4
- package/dist/ionic/p-a127bee2.entry.js +0 -4
- package/dist/ionic/p-b3d44509.entry.js +0 -4
- package/dist/ionic/p-cc45bcbc.entry.js +0 -4
- package/dist/ionic/p-d0a2a1ab.entry.js +0 -4
- package/dist/ionic/p-d3014190.entry.js +0 -4
- package/dist/ionic/p-db82892c.entry.js +0 -4
- package/dist/ionic/p-e1d1f3cc.entry.js +0 -4
|
@@ -1,115 +1,4 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
5
|
-
import { c as config, a as printIonError } from './index4.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* CloseWatcher is a newer API that lets
|
|
9
|
-
* use detect the hardware back button event
|
|
10
|
-
* in a web browser: https://caniuse.com/?search=closewatcher
|
|
11
|
-
* However, not every browser supports it yet.
|
|
12
|
-
*
|
|
13
|
-
* This needs to be a function so that we can
|
|
14
|
-
* check the config once it has been set.
|
|
15
|
-
* Otherwise, this code would be evaluated the
|
|
16
|
-
* moment this file is evaluated which could be
|
|
17
|
-
* before the config is set.
|
|
18
|
-
*/
|
|
19
|
-
const shouldUseCloseWatcher = () => config.get('experimentalCloseWatcher', false) && win !== undefined && 'CloseWatcher' in win;
|
|
20
|
-
/**
|
|
21
|
-
* When hardwareBackButton: false in config,
|
|
22
|
-
* we need to make sure we also block the default
|
|
23
|
-
* webview behavior. If we don't then it will be
|
|
24
|
-
* possible for users to navigate backward while
|
|
25
|
-
* an overlay is still open. Additionally, it will
|
|
26
|
-
* give the appearance that the hardwareBackButton
|
|
27
|
-
* config is not working as the page transition
|
|
28
|
-
* will still happen.
|
|
29
|
-
*/
|
|
30
|
-
const blockHardwareBackButton = () => {
|
|
31
|
-
document.addEventListener('backbutton', () => { }); // eslint-disable-line
|
|
32
|
-
};
|
|
33
|
-
const startHardwareBackButton = () => {
|
|
34
|
-
const doc = document;
|
|
35
|
-
let busy = false;
|
|
36
|
-
const backButtonCallback = () => {
|
|
37
|
-
if (busy) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
let index = 0;
|
|
41
|
-
let handlers = [];
|
|
42
|
-
const ev = new CustomEvent('ionBackButton', {
|
|
43
|
-
bubbles: false,
|
|
44
|
-
detail: {
|
|
45
|
-
register(priority, handler) {
|
|
46
|
-
handlers.push({ priority, handler, id: index++ });
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
});
|
|
50
|
-
doc.dispatchEvent(ev);
|
|
51
|
-
const executeAction = async (handlerRegister) => {
|
|
52
|
-
try {
|
|
53
|
-
if (handlerRegister === null || handlerRegister === void 0 ? void 0 : handlerRegister.handler) {
|
|
54
|
-
const result = handlerRegister.handler(processHandlers);
|
|
55
|
-
if (result != null) {
|
|
56
|
-
await result;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
catch (e) {
|
|
61
|
-
printIonError('[ion-app] - Exception in startHardwareBackButton:', e);
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
const processHandlers = () => {
|
|
65
|
-
if (handlers.length > 0) {
|
|
66
|
-
let selectedHandler = {
|
|
67
|
-
priority: Number.MIN_SAFE_INTEGER,
|
|
68
|
-
handler: () => undefined,
|
|
69
|
-
id: -1,
|
|
70
|
-
};
|
|
71
|
-
handlers.forEach((handler) => {
|
|
72
|
-
if (handler.priority >= selectedHandler.priority) {
|
|
73
|
-
selectedHandler = handler;
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
busy = true;
|
|
77
|
-
handlers = handlers.filter((handler) => handler.id !== selectedHandler.id);
|
|
78
|
-
executeAction(selectedHandler).then(() => (busy = false));
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
processHandlers();
|
|
82
|
-
};
|
|
83
|
-
/**
|
|
84
|
-
* If the CloseWatcher is defined then
|
|
85
|
-
* we don't want to also listen for the native
|
|
86
|
-
* backbutton event otherwise we may get duplicate
|
|
87
|
-
* events firing.
|
|
88
|
-
*/
|
|
89
|
-
if (shouldUseCloseWatcher()) {
|
|
90
|
-
let watcher;
|
|
91
|
-
const configureWatcher = () => {
|
|
92
|
-
watcher === null || watcher === void 0 ? void 0 : watcher.destroy();
|
|
93
|
-
watcher = new win.CloseWatcher();
|
|
94
|
-
/**
|
|
95
|
-
* Once a close request happens
|
|
96
|
-
* the watcher gets destroyed.
|
|
97
|
-
* As a result, we need to re-configure
|
|
98
|
-
* the watcher so we can respond to other
|
|
99
|
-
* close requests.
|
|
100
|
-
*/
|
|
101
|
-
watcher.onclose = () => {
|
|
102
|
-
backButtonCallback();
|
|
103
|
-
configureWatcher();
|
|
104
|
-
};
|
|
105
|
-
};
|
|
106
|
-
configureWatcher();
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
doc.addEventListener('backbutton', backButtonCallback);
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
const OVERLAY_BACK_BUTTON_PRIORITY = 100;
|
|
113
|
-
const MENU_BACK_BUTTON_PRIORITY = 99; // 1 less than overlay priority since menu is displayed behind overlays
|
|
114
|
-
|
|
115
|
-
export { MENU_BACK_BUTTON_PRIORITY, OVERLAY_BACK_BUTTON_PRIORITY, blockHardwareBackButton, shouldUseCloseWatcher, startHardwareBackButton };
|
|
4
|
+
import{w as t}from"./index9.js";import{c as e,a as n}from"./index4.js";const o=()=>e.get("experimentalCloseWatcher",!1)&&void 0!==t&&"CloseWatcher"in t,i=()=>{document.addEventListener("backbutton",(()=>{}))},r=()=>{const e=document;let i=!1;const r=()=>{if(i)return;let t=0,o=[];const r=new CustomEvent("ionBackButton",{bubbles:!1,detail:{register(e,n){o.push({priority:e,handler:n,id:t++})}}});e.dispatchEvent(r);const a=()=>{if(o.length>0){let t={priority:Number.MIN_SAFE_INTEGER,handler:()=>{},id:-1};o.forEach((e=>{e.priority>=t.priority&&(t=e)})),i=!0,o=o.filter((e=>e.id!==t.id)),(async t=>{try{if(null==t?void 0:t.handler){const e=t.handler(a);null!=e&&await e}}catch(t){n("[ion-app] - Exception in startHardwareBackButton:",t)}})(t).then((()=>i=!1))}};a()};if(o()){let e;const n=()=>{null==e||e.destroy(),e=new t.CloseWatcher,e.onclose=()=>{r(),n()}};n()}else e.addEventListener("backbutton",r)},a=100,c=99;export{c as MENU_BACK_BUTTON_PRIORITY,a as OVERLAY_BACK_BUTTON_PRIORITY,i as blockHardwareBackButton,o as shouldUseCloseWatcher,r as startHardwareBackButton}
|
package/components/header.js
CHANGED
|
@@ -1,420 +1,4 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
5
|
-
import { g as getScrollElement, f as findIonContent, p as printIonContentErrorMsg } from './index8.js';
|
|
6
|
-
import { f as clamp, i as inheritAriaAttributes } from './helpers.js';
|
|
7
|
-
import { h as hostContext } from './theme.js';
|
|
8
|
-
import { b as getIonMode } from './ionic-global.js';
|
|
9
|
-
|
|
10
|
-
const TRANSITION = 'all 0.2s ease-in-out';
|
|
11
|
-
const ROLE_NONE = 'none';
|
|
12
|
-
const ROLE_BANNER = 'banner';
|
|
13
|
-
const cloneElement = (tagName) => {
|
|
14
|
-
const getCachedEl = document.querySelector(`${tagName}.ion-cloned-element`);
|
|
15
|
-
if (getCachedEl !== null) {
|
|
16
|
-
return getCachedEl;
|
|
17
|
-
}
|
|
18
|
-
const clonedEl = document.createElement(tagName);
|
|
19
|
-
clonedEl.classList.add('ion-cloned-element');
|
|
20
|
-
clonedEl.style.setProperty('display', 'none');
|
|
21
|
-
document.body.appendChild(clonedEl);
|
|
22
|
-
return clonedEl;
|
|
23
|
-
};
|
|
24
|
-
const createHeaderIndex = (headerEl) => {
|
|
25
|
-
if (!headerEl) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
const toolbars = headerEl.querySelectorAll('ion-toolbar');
|
|
29
|
-
return {
|
|
30
|
-
el: headerEl,
|
|
31
|
-
toolbars: Array.from(toolbars).map((toolbar) => {
|
|
32
|
-
const ionTitleEl = toolbar.querySelector('ion-title');
|
|
33
|
-
return {
|
|
34
|
-
el: toolbar,
|
|
35
|
-
background: toolbar.shadowRoot.querySelector('.toolbar-background'),
|
|
36
|
-
ionTitleEl,
|
|
37
|
-
innerTitleEl: ionTitleEl ? ionTitleEl.shadowRoot.querySelector('.toolbar-title') : null,
|
|
38
|
-
ionButtonsEl: Array.from(toolbar.querySelectorAll('ion-buttons')),
|
|
39
|
-
};
|
|
40
|
-
}),
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
const handleContentScroll = (scrollEl, scrollHeaderIndex, contentEl) => {
|
|
44
|
-
readTask(() => {
|
|
45
|
-
const scrollTop = scrollEl.scrollTop;
|
|
46
|
-
const scale = clamp(1, 1 + -scrollTop / 500, 1.1);
|
|
47
|
-
// Native refresher should not cause titles to scale
|
|
48
|
-
const nativeRefresher = contentEl.querySelector('ion-refresher.refresher-native');
|
|
49
|
-
if (nativeRefresher === null) {
|
|
50
|
-
writeTask(() => {
|
|
51
|
-
scaleLargeTitles(scrollHeaderIndex.toolbars, scale);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
};
|
|
56
|
-
const setToolbarBackgroundOpacity = (headerEl, opacity) => {
|
|
57
|
-
/**
|
|
58
|
-
* Fading in the backdrop opacity
|
|
59
|
-
* should happen after the large title
|
|
60
|
-
* has collapsed, so it is handled
|
|
61
|
-
* by handleHeaderFade()
|
|
62
|
-
*/
|
|
63
|
-
if (headerEl.collapse === 'fade') {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
if (opacity === undefined) {
|
|
67
|
-
headerEl.style.removeProperty('--opacity-scale');
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
headerEl.style.setProperty('--opacity-scale', opacity.toString());
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
const handleToolbarBorderIntersection = (ev, mainHeaderIndex, scrollTop) => {
|
|
74
|
-
if (!ev[0].isIntersecting) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* There is a bug in Safari where overflow scrolling on a non-body element
|
|
79
|
-
* does not always reset the scrollTop position to 0 when letting go. It will
|
|
80
|
-
* set to 1 once the rubber band effect has ended. This causes the background to
|
|
81
|
-
* appear slightly on certain app setups.
|
|
82
|
-
*
|
|
83
|
-
* Additionally, we check if user is rubber banding (scrolling is negative)
|
|
84
|
-
* as this can mean they are using pull to refresh. Once the refresher starts,
|
|
85
|
-
* the content is transformed which can cause the intersection observer to erroneously
|
|
86
|
-
* fire here as well.
|
|
87
|
-
*/
|
|
88
|
-
const scale = ev[0].intersectionRatio > 0.9 || scrollTop <= 0 ? 0 : ((1 - ev[0].intersectionRatio) * 100) / 75;
|
|
89
|
-
setToolbarBackgroundOpacity(mainHeaderIndex.el, scale === 1 ? undefined : scale);
|
|
90
|
-
};
|
|
91
|
-
/**
|
|
92
|
-
* If toolbars are intersecting, hide the scrollable toolbar content
|
|
93
|
-
* and show the primary toolbar content. If the toolbars are not intersecting,
|
|
94
|
-
* hide the primary toolbar content and show the scrollable toolbar content
|
|
95
|
-
*/
|
|
96
|
-
const handleToolbarIntersection = (ev, // TODO(FW-2832): type (IntersectionObserverEntry[] triggers errors which should be sorted)
|
|
97
|
-
mainHeaderIndex, scrollHeaderIndex, scrollEl) => {
|
|
98
|
-
writeTask(() => {
|
|
99
|
-
const scrollTop = scrollEl.scrollTop;
|
|
100
|
-
handleToolbarBorderIntersection(ev, mainHeaderIndex, scrollTop);
|
|
101
|
-
const event = ev[0];
|
|
102
|
-
const intersection = event.intersectionRect;
|
|
103
|
-
const intersectionArea = intersection.width * intersection.height;
|
|
104
|
-
const rootArea = event.rootBounds.width * event.rootBounds.height;
|
|
105
|
-
const isPageHidden = intersectionArea === 0 && rootArea === 0;
|
|
106
|
-
const leftDiff = Math.abs(intersection.left - event.boundingClientRect.left);
|
|
107
|
-
const rightDiff = Math.abs(intersection.right - event.boundingClientRect.right);
|
|
108
|
-
const isPageTransitioning = intersectionArea > 0 && (leftDiff >= 5 || rightDiff >= 5);
|
|
109
|
-
if (isPageHidden || isPageTransitioning) {
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
if (event.isIntersecting) {
|
|
113
|
-
setHeaderActive(mainHeaderIndex, false);
|
|
114
|
-
setHeaderActive(scrollHeaderIndex);
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
/**
|
|
118
|
-
* There is a bug with IntersectionObserver on Safari
|
|
119
|
-
* where `event.isIntersecting === false` when cancelling
|
|
120
|
-
* a swipe to go back gesture. Checking the intersection
|
|
121
|
-
* x, y, width, and height provides a workaround. This bug
|
|
122
|
-
* does not happen when using Safari + Web Animations,
|
|
123
|
-
* only Safari + CSS Animations.
|
|
124
|
-
*/
|
|
125
|
-
const hasValidIntersection = (intersection.x === 0 && intersection.y === 0) || (intersection.width !== 0 && intersection.height !== 0);
|
|
126
|
-
if (hasValidIntersection && scrollTop > 0) {
|
|
127
|
-
setHeaderActive(mainHeaderIndex);
|
|
128
|
-
setHeaderActive(scrollHeaderIndex, false);
|
|
129
|
-
setToolbarBackgroundOpacity(mainHeaderIndex.el);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
};
|
|
134
|
-
const setHeaderActive = (headerIndex, active = true) => {
|
|
135
|
-
const headerEl = headerIndex.el;
|
|
136
|
-
const toolbars = headerIndex.toolbars;
|
|
137
|
-
const ionTitles = toolbars.map((toolbar) => toolbar.ionTitleEl);
|
|
138
|
-
if (active) {
|
|
139
|
-
headerEl.setAttribute('role', ROLE_BANNER);
|
|
140
|
-
headerEl.classList.remove('header-collapse-condense-inactive');
|
|
141
|
-
ionTitles.forEach((ionTitle) => {
|
|
142
|
-
if (ionTitle) {
|
|
143
|
-
ionTitle.removeAttribute('aria-hidden');
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
/**
|
|
149
|
-
* There can only be one banner landmark per page.
|
|
150
|
-
* By default, all ion-headers have the banner role.
|
|
151
|
-
* This causes an accessibility issue when using a
|
|
152
|
-
* condensed header since there are two ion-headers
|
|
153
|
-
* on the page at once (active and inactive).
|
|
154
|
-
* To solve this, the role needs to be toggled
|
|
155
|
-
* based on which header is active.
|
|
156
|
-
*/
|
|
157
|
-
headerEl.setAttribute('role', ROLE_NONE);
|
|
158
|
-
headerEl.classList.add('header-collapse-condense-inactive');
|
|
159
|
-
/**
|
|
160
|
-
* The small title should only be accessed by screen readers
|
|
161
|
-
* when the large title collapses into the small title due
|
|
162
|
-
* to scrolling.
|
|
163
|
-
*
|
|
164
|
-
* Originally, the header was given `aria-hidden="true"`
|
|
165
|
-
* but this caused issues with screen readers not being
|
|
166
|
-
* able to access any focusable elements within the header.
|
|
167
|
-
*/
|
|
168
|
-
ionTitles.forEach((ionTitle) => {
|
|
169
|
-
if (ionTitle) {
|
|
170
|
-
ionTitle.setAttribute('aria-hidden', 'true');
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
};
|
|
175
|
-
const scaleLargeTitles = (toolbars = [], scale = 1, transition = false) => {
|
|
176
|
-
toolbars.forEach((toolbar) => {
|
|
177
|
-
const ionTitle = toolbar.ionTitleEl;
|
|
178
|
-
const titleDiv = toolbar.innerTitleEl;
|
|
179
|
-
if (!ionTitle || ionTitle.size !== 'large') {
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
titleDiv.style.transition = transition ? TRANSITION : '';
|
|
183
|
-
titleDiv.style.transform = `scale3d(${scale}, ${scale}, 1)`;
|
|
184
|
-
});
|
|
185
|
-
};
|
|
186
|
-
const handleHeaderFade = (scrollEl, baseEl, condenseHeader) => {
|
|
187
|
-
readTask(() => {
|
|
188
|
-
const scrollTop = scrollEl.scrollTop;
|
|
189
|
-
const baseElHeight = baseEl.clientHeight;
|
|
190
|
-
const fadeStart = condenseHeader ? condenseHeader.clientHeight : 0;
|
|
191
|
-
/**
|
|
192
|
-
* If we are using fade header with a condense
|
|
193
|
-
* header, then the toolbar backgrounds should
|
|
194
|
-
* not begin to fade in until the condense
|
|
195
|
-
* header has fully collapsed.
|
|
196
|
-
*
|
|
197
|
-
* Additionally, the main content should not
|
|
198
|
-
* overflow out of the container until the
|
|
199
|
-
* condense header has fully collapsed. When
|
|
200
|
-
* using just the condense header the content
|
|
201
|
-
* should overflow out of the container.
|
|
202
|
-
*/
|
|
203
|
-
if (condenseHeader !== null && scrollTop < fadeStart) {
|
|
204
|
-
baseEl.style.setProperty('--opacity-scale', '0');
|
|
205
|
-
scrollEl.style.setProperty('clip-path', `inset(${baseElHeight}px 0px 0px 0px)`);
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
const distanceToStart = scrollTop - fadeStart;
|
|
209
|
-
const fadeDuration = 10;
|
|
210
|
-
const scale = clamp(0, distanceToStart / fadeDuration, 1);
|
|
211
|
-
writeTask(() => {
|
|
212
|
-
scrollEl.style.removeProperty('clip-path');
|
|
213
|
-
baseEl.style.setProperty('--opacity-scale', scale.toString());
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
};
|
|
217
|
-
/**
|
|
218
|
-
* Get the role type for the ion-header.
|
|
219
|
-
*
|
|
220
|
-
* @param isInsideMenu If ion-header is inside ion-menu.
|
|
221
|
-
* @param isCondensed If ion-header has collapse="condense".
|
|
222
|
-
* @param mode The current mode.
|
|
223
|
-
* @returns 'none' if inside ion-menu or if condensed in md
|
|
224
|
-
* mode, otherwise 'banner'.
|
|
225
|
-
*/
|
|
226
|
-
const getRoleType = (isInsideMenu, isCondensed, mode) => {
|
|
227
|
-
// If the header is inside a menu, it should not have the banner role.
|
|
228
|
-
if (isInsideMenu) {
|
|
229
|
-
return ROLE_NONE;
|
|
230
|
-
}
|
|
231
|
-
/**
|
|
232
|
-
* Only apply role="none" to `md` mode condensed headers
|
|
233
|
-
* since the large header is never shown.
|
|
234
|
-
*/
|
|
235
|
-
if (isCondensed && mode === 'md') {
|
|
236
|
-
return ROLE_NONE;
|
|
237
|
-
}
|
|
238
|
-
// Default to banner role.
|
|
239
|
-
return ROLE_BANNER;
|
|
240
|
-
};
|
|
241
|
-
|
|
242
|
-
const headerIosCss = "ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%;z-index:10}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.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{left:0;right: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:.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-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.header-ios:not(.header-collapse-main):has(~ion-content ion-header.header-ios[collapse=condense],~ion-content ion-header.header-ios.header-collapse-condense){opacity:0}";
|
|
243
|
-
|
|
244
|
-
const headerMdCss = "ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%;z-index:10}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.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{display:none}.header-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}";
|
|
245
|
-
|
|
246
|
-
const Header = /*@__PURE__*/ proxyCustomElement(class Header extends HTMLElement {
|
|
247
|
-
constructor(registerHost) {
|
|
248
|
-
super();
|
|
249
|
-
if (registerHost !== false) {
|
|
250
|
-
this.__registerHost();
|
|
251
|
-
}
|
|
252
|
-
this.inheritedAttributes = {};
|
|
253
|
-
/**
|
|
254
|
-
* If `true`, the header will be translucent.
|
|
255
|
-
* Only applies when the mode is `"ios"` and the device supports
|
|
256
|
-
* [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
|
|
257
|
-
*
|
|
258
|
-
* Note: In order to scroll content behind the header, the `fullscreen`
|
|
259
|
-
* attribute needs to be set on the content.
|
|
260
|
-
*/
|
|
261
|
-
this.translucent = false;
|
|
262
|
-
this.setupFadeHeader = async (contentEl, condenseHeader) => {
|
|
263
|
-
const scrollEl = (this.scrollEl = await getScrollElement(contentEl));
|
|
264
|
-
/**
|
|
265
|
-
* Handle fading of toolbars on scroll
|
|
266
|
-
*/
|
|
267
|
-
this.contentScrollCallback = () => {
|
|
268
|
-
handleHeaderFade(this.scrollEl, this.el, condenseHeader);
|
|
269
|
-
};
|
|
270
|
-
scrollEl.addEventListener('scroll', this.contentScrollCallback);
|
|
271
|
-
handleHeaderFade(this.scrollEl, this.el, condenseHeader);
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
componentWillLoad() {
|
|
275
|
-
this.inheritedAttributes = inheritAriaAttributes(this.el);
|
|
276
|
-
}
|
|
277
|
-
componentDidLoad() {
|
|
278
|
-
this.checkCollapsibleHeader();
|
|
279
|
-
}
|
|
280
|
-
componentDidUpdate() {
|
|
281
|
-
this.checkCollapsibleHeader();
|
|
282
|
-
}
|
|
283
|
-
disconnectedCallback() {
|
|
284
|
-
this.destroyCollapsibleHeader();
|
|
285
|
-
}
|
|
286
|
-
async checkCollapsibleHeader() {
|
|
287
|
-
const mode = getIonMode(this);
|
|
288
|
-
if (mode !== 'ios') {
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
291
|
-
const { collapse } = this;
|
|
292
|
-
const hasCondense = collapse === 'condense';
|
|
293
|
-
const hasFade = collapse === 'fade';
|
|
294
|
-
this.destroyCollapsibleHeader();
|
|
295
|
-
if (hasCondense) {
|
|
296
|
-
const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
|
|
297
|
-
const contentEl = pageEl ? findIonContent(pageEl) : null;
|
|
298
|
-
// Cloned elements are always needed in iOS transition
|
|
299
|
-
writeTask(() => {
|
|
300
|
-
const title = cloneElement('ion-title');
|
|
301
|
-
title.size = 'large';
|
|
302
|
-
cloneElement('ion-back-button');
|
|
303
|
-
});
|
|
304
|
-
await this.setupCondenseHeader(contentEl, pageEl);
|
|
305
|
-
}
|
|
306
|
-
else if (hasFade) {
|
|
307
|
-
const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
|
|
308
|
-
const contentEl = pageEl ? findIonContent(pageEl) : null;
|
|
309
|
-
if (!contentEl) {
|
|
310
|
-
printIonContentErrorMsg(this.el);
|
|
311
|
-
return;
|
|
312
|
-
}
|
|
313
|
-
const condenseHeader = contentEl.querySelector('ion-header[collapse="condense"]');
|
|
314
|
-
await this.setupFadeHeader(contentEl, condenseHeader);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
destroyCollapsibleHeader() {
|
|
318
|
-
if (this.intersectionObserver) {
|
|
319
|
-
this.intersectionObserver.disconnect();
|
|
320
|
-
this.intersectionObserver = undefined;
|
|
321
|
-
}
|
|
322
|
-
if (this.scrollEl && this.contentScrollCallback) {
|
|
323
|
-
this.scrollEl.removeEventListener('scroll', this.contentScrollCallback);
|
|
324
|
-
this.contentScrollCallback = undefined;
|
|
325
|
-
}
|
|
326
|
-
if (this.collapsibleMainHeader) {
|
|
327
|
-
this.collapsibleMainHeader.classList.remove('header-collapse-main');
|
|
328
|
-
this.collapsibleMainHeader = undefined;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
async setupCondenseHeader(contentEl, pageEl) {
|
|
332
|
-
if (!contentEl || !pageEl) {
|
|
333
|
-
printIonContentErrorMsg(this.el);
|
|
334
|
-
return;
|
|
335
|
-
}
|
|
336
|
-
if (typeof IntersectionObserver === 'undefined') {
|
|
337
|
-
return;
|
|
338
|
-
}
|
|
339
|
-
this.scrollEl = await getScrollElement(contentEl);
|
|
340
|
-
const headers = pageEl.querySelectorAll('ion-header');
|
|
341
|
-
this.collapsibleMainHeader = Array.from(headers).find((header) => header.collapse !== 'condense');
|
|
342
|
-
if (!this.collapsibleMainHeader) {
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
const mainHeaderIndex = createHeaderIndex(this.collapsibleMainHeader);
|
|
346
|
-
const scrollHeaderIndex = createHeaderIndex(this.el);
|
|
347
|
-
if (!mainHeaderIndex || !scrollHeaderIndex) {
|
|
348
|
-
return;
|
|
349
|
-
}
|
|
350
|
-
setHeaderActive(mainHeaderIndex, false);
|
|
351
|
-
setToolbarBackgroundOpacity(mainHeaderIndex.el, 0);
|
|
352
|
-
/**
|
|
353
|
-
* Handle interaction between toolbar collapse and
|
|
354
|
-
* showing/hiding content in the primary ion-header
|
|
355
|
-
* as well as progressively showing/hiding the main header
|
|
356
|
-
* border as the top-most toolbar collapses or expands.
|
|
357
|
-
*/
|
|
358
|
-
const toolbarIntersection = (ev) => {
|
|
359
|
-
handleToolbarIntersection(ev, mainHeaderIndex, scrollHeaderIndex, this.scrollEl);
|
|
360
|
-
};
|
|
361
|
-
this.intersectionObserver = new IntersectionObserver(toolbarIntersection, {
|
|
362
|
-
root: contentEl,
|
|
363
|
-
threshold: [0.25, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1],
|
|
364
|
-
});
|
|
365
|
-
this.intersectionObserver.observe(scrollHeaderIndex.toolbars[scrollHeaderIndex.toolbars.length - 1].el);
|
|
366
|
-
/**
|
|
367
|
-
* Handle scaling of large iOS titles and
|
|
368
|
-
* showing/hiding border on last toolbar
|
|
369
|
-
* in primary header
|
|
370
|
-
*/
|
|
371
|
-
this.contentScrollCallback = () => {
|
|
372
|
-
handleContentScroll(this.scrollEl, scrollHeaderIndex, contentEl);
|
|
373
|
-
};
|
|
374
|
-
this.scrollEl.addEventListener('scroll', this.contentScrollCallback);
|
|
375
|
-
writeTask(() => {
|
|
376
|
-
if (this.collapsibleMainHeader !== undefined) {
|
|
377
|
-
this.collapsibleMainHeader.classList.add('header-collapse-main');
|
|
378
|
-
}
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
render() {
|
|
382
|
-
const { translucent, inheritedAttributes } = this;
|
|
383
|
-
const mode = getIonMode(this);
|
|
384
|
-
const collapse = this.collapse || 'none';
|
|
385
|
-
const isCondensed = collapse === 'condense';
|
|
386
|
-
// banner role must be at top level, so remove role if inside a menu
|
|
387
|
-
const roleType = getRoleType(hostContext('ion-menu', this.el), isCondensed, mode);
|
|
388
|
-
return (h(Host, Object.assign({ key: '863c4568cd7b8c0ec55109f193bbbaed68a1346e', role: roleType, class: {
|
|
389
|
-
[mode]: true,
|
|
390
|
-
// Used internally for styling
|
|
391
|
-
[`header-${mode}`]: true,
|
|
392
|
-
[`header-translucent`]: this.translucent,
|
|
393
|
-
[`header-collapse-${collapse}`]: true,
|
|
394
|
-
[`header-translucent-${mode}`]: this.translucent,
|
|
395
|
-
} }, inheritedAttributes), mode === 'ios' && translucent && h("div", { key: '25c3bdce328b0b35607d154c8b8374679313d881', class: "header-background" }), h("slot", { key: 'b44fab0a9be7920b9650da26117c783e751e1702' })));
|
|
396
|
-
}
|
|
397
|
-
get el() { return this; }
|
|
398
|
-
static get style() { return {
|
|
399
|
-
ios: headerIosCss,
|
|
400
|
-
md: headerMdCss
|
|
401
|
-
}; }
|
|
402
|
-
}, [292, "ion-header", {
|
|
403
|
-
"collapse": [1],
|
|
404
|
-
"translucent": [4]
|
|
405
|
-
}]);
|
|
406
|
-
function defineCustomElement() {
|
|
407
|
-
if (typeof customElements === "undefined") {
|
|
408
|
-
return;
|
|
409
|
-
}
|
|
410
|
-
const components = ["ion-header"];
|
|
411
|
-
components.forEach(tagName => { switch (tagName) {
|
|
412
|
-
case "ion-header":
|
|
413
|
-
if (!customElements.get(tagName)) {
|
|
414
|
-
customElements.define(tagName, Header);
|
|
415
|
-
}
|
|
416
|
-
break;
|
|
417
|
-
} });
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
export { Header as H, defineCustomElement as d };
|
|
4
|
+
import{readTask as e,writeTask as o,proxyCustomElement as n,HTMLElement as t,h as i,Host as a,transformTag as s}from"@stencil/core/internal/client";import{g as r,f as l,p as d}from"./index8.js";import{f as c,i as h}from"./helpers.js";import{h as p}from"./theme.js";import{b}from"./ionic-global.js";const u="none",f="banner",m=e=>{const o=document.querySelector(`${e}.ion-cloned-element`);if(null!==o)return o;const n=document.createElement(e);return n.classList.add("ion-cloned-element"),n.style.setProperty("display","none"),document.body.appendChild(n),n},x=e=>{if(!e)return;const o=e.querySelectorAll("ion-toolbar");return{el:e,toolbars:Array.from(o).map((e=>{const o=e.querySelector("ion-title");return{el:e,background:e.shadowRoot.querySelector(".toolbar-background"),ionTitleEl:o,innerTitleEl:o?o.shadowRoot.querySelector(".toolbar-title"):null,ionButtonsEl:Array.from(e.querySelectorAll("ion-buttons"))}}))}},y=(e,o)=>{"fade"!==e.collapse&&(void 0===o?e.style.removeProperty("--opacity-scale"):e.style.setProperty("--opacity-scale",o.toString()))},g=(e,o=!0)=>{const n=e.el,t=e.toolbars.map((e=>e.ionTitleEl));o?(n.setAttribute("role",f),n.classList.remove("header-collapse-condense-inactive"),t.forEach((e=>{e&&e.removeAttribute("aria-hidden")}))):(n.setAttribute("role",u),n.classList.add("header-collapse-condense-inactive"),t.forEach((e=>{e&&e.setAttribute("aria-hidden","true")})))},k=(n,t,i)=>{e((()=>{const e=n.scrollTop,a=t.clientHeight,s=i?i.clientHeight:0;if(null!==i&&e<s)return t.style.setProperty("--opacity-scale","0"),void n.style.setProperty("clip-path",`inset(${a}px 0px 0px 0px)`);const r=c(0,(e-s)/10,1);o((()=>{n.style.removeProperty("clip-path"),t.style.setProperty("--opacity-scale",r.toString())}))}))},v=n(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.inheritedAttributes={},this.translucent=!1,this.setupFadeHeader=async(e,o)=>{const n=this.scrollEl=await r(e);this.contentScrollCallback=()=>{k(this.scrollEl,this.el,o)},n.addEventListener("scroll",this.contentScrollCallback),k(this.scrollEl,this.el,o)}}componentWillLoad(){this.inheritedAttributes=h(this.el)}componentDidLoad(){this.checkCollapsibleHeader()}componentDidUpdate(){this.checkCollapsibleHeader()}disconnectedCallback(){this.destroyCollapsibleHeader()}async checkCollapsibleHeader(){if("ios"!==b(this))return;const{collapse:e}=this,n="condense"===e,t="fade"===e;if(this.destroyCollapsibleHeader(),n){const e=this.el.closest("ion-app,ion-page,.ion-page,page-inner"),n=e?l(e):null;o((()=>{m("ion-title").size="large",m("ion-back-button")})),await this.setupCondenseHeader(n,e)}else if(t){const e=this.el.closest("ion-app,ion-page,.ion-page,page-inner"),o=e?l(e):null;if(!o)return void d(this.el);const n=o.querySelector('ion-header[collapse="condense"]');await this.setupFadeHeader(o,n)}}destroyCollapsibleHeader(){this.intersectionObserver&&(this.intersectionObserver.disconnect(),this.intersectionObserver=void 0),this.scrollEl&&this.contentScrollCallback&&(this.scrollEl.removeEventListener("scroll",this.contentScrollCallback),this.contentScrollCallback=void 0),this.collapsibleMainHeader&&(this.collapsibleMainHeader.classList.remove("header-collapse-main"),this.collapsibleMainHeader=void 0)}async setupCondenseHeader(n,t){if(!n||!t)return void d(this.el);if("undefined"==typeof IntersectionObserver)return;this.scrollEl=await r(n);const i=t.querySelectorAll("ion-header");if(this.collapsibleMainHeader=Array.from(i).find((e=>"condense"!==e.collapse)),!this.collapsibleMainHeader)return;const a=x(this.collapsibleMainHeader),s=x(this.el);a&&s&&(g(a,!1),y(a.el,0),this.intersectionObserver=new IntersectionObserver((e=>{((e,n,t,i)=>{o((()=>{const o=i.scrollTop;((e,o,n)=>{if(!e[0].isIntersecting)return;const t=e[0].intersectionRatio>.9||n<=0?0:100*(1-e[0].intersectionRatio)/75;y(o.el,1===t?void 0:t)})(e,n,o);const a=e[0],s=a.intersectionRect,r=s.width*s.height,l=0===r&&0==a.rootBounds.width*a.rootBounds.height,d=Math.abs(s.left-a.boundingClientRect.left),c=Math.abs(s.right-a.boundingClientRect.right);l||r>0&&(d>=5||c>=5)||(a.isIntersecting?(g(n,!1),g(t)):(0===s.x&&0===s.y||0!==s.width&&0!==s.height)&&o>0&&(g(n),g(t,!1),y(n.el)))}))})(e,a,s,this.scrollEl)}),{root:n,threshold:[.25,.3,.4,.5,.6,.7,.8,.9,1]}),this.intersectionObserver.observe(s.toolbars[s.toolbars.length-1].el),this.contentScrollCallback=()=>{((n,t,i)=>{e((()=>{const e=c(1,1+-n.scrollTop/500,1.1);null===i.querySelector("ion-refresher.refresher-native")&&o((()=>{((e=[],o=1,n=!1)=>{e.forEach((e=>{const t=e.ionTitleEl,i=e.innerTitleEl;t&&"large"===t.size&&(i.style.transition=n?"all 0.2s ease-in-out":"",i.style.transform=`scale3d(${o}, ${o}, 1)`)}))})(t.toolbars,e)}))}))})(this.scrollEl,s,n)},this.scrollEl.addEventListener("scroll",this.contentScrollCallback),o((()=>{void 0!==this.collapsibleMainHeader&&this.collapsibleMainHeader.classList.add("header-collapse-main")})))}render(){const{translucent:e,inheritedAttributes:o}=this,n=b(this),t=this.collapse||"none",s="condense"===t,r=((e,o,n)=>e||o&&"md"===n?u:f)(p("ion-menu",this.el),s,n);return i(a,Object.assign({key:"863c4568cd7b8c0ec55109f193bbbaed68a1346e",role:r,class:{[n]:!0,[`header-${n}`]:!0,"header-translucent":this.translucent,[`header-collapse-${t}`]:!0,[`header-translucent-${n}`]:this.translucent}},o),"ios"===n&&e&&i("div",{key:"25c3bdce328b0b35607d154c8b8374679313d881",class:"header-background"}),i("slot",{key:"b44fab0a9be7920b9650da26117c783e751e1702"}))}get el(){return this}static get style(){return{ios:"ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%;z-index:10}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.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{left:0;right: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:.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-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.header-ios:not(.header-collapse-main):has(~ion-content ion-header.header-ios[collapse=condense],~ion-content ion-header.header-ios.header-collapse-condense){opacity:0}",md:"ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%;z-index:10}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.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{display:none}.header-md.ion-no-border{-webkit-box-shadow:none;box-shadow:none}"}}},[292,"ion-header",{collapse:[1],translucent:[4]}]);function w(){"undefined"!=typeof customElements&&["ion-header"].forEach((e=>{"ion-header"===e&&(customElements.get(s(e))||customElements.define(s(e),v))}))}export{v as H,w as d}
|